@yqg/simple 1.0.0 → 1.0.1-beta.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +197 -3
- package/dist/index-1632f3d7.js +2 -0
- package/dist/index-1632f3d7.js.map +1 -0
- package/dist/index-66c4e9f4.js +2 -0
- package/dist/index-66c4e9f4.js.map +1 -0
- package/dist/index-87a0d73b.js +2 -0
- package/dist/index-87a0d73b.js.map +1 -0
- package/dist/index-9f0efb47.js +2 -0
- package/dist/index-9f0efb47.js.map +1 -0
- package/dist/index-a9c19e9c.js +2 -0
- package/dist/index-a9c19e9c.js.map +1 -0
- package/dist/index-bad730f4.js +2 -0
- package/dist/index-bad730f4.js.map +1 -0
- package/dist/index-c1aefa89.js +2 -0
- package/dist/index-c1aefa89.js.map +1 -0
- package/dist/index-d7b51690.js +2 -0
- package/dist/index-d7b51690.js.map +1 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +57 -2
- package/src/index.js +3 -0
- package/src/types/util/enum.d.ts +20 -0
- package/src/types/util/format-map.d.ts +84 -0
- package/src/types/util/index.d.ts +19 -0
- package/src/types/util/json.d.ts +21 -0
- package/src/types/util/keyCodeMap.d.ts +26 -0
- package/src/types/util/local-storage.d.ts +26 -0
- package/src/types/util/object.d.ts +91 -0
- package/src/types/util/storage.d.ts +62 -0
- package/src/types/util/swim-lane.d.ts +15 -0
- package/src/types/util/tool.d.ts +13 -0
- package/src/util/tool.js +0 -41
package/README.md
CHANGED
|
@@ -87,9 +87,203 @@ export default {
|
|
|
87
87
|
|
|
88
88
|
## 工具函数
|
|
89
89
|
|
|
90
|
+
### 完整引入(从主入口)
|
|
91
|
+
|
|
90
92
|
```javascript
|
|
91
|
-
import { formatMap, object } from '@yqg/simple'
|
|
93
|
+
import { util, formatMap, object, constant } from '@yqg/simple'
|
|
94
|
+
|
|
95
|
+
// 使用加密工具
|
|
96
|
+
const encrypted = util.aesEncrypt('secret message')
|
|
97
|
+
const decrypted = util.aesDecrypt(encrypted)
|
|
98
|
+
|
|
99
|
+
// 使用对象工具
|
|
100
|
+
const value = object.pickValue(data, 'user.name')
|
|
101
|
+
const merged = object.merge(obj1, obj2)
|
|
92
102
|
|
|
93
|
-
//
|
|
103
|
+
// 使用格式化工具
|
|
94
104
|
const formatted = formatMap.formatValue(value, options)
|
|
95
|
-
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 按需引入(推荐)
|
|
108
|
+
|
|
109
|
+
支持通过子路径按需引入工具函数,减少打包体积:
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
// 加密和字符串工具
|
|
113
|
+
import { aesEncrypt, aesDecrypt, camelCaseToUnderscore } from '@yqg/simple/util/tool'
|
|
114
|
+
|
|
115
|
+
const encrypted = aesEncrypt('secret message')
|
|
116
|
+
const snakeCase = camelCaseToUnderscore('userName') // 'user_name'
|
|
117
|
+
|
|
118
|
+
// 对象操作工具
|
|
119
|
+
import { pickValue, setValue, merge } from '@yqg/simple/util/object'
|
|
120
|
+
|
|
121
|
+
const data = { user: { name: 'John', age: 30 } }
|
|
122
|
+
const name = pickValue(data, 'user.name') // 'John'
|
|
123
|
+
const updated = setValue(data, 'user.email', 'john@example.com')
|
|
124
|
+
const merged = merge({ a: 1 }, { b: 2 }) // { a: 1, b: 2 }
|
|
125
|
+
|
|
126
|
+
// 格式化工具
|
|
127
|
+
import getFormatter from '@yqg/simple/util/format-map'
|
|
128
|
+
|
|
129
|
+
const listFormatter = getFormatter('list')
|
|
130
|
+
const formatted = listFormatter.format(['a', 'b', 'c']) // 'a\nb\nc'
|
|
131
|
+
|
|
132
|
+
// 枚举工具
|
|
133
|
+
import { boolOf, valueOf } from '@yqg/simple/util/enum'
|
|
134
|
+
|
|
135
|
+
const bool = boolOf('TRUE') // true
|
|
136
|
+
const str = valueOf(true) // 'TRUE'
|
|
137
|
+
|
|
138
|
+
// JSON 工具
|
|
139
|
+
import { pureJSONString, reformatJson } from '@yqg/simple/util/json'
|
|
140
|
+
|
|
141
|
+
const jsonStr = pureJSONString({ name: 'John' })
|
|
142
|
+
|
|
143
|
+
// 本地存储工具
|
|
144
|
+
import { setStorage, getStorage, removeItem } from '@yqg/simple/util/local-storage'
|
|
145
|
+
|
|
146
|
+
setStorage('user', JSON.stringify({ name: 'John' }))
|
|
147
|
+
const user = getStorage('user')
|
|
148
|
+
|
|
149
|
+
// 键码映射
|
|
150
|
+
import keyCodeMap from '@yqg/simple/util/keyCodeMap'
|
|
151
|
+
|
|
152
|
+
if (event.keyCode === keyCodeMap.enter) {
|
|
153
|
+
// 处理回车键
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Storage 类
|
|
157
|
+
import Storage from '@yqg/simple/util/storage'
|
|
158
|
+
|
|
159
|
+
const myStorage = new Storage('my-key', true) // 使用 sessionStorage
|
|
160
|
+
myStorage.set({ data: 'value' })
|
|
161
|
+
const data = myStorage.get()
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### TypeScript 支持
|
|
165
|
+
|
|
166
|
+
所有工具函数都提供完整的 TypeScript 类型声明,开发时会有智能提示:
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
import { aesEncrypt, pickValue, merge } from '@yqg/simple/util'
|
|
170
|
+
|
|
171
|
+
// ✅ 编辑器自动提示:aesEncrypt(message: string, key?: string): string
|
|
172
|
+
const encrypted = aesEncrypt('hello')
|
|
173
|
+
|
|
174
|
+
// ✅ 编辑器自动提示:pickValue<T = any>(obj: any, keyString: string): T | undefined
|
|
175
|
+
const value = pickValue<number>({ a: { b: 1 } }, 'a.b')
|
|
176
|
+
|
|
177
|
+
// ✅ 编辑器自动提示:merge<T, S>(target?: T, source?: S): T & S
|
|
178
|
+
const merged = merge({ a: 1 }, { b: 2 })
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 工具函数 API
|
|
182
|
+
|
|
183
|
+
#### 加密工具 (`util/tool`)
|
|
184
|
+
|
|
185
|
+
- `aesEncrypt(message: string, key?: string): string` - AES 加密
|
|
186
|
+
- `aesDecrypt(ciphertext: string, key?: string): string` - AES 解密
|
|
187
|
+
- `camelCaseToUnderscore(camelStr: string): string` - 驼峰转下划线
|
|
188
|
+
|
|
189
|
+
#### 对象工具 (`util/object`)
|
|
190
|
+
|
|
191
|
+
- `evalProp<T, V>(value: T | ((values: V) => T), values?: V): T` - 评估属性(函数或值)
|
|
192
|
+
- `pickValue<T>(obj: any, keyString: string): T | undefined` - 提取嵌套值(支持 'a.b.c' 或 'a[0].b')
|
|
193
|
+
- `setValue<T>(obj: T, keyString: string, value: any): T` - 设置嵌套值
|
|
194
|
+
- `spreadObjectKeys<T>(origin: T): T` - 展开对象键
|
|
195
|
+
- `numbersToStr<T>(val: T | T[]): ...` - 数字转字符串
|
|
196
|
+
- `spreadProps(props): ...` - 展开 Vue 组件属性
|
|
197
|
+
- `appendClass(className, appendix): ...` - 追加类名
|
|
198
|
+
- `merge<T, S>(target?: T, source?: S): T & S` - 深度合并对象
|
|
199
|
+
- `isMobile: boolean` - 是否为移动设备
|
|
200
|
+
|
|
201
|
+
#### 格式化工具 (`util/format-map`)
|
|
202
|
+
|
|
203
|
+
- `getFormatter(format: string | Formatter): Formatter` - 获取格式化器
|
|
204
|
+
- 内置格式化器:`boolean`、`bool`、`list`、`comma`、`listJson`、`json`、`listComma`、`commaToList`、`date`、`dateTime`、`percent`
|
|
205
|
+
|
|
206
|
+
```javascript
|
|
207
|
+
const listFormatter = getFormatter('list')
|
|
208
|
+
const formatted = listFormatter.format(['a', 'b', 'c']) // 'a\nb\nc'
|
|
209
|
+
const unformatted = listFormatter.unformat('a\nb\nc') // ['a', 'b', 'c']
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
#### 枚举工具 (`util/enum`)
|
|
213
|
+
|
|
214
|
+
- `boolOf(str: string): boolean` - 字符串转布尔值('TRUE' -> true)
|
|
215
|
+
- `valueOf(bool: boolean): 'TRUE' | 'FALSE' | undefined` - 布尔值转字符串(true -> 'TRUE')
|
|
216
|
+
|
|
217
|
+
#### JSON 工具 (`util/json`)
|
|
218
|
+
|
|
219
|
+
- `pureJSONString(value: any): string` - 转换为格式化的 JSON 字符串
|
|
220
|
+
- `reformatJson(value: string, context?: any): string` - 重新格式化 JSON 字符串
|
|
221
|
+
|
|
222
|
+
#### 本地存储工具 (`util/local-storage`)
|
|
223
|
+
|
|
224
|
+
- `setStorage(itemName: string, item: string): void` - 设置 localStorage
|
|
225
|
+
- `getStorage(itemName: string): string | null` - 获取 localStorage
|
|
226
|
+
- `removeItem(itemName: string): void` - 删除 localStorage 项
|
|
227
|
+
|
|
228
|
+
#### 键码映射 (`util/keyCodeMap`)
|
|
229
|
+
|
|
230
|
+
```javascript
|
|
231
|
+
const keyCodeMap = {
|
|
232
|
+
esc: 27,
|
|
233
|
+
tab: 9,
|
|
234
|
+
enter: 13,
|
|
235
|
+
up: 38,
|
|
236
|
+
down: 40,
|
|
237
|
+
backSpace: 8
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
#### Storage 类 (`util/storage`)
|
|
242
|
+
|
|
243
|
+
封装了 localStorage 或 sessionStorage 的存储类:
|
|
244
|
+
|
|
245
|
+
```typescript
|
|
246
|
+
class Storage {
|
|
247
|
+
constructor(key: string, useSessionStorage?: boolean)
|
|
248
|
+
set(cache: any): void // 设置存储
|
|
249
|
+
get<T = any>(): T | null // 获取存储
|
|
250
|
+
remove(): void // 删除存储
|
|
251
|
+
on(fn: (event: StorageEvent) => void): void // 监听变化
|
|
252
|
+
off(needsRemove?: boolean): void // 取消监听
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## 常量
|
|
257
|
+
|
|
258
|
+
```javascript
|
|
259
|
+
import * as constant from '@yqg/simple/constant'
|
|
260
|
+
|
|
261
|
+
// 或按需引入
|
|
262
|
+
import * as commonFields from '@yqg/simple/constant/common-fields'
|
|
263
|
+
import * as fields from '@yqg/simple/constant/fields'
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## 文档
|
|
267
|
+
|
|
268
|
+
- [详细使用示例](./USAGE_EXAMPLE.md)
|
|
269
|
+
- [更新日志](./CHANGELOG.md)
|
|
270
|
+
|
|
271
|
+
## 开发
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
# 安装依赖
|
|
275
|
+
npm install
|
|
276
|
+
|
|
277
|
+
# 开发模式
|
|
278
|
+
npm run dev
|
|
279
|
+
|
|
280
|
+
# 构建
|
|
281
|
+
npm run build
|
|
282
|
+
|
|
283
|
+
# 代码检查
|
|
284
|
+
npm run lint
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## License
|
|
288
|
+
|
|
289
|
+
MIT
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@vueuse/core"),i=require("moment"),n=require("underscore"),r=require("./index-d7b51690.js");require("ant-design-vue"),require("vue-clipboard2"),require("@yqg/enum"),require("vue"),require("vuex"),require("vue-codemirror"),require("codemirror/mode/clike/clike.js"),require("codemirror/mode/groovy/groovy.js"),require("codemirror/mode/javascript/javascript.js"),require("codemirror/mode/sql/sql.js"),require("codemirror/mode/yaml/yaml.js"),require("codemirror/mode/xml/xml.js"),require("codemirror/lib/codemirror.css"),require("codemirror/theme/neo.css"),require("codemirror/addon/hint/show-hint.css"),require("codemirror/addon/display/placeholder.js"),require("codemirror/addon/edit/closebrackets.js"),require("codemirror/addon/edit/closetag.js"),require("codemirror/addon/edit/matchbrackets.js"),require("codemirror/addon/edit/matchtags.js"),require("codemirror/addon/hint/show-hint.js"),require("codemirror/addon/hint/sql-hint.js"),require("codemirror/addon/fold/foldgutter.css"),require("codemirror/addon/fold/foldcode.js"),require("codemirror/addon/fold/foldgutter.js"),require("codemirror/addon/fold/brace-fold.js"),require("codemirror/addon/fold/comment-fold.js"),require("codemirror/addon/fold/indent-fold.js"),require("yqg-common/core/StageUtil"),require("element-resize-detector"),require("vuedraggable"),require("moment-timezone"),require("crypto-js"),require("@yqg/resource"),require("prismjs"),require("qiniu-js"),require("dompurify"),require("marked"),require("tiptap"),require("tiptap-extensions"),require("tiptap-commands"),require("prosemirror-inputrules"),require("tiptap-utils"),require("@ant-design/icons/lib/outline/LinkOutline"),require("@ant-design/icons/lib/outline/FileOutline"),require("@ant-design/icons/lib/outline/BoldOutline"),require("@ant-design/icons/lib/outline/StrikethroughOutline"),require("@ant-design/icons/lib/outline/UnderlineOutline"),require("@ant-design/icons/lib/outline/UnorderedListOutline"),require("@ant-design/icons/lib/outline/OrderedListOutline"),require("@ant-design/icons/lib/outline/UndoOutline"),require("@ant-design/icons/lib/outline/FontColorsOutline"),require("@ant-design/icons/lib/outline/FontSizeOutline"),require("@ant-design/icons/lib/outline/AlignLeftOutline"),require("@ant-design/icons/lib/outline/AlignCenterOutline"),require("@ant-design/icons/lib/outline/AlignRightOutline"),require("@ant-design/icons/lib/outline/AudioOutline"),require("@ant-design/icons/lib/outline/BgColorsOutline"),require("@ant-design/icons/lib/outline/UserOutline"),require("@ant-design/icons/lib/outline/MenuFoldOutline"),require("@ant-design/icons/lib/outline/MenuUnfoldOutline"),require("@ant-design/icons/lib/outline/UploadOutline"),require("@ant-design/icons/lib/outline/BookOutline"),require("@ant-design/icons/lib/outline/LockOutline"),require("@ant-design/icons/lib/outline/UnlockOutline"),require("@ant-design/icons/lib/outline/PhoneOutline"),require("@ant-design/icons/lib/outline/QuestionOutline"),require("@ant-design/icons/lib/outline/SettingOutline"),require("@ant-design/icons/lib/outline/HeartOutline"),require("@ant-design/icons/lib/outline/CaretLeftOutline"),require("@ant-design/icons/lib/outline/CaretRightOutline"),require("@ant-design/icons/lib/outline/BellOutline"),require("@ant-design/icons/lib/outline/BarChartOutline"),require("@ant-design/icons/lib/outline/RedEnvelopeOutline"),require("@ant-design/icons/lib/outline/CreditCardOutline"),require("@ant-design/icons/lib/outline/ToolOutline"),require("@ant-design/icons/lib/outline/AppstoreOutline"),require("@ant-design/icons/lib/outline/DownloadOutline"),require("@ant-design/icons/lib/outline/SyncOutline"),require("@ant-design/icons/lib/outline/CloseOutline"),require("@ant-design/icons/lib/outline/CheckOutline"),require("@ant-design/icons/lib/outline/LoadingOutline"),require("@ant-design/icons/lib/outline/CheckCircleOutline"),require("@ant-design/icons/lib/outline/InfoCircleOutline"),require("@ant-design/icons/lib/outline/CloseCircleOutline"),require("@ant-design/icons/lib/outline/ExclamationCircleOutline"),require("@ant-design/icons/lib/outline/QuestionCircleOutline"),require("@ant-design/icons/lib/fill/CheckCircleFill"),require("@ant-design/icons/lib/fill/InfoCircleFill"),require("@ant-design/icons/lib/fill/CloseCircleFill"),require("@ant-design/icons/lib/fill/ExclamationCircleFill"),require("@ant-design/icons/lib/outline/UpOutline"),require("@ant-design/icons/lib/outline/DownOutline"),require("@ant-design/icons/lib/outline/LeftOutline"),require("@ant-design/icons/lib/outline/RightOutline"),require("@ant-design/icons/lib/outline/RedoOutline"),require("@ant-design/icons/lib/outline/CalendarOutline"),require("@ant-design/icons/lib/outline/SearchOutline"),require("@ant-design/icons/lib/outline/BarsOutline"),require("@ant-design/icons/lib/fill/StarFill"),require("@ant-design/icons/lib/outline/FilterOutline"),require("@ant-design/icons/lib/fill/CaretUpFill"),require("@ant-design/icons/lib/fill/CaretDownFill"),require("@ant-design/icons/lib/outline/CaretUpOutline"),require("@ant-design/icons/lib/outline/CaretDownOutline"),require("@ant-design/icons/lib/outline/MinusOutline"),require("@ant-design/icons/lib/outline/EditOutline"),require("@ant-design/icons/lib/outline/FolderOpenOutline"),require("@ant-design/icons/lib/outline/FolderOutline"),require("@ant-design/icons/lib/outline/PaperClipOutline"),require("@ant-design/icons/lib/outline/PictureOutline"),require("@ant-design/icons/lib/outline/EyeOutline"),require("@ant-design/icons/lib/outline/EyeInvisibleOutline"),require("@ant-design/icons/lib/outline/DeleteOutline"),require("@ant-design/icons/lib/outline/ItalicOutline"),require("@ant-design/icons/lib/outline/CodeOutline"),require("@ant-design/icons/lib/outline/FileImageOutline"),require("@ant-design/icons/lib/outline/FullscreenOutline"),require("@ant-design/icons/lib/outline/FullscreenExitOutline"),require("@ant-design/icons/lib/outline/GlobalOutline"),require("@ant-design/icons/lib/outline/FastBackwardOutline"),require("@ant-design/icons/lib/outline/FastForwardOutline"),require("@ant-design/icons/lib/outline/BorderOutline"),require("@ant-design/icons/lib/outline/PauseOutline"),require("@ant-design/icons/lib/outline/BulbOutline");const t=3,l=e.useStorage("FIREWORK",{perDay:0,dateRange:[],expired:!0});var o={name:"YqgFirework",props:{getConfig:{type:Function,required:!0},serializer:{type:[Array,String,Boolean],default:()=>["data","body","data"]},options:{type:Object,default:()=>({})},zIndex:{type:Number,default:1e3},intervalPerLaunch:{type:Number,default:1e3},countPerLaunch:{type:Number,default:12},launchCount:{type:Number,default:2},disabledInFrame:{type:Boolean,default:!0}},data(){const{zIndex:e}=this;return{firework:null,canFire:!1,style:{width:0,height:0,position:"fixed",top:0,left:0,zIndex:e}}},async mounted(){if(this.disabledInFrame&&self!==top)return;const{Fireworks:i}=await import("fireworks-js");await this.setStore();if(!this.checkCanFire())return;this.$nextTick(()=>{const n=new i(this.$refs.container,this.options);this.firework=n,this.updateCanvasSize(),this.launch(()=>{this.style.zIndex=-1,this.style.display="none",l.value.perDay=(e.get(l)?.perDay??0)-1})});const n=e.useEventListener(window,"resize",this.updateCanvasSize);this.$once("hook:beforeDestroy",()=>{n(),this.firework?.clear?.(),this.firework=null})},methods:{async setStore(){if("function"!=typeof this.getConfig)return;const r=await this.getConfig(),{DateRange:o="",Perday:u=t,IsOn:s=!1}=this.serializer?n.get(r,this.serializer,Object.create(null)):r;if(!s)return void e.set(l,null);const d=o?.split(",")?.slice(0,2)?.map((e,n)=>i(e)?.[n?"endOf":"startOf"]?.("day"))?.filter(e=>e?.isValid?.())??[],{perDay:a,expired:c}=e.get(l)??{},q=!0===c||i().isAfter(c)?Number(u)||t:a;e.set(l,{perDay:q,dateRange:d,expired:i().endOf("day")})},checkCanFire(){const{perDay:n,dateRange:r}=e.get(l)??{},t=i();return 2===r?.length&&t.isAfter(r?.[0])&&t.isBefore(r?.[1])&&!Number.isNaN(n)&&n>0},updateCanvasSize(){if(!this.firework)return;const{width:i,height:n}=e.useWindowSize();this.firework.updateSize?.({width:e.get(i),height:e.get(n)})},async launch(i){for(let i=0;i<this.launchCount;i++)await e.promiseTimeout(this.intervalPerLaunch),this.firework?.launch?.(this.countPerLaunch);await e.promiseTimeout(2e3),i?.()}},render(){return(0,arguments[0])("div",{class:"firework-container",style:this.style,ref:"container"})}};const u=o,s=r.normalizeComponent({},undefined,u,undefined,undefined,undefined,!1,void 0,void 0,void 0);exports.default=s;
|
|
2
|
+
//# sourceMappingURL=index-1632f3d7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-1632f3d7.js","sources":["../src/component/yqg-firework/index.vue"],"sourcesContent":["<!-- @author youboli -->\n<!-- @email youboli@yangqianguan.com -->\n<!-- @date 2023-01-12 13:34:38.000 -->\n<!-- @desc generated by yqg-cli@5.9.3 -->\n\n<script>\n\n import {\n useStorage,\n useWindowSize,\n useEventListener,\n promiseTimeout,\n get,\n set\n } from '@vueuse/core';\n import moment from 'moment';\n import _ from 'underscore';\n\n const DefaultPerday = 3;\n const StorageKey = 'FIREWORK';\n const store = useStorage(StorageKey, {perDay: 0, dateRange: [], expired: true});\n\n export default {\n name: 'YqgFirework',\n\n props: {\n getConfig: {\n type: Function,\n required: true\n },\n\n serializer: {\n type: [Array, String, Boolean],\n default: () => ['data', 'body', 'data']\n },\n\n options: {\n type: Object,\n default: () => ({})\n },\n\n zIndex: {\n type: Number,\n default: 1000\n },\n\n intervalPerLaunch: {\n type: Number,\n default: 1000\n },\n\n countPerLaunch: {\n type: Number,\n default: 12\n },\n\n launchCount: {\n type: Number,\n default: 2\n },\n\n disabledInFrame: {\n type: Boolean,\n default: true\n }\n },\n\n data() {\n const {zIndex} = this;\n\n return {\n firework: null,\n canFire: false,\n style: {\n width: 0,\n height: 0,\n position: 'fixed',\n top: 0,\n left: 0,\n zIndex\n }\n };\n },\n\n async mounted() {\n if (this.disabledInFrame && self !== top) return;\n\n const {Fireworks} = await import('fireworks-js');\n\n await this.setStore();\n\n const canFire = this.checkCanFire();\n\n if (!canFire) return;\n\n this.$nextTick(() => {\n const firework = new Fireworks(this.$refs.container, this.options);\n\n this.firework = firework;\n\n this.updateCanvasSize();\n\n this.launch(() => {\n this.style.zIndex = -1;\n this.style.display = 'none';\n store.value.perDay = (get(store)?.perDay ?? 0) - 1;\n });\n });\n\n const cleanWindowResize = useEventListener(window, 'resize', this.updateCanvasSize);\n\n this.$once('hook:beforeDestroy', () => {\n cleanWindowResize();\n this.firework?.clear?.();\n this.firework = null;\n });\n },\n\n methods: {\n async setStore() {\n if (typeof this.getConfig !== 'function') return;\n\n const config = await this.getConfig();\n const {\n DateRange = '',\n Perday = DefaultPerday,\n IsOn = false\n } = this.serializer ? _.get(config, this.serializer, Object.create(null)) : config;\n\n if (!IsOn) {\n set(store, null);\n\n return;\n }\n\n const dateRange = DateRange\n ?.split(',')\n ?.slice(0, 2)\n ?.map((date, index) => moment(date)?.[index ? 'endOf' : 'startOf']?.('day'))\n ?.filter(date => date?.isValid?.())\n ?? [];\n\n const {perDay: cachePerday, expired: cacheExpired} = get(store) ?? {};\n const isExpired = cacheExpired === true || moment().isAfter(cacheExpired);\n const perDay = isExpired\n ? Number(Perday) || DefaultPerday\n : cachePerday;\n\n set(store, {\n perDay,\n dateRange,\n expired: moment().endOf('day')\n });\n },\n\n checkCanFire() {\n const {perDay, dateRange} = get(store) ?? {};\n const now = moment();\n\n const canFire = dateRange?.length === 2\n && now.isAfter(dateRange?.[0])\n && now.isBefore(dateRange?.[1])\n && !Number.isNaN(perDay)\n && perDay > 0;\n\n return canFire;\n },\n\n updateCanvasSize() {\n if (!this.firework) return;\n\n const {width, height} = useWindowSize();\n this.firework.updateSize?.({width: get(width), height: get(height)});\n },\n\n async launch(afterLaunchCb) {\n for (let index = 0; index < this.launchCount; index++) {\n await promiseTimeout(this.intervalPerLaunch);\n\n this.firework?.launch?.(this.countPerLaunch);\n }\n\n await promiseTimeout(2000);\n\n afterLaunchCb?.();\n }\n },\n\n render() {\n return (\n <div class=\"firework-container\" style={this.style} ref=\"container\" />\n );\n }\n };\n\n</script>\n"],"names":["DefaultPerday","store","useStorage","perDay","dateRange","expired","script","name","props","getConfig","type","Function","required","serializer","Array","String","Boolean","default","options","Object","zIndex","Number","intervalPerLaunch","countPerLaunch","launchCount","disabledInFrame","data","this","firework","canFire","style","width","height","position","top","left","mounted","self","Fireworks","import","setStore","checkCanFire","$nextTick","$refs","container","updateCanvasSize","launch","display","value","get","cleanWindowResize","useEventListener","window","$once","clear","methods","config","DateRange","Perday","IsOn","_","create","set","split","slice","map","date","index","moment","filter","isValid","cachePerday","cacheExpired","isAfter","endOf","now","length","isBefore","isNaN","useWindowSize","updateSize","afterLaunchCb","promiseTimeout","render","h","arguments","class","ref","__vue_script__"],"mappings":"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"}
|