You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 lines
52 KiB
1 lines
52 KiB
{"version":3,"sources":["webpack:///F:/ZONGYRJ/miniAPP/honghmini/components/xfl-select/xfl-select.vue?d5c0","webpack:///F:/ZONGYRJ/miniAPP/honghmini/components/xfl-select/xfl-select.vue?0529","webpack:///F:/ZONGYRJ/miniAPP/honghmini/components/xfl-select/xfl-select.vue?d089","webpack:///F:/ZONGYRJ/miniAPP/honghmini/components/xfl-select/xfl-select.vue?6cf3","uni-app:///components/xfl-select/xfl-select.vue","webpack:///F:/ZONGYRJ/miniAPP/honghmini/components/xfl-select/xfl-select.vue?4f1b"],"names":["renderjs","component","options","__file","components","render","_vm","this","_h","$createElement","g0","_self","_c","innerList","length","$mp","data","Object","assign","$root","recyclableRender","staticRenderFns","_withStripped","Vue","name","props","list","type","default","focusShowList","initValue","isCanInput","selectHideType","placeholder","style_Container","input_style","disabled","showItemNum","listShow","clearable","isShowList","selectText","activeIndex","isRotate","listTop__","watch","computed","focusShowList__","listBoxHeight__","showInput","orginArr","arr","isActive","value","mounted","beforeDestroy","methods","onOtherXflSelectOpen","init","getInputBoxHeight","getNodeInfo","getIndex","itemIsDisabled","itemIsActive","onDataChange_listShow","newVal","onFocus","onBlur","onUpperClick","onClear","onInput","clearInput","setInput","changeActiveIndex","clearItemActive","setItemActive","onListClick","onClickItem","oldVal","index","orignItem","onListHide","onListShow","selector","attemptSpaceTime","attemptSpaceRate","totalAttemptNum","id","dataset","rect","size","scrollOffset","properties","computedStyle","context","callback","thisObj","nodesRef","result","stepRunFunc","selectorQuery","Switch","toState","arg","delayTime_open","cancelType_open","clearTimeout","propPath","forEach","val","compareFunc","result_index","maxNum","numPropArr","keys","propName","subObj","delayTime","timers","clearTimer"],"mappings":"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","file":"components/xfl-select/xfl-select.js","sourcesContent":["import { render, staticRenderFns, recyclableRender, components } from \"./xfl-select.vue?vue&type=template&id=64567a38&scoped=true&\"\nvar renderjs\nimport script from \"./xfl-select.vue?vue&type=script&lang=js&\"\nexport * from \"./xfl-select.vue?vue&type=script&lang=js&\"\nimport style0 from \"./xfl-select.vue?vue&type=style&index=0&id=64567a38&scoped=true&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"64567a38\",\n null,\n false,\n components,\n renderjs\n)\n\ncomponent.options.__file = \"components/xfl-select/xfl-select.vue\"\nexport default component.exports","export * from \"-!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--17-0!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/template.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-uni-app-loader/page-meta.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./xfl-select.vue?vue&type=template&id=64567a38&scoped=true&\"","var components\nvar render = function () {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n var g0 = _vm.innerList.length\n _vm.$mp.data = Object.assign(\n {},\n {\n $root: {\n g0: g0,\n },\n }\n )\n}\nvar recyclableRender = false\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns, recyclableRender, components }","import mod from \"-!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib/index.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--13-1!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./xfl-select.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib/index.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--13-1!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./xfl-select.vue?vue&type=script&lang=js&\"","<template>\r\n\t<div class=\"show-box\" :class=\"{disabled: disabled, active: isShowList}\" :style=\"style_Container\">\r\n\t\t<!-- 输入框,仅在可输入模式下使用 -->\r\n\t\t<input \r\n\t\t\tv-if=\"showInput\" class=\"input\" placeholder-style=\"color: #bbb;\"\r\n\t\t\ttype=\"text\" v-model=\"selectText\" :placeholder=\"placeholder\"\r\n\t\t\t@focus=\"onFocus\" @blur=\"onBlur\" @input=\"onInput\" @confirm=\"$emit('confirm', $event)\"\r\n\t\t>\r\n\t\t<!-- 显示框 -->\r\n\t\t<div v-else class=\"input\" :style=\"input_style\" :class=\"{placeholder: selectText === placeholder}\" @click=\"onUpperClick\" >{{selectText}}</div>\r\n\r\n\t\t<!-- 右侧的小三角图标 -->\r\n\t\t<span \r\n\t\t\t@click=\"onUpperClick\" \r\n\t\t\tclass=\"iconfont iconarrowBottom-fill right-arrow\" \r\n\t\t\t:class=\"{isRotate: isRotate}\"\r\n\t\t></span>\r\n\t\t\r\n\t\t<!-- 清除按钮图标 -->\r\n\t\t<span \r\n\t\t\tv-if=\"clearable && selectText && selectText != placeholder\" \r\n\t\t\tclass=\"right-arrow\" @click=\"onClear\" \r\n\t\t>\r\n\t\t\t<span class=\"iconfont iconshanchu1 clear\"></span>\r\n\t\t</span>\r\n\t\t\r\n\t\t\r\n\t\t<!-- 列表框 -->\r\n\t\t<div class=\"list-container\" \r\n\t\t@click.stop=\"onListClick\"\r\n\t\t:style=\"'top:' + listTop__ + 'px;'\" v-show=\"isShowList\">\r\n\t\t\t<span class=\"popper__arrow\"></span> <!-- 列表框左上角的空心小三角 -->\r\n\t\t\t<scroll-view \r\n\t\t\t\tclass=\"list\" style=\"background-color: #fff;\" \r\n\t\t\t\t:style=\"'max-height: ' + listBoxHeight__ +'em;'\"\r\n\t\t\t scroll-y=true scroll-x=true\r\n\t\t\t>\r\n\t\t\t\t<div \r\n\t\t\t\t\tclass=\"item\" @click=\"onClickItem(index, item.value)\"\r\n\t\t\t\t\tv-for=\"(item, index) in innerList\" :key=\"index\" \r\n\t\t\t\t\t:class=\"{active: activeIndex == index, disabled: item.disabled}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div>{{item.value}}</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div v-show=\"innerList.length==0\" class=\"data-state item\">无数据</div>\r\n\t\t\t\t<!-- <slot></slot> -->\r\n\t\t\t</scroll-view>\r\n\t\t</div>\r\n\t\t\r\n\t</div>\r\n</template>\r\n\r\n<script>\r\n\t/**\r\n\t * v1.1.1\r\n\t * 最后修改: 2019.7.29\r\n\t * 创建: 2019.6.27\r\n\t */\r\n\timport Vue from 'vue';\r\n\tVue.__xfl_select = Vue.__xfl_select || new Vue(); // 这个实例专门用来做xfl-select多个实例之间的通信中间站\r\n\texport default {\r\n\t\tname: 'xfl-select',\r\n\t\tprops: {\r\n\t\t\tlist: { // 原始数据\r\n\t\t\t type: Array, \r\n\t\t\t default: function(){\r\n\t\t\t\t return [];\r\n\t\t\t }\r\n\t\t\t},\r\n\t\t\tfocusShowList: null, // 当input获取焦点时,是否自动弹出列表框\r\n\t\t\tinitValue: null, // 选择框的初始值\r\n\t\t\tisCanInput: { // 选择框是否可以输入值\r\n\t\t\t type: Boolean, \r\n\t\t\t default: false,\r\n\t\t\t},\r\n\t\t\tselectHideType: { // 本选择框与其它选择框之间的关系\r\n\t\t\t type: String, \r\n\t\t\t default: 'hideAll', // 'independent' - 是独立的,与其它选择框互不影响 'hideAll' - 任何一个选择框展开时,隐藏所有其它选择框\r\n\t\t\t\t\t\t\t\t // 'hideOthers'- 当本选择框展开时,隐藏其它的选择框。 当其它选择框展开时,不隐藏本选择框。 \r\n\t\t\t\t\t\t\t\t // 'hideSelf' - 当本选择框展开时,不隐藏其它的选择框。当其它选择框展开时,隐藏本选择框。\r\n\t\t\t},\r\n\t\t\tplaceholder: { // 选择框的placeholder\r\n\t\t\t type: String, \r\n\t\t\t default: '请选择',\r\n\t\t\t},\r\n\t\t\tstyle_Container: { // 最外层的样式\r\n\t\t\t type: String, \r\n\t\t\t default: ''\r\n\t\t\t},\r\n\t\t\tinput_style:{\r\n\t\t\t\ttype: String,//input样式,新增\r\n\t\t\t\tdefault: ''\r\n\t\t\t},\r\n\t\t\tdisabled: { // 是否禁用整个选择框\r\n\t\t\t type: Boolean, \r\n\t\t\t default: false,\r\n\t\t\t},\r\n\t\t\tshowItemNum: { // 显示列表框的窗口高度,数字表示能显示几个列表项\r\n\t\t\t type: Number, \r\n\t\t\t default: 5\r\n\t\t\t},\r\n\t\t\tlistShow: { // 是否显示列表框\r\n\t\t\t type: Boolean, \r\n\t\t\t default: false\r\n\t\t\t},\r\n\t\t\tclearable: { // 是否显示右侧的清除按钮\r\n\t\t\t type: Boolean, \r\n\t\t\t default: true\r\n\t\t\t},\r\n\t\t},\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tisShowList: false, // 是否显示列表框\r\n\t\t\t\tselectText: '', // 已经选择的内容\r\n\t\t\t\tactiveIndex: -1, // 列表中当前活动的索引号\r\n\t\t\t\tisRotate: false, // 右侧的小三角是否旋转\r\n\t\t\t\tlistTop__: 50, // 列表框的top位置,在初始时,根据input节点的高度来调整\r\n\t\t\t};\r\n\t\t},\r\n\t\t// 进行监听的话,在组件外改变这个值,组件内就能响应变化\r\n\t\twatch: { // 监听变化 ,注意,初始的值是不会被监听到的,只有在mounted回调中手动赋值\r\n\t\t\tlistShow(newVal, oldVal){\r\n\t\t\t\tthis.onDataChange_listShow(newVal, oldVal);\r\n\t\t\t},\r\n\t\t},\r\n\t\tcomputed:{\r\n\t\t\tfocusShowList__(){ // 是否在输入框获得焦点时,自动弹出列表框\r\n\t\t\t\tif(this.focusShowList == null ){\r\n\t\t\t\t\t// 应该是判断在 pc端还是移动端\r\n\t\t\t\t\t// #ifdef H5\r\n\t\t\t\t\t\treturn isPC();\r\n\t\t\t\t\t// #endif\r\n\t\t\t\t\t// #ifndef H5\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t// #endif\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn \tthis.focusShowList;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tlistBoxHeight__(){ // 列表框的总高度\r\n\t\t\t\tconst itemHeight = 2; // 每个列表项的高度(em), 默认为2个文字高\r\n\t\t\t\treturn this.showItemNum*itemHeight;\r\n\t\t\t},\r\n\t\t\tshowInput(){ // 是否显示输入框\r\n\t\t\t\treturn this.isCanInput && !this.disabled;\r\n\t\t\t},\r\n\t\t\tinnerList(){ // 转换列表的数据格式\r\n\t\t\t\tconst arr = [], orginArr = this.list;\r\n\t\t\t\torginArr.forEach((val, index)=>{\r\n\t\t\t\t\tlet value = typeof val === 'object' && 'value' in val ? val.value : val;\r\n\t\t\t\t\tlet isDisabled = typeof val === 'object' && val.disabled == true;\r\n\t\t\t\t\tarr.push({\r\n\t\t\t\t\t\tisActive: false,\r\n\t\t\t\t\t\tvalue: value,\r\n\t\t\t\t\t\tdisabled: isDisabled,\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t\treturn arr;\r\n\t\t\t},\r\n\t\t},\r\n\t\tmounted(){\r\n\t\t\tVue.__xfl_select.$on('open', this.onOtherXflSelectOpen);\r\n\t\t\tthis.switchMgr = new Switch(this.onListShow, this.onListHide); // 创建开关对象\r\n\t\t\tthis.onDataChange_listShow(this.listShow, null); // 由于 watch 不到初始值,所以需要在这里手动调用一次\r\n\t\t\tthis.init(); //进行初始化\r\n\t\t},\r\n\t\tbeforeDestroy(){\r\n\t\t\tVue.__xfl_select.$off('open', this.onOtherXflSelectOpen);\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tonOtherXflSelectOpen(component){ //当本组件的其它实例展开时的回调\r\n\t\t\t\tif(this.selectHideType === 'independent' || this.selectHideType === 'hideOthers'){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tcomponent !== this && this.switchMgr.close(100);\r\n\t\t\t},\r\n\t\t\t/************************** 初始化函数 ****************************/\r\n\t\t\t//进行初始化\r\n\t\t\tinit(){\r\n\t\t\t\tthis.clearInput(); // 清空输入框中的显示,主要是设置placeholder\r\n\t\t\t\tthis.setInput(this.initValue); // 在输入框中显示初始值\r\n\t\t\t\tthis.changeActiveIndex(this.initValue); // 根据初始值设置列表框中的活动项\r\n\t\t\t\tthis.getInputBoxHeight(); // 初始化列表框的top值\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// 获取输入框的总高度 px\r\n\t\t\tgetInputBoxHeight(){\r\n\t\t\t\tlet component = this;\r\n\t\t\t\t// #ifdef H5\r\n\t\t\t\t\tcomponent = undefined; // 在h5中传入了component反而拿不到数据\r\n\t\t\t\t// #endif\r\n\t\t\t\tgetNodeInfo('.show-box', component, (data)=>{\r\n\t\t\t\t\tif(data){\r\n\t\t\t\t\t\tconst trangleHeight = 6; //列表框左上角的小的空心三角形的高度(px)\r\n\t\t\t\t\t\tthis.listTop__ = data[0].height + trangleHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\t/************************** 初始化函数 ****************************/\r\n\r\n\t\t\t/************************** 数据 ****************************/\r\n\t\t\tgetIndex(value){ // 将值转换为索引\r\n\t\t\t\tlet activeIndex = searchIndex(\r\n\t\t\t\t\t\t\t\t\tthis.innerList, value, 'value')\r\n\t\t\t\treturn activeIndex; // 转换失败,则返回-1\r\n\t\t\t},\r\n\t\t\titemIsDisabled(index){ // 某个列表项是否已经被禁用了\r\n\t\t\t\treturn this.innerList[index].disabled;\r\n\t\t\t},\r\n\r\n\t\t\titemIsActive(index){ // 某个列表项是否是被选中的(活动的)\r\n\t\t\t\treturn index === this.activeIndex;\r\n\t\t\t},\r\n\r\n\t\t\t// listShow 这个字段的值变化时的回调\r\n\t\t\tonDataChange_listShow(newVal = false, oldVal){ \r\n\t\t\t\tnewVal ? this.switchMgr.open() : this.switchMgr.close(100);\r\n\t\t\t},\r\n\t\t\t/************************** 数据 ****************************/\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t/************************** “输入框”的操作 ****************************/\r\n\t\t\t// 输入框获得焦点时\r\n\t\t\tonFocus(event){\r\n\t\t\t\tthis.focusShowList__ && this.switchMgr.open();\r\n\t\t\t\tthis.$emit('focus', event);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// 输入框失去焦点时\r\n\t\t\tonBlur(event){\r\n\t\t\t\t// 失去焦点时隐藏,在电脑上很好,但在移动端体验不好,因为会弹出数字键盘,然后隐藏键盘时会失去焦点\r\n\t\t\t\tthis.focusShowList__ && this.switchMgr.close(100); \r\n\t\t\t\tthis.$emit('blur', event);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t//当显示的不是输入框时,上面的点击事件\r\n\t\t\tonUpperClick(){\r\n\t\t\t\tif(this.disabled){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.switchMgr.toggle('auto', -1, 100);\r\n\t\t\t\tthis.$emit('input-click');\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t//清空已经选择的内容\r\n\t\t\tonClear(){ \r\n\t\t\t\tthis.clearItemActive(); // 清空列表框中的所有活动项\r\n\t\t\t\tthis.clearInput(); // 清空输入框中的显示\r\n\t\t\t\tthis.$emit('clear');\r\n\t\t\t},\r\n\t\t\t\r\n\t\t\t// 输入框的值变化时\r\n\t\t\tonInput(event){\r\n\t\t\t\tconst inputVal = event.detail.value;\r\n\t\t\t\tthis.changeActiveIndex(inputVal);\r\n\t\t\t\tthis.$emit('input', event);\r\n\t\t\t},\r\n\r\n\t\t\t// 清空input中显示的内容\r\n\t\t\tclearInput(placeholder = null){\r\n\t\t\t\tthis.placeholder = placeholder== null ? this.placeholder : placeholder;\r\n\t\t\t\tthis.selectText = this.showInput ? '' : this.placeholder;\r\n\t\t\t},\r\n\t\t\t// 设置input中显示的内容\r\n\t\t\tsetInput(text = null){ \r\n\t\t\t\tif(text == null){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.selectText = text;\r\n\t\t\t},\r\n\t\t\t/************************** “输入框”的操作 ****************************/\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t/************************** 列表的操作(显示/隐藏/点击) ****************************/\r\n\r\n\t\t\t/**\r\n\t\t\t * 传入数字表示索引,其它值表示value, 会自动去搜索对应的索引\r\n\t\t\t * 注意: \r\n\t\t\t * 1. 如果没有找到对应的索引,则什么也不会做 \r\n\t\t\t * 2. 如果找到了,只会把对应项设置为活动的,并不会清除其它的活动项 \r\n\t\t\t */\r\n\t\t\tchangeActiveIndex(value_index){ //改变列表中的活动项\r\n\t\t\t\tif(value_index == null){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tlet activeIndex = value_index, value = value_index;\r\n\t\t\t\tif(typeof value_index !== 'number'){ //认为是值,否则就是索引\r\n\t\t\t\t\tactiveIndex = this.getIndex(value); // 搜索对应的值所在的索引\r\n\t\t\t\t}else{\r\n\t\t\t\t\tvalue = this.innerList[activeIndex].value;\r\n\t\t\t\t}\r\n\t\t\t\tif(activeIndex > -1){\r\n\t\t\t\t\t!this.itemIsActive(activeIndex) && this.setItemActive(activeIndex, value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.clearItemActive();\r\n\t\t\t\t}\r\n\t\t\t\tthis.setInput(value); // 更改输入框的值\r\n\t\t\t},\r\n\r\n\t\t\tclearItemActive(index = -1){ // 设置为不选中\r\n\t\t\t\tif(index < 0){ // 清空全部\r\n\t\t\t\t\tthis.activeIndex = -1;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tsetItemActive(index, value){ //选中某一项,必须传入索引和对应的值\r\n\t\t\t if(this.itemIsDisabled(index)){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.activeIndex = index;\r\n\t\t\t},\r\n\r\n\t\t\t// 整个列表框上的点击事件\r\n\t\t\tonListClick(){\r\n\r\n\t\t\t},\r\n\t\t\tonClickItem(index, value){ // 列表项上的点击事件\r\n\t\t\t\tif( this.itemIsDisabled(index) ){\r\n\t\t\t\t\tthis.switchMgr.open(); // 点在禁用项上,就不隐藏\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.switchMgr.close(100); // 开始隐藏,因为会延迟隐藏,所以可以写在这里\r\n\t\t\t\tif(this.disabled){ //如果本项被禁用 或 整个列表框被禁用\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif( !this.itemIsActive(index) ){ //如果点在非选中项上\r\n\t\t\t\t this.clearItemActive(); // 清空其它的选中的列表项\r\n\t\t\t\t\tthis.setItemActive(index, value); // 将这一项设置为选中项\r\n\t\t\t\t\tthis.$emit('change', {newVal: value, oldVal: this.selectText, \r\n\t\t\t\t\t\t\t\t\t\t\tindex: index, orignItem: this.list[index]});\r\n\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\tthis.setInput(value); // 更改输入框的值\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonListHide(){ //列表隐藏时的回调\r\n\t\t\t\tthis.isRotate = false;\r\n\t\t\t\tthis.isShowList = false;\r\n\t\t\t\tthis.$emit('visible-change', false);\r\n\t\t\t},\r\n\t\t\tonListShow(){ //列表显示时的回调\r\n\t\t\t\tthis.isShowList = true;\r\n\t\t\t\tthis.isRotate = true;\r\n\t\t\t\tthis.$emit('visible-change', true);\r\n\t\t\t\t\r\n\t\t\t\tif(this.selectHideType === 'independent' || this.selectHideType === 'hideSelf'){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tVue.__xfl_select.$emit('open', this);\r\n\t\t\t}\r\n\t\t\t/************************** 列表的操作(显示/隐藏/点击) ****************************/\r\n\t\t}\r\n\t}\r\n\r\n/************************** uniapp libs ****************************/\r\n\r\n\t/**\r\n\t * 是否是web的移动端\r\n\t * @public\r\n\t * @returns {boolean} true表示当前环境是web,并且是移动端,false表示非web或是pc端\r\n\t */\r\n\tfunction isMobile(){\r\n\t\ttry{ // 可能不存在window对象\r\n\t\t\tlet reg = /iPhone|iPad|iPod|iOS|Android|SymbianOS|Windows Phone|coolpad|mmp|smartphone|midp|wap|xoom|symbian|j2me|blackberry|wince/i;\r\n\t\t\treturn reg.test(navigator.userAgent); \r\n\t\t}catch(e){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * 是否是web的pc端\r\n\t * @public\r\n\t * @returns {boolean} true表示当前环境是web,并且是pc端,false表示非web或是移动端\r\n\t */\r\n\tfunction isPC(){\r\n\t\ttry{ // 可能不存在window对象\r\n\t\t\tlet reg = /iPhone|iPad|iPod|iOS|Android|SymbianOS|Windows Phone|coolpad|mmp|smartphone|midp|wap|xoom|symbian|j2me|blackberry|wince/i;\r\n\t\t\treturn !reg.test(navigator.userAgent); \r\n\t\t}catch(e){\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t/**\r\n\t * 获取指定元素的样式\r\n\t * 注意: \r\n\t * 1. 必须在使用这个函数的文件中 导入 import Vue from 'vue' \r\n\t * 2. 自定义组件编译模式(默认模式)时, 必须传入component参数。(h5中测试时不管传不传都能正常获取,但wx中必须传入才行)\r\n\t * @public\r\n\t * @param {Object|string} options - 配置对象,如果传入一个字符串,则识别为selector\r\n\t * selector - dom元素的选择器,仅支持以下选择器: \r\n\t * \t\t\t\t\t\t\t1. ID选择器:'#the-id'\r\n\t\t\t\t\t\t\t\t2. class选择器(可以连续指定多个):'.a-class.another-class'\r\n\t\t\t\t\t\t\t\t3. 子元素选择器:'.the-parent > .the-child'\r\n\t\t\t\t\t\t\t\t4. 后代选择器:'.the-ancestor .the-descendant'\r\n\t\t\t\t\t\t\t\t5. 跨自定义组件的后代选择器:'.the-ancestor >>> .the-descendant'\r\n\t\t\t\t\t\t\t\t6. 多选择器的并集:'#a-node, .some-other-nodes'\r\n\t\t\t\t\t\t\t\t7. 传入 'viewport' 表示获取视口对象,有点类似于选中window。\r\n\t * @param {function|component} [callback=null] - 如果传入一个函数,则识别为获取到样式后的回调,也可以传入一个组件, \r\n\t 回调的第一个参数如下: \r\n\t\t\t\t// 获取信息成功时,是对象数组, \r\n\t\t\t\t// 对象根据options的配置而有不同的字段 \r\n\t\t\t\t{ \r\n\t\t\t\t\tid: '', // String 节点的 ID, 经测试,这个id并不一定正确(特别是选中多个节点时) \r\n\t\t\t\t\tdataset: null, // Object 节点的 dataset \r\n\t\t\t\t\tleft: 0, // Number 节点的包围盒的左边界坐标(px)(page元素的左上角为坐标原点) \r\n\t\t\t\t\tright: 0, // Number 节点的包围盒的右边界坐标(px) \r\n\t\t\t\t\ttop: 0, // Number 节点的包围盒的上边界坐标(px) \r\n\t\t\t\t\tbottom: 0, // Number 节点的包围盒的下边界坐标(px) \r\n\t\t\t\t\twidth: 0, // Number 节点的宽度(px) \r\n\t\t\t\t\theight: 0, // Number 节点的高度(px) \r\n\t\t\t\t\tscrollLeft: 0, // Number 节点的水平滚动位置(px) \r\n\t\t\t\t\tscrollTop: 0, // Number 节点的竖直滚动位置(px) \r\n\t\t\t\t\tcontext: {} || null, // Object节点对应的Context对象(如VideoContext、CanvasContext、和MapContext) \r\n\t\t\t\t\t... // properties 数组中指定的属性值和computedStyle数组中指定的样式值 \r\n\t\t\t\t} \r\n\t\t\t\t// 当获取信息失败,则为null \r\n\t * @param {any} [thisObj=null] 回调中的this, 可能位于第三个参数或第四个参数。\r\n\t * @return {undefined|promise} 当没有callback时,则返回promise,否则返回undefined \r\n\t * @example\r\n\t * 1. 传入选择器,返回promise\r\n\t * getNodeInfo('#aa').then((data)=>{ console.log(data);});\r\n\t * \r\n\t * 2. 传入选择器和component, 返回promise\r\n\t * getNodeInfo('#aa', this).then((data)=>{ console.log(data);});\r\n\t * \r\n\t * 3. 传入选择器和callback, 返回undefined\r\n\t * getNodeInfo('#aa', (data)=>{ console.log(data);});\r\n\t * \r\n\t * 4. 传入配置对象和callback, 返回undefined\r\n\t * getNodeInfo({selector: '#aa', component: this}, (data)=>{ console.log(data);});\r\n\t */\r\n\tfunction getNodeInfo({\r\n\t\tselector = 'selector', // 选择器\r\n\t\tcomponent = null, // 选择器所在的组件,不传入的话,相当于是在整个当前页面中选择\r\n\t\tattemptSpaceTime = 16, // 尝试获取节点信息的时间间隔(ms): 16 24 36 54 81 122 183 275 413 \r\n\t\tattemptSpaceRate = 1.5, // 时间间隔的增长系数\r\n\t\ttotalAttemptNum = 8, // 如果获取信息失败,再次进行尝试获的最大次数\r\n\t\t// 以下为获取到的结果字段的配置\r\n\t\tid = true, // Boolean\t是否返回节点 id\t\r\n dataset = true, // Boolean\t是否返回节点 dataset\t\r\n rect = true, // Boolean\t是否返回节点布局位置(left right top bottom)\t\r\n size = true, // Boolean 是否返回节点尺寸(width height)\t\r\n scrollOffset = true, //Boolean 是否返回节点的 scrollLeft scrollTop\r\n // 以下三个 仅 App 和微信小程序支持\r\n properties = [], // Array<string> 指定属性名列表,返回节点对应属性名的当前属性值 \r\n // 只能获得组件文档中标注的常规属性值,\r\n // id class style 和事件绑定的属性值不可获取\r\n computedStyle = [], //Array<string>指定样式名列表,返回节点对应样式名的当前值\r\n context = true, // Boolean 是否返回节点对应的 Context 对象\t\r\n\t} = {}, callback = null, thisObj = null){\r\n\t\t// arguments 始终会记录最原始的传进来的参数,而不管这些默认值会怎么转换\r\n\t\t// 因为传入一个对象或非字符串会报错,强制转换为字符串\r\n\t\tconst args = arguments;\r\n\t\tselector = typeof args[0] === 'string' ? args[0] : String(selector);\r\n\t\tif(typeof args[1] !== 'function'){\r\n\t\t\tcomponent = args[1]; callback = args[2]; thisObj = args[3];\r\n\t\t}\r\n\t\t!component instanceof Vue && (component = null); //传入非组件对象,会报错\r\n\t\t\r\n\t\t// 不能把 component 字符添加到这个对象上,否则在wx中会报循环引用的错误\r\n\t\tconst options = { selector, attemptSpaceTime, totalAttemptNum, attemptSpaceRate,\r\n\t\tid, dataset, rect, size, scrollOffset, properties, computedStyle, context };\r\n\t\t\r\n\t\tconst selectorQuery = uni.createSelectorQuery();\r\n\t\tcomponent && selectorQuery.in(component);\r\n\t\tconst nodesRef = selector === 'viewport' ? selectorQuery.selectViewport() : selectorQuery.selectAll(selector);\r\n\t\tnodesRef.fields(options); // 注意,只注册了这一个命令\r\n\r\n\t\tlet result; // 必须把创建promise的代码放在前面,否则在h5端会出现exec先执行完成的情况\r\n\t\tif(typeof callback !== 'function'){\r\n\t\t\tresult = new Promise(resolve=>callback = resolve);\r\n\t\t}\r\n\t\tstepRunFunc((next, currNum)=>{\r\n\t\t\tselectorQuery.exec( ([data]) => { // 开始查询页面中的节点\r\n\t\t\t\tdata && data.length === 0 && (data = null);\r\n\t\t\t\tdata || totalAttemptNum <= currNum ? typeof callback === 'function' && callback.call(thisObj, data) : next(attemptSpaceTime);\r\n\t\t\t\tattemptSpaceTime = Math.round( attemptSpaceTime * attemptSpaceRate );\r\n\t\t\t});\r\n\t\t})(); // 立即执行一次\r\n\t\t\r\n\t\treturn result;\r\n\t}\r\n/************************** uniapp libs ****************************/\r\n\r\n/************************** js libs ****************************/\r\n\t/**\r\n\t * 开关类,管理两个状态的切换\r\n\t * 特点是: 状态的切换可能是延迟进行的。\r\n\t * @class\r\n\t */\r\n\tclass Switch{\r\n\t\tconstructor(onopen = null, onclose = null){\r\n\t\t\tthis.onopen = onopen; // 打开后的回调\r\n\t\t\tthis.onclose = onclose; // 关闭后的回调\r\n\t\t\tthis.isOpen = false; // 初始时状态是关闭的\r\n\t\t}\r\n\t\ttoggle(toState = 'auto', ...args){ //切换开关的状态\r\n\t\t\tif( !(toState === 'close' || toState === 'open') ){\r\n\t\t\t\ttoState = this.isOpen ? 'close' : 'open';\r\n\t\t\t}\r\n\t\t\tlet delayTime_open, delayTime_close, cancelType_open, cancelType_close;\r\n\t\t\tfor(let i=0, arg; i<args.length; i++){\r\n\t\t\t\targ = args[i];\r\n\t\t\t\tswitch(typeof arg){\r\n\t\t\t\t\tcase 'number': delayTime_open == null ? (delayTime_open = arg) : (delayTime_close = arg); break;\r\n\t\t\t\t\tcase 'string': cancelType_open == null ? (cancelType_open = arg) : (cancelType_close = arg); break;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tconst delayTime = toState === 'open' ? delayTime_open : delayTime_close;\r\n\t\t\tconst cancelType = toState === 'open' ? cancelType_open : cancelType_close;\r\n\t\t\tthis.change(toState, delayTime == null ? -1 : delayTime, cancelType == null ? 'both' : cancelType);\r\n\t\t}\r\n\t\topen(delayTime = -1, cancelType = 'both'){ // 打开\r\n\t\t\tthis.change('open', delayTime, cancelType);\r\n\t\t}\r\n\t\tclose(delayTime = -1, cancelType = 'both'){ // 关闭\r\n\t\t\tthis.change('close', delayTime, cancelType);\r\n\t\t}\r\n\t\tcancel(type = 'both'){ // 取消定时器\r\n\t\t\tif(type === 'open'){\r\n\t\t\t\tclearTimeout(this.openTimer); this.openTimer = null;\r\n\t\t\t}else if(type === 'close'){\r\n\t\t\t\tclearTimeout(this.closeTimer); this.closeTimer = null;\r\n\t\t\t}else if(type === 'both'){\r\n\t\t\t\tclearTimeout(this.closeTimer); this.closeTimer = null;\r\n\t\t\t\tclearTimeout(this.openTimer); this.openTimer = null;\r\n\t\t\t}\r\n\t\t}\r\n\t\tchange(toState, delayTime = -1, cancelType = 'both' ){ // 改变到指定的状态\r\n\t\t\tthis.cancel(cancelType); // 取消定时器\r\n\t\t\tif(this.isOpen && toState === 'open' || !this.isOpen && toState === 'close'){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst funcName = 'on' + toState;\r\n\t\t\tif(delayTime < 0){\r\n\t\t\t\tthis.isOpen = toState === 'open';\r\n\t\t\t\ttypeof this[funcName] === 'function' && this[funcName]();\r\n\t\t\t}else{\r\n\t\t\t\tthis[toState + 'Timer'] = setTimeout(()=>{ \r\n\t\t\t\t\tthis.isOpen = toState === 'open';\r\n\t\t\t\t\ttypeof this[funcName] === 'function' && this[funcName]();\r\n\t\t\t\t}, delayTime)\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * 从一个数组中进行搜索,返回一个索引, 主要特点是可以深层搜索\r\n\t * 依赖: forEach props 这两个函数\r\n\t * @public\r\n\t * @param {Array} arr - 要搜索的数组或类数组或普通对象\r\n\t * @param {any} searchVal - 要搜索的值 \r\n\t * @param {string|Array} [propPath=''] - 要搜索的值的路径, 如 'aa.bb.cc' 或 ['aa', 'bb', 'cc']\r\n\t * @param {function} [compareFunc=null] - 比较函数 compareFunc(val, searchVal, arrElem, index, orignArr)\r\n\t * 省略时,表示进行全等比较。\r\n\t * @example\r\n\t * 1. 简单的使用\r\n\t * searchIndex([1, 2, 3], 2); // => 1\r\n\t * \r\n\t * 2. 使用自定义的比较函数\r\n\t * searchIndex([1, 2, 3], '2', '', (val, searchVal)=>val==searchVal); // => 1\r\n\t * \r\n\t * 3. 指定用值的路径\r\n\t * searchIndex([1, {aa: 3}, {aa: {bb: 3}}, {aa: {bb: 4}], 3, 'aa.bb'); // => 1\r\n\t */\r\n\tfunction searchIndex(arr, searchVal, propPath = '', compareFunc = null){\r\n\t\tlet result_index= -1;\r\n\t\tif(propPath){\r\n\t\t\tif(typeof propPath === 'string'){\t\r\n\t\t\t\tpropPath = propPath.split(/\\s*[\\,\\.]\\s*/);\r\n\t\t\t}else if( !Array.isArray(propPath) ){\r\n\t\t\t\tpropPath = '';\r\n\t\t\t}\r\n\t\t}\r\n\t\tforEach(arr, (val, index, orignArr)=>{\r\n\t\t\tif(propPath){\r\n\t\t\t\tval = props(val, propPath);\r\n\t\t\t}\r\n\t\t\tif(\r\n\t\t\t\ttypeof compareFunc === 'function' \r\n\t\t\t\t? compareFunc(val, searchVal, arrElem, index, orignArr)\r\n\t\t\t\t: val === searchVal\r\n\t\t\t){\r\n\t\t\t\tresult_index = index;\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t});\r\n\t\treturn result_index;\r\n\t}\r\n\r\n\t/**\r\n\t * 遍历数组或类数组或普通对象\r\n\t * 跟原生的forEach的差别是: 可以遍历普通对象,也可以中途可以退出。\r\n\t * 注意,类数组只会遍历其中的数字属性。\r\n\t * @public\r\n\t * @param {object|Array} obj - 要遍历的对象\r\n\t * @param {function} func - 回调 func.call(thisObj, value, prop, obj);\r\n\t * @param {any} [thisObj=null] - 回调中的this\r\n\t * @example\r\n\t * 1. forEach({a: 3, b: 4}, (val, prop, obj)=>{ // 遍历普通对象\r\n\t * return false; //返回false 表示退出循环\r\n\t * });\r\n\t * \r\n\t * 2. forEach([3, 4], (val, index, obj)=>{ // 遍历数组\r\n\t * return false; //返回false 表示退出循环\r\n\t * });\r\n\t * \r\n\t * 3. forEach({1: 3, 5: 10, a: 'aa', length: 20}, (val, index, obj)=>{ // 遍历类数组\r\n\t * return false; //返回false 表示退出循环\r\n\t * });\r\n\t */\r\n\tfunction forEach(obj, func, thisObj = null) {\r\n\t\tif (obj == null || typeof obj === 'function' || typeof func !== 'function') {\r\n\t\t\treturn obj;\r\n\t\t}\r\n\r\n\t\t//对象自身的(不含继承的)所有可遍历(enumerable)属性\r\n\t\tlet keys = Object.keys(obj);\r\n\r\n\t\tconst length = obj.length;\r\n\t\tconst isArrayLike = typeof length == 'number' && length > -1 && length % 1 == 0 && length <= 9007199254740991;\r\n\r\n\t\t//如果是类数组或数组,只遍历其中的数字属性\r\n\t\tif (isArrayLike) {\r\n\t\t\tconst reg = /^(?:0|[1-9]\\d*)$/,\r\n\t\t\t\tmaxNum = 9007199254740991,\r\n\t\t\t\tnumPropArr = [];\r\n\t\t\tfor (let i = 0, val; i < keys.length; i++) {\r\n\t\t\t\tval = keys[i];\r\n\t\t\t\tif (reg.test(val) && +val <= maxNum) {\r\n\t\t\t\t\tnumPropArr.push(val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tkeys = numPropArr;\r\n\t\t}\r\n\r\n\t\t// 开始遍历所有的数字属性\r\n\t\tfor (let i = 0; i < keys.length; i++) {\r\n\t\t\tif ( func.call(thisObj, obj[keys[i]], keys[i], obj) === false ) { break; }\r\n\t\t}\r\n\t\treturn obj;\r\n\t}\r\n\r\n\t/**\r\n\t * 从一个对象上取指定的属性 或 设置属性的值\r\n\t * @public\r\n\t * @param {Object} obj - 对象, 当设置时,会更改这个对象\r\n\t * @param {Array} propArr - 属性名称的数组,指出要操作的属性的路径\r\n\t * @param {any} [val=undefined] - 要设置的值 省略时表示获取,否则就是设置\r\n\t * @param {Boolean} [fource=false] - 在设置时,如果不存在对应的属性,是否创建\r\n\t * @returns {any|undefined} 设置时一定返回undefined, 获取时,返回对应的值,如果不存在则返回undefined\r\n\t * @example\r\n\t * 1. props({}, ['aa', 'bb', 'cc'], 5); // => undefined 什么也没做\r\n\t * 2. props({}, ['aa', 'bb', 'cc'], 5, true); // => undefined 在空对象上创建了多层属性 {aa: {bb: {cc: 5} }}\r\n\t * 3. props({}, ['aa', 'bb', 'cc']); // => undefined\r\n\t * 4. props({aa: {bb: 77}}, ['aa', 'bb']); // => 77\r\n\t * 5. props({aa: 3}, ['aa', 'bb', 'cc'], 5); // => undefined 什么也没做\r\n\t * 6. props({aa: 3}, ['aa'], 5); // => undefined 设置了 aa 的值为5\r\n\t * 7. props({aa: 3}, [], 5); // => undefined 什么也没做\r\n\t */\r\n\tfunction props(obj, propArr, val = undefined, fource = false){\r\n\t\tfor(let i=0, subObj = obj, len = propArr.length, propName; i<len; i++){\r\n\t\t\tif(!subObj || typeof subObj !== 'object'){\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tpropName = propArr[i];\r\n\t\t\tif(i === len -1 ){\r\n\t\t\t\tif(val === undefined){\r\n\t\t\t\t\treturn subObj[ propName ];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsubObj[ propName ] = val;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif( !(subObj[ propName ] && typeof subObj[ propName ] === 'object') ){\r\n\t\t\t\t\tif(fource && val !== undefined){\r\n\t\t\t\t\t\tsubObj[ propName ] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tsubObj = subObj[ propName ];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\r\n /**\r\n\t * 分次执行某个函数\r\n\t * 使用场景: 异步执行某个操作,这个操作可能会失败,所以当失败时,需要再尝试几次,直到成功或尝试次数用完\r\n\t * @public\r\n\t * @param {function} callback - 要执行的函数 callback.call(thisObj, next, currCount, timers)\r\n\t * @param {any} [thisObj=null] - callback中的this\r\n\t * @returns {function} 返回next函数,next函数可以传入以下两个参数 \r\n\t * \t\t\t\t\t {any} [delayTime=-1] - 延迟多久(ms)再执行下一次callback回调\r\n\t * \t\t\t\t\t\t\t\t\t\t\t 负数、NaN、Infinite表示立即同步调用,其它值表示延迟执行\r\n\t * \t\t\t\t\t {string} [type='both'] - 当调用next时,如果其它地方也调用了next并且还没有完成,此时该保留哪次调用\r\n\t * \t\t\t\t\t\t \t\t\t\t'new' - 保留本次的,清除所有原来的\r\n\t * \t\t\t\t\t\t \t\t\t\t'old' - 保留所有原来的,舍弃本次的\r\n\t * \t\t\t\t\t\t \t\t\t\t'both' - 两个都保留\r\n\t * @example\r\n\t * 1. 最简单的使用\r\n\t * stepRunFunc((next, currCount, timers)=>{\r\n\t * \t\tconsole.log('执行第' + currCount + '次');\r\n\t * currCount <= 2 && next(2000);\r\n\t * })();\r\n\t * // => 会立即执行第一次,然后2s后再执行第二次\r\n\t * \r\n\t * 2. next()函数的第二个参数,是考虑到,用户可能会在短时间内连续调用多次,此时应该怎么处理这些next调用之间的关系\r\n\t * stepRunFunc((next, currCount, timers)=>{\r\n\t * \t\tconsole.log('执行第' + currCount + '次');\r\n\t * if(currCount <= 2 ){\r\n\t * next(3000);\r\n\t * setTimeout(()=>{next(1000, 'old')}, 1000); // 这一次next调用将不起作用\r\n\t * }\r\n\t * })();\r\n\t * // => 会立即执行第一次,然后3s后再执行第二次\r\n\t */\r\n\tfunction stepRunFunc(callback, thisObj = null){\r\n\t\tconst getDelayTime = (delayTime)=>{ // 转换delayTime的格式\r\n\t\t\tdelayTime = parseInt(delayTime);\r\n\t\t\tif(isNaN(delayTime) || !isFinite(delayTime)){\r\n\t\t\t\tdelayTime = -1;\r\n\t\t\t}\r\n\t\t\treturn delayTime;\r\n\t\t}\r\n\t\tconst timers = []; // 记录所有正在执行的计时器\r\n\t\tconst clearTimer = (oneTimer)=>{ // 清除定时器\r\n\t\t\tif(oneTimer == null){\r\n\t\t\t\tfor(let i=0; i<timers.length; i++){\r\n\t\t\t\t\tclearTimeout(timers[i]);\r\n\t\t\t\t}\r\n\t\t\t\ttimers.length = 0;\r\n\t\t\t}else{\r\n\t\t\t\tconst index = timers.indexOf(oneTimer);\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tclearTimeout(timers[index]);\r\n\t\t\t\t\ttimers.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tlet currCount = 0; // 记录callback当前已经执行了的次数\r\n\t\tconst next = function(delayTime = -1, type = 'both'){\r\n\t\t\tif(type === 'new'){ // 如果只保留最新的next回调\r\n\t\t\t\tclearTimer();\r\n\t\t\t}else if(type === 'old' && timers.length > 0){ // 保留以前的next回调,忽略本次next回调\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tdelayTime = getDelayTime(delayTime);\r\n\t\t\tif(delayTime < 0){\r\n\t\t\t\tcallback.call(thisObj, next, ++currCount, timers);\r\n\t\t\t}else{\r\n\t\t\t\tconst oneTimer = setTimeout(()=>{\r\n\t\t\t\t\tclearTimer(oneTimer);\r\n\t\t\t\t\tcallback.call(thisObj, next, ++currCount, timers);\r\n\t\t\t\t}, delayTime);\r\n\t\t\t\ttimers.push(oneTimer);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn next;\r\n\t}\r\n/************************** js libs ****************************/\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n\t@normal-color: #606266; //正常情况下的字体颜色\r\n\t@hover-color: #c0c4cc; //边框的颜色\r\n\t@active-color: #409eff; //活动的颜色\r\n\t@mouse-move-color: #f5f7fa; //在列表项上按下时的列表项的背景色\r\n\t@padding-left: 5%; //两侧的边距\r\n\t@arrowWidth: 12%; //右边的小三角按钮区域的宽度\r\n\r\n\t.placeholder11{\r\n\t\tcolor: red; top: 10px;\r\n\t}\r\n\t.show-box{\r\n\t\t&.active{\r\n\t\t\tborder-color: @active-color;\r\n\t\t}\r\n\t\t// &:hover{\r\n\t\t// \tborder-color: @normal-color;\r\n\t\t// \t&.active{\r\n\t\t// \t\tborder-color: @active-color;\r\n\t\t// \t}\r\n\t\t// }\r\n\t\t&.disabled{\r\n\t\t\tbackground-color: #f0f0f0;\r\n\t\t}\r\n\t\ttext-align: left;\r\n\t\t-webkit-appearance: none;\r\n\t\tbackground-color: #fff;\r\n\t\tbackground-image: none;\r\n\t\tborder-radius: 4px;\r\n\t\tborder: 1px solid @hover-color;\r\n\t\tbox-sizing: border-box;\r\n\t\tcolor: @normal-color;\r\n\t\tdisplay: inline-block;\r\n\t\tfont-size: inherit;\r\n\t\theight: 2em;\r\n\t\tline-height: inherit;\r\n\t\toutline: none;\r\n\t\tpadding: 0 @arrowWidth 0 @padding-left;\r\n\t\ttransition: border-color .2s cubic-bezier(.645,.045,.355,1);\r\n\t\twidth: 100%;\r\n\t\tposition: relative;\r\n\t\t// background: #e2f5fc;\r\n\t\t\r\n\t\t.input{\r\n\t\t\twidth: 100%; height: 90%; //原来100%\r\n\t\t\tdisplay: flex; align-items: center; justify-content: flex-start;\r\n\t\t\tborder: none;\r\n\t\t\t// background: #e2f5fc;//新增\r\n\t\t\t// color: #94afce;//新增\r\n\t\t\t// margin-left: -25upx;//新增\r\n\t\t}\r\n\t\t.placeholder{\r\n\t\t\tcolor: #bbb;\r\n\t\t}\r\n\t\t\r\n\t\t//*************************** 右侧的小箭头 ***************************\r\n\t\t.right-arrow{\r\n\t\t\t&.isRotate{\r\n\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t}\r\n\t\t\ttransition: transform .2s cubic-bezier(.645,.045,.355,1);\r\n\t\t\tposition: absolute; font-size: 1em; right: 0px; display: flex; \r\n\t\t\ttop: 0;\r\n\t\t\talign-items: center; color: @hover-color; height: 100%;\r\n\t\t\tfont-weight: 100; width: @arrowWidth; justify-content: center;\r\n\t\t}\r\n\t\t.clear{\r\n\t\t\tcolor: #fff; line-height: 1; \r\n\t\t\tbackground-color: @hover-color; border-radius: 50%; padding: 2px;\r\n\t\t}\r\n\t\t\r\n\t\t/****** 列表框部分样式 *****/\r\n\t\t.list-container{\r\n\t\t\tposition: absolute; width: 100%; left: 0; top: 50px;\r\n\t\t\tbox-sizing: border-box; z-index: 100;\r\n\t\t\t\r\n\t\t\t//*************************** 弹出框上面的小三角 ***************************\r\n\t\t\t.popper__arrow{\r\n\t\t\t\t transform: translateX(-400%);\r\n\t\t\t\t position: absolute;\r\n\t\t\t\t display: block;\r\n\t\t\t\t width: 0;\r\n\t\t\t\t height: 0;\r\n\t\t\t\t border-color: transparent;\r\n\t\t\t\t border-style: solid;\r\n\t\t\t\t border-width: 6px;\r\n\t\t\t\t filter: drop-shadow(0 2px 12px rgba(0,0,0,.03));\r\n\t\t\t\t left: 30%;\r\n\t\t\t\t margin-right: 3px;\r\n\t\t\t\t border-top-width: 0;\r\n\t\t\t\t border-bottom-color: #dcdfe6; \r\n\t\t\t\t top: -5px;\r\n\t\t\t\t&:after{\r\n\t\t\t\t\tcontent: \" \";\r\n\t\t\t\t\tborder-width: 6px;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tdisplay: block;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-color: transparent;\r\n\t\t\t\t\tborder-style: solid;\r\n\t\t\t\t\t top: 1px;\r\n\t\t\t\t\tmargin-left: -6px;\r\n\t\t\t\t\tborder-top-width: 0;\r\n\t\t\t\t\tborder-bottom-color: #fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t.list{\r\n\t\t\t\tborder-radius: 4px;\r\n\t\t\t\tborder: 1px solid #dcdfe6; \r\n\t\t\t\twidth: 100%; \r\n\t\t\t\tmax-height: 10em;\r\n\t\t\t\tbackground-color: #fff;\r\n\t\t\t\tbox-shadow: 0 2px 12px 0 rgba(0,0,0,.1);\r\n\t\t\t\tpadding: 5px 0;\r\n\t\t\t\t\r\n\t\t\t\t//*************************** 弹出框中每一项样式 ***************************\r\n\t\t\t\t.item{\r\n\t\t\t\t\t&:hover{\r\n\t\t\t\t\t\tbackground-color: @mouse-move-color;\r\n\t\t\t\t\t\t&.disabled{\r\n\t\t\t\t\t\t\tbackground-color: transparent;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\t&.active{\r\n\t\t\t\t\t\tcolor: @active-color;\r\n\t\t\t\t\t\tfont-weight: 500;\r\n\t\t\t\t\t\tbackground-color: @mouse-move-color;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t&.disabled{\r\n\t\t\t\t\t\tcolor: @hover-color;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpadding: 0 @padding-left;\r\n\t\t\t\t\tline-height: 2;\r\n\t\t\t\t}\r\n\t\t\t\t.data-state{\r\n\t\t\t\t\tcolor: @hover-color;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n//************************************** 以下为字体 ****************************************\r\n@font-face {font-family: \"iconfont\";\r\n src: \r\n url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAM8AAsAAAAAB1gAAALvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDHAqCEIFsATYCJAMQCwoABCAFhG0HSxthBhEVlKdkPwvsmHgLNqmwEc2pDxvYjI1gkX0f4uFrv9dz3+772RAqQJV8FbKANj5RiB1f1q0ioyorK1THs2Qj0gAJVYn///3mxT27TKyJJ63gD/KkYhr/9woe4ghtLxKJk5AWd7icc+CiJuQLU5SVQ48+ST+l0H2/pM2sm89zOb2VZYHMb1luYy3a0496AWYLKLA9sQ0UaAEFxC2yi7gTF3GaQJtRTbFxcfcIRYYmBeKyjDJQCiFZNrJFaDSszOI11Ep1IQZeRd+P/zAXcip1gmbuHJ/nYeWX9redqtuqPU6AYj4vjHUkNJGJ08bUviQMXtL2m2wJRVHxS/sz/N1+2CZOdizDemP/eBXRgCo7wIKcTvzSUnlmGMoSgt/tChX8EEOBlNvCLsQdpgv8HuNG8wuia9YA1Tfni5TZR1QthTxh8ZM2VCAHtiBtzfWtz1RtObA8IXowr5rzRK4/sRYpfjm1FBA9nrPl/qNAJRZLKJNsUumMKdb3dkIlkqjEtt8VrbNjZgnB48fG1XqNHax98/uI4xs768DFXVceFql2do6594N/t9vl/tw+ZlhKP6ngFjorHQq/AOmpcAlI98L7Pz/KG7P0OqU7+SuqQ7d8OXhYRvZsnLHcTCD4zwpgXfZVyJGzq6byIJiNgyZUaNOGv5ujz885jIPgWkIxOCLYYiRDUkyTmdNErd0CGopltJm1vb5dv3tJ5DDjpYTQ4wMqXT4h6fGZzJwfqA2R/SGlDxGUnsO0o4onyuKUUDLWoDbodPCGuFjE1U9sJispr4r4X6Sxi0IRiZWzD/RIc8wZ56ZkNmAoOLhL56G1ASKFHjWnLXOssmix6UWpDm4nnCJIYqgGlA3oaIFneHMmKp9/Qo2JJVEHqyf9hcio6x0UUjmAfOg9iHUvl4xmjRJjBjBI4IC7NAxZVgBi87Ae0liqHZGIKhluZKD6dH2j+8Jd0AY9MUcVKXLU5I9a6XU7FUcUppMkCss5MAeXmM7a3Q4A') format('woff2'),\r\n url('data:application/x-font-woff;charset=utf-8;base64,d09GMgABAAAAAAM8AAsAAAAAB1gAAALvAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDHAqCEIFsATYCJAMQCwoABCAFhG0HSxthBhEVlKdkPwvsmHgLNqmwEc2pDxvYjI1gkX0f4uFrv9dz3+772RAqQJV8FbKANj5RiB1f1q0ioyorK1THs2Qj0gAJVYn///3mxT27TKyJJ63gD/KkYhr/9woe4ghtLxKJk5AWd7icc+CiJuQLU5SVQ48+ST+l0H2/pM2sm89zOb2VZYHMb1luYy3a0496AWYLKLA9sQ0UaAEFxC2yi7gTF3GaQJtRTbFxcfcIRYYmBeKyjDJQCiFZNrJFaDSszOI11Ep1IQZeRd+P/zAXcip1gmbuHJ/nYeWX9redqtuqPU6AYj4vjHUkNJGJ08bUviQMXtL2m2wJRVHxS/sz/N1+2CZOdizDemP/eBXRgCo7wIKcTvzSUnlmGMoSgt/tChX8EEOBlNvCLsQdpgv8HuNG8wuia9YA1Tfni5TZR1QthTxh8ZM2VCAHtiBtzfWtz1RtObA8IXowr5rzRK4/sRYpfjm1FBA9nrPl/qNAJRZLKJNsUumMKdb3dkIlkqjEtt8VrbNjZgnB48fG1XqNHax98/uI4xs768DFXVceFql2do6594N/t9vl/tw+ZlhKP6ngFjorHQq/AOmpcAlI98L7Pz/KG7P0OqU7+SuqQ7d8OXhYRvZsnLHcTCD4zwpgXfZVyJGzq6byIJiNgyZUaNOGv5ujz885jIPgWkIxOCLYYiRDUkyTmdNErd0CGopltJm1vb5dv3tJ5DDjpYTQ4wMqXT4h6fGZzJwfqA2R/SGlDxGUnsO0o4onyuKUUDLWoDbodPCGuFjE1U9sJispr4r4X6Sxi0IRiZWzD/RIc8wZ56ZkNmAoOLhL56G1ASKFHjWnLXOssmix6UWpDm4nnCJIYqgGlA3oaIFneHMmKp9/Qo2JJVEHqyf9hcio6x0UUjmAfOg9iHUvl4xmjRJjBjBI4IC7NAxZVgBi87Ae0liqHZGIKhluZKD6dH2j+8Jd0AY9MUcVKXLU5I9a6XU7FUcUppMkCss5MAeXmM7a3Q4A') format('woff')\r\n}\r\n\r\n.iconfont {\r\n font-family: \"iconfont\" !important;\r\n font-size: 16px;\r\n font-style: normal;\r\n -webkit-font-smoothing: antialiased;\r\n -moz-osx-font-smoothing: grayscale;\r\n}\r\n\r\n.iconshanchu1:before {\r\n content: \"\\e68c\";\r\n}\r\n\r\n.icongou:before {\r\n content: \"\\e786\";\r\n}\r\n\r\n.iconarrowBottom-fill:before {\r\n content: \"\\e60e\";\r\n}\r\n</style>\r\n","import mod from \"-!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--10-oneOf-1-2!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--10-oneOf-1-5!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./xfl-select.vue?vue&type=style&index=0&id=64567a38&scoped=true&lang=less&\"; export default mod; export * from \"-!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--10-oneOf-1-2!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-3!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-4!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--10-oneOf-1-5!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../../../HBuilderX.2.7.9.20200527/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./xfl-select.vue?vue&type=style&index=0&id=64567a38&scoped=true&lang=less&\""],"sourceRoot":""}
|