├── .eslintignore ├── .gitignore ├── .npmignore ├── LICENSE ├── README.md ├── babel.config.js ├── examples ├── App.vue ├── form.vue ├── form1.vue └── main.js ├── lib ├── demo.html ├── img │ └── iconfont.a3512340.svg ├── vue-layer.common.js ├── vue-layer.common.js.map ├── vue-layer.css ├── vue-layer.umd.js ├── vue-layer.umd.js.map ├── vue-layer.umd.min.js └── vue-layer.umd.min.js.map ├── package-lock.json ├── package.json ├── packages ├── button │ ├── index.js │ └── src │ │ └── button.vue └── layer │ ├── index.js │ └── src │ ├── alert.vue │ ├── components │ ├── button │ │ ├── button.vue │ │ └── css │ │ │ ├── button.less │ │ │ ├── mixin.less │ │ │ └── var.less │ ├── drag │ │ └── drag.vue │ └── input │ │ └── input.vue │ ├── css │ ├── icon │ │ ├── iconfont.css │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ ├── iconfont.css │ ├── iconfont.eot │ ├── iconfont.js │ ├── iconfont.svg │ ├── iconfont.ttf │ ├── iconfont.woff │ ├── iconfont.woff2 │ └── index.less │ ├── helper │ └── helper.js │ ├── iframe.vue │ ├── layer.js │ ├── layer.vue │ ├── loading.vue │ ├── mask.vue │ ├── msg.vue │ ├── page.vue │ ├── prompt.vue │ └── tips.vue ├── public └── index.html ├── vue.config.js └── wx.jpg /.eslintignore: -------------------------------------------------------------------------------- 1 | /lib/**.js -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | /temp 23 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.json.gizp 3 | *.map 4 | tmp 5 | temp 6 | /examples/ 7 | /packages/ 8 | /public/ 9 | babel.config.js 10 | vue.config.js 11 | *.jpg 12 | .eslintignore 13 | 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017-present 左盐 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![npm](https://img.shields.io/npm/dw/vue-layer.svg?style=flat-square)](https://www.npmjs.com/package/vue-layer) 2 | [![npm](https://img.shields.io/bundlephobia/minzip/vue-layer.svg)](https://www.npmjs.com/package/vue-layer) 3 | [![npm](https://img.shields.io/github/package-json/v/zuoyanart/vue-layer.svg)](https://www.npmjs.com/package/vue-layer) 4 | [![npm](https://img.shields.io/npm/l/vue-layer.svg)](https://www.npmjs.com/package/vue-layer) 5 | ## vue-layer 6 | install 7 | ```shell 8 | npm install vue-layer 9 | ``` 10 | // "eslint:recommended" 11 | ## Quick Start 12 | 13 | 在程序入口添加 14 | ```js 15 | import Vue from 'vue'; 16 | import layer from 'vue-layer' 17 | import 'vue-layer/lib/vue-layer.css'; 18 | 19 | Vue.prototype.$layer = layer(Vue); 20 | ``` 21 | 全局参数重置 22 | ```js 23 | import Vue from 'vue'; 24 | import layer from 'vue-layer' 25 | Vue.prototype.$layer = layer({ 26 | msgtime: 3,//目前只有一项,即msg方法的默认消失时间,单位:秒 27 | }); 28 | ``` 29 | 调用 30 | ```js 31 | this.$layer.alert("找不到对象!"); 32 | ``` 33 | 34 | ## Attribut 35 | ```js 36 | { 37 | type: 0, //0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层) 38 | title: '信息', 39 | content: '', 40 | area: 'auto', 41 | offset: 'auto', 42 | icon: -1, 43 | btn: '确定', 44 | time: 0, 45 | shade: true,//是否显示遮罩 46 | yes: '', 47 | cancel: '', 48 | tips: [0,{}],//支持上右下左四个方向,通过1-4进行方向设定,可以设定tips: [1, '#c00'] 49 | tipsMore: false,//是否允许多个tips 50 | shadeClose: true,//点击遮罩是否关闭 51 | maxmin: true,//开启最大化最小化 52 | scrollbar: true, //是否允许浏览器出现滚动条:默认是允许 53 | resize: false //是否允许拉伸,默认是不允许 54 | } 55 | ``` 56 | ## Method 57 | ```js 58 | layer.alert(content, [options, yes]); 59 | // options和yes可以省略, 如果您不愿意写options,则可以直接写确定按钮的函数,即yes 60 | // content 可以为html 61 | //yes如果是个function,这会自动添加参数layerid, 62 | (layerid)=>{ 63 | this.$layer.close(layerid); 64 | } 65 | ``` 66 | 67 | ```js 68 | layer.confirm(content, [options, yes, cancel]); 69 | // options,yes和cancel可以省略, 如果您不愿意写options,则可以直接写确定按钮的函数,即yes,或者覆盖默认的cancel方法。PS:yes和cancel方法不能互换 70 | //content 可以为html 71 | //yes,cancel如果是个function,这会自动添加参数layerid, 72 | (layerid)=>{ 73 | this.$layer.close(layerid); 74 | } 75 | ``` 76 | 77 | ```js 78 | layer.loadding(option); 79 | // options ={time:3},3秒自动关闭 80 | //options = {content:'请等待'} //可传入文字 81 | ``` 82 | 83 | ```js 84 | layer.msg(content, [options, end]); 85 | // options和end可以省略, 如果您不愿意写options,则可以直接写时间到期的回调即可,即end方法 86 | // 默认msg的关闭时间为1.5秒 87 | // content 可以为html 88 | ``` 89 | 90 | 91 | ```js 92 | layer.prompt(options, yes); 93 | //特殊参数: value 要回显的值 94 | //formType: 1text,2password,3textarea 95 | ``` 96 | 97 | 98 | ```js 99 | layer.tips(content, follow, options); 100 | //content 可以为html 101 | //follow对css选择器,用来定位目标 102 | ``` 103 | ```js 104 | layer.iframe({ 105 | content: { 106 | content: componentName, //传递的组件对象 107 | parent: this,//当前的vue对象 108 | data:{}//props 109 | }, 110 | area:['800px','600px'], 111 | title: 'title', 112 | cancel:()=>{//关闭事件 113 | alert('关闭iframe'); 114 | } 115 | }); 116 | // data参数可认为是componentName的props,同时 该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接用来关闭该层 117 | // options参数直接写到json里即可,比如title 118 | ``` 119 | ```js 120 | layer.close(id); 121 | ``` 122 | ```js 123 | layer.closeAll(type); 124 | ``` 125 | 126 | ```js 127 | //弹窗最大化 128 | layer.full(layerid); 129 | ``` 130 | ```js 131 | //弹窗最小化 132 | layer.min(layerid); 133 | ``` 134 | ```js 135 | //还原弹窗 136 | layer.restore(layerid); 137 | ``` 138 | 139 | 140 | 141 | 142 | ### 关于this.$layer.iframe 143 | 其实使用iframe层,除了操作方便外,主要的目的是隔离代码, 降低代码复杂度。而在vue中,组件就是功能块的基本单位了,所以vue-layer中并不存在iframe的DOM元素,这里用的都是组件。 这里的content有三个参数: 144 | 145 | ##### content: 146 | 此参数为组件对象, 比如 147 | ```js 148 | import editFrom from './edir-form.vue'; 149 | ``` 150 | 此处content就为editFrom即可。 151 | 152 | ##### parent: 153 | 154 | 此参数其实就是当前调用layer的vue对象, 即this即可。在editForm中可以直接使用, this.$parent来获取调用layer的vue对象,然后父子传值神马的,就很easy,当然也可以直接使用vuex,就不用this.$parent了,另外自动注入了原始数据的浅拷贝lydata,也可以直接赋值这个数据来同步父对象的数据 155 | 156 | ##### data: 157 | 此参数可认为是editForm的props,传递到iframe后是这个数据的深拷贝,改变数据不会影响来源数据,然后你懂得。 158 | > * 该方法会自动添加一个key为layerid的值, 该值为创建层的id, 可以直接使用 159 | > * 该方法会自动添加一个key为lydata的值, 该值为data的浅拷贝, 当iframe要更改父窗口传递的数据的时候,可以直接使用lydata来修改,对于表单使用非常方便 160 | 161 | 结果即为: 162 | ```js 163 | methods:{ 164 | eidt() { 165 | this.$layer.iframe({ 166 | content: { 167 | content: editForm, //传递的组件对象 168 | parent: this,//当前的vue对象 169 | data:{ 170 | info:{a:1} 171 | }//props 172 | }, 173 | area:['800px','600px'], 174 | title:"editForm" 175 | }); 176 | } 177 | } 178 | ``` 179 | iframe组件中 180 | ```js 181 | export default { 182 | data() { 183 | return { 184 | form: { 185 | } 186 | }; 187 | }, 188 | props: { 189 | info: { 190 | type: Object, 191 | default: () => { 192 | return {}; 193 | } 194 | }, 195 | layerid: { 196 | type: String, 197 | default: "" 198 | }, 199 | lydata: { 200 | type: Object, 201 | default: () => { 202 | return {}; 203 | } 204 | }, 205 | lyoption: { 206 | type: Object, 207 | default: () => { 208 | return {}; 209 | } 210 | } 211 | }, 212 | methods: { 213 | onSubmit() { 214 | this.$layer.msg("提交成功", () => { 215 | this.lydata.info.name = this.form.name; 216 | this.$layer.close(this.layerid); 217 | }); 218 | }, 219 | cancel() { 220 | this.$layer.close(this.layerid); 221 | } 222 | }, 223 | mounted() { 224 | this.form = this.info 225 | } 226 | }; 227 | ``` 228 | 229 | 230 | ### 样式调整 231 | 该包的css都为vl-notice开头, 需要重写css样式,覆盖即可 232 | 233 | ### 觉的作者付出的时间和精力有价值,就给作者买杯咖啡吧 234 | 235 | 236 | ### 入群交流 237 | 238 | 239 | 240 | 241 | 242 | 243 | ### 更新日志 244 | 245 | 更新日志 -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/app' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /examples/App.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | 265 | 266 | 276 | -------------------------------------------------------------------------------- /examples/form.vue: -------------------------------------------------------------------------------- 1 | 9 | 61 | 62 | 173 | 174 | -------------------------------------------------------------------------------- /examples/form1.vue: -------------------------------------------------------------------------------- 1 | 9 | 27 | 28 | 118 | 119 | -------------------------------------------------------------------------------- /examples/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import layer from '../packages/layer/index'; 4 | import ElementUI from 'element-ui'; 5 | import 'element-ui/lib/theme-chalk/index.css'; 6 | 7 | Vue.prototype.$layer = layer(Vue); 8 | Vue.use(ElementUI); 9 | 10 | Vue.config.productionTip = false 11 | 12 | new Vue({ 13 | render: h => h(App), 14 | }).$mount('#app'); -------------------------------------------------------------------------------- /lib/demo.html: -------------------------------------------------------------------------------- 1 | 2 | vue-layer demo 3 | 4 | 5 | 6 | 7 | 8 | 11 | -------------------------------------------------------------------------------- /lib/img/iconfont.a3512340.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /lib/vue-layer.css: -------------------------------------------------------------------------------- 1 | .notify-btn[data-v-56ca3248]{position:relative;display:inline-block;padding:6px 10px;margin-bottom:0;font-size:14px;min-width:10px;text-align:center;white-space:nowrap;vertical-align:top;cursor:pointer;background-color:#f7f7f7;border:1px solid #dddee1;border-radius:4px;outline:0;-webkit-appearance:none}.notify-btn.active[data-v-56ca3248],.notify-btn[data-v-56ca3248]:active{color:inherit;background-color:#e3e3e3}.btn-default[data-v-56ca3248]{color:#fff;background-color:#f7f7f7;border:1px solid #eaeaea;color:#000}.btn-default.active[data-v-56ca3248],.btn-default.hover[data-v-56ca3248],.btn-default[data-v-56ca3248]:active,.btn-default[data-v-56ca3248]:hover{color:#fff;background-color:#e3e3e3}.btn-default[data-v-56ca3248]:hover{color:#000}.notify-btn-primary[data-v-56ca3248]{color:#fff;background-color:#20a0ff;border:1px solid #0695ff}.notify-btn-primary.active[data-v-56ca3248],.notify-btn-primary.hover[data-v-56ca3248],.notify-btn-primary[data-v-56ca3248]:active,.notify-btn-primary[data-v-56ca3248]:hover{color:#fff;background-color:#008df6}.notify-btn-success[data-v-56ca3248]{color:#fff;background-color:#449d44;border:1px solid #3c8b3c}.notify-btn-success.active[data-v-56ca3248],.notify-btn-success.hover[data-v-56ca3248],.notify-btn-success[data-v-56ca3248]:active,.notify-btn-success[data-v-56ca3248]:hover{color:#fff;background-color:#388138}.notify-btn-info[data-v-56ca3248]{color:#fff;background-color:#31b0d5;border:1px solid #28a1c4}.notify-btn-info.active[data-v-56ca3248],.notify-btn-info.hover[data-v-56ca3248],.notify-btn-info[data-v-56ca3248]:active,.notify-btn-info[data-v-56ca3248]:hover{color:#fff;background-color:#2597b8}.notify-btn-warning[data-v-56ca3248]{color:#fff;background-color:#ec971f;border:1px solid #df8a13}.notify-btn-warning.active[data-v-56ca3248],.notify-btn-warning.hover[data-v-56ca3248],.notify-btn-warning[data-v-56ca3248]:active,.notify-btn-warning[data-v-56ca3248]:hover{color:#fff;background-color:#d18112}.notify-btn-danger[data-v-56ca3248]{color:#fff;background-color:#d9534f;border:1px solid #d43f3a}.notify-btn-danger.active[data-v-56ca3248],.notify-btn-danger.hover[data-v-56ca3248],.notify-btn-danger[data-v-56ca3248]:active,.notify-btn-danger[data-v-56ca3248]:hover{color:#fff;background-color:#d2322d}.btn-small[data-v-56ca3248]{font-size:12px;min-width:31px;min-height:14px;padding:6px 9px}.vl-input[data-v-6c69dd9a]{height:35px;line-height:35px;padding:0 15px}.vl-input[data-v-6c69dd9a],.vl-textarea[data-v-6c69dd9a]{width:100%;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;color:#606266;display:inline-block;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);-webkit-box-sizing:border-box;box-sizing:border-box}.vl-textarea[data-v-6c69dd9a]{line-height:22px;padding:10px;word-break:break-all;height:calc(100% - 70px)}.prompt-btn[data-v-6c69dd9a]{margin-top:30px;text-align:right}.prompt-btn button[data-v-6c69dd9a]{margin-right:20px}@font-face{font-family:vlayer;src:url(data:application/vnd.ms-fontobject;base64,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BQX0tNj+4gUFAR7Y2AEdBgb+49gSFRUjFQEBFRESFRUjFRUxBfS0tfQEBPS1tPQDowX+4tjY/uMGBgEd2NgBHuUVEv7IERUVEQE4EhX+LBUkFBQkFQAAAAAE/+3/bQQTA5MADwATACIAMQAAASEOAQcRHgEXIT4BNxEuAQMhESEBPgE3IRU3JxUhDgEHFTMXIT4BNzUjFQ4BByE1BxcDv/yCJC4BAS4kA34kLgEBLiT8ggN+/WEBFxIBWY+P/qc1RgFSPQFZNUYBUgEXEv6nj48DkgEuJPyCJC4BAS4kA34kLvwwA37+qhIXAUNsbUQBRjV51gJGNXh4EhcBQ2xtAAAEAAD/ggP+A34AFwAvAEcAXwAAFzMyFhQGByEuAScRPgEyFh0BATYyFhQHASMiJjQ2NyEeARcRDgEiJj0BAQYiJjQ3ATU0NjIWFxEOAQchLgE0NjsBASY0NjIXARUUBiImJxE+ATchHgEUBisBARYUBiInf8sPFRUP/t0QFAEBFB8VAQAMHRUKAgPMDxUVDwEjEBQBARQfFf8ACx4VCgE0FR8UAQEUEP7dDxUVD8v/AAoVHgv9lhUfFAEBFBABIw8VFQ/LAQAKFR0MNRUfFAEBFBABIw8VFQ/MAQEKFR4LAmoVHxQBARQQ/t0PFRUPy/8AChUdDP3Kyw8VFQ/+3RAUAQEUHxUBAAseFQoCAssPFRUPASMQFAEBFB8V/wAMHRUKAAAAAAASAN4AAQAAAAAAAAAVAAAAAQAAAAAAAQAGABUAAQAAAAAAAgAHABsAAQAAAAAAAwAGACIAAQAAAAAABAAGACgAAQAAAAAABQALAC4AAQAAAAAABgAGADkAAQAAAAAACgArAD8AAQAAAAAACwATAGoAAwABBAkAAAAqAH0AAwABBAkAAQAMAKcAAwABBAkAAgAOALMAAwABBAkAAwAMAMEAAwABBAkABAAMAM0AAwABBAkABQAWANkAAwABBAkABgAMAO8AAwABBAkACgBWAPsAAwABBAkACwAmAVEKQ3JlYXRlZCBieSBpY29uZm9udAp2bGF5ZXJSZWd1bGFydmxheWVydmxheWVyVmVyc2lvbiAxLjB2bGF5ZXJHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQAKAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQACgB2AGwAYQB5AGUAcgBSAGUAZwB1AGwAYQByAHYAbABhAHkAZQByAHYAbABhAHkAZQByAFYAZQByAHMAaQBvAG4AIAAxAC4AMAB2AGwAYQB5AGUAcgBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAQIBAwEEAQUBBgEHAQgBCQAFd2VudGkFZXJyb3IHc3VjY2VzcwRtaW5pB3dhcm5pbmcIaHVhbnl1YW4DbWF4AAAA);src:url(data:application/vnd.ms-fontobject;base64,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BQX0tNj+4gUFAR7Y2AEdBgb+49gSFRUjFQEBFRESFRUjFRUxBfS0tfQEBPS1tPQDowX+4tjY/uMGBgEd2NgBHuUVEv7IERUVEQE4EhX+LBUkFBQkFQAAAAAE/+3/bQQTA5MADwATACIAMQAAASEOAQcRHgEXIT4BNxEuAQMhESEBPgE3IRU3JxUhDgEHFTMXIT4BNzUjFQ4BByE1BxcDv/yCJC4BAS4kA34kLgEBLiT8ggN+/WEBFxIBWY+P/qc1RgFSPQFZNUYBUgEXEv6nj48DkgEuJPyCJC4BAS4kA34kLvwwA37+qhIXAUNsbUQBRjV51gJGNXh4EhcBQ2xtAAAEAAD/ggP+A34AFwAvAEcAXwAAFzMyFhQGByEuAScRPgEyFh0BATYyFhQHASMiJjQ2NyEeARcRDgEiJj0BAQYiJjQ3ATU0NjIWFxEOAQchLgE0NjsBASY0NjIXARUUBiImJxE+ATchHgEUBisBARYUBiInf8sPFRUP/t0QFAEBFB8VAQAMHRUKAgPMDxUVDwEjEBQBARQfFf8ACx4VCgE0FR8UAQEUEP7dDxUVD8v/AAoVHgv9lhUfFAEBFBABIw8VFQ/LAQAKFR0MNRUfFAEBFBABIw8VFQ/MAQEKFR4LAmoVHxQBARQQ/t0PFRUPy/8AChUdDP3Kyw8VFQ/+3RAUAQEUHxUBAAseFQoCAssPFRUPASMQFAEBFB8V/wAMHRUKAAAAAAASAN4AAQAAAAAAAAAVAAAAAQAAAAAAAQAGABUAAQAAAAAAAgAHABsAAQAAAAAAAwAGACIAAQAAAAAABAAGACgAAQAAAAAABQALAC4AAQAAAAAABgAGADkAAQAAAAAACgArAD8AAQAAAAAACwATAGoAAwABBAkAAAAqAH0AAwABBAkAAQAMAKcAAwABBAkAAgAOALMAAwABBAkAAwAMAMEAAwABBAkABAAMAM0AAwABBAkABQAWANkAAwABBAkABgAMAO8AAwABBAkACgBWAPsAAwABBAkACwAmAVEKQ3JlYXRlZCBieSBpY29uZm9udAp2bGF5ZXJSZWd1bGFydmxheWVydmxheWVyVmVyc2lvbiAxLjB2bGF5ZXJHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQAKAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQACgB2AGwAYQB5AGUAcgBSAGUAZwB1AGwAYQByAHYAbABhAHkAZQByAHYAbABhAHkAZQByAFYAZQByAHMAaQBvAG4AIAAxAC4AMAB2AGwAYQB5AGUAcgBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAQIBAwEEAQUBBgEHAQgBCQAFd2VudGkFZXJyb3IHc3VjY2VzcwRtaW5pB3dhcm5pbmcIaHVhbnl1YW4DbWF4AAAA#iefix) format("embedded-opentype"),url("data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAV0AAsAAAAAC0gAAAUlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDdAqJEIc1ATYCJAMgCxIABCAFhFUHYxuSCRGVpB+Q/TiwG6/2sC8uo0XES9qRzSd4INxe3+UuEMxrSNVpZxJmjtbN+X8mCjPlzz2HczZgo06oktwTefRZdknaEDwLJViZRwYbDsUXYvL/jpVuPl9bzG+LtiTzZ6NybKPyio60nke0FciBN98J45lI518yoSleXGfdDAE4SdAJkbn4yiwGCmUSqBs3euRgjIIb1SESGDZbw4kKsQkdQ1utvQhsjN5ffEMPYYCGLlEXuXbERcM4v6Y3eOUiaxH95FZEs7sgMNgSJNAJUOxe0xheg0wynZA4Z6WKAYBf/qKEml6L1TrUirVhtTkNXsuqjMIsNhrCv3igI5DYUGjYQdhQZjcJh2XtUNONicgSgxMBSwc4kbAU4cQGyzA4UbDMgRIaNHg7sANguBP8QBMQ14L4DGVNs1EXq3wNi5Xb3VI4NGdUicljShx+5fM1Uhef++bn2be+yFUbCpXarEolX60W3nor9+abA/Q1sovKa+vFwVfeei2+7cZ2px5tRmlTsfeWjvVPJCuVfs7dvfVaXLfm1FAxcBubXTfsennD8GsHV2r5FmwPvvn5nO0iIeHmPw9Htzl3RMP5G3Ijr+sbwD9+zYVztpjOrjmFduhkU7mnrpijgzewuG6u/84Hm9n2P9QrcM8jSfuBh2f57YFJe+vbeijkcT/5ZgpXzvNMtaVwsutUK7fI5nKuteVFp8LuHXVRubO+z6DvzspB4ZnONXWL62Oe7eWItu0UmBDZbWCx0WKxB51Tf5Ixlyu/o8IiM1jkQTen/iRjTmdue2WDaErOrahEQlWEOLT6rMkztXyP+u03BcM9jBji137NFKUiF/oyybRP+S4D5Xk9cN+LtrTfTJj+NL/13FmWmKWSmT7N9n0X2ZDjmyh9/7aeSulvB4SR9dzk2Xr/Q+rffxUMDzFCz+XGwRa7d7cYg2ashZ8qmdLfEeKWvaO42XP09vvUH3+o+4gQWj0/wZf9VwWGGrcuZ8/eHvPmBUM9cd779ZSvkd3uVL/8Iu+Qd5Lxzj6BWN2p7mh2mUerKh5XVRHHm1V1Z7Nm9iLVZvHq58FM8PRApmWG00XG/0ZB0spsabba7axftizo9oFcID/oFiU089UF6rIHcmKEv2RuGLthXKZ0/kUXqdnXn/1W6YI4Puv6WfWMBekXrt9vMz9u+WNPX0tvOpnxvWhxXzyT2KONfnGyxQuWVU5k4nt79vLvTntb+nr+2PJjE5w9qhLl0cKxN45H3sdAAKxl8l85D6xFCrkYQP4m7pvdbrG05CzrO2v8LCS3grVE/i8X/BXuxq/K4s//BvoOf7uuAnincJaJhrgKg4aB5ovv7KiD851+rlMeo9NJBn21m1dgGGSOlAacEgeL4kF/u7RGvM38t6yRDDR2TUGyacFVwnagc+litIn1DIBTRyenu4QMpkQf6OAjAMHtJGi87gDJ7TGuEr4EuqhPsHH7AZzy/i/o0ibXbS4CkoR72L1AT61h+qS0KYq8YLhFnhUJU40zPFJX7K2BtmpKgRs0VrfpIbHwLiUGLFgN11u5HSplwQU7IE2VSMlt65o1vVJFrR5tmAJEJGgP7LwAPcoymDs82ZhBIV6g4DYIc7myODSOZOZHCkf95iuDVqXp5N6YTTL20K1RwXWSBBkwqcDSbL0+GSMOCDIWcM3GYV5JJRWxQcrZqmUp5muuLsqqn10jmEI9tZGRmWZl5+Tm0T+a1M8xBBuWMVOKMc50b/rlEwmuxfCVyMS8mLKpJs+jEQAAAA==") format("woff2"),url(data:font/woff;base64,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) format("woff"),url(data:font/ttf;base64,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) format("truetype"),url(img/iconfont.a3512340.svg#vlayer) format("svg")}.vlayer{font-family:vlayer!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.vlicon-wenti:before{content:"\e617"}.vlicon-error:before{content:"\e67a"}.vlicon-success:before{content:"\e62a"}.vlicon-mini:before{content:"\e664"}.vlicon-warning:before{content:"\e605"}.vlicon-huanyuan:before{content:"\e658"}.vlicon-max:before{content:"\e70e"}[class^=vl-notify]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;margin:0;outline:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@-webkit-keyframes fadein{0%{opacity:0;-webkit-transform:scale(.5) translate(-100%,-100%);transform:scale(.5) translate(-100%,-100%)}to{opacity:1;-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}}@keyframes fadein{0%{opacity:0;-webkit-transform:scale(.5) translate(-100%,-100%);transform:scale(.5) translate(-100%,-100%)}to{opacity:1;-webkit-transform:scale(1) translate(-50%,-50%);transform:scale(1) translate(-50%,-50%)}}.vl-html-scrollbar-hidden{overflow-y:hidden!important}.vl-notify{position:fixed;z-index:1000;-webkit-box-sizing:border-box;box-sizing:border-box}.vl-notify,.vl-notify.vl-notify-msg-p{left:50%;top:50%;-webkit-transform:perspective(1px) translate(-50%,-50%);transform:perspective(1px) translate(-50%,-50%);-ms-transform:perspective(1px) translate(-50%,-50%)}.vl-notify.vl-notify-msg-p{display:inline;height:0;background-color:rgba(0,0,0,.6)}.vl-notify.vl-notify-tips-p{display:inline;height:0;top:0;left:0;position:absolute}.vl-notify.vl-notify-main{min-width:250px;max-width:1500px;min-height:100px;background-color:#fff;border:1px solid #eee;-webkit-box-shadow:1px 1px 15px rgba(0,0,0,.3);box-shadow:1px 1px 15px rgba(0,0,0,.3);border-radius:2px;padding-bottom:5px}.vl-notify .vl-notify-content{min-height:65px;padding:20px;max-height:calc(100% - 42px)}.vl-notify .vl-notify-content iframe{width:100%;height:100%;border:none;overflow:none}.vl-notify .vl-notify-btns{text-align:right;padding:0 8px 0 0}.vl-notify.vl-notify-alert{-webkit-animation:fadein .3s;animation:fadein .3s;max-width:500px}.vl-notify.vl-notify-alert h2.vl-notice-title{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:42px;line-height:43px;background-color:#f8f8f8;border-bottom:1px solid #eee;font-size:14px;padding-left:15px;cursor:move;-moz-user-select:-moz-none;-webkit-user-select:none;margin:0;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;z-index:100000;word-break:keep-all;overflow:hidden}.vl-notify.vl-notify-alert h2.vl-notice-title .lv-title{text-overflow:ellipsis;-webkit-box-flex:1;-ms-flex:1;flex:1;height:100%}.vl-notify.vl-notify-alert h2.vl-notice-title .icon-remove{position:absolute;right:10px;font-size:14px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);top:0;font-weight:400;cursor:pointer;color:#333;font-style:normal}.vl-notify.vl-notify-alert h2.vl-notice-title .icon-remove:before{content:"\2716"}.vl-notify.vl-notify-alert h2.vl-notice-title .lv-icon-maxmini{min-width:10px;font-size:14px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);font-weight:400;cursor:pointer;color:#333;font-style:normal;margin-right:25px}.vl-notify.vl-notify-alert h2.vl-notice-title .lv-icon-maxmini i{margin:0 3px;font-size:14px;text-shadow:0 1px 0 hsla(0,0%,100%,.5);font-weight:400;cursor:pointer;color:#333;font-style:normal}.vl-notify.vl-notify-alert .vl-notify-content{display:-webkit-box;display:-ms-flexbox;display:flex}.vl-notify.vl-notify-alert .vl-notify-content .vl-notify-content-div{margin-left:10px;-webkit-box-flex:1;-ms-flex:1;flex:1}.vl-notify.vl-notify-iframe{max-width:2000px}.vl-notify.vl-notify-iframe .vl-notify-content{padding:0}.vl-notify.vl-notify-loading{-webkit-animation:fadein .2s;animation:fadein .2s;display:inline-block;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);min-width:50px;min-height:50px;display:none}.vl-notify.vl-notify-loading:last-child{display:inline-block!important}@-webkit-keyframes loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.vl-notify.vl-notify-loading span{display:inline-block;width:30px;height:30px;border:2px solid #f3f3f3;border-top:2px solid #999;border-right:2px solid #999;border-radius:50%;-webkit-animation:loading 1s linear infinite;animation:loading 1s linear infinite}.vl-notify.vl-notify-msg{-webkit-animation:fadein .2s;animation:fadein .2s;min-width:50px;display:inline;min-height:44px;font-size:14px;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);background-color:rgba(0,0,0,.6);color:#fff;padding:12px 25px;text-align:center;border-radius:5px}.vl-notify.vl-notify-msg.vl-notify-loading{min-height:50px}.vl-notify.vl-notify-msg.vl-notify-loading span{width:20px;height:20px;vertical-align:middle;margin-right:7px}.vl-notify.vl-notify-msg.vl-notify-loading i{font-style:normal;font-size:14px}.vl-notify.vl-notify-tips{min-width:50px;max-width:400px;display:inline;min-height:32px;position:absolute;left:-50%;background-color:#303133;color:#fff;padding:6px 12px;border-radius:5px;-webkit-transform:none;transform:none}.vl-notify.vl-notify-tips:after{content:" ";border:10px solid #303133;position:absolute;display:inline-block}.vl-notify.vl-notify-tips-0:after{border-bottom-color:transparent!important;left:15px;bottom:-8px}.vl-notify.vl-notify-tips-0:after,.vl-notify.vl-notify-tips-1:after{border-top-color:transparent!important;border-right-color:transparent!important}.vl-notify.vl-notify-tips-1:after{border-left-color:transparent!important;left:-8px;top:0}.vl-notify.vl-notify-tips-2:after{border-top-color:transparent!important;border-left-color:transparent!important;border-bottom-color:transparent!important;left:15px;top:-8px}.vl-notify.vl-notify-tips-3{max-width:300px}.vl-notify.vl-notify-tips-3:after{border-top-color:transparent!important;border-left-color:transparent!important;border-right-color:transparent!important;right:-8px;top:0}.vl-notify .vl-drag-resize{display:inline-block;width:17px;height:17px;position:absolute;right:0;bottom:0;z-index:100000;cursor:nw-resize;background:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cpath d='M765.558 510.004a93.65 93.65 0 10191.665 0 93.65 93.65 0 10-191.665 0zm0 311.456a93.65 93.65 0 10191.665 0 93.65 93.65 0 10-191.665 0zm-343.401 0a93.65 93.65 0 10191.665 0 93.65 93.65 0 10-191.665 0zm0-311.456a93.65 93.65 0 10191.665 0 93.65 93.65 0 10-191.665 0zM765.558 202.54a93.65 93.65 0 10191.665 0 93.65 93.65 0 10-191.665 0zM66.777 821.46a93.65 93.65 0 10191.665 0 93.65 93.65 0 10-191.665 0z' fill='%23BFBFBF'/%3E%3C/svg%3E") no-repeat 50%}.vl-notify-mask{background-color:#ccc;opacity:.4;position:fixed;top:0;left:0;width:100%;height:100%} -------------------------------------------------------------------------------- /lib/vue-layer.umd.min.js: -------------------------------------------------------------------------------- 1 | (function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e():"function"===typeof define&&define.amd?define([],e):"object"===typeof exports?exports["vue-layer"]=e():t["vue-layer"]=e()})("undefined"!==typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fb15")}({"00ee":function(t,e,n){var r=n("b622"),o=r("toStringTag"),i={};i[o]="z",t.exports="[object z]"===String(i)},"0366":function(t,e,n){var r=n("1c0b");t.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 0:return function(){return t.call(e)};case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,o){return t.call(e,n,r,o)}}return function(){return t.apply(e,arguments)}}},"06cf":function(t,e,n){var r=n("83ab"),o=n("d1e7"),i=n("5c6c"),c=n("fc6a"),a=n("c04e"),s=n("5135"),u=n("0cfb"),f=Object.getOwnPropertyDescriptor;e.f=r?f:function(t,e){if(t=c(t),e=a(e,!0),u)try{return f(t,e)}catch(n){}if(s(t,e))return i(!o.f.call(t,e),t[e])}},"0cb2":function(t,e,n){var r=n("7b0b"),o=Math.floor,i="".replace,c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,a=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,n,s,u,f){var l=n+t.length,p=s.length,d=a;return void 0!==u&&(u=r(u),d=c),i.call(f,d,(function(r,i){var c;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(l);case"<":c=u[i.slice(1,-1)];break;default:var a=+i;if(0===a)return r;if(a>p){var f=o(a/10);return 0===f?r:f<=p?void 0===s[f-1]?i.charAt(1):s[f-1]+i.charAt(1):r}c=s[a-1]}return void 0===c?"":c}))}},"0cfb":function(t,e,n){var r=n("83ab"),o=n("d039"),i=n("cc12");t.exports=!r&&!o((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},"14c3":function(t,e,n){var r=n("c6b6"),o=n("9263");t.exports=function(t,e){var n=t.exec;if("function"===typeof n){var i=n.call(t,e);if("object"!==typeof i)throw TypeError("RegExp exec method returned something other than an Object or null");return i}if("RegExp"!==r(t))throw TypeError("RegExp#exec called on incompatible receiver");return o.call(t,e)}},"159b":function(t,e,n){var r=n("da84"),o=n("fdbc"),i=n("17c2"),c=n("9112");for(var a in o){var s=r[a],u=s&&s.prototype;if(u&&u.forEach!==i)try{c(u,"forEach",i)}catch(f){u.forEach=i}}},"17c2":function(t,e,n){"use strict";var r=n("b727").forEach,o=n("a640"),i=o("forEach");t.exports=i?[].forEach:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}},"19aa":function(t,e){t.exports=function(t,e,n){if(!(t instanceof e))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return t}},"1be4":function(t,e,n){var r=n("d066");t.exports=r("document","documentElement")},"1c0b":function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},"1c7e":function(t,e,n){var r=n("b622"),o=r("iterator"),i=!1;try{var c=0,a={next:function(){return{done:!!c++}},return:function(){i=!0}};a[o]=function(){return this},Array.from(a,(function(){throw 2}))}catch(s){}t.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var r={};r[o]=function(){return{next:function(){return{done:n=!0}}}},t(r)}catch(s){}return n}},"1cdc":function(t,e,n){var r=n("342f");t.exports=/(iphone|ipod|ipad).*applewebkit/i.test(r)},"1d80":function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},"1dde":function(t,e,n){var r=n("d039"),o=n("b622"),i=n("2d00"),c=o("species");t.exports=function(t){return i>=51||!r((function(){var e=[],n=e.constructor={};return n[c]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},2005:function(t,e,n){},2266:function(t,e,n){var r=n("825a"),o=n("e95a"),i=n("50c4"),c=n("0366"),a=n("35a1"),s=n("2a62"),u=function(t,e){this.stopped=t,this.result=e};t.exports=function(t,e,n){var f,l,p,d,v,h,m,y=n&&n.that,g=!(!n||!n.AS_ENTRIES),b=!(!n||!n.IS_ITERATOR),x=!(!n||!n.INTERRUPTED),w=c(e,y,1+g+x),E=function(t){return f&&s(f),new u(!0,t)},S=function(t){return g?(r(t),x?w(t[0],t[1],E):w(t[0],t[1])):x?w(t,E):w(t)};if(b)f=t;else{if(l=a(t),"function"!=typeof l)throw TypeError("Target is not iterable");if(o(l)){for(p=0,d=i(t.length);d>p;p++)if(v=S(t[p]),v&&v instanceof u)return v;return new u(!1)}f=l.call(t)}h=f.next;while(!(m=h.call(f)).done){try{v=S(m.value)}catch(T){throw s(f),T}if("object"==typeof v&&v&&v instanceof u)return v}return new u(!1)}},"23cb":function(t,e,n){var r=n("a691"),o=Math.max,i=Math.min;t.exports=function(t,e){var n=r(t);return n<0?o(n+e,0):i(n,e)}},"23e7":function(t,e,n){var r=n("da84"),o=n("06cf").f,i=n("9112"),c=n("6eeb"),a=n("ce4e"),s=n("e893"),u=n("94ca");t.exports=function(t,e){var n,f,l,p,d,v,h=t.target,m=t.global,y=t.stat;if(f=m?r:y?r[h]||a(h,{}):(r[h]||{}).prototype,f)for(l in e){if(d=e[l],t.noTargetGet?(v=o(f,l),p=v&&v.value):p=f[l],n=u(m?l:h+(y?".":"#")+l,t.forced),!n&&void 0!==p){if(typeof d===typeof p)continue;s(d,p)}(t.sham||p&&p.sham)&&i(d,"sham",!0),c(f,l,d,t)}}},"241c":function(t,e,n){var r=n("ca84"),o=n("7839"),i=o.concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return r(t,i)}},2626:function(t,e,n){"use strict";var r=n("d066"),o=n("9bf2"),i=n("b622"),c=n("83ab"),a=i("species");t.exports=function(t){var e=r(t),n=o.f;c&&e&&!e[a]&&n(e,a,{configurable:!0,get:function(){return this}})}},"2a62":function(t,e,n){var r=n("825a");t.exports=function(t){var e=t["return"];if(void 0!==e)return r(e.call(t)).value}},"2cf4":function(t,e,n){var r,o,i,c=n("da84"),a=n("d039"),s=n("0366"),u=n("1be4"),f=n("cc12"),l=n("1cdc"),p=n("605d"),d=c.location,v=c.setImmediate,h=c.clearImmediate,m=c.process,y=c.MessageChannel,g=c.Dispatch,b=0,x={},w="onreadystatechange",E=function(t){if(x.hasOwnProperty(t)){var e=x[t];delete x[t],e()}},S=function(t){return function(){E(t)}},T=function(t){E(t.data)},_=function(t){c.postMessage(t+"",d.protocol+"//"+d.host)};v&&h||(v=function(t){var e=[],n=1;while(arguments.length>n)e.push(arguments[n++]);return x[++b]=function(){("function"==typeof t?t:Function(t)).apply(void 0,e)},r(b),b},h=function(t){delete x[t]},p?r=function(t){m.nextTick(S(t))}:g&&g.now?r=function(t){g.now(S(t))}:y&&!l?(o=new y,i=o.port2,o.port1.onmessage=T,r=s(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts&&d&&"file:"!==d.protocol&&!a(_)?(r=_,c.addEventListener("message",T,!1)):r=w in f("script")?function(t){u.appendChild(f("script"))[w]=function(){u.removeChild(this),E(t)}}:function(t){setTimeout(S(t),0)}),t.exports={set:v,clear:h}},"2d00":function(t,e,n){var r,o,i=n("da84"),c=n("342f"),a=i.process,s=a&&a.versions,u=s&&s.v8;u?(r=u.split("."),o=r[0]+r[1]):c&&(r=c.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=c.match(/Chrome\/(\d+)/),r&&(o=r[1]))),t.exports=o&&+o},"342f":function(t,e,n){var r=n("d066");t.exports=r("navigator","userAgent")||""},"35a1":function(t,e,n){var r=n("f5df"),o=n("3f8c"),i=n("b622"),c=i("iterator");t.exports=function(t){if(void 0!=t)return t[c]||t["@@iterator"]||o[r(t)]}},"3a3b":function(t,e,n){"use strict";n("bfed")},"3a87":function(t,e,n){"use strict";n("2005")},"3f8c":function(t,e){t.exports={}},"428f":function(t,e,n){var r=n("da84");t.exports=r},"44ad":function(t,e,n){var r=n("d039"),o=n("c6b6"),i="".split;t.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(t){return"String"==o(t)?i.call(t,""):Object(t)}:Object},"44de":function(t,e,n){var r=n("da84");t.exports=function(t,e){var n=r.console;n&&n.error&&(1===arguments.length?n.error(t):n.error(t,e))}},"466d":function(t,e,n){"use strict";var r=n("d784"),o=n("825a"),i=n("50c4"),c=n("1d80"),a=n("8aa5"),s=n("14c3");r("match",1,(function(t,e,n){return[function(e){var n=c(this),r=void 0==e?void 0:e[t];return void 0!==r?r.call(e,n):new RegExp(e)[t](String(n))},function(t){var r=n(e,t,this);if(r.done)return r.value;var c=o(t),u=String(this);if(!c.global)return s(c,u);var f=c.unicode;c.lastIndex=0;var l,p=[],d=0;while(null!==(l=s(c,u))){var v=String(l[0]);p[d]=v,""===v&&(c.lastIndex=a(u,i(c.lastIndex),f)),d++}return 0===d?null:p}]}))},4840:function(t,e,n){var r=n("825a"),o=n("1c0b"),i=n("b622"),c=i("species");t.exports=function(t,e){var n,i=r(t).constructor;return void 0===i||void 0==(n=r(i)[c])?e:o(n)}},4930:function(t,e,n){var r=n("605d"),o=n("2d00"),i=n("d039");t.exports=!!Object.getOwnPropertySymbols&&!i((function(){return!Symbol.sham&&(r?38===o:o>37&&o<41)}))},"4d64":function(t,e,n){var r=n("fc6a"),o=n("50c4"),i=n("23cb"),c=function(t){return function(e,n,c){var a,s=r(e),u=o(s.length),f=i(c,u);if(t&&n!=n){while(u>f)if(a=s[f++],a!=a)return!0}else for(;u>f;f++)if((t||f in s)&&s[f]===n)return t||f||0;return!t&&-1}};t.exports={includes:c(!0),indexOf:c(!1)}},"50c4":function(t,e,n){var r=n("a691"),o=Math.min;t.exports=function(t){return t>0?o(r(t),9007199254740991):0}},5135:function(t,e){var n={}.hasOwnProperty;t.exports=function(t,e){return n.call(t,e)}},5319:function(t,e,n){"use strict";var r=n("d784"),o=n("825a"),i=n("50c4"),c=n("a691"),a=n("1d80"),s=n("8aa5"),u=n("0cb2"),f=n("14c3"),l=Math.max,p=Math.min,d=function(t){return void 0===t?t:String(t)};r("replace",2,(function(t,e,n,r){var v=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,h=r.REPLACE_KEEPS_$0,m=v?"$":"$0";return[function(n,r){var o=a(this),i=void 0==n?void 0:n[t];return void 0!==i?i.call(n,o,r):e.call(String(o),n,r)},function(t,r){if(!v&&h||"string"===typeof r&&-1===r.indexOf(m)){var a=n(e,t,this,r);if(a.done)return a.value}var y=o(t),g=String(this),b="function"===typeof r;b||(r=String(r));var x=y.global;if(x){var w=y.unicode;y.lastIndex=0}var E=[];while(1){var S=f(y,g);if(null===S)break;if(E.push(S),!x)break;var T=String(S[0]);""===T&&(y.lastIndex=s(g,i(y.lastIndex),w))}for(var _="",k=0,L=0;L=k&&(_+=g.slice(k,j)+z,k=j+C.length)}return _+g.slice(k)}]}))},5692:function(t,e,n){var r=n("c430"),o=n("c6cd");(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.9.1",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},"56ef":function(t,e,n){var r=n("d066"),o=n("241c"),i=n("7418"),c=n("825a");t.exports=r("Reflect","ownKeys")||function(t){var e=o.f(c(t)),n=i.f;return n?e.concat(n(t)):e}},"5c6c":function(t,e){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},"605d":function(t,e,n){var r=n("c6b6"),o=n("da84");t.exports="process"==r(o.process)},6547:function(t,e,n){var r=n("a691"),o=n("1d80"),i=function(t){return function(e,n){var i,c,a=String(o(e)),s=r(n),u=a.length;return s<0||s>=u?t?"":void 0:(i=a.charCodeAt(s),i<55296||i>56319||s+1===u||(c=a.charCodeAt(s+1))<56320||c>57343?t?a.charAt(s):i:t?a.slice(s,s+2):c-56320+(i-55296<<10)+65536)}};t.exports={codeAt:i(!1),charAt:i(!0)}},"65f0":function(t,e,n){var r=n("861d"),o=n("e8b5"),i=n("b622"),c=i("species");t.exports=function(t,e){var n;return o(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!o(n.prototype)?r(n)&&(n=n[c],null===n&&(n=void 0)):n=void 0),new(void 0===n?Array:n)(0===e?0:e)}},"69f3":function(t,e,n){var r,o,i,c=n("7f9a"),a=n("da84"),s=n("861d"),u=n("9112"),f=n("5135"),l=n("c6cd"),p=n("f772"),d=n("d012"),v=a.WeakMap,h=function(t){return i(t)?o(t):r(t,{})},m=function(t){return function(e){var n;if(!s(e)||(n=o(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return n}};if(c){var y=l.state||(l.state=new v),g=y.get,b=y.has,x=y.set;r=function(t,e){return e.facade=t,x.call(y,t,e),e},o=function(t){return g.call(y,t)||{}},i=function(t){return b.call(y,t)}}else{var w=p("state");d[w]=!0,r=function(t,e){return e.facade=t,u(t,w,e),e},o=function(t){return f(t,w)?t[w]:{}},i=function(t){return f(t,w)}}t.exports={set:r,get:o,has:i,enforce:h,getterFor:m}},"6eeb":function(t,e,n){var r=n("da84"),o=n("9112"),i=n("5135"),c=n("ce4e"),a=n("8925"),s=n("69f3"),u=s.get,f=s.enforce,l=String(String).split("String");(t.exports=function(t,e,n,a){var s,u=!!a&&!!a.unsafe,p=!!a&&!!a.enumerable,d=!!a&&!!a.noTargetGet;"function"==typeof n&&("string"!=typeof e||i(n,"name")||o(n,"name",e),s=f(n),s.source||(s.source=l.join("string"==typeof e?e:""))),t!==r?(u?!d&&t[e]&&(p=!0):delete t[e],p?t[e]=n:o(t,e,n)):p?t[e]=n:c(e,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&u(this).source||a(this)}))},"72af":function(t,e,n){"use strict";n("b2a0")},7418:function(t,e){e.f=Object.getOwnPropertySymbols},7839:function(t,e){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},"7b0b":function(t,e,n){var r=n("1d80");t.exports=function(t){return Object(r(t))}},"7f9a":function(t,e,n){var r=n("da84"),o=n("8925"),i=r.WeakMap;t.exports="function"===typeof i&&/native code/.test(o(i))},"825a":function(t,e,n){var r=n("861d");t.exports=function(t){if(!r(t))throw TypeError(String(t)+" is not an object");return t}},"83ab":function(t,e,n){var r=n("d039");t.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},8418:function(t,e,n){"use strict";var r=n("c04e"),o=n("9bf2"),i=n("5c6c");t.exports=function(t,e,n){var c=r(e);c in t?o.f(t,c,i(0,n)):t[c]=n}},"861d":function(t,e){t.exports=function(t){return"object"===typeof t?null!==t:"function"===typeof t}},8875:function(t,e,n){var r,o,i;(function(n,c){o=[],r=c,i="function"===typeof r?r.apply(e,o):r,void 0===i||(t.exports=i)})("undefined"!==typeof self&&self,(function(){function t(){var e=Object.getOwnPropertyDescriptor(document,"currentScript");if(!e&&"currentScript"in document&&document.currentScript)return document.currentScript;if(e&&e.get!==t&&document.currentScript)return document.currentScript;try{throw new Error}catch(d){var n,r,o,i=/.*at [^(]*\((.*):(.+):(.+)\)$/gi,c=/@([^@]*):(\d+):(\d+)\s*$/gi,a=i.exec(d.stack)||c.exec(d.stack),s=a&&a[1]||!1,u=a&&a[2]||!1,f=document.location.href.replace(document.location.hash,""),l=document.getElementsByTagName("script");s===f&&(n=document.documentElement.outerHTML,r=new RegExp("(?:[^\\n]+?\\n){0,"+(u-2)+"}[^<]* 10 | 11 | 14 | -------------------------------------------------------------------------------- /packages/layer/index.js: -------------------------------------------------------------------------------- 1 | import layer from './src/layer.js' 2 | 3 | // 为组件提供 install 安装方法,供按需引入 4 | layer.install = function (Vue) { 5 | Vue.component('layer', layer); 6 | } 7 | 8 | // 默认导出组件 9 | export default layer; -------------------------------------------------------------------------------- /packages/layer/src/alert.vue: -------------------------------------------------------------------------------- 1 | 9 | 46 | 47 | 98 | -------------------------------------------------------------------------------- /packages/layer/src/components/button/button.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | 23 | 58 | -------------------------------------------------------------------------------- /packages/layer/src/components/button/css/button.less: -------------------------------------------------------------------------------- 1 | @import "var.less"; 2 | @import "mixin.less"; //button按钮生成工厂 3 | 4 | .btn-css(@bgcolor: @btn-primary-bgcolor) { 5 | color: @btn-color; 6 | background-color: @bgcolor; 7 | .border(darken(@bgcolor,5%)); 8 | 9 | &.hover, 10 | &:hover { 11 | color: #fff; 12 | background-color: darken(@bgcolor, 8%); 13 | } 14 | 15 | &.active, 16 | &:active { 17 | color: #fff; 18 | background-color: darken(@bgcolor, 8%); 19 | } 20 | } 21 | //具体样式 22 | //--------------------------------------------- 23 | 24 | .notify-btn { 25 | position: relative; 26 | display: inline-block; 27 | padding: 6px 10px; 28 | margin-bottom: 0; 29 | font-size: @btn-font-size; 30 | min-width: 10px; 31 | text-align: center; 32 | white-space: nowrap; 33 | vertical-align: top; 34 | cursor: pointer; 35 | background-color: #f7f7f7; 36 | border: 1px solid #dddee1; 37 | border-radius: 4px; 38 | outline: 0; 39 | -webkit-appearance: none; 40 | 41 | &.active, 42 | &:active { 43 | color: inherit; 44 | // background-color: #f7f7f7; 45 | background-color: darken(#f7f7f7, 8%);; 46 | } 47 | } 48 | 49 | .btn-default { 50 | .btn-css(#f7f7f7); 51 | color: #000; 52 | 53 | &:hover { 54 | color: #000; 55 | } 56 | } 57 | 58 | .notify-btn-primary { 59 | .btn-css(@btn-primary-bgcolor); 60 | } 61 | 62 | .notify-btn-success { 63 | .btn-css(@bgcolor-success); 64 | } 65 | 66 | .notify-btn-info { 67 | .btn-css(@bgcolor-info); 68 | } 69 | 70 | .notify-btn-warning { 71 | .btn-css(@bgcolor-warning); 72 | } 73 | 74 | .notify-btn-danger { 75 | .btn-css(@bgcolor-danger); 76 | } 77 | 78 | .btn-small { 79 | font-size: 12px; 80 | min-width: 31px; 81 | min-height: 14px; 82 | padding: 6px 9px; 83 | } 84 | -------------------------------------------------------------------------------- /packages/layer/src/components/button/css/mixin.less: -------------------------------------------------------------------------------- 1 | //border 2 | .border(@color: #999,@width: 1px, @style: solid){ 3 | border: @width @style @color; 4 | } 5 | 6 | .border-radius(@value: 5px){ 7 | border-radius: @value; 8 | } 9 | 10 | .box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) { 11 | box-shadow: @x @y @blur @color; 12 | -moz-box-shadow: @x @y @blur @color; 13 | -webkit-box-shadow: @x @y @blur @color; 14 | } 15 | -------------------------------------------------------------------------------- /packages/layer/src/components/button/css/var.less: -------------------------------------------------------------------------------- 1 | 2 | 3 | /// bg colors 4 | @bgcolor: #fff; 5 | @bgcolor-disable: #e6ecf5; 6 | @bgcolor-success: #449d44; //绿色 7 | @bgcolor-info: #31b0d5; // 浅蓝 8 | @bgcolor-warning: #ec971f; //橙色 9 | @bgcolor-danger: #d9534f; //红色 10 | 11 | 12 | 13 | //border default 14 | @border-color: #c0c8c8; 15 | @border: 1px solid @border-color; 16 | 17 | // button 18 | // -------------------------------------------- 19 | @btn-color: #fff; 20 | @btn-bgcolor: #ccc; 21 | @btn-bgcolor-hover: #58b4e6; 22 | @btn-font-size: 14px; 23 | @btn-primary-bgcolor: #20a0ff; 24 | -------------------------------------------------------------------------------- /packages/layer/src/components/drag/drag.vue: -------------------------------------------------------------------------------- 1 | 40 | 330 | 331 | 333 | 334 | -------------------------------------------------------------------------------- /packages/layer/src/components/input/input.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /packages/layer/src/css/icon/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "vlayer"; 3 | src: url('./iconfont.eot'); 4 | /* IE9 */ 5 | src: url('./iconfont.eot#iefix') format('embedded-opentype'), 6 | /* IE6-IE8 */ 7 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAXAAAsAAAAAC7gAAAVzAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCECgqJWIdsATYCJAMkCxQABCAFhFUHbRvtCVGUL06c7GeCTae24EV0GNtYV9qWt+CBzYL/4+FrP37n7u57/tVRb9ZgOomsmqBSSZ4IhemExHRKFZ+u/29qv2OqCsnz3fLGWp6SD6FAEuZto86rrcwd/5416XurQgsWS3dPSk5/q2pFHqS2JzA52Anz//9e1czjsYBcC1pI3n1/ZozxQmOtbipXbB1PSnPq9IIXrLoFvTrKeYGZQNWZyqs3E+htGqqdOzi7g65CzIGmu1JQ6JY8So8utPa65cQinoOZNj3lnAeexe8f3+BEdEmqTC5y/vp+BlsfzV4I0RO2RUL+AOXPF8LsNDIOAYV40xp5DaW5Qxr6zefFbgKzBhrSR7Pn9n66jLppL4QsS32abBVm9Z88UAtZo5IULVGDZWTtw3zLRzPfQM1He5eA1Q8uGVYdXBpYM2B2jLUOLgnWaTBQ+CTs0YIuPGEW2ABxGSB+E9uZ2FSpMvP/Z3kZx53RS6GppKmJttRRRXc/MRaJHOTi9defxt54pmZeaOnnNTStYRjtjRvq69eTvGvEthj6TcTSSzeuyGat91l32AUqC4mFm/xNxxQ0ncCdP9mrVmPfunQi+RSLojKiUUxmZCr9XNOB3aHrT+tOi4SEx/9FG7tZ3Dl2NpoYdXZUPYeLJYhnViNEIjUX8QlRvATEhadaW3eJbGzfOuDcTdoZLTDqCnT2BlqN9eLt+13MFx+IkOw6pLBYcrBGbCEpWWjyFoBWA/zj15XAUwtOMe4EF+at8+ATsWo1r9/Qss6GP8doh+aapgwgfm7tIJtqbp+x1WQvmG2w5cxaB0YQsbPA7HOJVgPdUjvJGY+nmVNjtlXQYqDHUzvJGZernl2bY6dE9TSWyzGtJMRAytsE5YZd+Ns3DHkXI8b4ua+QhF4HY0SUQiXCookAWHBVsue8uUpMykmxCr6FzzUgIPV6UjXQ/H2QzoXV00D//qaZUml20xFGlrhNMHPvAfz3L4Z8gBESV1sudZs/3y0P7cA238IKpdktJeGmW5jbBSu37sE/fuA9RAgDiS//MrFHkm65uRMWLAxraJBah4PAvdr/3DFP/4HSJ71JM5LOZueovicnAXf367LXgEK24y9f0Da0nU3bpwR6vB1va+eRKxksk2FG9TIXxszl4hK8FuMiY55KKekgCeVOwSCCEl+TUh6kO+lBwdAvM5pC7qEmdC8kTnLIy01y2SVqIkusJ6fkTymg9KPGjsW10cNu6EcniZrommYGTapzr/WjkQ/dP4aL3IUqBSU6z8IeGSVfwMk9v9rnHMsa5JRsYXiEvV8ldBeFf3R/SEKxwJjckEs4F8rwSHsguQUAgO1Af1EDANuCAbUCsL3oB6oGAEDfiD2b27UiFtWw79hCbI1mArBt6D9qGmHuBry2Xz+SRcO+WfIwAADcpMPa4jGuE6+VmPGjh6tAj+KdtBXF25X1Uny0C+eo0bmohUxCrwn+U2LW33ltC2aLcdC2kEPSWIOstkNZtPugMjhiqtV2EtA7aPP0wZylhigdDnh3EEZvIZn0DrLRe2XRfoDKok+ojX5B74L/Cw72xHV/1yENmJHFM5GsLLh3UugnTZ/R3aCImro1H8oP1OdlWZDZeFoJHmIRiMce4pOYh8AJd6UhBye5HWpdksqVS2RhnIdQrUwmvO2Zxqw00HeWg6gAZYiFZ4TElAo8PDzoe0SjniHnxkWEWFvvWidyywNFPHn89sTM2LRXeWgp0qnX7vQSYS5oiCN+xikZth3cjQlnBLkSUbWblttaJhjLj8hUVkx0I261jJ/KZn5fEyxBnr6LFDlKVFFHE2100aseYxFkC50rXcdHxtD7jqFPRhayGSQ7j9RNOwrRzSMtnn1To8cNAAA=') format('woff2'), 8 | url('./iconfont.woff') format('woff'), 9 | } 10 | 11 | .vlayer { 12 | font-family: "vlayer" !important; 13 | font-size: 16px; 14 | font-style: normal; 15 | -webkit-font-smoothing: antialiased; 16 | -moz-osx-font-smoothing: grayscale; 17 | } 18 | 19 | .vlicon-wenti:before { 20 | content: "\e617"; 21 | } 22 | 23 | .vlicon-error:before { 24 | content: "\e67a"; 25 | } 26 | 27 | .vlicon-success:before { 28 | content: "\e62a"; 29 | } 30 | 31 | .vlicon-maxmini:before { 32 | content: "\e690"; 33 | } 34 | 35 | .vlicon-mini:before { 36 | content: "\e664"; 37 | } 38 | 39 | .vlicon-warning:before { 40 | content: "\e605"; 41 | } 42 | 43 | .vlicon-huanyuan:before { 44 | content: "\e658"; 45 | } 46 | 47 | .vlicon-max:before { 48 | content: "\e70e"; 49 | } -------------------------------------------------------------------------------- /packages/layer/src/css/icon/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/icon/iconfont.eot -------------------------------------------------------------------------------- /packages/layer/src/css/icon/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /packages/layer/src/css/icon/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/icon/iconfont.ttf -------------------------------------------------------------------------------- /packages/layer/src/css/icon/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/icon/iconfont.woff -------------------------------------------------------------------------------- /packages/layer/src/css/icon/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/icon/iconfont.woff2 -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "vlayer"; 3 | src: url('iconfont.eot?t=1563499118921'); 4 | /* IE9 */ 5 | src: url('iconfont.eot?t=1563499118921#iefix') format('embedded-opentype'), 6 | /* IE6-IE8 */ 7 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAV0AAsAAAAAC0gAAAUlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDdAqJEIc1ATYCJAMgCxIABCAFhFUHYxuSCRGVpB+Q/TiwG6/2sC8uo0XES9qRzSd4INxe3+UuEMxrSNVpZxJmjtbN+X8mCjPlzz2HczZgo06oktwTefRZdknaEDwLJViZRwYbDsUXYvL/jpVuPl9bzG+LtiTzZ6NybKPyio60nke0FciBN98J45lI518yoSleXGfdDAE4SdAJkbn4yiwGCmUSqBs3euRgjIIb1SESGDZbw4kKsQkdQ1utvQhsjN5ffEMPYYCGLlEXuXbERcM4v6Y3eOUiaxH95FZEs7sgMNgSJNAJUOxe0xheg0wynZA4Z6WKAYBf/qKEml6L1TrUirVhtTkNXsuqjMIsNhrCv3igI5DYUGjYQdhQZjcJh2XtUNONicgSgxMBSwc4kbAU4cQGyzA4UbDMgRIaNHg7sANguBP8QBMQ14L4DGVNs1EXq3wNi5Xb3VI4NGdUicljShx+5fM1Uhef++bn2be+yFUbCpXarEolX60W3nor9+abA/Q1sovKa+vFwVfeei2+7cZ2px5tRmlTsfeWjvVPJCuVfs7dvfVaXLfm1FAxcBubXTfsennD8GsHV2r5FmwPvvn5nO0iIeHmPw9Htzl3RMP5G3Ijr+sbwD9+zYVztpjOrjmFduhkU7mnrpijgzewuG6u/84Hm9n2P9QrcM8jSfuBh2f57YFJe+vbeijkcT/5ZgpXzvNMtaVwsutUK7fI5nKuteVFp8LuHXVRubO+z6DvzspB4ZnONXWL62Oe7eWItu0UmBDZbWCx0WKxB51Tf5Ixlyu/o8IiM1jkQTen/iRjTmdue2WDaErOrahEQlWEOLT6rMkztXyP+u03BcM9jBji137NFKUiF/oyybRP+S4D5Xk9cN+LtrTfTJj+NL/13FmWmKWSmT7N9n0X2ZDjmyh9/7aeSulvB4SR9dzk2Xr/Q+rffxUMDzFCz+XGwRa7d7cYg2ashZ8qmdLfEeKWvaO42XP09vvUH3+o+4gQWj0/wZf9VwWGGrcuZ8/eHvPmBUM9cd779ZSvkd3uVL/8Iu+Qd5Lxzj6BWN2p7mh2mUerKh5XVRHHm1V1Z7Nm9iLVZvHq58FM8PRApmWG00XG/0ZB0spsabba7axftizo9oFcID/oFiU089UF6rIHcmKEv2RuGLthXKZ0/kUXqdnXn/1W6YI4Puv6WfWMBekXrt9vMz9u+WNPX0tvOpnxvWhxXzyT2KONfnGyxQuWVU5k4nt79vLvTntb+nr+2PJjE5w9qhLl0cKxN45H3sdAAKxl8l85D6xFCrkYQP4m7pvdbrG05CzrO2v8LCS3grVE/i8X/BXuxq/K4s//BvoOf7uuAnincJaJhrgKg4aB5ovv7KiD851+rlMeo9NJBn21m1dgGGSOlAacEgeL4kF/u7RGvM38t6yRDDR2TUGyacFVwnagc+litIn1DIBTRyenu4QMpkQf6OAjAMHtJGi87gDJ7TGuEr4EuqhPsHH7AZzy/i/o0ibXbS4CkoR72L1AT61h+qS0KYq8YLhFnhUJU40zPFJX7K2BtmpKgRs0VrfpIbHwLiUGLFgN11u5HSplwQU7IE2VSMlt65o1vVJFrR5tmAJEJGgP7LwAPcoymDs82ZhBIV6g4DYIc7myODSOZOZHCkf95iuDVqXp5N6YTTL20K1RwXWSBBkwqcDSbL0+GSMOCDIWcM3GYV5JJRWxQcrZqmUp5muuLsqqn10jmEI9tZGRmWZl5+Tm0T+a1M8xBBuWMVOKMc50b/rlEwmuxfCVyMS8mLKpJs+jEQAAAA==') format('woff2'), 8 | url('iconfont.woff?t=1563499118921') format('woff'), 9 | url('iconfont.ttf?t=1563499118921') format('truetype'), 10 | /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ 11 | url('iconfont.svg?t=1563499118921#vlayer') format('svg'); 12 | /* iOS 4.1- */ 13 | } 14 | 15 | .vlayer { 16 | font-family: "vlayer" !important; 17 | font-size: 16px; 18 | font-style: normal; 19 | -webkit-font-smoothing: antialiased; 20 | -moz-osx-font-smoothing: grayscale; 21 | } 22 | 23 | .vlicon-wenti:before { 24 | content: "\e617"; 25 | } 26 | 27 | .vlicon-error:before { 28 | content: "\e67a"; 29 | } 30 | 31 | .vlicon-success:before { 32 | content: "\e62a"; 33 | } 34 | 35 | .vlicon-mini:before { 36 | content: "\e664"; 37 | } 38 | 39 | .vlicon-warning:before { 40 | content: "\e605"; 41 | } 42 | 43 | .vlicon-huanyuan:before { 44 | content: "\e658"; 45 | } 46 | 47 | .vlicon-max:before { 48 | content: "\e70e"; 49 | } -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/iconfont.eot -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.js: -------------------------------------------------------------------------------- 1 | !function(a){var t,n='',e=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(e&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}!function(t){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(t,0);else{var e=function(){document.removeEventListener("DOMContentLoaded",e,!1),t()};document.addEventListener("DOMContentLoaded",e,!1)}else document.attachEvent&&(c=t,i=a.document,o=!1,(l=function(){try{i.documentElement.doScroll("left")}catch(t){return void setTimeout(l,50)}n()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,n())});function n(){o||(o=!0,c())}var c,i,o,l}(function(){var t,e;(t=document.createElement("div")).innerHTML=n,n=null,(e=t.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",function(t,e){e.firstChild?function(t,e){e.parentNode.insertBefore(t,e)}(t,e.firstChild):e.appendChild(t)}(e,document.body))})}(window); -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/iconfont.ttf -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/iconfont.woff -------------------------------------------------------------------------------- /packages/layer/src/css/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/packages/layer/src/css/iconfont.woff2 -------------------------------------------------------------------------------- /packages/layer/src/css/index.less: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: 左盐 3 | * @Date: 2018-03-19 17:30:29 4 | * @Email: huabinglan@163.com 5 | * @Project: xxx 6 | * @Last modified by: 左盐 7 | * @Last modified time: 2018-03-24 15:59:18 8 | */ 9 | 10 | *[class^="vl-notify"] { 11 | box-sizing: border-box; 12 | padding: 0; 13 | margin: 0; 14 | outline: none; 15 | -webkit-font-smoothing: antialiased; 16 | -moz-osx-font-smoothing: grayscale; 17 | } 18 | 19 | @keyframes fadein { 20 | from { 21 | opacity: 0; 22 | transform: scale(0.5) translate(-100%, -100%); 23 | } 24 | 25 | to { 26 | opacity: 1; 27 | transform: scale(1) translate(-50%, -50%); 28 | } 29 | } 30 | 31 | .vl-html-scrollbar-hidden { 32 | overflow-y: hidden !important; 33 | } 34 | 35 | .vl-notify { 36 | position: fixed; 37 | z-index: 1000; 38 | left: 50%; 39 | top: 50%; 40 | transform: perspective(1px) translate(-50%, -50%); 41 | -ms-transform: perspective(1px) translate(-50%, -50%); 42 | box-sizing: border-box; 43 | 44 | &.vl-notify-msg-p { 45 | display: inline; 46 | height: 0; 47 | left: 50%; 48 | top: 50%; 49 | transform: perspective(1px) translate(-50%, -50%); 50 | -ms-transform: perspective(1px) translate(-50%, -50%); 51 | background-color: rgba(0, 0, 0, .6); 52 | } 53 | 54 | &.vl-notify-tips-p { 55 | display: inline; 56 | height: 0; 57 | top: 0; 58 | left: 0; 59 | position: absolute; 60 | } 61 | 62 | &.vl-notify-main { 63 | min-width: 250px; 64 | max-width: 1500px; 65 | min-height: 100px; 66 | background-color: #fff; 67 | border: 1px solid #eee; 68 | box-shadow: 1px 1px 15px rgba(0, 0, 0, 0.3); 69 | border-radius: 2px; 70 | padding-bottom: 5px; 71 | } 72 | 73 | .vl-notify-content { 74 | min-height: 65px; 75 | padding: 20px; 76 | max-height: calc(100% - 42px); 77 | 78 | iframe { 79 | width: 100%; 80 | height: 100%; 81 | border: none; 82 | overflow: none; 83 | } 84 | } 85 | 86 | .vl-notify-btns { 87 | text-align: right; 88 | padding: 0 8px 0 0; 89 | } 90 | 91 | &.vl-notify-alert { 92 | animation: fadein 0.3s; 93 | max-width: 500px; 94 | 95 | h2.vl-notice-title { 96 | box-sizing: border-box; 97 | width: 100%; 98 | height: 42px; 99 | line-height: 43px; 100 | background-color: #F8F8F8; 101 | border-bottom: 1px solid #eee; 102 | font-size: 14px; 103 | padding-left: 15px; 104 | cursor: move; 105 | -moz-user-select: -moz-none; 106 | -webkit-user-select: none; 107 | margin: 0; 108 | display: flex; 109 | position: relative; 110 | z-index: 100000; 111 | word-break: keep-all; 112 | overflow: hidden; 113 | 114 | .lv-title { 115 | text-overflow: ellipsis; 116 | flex: 1; 117 | height: 100%; 118 | } 119 | 120 | .icon-remove { 121 | position: absolute; 122 | right: 10px; 123 | font-size: 14px; 124 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 125 | top: 0px; 126 | font-weight: normal; 127 | cursor: pointer; 128 | color: rgb(51, 51, 51); 129 | font-style: normal; 130 | 131 | &::before { 132 | content: "\2716"; 133 | } 134 | } 135 | 136 | .lv-icon-maxmini { 137 | // position: absolute; 138 | // right: 32px; 139 | // top: 0px; 140 | min-width: 10px; 141 | font-size: 14px; 142 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 143 | font-weight: normal; 144 | cursor: pointer; 145 | color: rgb(51, 51, 51); 146 | font-style: normal; 147 | margin-right: 25px; 148 | 149 | i { 150 | margin: 0 3px; 151 | font-size: 14px; 152 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); 153 | font-weight: normal; 154 | cursor: pointer; 155 | color: rgb(51, 51, 51); 156 | font-style: normal; 157 | } 158 | } 159 | 160 | .lv-icon-max {} 161 | 162 | .lv-icon-mini {} 163 | } 164 | 165 | .vl-notify-content { 166 | display: flex; 167 | 168 | .vl-notify-content-div { 169 | margin-left: 10px; 170 | flex: 1; 171 | } 172 | } 173 | } 174 | 175 | &.vl-notify-iframe { 176 | max-width: 2000px; 177 | 178 | .vl-notify-content { 179 | padding: 0; 180 | } 181 | } 182 | 183 | &.vl-notify-loading { 184 | animation: fadein 0.2s; 185 | display: inline-block; 186 | left: 50%; 187 | top: 50%; 188 | transform: translate(-50%, -50%); 189 | -ms-transform: translate(-50%, -50%); 190 | min-width: 50px; 191 | min-height: 50px; 192 | display: none; 193 | 194 | // &:nth-last-child(2) { 195 | // display: inline-block !important; 196 | // } 197 | 198 | &:nth-last-child(1) { 199 | display: inline-block !important; 200 | } 201 | 202 | @keyframes loading { 203 | from { 204 | -webkit-transform: rotate(0deg); 205 | transform: rotate(0deg); 206 | } 207 | 208 | to { 209 | -webkit-transform: rotate(360deg); 210 | transform: rotate(360deg); 211 | } 212 | } 213 | 214 | span { 215 | display: inline-block; 216 | width: 30px; 217 | height: 30px; 218 | border: 2px solid #f3f3f3; 219 | border-top: 2px solid #999999; 220 | border-right: 2px solid #999999; 221 | border-radius: 50%; 222 | animation: loading 1.0s infinite linear; 223 | } 224 | } 225 | 226 | &.vl-notify-msg { 227 | animation: fadein 0.2s; 228 | min-width: 50px; 229 | display: inline; 230 | min-height: 44px; 231 | font-size: 14px; 232 | left: 50%; 233 | top: 50%; 234 | transform: translate(-50%, -50%); 235 | -ms-transform: translate(-50%, -50%); 236 | background-color: rgba(0, 0, 0, .6); 237 | color: #fff; 238 | padding: 12px 25px; 239 | text-align: center; 240 | border-radius: 5px; 241 | 242 | &.vl-notify-loading { 243 | min-height: 50px; 244 | 245 | span { 246 | width: 20px; 247 | height: 20px; 248 | vertical-align: middle; 249 | margin-right: 7px; 250 | } 251 | 252 | i { 253 | font-style: normal; 254 | font-size: 14px; 255 | } 256 | } 257 | } 258 | 259 | &.vl-notify-tips { 260 | min-width: 50px; 261 | max-width: 400px; 262 | display: inline; 263 | min-height: 32px; 264 | position: absolute; 265 | left: -50%; 266 | background-color: #303133; 267 | color: #fff; 268 | padding: 6px 12px; 269 | border-radius: 5px; 270 | transform: none; 271 | 272 | &:after { 273 | content: " "; 274 | border: 10px solid #303133; 275 | position: absolute; 276 | display: inline-block; 277 | } 278 | } 279 | 280 | &.vl-notify-tips-0 { 281 | 282 | //上 283 | &:after { 284 | border-top-color: transparent !important; 285 | border-right-color: transparent !important; 286 | border-bottom-color: transparent !important; 287 | left: 15px; 288 | bottom: -8px; 289 | } 290 | } 291 | 292 | &.vl-notify-tips-1 { 293 | 294 | //右 295 | &:after { 296 | border-top-color: transparent !important; 297 | border-left-color: transparent !important; 298 | border-right-color: transparent !important; 299 | left: -8px; 300 | top: 0; 301 | } 302 | } 303 | 304 | &.vl-notify-tips-2 { 305 | 306 | //下 307 | &:after { 308 | border-top-color: transparent !important; 309 | border-left-color: transparent !important; 310 | border-bottom-color: transparent !important; 311 | left: 15px; 312 | top: -8px; 313 | } 314 | } 315 | 316 | &.vl-notify-tips-3 { 317 | //左 318 | max-width: 300px; 319 | 320 | &:after { 321 | border-top-color: transparent !important; 322 | border-left-color: transparent !important; 323 | border-right-color: transparent !important; 324 | right: -8px; 325 | top: 0; 326 | } 327 | } 328 | 329 | .vl-drag-resize { 330 | display: inline-block; 331 | width: 17px; 332 | height: 17px; 333 | position: absolute; 334 | right: 0px; 335 | bottom: 0; 336 | z-index: 100000; 337 | cursor: nw-resize; 338 | background: url("data:image/svg+xml,%3Csvg viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cpath d='M765.558 510.004a93.65 93.65 0 1 0 191.665 0 93.65 93.65 0 1 0-191.665 0zM765.558 821.46a93.65 93.65 0 1 0 191.665 0 93.65 93.65 0 1 0-191.665 0zM422.15700000000004 821.46a93.65 93.65 0 1 0 191.665 0 93.65 93.65 0 1 0-191.665 0zM422.15700000000004 510.004a93.65 93.65 0 1 0 191.665 0 93.65 93.65 0 1 0-191.665 0zM765.558 202.54a93.65 93.65 0 1 0 191.665 0 93.65 93.65 0 1 0-191.665 0zM66.77700000000002 821.46a93.65 93.65 0 1 0 191.665 0 93.65 93.65 0 1 0-191.665 0z' fill='%23BFBFBF'/%3E%3C/svg%3E") no-repeat center; 339 | } 340 | } -------------------------------------------------------------------------------- /packages/layer/src/helper/helper.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: 左盐 3 | * @Date: 2018-03-23 18:27:59 4 | * @Email: huabinglan@163.com 5 | * @Project: xxx 6 | * @Last modified by: 左盐 7 | * @Last modified time: 2018-03-23 18:27:59 8 | */ 9 | export default class helper { 10 | /** 11 | * 点击mask关闭弹窗 12 | * @param {[type]} event [description] 13 | * @param {[type]} layer [description] 14 | * @return {[type]} [description] 15 | */ 16 | static clickMaskCloseAll(event, layer, id) { 17 | let mask = event.target.getAttribute("class"); 18 | if (mask && (mask.indexOf("notify-mask") > -1 || mask.indexOf("icon-remove") > -1)) { 19 | layer.close(id); 20 | } 21 | } 22 | /** 23 | * 默认的yes按钮操作 24 | * @param {[type]} event [description] 25 | * @return {[type]} [description] 26 | */ 27 | static btnyes(event, options, formValue) { 28 | if (typeof (options.yes) == "function") { 29 | if (options.type === 6) { 30 | options.yes(formValue, options.id); 31 | } else { 32 | options.yes(options.id); 33 | } 34 | } else { 35 | options.layer.close(options.id); 36 | } 37 | } 38 | /** 39 | * 默认取消按钮操作 40 | * @param {[type]} event [description] 41 | * @return {[type]} [description] 42 | */ 43 | static async btncancel(event, options) { 44 | if (typeof (options.cancel) == "function") { 45 | await options.cancel(options.id); 46 | } else { 47 | options.layer.close(options.id); 48 | } 49 | } 50 | /** 51 | * 隐藏滚动条 52 | */ 53 | static hiddenScrollBar(options) { 54 | if (!options.scrollbar) { 55 | const htmlDom = document.getElementsByTagName("html")[0]; 56 | const htmlClass = [...htmlDom.classList]; 57 | if (htmlClass.indexOf('vl-html-scrollbar-hidden') > -1) { 58 | return; 59 | } 60 | 61 | const htmlWidth = htmlDom.offsetWidth; 62 | //隐藏滚动条 63 | // htmlDom.style.overflowY = "hidden"; 64 | htmlDom.classList.add("vl-html-scrollbar-hidden"); 65 | const htmlWidthH = htmlDom.offsetWidth; 66 | htmlDom.style.marginRight = htmlWidthH - htmlWidth + "px"; 67 | } 68 | } 69 | /** 70 | * 鼠标拖动弹窗 71 | * @param {[type]} event [description] 72 | * @param {[type]} options [description] 73 | * @return {[type]} [description] 74 | */ 75 | static moveStart(event, options) { 76 | options.offset = options.offset == 'auto' ? [] : options.offset; 77 | if (options.offset.length == 0) { 78 | options.offset.push(document.getElementById(options.id + "").offsetLeft); 79 | options.offset.push(document.getElementById(options.id + "").offsetTop); 80 | options.offset.push(0); 81 | } 82 | if (options.offset.length == 2) { 83 | options.offset.push(0); 84 | } 85 | options.offset[0] = (document.getElementById(options.id + "").offsetLeft); 86 | options.offset[1] = (document.getElementById(options.id + "").offsetTop); 87 | } 88 | /** 89 | * 拖动弹窗 90 | * @param {[type]} event [description] 91 | * @param {[type]} ismove [description] 92 | * @return {[type]} [description] 93 | */ 94 | static move(event, options, ismove) { 95 | if (ismove) { 96 | let o = document.getElementById(options.id + "_alert"); 97 | o.style.left = options.offset[0] + (event.clientX - this.moveLeft) + "px"; 98 | o.style.top = options.offset[1] + (event.clientY - this.moveTop) + "px"; 99 | } 100 | } 101 | /** 102 | * [sleep description] 103 | * @param {[type]} ms [description] 104 | * @return {[type]} [description] 105 | */ 106 | static sleep(ms) { 107 | return new Promise(resolve => setTimeout(resolve, ms)) 108 | } 109 | /** 110 | * 深度拷贝 111 | * @param {*} source 112 | */ 113 | static deepClone(target) { 114 | let copyed_objs = []; //此数组解决了循环引用和相同引用的问题,它存放已经递归到的目标对象 115 | function _deepCopy(target) { 116 | if ((typeof target !== 'object') || !target) { 117 | return target; 118 | } 119 | for (let i = 0; i < copyed_objs.length; i++) { 120 | if (copyed_objs[i].target === target) { 121 | return copyed_objs[i].copyTarget; 122 | } 123 | } 124 | let obj = {}; 125 | if (Array.isArray(target)) { 126 | obj = []; //处理target是数组的情况 127 | } 128 | copyed_objs.push({ 129 | target: target, 130 | copyTarget: obj 131 | }) 132 | Object.keys(target).forEach(key => { 133 | if (obj[key]) { 134 | return; 135 | } 136 | obj[key] = _deepCopy(target[key]); 137 | }); 138 | return obj; 139 | } 140 | return _deepCopy(target); 141 | } 142 | /** 143 | * 取偶数 144 | * @param {*} str 145 | */ 146 | static evenNumber(str = '') { 147 | const result = str.match(/\d+/g); 148 | if (result) { 149 | const n = parseInt(result[0]); 150 | if (n % 2 === 0) { 151 | return str; 152 | } else { 153 | str = str.replace(n, n + 1); 154 | return str; 155 | } 156 | } else { 157 | return str; 158 | } 159 | 160 | } 161 | 162 | 163 | } -------------------------------------------------------------------------------- /packages/layer/src/iframe.vue: -------------------------------------------------------------------------------- 1 | 9 | 14 | 15 | 78 | -------------------------------------------------------------------------------- /packages/layer/src/layer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: 左盐 3 | * @Date: 2018-03-05 16:12:17 4 | * @Email: huabinglan@163.com 5 | * @Last modified by: 左盐 6 | * @Last modified time: 2018-03-31 10:39:54 7 | */ 8 | 9 | import layerVue from './layer.vue'; 10 | import maskVue from './mask.vue'; 11 | let Notification = (function (Vue, globalOption = { 12 | msgtime: 1.5, //msg消失时间 13 | }) { 14 | let NotificationConstructor = Vue.extend(layerVue); 15 | let maskLayer = Vue.extend(maskVue); 16 | let self = {}; 17 | const defOptions = { 18 | type: 0, //0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层),5msg,6prompt 19 | title: '信息', 20 | content: '', 21 | area: 'auto', 22 | offset: 'auto', 23 | icon: -1, 24 | btn: '确定', 25 | time: 0, 26 | maxmin: false, //最大最小化 27 | shade: true, 28 | yes: '', 29 | cancel: '', 30 | tips: [0, {}], //支持上右下左四个方向,通过1-4进行方向设定,可以设定tips: [1, '#c00'] 31 | tipsMore: false, //是否允许多个tips 32 | shadeClose: true, 33 | scrollbar: true, //是否允许浏览器出现滚动条:默认是允许 34 | resize: false //是否允许拉伸,默认是不允许 35 | }; 36 | self.instances = {}; 37 | self.instancesVue = []; 38 | self.iframeMinList = []; 39 | let seed = 0; 40 | 41 | 42 | /** 43 | * [function description] 44 | * @method function 45 | * @param {[type]} options [description] 46 | * @return {[type]} [description] 47 | */ 48 | self.open = function (options) { 49 | options = mergeJson(options, defOptions); 50 | let id = `notification_${new Date().getTime()}_${seed++}`; 51 | options.id = id; 52 | options.layer = self; 53 | let instance = new NotificationConstructor({ 54 | data: options 55 | }); 56 | if (options.type == 2) { 57 | options.content.content = Vue.extend(options.content.content); 58 | } 59 | instance.id = id; 60 | instance.vm = instance.$mount(); 61 | self.instances[id] = { 62 | inst: instance, 63 | type: options.type 64 | }; 65 | document.body.appendChild(instance.vm.$el); 66 | self.instancesVue[id] = { 67 | 'mask': '', 68 | 'main': instance.vm, 69 | 'iframe': '', 70 | } 71 | if (options.shade) { //是否显示遮罩,始终添加遮罩 72 | // let layerMask = document.querySelector('.vl-notify-mask'); 73 | // if (layerMask) { //layerMask 74 | // return; 75 | // document.body.removeChild(layerMask); 76 | // } else { 77 | let maskInstance = new maskLayer({ 78 | data: options 79 | }); 80 | maskInstance.vm = maskInstance.$mount(); 81 | // document.body.appendChild(maskInstance.vm.$el); 82 | document.body.insertBefore(maskInstance.vm.$el, instance.vm.$el); 83 | self.instancesVue[id].mask = maskInstance.vm; 84 | // } 85 | } 86 | return id; 87 | }; 88 | /** 89 | * alert 90 | * @param {[type]} content [description] 91 | * @param {[type]} options [description] 92 | * @param {[type]} yes [description] 93 | * @return {[type]} [description] 94 | */ 95 | self.alert = function (content, options, yes) { 96 | switch (typeof (options)) { 97 | case 'function': 98 | yes = options; 99 | options = {}; 100 | break; 101 | case 'object': 102 | break; 103 | default: 104 | options = {}; 105 | break; 106 | } 107 | yes = typeof (yes) === 'function' ? yes : ''; 108 | 109 | options.content = content || ''; 110 | options.yes = yes; 111 | return self.open(options); 112 | } 113 | /** 114 | * alert 115 | * @param {[type]} content [description] 116 | * @param {[type]} options [description] 117 | * @param {[type]} yes [description] 118 | * @return {[type]} [description] 119 | */ 120 | self.confirm = function (content, options, yes, cancel) { 121 | switch (typeof (options)) { 122 | case 'function': 123 | cancel = yes; 124 | yes = options; 125 | options = {}; 126 | break; 127 | case 'object': 128 | break; 129 | default: 130 | options = {}; 131 | break; 132 | } 133 | yes = typeof (yes) === 'function' ? yes : ''; 134 | cancel = typeof (cancel) === 'function' ? cancel : 'cancel'; 135 | 136 | options.content = content || ''; 137 | options.yes = yes; 138 | options.cancel = cancel; 139 | return self.open(options); 140 | } 141 | /** 142 | * [function description] 143 | * @method function 144 | * @param {[type]} content [description] 145 | * @param {[type]} options [description] 146 | * @param {[type]} end [description] 147 | * @return {[type]} [description] 148 | */ 149 | self.msg = function (content, options, end) { 150 | switch (typeof (options)) { 151 | case 'function': 152 | end = options; 153 | options = {}; 154 | break; 155 | case 'object': 156 | break; 157 | default: 158 | options = {}; 159 | break; 160 | } 161 | end = typeof (end) === 'function' ? end : ''; 162 | options.type = 5; 163 | options.time = options.time ? options.time : globalOption.msgtime; 164 | options.content = content || 'this is a msg!!'; 165 | options.yes = end; 166 | if (options.shade == undefined) { 167 | options.shade = false; 168 | } 169 | self.closeAll('msg'); 170 | return self.open(options); 171 | } 172 | //loading 173 | self.loading = function (icon, options) { 174 | if (typeof (icon) === 'object') { 175 | options = icon; 176 | icon = 0; 177 | } 178 | options = options || {}; 179 | options.icon = icon ? icon : 0; 180 | if (options.icon < 0 || options.icon > 2) { 181 | options.icon = 0; 182 | } 183 | if (!options.time) { //单位秒 184 | options.time = 100; 185 | } 186 | options.type = 3; 187 | if (options.shade == undefined) { 188 | options.shade = true; 189 | } 190 | if (options.shadeClose == undefined) { 191 | options.shadeClose = false; 192 | } 193 | return self.open(options); 194 | } 195 | /** 196 | * tips 197 | * @method function 198 | * @param {[type]} content [description] 199 | * @param {[type]} follow [description] 200 | * @param {[type]} options [description] 201 | * @return {[type]} [description] 202 | */ 203 | self.tips = function (content, follow, options) { 204 | options = options || {}; 205 | options.type = 4; 206 | options.content = content || ''; 207 | options.title = follow || 'body'; 208 | options.tips = options.tips || [0, {}]; 209 | if (typeof (options.tips) !== 'object') { 210 | options.tips = [options.tips, {}]; 211 | } 212 | if (options.shade == undefined) { 213 | options.shade = false; 214 | } 215 | if (!options.tipsMore) { 216 | self.closeAll('tips'); 217 | } 218 | return self.open(options); 219 | } 220 | /** 221 | * [description] 222 | * @param {[type]} options [description] 223 | * @return {[type]} [description] 224 | */ 225 | self.iframe = function (opt) { 226 | let option = { 227 | type: 2, 228 | content: opt.content, 229 | area: opt.area 230 | }; 231 | option = mergeJson(option, opt); 232 | return self.open(option); 233 | } 234 | /** 235 | * 获取信息框 236 | */ 237 | self.prompt = function (options = { 238 | formType: 1, 239 | value: '' 240 | }, yes = '', cancel = '', ) { 241 | switch (typeof (cancel)) { 242 | case 'object': 243 | options = cancel; 244 | break; 245 | } 246 | options.content = ''; 247 | options.yes = yes; 248 | options.cancel = cancel; 249 | options.type = 6; 250 | //如果是textarea 251 | if (options.formType == 3) { 252 | if (!options.area) { 253 | options.area = ['500px', '500px']; 254 | } 255 | } 256 | // options.title = title || ''; 257 | return self.open(options); 258 | } 259 | /** 260 | * 关闭一个弹窗 261 | * @param {[type]} id [description] 262 | * @return {[type]} [description] 263 | */ 264 | self.close = function (id) { 265 | let oElm = document.getElementById(id); 266 | if (oElm) { 267 | document.body.removeChild(oElm); 268 | delete self.instances[id]; 269 | self.instancesVue[id].main.$destroy(); 270 | if (self.instancesVue[id].iframe != '') { 271 | const minindex = parseInt(self.instancesVue[id].main.$el.getAttribute('minindex') || -2); 272 | if (minindex > -1) { 273 | self.iframeMinList[minindex] = -1; 274 | } 275 | self.instancesVue[id].iframe.$destroy(); 276 | } 277 | //取消隐藏滚动条 278 | if (!self.instancesVue[id].main.scrollbar) { 279 | let scrollbarCount = 0; 280 | for (let key in self.instancesVue) { 281 | if (!self.instancesVue[key].main.scrollbar) { 282 | scrollbarCount++; 283 | } 284 | } 285 | if (scrollbarCount === 1) { 286 | const htmlDom = document.getElementsByTagName("html")[0]; 287 | htmlDom.style.marginRight = "auto"; 288 | htmlDom.classList.remove('vl-html-scrollbar-hidden'); 289 | } 290 | } 291 | //控制遮罩,删除掉当前的遮罩 292 | if (self.instancesVue[id].main.shade) { 293 | let layerMask = document.getElementById(id + '_mask'); 294 | let maskId = id + '_mask'; 295 | document.body.removeChild(layerMask); 296 | if (self.instancesVue[maskId]) { 297 | self.instancesVue[maskId].mask.$destroy(); 298 | } 299 | } 300 | delete self.instancesVue[id]; 301 | } else { 302 | setTimeout(function () { 303 | let oElm = document.getElementById(id); 304 | if (oElm) { 305 | document.body.removeChild(oElm); 306 | delete self.instances[id]; 307 | self.instancesVue[id].main.$destroy(); 308 | if (self.instancesVue[id].iframe != '') { 309 | self.instancesVue[id].iframe.$destroy(); 310 | } 311 | } 312 | }, 200); 313 | } 314 | } 315 | /** 316 | * 关闭一个弹窗 317 | * @param {[type]} id [description] 318 | * @return {[type]} [description] 319 | */ 320 | self.closeAll = function (type = -1) { 321 | let types = { 322 | 'alert': 0, 323 | 'page': 1, 324 | 'iframe': 2, 325 | 'loading': 3, 326 | 'tips': 4, 327 | 'msg': 5 328 | }; 329 | if (type === -1) { 330 | for (let k in self.instances) { 331 | self.close(k); 332 | } 333 | } else { 334 | let targetType = types[type]; 335 | for (let k in self.instances) { 336 | if (self.instances[k].type === targetType) { 337 | self.close(k); 338 | } 339 | } 340 | } 341 | } 342 | /** 343 | * 手动最大化 344 | */ 345 | self.full = function (id = '') { 346 | document.querySelector('#' + id + ' .lv-icon-max').click(); 347 | } 348 | /** 349 | * 手动最小化 350 | */ 351 | self.min = function (id = '') { 352 | document.querySelector('#' + id + ' .lv-icon-mini').click(); 353 | } 354 | /** 355 | * 手动最小化 356 | */ 357 | self.restore = function (id = '') { 358 | document.querySelector('#' + id + ' .lv-icon-huanyuan').click(); 359 | } 360 | 361 | 362 | /** 363 | * get offset 364 | */ 365 | // function getOffset() { 366 | // let offset = []; 367 | // offset.push(document.body.clientWidth); 368 | // offset.push(document.body.clientHeight); 369 | // return offset; 370 | // } 371 | 372 | /** 373 | * 合并json 374 | * @method mergeJson 375 | * @param {[type]} optons [description] 376 | * @param {[type]} def [description] 377 | * @return {[type]} [description] 378 | */ 379 | function mergeJson(options, def) { 380 | for (let key in def) { 381 | if (options[key] == undefined) { 382 | options[key] = def[key]; 383 | } 384 | } 385 | return options; 386 | } 387 | 388 | return self; 389 | }); 390 | 391 | // module.exports = Notification; 392 | export default Notification; -------------------------------------------------------------------------------- /packages/layer/src/layer.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | 73 | 74 | 78 | -------------------------------------------------------------------------------- /packages/layer/src/loading.vue: -------------------------------------------------------------------------------- 1 | 9 | 15 | 16 | 51 | -------------------------------------------------------------------------------- /packages/layer/src/mask.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | 71 | 72 | 83 | -------------------------------------------------------------------------------- /packages/layer/src/msg.vue: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | 43 | -------------------------------------------------------------------------------- /packages/layer/src/page.vue: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 88 | -------------------------------------------------------------------------------- /packages/layer/src/prompt.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 77 | 78 | 79 | 118 | -------------------------------------------------------------------------------- /packages/layer/src/tips.vue: -------------------------------------------------------------------------------- 1 | 9 | 19 | 20 | 131 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | vue-layer 9 | 10 | 11 | 12 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | module.exports = { 3 | // 修改 pages 入口 4 | pages: { 5 | index: { 6 | entry: 'examples/main.js', // 入口 7 | template: 'public/index.html', // 模板 8 | filename: 'index.html' // 输出文件 9 | } 10 | }, 11 | // 扩展 webpack 配置 12 | chainWebpack: config => { 13 | // @ 默认指向 src 目录,这里要改成 examples 14 | // 另外也可以新增一个 ~ 指向 packages 15 | config.resolve.alias 16 | .set('@', path.resolve('examples')) 17 | .set('~', path.resolve('packages')) 18 | 19 | // 把 packages 和 examples 加入编译,因为新增的文件默认是不被 webpack 处理的 20 | config.module 21 | .rule('js') 22 | .include.add(/packages/).end() 23 | .include.add(/examples/).end() 24 | .use('babel') 25 | .loader('babel-loader') 26 | .tap(options => { 27 | // 修改它的选项... 28 | return options 29 | }) 30 | } 31 | } -------------------------------------------------------------------------------- /wx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zuoyanart/vue-layer/78857770435d0bff6e604687b96cb0f22c0d3a59/wx.jpg --------------------------------------------------------------------------------