feat(admin): 更新前端资源文件及修复相关功能
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
Some checks failed
Build docker and publish / linux (1.24.5) (push) Failing after 39s
refactor(service): 修改banner和guild删除逻辑为软删除 fix(service): 修复删除操作使用软删除而非物理删除 build: 添加SQLite测试仓库实现 docs: 新增奖励管理字段拆分和批量抽奖UI改造文档 ci: 更新CI忽略文件 style: 清理无用资源文件
This commit is contained in:
parent
6ee627139c
commit
2a89a1ab9d
0
.trae/.ignore
Normal file
0
.trae/.ignore
Normal file
49
.trae/documents/修复活动创建向导步骤逻辑并统一全局风格.md
Normal file
49
.trae/documents/修复活动创建向导步骤逻辑并统一全局风格.md
Normal file
@ -0,0 +1,49 @@
|
||||
## 问题确认
|
||||
- 症状:在“创建活动”向导中点击“下一步”后,出现“批量抽奖”界面,用户认为逻辑错误。
|
||||
- 初步研判:批量抽奖来自 `BatchDrawDialog`(src/views/activity/rewards/modules/batch-draw-dialog.vue)。该组件在管理页(src/views/activity/manage/index.vue)中常驻渲染,可能因不当条件渲染或状态误触发而在向导流程中弹出。
|
||||
- 路由侧现状:列表页有 `router.push({ name: 'ActivityWizard' })`,但路由模块未注册对应路由,存在跳转异常风险。
|
||||
|
||||
## 目标
|
||||
1. 保证向导“下一步”仅在步骤间顺序前进:活动 → 期数 → 奖品,绝不触发批量抽奖。
|
||||
2. 统一界面风格为项目全局规范:颜色、圆角、阴影、按钮、表单、布局与动画。
|
||||
3. 保留现有功能,避免回归,完成自测与构建验证。
|
||||
|
||||
## 技术方案
|
||||
### 1. 逻辑修复
|
||||
- 向导页面(两处)严格限制导航:
|
||||
- `src/views/activity/wizard/index.vue`:`next()` 仅在成功创建活动后 `active.value = 1`,在成功创建期数后 `active.value = 2`,移除或校验任何非最终提交阶段的 `router.push` 与其他弹窗触发。
|
||||
- `src/views/activity/manage/index.vue`:`nextWizard()` 仅递进 `wizardActive`。确保 `BatchDrawDialog` 的 `v-model` 只由 `openBatchDraw()` 显式开启。
|
||||
- 隔离批量抽奖弹窗:
|
||||
- 在管理页将 `<BatchDrawDialog v-model="showBatchDrawDialog" ... />` 增加条件渲染 `v-if="!showWizard"`,确保向导弹窗期间不渲染批量抽奖组件,从根本杜绝误触发。
|
||||
- 路由补全:在 `src/router/modules/activity.ts` 注册 `ActivityWizard` 路由(path `/activity/wizard`,component `'/activity/wizard'`),避免列表页“创建活动”跳转异常导致意外页面状态。
|
||||
|
||||
### 2. 风格统一
|
||||
- 去除自定义渐变与玻璃拟态,改为全局样式:
|
||||
- 主容器采用 `art-card` 与项目标准阴影、圆角(卡片 16px,按钮/输入 12px)。
|
||||
- 步骤指示器使用项目的圆形数字样式与轻量过渡;颜色使用主题色 `#5D87FF` 及状态色变量。
|
||||
- 表单与按钮风格遵循项目统一尺寸、高度与交互(36px 高度,标准阴影与过渡)。
|
||||
- 统一 CSS 变量与工具类:
|
||||
- 使用项目内的 CSS 变量(颜色、圆角、间距),移除局部硬编码样式。
|
||||
- 采用现有 `art-card`、栅格与间距体系,保证一致性。
|
||||
|
||||
### 3. 验证与测试
|
||||
- 开发验证:
|
||||
- 在两处向导中执行完整流程(创建活动→创建期数→配置奖品),确认“下一步”不触发 `BatchDrawDialog`。
|
||||
- 构建检查:`npm run build` 无 TS/构建错误。
|
||||
- 回归验证:
|
||||
- 管理页列表的“模拟(批量抽奖)”按钮仍可正常打开 `BatchDrawDialog`。
|
||||
- 列表页“创建活动”跳转到向导路由正常。
|
||||
|
||||
## 交付物
|
||||
- 修复后的向导逻辑代码(两处),隔离批量抽奖弹窗的条件渲染。
|
||||
- 新增路由项 `ActivityWizard`。
|
||||
- 去除非统一风格的样式,替换为项目全局风格实现。
|
||||
- 构建与运行验证结果说明。
|
||||
|
||||
## 验收标准
|
||||
- 向导点击“下一步”始终进入下一步骤,不出现批量抽奖。
|
||||
- 界面风格与全局统一(颜色、圆角、阴影、按钮、表单风格一致)。
|
||||
- 列表页“创建活动”跳转向导正常;管理页“模拟”按钮打开批量抽奖正常。
|
||||
- 构建通过,无新错误。
|
||||
|
||||
如确认以上方案,我将开始实施并同步每一步的修复与验证结果。
|
||||
86
.trae/documents/删除级联逻辑优化方案.md
Normal file
86
.trae/documents/删除级联逻辑优化方案.md
Normal file
@ -0,0 +1,86 @@
|
||||
## 背景
|
||||
- 当前不启用数据库外键约束(FK),删除由业务逻辑驱动。
|
||||
- 现有删除实现多为单表删除,未做级联:如删除活动 `internal/service/activity/activity_delete.go:9`、删除期 `internal/service/activity/issue_delete.go:9`、删除用户 `internal/service/user/batch_user.go:32`。
|
||||
- GORM 初始化未声明外键或级联:`internal/repository/mysql/mysql.go:97`。
|
||||
|
||||
## 目标
|
||||
- 在业务层实现“逻辑级联删除”,保证删除主实体时,同步清理其关联业务数据,且性能与可控性优于 FK 级联。
|
||||
|
||||
## 级联清单
|
||||
### 删除活动(Activities.ID)
|
||||
- 删除活动期:`activity_issues` 按 `activity_id`(`internal/repository/mysql/model/activity_issues.gen.go:18`)
|
||||
- 期下配置与承诺:
|
||||
- 奖励配置 `activity_reward_settings` 按 `issue_id`(`internal/repository/mysql/model/activity_reward_settings.gen.go:18`)
|
||||
- 随机承诺 `issue_random_commitments` 按 `issue_id`(`internal/repository/mysql/model/issue_random_commitments.gen.go:18`)
|
||||
- 期下抽奖相关:
|
||||
- 抽奖日志 `activity_draw_logs` 按 `issue_id`(`internal/repository/mysql/model/activity_draw_logs.gen.go:18`)
|
||||
- 抽奖效果 `activity_draw_effects` 按 `draw_log_id`/`issue_id`(`internal/repository/mysql/model/activity_draw_effects.gen.go:17,29`)
|
||||
- 抽奖凭据 `activity_draw_receipts` 按 `draw_log_id`(`internal/repository/mysql/model/activity_draw_receipts.gen.go:17`)
|
||||
- 活动范围效果与道具:
|
||||
- 用户道具使用记录 `user_item_cards` 按 `used_activity_id` / `used_issue_id` / `used_draw_log_id`(`internal/repository/mysql/model/user_item_cards.gen.go:24,25,23`)
|
||||
- 抽奖效果快照 `activity_draw_effects` 按 `activity_id`/`issue_id`(`internal/repository/mysql/model/activity_draw_effects.gen.go:28,29`)
|
||||
- 资产与日志:
|
||||
- 用户资产 `user_inventory` 按 `activity_id`(`internal/repository/mysql/model/user_inventory.gen.go:21`)
|
||||
- 公会贡献日志 `guild_contribute_logs` 按 `activity_id` / `issues_id`(`internal/repository/mysql/model/guild_contribute_logs.gen.go:19,20`)
|
||||
- 系统模板:
|
||||
- 系统道具卡 `system_item_cards` 按 `activity_id` / `issue_id`(`internal/repository/mysql/model/system_item_cards.gen.go:23,24`)
|
||||
- 系统优惠券 `system_coupons` 按 `activity_id`(`internal/repository/mysql/model/system_coupons.gen.go:20`)
|
||||
- 最后删除活动主表:`activities`(`internal/repository/mysql/model/activities.gen.go:15`)
|
||||
|
||||
### 删除用户(Users.ID)
|
||||
- 用户身份与权益:
|
||||
- 头衔 `user_titles` 按 `user_id`(`internal/repository/mysql/model/user_titles.gen.go:16`)
|
||||
- 领取型权益限流 `user_title_effect_claims` 按 `user_id`(`internal/repository/mysql/model/user_title_effect_claims.gen.go:16`)
|
||||
- 用户账户与地址:
|
||||
- 地址 `user_addresses` 按 `user_id`(`internal/repository/mysql/model/user_addresses.gen.go:18`)
|
||||
- 积分余额 `user_points` 按 `user_id`(`internal/repository/mysql/model/user_points.gen.go:18`)
|
||||
- 积分流水 `user_points_ledger` 按 `user_id`(`internal/repository/mysql/model/user_points_ledger.gen.go:17`)
|
||||
- 用户订单与优惠:
|
||||
- 订单 `orders` 按 `user_id`(`internal/repository/mysql/model/orders.gen.go:18`)
|
||||
- 用户优惠券 `user_coupons` 按 `user_id`(`internal/repository/mysql/model/user_coupons.gen.go:18`)
|
||||
- 用户资产与道具:
|
||||
- 用户资产 `user_inventory` 按 `user_id`(`internal/repository/mysql/model/user_inventory.gen.go:18`)
|
||||
- 用户道具卡 `user_item_cards` 按 `user_id`(`internal/repository/mysql/model/user_item_cards.gen.go:18`)
|
||||
- 与抽奖相关:
|
||||
- 抽奖效果 `activity_draw_effects` 按 `user_id` 或关联 `draw_log_id`(`internal/repository/mysql/model/activity_draw_effects.gen.go:18,17`)
|
||||
- 抽奖凭据 `activity_draw_receipts` 关联 `draw_log_id`(`internal/repository/mysql/model/activity_draw_receipts.gen.go:17`)
|
||||
- 抽奖日志 `activity_draw_logs` 按 `user_id`(`internal/repository/mysql/model/activity_draw_logs.gen.go:17`)
|
||||
- 公会关联:
|
||||
- 公会成员 `guild_members` 按 `user_id`(`internal/repository/mysql/model/guild_members.gen.go:18`)
|
||||
- 公会贡献日志 `guild_contribute_logs` 按 `user_id`(`internal/repository/mysql/model/guild_contribute_logs.gen.go:18`)
|
||||
- 履约/发货:
|
||||
- 发货记录 `shipping_records` 按 `user_id`(`internal/repository/mysql/model/shipping_records.gen.go:18`)
|
||||
- 运营发货统计 `ops_shipping_stats` 按 `user_id`(`internal/repository/mysql/model/ops_shipping_stats.gen.go:21`)
|
||||
- 最后软删用户:`users.deleted_at`(`internal/repository/mysql/model/users.gen.go:20`)
|
||||
|
||||
## 删除顺序(事务内)
|
||||
- 统一采用“从叶到根”的顺序:
|
||||
1) 以日志/效果/凭据等子表为先(`activity_draw_effects`、`activity_draw_receipts`、`activity_draw_logs`)
|
||||
2) 再清理资产/权益/模板(`user_inventory`、`user_item_cards`、`user_titles`、`system_*`)
|
||||
3) 清理期与期下配置(`activity_issues`、`activity_reward_settings`、`issue_random_commitments`)
|
||||
4) 删除根实体(`activities` 或软删 `users`)
|
||||
- 全过程包裹在单事务中,任何一步失败则回滚。
|
||||
|
||||
## 实现策略
|
||||
- 新增业务服务方法:
|
||||
- `DeleteActivityCascade(ctx, activityID)`:按“删除活动”清单顺序删除
|
||||
- `DeleteUserCascade(ctx, userID)`:按“删除用户”清单顺序删除
|
||||
- 技术要点:
|
||||
- 批量删除使用分批(如 5k/批)避免长事务与大锁;必要时按时间/ID 片段迭代
|
||||
- 统一 `WHERE` 条件与索引列(`user_id`/`activity_id`/`issue_id`/`draw_log_id`)确保扫描性能
|
||||
- 软删与硬删:保留用户软删(合规与审计),其余按当前表定义硬删;如需统一软删,可后续逐表补充 `gorm.DeletedAt`
|
||||
- 幂等性:每个子删除操作按条件删除,无记录时直接通过;重复调用不报错
|
||||
- 审计:记录操作日志(操作者、对象ID、影响行数),便于回溯
|
||||
|
||||
## 验收标准
|
||||
- 删除活动时,任一期及其抽奖日志/效果/凭据、奖励配置、承诺、资产、贡献日志与相关模板均被清理;根活动删除成功。
|
||||
- 删除用户时,地址/订单/优惠券/积分(余额+流水)/资产/道具/抽奖相关/公会关系/发货记录及统计均被清理;根用户软删成功。
|
||||
- 全流程事务保障、失败回滚;批量删除性能稳定,无显著锁表或超时。
|
||||
|
||||
## 需要改造的现有入口(参考)
|
||||
- 活动删除入口:`internal/service/activity/activity_delete.go:9` → 升级为调用 `DeleteActivityCascade`
|
||||
- 期删除入口:`internal/service/activity/issue_delete.go:9` → 被 `DeleteActivityCascade` 内部调用(或保留独立级联)
|
||||
- 用户删除入口:`internal/service/user/batch_user.go:32` → 升级为调用 `DeleteUserCascade`
|
||||
|
||||
## 后续动作
|
||||
- 我将基于以上清单与顺序,补充两套事务级联删除实现,并为关键入口替换调用;同时补充单元测试覆盖正常/边界/异常三类用例,验证幂等与性能。
|
||||
93
.trae/documents/商品列表批量操作与活动创建优化及仪表盘修复方案.md
Normal file
93
.trae/documents/商品列表批量操作与活动创建优化及仪表盘修复方案.md
Normal file
@ -0,0 +1,93 @@
|
||||
## 总览
|
||||
- 覆盖 5 个问题:商品列表批量操作、活动创建奖品价格与总价、仪表盘图表重叠修复、活动创建性能、弹窗点击关闭问题。
|
||||
- 技术栈:管理端前端 Vue3 + Element Plus(路径 `web/admin`),后端 Go(路径 `internal/*`)。
|
||||
- 目标:补齐商品批量接口、完善前端交互与缓存、修正布局与加载时序、增强性能与统一弹窗行为。
|
||||
|
||||
## 关键位置
|
||||
- 商品前端:`web/admin/src/views/product/list/index.vue`,API:`web/admin/src/api/product.ts`
|
||||
- 商品后端:`internal/api/admin/product_create.go`、Service:`internal/service/product/product.go`
|
||||
- 活动向导:`web/admin/src/views/activity/wizard/index.vue`
|
||||
- 奖励管理:`web/admin/src/views/activity/rewards/index.vue`
|
||||
- 仪表盘容器:`web/admin/src/views/dashboard/console/index.vue`
|
||||
- 抽奖量图表:`web/admin/src/views/dashboard/console/modules/sales-overview.vue` + `components/core/charts/art-line-chart`
|
||||
- 中奖率分析:`web/admin/src/views/dashboard/console/modules/activity-prize-analysis.vue`
|
||||
- 弹窗示例:`web/admin/src/views/player-manage/modules/*Dialog.vue`、`components/core/layouts/*`
|
||||
|
||||
## 1. 商品列表功能优化
|
||||
- 后端批量接口
|
||||
- 新增 `PUT /api/admin/products/batch`:请求体 `{ ids: number[], stock?: number, status?: 1|2 }`,返回 `{ updated_count, failed: [ {id, reason} ] }`。
|
||||
- Controller:在 `internal/api/admin/product_create.go` 或新文件 `product_batch.go` 增加路由与校验(限制 `ids` 1–1000,`stock >= 0`)。
|
||||
- Service:`internal/service/product/product.go` 增加 `BatchUpdate(ctx, ids, stock?, status?)`,事务更新;支持“仅库存”“仅状态”“二者皆有”。
|
||||
- DAO:使用批量更新(`UPDATE products SET stock=?, status=? WHERE id IN (...)`),对无权限/不存在的 `id` 记录失败原因。
|
||||
- 文档:更新 swagger(`docs/swagger.yaml`)。
|
||||
- 前端批量操作
|
||||
- 列表顶部添加“全选本页”复选框:基于 `ElTable` 的选择事件维护 `selectedIds: number[]`,`checkAll` 同步当页数据。
|
||||
- 批量工具栏:按钮“批量改库存”“批量上架”“批量下架”。每次操作弹出确认框(库存输入/操作确认)。
|
||||
- API:在 `web/admin/src/api/product.ts` 新增 `batchUpdateProducts(payload)` 调用上游接口;失败项以通知/表格高亮反馈。
|
||||
- 交互:操作成功后刷新当页并清空选中;支持 loading 与禁用态;无选中时禁用按钮。
|
||||
|
||||
## 2. 活动创建流程优化(奖品价格与总价)
|
||||
- 单价展示
|
||||
- 远程商品搜索返回 `price` 字段(已有),选择时在 `ElSelect` 的 `option` 右侧显示“¥单价”。
|
||||
- 在奖励编辑卡片/表格中追加“单价”列(从缓存读取)。
|
||||
- 总价计算
|
||||
- 公式:`总价 = Σ(price(product_id) * quantity)`;监听 `product_id/quantity` 变更实时更新。
|
||||
- 缓存:在 `wizard/index.vue` 与 `rewards/index.vue` 维护 `priceCache: Map<product_id, price>`,首次选择命中即用,未命中时调用 `fetchProducts` 补齐并写入。
|
||||
- 同步:商品价格变更时(重新打开或重新拉取),更新缓存并触发总价重算;保留两位小数。
|
||||
- 展示:步骤3顶部显示“选中奖品总成本:¥xxx.xx”。
|
||||
|
||||
## 3. 仪表盘数据展示修复(重叠问题)
|
||||
- 布局与间距
|
||||
- 在 `console/index.vue` 的 `ElRow` 增加统一 `gutter`(如 `20`),保证模块间距。
|
||||
- 调整 `ElCol` 断点:避免同一行 `ActivityPrizeAnalysis` 与其他模块在窄屏并排压缩;在 `md/sm` 断点落到 `24` 独占一行。
|
||||
- 组件容器
|
||||
- 为 `sales-overview.vue` 与 `activity-prize-analysis.vue` 外层卡片设置 `position: relative; z-index: 0`;图表内部设 `z-index: 1`,避免 canvas/svg 溢出覆盖。
|
||||
- 统一卡片最小高度,防止加载时高度为 0 导致重叠。
|
||||
- 加载时序
|
||||
- 图表组件在 `dataReady` 后再渲染;`v-if="dataReady"` 避免空容器渲染。
|
||||
- 保留/增加骨架或加载态,防止内容突变挤压。
|
||||
|
||||
## 4. 活动创建性能优化(步骤1)
|
||||
- 加载指示
|
||||
- `wizard/index.vue` 步骤1添加 `v-loading` 与骨架;按钮禁用在加载中。
|
||||
- 请求超时
|
||||
- 前端 axios 层设置接口超时 `30s`,在 `web/admin/src/api/_http.ts`(或全局实例)设置,并对超时给出 Toast 提示与重试入口。
|
||||
- 慢请求日志
|
||||
- Axios 响应拦截记录 `duration > 2000ms` 的接口,打印到控制台并上报(如有日志上报端点)。
|
||||
- 初始化优化
|
||||
- 并行拉取必要数据(活动分类、默认配置、组织信息),减少串行等待;命中表格缓存的接口优先读缓存(已有 `tableCache`)。
|
||||
- 错误恢复
|
||||
- 失败时保留已填写表单,显示错误提示与“重试/刷新数据”按钮;网络恢复后自动重载。
|
||||
|
||||
## 5. 弹窗点击关闭没有反应(统一与修复)
|
||||
- 审核现状
|
||||
- 业务型对话框普遍设置 `:close-on-click-modal="false"`(避免误关);全局搜索/锁屏等未禁用遮罩关闭且部分隐藏关闭按钮。
|
||||
- 统一策略
|
||||
- 业务表单:保留 `close-on-click-modal=false`,确保“关闭按钮/取消按钮/ESC”都能关闭;统一通过 `@update:model-value` 与 `@closed` 重置。
|
||||
- 全局弹窗:明确设置 `:close-on-click-modal="false"` 并显示关闭按钮或提供显式关闭入口(避免遮罩点击不生效引起困惑)。
|
||||
- 修复点
|
||||
- 核查所有 `ElDialog/ElDrawer`:确保存在 `@update:model-value` 或 `v-model` 双向绑定;为关闭图标绑定 `emit('update:visible', false)`;在有 `before-close` 时正确调用 `done()`。
|
||||
- 统一 ESC 关闭(可选):在布局层面监听 ESC 并广播关闭事件。
|
||||
|
||||
## 验收标准
|
||||
- 商品批量:
|
||||
- 在商品列表勾选 N 个,批量改库存/上下架成功,返回计数与失败明细;刷新后状态一致。
|
||||
- 奖品选择:
|
||||
- 选择奖品即显示单价,总价随数量/选择实时更新;切换商品价格后总价同步。
|
||||
- 仪表盘:
|
||||
- “活动抽奖量”与“活动中奖率分析”在所有断点无重叠,布局稳定;数据加载时不挤压。
|
||||
- 性能与超时:
|
||||
- 步骤1加载显示进度,超时 30s 有提示与重试;>2s 请求有日志可见。
|
||||
- 弹窗关闭:
|
||||
- 所有弹窗可通过关闭按钮/取消按钮/ESC 关闭;遮罩行为与设计一致,不出现“点击关闭没有反应”。
|
||||
|
||||
## 交付变更清单
|
||||
- 后端:新增批量接口(Controller+Service+DAO+Swagger)。
|
||||
- 前端:
|
||||
- 商品列表批量选择与工具栏;新增批量 API 调用与确认反馈。
|
||||
- 向导步骤3与奖励管理页显示单价与总价;缓存价格。
|
||||
- 仪表盘栅格与 z-index 调整;图表渲染时序保护。
|
||||
- Axios 超时与慢请求日志;向导加载骨架与错误恢复。
|
||||
- 弹窗双向绑定与关闭逻辑统一。
|
||||
|
||||
如确认本方案,我将按上述清单依次实现并提交改动,过程中为关键函数添加函数级注释与必要单元/交互测试。
|
||||
68
.trae/documents/实现回收站与软删除机制.md
Normal file
68
.trae/documents/实现回收站与软删除机制.md
Normal file
@ -0,0 +1,68 @@
|
||||
## 总体方案
|
||||
- 引入统一软删除机制:所有支持回收站的业务表增加 `deleted_at DATETIME NULL`、`deleted_by BIGINT NULL` 字段,并在 ORM 层启用 GORM Soft Delete 以默认过滤已删除记录。
|
||||
- 提供中心化回收站接口与界面:集中列出各类型的软删除数据,支持恢复与彻底删除(二次确认)。
|
||||
- 权限与菜单对齐:仅管理员可访问回收站;侧边栏在“系统管理”下新增“回收站”菜单,配置角色可见与按钮权限。
|
||||
|
||||
## 数据库改造
|
||||
- 目标表(根据现有模型与端点清单):`activities`、`activity_issues`、`activity_reward_settings`、`products`、`product_categories`、`banner`、`guild`、`system_titles`、`system_title_effects`、`system_item_cards`、`system_coupons`、`menus`、`menu_actions`、`roles`、`role_users`。
|
||||
- 变更内容:
|
||||
- 添加列:`deleted_at DATETIME NULL`(建立索引以提升查询效率)、`deleted_by BIGINT NULL`。
|
||||
- 后续通过 `cmd/gormgen` 重新生成 `internal/repository/mysql/{model,dao}/*.gen.go`,使模型包含 `gorm.DeletedAt` 与 `DeletedBy` 字段。
|
||||
- 迁移策略:当前仓库未集成迁移工具,计划新增 `migrations/` 与 SQL 脚本(或集成 `goose`),在测试/生产库执行列新增与索引建立,完成后重新生成 ORM 代码。
|
||||
|
||||
## 后端改造
|
||||
- 技术栈:`gin` + `gorm`(已存在),读写库封装见 `internal/repository/mysql/mysql.go`,路由集中在 `internal/router/router.go`。
|
||||
- 删除逻辑切换为软删除:
|
||||
- 将所有 `DELETE /api/...` 对应的处理器由物理删除改为 `gorm` 软删除:`db.Delete(&model)`,自动写入 `deleted_at`;同时通过上下文注入当前用户 ID 写入 `deleted_by`(更新列)。
|
||||
- 涉及端点示例(集中定义于 `internal/router/router.go` 对应 handler):活动、期数、奖励、工会、商品、分类、轮播图、称号/特效、道具卡、优惠券、系统菜单/动作、角色、角色成员等。
|
||||
- 查询默认过滤:
|
||||
- 使用含 `gorm.DeletedAt` 的模型,`gorm` 默认生成 `WHERE deleted_at IS NULL`;确保服务与 DAO 层不使用 `Unscoped()`,避免误返回已删除数据。
|
||||
- 回收站接口:新增 `internal/api/admin/system_recycle.go` 与服务层 `internal/service/recycle/recycle_service.go`:
|
||||
- `GET /api/admin/recycle`:参数 `type`(枚举:activity、issue、reward、product...)、分页;实现为 `Unscoped().Where("deleted_at IS NOT NULL")` 列表,返回原始字段与 `deleted_at`、`deleted_by`。
|
||||
- `POST /api/admin/recycle/restore`:参数 `type,id`;`Unscoped()` 更新目标记录 `deleted_at=NULL, deleted_by=NULL`,恢复数据。
|
||||
- `DELETE /api/admin/recycle`:参数 `type,id`;`Unscoped().Delete(&model)` 执行物理删除。
|
||||
- 关联完整性:
|
||||
- 软删除不级联子表;外键仍保持,恢复后关联自然可用。
|
||||
- 若业务场景需要父子一致软删除(可选扩展),在服务层增加按类型的联动策略,但默认不做级联以降低风险。
|
||||
- 权限拦截:
|
||||
- 以上回收站接口全部走管理员认证中间件 `internal/router/interceptor/admin_auth.go::AdminTokenAuthVerify`。
|
||||
- 彻底删除在服务层进行额外二次确认校验(配合前端确认对话框),后端也校验 `role` 或 `action` 权限。
|
||||
|
||||
## 前端改造(web/admin)
|
||||
- 框架:`vue3` + `vue-router` + `pinia` + `element-plus`,侧边栏位于 `web/admin/src/components/core/layouts/art-menus/art-sidebar-menu`,菜单数据由路由模块/后端菜单驱动。
|
||||
- 路由与页面:
|
||||
- 新增路由模块 `web/admin/src/router/modules/system/recycle.ts`,`path:'/system/recycle'`,`meta.roles:['admin']`,`meta.authList:['recycle:list','recycle:restore','recycle:forceDelete']`。
|
||||
- 新增页面 `web/admin/src/views/system/recycle/index.vue`:
|
||||
- 顶部类型筛选(下拉:活动、商品、工会…)。
|
||||
- 表格列出删除数据(含关键原字段、`deleted_at`、`deleted_by`),分页。
|
||||
- 行操作:`恢复`(调用 `POST /api/admin/recycle/restore`)、`彻底删除`(`ElMessageBox.confirm` 二次确认后调用 `DELETE /api/admin/recycle`)。
|
||||
- API 封装:`web/admin/src/api/system/recycle.ts`(使用现有 Axios 封装 `web/admin/src/utils/http/index.ts`):`listDeleted(type,page,size)`、`restore(type,id)`、`forceDelete(type,id)`。
|
||||
- 菜单项:
|
||||
- 后端在 `menus` 表增加“系统管理/回收站”,`path:'/system/recycle'`,并在角色分配接口 `POST /api/role/:role_id/menus` 仅赋予管理员;前端 `ListSimpleMenus` 拉取后自动渲染。
|
||||
- 权限指令与守卫:
|
||||
- 按按钮权限 `meta.authList` 与角色 `meta.roles` 控制显示;普通用户不显示菜单,无法访问路由或调用接口。
|
||||
|
||||
## 权限控制细则
|
||||
- 仅管理员角色拥有“回收站”菜单与相关按钮权限;普通用户删除操作也走软删除,但无法访问回收站接口。
|
||||
- 彻底删除在前端强制二次确认,并在后端再次校验权限与保护条件(如必须管理员)。
|
||||
|
||||
## 测试方案
|
||||
- 后端(Go `testing`):
|
||||
- `internal/api/admin/system_recycle_test.go`:
|
||||
- 删除后记录存在于回收站接口,原查询不可见(验证 `deleted_at` 与默认过滤)。
|
||||
- 恢复后记录重新可见,`deleted_at`/`deleted_by` 为空。
|
||||
- 权限:非管理员访问回收站接口返回 `401/403`;管理员正常。
|
||||
- 关联完整性:恢复后关联查询正常(父子外键未破坏)。
|
||||
- 前端(Vitest):
|
||||
- `web/admin/src/tests/system/recycle/recycle.test.ts`:
|
||||
- 菜单与路由权限:管理员可见“回收站”,普通用户不可见。
|
||||
- 列表加载与分页、恢复按钮触发成功提示与刷新、彻底删除二次确认弹窗与成功流程。
|
||||
- 401/403 拦截按现有拦截器工作(参考 `src/tests/auth/401-error-handling.test.ts`)。
|
||||
|
||||
## 交付与验证
|
||||
- 执行数据库迁移并生成 ORM 代码 → 修改删除逻辑到软删除 → 新增回收站接口与前端页面 → 配置菜单与角色 → 编写并运行测试。
|
||||
- 验收标准:
|
||||
- 所有默认查询不返回已删除记录。
|
||||
- 回收站能列出各类删除记录,恢复/彻底删除工作正常。
|
||||
- 权限严格生效;普通用户删除进入回收站但不可访问回收站界面。
|
||||
- 恢复后关联数据完整、功能正常。
|
||||
49
.trae/documents/彻底修复批量抽奖误弹与统一“新建活动”UI为 Element Plus 官方风格.md
Normal file
49
.trae/documents/彻底修复批量抽奖误弹与统一“新建活动”UI为 Element Plus 官方风格.md
Normal file
@ -0,0 +1,49 @@
|
||||
## 目标
|
||||
|
||||
* 在活动模块中彻底移除“批量测试/批量抽奖”入口与弹窗,避免在创建流程中出现。
|
||||
|
||||
* 保留其他模块(如“抽奖模拟盈亏”页面)的相似功能,不影响运营侧工具。
|
||||
|
||||
* 统一“新建活动”UI为 [https://www.artd.pro/docs/zh/ ](https://www.artd.pro/docs/zh/) 官方风格,保持与项目其他新建页面一致。
|
||||
|
||||
## 变更范围
|
||||
|
||||
* 移除组件引用与入口:
|
||||
|
||||
* `web/admin/src/views/activity/manage/index.vue`:删除 `BatchDrawDialog` 引用与渲染、`openBatchDraw` 按钮及逻辑。
|
||||
|
||||
* `web/admin/src/views/activity/list/index.vue`:删除批量抽奖按钮与 `BatchDrawDialog` 渲染。
|
||||
|
||||
* 组件保留但不再使用:
|
||||
|
||||
* `web/admin/src/views/activity/rewards/modules/batch-draw-dialog.vue` 保留于项目(供其他模块复用),但活动模块不再引用。
|
||||
|
||||
* 路由与流程:
|
||||
|
||||
* 无需调整路由;保留 `Operations/LotterySimulation` 等运营侧工具。
|
||||
|
||||
* 确保“创建活动 → 期数 → 奖品”流程不再出现任何测试入口。
|
||||
|
||||
## UI统一
|
||||
|
||||
* 两处向导页面完全采用官方 EP 风格(已部分完成):
|
||||
|
||||
* `ElSteps` simple 模式;
|
||||
|
||||
* `ElCard` 内容区;
|
||||
|
||||
* `ElForm` 默认尺寸与标准栅格;
|
||||
|
||||
* 移除自定义渐变、玻璃拟态与重阴影。
|
||||
|
||||
## 验收标准
|
||||
|
||||
* 活动模块中不再出现“批量测试/批量抽奖”按钮或弹窗。
|
||||
|
||||
* 创建流程不再被任何测试功能打断。
|
||||
|
||||
* 新建活动页面的视觉与项目其他新建保持一致(EP 官方风格)。
|
||||
|
||||
* 构建与运行通过,页面与流程验证无误。
|
||||
|
||||
如确认,我将执行上述移除与统一改造,并完成构建与流程验证。
|
||||
31
.trae/documents/活动创建“下一步”无响应的排查与改造方案.md
Normal file
31
.trae/documents/活动创建“下一步”无响应的排查与改造方案.md
Normal file
@ -0,0 +1,31 @@
|
||||
## 现状确认
|
||||
- 后端接口已对接:`POST /api/admin/activities`(`internal/router/router.go:78`),控制器 `CreateActivity`(`internal/api/admin/activities_admin.go:41`)。
|
||||
- 管理端前端已调用:`createActivity()` 指向 `admin/activities`(`web/admin/src/api/adminActivities.ts:13`)。
|
||||
- 向导有两种:
|
||||
- 独立向导页 `wizard/index.vue`:`下一步`仅切换步骤(`next()`),提交动作分别由页面内的`提交`按钮触发(`submitActivity/submitIssue/submitRewards`)。
|
||||
- 管理页弹窗向导 `manage/index.vue`:`下一步`会调用创建接口然后推进步骤(`nextWizard()`)。
|
||||
|
||||
## 可能原因
|
||||
- 使用了独立向导页,点击`下一步`未触发API(预期行为需用`提交`按钮)。
|
||||
- 请求未通过权限:后端要求超级管理员(`ctx.SessionUserInfo().IsSuper == 1`,`internal/api/admin/activities_admin.go:56-59`)。
|
||||
- 请求参数不合法:`name`必填、`activity_category_id`不可为0(同文件 15-18, 51-54)。
|
||||
- 环境未配置或认证头缺失:`VITE_API_URL` 未指向后端 `/api` 前缀,或 `Authorization` 未带登录后的纯 Token(不加 `Bearer`)。
|
||||
|
||||
## 排查步骤
|
||||
1) 打开浏览器 Network,在点击`下一步`或`提交`后确认是否发起 `POST {VITE_API_URL}/api/admin/activities`;查看响应码与返回体。
|
||||
2) 确认当前页面是弹窗向导还是独立向导:
|
||||
- 若是独立向导,请使用每步的`提交`按钮;`下一步`只换页不提交。
|
||||
3) 验证权限与参数:
|
||||
- 登录账号需 `is_super=1`;否则返回 400 `禁止操作`。
|
||||
- `name`与`activity_category_id`需填充;分类可通过 `GET /api/admin/activity_categories` 获取。
|
||||
4) 检查前端环境:
|
||||
- `VITE_API_URL` 应指向后端根(例如 `http://localhost:8000`),请求工具会拼接 `admin/...` 成 `/api/admin/...`。
|
||||
- `Authorization` 头为登录获得的 Token 字符串(无 `Bearer` 前缀)。
|
||||
|
||||
## 改造建议(可选)
|
||||
- 为独立向导页 `wizard/index.vue` 增强交互:在 `next()` 中根据 `active` 自动调用对应的 `submitActivity/submitIssue`,使“下一步”即提交。
|
||||
- 在按钮文案上提示“提交并进入下一步”,并在未填必填项时给出校验提示(阻止推进)。
|
||||
|
||||
## 验收标准
|
||||
- 在管理端,创建活动流程点击`提交`或(改造后)点击`下一步`能成功发起请求并进入下一步;错误时有明确提示。
|
||||
- 非超级管理员或参数缺失时,前端能正确显示后端返回的错误信息。
|
||||
87
.trae/documents/活动创建流程重构方案.md
Normal file
87
.trae/documents/活动创建流程重构方案.md
Normal file
@ -0,0 +1,87 @@
|
||||
## 目标
|
||||
- 将活动创建流程改造成“清晰、可操作、可回退”的向导式体验,显著降低填写负担、减少出错率,并确保与现有后端接口完全对齐。
|
||||
- 统一字段与交互:活动、期、奖励配置的字段、校验与排序一致;消除重复输入与歧义(如奖励名称以选品自动回填)。
|
||||
- 杜绝常见错误:时间格式、权限校验、表单必填项、动态模块加载等问题在交互层面被提前防护。
|
||||
|
||||
## 现状与痛点
|
||||
- 后端接口已齐备(管理端):
|
||||
- 创建活动:`POST /api/admin/activities`(`internal/router/router.go:78`;控制器 `internal/api/admin/activities_admin.go:41`;服务层 `internal/service/activity/activity_create.go:12-41`)
|
||||
- 创建期:`POST /api/admin/activities/:activity_id/issues`(`internal/router/router.go:83`;控制器 `internal/api/admin/issues_admin.go`;服务层 `internal/service/activity/issue_create.go:13-32`)
|
||||
- 创建奖励:`POST /api/admin/activities/:activity_id/issues/:issue_id/rewards`
|
||||
- 前端存在两套创建入口:
|
||||
- 独立向导页:`web/admin/src/views/activity/wizard/index.vue`(“下一步”仅切换步骤,提交由各步的“提交”触发)
|
||||
- 管理页弹窗向导:`web/admin/src/views/activity/manage/index.vue`(“下一步”实际调用创建并推进)
|
||||
- 痛点汇总:
|
||||
- 两处入口的字段命名、排序不一致;奖励有的手填名称,有的选商品
|
||||
- 时间未填时易触发数据库零日期错误(`TRADITIONAL SQL` 模式下)
|
||||
- “下一步”与“提交”含义不统一,用户易误操作
|
||||
- 表格行式编辑密度过高,填写多项参数不友好
|
||||
- 动态导入失败来源于 SFC 结构不合法、重复脚本块或未声明变量导致编译失败
|
||||
|
||||
## 重构设计(交互与结构)
|
||||
### 向导统一(单入口)
|
||||
- 入口:统一从“管理页弹窗向导”打开;支持跳转到独立页,但独立页沿用同一套逻辑(避免两套逻辑分歧)
|
||||
- 步骤:
|
||||
1. 基本信息(活动):名称、分类、状态、门票价格、Boss、开始/结束时间
|
||||
2. 期信息(活动期):期号、状态、排序
|
||||
3. 奖励配置:按商品选择与参数设置(权重、数量、原始数量、等级、排序、Boss)
|
||||
4. 确认提交:汇总校验与最终提交
|
||||
- 导航:
|
||||
- “下一步”即执行当前步的提交(成功后推进),失败则停留并有明确错误提示
|
||||
- “上一步”回退不丢数据;每步保存草稿状态在组件内存
|
||||
|
||||
### 表单布局与输入体验
|
||||
- 两列栅格布局(`ElRow/ElCol`):提升可读性与并行填写效率
|
||||
- 奖励配置交互:
|
||||
- 改为“卡片列表 + 弹窗表单”,卡片上显示商品名称及关键参数;“新增奖励/编辑奖励”在弹窗中填写,分两列布局
|
||||
- 商品选择:远程搜索 `admin/products`(`web/admin/src/api/product.ts`),选择后自动回填奖励名称(传递给后端以兼容)
|
||||
- 支持复制卡片、删除卡片、批量导入(CSV/JSON)作为扩展项(初版可不做批量)
|
||||
- 字段统一:奖励行统一字段为 `product_id、weight、quantity、original_qty、level、sort、is_boss`;`name`由选品自动补齐,不再手填
|
||||
- 权限与提示:检测 `SessionUserInfo.IsSuper`(控制器内已做),前端在 403/400 的返回文案时专门弹出“权限不足”提示
|
||||
|
||||
### 校验与防错
|
||||
- 实时校验规则:
|
||||
- 活动:名称与分类必填;开始/结束时间支持空,但若为空则前端默认以 `ISO8601` 当前时间传入或后端统一允许 `NULL`
|
||||
- 期:期号必填;排序与状态为数值校验
|
||||
- 奖励:`product_id` 必填;数值项均为非负或正数;`level` 合法枚举
|
||||
- 时间防错:
|
||||
- 方案优先级A:数据库将 `start_time/end_time` 改为可 `NULL` 且默认 `NULL`(推荐);
|
||||
- 方案优先级B:前端在未选择时默认传当前时间的 `toISOString()`;
|
||||
- 后端保留 `Omit` 逻辑(`internal/service/activity/activity_create.go:29-35`),避免强行写零日期
|
||||
|
||||
### 代码结构与可维护性
|
||||
- 组件结构:每个步骤独立子组件(`ActivityStepBasic.vue`、`ActivityStepIssue.vue`、`ActivityStepRewards.vue`)+ 容器(`ActivityWizard.vue`)
|
||||
- 状态管理:使用本地状态(`ref/reactive`)即可;如需跨页保持,用 `pinia` 记录向导草稿
|
||||
- API层:沿用 `web/admin/src/api/adminActivities.ts`,奖励提交前统一映射自动补齐 `name`
|
||||
- 动态导入稳定性:
|
||||
- 确保每个 SFC 仅一个 `<template>` 和一个 `<script setup>`,无重复导入、重复变量与重复函数
|
||||
- 编译错误先清理其他页面的类型错误(如 `shipping-stats/index.vue` 的 `remoteLoading.orders` 与 `reconcile/diff/index.vue` 的 `formatDetail`),避免影响整体构建可用性
|
||||
|
||||
## 后端约束与对齐
|
||||
- 保持接口不变:`CreateActivity`/`CreateIssue`/`CreateIssueRewards`
|
||||
- 修改建议(可选):
|
||||
- 数据库列允许 `NULL`(避免零日期);
|
||||
- 在 `CreateActivity` 中对 `StartTime/EndTime` 为空时不写入(现有已 Omit)
|
||||
|
||||
## 验收标准
|
||||
- 用户可通过统一向导完成活动创建:每步“下一步”均会发起对应请求并进入下一步;错误有明确提示
|
||||
- 奖励配置以选择商品为主,不再手填名称;行字段与顺序一致
|
||||
- 复杂表单两列布局,填写效率明显提升;可编辑/删除奖励卡片
|
||||
- 构建通过(无 SFC 结构错误与类型错误);页面加载不再出现“动态模块导入失败”
|
||||
|
||||
## 实施步骤
|
||||
1. 重构向导组件结构与路由入口;统一使用弹窗向导(保留独立页入口但复用组件)
|
||||
2. 基本信息与期信息改为两列布局;“下一步”触发提交与推进
|
||||
3. 奖励配置改为卡片 + 弹窗表单;远程选品与字段统一;提交前自动补齐名称
|
||||
4. 表单校验与错误提示完善;未填时间的兜底(前端默认或后端允许 NULL)
|
||||
5. 清理页面内无关类型错误(`shipping-stats/index.vue`、`reconcile/diff/index.vue`)保证构建与动态导入稳定
|
||||
6. 编写端到端测试用例:
|
||||
- 正常流程:活动→期→奖励→提交 成功
|
||||
- 边界:缺少必填项、非超级管理员、时间为空等
|
||||
- 性能:奖励 50+ 条下的编辑与提交
|
||||
|
||||
## 交付物
|
||||
- 统一的向导组件及子组件
|
||||
- API 映射与表单校验实现
|
||||
- 样式与布局更新,卡片/弹窗交互
|
||||
- 测试用例与构建通过证明
|
||||
51
.trae/documents/活动期数奖品数量、登录态与奖励管理价格增强改造方案.md
Normal file
51
.trae/documents/活动期数奖品数量、登录态与奖励管理价格增强改造方案.md
Normal file
@ -0,0 +1,51 @@
|
||||
## 目标与范围
|
||||
- 优化期数管理:在期数列表中新增“奖品数量”,支持实时刷新与排序。
|
||||
- 登录状态保持:核查并完善前端请求头携带令牌、后端校验逻辑,加入令牌自动刷新机制。
|
||||
- 奖励管理增强:名称后显示价格“名称(价格)”,下拉显示名称+价格,统一两位小数,支持按价格筛选与排序。
|
||||
|
||||
## 现状定位
|
||||
- 期数列表:`web/admin/src/views/activity/issues/index.vue` 使用 `listActivityIssues`;后端 `internal/api/admin/issues_admin.go` 未返回奖品数量。
|
||||
- 登录令牌:前端 `web/admin/src/utils/http/index.ts` 注入 `Authorization`,401登出,无刷新;后端鉴权在 `internal/router/interceptor/admin_auth.go`,JWT工具具备 `Refresh` 但未暴露接口。
|
||||
- 奖励管理:`web/admin/src/views/activity/rewards/index.vue` 已有价格缓存与总成本;向导 `wizard/index.vue` 已显示单价但管理页未统一展示,筛选仅支持名称/等级/Boss。
|
||||
|
||||
## 实施方案
|
||||
### 1) 期数管理“奖品数量”
|
||||
- 后端接口返回扩展:
|
||||
- 在 `internal/api/admin/issues_admin.go` 的列表响应结构添加 `prize_count` 字段;统计当前活动期对应的奖励配置数量(表 `activity_reward_settings`)并填入。
|
||||
- 为避免 N+1 查询,优先采用按 `IssueID` 分组的聚合统计一次性返回。
|
||||
- 前端表格列:
|
||||
- 在 `issues/index.vue` 的 `columnsFactory` 增加 `{ prop: 'prize_count', label: '奖品数量', minWidth: 120, align: 'center', sortable: true }`。
|
||||
- 保持字体大小与现有列一致,列宽 120,保证清晰可见。
|
||||
- 实时刷新:
|
||||
- 在新增/删除奖励后(`createIssueRewards`、`deleteIssueReward`)触发行级期数列表刷新;或在奖励模块完成操作后发出事件总线通知,期数页监听并刷新。
|
||||
|
||||
### 2) 登录状态保持与自动刷新
|
||||
- 前端核查与完善:
|
||||
- 保证所有请求统一使用封装实例,已自动注入 `Authorization`;抽样验证重要路由跳转后的接口头部是否带令牌(在拦截器内添加开发模式日志)。
|
||||
- 在 `axios` 响应拦截器中实现一次性刷新流程:当收到 401 且存在 `refreshToken`,调用后端刷新接口获取新 `accessToken`,更新到 `useUserStore` 并重放队列中的失败请求。
|
||||
- 后端刷新接口:
|
||||
- 新增 `POST /api/admin/auth/refresh`,从 `refreshToken` 校验后发新 `accessToken` 与新的过期时间;使用 `internal/pkg/jwtoken.Refresh`。
|
||||
- 刷新令牌有效期策略:`accessToken` 24h,`refreshToken` 7–14d,可根据配置调整。
|
||||
- 有效期验证:
|
||||
- 检查管理端 JWT `exp` 与中间件的过期处理;在返回体附带 `expires_in`(秒)便于前端设置刷新窗口(如 T-5min 刷新)。
|
||||
|
||||
### 3) 奖励管理价格展示与筛选排序
|
||||
- 名称后显示“名称(价格)”:
|
||||
- 在 `rewards/index.vue` 的名称列渲染处,读取 `priceCache[row.product_id]`,以元显示并保留两位小数:`{{ row.name }} (¥{{ unitPrice(row.product_id).toFixed(2) }})`。
|
||||
- 下拉选项展示价格:
|
||||
- 在新增/编辑奖励的商品选择下拉项 `<ElOption>` 增加右侧显示 `¥price.toFixed(2)`;统一从 `fetchProducts` 的 `price` 转换为元并缓存。
|
||||
- 价格筛选与排序:
|
||||
- 在筛选区新增最小价/最大价输入与排序选择(`price asc/desc`),在 `displayedData` 计算中对 `priceCache` 区间过滤并根据选择排序。
|
||||
- 统一格式:
|
||||
- 所有价格展示统一使用元、`toFixed(2)`;缓存与计算逻辑复用,避免重复请求与闪烁。
|
||||
|
||||
## 验收标准
|
||||
- 期数列表出现“奖品数量”列且支持点击列头进行升降序;奖励增减后期数页能自动反映变更。
|
||||
- 前端所有 API 请求头包含 `Authorization`;登录态过期前能自动刷新并续期;401 时先刷新再重放请求,刷新失败才登出。
|
||||
- 奖励管理名称与下拉均显示价格,价格保留两位小数;可按价格筛选与排序,结果正确稳定。
|
||||
|
||||
## 交付变更清单
|
||||
- 后端:扩展期数列表响应(含聚合统计)、新增管理员令牌刷新接口与逻辑。
|
||||
- 前端:期数列表新增“奖品数量”列与刷新机制;HTTP 拦截器加入自动刷新与队列重放;奖励管理价格展示、筛选与排序统一完善。
|
||||
|
||||
确认后我将按以上步骤实施,并为关键函数按要求补充函数级注释。
|
||||
39
.trae/documents/统一活动创建页面UI样式为一致的主题规范.md
Normal file
39
.trae/documents/统一活动创建页面UI样式为一致的主题规范.md
Normal file
@ -0,0 +1,39 @@
|
||||
## 目标
|
||||
- 去除“黑白相间”的突兀对比,统一为项目主题色+柔和中性色,整体更温和、现代。
|
||||
- 两处页面统一:独立向导与管理页弹出向导视觉一致,按钮/表单/步骤/卡片风格一致。
|
||||
- 完全采用 Element Plus 官方变量与项目色板,不再硬编码颜色与阴影。
|
||||
|
||||
## 统一规范(按 Element Plus 变量)
|
||||
- 文字:`var(--el-text-color-primary)`(标题)、`var(--el-text-color-regular)`(正文)、`var(--el-text-color-secondary)`(说明)。
|
||||
- 边框:`var(--el-border-color)`;阴影:`var(--el-box-shadow-light)`。
|
||||
- 背景:卡片 `var(--el-fill-color-blank)`、页面区块背景 `var(--el-fill-color)`;不使用纯黑纯白对比。
|
||||
- 主题色:`var(--el-color-primary)`;状态色:`success/warning/info/danger` 统一。
|
||||
- 间距:统一使用 `16px` 栅格间距,卡片内上下 `24px`。
|
||||
|
||||
## 具体改造
|
||||
1) 独立向导 `web/admin/src/views/activity/wizard/index.vue`
|
||||
- 容器:保持 `<ElCard>` 主容器,去除自定义白底+灰边的强对比;卡片背景改为 `var(--el-fill-color-blank)`,边框用 `var(--el-border-color)`,阴影用 `var(--el-box-shadow-light)`。
|
||||
- 头部:标题字号 `28px` → `24px`,颜色用 `var(--el-text-color-primary)`;副标题 `14px`、`var(--el-text-color-secondary)`。
|
||||
- 步骤:保留 `<ElSteps simple>`,标题使用默认;去掉自定义连接线与色块;色彩由主题变量自动控制。
|
||||
- 内容:每个步骤用 `<ElCard>` 分区,区块标题样式统一(加粗、常规色),说明文案用 secondary 文本色。
|
||||
- 表单:统一 `label-width="140px"`、`size="default"`;布局用 `<ElRow :gutter="16">`+ `<ElCol>`;移除任何自定义对比背景。
|
||||
- 按钮:主按钮 `type="primary"`,次按钮使用 `plain` 或默认;不使用渐变。
|
||||
|
||||
2) 管理页向导 `web/admin/src/views/activity/manage/index.vue`
|
||||
- 容器/步骤/表单/按钮同上;弹窗内部所有区块统一同风格(卡片+柔和背景+统一间距)。
|
||||
- 选中信息卡片(当前活动/期数)采用轻背景 `var(--el-fill-color)`+ `var(--el-border-color)`,文字用 regular 色;去除纯白/纯黑对比。
|
||||
|
||||
## 视觉微调项
|
||||
- 标签 `ElTag` 的等级色:`primary/success/warning/info/danger` 映射规则保留,颜色来源于 EP 变量。
|
||||
- 所有说明性文字色统一为 `var(--el-text-color-secondary)`,避免接近黑白对撞感。
|
||||
|
||||
## 验证
|
||||
- 构建通过:`npm run build`。
|
||||
- 手动检查两处向导的视觉一致性(标题、卡片、表单、按钮、步骤)。
|
||||
- 流程测试:创建活动→期数→奖品;界面风格统一且不出现批量测试入口。
|
||||
|
||||
## 交付
|
||||
- 两处文件的样式与结构更新,删除多余 SCSS,改为使用 EP 变量。
|
||||
- 简要变更说明与截图(提交描述中)。
|
||||
|
||||
如确认方案,我将立即执行改造、构建与验证,并交付结果。
|
||||
41
.trae/documents/补齐删除级联遗漏清单与改造计划.md
Normal file
41
.trae/documents/补齐删除级联遗漏清单与改造计划.md
Normal file
@ -0,0 +1,41 @@
|
||||
## 结论与遗漏点
|
||||
- 当前事务级联已覆盖核心链路,但仍有以下遗漏按业务应清理:
|
||||
- 删除用户:
|
||||
- 订单子表:`order_items.order_id IN(用户订单ID)`(模型:`internal/repository/mysql/model/order_items.gen.go:17`)
|
||||
- 支付流水:`payment_preorders/order_id`、`payment_transactions/order_id`、`payment_refunds/order_id`(模型:`payment_preorders.gen.go:16`、`payment_transactions.gen.go:16`、`payment_refunds.gen.go:16`)
|
||||
- 邀请关系:`user_invites.inviter_id = 用户ID OR invitee_id = 用户ID`(模型:`user_invites.gen.go:18,19`)
|
||||
- 资产转赠流水:`user_inventory_transfers.from_user_id = 用户ID OR to_user_id = 用户ID`,以及通过 `inventory_id` 引用用户资产(模型:`user_inventory_transfers.gen.go:17-19`)
|
||||
- 删除活动:
|
||||
- 发货记录(与资产关联):`shipping_records.inventory_id IN(活动产生的 user_inventory.id)`(模型:`shipping_records.gen.go:21`)
|
||||
- 资产转赠流水:`user_inventory_transfers.inventory_id IN(活动产生的 user_inventory.id)`
|
||||
- 删除期:
|
||||
- 可选(视运营策略):删除与该期绑定的系统道具模板 `system_item_cards.issue_id = 期ID`(模型:`system_item_cards.gen.go:24`)。若模板为系统公共配置且希望保留,请跳过。
|
||||
|
||||
## 改造方案
|
||||
- 用户级联(`internal/service/user/batch_user.go:32`)
|
||||
1) 查出该用户的订单ID集合 → 删除 `order_items` 按 `order_id IN (...)`
|
||||
2) 按订单ID集合删除:`payment_preorders`、`payment_transactions`、`payment_refunds`
|
||||
3) 删除邀请关系:`user_invites` 按 `inviter_id = userID OR invitee_id = userID`
|
||||
4) 删除资产转赠:`user_inventory_transfers` 按 `from_user_id = userID OR to_user_id = userID`;并按用户资产ID集合删除 `inventory_id IN (...)`
|
||||
- 活动级联(`internal/service/activity/activity_delete.go:8-106`)
|
||||
1) 查出活动对应 `user_inventory.id` 集合
|
||||
2) 删除发货记录:`shipping_records.inventory_id IN (...)`
|
||||
3) 删除资产转赠流水:`user_inventory_transfers.inventory_id IN (...)`
|
||||
- 期级联(`internal/service/activity/issue_delete.go:8-55`)
|
||||
- 可选:删除 `system_item_cards` 按 `issue_id = 期ID`(若模板为期专用且不保留)
|
||||
|
||||
## 技术细节
|
||||
- 顺序:先删子表(items、支付、转赠、发货)→ 再删主表(orders/users/activities/issues)
|
||||
- 性能:大表采用分批删除(如 5000/批);所有条件列均为主/索引列(`user_id`、`order_id`、`inventory_id`)以保证扫描性能
|
||||
- 幂等:条件删除无记录时不报错;重复执行安全
|
||||
|
||||
## 验收标准
|
||||
- 删除用户后,不残留该用户的订单行、支付流水、邀请关系、资产转赠流水、发货及统计(统计表可保留)
|
||||
- 删除活动后,不残留与该活动资产相关的发货记录与资产转赠流水
|
||||
- 删除期后(若启用模板清理),不残留该期范围的系统卡模板
|
||||
- 编译通过,现有接口行为不变(仅增强删除逻辑);事务全链路失败回滚
|
||||
|
||||
## 执行计划
|
||||
- 补充三处服务方法的事务删除步骤,并针对大数据量路径加分批删除;完成后编译验证和快速自测(构造少量数据路径)。
|
||||
|
||||
请确认是否按上述方案继续,我将直接补齐代码并完成验证。
|
||||
51
.trae/documents/重构活动创建向导样式为 Element Plus 官方风格.md
Normal file
51
.trae/documents/重构活动创建向导样式为 Element Plus 官方风格.md
Normal file
@ -0,0 +1,51 @@
|
||||
## 目标
|
||||
- 去除所有自定义渐变、毛玻璃和重度阴影,完全采用 Element Plus 官方样式与间距体系。
|
||||
- 两处向导界面统一风格:独立向导与管理页弹出向导保持一致的 EP 风格卡片、步骤、表单和按钮。
|
||||
- 不引入新库,使用项目现有 Element Plus 组件和 CSS 变量(如 `--el-color-primary`)。
|
||||
|
||||
## 改造范围
|
||||
- `web/admin/src/views/activity/wizard/index.vue`
|
||||
- `web/admin/src/views/activity/manage/index.vue`
|
||||
|
||||
## 样式与组件替换策略
|
||||
- 容器与卡片:
|
||||
- 使用 `<ElCard>` 作为主容器,移除自定义容器类和背景渐变。
|
||||
- 保持卡片圆角与阴影为 EP 默认;必要时轻度覆盖(仅边距)。
|
||||
- 步骤指示器:
|
||||
- 用 `<ElSteps>` + `<ElStep>`(simple 模式)替换自定义步骤条。
|
||||
- 激活色用 EP 主色 `var(--el-color-primary)`,完成色用 EP 成功色。
|
||||
- 表单:
|
||||
- 统一 `<ElForm>`、`<ElFormItem>` 默认尺寸(large 或 default),`label-width: 140px`,`label-position: left`。
|
||||
- 使用 `<ElRow>`/`<ElCol>` + `:gutter="16"` 管理表单栅格间距。
|
||||
- 标签与按钮:
|
||||
- `<ElTag>` 的 `type` 使用 `primary/success/warning/info/danger` 标准集合。
|
||||
- 按钮全部使用 EP 默认样式与尺寸;次级按钮使用 `plain` 或 `text` 类型,不做渐变。
|
||||
- 颜色与变量:
|
||||
- 仅使用 `--el-color-primary`、`--el-color-success` 等 EP 变量,移除硬编码渐变色与 backdrop-filter。
|
||||
|
||||
## 具体改动清单
|
||||
1. 独立向导 `wizard/index.vue`
|
||||
- 移除 `.activity-wizard-container` 背景渐变与毛玻璃。
|
||||
- 顶部头部改为 `<ElCard>` 包裹标题与描述,使用普通文本样式(取消文字渐变)。
|
||||
- 步骤改为 `<ElSteps :active="active" simple>`,步骤标题采用 EP 默认文案展示。
|
||||
- 内容区块改为 `<ElCard>` 内表单与按钮,使用标准间距与栅格。
|
||||
- 删除/精简大部分自定义 SCSS,仅保留少量布局边距(如 `.mb-4`)。
|
||||
|
||||
2. 管理页弹出向导 `manage/index.vue`
|
||||
- 弹窗内容内采用 `<ElCard>` 分区,不再使用自定义步骤条;统一用 `<ElSteps>` simple。
|
||||
- 向导页中所有按钮与标签统一 EP 默认风格。
|
||||
- 保持批量抽奖对话框隔离(当前已 `v-if="!showWizard"`)。
|
||||
|
||||
## 验证与回归
|
||||
- 构建检查:`npm run build` 无 TS/样式错误。
|
||||
- 流程测试:创建活动 → 期数 → 奖品,步骤推进正确,不触发批量抽奖。
|
||||
- 视觉验收:对比项目其他页面(列表、表格、弹窗)确认风格一致。
|
||||
- 移动端宽度下检查栅格与表单换行正常。
|
||||
|
||||
## 交付物
|
||||
- 两处向导文件的组件结构与样式改造,删除冗余 SCSS,自述变更要点(合并到提交描述)。
|
||||
|
||||
## 备注
|
||||
- 不新增依赖;完全遵循 Element Plus 官方组件风格与项目既有规范。
|
||||
|
||||
如确认以上方案,我将开始实施并完成构建与验证,然后交付结果。
|
||||
BIN
build/resources/.DS_Store
vendored
BIN
build/resources/.DS_Store
vendored
Binary file not shown.
@ -1 +1 @@
|
||||
import{d as a,T as s,e as t,h as e,p as m,J as r,m as l,y as c,z as n,l as d,C as x,E as o,f as i}from"./index-DBHnxsy6.js";/* empty css */import{_ as p}from"./index-DuC2vu0m.js";import{E as u}from"./index-r0EsCkBw.js";const f={class:"page-content !border-0 !bg-transparent min-h-screen flex-cc"},g={class:"flex-cc max-md:!block max-md:text-center"},b={class:"ml-15 w-75 max-md:mx-auto max-md:mt-10 max-md:w-full max-md:text-center"},h={class:"text-xl leading-7 text-g-600 max-md:text-lg"},_=a({__name:"ArtException",props:{data:{}},setup(a){const _=x(),{homePath:j}=s(),v=()=>{_.push(j.value)};return(s,x)=>{const _=p,j=u,w=o("ripple");return i(),t("div",f,[e("div",g,[m(_,{src:a.data.imgUrl,size:"100%",class:"!w-100"},null,8,["src"]),e("div",b,[e("p",h,l(a.data.desc),1),r((i(),c(j,{type:"primary",size:"large",onClick:v,class:"mt-5"},{default:n(()=>[d(l(a.data.btnText),1)]),_:1})),[[w]])])])])}}});export{_};
|
||||
import{d as a,T as s,e as t,h as e,p as m,J as r,m as l,y as c,z as n,l as d,C as x,E as o,f as i}from"./index-CZ0Lvzl5.js";/* empty css */import{_ as p}from"./index-2mJ3Csno.js";import{E as u}from"./index-CWBrZtwn.js";const f={class:"page-content !border-0 !bg-transparent min-h-screen flex-cc"},g={class:"flex-cc max-md:!block max-md:text-center"},b={class:"ml-15 w-75 max-md:mx-auto max-md:mt-10 max-md:w-full max-md:text-center"},h={class:"text-xl leading-7 text-g-600 max-md:text-lg"},_=a({__name:"ArtException",props:{data:{}},setup(a){const _=x(),{homePath:j}=s(),v=()=>{_.push(j.value)};return(s,x)=>{const _=p,j=u,w=o("ripple");return i(),t("div",f,[e("div",g,[m(_,{src:a.data.imgUrl,size:"100%",class:"!w-100"},null,8,["src"]),e("div",b,[e("p",h,l(a.data.desc),1),r((i(),c(j,{type:"primary",size:"large",onClick:v,class:"mt-5"},{default:n(()=>[d(l(a.data.btnText),1)]),_:1})),[[w]])])])])}}});export{_};
|
||||
@ -1 +1 @@
|
||||
var e=Object.defineProperty,t=Object.defineProperties,s=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,p=(t,s,r)=>s in t?e(t,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[s]=r;import{_ as l}from"./index.vue_vue_type_script_setup_true_lang-DUyHB5jc.js";import{d as n,e as c,f as m,p as i,h as d,i as u,m as x,j as b}from"./index-DBHnxsy6.js";const g={class:"title mt-8 text-3xl font-medium !text-g-900 max-md:mt-2.5 max-md:text-2xl"},f={class:"msg mt-5 text-base text-g-600"},_={class:"res mt-7.5 rounded bg-g-200/80 dark:bg-g-300/40 px-7.5 py-5.5 text-left max-md:px-7.5 max-md:py-2.5 [&_p]:flex [&_p]:items-center [&_p]:py-2 [&_p]:text-sm [&_p]:text-[#808695] [&_p_i]:mr-1.5"},y={class:"btn-group mt-12.5"},v=n((j=((e,t)=>{for(var s in t||(t={}))a.call(t,s)&&p(e,s,t[s]);if(r)for(var s of r(t))o.call(t,s)&&p(e,s,t[s]);return e})({},{name:"ArtResultPage"}),t(j,s({__name:"ArtResultPage",props:{type:{default:"success"},title:{default:""},message:{default:""},iconCode:{default:""}},setup:e=>(t,s)=>{const r=l;return m(),c("div",{class:u(["page-content box-border !px-20 py-3.5 text-center max-md:!px-5",e.type])},[i(r,{class:u(["icon size-22 p-2 mt-16 block rounded-full !text-white","success"===e.type?"bg-[#19BE6B]":"bg-[#ED4014]"]),icon:e.iconCode},null,8,["icon","class"]),d("h1",g,x(e.title),1),d("p",f,x(e.message),1),d("div",_,[b(t.$slots,"content")]),d("div",y,[b(t.$slots,"buttons")])],2)}}))));var j;export{v as _};
|
||||
var e=Object.defineProperty,t=Object.defineProperties,s=Object.getOwnPropertyDescriptors,r=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,p=(t,s,r)=>s in t?e(t,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[s]=r;import{_ as l}from"./index.vue_vue_type_script_setup_true_lang-DkYjV9Ul.js";import{d as n,e as c,f as m,p as i,h as d,i as u,m as x,j as b}from"./index-CZ0Lvzl5.js";const g={class:"title mt-8 text-3xl font-medium !text-g-900 max-md:mt-2.5 max-md:text-2xl"},f={class:"msg mt-5 text-base text-g-600"},_={class:"res mt-7.5 rounded bg-g-200/80 dark:bg-g-300/40 px-7.5 py-5.5 text-left max-md:px-7.5 max-md:py-2.5 [&_p]:flex [&_p]:items-center [&_p]:py-2 [&_p]:text-sm [&_p]:text-[#808695] [&_p_i]:mr-1.5"},y={class:"btn-group mt-12.5"},v=n((j=((e,t)=>{for(var s in t||(t={}))a.call(t,s)&&p(e,s,t[s]);if(r)for(var s of r(t))o.call(t,s)&&p(e,s,t[s]);return e})({},{name:"ArtResultPage"}),t(j,s({__name:"ArtResultPage",props:{type:{default:"success"},title:{default:""},message:{default:""},iconCode:{default:""}},setup:e=>(t,s)=>{const r=l;return m(),c("div",{class:u(["page-content box-border !px-20 py-3.5 text-center max-md:!px-5",e.type])},[i(r,{class:u(["icon size-22 p-2 mt-16 block rounded-full !text-white","success"===e.type?"bg-[#19BE6B]":"bg-[#ED4014]"]),icon:e.iconCode},null,8,["icon","class"]),d("h1",g,x(e.title),1),d("p",f,x(e.message),1),d("div",_,[b(t.$slots,"content")]),d("div",y,[b(t.$slots,"buttons")])],2)}}))));var j;export{v as _};
|
||||
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/EffectEditDialog-CKoMjh_c.js.gz
Normal file
BIN
build/resources/admin/assets/EffectEditDialog-CKoMjh_c.js.gz
Normal file
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
var e=Object.defineProperty,r=Object.defineProperties,a=Object.getOwnPropertyDescriptors,t=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable,s=(r,a,t)=>a in r?e(r,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[a]=t;import{d as l,a as f,o as c,aU as i,aD as u,J as p,aV as b,u as m,e as d,h as v,f as y}from"./index-DBHnxsy6.js";const O={class:"box-border w-full h-full"},h=["src"],j=l((w=((e,r)=>{for(var a in r||(r={}))o.call(r,a)&&s(e,a,r[a]);if(t)for(var a of t(r))n.call(r,a)&&s(e,a,r[a]);return e})({},{name:"IframeView"}),r(w,a({__name:"Iframe",setup(e){const r=u(),a=f(!0),t=f(""),o=f(null);c(()=>{const e=i.getInstance().findByPath(r.path);(null==e?void 0:e.meta)&&(t.value=e.meta.link||"")});const n=()=>{a.value=!1};return(e,r)=>{const s=b;return p((y(),d("div",O,[v("iframe",{ref_key:"iframeRef",ref:o,src:m(t),frameborder:"0",class:"w-full h-full min-h-[calc(100vh-120px)] border-none",onLoad:n},null,40,h)])),[[s,m(a)]])}}}))));var w;export{j as default};
|
||||
var e=Object.defineProperty,r=Object.defineProperties,a=Object.getOwnPropertyDescriptors,t=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable,s=(r,a,t)=>a in r?e(r,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[a]=t;import{d as l,a as f,o as c,aU as i,aD as u,J as p,aV as b,u as m,e as d,h as v,f as y}from"./index-CZ0Lvzl5.js";const O={class:"box-border w-full h-full"},h=["src"],j=l((w=((e,r)=>{for(var a in r||(r={}))o.call(r,a)&&s(e,a,r[a]);if(t)for(var a of t(r))n.call(r,a)&&s(e,a,r[a]);return e})({},{name:"IframeView"}),r(w,a({__name:"Iframe",setup(e){const r=u(),a=f(!0),t=f(""),o=f(null);c(()=>{const e=i.getInstance().findByPath(r.path);(null==e?void 0:e.meta)&&(t.value=e.meta.link||"")});const n=()=>{a.value=!1};return(e,r)=>{const s=b;return p((y(),d("div",O,[v("iframe",{ref_key:"iframeRef",ref:o,src:m(t),frameborder:"0",class:"w-full h-full min-h-[calc(100vh-120px)] border-none",onLoad:n},null,40,h)])),[[s,m(a)]])}}}))));var w;export{j as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/RuleConfigDialog-DC9G2ww3.js.gz
Normal file
BIN
build/resources/admin/assets/RuleConfigDialog-DC9G2ww3.js.gz
Normal file
Binary file not shown.
Binary file not shown.
1
build/resources/admin/assets/TitleEditDialog-BoomnsCf.js
Normal file
1
build/resources/admin/assets/TitleEditDialog-BoomnsCf.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/UserAssignmentDialog-C3ancW_U.js.gz
Normal file
BIN
build/resources/admin/assets/UserAssignmentDialog-C3ancW_U.js.gz
Normal file
Binary file not shown.
Binary file not shown.
@ -1 +0,0 @@
|
||||
import{bk as n,cz as r,bi as t,b8 as u,cA as i,c7 as e,bx as o,ca as f,bm as a}from"./index-DBHnxsy6.js";import{h as c,i as s}from"./index-nZra831X.js";function v(n){return n==n&&!t(n)}function l(n,r){return function(t){return null!=t&&(t[n]===r&&(void 0!==r||n in Object(t)))}}function b(t){var i=function(n){for(var r=u(n),t=r.length;t--;){var i=r[t],e=n[i];r[t]=[i,e,v(e)]}return r}(t);return 1==i.length&&i[0][2]?l(i[0][0],i[0][1]):function(u){return u===t||function(t,u,i,e){var o=i.length,f=o;if(null==t)return!f;for(t=Object(t);o--;){var a=i[o];if(a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++o<f;){var c=(a=i[o])[0],s=t[c],v=a[1];if(a[2]){if(void 0===s&&!(c in t))return!1}else{var l=new n;if(!r(v,s,3,e,l))return!1}}return!0}(u,0,i)}}function d(n){return i(n)?(r=e(n),function(n){return null==n?void 0:n[r]}):function(n){return function(r){return f(r,n)}}(n);var r}function j(n){return"function"==typeof n?n:null==n?s:"object"==typeof n?a(n)?(t=n[0],u=n[1],i(t)&&v(u)?l(e(t),u):function(n){var i=o(n,t);return void 0===i&&i===u?c(n,t):r(u,i,3)}):b(n):d(n);var t,u}export{j as b};
|
||||
1
build/resources/admin/assets/_baseIteratee-iUx42eT-.js
Normal file
1
build/resources/admin/assets/_baseIteratee-iUx42eT-.js
Normal file
@ -0,0 +1 @@
|
||||
import{bp as n,cE as r,bn as t,bd as u,cF as e,cc as i,bC as o,cf as f,br as a}from"./index-CZ0Lvzl5.js";import{h as c,i as s}from"./index-BW22oPP6.js";function v(n){return n==n&&!t(n)}function l(n,r){return function(t){return null!=t&&(t[n]===r&&(void 0!==r||n in Object(t)))}}function b(t){var e=function(n){for(var r=u(n),t=r.length;t--;){var e=r[t],i=n[e];r[t]=[e,i,v(i)]}return r}(t);return 1==e.length&&e[0][2]?l(e[0][0],e[0][1]):function(u){return u===t||function(t,u,e,i){var o=e.length,f=o;if(null==t)return!f;for(t=Object(t);o--;){var a=e[o];if(a[2]?a[1]!==t[a[0]]:!(a[0]in t))return!1}for(;++o<f;){var c=(a=e[o])[0],s=t[c],v=a[1];if(a[2]){if(void 0===s&&!(c in t))return!1}else{var l=new n;if(!r(v,s,3,i,l))return!1}}return!0}(u,0,e)}}function d(n){return e(n)?(r=i(n),function(n){return null==n?void 0:n[r]}):function(n){return function(r){return f(r,n)}}(n);var r}function p(n){return"function"==typeof n?n:null==n?s:"object"==typeof n?a(n)?(t=n[0],u=n[1],e(t)&&v(u)?l(i(t),u):function(n){var e=o(n,t);return void 0===e&&e===u?c(n,t):r(u,e,3)}):b(n):d(n);var t,u}export{p as b};
|
||||
@ -1 +0,0 @@
|
||||
import{bi as r,ct as t,bn as e,cu as n,cv as o,cw as u,cx as c,cs as a,cy as f}from"./index-DBHnxsy6.js";var s=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(s)return s(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function p(r,t){var e=-1,n=r.length;for(t||(t=Array(n));++e<n;)t[e]=r[e];return t}function v(r,n,o,u){var c=!o;o||(o={});for(var a=-1,f=n.length;++a<f;){var s=n[a],i=void 0;void 0===i&&(i=r[s]),c?t(o,s,i):e(o,s,i)}return o}var l=Object.prototype.hasOwnProperty;function y(t){if(!r(t))return function(r){var t=[];if(null!=r)for(var e in Object(r))t.push(e);return t}(t);var e=n(t),o=[];for(var u in t)("constructor"!=u||!e&&l.call(t,u))&&o.push(u);return o}function b(r){return u(r)?o(r,!0):y(r)}var d=c(Object.getPrototypeOf,Object),h="object"==typeof exports&&exports&&!exports.nodeType&&exports,j=h&&"object"==typeof module&&module&&!module.nodeType&&module,w=j&&j.exports===h?a.Buffer:void 0,x=w?w.allocUnsafe:void 0;function O(r,t){if(t)return r.slice();var e=r.length,n=x?x(e):new r.constructor(e);return r.copy(n),n}function g(r){var t=new r.constructor(r.byteLength);return new f(t).set(new f(r)),t}function m(r,t){var e=t?g(r.buffer):r.buffer;return new r.constructor(e,r.byteOffset,r.length)}function P(r){return"function"!=typeof r.constructor||n(r)?{}:i(d(r))}export{g as a,m as b,v as c,O as d,p as e,d as g,P as i,b as k};
|
||||
@ -0,0 +1 @@
|
||||
import{bn as r,cy as t,bs as e,cz as n,cA as o,cB as c,cC as u,cx as a,cD as f}from"./index-CZ0Lvzl5.js";var s=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(s)return s(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function p(r,t){var e=-1,n=r.length;for(t||(t=Array(n));++e<n;)t[e]=r[e];return t}function v(r,n,o,c){var u=!o;o||(o={});for(var a=-1,f=n.length;++a<f;){var s=n[a],i=void 0;void 0===i&&(i=r[s]),u?t(o,s,i):e(o,s,i)}return o}var l=Object.prototype.hasOwnProperty;function y(t){if(!r(t))return function(r){var t=[];if(null!=r)for(var e in Object(r))t.push(e);return t}(t);var e=n(t),o=[];for(var c in t)("constructor"!=c||!e&&l.call(t,c))&&o.push(c);return o}function b(r){return c(r)?o(r,!0):y(r)}var d=u(Object.getPrototypeOf,Object),h="object"==typeof exports&&exports&&!exports.nodeType&&exports,j=h&&"object"==typeof module&&module&&!module.nodeType&&module,x=j&&j.exports===h?a.Buffer:void 0,O=x?x.allocUnsafe:void 0;function g(r,t){if(t)return r.slice();var e=r.length,n=O?O(e):new r.constructor(e);return r.copy(n),n}function w(r){var t=new r.constructor(r.byteLength);return new f(t).set(new f(r)),t}function m(r,t){var e=t?w(r.buffer):r.buffer;return new r.constructor(e,r.byteOffset,r.length)}function A(r){return"function"!=typeof r.constructor||n(r)?{}:i(d(r))}export{w as a,m as b,v as c,g as d,p as e,d as g,A as i,b as k};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as e}from"./active-user.vue_vue_type_script_setup_true_lang-19Sadsu3.js";import"./index-DBHnxsy6.js";import"./useChart-MKcUOr4d.js";import"./operations-CsHdqaV1.js";/* empty css */export{e as default};
|
||||
1
build/resources/admin/assets/active-user-CqefX-qJ.js
Normal file
1
build/resources/admin/assets/active-user-CqefX-qJ.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as e}from"./active-user.vue_vue_type_script_setup_true_lang-C_Ah812_.js";import"./index-CZ0Lvzl5.js";import"./useChart-CqKOtsKK.js";import"./operations-BDlSOaTf.js";/* empty css */export{e as default};
|
||||
@ -1 +1 @@
|
||||
var e=Object.defineProperty,t=Object.defineProperties,a=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(t,a,s)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[a]=s,l=(e,t)=>{for(var a in t||(t={}))r.call(t,a)&&i(e,a,t[a]);if(s)for(var a of s(t))o.call(t,a)&&i(e,a,t[a]);return e};import{d as n,c as d,J as c,aV as u,e as p,f as m,g as h,H as y,a as f,r as g,p as x,S as b,h as v,F as w,G as A,m as L,O as S}from"./index-DBHnxsy6.js";import{u as j,a as k,g as O}from"./useChart-MKcUOr4d.js";import{f as P}from"./operations-CsHdqaV1.js";/* empty css */const B=n((W=l({},{name:"ArtBarChart"}),D={__name:"index",props:{data:{default:()=>[0,0,0,0,0,0,0]},xAxisData:{default:()=>[]},barWidth:{default:"40%"},stack:{type:Boolean,default:!1},borderRadius:{default:4},height:{default:j().chartHeight},loading:{type:Boolean,default:!1},isEmpty:{type:Boolean,default:!1},colors:{default:()=>j().colors},showAxisLabel:{type:Boolean,default:!0},showAxisLine:{type:Boolean,default:!0},showSplitLine:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!1},legendPosition:{default:"bottom"}},setup(e){const t=e,a=d(()=>Array.isArray(t.data)&&t.data.length>0&&"object"==typeof t.data[0]&&"name"in t.data[0]),s=(e,a)=>e||(void 0!==a?t.colors[a%t.colors.length]:new O.LinearGradient(0,0,0,1,[{offset:0,color:y("--el-color-primary-light-4")},{offset:1,color:y("--el-color-primary")}])),r=e=>new O.LinearGradient(0,0,0,1,[{offset:0,color:e},{offset:1,color:e}]),o=e=>{const a=b();return l({name:e.name,data:e.data,type:"bar",stack:e.stack,itemStyle:(s=e.color,{borderRadius:t.borderRadius,color:"string"==typeof s?r(s):s}),barWidth:e.barWidth||t.barWidth},a);var s},{chartRef:i,getAxisLineStyle:n,getAxisLabelStyle:f,getAxisTickStyle:g,getSplitLineStyle:x,getAnimationConfig:b,getTooltipStyle:v,getLegendStyle:w,getGridWithLegend:A}=k({props:t,checkEmpty:()=>{if(Array.isArray(t.data)&&"number"==typeof t.data[0]){const e=t.data;return!e.length||e.every(e=>0===e)}if(Array.isArray(t.data)&&"object"==typeof t.data[0]){const e=t.data;return!e.length||e.every(e=>{var t;return!(null==(t=e.data)?void 0:t.length)||e.data.every(e=>0===e)})}return!0},watchSources:[()=>t.data,()=>t.xAxisData,()=>t.colors],generateOptions:()=>{const e={grid:A(t.showLegend&&a.value,t.legendPosition,{top:15,right:0,left:0}),tooltip:t.showTooltip?v():void 0,xAxis:{type:"category",data:t.xAxisData,axisTick:g(),axisLine:n(t.showAxisLine),axisLabel:f(t.showAxisLabel)},yAxis:{type:"value",axisLabel:f(t.showAxisLabel),axisLine:n(t.showAxisLine),splitLine:x(t.showSplitLine)}};if(t.showLegend&&a.value&&(e.legend=w(t.legendPosition)),a.value){const a=t.data;e.series=a.map((e,a)=>{const r=s(t.colors[a],a);return o({name:e.name,data:e.data,color:r,barWidth:e.barWidth,stack:t.stack?e.stack||"total":void 0})})}else{const a=t.data,r=s();e.series=[o({data:a,color:r})]}return e}});return(e,a)=>{const s=u;return c((m(),p("div",{ref_key:"chartRef",ref:i,style:h({height:t.height})},null,4)),[[s,t.loading]])}}},t(W,a(D))));var W,D;const T={class:"art-card h-105 p-4 box-border mb-5 max-sm:mb-4"},_={class:"flex-b mt-2"},G={class:"text-2xl text-g-900"},R={class:"text-xs text-g-500"},C=n({__name:"active-user",setup(e){const t=f([]),a=f([]),s=g([{name:"总用户量",num:"0"},{name:"总访问量",num:"0"},{name:"日访问量",num:"0"},{name:"周同比",num:"+0%"}]);return(()=>{return e=this,r=null,o=function*(){try{const e=yield P("30d");t.value=e.chart.map(e=>e.date.slice(5)),a.value=e.chart.map(e=>e.value),s[0].num=String(e.metrics.totalUsers),s[1].num=String(e.metrics.totalVisits),s[2].num=String(e.metrics.dailyVisits),s[3].num=e.metrics.weeklyGrowth}catch(e){S.error("加载用户概述失败")}},new Promise((t,a)=>{var s=e=>{try{l(o.next(e))}catch(t){a(t)}},i=e=>{try{l(o.throw(e))}catch(t){a(t)}},l=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,i);l((o=o.apply(e,r)).next())});var e,r,o})(),(e,r)=>{const o=B;return m(),p("div",T,[x(o,{class:"box-border p-2",barWidth:"50%",height:"13.7rem",showAxisLine:!1,data:a.value,xAxisData:t.value},null,8,["data","xAxisData"]),r[0]||(r[0]=b('<div class="ml-1"><h3 class="mt-5 text-lg font-medium">用户概述</h3><p class="mt-1 text-sm">比上周 <span class="text-success font-medium">+23%</span></p><p class="mt-1 text-sm">我们为您创建了多个选项,可将它们组合在一起并定制为像素完美的页面</p></div>',1)),v("div",_,[(m(!0),p(w,null,A(s,(e,t)=>(m(),p("div",{class:"flex-1",key:t},[v("p",G,L(e.num),1),v("p",R,L(e.name),1)]))),128))])])}}});export{C as _};
|
||||
var e=Object.defineProperty,t=Object.defineProperties,a=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(t,a,s)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[a]=s,l=(e,t)=>{for(var a in t||(t={}))r.call(t,a)&&i(e,a,t[a]);if(s)for(var a of s(t))o.call(t,a)&&i(e,a,t[a]);return e};import{d as n,c as d,J as c,aV as u,e as p,f as m,g as h,H as y,a as f,r as g,p as x,S as b,h as v,F as w,G as A,m as L,O as S}from"./index-CZ0Lvzl5.js";import{u as j,a as k,g as O}from"./useChart-CqKOtsKK.js";import{f as P}from"./operations-BDlSOaTf.js";/* empty css */const B=n((W=l({},{name:"ArtBarChart"}),D={__name:"index",props:{data:{default:()=>[0,0,0,0,0,0,0]},xAxisData:{default:()=>[]},barWidth:{default:"40%"},stack:{type:Boolean,default:!1},borderRadius:{default:4},height:{default:j().chartHeight},loading:{type:Boolean,default:!1},isEmpty:{type:Boolean,default:!1},colors:{default:()=>j().colors},showAxisLabel:{type:Boolean,default:!0},showAxisLine:{type:Boolean,default:!0},showSplitLine:{type:Boolean,default:!0},showTooltip:{type:Boolean,default:!0},showLegend:{type:Boolean,default:!1},legendPosition:{default:"bottom"}},setup(e){const t=e,a=d(()=>Array.isArray(t.data)&&t.data.length>0&&"object"==typeof t.data[0]&&"name"in t.data[0]),s=(e,a)=>e||(void 0!==a?t.colors[a%t.colors.length]:new O.LinearGradient(0,0,0,1,[{offset:0,color:y("--el-color-primary-light-4")},{offset:1,color:y("--el-color-primary")}])),r=e=>new O.LinearGradient(0,0,0,1,[{offset:0,color:e},{offset:1,color:e}]),o=e=>{const a=b();return l({name:e.name,data:e.data,type:"bar",stack:e.stack,itemStyle:(s=e.color,{borderRadius:t.borderRadius,color:"string"==typeof s?r(s):s}),barWidth:e.barWidth||t.barWidth},a);var s},{chartRef:i,getAxisLineStyle:n,getAxisLabelStyle:f,getAxisTickStyle:g,getSplitLineStyle:x,getAnimationConfig:b,getTooltipStyle:v,getLegendStyle:w,getGridWithLegend:A}=k({props:t,checkEmpty:()=>{if(Array.isArray(t.data)&&"number"==typeof t.data[0]){const e=t.data;return!e.length||e.every(e=>0===e)}if(Array.isArray(t.data)&&"object"==typeof t.data[0]){const e=t.data;return!e.length||e.every(e=>{var t;return!(null==(t=e.data)?void 0:t.length)||e.data.every(e=>0===e)})}return!0},watchSources:[()=>t.data,()=>t.xAxisData,()=>t.colors],generateOptions:()=>{const e={grid:A(t.showLegend&&a.value,t.legendPosition,{top:15,right:0,left:0}),tooltip:t.showTooltip?v():void 0,xAxis:{type:"category",data:t.xAxisData,axisTick:g(),axisLine:n(t.showAxisLine),axisLabel:f(t.showAxisLabel)},yAxis:{type:"value",axisLabel:f(t.showAxisLabel),axisLine:n(t.showAxisLine),splitLine:x(t.showSplitLine)}};if(t.showLegend&&a.value&&(e.legend=w(t.legendPosition)),a.value){const a=t.data;e.series=a.map((e,a)=>{const r=s(t.colors[a],a);return o({name:e.name,data:e.data,color:r,barWidth:e.barWidth,stack:t.stack?e.stack||"total":void 0})})}else{const a=t.data,r=s();e.series=[o({data:a,color:r})]}return e}});return(e,a)=>{const s=u;return c((m(),p("div",{ref_key:"chartRef",ref:i,style:h({height:t.height})},null,4)),[[s,t.loading]])}}},t(W,a(D))));var W,D;const _={class:"art-card h-105 p-4 box-border mb-5 max-sm:mb-4"},G={class:"flex-b mt-2"},R={class:"text-2xl text-g-900"},T={class:"text-xs text-g-500"},V=n({__name:"active-user",setup(e){const t=f([]),a=f([]),s=g([{name:"总用户量",num:"0"},{name:"总访问量",num:"0"},{name:"日访问量",num:"0"},{name:"周同比",num:"+0%"}]);return(()=>{return e=this,r=null,o=function*(){try{const e=yield P("30d");t.value=e.chart.map(e=>e.date.slice(5)),a.value=e.chart.map(e=>e.value),s[0].num=String(e.metrics.totalUsers),s[1].num=String(e.metrics.totalVisits),s[2].num=String(e.metrics.dailyVisits),s[3].num=e.metrics.weeklyGrowth}catch(e){S.error("加载用户概述失败")}},new Promise((t,a)=>{var s=e=>{try{l(o.next(e))}catch(t){a(t)}},i=e=>{try{l(o.throw(e))}catch(t){a(t)}},l=e=>e.done?t(e.value):Promise.resolve(e.value).then(s,i);l((o=o.apply(e,r)).next())});var e,r,o})(),(e,r)=>{const o=B;return m(),p("div",_,[x(o,{class:"box-border p-2",barWidth:"50%",height:"13.7rem",showAxisLine:!1,data:a.value,xAxisData:t.value},null,8,["data","xAxisData"]),r[0]||(r[0]=b('<div class="ml-1"><h3 class="mt-5 text-lg font-medium">用户概述</h3><p class="mt-1 text-sm">比上周 <span class="text-success font-medium">+23%</span></p><p class="mt-1 text-sm">我们为您创建了多个选项,可将它们组合在一起并定制为像素完美的页面</p></div>',1)),v("div",G,[(m(!0),p(w,null,A(s,(e,t)=>(m(),p("div",{class:"flex-1",key:t},[v("p",R,L(e.num),1),v("p",T,L(e.name),1)]))),128))])])}}});export{V as _};
|
||||
@ -1 +1 @@
|
||||
var e=Object.defineProperty,r=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,o=(r,t,a)=>t in r?e(r,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):r[t]=a;import{b4 as s}from"./index-DBHnxsy6.js";function n(e){return n=this,i=null,c=function*(){const n=((e,s)=>{for(var n in s||(s={}))t.call(s,n)&&o(e,n,s[n]);if(r)for(var n of r(s))a.call(s,n)&&o(e,n,s[n]);return e})({page:1,page_size:20},e||{});try{const e=yield s.get({url:"app/activities",params:n,showErrorMessage:!1});return{records:e.list.map(e=>({id:e.id,name:e.name,categoryName:e.category_name,status:e.status,priceDraw:e.price_draw,isBoss:e.is_boss})),total:e.total,current:e.page,size:e.page_size}}catch(i){return{records:[],total:0,current:n.page,size:n.page_size}}},new Promise((e,r)=>{var t=e=>{try{o(c.next(e))}catch(t){r(t)}},a=e=>{try{o(c.throw(e))}catch(t){r(t)}},o=r=>r.done?e(r.value):Promise.resolve(r.value).then(t,a);o((c=c.apply(n,i)).next())});var n,i,c}export{n as f};
|
||||
var e=Object.defineProperty,r=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,o=(r,t,a)=>t in r?e(r,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):r[t]=a;import{b9 as s}from"./index-CZ0Lvzl5.js";function n(e){return n=this,i=null,c=function*(){const n=((e,s)=>{for(var n in s||(s={}))t.call(s,n)&&o(e,n,s[n]);if(r)for(var n of r(s))a.call(s,n)&&o(e,n,s[n]);return e})({page:1,page_size:20},e||{});try{const e=yield s.get({url:"app/activities",params:n,showErrorMessage:!1});return{records:e.list.map(e=>({id:e.id,name:e.name,categoryName:e.category_name,status:e.status,priceDraw:e.price_draw,isBoss:e.is_boss})),total:e.total,current:e.page,size:e.page_size}}catch(i){return{records:[],total:0,current:n.page,size:n.page_size}}},new Promise((e,r)=>{var t=e=>{try{o(c.next(e))}catch(t){r(t)}},a=e=>{try{o(c.throw(e))}catch(t){r(t)}},o=r=>r.done?e(r.value):Promise.resolve(r.value).then(t,a);o((c=c.apply(n,i)).next())});var n,i,c}export{n as f};
|
||||
@ -1 +1 @@
|
||||
import{d as t,a as e,r as l,o as a,e as s,f as r,h as o,m as n,F as i,G as c,l as d,i as g,p as x,z as v,n as f}from"./index-DBHnxsy6.js";/* empty css */import{a as p,b as u}from"./operations-CsHdqaV1.js";import{E as m}from"./index-D2YpA_om.js";import"./use-form-common-props-BOfz9xGR.js";const b={class:"art-card h-140 p-5 mb-5 max-sm:mb-4"},h={class:"h-[calc(100%-40px)]"},y={class:"grid grid-cols-4 gap-4 mb-6"},w={class:"text-center p-3 bg-blue-50 rounded-lg"},C={class:"text-2xl font-bold text-blue-600"},R={class:"text-center p-3 bg-green-50 rounded-lg"},S={class:"text-2xl font-bold text-green-600"},j={class:"text-center p-3 bg-yellow-50 rounded-lg"},P={class:"text-2xl font-bold text-yellow-600"},$={class:"text-center p-3 bg-purple-50 rounded-lg"},k={class:"text-2xl font-bold text-purple-600"},T={class:"h-60 mb-4"},_={class:"overflow-auto"},A={class:"w-full text-sm"},E={class:"py-2"},F={class:"flex items-center"},W={class:"py-2"},z={class:"py-2"},G={class:"py-2"},L={class:"py-2"},N=t({__name:"activity-lottery",setup(t){const N=e(),D=l({totalActivities:0,totalParticipants:0,totalDraws:0,winnerCount:0,overallWinRate:0,costControl:0}),M=l([]),O=e(!1),U=t=>t.winRate>2?"success":t.winRate>1?"warning":"info",q=t=>t.winRate>2?"高中奖率":t.winRate>1?"中等中奖率":"低中奖率",B=(t,e)=>({1:`rgba(251, 191, 36, ${e})`,2:`rgba(156, 163, 175, ${e})`,3:`rgba(251, 146, 60, ${e})`,4:`rgba(96, 165, 250, ${e})`,5:`rgba(52, 211, 153, ${e})`}[t]||`rgba(156, 163, 175, ${e})`),H=()=>{return t=this,e=null,l=function*(){O.value=!0;try{const[t,e]=yield Promise.all([p("7d"),u("7d")]);Object.assign(D,t),M.splice(0,M.length,...e),f(()=>{(()=>{if(!N.value||0===M.length)return;const t=N.value,e=t.getContext("2d");if(!e)return;e.clearRect(0,0,t.width,t.height);const l=40,a=t.width-80,s=t.height-80,r=Math.max(...M.map(t=>t.winnerCount)),o=a/M.length*.6,n=a/M.length*.4;M.forEach((t,a)=>{const i=l+a*(o+n)+n/2,c=t.winnerCount/r*s,d=l+s-c,g=e.createLinearGradient(i,d+c,i,d);g.addColorStop(0,B(t.level,.8)),g.addColorStop(1,B(t.level,1)),e.fillStyle=g,e.fillRect(i,d,o,c),e.fillStyle="#333",e.font="12px sans-serif",e.textAlign="center",e.fillText(t.winnerCount.toString(),i+o/2,d-5),e.fillText(t.levelName,i+o/2,l+s+20)}),e.strokeStyle="#e0e0e0",e.lineWidth=1,e.beginPath(),e.moveTo(l,l),e.lineTo(l,l+s),e.lineTo(l+a,l+s),e.stroke()})()})}catch(t){}finally{O.value=!1}},new Promise((a,s)=>{var r=t=>{try{n(l.next(t))}catch(e){s(e)}},o=t=>{try{n(l.throw(t))}catch(e){s(e)}},n=t=>t.done?a(t.value):Promise.resolve(t.value).then(r,o);n((l=l.apply(t,e)).next())});var t,e,l};return a(()=>{H()}),(t,e)=>{const l=m;return r(),s("div",b,[e[5]||(e[5]=o("div",{class:"art-card-header"},[o("div",{class:"title"},[o("h4",null,"活动抽奖效果分析"),o("p",null,"优化中奖概率,控制活动成本")])],-1)),o("div",h,[o("div",y,[o("div",w,[o("div",C,n(D.totalActivities),1),e[0]||(e[0]=o("div",{class:"text-sm text-g-500"},"活动总数",-1))]),o("div",R,[o("div",S,n((a=D.totalParticipants,a>=1e4?(a/1e4).toFixed(1)+"w":a>=1e3?(a/1e3).toFixed(1)+"k":a.toString())),1),e[1]||(e[1]=o("div",{class:"text-sm text-g-500"},"参与人数",-1))]),o("div",j,[o("div",P,n(D.overallWinRate)+"%",1),e[2]||(e[2]=o("div",{class:"text-sm text-g-500"},"整体中奖率",-1))]),o("div",$,[o("div",k,n(D.costControl)+"%",1),e[3]||(e[3]=o("div",{class:"text-sm text-g-500"},"成本控制",-1))])]),o("div",T,[o("canvas",{ref_key:"chartRef",ref:N,width:"400",height:"240"},null,512)]),o("div",_,[o("table",A,[e[4]||(e[4]=o("thead",null,[o("tr",{class:"border-b border-g-200"},[o("th",{class:"text-left py-2"},"奖级"),o("th",{class:"text-left py-2"},"中奖人数"),o("th",{class:"text-left py-2"},"中奖率"),o("th",{class:"text-left py-2"},"成本"),o("th",{class:"text-left py-2"},"状态")])],-1)),o("tbody",null,[(r(!0),s(i,null,c(M,t=>{return r(),s("tr",{key:t.level,class:"border-b border-g-100 hover:bg-g-50"},[o("td",E,[o("div",F,[o("span",{class:g(["w-6 h-6 rounded-full flex items-center justify-center text-white text-xs font-bold mr-2",(e=t.level,{1:"bg-gradient-to-r from-yellow-400 to-yellow-300",2:"bg-gradient-to-r from-gray-400 to-gray-300",3:"bg-gradient-to-r from-orange-400 to-orange-300",4:"bg-gradient-to-r from-blue-400 to-blue-300",5:"bg-gradient-to-r from-green-400 to-green-300"}[e]||"bg-gradient-to-r from-gray-400 to-gray-300")])},n(t.level),3),d(" "+n(t.levelName),1)])]),o("td",W,n(t.winnerCount)+"人",1),o("td",z,n(t.winRate)+"%",1),o("td",G,"¥"+n(t.cost.toLocaleString()),1),o("td",L,[x(l,{type:U(t),size:"small"},{default:v(()=>[d(n(q(t)),1)]),_:2},1032,["type"])])]);var e}),128))])])])])]);var a}}});export{N as default};
|
||||
import{d as t,a as e,r as l,o as a,e as s,f as r,h as o,m as n,F as i,G as c,l as d,i as g,p as x,z as v,n as f}from"./index-CZ0Lvzl5.js";/* empty css */import{a as p,b as u}from"./operations-BDlSOaTf.js";import{E as m}from"./index-BQ-mpgoy.js";import"./use-form-common-props-U6f9D53_.js";const b={class:"art-card h-140 p-5 mb-5 max-sm:mb-4"},h={class:"h-[calc(100%-40px)]"},y={class:"grid grid-cols-4 gap-4 mb-6"},w={class:"text-center p-3 bg-blue-50 rounded-lg"},C={class:"text-2xl font-bold text-blue-600"},R={class:"text-center p-3 bg-green-50 rounded-lg"},S={class:"text-2xl font-bold text-green-600"},j={class:"text-center p-3 bg-yellow-50 rounded-lg"},P={class:"text-2xl font-bold text-yellow-600"},$={class:"text-center p-3 bg-purple-50 rounded-lg"},k={class:"text-2xl font-bold text-purple-600"},T={class:"h-60 mb-4"},F={class:"overflow-auto"},W={class:"w-full text-sm"},_={class:"py-2"},A={class:"flex items-center"},z={class:"py-2"},E={class:"py-2"},G={class:"py-2"},L={class:"py-2"},N=t({__name:"activity-lottery",setup(t){const N=e(),D=l({totalActivities:0,totalParticipants:0,totalDraws:0,winnerCount:0,overallWinRate:0,costControl:0}),M=l([]),O=e(!1),q=t=>t.winRate>2?"success":t.winRate>1?"warning":"info",B=t=>t.winRate>2?"高中奖率":t.winRate>1?"中等中奖率":"低中奖率",H=(t,e)=>({1:`rgba(251, 191, 36, ${e})`,2:`rgba(156, 163, 175, ${e})`,3:`rgba(251, 146, 60, ${e})`,4:`rgba(96, 165, 250, ${e})`,5:`rgba(52, 211, 153, ${e})`}[t]||`rgba(156, 163, 175, ${e})`),I=()=>{return t=this,e=null,l=function*(){O.value=!0;try{const[t,e]=yield Promise.all([p("7d"),u("7d")]);Object.assign(D,t),M.splice(0,M.length,...e),f(()=>{(()=>{if(!N.value||0===M.length)return;const t=N.value,e=t.getContext("2d");if(!e)return;e.clearRect(0,0,t.width,t.height);const l=40,a=t.width-80,s=t.height-80,r=Math.max(...M.map(t=>t.winnerCount)),o=a/M.length*.6,n=a/M.length*.4;M.forEach((t,a)=>{const i=l+a*(o+n)+n/2,c=t.winnerCount/r*s,d=l+s-c,g=e.createLinearGradient(i,d+c,i,d);g.addColorStop(0,H(t.level,.8)),g.addColorStop(1,H(t.level,1)),e.fillStyle=g,e.fillRect(i,d,o,c),e.fillStyle="#333",e.font="12px sans-serif",e.textAlign="center",e.fillText(t.winnerCount.toString(),i+o/2,d-5),e.fillText(t.levelName,i+o/2,l+s+20)}),e.strokeStyle="#e0e0e0",e.lineWidth=1,e.beginPath(),e.moveTo(l,l),e.lineTo(l,l+s),e.lineTo(l+a,l+s),e.stroke()})()})}catch(t){}finally{O.value=!1}},new Promise((a,s)=>{var r=t=>{try{n(l.next(t))}catch(e){s(e)}},o=t=>{try{n(l.throw(t))}catch(e){s(e)}},n=t=>t.done?a(t.value):Promise.resolve(t.value).then(r,o);n((l=l.apply(t,e)).next())});var t,e,l};return a(()=>{I()}),(t,e)=>{const l=m;return r(),s("div",b,[e[5]||(e[5]=o("div",{class:"art-card-header"},[o("div",{class:"title"},[o("h4",null,"活动抽奖效果分析"),o("p",null,"优化中奖概率,控制活动成本")])],-1)),o("div",h,[o("div",y,[o("div",w,[o("div",C,n(D.totalActivities),1),e[0]||(e[0]=o("div",{class:"text-sm text-g-500"},"活动总数",-1))]),o("div",R,[o("div",S,n((a=D.totalParticipants,a>=1e4?(a/1e4).toFixed(1)+"w":a>=1e3?(a/1e3).toFixed(1)+"k":a.toString())),1),e[1]||(e[1]=o("div",{class:"text-sm text-g-500"},"参与人数",-1))]),o("div",j,[o("div",P,n(D.overallWinRate)+"%",1),e[2]||(e[2]=o("div",{class:"text-sm text-g-500"},"整体中奖率",-1))]),o("div",$,[o("div",k,n(D.costControl)+"%",1),e[3]||(e[3]=o("div",{class:"text-sm text-g-500"},"成本控制",-1))])]),o("div",T,[o("canvas",{ref_key:"chartRef",ref:N,width:"400",height:"240"},null,512)]),o("div",F,[o("table",W,[e[4]||(e[4]=o("thead",null,[o("tr",{class:"border-b border-g-200"},[o("th",{class:"text-left py-2"},"奖级"),o("th",{class:"text-left py-2"},"中奖人数"),o("th",{class:"text-left py-2"},"中奖率"),o("th",{class:"text-left py-2"},"成本"),o("th",{class:"text-left py-2"},"状态")])],-1)),o("tbody",null,[(r(!0),s(i,null,c(M,t=>{return r(),s("tr",{key:t.level,class:"border-b border-g-100 hover:bg-g-50"},[o("td",_,[o("div",A,[o("span",{class:g(["w-6 h-6 rounded-full flex items-center justify-center text-white text-xs font-bold mr-2",(e=t.level,{1:"bg-gradient-to-r from-yellow-400 to-yellow-300",2:"bg-gradient-to-r from-gray-400 to-gray-300",3:"bg-gradient-to-r from-orange-400 to-orange-300",4:"bg-gradient-to-r from-blue-400 to-blue-300",5:"bg-gradient-to-r from-green-400 to-green-300"}[e]||"bg-gradient-to-r from-gray-400 to-gray-300")])},n(t.level),3),d(" "+n(t.levelName),1)])]),o("td",z,n(t.winnerCount)+"人",1),o("td",E,n(t.winRate)+"%",1),o("td",G,"¥"+n(t.cost.toLocaleString()),1),o("td",L,[x(l,{type:q(t),size:"small"},{default:v(()=>[d(n(B(t)),1)]),_:2},1032,["type"])])]);var e}),128))])])])])]);var a}}});export{N as default};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as o}from"./activity-prize-analysis.vue_vue_type_script_setup_true_lang-bThIk24K.js";import"./index-DBHnxsy6.js";import"./el-progress-DcK0UPpw.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./operations-CsHdqaV1.js";import"./index-CHZ9Ls9_.js";import"./index-B99ckkYy.js";import"./index-nZra831X.js";import"./index-MOpuiu9Z.js";import"./use-form-item-ByasanrX.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./index-DZO7eApA.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as i}from"./activity-prize-analysis.vue_vue_type_script_setup_true_lang-Be3zdQ_a.js";import"./index-CZ0Lvzl5.js";import"./el-progress-Bnk5TVLR.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./operations-BDlSOaTf.js";import"./index-pVAXVlCV.js";import"./index-C6fEXl-e.js";import"./index-BW22oPP6.js";import"./index-K2zzami3.js";import"./use-form-item-BsnpemL_.js";import"./use-form-common-props-U6f9D53_.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./index-DH_vX4BK.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";export{i as default};
|
||||
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
var e=Object.defineProperty,a=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable,o=(a,l,t)=>l in a?e(a,l,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[l]=t,s=(e,s)=>{for(var r in s||(s={}))l.call(s,r)&&o(e,r,s[r]);if(a)for(var r of a(s))t.call(s,r)&&o(e,r,s[r]);return e};import{d as r,a as i,w as p,E as u,y as d,f as m,z as n,p as c,u as f,B as j,e as v,F as _,G as b,J as y,l as x,ab as h,aW as V}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{a as g}from"./adminActivities-C7lwI2HP.js";import{E,a as w}from"./index-zIv9y_XZ.js";import{E as O}from"./index-BIIDnOvF.js";import{E as C}from"./index-B5f0OwDI.js";import{E as P}from"./index-qSQlj0RO.js";import{E as k,a as I}from"./index-CHZ9Ls9_.js";import{E as J}from"./index-Bi8tRqjc.js";import{E as U}from"./index-r0EsCkBw.js";import{E as z}from"./index-Bh7aAHNM.js";import{_ as B}from"./_plugin-vue_export-helper-BCo6x5W8.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-DZO7eApA.js";import"./index-MOpuiu9Z.js";import"./index-nZra831X.js";import"./use-form-item-ByasanrX.js";import"./_initCloneObject-7oWMW-Ot.js";import"./index-B99ckkYy.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-DfWQjCuY.js";const F=B(r({__name:"activity-search",props:{modelValue:{}},emits:["update:modelValue","search","reset"],setup(e,{emit:a}){const l=e,t=a,o=i([]),r=i(s({},l.modelValue));p(()=>l.modelValue,(e,a)=>{JSON.stringify(e)!==JSON.stringify(a)&&(r.value=s({},e))},{deep:!0});let B=null;p(r,e=>{B&&clearTimeout(B),B=setTimeout(()=>{t("update:modelValue",s({},e))},100)},{deep:!0});const F=e=>{return a=this,l=null,t=function*(){if(e&&0===o.value.length)try{const e=yield g();o.value=e.list||[]}catch(a){}},new Promise((e,o)=>{var s=e=>{try{i(t.next(e))}catch(a){o(a)}},r=e=>{try{i(t.throw(e))}catch(a){o(a)}},i=a=>a.done?e(a.value):Promise.resolve(a.value).then(s,r);i((t=t.apply(a,l)).next())});var a,l,t},G=()=>{t("search",r.value)},S=()=>{r.value={name:void 0,category_id:void 0,status:void 0,is_boss:void 0},t("reset")};return(a,l)=>{const t=u("ripple");return m(),d(f(z),{class:"search-card",shadow:"never"},{default:n(()=>[c(f(E),{ref:"formRef",model:e.modelValue,"label-width":"80px"},{default:n(()=>[c(f(O),{gutter:20},{default:n(()=>[c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"活动名称",prop:"name"},{default:n(()=>[c(f(P),{modelValue:r.value.name,"onUpdate:modelValue":l[0]||(l[0]=e=>r.value.name=e),placeholder:"请输入活动名称",clearable:"",onKeyup:j(G,["enter"])},null,8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"分类",prop:"category_id"},{default:n(()=>[c(f(k),{modelValue:r.value.category_id,"onUpdate:modelValue":l[1]||(l[1]=e=>r.value.category_id=e),placeholder:"请选择分类",clearable:"",onVisibleChange:F},{default:n(()=>[(m(!0),v(_,null,b(o.value,e=>(m(),d(f(I),{key:e.id,label:e.name,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"状态",prop:"status"},{default:n(()=>[c(f(k),{modelValue:r.value.status,"onUpdate:modelValue":l[2]||(l[2]=e=>r.value.status=e),placeholder:"请选择状态",clearable:""},{default:n(()=>[c(f(I),{value:1,label:"进行中"}),c(f(I),{value:2,label:"下线"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"Boss活动",prop:"is_boss"},{default:n(()=>[c(f(k),{modelValue:r.value.is_boss,"onUpdate:modelValue":l[3]||(l[3]=e=>r.value.is_boss=e),placeholder:"请选择",clearable:""},{default:n(()=>[c(f(I),{value:1,label:"是"}),c(f(I),{value:0,label:"否"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:4},{default:n(()=>[c(f(w),{"label-width":"0"},{default:n(()=>[c(f(J),null,{default:n(()=>[y((m(),d(f(U),{type:"primary",onClick:G},{default:n(()=>[c(f(h),{class:"mr-1"},{default:n(()=>[c(f(V))]),_:1}),l[4]||(l[4]=x(" 搜索 ",-1))]),_:1})),[[t]]),y((m(),d(f(U),{onClick:S},{default:n(()=>[...l[5]||(l[5]=[x("重置",-1)])]),_:1})),[[t]])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}}),[["__scopeId","data-v-82eaff85"]]);export{F as default};
|
||||
1
build/resources/admin/assets/activity-search-p-0MbIUg.js
Normal file
1
build/resources/admin/assets/activity-search-p-0MbIUg.js
Normal file
@ -0,0 +1 @@
|
||||
var e=Object.defineProperty,a=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable,o=(a,l,t)=>l in a?e(a,l,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[l]=t,s=(e,s)=>{for(var r in s||(s={}))l.call(s,r)&&o(e,r,s[r]);if(a)for(var r of a(s))t.call(s,r)&&o(e,r,s[r]);return e};import{d as r,a as i,w as p,E as u,y as d,f as m,z as n,p as c,u as f,B as j,e as v,F as b,G as _,J as y,l as x,ab as h,b2 as V}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{a as g}from"./adminActivities-BFodRb8S.js";import{E,a as w}from"./index-DhBIlDpg.js";import{E as O}from"./index-D11sKPUb.js";import{E as C}from"./index-DR7AB6IM.js";import{E as I}from"./index-6-f3xsy2.js";import{E as J,a as P}from"./index-pVAXVlCV.js";import{E as k}from"./index-BJHoISGQ.js";import{E as U}from"./index-CWBrZtwn.js";import{E as F}from"./index-D9lGuZWz.js";import{_ as G}from"./_plugin-vue_export-helper-BCo6x5W8.js";import"./use-form-common-props-U6f9D53_.js";import"./index-DH_vX4BK.js";import"./index-K2zzami3.js";import"./index-BW22oPP6.js";import"./use-form-item-BsnpemL_.js";import"./_initCloneObject-DfOnBHdn.js";import"./index-C6fEXl-e.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";import"./index-MV2EqMi7.js";const S=G(r({__name:"activity-search",props:{modelValue:{}},emits:["update:modelValue","search","reset"],setup(e,{emit:a}){const l=e,t=a,o=i([]),r=i(s({},l.modelValue));p(()=>l.modelValue,(e,a)=>{JSON.stringify(e)!==JSON.stringify(a)&&(r.value=s({},e))},{deep:!0});let G=null;p(r,e=>{G&&clearTimeout(G),G=setTimeout(()=>{t("update:modelValue",s({},e))},100)},{deep:!0});const S=e=>{return a=this,l=null,t=function*(){if(e&&0===o.value.length)try{const e=yield g();o.value=e.list||[]}catch(a){}},new Promise((e,o)=>{var s=e=>{try{i(t.next(e))}catch(a){o(a)}},r=e=>{try{i(t.throw(e))}catch(a){o(a)}},i=a=>a.done?e(a.value):Promise.resolve(a.value).then(s,r);i((t=t.apply(a,l)).next())});var a,l,t},z=()=>{t("search",r.value)},A=()=>{r.value={name:void 0,category_id:void 0,status:void 0,is_boss:void 0},t("reset")};return(a,l)=>{const t=u("ripple");return m(),d(f(F),{class:"search-card",shadow:"never"},{default:n(()=>[c(f(E),{ref:"formRef",model:e.modelValue,"label-width":"80px"},{default:n(()=>[c(f(O),{gutter:20},{default:n(()=>[c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"活动名称",prop:"name"},{default:n(()=>[c(f(I),{modelValue:r.value.name,"onUpdate:modelValue":l[0]||(l[0]=e=>r.value.name=e),placeholder:"请输入活动名称",clearable:"",onKeyup:j(z,["enter"])},null,8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"分类",prop:"category_id"},{default:n(()=>[c(f(J),{modelValue:r.value.category_id,"onUpdate:modelValue":l[1]||(l[1]=e=>r.value.category_id=e),placeholder:"请选择分类",clearable:"",onVisibleChange:S},{default:n(()=>[(m(!0),v(b,null,_(o.value,e=>(m(),d(f(P),{key:e.id,label:e.name,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"状态",prop:"status"},{default:n(()=>[c(f(J),{modelValue:r.value.status,"onUpdate:modelValue":l[2]||(l[2]=e=>r.value.status=e),placeholder:"请选择状态",clearable:""},{default:n(()=>[c(f(P),{value:1,label:"进行中"}),c(f(P),{value:2,label:"下线"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:6},{default:n(()=>[c(f(w),{label:"Boss活动",prop:"is_boss"},{default:n(()=>[c(f(J),{modelValue:r.value.is_boss,"onUpdate:modelValue":l[3]||(l[3]=e=>r.value.is_boss=e),placeholder:"请选择",clearable:""},{default:n(()=>[c(f(P),{value:1,label:"是"}),c(f(P),{value:0,label:"否"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),c(f(C),{span:4},{default:n(()=>[c(f(w),{"label-width":"0"},{default:n(()=>[c(f(k),null,{default:n(()=>[y((m(),d(f(U),{type:"primary",onClick:z},{default:n(()=>[c(f(h),{class:"mr-1"},{default:n(()=>[c(f(V))]),_:1}),l[4]||(l[4]=x(" 搜索 ",-1))]),_:1})),[[t]]),y((m(),d(f(U),{onClick:A},{default:n(()=>[...l[5]||(l[5]=[x("重置",-1)])]),_:1})),[[t]])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}}),[["__scopeId","data-v-82eaff85"]]);export{S as default};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as o}from"./add-coupon-dialog.vue_vue_type_script_setup_true_lang-C0dOKfzY.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./coupons-BX1h_qVI.js";import"./index-zIv9y_XZ.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-DZO7eApA.js";import"./index-MOpuiu9Z.js";import"./index-nZra831X.js";import"./use-form-item-ByasanrX.js";import"./_initCloneObject-7oWMW-Ot.js";import"./index-CHZ9Ls9_.js";import"./index-B99ckkYy.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-r0EsCkBw.js";import"./index-DfWQjCuY.js";import"./index-CtUPMuT5.js";import"./index-DeCbFeva.js";import"./use-dialog-yhiLZsn9.js";import"./index-DvlZWusB.js";import"./refs-Cw5r5QN8.js";export{o as default};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as o}from"./add-coupon-dialog.vue_vue_type_script_setup_true_lang-CYcx2nJS.js";import"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./coupons-B3KVevR-.js";import"./index-DhBIlDpg.js";import"./use-form-common-props-U6f9D53_.js";import"./index-DH_vX4BK.js";import"./index-K2zzami3.js";import"./index-BW22oPP6.js";import"./use-form-item-BsnpemL_.js";import"./_initCloneObject-DfOnBHdn.js";import"./index-pVAXVlCV.js";import"./index-C6fEXl-e.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";import"./index-CWBrZtwn.js";import"./index-MV2EqMi7.js";import"./index-DO8sDDAh.js";import"./index-CgoUqbdT.js";import"./use-dialog-BDM4AbF-.js";import"./index-DaNWXg3-.js";import"./refs-Cw5r5QN8.js";export{o as default};
|
||||
@ -1 +1 @@
|
||||
var e=(e,a,l)=>new Promise((o,t)=>{var i=e=>{try{r(l.next(e))}catch(a){t(a)}},s=e=>{try{r(l.throw(e))}catch(a){t(a)}},r=e=>e.done?o(e.value):Promise.resolve(e.value).then(i,s);r((l=l.apply(e,a)).next())});import{d as a,a as l,r as o,w as t,o as i,y as s,f as r,z as d,p as u,u as n,e as p,F as m,G as c,l as v}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{c as f}from"./coupons-BX1h_qVI.js";import{E as y,a as b}from"./index-zIv9y_XZ.js";import{E as j,a as g}from"./index-CHZ9Ls9_.js";import{E as h}from"./index-r0EsCkBw.js";import{E as _}from"./index-CtUPMuT5.js";const x=a({__name:"add-coupon-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(a,{emit:x}){const I=a,w=x,k=l(),V=l(!1),C=l([]),E=o({couponId:null});t(()=>I.visible,e=>{});const A={couponId:[{required:!0,message:"请选择优惠券",trigger:"change"}]},z=()=>e(this,null,function*(){var e;try{yield null==(e=k.value)?void 0:e.validate(),V.value=!0,w("submit",{coupon_id:E.couponId})}catch(a){}finally{V.value=!1}}),B=()=>{w("update:visible",!1)},P=()=>{var e;E.couponId=null,null==(e=k.value)||e.clearValidate()};return i(()=>e(this,null,function*(){try{const e=yield f.getList({status:1,page:1,page_size:100});C.value=Array.isArray(e.list)?e.list.map(e=>({id:e.id,name:e.name})):[]}catch(e){C.value=[]}})),(e,l)=>(r(),s(n(_),{"model-value":a.visible,title:"发放优惠券",width:"400px","close-on-click-modal":!1,"onUpdate:modelValue":l[1]||(l[1]=e=>w("update:visible",e)),onClosed:P},{footer:d(()=>[u(n(h),{onClick:B},{default:d(()=>[...l[2]||(l[2]=[v("取消",-1)])]),_:1}),u(n(h),{type:"primary",loading:V.value,onClick:z},{default:d(()=>[...l[3]||(l[3]=[v(" 确定 ",-1)])]),_:1},8,["loading"])]),default:d(()=>[u(n(y),{ref_key:"formRef",ref:k,model:E,rules:A,"label-width":"80px"},{default:d(()=>[u(n(b),{label:"优惠券",prop:"couponId"},{default:d(()=>[u(n(j),{modelValue:E.couponId,"onUpdate:modelValue":l[0]||(l[0]=e=>E.couponId=e),placeholder:"请选择优惠券",filterable:"",style:{width:"100%"}},{default:d(()=>[(r(!0),p(m,null,c(C.value,e=>(r(),s(n(g),{key:e.id,label:`${e.name}(ID: ${e.id})`,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{x as _};
|
||||
var e=(e,a,l)=>new Promise((o,t)=>{var i=e=>{try{r(l.next(e))}catch(a){t(a)}},s=e=>{try{r(l.throw(e))}catch(a){t(a)}},r=e=>e.done?o(e.value):Promise.resolve(e.value).then(i,s);r((l=l.apply(e,a)).next())});import{d as a,a as l,r as o,w as t,o as i,y as s,f as r,z as d,p as u,u as n,e as p,F as m,G as c,l as v}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{c as f}from"./coupons-B3KVevR-.js";import{E as y,a as b}from"./index-DhBIlDpg.js";import{E as j,a as h}from"./index-pVAXVlCV.js";import{E as g}from"./index-CWBrZtwn.js";import{E as _}from"./index-DO8sDDAh.js";const x=a({__name:"add-coupon-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(a,{emit:x}){const I=a,w=x,k=l(),E=l(!1),V=l([]),C=o({couponId:null});t(()=>I.visible,e=>{});const $={couponId:[{required:!0,message:"请选择优惠券",trigger:"change"}]},z=()=>e(this,null,function*(){var e;try{yield null==(e=k.value)?void 0:e.validate(),E.value=!0,w("submit",{coupon_id:C.couponId})}catch(a){}finally{E.value=!1}}),A=()=>{w("update:visible",!1)},D=()=>{var e;C.couponId=null,null==(e=k.value)||e.clearValidate()};return i(()=>e(this,null,function*(){try{const e=yield f.getList({status:1,page:1,page_size:100});V.value=Array.isArray(e.list)?e.list.map(e=>({id:e.id,name:e.name})):[]}catch(e){V.value=[]}})),(e,l)=>(r(),s(n(_),{"model-value":a.visible,title:"发放优惠券",width:"400px","close-on-click-modal":!1,"onUpdate:modelValue":l[1]||(l[1]=e=>w("update:visible",e)),onClosed:D},{footer:d(()=>[u(n(g),{onClick:A},{default:d(()=>[...l[2]||(l[2]=[v("取消",-1)])]),_:1}),u(n(g),{type:"primary",loading:E.value,onClick:z},{default:d(()=>[...l[3]||(l[3]=[v(" 确定 ",-1)])]),_:1},8,["loading"])]),default:d(()=>[u(n(y),{ref_key:"formRef",ref:k,model:C,rules:$,"label-width":"80px"},{default:d(()=>[u(n(b),{label:"优惠券",prop:"couponId"},{default:d(()=>[u(n(j),{modelValue:C.couponId,"onUpdate:modelValue":l[0]||(l[0]=e=>C.couponId=e),placeholder:"请选择优惠券",filterable:"",style:{width:"100%"}},{default:d(()=>[(r(!0),p(m,null,c(V.value,e=>(r(),s(n(h),{key:e.id,label:`${e.name}(ID: ${e.id})`,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{x as _};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as i}from"./add-item-card-dialog.vue_vue_type_script_setup_true_lang-r-95eO1C.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./itemCards-BHUYJ5ez.js";import"./index-zIv9y_XZ.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-DZO7eApA.js";import"./index-MOpuiu9Z.js";import"./index-nZra831X.js";import"./use-form-item-ByasanrX.js";import"./_initCloneObject-7oWMW-Ot.js";import"./index-CHZ9Ls9_.js";import"./index-B99ckkYy.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-B4jq9Ja2.js";import"./index-qSQlj0RO.js";import"./index-CuWUnlSZ.js";import"./index-r0EsCkBw.js";import"./index-DfWQjCuY.js";import"./index-CtUPMuT5.js";import"./index-DeCbFeva.js";import"./use-dialog-yhiLZsn9.js";import"./index-DvlZWusB.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as i}from"./add-item-card-dialog.vue_vue_type_script_setup_true_lang-S5Y5BQPs.js";import"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./itemCards-QB81Evem.js";import"./index-DhBIlDpg.js";import"./use-form-common-props-U6f9D53_.js";import"./index-DH_vX4BK.js";import"./index-K2zzami3.js";import"./index-BW22oPP6.js";import"./use-form-item-BsnpemL_.js";import"./_initCloneObject-DfOnBHdn.js";import"./index-pVAXVlCV.js";import"./index-C6fEXl-e.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";import"./index-BiRLqYIK.js";import"./index-6-f3xsy2.js";import"./index-BlgPu7T-.js";import"./index-CWBrZtwn.js";import"./index-MV2EqMi7.js";import"./index-DO8sDDAh.js";import"./index-CgoUqbdT.js";import"./use-dialog-BDM4AbF-.js";import"./index-DaNWXg3-.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
@ -0,0 +1 @@
|
||||
var e=(e,a,l)=>new Promise((t,i)=>{var r=e=>{try{s(l.next(e))}catch(a){i(a)}},o=e=>{try{s(l.throw(e))}catch(a){i(a)}},s=e=>e.done?t(e.value):Promise.resolve(e.value).then(r,o);s((l=l.apply(e,a)).next())});import{d as a,a as l,r as t,w as i,o as r,y as o,f as s,z as d,p as u,u as n,e as m,F as p,G as c,l as v}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{i as y}from"./itemCards-QB81Evem.js";import{E as f,a as j}from"./index-DhBIlDpg.js";import{E as b,a as g}from"./index-pVAXVlCV.js";import{E as h}from"./index-BiRLqYIK.js";import{E as _}from"./index-CWBrZtwn.js";import{E as x}from"./index-DO8sDDAh.js";const q=a({__name:"add-item-card-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(a,{emit:q}){const I=a,V=q,w=l(),E=l(!1),k=l([]),C=t({cardId:null,quantity:1});i(()=>I.visible,e=>{});const z={cardId:[{required:!0,message:"请选择道具卡",trigger:"change"}],quantity:[{required:!0,message:"请输入数量",trigger:"change"}]},U=()=>e(this,null,function*(){var e;try{yield null==(e=w.value)?void 0:e.validate(),E.value=!0,V("submit",{card_id:C.cardId,quantity:C.quantity})}catch(a){}finally{E.value=!1}}),$=()=>{V("update:visible",!1)},A=()=>{var e;C.cardId=null,C.quantity=1,null==(e=w.value)||e.clearValidate()};return r(()=>e(this,null,function*(){try{const e=yield y.getList({page:1,page_size:100});k.value=Array.isArray(e.list)?e.list.map(e=>({id:e.id,name:e.name})):[]}catch(e){k.value=[]}})),(e,l)=>(s(),o(n(x),{"model-value":a.visible,title:"分配道具卡",width:"420px","close-on-click-modal":!1,"onUpdate:modelValue":l[2]||(l[2]=e=>V("update:visible",e)),onClosed:A},{footer:d(()=>[u(n(_),{onClick:$},{default:d(()=>[...l[3]||(l[3]=[v("取消",-1)])]),_:1}),u(n(_),{type:"primary",loading:E.value,onClick:U},{default:d(()=>[...l[4]||(l[4]=[v("确定",-1)])]),_:1},8,["loading"])]),default:d(()=>[u(n(f),{ref_key:"formRef",ref:w,model:C,rules:z,"label-width":"80px"},{default:d(()=>[u(n(j),{label:"道具卡",prop:"cardId"},{default:d(()=>[u(n(b),{modelValue:C.cardId,"onUpdate:modelValue":l[0]||(l[0]=e=>C.cardId=e),placeholder:"请选择道具卡",filterable:"",style:{width:"100%"}},{default:d(()=>[(s(!0),m(p,null,c(k.value,e=>(s(),o(n(g),{key:e.id,label:`${e.name}(ID: ${e.id})`,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),u(n(j),{label:"数量",prop:"quantity"},{default:d(()=>[u(n(h),{modelValue:C.quantity,"onUpdate:modelValue":l[1]||(l[1]=e=>C.quantity=e),min:1,max:100},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{q as _};
|
||||
@ -1 +0,0 @@
|
||||
var e=(e,a,l)=>new Promise((t,i)=>{var r=e=>{try{s(l.next(e))}catch(a){i(a)}},o=e=>{try{s(l.throw(e))}catch(a){i(a)}},s=e=>e.done?t(e.value):Promise.resolve(e.value).then(r,o);s((l=l.apply(e,a)).next())});import{d as a,a as l,r as t,w as i,o as r,y as o,f as s,z as d,p as u,u as n,e as m,F as p,G as c,l as v}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{i as y}from"./itemCards-BHUYJ5ez.js";import{E as f,a as b}from"./index-zIv9y_XZ.js";import{E as g,a as j}from"./index-CHZ9Ls9_.js";import{E as h}from"./index-B4jq9Ja2.js";import{E as _}from"./index-r0EsCkBw.js";import{E as x}from"./index-CtUPMuT5.js";const q=a({__name:"add-item-card-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(a,{emit:q}){const I=a,V=q,w=l(),k=l(!1),C=l([]),E=t({cardId:null,quantity:1});i(()=>I.visible,e=>{});const A={cardId:[{required:!0,message:"请选择道具卡",trigger:"change"}],quantity:[{required:!0,message:"请输入数量",trigger:"change"}]},U=()=>e(this,null,function*(){var e;try{yield null==(e=w.value)?void 0:e.validate(),k.value=!0,V("submit",{card_id:E.cardId,quantity:E.quantity})}catch(a){}finally{k.value=!1}}),$=()=>{V("update:visible",!1)},z=()=>{var e;E.cardId=null,E.quantity=1,null==(e=w.value)||e.clearValidate()};return r(()=>e(this,null,function*(){try{const e=yield y.getList({page:1,page_size:100});C.value=Array.isArray(e.list)?e.list.map(e=>({id:e.id,name:e.name})):[]}catch(e){C.value=[]}})),(e,l)=>(s(),o(n(x),{"model-value":a.visible,title:"分配道具卡",width:"420px","close-on-click-modal":!1,"onUpdate:modelValue":l[2]||(l[2]=e=>V("update:visible",e)),onClosed:z},{footer:d(()=>[u(n(_),{onClick:$},{default:d(()=>[...l[3]||(l[3]=[v("取消",-1)])]),_:1}),u(n(_),{type:"primary",loading:k.value,onClick:U},{default:d(()=>[...l[4]||(l[4]=[v("确定",-1)])]),_:1},8,["loading"])]),default:d(()=>[u(n(f),{ref_key:"formRef",ref:w,model:E,rules:A,"label-width":"80px"},{default:d(()=>[u(n(b),{label:"道具卡",prop:"cardId"},{default:d(()=>[u(n(g),{modelValue:E.cardId,"onUpdate:modelValue":l[0]||(l[0]=e=>E.cardId=e),placeholder:"请选择道具卡",filterable:"",style:{width:"100%"}},{default:d(()=>[(s(!0),m(p,null,c(C.value,e=>(s(),o(n(j),{key:e.id,label:`${e.name}(ID: ${e.id})`,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),u(n(b),{label:"数量",prop:"quantity"},{default:d(()=>[u(n(h),{modelValue:E.quantity,"onUpdate:modelValue":l[1]||(l[1]=e=>E.quantity=e),min:1,max:100},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{q as _};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as i}from"./add-points-dialog.vue_vue_type_script_setup_true_lang-B99Uz4mM.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index-zIv9y_XZ.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-DZO7eApA.js";import"./index-MOpuiu9Z.js";import"./index-nZra831X.js";import"./use-form-item-ByasanrX.js";import"./_initCloneObject-7oWMW-Ot.js";import"./index-B4jq9Ja2.js";import"./index-qSQlj0RO.js";import"./index-CuWUnlSZ.js";import"./index-CHZ9Ls9_.js";import"./index-B99ckkYy.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-r0EsCkBw.js";import"./index-DfWQjCuY.js";import"./index-CtUPMuT5.js";import"./index-DeCbFeva.js";import"./use-dialog-yhiLZsn9.js";import"./index-DvlZWusB.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as i}from"./add-points-dialog.vue_vue_type_script_setup_true_lang-CDG3qGoH.js";import"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index-DhBIlDpg.js";import"./use-form-common-props-U6f9D53_.js";import"./index-DH_vX4BK.js";import"./index-K2zzami3.js";import"./index-BW22oPP6.js";import"./use-form-item-BsnpemL_.js";import"./_initCloneObject-DfOnBHdn.js";import"./index-BiRLqYIK.js";import"./index-6-f3xsy2.js";import"./index-BlgPu7T-.js";import"./index-pVAXVlCV.js";import"./index-C6fEXl-e.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";import"./index-CWBrZtwn.js";import"./index-MV2EqMi7.js";import"./index-DO8sDDAh.js";import"./index-CgoUqbdT.js";import"./use-dialog-BDM4AbF-.js";import"./index-DaNWXg3-.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
@ -1 +0,0 @@
|
||||
import{d as e,a,r as l,w as i,y as r,f as o,z as t,p as d,u as s,l as n}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{E as m,a as p}from"./index-zIv9y_XZ.js";import{E as u}from"./index-B4jq9Ja2.js";import{E as v,a as c}from"./index-CHZ9Ls9_.js";import{E as f}from"./index-qSQlj0RO.js";import{E as b}from"./index-r0EsCkBw.js";import{E as k}from"./index-CtUPMuT5.js";const _=e({__name:"add-points-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(e,{emit:_}){const j=e,y=_,g=a(),h=a(!1),x=l({points:null,kind:"admin_add",remark:""});i(()=>j.visible,e=>{});const V={points:[{required:!0,message:"请输入积分数量",trigger:"blur"}],kind:[{required:!0,message:"请选择积分类型",trigger:"change"}]},w=()=>{return e=this,a=null,l=function*(){var e;try{yield null==(e=g.value)?void 0:e.validate(),h.value=!0,y("submit",{points:x.points,kind:x.kind,remark:x.remark})}catch(a){}finally{h.value=!1}},new Promise((i,r)=>{var o=e=>{try{d(l.next(e))}catch(a){r(a)}},t=e=>{try{d(l.throw(e))}catch(a){r(a)}},d=e=>e.done?i(e.value):Promise.resolve(e.value).then(o,t);d((l=l.apply(e,a)).next())});var e,a,l},E=()=>{y("update:visible",!1)},C=()=>{var e;x.points=null,x.kind="admin_add",x.remark="",null==(e=g.value)||e.clearValidate()};return(a,l)=>(o(),r(s(k),{"model-value":e.visible,title:"增加积分",width:"400px","close-on-click-modal":!1,"onUpdate:modelValue":l[3]||(l[3]=e=>y("update:visible",e)),onClosed:C},{footer:t(()=>[d(s(b),{onClick:E},{default:t(()=>[...l[4]||(l[4]=[n("取消",-1)])]),_:1}),d(s(b),{type:"primary",loading:h.value,onClick:w},{default:t(()=>[...l[5]||(l[5]=[n(" 确定 ",-1)])]),_:1},8,["loading"])]),default:t(()=>[d(s(m),{ref_key:"formRef",ref:g,model:x,rules:V,"label-width":"80px"},{default:t(()=>[d(s(p),{label:"积分数量",prop:"points"},{default:t(()=>[d(s(u),{modelValue:x.points,"onUpdate:modelValue":l[0]||(l[0]=e=>x.points=e),placeholder:"请输入积分数量",min:1,precision:0,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),d(s(p),{label:"积分类型",prop:"kind"},{default:t(()=>[d(s(v),{modelValue:x.kind,"onUpdate:modelValue":l[1]||(l[1]=e=>x.kind=e),placeholder:"请选择积分类型",style:{width:"100%"}},{default:t(()=>[d(s(c),{label:"管理员增加",value:"admin_add"}),d(s(c),{label:"活动奖励",value:"activity_reward"}),d(s(c),{label:"签到奖励",value:"sign_reward"}),d(s(c),{label:"消费返还",value:"consume_return"})]),_:1},8,["modelValue"])]),_:1}),d(s(p),{label:"备注",prop:"remark"},{default:t(()=>[d(s(f),{modelValue:x.remark,"onUpdate:modelValue":l[2]||(l[2]=e=>x.remark=e),type:"textarea",placeholder:"请输入备注",rows:3},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{_};
|
||||
@ -0,0 +1 @@
|
||||
import{d as e,a,r as l,w as i,y as o,f as r,z as t,p as s,u as d,l as n}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{E as m,a as p}from"./index-DhBIlDpg.js";import{E as u}from"./index-BiRLqYIK.js";import{E as v,a as c}from"./index-pVAXVlCV.js";import{E as f}from"./index-6-f3xsy2.js";import{E as b}from"./index-CWBrZtwn.js";import{E as k}from"./index-DO8sDDAh.js";const j=e({__name:"add-points-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(e,{emit:j}){const _=e,y=j,h=a(),g=a(!1),x=l({points:null,kind:"admin_add",remark:""});i(()=>_.visible,e=>{});const V={points:[{required:!0,message:"请输入积分数量",trigger:"blur"}],kind:[{required:!0,message:"请选择积分类型",trigger:"change"}]},w=()=>{return e=this,a=null,l=function*(){var e;try{yield null==(e=h.value)?void 0:e.validate(),g.value=!0,y("submit",{points:x.points,kind:x.kind,remark:x.remark})}catch(a){}finally{g.value=!1}},new Promise((i,o)=>{var r=e=>{try{s(l.next(e))}catch(a){o(a)}},t=e=>{try{s(l.throw(e))}catch(a){o(a)}},s=e=>e.done?i(e.value):Promise.resolve(e.value).then(r,t);s((l=l.apply(e,a)).next())});var e,a,l},E=()=>{y("update:visible",!1)},U=()=>{var e;x.points=null,x.kind="admin_add",x.remark="",null==(e=h.value)||e.clearValidate()};return(a,l)=>(r(),o(d(k),{"model-value":e.visible,title:"增加积分",width:"400px","close-on-click-modal":!1,"onUpdate:modelValue":l[3]||(l[3]=e=>y("update:visible",e)),onClosed:U},{footer:t(()=>[s(d(b),{onClick:E},{default:t(()=>[...l[4]||(l[4]=[n("取消",-1)])]),_:1}),s(d(b),{type:"primary",loading:g.value,onClick:w},{default:t(()=>[...l[5]||(l[5]=[n(" 确定 ",-1)])]),_:1},8,["loading"])]),default:t(()=>[s(d(m),{ref_key:"formRef",ref:h,model:x,rules:V,"label-width":"80px"},{default:t(()=>[s(d(p),{label:"积分数量",prop:"points"},{default:t(()=>[s(d(u),{modelValue:x.points,"onUpdate:modelValue":l[0]||(l[0]=e=>x.points=e),placeholder:"请输入积分数量",min:1,precision:0,style:{width:"100%"}},null,8,["modelValue"])]),_:1}),s(d(p),{label:"积分类型",prop:"kind"},{default:t(()=>[s(d(v),{modelValue:x.kind,"onUpdate:modelValue":l[1]||(l[1]=e=>x.kind=e),placeholder:"请选择积分类型",style:{width:"100%"}},{default:t(()=>[s(d(c),{label:"管理员增加",value:"admin_add"}),s(d(c),{label:"活动奖励",value:"activity_reward"}),s(d(c),{label:"签到奖励",value:"sign_reward"}),s(d(c),{label:"消费返还",value:"consume_return"})]),_:1},8,["modelValue"])]),_:1}),s(d(p),{label:"备注",prop:"remark"},{default:t(()=>[s(d(f),{modelValue:x.remark,"onUpdate:modelValue":l[2]||(l[2]=e=>x.remark=e),type:"textarea",placeholder:"请输入备注",rows:3},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{j as _};
|
||||
@ -1 +1 @@
|
||||
import{b4 as i}from"./index-DBHnxsy6.js";function s(s){return i.post({url:"admin/activities",params:s})}function t(s,t){return i.put({url:`admin/activities/${s}`,params:t})}function r(s){return i.del({url:`admin/activities/${s}`})}function a(s){return i.get({url:`admin/activities/${s}`})}function n(s,t=1,r=20){return i.get({url:`admin/activities/${s}/issues`,params:{page:t,page_size:r}})}function e(s,t){return i.post({url:`admin/activities/${s}/issues`,params:t})}function u(s,t,r){return i.put({url:`admin/activities/${s}/issues/${t}`,params:r})}function c(s,t){return i.del({url:`admin/activities/${s}/issues/${t}`})}function m(s,t){return i.get({url:`admin/activities/${s}/issues/${t}/rewards`})}function o(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/rewards`,params:{rewards:r}})}function d(s,t,r,a){return i.put({url:`admin/activities/${s}/issues/${t}/rewards/${r}`,params:a})}function $(s,t,r){return i.del({url:`admin/activities/${s}/issues/${t}/rewards/${r}`})}function l(){return i.get({url:"admin/activity_categories"})}function p(s,t){return i.post({url:`admin/activities/${s}/issues/${t}/commit_random`})}function f(s,t){return i.get({url:`admin/activities/${s}/issues/${t}/commit_random`,showErrorMessage:!1})}function v(s,t){return i.get({url:`admin/activities/${s}/issues/${t}/commit_random/history`})}function g(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/simulate_draw`,params:r,timeout:6e4})}function w(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/batch_draw`,params:r,timeout:6e4})}function _(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/verify_draw`,params:r})}function h(s){return i.get({url:`admin/draw_receipts/${s}`})}function b(s){return i.get({url:`admin/draw_receipts/log/${s}`})}function y(s){return i.get({url:"admin/users",params:s})}export{l as a,t as b,e as c,c as d,s as e,r as f,a as g,o as h,f as i,v as j,p as k,n as l,d as m,m as n,$ as o,y as p,w as q,h as r,g as s,b as t,u,_ as v};
|
||||
import{b9 as i}from"./index-CZ0Lvzl5.js";function s(s){return i.post({url:"admin/activities",params:s})}function t(s,t){return i.put({url:`admin/activities/${s}`,params:t})}function r(s){return i.del({url:`admin/activities/${s}`})}function a(s){return i.get({url:`admin/activities/${s}`})}function n(s,t=1,r=20){return i.get({url:`admin/activities/${s}/issues`,params:{page:t,page_size:r}})}function e(s,t){return i.post({url:`admin/activities/${s}/issues`,params:t})}function u(s,t,r){return i.put({url:`admin/activities/${s}/issues/${t}`,params:r})}function c(s,t){return i.del({url:`admin/activities/${s}/issues/${t}`})}function m(s,t){return i.get({url:`admin/activities/${s}/issues/${t}/rewards`})}function o(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/rewards`,params:{rewards:r}})}function d(s,t,r,a){return i.put({url:`admin/activities/${s}/issues/${t}/rewards/${r}`,params:a})}function $(s,t,r){return i.del({url:`admin/activities/${s}/issues/${t}/rewards/${r}`})}function l(){return i.get({url:"admin/activity_categories"})}function p(s,t){return i.post({url:`admin/activities/${s}/issues/${t}/commit_random`})}function f(s,t){return i.get({url:`admin/activities/${s}/issues/${t}/commit_random`,showErrorMessage:!1})}function v(s,t){return i.get({url:`admin/activities/${s}/issues/${t}/commit_random/history`})}function g(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/simulate_draw`,params:r,timeout:6e4})}function w(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/batch_draw`,params:r,timeout:6e4})}function _(s,t,r){return i.post({url:`admin/activities/${s}/issues/${t}/verify_draw`,params:r})}function h(s){return i.get({url:`admin/draw_receipts/${s}`})}function b(s){return i.get({url:`admin/draw_receipts/log/${s}`})}function y(s){return i.get({url:"admin/users",params:s})}export{l as a,t as b,e as c,c as d,s as e,r as f,a as g,o as h,f as i,v as j,p as k,n as l,d as m,m as n,$ as o,y as p,w as q,h as r,g as s,b as t,u,_ as v};
|
||||
@ -0,0 +1 @@
|
||||
import{_ as i}from"./assign-title-dialog.vue_vue_type_script_setup_true_lang-lCpMfr54.js";import"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./titles-BnzYQ5A4.js";import"./index-DhBIlDpg.js";import"./use-form-common-props-U6f9D53_.js";import"./index-DH_vX4BK.js";import"./index-K2zzami3.js";import"./index-BW22oPP6.js";import"./use-form-item-BsnpemL_.js";import"./_initCloneObject-DfOnBHdn.js";import"./index-pVAXVlCV.js";import"./index-C6fEXl-e.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";import"./index-R-jt7LR_.js";import"./index-CWBrZtwn.js";import"./index-MV2EqMi7.js";import"./index-6-f3xsy2.js";import"./index-BlgPu7T-.js";import"./index-DO8sDDAh.js";import"./index-CgoUqbdT.js";import"./use-dialog-BDM4AbF-.js";import"./index-DaNWXg3-.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as i}from"./assign-title-dialog.vue_vue_type_script_setup_true_lang-ChRt4Uun.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./titles-Bs2uXvDP.js";import"./index-zIv9y_XZ.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-DZO7eApA.js";import"./index-MOpuiu9Z.js";import"./index-nZra831X.js";import"./use-form-item-ByasanrX.js";import"./_initCloneObject-7oWMW-Ot.js";import"./index-CHZ9Ls9_.js";import"./index-B99ckkYy.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-CS6jHv1e.js";import"./index-r0EsCkBw.js";import"./index-DfWQjCuY.js";import"./index-qSQlj0RO.js";import"./index-CuWUnlSZ.js";import"./index-CtUPMuT5.js";import"./index-DeCbFeva.js";import"./use-dialog-yhiLZsn9.js";import"./index-DvlZWusB.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
@ -1 +1 @@
|
||||
var e=(e,l,a)=>new Promise((t,i)=>{var r=e=>{try{s(a.next(e))}catch(l){i(l)}},o=e=>{try{s(a.throw(e))}catch(l){i(l)}},s=e=>e.done?t(e.value):Promise.resolve(e.value).then(r,o);s((a=a.apply(e,l)).next())});import{d as l,a,r as t,o as i,y as r,f as o,z as s,p as d,u as m,e as p,F as u,G as n,l as f}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{titlesApi as v}from"./titles-Bs2uXvDP.js";import{E as c,a as x}from"./index-zIv9y_XZ.js";import{E as y,a as j}from"./index-CHZ9Ls9_.js";import{E as b}from"./index-CS6jHv1e.js";import{E as h}from"./index-qSQlj0RO.js";import{E as _}from"./index-r0EsCkBw.js";import{E as g}from"./index-CtUPMuT5.js";const k=l({__name:"assign-title-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(l,{emit:k}){const V=k,A=a(),I=a(!1),w=a([]),E=t({titleId:null,expiresAt:"",remark:""}),C={titleId:[{required:!0,message:"请选择称号",trigger:"change"}]},U=()=>e(this,null,function*(){var e;try{yield null==(e=A.value)?void 0:e.validate(),I.value=!0;const l={title_id:E.titleId};E.expiresAt&&(l.expires_at=E.expiresAt),E.remark&&(l.remark=E.remark),V("submit",l)}catch(l){}finally{I.value=!1}}),Y=()=>{V("update:visible",!1)},D=()=>{var e;E.titleId=null,E.expiresAt="",E.remark="",null==(e=A.value)||e.clearValidate()};return i(()=>e(this,null,function*(){try{const e=yield v.getList({page:1,page_size:100});w.value=Array.isArray(e.list)?e.list.map(e=>({id:e.id,name:e.name})):[]}catch(e){w.value=[]}})),(e,a)=>(o(),r(m(g),{"model-value":l.visible,title:"分配称号",width:"460px","close-on-click-modal":!1,"onUpdate:modelValue":a[3]||(a[3]=e=>V("update:visible",e)),onClosed:D},{footer:s(()=>[d(m(_),{onClick:Y},{default:s(()=>[...a[4]||(a[4]=[f("取消",-1)])]),_:1}),d(m(_),{type:"primary",loading:I.value,onClick:U},{default:s(()=>[...a[5]||(a[5]=[f("确定",-1)])]),_:1},8,["loading"])]),default:s(()=>[d(m(c),{ref_key:"formRef",ref:A,model:E,rules:C,"label-width":"90px"},{default:s(()=>[d(m(x),{label:"称号",prop:"titleId"},{default:s(()=>[d(m(y),{modelValue:E.titleId,"onUpdate:modelValue":a[0]||(a[0]=e=>E.titleId=e),placeholder:"请选择称号",filterable:"",style:{width:"100%"}},{default:s(()=>[(o(!0),p(u,null,n(w.value,e=>(o(),r(m(j),{key:e.id,label:`${e.name}(ID: ${e.id})`,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),d(m(x),{label:"过期时间",prop:"expiresAt"},{default:s(()=>[d(m(b),{modelValue:E.expiresAt,"onUpdate:modelValue":a[1]||(a[1]=e=>E.expiresAt=e),type:"datetime","value-format":"YYYY-MM-DDTHH:mm:ssZ",placeholder:"可选,默认为永久",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),d(m(x),{label:"备注",prop:"remark"},{default:s(()=>[d(m(h),{modelValue:E.remark,"onUpdate:modelValue":a[2]||(a[2]=e=>E.remark=e),placeholder:"可选备注",maxlength:"100"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{k as _};
|
||||
var e=(e,l,a)=>new Promise((t,i)=>{var r=e=>{try{s(a.next(e))}catch(l){i(l)}},o=e=>{try{s(a.throw(e))}catch(l){i(l)}},s=e=>e.done?t(e.value):Promise.resolve(e.value).then(r,o);s((a=a.apply(e,l)).next())});import{d as l,a,r as t,o as i,y as r,f as o,z as s,p as d,u as m,e as p,F as u,G as n,l as c}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{titlesApi as f}from"./titles-BnzYQ5A4.js";import{E as v,a as x}from"./index-DhBIlDpg.js";import{E as y,a as h}from"./index-pVAXVlCV.js";import{E as j}from"./index-R-jt7LR_.js";import{E as b}from"./index-6-f3xsy2.js";import{E as _}from"./index-CWBrZtwn.js";import{E as g}from"./index-DO8sDDAh.js";const k=l({__name:"assign-title-dialog",props:{visible:{type:Boolean}},emits:["update:visible","submit"],setup(l,{emit:k}){const V=k,A=a(),I=a(!1),w=a([]),E=t({titleId:null,expiresAt:"",remark:""}),D={titleId:[{required:!0,message:"请选择称号",trigger:"change"}]},U=()=>e(this,null,function*(){var e;try{yield null==(e=A.value)?void 0:e.validate(),I.value=!0;const l={title_id:E.titleId};E.expiresAt&&(l.expires_at=E.expiresAt),E.remark&&(l.remark=E.remark),V("submit",l)}catch(l){}finally{I.value=!1}}),Y=()=>{V("update:visible",!1)},C=()=>{var e;E.titleId=null,E.expiresAt="",E.remark="",null==(e=A.value)||e.clearValidate()};return i(()=>e(this,null,function*(){try{const e=yield f.getList({page:1,page_size:100});w.value=Array.isArray(e.list)?e.list.map(e=>({id:e.id,name:e.name})):[]}catch(e){w.value=[]}})),(e,a)=>(o(),r(m(g),{"model-value":l.visible,title:"分配称号",width:"460px","close-on-click-modal":!1,"onUpdate:modelValue":a[3]||(a[3]=e=>V("update:visible",e)),onClosed:C},{footer:s(()=>[d(m(_),{onClick:Y},{default:s(()=>[...a[4]||(a[4]=[c("取消",-1)])]),_:1}),d(m(_),{type:"primary",loading:I.value,onClick:U},{default:s(()=>[...a[5]||(a[5]=[c("确定",-1)])]),_:1},8,["loading"])]),default:s(()=>[d(m(v),{ref_key:"formRef",ref:A,model:E,rules:D,"label-width":"90px"},{default:s(()=>[d(m(x),{label:"称号",prop:"titleId"},{default:s(()=>[d(m(y),{modelValue:E.titleId,"onUpdate:modelValue":a[0]||(a[0]=e=>E.titleId=e),placeholder:"请选择称号",filterable:"",style:{width:"100%"}},{default:s(()=>[(o(!0),p(u,null,n(w.value,e=>(o(),r(m(h),{key:e.id,label:`${e.name}(ID: ${e.id})`,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),d(m(x),{label:"过期时间",prop:"expiresAt"},{default:s(()=>[d(m(j),{modelValue:E.expiresAt,"onUpdate:modelValue":a[1]||(a[1]=e=>E.expiresAt=e),type:"datetime","value-format":"YYYY-MM-DDTHH:mm:ssZ",placeholder:"可选,默认为永久",style:{width:"100%"}},null,8,["modelValue"])]),_:1}),d(m(x),{label:"备注",prop:"remark"},{default:s(()=>[d(m(b),{modelValue:E.remark,"onUpdate:modelValue":a[2]||(a[2]=e=>E.remark=e),placeholder:"可选备注",maxlength:"100"},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["model-value"]))}});export{k as _};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as i}from"./batch-draw-dialog.vue_vue_type_script_setup_true_lang-D6SWKrJK.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css */import"./el-pagination-CkwA8__y.js";import"./index-CHZ9Ls9_.js";import"./index-B99ckkYy.js";import"./index-nZra831X.js";import"./index-MOpuiu9Z.js";import"./use-form-item-ByasanrX.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./index-DZO7eApA.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-qSQlj0RO.js";import"./index-DfWQjCuY.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-table-column-DWU1JSNJ.js";import"./_initCloneObject-7oWMW-Ot.js";import"./isArrayLikeObject-BJDhNHaT.js";import"./raf-CXqF1NB1.js";import"./index-DKaQAdbW.js";/* empty css */import"./el-tooltip-l0sNRNKZ.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-step-DZviJjCE.js";import"./index-y_oew012.js";/* empty css */import"./adminActivities-C7lwI2HP.js";import"./index-zIv9y_XZ.js";import"./index-BIIDnOvF.js";import"./index-B5f0OwDI.js";import"./index-r0EsCkBw.js";import"./index-CtUPMuT5.js";import"./index-DeCbFeva.js";import"./use-dialog-yhiLZsn9.js";import"./index-DvlZWusB.js";import"./refs-Cw5r5QN8.js";export{i as default};
|
||||
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/batch-draw-dialog-wyt1sOed.js.gz
Normal file
BIN
build/resources/admin/assets/batch-draw-dialog-wyt1sOed.js.gz
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1 +0,0 @@
|
||||
import{_ as t}from"./card-list.vue_vue_type_script_setup_true_lang-CibUUuFD.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-DUyHB5jc.js";/* empty css */import"./dashboard-efoygTEr.js";import"./index-B5f0OwDI.js";import"./index-BIIDnOvF.js";export{t as default};
|
||||
1
build/resources/admin/assets/card-list-DxDGPL3Q.js
Normal file
1
build/resources/admin/assets/card-list-DxDGPL3Q.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as e}from"./card-list.vue_vue_type_script_setup_true_lang-qY_uPixj.js";import"./index-CZ0Lvzl5.js";/* empty css *//* empty css */import"./index.vue_vue_type_script_setup_true_lang-DkYjV9Ul.js";/* empty css */import"./dashboard-B-GY2jng.js";import"./index-DR7AB6IM.js";import"./index-D11sKPUb.js";export{e as default};
|
||||
@ -1 +1 @@
|
||||
import{d as e,c as a,b1 as t,aC as s,b2 as u,w as r,aH as n,e as l,f as i,m as o,i as d,n as c,r as m,y as v,z as p,F as g,G as f,h as x,p as h,O as b}from"./index-DBHnxsy6.js";/* empty css *//* empty css */import{_}from"./index.vue_vue_type_script_setup_true_lang-DUyHB5jc.js";/* empty css */import{f as y}from"./dashboard-efoygTEr.js";import{E as j}from"./index-B5f0OwDI.js";import{E as S}from"./index-BIIDnOvF.js";const w="easeOutExpo",C=e({__name:"index",props:{target:{default:0},duration:{default:2e3},autoStart:{type:Boolean,default:!0},decimals:{default:0},decimal:{default:"."},separator:{default:""},prefix:{default:""},suffix:{default:""},easing:{default:w},disabled:{type:Boolean,default:!1}},emits:["started","finished","paused","reset"],setup(e,{expose:m,emit:v}){const p=Number.EPSILON,g=e,f=v,x=(e,a,t)=>Number.isFinite(e)?e:t,h=(e,a,t)=>Math.max(a,Math.min(e,t)),b=a(()=>x(g.target,0,0)),_=a(()=>h(x(g.duration,0,2e3),100,6e4)),y=a(()=>h(x(g.decimals,0,0),0,10)),j=a(()=>{const e=g.easing;return e in t?e:w}),S=s(0),C=s(b.value),F=s(!1),N=s(!1),V=s(0),M=u(S,{duration:_,transition:a(()=>t[j.value]),onStarted:()=>{F.value=!0,N.value=!1,f("started",C.value)},onFinished:()=>{F.value=!1,N.value=!1,f("finished",C.value)}}),P=a(()=>{const e=N.value?V.value:M.value;if(!Number.isFinite(e))return`${g.prefix}0${g.suffix}`;const a=((e,a,t,s)=>{let u=a>0?e.toFixed(a):Math.floor(e).toString();if("."!==t&&u.includes(".")&&(u=u.replace(".",t)),s){const e=u.split(t);e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,s),u=e.join(t)}return u})(e,y.value,g.decimal,g.separator);return`${g.prefix}${a}${g.suffix}`}),$=()=>{N.value=!1,V.value=0},E=e=>{if(g.disabled)return;const a=void 0!==e?e:C.value;Number.isFinite(a)&&(C.value=a,(e=>{const a=N.value?V.value:M.value;return Math.abs(a-e)<p})(a)||(N.value&&(S.value=V.value,$()),c(()=>{S.value=a})))},O=()=>{(F.value||N.value)&&(S.value=0,$(),f("paused",0))};return r(b,e=>{g.autoStart&&!g.disabled?E(e):C.value=e},{immediate:g.autoStart&&!g.disabled}),r(()=>g.disabled,e=>{e&&F.value&&O()}),n(()=>{F.value&&O()}),m({start:E,pause:()=>{F.value&&!N.value&&(N.value=!0,V.value=M.value,S.value=V.value,f("paused",V.value))},reset:(e=0)=>{const a=x(e,0,0);S.value=a,C.value=a,$(),f("reset")},stop:O,setTarget:e=>{Number.isFinite(e)&&(C.value=e,!F.value&&!g.autoStart||g.disabled||E(e))},get isRunning(){return F.value},get isPaused(){return N.value},get currentValue(){return N.value?V.value:M.value},get targetValue(){return C.value},get progress(){const e=N.value?V.value:M.value,a=C.value;return 0===a?0===e?1:0:Math.abs(e/a)}}),(e,a)=>(i(),l("span",{class:d(["text-g-900 tabular-nums",F.value?"transition-opacity duration-300 ease-in-out":""])},o(P.value),3))}}),F={class:"art-card relative flex flex-col justify-center h-35 px-5 mb-5 max-sm:mb-4"},N={class:"text-g-700 text-sm"},V={class:"flex-c mt-1"},M={class:"absolute top-0 bottom-0 right-5 m-auto size-12.5 rounded-xl flex-cc bg-theme/10"},P=e({__name:"card-list",props:{range:{}},setup(e){const a=e,t=m([{des:"道具卡销量",icon:"ri:shopping-bag-3-line",startVal:0,duration:1e3,num:0,change:"+0%"},{des:"活动抽奖次数",icon:"ri:fire-line",startVal:0,duration:1e3,num:0,change:"+0%"},{des:"新用户注册数",icon:"ri:user-add-line",startVal:0,duration:1e3,num:0,change:"+0%"},{des:"用户总积分",icon:"ri:coin-line",startVal:0,duration:1e3,num:0,change:"+0%"}]);return r(()=>a.range,()=>{return e=this,s=null,u=function*(){try{const e=yield y(a.range);t[0].num=e.itemCardSales,t[0].change=e.itemCardChange,t[1].num=e.drawCount,t[1].change=e.drawChange,t[2].num=e.newUsers,t[2].change=e.newUserChange,t[3].num=e.totalPoints,t[3].change=e.pointsChange}catch(e){b.error("获取卡片数据失败")}},new Promise((a,t)=>{var r=e=>{try{l(u.next(e))}catch(a){t(a)}},n=e=>{try{l(u.throw(e))}catch(a){t(a)}},l=e=>e.done?a(e.value):Promise.resolve(e.value).then(r,n);l((u=u.apply(e,s)).next())});var e,s,u},{immediate:!0}),(e,a)=>{const s=C,u=_,r=j,n=S;return i(),v(n,{gutter:20,class:"flex"},{default:p(()=>[(i(!0),l(g,null,f(t,(e,t)=>(i(),v(r,{key:t,sm:12,md:6,lg:6},{default:p(()=>[x("div",F,[x("span",N,o(e.des),1),h(s,{class:"text-[26px] font-medium mt-2",target:e.num,duration:1300},null,8,["target"]),x("div",V,[a[0]||(a[0]=x("span",{class:"text-xs text-g-600"},"较上周",-1)),x("span",{class:d(["ml-1 text-xs font-semibold",[-1===e.change.indexOf("+")?"text-danger":"text-success"]])},o(e.change),3)]),x("div",M,[h(u,{icon:e.icon,class:"text-xl text-theme"},null,8,["icon"])])])]),_:2},1024))),128))]),_:1})}}});export{P as _};
|
||||
import{d as e,c as a,b6 as t,aC as s,b7 as u,w as r,aH as n,e as l,f as i,m as o,i as d,n as c,r as v,y as m,z as p,F as g,G as f,h as x,p as h,O as b}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css */import{_}from"./index.vue_vue_type_script_setup_true_lang-DkYjV9Ul.js";/* empty css */import{f as y}from"./dashboard-B-GY2jng.js";import{E as j}from"./index-DR7AB6IM.js";import{E as w}from"./index-D11sKPUb.js";const C="easeOutExpo",S=e({__name:"index",props:{target:{default:0},duration:{default:2e3},autoStart:{type:Boolean,default:!0},decimals:{default:0},decimal:{default:"."},separator:{default:""},prefix:{default:""},suffix:{default:""},easing:{default:C},disabled:{type:Boolean,default:!1}},emits:["started","finished","paused","reset"],setup(e,{expose:v,emit:m}){const p=Number.EPSILON,g=e,f=m,x=(e,a,t)=>Number.isFinite(e)?e:t,h=(e,a,t)=>Math.max(a,Math.min(e,t)),b=a(()=>x(g.target,0,0)),_=a(()=>h(x(g.duration,0,2e3),100,6e4)),y=a(()=>h(x(g.decimals,0,0),0,10)),j=a(()=>{const e=g.easing;return e in t?e:C}),w=s(0),S=s(b.value),F=s(!1),N=s(!1),V=s(0),M=u(w,{duration:_,transition:a(()=>t[j.value]),onStarted:()=>{F.value=!0,N.value=!1,f("started",S.value)},onFinished:()=>{F.value=!1,N.value=!1,f("finished",S.value)}}),P=a(()=>{const e=N.value?V.value:M.value;if(!Number.isFinite(e))return`${g.prefix}0${g.suffix}`;const a=((e,a,t,s)=>{let u=a>0?e.toFixed(a):Math.floor(e).toString();if("."!==t&&u.includes(".")&&(u=u.replace(".",t)),s){const e=u.split(t);e[0]=e[0].replace(/\B(?=(\d{3})+(?!\d))/g,s),u=e.join(t)}return u})(e,y.value,g.decimal,g.separator);return`${g.prefix}${a}${g.suffix}`}),$=()=>{N.value=!1,V.value=0},E=e=>{if(g.disabled)return;const a=void 0!==e?e:S.value;Number.isFinite(a)&&(S.value=a,(e=>{const a=N.value?V.value:M.value;return Math.abs(a-e)<p})(a)||(N.value&&(w.value=V.value,$()),c(()=>{w.value=a})))},O=()=>{(F.value||N.value)&&(w.value=0,$(),f("paused",0))};return r(b,e=>{g.autoStart&&!g.disabled?E(e):S.value=e},{immediate:g.autoStart&&!g.disabled}),r(()=>g.disabled,e=>{e&&F.value&&O()}),n(()=>{F.value&&O()}),v({start:E,pause:()=>{F.value&&!N.value&&(N.value=!0,V.value=M.value,w.value=V.value,f("paused",V.value))},reset:(e=0)=>{const a=x(e,0,0);w.value=a,S.value=a,$(),f("reset")},stop:O,setTarget:e=>{Number.isFinite(e)&&(S.value=e,!F.value&&!g.autoStart||g.disabled||E(e))},get isRunning(){return F.value},get isPaused(){return N.value},get currentValue(){return N.value?V.value:M.value},get targetValue(){return S.value},get progress(){const e=N.value?V.value:M.value,a=S.value;return 0===a?0===e?1:0:Math.abs(e/a)}}),(e,a)=>(i(),l("span",{class:d(["text-g-900 tabular-nums",F.value?"transition-opacity duration-300 ease-in-out":""])},o(P.value),3))}}),F={class:"art-card relative flex flex-col justify-center h-35 px-5 mb-5 max-sm:mb-4"},N={class:"text-g-700 text-sm"},V={class:"flex-c mt-1"},M={class:"absolute top-0 bottom-0 right-5 m-auto size-12.5 rounded-xl flex-cc bg-theme/10"},P=e({__name:"card-list",props:{range:{}},setup(e){const a=e,t=v([{des:"道具卡销量",icon:"ri:shopping-bag-3-line",startVal:0,duration:1e3,num:0,change:"+0%"},{des:"活动抽奖次数",icon:"ri:fire-line",startVal:0,duration:1e3,num:0,change:"+0%"},{des:"新用户注册数",icon:"ri:user-add-line",startVal:0,duration:1e3,num:0,change:"+0%"},{des:"用户总积分",icon:"ri:coin-line",startVal:0,duration:1e3,num:0,change:"+0%"}]);return r(()=>a.range,()=>{return e=this,s=null,u=function*(){try{const e=yield y(a.range);t[0].num=e.itemCardSales,t[0].change=e.itemCardChange,t[1].num=e.drawCount,t[1].change=e.drawChange,t[2].num=e.newUsers,t[2].change=e.newUserChange,t[3].num=e.totalPoints,t[3].change=e.pointsChange}catch(e){b.error("获取卡片数据失败")}},new Promise((a,t)=>{var r=e=>{try{l(u.next(e))}catch(a){t(a)}},n=e=>{try{l(u.throw(e))}catch(a){t(a)}},l=e=>e.done?a(e.value):Promise.resolve(e.value).then(r,n);l((u=u.apply(e,s)).next())});var e,s,u},{immediate:!0}),(e,a)=>{const s=S,u=_,r=j,n=w;return i(),m(n,{gutter:20,class:"flex"},{default:p(()=>[(i(!0),l(g,null,f(t,(e,t)=>(i(),m(r,{key:t,sm:12,md:6,lg:6},{default:p(()=>[x("div",F,[x("span",N,o(e.des),1),h(s,{class:"text-[26px] font-medium mt-2",target:e.num,duration:1300},null,8,["target"]),x("div",V,[a[0]||(a[0]=x("span",{class:"text-xs text-g-600"},"较上周",-1)),x("span",{class:d(["ml-1 text-xs font-semibold",[-1===e.change.indexOf("+")?"text-danger":"text-success"]])},o(e.change),3)]),x("div",M,[h(u,{icon:e.icon,class:"text-xl text-theme"},null,8,["icon"])])])]),_:2},1024))),128))]),_:1})}}});export{P as _};
|
||||
1
build/resources/admin/assets/category-search-CRg9E3ZY.js
Normal file
1
build/resources/admin/assets/category-search-CRg9E3ZY.js
Normal file
@ -0,0 +1 @@
|
||||
var e=Object.defineProperty,a=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,r=(a,t,o)=>t in a?e(a,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[t]=o,s=(e,s)=>{for(var l in s||(s={}))t.call(s,l)&&r(e,l,s[l]);if(a)for(var l of a(s))o.call(s,l)&&r(e,l,s[l]);return e};import{d as l,a as p,w as m,E as i,y as d,f as u,z as n,p as f,u as j,B as c,J as b,l as _,ab as x,b2 as v}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{E as y,a as h}from"./index-DhBIlDpg.js";import{E}from"./index-D11sKPUb.js";import{E as V}from"./index-DR7AB6IM.js";import{E as O}from"./index-6-f3xsy2.js";import{E as g,a as w}from"./index-pVAXVlCV.js";import{E as I}from"./index-BJHoISGQ.js";import{E as J}from"./index-CWBrZtwn.js";import{E as C}from"./index-D9lGuZWz.js";import{_ as k}from"./_plugin-vue_export-helper-BCo6x5W8.js";import"./use-form-common-props-U6f9D53_.js";import"./index-DH_vX4BK.js";import"./index-K2zzami3.js";import"./index-BW22oPP6.js";import"./use-form-item-BsnpemL_.js";import"./_initCloneObject-DfOnBHdn.js";import"./index-C6fEXl-e.js";import"./index-BierC7rd.js";import"./index-BQ-mpgoy.js";import"./token-DWNpOE8r.js";import"./scroll-bFiZhqzI.js";import"./debounce-BWBxuUbE.js";import"./_baseIteratee-iUx42eT-.js";import"./index-ZgXgJNHL.js";import"./vnode-C4RX5enz.js";import"./index-MV2EqMi7.js";const P=k(l({__name:"category-search",props:{modelValue:{}},emits:["update:modelValue","search","reset"],setup(e,{emit:a}){const t=e,o=a,r=p(s({},t.modelValue));m(()=>t.modelValue,(e,a)=>{JSON.stringify(e)!==JSON.stringify(a)&&(r.value=s({},e))},{deep:!0});let l=null;m(r,e=>{l&&clearTimeout(l),l=setTimeout(()=>{o("update:modelValue",s({},e))},100)},{deep:!0});const k=()=>{o("search",r.value)},P=()=>{r.value={name:void 0,status:void 0},o("reset")};return(a,t)=>{const o=i("ripple");return u(),d(j(C),{class:"search-card",shadow:"never"},{default:n(()=>[f(j(y),{ref:"formRef",model:e.modelValue,"label-width":"80px"},{default:n(()=>[f(j(E),{gutter:20},{default:n(()=>[f(j(V),{span:8},{default:n(()=>[f(j(h),{label:"分类名称",prop:"name"},{default:n(()=>[f(j(O),{modelValue:r.value.name,"onUpdate:modelValue":t[0]||(t[0]=e=>r.value.name=e),placeholder:"请输入分类名称",clearable:"",onKeyup:c(k,["enter"])},null,8,["modelValue"])]),_:1})]),_:1}),f(j(V),{span:6},{default:n(()=>[f(j(h),{label:"状态",prop:"status"},{default:n(()=>[f(j(g),{modelValue:r.value.status,"onUpdate:modelValue":t[1]||(t[1]=e=>r.value.status=e),placeholder:"请选择状态",clearable:""},{default:n(()=>[f(j(w),{value:1,label:"启用"}),f(j(w),{value:2,label:"禁用"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),f(j(V),{span:6},{default:n(()=>[f(j(h),{"label-width":"0"},{default:n(()=>[f(j(I),null,{default:n(()=>[b((u(),d(j(J),{type:"primary",onClick:k},{default:n(()=>[f(j(x),{class:"mr-1"},{default:n(()=>[f(j(v))]),_:1}),t[2]||(t[2]=_(" 搜索 ",-1))]),_:1})),[[o]]),b((u(),d(j(J),{onClick:P},{default:n(()=>[...t[3]||(t[3]=[_("重置",-1)])]),_:1})),[[o]])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}}),[["__scopeId","data-v-9b5715ff"]]);export{P as default};
|
||||
@ -1 +0,0 @@
|
||||
var e=Object.defineProperty,a=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,r=(a,t,o)=>t in a?e(a,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[t]=o,s=(e,s)=>{for(var l in s||(s={}))t.call(s,l)&&r(e,l,s[l]);if(a)for(var l of a(s))o.call(s,l)&&r(e,l,s[l]);return e};import{d as l,a as p,w as i,E as m,y as d,f as u,z as n,p as f,u as j,B as c,J as b,l as _,ab as x,aW as v}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import{E as y,a as E}from"./index-zIv9y_XZ.js";import{E as V}from"./index-BIIDnOvF.js";import{E as h}from"./index-B5f0OwDI.js";import{E as g}from"./index-qSQlj0RO.js";import{E as O,a as w}from"./index-CHZ9Ls9_.js";import{E as C}from"./index-Bi8tRqjc.js";import{E as I}from"./index-r0EsCkBw.js";import{E as J}from"./index-Bh7aAHNM.js";import{_ as k}from"./_plugin-vue_export-helper-BCo6x5W8.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-DZO7eApA.js";import"./index-MOpuiu9Z.js";import"./index-nZra831X.js";import"./use-form-item-ByasanrX.js";import"./_initCloneObject-7oWMW-Ot.js";import"./index-B99ckkYy.js";import"./index-sqhzrW2O.js";import"./index-D2YpA_om.js";import"./token-DWNpOE8r.js";import"./scroll-Cceui3yC.js";import"./debounce-CkazOn_9.js";import"./_baseIteratee-DRiXPtOg.js";import"./index-BC2pRl3S.js";import"./vnode-CqxKQBn0.js";import"./index-DfWQjCuY.js";const z=k(l({__name:"category-search",props:{modelValue:{}},emits:["update:modelValue","search","reset"],setup(e,{emit:a}){const t=e,o=a,r=p(s({},t.modelValue));i(()=>t.modelValue,(e,a)=>{JSON.stringify(e)!==JSON.stringify(a)&&(r.value=s({},e))},{deep:!0});let l=null;i(r,e=>{l&&clearTimeout(l),l=setTimeout(()=>{o("update:modelValue",s({},e))},100)},{deep:!0});const k=()=>{o("search",r.value)},z=()=>{r.value={name:void 0,status:void 0},o("reset")};return(a,t)=>{const o=m("ripple");return u(),d(j(J),{class:"search-card",shadow:"never"},{default:n(()=>[f(j(y),{ref:"formRef",model:e.modelValue,"label-width":"80px"},{default:n(()=>[f(j(V),{gutter:20},{default:n(()=>[f(j(h),{span:8},{default:n(()=>[f(j(E),{label:"分类名称",prop:"name"},{default:n(()=>[f(j(g),{modelValue:r.value.name,"onUpdate:modelValue":t[0]||(t[0]=e=>r.value.name=e),placeholder:"请输入分类名称",clearable:"",onKeyup:c(k,["enter"])},null,8,["modelValue"])]),_:1})]),_:1}),f(j(h),{span:6},{default:n(()=>[f(j(E),{label:"状态",prop:"status"},{default:n(()=>[f(j(O),{modelValue:r.value.status,"onUpdate:modelValue":t[1]||(t[1]=e=>r.value.status=e),placeholder:"请选择状态",clearable:""},{default:n(()=>[f(j(w),{value:1,label:"启用"}),f(j(w),{value:2,label:"禁用"})]),_:1},8,["modelValue"])]),_:1})]),_:1}),f(j(h),{span:6},{default:n(()=>[f(j(E),{"label-width":"0"},{default:n(()=>[f(j(C),null,{default:n(()=>[b((u(),d(j(I),{type:"primary",onClick:k},{default:n(()=>[f(j(x),{class:"mr-1"},{default:n(()=>[f(j(v))]),_:1}),t[2]||(t[2]=_(" 搜索 ",-1))]),_:1})),[[o]]),b((u(),d(j(I),{onClick:z},{default:n(()=>[...t[3]||(t[3]=[_("重置",-1)])]),_:1})),[[o]])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})}}}),[["__scopeId","data-v-9b5715ff"]]);export{z as default};
|
||||
1
build/resources/admin/assets/cloneDeep-tG3tBIiW.js
Normal file
1
build/resources/admin/assets/cloneDeep-tG3tBIiW.js
Normal file
@ -0,0 +1 @@
|
||||
import{b as o}from"./index-DhBIlDpg.js";function r(r){return o(r,5)}export{r as c};
|
||||
@ -1 +0,0 @@
|
||||
import{b as n}from"./index-zIv9y_XZ.js";function r(r){return n(r,5)}export{r as c};
|
||||
1
build/resources/admin/assets/coupon-dialog-CGVfD7e9.js
Normal file
1
build/resources/admin/assets/coupon-dialog-CGVfD7e9.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
import{b4 as s}from"./index-DBHnxsy6.js";const t={getList:t=>s.get({url:"admin/system_coupons",params:t}),create:t=>s.post({url:"admin/system_coupons",data:t}),update:(t,e)=>s.put({url:`admin/system_coupons/${t}`,data:e}),delete:t=>s.del({url:`admin/system_coupons/${t}`})};export{t as c};
|
||||
import{b9 as s}from"./index-CZ0Lvzl5.js";const t={getList:t=>s.get({url:"admin/system_coupons",params:t}),create:t=>s.post({url:"admin/system_coupons",data:t}),update:(t,e)=>s.put({url:`admin/system_coupons/${t}`,data:e}),delete:t=>s.del({url:`admin/system_coupons/${t}`})};export{t as c};
|
||||
@ -1 +1 @@
|
||||
import{b4 as a}from"./index-DBHnxsy6.js";function r(r="7d"){return a.get({url:"admin/dashboard/cards",params:{rangeType:r}})}function d(r="30d",d="day"){return a.get({url:"admin/dashboard/draw_trend",params:{rangeType:r,granularity:d}})}function n(r=1,d=20,n){return a.get({url:"admin/dashboard/new_users",params:{page:r,page_size:d,period:n}})}function e(r,d=50){return a.get({url:"admin/dashboard/draw_stream",params:{since_id:r,limit:d}})}function s(r=50){return a.get({url:"admin/dashboard/todos",params:{limit:r}})}export{e as a,n as b,d as c,s as d,r as f};
|
||||
import{b9 as a}from"./index-CZ0Lvzl5.js";function r(r="7d"){return a.get({url:"admin/dashboard/cards",params:{rangeType:r}})}function d(r="30d",d="day"){return a.get({url:"admin/dashboard/draw_trend",params:{rangeType:r,granularity:d}})}function n(r=1,d=20,n){return a.get({url:"admin/dashboard/new_users",params:{page:r,page_size:d,period:n}})}function e(r,d=50){return a.get({url:"admin/dashboard/draw_stream",params:{since_id:r,limit:d}})}function s(r=50){return a.get({url:"admin/dashboard/todos",params:{limit:r}})}export{e as a,n as b,d as c,s as d,r as f};
|
||||
1
build/resources/admin/assets/debounce-BWBxuUbE.js
Normal file
1
build/resources/admin/assets/debounce-BWBxuUbE.js
Normal file
@ -0,0 +1 @@
|
||||
import{cw as t,bn as n,cx as r}from"./index-CZ0Lvzl5.js";var i=/\s/;var e=/^\s+/;function u(t){return t?t.slice(0,function(t){for(var n=t.length;n--&&i.test(t.charAt(n)););return n}(t)+1).replace(e,""):t}var o=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,f=/^0o[0-7]+$/i,c=parseInt;function v(r){if("number"==typeof r)return r;if(t(r))return NaN;if(n(r)){var i="function"==typeof r.valueOf?r.valueOf():r;r=n(i)?i+"":i}if("string"!=typeof r)return 0===r?r:+r;r=u(r);var e=a.test(r);return e||f.test(r)?c(r.slice(2),e?2:8):o.test(r)?NaN:+r}var s=function(){return r.Date.now()},l=Math.max,d=Math.min;function m(t,r,i){var e,u,o,a,f,c,m=0,p=!1,x=!1,h=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function T(n){var r=e,i=u;return e=u=void 0,m=n,a=t.apply(i,r)}function y(t){var n=t-c;return void 0===c||n>=r||n<0||x&&t-m>=o}function g(){var t=s();if(y(t))return w(t);f=setTimeout(g,function(t){var n=r-(t-c);return x?d(n,o-(t-m)):n}(t))}function w(t){return f=void 0,h&&e?T(t):(e=u=void 0,a)}function N(){var t=s(),n=y(t);if(e=arguments,u=this,c=t,n){if(void 0===f)return function(t){return m=t,f=setTimeout(g,r),p?T(t):a}(c);if(x)return clearTimeout(f),f=setTimeout(g,r),T(c)}return void 0===f&&(f=setTimeout(g,r)),a}return r=v(r)||0,n(i)&&(p=!!i.leading,o=(x="maxWait"in i)?l(v(i.maxWait)||0,r):o,h="trailing"in i?!!i.trailing:h),N.cancel=function(){void 0!==f&&clearTimeout(f),m=0,e=c=u=f=void 0},N.flush=function(){return void 0===f?a:w(s())},N}export{m as d,v as t};
|
||||
@ -1 +0,0 @@
|
||||
import{cr as t,bi as r,cs as n}from"./index-DBHnxsy6.js";var i=/\s/;var e=/^\s+/;function u(t){return t?t.slice(0,function(t){for(var r=t.length;r--&&i.test(t.charAt(r)););return r}(t)+1).replace(e,""):t}var o=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,f=/^0o[0-7]+$/i,c=parseInt;function v(n){if("number"==typeof n)return n;if(t(n))return NaN;if(r(n)){var i="function"==typeof n.valueOf?n.valueOf():n;n=r(i)?i+"":i}if("string"!=typeof n)return 0===n?n:+n;n=u(n);var e=a.test(n);return e||f.test(n)?c(n.slice(2),e?2:8):o.test(n)?NaN:+n}var s=function(){return n.Date.now()},l=Math.max,d=Math.min;function m(t,n,i){var e,u,o,a,f,c,m=0,p=!1,h=!1,x=!0;if("function"!=typeof t)throw new TypeError("Expected a function");function T(r){var n=e,i=u;return e=u=void 0,m=r,a=t.apply(i,n)}function y(t){var r=t-c;return void 0===c||r>=n||r<0||h&&t-m>=o}function g(){var t=s();if(y(t))return N(t);f=setTimeout(g,function(t){var r=n-(t-c);return h?d(r,o-(t-m)):r}(t))}function N(t){return f=void 0,x&&e?T(t):(e=u=void 0,a)}function b(){var t=s(),r=y(t);if(e=arguments,u=this,c=t,r){if(void 0===f)return function(t){return m=t,f=setTimeout(g,n),p?T(t):a}(c);if(h)return clearTimeout(f),f=setTimeout(g,n),T(c)}return void 0===f&&(f=setTimeout(g,n)),a}return n=v(n)||0,r(i)&&(p=!!i.leading,o=(h="maxWait"in i)?l(v(i.maxWait)||0,n):o,x="trailing"in i?!!i.trailing:x),b.cancel=function(){void 0!==f&&clearTimeout(f),m=0,e=c=u=f=void 0},b.flush=function(){return void 0===f?a:N(s())},b}export{m as d,v as t};
|
||||
1
build/resources/admin/assets/dynamic-stats-ByZg4VmD.js
Normal file
1
build/resources/admin/assets/dynamic-stats-ByZg4VmD.js
Normal file
@ -0,0 +1 @@
|
||||
import{_ as s}from"./dynamic-stats.vue_vue_type_script_setup_true_lang-Cu6h40HW.js";import"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css */import"./dashboard-B-GY2jng.js";import"./index-BQ-mpgoy.js";import"./use-form-common-props-U6f9D53_.js";import"./index-BierC7rd.js";import"./index-BW22oPP6.js";export{s as default};
|
||||
@ -1 +0,0 @@
|
||||
import{_ as s}from"./dynamic-stats.vue_vue_type_script_setup_true_lang-CjWh3ewK.js";import"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css */import"./dashboard-efoygTEr.js";import"./index-D2YpA_om.js";import"./use-form-common-props-BOfz9xGR.js";import"./index-sqhzrW2O.js";import"./index-nZra831X.js";export{s as default};
|
||||
@ -1 +0,0 @@
|
||||
import{d as s,a as e,o as a,aH as t,e as l,f as r,h as n,l as i,m as o,p as m,z as c,F as d,G as u,y as p,O as v}from"./index-DBHnxsy6.js";/* empty css *//* empty css *//* empty css */import{a as h}from"./dashboard-efoygTEr.js";import{E as f}from"./index-D2YpA_om.js";import{E as y}from"./index-sqhzrW2O.js";const x={class:"art-card h-128 p-5 mb-5 max-sm:mb-4"},g={class:"art-card-header"},b={class:"title"},w={class:"text-success"},j={class:"h-9/10 mt-2 overflow-hidden"},N={class:"text-g-800 font-medium"},_={class:"text-theme"},k={key:0,class:"ml-2"},z=s({__name:"dynamic-stats",setup(s){const z=e([]),E=e(0);let I,P=null;const S=()=>{return s=this,e=null,a=function*(){try{const{list:s,sinceId:e}=yield h(I,50);if(s.length){I=e;const a=new Set(z.value.map(s=>s.id)),t=s.filter(s=>!a.has(s.id));t.length&&(z.value.unshift(...t),E.value=t.length,z.value.length>100&&z.value.splice(100))}}catch(s){v.error("获取抽奖动态失败")}},new Promise((t,l)=>{var r=s=>{try{i(a.next(s))}catch(e){l(e)}},n=s=>{try{i(a.throw(s))}catch(e){l(e)}},i=s=>s.done?t(s.value):Promise.resolve(s.value).then(r,n);i((a=a.apply(s,e)).next())});var s,e,a};return a(()=>{S(),P=window.setInterval(S,5e3)}),t(()=>{P&&window.clearInterval(P)}),(s,e)=>{const a=f,t=y;return r(),l("div",x,[n("div",g,[n("div",b,[e[1]||(e[1]=n("h4",null,"实时抽奖动态",-1)),n("p",null,[e[0]||(e[0]=i("新增",-1)),n("span",w,"+"+o(E.value),1)])])]),n("div",j,[m(t,null,{default:c(()=>[(r(!0),l(d,null,u(z.value,(s,t)=>(r(),l("div",{class:"h-17.5 leading-17.5 border-b border-g-300 text-sm overflow-hidden last:border-b-0",key:s.id},[n("span",N,o(s.nickname),1),e[3]||(e[3]=n("span",{class:"mx-2 text-g-600"},"在",-1)),n("span",_,o(s.activityName?`${s.activityName}-${s.issueNumber}`:s.issueName),1),s.isWinner?(r(),l("span",k,"中奖 "+o(s.prizeName||""),1)):(r(),p(a,{key:1,size:"small",type:"info",class:"ml-2"},{default:c(()=>[...e[2]||(e[2]=[i("参与",-1)])]),_:1}))]))),128))]),_:1})])])}}});export{z as _};
|
||||
@ -0,0 +1 @@
|
||||
import{d as s,a as e,o as a,aH as t,e as l,f as r,h as n,l as i,m as o,p as m,z as c,F as d,G as u,y as v,O as h}from"./index-CZ0Lvzl5.js";/* empty css *//* empty css *//* empty css */import{a as p}from"./dashboard-B-GY2jng.js";import{E as f}from"./index-BQ-mpgoy.js";import{E as x}from"./index-BierC7rd.js";const y={class:"art-card h-128 p-5 mb-5 max-sm:mb-4"},b={class:"art-card-header"},g={class:"title"},w={class:"text-success"},j={class:"h-9/10 mt-2 overflow-hidden"},k={class:"text-g-800 font-medium"},N={class:"text-theme"},_={key:0,class:"ml-2"},z=s({__name:"dynamic-stats",setup(s){const z=e([]),I=e(0);let E,F=null;const P=()=>{return s=this,e=null,a=function*(){try{const{list:s,sinceId:e}=yield p(E,50);if(s.length){E=e;const a=new Set(z.value.map(s=>s.id)),t=s.filter(s=>!a.has(s.id));t.length&&(z.value.unshift(...t),I.value=t.length,z.value.length>100&&z.value.splice(100))}}catch(s){h.error("获取抽奖动态失败")}},new Promise((t,l)=>{var r=s=>{try{i(a.next(s))}catch(e){l(e)}},n=s=>{try{i(a.throw(s))}catch(e){l(e)}},i=s=>s.done?t(s.value):Promise.resolve(s.value).then(r,n);i((a=a.apply(s,e)).next())});var s,e,a};return a(()=>{P(),F=window.setInterval(P,5e3)}),t(()=>{F&&window.clearInterval(F)}),(s,e)=>{const a=f,t=x;return r(),l("div",y,[n("div",b,[n("div",g,[e[1]||(e[1]=n("h4",null,"实时抽奖动态",-1)),n("p",null,[e[0]||(e[0]=i("新增",-1)),n("span",w,"+"+o(I.value),1)])])]),n("div",j,[m(t,null,{default:c(()=>[(r(!0),l(d,null,u(z.value,(s,t)=>(r(),l("div",{class:"h-17.5 leading-17.5 border-b border-g-300 text-sm overflow-hidden last:border-b-0",key:s.id},[n("span",k,o(s.nickname),1),e[3]||(e[3]=n("span",{class:"mx-2 text-g-600"},"在",-1)),n("span",N,o(s.activityName?`${s.activityName}-${s.issueNumber}`:s.issueName),1),s.isWinner?(r(),l("span",_,"中奖 "+o(s.prizeName||""),1)):(r(),v(a,{key:1,size:"small",type:"info",class:"ml-2"},{default:c(()=>[...e[2]||(e[2]=[i("参与",-1)])]),_:1}))]))),128))]),_:1})])])}}});export{z as _};
|
||||
@ -1 +0,0 @@
|
||||
var e=Object.defineProperty,s=Object.defineProperties,t=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable,i=(s,t,a)=>t in s?e(s,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[t]=a,r=(e,s)=>{for(var t in s||(s={}))o.call(s,t)&&i(e,t,s[t]);if(a)for(var t of a(s))l.call(s,t)&&i(e,t,s[t]);return e},c=(e,a)=>s(e,t(a));import{a6 as n,a2 as p,c_ as f,cF as d,_ as u,d as y,bs as b,X as v,a as m,c as h,ao as g,bG as k,y as w,f as O,z as j,J as C,h as A,i as _,u as x,k as S,ab as P,j as $,au as E,e as B,l as I,m as T,F,p as z,cC as D,ac as G,Z as J,ap as N}from"./index-DBHnxsy6.js";import{c as X,d as Z}from"./index-B99ckkYy.js";const q=p(c(r({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:f(d),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:["light","dark"],default:"light"}},X),{showAfter:Number})),H={open:()=>!0,close:e=>n(e)||e instanceof Event},K=y({name:"ElAlert"});const L=N(u(y(c(r({},K),{props:q,emits:H,setup(e,{emit:s}){const t=e,{Close:a}=D,o=b(),l=v("alert"),i=m(n(t.showAfter)),r=h(()=>d[t.type]),c=h(()=>!(!t.description&&!o.default)),p=e=>{i.value=!1,s("close",e)},{onOpen:f,onClose:u}=Z({showAfter:g(t,"showAfter",0),hideAfter:g(t,"hideAfter"),autoClose:g(t,"autoClose"),open:()=>{i.value=!0,s("open")},close:p});return k&&f(),(e,s)=>(O(),w(J,{name:x(l).b("fade"),persisted:""},{default:j(()=>[C(A("div",{class:_([x(l).b(),x(l).m(e.type),x(l).is("center",e.center),x(l).is(e.effect)]),role:"alert"},[e.showIcon&&(e.$slots.icon||x(r))?(O(),w(x(P),{key:0,class:_([x(l).e("icon"),{[x(l).is("big")]:x(c)}])},{default:j(()=>[$(e.$slots,"icon",{},()=>[(O(),w(E(x(r))))])]),_:3},8,["class"])):S("v-if",!0),A("div",{class:_(x(l).e("content"))},[e.title||e.$slots.title?(O(),B("span",{key:0,class:_([x(l).e("title"),{"with-description":x(c)}])},[$(e.$slots,"title",{},()=>[I(T(e.title),1)])],2)):S("v-if",!0),x(c)?(O(),B("p",{key:1,class:_(x(l).e("description"))},[$(e.$slots,"default",{},()=>[I(T(e.description),1)])],2)):S("v-if",!0),e.closable?(O(),B(F,{key:2},[e.closeText?(O(),B("div",{key:0,class:_([x(l).e("close-btn"),x(l).is("customed")]),onClick:p},T(e.closeText),3)):(O(),w(x(P),{key:1,class:_(x(l).e("close-btn")),onClick:x(u)},{default:j(()=>[z(x(a))]),_:1},8,["class","onClick"]))],64)):S("v-if",!0)],2)],2),[[G,i.value]])]),_:3},8,["name"]))}})),[["__file","alert.vue"]]));export{L as E};
|
||||
1
build/resources/admin/assets/el-alert-PelqwNJs.js
Normal file
1
build/resources/admin/assets/el-alert-PelqwNJs.js
Normal file
@ -0,0 +1 @@
|
||||
var e=Object.defineProperty,s=Object.defineProperties,t=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,l=Object.prototype.propertyIsEnumerable,i=(s,t,a)=>t in s?e(s,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):s[t]=a,r=(e,s)=>{for(var t in s||(s={}))o.call(s,t)&&i(e,t,s[t]);if(a)for(var t of a(s))l.call(s,t)&&i(e,t,s[t]);return e},n=(e,a)=>s(e,t(a));import{a6 as c,a2 as p,d1 as f,cK as d,_ as u,d as y,bx as b,X as v,a as m,c as h,ao as g,bL as k,y as w,f as O,z as j,J as x,h as A,i as C,u as S,k as _,ab as P,j as $,au as E,e as B,l as I,m as T,F as z,p as D,cH as F,ac as H,Z as J,ap as K}from"./index-CZ0Lvzl5.js";import{c as L,d as N}from"./index-C6fEXl-e.js";const X=p(n(r({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:f(d),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:["light","dark"],default:"light"}},L),{showAfter:Number})),Z={open:()=>!0,close:e=>c(e)||e instanceof Event},q=y({name:"ElAlert"});const G=K(u(y(n(r({},q),{props:X,emits:Z,setup(e,{emit:s}){const t=e,{Close:a}=F,o=b(),l=v("alert"),i=m(c(t.showAfter)),r=h(()=>d[t.type]),n=h(()=>!(!t.description&&!o.default)),p=e=>{i.value=!1,s("close",e)},{onOpen:f,onClose:u}=N({showAfter:g(t,"showAfter",0),hideAfter:g(t,"hideAfter"),autoClose:g(t,"autoClose"),open:()=>{i.value=!0,s("open")},close:p});return k&&f(),(e,s)=>(O(),w(J,{name:S(l).b("fade"),persisted:""},{default:j(()=>[x(A("div",{class:C([S(l).b(),S(l).m(e.type),S(l).is("center",e.center),S(l).is(e.effect)]),role:"alert"},[e.showIcon&&(e.$slots.icon||S(r))?(O(),w(S(P),{key:0,class:C([S(l).e("icon"),{[S(l).is("big")]:S(n)}])},{default:j(()=>[$(e.$slots,"icon",{},()=>[(O(),w(E(S(r))))])]),_:3},8,["class"])):_("v-if",!0),A("div",{class:C(S(l).e("content"))},[e.title||e.$slots.title?(O(),B("span",{key:0,class:C([S(l).e("title"),{"with-description":S(n)}])},[$(e.$slots,"title",{},()=>[I(T(e.title),1)])],2)):_("v-if",!0),S(n)?(O(),B("p",{key:1,class:C(S(l).e("description"))},[$(e.$slots,"default",{},()=>[I(T(e.description),1)])],2)):_("v-if",!0),e.closable?(O(),B(z,{key:2},[e.closeText?(O(),B("div",{key:0,class:C([S(l).e("close-btn"),S(l).is("customed")]),onClick:p},T(e.closeText),3)):(O(),w(S(P),{key:1,class:C(S(l).e("close-btn")),onClick:S(u)},{default:j(()=>[D(S(a))]),_:1},8,["class","onClick"]))],64)):_("v-if",!0)],2)],2),[[H,i.value]])]),_:3},8,["name"]))}})),[["__file","alert.vue"]]));export{G as E};
|
||||
@ -1 +1 @@
|
||||
var e=Object.defineProperty,t=Object.defineProperties,r=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,s=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(t,r,a)=>r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[r]=a;import{a2 as l,ak as n,_ as c,d,X as p,c as f,e as u,f as v,k as y,i as b,u as O,j as g,g as j,ap as m}from"./index-DBHnxsy6.js";const P=l({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:n(String),default:"solid"}}),S=d({name:"ElDivider"}),h=d((w=((e,t)=>{for(var r in t||(t={}))s.call(t,r)&&i(e,r,t[r]);if(a)for(var r of a(t))o.call(t,r)&&i(e,r,t[r]);return e})({},S),t(w,r({props:P,setup(e){const t=e,r=p("divider"),a=f(()=>r.cssVar({"border-style":t.borderStyle}));return(e,t)=>(v(),u("div",{class:b([O(r).b(),O(r).m(e.direction)]),style:j(O(a)),role:"separator"},[e.$slots.default&&"vertical"!==e.direction?(v(),u("div",{key:0,class:b([O(r).e("text"),O(r).is(e.contentPosition)])},[g(e.$slots,"default")],2)):y("v-if",!0)],6))}}))));var w;const k=m(c(h,[["__file","divider.vue"]]));export{k as E};
|
||||
var e=Object.defineProperty,t=Object.defineProperties,r=Object.getOwnPropertyDescriptors,a=Object.getOwnPropertySymbols,s=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,i=(t,r,a)=>r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[r]=a;import{a2 as l,ak as n,_ as c,d,X as p,c as f,e as u,f as v,k as y,i as b,u as O,j as g,g as j,ap as m}from"./index-CZ0Lvzl5.js";const P=l({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:n(String),default:"solid"}}),S=d({name:"ElDivider"}),h=d((w=((e,t)=>{for(var r in t||(t={}))s.call(t,r)&&i(e,r,t[r]);if(a)for(var r of a(t))o.call(t,r)&&i(e,r,t[r]);return e})({},S),t(w,r({props:P,setup(e){const t=e,r=p("divider"),a=f(()=>r.cssVar({"border-style":t.borderStyle}));return(e,t)=>(v(),u("div",{class:b([O(r).b(),O(r).m(e.direction)]),style:j(O(a)),role:"separator"},[e.$slots.default&&"vertical"!==e.direction?(v(),u("div",{key:0,class:b([O(r).e("text"),O(r).is(e.contentPosition)])},[g(e.$slots,"default")],2)):y("v-if",!0)],6))}}))));var w;const k=m(c(h,[["__file","divider.vue"]]));export{k as E};
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/el-dropdown-item-DcxLwUbk.js.gz
Normal file
BIN
build/resources/admin/assets/el-dropdown-item-DcxLwUbk.js.gz
Normal file
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/el-pagination-CqMqz367.js.gz
Normal file
BIN
build/resources/admin/assets/el-pagination-CqMqz367.js.gz
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
var e=Object.defineProperty,t=Object.defineProperties,r=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,s=(t,r,o)=>r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,i=(e,t)=>{for(var r in t||(t={}))a.call(t,r)&&s(e,r,t[r]);if(o)for(var r of o(t))p.call(t,r)&&s(e,r,t[r]);return e},n=(e,o)=>t(e,r(o));import{u as l,b as f,E as d}from"./index-B99ckkYy.js";import{d as b}from"./el-dropdown-item-5vxq5ITH.js";import{bo as c,a2 as u,_ as v,d as g,c as y,X as m,a as w,u as h,bu as O,y as j,f as x,z as S,j as k,k as A,e as P,i as B,m as C,l as N,Y as R,ap as $,cB as _}from"./index-DBHnxsy6.js";const E=u({trigger:f.trigger,triggerKeys:f.triggerKeys,placement:b.placement,disabled:f.disabled,visible:l.visible,transition:l.transition,popperOptions:b.popperOptions,tabindex:b.tabindex,content:l.content,popperStyle:l.popperStyle,popperClass:l.popperClass,enterable:n(i({},l.enterable),{default:!0}),effect:n(i({},l.effect),{default:"light"}),teleported:l.teleported,appendTo:l.appendTo,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),U={"update:visible":e=>c(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},K=g({name:"ElPopover"}),T=g(n(i({},K),{props:E,emits:U,setup(e,{expose:t,emit:r}){const o=e,a=y(()=>o["onUpdate:visible"]),p=m("popover"),s=w(),i=y(()=>{var e;return null==(e=h(s))?void 0:e.popperRef}),n=y(()=>[{width:O(o.width)},o.popperStyle]),l=y(()=>[p.b(),o.popperClass,{[p.m("plain")]:!!o.content}]),f=y(()=>o.transition===`${p.namespace.value}-fade-in-linear`),b=()=>{r("before-enter")},c=()=>{r("before-leave")},u=()=>{r("after-enter")},v=()=>{r("update:visible",!1),r("after-leave")};return t({popperRef:i,hide:()=>{var e;null==(e=s.value)||e.hide()}}),(e,t)=>(x(),j(h(d),R({ref_key:"tooltipRef",ref:s},e.$attrs,{trigger:e.trigger,"trigger-keys":e.triggerKeys,placement:e.placement,disabled:e.disabled,visible:e.visible,transition:e.transition,"popper-options":e.popperOptions,tabindex:e.tabindex,content:e.content,offset:e.offset,"show-after":e.showAfter,"hide-after":e.hideAfter,"auto-close":e.autoClose,"show-arrow":e.showArrow,"aria-label":e.title,effect:e.effect,enterable:e.enterable,"popper-class":h(l),"popper-style":h(n),teleported:e.teleported,"append-to":e.appendTo,persistent:e.persistent,"gpu-acceleration":h(f),"onUpdate:visible":h(a),onBeforeShow:b,onBeforeHide:c,onShow:u,onHide:v}),{content:S(()=>[e.title?(x(),P("div",{key:0,class:B(h(p).e("title")),role:"title"},C(e.title),3)):A("v-if",!0),k(e.$slots,"default",{},()=>[N(C(e.content),1)])]),default:S(()=>[e.$slots.reference?k(e.$slots,"reference",{key:0}):A("v-if",!0)]),_:3},16,["trigger","trigger-keys","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","append-to","persistent","gpu-acceleration","onUpdate:visible"]))}}));const H=(e,t)=>{const r=t.arg||t.value,o=null==r?void 0:r.popperRef;o&&(o.triggerRef=e)};const z=$(v(T,[["__file","popover.vue"]]),{directive:_({mounted(e,t){H(e,t)},updated(e,t){H(e,t)}},"popover")});export{z as E};
|
||||
var e=Object.defineProperty,t=Object.defineProperties,r=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,s=(t,r,o)=>r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,i=(e,t)=>{for(var r in t||(t={}))a.call(t,r)&&s(e,r,t[r]);if(o)for(var r of o(t))p.call(t,r)&&s(e,r,t[r]);return e},n=(e,o)=>t(e,r(o));import{u as l,b as f,E as d}from"./index-C6fEXl-e.js";import{d as b}from"./el-dropdown-item-DcxLwUbk.js";import{bt as c,a2 as u,_ as v,d as g,c as y,X as m,a as w,u as h,bz as O,y as j,f as x,z as S,j as k,k as A,e as P,i as C,m as N,l as R,Y as $,ap as _,cG as B}from"./index-CZ0Lvzl5.js";const E=u({trigger:f.trigger,triggerKeys:f.triggerKeys,placement:b.placement,disabled:f.disabled,visible:l.visible,transition:l.transition,popperOptions:b.popperOptions,tabindex:b.tabindex,content:l.content,popperStyle:l.popperStyle,popperClass:l.popperClass,enterable:n(i({},l.enterable),{default:!0}),effect:n(i({},l.effect),{default:"light"}),teleported:l.teleported,appendTo:l.appendTo,title:String,width:{type:[String,Number],default:150},offset:{type:Number,default:void 0},showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0},showArrow:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),U={"update:visible":e=>c(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},K=g({name:"ElPopover"}),T=g(n(i({},K),{props:E,emits:U,setup(e,{expose:t,emit:r}){const o=e,a=y(()=>o["onUpdate:visible"]),p=m("popover"),s=w(),i=y(()=>{var e;return null==(e=h(s))?void 0:e.popperRef}),n=y(()=>[{width:O(o.width)},o.popperStyle]),l=y(()=>[p.b(),o.popperClass,{[p.m("plain")]:!!o.content}]),f=y(()=>o.transition===`${p.namespace.value}-fade-in-linear`),b=()=>{r("before-enter")},c=()=>{r("before-leave")},u=()=>{r("after-enter")},v=()=>{r("update:visible",!1),r("after-leave")};return t({popperRef:i,hide:()=>{var e;null==(e=s.value)||e.hide()}}),(e,t)=>(x(),j(h(d),$({ref_key:"tooltipRef",ref:s},e.$attrs,{trigger:e.trigger,"trigger-keys":e.triggerKeys,placement:e.placement,disabled:e.disabled,visible:e.visible,transition:e.transition,"popper-options":e.popperOptions,tabindex:e.tabindex,content:e.content,offset:e.offset,"show-after":e.showAfter,"hide-after":e.hideAfter,"auto-close":e.autoClose,"show-arrow":e.showArrow,"aria-label":e.title,effect:e.effect,enterable:e.enterable,"popper-class":h(l),"popper-style":h(n),teleported:e.teleported,"append-to":e.appendTo,persistent:e.persistent,"gpu-acceleration":h(f),"onUpdate:visible":h(a),onBeforeShow:b,onBeforeHide:c,onShow:u,onHide:v}),{content:S(()=>[e.title?(x(),P("div",{key:0,class:C(h(p).e("title")),role:"title"},N(e.title),3)):A("v-if",!0),k(e.$slots,"default",{},()=>[R(N(e.content),1)])]),default:S(()=>[e.$slots.reference?k(e.$slots,"reference",{key:0}):A("v-if",!0)]),_:3},16,["trigger","trigger-keys","placement","disabled","visible","transition","popper-options","tabindex","content","offset","show-after","hide-after","auto-close","show-arrow","aria-label","effect","enterable","popper-class","popper-style","teleported","append-to","persistent","gpu-acceleration","onUpdate:visible"]))}}));const z=(e,t)=>{const r=t.arg||t.value,o=null==r?void 0:r.popperRef;o&&(o.triggerRef=e)};const H=_(v(T,[["__file","popover.vue"]]),{directive:B({mounted(e,t){z(e,t)},updated(e,t){z(e,t)}},"popover")});export{H as E};
|
||||
@ -1 +1 @@
|
||||
var e=Object.defineProperty,t=Object.defineProperties,a=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable,o=(t,a,s)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[a]=s;import{a2 as i,ak as l,_ as c,d as p,X as u,c as d,d7 as f,d8 as b,bI as y,a$ as h,b0 as g,bq as v,aa as k,e as m,f as w,k as x,i as $,u as O,h as j,g as I,j as N,m as P,y as B,z as D,au as F,ab as S,ap as T}from"./index-DBHnxsy6.js";const W=i({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:l(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:l([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:l(Function),default:e=>`${e}%`}}),_=p({name:"ElProgress"}),E=p((L=((e,t)=>{for(var a in t||(t={}))r.call(t,a)&&o(e,a,t[a]);if(s)for(var a of s(t))n.call(t,a)&&o(e,a,t[a]);return e})({},_),z={props:W,setup(e){const t=e,a={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},s=u("progress"),r=d(()=>{const e={width:`${t.percentage}%`,animationDuration:`${t.duration}s`},a=M(t.percentage);return a.includes("gradient")?e.background=a:e.backgroundColor=a,e}),n=d(()=>(t.strokeWidth/t.width*100).toFixed(1)),o=d(()=>["circle","dashboard"].includes(t.type)?Number.parseInt(""+(50-Number.parseFloat(n.value)/2),10):0),i=d(()=>{const e=o.value,a="dashboard"===t.type;return`\n M 50 50\n m 0 ${a?"":"-"}${e}\n a ${e} ${e} 0 1 1 0 ${a?"-":""}${2*e}\n a ${e} ${e} 0 1 1 0 ${a?"":"-"}${2*e}\n `}),l=d(()=>2*Math.PI*o.value),c=d(()=>"dashboard"===t.type?.75:1),p=d(()=>-1*l.value*(1-c.value)/2+"px"),T=d(()=>({strokeDasharray:`${l.value*c.value}px, ${l.value}px`,strokeDashoffset:p.value})),W=d(()=>({strokeDasharray:`${l.value*c.value*(t.percentage/100)}px, ${l.value}px`,strokeDashoffset:p.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),_=d(()=>{let e;return e=t.color?M(t.percentage):a[t.status]||a.default,e}),E=d(()=>"warning"===t.status?f:"line"===t.type?"success"===t.status?b:y:"success"===t.status?h:g),L=d(()=>"line"===t.type?12+.4*t.strokeWidth:.111111*t.width+2),z=d(()=>t.format(t.percentage)),M=e=>{var a;const{color:s}=t;if(v(s))return s(e);if(k(s))return s;{const t=function(e){const t=100/e.length;return e.map((e,a)=>k(e)?{color:e,percentage:(a+1)*t}:e).sort((e,t)=>e.percentage-t.percentage)}(s);for(const a of t)if(a.percentage>e)return a.color;return null==(a=t[t.length-1])?void 0:a.color}};return(e,t)=>(w(),m("div",{class:$([O(s).b(),O(s).m(e.type),O(s).is(e.status),{[O(s).m("without-text")]:!e.showText,[O(s).m("text-inside")]:e.textInside}]),role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"},["line"===e.type?(w(),m("div",{key:0,class:$(O(s).b("bar"))},[j("div",{class:$(O(s).be("bar","outer")),style:I({height:`${e.strokeWidth}px`})},[j("div",{class:$([O(s).be("bar","inner"),{[O(s).bem("bar","inner","indeterminate")]:e.indeterminate},{[O(s).bem("bar","inner","striped")]:e.striped},{[O(s).bem("bar","inner","striped-flow")]:e.stripedFlow}]),style:I(O(r))},[(e.showText||e.$slots.default)&&e.textInside?(w(),m("div",{key:0,class:$(O(s).be("bar","innerText"))},[N(e.$slots,"default",{percentage:e.percentage},()=>[j("span",null,P(O(z)),1)])],2)):x("v-if",!0)],6)],6)],2)):(w(),m("div",{key:1,class:$(O(s).b("circle")),style:I({height:`${e.width}px`,width:`${e.width}px`})},[(w(),m("svg",{viewBox:"0 0 100 100"},[j("path",{class:$(O(s).be("circle","track")),d:O(i),stroke:`var(${O(s).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":e.strokeLinecap,"stroke-width":O(n),fill:"none",style:I(O(T))},null,14,["d","stroke","stroke-linecap","stroke-width"]),j("path",{class:$(O(s).be("circle","path")),d:O(i),stroke:O(_),fill:"none",opacity:e.percentage?1:0,"stroke-linecap":e.strokeLinecap,"stroke-width":O(n),style:I(O(W))},null,14,["d","stroke","opacity","stroke-linecap","stroke-width"])]))],6)),!e.showText&&!e.$slots.default||e.textInside?x("v-if",!0):(w(),m("div",{key:2,class:$(O(s).e("text")),style:I({fontSize:`${O(L)}px`})},[N(e.$slots,"default",{percentage:e.percentage},()=>[e.status?(w(),B(O(S),{key:1},{default:D(()=>[(w(),B(F(O(E))))]),_:1})):(w(),m("span",{key:0},P(O(z)),1))])],6))],10,["aria-valuenow"]))}},t(L,a(z))));var L,z;const M=T(c(E,[["__file","progress.vue"]]));export{M as E};
|
||||
var e=Object.defineProperty,t=Object.defineProperties,a=Object.getOwnPropertyDescriptors,s=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable,o=(t,a,s)=>a in t?e(t,a,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[a]=s;import{a2 as i,ak as l,_ as c,d as p,X as u,c as d,db as f,dc as b,bN as y,b1 as h,b5 as v,bv as g,aa as k,e as m,f as w,k as x,i as $,u as O,h as j,g as N,j as I,m as P,y as B,z as D,au as F,ab as S,ap as T}from"./index-CZ0Lvzl5.js";const W=i({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:l(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:l([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:l(Function),default:e=>`${e}%`}}),_=p({name:"ElProgress"}),E=p((L=((e,t)=>{for(var a in t||(t={}))r.call(t,a)&&o(e,a,t[a]);if(s)for(var a of s(t))n.call(t,a)&&o(e,a,t[a]);return e})({},_),z={props:W,setup(e){const t=e,a={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},s=u("progress"),r=d(()=>{const e={width:`${t.percentage}%`,animationDuration:`${t.duration}s`},a=M(t.percentage);return a.includes("gradient")?e.background=a:e.backgroundColor=a,e}),n=d(()=>(t.strokeWidth/t.width*100).toFixed(1)),o=d(()=>["circle","dashboard"].includes(t.type)?Number.parseInt(""+(50-Number.parseFloat(n.value)/2),10):0),i=d(()=>{const e=o.value,a="dashboard"===t.type;return`\n M 50 50\n m 0 ${a?"":"-"}${e}\n a ${e} ${e} 0 1 1 0 ${a?"-":""}${2*e}\n a ${e} ${e} 0 1 1 0 ${a?"":"-"}${2*e}\n `}),l=d(()=>2*Math.PI*o.value),c=d(()=>"dashboard"===t.type?.75:1),p=d(()=>-1*l.value*(1-c.value)/2+"px"),T=d(()=>({strokeDasharray:`${l.value*c.value}px, ${l.value}px`,strokeDashoffset:p.value})),W=d(()=>({strokeDasharray:`${l.value*c.value*(t.percentage/100)}px, ${l.value}px`,strokeDashoffset:p.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),_=d(()=>{let e;return e=t.color?M(t.percentage):a[t.status]||a.default,e}),E=d(()=>"warning"===t.status?f:"line"===t.type?"success"===t.status?b:y:"success"===t.status?h:v),L=d(()=>"line"===t.type?12+.4*t.strokeWidth:.111111*t.width+2),z=d(()=>t.format(t.percentage)),M=e=>{var a;const{color:s}=t;if(g(s))return s(e);if(k(s))return s;{const t=function(e){const t=100/e.length;return e.map((e,a)=>k(e)?{color:e,percentage:(a+1)*t}:e).sort((e,t)=>e.percentage-t.percentage)}(s);for(const a of t)if(a.percentage>e)return a.color;return null==(a=t[t.length-1])?void 0:a.color}};return(e,t)=>(w(),m("div",{class:$([O(s).b(),O(s).m(e.type),O(s).is(e.status),{[O(s).m("without-text")]:!e.showText,[O(s).m("text-inside")]:e.textInside}]),role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"},["line"===e.type?(w(),m("div",{key:0,class:$(O(s).b("bar"))},[j("div",{class:$(O(s).be("bar","outer")),style:N({height:`${e.strokeWidth}px`})},[j("div",{class:$([O(s).be("bar","inner"),{[O(s).bem("bar","inner","indeterminate")]:e.indeterminate},{[O(s).bem("bar","inner","striped")]:e.striped},{[O(s).bem("bar","inner","striped-flow")]:e.stripedFlow}]),style:N(O(r))},[(e.showText||e.$slots.default)&&e.textInside?(w(),m("div",{key:0,class:$(O(s).be("bar","innerText"))},[I(e.$slots,"default",{percentage:e.percentage},()=>[j("span",null,P(O(z)),1)])],2)):x("v-if",!0)],6)],6)],2)):(w(),m("div",{key:1,class:$(O(s).b("circle")),style:N({height:`${e.width}px`,width:`${e.width}px`})},[(w(),m("svg",{viewBox:"0 0 100 100"},[j("path",{class:$(O(s).be("circle","track")),d:O(i),stroke:`var(${O(s).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":e.strokeLinecap,"stroke-width":O(n),fill:"none",style:N(O(T))},null,14,["d","stroke","stroke-linecap","stroke-width"]),j("path",{class:$(O(s).be("circle","path")),d:O(i),stroke:O(_),fill:"none",opacity:e.percentage?1:0,"stroke-linecap":e.strokeLinecap,"stroke-width":O(n),style:N(O(W))},null,14,["d","stroke","opacity","stroke-linecap","stroke-width"])]))],6)),!e.showText&&!e.$slots.default||e.textInside?x("v-if",!0):(w(),m("div",{key:2,class:$(O(s).e("text")),style:N({fontSize:`${O(L)}px`})},[I(e.$slots,"default",{percentage:e.percentage},()=>[e.status?(w(),B(O(S),{key:1},{default:D(()=>[(w(),B(F(O(E))))]),_:1})):(w(),m("span",{key:0},P(O(z)),1))])],6))],10,["aria-valuenow"]))}},t(L,a(z))));var L,z;const M=T(c(E,[["__file","progress.vue"]]));export{M as E};
|
||||
@ -1 +1 @@
|
||||
var e=Object.defineProperty,s=Object.defineProperties,a=Object.getOwnPropertyDescriptors,t=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,l=(s,a,t)=>a in s?e(s,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[a]=t,o=(e,s)=>{for(var a in s||(s={}))i.call(s,a)&&l(e,a,s[a]);if(t)for(var a of t(s))r.call(s,a)&&l(e,a,s[a]);return e},n=(e,t)=>s(e,a(t));import{a2 as u,a_ as p,_ as c,d as v,X as d,w as f,e as m,f as y,j as S,p as h,u as b,i as g,a8 as w,a7 as x,ae as j,a as $,a3 as O,o as _,c as k,b as E,k as P,h as C,g as z,y as B,z as I,au as q,ab as D,a$ as N,b0 as W,m as V,l as X,aq as A,ap as F}from"./index-DBHnxsy6.js";import{C as G}from"./index-MOpuiu9Z.js";import{u as H}from"./index-y_oew012.js";const J=u({space:{type:[Number,String],default:""},active:{type:Number,default:0},direction:{type:String,default:"horizontal",values:["horizontal","vertical"]},alignCenter:{type:Boolean},simple:{type:Boolean},finishStatus:{type:String,values:["wait","process","finish","error","success"],default:"finish"},processStatus:{type:String,values:["wait","process","finish","error","success"],default:"process"}}),K={[G]:(e,s)=>[e,s].every(p)},L="ElSteps",M=v({name:"ElSteps"});var Q=c(v(n(o({},M),{props:J,emits:K,setup(e,{emit:s}){const a=e,t=d("steps"),{children:i,addChild:r,removeChild:l,ChildrenSorter:o}=H(w(),"ElStep");return f(i,()=>{i.value.forEach((e,s)=>{e.setIndex(s)})}),x(L,{props:a,steps:i,addStep:r,removeStep:l}),f(()=>a.active,(e,a)=>{s(G,e,a)}),(e,s)=>(y(),m("div",{class:g([b(t).b(),b(t).m(e.simple?"simple":e.direction)])},[S(e.$slots,"default"),h(b(o))],2))}})),[["__file","steps.vue"]]);const R=u({title:{type:String,default:""},icon:{type:j},description:{type:String,default:""},status:{type:String,values:["","wait","process","finish","error","success"],default:""}}),T=v({name:"ElStep"});var U=c(v(n(o({},T),{props:R,setup(e){const s=e,a=d("step"),t=$(-1),i=$({}),r=$(""),l=O(L),o=w();_(()=>{f([()=>l.props.active,()=>l.props.processStatus,()=>l.props.finishStatus],([e])=>{J(e)},{immediate:!0})});const n=k(()=>s.status||r.value),u=k(()=>{const e=l.steps.value[t.value-1];return e?e.internalStatus.value:"wait"}),c=k(()=>l.props.alignCenter),v=k(()=>"vertical"===l.props.direction),x=k(()=>l.props.simple),j=k(()=>l.steps.value.length),A=k(()=>{var e;return(null==(e=l.steps.value[j.value-1])?void 0:e.uid)===o.uid}),F=k(()=>x.value?"":l.props.space),G=k(()=>[a.b(),a.is(x.value?"simple":l.props.direction),a.is("flex",A.value&&!F.value&&!c.value),a.is("center",c.value&&!v.value&&!x.value)]),H=k(()=>{const e={flexBasis:p(F.value)?`${F.value}px`:F.value?F.value:100/(j.value-(c.value?0:1))+"%"};return v.value||A.value&&(e.maxWidth=100/j.value+"%"),e}),J=e=>{e>t.value?r.value=l.props.finishStatus:e===t.value&&"error"!==u.value?r.value=l.props.processStatus:r.value="wait";const s=l.steps.value[t.value-1];s&&s.calcProgress(r.value)},K={uid:o.uid,getVnode:()=>o.vnode,currentStatus:n,internalStatus:r,setIndex:e=>{t.value=e},calcProgress:e=>{const s="wait"===e,a={transitionDelay:`${s?"-":""}${150*t.value}ms`},r=e===l.props.processStatus||s?0:100;a.borderWidth=r&&!x.value?"1px":0,a["vertical"===l.props.direction?"height":"width"]=`${r}%`,i.value=a}};return l.addStep(K),E(()=>{l.removeStep(K)}),(e,s)=>(y(),m("div",{style:z(b(H)),class:g(b(G))},[P(" icon & line "),C("div",{class:g([b(a).e("head"),b(a).is(b(n))])},[b(x)?P("v-if",!0):(y(),m("div",{key:0,class:g(b(a).e("line"))},[C("i",{class:g(b(a).e("line-inner")),style:z(i.value)},null,6)],2)),C("div",{class:g([b(a).e("icon"),b(a).is(e.icon||e.$slots.icon?"icon":"text")])},[S(e.$slots,"icon",{},()=>[e.icon?(y(),B(b(D),{key:0,class:g(b(a).e("icon-inner"))},{default:I(()=>[(y(),B(q(e.icon)))]),_:1},8,["class"])):"success"===b(n)?(y(),B(b(D),{key:1,class:g([b(a).e("icon-inner"),b(a).is("status")])},{default:I(()=>[h(b(N))]),_:1},8,["class"])):"error"===b(n)?(y(),B(b(D),{key:2,class:g([b(a).e("icon-inner"),b(a).is("status")])},{default:I(()=>[h(b(W))]),_:1},8,["class"])):b(x)?P("v-if",!0):(y(),m("div",{key:3,class:g(b(a).e("icon-inner"))},V(t.value+1),3))])],2)],2),P(" title & description "),C("div",{class:g(b(a).e("main"))},[C("div",{class:g([b(a).e("title"),b(a).is(b(n))])},[S(e.$slots,"title",{},()=>[X(V(e.title),1)])],2),b(x)?(y(),m("div",{key:0,class:g(b(a).e("arrow"))},null,2)):(y(),m("div",{key:1,class:g([b(a).e("description"),b(a).is(b(n))])},[S(e.$slots,"description",{},()=>[X(V(e.description),1)])],2))],2)],6))}})),[["__file","item.vue"]]);const Y=F(Q,{Step:U}),Z=A(U);export{Y as E,Z as a};
|
||||
var e=Object.defineProperty,s=Object.defineProperties,a=Object.getOwnPropertyDescriptors,t=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable,l=(s,a,t)=>a in s?e(s,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[a]=t,o=(e,s)=>{for(var a in s||(s={}))i.call(s,a)&&l(e,a,s[a]);if(t)for(var a of t(s))r.call(s,a)&&l(e,a,s[a]);return e},n=(e,t)=>s(e,a(t));import{a2 as u,b4 as p,_ as c,d as v,X as d,w as f,e as m,f as y,j as S,p as h,u as b,i as g,a8 as w,a7 as x,ae as j,a as O,a3 as $,o as k,c as _,b as E,k as P,h as C,g as B,y as z,z as I,au as D,ab as N,b1 as W,b5 as q,m as V,l as X,aq as A,ap as F}from"./index-CZ0Lvzl5.js";import{C as G}from"./index-K2zzami3.js";import{u as H}from"./index-BcimyWJU.js";const J=u({space:{type:[Number,String],default:""},active:{type:Number,default:0},direction:{type:String,default:"horizontal",values:["horizontal","vertical"]},alignCenter:{type:Boolean},simple:{type:Boolean},finishStatus:{type:String,values:["wait","process","finish","error","success"],default:"finish"},processStatus:{type:String,values:["wait","process","finish","error","success"],default:"process"}}),K={[G]:(e,s)=>[e,s].every(p)},L="ElSteps",M=v({name:"ElSteps"});var Q=c(v(n(o({},M),{props:J,emits:K,setup(e,{emit:s}){const a=e,t=d("steps"),{children:i,addChild:r,removeChild:l,ChildrenSorter:o}=H(w(),"ElStep");return f(i,()=>{i.value.forEach((e,s)=>{e.setIndex(s)})}),x(L,{props:a,steps:i,addStep:r,removeStep:l}),f(()=>a.active,(e,a)=>{s(G,e,a)}),(e,s)=>(y(),m("div",{class:g([b(t).b(),b(t).m(e.simple?"simple":e.direction)])},[S(e.$slots,"default"),h(b(o))],2))}})),[["__file","steps.vue"]]);const R=u({title:{type:String,default:""},icon:{type:j},description:{type:String,default:""},status:{type:String,values:["","wait","process","finish","error","success"],default:""}}),T=v({name:"ElStep"});var U=c(v(n(o({},T),{props:R,setup(e){const s=e,a=d("step"),t=O(-1),i=O({}),r=O(""),l=$(L),o=w();k(()=>{f([()=>l.props.active,()=>l.props.processStatus,()=>l.props.finishStatus],([e])=>{J(e)},{immediate:!0})});const n=_(()=>s.status||r.value),u=_(()=>{const e=l.steps.value[t.value-1];return e?e.internalStatus.value:"wait"}),c=_(()=>l.props.alignCenter),v=_(()=>"vertical"===l.props.direction),x=_(()=>l.props.simple),j=_(()=>l.steps.value.length),A=_(()=>{var e;return(null==(e=l.steps.value[j.value-1])?void 0:e.uid)===o.uid}),F=_(()=>x.value?"":l.props.space),G=_(()=>[a.b(),a.is(x.value?"simple":l.props.direction),a.is("flex",A.value&&!F.value&&!c.value),a.is("center",c.value&&!v.value&&!x.value)]),H=_(()=>{const e={flexBasis:p(F.value)?`${F.value}px`:F.value?F.value:100/(j.value-(c.value?0:1))+"%"};return v.value||A.value&&(e.maxWidth=100/j.value+"%"),e}),J=e=>{e>t.value?r.value=l.props.finishStatus:e===t.value&&"error"!==u.value?r.value=l.props.processStatus:r.value="wait";const s=l.steps.value[t.value-1];s&&s.calcProgress(r.value)},K={uid:o.uid,getVnode:()=>o.vnode,currentStatus:n,internalStatus:r,setIndex:e=>{t.value=e},calcProgress:e=>{const s="wait"===e,a={transitionDelay:`${s?"-":""}${150*t.value}ms`},r=e===l.props.processStatus||s?0:100;a.borderWidth=r&&!x.value?"1px":0,a["vertical"===l.props.direction?"height":"width"]=`${r}%`,i.value=a}};return l.addStep(K),E(()=>{l.removeStep(K)}),(e,s)=>(y(),m("div",{style:B(b(H)),class:g(b(G))},[P(" icon & line "),C("div",{class:g([b(a).e("head"),b(a).is(b(n))])},[b(x)?P("v-if",!0):(y(),m("div",{key:0,class:g(b(a).e("line"))},[C("i",{class:g(b(a).e("line-inner")),style:B(i.value)},null,6)],2)),C("div",{class:g([b(a).e("icon"),b(a).is(e.icon||e.$slots.icon?"icon":"text")])},[S(e.$slots,"icon",{},()=>[e.icon?(y(),z(b(N),{key:0,class:g(b(a).e("icon-inner"))},{default:I(()=>[(y(),z(D(e.icon)))]),_:1},8,["class"])):"success"===b(n)?(y(),z(b(N),{key:1,class:g([b(a).e("icon-inner"),b(a).is("status")])},{default:I(()=>[h(b(W))]),_:1},8,["class"])):"error"===b(n)?(y(),z(b(N),{key:2,class:g([b(a).e("icon-inner"),b(a).is("status")])},{default:I(()=>[h(b(q))]),_:1},8,["class"])):b(x)?P("v-if",!0):(y(),m("div",{key:3,class:g(b(a).e("icon-inner"))},V(t.value+1),3))])],2)],2),P(" title & description "),C("div",{class:g(b(a).e("main"))},[C("div",{class:g([b(a).e("title"),b(a).is(b(n))])},[S(e.$slots,"title",{},()=>[X(V(e.title),1)])],2),b(x)?(y(),m("div",{key:0,class:g(b(a).e("arrow"))},null,2)):(y(),m("div",{key:1,class:g([b(a).e("description"),b(a).is(b(n))])},[S(e.$slots,"description",{},()=>[X(V(e.description),1)])],2))],2)],6))}})),[["__file","item.vue"]]);const Y=F(Q,{Step:U}),Z=A(U);export{Y as E,Z as a};
|
||||
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/el-table-column-CioBjwcM.js.gz
Normal file
BIN
build/resources/admin/assets/el-table-column-CioBjwcM.js.gz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
BIN
build/resources/admin/assets/el-upload-D-fp67h1.js.gz
Normal file
BIN
build/resources/admin/assets/el-upload-D-fp67h1.js.gz
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user