2022-07-31 02:14:22 +00:00
( global [ "webpackJsonp" ] = global [ "webpackJsonp" ] || [ ] ) . push ( [ [ "common/vendor" ] , {
/***/ 1 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / node _modules / @ dcloudio / uni - mp - weixin / dist / index . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( global ) { Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . createApp = createApp ; exports . createComponent = createComponent ; exports . createPage = createPage ; exports . createPlugin = createPlugin ; exports . createSubpackageApp = createSubpackageApp ; exports . default = void 0 ; var _uniI18n = _ _webpack _require _ _ ( /*! @dcloudio/uni-i18n */ 3 ) ;
var _vue = _interopRequireDefault ( _ _webpack _require _ _ ( /*! vue */ 4 ) ) ; function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; } function ownKeys ( object , enumerableOnly ) { var keys = Object . keys ( object ) ; if ( Object . getOwnPropertySymbols ) { var symbols = Object . getOwnPropertySymbols ( object ) ; if ( enumerableOnly ) symbols = symbols . filter ( function ( sym ) { return Object . getOwnPropertyDescriptor ( object , sym ) . enumerable ; } ) ; keys . push . apply ( keys , symbols ) ; } return keys ; } function _objectSpread ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] != null ? arguments [ i ] : { } ; if ( i % 2 ) { ownKeys ( Object ( source ) , true ) . forEach ( function ( key ) { _defineProperty ( target , key , source [ key ] ) ; } ) ; } else if ( Object . getOwnPropertyDescriptors ) { Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ; } else { ownKeys ( Object ( source ) ) . forEach ( function ( key ) { Object . defineProperty ( target , key , Object . getOwnPropertyDescriptor ( source , key ) ) ; } ) ; } } return target ; } function _slicedToArray ( arr , i ) { return _arrayWithHoles ( arr ) || _iterableToArrayLimit ( arr , i ) || _unsupportedIterableToArray ( arr , i ) || _nonIterableRest ( ) ; } function _nonIterableRest ( ) { throw new TypeError ( "Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; } function _iterableToArrayLimit ( arr , i ) { if ( typeof Symbol === "undefined" || ! ( Symbol . iterator in Object ( arr ) ) ) return ; var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] != null ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; } function _arrayWithHoles ( arr ) { if ( Array . isArray ( arr ) ) return arr ; } function _defineProperty ( obj , key , value ) { if ( key in obj ) { Object . defineProperty ( obj , key , { value : value , enumerable : true , configurable : true , writable : true } ) ; } else { obj [ key ] = value ; } return obj ; } function _toConsumableArray ( arr ) { return _arrayWithoutHoles ( arr ) || _iterableToArray ( arr ) || _unsupportedIterableToArray ( arr ) || _nonIterableSpread ( ) ; } function _nonIterableSpread ( ) { throw new TypeError ( "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; } function _unsupportedIterableToArray ( o , minLen ) { if ( ! o ) return ; if ( typeof o === "string" ) return _arrayLikeToArray ( o , minLen ) ; var n = Object . prototype . toString . call ( o ) . slice ( 8 , - 1 ) ; if ( n === "Object" && o . constructor ) n = o . constructor . name ; if ( n === "Map" || n === "Set" ) return Array . from ( o ) ; if ( n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ . test ( n ) ) return _arrayLikeToArray ( o , minLen ) ; } function _iterableToArray ( iter ) { if ( typeof Symbol !== "undefined" && Symbol . iterator in Object ( iter ) ) return Array . from ( iter ) ; } function _arrayWithoutHoles ( arr ) { if ( Array . isArray ( arr ) ) return _arrayLikeToArray ( arr ) ; } function _arrayLikeToArray ( arr , len ) { if ( len == null || len > arr . length ) len = arr . length ; for ( var i = 0 , arr2 = new Array ( len ) ; i < len ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; }
var realAtob ;
var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' ;
var b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/ ;
if ( typeof atob !== 'function' ) {
realAtob = function realAtob ( str ) {
str = String ( str ) . replace ( /[\t\n\f\r ]+/g , '' ) ;
if ( ! b64re . test ( str ) ) { throw new Error ( "Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded." ) ; }
// Adding the padding if missing, for semplicity
str += '==' . slice ( 2 - ( str . length & 3 ) ) ;
var bitmap ; var result = '' ; var r1 ; var r2 ; var i = 0 ;
for ( ; i < str . length ; ) {
bitmap = b64 . indexOf ( str . charAt ( i ++ ) ) << 18 | b64 . indexOf ( str . charAt ( i ++ ) ) << 12 |
( r1 = b64 . indexOf ( str . charAt ( i ++ ) ) ) << 6 | ( r2 = b64 . indexOf ( str . charAt ( i ++ ) ) ) ;
result += r1 === 64 ? String . fromCharCode ( bitmap >> 16 & 255 ) :
r2 === 64 ? String . fromCharCode ( bitmap >> 16 & 255 , bitmap >> 8 & 255 ) :
String . fromCharCode ( bitmap >> 16 & 255 , bitmap >> 8 & 255 , bitmap & 255 ) ;
}
return result ;
} ;
} else {
// 注意atob只能在全局对象上调用, 例如: `const Base64 = {atob};Base64.atob('xxxx')`是错误的用法
realAtob = atob ;
}
function b64DecodeUnicode ( str ) {
return decodeURIComponent ( realAtob ( str ) . split ( '' ) . map ( function ( c ) {
return '%' + ( '00' + c . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 2 ) ;
} ) . join ( '' ) ) ;
}
function getCurrentUserInfo ( ) {
var token = wx . getStorageSync ( 'uni_id_token' ) || '' ;
var tokenArr = token . split ( '.' ) ;
if ( ! token || tokenArr . length !== 3 ) {
return {
uid : null ,
role : [ ] ,
permission : [ ] ,
tokenExpired : 0 } ;
}
var userInfo ;
try {
userInfo = JSON . parse ( b64DecodeUnicode ( tokenArr [ 1 ] ) ) ;
} catch ( error ) {
throw new Error ( '获取当前用户信息出错,详细错误信息为:' + error . message ) ;
}
userInfo . tokenExpired = userInfo . exp * 1000 ;
delete userInfo . exp ;
delete userInfo . iat ;
return userInfo ;
}
function uniIdMixin ( Vue ) {
Vue . prototype . uniIDHasRole = function ( roleId ) { var _getCurrentUserInfo =
getCurrentUserInfo ( ) , role = _getCurrentUserInfo . role ;
return role . indexOf ( roleId ) > - 1 ;
} ;
Vue . prototype . uniIDHasPermission = function ( permissionId ) { var _getCurrentUserInfo2 =
getCurrentUserInfo ( ) , permission = _getCurrentUserInfo2 . permission ;
return this . uniIDHasRole ( 'admin' ) || permission . indexOf ( permissionId ) > - 1 ;
} ;
Vue . prototype . uniIDTokenValid = function ( ) { var _getCurrentUserInfo3 =
getCurrentUserInfo ( ) , tokenExpired = _getCurrentUserInfo3 . tokenExpired ;
return tokenExpired > Date . now ( ) ;
} ;
}
var _toString = Object . prototype . toString ;
var hasOwnProperty = Object . prototype . hasOwnProperty ;
function isFn ( fn ) {
return typeof fn === 'function' ;
}
function isStr ( str ) {
return typeof str === 'string' ;
}
function isPlainObject ( obj ) {
return _toString . call ( obj ) === '[object Object]' ;
}
function hasOwn ( obj , key ) {
return hasOwnProperty . call ( obj , key ) ;
}
function noop ( ) { }
/ * *
* Create a cached version of a pure function .
* /
function cached ( fn ) {
var cache = Object . create ( null ) ;
return function cachedFn ( str ) {
var hit = cache [ str ] ;
return hit || ( cache [ str ] = fn ( str ) ) ;
} ;
}
/ * *
* Camelize a hyphen - delimited string .
* /
var camelizeRE = /-(\w)/g ;
var camelize = cached ( function ( str ) {
return str . replace ( camelizeRE , function ( _ , c ) { return c ? c . toUpperCase ( ) : '' ; } ) ;
} ) ;
function sortObject ( obj ) {
var sortObj = { } ;
if ( isPlainObject ( obj ) ) {
Object . keys ( obj ) . sort ( ) . forEach ( function ( key ) {
sortObj [ key ] = obj [ key ] ;
} ) ;
}
return ! Object . keys ( sortObj ) ? obj : sortObj ;
}
var HOOKS = [
'invoke' ,
'success' ,
'fail' ,
'complete' ,
'returnValue' ] ;
var globalInterceptors = { } ;
var scopedInterceptors = { } ;
function mergeHook ( parentVal , childVal ) {
var res = childVal ?
parentVal ?
parentVal . concat ( childVal ) :
Array . isArray ( childVal ) ?
childVal : [ childVal ] :
parentVal ;
return res ?
dedupeHooks ( res ) :
res ;
}
function dedupeHooks ( hooks ) {
var res = [ ] ;
for ( var i = 0 ; i < hooks . length ; i ++ ) {
if ( res . indexOf ( hooks [ i ] ) === - 1 ) {
res . push ( hooks [ i ] ) ;
}
}
return res ;
}
function removeHook ( hooks , hook ) {
var index = hooks . indexOf ( hook ) ;
if ( index !== - 1 ) {
hooks . splice ( index , 1 ) ;
}
}
function mergeInterceptorHook ( interceptor , option ) {
Object . keys ( option ) . forEach ( function ( hook ) {
if ( HOOKS . indexOf ( hook ) !== - 1 && isFn ( option [ hook ] ) ) {
interceptor [ hook ] = mergeHook ( interceptor [ hook ] , option [ hook ] ) ;
}
} ) ;
}
function removeInterceptorHook ( interceptor , option ) {
if ( ! interceptor || ! option ) {
return ;
}
Object . keys ( option ) . forEach ( function ( hook ) {
if ( HOOKS . indexOf ( hook ) !== - 1 && isFn ( option [ hook ] ) ) {
removeHook ( interceptor [ hook ] , option [ hook ] ) ;
}
} ) ;
}
function addInterceptor ( method , option ) {
if ( typeof method === 'string' && isPlainObject ( option ) ) {
mergeInterceptorHook ( scopedInterceptors [ method ] || ( scopedInterceptors [ method ] = { } ) , option ) ;
} else if ( isPlainObject ( method ) ) {
mergeInterceptorHook ( globalInterceptors , method ) ;
}
}
function removeInterceptor ( method , option ) {
if ( typeof method === 'string' ) {
if ( isPlainObject ( option ) ) {
removeInterceptorHook ( scopedInterceptors [ method ] , option ) ;
} else {
delete scopedInterceptors [ method ] ;
}
} else if ( isPlainObject ( method ) ) {
removeInterceptorHook ( globalInterceptors , method ) ;
}
}
function wrapperHook ( hook ) {
return function ( data ) {
return hook ( data ) || data ;
} ;
}
function isPromise ( obj ) {
return ! ! obj && ( typeof obj === 'object' || typeof obj === 'function' ) && typeof obj . then === 'function' ;
}
function queue ( hooks , data ) {
var promise = false ;
for ( var i = 0 ; i < hooks . length ; i ++ ) {
var hook = hooks [ i ] ;
if ( promise ) {
promise = Promise . resolve ( wrapperHook ( hook ) ) ;
} else {
var res = hook ( data ) ;
if ( isPromise ( res ) ) {
promise = Promise . resolve ( res ) ;
}
if ( res === false ) {
return {
then : function then ( ) { } } ;
}
}
}
return promise || {
then : function then ( callback ) {
return callback ( data ) ;
} } ;
}
function wrapperOptions ( interceptor ) { var options = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ;
[ 'success' , 'fail' , 'complete' ] . forEach ( function ( name ) {
if ( Array . isArray ( interceptor [ name ] ) ) {
var oldCallback = options [ name ] ;
options [ name ] = function callbackInterceptor ( res ) {
queue ( interceptor [ name ] , res ) . then ( function ( res ) {
/* eslint-disable no-mixed-operators */
return isFn ( oldCallback ) && oldCallback ( res ) || res ;
} ) ;
} ;
}
} ) ;
return options ;
}
function wrapperReturnValue ( method , returnValue ) {
var returnValueHooks = [ ] ;
if ( Array . isArray ( globalInterceptors . returnValue ) ) {
returnValueHooks . push . apply ( returnValueHooks , _toConsumableArray ( globalInterceptors . returnValue ) ) ;
}
var interceptor = scopedInterceptors [ method ] ;
if ( interceptor && Array . isArray ( interceptor . returnValue ) ) {
returnValueHooks . push . apply ( returnValueHooks , _toConsumableArray ( interceptor . returnValue ) ) ;
}
returnValueHooks . forEach ( function ( hook ) {
returnValue = hook ( returnValue ) || returnValue ;
} ) ;
return returnValue ;
}
function getApiInterceptorHooks ( method ) {
var interceptor = Object . create ( null ) ;
Object . keys ( globalInterceptors ) . forEach ( function ( hook ) {
if ( hook !== 'returnValue' ) {
interceptor [ hook ] = globalInterceptors [ hook ] . slice ( ) ;
}
} ) ;
var scopedInterceptor = scopedInterceptors [ method ] ;
if ( scopedInterceptor ) {
Object . keys ( scopedInterceptor ) . forEach ( function ( hook ) {
if ( hook !== 'returnValue' ) {
interceptor [ hook ] = ( interceptor [ hook ] || [ ] ) . concat ( scopedInterceptor [ hook ] ) ;
}
} ) ;
}
return interceptor ;
}
function invokeApi ( method , api , options ) { for ( var _len = arguments . length , params = new Array ( _len > 3 ? _len - 3 : 0 ) , _key = 3 ; _key < _len ; _key ++ ) { params [ _key - 3 ] = arguments [ _key ] ; }
var interceptor = getApiInterceptorHooks ( method ) ;
if ( interceptor && Object . keys ( interceptor ) . length ) {
if ( Array . isArray ( interceptor . invoke ) ) {
var res = queue ( interceptor . invoke , options ) ;
return res . then ( function ( options ) {
return api . apply ( void 0 , [ wrapperOptions ( interceptor , options ) ] . concat ( params ) ) ;
} ) ;
} else {
return api . apply ( void 0 , [ wrapperOptions ( interceptor , options ) ] . concat ( params ) ) ;
}
}
return api . apply ( void 0 , [ options ] . concat ( params ) ) ;
}
var promiseInterceptor = {
returnValue : function returnValue ( res ) {
if ( ! isPromise ( res ) ) {
return res ;
}
return new Promise ( function ( resolve , reject ) {
res . then ( function ( res ) {
if ( res [ 0 ] ) {
reject ( res [ 0 ] ) ;
} else {
resolve ( res [ 1 ] ) ;
}
} ) ;
} ) ;
} } ;
var SYNC _API _RE =
2022-08-03 03:20:44 +00:00
/^\$|Window$|WindowStyle$|sendHostEvent|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getLocale|setLocale|invokePushCallback|getWindowInfo|getDeviceInfo|getAppBaseInfo/ ;
2022-07-31 02:14:22 +00:00
var CONTEXT _API _RE = /^create|Manager$/ ;
// Context例外情况
var CONTEXT _API _RE _EXC = [ 'createBLEConnection' ] ;
// 同步例外情况
2022-08-03 03:20:44 +00:00
var ASYNC _API = [ 'createBLEConnection' ] ;
2022-07-31 02:14:22 +00:00
var CALLBACK _API _RE = /^on|^off/ ;
function isContextApi ( name ) {
return CONTEXT _API _RE . test ( name ) && CONTEXT _API _RE _EXC . indexOf ( name ) === - 1 ;
}
function isSyncApi ( name ) {
return SYNC _API _RE . test ( name ) && ASYNC _API . indexOf ( name ) === - 1 ;
}
function isCallbackApi ( name ) {
return CALLBACK _API _RE . test ( name ) && name !== 'onPush' ;
}
function handlePromise ( promise ) {
return promise . then ( function ( data ) {
return [ null , data ] ;
} ) .
catch ( function ( err ) { return [ err ] ; } ) ;
}
function shouldPromise ( name ) {
if (
isContextApi ( name ) ||
isSyncApi ( name ) ||
isCallbackApi ( name ) )
{
return false ;
}
return true ;
}
/* eslint-disable no-extend-native */
if ( ! Promise . prototype . finally ) {
Promise . prototype . finally = function ( callback ) {
var promise = this . constructor ;
return this . then (
function ( value ) { return promise . resolve ( callback ( ) ) . then ( function ( ) { return value ; } ) ; } ,
function ( reason ) { return promise . resolve ( callback ( ) ) . then ( function ( ) {
throw reason ;
} ) ; } ) ;
} ;
}
function promisify ( name , api ) {
if ( ! shouldPromise ( name ) ) {
return api ;
}
return function promiseApi ( ) { var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ; for ( var _len2 = arguments . length , params = new Array ( _len2 > 1 ? _len2 - 1 : 0 ) , _key2 = 1 ; _key2 < _len2 ; _key2 ++ ) { params [ _key2 - 1 ] = arguments [ _key2 ] ; }
if ( isFn ( options . success ) || isFn ( options . fail ) || isFn ( options . complete ) ) {
return wrapperReturnValue ( name , invokeApi . apply ( void 0 , [ name , api , options ] . concat ( params ) ) ) ;
}
return wrapperReturnValue ( name , handlePromise ( new Promise ( function ( resolve , reject ) {
invokeApi . apply ( void 0 , [ name , api , Object . assign ( { } , options , {
success : resolve ,
fail : reject } ) ] . concat (
params ) ) ;
} ) ) ) ;
} ;
}
var EPS = 1e-4 ;
var BASE _DEVICE _WIDTH = 750 ;
var isIOS = false ;
var deviceWidth = 0 ;
var deviceDPR = 0 ;
function checkDeviceWidth ( ) { var _wx$getSystemInfoSync =
wx . getSystemInfoSync ( ) , platform = _wx$getSystemInfoSync . platform , pixelRatio = _wx$getSystemInfoSync . pixelRatio , windowWidth = _wx$getSystemInfoSync . windowWidth ; // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni
deviceWidth = windowWidth ;
deviceDPR = pixelRatio ;
isIOS = platform === 'ios' ;
}
function upx2px ( number , newDeviceWidth ) {
if ( deviceWidth === 0 ) {
checkDeviceWidth ( ) ;
}
number = Number ( number ) ;
if ( number === 0 ) {
return 0 ;
}
var result = number / BASE _DEVICE _WIDTH * ( newDeviceWidth || deviceWidth ) ;
if ( result < 0 ) {
result = - result ;
}
result = Math . floor ( result + EPS ) ;
if ( result === 0 ) {
if ( deviceDPR === 1 || ! isIOS ) {
result = 1 ;
} else {
result = 0.5 ;
}
}
return number < 0 ? - result : result ;
}
var LOCALE _ZH _HANS = 'zh-Hans' ;
var LOCALE _ZH _HANT = 'zh-Hant' ;
var LOCALE _EN = 'en' ;
var LOCALE _FR = 'fr' ;
var LOCALE _ES = 'es' ;
var messages = { } ;
var locale ;
{
locale = normalizeLocale ( wx . getSystemInfoSync ( ) . language ) || LOCALE _EN ;
}
function initI18nMessages ( ) {
if ( ! isEnableLocale ( ) ) {
return ;
}
var localeKeys = Object . keys ( _ _uniConfig . locales ) ;
if ( localeKeys . length ) {
localeKeys . forEach ( function ( locale ) {
var curMessages = messages [ locale ] ;
var userMessages = _ _uniConfig . locales [ locale ] ;
if ( curMessages ) {
Object . assign ( curMessages , userMessages ) ;
} else {
messages [ locale ] = userMessages ;
}
} ) ;
}
}
initI18nMessages ( ) ;
var i18n = ( 0 , _uniI18n . initVueI18n ) (
locale ,
{ } ) ;
var t = i18n . t ;
var i18nMixin = i18n . mixin = {
beforeCreate : function beforeCreate ( ) { var _this = this ;
var unwatch = i18n . i18n . watchLocale ( function ( ) {
_this . $forceUpdate ( ) ;
} ) ;
this . $once ( 'hook:beforeDestroy' , function ( ) {
unwatch ( ) ;
} ) ;
} ,
methods : {
$$t : function $$t ( key , values ) {
return t ( key , values ) ;
} } } ;
var setLocale = i18n . setLocale ;
var getLocale = i18n . getLocale ;
function initAppLocale ( Vue , appVm , locale ) {
var state = Vue . observable ( {
locale : locale || i18n . getLocale ( ) } ) ;
var localeWatchers = [ ] ;
appVm . $watchLocale = function ( fn ) {
localeWatchers . push ( fn ) ;
} ;
Object . defineProperty ( appVm , '$locale' , {
get : function get ( ) {
return state . locale ;
} ,
set : function set ( v ) {
state . locale = v ;
localeWatchers . forEach ( function ( watch ) { return watch ( v ) ; } ) ;
} } ) ;
}
function isEnableLocale ( ) {
return typeof _ _uniConfig !== 'undefined' && _ _uniConfig . locales && ! ! Object . keys ( _ _uniConfig . locales ) . length ;
}
function include ( str , parts ) {
return ! ! parts . find ( function ( part ) { return str . indexOf ( part ) !== - 1 ; } ) ;
}
function startsWith ( str , parts ) {
return parts . find ( function ( part ) { return str . indexOf ( part ) === 0 ; } ) ;
}
function normalizeLocale ( locale , messages ) {
if ( ! locale ) {
return ;
}
locale = locale . trim ( ) . replace ( /_/g , '-' ) ;
if ( messages && messages [ locale ] ) {
return locale ;
}
locale = locale . toLowerCase ( ) ;
if ( locale === 'chinese' ) {
// 支付宝
return LOCALE _ZH _HANS ;
}
if ( locale . indexOf ( 'zh' ) === 0 ) {
if ( locale . indexOf ( '-hans' ) > - 1 ) {
return LOCALE _ZH _HANS ;
}
if ( locale . indexOf ( '-hant' ) > - 1 ) {
return LOCALE _ZH _HANT ;
}
if ( include ( locale , [ '-tw' , '-hk' , '-mo' , '-cht' ] ) ) {
return LOCALE _ZH _HANT ;
}
return LOCALE _ZH _HANS ;
}
var lang = startsWith ( locale , [ LOCALE _EN , LOCALE _FR , LOCALE _ES ] ) ;
if ( lang ) {
return lang ;
}
}
// export function initI18n() {
// const localeKeys = Object.keys(__uniConfig.locales || {})
// if (localeKeys.length) {
// localeKeys.forEach((locale) =>
// i18n.add(locale, __uniConfig.locales[locale])
// )
// }
// }
function getLocale$1 ( ) {
// 优先使用 $locale
var app = getApp ( {
allowDefault : true } ) ;
if ( app && app . $vm ) {
return app . $vm . $locale ;
}
return normalizeLocale ( wx . getSystemInfoSync ( ) . language ) || LOCALE _EN ;
}
function setLocale$1 ( locale ) {
var app = getApp ( ) ;
if ( ! app ) {
return false ;
}
var oldLocale = app . $vm . $locale ;
if ( oldLocale !== locale ) {
app . $vm . $locale = locale ;
onLocaleChangeCallbacks . forEach ( function ( fn ) { return fn ( {
locale : locale } ) ; } ) ;
return true ;
}
return false ;
}
var onLocaleChangeCallbacks = [ ] ;
function onLocaleChange ( fn ) {
if ( onLocaleChangeCallbacks . indexOf ( fn ) === - 1 ) {
onLocaleChangeCallbacks . push ( fn ) ;
}
}
if ( typeof global !== 'undefined' ) {
global . getLocale = getLocale$1 ;
}
var interceptors = {
promiseInterceptor : promiseInterceptor } ;
var baseApi = /*#__PURE__*/ Object . freeze ( {
_ _proto _ _ : null ,
upx2px : upx2px ,
getLocale : getLocale$1 ,
setLocale : setLocale$1 ,
onLocaleChange : onLocaleChange ,
addInterceptor : addInterceptor ,
removeInterceptor : removeInterceptor ,
interceptors : interceptors } ) ;
function findExistsPageIndex ( url ) {
var pages = getCurrentPages ( ) ;
var len = pages . length ;
while ( len -- ) {
var page = pages [ len ] ;
if ( page . $page && page . $page . fullPath === url ) {
return len ;
}
}
return - 1 ;
}
var redirectTo = {
name : function name ( fromArgs ) {
if ( fromArgs . exists === 'back' && fromArgs . delta ) {
return 'navigateBack' ;
}
return 'redirectTo' ;
} ,
args : function args ( fromArgs ) {
if ( fromArgs . exists === 'back' && fromArgs . url ) {
var existsPageIndex = findExistsPageIndex ( fromArgs . url ) ;
if ( existsPageIndex !== - 1 ) {
var delta = getCurrentPages ( ) . length - 1 - existsPageIndex ;
if ( delta > 0 ) {
fromArgs . delta = delta ;
}
}
}
} } ;
var previewImage = {
args : function args ( fromArgs ) {
var currentIndex = parseInt ( fromArgs . current ) ;
if ( isNaN ( currentIndex ) ) {
return ;
}
var urls = fromArgs . urls ;
if ( ! Array . isArray ( urls ) ) {
return ;
}
var len = urls . length ;
if ( ! len ) {
return ;
}
if ( currentIndex < 0 ) {
currentIndex = 0 ;
} else if ( currentIndex >= len ) {
currentIndex = len - 1 ;
}
if ( currentIndex > 0 ) {
fromArgs . current = urls [ currentIndex ] ;
fromArgs . urls = urls . filter (
function ( item , index ) { return index < currentIndex ? item !== urls [ currentIndex ] : true ; } ) ;
} else {
fromArgs . current = urls [ 0 ] ;
}
return {
indicator : false ,
loop : false } ;
} } ;
var UUID _KEY = '__DC_STAT_UUID' ;
var deviceId ;
function useDeviceId ( result ) {
deviceId = deviceId || wx . getStorageSync ( UUID _KEY ) ;
if ( ! deviceId ) {
deviceId = Date . now ( ) + '' + Math . floor ( Math . random ( ) * 1e7 ) ;
wx . setStorage ( {
key : UUID _KEY ,
data : deviceId } ) ;
}
result . deviceId = deviceId ;
}
function addSafeAreaInsets ( result ) {
if ( result . safeArea ) {
var safeArea = result . safeArea ;
result . safeAreaInsets = {
top : safeArea . top ,
left : safeArea . left ,
right : result . windowWidth - safeArea . right ,
bottom : result . screenHeight - safeArea . bottom } ;
}
}
function populateParameters ( result ) { var _result$brand =
result . brand , brand = _result$brand === void 0 ? '' : _result$brand , _result$model = result . model , model = _result$model === void 0 ? '' : _result$model , _result$system = result . system , system = _result$system === void 0 ? '' : _result$system , _result$language = result . language , language = _result$language === void 0 ? '' : _result$language , theme = result . theme , version = result . version , platform = result . platform , fontSizeSetting = result . fontSizeSetting , SDKVersion = result . SDKVersion , pixelRatio = result . pixelRatio , deviceOrientation = result . deviceOrientation ;
// const isQuickApp = "mp-weixin".indexOf('quickapp-webview') !== -1
// osName osVersion
var osName = '' ;
var osVersion = '' ;
{
osName = system . split ( ' ' ) [ 0 ] || '' ;
osVersion = system . split ( ' ' ) [ 1 ] || '' ;
}
var hostVersion = version ;
// deviceType
var deviceType = getGetDeviceType ( result , model ) ;
// deviceModel
var deviceBrand = getDeviceBrand ( brand ) ;
// hostName
var _hostName = getHostName ( result ) ;
// deviceOrientation
var _deviceOrientation = deviceOrientation ; // 仅 微信 百度 支持
// devicePixelRatio
var _devicePixelRatio = pixelRatio ;
// SDKVersion
var _SDKVersion = SDKVersion ;
// hostLanguage
var hostLanguage = language . replace ( /_/g , '-' ) ;
// wx.getAccountInfoSync
var parameters = {
appId : "__UNI__768F35C" ,
appName : "app适配微信小程序" ,
appVersion : "1.0.0" ,
appVersionCode : "100" ,
appLanguage : getAppLanguage ( hostLanguage ) ,
2022-08-03 03:20:44 +00:00
uniCompileVersion : "3.4.18" ,
uniRuntimeVersion : "3.4.18" ,
2022-07-31 02:14:22 +00:00
uniPlatform : undefined || "mp-weixin" ,
deviceBrand : deviceBrand ,
deviceModel : model ,
deviceType : deviceType ,
devicePixelRatio : _devicePixelRatio ,
deviceOrientation : _deviceOrientation ,
osName : osName . toLocaleLowerCase ( ) ,
osVersion : osVersion ,
hostTheme : theme ,
hostVersion : hostVersion ,
hostLanguage : hostLanguage ,
hostName : _hostName ,
hostSDKVersion : _SDKVersion ,
hostFontSizeSetting : fontSizeSetting ,
windowTop : 0 ,
windowBottom : 0 ,
// TODO
osLanguage : undefined ,
osTheme : undefined ,
ua : undefined ,
hostPackageName : undefined ,
browserName : undefined ,
browserVersion : undefined } ;
Object . assign ( result , parameters ) ;
}
function getGetDeviceType ( result , model ) {
var deviceType = result . deviceType || 'phone' ;
{
var deviceTypeMaps = {
ipad : 'pad' ,
windows : 'pc' ,
mac : 'pc' } ;
var deviceTypeMapsKeys = Object . keys ( deviceTypeMaps ) ;
var _model = model . toLocaleLowerCase ( ) ;
for ( var index = 0 ; index < deviceTypeMapsKeys . length ; index ++ ) {
var _m = deviceTypeMapsKeys [ index ] ;
if ( _model . indexOf ( _m ) !== - 1 ) {
deviceType = deviceTypeMaps [ _m ] ;
break ;
}
}
}
return deviceType ;
}
function getDeviceBrand ( brand ) {
var deviceBrand = brand ;
if ( deviceBrand ) {
deviceBrand = brand . toLocaleLowerCase ( ) ;
}
return deviceBrand ;
}
function getAppLanguage ( defaultLanguage ) {
return getLocale$1 ?
getLocale$1 ( ) :
defaultLanguage ;
}
function getHostName ( result ) {
var _platform = 'WeChat' ;
var _hostName = result . hostName || _platform ; // mp-jd
{
if ( result . environment ) {
_hostName = result . environment ;
} else if ( result . host && result . host . env ) {
_hostName = result . host . env ;
}
}
return _hostName ;
}
var getSystemInfo = {
returnValue : function returnValue ( result ) {
useDeviceId ( result ) ;
addSafeAreaInsets ( result ) ;
populateParameters ( result ) ;
} } ;
var showActionSheet = {
args : function args ( fromArgs ) {
if ( typeof fromArgs === 'object' ) {
fromArgs . alertText = fromArgs . title ;
}
} } ;
var getAppBaseInfo = {
returnValue : function returnValue ( result ) { var _result =
result , version = _result . version , language = _result . language , SDKVersion = _result . SDKVersion , theme = _result . theme ;
var _hostName = getHostName ( result ) ;
var hostLanguage = language . replace ( '_' , '-' ) ;
result = sortObject ( Object . assign ( result , {
appId : "__UNI__768F35C" ,
appName : "app适配微信小程序" ,
appVersion : "1.0.0" ,
appVersionCode : "100" ,
appLanguage : getAppLanguage ( hostLanguage ) ,
hostVersion : version ,
hostLanguage : hostLanguage ,
hostName : _hostName ,
hostSDKVersion : SDKVersion ,
hostTheme : theme } ) ) ;
} } ;
var getDeviceInfo = {
returnValue : function returnValue ( result ) { var _result2 =
result , brand = _result2 . brand , model = _result2 . model ;
var deviceType = getGetDeviceType ( result , model ) ;
var deviceBrand = getDeviceBrand ( brand ) ;
useDeviceId ( result ) ;
result = sortObject ( Object . assign ( result , {
deviceType : deviceType ,
deviceBrand : deviceBrand ,
deviceModel : model } ) ) ;
} } ;
var getWindowInfo = {
returnValue : function returnValue ( result ) {
addSafeAreaInsets ( result ) ;
result = sortObject ( Object . assign ( result , {
windowTop : 0 ,
windowBottom : 0 } ) ) ;
} } ;
// import navigateTo from 'uni-helpers/navigate-to'
var protocols = {
redirectTo : redirectTo ,
// navigateTo, // 由于在微信开发者工具的页面参数, 会显示__id__参数, 因此暂时关闭mp-weixin对于navigateTo的AOP
previewImage : previewImage ,
getSystemInfo : getSystemInfo ,
getSystemInfoSync : getSystemInfo ,
showActionSheet : showActionSheet ,
getAppBaseInfo : getAppBaseInfo ,
getDeviceInfo : getDeviceInfo ,
2022-08-03 03:20:44 +00:00
getWindowInfo : getWindowInfo } ;
2022-07-31 02:14:22 +00:00
var todos = [
'vibrate' ,
'preloadPage' ,
'unPreloadPage' ,
'loadSubPackage' ] ;
var canIUses = [ ] ;
var CALLBACKS = [ 'success' , 'fail' , 'cancel' , 'complete' ] ;
function processCallback ( methodName , method , returnValue ) {
return function ( res ) {
return method ( processReturnValue ( methodName , res , returnValue ) ) ;
} ;
}
function processArgs ( methodName , fromArgs ) { var argsOption = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : { } ; var returnValue = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : { } ; var keepFromArgs = arguments . length > 4 && arguments [ 4 ] !== undefined ? arguments [ 4 ] : false ;
if ( isPlainObject ( fromArgs ) ) { // 一般 api 的参数解析
var toArgs = keepFromArgs === true ? fromArgs : { } ; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值
if ( isFn ( argsOption ) ) {
argsOption = argsOption ( fromArgs , toArgs ) || { } ;
}
for ( var key in fromArgs ) {
if ( hasOwn ( argsOption , key ) ) {
var keyOption = argsOption [ key ] ;
if ( isFn ( keyOption ) ) {
keyOption = keyOption ( fromArgs [ key ] , fromArgs , toArgs ) ;
}
if ( ! keyOption ) { // 不支持的参数
console . warn ( "The '" . concat ( methodName , "' method of platform '\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F' does not support option '" ) . concat ( key , "'" ) ) ;
} else if ( isStr ( keyOption ) ) { // 重写参数 key
toArgs [ keyOption ] = fromArgs [ key ] ;
} else if ( isPlainObject ( keyOption ) ) { // {name:newName,value:value}可重新指定参数 key:value
toArgs [ keyOption . name ? keyOption . name : key ] = keyOption . value ;
}
} else if ( CALLBACKS . indexOf ( key ) !== - 1 ) {
if ( isFn ( fromArgs [ key ] ) ) {
toArgs [ key ] = processCallback ( methodName , fromArgs [ key ] , returnValue ) ;
}
} else {
if ( ! keepFromArgs ) {
toArgs [ key ] = fromArgs [ key ] ;
}
}
}
return toArgs ;
} else if ( isFn ( fromArgs ) ) {
fromArgs = processCallback ( methodName , fromArgs , returnValue ) ;
}
return fromArgs ;
}
function processReturnValue ( methodName , res , returnValue ) { var keepReturnValue = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : false ;
if ( isFn ( protocols . returnValue ) ) { // 处理通用 returnValue
res = protocols . returnValue ( methodName , res ) ;
}
return processArgs ( methodName , res , returnValue , { } , keepReturnValue ) ;
}
function wrapper ( methodName , method ) {
if ( hasOwn ( protocols , methodName ) ) {
var protocol = protocols [ methodName ] ;
if ( ! protocol ) { // 暂不支持的 api
return function ( ) {
console . error ( "Platform '\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F' does not support '" . concat ( methodName , "'." ) ) ;
} ;
}
return function ( arg1 , arg2 ) { // 目前 api 最多两个参数
var options = protocol ;
if ( isFn ( protocol ) ) {
options = protocol ( arg1 ) ;
}
arg1 = processArgs ( methodName , arg1 , options . args , options . returnValue ) ;
var args = [ arg1 ] ;
if ( typeof arg2 !== 'undefined' ) {
args . push ( arg2 ) ;
}
if ( isFn ( options . name ) ) {
methodName = options . name ( arg1 ) ;
} else if ( isStr ( options . name ) ) {
methodName = options . name ;
}
var returnValue = wx [ methodName ] . apply ( wx , args ) ;
if ( isSyncApi ( methodName ) ) { // 同步 api
return processReturnValue ( methodName , returnValue , options . returnValue , isContextApi ( methodName ) ) ;
}
return returnValue ;
} ;
}
return method ;
}
var todoApis = Object . create ( null ) ;
var TODOS = [
'onTabBarMidButtonTap' ,
'subscribePush' ,
'unsubscribePush' ,
'onPush' ,
'offPush' ,
'share' ] ;
function createTodoApi ( name ) {
return function todoApi ( _ref )
{ var fail = _ref . fail , complete = _ref . complete ;
var res = {
errMsg : "" . concat ( name , ":fail method '" ) . concat ( name , "' not supported" ) } ;
isFn ( fail ) && fail ( res ) ;
isFn ( complete ) && complete ( res ) ;
} ;
}
TODOS . forEach ( function ( name ) {
todoApis [ name ] = createTodoApi ( name ) ;
} ) ;
var providers = {
oauth : [ 'weixin' ] ,
share : [ 'weixin' ] ,
payment : [ 'wxpay' ] ,
push : [ 'weixin' ] } ;
function getProvider ( _ref2 )
{ var service = _ref2 . service , success = _ref2 . success , fail = _ref2 . fail , complete = _ref2 . complete ;
var res = false ;
if ( providers [ service ] ) {
res = {
errMsg : 'getProvider:ok' ,
service : service ,
provider : providers [ service ] } ;
isFn ( success ) && success ( res ) ;
} else {
res = {
errMsg : 'getProvider:fail service not found' } ;
isFn ( fail ) && fail ( res ) ;
}
isFn ( complete ) && complete ( res ) ;
}
var extraApi = /*#__PURE__*/ Object . freeze ( {
_ _proto _ _ : null ,
getProvider : getProvider } ) ;
var getEmitter = function ( ) {
var Emitter ;
return function getUniEmitter ( ) {
if ( ! Emitter ) {
Emitter = new _vue . default ( ) ;
}
return Emitter ;
} ;
} ( ) ;
function apply ( ctx , method , args ) {
return ctx [ method ] . apply ( ctx , args ) ;
}
function $on ( ) {
return apply ( getEmitter ( ) , '$on' , Array . prototype . slice . call ( arguments ) ) ;
}
function $off ( ) {
return apply ( getEmitter ( ) , '$off' , Array . prototype . slice . call ( arguments ) ) ;
}
function $once ( ) {
return apply ( getEmitter ( ) , '$once' , Array . prototype . slice . call ( arguments ) ) ;
}
function $emit ( ) {
return apply ( getEmitter ( ) , '$emit' , Array . prototype . slice . call ( arguments ) ) ;
}
var eventApi = /*#__PURE__*/ Object . freeze ( {
_ _proto _ _ : null ,
$on : $on ,
$off : $off ,
$once : $once ,
$emit : $emit } ) ;
/ * *
* 框架内 try - catch
* /
/ * *
* 开发者 try - catch
* /
function tryCatch ( fn ) {
return function ( ) {
try {
return fn . apply ( fn , arguments ) ;
} catch ( e ) {
// TODO
console . error ( e ) ;
}
} ;
}
function getApiCallbacks ( params ) {
var apiCallbacks = { } ;
for ( var name in params ) {
var param = params [ name ] ;
if ( isFn ( param ) ) {
apiCallbacks [ name ] = tryCatch ( param ) ;
delete params [ name ] ;
}
}
return apiCallbacks ;
}
var cid ;
var cidErrMsg ;
function normalizePushMessage ( message ) {
try {
return JSON . parse ( message ) ;
} catch ( e ) { }
return message ;
}
function invokePushCallback (
args )
{
2022-08-03 03:20:44 +00:00
if ( args . type === 'clientId' ) {
2022-07-31 02:14:22 +00:00
cid = args . cid ;
cidErrMsg = args . errMsg ;
invokeGetPushCidCallbacks ( cid , args . errMsg ) ;
} else if ( args . type === 'pushMsg' ) {
2022-08-03 03:20:44 +00:00
onPushMessageCallbacks . forEach ( function ( callback ) {
callback ( {
type : 'receive' ,
data : normalizePushMessage ( args . message ) } ) ;
} ) ;
2022-07-31 02:14:22 +00:00
} else if ( args . type === 'click' ) {
onPushMessageCallbacks . forEach ( function ( callback ) {
callback ( {
type : 'click' ,
data : normalizePushMessage ( args . message ) } ) ;
} ) ;
}
}
var getPushCidCallbacks = [ ] ;
function invokeGetPushCidCallbacks ( cid , errMsg ) {
getPushCidCallbacks . forEach ( function ( callback ) {
callback ( cid , errMsg ) ;
} ) ;
getPushCidCallbacks . length = 0 ;
}
2022-08-03 03:20:44 +00:00
function getPushClientid ( args ) {
2022-07-31 02:14:22 +00:00
if ( ! isPlainObject ( args ) ) {
args = { } ;
} var _getApiCallbacks =
getApiCallbacks ( args ) , success = _getApiCallbacks . success , fail = _getApiCallbacks . fail , complete = _getApiCallbacks . complete ;
var hasSuccess = isFn ( success ) ;
var hasFail = isFn ( fail ) ;
var hasComplete = isFn ( complete ) ;
2022-08-03 03:20:44 +00:00
getPushCidCallbacks . push ( function ( cid , errMsg ) {
var res ;
if ( cid ) {
res = {
errMsg : 'getPushClientid:ok' ,
cid : cid } ;
hasSuccess && success ( res ) ;
} else {
res = {
errMsg : 'getPushClientid:fail' + ( errMsg ? ' ' + errMsg : '' ) } ;
2022-07-31 02:14:22 +00:00
2022-08-03 03:20:44 +00:00
hasFail && fail ( res ) ;
2022-07-31 02:14:22 +00:00
}
2022-08-03 03:20:44 +00:00
hasComplete && complete ( res ) ;
2022-07-31 02:14:22 +00:00
} ) ;
2022-08-03 03:20:44 +00:00
if ( typeof cid !== 'undefined' ) {
Promise . resolve ( ) . then ( function ( ) { return invokeGetPushCidCallbacks ( cid , cidErrMsg ) ; } ) ;
}
2022-07-31 02:14:22 +00:00
}
var onPushMessageCallbacks = [ ] ;
// 不使用 defineOnApi 实现,是因为 defineOnApi 依赖 UniServiceJSBridge ,该对象目前在小程序上未提供,故简单实现
var onPushMessage = function onPushMessage ( fn ) {
if ( onPushMessageCallbacks . indexOf ( fn ) === - 1 ) {
onPushMessageCallbacks . push ( fn ) ;
}
} ;
var offPushMessage = function offPushMessage ( fn ) {
if ( ! fn ) {
onPushMessageCallbacks . length = 0 ;
} else {
var index = onPushMessageCallbacks . indexOf ( fn ) ;
if ( index > - 1 ) {
onPushMessageCallbacks . splice ( index , 1 ) ;
}
}
} ;
var api = /*#__PURE__*/ Object . freeze ( {
_ _proto _ _ : null ,
2022-08-03 03:20:44 +00:00
getPushClientid : getPushClientid ,
2022-07-31 02:14:22 +00:00
onPushMessage : onPushMessage ,
offPushMessage : offPushMessage ,
invokePushCallback : invokePushCallback } ) ;
var MPPage = Page ;
var MPComponent = Component ;
var customizeRE = /:/g ;
var customize = cached ( function ( str ) {
return camelize ( str . replace ( customizeRE , '-' ) ) ;
} ) ;
function initTriggerEvent ( mpInstance ) {
var oldTriggerEvent = mpInstance . triggerEvent ;
var newTriggerEvent = function newTriggerEvent ( event ) { for ( var _len3 = arguments . length , args = new Array ( _len3 > 1 ? _len3 - 1 : 0 ) , _key3 = 1 ; _key3 < _len3 ; _key3 ++ ) { args [ _key3 - 1 ] = arguments [ _key3 ] ; }
return oldTriggerEvent . apply ( mpInstance , [ customize ( event ) ] . concat ( args ) ) ;
} ;
try {
// 京东小程序 triggerEvent 为只读
mpInstance . triggerEvent = newTriggerEvent ;
} catch ( error ) {
mpInstance . _triggerEvent = newTriggerEvent ;
}
}
function initHook ( name , options , isComponent ) {
var oldHook = options [ name ] ;
if ( ! oldHook ) {
options [ name ] = function ( ) {
initTriggerEvent ( this ) ;
} ;
} else {
options [ name ] = function ( ) {
initTriggerEvent ( this ) ; for ( var _len4 = arguments . length , args = new Array ( _len4 ) , _key4 = 0 ; _key4 < _len4 ; _key4 ++ ) { args [ _key4 ] = arguments [ _key4 ] ; }
return oldHook . apply ( this , args ) ;
} ;
}
}
if ( ! MPPage . _ _$wrappered ) {
MPPage . _ _$wrappered = true ;
Page = function Page ( ) { var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
initHook ( 'onLoad' , options ) ;
return MPPage ( options ) ;
} ;
Page . after = MPPage . after ;
Component = function Component ( ) { var options = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
initHook ( 'created' , options ) ;
return MPComponent ( options ) ;
} ;
}
var PAGE _EVENT _HOOKS = [
'onPullDownRefresh' ,
'onReachBottom' ,
'onAddToFavorites' ,
'onShareTimeline' ,
'onShareAppMessage' ,
'onPageScroll' ,
'onResize' ,
'onTabItemTap' ] ;
function initMocks ( vm , mocks ) {
var mpInstance = vm . $mp [ vm . mpType ] ;
mocks . forEach ( function ( mock ) {
if ( hasOwn ( mpInstance , mock ) ) {
vm [ mock ] = mpInstance [ mock ] ;
}
} ) ;
}
function hasHook ( hook , vueOptions ) {
if ( ! vueOptions ) {
return true ;
}
if ( _vue . default . options && Array . isArray ( _vue . default . options [ hook ] ) ) {
return true ;
}
vueOptions = vueOptions . default || vueOptions ;
if ( isFn ( vueOptions ) ) {
if ( isFn ( vueOptions . extendOptions [ hook ] ) ) {
return true ;
}
if ( vueOptions . super &&
vueOptions . super . options &&
Array . isArray ( vueOptions . super . options [ hook ] ) ) {
return true ;
}
return false ;
}
if ( isFn ( vueOptions [ hook ] ) ) {
return true ;
}
var mixins = vueOptions . mixins ;
if ( Array . isArray ( mixins ) ) {
return ! ! mixins . find ( function ( mixin ) { return hasHook ( hook , mixin ) ; } ) ;
}
}
function initHooks ( mpOptions , hooks , vueOptions ) {
hooks . forEach ( function ( hook ) {
if ( hasHook ( hook , vueOptions ) ) {
mpOptions [ hook ] = function ( args ) {
return this . $vm && this . $vm . _ _call _hook ( hook , args ) ;
} ;
}
} ) ;
}
function initVueComponent ( Vue , vueOptions ) {
vueOptions = vueOptions . default || vueOptions ;
var VueComponent ;
if ( isFn ( vueOptions ) ) {
VueComponent = vueOptions ;
} else {
VueComponent = Vue . extend ( vueOptions ) ;
}
vueOptions = VueComponent . options ;
return [ VueComponent , vueOptions ] ;
}
function initSlots ( vm , vueSlots ) {
if ( Array . isArray ( vueSlots ) && vueSlots . length ) {
var $slots = Object . create ( null ) ;
vueSlots . forEach ( function ( slotName ) {
$slots [ slotName ] = true ;
} ) ;
vm . $scopedSlots = vm . $slots = $slots ;
}
}
function initVueIds ( vueIds , mpInstance ) {
vueIds = ( vueIds || '' ) . split ( ',' ) ;
var len = vueIds . length ;
if ( len === 1 ) {
mpInstance . _$vueId = vueIds [ 0 ] ;
} else if ( len === 2 ) {
mpInstance . _$vueId = vueIds [ 0 ] ;
mpInstance . _$vuePid = vueIds [ 1 ] ;
}
}
function initData ( vueOptions , context ) {
var data = vueOptions . data || { } ;
var methods = vueOptions . methods || { } ;
if ( typeof data === 'function' ) {
try {
data = data . call ( context ) ; // 支持 Vue.prototype 上挂的数据
} catch ( e ) {
2022-08-03 03:20:44 +00:00
if ( Object ( { "NODE_ENV" : "development" , "VUE_APP_NAME" : "app适配微信小程序" , "VUE_APP_PLATFORM" : "mp-weixin" , "BASE_URL" : "/" } ) . VUE _APP _DEBUG ) {
2022-07-31 02:14:22 +00:00
console . warn ( '根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。' , data ) ;
}
}
} else {
try {
// 对 data 格式化
data = JSON . parse ( JSON . stringify ( data ) ) ;
} catch ( e ) { }
}
if ( ! isPlainObject ( data ) ) {
data = { } ;
}
Object . keys ( methods ) . forEach ( function ( methodName ) {
if ( context . _ _lifecycle _hooks _ _ . indexOf ( methodName ) === - 1 && ! hasOwn ( data , methodName ) ) {
data [ methodName ] = methods [ methodName ] ;
}
} ) ;
return data ;
}
var PROP _TYPES = [ String , Number , Boolean , Object , Array , null ] ;
function createObserver ( name ) {
return function observer ( newVal , oldVal ) {
if ( this . $vm ) {
this . $vm [ name ] = newVal ; // 为了触发其他非 render watcher
}
} ;
}
function initBehaviors ( vueOptions , initBehavior ) {
var vueBehaviors = vueOptions . behaviors ;
var vueExtends = vueOptions . extends ;
var vueMixins = vueOptions . mixins ;
var vueProps = vueOptions . props ;
if ( ! vueProps ) {
vueOptions . props = vueProps = [ ] ;
}
var behaviors = [ ] ;
if ( Array . isArray ( vueBehaviors ) ) {
vueBehaviors . forEach ( function ( behavior ) {
behaviors . push ( behavior . replace ( 'uni://' , "wx" . concat ( "://" ) ) ) ;
if ( behavior === 'uni://form-field' ) {
if ( Array . isArray ( vueProps ) ) {
vueProps . push ( 'name' ) ;
vueProps . push ( 'value' ) ;
} else {
vueProps . name = {
type : String ,
default : '' } ;
vueProps . value = {
type : [ String , Number , Boolean , Array , Object , Date ] ,
default : '' } ;
}
}
} ) ;
}
if ( isPlainObject ( vueExtends ) && vueExtends . props ) {
behaviors . push (
initBehavior ( {
properties : initProperties ( vueExtends . props , true ) } ) ) ;
}
if ( Array . isArray ( vueMixins ) ) {
vueMixins . forEach ( function ( vueMixin ) {
if ( isPlainObject ( vueMixin ) && vueMixin . props ) {
behaviors . push (
initBehavior ( {
properties : initProperties ( vueMixin . props , true ) } ) ) ;
}
} ) ;
}
return behaviors ;
}
function parsePropType ( key , type , defaultValue , file ) {
// [String]=>String
if ( Array . isArray ( type ) && type . length === 1 ) {
return type [ 0 ] ;
}
return type ;
}
2022-08-03 03:20:44 +00:00
function initProperties ( props ) { var isBehavior = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : false ; var file = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : '' ;
2022-07-31 02:14:22 +00:00
var properties = { } ;
if ( ! isBehavior ) {
properties . vueId = {
type : String ,
value : '' } ;
2022-08-03 03:20:44 +00:00
// 用于字节跳动小程序模拟抽象节点
properties . generic = {
type : Object ,
value : null } ;
2022-07-31 02:14:22 +00:00
// scopedSlotsCompiler auto
properties . scopedSlotsCompiler = {
type : String ,
value : '' } ;
properties . vueSlots = { // 小程序不能直接定义 $slots 的 props, 所以通过 vueSlots 转换到 $slots
type : null ,
value : [ ] ,
observer : function observer ( newVal , oldVal ) {
var $slots = Object . create ( null ) ;
newVal . forEach ( function ( slotName ) {
$slots [ slotName ] = true ;
} ) ;
this . setData ( {
$slots : $slots } ) ;
} } ;
}
if ( Array . isArray ( props ) ) { // ['title']
props . forEach ( function ( key ) {
properties [ key ] = {
type : null ,
observer : createObserver ( key ) } ;
} ) ;
} else if ( isPlainObject ( props ) ) { // {title:{type:String,default:''},content:String}
Object . keys ( props ) . forEach ( function ( key ) {
var opts = props [ key ] ;
if ( isPlainObject ( opts ) ) { // title:{type:String,default:''}
var value = opts . default ;
if ( isFn ( value ) ) {
value = value ( ) ;
}
opts . type = parsePropType ( key , opts . type ) ;
properties [ key ] = {
type : PROP _TYPES . indexOf ( opts . type ) !== - 1 ? opts . type : null ,
value : value ,
observer : createObserver ( key ) } ;
} else { // content:String
var type = parsePropType ( key , opts ) ;
properties [ key ] = {
type : PROP _TYPES . indexOf ( type ) !== - 1 ? type : null ,
observer : createObserver ( key ) } ;
}
} ) ;
}
return properties ;
}
function wrapper$1 ( event ) {
// TODO 又得兼容 mpvue 的 mp 对象
try {
event . mp = JSON . parse ( JSON . stringify ( event ) ) ;
} catch ( e ) { }
event . stopPropagation = noop ;
event . preventDefault = noop ;
event . target = event . target || { } ;
if ( ! hasOwn ( event , 'detail' ) ) {
event . detail = { } ;
}
if ( hasOwn ( event , 'markerId' ) ) {
event . detail = typeof event . detail === 'object' ? event . detail : { } ;
event . detail . markerId = event . markerId ;
}
if ( isPlainObject ( event . detail ) ) {
event . target = Object . assign ( { } , event . target , event . detail ) ;
}
return event ;
}
function getExtraValue ( vm , dataPathsArray ) {
var context = vm ;
dataPathsArray . forEach ( function ( dataPathArray ) {
var dataPath = dataPathArray [ 0 ] ;
var value = dataPathArray [ 2 ] ;
if ( dataPath || typeof value !== 'undefined' ) { // ['','',index,'disable']
var propPath = dataPathArray [ 1 ] ;
var valuePath = dataPathArray [ 3 ] ;
var vFor ;
if ( Number . isInteger ( dataPath ) ) {
vFor = dataPath ;
} else if ( ! dataPath ) {
vFor = context ;
} else if ( typeof dataPath === 'string' && dataPath ) {
if ( dataPath . indexOf ( '#s#' ) === 0 ) {
vFor = dataPath . substr ( 3 ) ;
} else {
vFor = vm . _ _get _value ( dataPath , context ) ;
}
}
if ( Number . isInteger ( vFor ) ) {
context = value ;
} else if ( ! propPath ) {
context = vFor [ value ] ;
} else {
if ( Array . isArray ( vFor ) ) {
context = vFor . find ( function ( vForItem ) {
return vm . _ _get _value ( propPath , vForItem ) === value ;
} ) ;
} else if ( isPlainObject ( vFor ) ) {
context = Object . keys ( vFor ) . find ( function ( vForKey ) {
return vm . _ _get _value ( propPath , vFor [ vForKey ] ) === value ;
} ) ;
} else {
console . error ( 'v-for 暂不支持循环数据:' , vFor ) ;
}
}
if ( valuePath ) {
context = vm . _ _get _value ( valuePath , context ) ;
}
}
} ) ;
return context ;
}
function processEventExtra ( vm , extra , event ) {
var extraObj = { } ;
if ( Array . isArray ( extra ) && extra . length ) {
/ * *
* [
* [ 'data.items' , 'data.id' , item . data . id ] ,
* [ 'metas' , 'id' , meta . id ]
* ] ,
* [
* [ 'data.items' , 'data.id' , item . data . id ] ,
* [ 'metas' , 'id' , meta . id ]
* ] ,
* 'test'
* /
extra . forEach ( function ( dataPath , index ) {
if ( typeof dataPath === 'string' ) {
if ( ! dataPath ) { // model,prop.sync
extraObj [ '$' + index ] = vm ;
} else {
if ( dataPath === '$event' ) { // $event
extraObj [ '$' + index ] = event ;
} else if ( dataPath === 'arguments' ) {
if ( event . detail && event . detail . _ _args _ _ ) {
extraObj [ '$' + index ] = event . detail . _ _args _ _ ;
} else {
extraObj [ '$' + index ] = [ event ] ;
}
} else if ( dataPath . indexOf ( '$event.' ) === 0 ) { // $event.target.value
extraObj [ '$' + index ] = vm . _ _get _value ( dataPath . replace ( '$event.' , '' ) , event ) ;
} else {
extraObj [ '$' + index ] = vm . _ _get _value ( dataPath ) ;
}
}
} else {
extraObj [ '$' + index ] = getExtraValue ( vm , dataPath ) ;
}
} ) ;
}
return extraObj ;
}
function getObjByArray ( arr ) {
var obj = { } ;
for ( var i = 1 ; i < arr . length ; i ++ ) {
var element = arr [ i ] ;
obj [ element [ 0 ] ] = element [ 1 ] ;
}
return obj ;
}
function processEventArgs ( vm , event ) { var args = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : [ ] ; var extra = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : [ ] ; var isCustom = arguments . length > 4 ? arguments [ 4 ] : undefined ; var methodName = arguments . length > 5 ? arguments [ 5 ] : undefined ;
var isCustomMPEvent = false ; // wxcomponent 组件,传递原始 event 对象
if ( isCustom ) { // 自定义事件
isCustomMPEvent = event . currentTarget &&
event . currentTarget . dataset &&
event . currentTarget . dataset . comType === 'wx' ;
if ( ! args . length ) { // 无参数,直接传入 event 或 detail 数组
if ( isCustomMPEvent ) {
return [ event ] ;
}
return event . detail . _ _args _ _ || event . detail ;
}
}
var extraObj = processEventExtra ( vm , extra , event ) ;
var ret = [ ] ;
args . forEach ( function ( arg ) {
if ( arg === '$event' ) {
if ( methodName === '__set_model' && ! isCustom ) { // input v-model value
ret . push ( event . target . value ) ;
} else {
if ( isCustom && ! isCustomMPEvent ) {
ret . push ( event . detail . _ _args _ _ [ 0 ] ) ;
} else { // wxcomponent 组件或内置组件
ret . push ( event ) ;
}
}
} else {
if ( Array . isArray ( arg ) && arg [ 0 ] === 'o' ) {
ret . push ( getObjByArray ( arg ) ) ;
} else if ( typeof arg === 'string' && hasOwn ( extraObj , arg ) ) {
ret . push ( extraObj [ arg ] ) ;
} else {
ret . push ( arg ) ;
}
}
} ) ;
return ret ;
}
var ONCE = '~' ;
var CUSTOM = '^' ;
function isMatchEventType ( eventType , optType ) {
return eventType === optType ||
optType === 'regionchange' && (
eventType === 'begin' ||
eventType === 'end' ) ;
}
function getContextVm ( vm ) {
var $parent = vm . $parent ;
// 父组件是 scoped slots 或者其他自定义组件时继续查找
while ( $parent && $parent . $parent && ( $parent . $options . generic || $parent . $parent . $options . generic || $parent . $scope . _$vuePid ) ) {
$parent = $parent . $parent ;
}
return $parent && $parent . $parent ;
}
function handleEvent ( event ) { var _this2 = this ;
event = wrapper$1 ( event ) ;
// [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]
var dataset = ( event . currentTarget || event . target ) . dataset ;
if ( ! dataset ) {
return console . warn ( '事件信息不存在' ) ;
}
var eventOpts = dataset . eventOpts || dataset [ 'event-opts' ] ; // 支付宝 web-view 组件 dataset 非驼峰
if ( ! eventOpts ) {
return console . warn ( '事件信息不存在' ) ;
}
// [['handle',[1,2,a]],['handle1',[1,2,a]]]
var eventType = event . type ;
var ret = [ ] ;
eventOpts . forEach ( function ( eventOpt ) {
var type = eventOpt [ 0 ] ;
var eventsArray = eventOpt [ 1 ] ;
var isCustom = type . charAt ( 0 ) === CUSTOM ;
type = isCustom ? type . slice ( 1 ) : type ;
var isOnce = type . charAt ( 0 ) === ONCE ;
type = isOnce ? type . slice ( 1 ) : type ;
if ( eventsArray && isMatchEventType ( eventType , type ) ) {
eventsArray . forEach ( function ( eventArray ) {
var methodName = eventArray [ 0 ] ;
if ( methodName ) {
var handlerCtx = _this2 . $vm ;
if ( handlerCtx . $options . generic ) { // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots
handlerCtx = getContextVm ( handlerCtx ) || handlerCtx ;
}
if ( methodName === '$emit' ) {
handlerCtx . $emit . apply ( handlerCtx ,
processEventArgs (
_this2 . $vm ,
event ,
eventArray [ 1 ] ,
eventArray [ 2 ] ,
isCustom ,
methodName ) ) ;
return ;
}
var handler = handlerCtx [ methodName ] ;
if ( ! isFn ( handler ) ) {
2022-08-03 03:20:44 +00:00
throw new Error ( " _vm." . concat ( methodName , " is not a function" ) ) ;
2022-07-31 02:14:22 +00:00
}
if ( isOnce ) {
if ( handler . once ) {
return ;
}
handler . once = true ;
}
var params = processEventArgs (
_this2 . $vm ,
event ,
eventArray [ 1 ] ,
eventArray [ 2 ] ,
isCustom ,
methodName ) ;
params = Array . isArray ( params ) ? params : [ ] ;
// 参数尾部增加原始事件对象用于复杂表达式内获取额外数据
if ( /=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/ . test ( handler . toString ( ) ) ) {
// eslint-disable-next-line no-sparse-arrays
params = params . concat ( [ , , , , , , , , , , event ] ) ;
}
ret . push ( handler . apply ( handlerCtx , params ) ) ;
}
} ) ;
}
} ) ;
if (
eventType === 'input' &&
ret . length === 1 &&
typeof ret [ 0 ] !== 'undefined' )
{
return ret [ 0 ] ;
}
}
var eventChannels = { } ;
var eventChannelStack = [ ] ;
function getEventChannel ( id ) {
if ( id ) {
var eventChannel = eventChannels [ id ] ;
delete eventChannels [ id ] ;
return eventChannel ;
}
return eventChannelStack . shift ( ) ;
}
var hooks = [
'onShow' ,
'onHide' ,
'onError' ,
'onPageNotFound' ,
'onThemeChange' ,
'onUnhandledRejection' ] ;
function initEventChannel ( ) {
_vue . default . prototype . getOpenerEventChannel = function ( ) {
// 微信小程序使用自身getOpenerEventChannel
{
return this . $scope . getOpenerEventChannel ( ) ;
}
} ;
var callHook = _vue . default . prototype . _ _call _hook ;
_vue . default . prototype . _ _call _hook = function ( hook , args ) {
if ( hook === 'onLoad' && args && args . _ _id _ _ ) {
this . _ _eventChannel _ _ = getEventChannel ( args . _ _id _ _ ) ;
delete args . _ _id _ _ ;
}
return callHook . call ( this , hook , args ) ;
} ;
}
function initScopedSlotsParams ( ) {
var center = { } ;
var parents = { } ;
_vue . default . prototype . $hasScopedSlotsParams = function ( vueId ) {
var has = center [ vueId ] ;
if ( ! has ) {
parents [ vueId ] = this ;
this . $on ( 'hook:destroyed' , function ( ) {
delete parents [ vueId ] ;
} ) ;
}
return has ;
} ;
_vue . default . prototype . $getScopedSlotsParams = function ( vueId , name , key ) {
var data = center [ vueId ] ;
if ( data ) {
var object = data [ name ] || { } ;
return key ? object [ key ] : object ;
} else {
parents [ vueId ] = this ;
this . $on ( 'hook:destroyed' , function ( ) {
delete parents [ vueId ] ;
} ) ;
}
} ;
_vue . default . prototype . $setScopedSlotsParams = function ( name , value ) {
var vueIds = this . $options . propsData . vueId ;
if ( vueIds ) {
var vueId = vueIds . split ( ',' ) [ 0 ] ;
var object = center [ vueId ] = center [ vueId ] || { } ;
object [ name ] = value ;
if ( parents [ vueId ] ) {
parents [ vueId ] . $forceUpdate ( ) ;
}
}
} ;
_vue . default . mixin ( {
destroyed : function destroyed ( ) {
var propsData = this . $options . propsData ;
var vueId = propsData && propsData . vueId ;
if ( vueId ) {
delete center [ vueId ] ;
delete parents [ vueId ] ;
}
} } ) ;
}
function parseBaseApp ( vm , _ref3 )
{ var mocks = _ref3 . mocks , initRefs = _ref3 . initRefs ;
initEventChannel ( ) ;
{
initScopedSlotsParams ( ) ;
}
if ( vm . $options . store ) {
_vue . default . prototype . $store = vm . $options . store ;
}
uniIdMixin ( _vue . default ) ;
_vue . default . prototype . mpHost = "mp-weixin" ;
_vue . default . mixin ( {
beforeCreate : function beforeCreate ( ) {
if ( ! this . $options . mpType ) {
return ;
}
this . mpType = this . $options . mpType ;
this . $mp = _defineProperty ( {
data : { } } ,
this . mpType , this . $options . mpInstance ) ;
this . $scope = this . $options . mpInstance ;
delete this . $options . mpType ;
delete this . $options . mpInstance ;
if ( this . mpType === 'page' && typeof getApp === 'function' ) { // hack vue-i18n
var app = getApp ( ) ;
if ( app . $vm && app . $vm . $i18n ) {
this . _i18n = app . $vm . $i18n ;
}
}
if ( this . mpType !== 'app' ) {
initRefs ( this ) ;
initMocks ( this , mocks ) ;
}
} } ) ;
var appOptions = {
onLaunch : function onLaunch ( args ) {
if ( this . $vm ) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前
return ;
}
{
if ( wx . canIUse && ! wx . canIUse ( 'nextTick' ) ) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断
console . error ( '当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上' ) ;
}
}
this . $vm = vm ;
this . $vm . $mp = {
app : this } ;
this . $vm . $scope = this ;
// vm 上也挂载 globalData
this . $vm . globalData = this . globalData ;
this . $vm . _isMounted = true ;
this . $vm . _ _call _hook ( 'mounted' , args ) ;
this . $vm . _ _call _hook ( 'onLaunch' , args ) ;
} } ;
// 兼容旧版本 globalData
appOptions . globalData = vm . $options . globalData || { } ;
// 将 methods 中的方法挂在 getApp() 中
var methods = vm . $options . methods ;
if ( methods ) {
Object . keys ( methods ) . forEach ( function ( name ) {
appOptions [ name ] = methods [ name ] ;
} ) ;
}
initAppLocale ( _vue . default , vm , normalizeLocale ( wx . getSystemInfoSync ( ) . language ) || LOCALE _EN ) ;
initHooks ( appOptions , hooks ) ;
return appOptions ;
}
var mocks = [ '__route__' , '__wxExparserNodeId__' , '__wxWebviewId__' ] ;
function findVmByVueId ( vm , vuePid ) {
var $children = vm . $children ;
// 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)
for ( var i = $children . length - 1 ; i >= 0 ; i -- ) {
var childVm = $children [ i ] ;
if ( childVm . $scope . _$vueId === vuePid ) {
return childVm ;
}
}
// 反向递归查找
var parentVm ;
for ( var _i = $children . length - 1 ; _i >= 0 ; _i -- ) {
parentVm = findVmByVueId ( $children [ _i ] , vuePid ) ;
if ( parentVm ) {
return parentVm ;
}
}
}
function initBehavior ( options ) {
return Behavior ( options ) ;
}
function isPage ( ) {
return ! ! this . route ;
}
function initRelation ( detail ) {
this . triggerEvent ( '__l' , detail ) ;
}
function selectAllComponents ( mpInstance , selector , $refs ) {
var components = mpInstance . selectAllComponents ( selector ) ;
components . forEach ( function ( component ) {
var ref = component . dataset . ref ;
$refs [ ref ] = component . $vm || component ;
{
if ( component . dataset . vueGeneric === 'scoped' ) {
component . selectAllComponents ( '.scoped-ref' ) . forEach ( function ( scopedComponent ) {
selectAllComponents ( scopedComponent , selector , $refs ) ;
} ) ;
}
}
} ) ;
}
function initRefs ( vm ) {
var mpInstance = vm . $scope ;
Object . defineProperty ( vm , '$refs' , {
get : function get ( ) {
var $refs = { } ;
selectAllComponents ( mpInstance , '.vue-ref' , $refs ) ;
// TODO 暂不考虑 for 中的 scoped
var forComponents = mpInstance . selectAllComponents ( '.vue-ref-in-for' ) ;
forComponents . forEach ( function ( component ) {
var ref = component . dataset . ref ;
if ( ! $refs [ ref ] ) {
$refs [ ref ] = [ ] ;
}
$refs [ ref ] . push ( component . $vm || component ) ;
} ) ;
return $refs ;
} } ) ;
}
function handleLink ( event ) { var _ref4 =
event . detail || event . value , vuePid = _ref4 . vuePid , vueOptions = _ref4 . vueOptions ; // detail 是微信,value 是百度(dipatch)
var parentVm ;
if ( vuePid ) {
parentVm = findVmByVueId ( this . $vm , vuePid ) ;
}
if ( ! parentVm ) {
parentVm = this . $vm ;
}
vueOptions . parent = parentVm ;
}
function parseApp ( vm ) {
return parseBaseApp ( vm , {
mocks : mocks ,
initRefs : initRefs } ) ;
}
function createApp ( vm ) {
App ( parseApp ( vm ) ) ;
return vm ;
}
var encodeReserveRE = /[!'()*]/g ;
var encodeReserveReplacer = function encodeReserveReplacer ( c ) { return '%' + c . charCodeAt ( 0 ) . toString ( 16 ) ; } ;
var commaRE = /%2C/g ;
// fixed encodeURIComponent which is more conformant to RFC3986:
// - escapes [!'()*]
// - preserve commas
var encode = function encode ( str ) { return encodeURIComponent ( str ) .
replace ( encodeReserveRE , encodeReserveReplacer ) .
replace ( commaRE , ',' ) ; } ;
function stringifyQuery ( obj ) { var encodeStr = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : encode ;
var res = obj ? Object . keys ( obj ) . map ( function ( key ) {
var val = obj [ key ] ;
if ( val === undefined ) {
return '' ;
}
if ( val === null ) {
return encodeStr ( key ) ;
}
if ( Array . isArray ( val ) ) {
var result = [ ] ;
val . forEach ( function ( val2 ) {
if ( val2 === undefined ) {
return ;
}
if ( val2 === null ) {
result . push ( encodeStr ( key ) ) ;
} else {
result . push ( encodeStr ( key ) + '=' + encodeStr ( val2 ) ) ;
}
} ) ;
return result . join ( '&' ) ;
}
return encodeStr ( key ) + '=' + encodeStr ( val ) ;
} ) . filter ( function ( x ) { return x . length > 0 ; } ) . join ( '&' ) : null ;
return res ? "?" . concat ( res ) : '' ;
}
function parseBaseComponent ( vueComponentOptions )
{ var _ref5 = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } , isPage = _ref5 . isPage , initRelation = _ref5 . initRelation ; var _initVueComponent =
initVueComponent ( _vue . default , vueComponentOptions ) , _initVueComponent2 = _slicedToArray ( _initVueComponent , 2 ) , VueComponent = _initVueComponent2 [ 0 ] , vueOptions = _initVueComponent2 [ 1 ] ;
var options = _objectSpread ( {
multipleSlots : true ,
addGlobalClass : true } ,
vueOptions . options || { } ) ;
{
// 微信 multipleSlots 部分情况有 bug, 导致内容顺序错乱 如 u-list, 提供覆盖选项
if ( vueOptions [ 'mp-weixin' ] && vueOptions [ 'mp-weixin' ] . options ) {
Object . assign ( options , vueOptions [ 'mp-weixin' ] . options ) ;
}
}
var componentOptions = {
options : options ,
data : initData ( vueOptions , _vue . default . prototype ) ,
behaviors : initBehaviors ( vueOptions , initBehavior ) ,
2022-08-03 03:20:44 +00:00
properties : initProperties ( vueOptions . props , false , vueOptions . _ _file ) ,
2022-07-31 02:14:22 +00:00
lifetimes : {
attached : function attached ( ) {
var properties = this . properties ;
var options = {
mpType : isPage . call ( this ) ? 'page' : 'component' ,
mpInstance : this ,
propsData : properties } ;
initVueIds ( properties . vueId , this ) ;
// 处理父子关系
initRelation . call ( this , {
vuePid : this . _$vuePid ,
vueOptions : options } ) ;
// 初始化 vue 实例
this . $vm = new VueComponent ( options ) ;
// 处理$slots,$scopedSlots( 暂不支持动态变化$slots)
initSlots ( this . $vm , properties . vueSlots ) ;
// 触发首次 setData
this . $vm . $mount ( ) ;
} ,
ready : function ready ( ) {
// 当组件 props 默认值为 true, 初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发
// https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800
if ( this . $vm ) {
this . $vm . _isMounted = true ;
this . $vm . _ _call _hook ( 'mounted' ) ;
this . $vm . _ _call _hook ( 'onReady' ) ;
}
} ,
detached : function detached ( ) {
this . $vm && this . $vm . $destroy ( ) ;
} } ,
pageLifetimes : {
show : function show ( args ) {
this . $vm && this . $vm . _ _call _hook ( 'onPageShow' , args ) ;
} ,
hide : function hide ( ) {
this . $vm && this . $vm . _ _call _hook ( 'onPageHide' ) ;
} ,
resize : function resize ( size ) {
this . $vm && this . $vm . _ _call _hook ( 'onPageResize' , size ) ;
} } ,
methods : {
_ _l : handleLink ,
_ _e : handleEvent } } ;
// externalClasses
if ( vueOptions . externalClasses ) {
componentOptions . externalClasses = vueOptions . externalClasses ;
}
if ( Array . isArray ( vueOptions . wxsCallMethods ) ) {
vueOptions . wxsCallMethods . forEach ( function ( callMethod ) {
componentOptions . methods [ callMethod ] = function ( args ) {
return this . $vm [ callMethod ] ( args ) ;
} ;
} ) ;
}
if ( isPage ) {
return componentOptions ;
}
return [ componentOptions , VueComponent ] ;
}
function parseComponent ( vueComponentOptions ) {
return parseBaseComponent ( vueComponentOptions , {
isPage : isPage ,
initRelation : initRelation } ) ;
}
var hooks$1 = [
'onShow' ,
'onHide' ,
'onUnload' ] ;
hooks$1 . push . apply ( hooks$1 , PAGE _EVENT _HOOKS ) ;
function parseBasePage ( vuePageOptions , _ref6 )
{ var isPage = _ref6 . isPage , initRelation = _ref6 . initRelation ;
var pageOptions = parseComponent ( vuePageOptions ) ;
initHooks ( pageOptions . methods , hooks$1 , vuePageOptions ) ;
pageOptions . methods . onLoad = function ( query ) {
this . options = query ;
var copyQuery = Object . assign ( { } , query ) ;
delete copyQuery . _ _id _ _ ;
this . $page = {
fullPath : '/' + ( this . route || this . is ) + stringifyQuery ( copyQuery ) } ;
this . $vm . $mp . query = query ; // 兼容 mpvue
this . $vm . _ _call _hook ( 'onLoad' , query ) ;
} ;
return pageOptions ;
}
function parsePage ( vuePageOptions ) {
return parseBasePage ( vuePageOptions , {
isPage : isPage ,
initRelation : initRelation } ) ;
}
function createPage ( vuePageOptions ) {
{
return Component ( parsePage ( vuePageOptions ) ) ;
}
}
function createComponent ( vueOptions ) {
{
return Component ( parseComponent ( vueOptions ) ) ;
}
}
function createSubpackageApp ( vm ) {
var appOptions = parseApp ( vm ) ;
var app = getApp ( {
allowDefault : true } ) ;
vm . $scope = app ;
var globalData = app . globalData ;
if ( globalData ) {
Object . keys ( appOptions . globalData ) . forEach ( function ( name ) {
if ( ! hasOwn ( globalData , name ) ) {
globalData [ name ] = appOptions . globalData [ name ] ;
}
} ) ;
}
Object . keys ( appOptions ) . forEach ( function ( name ) {
if ( ! hasOwn ( app , name ) ) {
app [ name ] = appOptions [ name ] ;
}
} ) ;
if ( isFn ( appOptions . onShow ) && wx . onAppShow ) {
wx . onAppShow ( function ( ) { for ( var _len5 = arguments . length , args = new Array ( _len5 ) , _key5 = 0 ; _key5 < _len5 ; _key5 ++ ) { args [ _key5 ] = arguments [ _key5 ] ; }
vm . _ _call _hook ( 'onShow' , args ) ;
} ) ;
}
if ( isFn ( appOptions . onHide ) && wx . onAppHide ) {
wx . onAppHide ( function ( ) { for ( var _len6 = arguments . length , args = new Array ( _len6 ) , _key6 = 0 ; _key6 < _len6 ; _key6 ++ ) { args [ _key6 ] = arguments [ _key6 ] ; }
vm . _ _call _hook ( 'onHide' , args ) ;
} ) ;
}
if ( isFn ( appOptions . onLaunch ) ) {
var args = wx . getLaunchOptionsSync && wx . getLaunchOptionsSync ( ) ;
vm . _ _call _hook ( 'onLaunch' , args ) ;
}
return vm ;
}
function createPlugin ( vm ) {
var appOptions = parseApp ( vm ) ;
if ( isFn ( appOptions . onShow ) && wx . onAppShow ) {
wx . onAppShow ( function ( ) { for ( var _len7 = arguments . length , args = new Array ( _len7 ) , _key7 = 0 ; _key7 < _len7 ; _key7 ++ ) { args [ _key7 ] = arguments [ _key7 ] ; }
vm . _ _call _hook ( 'onShow' , args ) ;
} ) ;
}
if ( isFn ( appOptions . onHide ) && wx . onAppHide ) {
wx . onAppHide ( function ( ) { for ( var _len8 = arguments . length , args = new Array ( _len8 ) , _key8 = 0 ; _key8 < _len8 ; _key8 ++ ) { args [ _key8 ] = arguments [ _key8 ] ; }
vm . _ _call _hook ( 'onHide' , args ) ;
} ) ;
}
if ( isFn ( appOptions . onLaunch ) ) {
var args = wx . getLaunchOptionsSync && wx . getLaunchOptionsSync ( ) ;
vm . _ _call _hook ( 'onLaunch' , args ) ;
}
return vm ;
}
todos . forEach ( function ( todoApi ) {
protocols [ todoApi ] = false ;
} ) ;
canIUses . forEach ( function ( canIUseApi ) {
var apiName = protocols [ canIUseApi ] && protocols [ canIUseApi ] . name ? protocols [ canIUseApi ] . name :
canIUseApi ;
if ( ! wx . canIUse ( apiName ) ) {
protocols [ canIUseApi ] = false ;
}
} ) ;
var uni = { } ;
if ( typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus' ) {
uni = new Proxy ( { } , {
get : function get ( target , name ) {
if ( hasOwn ( target , name ) ) {
return target [ name ] ;
}
if ( baseApi [ name ] ) {
return baseApi [ name ] ;
}
if ( api [ name ] ) {
return promisify ( name , api [ name ] ) ;
}
{
if ( extraApi [ name ] ) {
return promisify ( name , extraApi [ name ] ) ;
}
if ( todoApis [ name ] ) {
return promisify ( name , todoApis [ name ] ) ;
}
}
if ( eventApi [ name ] ) {
return eventApi [ name ] ;
}
if ( ! hasOwn ( wx , name ) && ! hasOwn ( protocols , name ) ) {
return ;
}
return promisify ( name , wrapper ( name , wx [ name ] ) ) ;
} ,
set : function set ( target , name , value ) {
target [ name ] = value ;
return true ;
} } ) ;
} else {
Object . keys ( baseApi ) . forEach ( function ( name ) {
uni [ name ] = baseApi [ name ] ;
} ) ;
{
Object . keys ( todoApis ) . forEach ( function ( name ) {
uni [ name ] = promisify ( name , todoApis [ name ] ) ;
} ) ;
Object . keys ( extraApi ) . forEach ( function ( name ) {
uni [ name ] = promisify ( name , todoApis [ name ] ) ;
} ) ;
}
Object . keys ( eventApi ) . forEach ( function ( name ) {
uni [ name ] = eventApi [ name ] ;
} ) ;
Object . keys ( api ) . forEach ( function ( name ) {
uni [ name ] = promisify ( name , api [ name ] ) ;
} ) ;
Object . keys ( wx ) . forEach ( function ( name ) {
if ( hasOwn ( wx , name ) || hasOwn ( protocols , name ) ) {
uni [ name ] = promisify ( name , wrapper ( name , wx [ name ] ) ) ;
}
} ) ;
}
wx . createApp = createApp ;
wx . createPage = createPage ;
wx . createComponent = createComponent ;
wx . createSubpackageApp = createSubpackageApp ;
wx . createPlugin = createPlugin ;
var uni$1 = uni ; var _default =
uni$1 ; exports . default = _default ;
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( /*! ./../../../webpack/buildin/global.js */ 2 ) ) )
/***/ } ) ,
/***/ 11 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / node _modules / @ dcloudio / vue - cli - plugin - uni / packages / vue - loader / lib / runtime / componentNormalizer . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: default */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* harmony export (binding) */ _ _webpack _require _ _ . d ( _ _webpack _exports _ _ , "default" , function ( ) { return normalizeComponent ; } ) ;
/* globals __VUE_SSR_CONTEXT__ */
// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
// This module is a runtime utility for cleaner component module output and will
// be included in the final webpack user bundle.
function normalizeComponent (
scriptExports ,
render ,
staticRenderFns ,
functionalTemplate ,
injectStyles ,
scopeId ,
moduleIdentifier , /* server only */
shadowMode , /* vue-cli only */
components , // fixed by xxxxxx auto components
renderjs // fixed by xxxxxx renderjs
) {
// Vue.extend constructor export interop
var options = typeof scriptExports === 'function'
? scriptExports . options
: scriptExports
// fixed by xxxxxx auto components
if ( components ) {
if ( ! options . components ) {
options . components = { }
}
var hasOwn = Object . prototype . hasOwnProperty
for ( var name in components ) {
if ( hasOwn . call ( components , name ) && ! hasOwn . call ( options . components , name ) ) {
options . components [ name ] = components [ name ]
}
}
}
// fixed by xxxxxx renderjs
if ( renderjs ) {
( renderjs . beforeCreate || ( renderjs . beforeCreate = [ ] ) ) . unshift ( function ( ) {
this [ renderjs . _ _module ] = this
} ) ;
( options . mixins || ( options . mixins = [ ] ) ) . push ( renderjs )
}
// render functions
if ( render ) {
options . render = render
options . staticRenderFns = staticRenderFns
options . _compiled = true
}
// functional template
if ( functionalTemplate ) {
options . functional = true
}
// scopedId
if ( scopeId ) {
options . _scopeId = 'data-v-' + scopeId
}
var hook
if ( moduleIdentifier ) { // server build
hook = function ( context ) {
// 2.3 injection
context =
context || // cached call
( this . $vnode && this . $vnode . ssrContext ) || // stateful
( this . parent && this . parent . $vnode && this . parent . $vnode . ssrContext ) // functional
// 2.2 with runInNewContext: true
if ( ! context && typeof _ _VUE _SSR _CONTEXT _ _ !== 'undefined' ) {
context = _ _VUE _SSR _CONTEXT _ _
}
// inject component styles
if ( injectStyles ) {
injectStyles . call ( this , context )
}
// register component module identifier for async chunk inferrence
if ( context && context . _registeredComponents ) {
context . _registeredComponents . add ( moduleIdentifier )
}
}
// used by ssr in case component is cached and beforeCreate
// never gets called
options . _ssrRegister = hook
} else if ( injectStyles ) {
hook = shadowMode
? function ( ) { injectStyles . call ( this , this . $root . $options . shadowRoot ) }
: injectStyles
}
if ( hook ) {
if ( options . functional ) {
// for template-only hot-reload because in that case the render fn doesn't
// go through the normalizer
options . _injectStyles = hook
// register for functioal component in vue file
var originalRender = options . render
options . render = function renderWithStyleInjection ( h , context ) {
hook . call ( context )
return originalRender ( h , context )
}
} else {
// inject component registration as beforeCreate hook
var existing = options . beforeCreate
options . beforeCreate = existing
? [ ] . concat ( existing , hook )
: [ hook ]
}
}
return {
exports : scriptExports ,
options : options
}
}
/***/ } ) ,
/***/ 12 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / s t o r e / i n d e x . j s * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . default = void 0 ;
var _vue = _interopRequireDefault ( _ _webpack _require _ _ ( /*! vue */ 4 ) ) ;
var _vuex = _interopRequireDefault ( _ _webpack _require _ _ ( /*! vuex */ 13 ) ) ;
var _moduleA = _interopRequireDefault ( _ _webpack _require _ _ ( /*! @/store/modules/moduleA */ 14 ) ) ;
var _moduleB = _interopRequireDefault ( _ _webpack _require _ _ ( /*! @/store/modules/moduleB */ 15 ) ) ; function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; } // 组装模块并导出 store 的地方
_vue . default . use ( _vuex . default ) ; //vue的插件机制
//Vuex.modules 模块选项
var store = new _vuex . default . Store ( {
modules : {
moduleA : _moduleA . default ,
moduleB : _moduleB . default } } ) ; var _default =
store ; exports . default = _default ;
/***/ } ) ,
/***/ 13 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / node _modules / @ dcloudio / vue - cli - plugin - uni / packages / vuex3 / dist / vuex . common . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( global ) { / * !
* vuex v3 . 6.2
* ( c ) 2021 Evan You
* @ license MIT
* /
function applyMixin ( Vue ) {
var version = Number ( Vue . version . split ( '.' ) [ 0 ] ) ;
if ( version >= 2 ) {
Vue . mixin ( { beforeCreate : vuexInit } ) ;
} else {
// override init and inject vuex init procedure
// for 1.x backwards compatibility.
var _init = Vue . prototype . _init ;
Vue . prototype . _init = function ( options ) {
if ( options === void 0 ) options = { } ;
options . init = options . init
? [ vuexInit ] . concat ( options . init )
: vuexInit ;
_init . call ( this , options ) ;
} ;
}
/ * *
* Vuex init hook , injected into each instances init hooks list .
* /
function vuexInit ( ) {
var options = this . $options ;
// store injection
if ( options . store ) {
this . $store = typeof options . store === 'function'
? options . store ( )
: options . store ;
} else if ( options . parent && options . parent . $store ) {
this . $store = options . parent . $store ;
}
}
}
var target = typeof window !== 'undefined'
? window
: typeof global !== 'undefined'
? global
: { } ;
var devtoolHook = target . _ _VUE _DEVTOOLS _GLOBAL _HOOK _ _ ;
function devtoolPlugin ( store ) {
if ( ! devtoolHook ) { return }
store . _devtoolHook = devtoolHook ;
devtoolHook . emit ( 'vuex:init' , store ) ;
devtoolHook . on ( 'vuex:travel-to-state' , function ( targetState ) {
store . replaceState ( targetState ) ;
} ) ;
store . subscribe ( function ( mutation , state ) {
devtoolHook . emit ( 'vuex:mutation' , mutation , state ) ;
} , { prepend : true } ) ;
store . subscribeAction ( function ( action , state ) {
devtoolHook . emit ( 'vuex:action' , action , state ) ;
} , { prepend : true } ) ;
}
/ * *
* Get the first item that pass the test
* by second argument function
*
* @ param { Array } list
* @ param { Function } f
* @ return { * }
* /
function find ( list , f ) {
return list . filter ( f ) [ 0 ]
}
/ * *
* Deep copy the given object considering circular structure .
* This function caches all nested objects and its copies .
* If it detects circular structure , use cached copy to avoid infinite loop .
*
* @ param { * } obj
* @ param { Array < Object > } cache
* @ return { * }
* /
function deepCopy ( obj , cache ) {
if ( cache === void 0 ) cache = [ ] ;
// just return if obj is immutable value
if ( obj === null || typeof obj !== 'object' ) {
return obj
}
// if obj is hit, it is in circular structure
var hit = find ( cache , function ( c ) { return c . original === obj ; } ) ;
if ( hit ) {
return hit . copy
}
var copy = Array . isArray ( obj ) ? [ ] : { } ;
// put the copy into cache at first
// because we want to refer it in recursive deepCopy
cache . push ( {
original : obj ,
copy : copy
} ) ;
Object . keys ( obj ) . forEach ( function ( key ) {
copy [ key ] = deepCopy ( obj [ key ] , cache ) ;
} ) ;
return copy
}
/ * *
* forEach for object
* /
function forEachValue ( obj , fn ) {
Object . keys ( obj ) . forEach ( function ( key ) { return fn ( obj [ key ] , key ) ; } ) ;
}
function isObject ( obj ) {
return obj !== null && typeof obj === 'object'
}
function isPromise ( val ) {
return val && typeof val . then === 'function'
}
function assert ( condition , msg ) {
if ( ! condition ) { throw new Error ( ( "[vuex] " + msg ) ) }
}
function partial ( fn , arg ) {
return function ( ) {
return fn ( arg )
}
}
// Base data struct for store's module, package with some attribute and method
var Module = function Module ( rawModule , runtime ) {
this . runtime = runtime ;
// Store some children item
this . _children = Object . create ( null ) ;
// Store the origin module object which passed by programmer
this . _rawModule = rawModule ;
var rawState = rawModule . state ;
// Store the origin module's state
this . state = ( typeof rawState === 'function' ? rawState ( ) : rawState ) || { } ;
} ;
var prototypeAccessors = { namespaced : { configurable : true } } ;
prototypeAccessors . namespaced . get = function ( ) {
return ! ! this . _rawModule . namespaced
} ;
Module . prototype . addChild = function addChild ( key , module ) {
this . _children [ key ] = module ;
} ;
Module . prototype . removeChild = function removeChild ( key ) {
delete this . _children [ key ] ;
} ;
Module . prototype . getChild = function getChild ( key ) {
return this . _children [ key ]
} ;
Module . prototype . hasChild = function hasChild ( key ) {
return key in this . _children
} ;
Module . prototype . update = function update ( rawModule ) {
this . _rawModule . namespaced = rawModule . namespaced ;
if ( rawModule . actions ) {
this . _rawModule . actions = rawModule . actions ;
}
if ( rawModule . mutations ) {
this . _rawModule . mutations = rawModule . mutations ;
}
if ( rawModule . getters ) {
this . _rawModule . getters = rawModule . getters ;
}
} ;
Module . prototype . forEachChild = function forEachChild ( fn ) {
forEachValue ( this . _children , fn ) ;
} ;
Module . prototype . forEachGetter = function forEachGetter ( fn ) {
if ( this . _rawModule . getters ) {
forEachValue ( this . _rawModule . getters , fn ) ;
}
} ;
Module . prototype . forEachAction = function forEachAction ( fn ) {
if ( this . _rawModule . actions ) {
forEachValue ( this . _rawModule . actions , fn ) ;
}
} ;
Module . prototype . forEachMutation = function forEachMutation ( fn ) {
if ( this . _rawModule . mutations ) {
forEachValue ( this . _rawModule . mutations , fn ) ;
}
} ;
Object . defineProperties ( Module . prototype , prototypeAccessors ) ;
var ModuleCollection = function ModuleCollection ( rawRootModule ) {
// register root module (Vuex.Store options)
this . register ( [ ] , rawRootModule , false ) ;
} ;
ModuleCollection . prototype . get = function get ( path ) {
return path . reduce ( function ( module , key ) {
return module . getChild ( key )
} , this . root )
} ;
ModuleCollection . prototype . getNamespace = function getNamespace ( path ) {
var module = this . root ;
return path . reduce ( function ( namespace , key ) {
module = module . getChild ( key ) ;
return namespace + ( module . namespaced ? key + '/' : '' )
} , '' )
} ;
ModuleCollection . prototype . update = function update$1 ( rawRootModule ) {
update ( [ ] , this . root , rawRootModule ) ;
} ;
ModuleCollection . prototype . register = function register ( path , rawModule , runtime ) {
var this $1 = this ;
if ( runtime === void 0 ) runtime = true ;
if ( ( true ) ) {
assertRawModule ( path , rawModule ) ;
}
var newModule = new Module ( rawModule , runtime ) ;
if ( path . length === 0 ) {
this . root = newModule ;
} else {
var parent = this . get ( path . slice ( 0 , - 1 ) ) ;
parent . addChild ( path [ path . length - 1 ] , newModule ) ;
}
// register nested modules
if ( rawModule . modules ) {
forEachValue ( rawModule . modules , function ( rawChildModule , key ) {
this $1 . register ( path . concat ( key ) , rawChildModule , runtime ) ;
} ) ;
}
} ;
ModuleCollection . prototype . unregister = function unregister ( path ) {
var parent = this . get ( path . slice ( 0 , - 1 ) ) ;
var key = path [ path . length - 1 ] ;
var child = parent . getChild ( key ) ;
if ( ! child ) {
if ( ( true ) ) {
console . warn (
"[vuex] trying to unregister module '" + key + "', which is " +
"not registered"
) ;
}
return
}
if ( ! child . runtime ) {
return
}
parent . removeChild ( key ) ;
} ;
ModuleCollection . prototype . isRegistered = function isRegistered ( path ) {
var parent = this . get ( path . slice ( 0 , - 1 ) ) ;
var key = path [ path . length - 1 ] ;
if ( parent ) {
return parent . hasChild ( key )
}
return false
} ;
function update ( path , targetModule , newModule ) {
if ( ( true ) ) {
assertRawModule ( path , newModule ) ;
}
// update target module
targetModule . update ( newModule ) ;
// update nested modules
if ( newModule . modules ) {
for ( var key in newModule . modules ) {
if ( ! targetModule . getChild ( key ) ) {
if ( ( true ) ) {
console . warn (
"[vuex] trying to add a new module '" + key + "' on hot reloading, " +
'manual reload is needed'
) ;
}
return
}
update (
path . concat ( key ) ,
targetModule . getChild ( key ) ,
newModule . modules [ key ]
) ;
}
}
}
var functionAssert = {
assert : function ( value ) { return typeof value === 'function' ; } ,
expected : 'function'
} ;
var objectAssert = {
assert : function ( value ) { return typeof value === 'function' ||
( typeof value === 'object' && typeof value . handler === 'function' ) ; } ,
expected : 'function or object with "handler" function'
} ;
var assertTypes = {
getters : functionAssert ,
mutations : functionAssert ,
actions : objectAssert
} ;
function assertRawModule ( path , rawModule ) {
Object . keys ( assertTypes ) . forEach ( function ( key ) {
if ( ! rawModule [ key ] ) { return }
var assertOptions = assertTypes [ key ] ;
forEachValue ( rawModule [ key ] , function ( value , type ) {
assert (
assertOptions . assert ( value ) ,
makeAssertionMessage ( path , key , type , value , assertOptions . expected )
) ;
} ) ;
} ) ;
}
function makeAssertionMessage ( path , key , type , value , expected ) {
var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"" ;
if ( path . length > 0 ) {
buf += " in module \"" + ( path . join ( '.' ) ) + "\"" ;
}
buf += " is " + ( JSON . stringify ( value ) ) + "." ;
return buf
}
var Vue ; // bind on install
var Store = function Store ( options ) {
var this $1 = this ;
if ( options === void 0 ) options = { } ;
// Auto install if it is not done yet and `window` has `Vue`.
// To allow users to avoid auto-installation in some cases,
// this code should be placed here. See #731
if ( ! Vue && typeof window !== 'undefined' && window . Vue ) {
install ( window . Vue ) ;
}
if ( ( true ) ) {
assert ( Vue , "must call Vue.use(Vuex) before creating a store instance." ) ;
assert ( typeof Promise !== 'undefined' , "vuex requires a Promise polyfill in this browser." ) ;
assert ( this instanceof Store , "store must be called with the new operator." ) ;
}
var plugins = options . plugins ; if ( plugins === void 0 ) plugins = [ ] ;
var strict = options . strict ; if ( strict === void 0 ) strict = false ;
// store internal state
this . _committing = false ;
this . _actions = Object . create ( null ) ;
this . _actionSubscribers = [ ] ;
this . _mutations = Object . create ( null ) ;
this . _wrappedGetters = Object . create ( null ) ;
this . _modules = new ModuleCollection ( options ) ;
this . _modulesNamespaceMap = Object . create ( null ) ;
this . _subscribers = [ ] ;
this . _watcherVM = new Vue ( ) ;
this . _makeLocalGettersCache = Object . create ( null ) ;
// bind commit and dispatch to self
var store = this ;
var ref = this ;
var dispatch = ref . dispatch ;
var commit = ref . commit ;
this . dispatch = function boundDispatch ( type , payload ) {
return dispatch . call ( store , type , payload )
} ;
this . commit = function boundCommit ( type , payload , options ) {
return commit . call ( store , type , payload , options )
} ;
// strict mode
this . strict = strict ;
var state = this . _modules . root . state ;
// init root module.
// this also recursively registers all sub-modules
// and collects all module getters inside this._wrappedGetters
installModule ( this , state , [ ] , this . _modules . root ) ;
// initialize the store vm, which is responsible for the reactivity
// (also registers _wrappedGetters as computed properties)
resetStoreVM ( this , state ) ;
// apply plugins
plugins . forEach ( function ( plugin ) { return plugin ( this $1 ) ; } ) ;
var useDevtools = options . devtools !== undefined ? options . devtools : Vue . config . devtools ;
if ( useDevtools ) {
devtoolPlugin ( this ) ;
}
} ;
var prototypeAccessors$1 = { state : { configurable : true } } ;
prototypeAccessors$1 . state . get = function ( ) {
return this . _vm . _data . $$state
} ;
prototypeAccessors$1 . state . set = function ( v ) {
if ( ( true ) ) {
assert ( false , "use store.replaceState() to explicit replace store state." ) ;
}
} ;
Store . prototype . commit = function commit ( _type , _payload , _options ) {
var this $1 = this ;
// check object-style commit
var ref = unifyObjectStyle ( _type , _payload , _options ) ;
var type = ref . type ;
var payload = ref . payload ;
var options = ref . options ;
var mutation = { type : type , payload : payload } ;
var entry = this . _mutations [ type ] ;
if ( ! entry ) {
if ( ( true ) ) {
console . error ( ( "[vuex] unknown mutation type: " + type ) ) ;
}
return
}
this . _withCommit ( function ( ) {
entry . forEach ( function commitIterator ( handler ) {
handler ( payload ) ;
} ) ;
} ) ;
this . _subscribers
. slice ( ) // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
. forEach ( function ( sub ) { return sub ( mutation , this $1 . state ) ; } ) ;
if (
( true ) &&
options && options . silent
) {
console . warn (
"[vuex] mutation type: " + type + ". Silent option has been removed. " +
'Use the filter functionality in the vue-devtools'
) ;
}
} ;
Store . prototype . dispatch = function dispatch ( _type , _payload ) {
var this $1 = this ;
// check object-style dispatch
var ref = unifyObjectStyle ( _type , _payload ) ;
var type = ref . type ;
var payload = ref . payload ;
var action = { type : type , payload : payload } ;
var entry = this . _actions [ type ] ;
if ( ! entry ) {
if ( ( true ) ) {
console . error ( ( "[vuex] unknown action type: " + type ) ) ;
}
return
}
try {
this . _actionSubscribers
. slice ( ) // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
. filter ( function ( sub ) { return sub . before ; } )
. forEach ( function ( sub ) { return sub . before ( action , this $1 . state ) ; } ) ;
} catch ( e ) {
if ( ( true ) ) {
console . warn ( "[vuex] error in before action subscribers: " ) ;
console . error ( e ) ;
}
}
var result = entry . length > 1
? Promise . all ( entry . map ( function ( handler ) { return handler ( payload ) ; } ) )
: entry [ 0 ] ( payload ) ;
return new Promise ( function ( resolve , reject ) {
result . then ( function ( res ) {
try {
this $1 . _actionSubscribers
. filter ( function ( sub ) { return sub . after ; } )
. forEach ( function ( sub ) { return sub . after ( action , this $1 . state ) ; } ) ;
} catch ( e ) {
if ( ( true ) ) {
console . warn ( "[vuex] error in after action subscribers: " ) ;
console . error ( e ) ;
}
}
resolve ( res ) ;
} , function ( error ) {
try {
this $1 . _actionSubscribers
. filter ( function ( sub ) { return sub . error ; } )
. forEach ( function ( sub ) { return sub . error ( action , this $1 . state , error ) ; } ) ;
} catch ( e ) {
if ( ( true ) ) {
console . warn ( "[vuex] error in error action subscribers: " ) ;
console . error ( e ) ;
}
}
reject ( error ) ;
} ) ;
} )
} ;
Store . prototype . subscribe = function subscribe ( fn , options ) {
return genericSubscribe ( fn , this . _subscribers , options )
} ;
Store . prototype . subscribeAction = function subscribeAction ( fn , options ) {
var subs = typeof fn === 'function' ? { before : fn } : fn ;
return genericSubscribe ( subs , this . _actionSubscribers , options )
} ;
Store . prototype . watch = function watch ( getter , cb , options ) {
var this $1 = this ;
if ( ( true ) ) {
assert ( typeof getter === 'function' , "store.watch only accepts a function." ) ;
}
return this . _watcherVM . $watch ( function ( ) { return getter ( this $1 . state , this $1 . getters ) ; } , cb , options )
} ;
Store . prototype . replaceState = function replaceState ( state ) {
var this $1 = this ;
this . _withCommit ( function ( ) {
this $1 . _vm . _data . $$state = state ;
} ) ;
} ;
Store . prototype . registerModule = function registerModule ( path , rawModule , options ) {
if ( options === void 0 ) options = { } ;
if ( typeof path === 'string' ) { path = [ path ] ; }
if ( ( true ) ) {
assert ( Array . isArray ( path ) , "module path must be a string or an Array." ) ;
assert ( path . length > 0 , 'cannot register the root module by using registerModule.' ) ;
}
this . _modules . register ( path , rawModule ) ;
installModule ( this , this . state , path , this . _modules . get ( path ) , options . preserveState ) ;
// reset store to update getters...
resetStoreVM ( this , this . state ) ;
} ;
Store . prototype . unregisterModule = function unregisterModule ( path ) {
var this $1 = this ;
if ( typeof path === 'string' ) { path = [ path ] ; }
if ( ( true ) ) {
assert ( Array . isArray ( path ) , "module path must be a string or an Array." ) ;
}
this . _modules . unregister ( path ) ;
this . _withCommit ( function ( ) {
var parentState = getNestedState ( this $1 . state , path . slice ( 0 , - 1 ) ) ;
Vue . delete ( parentState , path [ path . length - 1 ] ) ;
} ) ;
resetStore ( this ) ;
} ;
Store . prototype . hasModule = function hasModule ( path ) {
if ( typeof path === 'string' ) { path = [ path ] ; }
if ( ( true ) ) {
assert ( Array . isArray ( path ) , "module path must be a string or an Array." ) ;
}
return this . _modules . isRegistered ( path )
} ;
Store . prototype [ [ 104 , 111 , 116 , 85 , 112 , 100 , 97 , 116 , 101 ] . map ( function ( item ) { return String . fromCharCode ( item ) } ) . join ( '' ) ] = function ( newOptions ) {
this . _modules . update ( newOptions ) ;
resetStore ( this , true ) ;
} ;
Store . prototype . _withCommit = function _withCommit ( fn ) {
var committing = this . _committing ;
this . _committing = true ;
fn ( ) ;
this . _committing = committing ;
} ;
Object . defineProperties ( Store . prototype , prototypeAccessors$1 ) ;
function genericSubscribe ( fn , subs , options ) {
if ( subs . indexOf ( fn ) < 0 ) {
options && options . prepend
? subs . unshift ( fn )
: subs . push ( fn ) ;
}
return function ( ) {
var i = subs . indexOf ( fn ) ;
if ( i > - 1 ) {
subs . splice ( i , 1 ) ;
}
}
}
function resetStore ( store , hot ) {
store . _actions = Object . create ( null ) ;
store . _mutations = Object . create ( null ) ;
store . _wrappedGetters = Object . create ( null ) ;
store . _modulesNamespaceMap = Object . create ( null ) ;
var state = store . state ;
// init all modules
installModule ( store , state , [ ] , store . _modules . root , true ) ;
// reset vm
resetStoreVM ( store , state , hot ) ;
}
function resetStoreVM ( store , state , hot ) {
var oldVm = store . _vm ;
// bind store public getters
store . getters = { } ;
// reset local getters cache
store . _makeLocalGettersCache = Object . create ( null ) ;
var wrappedGetters = store . _wrappedGetters ;
var computed = { } ;
forEachValue ( wrappedGetters , function ( fn , key ) {
// use computed to leverage its lazy-caching mechanism
// direct inline function use will lead to closure preserving oldVm.
// using partial to return function with only arguments preserved in closure environment.
computed [ key ] = partial ( fn , store ) ;
Object . defineProperty ( store . getters , key , {
get : function ( ) { return store . _vm [ key ] ; } ,
enumerable : true // for local getters
} ) ;
} ) ;
// use a Vue instance to store the state tree
// suppress warnings just in case the user has added
// some funky global mixins
var silent = Vue . config . silent ;
Vue . config . silent = true ;
store . _vm = new Vue ( {
data : {
$$state : state
} ,
computed : computed
} ) ;
Vue . config . silent = silent ;
// enable strict mode for new vm
if ( store . strict ) {
enableStrictMode ( store ) ;
}
if ( oldVm ) {
if ( hot ) {
// dispatch changes in all subscribed watchers
// to force getter re-evaluation for hot reloading.
store . _withCommit ( function ( ) {
oldVm . _data . $$state = null ;
} ) ;
}
Vue . nextTick ( function ( ) { return oldVm . $destroy ( ) ; } ) ;
}
}
function installModule ( store , rootState , path , module , hot ) {
var isRoot = ! path . length ;
var namespace = store . _modules . getNamespace ( path ) ;
// register in namespace map
if ( module . namespaced ) {
if ( store . _modulesNamespaceMap [ namespace ] && ( "development" !== 'production' ) ) {
console . error ( ( "[vuex] duplicate namespace " + namespace + " for the namespaced module " + ( path . join ( '/' ) ) ) ) ;
}
store . _modulesNamespaceMap [ namespace ] = module ;
}
// set state
if ( ! isRoot && ! hot ) {
var parentState = getNestedState ( rootState , path . slice ( 0 , - 1 ) ) ;
var moduleName = path [ path . length - 1 ] ;
store . _withCommit ( function ( ) {
if ( ( true ) ) {
if ( moduleName in parentState ) {
console . warn (
( "[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + ( path . join ( '.' ) ) + "\"" )
) ;
}
}
Vue . set ( parentState , moduleName , module . state ) ;
} ) ;
}
var local = module . context = makeLocalContext ( store , namespace , path ) ;
module . forEachMutation ( function ( mutation , key ) {
var namespacedType = namespace + key ;
registerMutation ( store , namespacedType , mutation , local ) ;
} ) ;
module . forEachAction ( function ( action , key ) {
var type = action . root ? key : namespace + key ;
var handler = action . handler || action ;
registerAction ( store , type , handler , local ) ;
} ) ;
module . forEachGetter ( function ( getter , key ) {
var namespacedType = namespace + key ;
registerGetter ( store , namespacedType , getter , local ) ;
} ) ;
module . forEachChild ( function ( child , key ) {
installModule ( store , rootState , path . concat ( key ) , child , hot ) ;
} ) ;
}
/ * *
* make localized dispatch , commit , getters and state
* if there is no namespace , just use root ones
* /
function makeLocalContext ( store , namespace , path ) {
var noNamespace = namespace === '' ;
var local = {
dispatch : noNamespace ? store . dispatch : function ( _type , _payload , _options ) {
var args = unifyObjectStyle ( _type , _payload , _options ) ;
var payload = args . payload ;
var options = args . options ;
var type = args . type ;
if ( ! options || ! options . root ) {
type = namespace + type ;
if ( ( true ) && ! store . _actions [ type ] ) {
console . error ( ( "[vuex] unknown local action type: " + ( args . type ) + ", global type: " + type ) ) ;
return
}
}
return store . dispatch ( type , payload )
} ,
commit : noNamespace ? store . commit : function ( _type , _payload , _options ) {
var args = unifyObjectStyle ( _type , _payload , _options ) ;
var payload = args . payload ;
var options = args . options ;
var type = args . type ;
if ( ! options || ! options . root ) {
type = namespace + type ;
if ( ( true ) && ! store . _mutations [ type ] ) {
console . error ( ( "[vuex] unknown local mutation type: " + ( args . type ) + ", global type: " + type ) ) ;
return
}
}
store . commit ( type , payload , options ) ;
}
} ;
// getters and state object must be gotten lazily
// because they will be changed by vm update
Object . defineProperties ( local , {
getters : {
get : noNamespace
? function ( ) { return store . getters ; }
: function ( ) { return makeLocalGetters ( store , namespace ) ; }
} ,
state : {
get : function ( ) { return getNestedState ( store . state , path ) ; }
}
} ) ;
return local
}
function makeLocalGetters ( store , namespace ) {
if ( ! store . _makeLocalGettersCache [ namespace ] ) {
var gettersProxy = { } ;
var splitPos = namespace . length ;
Object . keys ( store . getters ) . forEach ( function ( type ) {
// skip if the target getter is not match this namespace
if ( type . slice ( 0 , splitPos ) !== namespace ) { return }
// extract local getter type
var localType = type . slice ( splitPos ) ;
// Add a port to the getters proxy.
// Define as getter property because
// we do not want to evaluate the getters in this time.
Object . defineProperty ( gettersProxy , localType , {
get : function ( ) { return store . getters [ type ] ; } ,
enumerable : true
} ) ;
} ) ;
store . _makeLocalGettersCache [ namespace ] = gettersProxy ;
}
return store . _makeLocalGettersCache [ namespace ]
}
function registerMutation ( store , type , handler , local ) {
var entry = store . _mutations [ type ] || ( store . _mutations [ type ] = [ ] ) ;
entry . push ( function wrappedMutationHandler ( payload ) {
handler . call ( store , local . state , payload ) ;
} ) ;
}
function registerAction ( store , type , handler , local ) {
var entry = store . _actions [ type ] || ( store . _actions [ type ] = [ ] ) ;
entry . push ( function wrappedActionHandler ( payload ) {
var res = handler . call ( store , {
dispatch : local . dispatch ,
commit : local . commit ,
getters : local . getters ,
state : local . state ,
rootGetters : store . getters ,
rootState : store . state
} , payload ) ;
if ( ! isPromise ( res ) ) {
res = Promise . resolve ( res ) ;
}
if ( store . _devtoolHook ) {
return res . catch ( function ( err ) {
store . _devtoolHook . emit ( 'vuex:error' , err ) ;
throw err
} )
} else {
return res
}
} ) ;
}
function registerGetter ( store , type , rawGetter , local ) {
if ( store . _wrappedGetters [ type ] ) {
if ( ( true ) ) {
console . error ( ( "[vuex] duplicate getter key: " + type ) ) ;
}
return
}
store . _wrappedGetters [ type ] = function wrappedGetter ( store ) {
return rawGetter (
local . state , // local state
local . getters , // local getters
store . state , // root state
store . getters // root getters
)
} ;
}
function enableStrictMode ( store ) {
store . _vm . $watch ( function ( ) { return this . _data . $$state } , function ( ) {
if ( ( true ) ) {
assert ( store . _committing , "do not mutate vuex store state outside mutation handlers." ) ;
}
} , { deep : true , sync : true } ) ;
}
function getNestedState ( state , path ) {
return path . reduce ( function ( state , key ) { return state [ key ] ; } , state )
}
function unifyObjectStyle ( type , payload , options ) {
if ( isObject ( type ) && type . type ) {
options = payload ;
payload = type ;
type = type . type ;
}
if ( ( true ) ) {
assert ( typeof type === 'string' , ( "expects string as the type, but found " + ( typeof type ) + "." ) ) ;
}
return { type : type , payload : payload , options : options }
}
function install ( _Vue ) {
if ( Vue && _Vue === Vue ) {
if ( ( true ) ) {
console . error (
'[vuex] already installed. Vue.use(Vuex) should be called only once.'
) ;
}
return
}
Vue = _Vue ;
applyMixin ( Vue ) ;
}
/ * *
* Reduce the code which written in Vue . js for getting the state .
* @ param { String } [ namespace ] - Module ' s namespace
* @ param { Object | Array } states # Object ' s item can be a function which accept state and getters for param , you can do something for state and getters in it .
* @ param { Object }
* /
var mapState = normalizeNamespace ( function ( namespace , states ) {
var res = { } ;
if ( ( true ) && ! isValidMap ( states ) ) {
console . error ( '[vuex] mapState: mapper parameter must be either an Array or an Object' ) ;
}
normalizeMap ( states ) . forEach ( function ( ref ) {
var key = ref . key ;
var val = ref . val ;
res [ key ] = function mappedState ( ) {
var state = this . $store . state ;
var getters = this . $store . getters ;
if ( namespace ) {
var module = getModuleByNamespace ( this . $store , 'mapState' , namespace ) ;
if ( ! module ) {
return
}
state = module . context . state ;
getters = module . context . getters ;
}
return typeof val === 'function'
? val . call ( this , state , getters )
: state [ val ]
} ;
// mark vuex getter for devtools
res [ key ] . vuex = true ;
} ) ;
return res
} ) ;
/ * *
* Reduce the code which written in Vue . js for committing the mutation
* @ param { String } [ namespace ] - Module ' s namespace
* @ param { Object | Array } mutations # Object ' s item can be a function which accept ` commit ` function as the first param , it can accept another params . You can commit mutation and do any other things in this function . specially , You need to pass anthor params from the mapped function .
* @ return { Object }
* /
var mapMutations = normalizeNamespace ( function ( namespace , mutations ) {
var res = { } ;
if ( ( true ) && ! isValidMap ( mutations ) ) {
console . error ( '[vuex] mapMutations: mapper parameter must be either an Array or an Object' ) ;
}
normalizeMap ( mutations ) . forEach ( function ( ref ) {
var key = ref . key ;
var val = ref . val ;
res [ key ] = function mappedMutation ( ) {
var args = [ ] , len = arguments . length ;
while ( len -- ) args [ len ] = arguments [ len ] ;
// Get the commit method from store
var commit = this . $store . commit ;
if ( namespace ) {
var module = getModuleByNamespace ( this . $store , 'mapMutations' , namespace ) ;
if ( ! module ) {
return
}
commit = module . context . commit ;
}
return typeof val === 'function'
? val . apply ( this , [ commit ] . concat ( args ) )
: commit . apply ( this . $store , [ val ] . concat ( args ) )
} ;
} ) ;
return res
} ) ;
/ * *
* Reduce the code which written in Vue . js for getting the getters
* @ param { String } [ namespace ] - Module ' s namespace
* @ param { Object | Array } getters
* @ return { Object }
* /
var mapGetters = normalizeNamespace ( function ( namespace , getters ) {
var res = { } ;
if ( ( true ) && ! isValidMap ( getters ) ) {
console . error ( '[vuex] mapGetters: mapper parameter must be either an Array or an Object' ) ;
}
normalizeMap ( getters ) . forEach ( function ( ref ) {
var key = ref . key ;
var val = ref . val ;
// The namespace has been mutated by normalizeNamespace
val = namespace + val ;
res [ key ] = function mappedGetter ( ) {
if ( namespace && ! getModuleByNamespace ( this . $store , 'mapGetters' , namespace ) ) {
return
}
if ( ( true ) && ! ( val in this . $store . getters ) ) {
console . error ( ( "[vuex] unknown getter: " + val ) ) ;
return
}
return this . $store . getters [ val ]
} ;
// mark vuex getter for devtools
res [ key ] . vuex = true ;
} ) ;
return res
} ) ;
/ * *
* Reduce the code which written in Vue . js for dispatch the action
* @ param { String } [ namespace ] - Module ' s namespace
* @ param { Object | Array } actions # Object ' s item can be a function which accept ` dispatch ` function as the first param , it can accept anthor params . You can dispatch action and do any other things in this function . specially , You need to pass anthor params from the mapped function .
* @ return { Object }
* /
var mapActions = normalizeNamespace ( function ( namespace , actions ) {
var res = { } ;
if ( ( true ) && ! isValidMap ( actions ) ) {
console . error ( '[vuex] mapActions: mapper parameter must be either an Array or an Object' ) ;
}
normalizeMap ( actions ) . forEach ( function ( ref ) {
var key = ref . key ;
var val = ref . val ;
res [ key ] = function mappedAction ( ) {
var args = [ ] , len = arguments . length ;
while ( len -- ) args [ len ] = arguments [ len ] ;
// get dispatch function from store
var dispatch = this . $store . dispatch ;
if ( namespace ) {
var module = getModuleByNamespace ( this . $store , 'mapActions' , namespace ) ;
if ( ! module ) {
return
}
dispatch = module . context . dispatch ;
}
return typeof val === 'function'
? val . apply ( this , [ dispatch ] . concat ( args ) )
: dispatch . apply ( this . $store , [ val ] . concat ( args ) )
} ;
} ) ;
return res
} ) ;
/ * *
* Rebinding namespace param for mapXXX function in special scoped , and return them by simple object
* @ param { String } namespace
* @ return { Object }
* /
var createNamespacedHelpers = function ( namespace ) { return ( {
mapState : mapState . bind ( null , namespace ) ,
mapGetters : mapGetters . bind ( null , namespace ) ,
mapMutations : mapMutations . bind ( null , namespace ) ,
mapActions : mapActions . bind ( null , namespace )
} ) ; } ;
/ * *
* Normalize the map
* normalizeMap ( [ 1 , 2 , 3 ] ) => [ { key : 1 , val : 1 } , { key : 2 , val : 2 } , { key : 3 , val : 3 } ]
* normalizeMap ( { a : 1 , b : 2 , c : 3 } ) => [ { key : 'a' , val : 1 } , { key : 'b' , val : 2 } , { key : 'c' , val : 3 } ]
* @ param { Array | Object } map
* @ return { Object }
* /
function normalizeMap ( map ) {
if ( ! isValidMap ( map ) ) {
return [ ]
}
return Array . isArray ( map )
? map . map ( function ( key ) { return ( { key : key , val : key } ) ; } )
: Object . keys ( map ) . map ( function ( key ) { return ( { key : key , val : map [ key ] } ) ; } )
}
/ * *
* Validate whether given map is valid or not
* @ param { * } map
* @ return { Boolean }
* /
function isValidMap ( map ) {
return Array . isArray ( map ) || isObject ( map )
}
/ * *
* Return a function expect two param contains namespace and map . it will normalize the namespace and then the param ' s function will handle the new namespace and the map .
* @ param { Function } fn
* @ return { Function }
* /
function normalizeNamespace ( fn ) {
return function ( namespace , map ) {
if ( typeof namespace !== 'string' ) {
map = namespace ;
namespace = '' ;
} else if ( namespace . charAt ( namespace . length - 1 ) !== '/' ) {
namespace += '/' ;
}
return fn ( namespace , map )
}
}
/ * *
* Search a special module from store by namespace . if module not exist , print error message .
* @ param { Object } store
* @ param { String } helper
* @ param { String } namespace
* @ return { Object }
* /
function getModuleByNamespace ( store , helper , namespace ) {
var module = store . _modulesNamespaceMap [ namespace ] ;
if ( ( true ) && ! module ) {
console . error ( ( "[vuex] module namespace not found in " + helper + "(): " + namespace ) ) ;
}
return module
}
// Credits: borrowed code from fcomb/redux-logger
function createLogger ( ref ) {
if ( ref === void 0 ) ref = { } ;
var collapsed = ref . collapsed ; if ( collapsed === void 0 ) collapsed = true ;
var filter = ref . filter ; if ( filter === void 0 ) filter = function ( mutation , stateBefore , stateAfter ) { return true ; } ;
var transformer = ref . transformer ; if ( transformer === void 0 ) transformer = function ( state ) { return state ; } ;
var mutationTransformer = ref . mutationTransformer ; if ( mutationTransformer === void 0 ) mutationTransformer = function ( mut ) { return mut ; } ;
var actionFilter = ref . actionFilter ; if ( actionFilter === void 0 ) actionFilter = function ( action , state ) { return true ; } ;
var actionTransformer = ref . actionTransformer ; if ( actionTransformer === void 0 ) actionTransformer = function ( act ) { return act ; } ;
var logMutations = ref . logMutations ; if ( logMutations === void 0 ) logMutations = true ;
var logActions = ref . logActions ; if ( logActions === void 0 ) logActions = true ;
var logger = ref . logger ; if ( logger === void 0 ) logger = console ;
return function ( store ) {
var prevState = deepCopy ( store . state ) ;
if ( typeof logger === 'undefined' ) {
return
}
if ( logMutations ) {
store . subscribe ( function ( mutation , state ) {
var nextState = deepCopy ( state ) ;
if ( filter ( mutation , prevState , nextState ) ) {
var formattedTime = getFormattedTime ( ) ;
var formattedMutation = mutationTransformer ( mutation ) ;
var message = "mutation " + ( mutation . type ) + formattedTime ;
startMessage ( logger , message , collapsed ) ;
logger . log ( '%c prev state' , 'color: #9E9E9E; font-weight: bold' , transformer ( prevState ) ) ;
logger . log ( '%c mutation' , 'color: #03A9F4; font-weight: bold' , formattedMutation ) ;
logger . log ( '%c next state' , 'color: #4CAF50; font-weight: bold' , transformer ( nextState ) ) ;
endMessage ( logger ) ;
}
prevState = nextState ;
} ) ;
}
if ( logActions ) {
store . subscribeAction ( function ( action , state ) {
if ( actionFilter ( action , state ) ) {
var formattedTime = getFormattedTime ( ) ;
var formattedAction = actionTransformer ( action ) ;
var message = "action " + ( action . type ) + formattedTime ;
startMessage ( logger , message , collapsed ) ;
logger . log ( '%c action' , 'color: #03A9F4; font-weight: bold' , formattedAction ) ;
endMessage ( logger ) ;
}
} ) ;
}
}
}
function startMessage ( logger , message , collapsed ) {
var startMessage = collapsed
? logger . groupCollapsed
: logger . group ;
// render
try {
startMessage . call ( logger , message ) ;
} catch ( e ) {
logger . log ( message ) ;
}
}
function endMessage ( logger ) {
try {
logger . groupEnd ( ) ;
} catch ( e ) {
logger . log ( '—— log end ——' ) ;
}
}
function getFormattedTime ( ) {
var time = new Date ( ) ;
return ( " @ " + ( pad ( time . getHours ( ) , 2 ) ) + ":" + ( pad ( time . getMinutes ( ) , 2 ) ) + ":" + ( pad ( time . getSeconds ( ) , 2 ) ) + "." + ( pad ( time . getMilliseconds ( ) , 3 ) ) )
}
function repeat ( str , times ) {
return ( new Array ( times + 1 ) ) . join ( str )
}
function pad ( num , maxLength ) {
return repeat ( '0' , maxLength - num . toString ( ) . length ) + num
}
var index _cjs = {
Store : Store ,
install : install ,
version : '3.6.2' ,
mapState : mapState ,
mapMutations : mapMutations ,
mapGetters : mapGetters ,
mapActions : mapActions ,
createNamespacedHelpers : createNamespacedHelpers ,
createLogger : createLogger
} ;
module . exports = index _cjs ;
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( /*! ./../../../../../webpack/buildin/global.js */ 2 ) ) )
/***/ } ) ,
/***/ 14 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / s t o r e / m o d u l e s / m o d u l e A . j s * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . default = void 0 ; function ownKeys ( object , enumerableOnly ) { var keys = Object . keys ( object ) ; if ( Object . getOwnPropertySymbols ) { var symbols = Object . getOwnPropertySymbols ( object ) ; if ( enumerableOnly ) symbols = symbols . filter ( function ( sym ) { return Object . getOwnPropertyDescriptor ( object , sym ) . enumerable ; } ) ; keys . push . apply ( keys , symbols ) ; } return keys ; } function _objectSpread ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] != null ? arguments [ i ] : { } ; if ( i % 2 ) { ownKeys ( Object ( source ) , true ) . forEach ( function ( key ) { _defineProperty ( target , key , source [ key ] ) ; } ) ; } else if ( Object . getOwnPropertyDescriptors ) { Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ; } else { ownKeys ( Object ( source ) ) . forEach ( function ( key ) { Object . defineProperty ( target , key , Object . getOwnPropertyDescriptor ( source , key ) ) ; } ) ; } } return target ; } function _defineProperty ( obj , key , value ) { if ( key in obj ) { Object . defineProperty ( obj , key , { value : value , enumerable : true , configurable : true , writable : true } ) ; } else { obj [ key ] = value ; } return obj ; } // 购物车模块
var _default = {
state : { //存放状态
// 底部导航的高
footHeight : '' ,
token : 'token已生成' ,
userInfo : { } ,
count : 0 ,
publicColor : '' ,
todos : [ {
id : 1 ,
text : '我是内容一' ,
done : true } ,
{
id : 2 ,
text : '我是内容二' ,
done : false } ] ,
obj : {
a : '吃鸡腿' ,
b : '吃自助餐' } ,
titleList : [ ] ,
imgList : [ ] ,
onLineList : [ ] ,
cartNum : 0 ,
cartPrice : 0 ,
geList : [ ] ,
changeBusiness : false } ,
// Vuex中store数据改变的唯一方法就是mutations 不适合异步方法
mutations : {
setNum : function setNum ( state , num ) {
state . cartNum = num ;
} ,
setPrice : function setPrice ( state , price ) {
state . cartPrice = price ;
} ,
setGe : function setGe ( state , payload ) {
state . geList = payload . geList ;
} ,
footHeightEv : function footHeightEv ( state , str ) {
state . footHeight = str ;
} ,
add : function add ( state ) {
state . count = 7 ;
} ,
add2 : function add2 ( state , payload ) {
state . count = payload . amount ;
} ,
// 单个属性处理方法
setToken : function setToken ( state , str ) {
state . token = str ;
} ,
// 对象处理方法
updateUserInfo : function updateUserInfo ( state , payload ) {
// 变更状态
state . userInfo = payload . userInfo ;
} ,
// 新增字段方法
newProp : function newProp ( state , payload ) {
state . obj = _objectSpread ( _objectSpread ( { } , state . obj ) , { } , { c : payload . c } ) ;
} ,
updateState : function updateState ( state , payload ) {
state . onLineList = payload . list ;
} } ,
// 可以执行任意的同步和异步操作
actions : {
addCountAction : function addCountAction ( _ref ) { var commit = _ref . commit ;
commit ( 'add' ) ;
} ,
addCountAction2 : function addCountAction2 ( context , payload ) {
context . commit ( 'add2' , payload ) ;
} ,
// 异步方法
addCountAction3 : function addCountAction3 ( context , payload ) {
setTimeout ( function ( ) {
context . commit ( 'add2' , payload ) ;
} , 2000 ) ;
} ,
actionA : function actionA ( _ref2 ) { var commit = _ref2 . commit ;
return new Promise ( function ( resolve , reject ) {
setTimeout ( function ( ) {
commit ( 'someMutation' ) ;
resolve ( ) ;
} , 1000 ) ;
} ) ;
} ,
actionB : function actionB ( _ref3 ) { var dispatch = _ref3 . dispatch , commit = _ref3 . commit ;
return dispatch ( 'actionA' ) . then ( function ( ) {
commit ( 'someOtherMutation' ) ;
} ) ;
} } ,
// Vuex 允许我们在 store 中定义“getter”( 可以认为是 store 的计算属性),对 state 的加工,是派生出来的数据。 可以在多组件中共享 getter 函数,这样做还可以提高运行效率。
getters : {
doneTodos : function doneTodos ( state ) {
return state . todos . filter ( function ( todo ) { return todo . done ; } ) ;
} ,
doneTodosCount : function doneTodosCount ( state , getters ) {
//state :可以访问数据
//getters: 访问其他函数, 等同于 store.getters
return getters . doneTodos . length ;
} ,
getTodoById : function getTodoById ( state ) { return function ( id ) {
return state . todos . find ( function ( todo ) { return todo . id === id ; } ) ;
} ; } } } ; exports . default = _default ;
/***/ } ) ,
/***/ 15 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / s t o r e / m o d u l e s / m o d u l e B . j s * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . default = void 0 ; function ownKeys ( object , enumerableOnly ) { var keys = Object . keys ( object ) ; if ( Object . getOwnPropertySymbols ) { var symbols = Object . getOwnPropertySymbols ( object ) ; if ( enumerableOnly ) symbols = symbols . filter ( function ( sym ) { return Object . getOwnPropertyDescriptor ( object , sym ) . enumerable ; } ) ; keys . push . apply ( keys , symbols ) ; } return keys ; } function _objectSpread ( target ) { for ( var i = 1 ; i < arguments . length ; i ++ ) { var source = arguments [ i ] != null ? arguments [ i ] : { } ; if ( i % 2 ) { ownKeys ( Object ( source ) , true ) . forEach ( function ( key ) { _defineProperty ( target , key , source [ key ] ) ; } ) ; } else if ( Object . getOwnPropertyDescriptors ) { Object . defineProperties ( target , Object . getOwnPropertyDescriptors ( source ) ) ; } else { ownKeys ( Object ( source ) ) . forEach ( function ( key ) { Object . defineProperty ( target , key , Object . getOwnPropertyDescriptor ( source , key ) ) ; } ) ; } } return target ; } function _defineProperty ( obj , key , value ) { if ( key in obj ) { Object . defineProperty ( obj , key , { value : value , enumerable : true , configurable : true , writable : true } ) ; } else { obj [ key ] = value ; } return obj ; } var _default = {
state : { //存放状态
token : 'token已生成' ,
userInfo : { } ,
count : 0 ,
publicColor : '' ,
todos : [ {
id : 1 ,
text : '我是内容一' ,
done : true } ,
{
id : 2 ,
text : '我是内容二' ,
done : false } ] ,
obj : {
a : '吃鸡腿' ,
b : '吃自助餐' } } ,
// Vuex中store数据改变的唯一方法就是mutations 不适合异步方法
mutations : {
add : function add ( state ) {
state . count = 7 ;
} ,
add2 : function add2 ( state , payload ) {
state . count = payload . amount ;
} ,
// 单个属性处理方法
setToken : function setToken ( state , str ) {
state . token = str ;
} ,
// 对象处理方法
updateUserInfo : function updateUserInfo ( state , payload ) {
// 变更状态
state . userInfo = payload . userInfo ;
} ,
// 新增字段方法
newProp : function newProp ( state , payload ) {
state . obj = _objectSpread ( _objectSpread ( { } , state . obj ) , { } , { c : payload . c } ) ;
} } ,
// 可以执行任意的同步和异步操作
actions : {
addCountAction : function addCountAction ( _ref ) { var commit = _ref . commit ;
commit ( 'add' ) ;
} ,
addCountAction2 : function addCountAction2 ( context , payload ) {
context . commit ( 'add2' , payload ) ;
} ,
// 异步方法
addCountAction3 : function addCountAction3 ( context , payload ) {
setTimeout ( function ( ) {
context . commit ( 'add2' , payload ) ;
} , 2000 ) ;
} ,
actionA : function actionA ( _ref2 ) { var commit = _ref2 . commit ;
return new Promise ( function ( resolve , reject ) {
setTimeout ( function ( ) {
commit ( 'someMutation' ) ;
resolve ( ) ;
} , 1000 ) ;
} ) ;
} ,
actionB : function actionB ( _ref3 ) { var dispatch = _ref3 . dispatch , commit = _ref3 . commit ;
return dispatch ( 'actionA' ) . then ( function ( ) {
commit ( 'someOtherMutation' ) ;
} ) ;
} } ,
// Vuex 允许我们在 store 中定义“getter”( 可以认为是 store 的计算属性),对 state 的加工,是派生出来的数据。 可以在多组件中共享 getter 函数,这样做还可以提高运行效率。
getters : {
// doneTodos: state => {
// return state.todos.filter(todo => todo.done)
// },
// doneTodosCount: (state, getters) => {
// //state :可以访问数据
// //getters: 访问其他函数, 等同于 store.getters
// return getters.doneTodos.length
// },
// getTodoById: (state) => (id) => {
// return state.todos.find(todo => todo.id === id)
// }
} } ; exports . default = _default ;
/***/ } ) ,
/***/ 16 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / j s F i l e / t o o l s . j s * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( uni ) { Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . default = void 0 ; var tools = {
timer : '' ,
/ * *
* @ description 埋点倒计时
* /
daoTime : function daoTime ( ) { var _this = this ;
var daoTime = uni . getStorageSync ( 'daoTime' ) ;
if ( daoTime == '' ) { //初次判断倒计时是否为空
uni . setStorageSync ( 'daoTime' , 60 ) ; //设置倒计时
daoTime = uni . getStorageSync ( 'daoTime' ) ;
this . timer = setInterval ( function ( ) {
uni . setStorageSync ( 'daoTime' , daoTime -- ) ; //设置倒计时
if ( uni . getStorageSync ( 'daoTime' ) <= 0 || uni . getStorageSync ( 'maiList' ) . length == 5 ) {
uni . removeStorageSync ( 'daoTime' ) ; //清空倒计时
clearInterval ( _this . timer ) ; //关闭倒计时
// console.log('上/报,埋点');
uni . removeStorageSync ( 'maiList' ) ; //清空上报参数
_this . daoTime ( ) ; //重新倒计时
}
} , 1000 ) ;
} else { //继续当前倒计时倒计
this . timer = setInterval ( function ( ) {
uni . setStorageSync ( 'daoTime' , daoTime -- ) ; //设置倒计时
if ( uni . getStorageSync ( 'daoTime' ) <= 0 || uni . getStorageSync ( 'maiList' ) . length == 5 ) {
uni . removeStorageSync ( 'daoTime' ) ; //清空倒计时
clearInterval ( _this . timer ) ; //关闭倒计时
// console.log('上报,埋点');
uni . removeStorageSync ( 'maiList' ) ; //清空上报参数
_this . daoTime ( ) ; //重新倒计时
}
} , 1000 ) ;
}
} ,
/ * *
* @ description 关闭倒计时
* /
closeTimer : function closeTimer ( ) {
clearInterval ( this . timer ) ;
console . log ( '倒计时清空了' ) ;
} ,
/ * *
* @ description 获取字符串中的数字
* /
obtainCount : function obtainCount ( str ) {
return parseInt ( str . replace ( /[^0-9]/ig , "" ) ) ;
} ,
/ * *
* @ description 获取微信扫码后的结果 , 并解析
* /
unescapeEv : function unescapeEv ( op ) {
var str = unescape ( op . q ) ;
return str ;
} ,
/ * *
* @ description 手机号验证
* /
isPhone : function isPhone ( phone ) {
// 手机号正则表达式
var reg _tel = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/ ;
return ! reg _tel . test ( phone ) ;
} ,
/ * *
* @ description 电子邮箱验证
* /
isEmail : function isEmail ( email ) {
var reg _email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ ;
return ! reg _email . test ( email ) ;
} ,
/ * *
* @ description 身份证验证
* /
isIdentity : function isIdentity ( identity ) {
var reg _identity = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/ ;
return ! reg _identity . test ( identity ) ;
} ,
/ * *
* @ description 手机号中间四位用 "****" 带替
* /
hideMPhone : function hideMPhone ( phone ) {
return "" . concat ( phone . substr ( 0 , 3 ) , "****" ) . concat ( phone . substr ( 7 ) ) ;
} ,
/ * *
* @ description 手机号中间加字符
* /
phoneAddChat : function phoneAddChat ( phone ) { var startNum = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 3 ; var endNum = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : 7 ; var character = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : ' ' ;
var phoneStr = phone ;
phoneStr = phoneStr . replace ( /\s*/g , "" ) ;
var phoneArr = [ ] ;
for ( var i = 0 ; i < phoneStr . length ; i ++ ) {
if ( i == startNum || i == endNum ) {
phoneArr . push ( "" . concat ( character ) + phoneStr . charAt ( i ) ) ;
} else {
phoneArr . push ( phoneStr . charAt ( i ) ) ;
}
}
phone = phoneArr . join ( "" ) ;
return phone ;
} ,
/ * *
* @ description 昵称从第一个字开始 , 后面的都用 "*" 代替
* /
hideName : function hideName ( name , num ) {
return "" . concat ( name . substr ( 0 , 1 ) , "****" ) . concat ( name . substr ( name . length - 1 ) ) ;
} ,
/ * *
* @ description 金额转换各三位数使用英文 "," 隔开
* /
changeNum : function changeNum ( num ) {
if ( num ) {
// 针对整数部分进行格式化处理,这是此方法的核心,也是稍难理解的一个地方,逆向的来思考或者采用简单的事例来实现就容易多了
/ *
也可以这样想象 , 现在有一串数字字符串在你面前 , 如果让你给他家千分位的逗号的话 , 你是怎么来思考和操作的 ?
字符串长度为0 / 1 / 2 / 3 时都不用添加
字符串长度大于3的时候 , 从右往左数 , 有三位字符就加一个逗号 , 然后继续往前数 , 直到不到往前数少于三位字符为止
* /
num = num + '' ; // 数字转换为字符串,数字是没有.length属性的
for ( var i = 0 ; i < Math . floor ( ( num . length - ( 1 + i ) ) / 3 ) ; i ++ ) {
num = num . substring ( 0 , num . length - ( 4 * i + 3 ) ) + ',' + num . substring ( num . length - ( 4 * i + 3 ) ) ;
}
// 将数据(符号、整数部分、小数部分)整体组合返回
return num ;
}
} ,
/ * *
* @ description 整数添加 . 00 , 小数就不添加
* /
addXiaoShu : function addXiaoShu ( num ) {
// console.log(num,'添加小数点后两位小数');
var str = num . toString ( ) ;
str = str * 1 ;
str = str . toFixed ( 2 ) ;
str = str + '' ;
return str . includes ( '.' ) ? str : str = num + '.00' ;
} ,
// type:+加、-减、*乘、/除
// len:小数后保留几位
/ * *
* @ description 数字换算解决失精度问题
* /
operationEv : function operationEv ( num1 , num2 , type ) { var len = arguments . length > 3 && arguments [ 3 ] !== undefined ? arguments [ 3 ] : 0 ;
// 将数字转化成字符串
num1 = num1 . toString ( ) ;
num2 = num2 . toString ( ) ;
// 获取小数点的位置
var index1 = num1 . indexOf ( "." ) ;
var index2 = num2 . indexOf ( "." ) ;
// 如果小数点存在,那么就再获取各自的小数位数
var ws1 = 0 ;
var ws2 = 0 ;
if ( index1 != - 1 ) {
ws1 = num1 . split ( "." ) [ 1 ] . length ;
}
if ( index2 != - 1 ) {
ws2 = num2 . split ( "." ) [ 1 ] . length ;
}
// 看谁的小数位数大,谁的小数位数小
var bigger = ws1 > ws2 ? ws1 : ws2 ;
var smaller = ws1 < ws2 ? ws1 : ws2 ;
// 计算得到需要补齐的0的个数
var zerosCount = bigger - smaller ;
// 好了,现在不管三七二十,全部去除小数点
num1 = num1 . replace ( "." , "" ) ;
num2 = num2 . replace ( "." , "" ) ;
// 比较num1和num2谁大, 比较方法就是看谁是smaller, 是smaller的一方就补0
if ( ws1 == smaller ) {
for ( var i = 0 ; i < zerosCount ; i ++ ) {
num1 += "0" ;
}
} else {
for ( var i = 0 ; i < zerosCount ; i ++ ) {
num2 += "0" ;
}
}
// 开始计算
var sum = "" ;
if ( type == "+" ) {
// 加
sum = parseInt ( num1 ) + parseInt ( num2 ) ;
}
if ( type == "-" ) {
// 减
sum = parseInt ( num1 ) - parseInt ( num2 ) ;
}
if ( type == "*" ) {
// 乘
sum = parseInt ( num1 ) * parseInt ( num2 ) ;
}
if ( type == "/" ) {
// 除
sum = parseInt ( num1 ) / parseInt ( num2 ) ;
}
// 根据较大的小数位数计算倍数
var beishu = 1 ;
for ( var i = 0 ; i < bigger ; i ++ ) {
beishu = beishu * 10 ;
}
sum = sum / beishu ;
if ( type == "*" ) {
switch ( bigger ) {
case 1 :
sum = sum / 10 ;
break ;
case 2 :
sum = sum / 100 ;
break ;
case 3 :
sum = sum / 1000 ;
break ; }
}
if ( type == "/" ) {
switch ( bigger ) {
case 1 :
sum = sum * 10 ;
break ;
case 2 :
sum = sum * 100 ;
break ;
case 3 :
sum = sum * 1000 ;
break ; }
}
len != 0 ? sum = sum . toFixed ( len ) : '' ;
return sum ;
} ,
/ * *
* @ description 金额输入框验证
* /
checkPrice : function checkPrice ( number , zong ) {
var reg = /^[0-9]*$/ ; //数字正则表达式
var newObj = { } ;
zong = parseInt ( zong ) . toString ( ) ; //取小数点左边的整数
if ( ! reg . test ( number ) ) { //不是数字时
newObj = {
len : zong . length , //动态设置长度
val : zong //动态设置值正整数的总金额
} ;
} else { //是数字时
newObj = {
len : zong . length ,
val : number //动态设置当前输入的值
} ;
if ( number * 1 > zong * 1 ) { //输入的金额大于总金额
newObj . val = zong ; //赋值总金额
}
}
return newObj ;
} ,
/ * *
* @ description 文本提示
* /
showToast : function showToast ( msg ) { var icon = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 'none' ; var time = arguments . length > 2 ? arguments [ 2 ] : undefined ;
// 弹框显示时间: 默认2秒
var newTime = 2000 ;
if ( time ) { newTime = time ; }
return uni . showToast ( {
title : msg ,
icon : icon ,
duration : newTime } ) ;
} ,
/ * *
* @ description 富文本处理
* /
escape2Html : function escape2Html ( str ) {
var arrEntities = { 'lt' : '<' , 'gt' : '>' , 'nbsp' : ' ' , 'amp' : '&' , 'quot' : '"' } ;
return str . replace ( /&(lt|gt|nbsp|amp|quot|src);/ig , function ( all , t ) {
return arrEntities [ t ] ;
} ) .
replace ( '<section' , '<div' ) .
replace ( /<img [^>]*src=['"]([^'"]+)[^>]*>/gi , function ( match , p1 ) {
return "<img mode=\"widthFix\" style=\"max-width:100%!important;height:auto\" src='" . concat ( p1 . indexOf ( 'http' ) > - 1 ? p1 : 'https://laonon.scdxtc.cn' + p1 , "' />" ) ;
} ) ;
} ,
/ * *
* @ description 检查网络状态
* /
networkStatus : function networkStatus ( ) { var _this2 = this ;
uni . getNetworkType ( {
success : function success ( res ) {
console . log ( '当前网络状态:' , res . networkType ) ; //none: 当前无网络连接
if ( res . networkType == 'none' ) {
uni . setStorageSync ( 'isNet' , false ) ;
} else {
uni . setStorageSync ( 'isNet' , true ) ;
// 微信小程序原生API性能优化
// 连网下,检测小程序是否有更新
_this2 . checkUpdate ( ) ;
}
} } ) ;
} ,
/ * *
* @ description app 、 小程序的检测版本并更新
* /
checkUpdate : function checkUpdate ( ) {
// 检测app
//检测小程序
var self = this ;
// 获取小程序更新机制兼容
if ( wx . canIUse ( 'getUpdateManager' ) ) {
var updateManager = wx . getUpdateManager ( ) ; //1. 检查小程序是否有新版本发布
updateManager . onCheckForUpdate ( function ( res ) { // 请求完新版本信息的回调
if ( res . hasUpdate ) {
//检测到新版本,需要更新,给出提示
wx . showModal ( {
title : '更新提示' ,
content : '检测到新版本,是否下载新版本并重启小程序?' ,
success : function success ( res ) {
if ( res . confirm ) {
//2. 用户确定下载更新小程序,小程序下载及更新静默进行
self . downLoadAndUpdate ( updateManager ) ;
// 清除所有缓存
uni . clearStorage ( ) ;
uni . clearStorageSync ( ) ;
} else if ( res . cancel ) {
//用户点击取消按钮的处理,如果需要强制更新,则给出二次弹窗,如果不需要,则这里的代码都可以删掉了
wx . showModal ( {
title : '温馨提示~' ,
content : '本次版本更新涉及到新的功能添加,旧版本无法正常访问的哦~' ,
showCancel : false , //隐藏取消按钮
confirmText : "确定更新" , //只保留确定更新按钮
success : function success ( res ) {
if ( res . confirm ) {
//下载新版本,并重新应用
self . downLoadAndUpdate ( updateManager ) ;
}
} } ) ;
}
} } ) ;
}
} ) ;
} else { // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
wx . showModal ( {
title : '提示' ,
content : '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。' } ) ;
}
} ,
// 下载小程序新版本并重启应用
downLoadAndUpdate : function downLoadAndUpdate ( updateManager ) {
var self = this ;
wx . showLoading ( ) ; //静默下载更新小程序新版本
updateManager . onUpdateReady ( function ( ) {
wx . hideLoading ( ) ; //新的版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager . applyUpdate ( ) ;
// 清除缓存
uni . clearStorageSync ( ) ;
uni . clearStorage ( ) ;
} ) ;
updateManager . onUpdateFailed ( function ( ) { // 新的版本下载失败
wx . showModal ( {
title : '已经有新版本了哟~' ,
content : '新版本已经上线啦~,请您删除当前小程序,重新搜索打开哟~' } ) ;
} ) ;
} ,
/ * *
* @ description 文本复制
* /
clickCopy : function clickCopy ( data ) {
uni . setClipboardData ( {
data : data ,
success : function success ( ) {
uni . showToast ( { title : '复制成功' , duration : 2000 , icon : 'none' } ) ;
} } ) ;
} ,
authTimer : null ,
/ * *
* @ description 判断是否授权 , 没授权 , 前往登录页面授权
* /
judgeAuth : function judgeAuth ( ) {
var auth = false ;
clearTimeout ( this . authTimer ) ;
2022-08-03 10:49:15 +00:00
if ( ! uni . getStorageSync ( 'token' ) ) {
2022-07-31 02:14:22 +00:00
this . showToast ( '请授权登录' ) ;
this . authTimer = setTimeout ( function ( ) {
uni . reLaunch ( { url : '/pages/login/login' } ) ;
} , 2000 ) ;
} else {
auth = true ;
}
return auth ;
} ,
/ * *
* @ description 判断当前环境 : 清空日志输出
* /
currentContext : function currentContext ( ) {
// 微信小程序原生API性能优化
var hInfo = wx . getAccountInfoSync ( ) ;
// console.log(hInfo.envVersion);//develop:开发版 trial: 体验版 release: 正式版
if ( hInfo . miniProgram . envVersion == "release" ) {
// 清除所有输出日志
console . log = function ( ) { } ;
// 开启埋点倒计时
// this.daoTime();
}
} ,
/ * *
* @ description 禁止小程序使用右上角分享
* /
disableShareEv : function disableShareEv ( ) {
wx . hideShareMenu ( {
menus : [ 'shareAppMessage' , 'shareTimeline' ] } ) ;
} ,
/ * *
* @ description 获取当前页面完整url
* /
obtainPagePath : function obtainPagePath ( ) {
var pages = getCurrentPages ( ) ;
// 获取纯页面路径
var route = pages [ pages . length - 1 ] . route ;
uni . setStorageSync ( 'url' , route ) ;
// 获取当前页面url, 带参数
var routeParam = pages [ pages . length - 1 ] . $page . fullPath ;
// console.log(routeParam.options,'获取当前url参数');
uni . setStorageSync ( 'page-path-options' , routeParam ) ;
console . log ( uni . getStorageSync ( 'page-path-options' ) , '当前页面完整路径' ) ;
} ,
/ * *
* @ description 拨打电话
* @ param { Number } phone
* /
countCustomer : function countCustomer ( ) { var phone = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : 10086 ;
var res = uni . getSystemInfoSync ( ) ;
if ( res . platform == 'ios' ) {
uni . makePhoneCall ( {
phoneNumber : phone * 1 ,
success : function success ( ) { } ,
fail : function fail ( ) { } } ) ;
} else {
uni . showActionSheet ( {
itemList : [ phone , '立即呼叫' ] ,
itemColor : '#3875F6' ,
success : function success ( res ) {
if ( res . tapIndex == 1 ) {
uni . makePhoneCall ( {
phoneNumber : phone } ) ;
}
} } ) ;
}
} ,
/ * *
* @ description 图片选择
* @ param { Number } count
* /
uploadImg : function uploadImg ( ) { var count = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : 1 ;
var imgArr = [ ] ;
uni . chooseImage ( {
count : count ,
sizeType : [ 'compressed' ] ,
sourceType : [ 'album' , 'camera' ] ,
success : function success ( res ) {
var files = res . tempFilePaths ;
console . log ( files ) ;
files . forEach ( function ( item ) {
imgArr . push ( item ) ;
} ) ;
} } ) ;
return imgArr ;
} ,
/ * *
* @ description 打开小程序获取用户信息权限
* /
wxOpenSet : function wxOpenSet ( ) {
// 用户信息
uni . authorize ( {
scope : 'scope.userInfo' ,
success : function success ( res ) { } ,
fail : function fail ( res ) {
uni . showModal ( {
content : '检测到您没打开获取信息功能权限,是否去设置打开?' ,
confirmText : "确认" ,
cancelText : '取消' ,
success : function success ( res ) {
if ( res . confirm ) {
uni . openSetting ( {
success : function success ( res ) {
console . log ( res ) ;
} } ) ;
} else {
console . log ( '取消' ) ;
}
} } ) ;
} } ) ;
} ,
/ * *
* @ description 传入目的地的经纬度 、 地点名称 、 详细地址 , 打开地图导航到达目的地
* /
goFlag : true ,
goThere : function goThere ( ) { var _this3 = this ; var latitude = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : 30.656693 ; var longitude = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 104.136425 ; var address = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : "四川省成都市成华区双店路B口" ;
if ( this . goFlag ) {
this . goFlag = false ;
wx . getLocation ( { //获取当前经纬度
type : 'wgs84' , //返回可以用于wx.openLocation的经纬度, 官方提示bug: iOS 6.3.30 type 参数不生效,只会返回 wgs84 类型的坐标信息
success : function success ( res ) {
wx . openLocation ( { //使用微信内置地图查看位置。
latitude : parseFloat ( latitude ) , //要去的纬度-地址
longitude : parseFloat ( longitude ) , //要去的经度-地址
address : address ,
fail : function fail ( err ) {
tools . showToast ( '地址信息错误' ) ;
} } ) ;
} } ) ;
setTimeout ( function ( ) {
_this3 . goFlag = true ;
} , 2000 ) ;
} else {
tools . showToast ( '请勿多次点击' ) ;
}
} ,
/ * *
* @ description 保存图片
* @ param { String } src
* /
saveImg : function saveImg ( src ) {
var exist = src . slice ( 0 , 4 ) ;
if ( exist == 'http' ) {
uni . downloadFile ( {
url : src ,
success : function success ( res ) {
uni . saveImageToPhotosAlbum ( {
filePath : res . tempFilePath ,
success : function success ( ) {
uni . showToast ( { title : '保存成功' , icon : 'error' } ) ;
} ,
fail : function fail ( ) {
uni . showToast ( { title : '保存失败' , icon : 'error' } ) ;
} } ) ;
} } ) ;
} else {
wx . saveFile ( {
tempFilePath : src ,
success : function success ( wximg ) { } } ) ;
}
} ,
/ * *
* @ description 把base64转换成图片
* @ param { String } data
* /
getBase64ImageUrl : function getBase64ImageUrl ( data ) {
/// 获取到base64Data
var base64Data = data ;
/// 通过微信小程序自带方法将base64转为二进制去除特殊符号, 再转回base64
base64Data = wx . arrayBufferToBase64 ( wx . base64ToArrayBuffer ( base64Data ) ) ;
/// 拼接请求头, data格式可以为image/png或者image/jpeg等, 看需求
var base64ImgUrl = "data:image/png;base64," + base64Data ;
/// 刷新数据
return base64ImgUrl ;
} } ; var _default =
{
tools : tools } ; exports . default = _default ;
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( /*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1 ) [ "default" ] ) )
/***/ } ) ,
/***/ 17 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / j s F i l e / r e q u s t . j s * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( uni ) { Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . default = void 0 ; // 清理所有缓存并前往登录授权页
var goLogin = function goLogin ( ) {
uni . clearStorageSync ( ) ;
uni . navigateTo ( {
url : '/pages/login/login' } ) ;
} ;
var flag = true ;
// 刷新token并跳转到当前页面
var authTimer = null ;
var refreshTokenPage = function refreshTokenPage ( ) {
clearTimeout ( authTimer ) ;
// 获取当前页面路径
var currentRoutes = getCurrentPages ( ) ; // 获取当前打开过的页面路由数组
var currentRoute = currentRoutes [ currentRoutes . length - 1 ] . route ; //获取当前页面路由
var currentParam = currentRoutes [ currentRoutes . length - 1 ] . options ; //获取路由参数
// 拼接参数
var param = '' ;
for ( var key in currentParam ) {
param += '?' + key + '=' + currentParam [ key ] ;
}
var localRoute = '/' + currentRoute + param ;
2022-08-04 05:38:20 +00:00
uni . setStorageSync ( 'page-path-options' , localRoute ) ;
setTimeout ( function ( ) {
uni . navigateTo ( {
url : '/pages/login/login' } ) ;
2022-07-31 02:14:22 +00:00
2022-08-04 05:38:20 +00:00
} , 1200 ) ;
2022-07-31 02:14:22 +00:00
flag = true ;
} ;
// 请求错误处理
var checkError = function checkError ( e ) {
console . log ( '500接口错误' ) ;
// console.error("----接口错误----", e)
if ( e . data ) {
if ( e . data . code ) {
switch ( Number ( e . data . code ) ) {
case 500 :
// 接口错误
console . log ( '500接口错误' ) ;
case 4003 :
// 参数错误
console . log ( '4003参数错误' ) ;
break ;
case 4004 :
// 记录不存在
console . log ( '4004记录不存在' ) ;
break ;
case 5001 :
// xxx错误
console . log ( '5001xxx错误' ) ;
break ;
case 5050 :
// 服务器错误,请稍后重试
console . log ( '5050服务器错误, 请稍后重试' ) ;
// 调用到登录页
goLogin ( ) ;
break ;
case 5051 :
// 未知错误
console . log ( '5051未知错误' ) ;
break ;
case 6001 :
// token验证失败或已失效
console . log ( '6001token验证失败或已失效' ) ;
if ( flag ) {
flag = false ;
// 调用刷新token事件并跳转到当前页面
refreshTokenPage ( ) ;
}
break ; }
}
}
} ;
// 封装request的(GET、POST)请求
var request = function request ( method , url , options ) {
var methods = '' ;
var headers = { } ;
switch ( method ) {
case 'get' :
methods = 'GET' ;
headers = {
'Content-Type' : 'application/json; charset=UTF-8' ,
'Authorization' : 'Bearer ' + uni . getStorageSync ( 'token' ) || false } ;
break ;
case 'post' :
methods = 'POST' ;
headers = {
'Content-Type' : 'application/json; charset=UTF-8' ,
'Authorization' : 'Bearer ' + uni . getStorageSync ( 'token' ) || false } ;
break ;
case 'postForm' :
methods = 'POST' ;
headers = {
'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' ,
'Authorization' : 'Bearer ' + uni . getStorageSync ( 'token' ) || false } ;
break ; }
return new Promise ( function ( resolve , reject ) {
uni . request ( {
url : "" . concat ( getApp ( ) . globalData . hostapi ) . concat ( url ) ,
method : methods ,
data : options ,
header : headers ,
success : function success ( res ) {
console . log ( "" . concat ( url , "\u8FD4\u7684\u7ED3\u679C===>" ) , res ) ;
if ( res . statusCode == 200 ) {
resolve ( res . data ) ;
if ( res . data . code !== 0 ) {
// 接口返回错误信息
checkError ( res ) ;
}
} else {
// 接口返回错误信息
checkError ( res ) ;
}
} ,
fail : function fail ( e ) {
// 接口请求错误
checkError ( e , reject ) ;
} ,
complete : function complete ( rest ) {
// 是否成功,都会执行
console . log ( rest , 100 ) ;
} } ) ;
} ) ;
} ;
// 上传文件 封装请求
var uploadFile = function uploadFile ( url , options ) {
var tempData = options || { } ;
return new Promise ( function ( resolve , reject ) {
uni . uploadFile ( {
url : "" . concat ( getApp ( ) . globalData . hostapi ) . concat ( url ) ,
filePath : tempData . path ,
name : 'image' ,
fileType : 'image' ,
formData : tempData ,
header : {
'Content-Type' : 'multipart/form-data;charset=UTF-8' ,
'Authorization' : 'Bearer ' + uni . getStorageSync ( 'token' ) || false } ,
success : function success ( res ) {
if ( res . statusCode == 200 ) {
var temp = JSON . parse ( res . data ) ;
if ( temp . code == 0 ) {
resolve ( temp ) ;
}
}
} } ) ;
} ) ;
} ; var _default =
{
get : function get ( url , options ) {
return request ( 'get' , url , options ) ;
} ,
// JOSN格式
post : function post ( url , options ) {
return request ( 'post' , url , options ) ;
} ,
// form-data格式
postForm : function postForm ( url , options ) {
return request ( 'postForm' , url , options ) ;
} ,
// 上传
upload : function upload ( url , options ) {
return uploadFile ( url , options ) ;
} } ; exports . default = _default ;
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( /*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1 ) [ "default" ] ) )
/***/ } ) ,
/***/ 2 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * ( webpack ) / buildin / global . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
var g ;
// This works in non-strict mode
g = ( function ( ) {
return this ;
} ) ( ) ;
try {
// This works if eval is allowed (see CSP)
g = g || new Function ( "return this" ) ( ) ;
} catch ( e ) {
// This works if the window reference is available
if ( typeof window === "object" ) g = window ;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module . exports = g ;
/***/ } ) ,
/***/ 24 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / j s F i l e / p u b l i c - a p i . j s * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . slidePosition = slidePosition ; exports . getCartInfo = getCartInfo ; var _requst = _interopRequireDefault ( _ _webpack _require _ _ ( /*! ./requst.js */ 17 ) ) ;
var _index = _interopRequireDefault ( _ _webpack _require _ _ ( /*! @/store/index.js */ 12 ) ) ; function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
// 查询轮播位置
function slidePosition ( data ) {
return _requst . default . get ( "/api/common/slide-positions" ) ;
}
// 查询购物车信息
function getCartInfo ( ) {
2022-08-04 05:38:20 +00:00
return _requst . default . post ( '/api/index/indexGetShoppingCartInformation' ) . then ( function ( res ) {
2022-07-31 02:14:22 +00:00
if ( res . code == 0 ) {
2022-08-04 05:38:20 +00:00
console . log ( res , '首页购物车信息' ) ;
var cartObj = res . data ;
2022-07-31 02:14:22 +00:00
_index . default . commit ( 'setNum' , cartObj . count ) ;
2022-08-04 05:38:20 +00:00
_index . default . commit ( 'setPrice' , cartObj . price ) ;
2022-07-31 02:14:22 +00:00
}
} ) ;
}
/***/ } ) ,
/***/ 3 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / node _modules / @ dcloudio / uni - i18n / dist / uni - i18n . es . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
/* WEBPACK VAR INJECTION */ ( function ( uni , global ) { Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . compileI18nJsonStr = compileI18nJsonStr ; exports . hasI18nJson = hasI18nJson ; exports . initVueI18n = initVueI18n ; exports . isI18nStr = isI18nStr ; exports . normalizeLocale = normalizeLocale ; exports . parseI18nJson = parseI18nJson ; exports . resolveLocale = resolveLocale ; exports . isString = exports . LOCALE _ZH _HANT = exports . LOCALE _ZH _HANS = exports . LOCALE _FR = exports . LOCALE _ES = exports . LOCALE _EN = exports . I18n = exports . Formatter = void 0 ; function _slicedToArray ( arr , i ) { return _arrayWithHoles ( arr ) || _iterableToArrayLimit ( arr , i ) || _unsupportedIterableToArray ( arr , i ) || _nonIterableRest ( ) ; } function _nonIterableRest ( ) { throw new TypeError ( "Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ; } function _unsupportedIterableToArray ( o , minLen ) { if ( ! o ) return ; if ( typeof o === "string" ) return _arrayLikeToArray ( o , minLen ) ; var n = Object . prototype . toString . call ( o ) . slice ( 8 , - 1 ) ; if ( n === "Object" && o . constructor ) n = o . constructor . name ; if ( n === "Map" || n === "Set" ) return Array . from ( o ) ; if ( n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ . test ( n ) ) return _arrayLikeToArray ( o , minLen ) ; } function _arrayLikeToArray ( arr , len ) { if ( len == null || len > arr . length ) len = arr . length ; for ( var i = 0 , arr2 = new Array ( len ) ; i < len ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; } function _iterableToArrayLimit ( arr , i ) { if ( typeof Symbol === "undefined" || ! ( Symbol . iterator in Object ( arr ) ) ) return ; var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] != null ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; } function _arrayWithHoles ( arr ) { if ( Array . isArray ( arr ) ) return arr ; } function _classCallCheck ( instance , Constructor ) { if ( ! ( instance instanceof Constructor ) ) { throw new TypeError ( "Cannot call a class as a function" ) ; } } function _defineProperties ( target , props ) { for ( var i = 0 ; i < props . length ; i ++ ) { var descriptor = props [ i ] ; descriptor . enumerable = descriptor . enumerable || false ; descriptor . configurable = true ; if ( "value" in descriptor ) descriptor . writable = true ; Object . defineProperty ( target , descriptor . key , descriptor ) ; } } function _createClass ( Constructor , protoProps , staticProps ) { if ( protoProps ) _defineProperties ( Constructor . prototype , protoProps ) ; if ( staticProps ) _defineProperties ( Constructor , staticProps ) ; return Constructor ; } var isArray = Array . isArray ;
var isObject = function isObject ( val ) { return val !== null && typeof val === 'object' ; } ;
var defaultDelimiters = [ '{' , '}' ] ; var
BaseFormatter = /*#__PURE__*/ function ( ) {
function BaseFormatter ( ) { _classCallCheck ( this , BaseFormatter ) ;
this . _caches = Object . create ( null ) ;
} _createClass ( BaseFormatter , [ { key : "interpolate" , value : function interpolate (
message , values ) { var delimiters = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : defaultDelimiters ;
if ( ! values ) {
return [ message ] ;
}
var tokens = this . _caches [ message ] ;
if ( ! tokens ) {
tokens = parse ( message , delimiters ) ;
this . _caches [ message ] = tokens ;
}
return compile ( tokens , values ) ;
} } ] ) ; return BaseFormatter ; } ( ) ; exports . Formatter = BaseFormatter ;
var RE _TOKEN _LIST _VALUE = /^(?:\d)+/ ;
var RE _TOKEN _NAMED _VALUE = /^(?:\w)+/ ;
function parse ( format , _ref ) { var _ref2 = _slicedToArray ( _ref , 2 ) , startDelimiter = _ref2 [ 0 ] , endDelimiter = _ref2 [ 1 ] ;
var tokens = [ ] ;
var position = 0 ;
var text = '' ;
while ( position < format . length ) {
var char = format [ position ++ ] ;
if ( char === startDelimiter ) {
if ( text ) {
tokens . push ( { type : 'text' , value : text } ) ;
}
text = '' ;
var sub = '' ;
char = format [ position ++ ] ;
while ( char !== undefined && char !== endDelimiter ) {
sub += char ;
char = format [ position ++ ] ;
}
var isClosed = char === endDelimiter ;
var type = RE _TOKEN _LIST _VALUE . test ( sub ) ?
'list' :
isClosed && RE _TOKEN _NAMED _VALUE . test ( sub ) ?
'named' :
'unknown' ;
tokens . push ( { value : sub , type : type } ) ;
}
// else if (char === '%') {
// // when found rails i18n syntax, skip text capture
// if (format[position] !== '{') {
// text += char
// }
// }
else {
text += char ;
}
}
text && tokens . push ( { type : 'text' , value : text } ) ;
return tokens ;
}
function compile ( tokens , values ) {
var compiled = [ ] ;
var index = 0 ;
var mode = isArray ( values ) ?
'list' :
isObject ( values ) ?
'named' :
'unknown' ;
if ( mode === 'unknown' ) {
return compiled ;
}
while ( index < tokens . length ) {
var token = tokens [ index ] ;
switch ( token . type ) {
case 'text' :
compiled . push ( token . value ) ;
break ;
case 'list' :
compiled . push ( values [ parseInt ( token . value , 10 ) ] ) ;
break ;
case 'named' :
if ( mode === 'named' ) {
compiled . push ( values [ token . value ] ) ;
} else
{
if ( true ) {
console . warn ( "Type of token '" . concat ( token . type , "' and format of value '" ) . concat ( mode , "' don't match!" ) ) ;
}
}
break ;
case 'unknown' :
if ( true ) {
console . warn ( "Detect 'unknown' type of token!" ) ;
}
break ; }
index ++ ;
}
return compiled ;
}
var LOCALE _ZH _HANS = 'zh-Hans' ; exports . LOCALE _ZH _HANS = LOCALE _ZH _HANS ;
var LOCALE _ZH _HANT = 'zh-Hant' ; exports . LOCALE _ZH _HANT = LOCALE _ZH _HANT ;
var LOCALE _EN = 'en' ; exports . LOCALE _EN = LOCALE _EN ;
var LOCALE _FR = 'fr' ; exports . LOCALE _FR = LOCALE _FR ;
var LOCALE _ES = 'es' ; exports . LOCALE _ES = LOCALE _ES ;
var hasOwnProperty = Object . prototype . hasOwnProperty ;
var hasOwn = function hasOwn ( val , key ) { return hasOwnProperty . call ( val , key ) ; } ;
var defaultFormatter = new BaseFormatter ( ) ;
function include ( str , parts ) {
return ! ! parts . find ( function ( part ) { return str . indexOf ( part ) !== - 1 ; } ) ;
}
function startsWith ( str , parts ) {
return parts . find ( function ( part ) { return str . indexOf ( part ) === 0 ; } ) ;
}
function normalizeLocale ( locale , messages ) {
if ( ! locale ) {
return ;
}
locale = locale . trim ( ) . replace ( /_/g , '-' ) ;
if ( messages && messages [ locale ] ) {
return locale ;
}
locale = locale . toLowerCase ( ) ;
if ( locale . indexOf ( 'zh' ) === 0 ) {
if ( locale . indexOf ( '-hans' ) > - 1 ) {
return LOCALE _ZH _HANS ;
}
if ( locale . indexOf ( '-hant' ) > - 1 ) {
return LOCALE _ZH _HANT ;
}
if ( include ( locale , [ '-tw' , '-hk' , '-mo' , '-cht' ] ) ) {
return LOCALE _ZH _HANT ;
}
return LOCALE _ZH _HANS ;
}
var lang = startsWith ( locale , [ LOCALE _EN , LOCALE _FR , LOCALE _ES ] ) ;
if ( lang ) {
return lang ;
}
} var
I18n = /*#__PURE__*/ function ( ) {
function I18n ( _ref3 ) { var locale = _ref3 . locale , fallbackLocale = _ref3 . fallbackLocale , messages = _ref3 . messages , watcher = _ref3 . watcher , formater = _ref3 . formater ; _classCallCheck ( this , I18n ) ;
this . locale = LOCALE _EN ;
this . fallbackLocale = LOCALE _EN ;
this . message = { } ;
this . messages = { } ;
this . watchers = [ ] ;
if ( fallbackLocale ) {
this . fallbackLocale = fallbackLocale ;
}
this . formater = formater || defaultFormatter ;
this . messages = messages || { } ;
this . setLocale ( locale || LOCALE _EN ) ;
if ( watcher ) {
this . watchLocale ( watcher ) ;
}
} _createClass ( I18n , [ { key : "setLocale" , value : function setLocale (
locale ) { var _this = this ;
var oldLocale = this . locale ;
this . locale = normalizeLocale ( locale , this . messages ) || this . fallbackLocale ;
if ( ! this . messages [ this . locale ] ) {
// 可能初始化时不存在
this . messages [ this . locale ] = { } ;
}
this . message = this . messages [ this . locale ] ;
// 仅发生变化时,通知
if ( oldLocale !== this . locale ) {
this . watchers . forEach ( function ( watcher ) {
watcher ( _this . locale , oldLocale ) ;
} ) ;
}
} } , { key : "getLocale" , value : function getLocale ( )
{
return this . locale ;
} } , { key : "watchLocale" , value : function watchLocale (
fn ) { var _this2 = this ;
var index = this . watchers . push ( fn ) - 1 ;
return function ( ) {
_this2 . watchers . splice ( index , 1 ) ;
} ;
} } , { key : "add" , value : function add (
locale , message ) { var override = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : true ;
var curMessages = this . messages [ locale ] ;
if ( curMessages ) {
if ( override ) {
Object . assign ( curMessages , message ) ;
} else
{
Object . keys ( message ) . forEach ( function ( key ) {
if ( ! hasOwn ( curMessages , key ) ) {
curMessages [ key ] = message [ key ] ;
}
} ) ;
}
} else
{
this . messages [ locale ] = message ;
}
} } , { key : "f" , value : function f (
message , values , delimiters ) {
return this . formater . interpolate ( message , values , delimiters ) . join ( '' ) ;
} } , { key : "t" , value : function t (
key , locale , values ) {
var message = this . message ;
if ( typeof locale === 'string' ) {
locale = normalizeLocale ( locale , this . messages ) ;
locale && ( message = this . messages [ locale ] ) ;
} else
{
values = locale ;
}
if ( ! hasOwn ( message , key ) ) {
console . warn ( "Cannot translate the value of keypath " . concat ( key , ". Use the value of keypath as default." ) ) ;
return key ;
}
return this . formater . interpolate ( message [ key ] , values ) . join ( '' ) ;
} } ] ) ; return I18n ; } ( ) ; exports . I18n = I18n ;
function watchAppLocale ( appVm , i18n ) {
// 需要保证 watch 的触发在组件渲染之前
if ( appVm . $watchLocale ) {
// vue2
appVm . $watchLocale ( function ( newLocale ) {
i18n . setLocale ( newLocale ) ;
} ) ;
} else
{
appVm . $watch ( function ( ) { return appVm . $locale ; } , function ( newLocale ) {
i18n . setLocale ( newLocale ) ;
} ) ;
}
}
function getDefaultLocale ( ) {
if ( typeof uni !== 'undefined' && uni . getLocale ) {
return uni . getLocale ( ) ;
}
// 小程序平台, uni 和 uni-i18n 互相引用,导致访问不到 uni, 故在 global 上挂了 getLocale
if ( typeof global !== 'undefined' && global . getLocale ) {
return global . getLocale ( ) ;
}
return LOCALE _EN ;
}
function initVueI18n ( locale ) { var messages = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : { } ; var fallbackLocale = arguments . length > 2 ? arguments [ 2 ] : undefined ; var watcher = arguments . length > 3 ? arguments [ 3 ] : undefined ;
// 兼容旧版本入参
if ( typeof locale !== 'string' ) { var _ref4 =
[
messages ,
locale ] ; locale = _ref4 [ 0 ] ; messages = _ref4 [ 1 ] ;
}
if ( typeof locale !== 'string' ) {
// 因为小程序平台, uni-i18n 和 uni 互相引用,导致此时访问 uni 时,为 undefined
locale = getDefaultLocale ( ) ;
}
if ( typeof fallbackLocale !== 'string' ) {
fallbackLocale =
typeof _ _uniConfig !== 'undefined' && _ _uniConfig . fallbackLocale ||
LOCALE _EN ;
}
var i18n = new I18n ( {
locale : locale ,
fallbackLocale : fallbackLocale ,
messages : messages ,
watcher : watcher } ) ;
var _t = function t ( key , values ) {
if ( typeof getApp !== 'function' ) {
// app view
/* eslint-disable no-func-assign */
_t = function t ( key , values ) {
return i18n . t ( key , values ) ;
} ;
} else
{
var isWatchedAppLocale = false ;
_t = function t ( key , values ) {
var appVm = getApp ( ) . $vm ;
// 可能$vm还不存在, 比如在支付宝小程序中, 组件定义较早, 在props的default里使用了t()函数( 如uni-goods-nav) , 此时app还未初始化
// options: {
// type: Array,
// default () {
// return [{
// icon: 'shop',
// text: t("uni-goods-nav.options.shop"),
// }, {
// icon: 'cart',
// text: t("uni-goods-nav.options.cart")
// }]
// }
// },
if ( appVm ) {
// 触发响应式
appVm . $locale ;
if ( ! isWatchedAppLocale ) {
isWatchedAppLocale = true ;
watchAppLocale ( appVm , i18n ) ;
}
}
return i18n . t ( key , values ) ;
} ;
}
return _t ( key , values ) ;
} ;
return {
i18n : i18n ,
f : function f ( message , values , delimiters ) {
return i18n . f ( message , values , delimiters ) ;
} ,
t : function t ( key , values ) {
return _t ( key , values ) ;
} ,
add : function add ( locale , message ) { var override = arguments . length > 2 && arguments [ 2 ] !== undefined ? arguments [ 2 ] : true ;
return i18n . add ( locale , message , override ) ;
} ,
watch : function watch ( fn ) {
return i18n . watchLocale ( fn ) ;
} ,
getLocale : function getLocale ( ) {
return i18n . getLocale ( ) ;
} ,
setLocale : function setLocale ( newLocale ) {
return i18n . setLocale ( newLocale ) ;
} } ;
}
var isString = function isString ( val ) { return typeof val === 'string' ; } ; exports . isString = isString ;
var formater ;
function hasI18nJson ( jsonObj , delimiters ) {
if ( ! formater ) {
formater = new BaseFormatter ( ) ;
}
return walkJsonObj ( jsonObj , function ( jsonObj , key ) {
var value = jsonObj [ key ] ;
if ( isString ( value ) ) {
if ( isI18nStr ( value , delimiters ) ) {
return true ;
}
} else
{
return hasI18nJson ( value , delimiters ) ;
}
} ) ;
}
function parseI18nJson ( jsonObj , values , delimiters ) {
if ( ! formater ) {
formater = new BaseFormatter ( ) ;
}
walkJsonObj ( jsonObj , function ( jsonObj , key ) {
var value = jsonObj [ key ] ;
if ( isString ( value ) ) {
if ( isI18nStr ( value , delimiters ) ) {
jsonObj [ key ] = compileStr ( value , values , delimiters ) ;
}
} else
{
parseI18nJson ( value , values , delimiters ) ;
}
} ) ;
return jsonObj ;
}
function compileI18nJsonStr ( jsonStr , _ref5 ) { var locale = _ref5 . locale , locales = _ref5 . locales , delimiters = _ref5 . delimiters ;
if ( ! isI18nStr ( jsonStr , delimiters ) ) {
return jsonStr ;
}
if ( ! formater ) {
formater = new BaseFormatter ( ) ;
}
var localeValues = [ ] ;
Object . keys ( locales ) . forEach ( function ( name ) {
if ( name !== locale ) {
localeValues . push ( {
locale : name ,
values : locales [ name ] } ) ;
}
} ) ;
localeValues . unshift ( { locale : locale , values : locales [ locale ] } ) ;
try {
return JSON . stringify ( compileJsonObj ( JSON . parse ( jsonStr ) , localeValues , delimiters ) , null , 2 ) ;
}
catch ( e ) { }
return jsonStr ;
}
function isI18nStr ( value , delimiters ) {
return value . indexOf ( delimiters [ 0 ] ) > - 1 ;
}
function compileStr ( value , values , delimiters ) {
return formater . interpolate ( value , values , delimiters ) . join ( '' ) ;
}
function compileValue ( jsonObj , key , localeValues , delimiters ) {
var value = jsonObj [ key ] ;
if ( isString ( value ) ) {
// 存在国际化
if ( isI18nStr ( value , delimiters ) ) {
jsonObj [ key ] = compileStr ( value , localeValues [ 0 ] . values , delimiters ) ;
if ( localeValues . length > 1 ) {
// 格式化国际化语言
var valueLocales = jsonObj [ key + 'Locales' ] = { } ;
localeValues . forEach ( function ( localValue ) {
valueLocales [ localValue . locale ] = compileStr ( value , localValue . values , delimiters ) ;
} ) ;
}
}
} else
{
compileJsonObj ( value , localeValues , delimiters ) ;
}
}
function compileJsonObj ( jsonObj , localeValues , delimiters ) {
walkJsonObj ( jsonObj , function ( jsonObj , key ) {
compileValue ( jsonObj , key , localeValues , delimiters ) ;
} ) ;
return jsonObj ;
}
function walkJsonObj ( jsonObj , walk ) {
if ( isArray ( jsonObj ) ) {
for ( var i = 0 ; i < jsonObj . length ; i ++ ) {
if ( walk ( jsonObj , i ) ) {
return true ;
}
}
} else
if ( isObject ( jsonObj ) ) {
for ( var key in jsonObj ) {
if ( walk ( jsonObj , key ) ) {
return true ;
}
}
}
return false ;
}
function resolveLocale ( locales ) {
return function ( locale ) {
if ( ! locale ) {
return locale ;
}
locale = normalizeLocale ( locale ) || locale ;
return resolveLocaleChain ( locale ) . find ( function ( locale ) { return locales . indexOf ( locale ) > - 1 ; } ) ;
} ;
}
function resolveLocaleChain ( locale ) {
var chain = [ ] ;
var tokens = locale . split ( '-' ) ;
while ( tokens . length ) {
chain . push ( tokens . join ( '-' ) ) ;
tokens . pop ( ) ;
}
return chain ;
}
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( /*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1 ) [ "default" ] , _ _webpack _require _ _ ( /*! ./../../../webpack/buildin/global.js */ 2 ) ) )
/***/ } ) ,
/***/ 4 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * . / node _modules / @ dcloudio / vue - cli - plugin - uni / packages / mp - vue / dist / mp . runtime . esm . js * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! exports provided: default */
/***/ ( function ( module , _ _webpack _exports _ _ , _ _webpack _require _ _ ) {
"use strict" ;
_ _webpack _require _ _ . r ( _ _webpack _exports _ _ ) ;
/* WEBPACK VAR INJECTION */ ( function ( global ) { / * !
* Vue . js v2 . 6.11
* ( c ) 2014 - 2022 Evan You
* Released under the MIT License .
* /
/* */
var emptyObject = Object . freeze ( { } ) ;
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef ( v ) {
return v === undefined || v === null
}
function isDef ( v ) {
return v !== undefined && v !== null
}
function isTrue ( v ) {
return v === true
}
function isFalse ( v ) {
return v === false
}
/ * *
* Check if value is primitive .
* /
function isPrimitive ( value ) {
return (
typeof value === 'string' ||
typeof value === 'number' ||
// $flow-disable-line
typeof value === 'symbol' ||
typeof value === 'boolean'
)
}
/ * *
* Quick object check - this is primarily used to tell
* Objects from primitive values when we know the value
* is a JSON - compliant type .
* /
function isObject ( obj ) {
return obj !== null && typeof obj === 'object'
}
/ * *
* Get the raw type string of a value , e . g . , [ object Object ] .
* /
var _toString = Object . prototype . toString ;
function toRawType ( value ) {
return _toString . call ( value ) . slice ( 8 , - 1 )
}
/ * *
* Strict object type check . Only returns true
* for plain JavaScript objects .
* /
function isPlainObject ( obj ) {
return _toString . call ( obj ) === '[object Object]'
}
function isRegExp ( v ) {
return _toString . call ( v ) === '[object RegExp]'
}
/ * *
* Check if val is a valid array index .
* /
function isValidArrayIndex ( val ) {
var n = parseFloat ( String ( val ) ) ;
return n >= 0 && Math . floor ( n ) === n && isFinite ( val )
}
function isPromise ( val ) {
return (
isDef ( val ) &&
typeof val . then === 'function' &&
typeof val . catch === 'function'
)
}
/ * *
* Convert a value to a string that is actually rendered .
* /
function toString ( val ) {
return val == null
? ''
: Array . isArray ( val ) || ( isPlainObject ( val ) && val . toString === _toString )
? JSON . stringify ( val , null , 2 )
: String ( val )
}
/ * *
* Convert an input value to a number for persistence .
* If the conversion fails , return original string .
* /
function toNumber ( val ) {
var n = parseFloat ( val ) ;
return isNaN ( n ) ? val : n
}
/ * *
* Make a map and return a function for checking if a key
* is in that map .
* /
function makeMap (
str ,
expectsLowerCase
) {
var map = Object . create ( null ) ;
var list = str . split ( ',' ) ;
for ( var i = 0 ; i < list . length ; i ++ ) {
map [ list [ i ] ] = true ;
}
return expectsLowerCase
? function ( val ) { return map [ val . toLowerCase ( ) ] ; }
: function ( val ) { return map [ val ] ; }
}
/ * *
* Check if a tag is a built - in tag .
* /
var isBuiltInTag = makeMap ( 'slot,component' , true ) ;
/ * *
* Check if an attribute is a reserved attribute .
* /
var isReservedAttribute = makeMap ( 'key,ref,slot,slot-scope,is' ) ;
/ * *
* Remove an item from an array .
* /
function remove ( arr , item ) {
if ( arr . length ) {
var index = arr . indexOf ( item ) ;
if ( index > - 1 ) {
return arr . splice ( index , 1 )
}
}
}
/ * *
* Check whether an object has the property .
* /
var hasOwnProperty = Object . prototype . hasOwnProperty ;
function hasOwn ( obj , key ) {
return hasOwnProperty . call ( obj , key )
}
/ * *
* Create a cached version of a pure function .
* /
function cached ( fn ) {
var cache = Object . create ( null ) ;
return ( function cachedFn ( str ) {
var hit = cache [ str ] ;
return hit || ( cache [ str ] = fn ( str ) )
} )
}
/ * *
* Camelize a hyphen - delimited string .
* /
var camelizeRE = /-(\w)/g ;
var camelize = cached ( function ( str ) {
return str . replace ( camelizeRE , function ( _ , c ) { return c ? c . toUpperCase ( ) : '' ; } )
} ) ;
/ * *
* Capitalize a string .
* /
var capitalize = cached ( function ( str ) {
return str . charAt ( 0 ) . toUpperCase ( ) + str . slice ( 1 )
} ) ;
/ * *
* Hyphenate a camelCase string .
* /
var hyphenateRE = /\B([A-Z])/g ;
var hyphenate = cached ( function ( str ) {
return str . replace ( hyphenateRE , '-$1' ) . toLowerCase ( )
} ) ;
/ * *
* Simple bind polyfill for environments that do not support it ,
* e . g . , PhantomJS 1. x . Technically , we don ' t need this anymore
* since native bind is now performant enough in most browsers .
* But removing it would mean breaking code that was able to run in
* PhantomJS 1. x , so this must be kept for backward compatibility .
* /
/* istanbul ignore next */
function polyfillBind ( fn , ctx ) {
function boundFn ( a ) {
var l = arguments . length ;
return l
? l > 1
? fn . apply ( ctx , arguments )
: fn . call ( ctx , a )
: fn . call ( ctx )
}
boundFn . _length = fn . length ;
return boundFn
}
function nativeBind ( fn , ctx ) {
return fn . bind ( ctx )
}
var bind = Function . prototype . bind
? nativeBind
: polyfillBind ;
/ * *
* Convert an Array - like object to a real Array .
* /
function toArray ( list , start ) {
start = start || 0 ;
var i = list . length - start ;
var ret = new Array ( i ) ;
while ( i -- ) {
ret [ i ] = list [ i + start ] ;
}
return ret
}
/ * *
* Mix properties into target object .
* /
function extend ( to , _from ) {
for ( var key in _from ) {
to [ key ] = _from [ key ] ;
}
return to
}
/ * *
* Merge an Array of Objects into a single Object .
* /
function toObject ( arr ) {
var res = { } ;
for ( var i = 0 ; i < arr . length ; i ++ ) {
if ( arr [ i ] ) {
extend ( res , arr [ i ] ) ;
}
}
return res
}
/* eslint-disable no-unused-vars */
/ * *
* Perform no operation .
* Stubbing args to make Flow happy without leaving useless transpiled code
* with ... rest ( https : //flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
* /
function noop ( a , b , c ) { }
/ * *
* Always return false .
* /
var no = function ( a , b , c ) { return false ; } ;
/* eslint-enable no-unused-vars */
/ * *
* Return the same value .
* /
var identity = function ( _ ) { return _ ; } ;
/ * *
* Check if two values are loosely equal - that is ,
* if they are plain objects , do they have the same shape ?
* /
function looseEqual ( a , b ) {
if ( a === b ) { return true }
var isObjectA = isObject ( a ) ;
var isObjectB = isObject ( b ) ;
if ( isObjectA && isObjectB ) {
try {
var isArrayA = Array . isArray ( a ) ;
var isArrayB = Array . isArray ( b ) ;
if ( isArrayA && isArrayB ) {
return a . length === b . length && a . every ( function ( e , i ) {
return looseEqual ( e , b [ i ] )
} )
} else if ( a instanceof Date && b instanceof Date ) {
return a . getTime ( ) === b . getTime ( )
} else if ( ! isArrayA && ! isArrayB ) {
var keysA = Object . keys ( a ) ;
var keysB = Object . keys ( b ) ;
return keysA . length === keysB . length && keysA . every ( function ( key ) {
return looseEqual ( a [ key ] , b [ key ] )
} )
} else {
/* istanbul ignore next */
return false
}
} catch ( e ) {
/* istanbul ignore next */
return false
}
} else if ( ! isObjectA && ! isObjectB ) {
return String ( a ) === String ( b )
} else {
return false
}
}
/ * *
* Return the first index at which a loosely equal value can be
* found in the array ( if value is a plain object , the array must
* contain an object of the same shape ) , or - 1 if it is not present .
* /
function looseIndexOf ( arr , val ) {
for ( var i = 0 ; i < arr . length ; i ++ ) {
if ( looseEqual ( arr [ i ] , val ) ) { return i }
}
return - 1
}
/ * *
* Ensure a function is called only once .
* /
function once ( fn ) {
var called = false ;
return function ( ) {
if ( ! called ) {
called = true ;
fn . apply ( this , arguments ) ;
}
}
}
var ASSET _TYPES = [
'component' ,
'directive' ,
'filter'
] ;
var LIFECYCLE _HOOKS = [
'beforeCreate' ,
'created' ,
'beforeMount' ,
'mounted' ,
'beforeUpdate' ,
'updated' ,
'beforeDestroy' ,
'destroyed' ,
'activated' ,
'deactivated' ,
'errorCaptured' ,
'serverPrefetch'
] ;
/* */
var config = ( {
/ * *
* Option merge strategies ( used in core / util / options )
* /
// $flow-disable-line
optionMergeStrategies : Object . create ( null ) ,
/ * *
* Whether to suppress warnings .
* /
silent : false ,
/ * *
* Show production mode tip message on boot ?
* /
productionTip : "development" !== 'production' ,
/ * *
* Whether to enable devtools
* /
devtools : "development" !== 'production' ,
/ * *
* Whether to record perf
* /
performance : false ,
/ * *
* Error handler for watcher errors
* /
errorHandler : null ,
/ * *
* Warn handler for watcher warns
* /
warnHandler : null ,
/ * *
* Ignore certain custom elements
* /
ignoredElements : [ ] ,
/ * *
* Custom user key aliases for v - on
* /
// $flow-disable-line
keyCodes : Object . create ( null ) ,
/ * *
* Check if a tag is reserved so that it cannot be registered as a
* component . This is platform - dependent and may be overwritten .
* /
isReservedTag : no ,
/ * *
* Check if an attribute is reserved so that it cannot be used as a component
* prop . This is platform - dependent and may be overwritten .
* /
isReservedAttr : no ,
/ * *
* Check if a tag is an unknown element .
* Platform - dependent .
* /
isUnknownElement : no ,
/ * *
* Get the namespace of an element
* /
getTagNamespace : noop ,
/ * *
* Parse the real tag name for the specific platform .
* /
parsePlatformTagName : identity ,
/ * *
* Check if an attribute must be bound using property , e . g . value
* Platform - dependent .
* /
mustUseProp : no ,
/ * *
* Perform updates asynchronously . Intended to be used by Vue Test Utils
* This will significantly reduce performance if set to false .
* /
async : true ,
/ * *
* Exposed for legacy reasons
* /
_lifecycleHooks : LIFECYCLE _HOOKS
} ) ;
/* */
/ * *
* unicode letters used for parsing html tags , component names and property paths .
* using https : //www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
* skipping \u10000 - \uEFFFF due to it freezing up PhantomJS
* /
var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/ ;
/ * *
* Check if a string starts with $ or _
* /
function isReserved ( str ) {
var c = ( str + '' ) . charCodeAt ( 0 ) ;
return c === 0x24 || c === 0x5F
}
/ * *
* Define a property .
* /
function def ( obj , key , val , enumerable ) {
Object . defineProperty ( obj , key , {
value : val ,
enumerable : ! ! enumerable ,
writable : true ,
configurable : true
} ) ;
}
/ * *
* Parse simple path .
* /
var bailRE = new RegExp ( ( "[^" + ( unicodeRegExp . source ) + ".$_\\d]" ) ) ;
function parsePath ( path ) {
if ( bailRE . test ( path ) ) {
return
}
var segments = path . split ( '.' ) ;
return function ( obj ) {
for ( var i = 0 ; i < segments . length ; i ++ ) {
if ( ! obj ) { return }
obj = obj [ segments [ i ] ] ;
}
return obj
}
}
/* */
// can we use __proto__?
var hasProto = '__proto__' in { } ;
// Browser environment sniffing
var inBrowser = typeof window !== 'undefined' ;
var inWeex = typeof WXEnvironment !== 'undefined' && ! ! WXEnvironment . platform ;
var weexPlatform = inWeex && WXEnvironment . platform . toLowerCase ( ) ;
var UA = inBrowser && window . navigator . userAgent . toLowerCase ( ) ;
var isIE = UA && /msie|trident/ . test ( UA ) ;
var isIE9 = UA && UA . indexOf ( 'msie 9.0' ) > 0 ;
var isEdge = UA && UA . indexOf ( 'edge/' ) > 0 ;
var isAndroid = ( UA && UA . indexOf ( 'android' ) > 0 ) || ( weexPlatform === 'android' ) ;
var isIOS = ( UA && /iphone|ipad|ipod|ios/ . test ( UA ) ) || ( weexPlatform === 'ios' ) ;
var isChrome = UA && /chrome\/\d+/ . test ( UA ) && ! isEdge ;
var isPhantomJS = UA && /phantomjs/ . test ( UA ) ;
var isFF = UA && UA . match ( /firefox\/(\d+)/ ) ;
// Firefox has a "watch" function on Object.prototype...
var nativeWatch = ( { } ) . watch ;
if ( inBrowser ) {
try {
var opts = { } ;
Object . defineProperty ( opts , 'passive' , ( {
get : function get ( ) {
}
} ) ) ; // https://github.com/facebook/flow/issues/285
window . addEventListener ( 'test-passive' , null , opts ) ;
} catch ( e ) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer ;
var isServerRendering = function ( ) {
if ( _isServer === undefined ) {
/* istanbul ignore if */
if ( ! inBrowser && ! inWeex && typeof global !== 'undefined' ) {
// detect presence of vue-server-renderer and avoid
// Webpack shimming the process
_isServer = global [ 'process' ] && global [ 'process' ] . env . VUE _ENV === 'server' ;
} else {
_isServer = false ;
}
}
return _isServer
} ;
// detect devtools
var devtools = inBrowser && window . _ _VUE _DEVTOOLS _GLOBAL _HOOK _ _ ;
/* istanbul ignore next */
function isNative ( Ctor ) {
return typeof Ctor === 'function' && /native code/ . test ( Ctor . toString ( ) )
}
var hasSymbol =
typeof Symbol !== 'undefined' && isNative ( Symbol ) &&
typeof Reflect !== 'undefined' && isNative ( Reflect . ownKeys ) ;
var _Set ;
/* istanbul ignore if */ // $flow-disable-line
if ( typeof Set !== 'undefined' && isNative ( Set ) ) {
// use native Set when available.
_Set = Set ;
} else {
// a non-standard Set polyfill that only works with primitive keys.
_Set = /*@__PURE__*/ ( function ( ) {
function Set ( ) {
this . set = Object . create ( null ) ;
}
Set . prototype . has = function has ( key ) {
return this . set [ key ] === true
} ;
Set . prototype . add = function add ( key ) {
this . set [ key ] = true ;
} ;
Set . prototype . clear = function clear ( ) {
this . set = Object . create ( null ) ;
} ;
return Set ;
} ( ) ) ;
}
/* */
var warn = noop ;
var tip = noop ;
var generateComponentTrace = ( noop ) ; // work around flow check
var formatComponentName = ( noop ) ;
if ( true ) {
var hasConsole = typeof console !== 'undefined' ;
var classifyRE = /(?:^|[-_])(\w)/g ;
var classify = function ( str ) { return str
. replace ( classifyRE , function ( c ) { return c . toUpperCase ( ) ; } )
. replace ( /[-_]/g , '' ) ; } ;
warn = function ( msg , vm ) {
var trace = vm ? generateComponentTrace ( vm ) : '' ;
if ( config . warnHandler ) {
config . warnHandler . call ( null , msg , vm , trace ) ;
} else if ( hasConsole && ( ! config . silent ) ) {
console . error ( ( "[Vue warn]: " + msg + trace ) ) ;
}
} ;
tip = function ( msg , vm ) {
if ( hasConsole && ( ! config . silent ) ) {
console . warn ( "[Vue tip]: " + msg + (
vm ? generateComponentTrace ( vm ) : ''
) ) ;
}
} ;
formatComponentName = function ( vm , includeFile ) {
if ( vm . $root === vm ) {
if ( vm . $options && vm . $options . _ _file ) { // fixed by xxxxxx
return ( '' ) + vm . $options . _ _file
}
return '<Root>'
}
var options = typeof vm === 'function' && vm . cid != null
? vm . options
: vm . _isVue
? vm . $options || vm . constructor . options
: vm ;
var name = options . name || options . _componentTag ;
var file = options . _ _file ;
if ( ! name && file ) {
var match = file . match ( /([^/\\]+)\.vue$/ ) ;
name = match && match [ 1 ] ;
}
return (
( name ? ( "<" + ( classify ( name ) ) + ">" ) : "<Anonymous>" ) +
( file && includeFile !== false ? ( " at " + file ) : '' )
)
} ;
var repeat = function ( str , n ) {
var res = '' ;
while ( n ) {
if ( n % 2 === 1 ) { res += str ; }
if ( n > 1 ) { str += str ; }
n >>= 1 ;
}
return res
} ;
generateComponentTrace = function ( vm ) {
if ( vm . _isVue && vm . $parent ) {
var tree = [ ] ;
var currentRecursiveSequence = 0 ;
while ( vm && vm . $options . name !== 'PageBody' ) {
if ( tree . length > 0 ) {
var last = tree [ tree . length - 1 ] ;
if ( last . constructor === vm . constructor ) {
currentRecursiveSequence ++ ;
vm = vm . $parent ;
continue
} else if ( currentRecursiveSequence > 0 ) {
tree [ tree . length - 1 ] = [ last , currentRecursiveSequence ] ;
currentRecursiveSequence = 0 ;
}
}
! vm . $options . isReserved && tree . push ( vm ) ;
vm = vm . $parent ;
}
return '\n\nfound in\n\n' + tree
. map ( function ( vm , i ) { return ( "" + ( i === 0 ? '---> ' : repeat ( ' ' , 5 + i * 2 ) ) + ( Array . isArray ( vm )
? ( ( formatComponentName ( vm [ 0 ] ) ) + "... (" + ( vm [ 1 ] ) + " recursive calls)" )
: formatComponentName ( vm ) ) ) ; } )
. join ( '\n' )
} else {
return ( "\n\n(found in " + ( formatComponentName ( vm ) ) + ")" )
}
} ;
}
/* */
var uid = 0 ;
/ * *
* A dep is an observable that can have multiple
* directives subscribing to it .
* /
var Dep = function Dep ( ) {
this . id = uid ++ ;
this . subs = [ ] ;
} ;
Dep . prototype . addSub = function addSub ( sub ) {
this . subs . push ( sub ) ;
} ;
Dep . prototype . removeSub = function removeSub ( sub ) {
remove ( this . subs , sub ) ;
} ;
Dep . prototype . depend = function depend ( ) {
if ( Dep . SharedObject . target ) {
Dep . SharedObject . target . addDep ( this ) ;
}
} ;
Dep . prototype . notify = function notify ( ) {
// stabilize the subscriber list first
var subs = this . subs . slice ( ) ;
if ( true && ! config . async ) {
// subs aren't sorted in scheduler if not running async
// we need to sort them now to make sure they fire in correct
// order
subs . sort ( function ( a , b ) { return a . id - b . id ; } ) ;
}
for ( var i = 0 , l = subs . length ; i < l ; i ++ ) {
subs [ i ] . update ( ) ;
}
} ;
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
// fixed by xxxxxx (nvue shared vuex)
/* eslint-disable no-undef */
Dep . SharedObject = { } ;
Dep . SharedObject . target = null ;
Dep . SharedObject . targetStack = [ ] ;
function pushTarget ( target ) {
Dep . SharedObject . targetStack . push ( target ) ;
Dep . SharedObject . target = target ;
Dep . target = target ;
}
function popTarget ( ) {
Dep . SharedObject . targetStack . pop ( ) ;
Dep . SharedObject . target = Dep . SharedObject . targetStack [ Dep . SharedObject . targetStack . length - 1 ] ;
Dep . target = Dep . SharedObject . target ;
}
/* */
var VNode = function VNode (
tag ,
data ,
children ,
text ,
elm ,
context ,
componentOptions ,
asyncFactory
) {
this . tag = tag ;
this . data = data ;
this . children = children ;
this . text = text ;
this . elm = elm ;
this . ns = undefined ;
this . context = context ;
this . fnContext = undefined ;
this . fnOptions = undefined ;
this . fnScopeId = undefined ;
this . key = data && data . key ;
this . componentOptions = componentOptions ;
this . componentInstance = undefined ;
this . parent = undefined ;
this . raw = false ;
this . isStatic = false ;
this . isRootInsert = true ;
this . isComment = false ;
this . isCloned = false ;
this . isOnce = false ;
this . asyncFactory = asyncFactory ;
this . asyncMeta = undefined ;
this . isAsyncPlaceholder = false ;
} ;
var prototypeAccessors = { child : { configurable : true } } ;
// DEPRECATED: alias for componentInstance for backwards compat.
/* istanbul ignore next */
prototypeAccessors . child . get = function ( ) {
return this . componentInstance
} ;
Object . defineProperties ( VNode . prototype , prototypeAccessors ) ;
var createEmptyVNode = function ( text ) {
if ( text === void 0 ) text = '' ;
var node = new VNode ( ) ;
node . text = text ;
node . isComment = true ;
return node
} ;
function createTextVNode ( val ) {
return new VNode ( undefined , undefined , undefined , String ( val ) )
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode ( vnode ) {
var cloned = new VNode (
vnode . tag ,
vnode . data ,
// #7975
// clone children array to avoid mutating original in case of cloning
// a child.
vnode . children && vnode . children . slice ( ) ,
vnode . text ,
vnode . elm ,
vnode . context ,
vnode . componentOptions ,
vnode . asyncFactory
) ;
cloned . ns = vnode . ns ;
cloned . isStatic = vnode . isStatic ;
cloned . key = vnode . key ;
cloned . isComment = vnode . isComment ;
cloned . fnContext = vnode . fnContext ;
cloned . fnOptions = vnode . fnOptions ;
cloned . fnScopeId = vnode . fnScopeId ;
cloned . asyncMeta = vnode . asyncMeta ;
cloned . isCloned = true ;
return cloned
}
/ *
* not type checking this file because flow doesn ' t play well with
* dynamically accessing methods on Array prototype
* /
var arrayProto = Array . prototype ;
var arrayMethods = Object . create ( arrayProto ) ;
var methodsToPatch = [
'push' ,
'pop' ,
'shift' ,
'unshift' ,
'splice' ,
'sort' ,
'reverse'
] ;
/ * *
* Intercept mutating methods and emit events
* /
methodsToPatch . forEach ( function ( method ) {
// cache original method
var original = arrayProto [ method ] ;
def ( arrayMethods , method , function mutator ( ) {
var args = [ ] , len = arguments . length ;
while ( len -- ) args [ len ] = arguments [ len ] ;
var result = original . apply ( this , args ) ;
var ob = this . _ _ob _ _ ;
var inserted ;
switch ( method ) {
case 'push' :
case 'unshift' :
inserted = args ;
break
case 'splice' :
inserted = args . slice ( 2 ) ;
break
}
if ( inserted ) { ob . observeArray ( inserted ) ; }
// notify change
ob . dep . notify ( ) ;
return result
} ) ;
} ) ;
/* */
var arrayKeys = Object . getOwnPropertyNames ( arrayMethods ) ;
/ * *
* In some cases we may want to disable observation inside a component ' s
* update computation .
* /
var shouldObserve = true ;
function toggleObserving ( value ) {
shouldObserve = value ;
}
/ * *
* Observer class that is attached to each observed
* object . Once attached , the observer converts the target
* object ' s property keys into getter / setters that
* collect dependencies and dispatch updates .
* /
var Observer = function Observer ( value ) {
this . value = value ;
this . dep = new Dep ( ) ;
this . vmCount = 0 ;
def ( value , '__ob__' , this ) ;
if ( Array . isArray ( value ) ) {
if ( hasProto ) {
{ // fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑
if ( value . push !== value . _ _proto _ _ . push ) {
copyAugment ( value , arrayMethods , arrayKeys ) ;
} else {
protoAugment ( value , arrayMethods ) ;
}
}
} else {
copyAugment ( value , arrayMethods , arrayKeys ) ;
}
this . observeArray ( value ) ;
} else {
this . walk ( value ) ;
}
} ;
/ * *
* Walk through all properties and convert them into
* getter / setters . This method should only be called when
* value type is Object .
* /
Observer . prototype . walk = function walk ( obj ) {
var keys = Object . keys ( obj ) ;
for ( var i = 0 ; i < keys . length ; i ++ ) {
defineReactive$$1 ( obj , keys [ i ] ) ;
}
} ;
/ * *
* Observe a list of Array items .
* /
Observer . prototype . observeArray = function observeArray ( items ) {
for ( var i = 0 , l = items . length ; i < l ; i ++ ) {
observe ( items [ i ] ) ;
}
} ;
// helpers
/ * *
* Augment a target Object or Array by intercepting
* the prototype chain using _ _proto _ _
* /
function protoAugment ( target , src ) {
/* eslint-disable no-proto */
target . _ _proto _ _ = src ;
/* eslint-enable no-proto */
}
/ * *
* Augment a target Object or Array by defining
* hidden properties .
* /
/* istanbul ignore next */
function copyAugment ( target , src , keys ) {
for ( var i = 0 , l = keys . length ; i < l ; i ++ ) {
var key = keys [ i ] ;
def ( target , key , src [ key ] ) ;
}
}
/ * *
* Attempt to create an observer instance for a value ,
* returns the new observer if successfully observed ,
* or the existing observer if the value already has one .
* /
function observe ( value , asRootData ) {
if ( ! isObject ( value ) || value instanceof VNode ) {
return
}
var ob ;
if ( hasOwn ( value , '__ob__' ) && value . _ _ob _ _ instanceof Observer ) {
ob = value . _ _ob _ _ ;
} else if (
shouldObserve &&
! isServerRendering ( ) &&
( Array . isArray ( value ) || isPlainObject ( value ) ) &&
Object . isExtensible ( value ) &&
! value . _isVue
) {
ob = new Observer ( value ) ;
}
if ( asRootData && ob ) {
ob . vmCount ++ ;
}
return ob
}
/ * *
* Define a reactive property on an Object .
* /
function defineReactive$$1 (
obj ,
key ,
val ,
customSetter ,
shallow
) {
var dep = new Dep ( ) ;
var property = Object . getOwnPropertyDescriptor ( obj , key ) ;
if ( property && property . configurable === false ) {
return
}
// cater for pre-defined getter/setters
var getter = property && property . get ;
var setter = property && property . set ;
if ( ( ! getter || setter ) && arguments . length === 2 ) {
val = obj [ key ] ;
}
var childOb = ! shallow && observe ( val ) ;
Object . defineProperty ( obj , key , {
enumerable : true ,
configurable : true ,
get : function reactiveGetter ( ) {
var value = getter ? getter . call ( obj ) : val ;
if ( Dep . SharedObject . target ) { // fixed by xxxxxx
dep . depend ( ) ;
if ( childOb ) {
childOb . dep . depend ( ) ;
if ( Array . isArray ( value ) ) {
dependArray ( value ) ;
}
}
}
return value
} ,
set : function reactiveSetter ( newVal ) {
var value = getter ? getter . call ( obj ) : val ;
/* eslint-disable no-self-compare */
if ( newVal === value || ( newVal !== newVal && value !== value ) ) {
return
}
/* eslint-enable no-self-compare */
if ( true && customSetter ) {
customSetter ( ) ;
}
// #7981: for accessor properties without setter
if ( getter && ! setter ) { return }
if ( setter ) {
setter . call ( obj , newVal ) ;
} else {
val = newVal ;
}
childOb = ! shallow && observe ( newVal ) ;
dep . notify ( ) ;
}
} ) ;
}
/ * *
* Set a property on an object . Adds the new property and
* triggers change notification if the property doesn ' t
* already exist .
* /
function set ( target , key , val ) {
if ( true &&
( isUndef ( target ) || isPrimitive ( target ) )
) {
warn ( ( "Cannot set reactive property on undefined, null, or primitive value: " + ( ( target ) ) ) ) ;
}
if ( Array . isArray ( target ) && isValidArrayIndex ( key ) ) {
target . length = Math . max ( target . length , key ) ;
target . splice ( key , 1 , val ) ;
return val
}
if ( key in target && ! ( key in Object . prototype ) ) {
target [ key ] = val ;
return val
}
var ob = ( target ) . _ _ob _ _ ;
if ( target . _isVue || ( ob && ob . vmCount ) ) {
true && warn (
'Avoid adding reactive properties to a Vue instance or its root $data ' +
'at runtime - declare it upfront in the data option.'
) ;
return val
}
if ( ! ob ) {
target [ key ] = val ;
return val
}
defineReactive$$1 ( ob . value , key , val ) ;
ob . dep . notify ( ) ;
return val
}
/ * *
* Delete a property and trigger change if necessary .
* /
function del ( target , key ) {
if ( true &&
( isUndef ( target ) || isPrimitive ( target ) )
) {
warn ( ( "Cannot delete reactive property on undefined, null, or primitive value: " + ( ( target ) ) ) ) ;
}
if ( Array . isArray ( target ) && isValidArrayIndex ( key ) ) {
target . splice ( key , 1 ) ;
return
}
var ob = ( target ) . _ _ob _ _ ;
if ( target . _isVue || ( ob && ob . vmCount ) ) {
true && warn (
'Avoid deleting properties on a Vue instance or its root $data ' +
'- just set it to null.'
) ;
return
}
if ( ! hasOwn ( target , key ) ) {
return
}
delete target [ key ] ;
if ( ! ob ) {
return
}
ob . dep . notify ( ) ;
}
/ * *
* Collect dependencies on array elements when the array is touched , since
* we cannot intercept array element access like property getters .
* /
function dependArray ( value ) {
for ( var e = ( void 0 ) , i = 0 , l = value . length ; i < l ; i ++ ) {
e = value [ i ] ;
e && e . _ _ob _ _ && e . _ _ob _ _ . dep . depend ( ) ;
if ( Array . isArray ( e ) ) {
dependArray ( e ) ;
}
}
}
/* */
/ * *
* Option overwriting strategies are functions that handle
* how to merge a parent option value and a child option
* value into the final value .
* /
var strats = config . optionMergeStrategies ;
/ * *
* Options with restrictions
* /
if ( true ) {
strats . el = strats . propsData = function ( parent , child , vm , key ) {
if ( ! vm ) {
warn (
"option \"" + key + "\" can only be used during instance " +
'creation with the `new` keyword.'
) ;
}
return defaultStrat ( parent , child )
} ;
}
/ * *
* Helper that recursively merges two data objects together .
* /
function mergeData ( to , from ) {
if ( ! from ) { return to }
var key , toVal , fromVal ;
var keys = hasSymbol
? Reflect . ownKeys ( from )
: Object . keys ( from ) ;
for ( var i = 0 ; i < keys . length ; i ++ ) {
key = keys [ i ] ;
// in case the object is already observed...
if ( key === '__ob__' ) { continue }
toVal = to [ key ] ;
fromVal = from [ key ] ;
if ( ! hasOwn ( to , key ) ) {
set ( to , key , fromVal ) ;
} else if (
toVal !== fromVal &&
isPlainObject ( toVal ) &&
isPlainObject ( fromVal )
) {
mergeData ( toVal , fromVal ) ;
}
}
return to
}
/ * *
* Data
* /
function mergeDataOrFn (
parentVal ,
childVal ,
vm
) {
if ( ! vm ) {
// in a Vue.extend merge, both should be functions
if ( ! childVal ) {
return parentVal
}
if ( ! parentVal ) {
return childVal
}
// when parentVal & childVal are both present,
// we need to return a function that returns the
// merged result of both functions... no need to
// check if parentVal is a function here because
// it has to be a function to pass previous merges.
return function mergedDataFn ( ) {
return mergeData (
typeof childVal === 'function' ? childVal . call ( this , this ) : childVal ,
typeof parentVal === 'function' ? parentVal . call ( this , this ) : parentVal
)
}
} else {
return function mergedInstanceDataFn ( ) {
// instance merge
var instanceData = typeof childVal === 'function'
? childVal . call ( vm , vm )
: childVal ;
var defaultData = typeof parentVal === 'function'
? parentVal . call ( vm , vm )
: parentVal ;
if ( instanceData ) {
return mergeData ( instanceData , defaultData )
} else {
return defaultData
}
}
}
}
strats . data = function (
parentVal ,
childVal ,
vm
) {
if ( ! vm ) {
if ( childVal && typeof childVal !== 'function' ) {
true && warn (
'The "data" option should be a function ' +
'that returns a per-instance value in component ' +
'definitions.' ,
vm
) ;
return parentVal
}
return mergeDataOrFn ( parentVal , childVal )
}
return mergeDataOrFn ( parentVal , childVal , vm )
} ;
/ * *
* Hooks and props are merged as arrays .
* /
function mergeHook (
parentVal ,
childVal
) {
var res = childVal
? parentVal
? parentVal . concat ( childVal )
: Array . isArray ( childVal )
? childVal
: [ childVal ]
: parentVal ;
return res
? dedupeHooks ( res )
: res
}
function dedupeHooks ( hooks ) {
var res = [ ] ;
for ( var i = 0 ; i < hooks . length ; i ++ ) {
if ( res . indexOf ( hooks [ i ] ) === - 1 ) {
res . push ( hooks [ i ] ) ;
}
}
return res
}
LIFECYCLE _HOOKS . forEach ( function ( hook ) {
strats [ hook ] = mergeHook ;
} ) ;
/ * *
* Assets
*
* When a vm is present ( instance creation ) , we need to do
* a three - way merge between constructor options , instance
* options and parent options .
* /
function mergeAssets (
parentVal ,
childVal ,
vm ,
key
) {
var res = Object . create ( parentVal || null ) ;
if ( childVal ) {
true && assertObjectType ( key , childVal , vm ) ;
return extend ( res , childVal )
} else {
return res
}
}
ASSET _TYPES . forEach ( function ( type ) {
strats [ type + 's' ] = mergeAssets ;
} ) ;
/ * *
* Watchers .
*
* Watchers hashes should not overwrite one
* another , so we merge them as arrays .
* /
strats . watch = function (
parentVal ,
childVal ,
vm ,
key
) {
// work around Firefox's Object.prototype.watch...
if ( parentVal === nativeWatch ) { parentVal = undefined ; }
if ( childVal === nativeWatch ) { childVal = undefined ; }
/* istanbul ignore if */
if ( ! childVal ) { return Object . create ( parentVal || null ) }
if ( true ) {
assertObjectType ( key , childVal , vm ) ;
}
if ( ! parentVal ) { return childVal }
var ret = { } ;
extend ( ret , parentVal ) ;
for ( var key$1 in childVal ) {
var parent = ret [ key$1 ] ;
var child = childVal [ key$1 ] ;
if ( parent && ! Array . isArray ( parent ) ) {
parent = [ parent ] ;
}
ret [ key$1 ] = parent
? parent . concat ( child )
: Array . isArray ( child ) ? child : [ child ] ;
}
return ret
} ;
/ * *
* Other object hashes .
* /
strats . props =
strats . methods =
strats . inject =
strats . computed = function (
parentVal ,
childVal ,
vm ,
key
) {
if ( childVal && "development" !== 'production' ) {
assertObjectType ( key , childVal , vm ) ;
}
if ( ! parentVal ) { return childVal }
var ret = Object . create ( null ) ;
extend ( ret , parentVal ) ;
if ( childVal ) { extend ( ret , childVal ) ; }
return ret
} ;
strats . provide = mergeDataOrFn ;
/ * *
* Default strategy .
* /
var defaultStrat = function ( parentVal , childVal ) {
return childVal === undefined
? parentVal
: childVal
} ;
/ * *
* Validate component names
* /
function checkComponents ( options ) {
for ( var key in options . components ) {
validateComponentName ( key ) ;
}
}
function validateComponentName ( name ) {
if ( ! new RegExp ( ( "^[a-zA-Z][\\-\\.0-9_" + ( unicodeRegExp . source ) + "]*$" ) ) . test ( name ) ) {
warn (
'Invalid component name: "' + name + '". Component names ' +
'should conform to valid custom element name in html5 specification.'
) ;
}
if ( isBuiltInTag ( name ) || config . isReservedTag ( name ) ) {
warn (
'Do not use built-in or reserved HTML elements as component ' +
'id: ' + name
) ;
}
}
/ * *
* Ensure all props option syntax are normalized into the
* Object - based format .
* /
function normalizeProps ( options , vm ) {
var props = options . props ;
if ( ! props ) { return }
var res = { } ;
var i , val , name ;
if ( Array . isArray ( props ) ) {
i = props . length ;
while ( i -- ) {
val = props [ i ] ;
if ( typeof val === 'string' ) {
name = camelize ( val ) ;
res [ name ] = { type : null } ;
} else if ( true ) {
warn ( 'props must be strings when using array syntax.' ) ;
}
}
} else if ( isPlainObject ( props ) ) {
for ( var key in props ) {
val = props [ key ] ;
name = camelize ( key ) ;
res [ name ] = isPlainObject ( val )
? val
: { type : val } ;
}
} else if ( true ) {
warn (
"Invalid value for option \"props\": expected an Array or an Object, " +
"but got " + ( toRawType ( props ) ) + "." ,
vm
) ;
}
options . props = res ;
}
/ * *
* Normalize all injections into Object - based format
* /
function normalizeInject ( options , vm ) {
var inject = options . inject ;
if ( ! inject ) { return }
var normalized = options . inject = { } ;
if ( Array . isArray ( inject ) ) {
for ( var i = 0 ; i < inject . length ; i ++ ) {
normalized [ inject [ i ] ] = { from : inject [ i ] } ;
}
} else if ( isPlainObject ( inject ) ) {
for ( var key in inject ) {
var val = inject [ key ] ;
normalized [ key ] = isPlainObject ( val )
? extend ( { from : key } , val )
: { from : val } ;
}
} else if ( true ) {
warn (
"Invalid value for option \"inject\": expected an Array or an Object, " +
"but got " + ( toRawType ( inject ) ) + "." ,
vm
) ;
}
}
/ * *
* Normalize raw function directives into object format .
* /
function normalizeDirectives ( options ) {
var dirs = options . directives ;
if ( dirs ) {
for ( var key in dirs ) {
var def$$1 = dirs [ key ] ;
if ( typeof def$$1 === 'function' ) {
dirs [ key ] = { bind : def$$1 , update : def$$1 } ;
}
}
}
}
function assertObjectType ( name , value , vm ) {
if ( ! isPlainObject ( value ) ) {
warn (
"Invalid value for option \"" + name + "\": expected an Object, " +
"but got " + ( toRawType ( value ) ) + "." ,
vm
) ;
}
}
/ * *
* Merge two option objects into a new one .
* Core utility used in both instantiation and inheritance .
* /
function mergeOptions (
parent ,
child ,
vm
) {
if ( true ) {
checkComponents ( child ) ;
}
if ( typeof child === 'function' ) {
child = child . options ;
}
normalizeProps ( child , vm ) ;
normalizeInject ( child , vm ) ;
normalizeDirectives ( child ) ;
// Apply extends and mixins on the child options,
// but only if it is a raw options object that isn't
// the result of another mergeOptions call.
// Only merged options has the _base property.
if ( ! child . _base ) {
if ( child . extends ) {
parent = mergeOptions ( parent , child . extends , vm ) ;
}
if ( child . mixins ) {
for ( var i = 0 , l = child . mixins . length ; i < l ; i ++ ) {
parent = mergeOptions ( parent , child . mixins [ i ] , vm ) ;
}
}
}
var options = { } ;
var key ;
for ( key in parent ) {
mergeField ( key ) ;
}
for ( key in child ) {
if ( ! hasOwn ( parent , key ) ) {
mergeField ( key ) ;
}
}
function mergeField ( key ) {
var strat = strats [ key ] || defaultStrat ;
options [ key ] = strat ( parent [ key ] , child [ key ] , vm , key ) ;
}
return options
}
/ * *
* Resolve an asset .
* This function is used because child instances need access
* to assets defined in its ancestor chain .
* /
function resolveAsset (
options ,
type ,
id ,
warnMissing
) {
/* istanbul ignore if */
if ( typeof id !== 'string' ) {
return
}
var assets = options [ type ] ;
// check local registration variations first
if ( hasOwn ( assets , id ) ) { return assets [ id ] }
var camelizedId = camelize ( id ) ;
if ( hasOwn ( assets , camelizedId ) ) { return assets [ camelizedId ] }
var PascalCaseId = capitalize ( camelizedId ) ;
if ( hasOwn ( assets , PascalCaseId ) ) { return assets [ PascalCaseId ] }
// fallback to prototype chain
var res = assets [ id ] || assets [ camelizedId ] || assets [ PascalCaseId ] ;
if ( true && warnMissing && ! res ) {
warn (
'Failed to resolve ' + type . slice ( 0 , - 1 ) + ': ' + id ,
options
) ;
}
return res
}
/* */
function validateProp (
key ,
propOptions ,
propsData ,
vm
) {
var prop = propOptions [ key ] ;
var absent = ! hasOwn ( propsData , key ) ;
var value = propsData [ key ] ;
// boolean casting
var booleanIndex = getTypeIndex ( Boolean , prop . type ) ;
if ( booleanIndex > - 1 ) {
if ( absent && ! hasOwn ( prop , 'default' ) ) {
value = false ;
} else if ( value === '' || value === hyphenate ( key ) ) {
// only cast empty string / same name to boolean if
// boolean has higher priority
var stringIndex = getTypeIndex ( String , prop . type ) ;
if ( stringIndex < 0 || booleanIndex < stringIndex ) {
value = true ;
}
}
}
// check default value
if ( value === undefined ) {
value = getPropDefaultValue ( vm , prop , key ) ;
// since the default value is a fresh copy,
// make sure to observe it.
var prevShouldObserve = shouldObserve ;
toggleObserving ( true ) ;
observe ( value ) ;
toggleObserving ( prevShouldObserve ) ;
}
if (
true
) {
assertProp ( prop , key , value , vm , absent ) ;
}
return value
}
/ * *
* Get the default value of a prop .
* /
function getPropDefaultValue ( vm , prop , key ) {
// no default, return undefined
if ( ! hasOwn ( prop , 'default' ) ) {
return undefined
}
var def = prop . default ;
// warn against non-factory defaults for Object & Array
if ( true && isObject ( def ) ) {
warn (
'Invalid default value for prop "' + key + '": ' +
'Props with type Object/Array must use a factory function ' +
'to return the default value.' ,
vm
) ;
}
// the raw prop value was also undefined from previous render,
// return previous default value to avoid unnecessary watcher trigger
if ( vm && vm . $options . propsData &&
vm . $options . propsData [ key ] === undefined &&
vm . _props [ key ] !== undefined
) {
return vm . _props [ key ]
}
// call factory function for non-Function types
// a value is Function if its prototype is function even across different execution context
return typeof def === 'function' && getType ( prop . type ) !== 'Function'
? def . call ( vm )
: def
}
/ * *
* Assert whether a prop is valid .
* /
function assertProp (
prop ,
name ,
value ,
vm ,
absent
) {
if ( prop . required && absent ) {
warn (
'Missing required prop: "' + name + '"' ,
vm
) ;
return
}
if ( value == null && ! prop . required ) {
return
}
var type = prop . type ;
var valid = ! type || type === true ;
var expectedTypes = [ ] ;
if ( type ) {
if ( ! Array . isArray ( type ) ) {
type = [ type ] ;
}
for ( var i = 0 ; i < type . length && ! valid ; i ++ ) {
var assertedType = assertType ( value , type [ i ] ) ;
expectedTypes . push ( assertedType . expectedType || '' ) ;
valid = assertedType . valid ;
}
}
if ( ! valid ) {
warn (
getInvalidTypeMessage ( name , value , expectedTypes ) ,
vm
) ;
return
}
var validator = prop . validator ;
if ( validator ) {
if ( ! validator ( value ) ) {
warn (
'Invalid prop: custom validator check failed for prop "' + name + '".' ,
vm
) ;
}
}
}
var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/ ;
function assertType ( value , type ) {
var valid ;
var expectedType = getType ( type ) ;
if ( simpleCheckRE . test ( expectedType ) ) {
var t = typeof value ;
valid = t === expectedType . toLowerCase ( ) ;
// for primitive wrapper objects
if ( ! valid && t === 'object' ) {
valid = value instanceof type ;
}
} else if ( expectedType === 'Object' ) {
valid = isPlainObject ( value ) ;
} else if ( expectedType === 'Array' ) {
valid = Array . isArray ( value ) ;
} else {
valid = value instanceof type ;
}
return {
valid : valid ,
expectedType : expectedType
}
}
/ * *
* Use function string name to check built - in types ,
* because a simple equality check will fail when running
* across different vms / iframes .
* /
function getType ( fn ) {
var match = fn && fn . toString ( ) . match ( /^\s*function (\w+)/ ) ;
return match ? match [ 1 ] : ''
}
function isSameType ( a , b ) {
return getType ( a ) === getType ( b )
}
function getTypeIndex ( type , expectedTypes ) {
if ( ! Array . isArray ( expectedTypes ) ) {
return isSameType ( expectedTypes , type ) ? 0 : - 1
}
for ( var i = 0 , len = expectedTypes . length ; i < len ; i ++ ) {
if ( isSameType ( expectedTypes [ i ] , type ) ) {
return i
}
}
return - 1
}
function getInvalidTypeMessage ( name , value , expectedTypes ) {
var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
" Expected " + ( expectedTypes . map ( capitalize ) . join ( ', ' ) ) ;
var expectedType = expectedTypes [ 0 ] ;
var receivedType = toRawType ( value ) ;
var expectedValue = styleValue ( value , expectedType ) ;
var receivedValue = styleValue ( value , receivedType ) ;
// check if we need to specify expected value
if ( expectedTypes . length === 1 &&
isExplicable ( expectedType ) &&
! isBoolean ( expectedType , receivedType ) ) {
message += " with value " + expectedValue ;
}
message += ", got " + receivedType + " " ;
// check if we need to specify received value
if ( isExplicable ( receivedType ) ) {
message += "with value " + receivedValue + "." ;
}
return message
}
function styleValue ( value , type ) {
if ( type === 'String' ) {
return ( "\"" + value + "\"" )
} else if ( type === 'Number' ) {
return ( "" + ( Number ( value ) ) )
} else {
return ( "" + value )
}
}
function isExplicable ( value ) {
var explicitTypes = [ 'string' , 'number' , 'boolean' ] ;
return explicitTypes . some ( function ( elem ) { return value . toLowerCase ( ) === elem ; } )
}
function isBoolean ( ) {
var args = [ ] , len = arguments . length ;
while ( len -- ) args [ len ] = arguments [ len ] ;
return args . some ( function ( elem ) { return elem . toLowerCase ( ) === 'boolean' ; } )
}
/* */
function handleError ( err , vm , info ) {
// Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
// See: https://github.com/vuejs/vuex/issues/1505
pushTarget ( ) ;
try {
if ( vm ) {
var cur = vm ;
while ( ( cur = cur . $parent ) ) {
var hooks = cur . $options . errorCaptured ;
if ( hooks ) {
for ( var i = 0 ; i < hooks . length ; i ++ ) {
try {
var capture = hooks [ i ] . call ( cur , err , vm , info ) === false ;
if ( capture ) { return }
} catch ( e ) {
globalHandleError ( e , cur , 'errorCaptured hook' ) ;
}
}
}
}
}
globalHandleError ( err , vm , info ) ;
} finally {
popTarget ( ) ;
}
}
function invokeWithErrorHandling (
handler ,
context ,
args ,
vm ,
info
) {
var res ;
try {
res = args ? handler . apply ( context , args ) : handler . call ( context ) ;
if ( res && ! res . _isVue && isPromise ( res ) && ! res . _handled ) {
res . catch ( function ( e ) { return handleError ( e , vm , info + " (Promise/async)" ) ; } ) ;
// issue #9511
// avoid catch triggering multiple times when nested calls
res . _handled = true ;
}
} catch ( e ) {
handleError ( e , vm , info ) ;
}
return res
}
function globalHandleError ( err , vm , info ) {
if ( config . errorHandler ) {
try {
return config . errorHandler . call ( null , err , vm , info )
} catch ( e ) {
// if the user intentionally throws the original error in the handler,
// do not log it twice
if ( e !== err ) {
logError ( e , null , 'config.errorHandler' ) ;
}
}
}
logError ( err , vm , info ) ;
}
function logError ( err , vm , info ) {
if ( true ) {
warn ( ( "Error in " + info + ": \"" + ( err . toString ( ) ) + "\"" ) , vm ) ;
}
/* istanbul ignore else */
if ( ( inBrowser || inWeex ) && typeof console !== 'undefined' ) {
console . error ( err ) ;
} else {
throw err
}
}
/* */
var callbacks = [ ] ;
var pending = false ;
function flushCallbacks ( ) {
pending = false ;
var copies = callbacks . slice ( 0 ) ;
callbacks . length = 0 ;
for ( var i = 0 ; i < copies . length ; i ++ ) {
copies [ i ] ( ) ;
}
}
// Here we have async deferring wrappers using microtasks.
// In 2.5 we used (macro) tasks (in combination with microtasks).
// However, it has subtle problems when state is changed right before repaint
// (e.g. #6813, out-in transitions).
// Also, using (macro) tasks in event handler would cause some weird behaviors
// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
// So we now use microtasks everywhere, again.
// A major drawback of this tradeoff is that there are some scenarios
// where microtasks have too high a priority and fire in between supposedly
// sequential events (e.g. #4521, #6690, which have workarounds)
// or even between bubbling of the same event (#6566).
var timerFunc ;
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if ( typeof Promise !== 'undefined' && isNative ( Promise ) ) {
var p = Promise . resolve ( ) ;
timerFunc = function ( ) {
p . then ( flushCallbacks ) ;
// In problematic UIWebViews, Promise.then doesn't completely break, but
// it can get stuck in a weird state where callbacks are pushed into the
// microtask queue but the queue isn't being flushed, until the browser
// needs to do some other work, e.g. handle a timer. Therefore we can
// "force" the microtask queue to be flushed by adding an empty timer.
if ( isIOS ) { setTimeout ( noop ) ; }
} ;
} else if ( ! isIE && typeof MutationObserver !== 'undefined' && (
isNative ( MutationObserver ) ||
// PhantomJS and iOS 7.x
MutationObserver . toString ( ) === '[object MutationObserverConstructor]'
) ) {
// Use MutationObserver where native Promise is not available,
// e.g. PhantomJS, iOS7, Android 4.4
// (#6466 MutationObserver is unreliable in IE11)
var counter = 1 ;
var observer = new MutationObserver ( flushCallbacks ) ;
var textNode = document . createTextNode ( String ( counter ) ) ;
observer . observe ( textNode , {
characterData : true
} ) ;
timerFunc = function ( ) {
counter = ( counter + 1 ) % 2 ;
textNode . data = String ( counter ) ;
} ;
} else if ( typeof setImmediate !== 'undefined' && isNative ( setImmediate ) ) {
// Fallback to setImmediate.
// Technically it leverages the (macro) task queue,
// but it is still a better choice than setTimeout.
timerFunc = function ( ) {
setImmediate ( flushCallbacks ) ;
} ;
} else {
// Fallback to setTimeout.
timerFunc = function ( ) {
setTimeout ( flushCallbacks , 0 ) ;
} ;
}
function nextTick ( cb , ctx ) {
var _resolve ;
callbacks . push ( function ( ) {
if ( cb ) {
try {
cb . call ( ctx ) ;
} catch ( e ) {
handleError ( e , ctx , 'nextTick' ) ;
}
} else if ( _resolve ) {
_resolve ( ctx ) ;
}
} ) ;
if ( ! pending ) {
pending = true ;
timerFunc ( ) ;
}
// $flow-disable-line
if ( ! cb && typeof Promise !== 'undefined' ) {
return new Promise ( function ( resolve ) {
_resolve = resolve ;
} )
}
}
/* */
/* not type checking this file because flow doesn't play well with Proxy */
var initProxy ;
if ( true ) {
var allowedGlobals = makeMap (
'Infinity,undefined,NaN,isFinite,isNaN,' +
'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
'require' // for Webpack/Browserify
) ;
var warnNonPresent = function ( target , key ) {
warn (
"Property or method \"" + key + "\" is not defined on the instance but " +
'referenced during render. Make sure that this property is reactive, ' +
'either in the data option, or for class-based components, by ' +
'initializing the property. ' +
'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.' ,
target
) ;
} ;
var warnReservedPrefix = function ( target , key ) {
warn (
"Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
'prevent conflicts with Vue internals. ' +
'See: https://vuejs.org/v2/api/#data' ,
target
) ;
} ;
var hasProxy =
typeof Proxy !== 'undefined' && isNative ( Proxy ) ;
if ( hasProxy ) {
var isBuiltInModifier = makeMap ( 'stop,prevent,self,ctrl,shift,alt,meta,exact' ) ;
config . keyCodes = new Proxy ( config . keyCodes , {
set : function set ( target , key , value ) {
if ( isBuiltInModifier ( key ) ) {
warn ( ( "Avoid overwriting built-in modifier in config.keyCodes: ." + key ) ) ;
return false
} else {
target [ key ] = value ;
return true
}
}
} ) ;
}
var hasHandler = {
has : function has ( target , key ) {
var has = key in target ;
var isAllowed = allowedGlobals ( key ) ||
( typeof key === 'string' && key . charAt ( 0 ) === '_' && ! ( key in target . $data ) ) ;
if ( ! has && ! isAllowed ) {
if ( key in target . $data ) { warnReservedPrefix ( target , key ) ; }
else { warnNonPresent ( target , key ) ; }
}
return has || ! isAllowed
}
} ;
var getHandler = {
get : function get ( target , key ) {
if ( typeof key === 'string' && ! ( key in target ) ) {
if ( key in target . $data ) { warnReservedPrefix ( target , key ) ; }
else { warnNonPresent ( target , key ) ; }
}
return target [ key ]
}
} ;
initProxy = function initProxy ( vm ) {
if ( hasProxy ) {
// determine which proxy handler to use
var options = vm . $options ;
var handlers = options . render && options . render . _withStripped
? getHandler
: hasHandler ;
vm . _renderProxy = new Proxy ( vm , handlers ) ;
} else {
vm . _renderProxy = vm ;
}
} ;
}
/* */
var seenObjects = new _Set ( ) ;
/ * *
* Recursively traverse an object to evoke all converted
* getters , so that every nested property inside the object
* is collected as a "deep" dependency .
* /
function traverse ( val ) {
_traverse ( val , seenObjects ) ;
seenObjects . clear ( ) ;
}
function _traverse ( val , seen ) {
var i , keys ;
var isA = Array . isArray ( val ) ;
if ( ( ! isA && ! isObject ( val ) ) || Object . isFrozen ( val ) || val instanceof VNode ) {
return
}
if ( val . _ _ob _ _ ) {
var depId = val . _ _ob _ _ . dep . id ;
if ( seen . has ( depId ) ) {
return
}
seen . add ( depId ) ;
}
if ( isA ) {
i = val . length ;
while ( i -- ) { _traverse ( val [ i ] , seen ) ; }
} else {
keys = Object . keys ( val ) ;
i = keys . length ;
while ( i -- ) { _traverse ( val [ keys [ i ] ] , seen ) ; }
}
}
var mark ;
var measure ;
if ( true ) {
var perf = inBrowser && window . performance ;
/* istanbul ignore if */
if (
perf &&
perf . mark &&
perf . measure &&
perf . clearMarks &&
perf . clearMeasures
) {
mark = function ( tag ) { return perf . mark ( tag ) ; } ;
measure = function ( name , startTag , endTag ) {
perf . measure ( name , startTag , endTag ) ;
perf . clearMarks ( startTag ) ;
perf . clearMarks ( endTag ) ;
// perf.clearMeasures(name)
} ;
}
}
/* */
var normalizeEvent = cached ( function ( name ) {
var passive = name . charAt ( 0 ) === '&' ;
name = passive ? name . slice ( 1 ) : name ;
var once$$1 = name . charAt ( 0 ) === '~' ; // Prefixed last, checked first
name = once$$1 ? name . slice ( 1 ) : name ;
var capture = name . charAt ( 0 ) === '!' ;
name = capture ? name . slice ( 1 ) : name ;
return {
name : name ,
once : once$$1 ,
capture : capture ,
passive : passive
}
} ) ;
function createFnInvoker ( fns , vm ) {
function invoker ( ) {
var arguments$1 = arguments ;
var fns = invoker . fns ;
if ( Array . isArray ( fns ) ) {
var cloned = fns . slice ( ) ;
for ( var i = 0 ; i < cloned . length ; i ++ ) {
invokeWithErrorHandling ( cloned [ i ] , null , arguments$1 , vm , "v-on handler" ) ;
}
} else {
// return handler return value for single handlers
return invokeWithErrorHandling ( fns , null , arguments , vm , "v-on handler" )
}
}
invoker . fns = fns ;
return invoker
}
function updateListeners (
on ,
oldOn ,
add ,
remove$$1 ,
createOnceHandler ,
vm
) {
var name , def$$1 , cur , old , event ;
for ( name in on ) {
def$$1 = cur = on [ name ] ;
old = oldOn [ name ] ;
event = normalizeEvent ( name ) ;
if ( isUndef ( cur ) ) {
true && warn (
"Invalid handler for event \"" + ( event . name ) + "\": got " + String ( cur ) ,
vm
) ;
} else if ( isUndef ( old ) ) {
if ( isUndef ( cur . fns ) ) {
cur = on [ name ] = createFnInvoker ( cur , vm ) ;
}
if ( isTrue ( event . once ) ) {
cur = on [ name ] = createOnceHandler ( event . name , cur , event . capture ) ;
}
add ( event . name , cur , event . capture , event . passive , event . params ) ;
} else if ( cur !== old ) {
old . fns = cur ;
on [ name ] = old ;
}
}
for ( name in oldOn ) {
if ( isUndef ( on [ name ] ) ) {
event = normalizeEvent ( name ) ;
remove$$1 ( event . name , oldOn [ name ] , event . capture ) ;
}
}
}
/* */
/* */
// fixed by xxxxxx (mp properties)
function extractPropertiesFromVNodeData ( data , Ctor , res , context ) {
var propOptions = Ctor . options . mpOptions && Ctor . options . mpOptions . properties ;
if ( isUndef ( propOptions ) ) {
return res
}
var externalClasses = Ctor . options . mpOptions . externalClasses || [ ] ;
var attrs = data . attrs ;
var props = data . props ;
if ( isDef ( attrs ) || isDef ( props ) ) {
for ( var key in propOptions ) {
var altKey = hyphenate ( key ) ;
var result = checkProp ( res , props , key , altKey , true ) ||
checkProp ( res , attrs , key , altKey , false ) ;
// externalClass
if (
result &&
res [ key ] &&
externalClasses . indexOf ( altKey ) !== - 1 &&
context [ camelize ( res [ key ] ) ]
) {
// 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)
res [ key ] = context [ camelize ( res [ key ] ) ] ;
}
}
}
return res
}
function extractPropsFromVNodeData (
data ,
Ctor ,
tag ,
context // fixed by xxxxxx
) {
// we are only extracting raw values here.
// validation and default values are handled in the child
// component itself.
var propOptions = Ctor . options . props ;
if ( isUndef ( propOptions ) ) {
// fixed by xxxxxx
return extractPropertiesFromVNodeData ( data , Ctor , { } , context )
}
var res = { } ;
var attrs = data . attrs ;
var props = data . props ;
if ( isDef ( attrs ) || isDef ( props ) ) {
for ( var key in propOptions ) {
var altKey = hyphenate ( key ) ;
if ( true ) {
var keyInLowerCase = key . toLowerCase ( ) ;
if (
key !== keyInLowerCase &&
attrs && hasOwn ( attrs , keyInLowerCase )
) {
tip (
"Prop \"" + keyInLowerCase + "\" is passed to component " +
( formatComponentName ( tag || Ctor ) ) + ", but the declared prop name is" +
" \"" + key + "\". " +
"Note that HTML attributes are case-insensitive and camelCased " +
"props need to use their kebab-case equivalents when using in-DOM " +
"templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
) ;
}
}
checkProp ( res , props , key , altKey , true ) ||
checkProp ( res , attrs , key , altKey , false ) ;
}
}
// fixed by xxxxxx
return extractPropertiesFromVNodeData ( data , Ctor , res , context )
}
function checkProp (
res ,
hash ,
key ,
altKey ,
preserve
) {
if ( isDef ( hash ) ) {
if ( hasOwn ( hash , key ) ) {
res [ key ] = hash [ key ] ;
if ( ! preserve ) {
delete hash [ key ] ;
}
return true
} else if ( hasOwn ( hash , altKey ) ) {
res [ key ] = hash [ altKey ] ;
if ( ! preserve ) {
delete hash [ altKey ] ;
}
return true
}
}
return false
}
/* */
// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren ( children ) {
for ( var i = 0 ; i < children . length ; i ++ ) {
if ( Array . isArray ( children [ i ] ) ) {
return Array . prototype . concat . apply ( [ ] , children )
}
}
return children
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren ( children ) {
return isPrimitive ( children )
? [ createTextVNode ( children ) ]
: Array . isArray ( children )
? normalizeArrayChildren ( children )
: undefined
}
function isTextNode ( node ) {
return isDef ( node ) && isDef ( node . text ) && isFalse ( node . isComment )
}
function normalizeArrayChildren ( children , nestedIndex ) {
var res = [ ] ;
var i , c , lastIndex , last ;
for ( i = 0 ; i < children . length ; i ++ ) {
c = children [ i ] ;
if ( isUndef ( c ) || typeof c === 'boolean' ) { continue }
lastIndex = res . length - 1 ;
last = res [ lastIndex ] ;
// nested
if ( Array . isArray ( c ) ) {
if ( c . length > 0 ) {
c = normalizeArrayChildren ( c , ( ( nestedIndex || '' ) + "_" + i ) ) ;
// merge adjacent text nodes
if ( isTextNode ( c [ 0 ] ) && isTextNode ( last ) ) {
res [ lastIndex ] = createTextVNode ( last . text + ( c [ 0 ] ) . text ) ;
c . shift ( ) ;
}
res . push . apply ( res , c ) ;
}
} else if ( isPrimitive ( c ) ) {
if ( isTextNode ( last ) ) {
// merge adjacent text nodes
// this is necessary for SSR hydration because text nodes are
// essentially merged when rendered to HTML strings
res [ lastIndex ] = createTextVNode ( last . text + c ) ;
} else if ( c !== '' ) {
// convert primitive to vnode
res . push ( createTextVNode ( c ) ) ;
}
} else {
if ( isTextNode ( c ) && isTextNode ( last ) ) {
// merge adjacent text nodes
res [ lastIndex ] = createTextVNode ( last . text + c . text ) ;
} else {
// default key for nested array children (likely generated by v-for)
if ( isTrue ( children . _isVList ) &&
isDef ( c . tag ) &&
isUndef ( c . key ) &&
isDef ( nestedIndex ) ) {
c . key = "__vlist" + nestedIndex + "_" + i + "__" ;
}
res . push ( c ) ;
}
}
}
return res
}
/* */
function initProvide ( vm ) {
var provide = vm . $options . provide ;
if ( provide ) {
vm . _provided = typeof provide === 'function'
? provide . call ( vm )
: provide ;
}
}
function initInjections ( vm ) {
var result = resolveInject ( vm . $options . inject , vm ) ;
if ( result ) {
toggleObserving ( false ) ;
Object . keys ( result ) . forEach ( function ( key ) {
/* istanbul ignore else */
if ( true ) {
defineReactive$$1 ( vm , key , result [ key ] , function ( ) {
warn (
"Avoid mutating an injected value directly since the changes will be " +
"overwritten whenever the provided component re-renders. " +
"injection being mutated: \"" + key + "\"" ,
vm
) ;
} ) ;
} else { }
} ) ;
toggleObserving ( true ) ;
}
}
function resolveInject ( inject , vm ) {
if ( inject ) {
// inject is :any because flow is not smart enough to figure out cached
var result = Object . create ( null ) ;
var keys = hasSymbol
? Reflect . ownKeys ( inject )
: Object . keys ( inject ) ;
for ( var i = 0 ; i < keys . length ; i ++ ) {
var key = keys [ i ] ;
// #6574 in case the inject object is observed...
if ( key === '__ob__' ) { continue }
var provideKey = inject [ key ] . from ;
var source = vm ;
while ( source ) {
if ( source . _provided && hasOwn ( source . _provided , provideKey ) ) {
result [ key ] = source . _provided [ provideKey ] ;
break
}
source = source . $parent ;
}
if ( ! source ) {
if ( 'default' in inject [ key ] ) {
var provideDefault = inject [ key ] . default ;
result [ key ] = typeof provideDefault === 'function'
? provideDefault . call ( vm )
: provideDefault ;
} else if ( true ) {
warn ( ( "Injection \"" + key + "\" not found" ) , vm ) ;
}
}
}
return result
}
}
/* */
/ * *
* Runtime helper for resolving raw children VNodes into a slot object .
* /
function resolveSlots (
children ,
context
) {
if ( ! children || ! children . length ) {
return { }
}
var slots = { } ;
for ( var i = 0 , l = children . length ; i < l ; i ++ ) {
var child = children [ i ] ;
var data = child . data ;
// remove slot attribute if the node is resolved as a Vue slot node
if ( data && data . attrs && data . attrs . slot ) {
delete data . attrs . slot ;
}
// named slots should only be respected if the vnode was rendered in the
// same context.
if ( ( child . context === context || child . fnContext === context ) &&
data && data . slot != null
) {
var name = data . slot ;
var slot = ( slots [ name ] || ( slots [ name ] = [ ] ) ) ;
if ( child . tag === 'template' ) {
slot . push . apply ( slot , child . children || [ ] ) ;
} else {
slot . push ( child ) ;
}
} else {
// fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page
if ( child . asyncMeta && child . asyncMeta . data && child . asyncMeta . data . slot === 'page' ) {
( slots [ 'page' ] || ( slots [ 'page' ] = [ ] ) ) . push ( child ) ;
} else {
( slots . default || ( slots . default = [ ] ) ) . push ( child ) ;
}
}
}
// ignore slots that contains only whitespace
for ( var name$1 in slots ) {
if ( slots [ name$1 ] . every ( isWhitespace ) ) {
delete slots [ name$1 ] ;
}
}
return slots
}
function isWhitespace ( node ) {
return ( node . isComment && ! node . asyncFactory ) || node . text === ' '
}
/* */
function normalizeScopedSlots (
slots ,
normalSlots ,
prevSlots
) {
var res ;
var hasNormalSlots = Object . keys ( normalSlots ) . length > 0 ;
var isStable = slots ? ! ! slots . $stable : ! hasNormalSlots ;
var key = slots && slots . $key ;
if ( ! slots ) {
res = { } ;
} else if ( slots . _normalized ) {
// fast path 1: child component re-render only, parent did not change
return slots . _normalized
} else if (
isStable &&
prevSlots &&
prevSlots !== emptyObject &&
key === prevSlots . $key &&
! hasNormalSlots &&
! prevSlots . $hasNormal
) {
// fast path 2: stable scoped slots w/ no normal slots to proxy,
// only need to normalize once
return prevSlots
} else {
res = { } ;
for ( var key$1 in slots ) {
if ( slots [ key$1 ] && key$1 [ 0 ] !== '$' ) {
res [ key$1 ] = normalizeScopedSlot ( normalSlots , key$1 , slots [ key$1 ] ) ;
}
}
}
// expose normal slots on scopedSlots
for ( var key$2 in normalSlots ) {
if ( ! ( key$2 in res ) ) {
res [ key$2 ] = proxyNormalSlot ( normalSlots , key$2 ) ;
}
}
// avoriaz seems to mock a non-extensible $scopedSlots object
// and when that is passed down this would cause an error
if ( slots && Object . isExtensible ( slots ) ) {
( slots ) . _normalized = res ;
}
def ( res , '$stable' , isStable ) ;
def ( res , '$key' , key ) ;
def ( res , '$hasNormal' , hasNormalSlots ) ;
return res
}
function normalizeScopedSlot ( normalSlots , key , fn ) {
var normalized = function ( ) {
var res = arguments . length ? fn . apply ( null , arguments ) : fn ( { } ) ;
res = res && typeof res === 'object' && ! Array . isArray ( res )
? [ res ] // single vnode
: normalizeChildren ( res ) ;
return res && (
res . length === 0 ||
( res . length === 1 && res [ 0 ] . isComment ) // #9658
) ? undefined
: res
} ;
// this is a slot using the new v-slot syntax without scope. although it is
// compiled as a scoped slot, render fn users would expect it to be present
// on this.$slots because the usage is semantically a normal slot.
if ( fn . proxy ) {
Object . defineProperty ( normalSlots , key , {
get : normalized ,
enumerable : true ,
configurable : true
} ) ;
}
return normalized
}
function proxyNormalSlot ( slots , key ) {
return function ( ) { return slots [ key ] ; }
}
/* */
/ * *
* Runtime helper for rendering v - for lists .
* /
function renderList (
val ,
render
) {
var ret , i , l , keys , key ;
if ( Array . isArray ( val ) || typeof val === 'string' ) {
ret = new Array ( val . length ) ;
for ( i = 0 , l = val . length ; i < l ; i ++ ) {
ret [ i ] = render ( val [ i ] , i , i , i ) ; // fixed by xxxxxx
}
} else if ( typeof val === 'number' ) {
ret = new Array ( val ) ;
for ( i = 0 ; i < val ; i ++ ) {
ret [ i ] = render ( i + 1 , i , i , i ) ; // fixed by xxxxxx
}
} else if ( isObject ( val ) ) {
if ( hasSymbol && val [ Symbol . iterator ] ) {
ret = [ ] ;
var iterator = val [ Symbol . iterator ] ( ) ;
var result = iterator . next ( ) ;
while ( ! result . done ) {
ret . push ( render ( result . value , ret . length , i , i ++ ) ) ; // fixed by xxxxxx
result = iterator . next ( ) ;
}
} else {
keys = Object . keys ( val ) ;
ret = new Array ( keys . length ) ;
for ( i = 0 , l = keys . length ; i < l ; i ++ ) {
key = keys [ i ] ;
ret [ i ] = render ( val [ key ] , key , i , i ) ; // fixed by xxxxxx
}
}
}
if ( ! isDef ( ret ) ) {
ret = [ ] ;
}
( ret ) . _isVList = true ;
return ret
}
/* */
/ * *
* Runtime helper for rendering < slot >
* /
function renderSlot (
name ,
fallback ,
props ,
bindObject
) {
var scopedSlotFn = this . $scopedSlots [ name ] ;
var nodes ;
if ( scopedSlotFn ) { // scoped slot
props = props || { } ;
if ( bindObject ) {
if ( true && ! isObject ( bindObject ) ) {
warn (
'slot v-bind without argument expects an Object' ,
this
) ;
}
props = extend ( extend ( { } , bindObject ) , props ) ;
}
// fixed by xxxxxx app-plus scopedSlot
nodes = scopedSlotFn ( props , this , props . _i ) || fallback ;
} else {
nodes = this . $slots [ name ] || fallback ;
}
var target = props && props . slot ;
if ( target ) {
return this . $createElement ( 'template' , { slot : target } , nodes )
} else {
return nodes
}
}
/* */
/ * *
* Runtime helper for resolving filters
* /
function resolveFilter ( id ) {
return resolveAsset ( this . $options , 'filters' , id , true ) || identity
}
/* */
function isKeyNotMatch ( expect , actual ) {
if ( Array . isArray ( expect ) ) {
return expect . indexOf ( actual ) === - 1
} else {
return expect !== actual
}
}
/ * *
* Runtime helper for checking keyCodes from config .
* exposed as Vue . prototype . _k
* passing in eventKeyName as last argument separately for backwards compat
* /
function checkKeyCodes (
eventKeyCode ,
key ,
builtInKeyCode ,
eventKeyName ,
builtInKeyName
) {
var mappedKeyCode = config . keyCodes [ key ] || builtInKeyCode ;
if ( builtInKeyName && eventKeyName && ! config . keyCodes [ key ] ) {
return isKeyNotMatch ( builtInKeyName , eventKeyName )
} else if ( mappedKeyCode ) {
return isKeyNotMatch ( mappedKeyCode , eventKeyCode )
} else if ( eventKeyName ) {
return hyphenate ( eventKeyName ) !== key
}
}
/* */
/ * *
* Runtime helper for merging v - bind = "object" into a VNode ' s data .
* /
function bindObjectProps (
data ,
tag ,
value ,
asProp ,
isSync
) {
if ( value ) {
if ( ! isObject ( value ) ) {
true && warn (
'v-bind without argument expects an Object or Array value' ,
this
) ;
} else {
if ( Array . isArray ( value ) ) {
value = toObject ( value ) ;
}
var hash ;
var loop = function ( key ) {
if (
key === 'class' ||
key === 'style' ||
isReservedAttribute ( key )
) {
hash = data ;
} else {
var type = data . attrs && data . attrs . type ;
hash = asProp || config . mustUseProp ( tag , type , key )
? data . domProps || ( data . domProps = { } )
: data . attrs || ( data . attrs = { } ) ;
}
var camelizedKey = camelize ( key ) ;
var hyphenatedKey = hyphenate ( key ) ;
if ( ! ( camelizedKey in hash ) && ! ( hyphenatedKey in hash ) ) {
hash [ key ] = value [ key ] ;
if ( isSync ) {
var on = data . on || ( data . on = { } ) ;
on [ ( "update:" + key ) ] = function ( $event ) {
value [ key ] = $event ;
} ;
}
}
} ;
for ( var key in value ) loop ( key ) ;
}
}
return data
}
/* */
/ * *
* Runtime helper for rendering static trees .
* /
function renderStatic (
index ,
isInFor
) {
var cached = this . _staticTrees || ( this . _staticTrees = [ ] ) ;
var tree = cached [ index ] ;
// if has already-rendered static tree and not inside v-for,
// we can reuse the same tree.
if ( tree && ! isInFor ) {
return tree
}
// otherwise, render a fresh tree.
tree = cached [ index ] = this . $options . staticRenderFns [ index ] . call (
this . _renderProxy ,
null ,
this // for render fns generated for functional component templates
) ;
markStatic ( tree , ( "__static__" + index ) , false ) ;
return tree
}
/ * *
* Runtime helper for v - once .
* Effectively it means marking the node as static with a unique key .
* /
function markOnce (
tree ,
index ,
key
) {
markStatic ( tree , ( "__once__" + index + ( key ? ( "_" + key ) : "" ) ) , true ) ;
return tree
}
function markStatic (
tree ,
key ,
isOnce
) {
if ( Array . isArray ( tree ) ) {
for ( var i = 0 ; i < tree . length ; i ++ ) {
if ( tree [ i ] && typeof tree [ i ] !== 'string' ) {
markStaticNode ( tree [ i ] , ( key + "_" + i ) , isOnce ) ;
}
}
} else {
markStaticNode ( tree , key , isOnce ) ;
}
}
function markStaticNode ( node , key , isOnce ) {
node . isStatic = true ;
node . key = key ;
node . isOnce = isOnce ;
}
/* */
function bindObjectListeners ( data , value ) {
if ( value ) {
if ( ! isPlainObject ( value ) ) {
true && warn (
'v-on without argument expects an Object value' ,
this
) ;
} else {
var on = data . on = data . on ? extend ( { } , data . on ) : { } ;
for ( var key in value ) {
var existing = on [ key ] ;
var ours = value [ key ] ;
on [ key ] = existing ? [ ] . concat ( existing , ours ) : ours ;
}
}
}
return data
}
/* */
function resolveScopedSlots (
fns , // see flow/vnode
res ,
// the following are added in 2.6
hasDynamicKeys ,
contentHashKey
) {
res = res || { $stable : ! hasDynamicKeys } ;
for ( var i = 0 ; i < fns . length ; i ++ ) {
var slot = fns [ i ] ;
if ( Array . isArray ( slot ) ) {
resolveScopedSlots ( slot , res , hasDynamicKeys ) ;
} else if ( slot ) {
// marker for reverse proxying v-slot without scope on this.$slots
if ( slot . proxy ) {
slot . fn . proxy = true ;
}
res [ slot . key ] = slot . fn ;
}
}
if ( contentHashKey ) {
( res ) . $key = contentHashKey ;
}
return res
}
/* */
function bindDynamicKeys ( baseObj , values ) {
for ( var i = 0 ; i < values . length ; i += 2 ) {
var key = values [ i ] ;
if ( typeof key === 'string' && key ) {
baseObj [ values [ i ] ] = values [ i + 1 ] ;
} else if ( true && key !== '' && key !== null ) {
// null is a special value for explicitly removing a binding
warn (
( "Invalid value for dynamic directive argument (expected string or null): " + key ) ,
this
) ;
}
}
return baseObj
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier ( value , symbol ) {
return typeof value === 'string' ? symbol + value : value
}
/* */
function installRenderHelpers ( target ) {
target . _o = markOnce ;
target . _n = toNumber ;
target . _s = toString ;
target . _l = renderList ;
target . _t = renderSlot ;
target . _q = looseEqual ;
target . _i = looseIndexOf ;
target . _m = renderStatic ;
target . _f = resolveFilter ;
target . _k = checkKeyCodes ;
target . _b = bindObjectProps ;
target . _v = createTextVNode ;
target . _e = createEmptyVNode ;
target . _u = resolveScopedSlots ;
target . _g = bindObjectListeners ;
target . _d = bindDynamicKeys ;
target . _p = prependModifier ;
}
/* */
function FunctionalRenderContext (
data ,
props ,
children ,
parent ,
Ctor
) {
var this $1 = this ;
var options = Ctor . options ;
// ensure the createElement function in functional components
// gets a unique context - this is necessary for correct named slot check
var contextVm ;
if ( hasOwn ( parent , '_uid' ) ) {
contextVm = Object . create ( parent ) ;
// $flow-disable-line
contextVm . _original = parent ;
} else {
// the context vm passed in is a functional context as well.
// in this case we want to make sure we are able to get a hold to the
// real context instance.
contextVm = parent ;
// $flow-disable-line
parent = parent . _original ;
}
var isCompiled = isTrue ( options . _compiled ) ;
var needNormalization = ! isCompiled ;
this . data = data ;
this . props = props ;
this . children = children ;
this . parent = parent ;
this . listeners = data . on || emptyObject ;
this . injections = resolveInject ( options . inject , parent ) ;
this . slots = function ( ) {
if ( ! this $1 . $slots ) {
normalizeScopedSlots (
data . scopedSlots ,
this $1 . $slots = resolveSlots ( children , parent )
) ;
}
return this $1 . $slots
} ;
Object . defineProperty ( this , 'scopedSlots' , ( {
enumerable : true ,
get : function get ( ) {
return normalizeScopedSlots ( data . scopedSlots , this . slots ( ) )
}
} ) ) ;
// support for compiled functional template
if ( isCompiled ) {
// exposing $options for renderStatic()
this . $options = options ;
// pre-resolve slots for renderSlot()
this . $slots = this . slots ( ) ;
this . $scopedSlots = normalizeScopedSlots ( data . scopedSlots , this . $slots ) ;
}
if ( options . _scopeId ) {
this . _c = function ( a , b , c , d ) {
var vnode = createElement ( contextVm , a , b , c , d , needNormalization ) ;
if ( vnode && ! Array . isArray ( vnode ) ) {
vnode . fnScopeId = options . _scopeId ;
vnode . fnContext = parent ;
}
return vnode
} ;
} else {
this . _c = function ( a , b , c , d ) { return createElement ( contextVm , a , b , c , d , needNormalization ) ; } ;
}
}
installRenderHelpers ( FunctionalRenderContext . prototype ) ;
function createFunctionalComponent (
Ctor ,
propsData ,
data ,
contextVm ,
children
) {
var options = Ctor . options ;
var props = { } ;
var propOptions = options . props ;
if ( isDef ( propOptions ) ) {
for ( var key in propOptions ) {
props [ key ] = validateProp ( key , propOptions , propsData || emptyObject ) ;
}
} else {
if ( isDef ( data . attrs ) ) { mergeProps ( props , data . attrs ) ; }
if ( isDef ( data . props ) ) { mergeProps ( props , data . props ) ; }
}
var renderContext = new FunctionalRenderContext (
data ,
props ,
children ,
contextVm ,
Ctor
) ;
var vnode = options . render . call ( null , renderContext . _c , renderContext ) ;
if ( vnode instanceof VNode ) {
return cloneAndMarkFunctionalResult ( vnode , data , renderContext . parent , options , renderContext )
} else if ( Array . isArray ( vnode ) ) {
var vnodes = normalizeChildren ( vnode ) || [ ] ;
var res = new Array ( vnodes . length ) ;
for ( var i = 0 ; i < vnodes . length ; i ++ ) {
res [ i ] = cloneAndMarkFunctionalResult ( vnodes [ i ] , data , renderContext . parent , options , renderContext ) ;
}
return res
}
}
function cloneAndMarkFunctionalResult ( vnode , data , contextVm , options , renderContext ) {
// #7817 clone node before setting fnContext, otherwise if the node is reused
// (e.g. it was from a cached normal slot) the fnContext causes named slots
// that should not be matched to match.
var clone = cloneVNode ( vnode ) ;
clone . fnContext = contextVm ;
clone . fnOptions = options ;
if ( true ) {
( clone . devtoolsMeta = clone . devtoolsMeta || { } ) . renderContext = renderContext ;
}
if ( data . slot ) {
( clone . data || ( clone . data = { } ) ) . slot = data . slot ;
}
return clone
}
function mergeProps ( to , from ) {
for ( var key in from ) {
to [ camelize ( key ) ] = from [ key ] ;
}
}
/* */
/* */
/* */
/* */
// inline hooks to be invoked on component VNodes during patch
var componentVNodeHooks = {
init : function init ( vnode , hydrating ) {
if (
vnode . componentInstance &&
! vnode . componentInstance . _isDestroyed &&
vnode . data . keepAlive
) {
// kept-alive components, treat as a patch
var mountedNode = vnode ; // work around flow
componentVNodeHooks . prepatch ( mountedNode , mountedNode ) ;
} else {
var child = vnode . componentInstance = createComponentInstanceForVnode (
vnode ,
activeInstance
) ;
child . $mount ( hydrating ? vnode . elm : undefined , hydrating ) ;
}
} ,
prepatch : function prepatch ( oldVnode , vnode ) {
var options = vnode . componentOptions ;
var child = vnode . componentInstance = oldVnode . componentInstance ;
updateChildComponent (
child ,
options . propsData , // updated props
options . listeners , // updated listeners
vnode , // new parent vnode
options . children // new children
) ;
} ,
insert : function insert ( vnode ) {
var context = vnode . context ;
var componentInstance = vnode . componentInstance ;
if ( ! componentInstance . _isMounted ) {
callHook ( componentInstance , 'onServiceCreated' ) ;
callHook ( componentInstance , 'onServiceAttached' ) ;
componentInstance . _isMounted = true ;
callHook ( componentInstance , 'mounted' ) ;
}
if ( vnode . data . keepAlive ) {
if ( context . _isMounted ) {
// vue-router#1212
// During updates, a kept-alive component's child components may
// change, so directly walking the tree here may call activated hooks
// on incorrect children. Instead we push them into a queue which will
// be processed after the whole patch process ended.
queueActivatedComponent ( componentInstance ) ;
} else {
activateChildComponent ( componentInstance , true /* direct */ ) ;
}
}
} ,
destroy : function destroy ( vnode ) {
var componentInstance = vnode . componentInstance ;
if ( ! componentInstance . _isDestroyed ) {
if ( ! vnode . data . keepAlive ) {
componentInstance . $destroy ( ) ;
} else {
deactivateChildComponent ( componentInstance , true /* direct */ ) ;
}
}
}
} ;
var hooksToMerge = Object . keys ( componentVNodeHooks ) ;
function createComponent (
Ctor ,
data ,
context ,
children ,
tag
) {
if ( isUndef ( Ctor ) ) {
return
}
var baseCtor = context . $options . _base ;
// plain options object: turn it into a constructor
if ( isObject ( Ctor ) ) {
Ctor = baseCtor . extend ( Ctor ) ;
}
// if at this stage it's not a constructor or an async component factory,
// reject.
if ( typeof Ctor !== 'function' ) {
if ( true ) {
warn ( ( "Invalid Component definition: " + ( String ( Ctor ) ) ) , context ) ;
}
return
}
// async component
var asyncFactory ;
if ( isUndef ( Ctor . cid ) ) {
asyncFactory = Ctor ;
Ctor = resolveAsyncComponent ( asyncFactory , baseCtor ) ;
if ( Ctor === undefined ) {
// return a placeholder node for async component, which is rendered
// as a comment node but preserves all the raw information for the node.
// the information will be used for async server-rendering and hydration.
return createAsyncPlaceholder (
asyncFactory ,
data ,
context ,
children ,
tag
)
}
}
data = data || { } ;
// resolve constructor options in case global mixins are applied after
// component constructor creation
resolveConstructorOptions ( Ctor ) ;
// transform component v-model data into props & events
if ( isDef ( data . model ) ) {
transformModel ( Ctor . options , data ) ;
}
// extract props
var propsData = extractPropsFromVNodeData ( data , Ctor , tag , context ) ; // fixed by xxxxxx
// functional component
if ( isTrue ( Ctor . options . functional ) ) {
return createFunctionalComponent ( Ctor , propsData , data , context , children )
}
// extract listeners, since these needs to be treated as
// child component listeners instead of DOM listeners
var listeners = data . on ;
// replace with listeners with .native modifier
// so it gets processed during parent component patch.
data . on = data . nativeOn ;
if ( isTrue ( Ctor . options . abstract ) ) {
// abstract components do not keep anything
// other than props & listeners & slot
// work around flow
var slot = data . slot ;
data = { } ;
if ( slot ) {
data . slot = slot ;
}
}
// install component management hooks onto the placeholder node
installComponentHooks ( data ) ;
// return a placeholder vnode
var name = Ctor . options . name || tag ;
var vnode = new VNode (
( "vue-component-" + ( Ctor . cid ) + ( name ? ( "-" + name ) : '' ) ) ,
data , undefined , undefined , undefined , context ,
{ Ctor : Ctor , propsData : propsData , listeners : listeners , tag : tag , children : children } ,
asyncFactory
) ;
return vnode
}
function createComponentInstanceForVnode (
vnode , // we know it's MountedComponentVNode but flow doesn't
parent // activeInstance in lifecycle state
) {
var options = {
_isComponent : true ,
_parentVnode : vnode ,
parent : parent
} ;
// check inline-template render functions
var inlineTemplate = vnode . data . inlineTemplate ;
if ( isDef ( inlineTemplate ) ) {
options . render = inlineTemplate . render ;
options . staticRenderFns = inlineTemplate . staticRenderFns ;
}
return new vnode . componentOptions . Ctor ( options )
}
function installComponentHooks ( data ) {
var hooks = data . hook || ( data . hook = { } ) ;
for ( var i = 0 ; i < hooksToMerge . length ; i ++ ) {
var key = hooksToMerge [ i ] ;
var existing = hooks [ key ] ;
var toMerge = componentVNodeHooks [ key ] ;
if ( existing !== toMerge && ! ( existing && existing . _merged ) ) {
hooks [ key ] = existing ? mergeHook$1 ( toMerge , existing ) : toMerge ;
}
}
}
function mergeHook$1 ( f1 , f2 ) {
var merged = function ( a , b ) {
// flow complains about extra args which is why we use any
f1 ( a , b ) ;
f2 ( a , b ) ;
} ;
merged . _merged = true ;
return merged
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel ( options , data ) {
var prop = ( options . model && options . model . prop ) || 'value' ;
var event = ( options . model && options . model . event ) || 'input'
; ( data . attrs || ( data . attrs = { } ) ) [ prop ] = data . model . value ;
var on = data . on || ( data . on = { } ) ;
var existing = on [ event ] ;
var callback = data . model . callback ;
if ( isDef ( existing ) ) {
if (
Array . isArray ( existing )
? existing . indexOf ( callback ) === - 1
: existing !== callback
) {
on [ event ] = [ callback ] . concat ( existing ) ;
}
} else {
on [ event ] = callback ;
}
}
/* */
var SIMPLE _NORMALIZE = 1 ;
var ALWAYS _NORMALIZE = 2 ;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement (
context ,
tag ,
data ,
children ,
normalizationType ,
alwaysNormalize
) {
if ( Array . isArray ( data ) || isPrimitive ( data ) ) {
normalizationType = children ;
children = data ;
data = undefined ;
}
if ( isTrue ( alwaysNormalize ) ) {
normalizationType = ALWAYS _NORMALIZE ;
}
return _createElement ( context , tag , data , children , normalizationType )
}
function _createElement (
context ,
tag ,
data ,
children ,
normalizationType
) {
if ( isDef ( data ) && isDef ( ( data ) . _ _ob _ _ ) ) {
true && warn (
"Avoid using observed data object as vnode data: " + ( JSON . stringify ( data ) ) + "\n" +
'Always create fresh vnode data objects in each render!' ,
context
) ;
return createEmptyVNode ( )
}
// object syntax in v-bind
if ( isDef ( data ) && isDef ( data . is ) ) {
tag = data . is ;
}
if ( ! tag ) {
// in case of component :is set to falsy value
return createEmptyVNode ( )
}
// warn against non-primitive key
if ( true &&
isDef ( data ) && isDef ( data . key ) && ! isPrimitive ( data . key )
) {
{
warn (
'Avoid using non-primitive value as key, ' +
'use string/number value instead.' ,
context
) ;
}
}
// support single function children as default scoped slot
if ( Array . isArray ( children ) &&
typeof children [ 0 ] === 'function'
) {
data = data || { } ;
data . scopedSlots = { default : children [ 0 ] } ;
children . length = 0 ;
}
if ( normalizationType === ALWAYS _NORMALIZE ) {
children = normalizeChildren ( children ) ;
} else if ( normalizationType === SIMPLE _NORMALIZE ) {
children = simpleNormalizeChildren ( children ) ;
}
var vnode , ns ;
if ( typeof tag === 'string' ) {
var Ctor ;
ns = ( context . $vnode && context . $vnode . ns ) || config . getTagNamespace ( tag ) ;
if ( config . isReservedTag ( tag ) ) {
// platform built-in elements
if ( true && isDef ( data ) && isDef ( data . nativeOn ) ) {
warn (
( "The .native modifier for v-on is only valid on components but it was used on <" + tag + ">." ) ,
context
) ;
}
vnode = new VNode (
config . parsePlatformTagName ( tag ) , data , children ,
undefined , undefined , context
) ;
} else if ( ( ! data || ! data . pre ) && isDef ( Ctor = resolveAsset ( context . $options , 'components' , tag ) ) ) {
// component
vnode = createComponent ( Ctor , data , context , children , tag ) ;
} else {
// unknown or unlisted namespaced elements
// check at runtime because it may get assigned a namespace when its
// parent normalizes children
vnode = new VNode (
tag , data , children ,
undefined , undefined , context
) ;
}
} else {
// direct component options / constructor
vnode = createComponent ( tag , data , context , children ) ;
}
if ( Array . isArray ( vnode ) ) {
return vnode
} else if ( isDef ( vnode ) ) {
if ( isDef ( ns ) ) { applyNS ( vnode , ns ) ; }
if ( isDef ( data ) ) { registerDeepBindings ( data ) ; }
return vnode
} else {
return createEmptyVNode ( )
}
}
function applyNS ( vnode , ns , force ) {
vnode . ns = ns ;
if ( vnode . tag === 'foreignObject' ) {
// use default namespace inside foreignObject
ns = undefined ;
force = true ;
}
if ( isDef ( vnode . children ) ) {
for ( var i = 0 , l = vnode . children . length ; i < l ; i ++ ) {
var child = vnode . children [ i ] ;
if ( isDef ( child . tag ) && (
isUndef ( child . ns ) || ( isTrue ( force ) && child . tag !== 'svg' ) ) ) {
applyNS ( child , ns , force ) ;
}
}
}
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings ( data ) {
if ( isObject ( data . style ) ) {
traverse ( data . style ) ;
}
if ( isObject ( data . class ) ) {
traverse ( data . class ) ;
}
}
/* */
function initRender ( vm ) {
vm . _vnode = null ; // the root of the child tree
vm . _staticTrees = null ; // v-once cached trees
var options = vm . $options ;
var parentVnode = vm . $vnode = options . _parentVnode ; // the placeholder node in parent tree
var renderContext = parentVnode && parentVnode . context ;
vm . $slots = resolveSlots ( options . _renderChildren , renderContext ) ;
vm . $scopedSlots = emptyObject ;
// bind the createElement fn to this instance
// so that we get proper render context inside it.
// args order: tag, data, children, normalizationType, alwaysNormalize
// internal version is used by render functions compiled from templates
vm . _c = function ( a , b , c , d ) { return createElement ( vm , a , b , c , d , false ) ; } ;
// normalization is always applied for the public version, used in
// user-written render functions.
vm . $createElement = function ( a , b , c , d ) { return createElement ( vm , a , b , c , d , true ) ; } ;
// $attrs & $listeners are exposed for easier HOC creation.
// they need to be reactive so that HOCs using them are always updated
var parentData = parentVnode && parentVnode . data ;
/* istanbul ignore else */
if ( true ) {
defineReactive$$1 ( vm , '$attrs' , parentData && parentData . attrs || emptyObject , function ( ) {
! isUpdatingChildComponent && warn ( "$attrs is readonly." , vm ) ;
} , true ) ;
defineReactive$$1 ( vm , '$listeners' , options . _parentListeners || emptyObject , function ( ) {
! isUpdatingChildComponent && warn ( "$listeners is readonly." , vm ) ;
} , true ) ;
} else { }
}
var currentRenderingInstance = null ;
function renderMixin ( Vue ) {
// install runtime convenience helpers
installRenderHelpers ( Vue . prototype ) ;
Vue . prototype . $nextTick = function ( fn ) {
return nextTick ( fn , this )
} ;
Vue . prototype . _render = function ( ) {
var vm = this ;
var ref = vm . $options ;
var render = ref . render ;
var _parentVnode = ref . _parentVnode ;
if ( _parentVnode ) {
vm . $scopedSlots = normalizeScopedSlots (
_parentVnode . data . scopedSlots ,
vm . $slots ,
vm . $scopedSlots
) ;
}
// set parent vnode. this allows render functions to have access
// to the data on the placeholder node.
vm . $vnode = _parentVnode ;
// render self
var vnode ;
try {
// There's no need to maintain a stack because all render fns are called
// separately from one another. Nested component's render fns are called
// when parent component is patched.
currentRenderingInstance = vm ;
vnode = render . call ( vm . _renderProxy , vm . $createElement ) ;
} catch ( e ) {
handleError ( e , vm , "render" ) ;
// return error render result,
// or previous vnode to prevent render error causing blank component
/* istanbul ignore else */
if ( true && vm . $options . renderError ) {
try {
vnode = vm . $options . renderError . call ( vm . _renderProxy , vm . $createElement , e ) ;
} catch ( e ) {
handleError ( e , vm , "renderError" ) ;
vnode = vm . _vnode ;
}
} else {
vnode = vm . _vnode ;
}
} finally {
currentRenderingInstance = null ;
}
// if the returned array contains only a single node, allow it
if ( Array . isArray ( vnode ) && vnode . length === 1 ) {
vnode = vnode [ 0 ] ;
}
// return empty vnode in case the render function errored out
if ( ! ( vnode instanceof VNode ) ) {
if ( true && Array . isArray ( vnode ) ) {
warn (
'Multiple root nodes returned from render function. Render function ' +
'should return a single root node.' ,
vm
) ;
}
vnode = createEmptyVNode ( ) ;
}
// set parent
vnode . parent = _parentVnode ;
return vnode
} ;
}
/* */
function ensureCtor ( comp , base ) {
if (
comp . _ _esModule ||
( hasSymbol && comp [ Symbol . toStringTag ] === 'Module' )
) {
comp = comp . default ;
}
return isObject ( comp )
? base . extend ( comp )
: comp
}
function createAsyncPlaceholder (
factory ,
data ,
context ,
children ,
tag
) {
var node = createEmptyVNode ( ) ;
node . asyncFactory = factory ;
node . asyncMeta = { data : data , context : context , children : children , tag : tag } ;
return node
}
function resolveAsyncComponent (
factory ,
baseCtor
) {
if ( isTrue ( factory . error ) && isDef ( factory . errorComp ) ) {
return factory . errorComp
}
if ( isDef ( factory . resolved ) ) {
return factory . resolved
}
var owner = currentRenderingInstance ;
if ( owner && isDef ( factory . owners ) && factory . owners . indexOf ( owner ) === - 1 ) {
// already pending
factory . owners . push ( owner ) ;
}
if ( isTrue ( factory . loading ) && isDef ( factory . loadingComp ) ) {
return factory . loadingComp
}
if ( owner && ! isDef ( factory . owners ) ) {
var owners = factory . owners = [ owner ] ;
var sync = true ;
var timerLoading = null ;
var timerTimeout = null
; ( owner ) . $on ( 'hook:destroyed' , function ( ) { return remove ( owners , owner ) ; } ) ;
var forceRender = function ( renderCompleted ) {
for ( var i = 0 , l = owners . length ; i < l ; i ++ ) {
( owners [ i ] ) . $forceUpdate ( ) ;
}
if ( renderCompleted ) {
owners . length = 0 ;
if ( timerLoading !== null ) {
clearTimeout ( timerLoading ) ;
timerLoading = null ;
}
if ( timerTimeout !== null ) {
clearTimeout ( timerTimeout ) ;
timerTimeout = null ;
}
}
} ;
var resolve = once ( function ( res ) {
// cache resolved
factory . resolved = ensureCtor ( res , baseCtor ) ;
// invoke callbacks only if this is not a synchronous resolve
// (async resolves are shimmed as synchronous during SSR)
if ( ! sync ) {
forceRender ( true ) ;
} else {
owners . length = 0 ;
}
} ) ;
var reject = once ( function ( reason ) {
true && warn (
"Failed to resolve async component: " + ( String ( factory ) ) +
( reason ? ( "\nReason: " + reason ) : '' )
) ;
if ( isDef ( factory . errorComp ) ) {
factory . error = true ;
forceRender ( true ) ;
}
} ) ;
var res = factory ( resolve , reject ) ;
if ( isObject ( res ) ) {
if ( isPromise ( res ) ) {
// () => Promise
if ( isUndef ( factory . resolved ) ) {
res . then ( resolve , reject ) ;
}
} else if ( isPromise ( res . component ) ) {
res . component . then ( resolve , reject ) ;
if ( isDef ( res . error ) ) {
factory . errorComp = ensureCtor ( res . error , baseCtor ) ;
}
if ( isDef ( res . loading ) ) {
factory . loadingComp = ensureCtor ( res . loading , baseCtor ) ;
if ( res . delay === 0 ) {
factory . loading = true ;
} else {
timerLoading = setTimeout ( function ( ) {
timerLoading = null ;
if ( isUndef ( factory . resolved ) && isUndef ( factory . error ) ) {
factory . loading = true ;
forceRender ( false ) ;
}
} , res . delay || 200 ) ;
}
}
if ( isDef ( res . timeout ) ) {
timerTimeout = setTimeout ( function ( ) {
timerTimeout = null ;
if ( isUndef ( factory . resolved ) ) {
reject (
true
? ( "timeout (" + ( res . timeout ) + "ms)" )
: undefined
) ;
}
} , res . timeout ) ;
}
}
}
sync = false ;
// return in case resolved synchronously
return factory . loading
? factory . loadingComp
: factory . resolved
}
}
/* */
function isAsyncPlaceholder ( node ) {
return node . isComment && node . asyncFactory
}
/* */
function getFirstComponentChild ( children ) {
if ( Array . isArray ( children ) ) {
for ( var i = 0 ; i < children . length ; i ++ ) {
var c = children [ i ] ;
if ( isDef ( c ) && ( isDef ( c . componentOptions ) || isAsyncPlaceholder ( c ) ) ) {
return c
}
}
}
}
/* */
/* */
function initEvents ( vm ) {
vm . _events = Object . create ( null ) ;
vm . _hasHookEvent = false ;
// init parent attached events
var listeners = vm . $options . _parentListeners ;
if ( listeners ) {
updateComponentListeners ( vm , listeners ) ;
}
}
var target ;
function add ( event , fn ) {
target . $on ( event , fn ) ;
}
function remove$1 ( event , fn ) {
target . $off ( event , fn ) ;
}
function createOnceHandler ( event , fn ) {
var _target = target ;
return function onceHandler ( ) {
var res = fn . apply ( null , arguments ) ;
if ( res !== null ) {
_target . $off ( event , onceHandler ) ;
}
}
}
function updateComponentListeners (
vm ,
listeners ,
oldListeners
) {
target = vm ;
updateListeners ( listeners , oldListeners || { } , add , remove$1 , createOnceHandler , vm ) ;
target = undefined ;
}
function eventsMixin ( Vue ) {
var hookRE = /^hook:/ ;
Vue . prototype . $on = function ( event , fn ) {
var vm = this ;
if ( Array . isArray ( event ) ) {
for ( var i = 0 , l = event . length ; i < l ; i ++ ) {
vm . $on ( event [ i ] , fn ) ;
}
} else {
( vm . _events [ event ] || ( vm . _events [ event ] = [ ] ) ) . push ( fn ) ;
// optimize hook:event cost by using a boolean flag marked at registration
// instead of a hash lookup
if ( hookRE . test ( event ) ) {
vm . _hasHookEvent = true ;
}
}
return vm
} ;
Vue . prototype . $once = function ( event , fn ) {
var vm = this ;
function on ( ) {
vm . $off ( event , on ) ;
fn . apply ( vm , arguments ) ;
}
on . fn = fn ;
vm . $on ( event , on ) ;
return vm
} ;
Vue . prototype . $off = function ( event , fn ) {
var vm = this ;
// all
if ( ! arguments . length ) {
vm . _events = Object . create ( null ) ;
return vm
}
// array of events
if ( Array . isArray ( event ) ) {
for ( var i$1 = 0 , l = event . length ; i$1 < l ; i$1 ++ ) {
vm . $off ( event [ i$1 ] , fn ) ;
}
return vm
}
// specific event
var cbs = vm . _events [ event ] ;
if ( ! cbs ) {
return vm
}
if ( ! fn ) {
vm . _events [ event ] = null ;
return vm
}
// specific handler
var cb ;
var i = cbs . length ;
while ( i -- ) {
cb = cbs [ i ] ;
if ( cb === fn || cb . fn === fn ) {
cbs . splice ( i , 1 ) ;
break
}
}
return vm
} ;
Vue . prototype . $emit = function ( event ) {
var vm = this ;
if ( true ) {
var lowerCaseEvent = event . toLowerCase ( ) ;
if ( lowerCaseEvent !== event && vm . _events [ lowerCaseEvent ] ) {
tip (
"Event \"" + lowerCaseEvent + "\" is emitted in component " +
( formatComponentName ( vm ) ) + " but the handler is registered for \"" + event + "\". " +
"Note that HTML attributes are case-insensitive and you cannot use " +
"v-on to listen to camelCase events when using in-DOM templates. " +
"You should probably use \"" + ( hyphenate ( event ) ) + "\" instead of \"" + event + "\"."
) ;
}
}
var cbs = vm . _events [ event ] ;
if ( cbs ) {
cbs = cbs . length > 1 ? toArray ( cbs ) : cbs ;
var args = toArray ( arguments , 1 ) ;
var info = "event handler for \"" + event + "\"" ;
for ( var i = 0 , l = cbs . length ; i < l ; i ++ ) {
invokeWithErrorHandling ( cbs [ i ] , vm , args , vm , info ) ;
}
}
return vm
} ;
}
/* */
var activeInstance = null ;
var isUpdatingChildComponent = false ;
function setActiveInstance ( vm ) {
var prevActiveInstance = activeInstance ;
activeInstance = vm ;
return function ( ) {
activeInstance = prevActiveInstance ;
}
}
function initLifecycle ( vm ) {
var options = vm . $options ;
// locate first non-abstract parent
var parent = options . parent ;
if ( parent && ! options . abstract ) {
while ( parent . $options . abstract && parent . $parent ) {
parent = parent . $parent ;
}
parent . $children . push ( vm ) ;
}
vm . $parent = parent ;
vm . $root = parent ? parent . $root : vm ;
vm . $children = [ ] ;
vm . $refs = { } ;
vm . _watcher = null ;
vm . _inactive = null ;
vm . _directInactive = false ;
vm . _isMounted = false ;
vm . _isDestroyed = false ;
vm . _isBeingDestroyed = false ;
}
function lifecycleMixin ( Vue ) {
Vue . prototype . _update = function ( vnode , hydrating ) {
var vm = this ;
var prevEl = vm . $el ;
var prevVnode = vm . _vnode ;
var restoreActiveInstance = setActiveInstance ( vm ) ;
vm . _vnode = vnode ;
// Vue.prototype.__patch__ is injected in entry points
// based on the rendering backend used.
if ( ! prevVnode ) {
// initial render
vm . $el = vm . _ _patch _ _ ( vm . $el , vnode , hydrating , false /* removeOnly */ ) ;
} else {
// updates
vm . $el = vm . _ _patch _ _ ( prevVnode , vnode ) ;
}
restoreActiveInstance ( ) ;
// update __vue__ reference
if ( prevEl ) {
prevEl . _ _vue _ _ = null ;
}
if ( vm . $el ) {
vm . $el . _ _vue _ _ = vm ;
}
// if parent is an HOC, update its $el as well
if ( vm . $vnode && vm . $parent && vm . $vnode === vm . $parent . _vnode ) {
vm . $parent . $el = vm . $el ;
}
// updated hook is called by the scheduler to ensure that children are
// updated in a parent's updated hook.
} ;
Vue . prototype . $forceUpdate = function ( ) {
var vm = this ;
if ( vm . _watcher ) {
vm . _watcher . update ( ) ;
}
} ;
Vue . prototype . $destroy = function ( ) {
var vm = this ;
if ( vm . _isBeingDestroyed ) {
return
}
callHook ( vm , 'beforeDestroy' ) ;
vm . _isBeingDestroyed = true ;
// remove self from parent
var parent = vm . $parent ;
if ( parent && ! parent . _isBeingDestroyed && ! vm . $options . abstract ) {
remove ( parent . $children , vm ) ;
}
// teardown watchers
if ( vm . _watcher ) {
vm . _watcher . teardown ( ) ;
}
var i = vm . _watchers . length ;
while ( i -- ) {
vm . _watchers [ i ] . teardown ( ) ;
}
// remove reference from data ob
// frozen object may not have observer.
if ( vm . _data . _ _ob _ _ ) {
vm . _data . _ _ob _ _ . vmCount -- ;
}
// call the last hook...
vm . _isDestroyed = true ;
// invoke destroy hooks on current rendered tree
vm . _ _patch _ _ ( vm . _vnode , null ) ;
// fire destroyed hook
callHook ( vm , 'destroyed' ) ;
// turn off all instance listeners.
vm . $off ( ) ;
// remove __vue__ reference
if ( vm . $el ) {
vm . $el . _ _vue _ _ = null ;
}
// release circular reference (#6759)
if ( vm . $vnode ) {
vm . $vnode . parent = null ;
}
} ;
}
function updateChildComponent (
vm ,
propsData ,
listeners ,
parentVnode ,
renderChildren
) {
if ( true ) {
isUpdatingChildComponent = true ;
}
// determine whether component has slot children
// we need to do this before overwriting $options._renderChildren.
// check if there are dynamic scopedSlots (hand-written or compiled but with
// dynamic slot names). Static scoped slots compiled from template has the
// "$stable" marker.
var newScopedSlots = parentVnode . data . scopedSlots ;
var oldScopedSlots = vm . $scopedSlots ;
var hasDynamicScopedSlot = ! ! (
( newScopedSlots && ! newScopedSlots . $stable ) ||
( oldScopedSlots !== emptyObject && ! oldScopedSlots . $stable ) ||
( newScopedSlots && vm . $scopedSlots . $key !== newScopedSlots . $key )
) ;
// Any static slot children from the parent may have changed during parent's
// update. Dynamic scoped slots may also have changed. In such cases, a forced
// update is necessary to ensure correctness.
var needsForceUpdate = ! ! (
renderChildren || // has new static slots
vm . $options . _renderChildren || // has old static slots
hasDynamicScopedSlot
) ;
vm . $options . _parentVnode = parentVnode ;
vm . $vnode = parentVnode ; // update vm's placeholder node without re-render
if ( vm . _vnode ) { // update child tree's parent
vm . _vnode . parent = parentVnode ;
}
vm . $options . _renderChildren = renderChildren ;
// update $attrs and $listeners hash
// these are also reactive so they may trigger child update if the child
// used them during render
vm . $attrs = parentVnode . data . attrs || emptyObject ;
vm . $listeners = listeners || emptyObject ;
// update props
if ( propsData && vm . $options . props ) {
toggleObserving ( false ) ;
var props = vm . _props ;
var propKeys = vm . $options . _propKeys || [ ] ;
for ( var i = 0 ; i < propKeys . length ; i ++ ) {
var key = propKeys [ i ] ;
var propOptions = vm . $options . props ; // wtf flow?
props [ key ] = validateProp ( key , propOptions , propsData , vm ) ;
}
toggleObserving ( true ) ;
// keep a copy of raw propsData
vm . $options . propsData = propsData ;
}
// fixed by xxxxxx update properties(mp runtime)
vm . _$updateProperties && vm . _$updateProperties ( vm ) ;
// update listeners
listeners = listeners || emptyObject ;
var oldListeners = vm . $options . _parentListeners ;
vm . $options . _parentListeners = listeners ;
updateComponentListeners ( vm , listeners , oldListeners ) ;
// resolve slots + force update if has children
if ( needsForceUpdate ) {
vm . $slots = resolveSlots ( renderChildren , parentVnode . context ) ;
vm . $forceUpdate ( ) ;
}
if ( true ) {
isUpdatingChildComponent = false ;
}
}
function isInInactiveTree ( vm ) {
while ( vm && ( vm = vm . $parent ) ) {
if ( vm . _inactive ) { return true }
}
return false
}
function activateChildComponent ( vm , direct ) {
if ( direct ) {
vm . _directInactive = false ;
if ( isInInactiveTree ( vm ) ) {
return
}
} else if ( vm . _directInactive ) {
return
}
if ( vm . _inactive || vm . _inactive === null ) {
vm . _inactive = false ;
for ( var i = 0 ; i < vm . $children . length ; i ++ ) {
activateChildComponent ( vm . $children [ i ] ) ;
}
callHook ( vm , 'activated' ) ;
}
}
function deactivateChildComponent ( vm , direct ) {
if ( direct ) {
vm . _directInactive = true ;
if ( isInInactiveTree ( vm ) ) {
return
}
}
if ( ! vm . _inactive ) {
vm . _inactive = true ;
for ( var i = 0 ; i < vm . $children . length ; i ++ ) {
deactivateChildComponent ( vm . $children [ i ] ) ;
}
callHook ( vm , 'deactivated' ) ;
}
}
function callHook ( vm , hook ) {
// #7573 disable dep collection when invoking lifecycle hooks
pushTarget ( ) ;
var handlers = vm . $options [ hook ] ;
var info = hook + " hook" ;
if ( handlers ) {
for ( var i = 0 , j = handlers . length ; i < j ; i ++ ) {
invokeWithErrorHandling ( handlers [ i ] , vm , null , vm , info ) ;
}
}
if ( vm . _hasHookEvent ) {
vm . $emit ( 'hook:' + hook ) ;
}
popTarget ( ) ;
}
/* */
var MAX _UPDATE _COUNT = 100 ;
var queue = [ ] ;
var activatedChildren = [ ] ;
var has = { } ;
var circular = { } ;
var waiting = false ;
var flushing = false ;
var index = 0 ;
/ * *
* Reset the scheduler ' s state .
* /
function resetSchedulerState ( ) {
index = queue . length = activatedChildren . length = 0 ;
has = { } ;
if ( true ) {
circular = { } ;
}
waiting = flushing = false ;
}
// Async edge case #6566 requires saving the timestamp when event listeners are
// attached. However, calling performance.now() has a perf overhead especially
// if the page has thousands of event listeners. Instead, we take a timestamp
// every time the scheduler flushes and use that for all event listeners
// attached during that flush.
var currentFlushTimestamp = 0 ;
// Async edge case fix requires storing an event listener's attach timestamp.
var getNow = Date . now ;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if ( inBrowser && ! isIE ) {
var performance = window . performance ;
if (
performance &&
typeof performance . now === 'function' &&
getNow ( ) > document . createEvent ( 'Event' ) . timeStamp
) {
// if the event timestamp, although evaluated AFTER the Date.now(), is
// smaller than it, it means the event is using a hi-res timestamp,
// and we need to use the hi-res version for event listener timestamps as
// well.
getNow = function ( ) { return performance . now ( ) ; } ;
}
}
/ * *
* Flush both queues and run the watchers .
* /
function flushSchedulerQueue ( ) {
currentFlushTimestamp = getNow ( ) ;
flushing = true ;
var watcher , id ;
// Sort queue before flush.
// This ensures that:
// 1. Components are updated from parent to child. (because parent is always
// created before the child)
// 2. A component's user watchers are run before its render watcher (because
// user watchers are created before the render watcher)
// 3. If a component is destroyed during a parent component's watcher run,
// its watchers can be skipped.
queue . sort ( function ( a , b ) { return a . id - b . id ; } ) ;
// do not cache length because more watchers might be pushed
// as we run existing watchers
for ( index = 0 ; index < queue . length ; index ++ ) {
watcher = queue [ index ] ;
if ( watcher . before ) {
watcher . before ( ) ;
}
id = watcher . id ;
has [ id ] = null ;
watcher . run ( ) ;
// in dev build, check and stop circular updates.
if ( true && has [ id ] != null ) {
circular [ id ] = ( circular [ id ] || 0 ) + 1 ;
if ( circular [ id ] > MAX _UPDATE _COUNT ) {
warn (
'You may have an infinite update loop ' + (
watcher . user
? ( "in watcher with expression \"" + ( watcher . expression ) + "\"" )
: "in a component render function."
) ,
watcher . vm
) ;
break
}
}
}
// keep copies of post queues before resetting state
var activatedQueue = activatedChildren . slice ( ) ;
var updatedQueue = queue . slice ( ) ;
resetSchedulerState ( ) ;
// call component updated and activated hooks
callActivatedHooks ( activatedQueue ) ;
callUpdatedHooks ( updatedQueue ) ;
// devtool hook
/* istanbul ignore if */
if ( devtools && config . devtools ) {
devtools . emit ( 'flush' ) ;
}
}
function callUpdatedHooks ( queue ) {
var i = queue . length ;
while ( i -- ) {
var watcher = queue [ i ] ;
var vm = watcher . vm ;
if ( vm . _watcher === watcher && vm . _isMounted && ! vm . _isDestroyed ) {
callHook ( vm , 'updated' ) ;
}
}
}
/ * *
* Queue a kept - alive component that was activated during patch .
* The queue will be processed after the entire tree has been patched .
* /
function queueActivatedComponent ( vm ) {
// setting _inactive to false here so that a render function can
// rely on checking whether it's in an inactive tree (e.g. router-view)
vm . _inactive = false ;
activatedChildren . push ( vm ) ;
}
function callActivatedHooks ( queue ) {
for ( var i = 0 ; i < queue . length ; i ++ ) {
queue [ i ] . _inactive = true ;
activateChildComponent ( queue [ i ] , true /* true */ ) ;
}
}
/ * *
* Push a watcher into the watcher queue .
* Jobs with duplicate IDs will be skipped unless it ' s
* pushed when the queue is being flushed .
* /
function queueWatcher ( watcher ) {
var id = watcher . id ;
if ( has [ id ] == null ) {
has [ id ] = true ;
if ( ! flushing ) {
queue . push ( watcher ) ;
} else {
// if already flushing, splice the watcher based on its id
// if already past its id, it will be run next immediately.
var i = queue . length - 1 ;
while ( i > index && queue [ i ] . id > watcher . id ) {
i -- ;
}
queue . splice ( i + 1 , 0 , watcher ) ;
}
// queue the flush
if ( ! waiting ) {
waiting = true ;
if ( true && ! config . async ) {
flushSchedulerQueue ( ) ;
return
}
nextTick ( flushSchedulerQueue ) ;
}
}
}
/* */
var uid$2 = 0 ;
/ * *
* A watcher parses an expression , collects dependencies ,
* and fires callback when the expression value changes .
* This is used for both the $watch ( ) api and directives .
* /
var Watcher = function Watcher (
vm ,
expOrFn ,
cb ,
options ,
isRenderWatcher
) {
this . vm = vm ;
if ( isRenderWatcher ) {
vm . _watcher = this ;
}
vm . _watchers . push ( this ) ;
// options
if ( options ) {
this . deep = ! ! options . deep ;
this . user = ! ! options . user ;
this . lazy = ! ! options . lazy ;
this . sync = ! ! options . sync ;
this . before = options . before ;
} else {
this . deep = this . user = this . lazy = this . sync = false ;
}
this . cb = cb ;
this . id = ++ uid$2 ; // uid for batching
this . active = true ;
this . dirty = this . lazy ; // for lazy watchers
this . deps = [ ] ;
this . newDeps = [ ] ;
this . depIds = new _Set ( ) ;
this . newDepIds = new _Set ( ) ;
this . expression = true
? expOrFn . toString ( )
: undefined ;
// parse expression for getter
if ( typeof expOrFn === 'function' ) {
this . getter = expOrFn ;
} else {
this . getter = parsePath ( expOrFn ) ;
if ( ! this . getter ) {
this . getter = noop ;
true && warn (
"Failed watching path: \"" + expOrFn + "\" " +
'Watcher only accepts simple dot-delimited paths. ' +
'For full control, use a function instead.' ,
vm
) ;
}
}
this . value = this . lazy
? undefined
: this . get ( ) ;
} ;
/ * *
* Evaluate the getter , and re - collect dependencies .
* /
Watcher . prototype . get = function get ( ) {
pushTarget ( this ) ;
var value ;
var vm = this . vm ;
try {
value = this . getter . call ( vm , vm ) ;
} catch ( e ) {
if ( this . user ) {
handleError ( e , vm , ( "getter for watcher \"" + ( this . expression ) + "\"" ) ) ;
} else {
throw e
}
} finally {
// "touch" every property so they are all tracked as
// dependencies for deep watching
if ( this . deep ) {
traverse ( value ) ;
}
popTarget ( ) ;
this . cleanupDeps ( ) ;
}
return value
} ;
/ * *
* Add a dependency to this directive .
* /
Watcher . prototype . addDep = function addDep ( dep ) {
var id = dep . id ;
if ( ! this . newDepIds . has ( id ) ) {
this . newDepIds . add ( id ) ;
this . newDeps . push ( dep ) ;
if ( ! this . depIds . has ( id ) ) {
dep . addSub ( this ) ;
}
}
} ;
/ * *
* Clean up for dependency collection .
* /
Watcher . prototype . cleanupDeps = function cleanupDeps ( ) {
var i = this . deps . length ;
while ( i -- ) {
var dep = this . deps [ i ] ;
if ( ! this . newDepIds . has ( dep . id ) ) {
dep . removeSub ( this ) ;
}
}
var tmp = this . depIds ;
this . depIds = this . newDepIds ;
this . newDepIds = tmp ;
this . newDepIds . clear ( ) ;
tmp = this . deps ;
this . deps = this . newDeps ;
this . newDeps = tmp ;
this . newDeps . length = 0 ;
} ;
/ * *
* Subscriber interface .
* Will be called when a dependency changes .
* /
Watcher . prototype . update = function update ( ) {
/* istanbul ignore else */
if ( this . lazy ) {
this . dirty = true ;
} else if ( this . sync ) {
this . run ( ) ;
} else {
queueWatcher ( this ) ;
}
} ;
/ * *
* Scheduler job interface .
* Will be called by the scheduler .
* /
Watcher . prototype . run = function run ( ) {
if ( this . active ) {
var value = this . get ( ) ;
if (
value !== this . value ||
// Deep watchers and watchers on Object/Arrays should fire even
// when the value is the same, because the value may
// have mutated.
isObject ( value ) ||
this . deep
) {
// set new value
var oldValue = this . value ;
this . value = value ;
if ( this . user ) {
try {
this . cb . call ( this . vm , value , oldValue ) ;
} catch ( e ) {
handleError ( e , this . vm , ( "callback for watcher \"" + ( this . expression ) + "\"" ) ) ;
}
} else {
this . cb . call ( this . vm , value , oldValue ) ;
}
}
}
} ;
/ * *
* Evaluate the value of the watcher .
* This only gets called for lazy watchers .
* /
Watcher . prototype . evaluate = function evaluate ( ) {
this . value = this . get ( ) ;
this . dirty = false ;
} ;
/ * *
* Depend on all deps collected by this watcher .
* /
Watcher . prototype . depend = function depend ( ) {
var i = this . deps . length ;
while ( i -- ) {
this . deps [ i ] . depend ( ) ;
}
} ;
/ * *
* Remove self from all dependencies ' subscriber list .
* /
Watcher . prototype . teardown = function teardown ( ) {
if ( this . active ) {
// remove self from vm's watcher list
// this is a somewhat expensive operation so we skip it
// if the vm is being destroyed.
if ( ! this . vm . _isBeingDestroyed ) {
remove ( this . vm . _watchers , this ) ;
}
var i = this . deps . length ;
while ( i -- ) {
this . deps [ i ] . removeSub ( this ) ;
}
this . active = false ;
}
} ;
/* */
var sharedPropertyDefinition = {
enumerable : true ,
configurable : true ,
get : noop ,
set : noop
} ;
function proxy ( target , sourceKey , key ) {
sharedPropertyDefinition . get = function proxyGetter ( ) {
return this [ sourceKey ] [ key ]
} ;
sharedPropertyDefinition . set = function proxySetter ( val ) {
this [ sourceKey ] [ key ] = val ;
} ;
Object . defineProperty ( target , key , sharedPropertyDefinition ) ;
}
function initState ( vm ) {
vm . _watchers = [ ] ;
var opts = vm . $options ;
if ( opts . props ) { initProps ( vm , opts . props ) ; }
if ( opts . methods ) { initMethods ( vm , opts . methods ) ; }
if ( opts . data ) {
initData ( vm ) ;
} else {
observe ( vm . _data = { } , true /* asRootData */ ) ;
}
if ( opts . computed ) { initComputed ( vm , opts . computed ) ; }
if ( opts . watch && opts . watch !== nativeWatch ) {
initWatch ( vm , opts . watch ) ;
}
}
function initProps ( vm , propsOptions ) {
var propsData = vm . $options . propsData || { } ;
var props = vm . _props = { } ;
// cache prop keys so that future props updates can iterate using Array
// instead of dynamic object key enumeration.
var keys = vm . $options . _propKeys = [ ] ;
var isRoot = ! vm . $parent ;
// root instance props should be converted
if ( ! isRoot ) {
toggleObserving ( false ) ;
}
var loop = function ( key ) {
keys . push ( key ) ;
var value = validateProp ( key , propsOptions , propsData , vm ) ;
/* istanbul ignore else */
if ( true ) {
var hyphenatedKey = hyphenate ( key ) ;
if ( isReservedAttribute ( hyphenatedKey ) ||
config . isReservedAttr ( hyphenatedKey ) ) {
warn (
( "\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop." ) ,
vm
) ;
}
defineReactive$$1 ( props , key , value , function ( ) {
if ( ! isRoot && ! isUpdatingChildComponent ) {
{
if ( vm . mpHost === 'mp-baidu' || vm . mpHost === 'mp-kuaishou' || vm . mpHost === 'mp-xhs' ) { //百度、快手、小红书 observer 在 setData callback 之后触发,直接忽略该 warn
return
}
//fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警
if (
key === 'value' &&
Array . isArray ( vm . $options . behaviors ) &&
vm . $options . behaviors . indexOf ( 'uni://form-field' ) !== - 1
) {
return
}
if ( vm . _getFormData ) {
return
}
var $parent = vm . $parent ;
while ( $parent ) {
if ( $parent . _ _next _tick _pending ) {
return
}
$parent = $parent . $parent ;
}
}
warn (
"Avoid mutating a prop directly since the value will be " +
"overwritten whenever the parent component re-renders. " +
"Instead, use a data or computed property based on the prop's " +
"value. Prop being mutated: \"" + key + "\"" ,
vm
) ;
}
} ) ;
} else { }
// static props are already proxied on the component's prototype
// during Vue.extend(). We only need to proxy props defined at
// instantiation here.
if ( ! ( key in vm ) ) {
proxy ( vm , "_props" , key ) ;
}
} ;
for ( var key in propsOptions ) loop ( key ) ;
toggleObserving ( true ) ;
}
function initData ( vm ) {
var data = vm . $options . data ;
data = vm . _data = typeof data === 'function'
? getData ( data , vm )
: data || { } ;
if ( ! isPlainObject ( data ) ) {
data = { } ;
true && warn (
'data functions should return an object:\n' +
'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function' ,
vm
) ;
}
// proxy data on instance
var keys = Object . keys ( data ) ;
var props = vm . $options . props ;
var methods = vm . $options . methods ;
var i = keys . length ;
while ( i -- ) {
var key = keys [ i ] ;
if ( true ) {
if ( methods && hasOwn ( methods , key ) ) {
warn (
( "Method \"" + key + "\" has already been defined as a data property." ) ,
vm
) ;
}
}
if ( props && hasOwn ( props , key ) ) {
true && warn (
"The data property \"" + key + "\" is already declared as a prop. " +
"Use prop default value instead." ,
vm
) ;
} else if ( ! isReserved ( key ) ) {
proxy ( vm , "_data" , key ) ;
}
}
// observe data
observe ( data , true /* asRootData */ ) ;
}
function getData ( data , vm ) {
// #7573 disable dep collection when invoking data getters
pushTarget ( ) ;
try {
return data . call ( vm , vm )
} catch ( e ) {
handleError ( e , vm , "data()" ) ;
return { }
} finally {
popTarget ( ) ;
}
}
var computedWatcherOptions = { lazy : true } ;
function initComputed ( vm , computed ) {
// $flow-disable-line
var watchers = vm . _computedWatchers = Object . create ( null ) ;
// computed properties are just getters during SSR
var isSSR = isServerRendering ( ) ;
for ( var key in computed ) {
var userDef = computed [ key ] ;
var getter = typeof userDef === 'function' ? userDef : userDef . get ;
if ( true && getter == null ) {
warn (
( "Getter is missing for computed property \"" + key + "\"." ) ,
vm
) ;
}
if ( ! isSSR ) {
// create internal watcher for the computed property.
watchers [ key ] = new Watcher (
vm ,
getter || noop ,
noop ,
computedWatcherOptions
) ;
}
// component-defined computed properties are already defined on the
// component prototype. We only need to define computed properties defined
// at instantiation here.
if ( ! ( key in vm ) ) {
defineComputed ( vm , key , userDef ) ;
} else if ( true ) {
if ( key in vm . $data ) {
warn ( ( "The computed property \"" + key + "\" is already defined in data." ) , vm ) ;
} else if ( vm . $options . props && key in vm . $options . props ) {
warn ( ( "The computed property \"" + key + "\" is already defined as a prop." ) , vm ) ;
}
}
}
}
function defineComputed (
target ,
key ,
userDef
) {
var shouldCache = ! isServerRendering ( ) ;
if ( typeof userDef === 'function' ) {
sharedPropertyDefinition . get = shouldCache
? createComputedGetter ( key )
: createGetterInvoker ( userDef ) ;
sharedPropertyDefinition . set = noop ;
} else {
sharedPropertyDefinition . get = userDef . get
? shouldCache && userDef . cache !== false
? createComputedGetter ( key )
: createGetterInvoker ( userDef . get )
: noop ;
sharedPropertyDefinition . set = userDef . set || noop ;
}
if ( true &&
sharedPropertyDefinition . set === noop ) {
sharedPropertyDefinition . set = function ( ) {
warn (
( "Computed property \"" + key + "\" was assigned to but it has no setter." ) ,
this
) ;
} ;
}
Object . defineProperty ( target , key , sharedPropertyDefinition ) ;
}
function createComputedGetter ( key ) {
return function computedGetter ( ) {
var watcher = this . _computedWatchers && this . _computedWatchers [ key ] ;
if ( watcher ) {
if ( watcher . dirty ) {
watcher . evaluate ( ) ;
}
if ( Dep . SharedObject . target ) { // fixed by xxxxxx
watcher . depend ( ) ;
}
return watcher . value
}
}
}
function createGetterInvoker ( fn ) {
return function computedGetter ( ) {
return fn . call ( this , this )
}
}
function initMethods ( vm , methods ) {
var props = vm . $options . props ;
for ( var key in methods ) {
if ( true ) {
if ( typeof methods [ key ] !== 'function' ) {
warn (
"Method \"" + key + "\" has type \"" + ( typeof methods [ key ] ) + "\" in the component definition. " +
"Did you reference the function correctly?" ,
vm
) ;
}
if ( props && hasOwn ( props , key ) ) {
warn (
( "Method \"" + key + "\" has already been defined as a prop." ) ,
vm
) ;
}
if ( ( key in vm ) && isReserved ( key ) ) {
warn (
"Method \"" + key + "\" conflicts with an existing Vue instance method. " +
"Avoid defining component methods that start with _ or $."
) ;
}
}
vm [ key ] = typeof methods [ key ] !== 'function' ? noop : bind ( methods [ key ] , vm ) ;
}
}
function initWatch ( vm , watch ) {
for ( var key in watch ) {
var handler = watch [ key ] ;
if ( Array . isArray ( handler ) ) {
for ( var i = 0 ; i < handler . length ; i ++ ) {
createWatcher ( vm , key , handler [ i ] ) ;
}
} else {
createWatcher ( vm , key , handler ) ;
}
}
}
function createWatcher (
vm ,
expOrFn ,
handler ,
options
) {
if ( isPlainObject ( handler ) ) {
options = handler ;
handler = handler . handler ;
}
if ( typeof handler === 'string' ) {
handler = vm [ handler ] ;
}
return vm . $watch ( expOrFn , handler , options )
}
function stateMixin ( Vue ) {
// flow somehow has problems with directly declared definition object
// when using Object.defineProperty, so we have to procedurally build up
// the object here.
var dataDef = { } ;
dataDef . get = function ( ) { return this . _data } ;
var propsDef = { } ;
propsDef . get = function ( ) { return this . _props } ;
if ( true ) {
dataDef . set = function ( ) {
warn (
'Avoid replacing instance root $data. ' +
'Use nested data properties instead.' ,
this
) ;
} ;
propsDef . set = function ( ) {
warn ( "$props is readonly." , this ) ;
} ;
}
Object . defineProperty ( Vue . prototype , '$data' , dataDef ) ;
Object . defineProperty ( Vue . prototype , '$props' , propsDef ) ;
Vue . prototype . $set = set ;
Vue . prototype . $delete = del ;
Vue . prototype . $watch = function (
expOrFn ,
cb ,
options
) {
var vm = this ;
if ( isPlainObject ( cb ) ) {
return createWatcher ( vm , expOrFn , cb , options )
}
options = options || { } ;
options . user = true ;
var watcher = new Watcher ( vm , expOrFn , cb , options ) ;
if ( options . immediate ) {
try {
cb . call ( vm , watcher . value ) ;
} catch ( error ) {
handleError ( error , vm , ( "callback for immediate watcher \"" + ( watcher . expression ) + "\"" ) ) ;
}
}
return function unwatchFn ( ) {
watcher . teardown ( ) ;
}
} ;
}
/* */
var uid$3 = 0 ;
function initMixin ( Vue ) {
Vue . prototype . _init = function ( options ) {
var vm = this ;
// a uid
vm . _uid = uid$3 ++ ;
var startTag , endTag ;
/* istanbul ignore if */
if ( true && config . performance && mark ) {
startTag = "vue-perf-start:" + ( vm . _uid ) ;
endTag = "vue-perf-end:" + ( vm . _uid ) ;
mark ( startTag ) ;
}
// a flag to avoid this being observed
vm . _isVue = true ;
// merge options
if ( options && options . _isComponent ) {
// optimize internal component instantiation
// since dynamic options merging is pretty slow, and none of the
// internal component options needs special treatment.
initInternalComponent ( vm , options ) ;
} else {
vm . $options = mergeOptions (
resolveConstructorOptions ( vm . constructor ) ,
options || { } ,
vm
) ;
}
/* istanbul ignore else */
if ( true ) {
initProxy ( vm ) ;
} else { }
// expose real self
vm . _self = vm ;
initLifecycle ( vm ) ;
initEvents ( vm ) ;
initRender ( vm ) ;
callHook ( vm , 'beforeCreate' ) ;
! vm . _$fallback && initInjections ( vm ) ; // resolve injections before data/props
initState ( vm ) ;
! vm . _$fallback && initProvide ( vm ) ; // resolve provide after data/props
! vm . _$fallback && callHook ( vm , 'created' ) ;
/* istanbul ignore if */
if ( true && config . performance && mark ) {
vm . _name = formatComponentName ( vm , false ) ;
mark ( endTag ) ;
measure ( ( "vue " + ( vm . _name ) + " init" ) , startTag , endTag ) ;
}
if ( vm . $options . el ) {
vm . $mount ( vm . $options . el ) ;
}
} ;
}
function initInternalComponent ( vm , options ) {
var opts = vm . $options = Object . create ( vm . constructor . options ) ;
// doing this because it's faster than dynamic enumeration.
var parentVnode = options . _parentVnode ;
opts . parent = options . parent ;
opts . _parentVnode = parentVnode ;
var vnodeComponentOptions = parentVnode . componentOptions ;
opts . propsData = vnodeComponentOptions . propsData ;
opts . _parentListeners = vnodeComponentOptions . listeners ;
opts . _renderChildren = vnodeComponentOptions . children ;
opts . _componentTag = vnodeComponentOptions . tag ;
if ( options . render ) {
opts . render = options . render ;
opts . staticRenderFns = options . staticRenderFns ;
}
}
function resolveConstructorOptions ( Ctor ) {
var options = Ctor . options ;
if ( Ctor . super ) {
var superOptions = resolveConstructorOptions ( Ctor . super ) ;
var cachedSuperOptions = Ctor . superOptions ;
if ( superOptions !== cachedSuperOptions ) {
// super option changed,
// need to resolve new options.
Ctor . superOptions = superOptions ;
// check if there are any late-modified/attached options (#4976)
var modifiedOptions = resolveModifiedOptions ( Ctor ) ;
// update base extend options
if ( modifiedOptions ) {
extend ( Ctor . extendOptions , modifiedOptions ) ;
}
options = Ctor . options = mergeOptions ( superOptions , Ctor . extendOptions ) ;
if ( options . name ) {
options . components [ options . name ] = Ctor ;
}
}
}
return options
}
function resolveModifiedOptions ( Ctor ) {
var modified ;
var latest = Ctor . options ;
var sealed = Ctor . sealedOptions ;
for ( var key in latest ) {
if ( latest [ key ] !== sealed [ key ] ) {
if ( ! modified ) { modified = { } ; }
modified [ key ] = latest [ key ] ;
}
}
return modified
}
function Vue ( options ) {
if ( true &&
! ( this instanceof Vue )
) {
warn ( 'Vue is a constructor and should be called with the `new` keyword' ) ;
}
this . _init ( options ) ;
}
initMixin ( Vue ) ;
stateMixin ( Vue ) ;
eventsMixin ( Vue ) ;
lifecycleMixin ( Vue ) ;
renderMixin ( Vue ) ;
/* */
function initUse ( Vue ) {
Vue . use = function ( plugin ) {
var installedPlugins = ( this . _installedPlugins || ( this . _installedPlugins = [ ] ) ) ;
if ( installedPlugins . indexOf ( plugin ) > - 1 ) {
return this
}
// additional parameters
var args = toArray ( arguments , 1 ) ;
args . unshift ( this ) ;
if ( typeof plugin . install === 'function' ) {
plugin . install . apply ( plugin , args ) ;
} else if ( typeof plugin === 'function' ) {
plugin . apply ( null , args ) ;
}
installedPlugins . push ( plugin ) ;
return this
} ;
}
/* */
function initMixin$1 ( Vue ) {
Vue . mixin = function ( mixin ) {
this . options = mergeOptions ( this . options , mixin ) ;
return this
} ;
}
/* */
function initExtend ( Vue ) {
/ * *
* Each instance constructor , including Vue , has a unique
* cid . This enables us to create wrapped " child
* constructors " for prototypal inheritance and cache them .
* /
Vue . cid = 0 ;
var cid = 1 ;
/ * *
* Class inheritance
* /
Vue . extend = function ( extendOptions ) {
extendOptions = extendOptions || { } ;
var Super = this ;
var SuperId = Super . cid ;
var cachedCtors = extendOptions . _Ctor || ( extendOptions . _Ctor = { } ) ;
if ( cachedCtors [ SuperId ] ) {
return cachedCtors [ SuperId ]
}
var name = extendOptions . name || Super . options . name ;
if ( true && name ) {
validateComponentName ( name ) ;
}
var Sub = function VueComponent ( options ) {
this . _init ( options ) ;
} ;
Sub . prototype = Object . create ( Super . prototype ) ;
Sub . prototype . constructor = Sub ;
Sub . cid = cid ++ ;
Sub . options = mergeOptions (
Super . options ,
extendOptions
) ;
Sub [ 'super' ] = Super ;
// For props and computed properties, we define the proxy getters on
// the Vue instances at extension time, on the extended prototype. This
// avoids Object.defineProperty calls for each instance created.
if ( Sub . options . props ) {
initProps$1 ( Sub ) ;
}
if ( Sub . options . computed ) {
initComputed$1 ( Sub ) ;
}
// allow further extension/mixin/plugin usage
Sub . extend = Super . extend ;
Sub . mixin = Super . mixin ;
Sub . use = Super . use ;
// create asset registers, so extended classes
// can have their private assets too.
ASSET _TYPES . forEach ( function ( type ) {
Sub [ type ] = Super [ type ] ;
} ) ;
// enable recursive self-lookup
if ( name ) {
Sub . options . components [ name ] = Sub ;
}
// keep a reference to the super options at extension time.
// later at instantiation we can check if Super's options have
// been updated.
Sub . superOptions = Super . options ;
Sub . extendOptions = extendOptions ;
Sub . sealedOptions = extend ( { } , Sub . options ) ;
// cache constructor
cachedCtors [ SuperId ] = Sub ;
return Sub
} ;
}
function initProps$1 ( Comp ) {
var props = Comp . options . props ;
for ( var key in props ) {
proxy ( Comp . prototype , "_props" , key ) ;
}
}
function initComputed$1 ( Comp ) {
var computed = Comp . options . computed ;
for ( var key in computed ) {
defineComputed ( Comp . prototype , key , computed [ key ] ) ;
}
}
/* */
function initAssetRegisters ( Vue ) {
/ * *
* Create asset registration methods .
* /
ASSET _TYPES . forEach ( function ( type ) {
Vue [ type ] = function (
id ,
definition
) {
if ( ! definition ) {
return this . options [ type + 's' ] [ id ]
} else {
/* istanbul ignore if */
if ( true && type === 'component' ) {
validateComponentName ( id ) ;
}
if ( type === 'component' && isPlainObject ( definition ) ) {
definition . name = definition . name || id ;
definition = this . options . _base . extend ( definition ) ;
}
if ( type === 'directive' && typeof definition === 'function' ) {
definition = { bind : definition , update : definition } ;
}
this . options [ type + 's' ] [ id ] = definition ;
return definition
}
} ;
} ) ;
}
/* */
function getComponentName ( opts ) {
return opts && ( opts . Ctor . options . name || opts . tag )
}
function matches ( pattern , name ) {
if ( Array . isArray ( pattern ) ) {
return pattern . indexOf ( name ) > - 1
} else if ( typeof pattern === 'string' ) {
return pattern . split ( ',' ) . indexOf ( name ) > - 1
} else if ( isRegExp ( pattern ) ) {
return pattern . test ( name )
}
/* istanbul ignore next */
return false
}
function pruneCache ( keepAliveInstance , filter ) {
var cache = keepAliveInstance . cache ;
var keys = keepAliveInstance . keys ;
var _vnode = keepAliveInstance . _vnode ;
for ( var key in cache ) {
var cachedNode = cache [ key ] ;
if ( cachedNode ) {
var name = getComponentName ( cachedNode . componentOptions ) ;
if ( name && ! filter ( name ) ) {
pruneCacheEntry ( cache , key , keys , _vnode ) ;
}
}
}
}
function pruneCacheEntry (
cache ,
key ,
keys ,
current
) {
var cached$$1 = cache [ key ] ;
if ( cached$$1 && ( ! current || cached$$1 . tag !== current . tag ) ) {
cached$$1 . componentInstance . $destroy ( ) ;
}
cache [ key ] = null ;
remove ( keys , key ) ;
}
var patternTypes = [ String , RegExp , Array ] ;
var KeepAlive = {
name : 'keep-alive' ,
abstract : true ,
props : {
include : patternTypes ,
exclude : patternTypes ,
max : [ String , Number ]
} ,
created : function created ( ) {
this . cache = Object . create ( null ) ;
this . keys = [ ] ;
} ,
destroyed : function destroyed ( ) {
for ( var key in this . cache ) {
pruneCacheEntry ( this . cache , key , this . keys ) ;
}
} ,
mounted : function mounted ( ) {
var this $1 = this ;
this . $watch ( 'include' , function ( val ) {
pruneCache ( this $1 , function ( name ) { return matches ( val , name ) ; } ) ;
} ) ;
this . $watch ( 'exclude' , function ( val ) {
pruneCache ( this $1 , function ( name ) { return ! matches ( val , name ) ; } ) ;
} ) ;
} ,
render : function render ( ) {
var slot = this . $slots . default ;
var vnode = getFirstComponentChild ( slot ) ;
var componentOptions = vnode && vnode . componentOptions ;
if ( componentOptions ) {
// check pattern
var name = getComponentName ( componentOptions ) ;
var ref = this ;
var include = ref . include ;
var exclude = ref . exclude ;
if (
// not included
( include && ( ! name || ! matches ( include , name ) ) ) ||
// excluded
( exclude && name && matches ( exclude , name ) )
) {
return vnode
}
var ref$1 = this ;
var cache = ref$1 . cache ;
var keys = ref$1 . keys ;
var key = vnode . key == null
// same constructor may get registered as different local components
// so cid alone is not enough (#3269)
? componentOptions . Ctor . cid + ( componentOptions . tag ? ( "::" + ( componentOptions . tag ) ) : '' )
: vnode . key ;
if ( cache [ key ] ) {
vnode . componentInstance = cache [ key ] . componentInstance ;
// make current key freshest
remove ( keys , key ) ;
keys . push ( key ) ;
} else {
cache [ key ] = vnode ;
keys . push ( key ) ;
// prune oldest entry
if ( this . max && keys . length > parseInt ( this . max ) ) {
pruneCacheEntry ( cache , keys [ 0 ] , keys , this . _vnode ) ;
}
}
vnode . data . keepAlive = true ;
}
return vnode || ( slot && slot [ 0 ] )
}
} ;
var builtInComponents = {
KeepAlive : KeepAlive
} ;
/* */
function initGlobalAPI ( Vue ) {
// config
var configDef = { } ;
configDef . get = function ( ) { return config ; } ;
if ( true ) {
configDef . set = function ( ) {
warn (
'Do not replace the Vue.config object, set individual fields instead.'
) ;
} ;
}
Object . defineProperty ( Vue , 'config' , configDef ) ;
// exposed util methods.
// NOTE: these are not considered part of the public API - avoid relying on
// them unless you are aware of the risk.
Vue . util = {
warn : warn ,
extend : extend ,
mergeOptions : mergeOptions ,
defineReactive : defineReactive$$1
} ;
Vue . set = set ;
Vue . delete = del ;
Vue . nextTick = nextTick ;
// 2.6 explicit observable API
Vue . observable = function ( obj ) {
observe ( obj ) ;
return obj
} ;
Vue . options = Object . create ( null ) ;
ASSET _TYPES . forEach ( function ( type ) {
Vue . options [ type + 's' ] = Object . create ( null ) ;
} ) ;
// this is used to identify the "base" constructor to extend all plain-object
// components with in Weex's multi-instance scenarios.
Vue . options . _base = Vue ;
extend ( Vue . options . components , builtInComponents ) ;
initUse ( Vue ) ;
initMixin$1 ( Vue ) ;
initExtend ( Vue ) ;
initAssetRegisters ( Vue ) ;
}
initGlobalAPI ( Vue ) ;
Object . defineProperty ( Vue . prototype , '$isServer' , {
get : isServerRendering
} ) ;
Object . defineProperty ( Vue . prototype , '$ssrContext' , {
get : function get ( ) {
/* istanbul ignore next */
return this . $vnode && this . $vnode . ssrContext
}
} ) ;
// expose FunctionalRenderContext for ssr runtime helper installation
Object . defineProperty ( Vue , 'FunctionalRenderContext' , {
value : FunctionalRenderContext
} ) ;
Vue . version = '2.6.11' ;
/ * *
* https : //raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js
* /
var ARRAYTYPE = '[object Array]' ;
var OBJECTTYPE = '[object Object]' ;
// const FUNCTIONTYPE = '[object Function]'
function diff ( current , pre ) {
var result = { } ;
syncKeys ( current , pre ) ;
_diff ( current , pre , '' , result ) ;
return result
}
function syncKeys ( current , pre ) {
if ( current === pre ) { return }
var rootCurrentType = type ( current ) ;
var rootPreType = type ( pre ) ;
if ( rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE ) {
if ( Object . keys ( current ) . length >= Object . keys ( pre ) . length ) {
for ( var key in pre ) {
var currentValue = current [ key ] ;
if ( currentValue === undefined ) {
current [ key ] = null ;
} else {
syncKeys ( currentValue , pre [ key ] ) ;
}
}
}
} else if ( rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE ) {
if ( current . length >= pre . length ) {
pre . forEach ( function ( item , index ) {
syncKeys ( current [ index ] , item ) ;
} ) ;
}
}
}
function _diff ( current , pre , path , result ) {
if ( current === pre ) { return }
var rootCurrentType = type ( current ) ;
var rootPreType = type ( pre ) ;
if ( rootCurrentType == OBJECTTYPE ) {
if ( rootPreType != OBJECTTYPE || Object . keys ( current ) . length < Object . keys ( pre ) . length ) {
setResult ( result , path , current ) ;
} else {
var loop = function ( key ) {
var currentValue = current [ key ] ;
var preValue = pre [ key ] ;
var currentType = type ( currentValue ) ;
var preType = type ( preValue ) ;
if ( currentType != ARRAYTYPE && currentType != OBJECTTYPE ) {
if ( currentValue !== pre [ key ] ) {
setResult ( result , ( path == '' ? '' : path + "." ) + key , currentValue ) ;
}
} else if ( currentType == ARRAYTYPE ) {
if ( preType != ARRAYTYPE ) {
setResult ( result , ( path == '' ? '' : path + "." ) + key , currentValue ) ;
} else {
if ( currentValue . length < preValue . length ) {
setResult ( result , ( path == '' ? '' : path + "." ) + key , currentValue ) ;
} else {
currentValue . forEach ( function ( item , index ) {
_diff ( item , preValue [ index ] , ( path == '' ? '' : path + "." ) + key + '[' + index + ']' , result ) ;
} ) ;
}
}
} else if ( currentType == OBJECTTYPE ) {
if ( preType != OBJECTTYPE || Object . keys ( currentValue ) . length < Object . keys ( preValue ) . length ) {
setResult ( result , ( path == '' ? '' : path + "." ) + key , currentValue ) ;
} else {
for ( var subKey in currentValue ) {
_diff ( currentValue [ subKey ] , preValue [ subKey ] , ( path == '' ? '' : path + "." ) + key + '.' + subKey , result ) ;
}
}
}
} ;
for ( var key in current ) loop ( key ) ;
}
} else if ( rootCurrentType == ARRAYTYPE ) {
if ( rootPreType != ARRAYTYPE ) {
setResult ( result , path , current ) ;
} else {
if ( current . length < pre . length ) {
setResult ( result , path , current ) ;
} else {
current . forEach ( function ( item , index ) {
_diff ( item , pre [ index ] , path + '[' + index + ']' , result ) ;
} ) ;
}
}
} else {
setResult ( result , path , current ) ;
}
}
function setResult ( result , k , v ) {
// if (type(v) != FUNCTIONTYPE) {
result [ k ] = v ;
// }
}
function type ( obj ) {
return Object . prototype . toString . call ( obj )
}
/* */
function flushCallbacks$1 ( vm ) {
if ( vm . _ _next _tick _callbacks && vm . _ _next _tick _callbacks . length ) {
2022-08-03 03:20:44 +00:00
if ( Object ( { "NODE_ENV" : "development" , "VUE_APP_NAME" : "app适配微信小程序" , "VUE_APP_PLATFORM" : "mp-weixin" , "BASE_URL" : "/" } ) . VUE _APP _DEBUG ) {
2022-07-31 02:14:22 +00:00
var mpInstance = vm . $scope ;
console . log ( '[' + ( + new Date ) + '][' + ( mpInstance . is || mpInstance . route ) + '][' + vm . _uid +
']:flushCallbacks[' + vm . _ _next _tick _callbacks . length + ']' ) ;
}
var copies = vm . _ _next _tick _callbacks . slice ( 0 ) ;
vm . _ _next _tick _callbacks . length = 0 ;
for ( var i = 0 ; i < copies . length ; i ++ ) {
copies [ i ] ( ) ;
}
}
}
function hasRenderWatcher ( vm ) {
return queue . find ( function ( watcher ) { return vm . _watcher === watcher ; } )
}
function nextTick$1 ( vm , cb ) {
//1.nextTick 之前 已 setData 且 setData 还未回调完成
//2.nextTick 之前存在 render watcher
if ( ! vm . _ _next _tick _pending && ! hasRenderWatcher ( vm ) ) {
2022-08-03 03:20:44 +00:00
if ( Object ( { "NODE_ENV" : "development" , "VUE_APP_NAME" : "app适配微信小程序" , "VUE_APP_PLATFORM" : "mp-weixin" , "BASE_URL" : "/" } ) . VUE _APP _DEBUG ) {
2022-07-31 02:14:22 +00:00
var mpInstance = vm . $scope ;
console . log ( '[' + ( + new Date ) + '][' + ( mpInstance . is || mpInstance . route ) + '][' + vm . _uid +
']:nextVueTick' ) ;
}
return nextTick ( cb , vm )
} else {
2022-08-03 03:20:44 +00:00
if ( Object ( { "NODE_ENV" : "development" , "VUE_APP_NAME" : "app适配微信小程序" , "VUE_APP_PLATFORM" : "mp-weixin" , "BASE_URL" : "/" } ) . VUE _APP _DEBUG ) {
2022-07-31 02:14:22 +00:00
var mpInstance$1 = vm . $scope ;
console . log ( '[' + ( + new Date ) + '][' + ( mpInstance$1 . is || mpInstance$1 . route ) + '][' + vm . _uid +
']:nextMPTick' ) ;
}
}
var _resolve ;
if ( ! vm . _ _next _tick _callbacks ) {
vm . _ _next _tick _callbacks = [ ] ;
}
vm . _ _next _tick _callbacks . push ( function ( ) {
if ( cb ) {
try {
cb . call ( vm ) ;
} catch ( e ) {
handleError ( e , vm , 'nextTick' ) ;
}
} else if ( _resolve ) {
_resolve ( vm ) ;
}
} ) ;
// $flow-disable-line
if ( ! cb && typeof Promise !== 'undefined' ) {
return new Promise ( function ( resolve ) {
_resolve = resolve ;
} )
}
}
/* */
function cloneWithData ( vm ) {
// 确保当前 vm 所有数据被同步
var ret = Object . create ( null ) ;
var dataKeys = [ ] . concat (
Object . keys ( vm . _data || { } ) ,
Object . keys ( vm . _computedWatchers || { } ) ) ;
dataKeys . reduce ( function ( ret , key ) {
ret [ key ] = vm [ key ] ;
return ret
} , ret ) ;
// vue-composition-api
var compositionApiState = vm . _ _composition _api _state _ _ || vm . _ _secret _vfa _state _ _ ;
var rawBindings = compositionApiState && compositionApiState . rawBindings ;
if ( rawBindings ) {
Object . keys ( rawBindings ) . forEach ( function ( key ) {
ret [ key ] = vm [ key ] ;
} ) ;
}
//TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据
Object . assign ( ret , vm . $mp . data || { } ) ;
if (
Array . isArray ( vm . $options . behaviors ) &&
vm . $options . behaviors . indexOf ( 'uni://form-field' ) !== - 1
) { //form-field
ret [ 'name' ] = vm . name ;
ret [ 'value' ] = vm . value ;
}
return JSON . parse ( JSON . stringify ( ret ) )
}
var patch = function ( oldVnode , vnode ) {
var this $1 = this ;
if ( vnode === null ) { //destroy
return
}
if ( this . mpType === 'page' || this . mpType === 'component' ) {
var mpInstance = this . $scope ;
var data = Object . create ( null ) ;
try {
data = cloneWithData ( this ) ;
} catch ( err ) {
console . error ( err ) ;
}
data . _ _webviewId _ _ = mpInstance . data . _ _webviewId _ _ ;
var mpData = Object . create ( null ) ;
Object . keys ( data ) . forEach ( function ( key ) { //仅同步 data 中有的数据
mpData [ key ] = mpInstance . data [ key ] ;
} ) ;
var diffData = this . $shouldDiffData === false ? data : diff ( data , mpData ) ;
if ( Object . keys ( diffData ) . length ) {
2022-08-03 03:20:44 +00:00
if ( Object ( { "NODE_ENV" : "development" , "VUE_APP_NAME" : "app适配微信小程序" , "VUE_APP_PLATFORM" : "mp-weixin" , "BASE_URL" : "/" } ) . VUE _APP _DEBUG ) {
2022-07-31 02:14:22 +00:00
console . log ( '[' + ( + new Date ) + '][' + ( mpInstance . is || mpInstance . route ) + '][' + this . _uid +
']差量更新' ,
JSON . stringify ( diffData ) ) ;
}
this . _ _next _tick _pending = true ;
mpInstance . setData ( diffData , function ( ) {
this $1 . _ _next _tick _pending = false ;
flushCallbacks$1 ( this $1 ) ;
} ) ;
} else {
flushCallbacks$1 ( this ) ;
}
}
} ;
/* */
function createEmptyRender ( ) {
}
function mountComponent$1 (
vm ,
el ,
hydrating
) {
if ( ! vm . mpType ) { //main.js 中的 new Vue
return vm
}
if ( vm . mpType === 'app' ) {
vm . $options . render = createEmptyRender ;
}
if ( ! vm . $options . render ) {
vm . $options . render = createEmptyRender ;
if ( true ) {
/* istanbul ignore if */
if ( ( vm . $options . template && vm . $options . template . charAt ( 0 ) !== '#' ) ||
vm . $options . el || el ) {
warn (
'You are using the runtime-only build of Vue where the template ' +
'compiler is not available. Either pre-compile the templates into ' +
'render functions, or use the compiler-included build.' ,
vm
) ;
} else {
warn (
'Failed to mount component: template or render function not defined.' ,
vm
) ;
}
}
}
! vm . _$fallback && callHook ( vm , 'beforeMount' ) ;
var updateComponent = function ( ) {
vm . _update ( vm . _render ( ) , hydrating ) ;
} ;
// we set this to vm._watcher inside the watcher's constructor
// since the watcher's initial patch may call $forceUpdate (e.g. inside child
// component's mounted hook), which relies on vm._watcher being already defined
new Watcher ( vm , updateComponent , noop , {
before : function before ( ) {
if ( vm . _isMounted && ! vm . _isDestroyed ) {
callHook ( vm , 'beforeUpdate' ) ;
}
}
} , true /* isRenderWatcher */ ) ;
hydrating = false ;
return vm
}
/* */
function renderClass (
staticClass ,
dynamicClass
) {
if ( isDef ( staticClass ) || isDef ( dynamicClass ) ) {
return concat ( staticClass , stringifyClass ( dynamicClass ) )
}
/* istanbul ignore next */
return ''
}
function concat ( a , b ) {
return a ? b ? ( a + ' ' + b ) : a : ( b || '' )
}
function stringifyClass ( value ) {
if ( Array . isArray ( value ) ) {
return stringifyArray ( value )
}
if ( isObject ( value ) ) {
return stringifyObject ( value )
}
if ( typeof value === 'string' ) {
return value
}
/* istanbul ignore next */
return ''
}
function stringifyArray ( value ) {
var res = '' ;
var stringified ;
for ( var i = 0 , l = value . length ; i < l ; i ++ ) {
if ( isDef ( stringified = stringifyClass ( value [ i ] ) ) && stringified !== '' ) {
if ( res ) { res += ' ' ; }
res += stringified ;
}
}
return res
}
function stringifyObject ( value ) {
var res = '' ;
for ( var key in value ) {
if ( value [ key ] ) {
if ( res ) { res += ' ' ; }
res += key ;
}
}
return res
}
/* */
var parseStyleText = cached ( function ( cssText ) {
var res = { } ;
var listDelimiter = /;(?![^(]*\))/g ;
var propertyDelimiter = /:(.+)/ ;
cssText . split ( listDelimiter ) . forEach ( function ( item ) {
if ( item ) {
var tmp = item . split ( propertyDelimiter ) ;
tmp . length > 1 && ( res [ tmp [ 0 ] . trim ( ) ] = tmp [ 1 ] . trim ( ) ) ;
}
} ) ;
return res
} ) ;
// normalize possible array / string values into Object
function normalizeStyleBinding ( bindingStyle ) {
if ( Array . isArray ( bindingStyle ) ) {
return toObject ( bindingStyle )
}
if ( typeof bindingStyle === 'string' ) {
return parseStyleText ( bindingStyle )
}
return bindingStyle
}
/* */
var MP _METHODS = [ 'createSelectorQuery' , 'createIntersectionObserver' , 'selectAllComponents' , 'selectComponent' ] ;
function getTarget ( obj , path ) {
var parts = path . split ( '.' ) ;
var key = parts [ 0 ] ;
if ( key . indexOf ( '__$n' ) === 0 ) { //number index
key = parseInt ( key . replace ( '__$n' , '' ) ) ;
}
if ( parts . length === 1 ) {
return obj [ key ]
}
return getTarget ( obj [ key ] , parts . slice ( 1 ) . join ( '.' ) )
}
function internalMixin ( Vue ) {
Vue . config . errorHandler = function ( err , vm , info ) {
Vue . util . warn ( ( "Error in " + info + ": \"" + ( err . toString ( ) ) + "\"" ) , vm ) ;
console . error ( err ) ;
/* eslint-disable no-undef */
var app = typeof getApp === 'function' && getApp ( ) ;
if ( app && app . onError ) {
app . onError ( err ) ;
}
} ;
var oldEmit = Vue . prototype . $emit ;
Vue . prototype . $emit = function ( event ) {
if ( this . $scope && event ) {
( this . $scope [ '_triggerEvent' ] || this . $scope [ 'triggerEvent' ] ) . call ( this . $scope , event , {
_ _args _ _ : toArray ( arguments , 1 )
} ) ;
}
return oldEmit . apply ( this , arguments )
} ;
Vue . prototype . $nextTick = function ( fn ) {
return nextTick$1 ( this , fn )
} ;
MP _METHODS . forEach ( function ( method ) {
Vue . prototype [ method ] = function ( args ) {
if ( this . $scope && this . $scope [ method ] ) {
return this . $scope [ method ] ( args )
}
// mp-alipay
if ( typeof my === 'undefined' ) {
return
}
if ( method === 'createSelectorQuery' ) {
/* eslint-disable no-undef */
return my . createSelectorQuery ( args )
} else if ( method === 'createIntersectionObserver' ) {
/* eslint-disable no-undef */
return my . createIntersectionObserver ( args )
}
// TODO mp-alipay 暂不支持 selectAllComponents,selectComponent
} ;
} ) ;
Vue . prototype . _ _init _provide = initProvide ;
Vue . prototype . _ _init _injections = initInjections ;
Vue . prototype . _ _call _hook = function ( hook , args ) {
var vm = this ;
// #7573 disable dep collection when invoking lifecycle hooks
pushTarget ( ) ;
var handlers = vm . $options [ hook ] ;
var info = hook + " hook" ;
var ret ;
if ( handlers ) {
for ( var i = 0 , j = handlers . length ; i < j ; i ++ ) {
ret = invokeWithErrorHandling ( handlers [ i ] , vm , args ? [ args ] : null , vm , info ) ;
}
}
if ( vm . _hasHookEvent ) {
vm . $emit ( 'hook:' + hook , args ) ;
}
popTarget ( ) ;
return ret
} ;
Vue . prototype . _ _set _model = function ( target , key , value , modifiers ) {
if ( Array . isArray ( modifiers ) ) {
if ( modifiers . indexOf ( 'trim' ) !== - 1 ) {
value = value . trim ( ) ;
}
if ( modifiers . indexOf ( 'number' ) !== - 1 ) {
value = this . _n ( value ) ;
}
}
if ( ! target ) {
target = this ;
}
// 解决动态属性添加
Vue . set ( target , key , value ) ;
} ;
Vue . prototype . _ _set _sync = function ( target , key , value ) {
if ( ! target ) {
target = this ;
}
// 解决动态属性添加
Vue . set ( target , key , value ) ;
} ;
Vue . prototype . _ _get _orig = function ( item ) {
if ( isPlainObject ( item ) ) {
return item [ '$orig' ] || item
}
return item
} ;
Vue . prototype . _ _get _value = function ( dataPath , target ) {
return getTarget ( target || this , dataPath )
} ;
Vue . prototype . _ _get _class = function ( dynamicClass , staticClass ) {
return renderClass ( staticClass , dynamicClass )
} ;
Vue . prototype . _ _get _style = function ( dynamicStyle , staticStyle ) {
if ( ! dynamicStyle && ! staticStyle ) {
return ''
}
var dynamicStyleObj = normalizeStyleBinding ( dynamicStyle ) ;
var styleObj = staticStyle ? extend ( staticStyle , dynamicStyleObj ) : dynamicStyleObj ;
return Object . keys ( styleObj ) . map ( function ( name ) { return ( ( hyphenate ( name ) ) + ":" + ( styleObj [ name ] ) ) ; } ) . join ( ';' )
} ;
Vue . prototype . _ _map = function ( val , iteratee ) {
//TODO 暂不考虑 string
var ret , i , l , keys , key ;
if ( Array . isArray ( val ) ) {
ret = new Array ( val . length ) ;
for ( i = 0 , l = val . length ; i < l ; i ++ ) {
ret [ i ] = iteratee ( val [ i ] , i ) ;
}
return ret
} else if ( isObject ( val ) ) {
keys = Object . keys ( val ) ;
ret = Object . create ( null ) ;
for ( i = 0 , l = keys . length ; i < l ; i ++ ) {
key = keys [ i ] ;
ret [ key ] = iteratee ( val [ key ] , key , i ) ;
}
return ret
} else if ( typeof val === 'number' ) {
ret = new Array ( val ) ;
for ( i = 0 , l = val ; i < l ; i ++ ) {
// 第一个参数暂时仍和小程序一致
ret [ i ] = iteratee ( i , i ) ;
}
return ret
}
return [ ]
} ;
}
/* */
var LIFECYCLE _HOOKS$1 = [
//App
'onLaunch' ,
'onShow' ,
'onHide' ,
'onUniNViewMessage' ,
'onPageNotFound' ,
'onThemeChange' ,
'onError' ,
'onUnhandledRejection' ,
//Page
'onInit' ,
'onLoad' ,
// 'onShow',
'onReady' ,
// 'onHide',
'onUnload' ,
'onPullDownRefresh' ,
'onReachBottom' ,
'onTabItemTap' ,
'onAddToFavorites' ,
'onShareTimeline' ,
'onShareAppMessage' ,
'onResize' ,
'onPageScroll' ,
'onNavigationBarButtonTap' ,
'onBackPress' ,
'onNavigationBarSearchInputChanged' ,
'onNavigationBarSearchInputConfirmed' ,
'onNavigationBarSearchInputClicked' ,
//Component
// 'onReady', // 兼容旧版本,应该移除该事件
'onPageShow' ,
'onPageHide' ,
'onPageResize'
] ;
function lifecycleMixin$1 ( Vue ) {
//fixed vue-class-component
var oldExtend = Vue . extend ;
Vue . extend = function ( extendOptions ) {
extendOptions = extendOptions || { } ;
var methods = extendOptions . methods ;
if ( methods ) {
Object . keys ( methods ) . forEach ( function ( methodName ) {
if ( LIFECYCLE _HOOKS$1 . indexOf ( methodName ) !== - 1 ) {
extendOptions [ methodName ] = methods [ methodName ] ;
delete methods [ methodName ] ;
}
} ) ;
}
return oldExtend . call ( this , extendOptions )
} ;
var strategies = Vue . config . optionMergeStrategies ;
var mergeHook = strategies . created ;
LIFECYCLE _HOOKS$1 . forEach ( function ( hook ) {
strategies [ hook ] = mergeHook ;
} ) ;
Vue . prototype . _ _lifecycle _hooks _ _ = LIFECYCLE _HOOKS$1 ;
}
/* */
// install platform patch function
Vue . prototype . _ _patch _ _ = patch ;
// public mount method
Vue . prototype . $mount = function (
el ,
hydrating
) {
return mountComponent$1 ( this , el , hydrating )
} ;
lifecycleMixin$1 ( Vue ) ;
internalMixin ( Vue ) ;
/* */
/* harmony default export */ _ _webpack _exports _ _ [ "default" ] = ( Vue ) ;
/* WEBPACK VAR INJECTION */ } . call ( this , _ _webpack _require _ _ ( /*! ./../../../../../webpack/buildin/global.js */ 2 ) ) )
/***/ } ) ,
/***/ 5 :
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
2022-07-31 02:39:16 +00:00
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / p a g e s . j s o n * * * !
2022-07-31 02:14:22 +00:00
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports ) {
2022-08-01 10:31:20 +00:00
/***/ } ) ,
2022-08-03 03:30:25 +00:00
/***/ 81 :
2022-08-01 10:31:20 +00:00
/ * ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ! * \
! * * * D : / 老 农 商 城 / m a l l - l a o n o n g / j s F i l e / b a s e 6 4 - s r c . j s * * * !
\ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
/*! no static exports found */
/***/ ( function ( module , exports , _ _webpack _require _ _ ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ; exports . pathToBase64 = pathToBase64 ; exports . base64ToPath = base64ToPath ; function getLocalFilePath ( path ) {
if ( path . indexOf ( '_www' ) === 0 || path . indexOf ( '_doc' ) === 0 || path . indexOf ( '_documents' ) === 0 || path . indexOf (
'_downloads' ) === 0 ) {
return path ;
}
if ( path . indexOf ( 'file://' ) === 0 ) {
return path ;
}
if ( path . indexOf ( '/storage/emulated/0/' ) === 0 ) {
return path ;
}
if ( path . indexOf ( '/' ) === 0 ) {
var localFilePath = plus . io . convertAbsoluteFileSystem ( path ) ;
if ( localFilePath !== path ) {
return localFilePath ;
} else {
path = path . substr ( 1 ) ;
}
}
return '_www/' + path ;
}
function dataUrlToBase64 ( str ) {
var array = str . split ( ',' ) ;
return array [ array . length - 1 ] ;
}
var index = 0 ;
function getNewFileId ( ) {
return Date . now ( ) + String ( index ++ ) ;
}
function biggerThan ( v1 , v2 ) {
var v1Array = v1 . split ( '.' ) ;
var v2Array = v2 . split ( '.' ) ;
var update = false ;
for ( var index = 0 ; index < v2Array . length ; index ++ ) {
var diff = v1Array [ index ] - v2Array [ index ] ;
if ( diff !== 0 ) {
update = diff > 0 ;
break ;
}
}
return update ;
}
function pathToBase64 ( path ) {
return new Promise ( function ( resolve , reject ) {
if ( typeof window === 'object' && 'document' in window ) {
if ( typeof FileReader === 'function' ) {
var xhr = new XMLHttpRequest ( ) ;
xhr . open ( 'GET' , path , true ) ;
xhr . responseType = 'blob' ;
xhr . onload = function ( ) {
if ( this . status === 200 ) {
var fileReader = new FileReader ( ) ;
fileReader . onload = function ( e ) {
resolve ( e . target . result ) ;
} ;
fileReader . onerror = reject ;
fileReader . readAsDataURL ( this . response ) ;
}
} ;
xhr . onerror = reject ;
xhr . send ( ) ;
return ;
}
var canvas = document . createElement ( 'canvas' ) ;
var c2x = canvas . getContext ( '2d' ) ;
var img = new Image ( ) ;
img . onload = function ( ) {
canvas . width = img . width ;
canvas . height = img . height ;
c2x . drawImage ( img , 0 , 0 ) ;
resolve ( canvas . toDataURL ( ) ) ;
canvas . height = canvas . width = 0 ;
} ;
img . onerror = reject ;
img . src = path ;
return ;
}
if ( typeof plus === 'object' ) {
plus . io . resolveLocalFileSystemURL ( getLocalFilePath ( path ) , function ( entry ) {
entry . file ( function ( file ) {
var fileReader = new plus . io . FileReader ( ) ;
fileReader . onload = function ( data ) {
resolve ( data . target . result ) ;
} ;
fileReader . onerror = function ( error ) {
reject ( error ) ;
} ;
fileReader . readAsDataURL ( file ) ;
} , function ( error ) {
reject ( error ) ;
} ) ;
} , function ( error ) {
reject ( error ) ;
} ) ;
return ;
}
if ( typeof wx === 'object' && wx . canIUse ( 'getFileSystemManager' ) ) {
wx . getFileSystemManager ( ) . readFile ( {
filePath : path ,
encoding : 'base64' ,
success : function success ( res ) {
resolve ( 'data:image/png;base64,' + res . data ) ;
} ,
fail : function fail ( error ) {
reject ( error ) ;
} } ) ;
return ;
}
reject ( new Error ( 'not support' ) ) ;
} ) ;
}
function base64ToPath ( base64 ) {
return new Promise ( function ( resolve , reject ) {
if ( typeof window === 'object' && 'document' in window ) {
base64 = base64 . split ( ',' ) ;
var type = base64 [ 0 ] . match ( /:(.*?);/ ) [ 1 ] ;
var str = atob ( base64 [ 1 ] ) ;
var n = str . length ;
var array = new Uint8Array ( n ) ;
while ( n -- ) {
array [ n ] = str . charCodeAt ( n ) ;
}
return resolve ( ( window . URL || window . webkitURL ) . createObjectURL ( new Blob ( [ array ] , {
type : type } ) ) ) ;
}
var extName = base64 . split ( ',' ) [ 0 ] . match ( /data\:\S+\/(\S+);/ ) ;
if ( extName ) {
extName = extName [ 1 ] ;
} else {
reject ( new Error ( 'base64 error' ) ) ;
}
var fileName = getNewFileId ( ) + '.' + extName ;
if ( typeof plus === 'object' ) {
var basePath = '_doc' ;
var dirPath = 'uniapp_temp' ;
var filePath = basePath + '/' + dirPath + '/' + fileName ;
if ( ! biggerThan ( plus . os . name === 'Android' ? '1.9.9.80627' : '1.9.9.80472' , plus . runtime .
innerVersion ) ) {
plus . io . resolveLocalFileSystemURL ( basePath , function ( entry ) {
entry . getDirectory ( dirPath , {
create : true ,
exclusive : false } ,
function ( entry ) {
entry . getFile ( fileName , {
create : true ,
exclusive : false } ,
function ( entry ) {
entry . createWriter ( function ( writer ) {
writer . onwrite = function ( ) {
resolve ( filePath ) ;
} ;
writer . onerror = reject ;
writer . seek ( 0 ) ;
writer . writeAsBinary ( dataUrlToBase64 ( base64 ) ) ;
} , reject ) ;
} , reject ) ;
} , reject ) ;
} , reject ) ;
return ;
}
var bitmap = new plus . nativeObj . Bitmap ( fileName ) ;
bitmap . loadBase64Data ( base64 , function ( ) {
bitmap . save ( filePath , { } , function ( ) {
bitmap . clear ( ) ;
resolve ( filePath ) ;
} , function ( error ) {
bitmap . clear ( ) ;
reject ( error ) ;
} ) ;
} , function ( error ) {
bitmap . clear ( ) ;
reject ( error ) ;
} ) ;
return ;
}
if ( typeof wx === 'object' && wx . canIUse ( 'getFileSystemManager' ) ) {
var filePath = wx . env . USER _DATA _PATH + '/' + fileName ;
wx . getFileSystemManager ( ) . writeFile ( {
filePath : filePath ,
data : dataUrlToBase64 ( base64 ) ,
encoding : 'base64' ,
success : function success ( ) {
resolve ( filePath ) ;
} ,
fail : function fail ( error ) {
reject ( error ) ;
} } ) ;
return ;
}
reject ( new Error ( 'not support' ) ) ;
} ) ;
}
2022-07-31 02:14:22 +00:00
/***/ } )
} ] ) ;
//# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map