Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c4d696344 | ||
|
|
729d2a084d |
@@ -116,6 +116,17 @@
|
|||||||
<view class="menu-arrow">›</view>
|
<view class="menu-arrow">›</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<view class="menu-item" @click="goto('/training/pages/camera-grip-ring')">
|
||||||
|
<view class="menu-icon menu-icon--grip">
|
||||||
|
<view class="grip-ring-shape" />
|
||||||
|
</view>
|
||||||
|
<view class="menu-info">
|
||||||
|
<text class="menu-title">握力环 2.0</text>
|
||||||
|
<text class="menu-sub">摄像头识别 · 试玩</text>
|
||||||
|
</view>
|
||||||
|
<view class="menu-arrow">›</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<view class="menu-item" @click="goto('/training/pages/metronome')">
|
<view class="menu-item" @click="goto('/training/pages/metronome')">
|
||||||
<view class="menu-icon menu-icon--metro">
|
<view class="menu-icon menu-icon--metro">
|
||||||
<view class="metro-bar metro-bar-1" />
|
<view class="metro-bar metro-bar-1" />
|
||||||
@@ -163,6 +174,7 @@ const trainingItems: TrainingItem[] = [
|
|||||||
{ url: '/training/pages/foot-pedal', title: '脚蹬器', sub: '下肢有氧', icon: 'pedal', iconClass: 'menu-icon--pedal' },
|
{ url: '/training/pages/foot-pedal', title: '脚蹬器', sub: '下肢有氧', icon: 'pedal', iconClass: 'menu-icon--pedal' },
|
||||||
{ url: '/training/pages/pilates-ring', title: '瑜伽环', sub: '核心塑形', icon: 'pilates', iconClass: 'menu-icon--pilates' },
|
{ url: '/training/pages/pilates-ring', title: '瑜伽环', sub: '核心塑形', icon: 'pilates', iconClass: 'menu-icon--pilates' },
|
||||||
{ url: '/training/pages/grip-ring', title: '握力环', sub: '握力训练', icon: 'grip', iconClass: 'menu-icon--grip' },
|
{ url: '/training/pages/grip-ring', title: '握力环', sub: '握力训练', icon: 'grip', iconClass: 'menu-icon--grip' },
|
||||||
|
{ url: '/training/pages/camera-grip-ring', title: '握力环 2.0', sub: '摄像头识别', icon: 'grip', iconClass: 'menu-icon--grip' },
|
||||||
{ url: '/training/pages/metronome', title: '耗糖节拍器', sub: '健走配速', icon: 'metro', iconClass: 'menu-icon--metro', featured: true },
|
{ url: '/training/pages/metronome', title: '耗糖节拍器', sub: '健走配速', icon: 'metro', iconClass: 'menu-icon--metro', featured: true },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,17 @@
|
|||||||
"backgroundColor": "#f8fafc"
|
"backgroundColor": "#f8fafc"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/camera-grip-ring",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"navigationBarTitleText": "握力环训练 2.0",
|
||||||
|
"navigationBarBackgroundColor": "#F8FAFC",
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"backgroundColor": "#F8FAFC",
|
||||||
|
"disableScroll": true
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/pilates-ring",
|
"path": "pages/pilates-ring",
|
||||||
"style": {
|
"style": {
|
||||||
@@ -223,15 +234,6 @@
|
|||||||
"backgroundColor": "#c7d2fe",
|
"backgroundColor": "#c7d2fe",
|
||||||
"disableScroll": true
|
"disableScroll": true
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "endless-game/index",
|
|
||||||
"style": {
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
"navigationBarTitleText": "控糖消消乐",
|
|
||||||
"backgroundColor": "#eefbf4",
|
|
||||||
"disableScroll": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
# 控糖消消乐独立功能包
|
|
||||||
|
|
||||||
此目录包含“控糖消消乐”无尽三消版的页面与运行代码,可以整体复制到另一个 uni-app Vue 3 项目的 `tongji/endless-game/` 下。食品图片由远端 COS 提供,不再存放于功能目录中。
|
|
||||||
|
|
||||||
## 目录内容
|
|
||||||
|
|
||||||
- `index.vue`:页面、棋盘算法、关卡主题、任务、道具、三/四/五连奖励和适老化交互。
|
|
||||||
- `game-endless.scss`:完整页面与动画样式。
|
|
||||||
- `components/TongjiIcon.vue`:本功能包使用的图标组件。
|
|
||||||
- `composables/useGameSfx.js`:滑动、掉落、消除、连击和大奖音效。
|
|
||||||
- `utils/svgDataUrl.js`:图标编码工具。
|
|
||||||
|
|
||||||
## 迁移步骤
|
|
||||||
|
|
||||||
1. 整体复制 `endless-game` 文件夹到目标项目的 `tongji/` 目录。
|
|
||||||
2. 在目标项目 `pages.json` 的 `tongji` 分包 `pages` 数组中加入:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"path": "endless-game/index",
|
|
||||||
"style": {
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
"navigationBarTitleText": "控糖消消乐",
|
|
||||||
"backgroundColor": "#eefbf4",
|
|
||||||
"disableScroll": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
3. 使用 `/tongji/endless-game/index` 打开游戏。
|
|
||||||
4. 微信小程序后台需要将 `https://gz-1349751149.cos.ap-guangzhou.myqcloud.com` 配置为合法的音频与图片下载域名。
|
|
||||||
|
|
||||||
## 说明
|
|
||||||
|
|
||||||
- 当前项目另有 `/tongji/pages/game` 页面,不属于本独立功能包,迁移时无需复制。
|
|
||||||
- 食品图片固定使用 `https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/games/food/` 前缀,文件名必须与 `FOODS` 配置 key 的大小写保持一致。
|
|
||||||
- 连消小目标按“连消×2”累计 2 次;连续 6 次普通消除没有连消时,下一次掉落会提供连消机会。“连消×3”保留为额外积分、驼乳粉与撒花惊喜,不阻挡主线任务。
|
|
||||||
- 横向 3 个与竖向 3 个相交形成 L/T 形五消时,会在交点生成带高对比 L 标记的范围爆破棋子;该棋子再次被消除时清除周围九格。
|
|
||||||
- 进入游戏时展示“本周 7 人同行榜”界面原型,包含前后名次、差距提示和可切换的同行/亲友鼓励;顶部“本周同行”可再次打开。当前榜单明确标注为预览数据,正式用户关系和周榜成绩需要后端接口接入。
|
|
||||||
- 本功能包依赖 uni-app Vue 3 和 `@dcloudio/uni-app`,不依赖当前项目其他业务组件。
|
|
||||||
- 食物风险等级和科普文案集中在 `index.vue` 的 `FOODS` 配置中,正式上线前仍需由医院医生审核。
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="tj-icon-wrap" :class="[`tj-icon-wrap--${size}`]">
|
|
||||||
<image
|
|
||||||
v-if="!useFallback"
|
|
||||||
class="tj-icon"
|
|
||||||
:class="[`tj-icon--${name}`, `tj-icon--${size}`]"
|
|
||||||
:src="iconSrc"
|
|
||||||
mode="aspectFit"
|
|
||||||
@error="onImageError"
|
|
||||||
/>
|
|
||||||
<!-- <text
|
|
||||||
v-else
|
|
||||||
class="tj-icon-fallback"
|
|
||||||
:class="[`tj-icon-fallback--${size}`]"
|
|
||||||
:style="{ color }"
|
|
||||||
>{{ fallbackGlyph }}</text> -->
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
import { computed, ref } from 'vue'
|
|
||||||
import { svgToDataUrl } from '../utils/svgDataUrl.js'
|
|
||||||
|
|
||||||
const props = defineProps({
|
|
||||||
name: { type: String, required: true },
|
|
||||||
size: { type: String, default: 'md' },
|
|
||||||
color: { type: String, default: '#204E2B' }
|
|
||||||
})
|
|
||||||
|
|
||||||
const useFallback = ref(false)
|
|
||||||
|
|
||||||
/** Lucide 风格描边路径 */
|
|
||||||
const ICON_PATHS = {
|
|
||||||
view: '<path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z"/><circle cx="12" cy="12" r="3"/>',
|
|
||||||
ticket: '<path d="M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"/><path d="M13 5v2"/><path d="M13 17v2"/><path d="M13 11v2"/>',
|
|
||||||
calendar: '<rect width="18" height="18" x="3" y="4" rx="2"/><path d="M16 2v4M8 2v4M3 10h18"/>',
|
|
||||||
flame: '<path d="M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"/>',
|
|
||||||
'check-circle': '<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',
|
|
||||||
glucose: '<path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"/>',
|
|
||||||
heart: '<path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/>',
|
|
||||||
activity: '<path d="M22 12h-4l-3 9L9 3l-3 9H2"/>',
|
|
||||||
users: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/>',
|
|
||||||
user: '<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',
|
|
||||||
person: '<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',
|
|
||||||
send: '<path d="m22 2-7 20-4-9-9-4Z"/><path d="M22 2 11 13"/>',
|
|
||||||
'alert-triangle': '<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z"/><path d="M12 9v4"/><path d="M12 17h.01"/>',
|
|
||||||
minus: '<path d="M5 12h14"/>',
|
|
||||||
droplet: '<path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.5-2.5-5.5C15 7 12 2 12 2S9 7 7.5 9.5 5 13 5 15a7 7 0 0 0 7 7z"/>',
|
|
||||||
sparkles: '<path d="m12 3-1.9 5.8L4 12l5.8 1.9L12 21l1.9-5.8L20 12l-5.8-1.9L12 3Z"/><path d="M5 3v4M19 17v4M3 5h4M17 19h4"/>',
|
|
||||||
trophy: '<path d="M6 9H4.5a2.5 2.5 0 0 1 0-5H6M18 9h1.5a2.5 2.5 0 0 0 0-5H18M4 22h16M10 14.66V17c0 .55-.47.98-.97 1.21C7.85 18.75 7 20 7 22M14 14.66V17c0 .55.47.98.97 1.21C16.15 18.75 17 20 17 22M18 2H6v7a6 6 0 0 0 12 0V2Z"/>',
|
|
||||||
share: '<path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8M16 6l-4-4-4 4M12 2v13"/>',
|
|
||||||
plus: '<path d="M5 12h14M12 5v14"/>',
|
|
||||||
refresh: '<path d="M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8M3 3v5h5M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16M21 21v-5h-5"/>',
|
|
||||||
volume: '<path d="M11 5 6 9H2v6h4l5 4V5zM15.54 8.46a5 5 0 0 1 0 7.07M19.07 4.93a10 10 0 0 1 0 14.14"/>',
|
|
||||||
pause: '<rect width="4" height="16" x="14" y="4" rx="1"/><rect width="4" height="16" x="6" y="4" rx="1"/>',
|
|
||||||
play: '<polygon points="6 3 20 12 6 21 6 3"/>',
|
|
||||||
info: '<circle cx="12" cy="12" r="10"/><path d="M12 16v-4M12 8h.01"/>',
|
|
||||||
sun: '<circle cx="12" cy="12" r="4"/><path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41-1.41M17.66 6.34l1.41-1.41M6.34 4.93l1.41 1.41"/>',
|
|
||||||
moon: '<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/>',
|
|
||||||
sunset: '<path d="M12 10V2M18.364 5.636l-2.12 2.12M5.636 18.364l2.12-2.12M22 18h-3M5 18H2M18.364 18.364l-2.12-2.12M5.636 5.636l2.12 2.12M16 12a4 4 0 1 1-8 0 4 4 0 0 1 8 0Z"/>',
|
|
||||||
mic: '<path d="M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z"/><path d="M19 10v2a7 7 0 0 1-14 0v-2"/><line x1="12" x2="12" y1="19" y2="22"/>',
|
|
||||||
camera: '<path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z"/><circle cx="12" cy="13" r="3"/>',
|
|
||||||
bulb: '<path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1.3.5 2.6 1.5 3.5.8.8 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/>',
|
|
||||||
leaf: '<path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z"/><path d="M2 21c0-3 1.85-5.36 5.08-6"/>',
|
|
||||||
utensils: '<path d="M3 2v7c0 1.1.9 2 2 2a2 2 0 0 0 2-2V2"/><path d="M7 2v20"/><path d="M21 15V2a5 5 0 0 0-3 4.5v6a2 2 0 0 0 2 2h1Z"/><path d="M18 15v7"/>',
|
|
||||||
egg: '<path d="M12 22c4.97 0 8-3.27 8-7.31C20 9.65 16.42 2 12 2S4 9.65 4 14.69C4 18.73 7.03 22 12 22Z"/>',
|
|
||||||
home: '<path d="m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/><polyline points="9 22 9 12 15 12 15 22"/>',
|
|
||||||
'plus-circle': '<circle cx="12" cy="12" r="10"/><path d="M8 12h8M12 8v8"/>',
|
|
||||||
'chevron-right': '<path d="m9 18 6-6-6-6"/>',
|
|
||||||
'chevron-left': '<path d="m15 18-6-6 6-6"/>',
|
|
||||||
check: '<path d="M20 6 9 17l-5-5"/>',
|
|
||||||
settings: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/>',
|
|
||||||
syringe: '<path d="m18 2 4 4"/><path d="m17 7 3-3"/><path d="M19 9 8.7 19.3c-1 1-2.5 1-3.4 0l-.6-.6c-1-1-1-2.5 0-3.4L15 5"/><path d="m9 11 4 4"/><path d="m5 19-3 3"/><path d="m14 4 6 6"/>',
|
|
||||||
zap: '<path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"/>'
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 图片加载失败时的 emoji 回退 */
|
|
||||||
const ICON_FALLBACK = {
|
|
||||||
view: '👁',
|
|
||||||
ticket: '🎫',
|
|
||||||
calendar: '📅',
|
|
||||||
flame: '🔥',
|
|
||||||
'check-circle': '✓',
|
|
||||||
glucose: '💧',
|
|
||||||
heart: '❤',
|
|
||||||
activity: '🏃',
|
|
||||||
users: '👥',
|
|
||||||
user: '👤',
|
|
||||||
person: '👤',
|
|
||||||
send: '➤',
|
|
||||||
'alert-triangle': '⚠',
|
|
||||||
minus: '—',
|
|
||||||
droplet: '💧',
|
|
||||||
sparkles: '✨',
|
|
||||||
trophy: '🏆',
|
|
||||||
share: '↗',
|
|
||||||
plus: '+',
|
|
||||||
refresh: '↻',
|
|
||||||
volume: '🔊',
|
|
||||||
pause: '⏸',
|
|
||||||
play: '▶',
|
|
||||||
info: '!',
|
|
||||||
sun: '☀',
|
|
||||||
moon: '🌙',
|
|
||||||
sunset: '☀',
|
|
||||||
mic: '🎤',
|
|
||||||
camera: '📷',
|
|
||||||
bulb: '💡',
|
|
||||||
leaf: '🥬',
|
|
||||||
utensils: '🍴',
|
|
||||||
egg: '🍳',
|
|
||||||
home: '🏠',
|
|
||||||
'plus-circle': '⊕',
|
|
||||||
'chevron-right': '›',
|
|
||||||
'chevron-left': '‹',
|
|
||||||
check: '✓',
|
|
||||||
settings: '⚙',
|
|
||||||
syringe: '💉',
|
|
||||||
zap: '⚡'
|
|
||||||
}
|
|
||||||
|
|
||||||
const strokeColor = computed(() => {
|
|
||||||
const c = String(props.color || '#204E2B').trim()
|
|
||||||
return /^#[0-9A-Fa-f]{3,8}$/.test(c) ? c : '#204E2B'
|
|
||||||
})
|
|
||||||
|
|
||||||
const iconSrc = computed(() => {
|
|
||||||
const path = ICON_PATHS[props.name] || ICON_PATHS.view
|
|
||||||
const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="${strokeColor.value}" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${path}</svg>`
|
|
||||||
return svgToDataUrl(svg)
|
|
||||||
})
|
|
||||||
|
|
||||||
const fallbackGlyph = computed(() => ICON_FALLBACK[props.name] || ICON_FALLBACK.view)
|
|
||||||
|
|
||||||
function onImageError() {
|
|
||||||
useFallback.value = true
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.tj-icon-wrap {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
.tj-icon-wrap--sm {
|
|
||||||
width: 32rpx;
|
|
||||||
height: 32rpx;
|
|
||||||
}
|
|
||||||
.tj-icon-wrap--md {
|
|
||||||
width: 40rpx;
|
|
||||||
height: 40rpx;
|
|
||||||
}
|
|
||||||
.tj-icon-wrap--lg {
|
|
||||||
width: 48rpx;
|
|
||||||
height: 48rpx;
|
|
||||||
}
|
|
||||||
.tj-icon-wrap--xl {
|
|
||||||
width: 56rpx;
|
|
||||||
height: 56rpx;
|
|
||||||
}
|
|
||||||
.tj-icon {
|
|
||||||
display: block;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
/* Lucide send 路径重心偏右上,微调使圆形按钮内视觉居中 */
|
|
||||||
.tj-icon--send {
|
|
||||||
transform: translate(-10%, 10%);
|
|
||||||
}
|
|
||||||
.tj-icon-fallback {
|
|
||||||
display: block;
|
|
||||||
line-height: 1;
|
|
||||||
font-weight: 700;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.tj-icon-fallback--sm {
|
|
||||||
font-size: 24rpx;
|
|
||||||
}
|
|
||||||
.tj-icon-fallback--md {
|
|
||||||
font-size: 30rpx;
|
|
||||||
}
|
|
||||||
.tj-icon-fallback--lg {
|
|
||||||
font-size: 36rpx;
|
|
||||||
}
|
|
||||||
.tj-icon-fallback--xl {
|
|
||||||
font-size: 42rpx;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,350 +0,0 @@
|
|||||||
/**
|
|
||||||
* 糖分突袭 · 游戏音效(InnerAudioContext 池化,H5/小程序通用)
|
|
||||||
* 每种操作独立音轨 + playbackRate 变调,避免“全是同一个声”
|
|
||||||
*/
|
|
||||||
import { ref, onUnmounted } from 'vue'
|
|
||||||
|
|
||||||
const STORAGE_KEY = 'tongji_game_sfx_enabled'
|
|
||||||
const COS = 'https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file'
|
|
||||||
|
|
||||||
/** 9 条基础素材(已上传 COS,小程序域名白名单内) */
|
|
||||||
const SRC = {
|
|
||||||
tap: `${COS}/20260526/20260526105128557ef8669.mp3`,
|
|
||||||
swoosh: `${COS}/20260527/202605271539371ebe13672.mp3`,
|
|
||||||
pop: `${COS}/20260526/202605261051282a0a94508.mp3`,
|
|
||||||
buzz: `${COS}/20260527/202605271539376ff628472.mp3`,
|
|
||||||
chime: `${COS}/20260528/202605280937077bad76716.mp3`,
|
|
||||||
fanfare: `${COS}/20260528/20260528093707b021f5794.mp3`,
|
|
||||||
blast: `${COS}/20260528/20260528093707ebd4d5733.mp3`,
|
|
||||||
sparkle: `${COS}/20260528/20260528093707016f07427.mp3`,
|
|
||||||
stinger: `${COS}/20260528/20260528093709c669f4659.mp3`
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 音效表:src / volume / rate(playbackRate) / pool
|
|
||||||
* rate 不同可在同一素材上听出明显差异
|
|
||||||
*/
|
|
||||||
const SFX = {
|
|
||||||
// —— 基础素材别名(供分层音效直接调用)——
|
|
||||||
tap: { src: SRC.tap, volume: 0.32, rate: 1, pool: 3 },
|
|
||||||
pop: { src: SRC.pop, volume: 0.3, rate: 1, pool: 4 },
|
|
||||||
fanfare: { src: SRC.fanfare, volume: 0.56, rate: 1, pool: 2 },
|
|
||||||
blast: { src: SRC.blast, volume: 0.62, rate: 1, pool: 2 },
|
|
||||||
sparkle: { src: SRC.sparkle, volume: 0.5, rate: 1, pool: 2 },
|
|
||||||
|
|
||||||
// —— 交互 ——
|
|
||||||
select: { src: SRC.tap, volume: 0.32, rate: 1.05, pool: 3 },
|
|
||||||
deselect: { src: SRC.tap, volume: 0.22, rate: 0.82, pool: 2 },
|
|
||||||
hint: { src: SRC.tap, volume: 0.26, rate: 1.28, pool: 2 },
|
|
||||||
|
|
||||||
swap: { src: SRC.swoosh, volume: 0.38, rate: 1.0, pool: 3 },
|
|
||||||
swapFail: { src: SRC.buzz, volume: 0.36, rate: 1.18, pool: 2 },
|
|
||||||
|
|
||||||
drop: { src: SRC.pop, volume: 0.3, rate: 0.88, pool: 4 },
|
|
||||||
dropLight: { src: SRC.pop, volume: 0.22, rate: 1.22, pool: 2 },
|
|
||||||
|
|
||||||
// —— 消除(按连数)——
|
|
||||||
match3: { src: SRC.chime, volume: 0.48, rate: 1.0, pool: 4 },
|
|
||||||
match4: { src: SRC.fanfare, volume: 0.54, rate: 1.06, pool: 3 },
|
|
||||||
match5: { src: SRC.blast, volume: 0.62, rate: 1.0, pool: 3 },
|
|
||||||
|
|
||||||
// —— 消除(按 GI 主色)——
|
|
||||||
matchLowGi: { src: SRC.chime, volume: 0.42, rate: 0.86, pool: 2 },
|
|
||||||
matchMidGi: { src: SRC.chime, volume: 0.46, rate: 1.02, pool: 2 },
|
|
||||||
matchHighGi: { src: SRC.buzz, volume: 0.44, rate: 0.92, pool: 2 },
|
|
||||||
|
|
||||||
// —— 连消 ——
|
|
||||||
combo2: { src: SRC.fanfare, volume: 0.56, rate: 1.12, pool: 2 },
|
|
||||||
combo3: { src: SRC.blast, volume: 0.64, rate: 1.08, pool: 2 },
|
|
||||||
comboMega: { src: SRC.blast, volume: 0.72, rate: 1.22, pool: 2 },
|
|
||||||
|
|
||||||
// —— 道具 ——
|
|
||||||
insulin: { src: SRC.sparkle, volume: 0.5, rate: 1.15, pool: 2 },
|
|
||||||
fiber: { src: SRC.swoosh, volume: 0.48, rate: 1.32, pool: 2 },
|
|
||||||
meal: { src: SRC.stinger, volume: 0.42, rate: 1.35, pool: 1 },
|
|
||||||
reshuffle: { src: SRC.swoosh, volume: 0.46, rate: 0.72, pool: 2 },
|
|
||||||
|
|
||||||
// —— 反馈 ——
|
|
||||||
score: { src: SRC.tap, volume: 0.28, rate: 1.38, pool: 2 },
|
|
||||||
goalTick: { src: SRC.chime, volume: 0.36, rate: 1.45, pool: 2 },
|
|
||||||
meterWarn: { src: SRC.buzz, volume: 0.5, rate: 1.0, pool: 2 },
|
|
||||||
meterDanger: { src: SRC.buzz, volume: 0.58, rate: 0.78, pool: 2 },
|
|
||||||
meterStable: { src: SRC.pop, volume: 0.24, rate: 1.05, pool: 1 },
|
|
||||||
|
|
||||||
win: { src: SRC.fanfare, volume: 0.66, rate: 1.0, pool: 1 },
|
|
||||||
winStinger: { src: SRC.stinger, volume: 0.38, rate: 1.5, pool: 1 },
|
|
||||||
lose: { src: SRC.buzz, volume: 0.52, rate: 0.68, pool: 1 },
|
|
||||||
|
|
||||||
// 兼容旧名
|
|
||||||
match: { src: SRC.chime, volume: 0.48, rate: 1.0, pool: 4 },
|
|
||||||
combo: { src: SRC.fanfare, volume: 0.56, rate: 1.1, pool: 3 },
|
|
||||||
heal: { src: SRC.pop, volume: 0.44, rate: 1.18, pool: 2 },
|
|
||||||
boost: { src: SRC.sparkle, volume: 0.52, rate: 1.0, pool: 2 },
|
|
||||||
invalid: { src: SRC.buzz, volume: 0.4, rate: 1.15, pool: 2 },
|
|
||||||
danger: { src: SRC.blast, volume: 0.58, rate: 0.95, pool: 2 }
|
|
||||||
}
|
|
||||||
|
|
||||||
const WARMUP_SFX = [
|
|
||||||
'select', 'swap', 'swapFail', 'drop', 'dropLight',
|
|
||||||
'match3', 'match4', 'match5', 'combo2', 'combo3', 'comboMega',
|
|
||||||
'insulin', 'sparkle', 'reshuffle', 'lose'
|
|
||||||
]
|
|
||||||
|
|
||||||
function createAudioContext() {
|
|
||||||
if (typeof Audio !== 'undefined') {
|
|
||||||
const audio = new Audio()
|
|
||||||
audio.preload = 'auto'
|
|
||||||
return {
|
|
||||||
get src() { return audio.src },
|
|
||||||
set src(value) { audio.src = value },
|
|
||||||
get volume() { return audio.volume },
|
|
||||||
set volume(value) { audio.volume = value },
|
|
||||||
get playbackRate() { return audio.playbackRate },
|
|
||||||
set playbackRate(value) { audio.playbackRate = value },
|
|
||||||
play() {
|
|
||||||
const promise = audio.play()
|
|
||||||
if (promise?.catch) promise.catch(() => {})
|
|
||||||
},
|
|
||||||
stop() {
|
|
||||||
audio.pause()
|
|
||||||
try { audio.currentTime = 0 } catch (_) {}
|
|
||||||
},
|
|
||||||
seek(time) {
|
|
||||||
try { audio.currentTime = time } catch (_) {}
|
|
||||||
},
|
|
||||||
destroy() {
|
|
||||||
audio.pause()
|
|
||||||
audio.removeAttribute('src')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return uni.createInnerAudioContext()
|
|
||||||
}
|
|
||||||
|
|
||||||
class SfxPool {
|
|
||||||
constructor(src, size, volume, rate = 1) {
|
|
||||||
this.src = src
|
|
||||||
this.size = size
|
|
||||||
this.volume = volume
|
|
||||||
this.rate = rate
|
|
||||||
this.list = []
|
|
||||||
this.cursor = 0
|
|
||||||
this.warmedUp = false
|
|
||||||
}
|
|
||||||
|
|
||||||
createOne() {
|
|
||||||
const ctx = createAudioContext()
|
|
||||||
ctx.src = this.src
|
|
||||||
ctx.obeyMuteSwitch = false
|
|
||||||
ctx.autoplay = false
|
|
||||||
ctx.volume = this.volume
|
|
||||||
try {
|
|
||||||
ctx.playbackRate = this.rate
|
|
||||||
} catch (_) {}
|
|
||||||
this.list.push(ctx)
|
|
||||||
return ctx
|
|
||||||
}
|
|
||||||
|
|
||||||
create() {
|
|
||||||
while (this.list.length < this.size) this.createOne()
|
|
||||||
}
|
|
||||||
|
|
||||||
warmUp() {
|
|
||||||
if (this.warmedUp) return
|
|
||||||
const ctx = this.list[0] || this.createOne()
|
|
||||||
try {
|
|
||||||
ctx.volume = 0
|
|
||||||
ctx.play()
|
|
||||||
setTimeout(() => {
|
|
||||||
try {
|
|
||||||
ctx.stop()
|
|
||||||
ctx.volume = this.volume
|
|
||||||
} catch (_) {}
|
|
||||||
}, 60)
|
|
||||||
} catch (_) {}
|
|
||||||
if (this.size > 1) this.cursor = 1
|
|
||||||
this.warmedUp = true
|
|
||||||
}
|
|
||||||
|
|
||||||
play(scale = 1, rateMul = 1) {
|
|
||||||
if (this.list.length < this.size) this.create()
|
|
||||||
const ctx = this.list[this.cursor % this.list.length]
|
|
||||||
this.cursor += 1
|
|
||||||
const vol = Math.min(1, this.volume * scale)
|
|
||||||
const rate = Math.min(2, Math.max(0.5, this.rate * rateMul))
|
|
||||||
try {
|
|
||||||
ctx.volume = vol
|
|
||||||
try {
|
|
||||||
ctx.playbackRate = rate
|
|
||||||
} catch (_) {}
|
|
||||||
ctx.stop()
|
|
||||||
ctx.seek(0)
|
|
||||||
ctx.play()
|
|
||||||
} catch (_) {
|
|
||||||
try {
|
|
||||||
ctx.play()
|
|
||||||
} catch (e) {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy() {
|
|
||||||
this.list.forEach((ctx) => {
|
|
||||||
try {
|
|
||||||
ctx.stop()
|
|
||||||
ctx.destroy()
|
|
||||||
} catch (_) {}
|
|
||||||
})
|
|
||||||
this.list = []
|
|
||||||
this.warmedUp = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function dominantGi(tiles = []) {
|
|
||||||
const cnt = { low: 0, mid: 0, high: 0 }
|
|
||||||
tiles.forEach((t) => {
|
|
||||||
const g = t?.type?.gi
|
|
||||||
if (g && cnt[g] !== undefined) cnt[g] += 1
|
|
||||||
})
|
|
||||||
let best = 'mid'
|
|
||||||
let max = 0
|
|
||||||
Object.entries(cnt).forEach(([k, v]) => {
|
|
||||||
if (v > max) {
|
|
||||||
max = v
|
|
||||||
best = k
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return best
|
|
||||||
}
|
|
||||||
|
|
||||||
export function useGameSfx() {
|
|
||||||
const enabled = ref(true)
|
|
||||||
const pools = {}
|
|
||||||
|
|
||||||
try {
|
|
||||||
const stored = uni.getStorageSync(STORAGE_KEY)
|
|
||||||
if (stored === false || stored === '0' || stored === 0) {
|
|
||||||
enabled.value = false
|
|
||||||
}
|
|
||||||
} catch (_) {}
|
|
||||||
|
|
||||||
function ensureAudioOption() {
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
try {
|
|
||||||
uni.setInnerAudioOption({
|
|
||||||
obeyMuteSwitch: false,
|
|
||||||
mixWithOther: true
|
|
||||||
})
|
|
||||||
} catch (_) {}
|
|
||||||
// #endif
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPool(name) {
|
|
||||||
const cfg = SFX[name]
|
|
||||||
if (!cfg) return null
|
|
||||||
if (!pools[name]) {
|
|
||||||
pools[name] = new SfxPool(cfg.src, cfg.pool, cfg.volume, cfg.rate ?? 1)
|
|
||||||
}
|
|
||||||
return pools[name]
|
|
||||||
}
|
|
||||||
|
|
||||||
function warmUp() {
|
|
||||||
if (!enabled.value) return
|
|
||||||
ensureAudioOption()
|
|
||||||
const names = typeof Audio !== 'undefined' ? ['select'] : WARMUP_SFX
|
|
||||||
names.forEach((name) => {
|
|
||||||
getPool(name)?.warmUp()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
function play(name, scale = 1, rateMul = 1) {
|
|
||||||
if (!enabled.value) return
|
|
||||||
getPool(name)?.play(scale, rateMul)
|
|
||||||
}
|
|
||||||
|
|
||||||
function playLayer(primary, secondary, delayMs = 70, secScale = 0.6) {
|
|
||||||
play(primary)
|
|
||||||
if (secondary) {
|
|
||||||
setTimeout(() => play(secondary, secScale), delayMs)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function playMatch({ matchCount = 3, chain = 0, tiles = [] } = {}) {
|
|
||||||
if (!enabled.value) return
|
|
||||||
const giTrack = (() => {
|
|
||||||
const gi = dominantGi(tiles)
|
|
||||||
if (gi === 'low') return 'matchLowGi'
|
|
||||||
if (gi === 'high') return 'matchHighGi'
|
|
||||||
return 'matchMidGi'
|
|
||||||
})()
|
|
||||||
|
|
||||||
if (chain >= 3) {
|
|
||||||
playLayer('comboMega', giTrack, 90, 0.55)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (chain === 2) {
|
|
||||||
playLayer('combo3', giTrack, 80, 0.5)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (chain === 1) {
|
|
||||||
playLayer('combo2', giTrack, 70, 0.45)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (matchCount >= 5) {
|
|
||||||
playLayer('match5', 'matchHighGi', 85, 0.5)
|
|
||||||
} else if (matchCount >= 4) {
|
|
||||||
playLayer('match4', giTrack, 65, 0.48)
|
|
||||||
} else {
|
|
||||||
play(giTrack, 1, 1)
|
|
||||||
setTimeout(() => play('match3', 0.85), 40)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function playDrop(count = 1) {
|
|
||||||
if (!enabled.value || count <= 0) return
|
|
||||||
const name = count >= 4 ? 'drop' : 'dropLight'
|
|
||||||
play(name, Math.min(1.2, 0.85 + count * 0.04), count >= 6 ? 0.9 : 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
function playMeter(delta, level) {
|
|
||||||
if (!enabled.value) return
|
|
||||||
if (level > 70) play('meterDanger', 1 + (level - 70) * 0.02)
|
|
||||||
else if (level < 30) play('meterWarn', 0.9, 0.95)
|
|
||||||
else if (delta > 8) play('meterWarn', 0.75)
|
|
||||||
else if (delta < -5) play('meterStable', 1.1)
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleEnabled() {
|
|
||||||
enabled.value = !enabled.value
|
|
||||||
try {
|
|
||||||
uni.setStorageSync(STORAGE_KEY, enabled.value ? '1' : '0')
|
|
||||||
} catch (_) {}
|
|
||||||
if (enabled.value) {
|
|
||||||
warmUp()
|
|
||||||
play('select')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function destroyAll() {
|
|
||||||
Object.keys(pools).forEach((key) => {
|
|
||||||
pools[key]?.destroy()
|
|
||||||
delete pools[key]
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
onUnmounted(() => {
|
|
||||||
destroyAll()
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
|
||||||
enabled,
|
|
||||||
play,
|
|
||||||
playLayer,
|
|
||||||
playMatch,
|
|
||||||
playDrop,
|
|
||||||
playMeter,
|
|
||||||
warmUp,
|
|
||||||
toggleEnabled,
|
|
||||||
destroyAll
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,564 +0,0 @@
|
|||||||
.eg-page {
|
|
||||||
min-height: 100vh;
|
|
||||||
color: #173b32;
|
|
||||||
background: linear-gradient(180deg, #eefbf4 0%, #f9f3dd 56%, #fffaf1 100%);
|
|
||||||
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg-confetti-layer { position: fixed; z-index: 80; inset: 0; overflow: hidden; pointer-events: none; }
|
|
||||||
.eg-confetti-piece {
|
|
||||||
position: absolute;
|
|
||||||
top: -70rpx;
|
|
||||||
display: block;
|
|
||||||
border-radius: 3rpx;
|
|
||||||
box-shadow: 0 2rpx 4rpx rgba(0,0,0,.12);
|
|
||||||
animation-name: egConfettiFall;
|
|
||||||
animation-timing-function: cubic-bezier(.18,.72,.35,1);
|
|
||||||
animation-fill-mode: both;
|
|
||||||
}
|
|
||||||
.eg-confetti-piece.is-emoji { width: auto !important; height: auto !important; background: transparent !important; box-shadow: none; font-size: 42rpx; }
|
|
||||||
|
|
||||||
.eg-nav {
|
|
||||||
position: relative;
|
|
||||||
display: grid;
|
|
||||||
box-sizing: border-box;
|
|
||||||
grid-template-columns: 156rpx minmax(0, 1fr) 156rpx;
|
|
||||||
align-items: center;
|
|
||||||
column-gap: 12rpx;
|
|
||||||
padding-right: 28rpx;
|
|
||||||
padding-bottom: 16rpx;
|
|
||||||
padding-left: 28rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg-nav-leading { display: flex; width: 156rpx; justify-content: flex-start; }
|
|
||||||
|
|
||||||
.eg-nav-btn {
|
|
||||||
display: flex;
|
|
||||||
width: 72rpx;
|
|
||||||
height: 72rpx;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
border: 2rpx solid rgba(21, 94, 75, .12);
|
|
||||||
border-radius: 24rpx;
|
|
||||||
background: rgba(255,255,255,.82);
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg-nav-actions { display: flex; width: 156rpx; flex-shrink: 0; justify-content: flex-end; gap: 10rpx; }
|
|
||||||
.eg-nav-btn--small { width: 68rpx; height: 68rpx; border-radius: 22rpx; }
|
|
||||||
|
|
||||||
.eg-title-wrap { display: flex; min-width: 0; flex-direction: column; align-items: center; }
|
|
||||||
.eg-title, .eg-subtitle { overflow: hidden; max-width: 100%; white-space: nowrap; text-overflow: ellipsis; }
|
|
||||||
.eg-title { color: #155e4b; font-size: 40rpx; font-weight: 800; }
|
|
||||||
.eg-subtitle { margin-top: 2rpx; color: #648278; font-size: 24rpx; }
|
|
||||||
.eg-content { padding: 0 16rpx 48rpx; }
|
|
||||||
|
|
||||||
.eg-score-card {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 16rpx;
|
|
||||||
padding: 18rpx 24rpx;
|
|
||||||
border: 2rpx solid rgba(21, 94, 75, .1);
|
|
||||||
border-radius: 28rpx;
|
|
||||||
background: rgba(255,255,255,.9);
|
|
||||||
box-shadow: 0 10rpx 28rpx rgba(32, 78, 43, .08);
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg-stat { display: flex; flex: 1; flex-direction: column; align-items: center; }
|
|
||||||
.eg-stat--main { border-right: 2rpx solid #e2eee8; border-left: 2rpx solid #e2eee8; }
|
|
||||||
.eg-stat-label { color: #71847d; font-size: 24rpx; }
|
|
||||||
.eg-stat-value { margin-top: 4rpx; color: #204e2b; font-size: 38rpx; font-weight: 800; }
|
|
||||||
.eg-stat-score { margin-top: 2rpx; color: #e16f24; font-size: 46rpx; font-weight: 900; }
|
|
||||||
.eg-stat--rank { position: relative; cursor: pointer; }
|
|
||||||
.eg-stat--rank.is-locked { opacity: .52; }
|
|
||||||
.eg-stat-rank-value { margin-top: 1rpx; color: #176b52; font-size: 35rpx; font-weight: 1000; line-height: 1.08; }
|
|
||||||
.eg-stat-rank-hint { margin-top: 2rpx; color: #df7427; font-size: 18rpx; font-weight: 800; }
|
|
||||||
|
|
||||||
.eg-task-card {
|
|
||||||
margin-bottom: 16rpx;
|
|
||||||
padding: 18rpx 22rpx;
|
|
||||||
border-radius: 24rpx;
|
|
||||||
background: rgba(255, 249, 223, .94);
|
|
||||||
box-shadow: 0 8rpx 22rpx rgba(118, 89, 25, .08);
|
|
||||||
}
|
|
||||||
.eg-task-card { position: relative; overflow: visible; }
|
|
||||||
|
|
||||||
.eg-task-reward-flight {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 72;
|
|
||||||
top: 4rpx;
|
|
||||||
left: 42%;
|
|
||||||
display: flex;
|
|
||||||
width: 112rpx;
|
|
||||||
height: 92rpx;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
border: 4rpx solid rgba(255,255,255,.96);
|
|
||||||
border-radius: 24rpx;
|
|
||||||
background: #fff7e8;
|
|
||||||
box-shadow: 0 10rpx 24rpx rgba(159,94,23,.28);
|
|
||||||
animation: egTaskRewardFlight 1.12s cubic-bezier(.18,.78,.22,1) both;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.eg-task-reward-flight > image { position: relative; z-index: 2; width: 78rpx; height: 66rpx; }
|
|
||||||
.eg-task-reward-flight > text { position: absolute; z-index: 3; top: -14rpx; right: -16rpx; display: flex; width: 48rpx; height: 48rpx; align-items: center; justify-content: center; border: 4rpx solid #fff; border-radius: 50%; color: #fff; background: #ed7625; box-shadow: 0 5rpx 12rpx rgba(191,75,19,.3); font-size: 25rpx; font-weight: 1000; }
|
|
||||||
.eg-task-reward-glow { position: absolute; z-index: 1; inset: -15rpx; border-radius: 32rpx; background: radial-gradient(circle, rgba(255,210,67,.52), rgba(255,210,67,0) 68%); animation: egRewardGlow .42s ease-in-out infinite alternate; }
|
|
||||||
|
|
||||||
.eg-task-head { display: flex; align-items: center; justify-content: space-between; color: #7c5b1b; font-size: 27rpx; font-weight: 700; }
|
|
||||||
.eg-task-name { display: flex; align-items: center; gap: 10rpx; }
|
|
||||||
.eg-task-count { color: #9a6718; font-size: 29rpx; }
|
|
||||||
.eg-progress { height: 14rpx; margin-top: 12rpx; overflow: hidden; border-radius: 999rpx; background: #eadfbd; }
|
|
||||||
.eg-progress-fill { height: 100%; border-radius: inherit; background: linear-gradient(90deg, #f0a128, #f4c34f); transition: width .25s; }
|
|
||||||
|
|
||||||
.eg-board-shell {
|
|
||||||
position: relative;
|
|
||||||
padding: 14rpx;
|
|
||||||
border: 2rpx solid rgba(34, 103, 79, .16);
|
|
||||||
border-radius: 34rpx;
|
|
||||||
background: rgba(255,255,255,.92);
|
|
||||||
box-shadow: 0 18rpx 44rpx rgba(29, 78, 59, .12);
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg-board-top { display: flex; align-items: center; justify-content: space-between; margin: 0 4rpx 14rpx; }
|
|
||||||
.eg-board-bonuses { display: flex; align-items: center; gap: 8rpx; }
|
|
||||||
.eg-combo { padding: 8rpx 16rpx; border-radius: 999rpx; color: #45685d; background: #e8f3ee; font-size: 25rpx; font-weight: 700; }
|
|
||||||
.eg-combo.is-hot { color: #fff; background: linear-gradient(135deg, #f59e0b, #ea580c); }
|
|
||||||
.eg-double-state { padding: 8rpx 14rpx; border: 2rpx solid rgba(255,255,255,.9); border-radius: 999rpx; color: #fff; background: linear-gradient(135deg, #7c3aed, #d946ef); box-shadow: 0 4rpx 12rpx rgba(124,58,237,.24); font-size: 23rpx; font-weight: 900; white-space: nowrap; }
|
|
||||||
.eg-risk { display: flex; align-items: center; gap: 10rpx; color: #8d512c; font-size: 24rpx; }
|
|
||||||
.eg-risk-dots { display: flex; gap: 5rpx; }
|
|
||||||
.eg-risk-dot { width: 12rpx; height: 12rpx; border-radius: 50%; background: #ead8c9; }
|
|
||||||
.eg-risk-dot.on { background: #e96b3b; box-shadow: 0 0 0 3rpx rgba(233,107,59,.12); }
|
|
||||||
.eg-board { display: flex; flex-direction: column; gap: 8rpx; opacity: 1; transition: opacity .15s; }
|
|
||||||
.eg-board.is-busy { opacity: .82; }
|
|
||||||
.eg-row { display: flex; gap: 8rpx; }
|
|
||||||
|
|
||||||
.eg-cell {
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
height: 166rpx;
|
|
||||||
flex: 1;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
overflow: hidden;
|
|
||||||
border: 5rpx solid transparent;
|
|
||||||
border-radius: 26rpx;
|
|
||||||
box-shadow: inset 0 -5rpx 0 rgba(0,0,0,.05), 0 5rpx 12rpx rgba(31, 66, 53, .08);
|
|
||||||
transition: transform .16s cubic-bezier(.2,.8,.2,1), border-color .15s, opacity .16s, filter .16s;
|
|
||||||
will-change: transform;
|
|
||||||
}
|
|
||||||
|
|
||||||
.eg-cell.is-dragging { transition: transform .055s linear, border-color .15s; }
|
|
||||||
.eg-cell.is-selected { z-index: 2; border-color: #167d61; transform: scale(1.06); box-shadow: 0 0 0 6rpx rgba(22,125,97,.14); }
|
|
||||||
.eg-cell.is-camel-target { border-color: #f59e0b; animation: egPulse 1s infinite; }
|
|
||||||
.eg-replace-target { position: absolute; z-index: 7; right: 7rpx; bottom: 6rpx; padding: 4rpx 10rpx; border: 2rpx solid #fff; border-radius: 999rpx; color: #fff; background: #1570a6; box-shadow: 0 3rpx 9rpx rgba(20,91,135,.28); font-size: 20rpx; font-weight: 900; }
|
|
||||||
.eg-cell.is-clearing {
|
|
||||||
z-index: 8;
|
|
||||||
border-color: #fff;
|
|
||||||
animation: egHit .22s cubic-bezier(.2,.9,.3,1) forwards;
|
|
||||||
filter: brightness(1.28) saturate(1.25);
|
|
||||||
}
|
|
||||||
.eg-cell.is-yellow,
|
|
||||||
.eg-cell.is-cream,
|
|
||||||
.eg-cell.is-red,
|
|
||||||
.eg-cell.is-purple { background: #fffaf0; }
|
|
||||||
.eg-cell.is-level-low { background: #f4faf6; }
|
|
||||||
.eg-cell.is-level-mid { background: #fff9eb; }
|
|
||||||
.eg-cell.is-orange,
|
|
||||||
.eg-cell.is-level-high { background: #fff0e4; }
|
|
||||||
.eg-cell.is-milk { background: #edf7ff; }
|
|
||||||
.eg-cell.is-high { border-color: #ef7b45; }
|
|
||||||
.eg-food-image { width: 132rpx; height: 92rpx; margin-top: 7rpx; border-radius: 17rpx; filter: saturate(1.06) contrast(1.03); }
|
|
||||||
.eg-food-name { margin-top: 8rpx; color: #203d34; font-size: 29rpx; font-weight: 900; letter-spacing: 1rpx; line-height: 1.1; }
|
|
||||||
.eg-sugar-tag { position: absolute; top: 5rpx; right: 5rpx; min-width: 52rpx; padding: 4rpx 10rpx; border: 2rpx solid #fff; border-radius: 999rpx; color: #fff; box-shadow: 0 3rpx 8rpx rgba(25,55,45,.22); font-size: 23rpx; font-weight: 900; line-height: 1.25; text-align: center; }
|
|
||||||
.eg-sugar-tag.is-low { color: #316a54; border-color: rgba(255,255,255,.82); background: #dcefe6; box-shadow: 0 2rpx 5rpx rgba(32,101,75,.1); }
|
|
||||||
.eg-sugar-tag.is-mid { color: #735a15; border-color: rgba(255,255,255,.9); background: #f7e7a8; box-shadow: 0 2rpx 6rpx rgba(137,91,0,.15); }
|
|
||||||
.eg-sugar-tag.is-high { background: #d9431f; box-shadow: 0 4rpx 10rpx rgba(163,45,21,.32); }
|
|
||||||
.eg-sugar-tag.is-prop { background: #2563a8; }
|
|
||||||
.eg-special-mark { position: absolute; z-index: 12; bottom: 5rpx; left: 6rpx; display: flex; width: 40rpx; height: 40rpx; align-items: center; justify-content: center; border: 3rpx solid rgba(255,255,255,.96); border-radius: 50%; color: #fff; background: #6d28d9; box-shadow: 0 4rpx 11rpx rgba(73,31,130,.3); font-size: 23rpx; font-weight: 900; }
|
|
||||||
.eg-special-mark.is-row { width: 58rpx; height: 40rpx; border-radius: 999rpx; background: linear-gradient(135deg, #ffd64d, #ff8a18 48%, #e83b22); box-shadow: 0 0 0 4rpx rgba(255,172,30,.2), 0 4rpx 15rpx rgba(203,59,26,.45); animation: egFlameReady .7s ease-in-out infinite alternate; }
|
|
||||||
.eg-special-mark.is-col { width: 40rpx; height: 58rpx; border-radius: 999rpx; background: linear-gradient(180deg, #ffd64d, #ff8a18 48%, #e83b22); box-shadow: 0 0 0 4rpx rgba(255,172,30,.2), 0 4rpx 15rpx rgba(203,59,26,.45); animation: egFlameReady .7s ease-in-out infinite alternate; }
|
|
||||||
.eg-special-mark.is-burst { width: 48rpx; height: 48rpx; border-color: #fff3a8; border-radius: 15rpx 50% 50%; background: linear-gradient(145deg, #7c3aed 5%, #dd3b70 48%, #ff8a18 100%); box-shadow: 0 4rpx 13rpx rgba(108,35,155,.38), 0 0 12rpx rgba(255,179,38,.3); animation: egLReady 1.25s ease-in-out infinite alternate; }
|
|
||||||
.eg-mini-flame { position: relative; width: 25rpx; height: 30rpx; border-radius: 70% 32% 68% 40%; background: linear-gradient(135deg, #fff8a8 8%, #ffc21f 42%, #f04420 84%); box-shadow: 0 0 14rpx rgba(255,230,92,.95); transform: rotate(43deg); }
|
|
||||||
.eg-mini-flame-core { position: absolute; right: 4rpx; bottom: 3rpx; width: 10rpx; height: 15rpx; border-radius: 70% 35% 70% 42%; background: #fffbd1; box-shadow: 0 0 7rpx rgba(255,255,210,.95); }
|
|
||||||
.eg-l-special { position: relative; width: 29rpx; height: 29rpx; filter: drop-shadow(0 1rpx 2rpx rgba(73,22,105,.3)); }
|
|
||||||
.eg-l-arm { position: absolute; left: 3rpx; bottom: 3rpx; border-radius: 999rpx; background: #fff9b8; box-shadow: 0 0 6rpx rgba(255,249,184,.92); }
|
|
||||||
.eg-l-arm.is-vertical { width: 8rpx; height: 25rpx; }
|
|
||||||
.eg-l-arm.is-horizontal { width: 25rpx; height: 8rpx; }
|
|
||||||
.eg-l-core { position: absolute; left: 1rpx; bottom: 1rpx; width: 12rpx; height: 12rpx; border: 2rpx solid #fff; border-radius: 50%; background: #ff5b25; }
|
|
||||||
.eg-cell.is-fire-clearing { border-color: #ff7a1a; box-shadow: inset 0 0 25rpx rgba(255,102,18,.36), 0 0 18rpx rgba(255,105,20,.48); filter: brightness(1.35) saturate(1.42); }
|
|
||||||
.eg-cell.is-clearing.is-fire-clearing { animation: egFireCellHit .36s cubic-bezier(.2,.78,.22,1) forwards; }
|
|
||||||
.eg-fire-clear { position: absolute; z-index: 14; inset: 2rpx; overflow: hidden; border: 3rpx solid rgba(255,210,71,.92); border-radius: 22rpx; opacity: .96; background: linear-gradient(180deg, rgba(255,230,86,.12), rgba(239,63,27,.22)); pointer-events: none; }
|
|
||||||
.eg-fire-glow { position: absolute; inset: 6%; border-radius: 18rpx; background: radial-gradient(circle, rgba(255,246,177,.74), rgba(255,131,22,.32) 47%, rgba(222,47,23,0) 75%); animation: egFireGlow .34s ease-out both; }
|
|
||||||
.eg-fire-sweep { position: absolute; top: 23%; left: -48%; width: 168%; height: 55%; border-radius: 60% 45% 55% 42%; background: linear-gradient(90deg, rgba(255,184,38,0), rgba(255,238,124,.94) 28%, rgba(255,133,22,.92) 53%, rgba(226,54,25,.82) 72%, rgba(255,184,38,0)); box-shadow: 0 0 27rpx rgba(255,91,17,.72); animation: egFireSweep .34s cubic-bezier(.2,.78,.22,1) both; }
|
|
||||||
.eg-fire-flame { position: absolute; bottom: 13%; width: 25rpx; height: 39rpx; border-radius: 72% 35% 68% 42%; background: linear-gradient(145deg, #fff7a6 4%, #ffc329 39%, #ff7419 66%, #dc321f 100%); box-shadow: 0 0 15rpx rgba(255,124,21,.88); transform: rotate(42deg); animation: egFireFlame .34s ease-out both; }
|
|
||||||
.eg-fire-flame > view { position: absolute; right: 5rpx; bottom: 4rpx; width: 10rpx; height: 18rpx; border-radius: 70% 35% 70% 42%; background: #fffbd6; }
|
|
||||||
.eg-fire-flame.is-left { left: 16%; animation-delay: .01s; }
|
|
||||||
.eg-fire-flame.is-center { left: 43%; bottom: 19%; transform: rotate(42deg) scale(1.18); animation-delay: .035s; }
|
|
||||||
.eg-fire-flame.is-right { right: 15%; animation-delay: .065s; }
|
|
||||||
.eg-fire-spark { position: absolute; width: 10rpx; height: 17rpx; border-radius: 70% 35% 70% 42%; background: #ffe45e; box-shadow: 0 0 11rpx rgba(255,139,28,.9); animation: egFireSpark .34s ease-out both; }
|
|
||||||
.eg-fire-spark.is-one { top: 46%; left: 25%; }
|
|
||||||
.eg-fire-spark.is-two { top: 34%; left: 62%; animation-delay: .035s; }
|
|
||||||
.eg-fire-spark.is-three { top: 52%; left: 78%; animation-delay: .07s; }
|
|
||||||
.eg-board-tip { display: flex; align-items: center; justify-content: center; gap: 8rpx; min-height: 58rpx; margin-top: 12rpx; color: #684817; font-size: 26rpx; font-weight: 700; text-align: center; }
|
|
||||||
.eg-impact-text {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 20;
|
|
||||||
top: 46%;
|
|
||||||
left: 50%;
|
|
||||||
padding: 10rpx 24rpx;
|
|
||||||
border: 4rpx solid rgba(255,255,255,.9);
|
|
||||||
border-radius: 999rpx;
|
|
||||||
color: #fff;
|
|
||||||
background: linear-gradient(135deg, #f59e0b, #e4572e);
|
|
||||||
box-shadow: 0 10rpx 28rpx rgba(190, 70, 25, .35);
|
|
||||||
font-size: 34rpx;
|
|
||||||
font-weight: 900;
|
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
animation: egImpact .52s cubic-bezier(.16,.82,.3,1) forwards;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.eg-impact-text.is-level-2 { font-size: 40rpx; background: linear-gradient(135deg, #8b5cf6, #ec4899); }
|
|
||||||
.eg-impact-text.is-level-3 { font-size: 46rpx; background: linear-gradient(135deg, #ef4444, #f59e0b); box-shadow: 0 12rpx 36rpx rgba(239,68,68,.42); }
|
|
||||||
.eg-jackpot {
|
|
||||||
position: absolute;
|
|
||||||
z-index: 30;
|
|
||||||
top: 48%;
|
|
||||||
left: 50%;
|
|
||||||
width: 540rpx;
|
|
||||||
padding: 24rpx 22rpx 20rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
border: 7rpx solid #ffd83d;
|
|
||||||
border-radius: 36rpx;
|
|
||||||
color: #fff;
|
|
||||||
background: radial-gradient(circle at 50% 0%, #ef4444, #9f1239 65%, #64102a);
|
|
||||||
box-shadow: 0 0 0 7rpx #fff2a8, 0 22rpx 52rpx rgba(100,16,42,.5);
|
|
||||||
text-align: center;
|
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
animation: egJackpotIn 1.35s cubic-bezier(.16,.85,.25,1) forwards;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
.eg-jackpot.is-match-4 { background: radial-gradient(circle at 50% 0%, #8b5cf6, #5b21b6 68%, #35106d); }
|
|
||||||
.eg-jackpot.is-match-5 { border-color: #fff36a; background: radial-gradient(circle at 50% 0%, #ff6b24, #d7193f 58%, #760c2a); animation-duration: 1.9s; }
|
|
||||||
.eg-jackpot.is-match-3 {
|
|
||||||
width: 414rpx;
|
|
||||||
padding: 20rpx 22rpx 18rpx;
|
|
||||||
border-width: 4rpx;
|
|
||||||
border-color: #f1c663;
|
|
||||||
color: #31574b;
|
|
||||||
background: linear-gradient(155deg, #f7fff9, #fff5d9);
|
|
||||||
box-shadow: 0 0 0 4rpx rgba(255,255,255,.84), 0 14rpx 34rpx rgba(98,82,39,.2);
|
|
||||||
animation: egTripleIn 1.12s cubic-bezier(.2,.82,.28,1) forwards;
|
|
||||||
}
|
|
||||||
.eg-jackpot.is-match-3 .eg-jackpot-lights { display: none; }
|
|
||||||
.eg-jackpot.is-match-3 .eg-jackpot-kicker { color: #5b8c73; font-size: 21rpx; letter-spacing: 3rpx; text-shadow: none; }
|
|
||||||
.eg-jackpot.is-match-3 .eg-jackpot-title { color: #365b4e; font-size: 31rpx; text-shadow: none; }
|
|
||||||
.eg-jackpot.is-match-3 .eg-jackpot-reward { color: #ad7021; font-size: 25rpx; }
|
|
||||||
.eg-jackpot.is-match-3 .eg-jackpot-note { color: #829087; }
|
|
||||||
.eg-triple-cans { position: relative; display: flex; justify-content: center; gap: 12rpx; margin: 12rpx 0 10rpx; }
|
|
||||||
.eg-triple-can { display: flex; width: 78rpx; height: 76rpx; align-items: center; justify-content: center; border: 3rpx solid #f4d996; border-radius: 19rpx; background: rgba(255,255,255,.9); box-shadow: 0 5rpx 12rpx rgba(128,92,30,.12); animation: egTripleCan .42s cubic-bezier(.2,.86,.26,1) both; }
|
|
||||||
.eg-triple-can:nth-child(2) { animation-delay: .07s; }
|
|
||||||
.eg-triple-can:nth-child(3) { animation-delay: .14s; }
|
|
||||||
.eg-triple-can > image { width: 62rpx; height: 58rpx; }
|
|
||||||
|
|
||||||
.eg-jackpot.is-match-4 {
|
|
||||||
width: 548rpx;
|
|
||||||
padding: 25rpx 22rpx 22rpx;
|
|
||||||
border-color: #ffd95b;
|
|
||||||
background: radial-gradient(circle at 50% -10%, #a97cff, #6031b5 58%, #341066);
|
|
||||||
box-shadow: 0 0 0 6rpx #fff0a9, 0 0 36rpx rgba(255,210,76,.5), 0 24rpx 58rpx rgba(53,16,109,.48);
|
|
||||||
animation: egFourIn 1.88s cubic-bezier(.16,.84,.24,1) forwards;
|
|
||||||
}
|
|
||||||
.eg-jackpot.is-match-4 .eg-jackpot-kicker { color: #ffef8d; font-size: 24rpx; letter-spacing: 3rpx; }
|
|
||||||
.eg-jackpot.is-match-4 .eg-jackpot-title { margin-top: 9rpx; color: #fff; font-size: 39rpx; }
|
|
||||||
.eg-jackpot.is-match-4 .eg-jackpot-reward { color: #fff2a8; }
|
|
||||||
.eg-four-teaser { position: relative; margin-top: 13rpx; }
|
|
||||||
.eg-four-cans { display: flex; align-items: center; justify-content: center; gap: 8rpx; }
|
|
||||||
.eg-four-can { display: flex; width: 76rpx; height: 92rpx; align-items: center; justify-content: center; border: 4rpx solid #ffe078; border-radius: 18rpx; background: linear-gradient(180deg, #fffef7, #ffe9a5); box-shadow: inset 0 -5rpx 0 rgba(171,106,17,.12), 0 7rpx 13rpx rgba(34,12,67,.28); animation: egFourCan .48s cubic-bezier(.18,.9,.25,1.2) both; }
|
|
||||||
.eg-four-can:nth-child(2) { animation-delay: .07s; }
|
|
||||||
.eg-four-can:nth-child(3) { animation-delay: .14s; }
|
|
||||||
.eg-four-can:nth-child(4) { animation-delay: .21s; }
|
|
||||||
.eg-four-can > image { width: 64rpx; height: 70rpx; }
|
|
||||||
.eg-four-can.is-locked { border-style: dashed; border-color: rgba(255,241,161,.86); color: #fff6ae; background: rgba(48,18,91,.54); box-shadow: inset 0 0 16rpx rgba(255,225,91,.18), 0 0 18rpx rgba(255,222,91,.36); font-size: 48rpx; font-weight: 1000; animation: egLockedCan .68s .34s ease-in-out infinite alternate; }
|
|
||||||
.eg-four-promise { display: inline-flex; margin-top: 15rpx; padding: 8rpx 18rpx; border: 2rpx solid rgba(255,247,184,.72); border-radius: 999rpx; color: #3d176f; background: linear-gradient(90deg, #fff3a3, #ffd85b); box-shadow: 0 5rpx 15rpx rgba(28,7,62,.22); font-size: 25rpx; font-weight: 1000; animation: egPromisePulse .72s ease-in-out infinite alternate; }
|
|
||||||
.eg-five-celebration { position: relative; margin: 15rpx 0 10rpx; }
|
|
||||||
.eg-five-cans { display: flex; align-items: center; justify-content: center; gap: 8rpx; }
|
|
||||||
.eg-five-can { display: flex; width: 78rpx; height: 93rpx; align-items: center; justify-content: center; border: 4rpx solid #fff17b; border-radius: 18rpx; background: linear-gradient(180deg, #fff, #fff2ac); box-shadow: inset 0 -5rpx 0 rgba(184,91,12,.13), 0 7rpx 0 #bd5b13, 0 0 16rpx rgba(255,240,101,.5); animation: egFiveCan .56s cubic-bezier(.16,.92,.24,1.2) both; }
|
|
||||||
.eg-five-can:nth-child(2) { animation-delay: .07s; }
|
|
||||||
.eg-five-can:nth-child(3) { animation-delay: .14s; }
|
|
||||||
.eg-five-can:nth-child(4) { animation-delay: .21s; }
|
|
||||||
.eg-five-can:nth-child(5) { animation-delay: .28s; }
|
|
||||||
.eg-five-can > image { width: 65rpx; height: 72rpx; }
|
|
||||||
.eg-five-sevens { display: flex; justify-content: center; gap: 8rpx; margin-top: 13rpx; }
|
|
||||||
.eg-five-sevens > text { display: flex; width: 58rpx; height: 55rpx; align-items: center; justify-content: center; border: 3rpx solid #fff5a7; border-radius: 13rpx; color: #fff36a; background: linear-gradient(155deg, #d7193f, #9f1239); box-shadow: 0 5rpx 0 #70102b, 0 0 13rpx rgba(255,243,106,.45); font-size: 43rpx; font-weight: 1000; line-height: 1; text-shadow: 0 3rpx 0 #8f1733; }
|
|
||||||
.eg-jackpot-lights { position: absolute; inset: 8rpx; border: 4rpx dotted rgba(255,255,255,.88); border-radius: 25rpx; animation: egLights .24s steps(2) infinite; }
|
|
||||||
.eg-jackpot-kicker { position: relative; display: block; color: #fff36a; font-size: 28rpx; font-weight: 900; letter-spacing: 6rpx; text-shadow: 0 3rpx 0 rgba(83,19,25,.45); }
|
|
||||||
.eg-jackpot-reels { position: relative; display: flex; justify-content: center; gap: 12rpx; margin: 13rpx 0; }
|
|
||||||
.eg-jackpot-reel { display: flex; width: 112rpx; height: 126rpx; flex-direction: column; align-items: center; justify-content: center; border: 6rpx solid #ffcf31; border-radius: 20rpx; background: linear-gradient(180deg, #fff 0%, #fff7cf 48%, #ffd55e 50%, #fff 53%, #fff8dc 100%); box-shadow: inset 0 0 18rpx rgba(137,78,10,.25), 0 7rpx 0 #a85a0a; animation: egReelStop .52s cubic-bezier(.2,.9,.25,1) both; }
|
|
||||||
.eg-jackpot-reel:nth-child(2) { animation-delay: .09s; }
|
|
||||||
.eg-jackpot-reel:nth-child(3) { animation-delay: .18s; }
|
|
||||||
.eg-jackpot-seven { color: #e11d48; font-size: 61rpx; font-weight: 1000; line-height: .85; text-shadow: 0 3rpx 0 #ffd1d8; }
|
|
||||||
.eg-jackpot-milk { width: 54rpx; height: 36rpx; margin-top: 3rpx; border-radius: 7rpx; }
|
|
||||||
.eg-jackpot-title { position: relative; display: block; font-size: 37rpx; font-weight: 900; text-shadow: 0 4rpx 0 rgba(73,10,30,.5); }
|
|
||||||
.eg-jackpot-points { position: relative; display: block; margin-top: 2rpx; color: #fff36a; font-size: 66rpx; font-weight: 1000; line-height: 1.05; letter-spacing: 2rpx; text-shadow: 0 5rpx 0 #9e2813, 0 0 18rpx rgba(255,243,106,.85); animation: egPointsPop .62s .42s cubic-bezier(.16,.9,.25,1.25) both; }
|
|
||||||
.eg-jackpot-reward { position: relative; display: block; margin-top: 7rpx; color: #fff5a5; font-size: 27rpx; font-weight: 800; line-height: 1.35; }
|
|
||||||
.eg-jackpot-note { position: relative; display: block; margin-top: 8rpx; color: rgba(255,255,255,.8); font-size: 22rpx; }
|
|
||||||
.eg-tools { margin-top: 16rpx; }
|
|
||||||
.eg-tool { display: flex; align-items: center; padding: 16rpx 18rpx; border: 3rpx solid #c9e0d6; border-radius: 26rpx; background: rgba(255,255,255,.92); box-shadow: 0 7rpx 18rpx rgba(24, 84, 63, .07); }
|
|
||||||
.eg-tool.active { border-color: #f59e0b; background: #fffbeb; }
|
|
||||||
.eg-tool.disabled { opacity: .45; }
|
|
||||||
.eg-tool-icon { position: relative; display: flex; width: 88rpx; height: 88rpx; align-items: center; justify-content: center; overflow: visible; border-radius: 24rpx; font-size: 46rpx; background: linear-gradient(145deg, #e8f7ff, #d4ecff); box-shadow: inset 0 -4rpx 0 rgba(33,104,151,.08); }
|
|
||||||
.eg-tool-food-image { width: 76rpx; height: 58rpx; border-radius: 14rpx; }
|
|
||||||
.eg-replace-badge { position: absolute; right: -12rpx; bottom: -8rpx; display: flex; min-width: 78rpx; height: 38rpx; align-items: center; justify-content: center; gap: 2rpx; padding: 0 8rpx; border: 3rpx solid #fff; border-radius: 999rpx; color: #fff; background: linear-gradient(135deg, #2389b9, #145d91); box-shadow: 0 5rpx 12rpx rgba(20,93,145,.3); }
|
|
||||||
.eg-replace-badge .tj-icon-wrap { width: 22rpx; height: 22rpx; }
|
|
||||||
.eg-replace-badge > text { font-size: 20rpx; font-weight: 900; line-height: 1; }
|
|
||||||
.eg-tool-copy { display: flex; flex: 1; flex-direction: column; margin-left: 16rpx; }
|
|
||||||
.eg-tool-name { color: #244a3d; font-size: 29rpx; font-weight: 800; }
|
|
||||||
.eg-tool-desc { margin-top: 5rpx; color: #6c8179; font-size: 25rpx; }
|
|
||||||
.eg-tool-count { color: #155e4b; font-size: 32rpx; font-weight: 900; }
|
|
||||||
.eg-legend { display: flex; justify-content: center; gap: 18rpx; margin-top: 18rpx; color: #53685f; font-size: 25rpx; font-weight: 700; }
|
|
||||||
.eg-dot--safe { color: #4cae7b; }
|
|
||||||
.eg-dot--mid { color: #e2aa19; }
|
|
||||||
.eg-dot--high { color: #e4572e; }
|
|
||||||
|
|
||||||
.eg-weekly-overlay { position: fixed; z-index: 90; inset: 0; display: flex; align-items: center; justify-content: center; padding: 28rpx; background: rgba(16, 55, 43, .66); backdrop-filter: blur(5px); }
|
|
||||||
.eg-weekly-card { width: 100%; max-width: 664rpx; max-height: calc(100vh - 56rpx); overflow-y: auto; padding: 28rpx 26rpx 22rpx; border: 5rpx solid rgba(255,255,255,.96); border-radius: 38rpx; background: linear-gradient(160deg, #f5fff9 0%, #fffdf3 56%, #fff4db 100%); box-shadow: 0 30rpx 80rpx rgba(5,45,32,.38); animation: egWeeklyIn .36s cubic-bezier(.18,.88,.27,1.08) both; }
|
|
||||||
.eg-weekly-head { display: flex; align-items: center; justify-content: space-between; }
|
|
||||||
.eg-weekly-title-line { display: flex; align-items: center; gap: 10rpx; }
|
|
||||||
.eg-weekly-title { color: #155e4b; font-size: 37rpx; font-weight: 1000; }
|
|
||||||
.eg-weekly-preview { padding: 5rpx 10rpx; border-radius: 999rpx; color: #9a5b14; background: #fff0bd; font-size: 19rpx; font-weight: 900; }
|
|
||||||
.eg-weekly-sub { display: block; margin-top: 5rpx; color: #6b837a; font-size: 23rpx; font-weight: 700; }
|
|
||||||
.eg-weekly-medal { display: flex; width: 76rpx; height: 76rpx; align-items: center; justify-content: center; border: 5rpx solid #fff3b2; border-radius: 50%; color: #fff; background: linear-gradient(145deg, #f5ad24, #e26925); box-shadow: 0 8rpx 0 #b85421, 0 12rpx 24rpx rgba(181,84,33,.24); font-size: 39rpx; font-weight: 1000; }
|
|
||||||
.eg-weekly-progress-card { display: flex; align-items: center; justify-content: space-between; margin-top: 20rpx; padding: 16rpx 18rpx; border: 3rpx solid #d7ebe2; border-radius: 24rpx; background: rgba(255,255,255,.9); }
|
|
||||||
.eg-weekly-progress-label { display: block; color: #657b73; font-size: 22rpx; font-weight: 700; }
|
|
||||||
.eg-weekly-progress-value { display: block; margin-top: -2rpx; color: #e06b24; font-size: 43rpx; font-weight: 1000; }
|
|
||||||
.eg-weekly-progress-copy { display: flex; flex-direction: column; align-items: flex-end; color: #235b49; font-size: 24rpx; font-weight: 900; line-height: 1.55; }
|
|
||||||
.eg-weekly-progress-copy text:last-child { color: #b86820; }
|
|
||||||
.eg-weekly-list { display: flex; flex-direction: column; gap: 7rpx; margin-top: 15rpx; }
|
|
||||||
.eg-weekly-row { display: flex; min-height: 68rpx; align-items: center; padding: 7rpx 14rpx; border: 2rpx solid transparent; border-radius: 19rpx; color: #345c50; background: rgba(255,255,255,.72); }
|
|
||||||
.eg-weekly-row.is-me { border-color: #f2bd48; color: #174f3e; background: linear-gradient(90deg, #fff2bb, #fff9e3); box-shadow: 0 5rpx 14rpx rgba(153,102,17,.12); transform: scale(1.015); }
|
|
||||||
.eg-weekly-place { width: 43rpx; color: #6b7d76; font-size: 27rpx; font-weight: 1000; text-align: center; }
|
|
||||||
.eg-weekly-row:nth-child(1) .eg-weekly-place { color: #dd7b17; font-size: 31rpx; }
|
|
||||||
.eg-weekly-avatar { display: flex; width: 52rpx; height: 52rpx; flex: 0 0 52rpx; align-items: center; justify-content: center; margin-left: 6rpx; border: 3rpx solid rgba(255,255,255,.9); border-radius: 50%; color: #fff; background: #5d9b84; box-shadow: 0 3rpx 9rpx rgba(30,78,61,.16); font-size: 24rpx; font-weight: 1000; }
|
|
||||||
.eg-weekly-avatar.is-tone-2 { background: #e39932; }
|
|
||||||
.eg-weekly-avatar.is-tone-3 { background: #6c83c8; }
|
|
||||||
.eg-weekly-avatar.is-tone-4 { background: #e5683e; }
|
|
||||||
.eg-weekly-avatar.is-tone-5 { background: #a673bd; }
|
|
||||||
.eg-weekly-avatar.is-tone-6 { background: #448e9c; }
|
|
||||||
.eg-weekly-avatar.is-tone-7 { background: #c27b49; }
|
|
||||||
.eg-weekly-name { flex: 1; margin-left: 13rpx; overflow: hidden; font-size: 27rpx; font-weight: 850; text-overflow: ellipsis; white-space: nowrap; }
|
|
||||||
.eg-weekly-me { margin-right: 8rpx; padding: 3rpx 9rpx; border-radius: 999rpx; color: #fff; background: #dd6b27; font-size: 18rpx; font-weight: 900; }
|
|
||||||
.eg-weekly-count { min-width: 70rpx; color: #315b4d; font-size: 29rpx; font-weight: 1000; text-align: right; }
|
|
||||||
.eg-cheer-card { margin-top: 16rpx; padding: 15rpx 17rpx 14rpx; border: 3rpx solid #f0d38d; border-radius: 23rpx; background: linear-gradient(135deg, #fff9d9, #fff1c2); }
|
|
||||||
.eg-cheer-card.is-family { border-color: #d9c8ef; background: linear-gradient(135deg, #f8f2ff, #efe7ff); }
|
|
||||||
.eg-cheer-card.is-bright { border-color: #f4c77b; background: linear-gradient(135deg, #fff8dc, #ffeec7); }
|
|
||||||
.eg-cheer-top { display: flex; align-items: center; justify-content: space-between; }
|
|
||||||
.eg-cheer-source { color: #8e5c18; font-size: 21rpx; font-weight: 900; }
|
|
||||||
.eg-cheer-card.is-family .eg-cheer-source { color: #77539c; }
|
|
||||||
.eg-cheer-change { padding: 5rpx 12rpx; border-radius: 999rpx; color: #176b52; background: rgba(255,255,255,.75); font-size: 19rpx; font-weight: 900; }
|
|
||||||
.eg-cheer-copy { display: block; margin-top: 7rpx; color: #55462d; font-size: 28rpx; font-weight: 900; line-height: 1.42; }
|
|
||||||
.eg-cheer-note { display: block; margin-top: 5rpx; color: #8d7c77; font-size: 18rpx; }
|
|
||||||
.eg-weekly-start { display: flex; height: 84rpx; align-items: center; justify-content: center; margin-top: 18rpx; border-radius: 24rpx; color: #fff; background: linear-gradient(135deg, #24906c, #12654a); box-shadow: 0 9rpx 20rpx rgba(18,101,74,.24); font-size: 30rpx; font-weight: 1000; }
|
|
||||||
.eg-weekly-footnote { display: block; margin-top: 10rpx; color: #8b8b7d; font-size: 18rpx; text-align: center; }
|
|
||||||
|
|
||||||
.eg-stage-overlay { position: fixed; z-index: 58; inset: 0; display: flex; align-items: center; justify-content: center; padding: 40rpx; background: rgba(22,62,50,.42); pointer-events: none; }
|
|
||||||
.eg-stage-card { width: 100%; max-width: 620rpx; padding: 34rpx 28rpx 30rpx; border: 6rpx solid #fff; border-radius: 38rpx; background: linear-gradient(155deg, #f5fff9, #fff8da); box-shadow: 0 26rpx 70rpx rgba(10,56,41,.3); text-align: center; animation: egStageIn 1.8s cubic-bezier(.16,.86,.28,1) both; }
|
|
||||||
.eg-stage-kicker { display: block; color: #16815f; font-size: 23rpx; font-weight: 900; letter-spacing: 3rpx; }
|
|
||||||
.eg-stage-number { display: block; margin-top: 5rpx; color: #e47722; font-size: 48rpx; font-weight: 1000; line-height: 1.1; }
|
|
||||||
.eg-stage-title { display: block; margin-top: 7rpx; color: #194e3d; font-size: 38rpx; font-weight: 900; }
|
|
||||||
.eg-stage-foods { display: flex; justify-content: center; gap: 9rpx; margin-top: 22rpx; }
|
|
||||||
.eg-stage-food { display: flex; width: 92rpx; min-height: 110rpx; flex-direction: column; align-items: center; justify-content: center; border: 3rpx solid #dbece4; border-radius: 20rpx; color: #315b4e; background: #fff; font-size: 20rpx; font-weight: 800; }
|
|
||||||
.eg-stage-food > image { width: 72rpx; height: 52rpx; border-radius: 12rpx; }
|
|
||||||
.eg-stage-food > text { margin-top: 8rpx; }
|
|
||||||
.eg-stage-food.is-danger { border-color: #ef8b52; color: #a43c20; background: #fff1e6; box-shadow: 0 0 0 4rpx rgba(239,139,82,.12); }
|
|
||||||
.eg-stage-tip { display: block; margin-top: 20rpx; color: #6e776d; font-size: 21rpx; font-weight: 700; }
|
|
||||||
.eg-reshuffle-overlay { position: fixed; z-index: 65; inset: 0; display: flex; align-items: center; justify-content: center; padding: 46rpx; background: rgba(19,55,45,.5); }
|
|
||||||
.eg-reshuffle-card { width: 100%; max-width: 540rpx; padding: 38rpx 30rpx; border: 5rpx solid rgba(255,255,255,.95); border-radius: 36rpx; background: linear-gradient(155deg, #f4fff9, #e6f6ef); box-shadow: 0 24rpx 64rpx rgba(10,48,37,.3); text-align: center; }
|
|
||||||
.eg-reshuffle-icon { display: flex; width: 94rpx; height: 94rpx; align-items: center; justify-content: center; margin: 0 auto 18rpx; border-radius: 50%; background: linear-gradient(135deg, #2aa87b, #126a50); box-shadow: 0 10rpx 24rpx rgba(18,106,80,.28); animation: egReshuffleSpin .85s linear infinite; }
|
|
||||||
.eg-reshuffle-title { display: block; color: #174e3d; font-size: 36rpx; font-weight: 900; }
|
|
||||||
.eg-reshuffle-desc { display: block; margin-top: 10rpx; color: #5b746b; font-size: 24rpx; font-weight: 700; }
|
|
||||||
|
|
||||||
.eg-overlay { position: fixed; z-index: 50; top: 0; right: 0; bottom: 0; left: 0; display: flex; align-items: center; justify-content: center; padding: 36rpx; background: rgba(20, 48, 40, .62); }
|
|
||||||
.eg-modal { width: 100%; max-width: 650rpx; padding: 34rpx 28rpx 28rpx; border-radius: 38rpx; background: #fffdf8; box-shadow: 0 28rpx 70rpx rgba(0,0,0,.22); }
|
|
||||||
.eg-modal-icon { display: block; font-size: 68rpx; text-align: center; }
|
|
||||||
.eg-modal-title { display: block; margin-top: 6rpx; color: #204e3d; font-size: 38rpx; font-weight: 900; text-align: center; }
|
|
||||||
.eg-modal-sub { display: block; margin: 8rpx 0 22rpx; color: #718078; font-size: 24rpx; text-align: center; }
|
|
||||||
.eg-result-warning { display: flex; width: 92rpx; height: 92rpx; align-items: center; justify-content: center; margin: 0 auto; border-radius: 50%; color: #fff; background: #e4572e; font-size: 60rpx; font-weight: 900; }
|
|
||||||
.eg-result-food { display: block; margin: 12rpx 0 18rpx; color: #c34b27; font-size: 28rpx; font-weight: 800; text-align: center; }
|
|
||||||
.eg-knowledge-card { padding: 22rpx; border-radius: 24rpx; background: #fff3e7; }
|
|
||||||
.eg-knowledge-title { display: block; color: #8d4427; font-size: 26rpx; font-weight: 800; }
|
|
||||||
.eg-knowledge-copy { display: block; margin-top: 9rpx; color: #5f514a; font-size: 23rpx; line-height: 1.65; }
|
|
||||||
.eg-knowledge-review { display: block; margin-top: 12rpx; color: #9b7768; font-size: 19rpx; }
|
|
||||||
.eg-result-score { display: flex; align-items: center; justify-content: space-between; margin: 20rpx 6rpx; color: #466258; font-size: 25rpx; }
|
|
||||||
.eg-result-score text:last-child { color: #e16f24; font-size: 36rpx; font-weight: 900; }
|
|
||||||
.eg-result-best { display: flex; align-items: center; justify-content: space-between; margin: -12rpx 6rpx 20rpx; color: #75867f; font-size: 22rpx; }
|
|
||||||
.eg-result-best text:last-child { color: #315d4e; font-size: 27rpx; font-weight: 900; }
|
|
||||||
.eg-primary-btn, .eg-secondary-btn { display: flex; height: 88rpx; align-items: center; justify-content: center; border-radius: 24rpx; font-size: 28rpx; font-weight: 800; }
|
|
||||||
.eg-primary-btn { color: #fff; background: linear-gradient(135deg, #238b68, #126649); box-shadow: 0 10rpx 22rpx rgba(18,102,73,.23); }
|
|
||||||
.eg-secondary-btn { margin-top: 12rpx; color: #45665b; background: #edf4f1; }
|
|
||||||
@keyframes egPulse {
|
|
||||||
0%, 100% { box-shadow: 0 0 0 0 rgba(245,158,11,.2); }
|
|
||||||
50% { box-shadow: 0 0 0 8rpx rgba(245,158,11,.12); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egWeeklyIn {
|
|
||||||
0% { opacity: 0; transform: translateY(34rpx) scale(.91); }
|
|
||||||
100% { opacity: 1; transform: translateY(0) scale(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egHit {
|
|
||||||
0% { opacity: 1; transform: scale(1); }
|
|
||||||
42% { opacity: 1; transform: scale(1.18) rotate(-3deg); }
|
|
||||||
100% { opacity: 0; transform: scale(.32) rotate(7deg); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egTaskRewardFlight {
|
|
||||||
0% { opacity: 0; transform: translate3d(-20rpx, 0, 0) scale(.62) rotate(-8deg); }
|
|
||||||
16% { opacity: 1; transform: translate3d(0, -24rpx, 0) scale(1.1) rotate(3deg); }
|
|
||||||
72% { opacity: 1; transform: translate3d(270rpx, 900rpx, 0) scale(.68) rotate(8deg); }
|
|
||||||
100% { opacity: 0; transform: translate3d(350rpx, 1205rpx, 0) scale(.3) rotate(2deg); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egRewardGlow {
|
|
||||||
from { opacity: .4; transform: scale(.86); }
|
|
||||||
to { opacity: .9; transform: scale(1.12); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFireSweep {
|
|
||||||
0% { opacity: 0; transform: translate3d(-38%, 20rpx, 0) scaleX(.6); }
|
|
||||||
28% { opacity: 1; }
|
|
||||||
72% { opacity: .96; }
|
|
||||||
100% { opacity: 0; transform: translate3d(58%, -15rpx, 0) scaleX(1.08); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFireSpark {
|
|
||||||
0% { opacity: 0; transform: translateY(14rpx) scale(.5) rotate(35deg); }
|
|
||||||
38% { opacity: 1; }
|
|
||||||
100% { opacity: 0; transform: translateY(-38rpx) scale(1.05) rotate(58deg); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFireGlow {
|
|
||||||
0% { opacity: 0; transform: scale(.72); }
|
|
||||||
38% { opacity: 1; transform: scale(1.08); }
|
|
||||||
100% { opacity: 0; transform: scale(1.28); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFireCellHit {
|
|
||||||
0% { opacity: 1; transform: scale(1); }
|
|
||||||
24% { opacity: 1; transform: scale(1.09); }
|
|
||||||
72% { opacity: 1; transform: scale(1.02); }
|
|
||||||
100% { opacity: 0; transform: scale(.48); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFireFlame {
|
|
||||||
0% { opacity: 0; transform: translateY(20rpx) rotate(42deg) scale(.55); }
|
|
||||||
38% { opacity: 1; transform: translateY(0) rotate(42deg) scale(1.05); }
|
|
||||||
100% { opacity: 0; transform: translateY(-31rpx) rotate(48deg) scale(.86); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFlameReady {
|
|
||||||
from { transform: scale(.94); filter: brightness(.96); }
|
|
||||||
to { transform: scale(1.08); filter: brightness(1.18); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egLReady {
|
|
||||||
from { transform: scale(.94) rotate(-2deg); filter: brightness(.96); }
|
|
||||||
to { transform: scale(1.06) rotate(2deg); filter: brightness(1.12); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egImpact {
|
|
||||||
0% { opacity: 0; transform: translate(-50%, -42%) scale(.55); }
|
|
||||||
35% { opacity: 1; transform: translate(-50%, -50%) scale(1.16); }
|
|
||||||
72% { opacity: 1; transform: translate(-50%, -54%) scale(1); }
|
|
||||||
100% { opacity: 0; transform: translate(-50%, -76%) scale(.92); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egJackpotIn {
|
|
||||||
0% { opacity: 0; transform: translate(-50%, -45%) scale(.48) rotate(-4deg); }
|
|
||||||
20% { opacity: 1; transform: translate(-50%, -50%) scale(1.09) rotate(2deg); }
|
|
||||||
31% { transform: translate(-50%, -50%) scale(.98) rotate(0); }
|
|
||||||
78% { opacity: 1; transform: translate(-50%, -53%) scale(1); }
|
|
||||||
100% { opacity: 0; transform: translate(-50%, -68%) scale(.92); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egTripleIn {
|
|
||||||
0% { opacity: 0; transform: translate(-50%, -44%) scale(.82); }
|
|
||||||
20% { opacity: 1; transform: translate(-50%, -50%) scale(1.03); }
|
|
||||||
74% { opacity: 1; transform: translate(-50%, -52%) scale(1); }
|
|
||||||
100% { opacity: 0; transform: translate(-50%, -60%) scale(.96); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egTripleCan {
|
|
||||||
0% { opacity: 0; transform: translateY(18rpx) scale(.72); }
|
|
||||||
100% { opacity: 1; transform: translateY(0) scale(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFourIn {
|
|
||||||
0% { opacity: 0; transform: translate(-50%, -44%) scale(.62) rotate(-3deg); }
|
|
||||||
18% { opacity: 1; transform: translate(-50%, -50%) scale(1.08) rotate(1deg); }
|
|
||||||
29% { transform: translate(-50%, -50%) scale(.98) rotate(0); }
|
|
||||||
78% { opacity: 1; transform: translate(-50%, -52%) scale(1); }
|
|
||||||
100% { opacity: 0; transform: translate(-50%, -65%) scale(.94); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFourCan {
|
|
||||||
0% { opacity: 0; transform: translateY(-22rpx) rotate(-7deg) scale(.65); }
|
|
||||||
75% { opacity: 1; transform: translateY(5rpx) rotate(2deg) scale(1.05); }
|
|
||||||
100% { opacity: 1; transform: translateY(0) rotate(0) scale(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egFiveCan {
|
|
||||||
0% { opacity: 0; transform: translateY(-40rpx) scale(.52) rotate(-8deg); filter: brightness(1.5); }
|
|
||||||
70% { opacity: 1; transform: translateY(7rpx) scale(1.08) rotate(2deg); }
|
|
||||||
100% { opacity: 1; transform: translateY(0) scale(1) rotate(0); filter: brightness(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egLockedCan {
|
|
||||||
from { opacity: .62; transform: scale(.92); filter: brightness(.9); }
|
|
||||||
to { opacity: 1; transform: scale(1.06); filter: brightness(1.2); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egPromisePulse {
|
|
||||||
from { transform: scale(.97); box-shadow: 0 5rpx 15rpx rgba(28,7,62,.22); }
|
|
||||||
to { transform: scale(1.03); box-shadow: 0 7rpx 21rpx rgba(255,221,89,.38); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egReelStop {
|
|
||||||
0% { opacity: .2; transform: translateY(-48rpx) scaleY(1.4); filter: blur(5rpx); }
|
|
||||||
70% { opacity: 1; transform: translateY(7rpx) scaleY(.94); filter: blur(0); }
|
|
||||||
100% { transform: translateY(0) scaleY(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egLights {
|
|
||||||
0% { opacity: .35; }
|
|
||||||
100% { opacity: 1; }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egConfettiFall {
|
|
||||||
0% { opacity: 0; transform: translate3d(0, -8vh, 0) rotate(0deg) scale(.7); }
|
|
||||||
9% { opacity: 1; }
|
|
||||||
48% { transform: translate3d(42rpx, 48vh, 0) rotate(420deg) scale(1); }
|
|
||||||
100% { opacity: .92; transform: translate3d(-28rpx, 112vh, 0) rotate(920deg) scale(.86); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egPointsPop {
|
|
||||||
0% { opacity: 0; transform: scale(.35) rotate(-7deg); }
|
|
||||||
55% { opacity: 1; transform: scale(1.28) rotate(3deg); }
|
|
||||||
78% { transform: scale(.92) rotate(0); }
|
|
||||||
100% { opacity: 1; transform: scale(1); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egStageIn {
|
|
||||||
0% { opacity: 0; transform: scale(.7) translateY(34rpx); }
|
|
||||||
18% { opacity: 1; transform: scale(1.06) translateY(0); }
|
|
||||||
30%, 76% { opacity: 1; transform: scale(1); }
|
|
||||||
100% { opacity: 0; transform: scale(.96) translateY(-22rpx); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes egReshuffleSpin {
|
|
||||||
from { transform: rotate(0); }
|
|
||||||
to { transform: rotate(360deg); }
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-height: 760px) {
|
|
||||||
.eg-task-card { padding-top: 13rpx; padding-bottom: 13rpx; }
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,49 +0,0 @@
|
|||||||
/**
|
|
||||||
* 将 SVG 字符串转为小程序可用的 data URL(base64 在真机上更稳定)
|
|
||||||
*/
|
|
||||||
|
|
||||||
function utf8ToBytes(str) {
|
|
||||||
const encoded = encodeURIComponent(str)
|
|
||||||
const bytes = []
|
|
||||||
for (let i = 0; i < encoded.length; i++) {
|
|
||||||
if (encoded.charCodeAt(i) === 37) {
|
|
||||||
bytes.push(parseInt(encoded.substring(i + 1, i + 3), 16))
|
|
||||||
i += 2
|
|
||||||
} else {
|
|
||||||
bytes.push(encoded.charCodeAt(i))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new Uint8Array(bytes)
|
|
||||||
}
|
|
||||||
|
|
||||||
function bytesToBase64(bytes) {
|
|
||||||
if (typeof uni !== 'undefined' && typeof uni.arrayBufferToBase64 === 'function') {
|
|
||||||
return uni.arrayBufferToBase64(bytes.buffer)
|
|
||||||
}
|
|
||||||
if (typeof btoa !== 'undefined') {
|
|
||||||
let binary = ''
|
|
||||||
for (let i = 0; i < bytes.length; i++) {
|
|
||||||
binary += String.fromCharCode(bytes[i])
|
|
||||||
}
|
|
||||||
return btoa(binary)
|
|
||||||
}
|
|
||||||
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
|
||||||
let result = ''
|
|
||||||
for (let i = 0; i < bytes.length; i += 3) {
|
|
||||||
const a = bytes[i]
|
|
||||||
const b = i + 1 < bytes.length ? bytes[i + 1] : 0
|
|
||||||
const c = i + 2 < bytes.length ? bytes[i + 2] : 0
|
|
||||||
result += chars[a >> 2]
|
|
||||||
result += chars[((a & 3) << 4) | (b >> 4)]
|
|
||||||
result += i + 1 < bytes.length ? chars[((b & 15) << 2) | (c >> 6)] : '='
|
|
||||||
result += i + 2 < bytes.length ? chars[c & 63] : '='
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
|
|
||||||
export function svgToDataUrl(svg) {
|
|
||||||
const normalized = String(svg || '').trim()
|
|
||||||
if (!normalized) return ''
|
|
||||||
const base64 = bytesToBase64(utf8ToBytes(normalized))
|
|
||||||
return `data:image/svg+xml;base64,${base64}`
|
|
||||||
}
|
|
||||||
@@ -1514,7 +1514,7 @@ async function goMorePage() {
|
|||||||
|
|
||||||
function goGamePage() {
|
function goGamePage() {
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
url: '/tongji/endless-game/index',
|
url: '/tongji/pages/game',
|
||||||
fail() {
|
fail() {
|
||||||
uni.showToast({ title: '暂时无法打开游戏', icon: 'none' })
|
uni.showToast({ title: '暂时无法打开游戏', icon: 'none' })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
import type { CameraFrame } from './types'
|
||||||
|
|
||||||
|
type FrameListener = {
|
||||||
|
start: () => void
|
||||||
|
stop: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
type CameraContextLike = {
|
||||||
|
onCameraFrame?: (cb: (frame: { width: number; height: number; data: ArrayBuffer }) => void) => FrameListener
|
||||||
|
}
|
||||||
|
|
||||||
|
function createContext(cameraId?: string): CameraContextLike | null {
|
||||||
|
try {
|
||||||
|
// uni-app 优先:可按 camera 组件 id 绑定
|
||||||
|
if (typeof uni !== 'undefined' && typeof uni.createCameraContext === 'function') {
|
||||||
|
return uni.createCameraContext(cameraId || 'gripCamera') as CameraContextLike
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
try {
|
||||||
|
// @ts-ignore
|
||||||
|
if (typeof wx !== 'undefined' && typeof wx.createCameraContext === 'function') {
|
||||||
|
// @ts-ignore
|
||||||
|
return wx.createCameraContext() as CameraContextLike
|
||||||
|
}
|
||||||
|
} catch (_) {}
|
||||||
|
// #endif
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isCameraFrameSupported(): boolean {
|
||||||
|
try {
|
||||||
|
const ctx = createContext('gripCamera')
|
||||||
|
return typeof ctx?.onCameraFrame === 'function'
|
||||||
|
} catch (_) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 管理 CameraContext.onCameraFrame:只保留最新一帧,不入 Vue 响应式。
|
||||||
|
*/
|
||||||
|
export function createCameraFramePump(options?: { cameraId?: string }) {
|
||||||
|
let listener: FrameListener | null = null
|
||||||
|
let latest: CameraFrame | null = null
|
||||||
|
let running = false
|
||||||
|
let callbackCount = 0
|
||||||
|
let fpsWindowStart = Date.now()
|
||||||
|
let fps = 0
|
||||||
|
let onFrame: ((frame: CameraFrame) => void) | null = null
|
||||||
|
|
||||||
|
function start(cb: (frame: CameraFrame) => void) {
|
||||||
|
stop()
|
||||||
|
onFrame = cb
|
||||||
|
const ctx = createContext(options?.cameraId || 'gripCamera')
|
||||||
|
if (!ctx?.onCameraFrame) {
|
||||||
|
throw new Error('当前基础库不支持 onCameraFrame')
|
||||||
|
}
|
||||||
|
|
||||||
|
listener = ctx.onCameraFrame((raw) => {
|
||||||
|
if (!running) return
|
||||||
|
const frame: CameraFrame = {
|
||||||
|
width: raw.width,
|
||||||
|
height: raw.height,
|
||||||
|
data: raw.data,
|
||||||
|
ts: Date.now(),
|
||||||
|
}
|
||||||
|
latest = frame
|
||||||
|
callbackCount += 1
|
||||||
|
const now = Date.now()
|
||||||
|
if (now - fpsWindowStart >= 1000) {
|
||||||
|
fps = callbackCount
|
||||||
|
callbackCount = 0
|
||||||
|
fpsWindowStart = now
|
||||||
|
}
|
||||||
|
onFrame?.(frame)
|
||||||
|
})
|
||||||
|
running = true
|
||||||
|
listener.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop() {
|
||||||
|
running = false
|
||||||
|
try {
|
||||||
|
listener?.stop()
|
||||||
|
} catch (_) {}
|
||||||
|
listener = null
|
||||||
|
onFrame = null
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLatest() {
|
||||||
|
return latest
|
||||||
|
}
|
||||||
|
|
||||||
|
function getFps() {
|
||||||
|
return fps
|
||||||
|
}
|
||||||
|
|
||||||
|
function isRunning() {
|
||||||
|
return running
|
||||||
|
}
|
||||||
|
|
||||||
|
return { start, stop, getLatest, getFps, isRunning }
|
||||||
|
}
|
||||||
|
|
||||||
|
export type CameraFramePump = ReturnType<typeof createCameraFramePump>
|
||||||
@@ -0,0 +1,186 @@
|
|||||||
|
import { createCameraFramePump } from './camera-frames'
|
||||||
|
import { createOpenCloseClassifier } from './open-close-classifier'
|
||||||
|
import { estimateOpennessFromRoi } from './roi-openness'
|
||||||
|
import type { GestureObservation, GestureSource, RepCompletedInfo } from './types'
|
||||||
|
import {
|
||||||
|
createVisionKitHandDetector,
|
||||||
|
getVisionKitSupportHint,
|
||||||
|
isLikelyVisionKitUnsupportedHost,
|
||||||
|
isVisionKitHandSupported,
|
||||||
|
} from './visionkit-hand'
|
||||||
|
|
||||||
|
export interface GesturePipelineHandlers {
|
||||||
|
onObservation: (obs: GestureObservation) => void
|
||||||
|
onRepCompleted?: (info: RepCompletedInfo) => void
|
||||||
|
/** 非致命提示(如已降级 ROI) */
|
||||||
|
onWarning?: (message: string) => void
|
||||||
|
/** 致命错误(相机帧都起不来) */
|
||||||
|
onError?: (message: string) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编排:优先 VisionKit;开发者工具/不支持设备自动降级 ROI 联调。
|
||||||
|
*/
|
||||||
|
export function createGesturePipeline(handlers: GesturePipelineHandlers) {
|
||||||
|
const pump = createCameraFramePump()
|
||||||
|
// ~10Hz;置信度适中,减少噪声帧
|
||||||
|
const detector = createVisionKitHandDetector({ minIntervalMs: 100, scoreThreshold: 0.28 })
|
||||||
|
// 握力环校准:半开即可计张开,相对抬升即可完成松开
|
||||||
|
const classifier = createOpenCloseClassifier({
|
||||||
|
openEnter: 0.45,
|
||||||
|
openExit: 0.38,
|
||||||
|
closeEnter: 0.36,
|
||||||
|
closeExit: 0.42,
|
||||||
|
emaAlpha: 0.42,
|
||||||
|
minHoldMs: 120,
|
||||||
|
lostMs: 1400,
|
||||||
|
reopenRise: 0.08,
|
||||||
|
})
|
||||||
|
|
||||||
|
let active = false
|
||||||
|
let paused = false
|
||||||
|
let mode: GestureSource = 'none'
|
||||||
|
let lastRoiTs = 0
|
||||||
|
let lastUiEmitTs = 0
|
||||||
|
let lastEmittedPhase = ''
|
||||||
|
let lastEmittedCompression = -1
|
||||||
|
let lastEmittedHold = -1
|
||||||
|
let lastSyntheticTs = 0
|
||||||
|
const UI_EMIT_MIN_MS = 100
|
||||||
|
|
||||||
|
function emitFromSample(sample: Parameters<typeof classifier.update>[0]) {
|
||||||
|
if (!active || paused) return
|
||||||
|
const out = classifier.update(sample)
|
||||||
|
const now = Date.now()
|
||||||
|
const phaseChanged = out.phase !== lastEmittedPhase
|
||||||
|
const due = now - lastUiEmitTs >= UI_EMIT_MIN_MS
|
||||||
|
const compressionDelta = Math.abs(out.compression - lastEmittedCompression) >= 0.08
|
||||||
|
const holdDelta = Math.abs(out.holdProgress - lastEmittedHold) >= 0.12
|
||||||
|
|
||||||
|
// 计次始终即时;UI 观察节流,避免小程序每帧 setData 卡顿
|
||||||
|
if (out.rep) {
|
||||||
|
handlers.onRepCompleted?.(out.rep)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!phaseChanged && !due && !compressionDelta && !holdDelta && !out.rep) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
lastUiEmitTs = now
|
||||||
|
lastEmittedPhase = out.phase
|
||||||
|
lastEmittedCompression = out.compression
|
||||||
|
lastEmittedHold = out.holdProgress
|
||||||
|
|
||||||
|
handlers.onObservation({
|
||||||
|
ts: now,
|
||||||
|
openness: out.openness,
|
||||||
|
compression: out.compression,
|
||||||
|
phase: out.phase,
|
||||||
|
trackingQuality: out.trackingQuality,
|
||||||
|
source: out.source,
|
||||||
|
holdProgress: out.holdProgress,
|
||||||
|
fps: pump.getFps(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function startVisionKit(): Promise<boolean> {
|
||||||
|
if (!isVisionKitHandSupported()) return false
|
||||||
|
try {
|
||||||
|
await detector.start((sample) => emitFromSample(sample))
|
||||||
|
mode = 'visionkit'
|
||||||
|
return true
|
||||||
|
} catch (_) {
|
||||||
|
detector.stop()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function startRoiFallback(reason?: string) {
|
||||||
|
mode = 'roi'
|
||||||
|
const hint = reason || getVisionKitSupportHint() || '已降级为 ROI 联调模式(非真机手势识别)'
|
||||||
|
handlers.onWarning?.(hint)
|
||||||
|
pump.start((frame) => {
|
||||||
|
if (!active || paused) return
|
||||||
|
const now = Date.now()
|
||||||
|
if (now - lastRoiTs < 160) return
|
||||||
|
lastRoiTs = now
|
||||||
|
emitFromSample(estimateOpennessFromRoi(frame))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
stop()
|
||||||
|
|
||||||
|
// 开发者工具直接走 ROI,避免 createVKSession 抛 “does not support version v1”
|
||||||
|
const forceRoi = isLikelyVisionKitUnsupportedHost()
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!forceRoi) {
|
||||||
|
const vkOk = await startVisionKit()
|
||||||
|
if (vkOk) {
|
||||||
|
active = true
|
||||||
|
paused = false
|
||||||
|
pump.start((frame) => {
|
||||||
|
if (!active || paused) return
|
||||||
|
detector.pushFrame(frame)
|
||||||
|
// 手离开画面时 VK 可能完全静默:补发“无手”样本,
|
||||||
|
// 让状态机能正常走丢失→UNTRACKED,回来后能重新武装
|
||||||
|
const latest = detector.getLatest()
|
||||||
|
const now = Date.now()
|
||||||
|
if ((!latest || now - latest.ts > 500) && now - lastSyntheticTs > 250) {
|
||||||
|
lastSyntheticTs = now
|
||||||
|
emitFromSample(null)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// VisionKit 不可用:ROI 回退,保证链路可联调
|
||||||
|
active = true
|
||||||
|
paused = false
|
||||||
|
startRoiFallback(forceRoi ? getVisionKitSupportHint() : 'VisionKit 启动失败,已降级 ROI 联调')
|
||||||
|
return true
|
||||||
|
} catch (e: any) {
|
||||||
|
handlers.onError?.(e?.message || '手势管线启动失败')
|
||||||
|
stop()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function setPaused(v: boolean) {
|
||||||
|
paused = v
|
||||||
|
}
|
||||||
|
|
||||||
|
function setNearGoal(enabled: boolean) {
|
||||||
|
classifier.setNearGoal(enabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop() {
|
||||||
|
active = false
|
||||||
|
paused = false
|
||||||
|
mode = 'none'
|
||||||
|
lastRoiTs = 0
|
||||||
|
lastUiEmitTs = 0
|
||||||
|
lastEmittedPhase = ''
|
||||||
|
lastEmittedCompression = -1
|
||||||
|
lastEmittedHold = -1
|
||||||
|
lastSyntheticTs = 0
|
||||||
|
pump.stop()
|
||||||
|
detector.stop()
|
||||||
|
classifier.setNearGoal(false)
|
||||||
|
classifier.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
function isActive() {
|
||||||
|
return active
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMode() {
|
||||||
|
return mode
|
||||||
|
}
|
||||||
|
|
||||||
|
return { start, stop, setPaused, setNearGoal, isActive, getMode }
|
||||||
|
}
|
||||||
|
|
||||||
|
export type GesturePipeline = ReturnType<typeof createGesturePipeline>
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
import type { GesturePhase, GestureSource, HandSample, RepCompletedInfo, TrackingQuality } from './types'
|
||||||
|
|
||||||
|
export interface ClassifierOutput {
|
||||||
|
phase: GesturePhase
|
||||||
|
trackingQuality: TrackingQuality
|
||||||
|
openness: number
|
||||||
|
compression: number
|
||||||
|
holdProgress: number
|
||||||
|
source: GestureSource
|
||||||
|
rep?: RepCompletedInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开合状态机(握力环校准版)
|
||||||
|
* 计数:OPEN → CLOSING → CLOSED(保持) → REOPENING → 相对张开,才 +1
|
||||||
|
* 松开不必完全张开:相对握紧谷底抬升即可计次,避免做到后期张不开导致卡在 29
|
||||||
|
*/
|
||||||
|
export function createOpenCloseClassifier(options?: {
|
||||||
|
openEnter?: number
|
||||||
|
openExit?: number
|
||||||
|
closeEnter?: number
|
||||||
|
closeExit?: number
|
||||||
|
minHoldMs?: number
|
||||||
|
lostMs?: number
|
||||||
|
emaAlpha?: number
|
||||||
|
/** 相对松开:相对握紧谷底至少抬升这么多才计 1 次 */
|
||||||
|
reopenRise?: number
|
||||||
|
}) {
|
||||||
|
const openEnter = options?.openEnter ?? 0.48
|
||||||
|
const openExit = options?.openExit ?? 0.4
|
||||||
|
const closeEnter = options?.closeEnter ?? 0.38
|
||||||
|
const closeExit = options?.closeExit ?? 0.44
|
||||||
|
const minHoldMs = options?.minHoldMs ?? 140
|
||||||
|
const lostMs = options?.lostMs ?? 1200
|
||||||
|
const emaAlpha = options?.emaAlpha ?? 0.4
|
||||||
|
const reopenRise = options?.reopenRise ?? 0.1
|
||||||
|
|
||||||
|
let phase: GesturePhase = 'UNTRACKED'
|
||||||
|
let openness = 0.5
|
||||||
|
let holdStartedAt = 0
|
||||||
|
let holdProgress = 0
|
||||||
|
let lastSeenAt = 0
|
||||||
|
let opennessPeak = 0
|
||||||
|
let closedTrough = 1
|
||||||
|
let source: GestureSource = 'none'
|
||||||
|
let lastRepTs = 0
|
||||||
|
|
||||||
|
let reopenRiseActive = reopenRise
|
||||||
|
|
||||||
|
function resetPartial() {
|
||||||
|
holdStartedAt = 0
|
||||||
|
holdProgress = 0
|
||||||
|
opennessPeak = 0
|
||||||
|
closedTrough = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 接近目标次数时进一步放宽松开判定 */
|
||||||
|
function setNearGoal(enabled: boolean) {
|
||||||
|
reopenRiseActive = enabled ? 0.045 : reopenRise
|
||||||
|
}
|
||||||
|
|
||||||
|
function canCountRep(now: number) {
|
||||||
|
// 防连发:两次有效计次至少间隔 280ms
|
||||||
|
return now - lastRepTs >= 280
|
||||||
|
}
|
||||||
|
|
||||||
|
function update(sample: HandSample | null, now = Date.now()): ClassifierOutput {
|
||||||
|
let rep: RepCompletedInfo | undefined
|
||||||
|
|
||||||
|
if (!sample || sample.score <= 0.05) {
|
||||||
|
if (lastSeenAt && now - lastSeenAt > lostMs) {
|
||||||
|
phase = 'UNTRACKED'
|
||||||
|
resetPartial()
|
||||||
|
}
|
||||||
|
const withinGrace = lastSeenAt > 0 && now - lastSeenAt <= 600
|
||||||
|
return {
|
||||||
|
phase,
|
||||||
|
trackingQuality: phase === 'UNTRACKED' ? 'lost' : withinGrace ? 'good' : 'weak',
|
||||||
|
openness,
|
||||||
|
compression: 1 - openness,
|
||||||
|
holdProgress,
|
||||||
|
source,
|
||||||
|
rep,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastSeenAt = now
|
||||||
|
source = sample.source
|
||||||
|
openness = openness * (1 - emaAlpha) + sample.openness * emaAlpha
|
||||||
|
const quality: TrackingQuality = sample.score >= 0.22 ? 'good' : 'weak'
|
||||||
|
|
||||||
|
switch (phase) {
|
||||||
|
case 'UNTRACKED':
|
||||||
|
if (openness >= openEnter) {
|
||||||
|
phase = 'OPEN_READY'
|
||||||
|
opennessPeak = openness
|
||||||
|
resetPartial()
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'OPEN_READY':
|
||||||
|
opennessPeak = Math.max(opennessPeak, openness)
|
||||||
|
if (openness <= closeEnter) {
|
||||||
|
phase = 'CLOSING'
|
||||||
|
closedTrough = openness
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'CLOSING':
|
||||||
|
closedTrough = Math.min(closedTrough, openness)
|
||||||
|
if (openness <= closeEnter) {
|
||||||
|
phase = 'CLOSED_CONFIRMED'
|
||||||
|
holdStartedAt = now
|
||||||
|
holdProgress = 0
|
||||||
|
closedTrough = openness
|
||||||
|
} else if (openness >= openEnter) {
|
||||||
|
phase = 'OPEN_READY'
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'CLOSED_CONFIRMED': {
|
||||||
|
closedTrough = Math.min(closedTrough, openness)
|
||||||
|
const held = now - holdStartedAt
|
||||||
|
holdProgress = Math.min(1, held / minHoldMs)
|
||||||
|
if (held >= minHoldMs && openness >= closeExit) {
|
||||||
|
phase = 'REOPENING'
|
||||||
|
} else if (openness >= openEnter && held < minHoldMs) {
|
||||||
|
// 保持不足就完全张开:作废本轮
|
||||||
|
phase = 'OPEN_READY'
|
||||||
|
resetPartial()
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'REOPENING': {
|
||||||
|
closedTrough = Math.min(closedTrough, openness)
|
||||||
|
const rise = openness - closedTrough
|
||||||
|
// 绝对张开,或相对握紧谷底抬升足够 → 计 1 次
|
||||||
|
const reopened = openness >= openEnter || (rise >= reopenRiseActive && openness >= closeExit)
|
||||||
|
if (reopened && canCountRep(now)) {
|
||||||
|
lastRepTs = now
|
||||||
|
rep = {
|
||||||
|
ts: now,
|
||||||
|
holdMs: holdStartedAt ? now - holdStartedAt : 0,
|
||||||
|
opennessPeak,
|
||||||
|
source,
|
||||||
|
}
|
||||||
|
phase = 'OPEN_READY'
|
||||||
|
resetPartial()
|
||||||
|
opennessPeak = openness
|
||||||
|
} else if (openness <= closeEnter) {
|
||||||
|
// 松开中又握回去:回到保持,不直接作废
|
||||||
|
phase = 'CLOSED_CONFIRMED'
|
||||||
|
holdStartedAt = now
|
||||||
|
holdProgress = 0
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
phase,
|
||||||
|
trackingQuality: quality,
|
||||||
|
openness,
|
||||||
|
compression: 1 - openness,
|
||||||
|
holdProgress,
|
||||||
|
source,
|
||||||
|
rep,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function reset() {
|
||||||
|
phase = 'UNTRACKED'
|
||||||
|
openness = 0.5
|
||||||
|
source = 'none'
|
||||||
|
lastSeenAt = 0
|
||||||
|
lastRepTs = 0
|
||||||
|
reopenRiseActive = reopenRise
|
||||||
|
resetPartial()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPhase() {
|
||||||
|
return phase
|
||||||
|
}
|
||||||
|
|
||||||
|
return { update, reset, getPhase, setNearGoal }
|
||||||
|
}
|
||||||
|
|
||||||
|
export type OpenCloseClassifier = ReturnType<typeof createOpenCloseClassifier>
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
import type { HandSample, Point2D } from './types'
|
||||||
|
|
||||||
|
/** VisionKit 文档:1=布/开掌,3=握拳 */
|
||||||
|
const GESTURE_OPEN = 1
|
||||||
|
const GESTURE_FIST = 3
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenPose-21 指尖索引(相对手腕距离用于连续 openness)
|
||||||
|
* 0 wrist, 4 thumb tip, 8 index, 12 middle, 16 ring, 20 pinky
|
||||||
|
*/
|
||||||
|
const TIP_INDEXES = [4, 8, 12, 16, 20]
|
||||||
|
|
||||||
|
function dist(a: Point2D, b: Point2D) {
|
||||||
|
const dx = a.x - b.x
|
||||||
|
const dy = a.y - b.y
|
||||||
|
return Math.sqrt(dx * dx + dy * dy)
|
||||||
|
}
|
||||||
|
|
||||||
|
function clamp01(v: number) {
|
||||||
|
return Math.max(0, Math.min(1, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 离散手势 → 开合度;未知手势返回 null(交给几何或保持) */
|
||||||
|
export function opennessFromGesture(gesture?: number): number | null {
|
||||||
|
if (gesture === GESTURE_OPEN) return 1
|
||||||
|
if (gesture === GESTURE_FIST) return 0
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用指尖到手腕的平均距离 / 掌宽 估计 openness。
|
||||||
|
* 握力环场景开合幅度偏小,映射区间比裸掌更紧一些。
|
||||||
|
*/
|
||||||
|
export function opennessFromLandmarks(points?: Point2D[]): number | null {
|
||||||
|
if (!points || points.length < 21) return null
|
||||||
|
const wrist = points[0]
|
||||||
|
const mcpIndex = points[5]
|
||||||
|
const mcpPinky = points[17]
|
||||||
|
const palmWidth = dist(mcpIndex, mcpPinky)
|
||||||
|
if (palmWidth < 1e-6) return null
|
||||||
|
|
||||||
|
let tipSum = 0
|
||||||
|
for (const i of TIP_INDEXES) {
|
||||||
|
tipSum += dist(points[i], wrist)
|
||||||
|
}
|
||||||
|
const tipMean = tipSum / TIP_INDEXES.length
|
||||||
|
// 握力环:握紧约 0.9~1.35 掌宽,半开约 1.5~2.2 掌宽
|
||||||
|
const ratio = tipMean / palmWidth
|
||||||
|
return clamp01((ratio - 0.95) / 1.15)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function mergeOpenness(sample: Pick<HandSample, 'gesture' | 'points'>): number | null {
|
||||||
|
const fromGeom = opennessFromLandmarks(sample.points)
|
||||||
|
const fromGesture = opennessFromGesture(sample.gesture)
|
||||||
|
|
||||||
|
if (fromGeom != null && fromGesture != null) {
|
||||||
|
// 几何为主:离散手势(布/拳)在捏环时容易误判,只做轻牵引
|
||||||
|
return clamp01(fromGeom * 0.85 + fromGesture * 0.15)
|
||||||
|
}
|
||||||
|
if (fromGeom != null) return fromGeom
|
||||||
|
if (fromGesture != null) return fromGesture
|
||||||
|
return null
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import type { CameraFrame, HandSample } from './types'
|
||||||
|
|
||||||
|
function clamp01(v: number) {
|
||||||
|
return Math.max(0, Math.min(1, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 开发者工具 / 不支持 VisionKit 时的粗开合估计:
|
||||||
|
* 取画面中心 ROI 的亮度方差与边缘能量,映射到 openness。
|
||||||
|
* 仅用于打通链路与 UI 联调,不能作为产品识别。
|
||||||
|
*/
|
||||||
|
export function estimateOpennessFromRoi(frame: CameraFrame): HandSample {
|
||||||
|
const { width, height, data } = frame
|
||||||
|
const u8 = new Uint8Array(data)
|
||||||
|
const cx0 = Math.floor(width * 0.28)
|
||||||
|
const cy0 = Math.floor(height * 0.22)
|
||||||
|
const cx1 = Math.floor(width * 0.72)
|
||||||
|
const cy1 = Math.floor(height * 0.78)
|
||||||
|
const step = Math.max(4, Math.floor(Math.min(width, height) / 40))
|
||||||
|
|
||||||
|
let count = 0
|
||||||
|
let sum = 0
|
||||||
|
let sumSq = 0
|
||||||
|
let edge = 0
|
||||||
|
let prev = 0
|
||||||
|
|
||||||
|
for (let y = cy0; y < cy1; y += step) {
|
||||||
|
for (let x = cx0; x < cx1; x += step) {
|
||||||
|
const i = (y * width + x) * 4
|
||||||
|
const r = u8[i]
|
||||||
|
const g = u8[i + 1]
|
||||||
|
const b = u8[i + 2]
|
||||||
|
// 粗略肤色门控 + 亮度
|
||||||
|
const luma = 0.299 * r + 0.587 * g + 0.114 * b
|
||||||
|
const skinish = r > 60 && g > 30 && b > 20 && r >= g && Math.abs(r - g) > 8
|
||||||
|
if (!skinish && luma < 40) continue
|
||||||
|
sum += luma
|
||||||
|
sumSq += luma * luma
|
||||||
|
edge += Math.abs(luma - prev)
|
||||||
|
prev = luma
|
||||||
|
count += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count < 20) {
|
||||||
|
return {
|
||||||
|
ts: Date.now(),
|
||||||
|
openness: 0.5,
|
||||||
|
score: 0.05,
|
||||||
|
source: 'roi',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const mean = sum / count
|
||||||
|
const variance = Math.max(0, sumSq / count - mean * mean)
|
||||||
|
const edgeNorm = edge / count
|
||||||
|
|
||||||
|
// 张开手掌通常带来更大轮廓/边缘;握拳更紧凑。经验映射,仅联调。
|
||||||
|
const openness = clamp01((Math.sqrt(variance) / 55 + edgeNorm / 40) * 0.85)
|
||||||
|
const score = clamp01(0.25 + count / 800)
|
||||||
|
|
||||||
|
return {
|
||||||
|
ts: Date.now(),
|
||||||
|
openness,
|
||||||
|
score,
|
||||||
|
source: 'roi',
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/** 握力环 2.0 视觉观测与状态机共享类型 */
|
||||||
|
|
||||||
|
export type TrackingQuality = 'good' | 'weak' | 'lost'
|
||||||
|
|
||||||
|
export type GesturePhase =
|
||||||
|
| 'UNTRACKED'
|
||||||
|
| 'OPEN_READY'
|
||||||
|
| 'CLOSING'
|
||||||
|
| 'CLOSED_CONFIRMED'
|
||||||
|
| 'REOPENING'
|
||||||
|
|
||||||
|
export type GestureSource = 'visionkit' | 'roi' | 'mock' | 'none'
|
||||||
|
|
||||||
|
export interface Point2D {
|
||||||
|
x: number
|
||||||
|
y: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CameraFrame {
|
||||||
|
width: number
|
||||||
|
height: number
|
||||||
|
data: ArrayBuffer
|
||||||
|
ts: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface HandSample {
|
||||||
|
ts: number
|
||||||
|
/** 0=握紧 … 1=张开 */
|
||||||
|
openness: number
|
||||||
|
score: number
|
||||||
|
gesture?: number
|
||||||
|
points?: Point2D[]
|
||||||
|
source: GestureSource
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface GestureObservation {
|
||||||
|
ts: number
|
||||||
|
openness: number
|
||||||
|
/** 0=张开 … 1=握紧,供能量环使用 */
|
||||||
|
compression: number
|
||||||
|
phase: GesturePhase
|
||||||
|
trackingQuality: TrackingQuality
|
||||||
|
source: GestureSource
|
||||||
|
holdProgress: number
|
||||||
|
fps: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RepCompletedInfo {
|
||||||
|
ts: number
|
||||||
|
holdMs: number
|
||||||
|
opennessPeak: number
|
||||||
|
source: GestureSource
|
||||||
|
}
|
||||||
@@ -0,0 +1,296 @@
|
|||||||
|
import type { CameraFrame, HandSample, Point2D } from './types'
|
||||||
|
import { mergeOpenness } from './openness'
|
||||||
|
|
||||||
|
type VkSession = {
|
||||||
|
start: (cb?: (errno: number | null) => void) => void
|
||||||
|
stop?: () => void
|
||||||
|
destroy?: () => void
|
||||||
|
detectHand?: (opts: Record<string, unknown>) => void
|
||||||
|
on?: (event: string, cb: (...args: any[]) => void) => void
|
||||||
|
off?: (event: string, cb?: (...args: any[]) => void) => void
|
||||||
|
}
|
||||||
|
|
||||||
|
type WxLike = {
|
||||||
|
createVKSession?: (opts: Record<string, unknown>) => VkSession
|
||||||
|
getSystemInfoSync?: () => { SDKVersion?: string; platform?: string; brand?: string; model?: string }
|
||||||
|
getAppBaseInfo?: () => { SDKVersion?: string }
|
||||||
|
getDeviceInfo?: () => { platform?: string; brand?: string; model?: string; system?: string }
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWx(): WxLike | null {
|
||||||
|
// #ifdef MP-WEIXIN
|
||||||
|
// @ts-ignore
|
||||||
|
if (typeof wx !== 'undefined') return wx as WxLike
|
||||||
|
// #endif
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseVersion(v?: string) {
|
||||||
|
if (!v) return [0, 0, 0]
|
||||||
|
return v.split('.').map((n) => Number(n) || 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
function gteVersion(current: string | undefined, need: string) {
|
||||||
|
const a = parseVersion(current)
|
||||||
|
const b = parseVersion(need)
|
||||||
|
for (let i = 0; i < 3; i++) {
|
||||||
|
if (a[i] > b[i]) return true
|
||||||
|
if (a[i] < b[i]) return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
function readRuntimeInfo() {
|
||||||
|
const wxApi = getWx()
|
||||||
|
let SDKVersion = ''
|
||||||
|
let platform = ''
|
||||||
|
let brand = ''
|
||||||
|
let model = ''
|
||||||
|
try {
|
||||||
|
const base = wxApi?.getAppBaseInfo?.()
|
||||||
|
if (base?.SDKVersion) SDKVersion = base.SDKVersion
|
||||||
|
} catch (_) {}
|
||||||
|
try {
|
||||||
|
const device = wxApi?.getDeviceInfo?.()
|
||||||
|
if (device?.platform) platform = String(device.platform)
|
||||||
|
if (device?.brand) brand = String(device.brand)
|
||||||
|
if (device?.model) model = String(device.model)
|
||||||
|
} catch (_) {}
|
||||||
|
// 兼容旧环境
|
||||||
|
if (!SDKVersion || !platform) {
|
||||||
|
try {
|
||||||
|
const info = wxApi?.getSystemInfoSync?.() || {}
|
||||||
|
SDKVersion = SDKVersion || info.SDKVersion || ''
|
||||||
|
platform = platform || String(info.platform || '')
|
||||||
|
brand = brand || String(info.brand || '')
|
||||||
|
model = model || String(info.model || '')
|
||||||
|
} catch (_) {}
|
||||||
|
}
|
||||||
|
return { SDKVersion, platform, brand, model }
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 开发者工具 / 模拟器通常不支持 VisionKit Hand */
|
||||||
|
export function isLikelyVisionKitUnsupportedHost(): boolean {
|
||||||
|
const { platform, brand, model } = readRuntimeInfo()
|
||||||
|
const blob = `${platform} ${brand} ${model}`.toLowerCase()
|
||||||
|
return (
|
||||||
|
blob.includes('devtools') ||
|
||||||
|
blob.includes('mac') ||
|
||||||
|
blob.includes('windows') ||
|
||||||
|
blob.includes('devtools') ||
|
||||||
|
platform === 'devtools'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isVisionKitHandSupported(): boolean {
|
||||||
|
const wxApi = getWx()
|
||||||
|
if (!wxApi?.createVKSession) return false
|
||||||
|
if (isLikelyVisionKitUnsupportedHost()) return false
|
||||||
|
const { SDKVersion } = readRuntimeInfo()
|
||||||
|
// VisionKit Hand: 基础库 2.28.0+
|
||||||
|
return gteVersion(SDKVersion, '2.28.0')
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getVisionKitSupportHint(): string {
|
||||||
|
if (isLikelyVisionKitUnsupportedHost()) {
|
||||||
|
return '当前是开发者工具/电脑环境,VisionKit 不可用,请用真机预览;已自动降级为 ROI 联调模式'
|
||||||
|
}
|
||||||
|
if (!getWx()?.createVKSession) {
|
||||||
|
return '当前微信不支持 VisionKit'
|
||||||
|
}
|
||||||
|
const { SDKVersion } = readRuntimeInfo()
|
||||||
|
if (!gteVersion(SDKVersion, '2.28.0')) {
|
||||||
|
return `基础库 ${SDKVersion || '未知'} 过低,VisionKit Hand 需 ≥ 2.28.0`
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizePoints(raw: any): Point2D[] | undefined {
|
||||||
|
if (!Array.isArray(raw) || raw.length === 0) return undefined
|
||||||
|
return raw.map((p) => {
|
||||||
|
if (Array.isArray(p)) return { x: Number(p[0]) || 0, y: Number(p[1]) || 0 }
|
||||||
|
return { x: Number(p?.x) || 0, y: Number(p?.y) || 0 }
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function isUnsupportedDeviceError(err: unknown) {
|
||||||
|
const msg = String((err as any)?.message || err || '')
|
||||||
|
return (
|
||||||
|
msg.includes('does not support version') ||
|
||||||
|
msg.includes('not support') ||
|
||||||
|
msg.includes('不支持') ||
|
||||||
|
msg.includes('v1')
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* VisionKit Hand mode=2:由业务喂入 onCameraFrame 的 RGBA。
|
||||||
|
* 内部节流,保证同一时刻最多一次 detectHand。
|
||||||
|
*/
|
||||||
|
export function createVisionKitHandDetector(options?: {
|
||||||
|
scoreThreshold?: number
|
||||||
|
minIntervalMs?: number
|
||||||
|
}) {
|
||||||
|
const scoreThreshold = options?.scoreThreshold ?? 0.5
|
||||||
|
const minIntervalMs = options?.minIntervalMs ?? 100 // ~10Hz
|
||||||
|
// busy 卡死看门狗:detectHand 后超过该时长无回调则强制释放
|
||||||
|
// 注意:手不在画面时 VK 可能整段不回调,这属于正常情况,不能当作会话挂死
|
||||||
|
const BUSY_TIMEOUT_MS = 700
|
||||||
|
|
||||||
|
let session: VkSession | null = null
|
||||||
|
let started = false
|
||||||
|
let busy = false
|
||||||
|
let busySince = 0
|
||||||
|
let restarting = false
|
||||||
|
let sessionStartedAt = 0
|
||||||
|
let lastCallbackTs = 0
|
||||||
|
let lastDetectTs = 0
|
||||||
|
let latestSample: HandSample | null = null
|
||||||
|
let onSample: ((sample: HandSample) => void) | null = null
|
||||||
|
|
||||||
|
function handleAnchors(anchors: any[]) {
|
||||||
|
busy = false
|
||||||
|
lastCallbackTs = Date.now()
|
||||||
|
if (!anchors || !anchors.length) {
|
||||||
|
latestSample = {
|
||||||
|
ts: Date.now(),
|
||||||
|
openness: latestSample?.openness ?? 0.5,
|
||||||
|
score: 0,
|
||||||
|
source: 'visionkit',
|
||||||
|
}
|
||||||
|
onSample?.(latestSample)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const sorted = [...anchors].sort((a, b) => (Number(b?.score) || 0) - (Number(a?.score) || 0))
|
||||||
|
const best = sorted[0]
|
||||||
|
const points = normalizePoints(best?.points)
|
||||||
|
const gesture = Number(best?.gesture)
|
||||||
|
const score = Number(best?.score) || Number(best?.confidence?.[0]) || 0
|
||||||
|
const openness = mergeOpenness({ gesture, points })
|
||||||
|
|
||||||
|
latestSample = {
|
||||||
|
ts: Date.now(),
|
||||||
|
openness: openness == null ? (latestSample?.openness ?? 0.5) : openness,
|
||||||
|
score,
|
||||||
|
gesture: Number.isFinite(gesture) ? gesture : undefined,
|
||||||
|
points,
|
||||||
|
source: 'visionkit',
|
||||||
|
}
|
||||||
|
onSample?.(latestSample)
|
||||||
|
}
|
||||||
|
|
||||||
|
function teardownSession() {
|
||||||
|
busy = false
|
||||||
|
try {
|
||||||
|
session?.stop?.()
|
||||||
|
} catch (_) {}
|
||||||
|
try {
|
||||||
|
session?.destroy?.()
|
||||||
|
} catch (_) {}
|
||||||
|
session = null
|
||||||
|
}
|
||||||
|
|
||||||
|
function createAndStartSession(): Promise<void> {
|
||||||
|
const wxApi = getWx()
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
try {
|
||||||
|
session = wxApi!.createVKSession!({
|
||||||
|
track: {
|
||||||
|
hand: { mode: 2 },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
session.on?.('updateAnchors', (anchors: any[]) => {
|
||||||
|
handleAnchors(anchors || [])
|
||||||
|
})
|
||||||
|
session.on?.('removeAnchors', () => {
|
||||||
|
busy = false
|
||||||
|
lastCallbackTs = Date.now()
|
||||||
|
latestSample = {
|
||||||
|
ts: Date.now(),
|
||||||
|
openness: latestSample?.openness ?? 0.5,
|
||||||
|
score: 0,
|
||||||
|
source: 'visionkit',
|
||||||
|
}
|
||||||
|
onSample?.(latestSample)
|
||||||
|
})
|
||||||
|
session.start?.((errno) => {
|
||||||
|
if (errno) {
|
||||||
|
reject(new Error(`VisionKit start 失败: ${errno}`))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const now = Date.now()
|
||||||
|
started = true
|
||||||
|
busy = false
|
||||||
|
sessionStartedAt = now
|
||||||
|
lastCallbackTs = now
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
} catch (e: any) {
|
||||||
|
if (isUnsupportedDeviceError(e)) {
|
||||||
|
reject(new Error(getVisionKitSupportHint() || '当前设备不支持 VisionKit Hand'))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
reject(e instanceof Error ? e : new Error(String(e)))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function start(cb: (sample: HandSample) => void): Promise<void> {
|
||||||
|
stop()
|
||||||
|
onSample = cb
|
||||||
|
const wxApi = getWx()
|
||||||
|
if (!wxApi?.createVKSession) {
|
||||||
|
return Promise.reject(new Error('不支持 VisionKit'))
|
||||||
|
}
|
||||||
|
if (isLikelyVisionKitUnsupportedHost()) {
|
||||||
|
return Promise.reject(new Error(getVisionKitSupportHint()))
|
||||||
|
}
|
||||||
|
return createAndStartSession()
|
||||||
|
}
|
||||||
|
|
||||||
|
function pushFrame(frame: CameraFrame) {
|
||||||
|
if (!started || restarting) return
|
||||||
|
const now = Date.now()
|
||||||
|
|
||||||
|
// busy 看门狗:detectHand 无回调时强制释放,避免识别永久停摆
|
||||||
|
if (busy && now - busySince > BUSY_TIMEOUT_MS) {
|
||||||
|
busy = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 不再定期重建 VKSession:长跑中 destroy/create 容易把微信原生桥卡死(表现为 29 次后整页无响应)
|
||||||
|
if (!session?.detectHand || busy) return
|
||||||
|
if (now - lastDetectTs < minIntervalMs) return
|
||||||
|
lastDetectTs = now
|
||||||
|
busy = true
|
||||||
|
busySince = now
|
||||||
|
try {
|
||||||
|
session.detectHand({
|
||||||
|
frameBuffer: frame.data,
|
||||||
|
width: frame.width,
|
||||||
|
height: frame.height,
|
||||||
|
scoreThreshold,
|
||||||
|
algoMode: 2,
|
||||||
|
})
|
||||||
|
} catch (_) {
|
||||||
|
busy = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function stop() {
|
||||||
|
started = false
|
||||||
|
restarting = false
|
||||||
|
onSample = null
|
||||||
|
sessionStartedAt = 0
|
||||||
|
lastCallbackTs = 0
|
||||||
|
teardownSession()
|
||||||
|
}
|
||||||
|
|
||||||
|
function getLatest() {
|
||||||
|
return latestSample
|
||||||
|
}
|
||||||
|
|
||||||
|
return { start, stop, pushFrame, getLatest }
|
||||||
|
}
|
||||||
|
|
||||||
|
export type VisionKitHandDetector = ReturnType<typeof createVisionKitHandDetector>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -204,13 +204,13 @@ const instance = getCurrentInstance()
|
|||||||
|
|
||||||
// 由父级 prop 信号驱动触发特效(避免跨组件 ref 调用, 小程序端更稳)
|
// 由父级 prop 信号驱动触发特效(避免跨组件 ref 调用, 小程序端更稳)
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
crushSignal?: { type: CrushItemType; nonce: number } | null
|
crushSignal?: { type: CrushItemType; nonce: number; intensity?: number } | null
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => props.crushSignal,
|
() => props.crushSignal,
|
||||||
(sig) => {
|
(sig) => {
|
||||||
if (sig) triggerCrush(sig.type)
|
if (sig) triggerCrush(sig.type, sig.intensity ?? 1)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -270,12 +270,13 @@ function initCanvas() {
|
|||||||
// 触发捏碎特效
|
// 触发捏碎特效
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
function triggerCrush(itemType: CrushItemType) {
|
function triggerCrush(itemType: CrushItemType, intensity = 1) {
|
||||||
if (!ctx.value || !canvasNode.value) return
|
if (!ctx.value || !canvasNode.value) return
|
||||||
|
|
||||||
const item = CRUSH_ITEMS[itemType]
|
const item = CRUSH_ITEMS[itemType]
|
||||||
if (!item) return
|
if (!item) return
|
||||||
|
|
||||||
|
const scale = Math.max(0.45, Math.min(1.15, intensity))
|
||||||
const centerX = canvasWidth.value / 2
|
const centerX = canvasWidth.value / 2
|
||||||
const centerY = canvasHeight.value / 2
|
const centerY = canvasHeight.value / 2
|
||||||
const maxR = Math.min(canvasWidth.value, canvasHeight.value)
|
const maxR = Math.min(canvasWidth.value, canvasHeight.value)
|
||||||
@@ -284,39 +285,44 @@ function triggerCrush(itemType: CrushItemType) {
|
|||||||
flashList.value.push({
|
flashList.value.push({
|
||||||
x: centerX,
|
x: centerX,
|
||||||
y: centerY,
|
y: centerY,
|
||||||
radius: maxR * 0.12,
|
radius: maxR * 0.12 * scale,
|
||||||
maxRadius: maxR * 0.62,
|
maxRadius: maxR * 0.62 * scale,
|
||||||
color: item.flashColor,
|
color: item.flashColor,
|
||||||
life: 1.0,
|
life: 1.0,
|
||||||
decay: PHYSICS.FLASH_DECAY,
|
decay: PHYSICS.FLASH_DECAY,
|
||||||
})
|
})
|
||||||
|
|
||||||
// 2. 双层冲击波
|
// 2. 双层冲击波(低强度时只保留一层)
|
||||||
shockwaves.value.push({
|
shockwaves.value.push({
|
||||||
x: centerX, y: centerY,
|
x: centerX, y: centerY,
|
||||||
radius: 12, maxRadius: maxR * 0.62,
|
radius: 12, maxRadius: maxR * 0.62 * scale,
|
||||||
color: item.shockwaveColor, width: 5,
|
color: item.shockwaveColor, width: 5,
|
||||||
life: 1.0, decay: PHYSICS.SHOCKWAVE_DECAY,
|
life: 1.0, decay: PHYSICS.SHOCKWAVE_DECAY,
|
||||||
})
|
})
|
||||||
|
if (scale >= 0.8) {
|
||||||
shockwaves.value.push({
|
shockwaves.value.push({
|
||||||
x: centerX, y: centerY,
|
x: centerX, y: centerY,
|
||||||
radius: 4, maxRadius: maxR * 0.42,
|
radius: 4, maxRadius: maxR * 0.42 * scale,
|
||||||
color: item.shockwaveColor, width: 3,
|
color: item.shockwaveColor, width: 3,
|
||||||
life: 1.0, decay: PHYSICS.SHOCKWAVE_DECAY * 1.3,
|
life: 1.0, decay: PHYSICS.SHOCKWAVE_DECAY * 1.3,
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const debrisCount = Math.max(8, Math.round(item.debrisCount * scale))
|
||||||
|
const sparkCount = Math.max(6, Math.round(item.sparkCount * scale))
|
||||||
|
const sparkleCount = Math.max(2, Math.round(item.sparkleCount * scale))
|
||||||
|
|
||||||
// 3. 碎片(主体飞溅)
|
// 3. 碎片(主体飞溅)
|
||||||
for (let i = 0; i < item.debrisCount; i++) {
|
for (let i = 0; i < debrisCount; i++) {
|
||||||
const angle = (Math.PI * 2 * i) / item.debrisCount + (Math.random() - 0.5) * 0.7
|
const angle = (Math.PI * 2 * i) / debrisCount + (Math.random() - 0.5) * 0.7
|
||||||
const speed = item.speedMin + Math.random() * (item.speedMax - item.speedMin)
|
const speed = (item.speedMin + Math.random() * (item.speedMax - item.speedMin)) * (0.85 + scale * 0.15)
|
||||||
const size = item.sizeMin + Math.random() * (item.sizeMax - item.sizeMin)
|
const size = (item.sizeMin + Math.random() * (item.sizeMax - item.sizeMin)) * scale
|
||||||
const color = item.colors[Math.floor(Math.random() * item.colors.length)]
|
const color = item.colors[Math.floor(Math.random() * item.colors.length)]
|
||||||
const shape = item.shapes[Math.floor(Math.random() * item.shapes.length)]
|
const shape = item.shapes[Math.floor(Math.random() * item.shapes.length)]
|
||||||
|
|
||||||
// confetti(彩纸): 初速带强烈向上偏移 + 水平摇摆下落
|
|
||||||
const confetti = !!item.confetti
|
const confetti = !!item.confetti
|
||||||
const vy0 = confetti
|
const vy0 = confetti
|
||||||
? Math.sin(angle) * speed - 2.5 // 先向上窜
|
? Math.sin(angle) * speed - 2.5
|
||||||
: Math.sin(angle) * speed
|
: Math.sin(angle) * speed
|
||||||
|
|
||||||
debrisList.value.push({
|
debrisList.value.push({
|
||||||
@@ -330,18 +336,18 @@ function triggerCrush(itemType: CrushItemType) {
|
|||||||
rotation: Math.random() * Math.PI * 2,
|
rotation: Math.random() * Math.PI * 2,
|
||||||
rotationSpeed: (Math.random() - 0.5) * (confetti ? 0.5 : 0.3),
|
rotationSpeed: (Math.random() - 0.5) * (confetti ? 0.5 : 0.3),
|
||||||
life: 1.0,
|
life: 1.0,
|
||||||
decay: PHYSICS.DEBRIS_DECAY * (confetti ? 0.7 : 1),
|
decay: PHYSICS.DEBRIS_DECAY * (confetti ? 0.7 : 1) * (scale < 0.7 ? 1.25 : 1),
|
||||||
gravity: item.gravity,
|
gravity: item.gravity,
|
||||||
glow: !confetti, // 彩纸不发光,实色碎片发光
|
glow: !confetti,
|
||||||
swing: confetti ? 0.6 + Math.random() * 1.2 : 0,
|
swing: confetti ? 0.6 + Math.random() * 1.2 : 0,
|
||||||
age: Math.random() * Math.PI * 2,
|
age: Math.random() * Math.PI * 2,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 火花(细小高速亮点,带拖尾)
|
// 4. 火花
|
||||||
for (let i = 0; i < item.sparkCount; i++) {
|
for (let i = 0; i < sparkCount; i++) {
|
||||||
const angle = Math.random() * Math.PI * 2
|
const angle = Math.random() * Math.PI * 2
|
||||||
const speed = item.speedMax * (0.9 + Math.random() * 0.8)
|
const speed = item.speedMax * (0.9 + Math.random() * 0.8) * scale
|
||||||
const color = item.sparkColors[Math.floor(Math.random() * item.sparkColors.length)]
|
const color = item.sparkColors[Math.floor(Math.random() * item.sparkColors.length)]
|
||||||
sparkList.value.push({
|
sparkList.value.push({
|
||||||
x: centerX,
|
x: centerX,
|
||||||
@@ -359,8 +365,8 @@ function triggerCrush(itemType: CrushItemType) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 5. 闪烁星光
|
// 5. 闪烁星光
|
||||||
for (let i = 0; i < item.sparkleCount; i++) {
|
for (let i = 0; i < sparkleCount; i++) {
|
||||||
const r = maxR * (0.08 + Math.random() * 0.32)
|
const r = maxR * (0.08 + Math.random() * 0.32) * scale
|
||||||
const a = Math.random() * Math.PI * 2
|
const a = Math.random() * Math.PI * 2
|
||||||
const color = item.sparkColors[Math.floor(Math.random() * item.sparkColors.length)]
|
const color = item.sparkColors[Math.floor(Math.random() * item.sparkColors.length)]
|
||||||
sparkleList.value.push({
|
sparkleList.value.push({
|
||||||
@@ -370,7 +376,7 @@ function triggerCrush(itemType: CrushItemType) {
|
|||||||
rotation: Math.random() * Math.PI,
|
rotation: Math.random() * Math.PI,
|
||||||
spin: (Math.random() - 0.5) * 0.16,
|
spin: (Math.random() - 0.5) * 0.16,
|
||||||
color,
|
color,
|
||||||
life: 1.0 + Math.random() * 0.4, // 错峰出现
|
life: 1.0 + Math.random() * 0.4,
|
||||||
decay: PHYSICS.SPARKLE_DECAY * (0.8 + Math.random() * 0.5),
|
decay: PHYSICS.SPARKLE_DECAY * (0.8 + Math.random() * 0.5),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -227,11 +227,6 @@ export function revisitRateVisitOrderLines(params: {
|
|||||||
return request.get({ url: '/stats.revisitRate/visitOrderLines', params })
|
return request.get({ url: '/stats.revisitRate/visitOrderLines', params })
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 待分配诊单自动指派日志列表(定时命令 tcm:auto-assign-pending 写入,含分配/未分配原因) */
|
|
||||||
export function autoAssignLogLists(params: Record<string, any>) {
|
|
||||||
return request.get({ url: '/stats.autoAssignLog/lists', params })
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 医助个人业绩概览 */
|
/** 医助个人业绩概览 */
|
||||||
export function assistantPerformanceOverview(params: {
|
export function assistantPerformanceOverview(params: {
|
||||||
time_type?: string
|
time_type?: string
|
||||||
|
|||||||
@@ -1,154 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="auto-assign-log-page">
|
|
||||||
<el-card class="!border-none" shadow="never">
|
|
||||||
<el-form :inline="true" class="log-filter-form">
|
|
||||||
<el-form-item label="执行日期">
|
|
||||||
<el-date-picker
|
|
||||||
v-model="dateRange"
|
|
||||||
type="daterange"
|
|
||||||
range-separator="至"
|
|
||||||
start-placeholder="开始日期"
|
|
||||||
end-placeholder="结束日期"
|
|
||||||
value-format="YYYY-MM-DD"
|
|
||||||
clearable
|
|
||||||
@change="doSearch"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="结果">
|
|
||||||
<el-select v-model="queryParams.action" clearable placeholder="全部" class="w-[120px]" @change="doSearch">
|
|
||||||
<el-option label="已分配" value="1" />
|
|
||||||
<el-option label="未分配" value="0" />
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="关键词">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.keyword"
|
|
||||||
placeholder="患者/手机号/医助/诊单ID"
|
|
||||||
clearable
|
|
||||||
class="w-[220px]"
|
|
||||||
@keyup.enter="doSearch"
|
|
||||||
@clear="doSearch"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button type="primary" @click="doSearch">查询</el-button>
|
|
||||||
<el-button @click="handleReset">重置</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div class="log-hint">
|
|
||||||
由每日定时任务「待分配诊单自动指派」写入:按上月二诊复诊接诊率分档轮询分配(>70% 每人3条/日,60%~70% 每人2条/日,50%~60% 每人1条/日,<50% 不分)。每条待指派诊单一行,含分配 / 不分配原因。
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
|
|
||||||
<el-card class="!border-none mt-3" shadow="never">
|
|
||||||
<el-table :data="pager.lists" v-loading="pager.loading" size="default" stripe>
|
|
||||||
<el-table-column label="记录时间" width="160">
|
|
||||||
<template #default="{ row }">{{ row.create_time_text || '—' }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="诊单" width="90" prop="diagnosis_id" />
|
|
||||||
<el-table-column label="患者" min-width="110">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<div>{{ row.patient_name || '—' }}</div>
|
|
||||||
<div class="cell-sub">{{ row.patient_phone || '' }}</div>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="结果" width="90" align="center">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<el-tag :type="Number(row.action) === 1 ? 'success' : 'info'" size="small">
|
|
||||||
{{ row.action_text }}
|
|
||||||
</el-tag>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="医助" min-width="110">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<template v-if="Number(row.assistant_id) > 0">
|
|
||||||
<div>{{ row.assistant_name || '#' + row.assistant_id }}</div>
|
|
||||||
<div class="cell-sub">上月二诊接诊率 {{ formatRate(row.visit2_rate) }}</div>
|
|
||||||
</template>
|
|
||||||
<span v-else>—</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="档位" width="100" align="center">
|
|
||||||
<template #default="{ row }">{{ row.tier_text || '—' }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="轮次" width="70" align="center">
|
|
||||||
<template #default="{ row }">{{ Number(row.round_no) > 0 ? '第' + row.round_no + '轮' : '—' }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="原因" min-width="360" show-overflow-tooltip>
|
|
||||||
<template #default="{ row }">{{ row.reason }}</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="统计月" width="90" prop="stat_month" align="center" />
|
|
||||||
<el-table-column label="批次" width="180">
|
|
||||||
<template #default="{ row }">
|
|
||||||
<span class="cell-sub">{{ row.batch_no }}</span>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
</el-table>
|
|
||||||
<div class="flex justify-end mt-4">
|
|
||||||
<pagination v-model="pager" @change="getLists" />
|
|
||||||
</div>
|
|
||||||
</el-card>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts" name="statsAutoAssignLog">
|
|
||||||
import { autoAssignLogLists } from '@/api/stats'
|
|
||||||
import { usePaging } from '@/hooks/usePaging'
|
|
||||||
import { onMounted, reactive, ref, watch } from 'vue'
|
|
||||||
|
|
||||||
const dateRange = ref<[string, string] | null>(null)
|
|
||||||
|
|
||||||
const queryParams = reactive({
|
|
||||||
start_date: '',
|
|
||||||
end_date: '',
|
|
||||||
action: '' as '' | '0' | '1',
|
|
||||||
keyword: ''
|
|
||||||
})
|
|
||||||
|
|
||||||
watch(dateRange, (val) => {
|
|
||||||
queryParams.start_date = val?.[0] ?? ''
|
|
||||||
queryParams.end_date = val?.[1] ?? ''
|
|
||||||
})
|
|
||||||
|
|
||||||
const { pager, getLists, resetPage } = usePaging({
|
|
||||||
fetchFun: autoAssignLogLists,
|
|
||||||
params: queryParams
|
|
||||||
})
|
|
||||||
|
|
||||||
const doSearch = () => resetPage()
|
|
||||||
|
|
||||||
const handleReset = () => {
|
|
||||||
dateRange.value = null
|
|
||||||
queryParams.start_date = ''
|
|
||||||
queryParams.end_date = ''
|
|
||||||
queryParams.action = ''
|
|
||||||
queryParams.keyword = ''
|
|
||||||
resetPage()
|
|
||||||
}
|
|
||||||
|
|
||||||
const formatRate = (rate: number | null | undefined) =>
|
|
||||||
rate === null || rate === undefined ? '—' : `${rate}%`
|
|
||||||
|
|
||||||
onMounted(() => getLists())
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.auto-assign-log-page {
|
|
||||||
.log-filter-form {
|
|
||||||
:deep(.el-form-item) {
|
|
||||||
margin-bottom: 8px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.log-hint {
|
|
||||||
font-size: 12px;
|
|
||||||
color: var(--el-text-color-secondary);
|
|
||||||
line-height: 1.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cell-sub {
|
|
||||||
font-size: 12px;
|
|
||||||
color: var(--el-text-color-secondary);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace app\adminapi\controller\stats;
|
|
||||||
|
|
||||||
use app\adminapi\controller\BaseAdminController;
|
|
||||||
use app\adminapi\lists\stats\AutoAssignLogLists;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 待分配诊单自动指派日志
|
|
||||||
*
|
|
||||||
* - GET stats.autoAssignLog/lists 日志列表(每条待指派诊单一行:分配结果 + 原因)
|
|
||||||
*/
|
|
||||||
class AutoAssignLogController extends BaseAdminController
|
|
||||||
{
|
|
||||||
public function lists()
|
|
||||||
{
|
|
||||||
return $this->dataLists(new AutoAssignLogLists());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace app\adminapi\lists\stats;
|
|
||||||
|
|
||||||
use app\adminapi\lists\BaseAdminDataLists;
|
|
||||||
use app\common\lists\ListsSearchInterface;
|
|
||||||
use think\facade\Db;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 待分配诊单自动指派日志列表
|
|
||||||
*
|
|
||||||
* 数据来源:tcm_diagnosis_auto_assign_log(定时命令 tcm:auto-assign-pending 写入)
|
|
||||||
* 筛选:run_date(执行日期)/ action(1=已分配 0=未分配)/ assistant_id / keyword(患者姓名、手机号、医助姓名,纯数字兼容诊单ID)
|
|
||||||
*/
|
|
||||||
class AutoAssignLogLists extends BaseAdminDataLists implements ListsSearchInterface
|
|
||||||
{
|
|
||||||
private const TIER_LABELS = [
|
|
||||||
'gt70' => '>70%',
|
|
||||||
'60_70' => '60%~70%',
|
|
||||||
'50_60' => '50%~60%',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @notes 设置搜索条件
|
|
||||||
*/
|
|
||||||
public function setSearch(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'=' => ['run_date', 'action', 'assistant_id', 'batch_no', 'stat_month'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @notes 获取列表
|
|
||||||
*/
|
|
||||||
public function lists(): array
|
|
||||||
{
|
|
||||||
$rows = $this->buildQuery()
|
|
||||||
->order(['id' => 'desc'])
|
|
||||||
->limit($this->limitOffset, $this->limitLength)
|
|
||||||
->select()
|
|
||||||
->toArray();
|
|
||||||
|
|
||||||
foreach ($rows as &$row) {
|
|
||||||
$ct = (int) ($row['create_time'] ?? 0);
|
|
||||||
$row['create_time_text'] = $ct > 0 ? date('Y-m-d H:i:s', $ct) : '';
|
|
||||||
$row['action_text'] = (int) ($row['action'] ?? 0) === 1 ? '已分配' : '未分配';
|
|
||||||
$row['tier_text'] = self::TIER_LABELS[(string) ($row['tier'] ?? '')] ?? '';
|
|
||||||
$row['visit2_rate'] = $row['visit2_rate'] !== null ? (float) $row['visit2_rate'] : null;
|
|
||||||
}
|
|
||||||
unset($row);
|
|
||||||
|
|
||||||
return $rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @notes 获取数量
|
|
||||||
*/
|
|
||||||
public function count(): int
|
|
||||||
{
|
|
||||||
return $this->buildQuery()->count();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return \think\db\Query
|
|
||||||
*/
|
|
||||||
private function buildQuery()
|
|
||||||
{
|
|
||||||
$query = Db::name('tcm_diagnosis_auto_assign_log')->where($this->searchWhere);
|
|
||||||
|
|
||||||
$keyword = trim((string) ($this->params['keyword'] ?? ''));
|
|
||||||
if ($keyword !== '') {
|
|
||||||
$query->where(function ($q) use ($keyword) {
|
|
||||||
$q->whereLike('patient_name', '%' . $keyword . '%')
|
|
||||||
->whereOr('patient_phone', 'like', '%' . $keyword . '%')
|
|
||||||
->whereOr('assistant_name', 'like', '%' . $keyword . '%');
|
|
||||||
if (preg_match('/^\d+$/', $keyword) === 1 && (int) $keyword > 0) {
|
|
||||||
$q->whereOr('diagnosis_id', '=', (int) $keyword);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$startDate = trim((string) ($this->params['start_date'] ?? ''));
|
|
||||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $startDate) === 1) {
|
|
||||||
$query->where('run_date', '>=', $startDate);
|
|
||||||
}
|
|
||||||
$endDate = trim((string) ($this->params['end_date'] ?? ''));
|
|
||||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $endDate) === 1) {
|
|
||||||
$query->where('run_date', '<=', $endDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $query;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,571 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace app\command;
|
|
||||||
|
|
||||||
use app\adminapi\logic\dept\DeptLogic;
|
|
||||||
use app\adminapi\logic\stats\RevisitRateLogic;
|
|
||||||
use think\console\Command;
|
|
||||||
use think\console\Input;
|
|
||||||
use think\console\input\Option;
|
|
||||||
use think\console\Output;
|
|
||||||
use think\facade\Db;
|
|
||||||
use think\facade\Log;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 待分配诊单自动指派(每天定时执行)
|
|
||||||
*
|
|
||||||
* 使用方法:
|
|
||||||
* php think tcm:auto-assign-pending # 正式执行
|
|
||||||
* php think tcm:auto-assign-pending --dry-run # 只演练输出分配计划,不写库
|
|
||||||
*
|
|
||||||
* 推荐 cron(每天 09:00 执行一次;或经 zyt_dev_crontab 表调度):
|
|
||||||
* 0 9 * * * cd /path/to/server && php think tcm:auto-assign-pending >> /var/log/zyt-auto-assign.log 2>&1
|
|
||||||
*
|
|
||||||
* 分配规则(依据上个自然月「二诊复诊接诊率」,与 RevisitRateLogic::overview 口径完全一致):
|
|
||||||
* - 接诊率 > 70% :第一优先档,当日每人最多 3 条
|
|
||||||
* - 接诊率 60% ~ 70% :第二档,当日每人最多 2 条
|
|
||||||
* - 接诊率 50% ~ 60% :第三档,当日每人最多 1 条
|
|
||||||
* - 接诊率 < 50% 或上月无被指派数据:不参与分配
|
|
||||||
* - 仅分配给「二中心」及其组织下级部门的在职医助(当前部门校验,调离二中心即不再参与)
|
|
||||||
*
|
|
||||||
* 轮询方式:按轮次分配,每轮内先 >70% 档每人 1 条,再 60%~70% 档每人 1 条,再 50%~60% 档每人 1 条;
|
|
||||||
* 一轮结束还有剩余待指派诊单则进入下一轮,直至待指派池为空或所有医助当日额度用尽。
|
|
||||||
* 例:当天 20 条,>70% 有 3 人、60%~70% 有 7 人、50%~60% 有 5 人 →
|
|
||||||
* 第一轮 3+7+5=15 条;剩余 5 条进第二轮:>70% 再各 1 条(3 条),余 2 条给 60%~70% 档前 2 人。
|
|
||||||
*
|
|
||||||
* 日上限跨执行累计:同一天重复执行命令时,会先从 tcm_diagnosis_auto_assign_log 扣减当日已自动分配数,不会超额。
|
|
||||||
*
|
|
||||||
* 日志:无论分配与否,每条待指派诊单都会写入 tcm_diagnosis_auto_assign_log,记录原因(为什么分配 / 为什么不分配)。
|
|
||||||
* 成功分配同时写 tcm_diagnosis_assign_log(is_inherit=0,计入次月接诊率分母),与手动指派同口径。
|
|
||||||
*/
|
|
||||||
class AutoAssignPendingDiagnosis extends Command
|
|
||||||
{
|
|
||||||
/** 档位标识 */
|
|
||||||
private const TIER_GT70 = 'gt70';
|
|
||||||
private const TIER_60_70 = '60_70';
|
|
||||||
private const TIER_50_60 = '50_60';
|
|
||||||
|
|
||||||
/** 各档位当日每人分配上限(按优先级排列,先高档后低档) */
|
|
||||||
private const TIER_DAILY_CAPS = [
|
|
||||||
self::TIER_GT70 => 3,
|
|
||||||
self::TIER_60_70 => 2,
|
|
||||||
self::TIER_50_60 => 1,
|
|
||||||
];
|
|
||||||
|
|
||||||
private const TIER_LABELS = [
|
|
||||||
self::TIER_GT70 => '>70%',
|
|
||||||
self::TIER_60_70 => '60%~70%',
|
|
||||||
self::TIER_50_60 => '50%~60%',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected function configure()
|
|
||||||
{
|
|
||||||
$this->setName('tcm:auto-assign-pending')
|
|
||||||
->setDescription('待分配诊单自动指派:按上月二诊复诊接诊率分档轮询分配,并写入自动指派日志')
|
|
||||||
->addOption('dry-run', null, Option::VALUE_NONE, '演练模式:只输出分配计划,不写库');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function execute(Input $input, Output $output): int
|
|
||||||
{
|
|
||||||
$now = time();
|
|
||||||
$dryRun = (bool) $input->getOption('dry-run');
|
|
||||||
$runDate = date('Y-m-d', $now);
|
|
||||||
$statMonth = date('Y-m', strtotime(date('Y-m-01', $now) . ' -1 month'));
|
|
||||||
$batchNo = date('YmdHis', $now) . str_pad((string) random_int(0, 9999), 4, '0', STR_PAD_LEFT);
|
|
||||||
|
|
||||||
$output->writeln(sprintf(
|
|
||||||
'[%s] 开始自动指派待分配诊单,批次=%s,统计月=%s%s',
|
|
||||||
date('Y-m-d H:i:s', $now),
|
|
||||||
$batchNo,
|
|
||||||
$statMonth,
|
|
||||||
$dryRun ? '(演练模式,不写库)'
|
|
||||||
: ''
|
|
||||||
));
|
|
||||||
|
|
||||||
try {
|
|
||||||
// 1. 上月二诊复诊接诊率 → 医助分档
|
|
||||||
$tiers = $this->buildAssistantTiers($statMonth);
|
|
||||||
$tierTotal = array_sum(array_map('count', $tiers));
|
|
||||||
$output->writeln(sprintf(
|
|
||||||
'医助分档:>70%% 共 %d 人,60%%~70%% 共 %d 人,50%%~60%% 共 %d 人',
|
|
||||||
\count($tiers[self::TIER_GT70]),
|
|
||||||
\count($tiers[self::TIER_60_70]),
|
|
||||||
\count($tiers[self::TIER_50_60])
|
|
||||||
));
|
|
||||||
|
|
||||||
// 2. 当日剩余额度(扣减当日已自动分配数,防止同日重复执行超额)
|
|
||||||
$remaining = $this->buildRemainingQuota($tiers, $runDate);
|
|
||||||
|
|
||||||
// 3. 待指派池:与「待分配医助」Tab 同口径(assistant_id 空/0 + 当月有业务订单),先到先分
|
|
||||||
[$pool, $ineligible] = $this->fetchPendingPool($now);
|
|
||||||
$output->writeln(sprintf('待指派池:符合条件 %d 条,不符合条件 %d 条', \count($pool), \count($ineligible)));
|
|
||||||
|
|
||||||
$logRows = [];
|
|
||||||
|
|
||||||
// 不符合条件的待指派诊单:不分配,逐条记录原因
|
|
||||||
foreach ($ineligible as $item) {
|
|
||||||
$logRows[] = $this->buildLogRow($batchNo, $runDate, $statMonth, $item['diag'], [
|
|
||||||
'action' => 0,
|
|
||||||
'reason' => $item['reason'],
|
|
||||||
], $now);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($pool === []) {
|
|
||||||
$this->flushLogs($logRows, $dryRun, $output);
|
|
||||||
$output->writeln('待指派池为空,本次无需分配。');
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($tierTotal === 0) {
|
|
||||||
$reason = sprintf('未分配:上月(%s)无二诊复诊接诊率≥50%%的医助,本批次不执行分配', $statMonth);
|
|
||||||
foreach ($pool as $diag) {
|
|
||||||
$logRows[] = $this->buildLogRow($batchNo, $runDate, $statMonth, $diag, [
|
|
||||||
'action' => 0,
|
|
||||||
'reason' => $reason,
|
|
||||||
], $now);
|
|
||||||
}
|
|
||||||
$this->flushLogs($logRows, $dryRun, $output);
|
|
||||||
$output->writeln($reason);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 4. 轮询排分配计划
|
|
||||||
[$plan, $leftover] = $this->buildAssignPlan($pool, $tiers, $remaining);
|
|
||||||
|
|
||||||
// 5. 执行计划(逐条事务 + 行锁复核,落库诊单/指派日志/自动指派日志)
|
|
||||||
$assigned = 0;
|
|
||||||
$skipped = 0;
|
|
||||||
foreach ($plan as $item) {
|
|
||||||
if ($dryRun) {
|
|
||||||
$assigned++;
|
|
||||||
$output->writeln(sprintf(
|
|
||||||
'[演练] 诊单#%d(%s) → %s(%s,第%d轮,当日第%d/%d条)',
|
|
||||||
$item['diagnosis']['id'],
|
|
||||||
(string) $item['diagnosis']['patient_name'],
|
|
||||||
$item['assistant']['name'],
|
|
||||||
self::TIER_LABELS[$item['tier']],
|
|
||||||
$item['round'],
|
|
||||||
$item['day_seq'],
|
|
||||||
self::TIER_DAILY_CAPS[$item['tier']]
|
|
||||||
));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$ok = $this->applyAssignment($item, $now);
|
|
||||||
if ($ok) {
|
|
||||||
$assigned++;
|
|
||||||
$logRows[] = $this->buildLogRow($batchNo, $runDate, $statMonth, $item['diagnosis'], [
|
|
||||||
'action' => 1,
|
|
||||||
'assistant_id' => $item['assistant']['id'],
|
|
||||||
'assistant_name' => $item['assistant']['name'],
|
|
||||||
'tier' => $item['tier'],
|
|
||||||
'visit2_rate' => $item['assistant']['rate'],
|
|
||||||
'round_no' => $item['round'],
|
|
||||||
'reason' => sprintf(
|
|
||||||
'已分配给医助[%s](ID:%d):上月(%s)二诊复诊接诊率 %.2f%%,档位[%s](日上限%d条),第 %d 轮轮询分得,当日该医助第 %d 条',
|
|
||||||
$item['assistant']['name'],
|
|
||||||
$item['assistant']['id'],
|
|
||||||
$statMonth,
|
|
||||||
$item['assistant']['rate'],
|
|
||||||
self::TIER_LABELS[$item['tier']],
|
|
||||||
self::TIER_DAILY_CAPS[$item['tier']],
|
|
||||||
$item['round'],
|
|
||||||
$item['day_seq']
|
|
||||||
),
|
|
||||||
], $now);
|
|
||||||
} else {
|
|
||||||
$skipped++;
|
|
||||||
$logRows[] = $this->buildLogRow($batchNo, $runDate, $statMonth, $item['diagnosis'], [
|
|
||||||
'action' => 0,
|
|
||||||
'reason' => '未分配:执行时诊单已被指派给其他医助(并发/人工抢先),本次跳过',
|
|
||||||
], $now);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 6. 额度用尽后剩余的待指派诊单:不分配,记录原因
|
|
||||||
foreach ($leftover as $diag) {
|
|
||||||
$logRows[] = $this->buildLogRow($batchNo, $runDate, $statMonth, $diag, [
|
|
||||||
'action' => 0,
|
|
||||||
'reason' => '未分配:各档位医助当日剩余额度已用尽(>70%每人3条、60%~70%每人2条、50%~60%每人1条),顺延至下次执行',
|
|
||||||
], $now);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->flushLogs($logRows, $dryRun, $output);
|
|
||||||
|
|
||||||
$output->writeln(sprintf(
|
|
||||||
'执行完成。计划分配: %d, 实际分配: %d, 并发跳过: %d, 额度不足未分: %d, 不符合条件: %d',
|
|
||||||
\count($plan),
|
|
||||||
$assigned,
|
|
||||||
$skipped,
|
|
||||||
\count($leftover),
|
|
||||||
\count($ineligible)
|
|
||||||
));
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
Log::error('待分配诊单自动指派异常: ' . $e->getMessage() . ' @ ' . $e->getFile() . ':' . $e->getLine());
|
|
||||||
$output->error('执行异常: ' . $e->getMessage());
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 按上月二诊复诊接诊率把医助分档(复用 RevisitRateLogic 口径),并剔除已禁用/已删除账号。
|
|
||||||
*
|
|
||||||
* @return array{gt70: list<array{id:int,name:string,rate:float}>, 60_70: list<array{id:int,name:string,rate:float}>, 50_60: list<array{id:int,name:string,rate:float}>}
|
|
||||||
*/
|
|
||||||
private function buildAssistantTiers(string $statMonth): array
|
|
||||||
{
|
|
||||||
$overview = RevisitRateLogic::overview(['month' => $statMonth]);
|
|
||||||
|
|
||||||
/** @var list<array{id:int,name:string,rate:float}> $candidates */
|
|
||||||
$candidates = [];
|
|
||||||
foreach ($overview['rows'] ?? [] as $deptRow) {
|
|
||||||
foreach ($deptRow['children'] ?? [] as $row) {
|
|
||||||
$aid = (int) ($row['assistant_id'] ?? 0);
|
|
||||||
$rate = $row['visit2_rate'] ?? null;
|
|
||||||
// 上月无被指派数据(rate=null)或接诊率低于 50% 的医助不参与分配
|
|
||||||
if ($aid <= 0 || $rate === null || (float) $rate < 50.0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$candidates[] = [
|
|
||||||
'id' => $aid,
|
|
||||||
'name' => (string) ($row['assistant_name'] ?? ('#' . $aid)),
|
|
||||||
'rate' => (float) $rate,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($candidates === []) {
|
|
||||||
return [self::TIER_GT70 => [], self::TIER_60_70 => [], self::TIER_50_60 => []];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 只分配给当前在职可用的医助账号(role_id=2 且未禁用未删除),
|
|
||||||
// 且当前部门须在「二中心」子树内(统计月在二中心、后来调离的不再参与)
|
|
||||||
$erDeptSet = DeptLogic::getErCenterSubtreeDeptIdSet();
|
|
||||||
if ($erDeptSet === []) {
|
|
||||||
return [self::TIER_GT70 => [], self::TIER_60_70 => [], self::TIER_50_60 => []];
|
|
||||||
}
|
|
||||||
$activeIds = Db::name('admin')
|
|
||||||
->alias('a')
|
|
||||||
->join('admin_role ar', 'a.id = ar.admin_id')
|
|
||||||
->join('admin_dept ad', 'a.id = ad.admin_id')
|
|
||||||
->where('ar.role_id', 2)
|
|
||||||
->where('a.disable', 0)
|
|
||||||
->whereNull('a.delete_time')
|
|
||||||
->whereIn('ad.dept_id', array_keys($erDeptSet))
|
|
||||||
->whereIn('a.id', array_column($candidates, 'id'))
|
|
||||||
->group('a.id')
|
|
||||||
->column('a.id');
|
|
||||||
$activeSet = array_fill_keys(array_map('intval', $activeIds), true);
|
|
||||||
|
|
||||||
$tiers = [self::TIER_GT70 => [], self::TIER_60_70 => [], self::TIER_50_60 => []];
|
|
||||||
foreach ($candidates as $c) {
|
|
||||||
if (!isset($activeSet[$c['id']])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($c['rate'] > 70.0) {
|
|
||||||
$tiers[self::TIER_GT70][] = $c;
|
|
||||||
} elseif ($c['rate'] > 60.0) {
|
|
||||||
$tiers[self::TIER_60_70][] = $c;
|
|
||||||
} else { // 50 <= rate <= 60
|
|
||||||
$tiers[self::TIER_50_60][] = $c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 档内按接诊率降序、id 升序,保证分配顺序确定可复现
|
|
||||||
foreach ($tiers as &$list) {
|
|
||||||
usort($list, static function (array $a, array $b): int {
|
|
||||||
if ($a['rate'] !== $b['rate']) {
|
|
||||||
return $b['rate'] <=> $a['rate'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $a['id'] <=> $b['id'];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
unset($list);
|
|
||||||
|
|
||||||
return $tiers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 各医助当日剩余额度 = 档位日上限 - 当日已自动分配条数(同日重复执行不超额)。
|
|
||||||
*
|
|
||||||
* @param array<string, list<array{id:int,name:string,rate:float}>> $tiers
|
|
||||||
*
|
|
||||||
* @return array<int, int> assistant_id => 剩余额度
|
|
||||||
*/
|
|
||||||
private function buildRemainingQuota(array $tiers, string $runDate): array
|
|
||||||
{
|
|
||||||
$usedToday = Db::name('tcm_diagnosis_auto_assign_log')
|
|
||||||
->where('run_date', $runDate)
|
|
||||||
->where('action', 1)
|
|
||||||
->where('assistant_id', '>', 0)
|
|
||||||
->group('assistant_id')
|
|
||||||
->column('COUNT(*)', 'assistant_id');
|
|
||||||
|
|
||||||
$remaining = [];
|
|
||||||
foreach (self::TIER_DAILY_CAPS as $tier => $cap) {
|
|
||||||
foreach ($tiers[$tier] as $assistant) {
|
|
||||||
$used = (int) ($usedToday[$assistant['id']] ?? 0);
|
|
||||||
$remaining[$assistant['id']] = max(0, $cap - $used);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $remaining;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 待指派池:与后台「待分配医助」Tab 同口径 —— assistant_id 为空/0、未删除,
|
|
||||||
* 且当月内存在业务订单(order.patient_id = 诊单 id,Tab 默认按当月过滤)。先到先分。
|
|
||||||
* 返回 [符合条件, 不符合条件(附原因)] 两组;不符合条件的诊单不分配,只记日志。
|
|
||||||
*
|
|
||||||
* @return array{0: list<array<string,mixed>>, 1: list<array{diag:array<string,mixed>,reason:string}>}
|
|
||||||
*/
|
|
||||||
private function fetchPendingPool(int $now): array
|
|
||||||
{
|
|
||||||
$rows = Db::name('tcm_diagnosis')
|
|
||||||
->whereRaw('(assistant_id IS NULL OR assistant_id = 0)')
|
|
||||||
->whereNull('delete_time')
|
|
||||||
->field(['id', 'patient_name', 'phone', 'status', 'create_time'])
|
|
||||||
->order(['create_time' => 'asc', 'id' => 'asc'])
|
|
||||||
->select()
|
|
||||||
->toArray();
|
|
||||||
if ($rows === []) {
|
|
||||||
return [[], []];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 当月存在业务订单的诊单集合(order.create_time 兼容整型时间戳与 datetime 字符串,与 DiagnosisLists 一致)
|
|
||||||
$tStart = (int) strtotime(date('Y-m-01 00:00:00', $now));
|
|
||||||
$tEnd = (int) strtotime(date('Y-m-t 23:59:59', $now));
|
|
||||||
$dsStart = date('Y-m-d H:i:s', $tStart);
|
|
||||||
$dsEnd = date('Y-m-d H:i:s', $tEnd);
|
|
||||||
$hasOrderSet = [];
|
|
||||||
foreach (array_chunk(array_column($rows, 'id'), 2000) as $chunk) {
|
|
||||||
$ids = Db::name('order')
|
|
||||||
->whereIn('patient_id', $chunk)
|
|
||||||
->whereNull('delete_time')
|
|
||||||
->where(static function ($q) use ($tStart, $tEnd, $dsStart, $dsEnd) {
|
|
||||||
$q->whereBetween('create_time', [$tStart, $tEnd])
|
|
||||||
->whereOr(static function ($q2) use ($dsStart, $dsEnd) {
|
|
||||||
$q2->where('create_time', '>=', $dsStart)->where('create_time', '<=', $dsEnd);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
->group('patient_id')
|
|
||||||
->column('patient_id');
|
|
||||||
foreach ($ids as $id) {
|
|
||||||
$hasOrderSet[(int) $id] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$curMonth = date('Y-m', $now);
|
|
||||||
$eligible = [];
|
|
||||||
$ineligible = [];
|
|
||||||
foreach ($rows as $r) {
|
|
||||||
$did = (int) ($r['id'] ?? 0);
|
|
||||||
if (!isset($hasOrderSet[$did])) {
|
|
||||||
$ineligible[] = [
|
|
||||||
'diag' => $r,
|
|
||||||
'reason' => sprintf('未分配:诊单当月(%s)无业务订单,不在「待分配医助」列表范围内,不满足自动分配条件', $curMonth),
|
|
||||||
];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ((int) ($r['status'] ?? 0) !== 1) {
|
|
||||||
$ineligible[] = [
|
|
||||||
'diag' => $r,
|
|
||||||
'reason' => '未分配:诊单未启用(status≠1),不满足自动分配条件',
|
|
||||||
];
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$eligible[] = $r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return [$eligible, $ineligible];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 轮询排分配计划:每轮内先 >70% 档每人 1 条,再 60%~70%,再 50%~60%;受各自当日剩余额度约束。
|
|
||||||
*
|
|
||||||
* @param list<array<string,mixed>> $pool 待指派诊单(先到先分)
|
|
||||||
* @param array<string, list<array{id:int,name:string,rate:float}>> $tiers
|
|
||||||
* @param array<int, int> $remaining assistant_id => 剩余额度(会被消耗)
|
|
||||||
*
|
|
||||||
* @return array{
|
|
||||||
* 0: list<array{diagnosis:array<string,mixed>,assistant:array{id:int,name:string,rate:float},tier:string,round:int,day_seq:int}>,
|
|
||||||
* 1: list<array<string,mixed>>
|
|
||||||
* } [分配计划, 额度用尽后剩余诊单]
|
|
||||||
*/
|
|
||||||
private function buildAssignPlan(array $pool, array $tiers, array $remaining): array
|
|
||||||
{
|
|
||||||
$plan = [];
|
|
||||||
$poolIdx = 0;
|
|
||||||
$poolCount = \count($pool);
|
|
||||||
/** @var array<int, int> $daySeq 医助当日已排序号(含历史已用额度) */
|
|
||||||
$daySeq = [];
|
|
||||||
foreach ($remaining as $aid => $left) {
|
|
||||||
// 起始序号 = 日上限 - 剩余额度(同日多次执行时序号衔接)
|
|
||||||
$cap = 0;
|
|
||||||
foreach (self::TIER_DAILY_CAPS as $tier => $tierCap) {
|
|
||||||
foreach ($tiers[$tier] as $assistant) {
|
|
||||||
if ($assistant['id'] === $aid) {
|
|
||||||
$cap = $tierCap;
|
|
||||||
break 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$daySeq[$aid] = $cap - $left;
|
|
||||||
}
|
|
||||||
|
|
||||||
$round = 0;
|
|
||||||
while ($poolIdx < $poolCount) {
|
|
||||||
$round++;
|
|
||||||
$assignedThisRound = 0;
|
|
||||||
foreach (self::TIER_DAILY_CAPS as $tier => $_cap) {
|
|
||||||
foreach ($tiers[$tier] as $assistant) {
|
|
||||||
if ($poolIdx >= $poolCount) {
|
|
||||||
break 2;
|
|
||||||
}
|
|
||||||
$aid = $assistant['id'];
|
|
||||||
if (($remaining[$aid] ?? 0) <= 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$remaining[$aid]--;
|
|
||||||
$daySeq[$aid]++;
|
|
||||||
$plan[] = [
|
|
||||||
'diagnosis' => $pool[$poolIdx],
|
|
||||||
'assistant' => $assistant,
|
|
||||||
'tier' => $tier,
|
|
||||||
'round' => $round,
|
|
||||||
'day_seq' => $daySeq[$aid],
|
|
||||||
];
|
|
||||||
$poolIdx++;
|
|
||||||
$assignedThisRound++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($assignedThisRound === 0) {
|
|
||||||
// 所有医助额度用尽,剩余诊单不再分配
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [$plan, \array_slice($pool, $poolIdx)];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 落库单条分配:事务 + 行锁复核诊单仍未指派,更新诊单并写指派日志(与手动指派 DiagnosisLogic::assign 同口径)。
|
|
||||||
*
|
|
||||||
* @param array{diagnosis:array<string,mixed>,assistant:array{id:int,name:string,rate:float}} $item
|
|
||||||
*/
|
|
||||||
private function applyAssignment(array $item, int $now): bool
|
|
||||||
{
|
|
||||||
$diagnosisId = (int) $item['diagnosis']['id'];
|
|
||||||
$toAssistantId = (int) $item['assistant']['id'];
|
|
||||||
|
|
||||||
Db::startTrans();
|
|
||||||
try {
|
|
||||||
$diagLock = Db::name('tcm_diagnosis')
|
|
||||||
->where('id', $diagnosisId)
|
|
||||||
->whereNull('delete_time')
|
|
||||||
->lock(true)
|
|
||||||
->field(['id', 'assistant_id'])
|
|
||||||
->find();
|
|
||||||
if ($diagLock === null || $diagLock === [] || (int) ($diagLock['assistant_id'] ?? 0) > 0) {
|
|
||||||
Db::rollback();
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Db::name('tcm_diagnosis')
|
|
||||||
->where('id', $diagnosisId)
|
|
||||||
->whereNull('delete_time')
|
|
||||||
->update([
|
|
||||||
'assistant_id' => $toAssistantId,
|
|
||||||
'assign_read_at' => null,
|
|
||||||
]);
|
|
||||||
|
|
||||||
$poSnap = Db::name('tcm_prescription_order')
|
|
||||||
->where('diagnosis_id', $diagnosisId)
|
|
||||||
->whereNull('delete_time')
|
|
||||||
->order(['create_time' => 'desc', 'id' => 'desc'])
|
|
||||||
->field(['creator_id', 'create_time'])
|
|
||||||
->find();
|
|
||||||
$relatedPoCreatorId = (int) ($poSnap['creator_id'] ?? 0);
|
|
||||||
$relatedPoCreateTime = (int) ($poSnap['create_time'] ?? 0);
|
|
||||||
if ($relatedPoCreateTime <= 0) {
|
|
||||||
$relatedPoCreateTime = $now;
|
|
||||||
$relatedPoCreatorId = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Db::name('tcm_diagnosis_assign_log')->insert([
|
|
||||||
'diagnosis_id' => $diagnosisId,
|
|
||||||
'from_assistant_id' => 0,
|
|
||||||
'to_assistant_id' => $toAssistantId,
|
|
||||||
'operator_admin_id' => 0,
|
|
||||||
'operator_name' => '系统自动分配',
|
|
||||||
'operator_account' => 'system',
|
|
||||||
'ip' => '',
|
|
||||||
'related_po_creator_id' => $relatedPoCreatorId,
|
|
||||||
'related_po_create_time' => $relatedPoCreateTime,
|
|
||||||
'is_inherit' => 0,
|
|
||||||
'create_time' => $now,
|
|
||||||
]);
|
|
||||||
|
|
||||||
Db::commit();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (\Throwable $e) {
|
|
||||||
Db::rollback();
|
|
||||||
Log::error(sprintf('自动指派落库失败 diagnosis_id=%d assistant_id=%d msg=%s', $diagnosisId, $toAssistantId, $e->getMessage()));
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array<string,mixed> $diag 诊单行(含 id/patient_name/phone)
|
|
||||||
* @param array<string,mixed> $extra action/assistant_id/assistant_name/tier/visit2_rate/round_no/reason
|
|
||||||
*
|
|
||||||
* @return array<string,mixed>
|
|
||||||
*/
|
|
||||||
private function buildLogRow(string $batchNo, string $runDate, string $statMonth, array $diag, array $extra, int $now): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'batch_no' => $batchNo,
|
|
||||||
'run_date' => $runDate,
|
|
||||||
'stat_month' => $statMonth,
|
|
||||||
'diagnosis_id' => (int) ($diag['id'] ?? 0),
|
|
||||||
'patient_name' => mb_substr(trim((string) ($diag['patient_name'] ?? '')), 0, 64),
|
|
||||||
'patient_phone' => mb_substr(trim((string) ($diag['phone'] ?? '')), 0, 32),
|
|
||||||
'action' => (int) ($extra['action'] ?? 0),
|
|
||||||
'assistant_id' => (int) ($extra['assistant_id'] ?? 0),
|
|
||||||
'assistant_name' => mb_substr((string) ($extra['assistant_name'] ?? ''), 0, 64),
|
|
||||||
'tier' => (string) ($extra['tier'] ?? ''),
|
|
||||||
'visit2_rate' => $extra['visit2_rate'] ?? null,
|
|
||||||
'round_no' => (int) ($extra['round_no'] ?? 0),
|
|
||||||
'reason' => mb_substr((string) ($extra['reason'] ?? ''), 0, 500),
|
|
||||||
'create_time' => $now,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param list<array<string,mixed>> $logRows
|
|
||||||
*/
|
|
||||||
private function flushLogs(array $logRows, bool $dryRun, Output $output): void
|
|
||||||
{
|
|
||||||
if ($logRows === []) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ($dryRun) {
|
|
||||||
$output->writeln(sprintf('[演练] 应写入自动指派日志 %d 条(未落库)', \count($logRows)));
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
foreach (array_chunk($logRows, 500) as $chunk) {
|
|
||||||
Db::name('tcm_diagnosis_auto_assign_log')->insertAll($chunk);
|
|
||||||
}
|
|
||||||
$output->writeln(sprintf('已写入自动指派日志 %d 条', \count($logRows)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -40,7 +40,5 @@ return [
|
|||||||
'migrate:images-to-doctor-note' => 'app\\command\\MigrateImagesToDoctorNote',
|
'migrate:images-to-doctor-note' => 'app\\command\\MigrateImagesToDoctorNote',
|
||||||
// 诊单待办事项:扫描到点的待执行项并向创建人发送企业微信消息
|
// 诊单待办事项:扫描到点的待执行项并向创建人发送企业微信消息
|
||||||
'tcm:diagnosis-todo-notify' => 'app\\command\\DiagnosisTodoNotify',
|
'tcm:diagnosis-todo-notify' => 'app\\command\\DiagnosisTodoNotify',
|
||||||
// 待分配诊单自动指派:按上月二诊复诊接诊率分档轮询分配(>70% 3条/60~70% 2条/50~60% 1条),写自动指派日志
|
|
||||||
'tcm:auto-assign-pending' => 'app\\command\\AutoAssignPendingDiagnosis',
|
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import r from"./error-B96pOmhv.js";import{f as p,ak as i,I as m,a as e,aN as s,J as o}from"./@vue/runtime-core-C6bnekPw.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./vue-router-QlpZ4wdW.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const a="/admin/assets/no_perms-jDxcYpYC.png",n={class:"error404"},W=p({__name:"403",setup(c){return(_,t)=>(i(),m("div",n,[e(r,{code:"403",title:"您的账号权限不足,请联系管理员添加权限!","show-btn":!1},{content:s(()=>[...t[0]||(t[0]=[o("div",{class:"flex justify-center"},[o("img",{class:"w-[150px] h-[150px]",src:a,alt:""})],-1)])]),_:1})]))}});export{W as default};
|
import r from"./error-DFSD5l9g.js";import{f as p,ak as i,I as m,a as e,aN as s,J as o}from"./@vue/runtime-core-C6bnekPw.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./vue-router-QlpZ4wdW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const a="/admin/assets/no_perms-jDxcYpYC.png",n={class:"error404"},W=p({__name:"403",setup(c){return(_,t)=>(i(),m("div",n,[e(r,{code:"403",title:"您的账号权限不足,请联系管理员添加权限!","show-btn":!1},{content:s(()=>[...t[0]||(t[0]=[o("div",{class:"flex justify-center"},[o("img",{class:"w-[150px] h-[150px]",src:a,alt:""})],-1)])]),_:1})]))}});export{W as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import o from"./error-B96pOmhv.js";import{f as r,ak as t,I as m,a as p}from"./@vue/runtime-core-C6bnekPw.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./vue-router-QlpZ4wdW.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const i={class:"error404"},T=r({__name:"404",setup(e){return(a,s)=>(t(),m("div",i,[p(o,{code:"404",title:"哎呀,出错了!您访问的页面不存在…"})]))}});export{T as default};
|
import o from"./error-DFSD5l9g.js";import{f as r,ak as t,I as m,a as p}from"./@vue/runtime-core-C6bnekPw.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./vue-router-QlpZ4wdW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const i={class:"error404"},T=r({__name:"404",setup(e){return(a,s)=>(t(),m("div",i,[p(o,{code:"404",title:"哎呀,出错了!您访问的页面不存在…"})]))}});export{T as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{M as T,N as C,T as $,r as D,d as L,L as k}from"./element-plus-Bolc0EfP.js";import{Y as E}from"./@element-plus/icons-vue-B0jSCQ-G.js";import{a8 as P}from"./tcm-B2eDN42y.js";import{f as A,w as B,ak as p,I as b,aP as F,G as h,aN as n,a as i,O as m,J as M}from"./@vue/runtime-core-C6bnekPw.js";import{Q as c}from"./@vue/shared-mAAVTE9n.js";import{y as V,n as w}from"./@vue/reactivity-DiY1c2vO.js";import{_ as K}from"./index-CzSP4TPL.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const Y={class:"assign-log-panel"},q={key:1,class:"text-gray-400"},z=A({__name:"AssignLogPanel",props:{diagnosisId:{}},setup(N,{expose:v}){const _=N,d=w(!1),u=w([]);function y(o){const e=o.related_po_creator_name;if(e!=null&&String(e).trim()!=="")return String(e);const t=Number(o.related_po_creator_id);return Number.isFinite(t)&&t>0?`ID:${t}`:"—"}function x(o){const e=o.related_po_create_time_text;if(e!=null&&String(e).trim()!=="")return String(e);const t=Number(o.related_po_create_time);if(!Number.isFinite(t)||t<=0)return"—";const a=new Date(t*1e3);if(Number.isNaN(a.getTime()))return"—";const r=l=>String(l).padStart(2,"0");return`${a.getFullYear()}-${r(a.getMonth()+1)}-${r(a.getDate())} ${r(a.getHours())}:${r(a.getMinutes())}:${r(a.getSeconds())}`}function f(o,e){const t=e==="from"?"from_assistant_name":"to_assistant_name",a=e==="from"?"from_assistant_id":"to_assistant_id",r=o[t];if(r!=null&&String(r).trim()!==""&&String(r)!=="—")return String(r);const l=Number(o[a]);return Number.isFinite(l)&&l>0?`ID:${l}`:"—"}const g=async()=>{if(_.diagnosisId){d.value=!0;try{const o=await P({id:_.diagnosisId}),e=Array.isArray(o)?o:[];u.value=e}catch(o){console.error(o),u.value=[]}finally{d.value=!1}}};return B(()=>_.diagnosisId,()=>{g()},{immediate:!0}),v({refresh:g}),(o,e)=>{const t=C,a=$,r=L,l=D,S=T,I=k;return p(),b("div",Y,[F((p(),h(S,{data:u.value,border:"",stripe:"","empty-text":"暂无指派记录"},{default:n(()=>[i(t,{label:"操作时间",width:"175",prop:"create_time_text"}),i(t,{label:"原医助","min-width":"120"},{default:n(({row:s})=>[m(c(f(s,"from")),1)]),_:1}),i(t,{label:"新医助","min-width":"120"},{default:n(({row:s})=>[m(c(f(s,"to")),1)]),_:1}),i(t,{label:"继承",width:"72",align:"center"},{default:n(({row:s})=>[Number(s.is_inherit)===1?(p(),h(a,{key:0,type:"success",size:"small"},{default:n(()=>[...e[0]||(e[0]=[m("是",-1)])]),_:1})):(p(),b("span",q,"否"))]),_:1}),i(t,{label:"快照·业务单创建人","min-width":"130","show-overflow-tooltip":""},{default:n(({row:s})=>[m(c(y(s)),1)]),_:1}),i(t,{label:"快照·业务单创建时间",width:"190"},{header:n(()=>[e[1]||(e[1]=M("span",null,"快照·业务单创建时间",-1)),i(l,{placement:"top",content:"related_po_create_time:触发本次操作的处方业务订单 create_time;与原文助一致时表示医助创建订单时间"},{default:n(()=>[i(r,{class:"assign-log-col-hint"},{default:n(()=>[i(V(E))]),_:1})]),_:1})]),default:n(({row:s})=>[m(c(x(s)),1)]),_:1}),i(t,{label:"操作人",width:"110",prop:"operator_name"}),i(t,{label:"操作账号",width:"120",prop:"operator_account","show-overflow-tooltip":""}),i(t,{label:"IP",width:"130",prop:"ip","show-overflow-tooltip":""})]),_:1},8,["data"])),[[I,d.value]])])}}}),Ct=K(z,[["__scopeId","data-v-f670e3e6"]]);export{Ct as default};
|
import{M as T,N as C,T as $,r as D,d as L,L as k}from"./element-plus-Bolc0EfP.js";import{Y as E}from"./@element-plus/icons-vue-B0jSCQ-G.js";import{a8 as P}from"./tcm-Dsvdp1dm.js";import{f as A,w as B,ak as p,I as b,aP as F,G as h,aN as n,a as i,O as m,J as M}from"./@vue/runtime-core-C6bnekPw.js";import{Q as c}from"./@vue/shared-mAAVTE9n.js";import{y as V,n as w}from"./@vue/reactivity-DiY1c2vO.js";import{_ as K}from"./index-d3j0BX4t.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const Y={class:"assign-log-panel"},q={key:1,class:"text-gray-400"},z=A({__name:"AssignLogPanel",props:{diagnosisId:{}},setup(N,{expose:v}){const _=N,d=w(!1),u=w([]);function y(o){const e=o.related_po_creator_name;if(e!=null&&String(e).trim()!=="")return String(e);const t=Number(o.related_po_creator_id);return Number.isFinite(t)&&t>0?`ID:${t}`:"—"}function x(o){const e=o.related_po_create_time_text;if(e!=null&&String(e).trim()!=="")return String(e);const t=Number(o.related_po_create_time);if(!Number.isFinite(t)||t<=0)return"—";const a=new Date(t*1e3);if(Number.isNaN(a.getTime()))return"—";const r=l=>String(l).padStart(2,"0");return`${a.getFullYear()}-${r(a.getMonth()+1)}-${r(a.getDate())} ${r(a.getHours())}:${r(a.getMinutes())}:${r(a.getSeconds())}`}function f(o,e){const t=e==="from"?"from_assistant_name":"to_assistant_name",a=e==="from"?"from_assistant_id":"to_assistant_id",r=o[t];if(r!=null&&String(r).trim()!==""&&String(r)!=="—")return String(r);const l=Number(o[a]);return Number.isFinite(l)&&l>0?`ID:${l}`:"—"}const g=async()=>{if(_.diagnosisId){d.value=!0;try{const o=await P({id:_.diagnosisId}),e=Array.isArray(o)?o:[];u.value=e}catch(o){console.error(o),u.value=[]}finally{d.value=!1}}};return B(()=>_.diagnosisId,()=>{g()},{immediate:!0}),v({refresh:g}),(o,e)=>{const t=C,a=$,r=L,l=D,S=T,I=k;return p(),b("div",Y,[F((p(),h(S,{data:u.value,border:"",stripe:"","empty-text":"暂无指派记录"},{default:n(()=>[i(t,{label:"操作时间",width:"175",prop:"create_time_text"}),i(t,{label:"原医助","min-width":"120"},{default:n(({row:s})=>[m(c(f(s,"from")),1)]),_:1}),i(t,{label:"新医助","min-width":"120"},{default:n(({row:s})=>[m(c(f(s,"to")),1)]),_:1}),i(t,{label:"继承",width:"72",align:"center"},{default:n(({row:s})=>[Number(s.is_inherit)===1?(p(),h(a,{key:0,type:"success",size:"small"},{default:n(()=>[...e[0]||(e[0]=[m("是",-1)])]),_:1})):(p(),b("span",q,"否"))]),_:1}),i(t,{label:"快照·业务单创建人","min-width":"130","show-overflow-tooltip":""},{default:n(({row:s})=>[m(c(y(s)),1)]),_:1}),i(t,{label:"快照·业务单创建时间",width:"190"},{header:n(()=>[e[1]||(e[1]=M("span",null,"快照·业务单创建时间",-1)),i(l,{placement:"top",content:"related_po_create_time:触发本次操作的处方业务订单 create_time;与原文助一致时表示医助创建订单时间"},{default:n(()=>[i(r,{class:"assign-log-col-hint"},{default:n(()=>[i(V(E))]),_:1})]),_:1})]),default:n(({row:s})=>[m(c(x(s)),1)]),_:1}),i(t,{label:"操作人",width:"110",prop:"operator_name"}),i(t,{label:"操作账号",width:"120",prop:"operator_account","show-overflow-tooltip":""}),i(t,{label:"IP",width:"130",prop:"ip","show-overflow-tooltip":""})]),_:1},8,["data"])),[[I,d.value]])])}}}),Ct=K(z,[["__scopeId","data-v-f670e3e6"]]);export{Ct as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{i as L,L as T,N as V,T as D,M as z,W as M}from"./element-plus-Bolc0EfP.js";import{ag as O}from"./tcm-B2eDN42y.js";import{f as P,b as F,w as j,ak as a,I as n,a as i,aN as s,O as m,H as w,aP as A,G as g,F as H,J as R}from"./@vue/runtime-core-C6bnekPw.js";import{y as d,n as k}from"./@vue/reactivity-DiY1c2vO.js";import{Q as c}from"./@vue/shared-mAAVTE9n.js";import{_ as G}from"./index-CzSP4TPL.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const J={class:"case-record-list"},Q={key:0,class:"mb-3 flex justify-end"},W={key:0},Y={key:1,class:"text-gray-400"},q={class:"void-detail text-xs text-gray-500 mt-1"},K=P({__name:"CaseRecordList",props:{diagnosisId:{type:Number,default:0},readOnly:{type:Boolean,default:!1}},emits:["view","openPrescription"],setup(y,{expose:x,emit:C}){const _=y,h=C,l=k([]),p=k(!1),u=async()=>{if(_.diagnosisId){p.value=!0;try{const e=await O({diagnosis_id:_.diagnosisId});l.value=Array.isArray(e)?e:[]}catch(e){console.error("获取病历记录失败:",e),l.value=[]}finally{p.value=!1}}},S=e=>{if(!e)return"";const t=new Date(e*1e3);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`},$=e=>{h("view",e)},B=()=>{h("openPrescription")};return F(()=>{u()}),j(()=>_.diagnosisId,()=>{u()}),x({refresh:u}),(e,t)=>{const b=L,r=V,v=D,E=z,N=M,I=T;return a(),n("div",J,[y.readOnly?w("",!0):(a(),n("div",Q,[i(b,{type:"primary",size:"small",onClick:B},{default:s(()=>[...t[0]||(t[0]=[m("开方",-1)])]),_:1})])),A((a(),g(E,{data:d(l),border:""},{default:s(()=>[i(r,{prop:"prescription_date",label:"就诊日期",width:"120"}),i(r,{prop:"visit_no",label:"门诊号",width:"120"}),i(r,{prop:"clinical_diagnosis",label:"临床诊断","min-width":"160","show-overflow-tooltip":""}),i(r,{label:"处方摘要","min-width":"180"},{default:s(({row:o})=>[o.herbs&&o.herbs.length?(a(),n("span",W,c(o.herbs.slice(0,3).map(f=>`${f.name}${f.dosage}克`).join("、"))+c(o.herbs.length>3?"...":""),1)):(a(),n("span",Y,"—"))]),_:1}),i(r,{prop:"doctor_name",label:"医师",width:"90","show-overflow-tooltip":""}),i(r,{label:"状态",width:"140",align:"center"},{default:s(({row:o})=>[o.void_status===1?(a(),n(H,{key:0},[i(v,{type:"danger",size:"small"},{default:s(()=>[...t[1]||(t[1]=[m("已作废",-1)])]),_:1}),R("div",q,c(o.void_by_name||"—")+" "+c(S(o.void_time)),1)],64)):(a(),g(v,{key:1,type:"success",size:"small"},{default:s(()=>[...t[2]||(t[2]=[m("正常",-1)])]),_:1}))]),_:1}),i(r,{label:"操作",width:"120",fixed:"right"},{default:s(({row:o})=>[i(b,{link:"",type:"primary",size:"small",onClick:f=>$(o)},{default:s(()=>[...t[3]||(t[3]=[m(" 查看 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[I,d(p)]]),!d(p)&&d(l).length===0?(a(),g(N,{key:1,description:"暂无病历记录,开方后会自动显示",class:"mt-4"})):w("",!0)])}}}),zt=G(K,[["__scopeId","data-v-043d2738"]]);export{zt as default};
|
import{i as L,L as T,N as V,T as D,M as z,W as M}from"./element-plus-Bolc0EfP.js";import{ag as O}from"./tcm-Dsvdp1dm.js";import{f as P,b as F,w as j,ak as a,I as n,a as i,aN as s,O as m,H as w,aP as A,G as g,F as H,J as R}from"./@vue/runtime-core-C6bnekPw.js";import{y as d,n as k}from"./@vue/reactivity-DiY1c2vO.js";import{Q as c}from"./@vue/shared-mAAVTE9n.js";import{_ as G}from"./index-d3j0BX4t.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const J={class:"case-record-list"},Q={key:0,class:"mb-3 flex justify-end"},W={key:0},Y={key:1,class:"text-gray-400"},q={class:"void-detail text-xs text-gray-500 mt-1"},K=P({__name:"CaseRecordList",props:{diagnosisId:{type:Number,default:0},readOnly:{type:Boolean,default:!1}},emits:["view","openPrescription"],setup(y,{expose:x,emit:C}){const _=y,h=C,l=k([]),p=k(!1),u=async()=>{if(_.diagnosisId){p.value=!0;try{const e=await O({diagnosis_id:_.diagnosisId});l.value=Array.isArray(e)?e:[]}catch(e){console.error("获取病历记录失败:",e),l.value=[]}finally{p.value=!1}}},S=e=>{if(!e)return"";const t=new Date(e*1e3);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`},$=e=>{h("view",e)},B=()=>{h("openPrescription")};return F(()=>{u()}),j(()=>_.diagnosisId,()=>{u()}),x({refresh:u}),(e,t)=>{const b=L,r=V,v=D,E=z,N=M,I=T;return a(),n("div",J,[y.readOnly?w("",!0):(a(),n("div",Q,[i(b,{type:"primary",size:"small",onClick:B},{default:s(()=>[...t[0]||(t[0]=[m("开方",-1)])]),_:1})])),A((a(),g(E,{data:d(l),border:""},{default:s(()=>[i(r,{prop:"prescription_date",label:"就诊日期",width:"120"}),i(r,{prop:"visit_no",label:"门诊号",width:"120"}),i(r,{prop:"clinical_diagnosis",label:"临床诊断","min-width":"160","show-overflow-tooltip":""}),i(r,{label:"处方摘要","min-width":"180"},{default:s(({row:o})=>[o.herbs&&o.herbs.length?(a(),n("span",W,c(o.herbs.slice(0,3).map(f=>`${f.name}${f.dosage}克`).join("、"))+c(o.herbs.length>3?"...":""),1)):(a(),n("span",Y,"—"))]),_:1}),i(r,{prop:"doctor_name",label:"医师",width:"90","show-overflow-tooltip":""}),i(r,{label:"状态",width:"140",align:"center"},{default:s(({row:o})=>[o.void_status===1?(a(),n(H,{key:0},[i(v,{type:"danger",size:"small"},{default:s(()=>[...t[1]||(t[1]=[m("已作废",-1)])]),_:1}),R("div",q,c(o.void_by_name||"—")+" "+c(S(o.void_time)),1)],64)):(a(),g(v,{key:1,type:"success",size:"small"},{default:s(()=>[...t[2]||(t[2]=[m("正常",-1)])]),_:1}))]),_:1}),i(r,{label:"操作",width:"120",fixed:"right"},{default:s(({row:o})=>[i(b,{link:"",type:"primary",size:"small",onClick:f=>$(o)},{default:s(()=>[...t[3]||(t[3]=[m(" 查看 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[I,d(p)]]),!d(p)&&d(l).length===0?(a(),g(N,{key:1,description:"暂无病历记录,开方后会自动显示",class:"mt-4"})):w("",!0)])}}}),zt=G(K,[["__scopeId","data-v-043d2738"]]);export{zt as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
import{i as se,W as ne,C as le,V as ae,v as re,d as me,a as de}from"./element-plus-Bolc0EfP.js";import{_ as pe}from"./picker-BFSyGoz9.js";import{e as ue,c as ce,i as g,_ as ge}from"./index-CzSP4TPL.js";import{s as U}from"./@vue/runtime-dom-DDAG46FW.js";import{b as z,G as fe}from"./@element-plus/icons-vue-B0jSCQ-G.js";import{a as P,d as ve}from"./patient-B-TtpnKl.js";import{h as _e}from"./perm-Ba4WXYK7.js";import{f as ye,w as he,ak as o,I as n,G as k,aN as r,O as M,H as p,a as l,J as m,F as w,ap as E,A as ke}from"./@vue/runtime-core-C6bnekPw.js";import{n as f,y as N}from"./@vue/reactivity-DiY1c2vO.js";import{Q as T}from"./@vue/shared-mAAVTE9n.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./lodash-D3kF6u-c.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-DWEeyCDR.js";import"./index-BL6dsbzE.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./index-C5CUkFFb.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./usePaging-VsbTxSU0.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const we={class:"note-timeline-wrap"},Ie={key:0,class:"timeline-actions"},Ce={class:"upload-trigger"},xe={class:"upload-trigger"},Ve={key:1,class:"note-timeline"},Ee={class:"timeline-date"},Ne={class:"timeline-body"},be={key:0,class:"timeline-content"},Se={key:1,class:"timeline-images"},Ae={key:2,class:"timeline-images"},De={key:0,class:"thumb-wrap"},Be={key:1,class:"file-wrap"},Ue=["href","title"],ze={class:"file-name"},O=8e3,Pe=ye({__name:"NoteTimeline",props:{notes:{},diagnosisId:{},readonly:{type:Boolean}},emits:["refresh"],setup(d,{emit:j}){const u=d,I=j,X=ke(()=>_e(["doctor.appointment/addDoctorNote"])),v=f(!1),C=f(""),b=f(!1),H=ue(),_=t=>H.getImageUrl(t),S=f([]),A=f([]),y=f(0),h=f(0),J=["jpg","jpeg","png","gif","bmp","webp","svg"],D=t=>{var s;const e=((s=t.split(".").pop())==null?void 0:s.toLowerCase().split("?")[0])||"";return J.includes(e)},$=t=>{var s;const e=t.split("/");return decodeURIComponent(((s=e[e.length-1])==null?void 0:s.split("?")[0])||"文件")},Q=t=>t.filter(D).map(_),Z=(t,e)=>{const s=t.filter(D),x=t[e];return s.indexOf(x)},q=t=>t?t.split(`
|
import{i as se,W as ne,C as le,V as ae,v as re,d as me,a as de}from"./element-plus-Bolc0EfP.js";import{_ as pe}from"./picker-ClTaiCz-.js";import{e as ue,c as ce,i as g,_ as ge}from"./index-d3j0BX4t.js";import{s as U}from"./@vue/runtime-dom-DDAG46FW.js";import{b as z,G as fe}from"./@element-plus/icons-vue-B0jSCQ-G.js";import{a as P,d as ve}from"./patient-Dq9eLSqu.js";import{h as _e}from"./perm-Cypp2gRL.js";import{f as ye,w as he,ak as o,I as n,G as k,aN as r,O as M,H as p,a as l,J as m,F as w,ap as E,A as ke}from"./@vue/runtime-core-C6bnekPw.js";import{n as f,y as N}from"./@vue/reactivity-DiY1c2vO.js";import{Q as T}from"./@vue/shared-mAAVTE9n.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./lodash-D3kF6u-c.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-DSYwOnd_.js";import"./index-DyY9GvDW.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./index-CCEDJ4IW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./usePaging-VsbTxSU0.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const we={class:"note-timeline-wrap"},Ie={key:0,class:"timeline-actions"},Ce={class:"upload-trigger"},xe={class:"upload-trigger"},Ve={key:1,class:"note-timeline"},Ee={class:"timeline-date"},Ne={class:"timeline-body"},be={key:0,class:"timeline-content"},Se={key:1,class:"timeline-images"},Ae={key:2,class:"timeline-images"},De={key:0,class:"thumb-wrap"},Be={key:1,class:"file-wrap"},Ue=["href","title"],ze={class:"file-name"},O=8e3,Pe=ye({__name:"NoteTimeline",props:{notes:{},diagnosisId:{},readonly:{type:Boolean}},emits:["refresh"],setup(d,{emit:j}){const u=d,I=j,X=ke(()=>_e(["doctor.appointment/addDoctorNote"])),v=f(!1),C=f(""),b=f(!1),H=ue(),_=t=>H.getImageUrl(t),S=f([]),A=f([]),y=f(0),h=f(0),J=["jpg","jpeg","png","gif","bmp","webp","svg"],D=t=>{var s;const e=((s=t.split(".").pop())==null?void 0:s.toLowerCase().split("?")[0])||"";return J.includes(e)},$=t=>{var s;const e=t.split("/");return decodeURIComponent(((s=e[e.length-1])==null?void 0:s.split("?")[0])||"文件")},Q=t=>t.filter(D).map(_),Z=(t,e)=>{const s=t.filter(D),x=t[e];return s.indexOf(x)},q=t=>t?t.split(`
|
||||||
`).filter(Boolean):[],K=t=>{if(!u.diagnosisId)return;const e=Array.isArray(t)?t:[t];if(e.length<=y.value){y.value=e.length;return}const s=e.slice(y.value);y.value=e.length,s.length>0&&P({diagnosis_id:u.diagnosisId,tongue_images:s}).then(()=>{g.msgSuccess("舌苔照片已添加"),I("refresh")})},Y=t=>{if(!u.diagnosisId)return;const e=Array.isArray(t)?t:[t];if(e.length<=h.value){h.value=e.length;return}const s=e.slice(h.value);h.value=e.length,s.length>0&&P({diagnosis_id:u.diagnosisId,report_files:s}).then(()=>{g.msgSuccess("检查报告已添加"),I("refresh")})};he(()=>u.notes,()=>{S.value=[],A.value=[],y.value=0,h.value=0});const ee=async()=>{if(!u.diagnosisId){g.msgWarning("当前无诊单,无法添加备注");return}const t=C.value.trim();if(!t){g.msgWarning("请输入备注内容");return}b.value=!0;try{await P({diagnosis_id:u.diagnosisId,content:t}),g.msgSuccess("备注保存成功"),C.value="",v.value=!1,I("refresh")}catch(e){g.msgError((e==null?void 0:e.message)||"保存失败")}finally{b.value=!1}},B=async(t,e,s)=>{try{await de.confirm("确认删除?","提示",{type:"warning"})}catch{return}await ve({note_id:t,image_type:e,image_path:s}),g.msgSuccess("已删除"),I("refresh")};return(t,e)=>{const s=se,x=ce,F=pe,G=re,V=me,te=ne,ie=le,oe=ae;return o(),n("div",we,[!d.readonly&&d.diagnosisId?(o(),n("div",Ie,[X.value?(o(),k(s,{key:0,type:"primary",plain:"",size:"small",onClick:e[0]||(e[0]=i=>v.value=!0)},{default:r(()=>[...e[6]||(e[6]=[M(" 添加备注 ",-1)])]),_:1})):p("",!0),l(F,{modelValue:S.value,"onUpdate:modelValue":e[1]||(e[1]=i=>S.value=i),limit:99,type:"image","exclude-domain":!0,onChange:K},{upload:r(()=>[m("div",Ce,[l(x,{size:20,name:"el-icon-Plus"}),e[7]||(e[7]=m("span",null,"舌苔照片",-1))])]),_:1},8,["modelValue"]),l(F,{modelValue:A.value,"onUpdate:modelValue":e[2]||(e[2]=i=>A.value=i),limit:99,type:"file","exclude-domain":!0,onChange:Y},{upload:r(()=>[m("div",xe,[l(x,{size:20,name:"el-icon-Plus"}),e[8]||(e[8]=m("span",null,"检查报告",-1))])]),_:1},8,["modelValue"])])):p("",!0),d.notes.length?(o(),n("div",Ve,[(o(!0),n(w,null,E(d.notes,i=>{var L,R;return o(),n("div",{key:i.id,class:"timeline-node"},[e[11]||(e[11]=m("div",{class:"timeline-dot"},null,-1)),m("div",Ee,T(i.note_date),1),m("div",Ne,[i.content?(o(),n("div",be,[(o(!0),n(w,null,E(q(i.content),(a,c)=>(o(),n("div",{key:c,class:"content-line"},T(a),1))),128))])):p("",!0),(L=i.tongue_images)!=null&&L.length?(o(),n("div",Se,[e[9]||(e[9]=m("span",{class:"images-label"},"舌苔照片",-1)),(o(!0),n(w,null,E(i.tongue_images,(a,c)=>(o(),n("div",{key:c,class:"thumb-wrap"},[l(G,{src:_(a),"preview-src-list":i.tongue_images.map(_),"initial-index":c,"z-index":O,fit:"cover",class:"timeline-thumb","preview-teleported":""},null,8,["src","preview-src-list","initial-index"]),d.readonly?p("",!0):(o(),k(V,{key:0,class:"thumb-delete",onClick:U(W=>B(i.id,"tongue_images",a),["stop"])},{default:r(()=>[l(N(z))]),_:1},8,["onClick"]))]))),128))])):p("",!0),(R=i.report_files)!=null&&R.length?(o(),n("div",Ae,[e[10]||(e[10]=m("span",{class:"images-label"},"检查报告",-1)),(o(!0),n(w,null,E(i.report_files,(a,c)=>(o(),n(w,{key:c},[D(a)?(o(),n("div",De,[l(G,{src:_(a),"preview-src-list":Q(i.report_files),"initial-index":Z(i.report_files,c),"z-index":O,fit:"cover",class:"timeline-thumb","preview-teleported":""},null,8,["src","preview-src-list","initial-index"]),d.readonly?p("",!0):(o(),k(V,{key:0,class:"thumb-delete",onClick:U(W=>B(i.id,"report_files",a),["stop"])},{default:r(()=>[l(N(z))]),_:1},8,["onClick"]))])):(o(),n("div",Be,[m("a",{href:_(a),target:"_blank",class:"file-link",title:$(a)},[l(V,{size:20},{default:r(()=>[l(N(fe))]),_:1}),m("span",ze,T($(a)),1)],8,Ue),d.readonly?p("",!0):(o(),k(V,{key:0,class:"file-delete",onClick:U(W=>B(i.id,"report_files",a),["stop"])},{default:r(()=>[l(N(z))]),_:1},8,["onClick"]))]))],64))),128))])):p("",!0)])])}),128))])):p("",!0),!d.notes.length&&d.readonly?(o(),k(te,{key:2,description:"暂无备注","image-size":48})):p("",!0),l(oe,{modelValue:v.value,"onUpdate:modelValue":e[5]||(e[5]=i=>v.value=i),title:"添加备注",width:"480px","append-to-body":""},{footer:r(()=>[l(s,{onClick:e[4]||(e[4]=i=>v.value=!1)},{default:r(()=>[...e[12]||(e[12]=[M("取消",-1)])]),_:1}),l(s,{type:"primary",loading:b.value,onClick:ee},{default:r(()=>[...e[13]||(e[13]=[M("保存",-1)])]),_:1},8,["loading"])]),default:r(()=>[l(ie,{modelValue:C.value,"onUpdate:modelValue":e[3]||(e[3]=i=>C.value=i),type:"textarea",rows:4,placeholder:"输入今日备注...",maxlength:"500","show-word-limit":""},null,8,["modelValue"])]),_:1},8,["modelValue"])])}}}),Mt=ge(Pe,[["__scopeId","data-v-530ad386"]]);export{Mt as default};
|
`).filter(Boolean):[],K=t=>{if(!u.diagnosisId)return;const e=Array.isArray(t)?t:[t];if(e.length<=y.value){y.value=e.length;return}const s=e.slice(y.value);y.value=e.length,s.length>0&&P({diagnosis_id:u.diagnosisId,tongue_images:s}).then(()=>{g.msgSuccess("舌苔照片已添加"),I("refresh")})},Y=t=>{if(!u.diagnosisId)return;const e=Array.isArray(t)?t:[t];if(e.length<=h.value){h.value=e.length;return}const s=e.slice(h.value);h.value=e.length,s.length>0&&P({diagnosis_id:u.diagnosisId,report_files:s}).then(()=>{g.msgSuccess("检查报告已添加"),I("refresh")})};he(()=>u.notes,()=>{S.value=[],A.value=[],y.value=0,h.value=0});const ee=async()=>{if(!u.diagnosisId){g.msgWarning("当前无诊单,无法添加备注");return}const t=C.value.trim();if(!t){g.msgWarning("请输入备注内容");return}b.value=!0;try{await P({diagnosis_id:u.diagnosisId,content:t}),g.msgSuccess("备注保存成功"),C.value="",v.value=!1,I("refresh")}catch(e){g.msgError((e==null?void 0:e.message)||"保存失败")}finally{b.value=!1}},B=async(t,e,s)=>{try{await de.confirm("确认删除?","提示",{type:"warning"})}catch{return}await ve({note_id:t,image_type:e,image_path:s}),g.msgSuccess("已删除"),I("refresh")};return(t,e)=>{const s=se,x=ce,F=pe,G=re,V=me,te=ne,ie=le,oe=ae;return o(),n("div",we,[!d.readonly&&d.diagnosisId?(o(),n("div",Ie,[X.value?(o(),k(s,{key:0,type:"primary",plain:"",size:"small",onClick:e[0]||(e[0]=i=>v.value=!0)},{default:r(()=>[...e[6]||(e[6]=[M(" 添加备注 ",-1)])]),_:1})):p("",!0),l(F,{modelValue:S.value,"onUpdate:modelValue":e[1]||(e[1]=i=>S.value=i),limit:99,type:"image","exclude-domain":!0,onChange:K},{upload:r(()=>[m("div",Ce,[l(x,{size:20,name:"el-icon-Plus"}),e[7]||(e[7]=m("span",null,"舌苔照片",-1))])]),_:1},8,["modelValue"]),l(F,{modelValue:A.value,"onUpdate:modelValue":e[2]||(e[2]=i=>A.value=i),limit:99,type:"file","exclude-domain":!0,onChange:Y},{upload:r(()=>[m("div",xe,[l(x,{size:20,name:"el-icon-Plus"}),e[8]||(e[8]=m("span",null,"检查报告",-1))])]),_:1},8,["modelValue"])])):p("",!0),d.notes.length?(o(),n("div",Ve,[(o(!0),n(w,null,E(d.notes,i=>{var L,R;return o(),n("div",{key:i.id,class:"timeline-node"},[e[11]||(e[11]=m("div",{class:"timeline-dot"},null,-1)),m("div",Ee,T(i.note_date),1),m("div",Ne,[i.content?(o(),n("div",be,[(o(!0),n(w,null,E(q(i.content),(a,c)=>(o(),n("div",{key:c,class:"content-line"},T(a),1))),128))])):p("",!0),(L=i.tongue_images)!=null&&L.length?(o(),n("div",Se,[e[9]||(e[9]=m("span",{class:"images-label"},"舌苔照片",-1)),(o(!0),n(w,null,E(i.tongue_images,(a,c)=>(o(),n("div",{key:c,class:"thumb-wrap"},[l(G,{src:_(a),"preview-src-list":i.tongue_images.map(_),"initial-index":c,"z-index":O,fit:"cover",class:"timeline-thumb","preview-teleported":""},null,8,["src","preview-src-list","initial-index"]),d.readonly?p("",!0):(o(),k(V,{key:0,class:"thumb-delete",onClick:U(W=>B(i.id,"tongue_images",a),["stop"])},{default:r(()=>[l(N(z))]),_:1},8,["onClick"]))]))),128))])):p("",!0),(R=i.report_files)!=null&&R.length?(o(),n("div",Ae,[e[10]||(e[10]=m("span",{class:"images-label"},"检查报告",-1)),(o(!0),n(w,null,E(i.report_files,(a,c)=>(o(),n(w,{key:c},[D(a)?(o(),n("div",De,[l(G,{src:_(a),"preview-src-list":Q(i.report_files),"initial-index":Z(i.report_files,c),"z-index":O,fit:"cover",class:"timeline-thumb","preview-teleported":""},null,8,["src","preview-src-list","initial-index"]),d.readonly?p("",!0):(o(),k(V,{key:0,class:"thumb-delete",onClick:U(W=>B(i.id,"report_files",a),["stop"])},{default:r(()=>[l(N(z))]),_:1},8,["onClick"]))])):(o(),n("div",Be,[m("a",{href:_(a),target:"_blank",class:"file-link",title:$(a)},[l(V,{size:20},{default:r(()=>[l(N(fe))]),_:1}),m("span",ze,T($(a)),1)],8,Ue),d.readonly?p("",!0):(o(),k(V,{key:0,class:"file-delete",onClick:U(W=>B(i.id,"report_files",a),["stop"])},{default:r(()=>[l(N(z))]),_:1},8,["onClick"]))]))],64))),128))])):p("",!0)])])}),128))])):p("",!0),!d.notes.length&&d.readonly?(o(),k(te,{key:2,description:"暂无备注","image-size":48})):p("",!0),l(oe,{modelValue:v.value,"onUpdate:modelValue":e[5]||(e[5]=i=>v.value=i),title:"添加备注",width:"480px","append-to-body":""},{footer:r(()=>[l(s,{onClick:e[4]||(e[4]=i=>v.value=!1)},{default:r(()=>[...e[12]||(e[12]=[M("取消",-1)])]),_:1}),l(s,{type:"primary",loading:b.value,onClick:ee},{default:r(()=>[...e[13]||(e[13]=[M("保存",-1)])]),_:1},8,["loading"])]),default:r(()=>[l(ie,{modelValue:C.value,"onUpdate:modelValue":e[3]||(e[3]=i=>C.value=i),type:"textarea",rows:4,placeholder:"输入今日备注...",maxlength:"500","show-word-limit":""},null,8,["modelValue"])]),_:1},8,["modelValue"])])}}}),Mt=ge(Pe,[["__scopeId","data-v-530ad386"]]);export{Mt as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{m as x,f as y,a as B}from"./diag-display-DCz_VAqj.js";import{f as w,ak as I,I as P,J as a,H as N}from"./@vue/runtime-core-C6bnekPw.js";import{Q as i}from"./@vue/shared-mAAVTE9n.js";import{y as e}from"./@vue/reactivity-DiY1c2vO.js";import{_ as V}from"./index-CzSP4TPL.js";import"./lodash-D3kF6u-c.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const b={class:"card patient-card"},D={class:"patient-hero"},E={class:"patient-name"},G={class:"patient-meta"},H={key:0},J=w({__name:"PatientInfoCard",props:{apt:{default:()=>({})},diag:{default:()=>({})}},setup(t){return(Q,o)=>{var m,r,n,d,p,s,c,l,g,f,u,h,v,k,C;return I(),P("div",b,[o[0]||(o[0]=a("div",{class:"card-title"},"患者信息",-1)),a("div",D,[a("div",E,i(((m=t.apt)==null?void 0:m.patient_name)||"—"),1),a("div",G,[a("div",null,i(e(x)((r=t.apt)==null?void 0:r.patient_phone))+" · "+i(e(y)((n=t.diag)==null?void 0:n.gender))+" · "+i(((d=t.diag)==null?void 0:d.age)!=null?t.diag.age+"岁":"—"),1),a("div",null,i((p=t.diag)!=null&&p.height?t.diag.height+"cm":"—")+" / "+i((s=t.diag)!=null&&s.weight?t.diag.weight+"kg":"—")+" · "+i(((c=t.diag)==null?void 0:c.region)||"—"),1),a("div",null," 预约:"+i((l=t.apt)==null?void 0:l.appointment_date)+" "+i((g=t.apt)==null?void 0:g.appointment_time)+" · "+i(e(B)((f=t.apt)==null?void 0:f.period)),1),a("div",null,"医生:"+i(((u=t.apt)==null?void 0:u.doctor_name)||"—")+" 客服:"+i(((h=t.apt)==null?void 0:h.assistant_name)||"—"),1),a("div",null," 状态:"+i(((v=t.apt)==null?void 0:v.status_desc)||"—")+" · "+i((k=t.apt)!=null&&k.has_prescription?"已开方":"未开方"),1),(C=t.apt)!=null&&C.remark?(I(),P("div",H,"备注:"+i(t.apt.remark),1)):N("",!0)])])])}}}),Ct=V(J,[["__scopeId","data-v-1b0de09c"]]);export{Ct as default};
|
import{m as x,f as y,a as B}from"./diag-display-DCz_VAqj.js";import{f as w,ak as I,I as P,J as a,H as N}from"./@vue/runtime-core-C6bnekPw.js";import{Q as i}from"./@vue/shared-mAAVTE9n.js";import{y as e}from"./@vue/reactivity-DiY1c2vO.js";import{_ as V}from"./index-d3j0BX4t.js";import"./lodash-D3kF6u-c.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const b={class:"card patient-card"},D={class:"patient-hero"},E={class:"patient-name"},G={class:"patient-meta"},H={key:0},J=w({__name:"PatientInfoCard",props:{apt:{default:()=>({})},diag:{default:()=>({})}},setup(t){return(Q,o)=>{var m,r,n,d,p,s,c,l,g,f,u,h,v,k,C;return I(),P("div",b,[o[0]||(o[0]=a("div",{class:"card-title"},"患者信息",-1)),a("div",D,[a("div",E,i(((m=t.apt)==null?void 0:m.patient_name)||"—"),1),a("div",G,[a("div",null,i(e(x)((r=t.apt)==null?void 0:r.patient_phone))+" · "+i(e(y)((n=t.diag)==null?void 0:n.gender))+" · "+i(((d=t.diag)==null?void 0:d.age)!=null?t.diag.age+"岁":"—"),1),a("div",null,i((p=t.diag)!=null&&p.height?t.diag.height+"cm":"—")+" / "+i((s=t.diag)!=null&&s.weight?t.diag.weight+"kg":"—")+" · "+i(((c=t.diag)==null?void 0:c.region)||"—"),1),a("div",null," 预约:"+i((l=t.apt)==null?void 0:l.appointment_date)+" "+i((g=t.apt)==null?void 0:g.appointment_time)+" · "+i(e(B)((f=t.apt)==null?void 0:f.period)),1),a("div",null,"医生:"+i(((u=t.apt)==null?void 0:u.doctor_name)||"—")+" 客服:"+i(((h=t.apt)==null?void 0:h.assistant_name)||"—"),1),a("div",null," 状态:"+i(((v=t.apt)==null?void 0:v.status_desc)||"—")+" · "+i((k=t.apt)!=null&&k.has_prescription?"已开方":"未开方"),1),(C=t.apt)!=null&&C.remark?(I(),P("div",H,"备注:"+i(t.apt.remark),1)):N("",!0)])])])}}}),Ct=V(J,[["__scopeId","data-v-1b0de09c"]]);export{Ct as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{S as L}from"./element-plus-Bolc0EfP.js";import B from"./RecordingVideoPlayer-D1_T25z0.js";import{e as H,_ as I}from"./index-CzSP4TPL.js";import{f as w,ak as n,I as m,J as p,F as v,G as u,aN as _,O as k,H as y,ap as R,A as d}from"./@vue/runtime-core-C6bnekPw.js";import{Q as q}from"./@vue/shared-mAAVTE9n.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const C={key:0,class:"recording-list"},N={class:"recording-item"},P={key:1,class:"recording-alternates"},V={class:"recording-alternates__links"},A={key:1,class:"text-gray-400"},E=w({__name:"RecordingPlaybackBlock",props:{recordId:{},urls:{}},setup(c){const $=c,h=H(),l=d(()=>{const e=$.urls||[],t=new Set,r=[];for(const s of e){const o=String(s??"").trim();!o||t.has(o)||(t.add(o),r.push(o))}return r}),a=d(()=>{const e=l.value;if(!e.length)return null;const t=e.find(i=>/\.mp4(\?|#|$)/i.test(i));if(t)return t;const r=e.find(i=>/\.m3u8(\?|#|$)/i.test(i)&&/vod-qcloud\.com/i.test(i));if(r)return r;const s=e.find(i=>/\.m3u8(\?|#|$)/i.test(i)&&/\.cos\.[^/]+\.myqcloud\.com/i.test(i));if(s)return s;const o=e.find(i=>/\.m3u8(\?|#|$)/i.test(i));return o||e[0]}),f=d(()=>{const e=l.value,t=a.value;return t?e.filter(r=>r!==t):e.slice(1)});function S(e){if(!e||typeof e!="string")return!1;const t=e.trim();return/^https?:\/\//i.test(t)?/\.(mp4|webm|ogg|mov|mkv|m4v|m3u8)(\?|#|$)/i.test(t):/\.(mp4|webm|ogg|mov|mkv|m4v|m3u8)(\?|#|$)/i.test(t)||t.startsWith("/uploads/")}function g(e){return h.getImageUrl(String(e||"").trim())}function b(e,t){const r=e.trim();return/\.mp4(\?|#|$)/i.test(r)?`MP4 ${t+1}`:/vod-qcloud\.com/i.test(r)&&/\.m3u8/i.test(r)?`点播 ${t+1}`:/\.cos\.[^/]+\.myqcloud\.com/i.test(r)&&/\.m3u8/i.test(r)?`COS HLS ${t+1}`:/\.m3u8/i.test(r)?`HLS ${t+1}`:`链接 ${t+1}`}return(e,t)=>{const r=L;return l.value.length?(n(),m("div",C,[p("div",N,[a.value?(n(),m(v,{key:0},[S(a.value)?(n(),u(B,{key:`${c.recordId}-${a.value}`,src:a.value},null,8,["src"])):(n(),u(r,{key:1,href:g(a.value),target:"_blank",type:"primary"},{default:_(()=>[...t[0]||(t[0]=[k(" 打开回放 ",-1)])]),_:1},8,["href"]))],64)):y("",!0),f.value.length?(n(),m("div",P,[t[1]||(t[1]=p("span",{class:"recording-alternates__label"},"备用地址",-1)),p("div",V,[(n(!0),m(v,null,R(f.value,(s,o)=>(n(),u(r,{key:`${c.recordId}-alt-${o}-${s.slice(-32)}`,href:g(s),target:"_blank",type:"primary",class:"recording-alternates__link"},{default:_(()=>[k(q(b(s,o)),1)]),_:2},1032,["href"]))),128))])])):y("",!0)])])):(n(),m("span",A,"暂无"))}}}),ht=I(E,[["__scopeId","data-v-d67b2e91"]]);export{ht as default};
|
import{S as L}from"./element-plus-Bolc0EfP.js";import B from"./RecordingVideoPlayer-D_4uU34d.js";import{e as H,_ as I}from"./index-d3j0BX4t.js";import{f as w,ak as n,I as m,J as p,F as v,G as u,aN as _,O as k,H as y,ap as R,A as d}from"./@vue/runtime-core-C6bnekPw.js";import{Q as q}from"./@vue/shared-mAAVTE9n.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const C={key:0,class:"recording-list"},N={class:"recording-item"},P={key:1,class:"recording-alternates"},V={class:"recording-alternates__links"},A={key:1,class:"text-gray-400"},E=w({__name:"RecordingPlaybackBlock",props:{recordId:{},urls:{}},setup(c){const $=c,h=H(),l=d(()=>{const e=$.urls||[],t=new Set,r=[];for(const s of e){const o=String(s??"").trim();!o||t.has(o)||(t.add(o),r.push(o))}return r}),a=d(()=>{const e=l.value;if(!e.length)return null;const t=e.find(i=>/\.mp4(\?|#|$)/i.test(i));if(t)return t;const r=e.find(i=>/\.m3u8(\?|#|$)/i.test(i)&&/vod-qcloud\.com/i.test(i));if(r)return r;const s=e.find(i=>/\.m3u8(\?|#|$)/i.test(i)&&/\.cos\.[^/]+\.myqcloud\.com/i.test(i));if(s)return s;const o=e.find(i=>/\.m3u8(\?|#|$)/i.test(i));return o||e[0]}),f=d(()=>{const e=l.value,t=a.value;return t?e.filter(r=>r!==t):e.slice(1)});function S(e){if(!e||typeof e!="string")return!1;const t=e.trim();return/^https?:\/\//i.test(t)?/\.(mp4|webm|ogg|mov|mkv|m4v|m3u8)(\?|#|$)/i.test(t):/\.(mp4|webm|ogg|mov|mkv|m4v|m3u8)(\?|#|$)/i.test(t)||t.startsWith("/uploads/")}function g(e){return h.getImageUrl(String(e||"").trim())}function b(e,t){const r=e.trim();return/\.mp4(\?|#|$)/i.test(r)?`MP4 ${t+1}`:/vod-qcloud\.com/i.test(r)&&/\.m3u8/i.test(r)?`点播 ${t+1}`:/\.cos\.[^/]+\.myqcloud\.com/i.test(r)&&/\.m3u8/i.test(r)?`COS HLS ${t+1}`:/\.m3u8/i.test(r)?`HLS ${t+1}`:`链接 ${t+1}`}return(e,t)=>{const r=L;return l.value.length?(n(),m("div",C,[p("div",N,[a.value?(n(),m(v,{key:0},[S(a.value)?(n(),u(B,{key:`${c.recordId}-${a.value}`,src:a.value},null,8,["src"])):(n(),u(r,{key:1,href:g(a.value),target:"_blank",type:"primary"},{default:_(()=>[...t[0]||(t[0]=[k(" 打开回放 ",-1)])]),_:1},8,["href"]))],64)):y("",!0),f.value.length?(n(),m("div",P,[t[1]||(t[1]=p("span",{class:"recording-alternates__label"},"备用地址",-1)),p("div",V,[(n(!0),m(v,null,R(f.value,(s,o)=>(n(),u(r,{key:`${c.recordId}-alt-${o}-${s.slice(-32)}`,href:g(s),target:"_blank",type:"primary",class:"recording-alternates__link"},{default:_(()=>[k(q(b(s,o)),1)]),_:2},1032,["href"]))),128))])])):y("",!0)])])):(n(),m("span",A,"暂无"))}}}),ht=I(E,[["__scopeId","data-v-d67b2e91"]]);export{ht as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1,2 +1,2 @@
|
|||||||
import{C as I,i as V,W as w}from"./element-plus-Bolc0EfP.js";import{Z as T}from"./tcm-B2eDN42y.js";import{i as C,_ as E}from"./index-CzSP4TPL.js";import{f as z,ak as t,I as e,a as p,J as l,aN as H,O as S,H as m,F as c,ap as u,G as F}from"./@vue/runtime-core-C6bnekPw.js";import{Q as f}from"./@vue/shared-mAAVTE9n.js";import{n as g}from"./@vue/reactivity-DiY1c2vO.js";/* empty css */import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const L={class:"tracking-timeline-wrap"},M={key:0,class:"timeline-input"},A={class:"input-actions"},D={key:1,class:"tracking-timeline"},G={class:"timeline-date"},J={class:"timeline-body"},O={key:0,class:"timeline-content"},Q=z({__name:"TrackingNoteTimeline",props:{notes:{},diagnosisId:{},readonly:{type:Boolean}},emits:["refresh"],setup(i,{emit:v}){const d=i,y=v,r=g(""),a=g(!1),_=o=>o?o.split(`
|
import{C as I,i as V,W as w}from"./element-plus-Bolc0EfP.js";import{Z as T}from"./tcm-Dsvdp1dm.js";import{i as C,_ as E}from"./index-d3j0BX4t.js";import{f as z,ak as t,I as e,a as p,J as l,aN as H,O as S,H as m,F as c,ap as u,G as F}from"./@vue/runtime-core-C6bnekPw.js";import{Q as f}from"./@vue/shared-mAAVTE9n.js";import{n as g}from"./@vue/reactivity-DiY1c2vO.js";/* empty css */import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const L={class:"tracking-timeline-wrap"},M={key:0,class:"timeline-input"},A={class:"input-actions"},D={key:1,class:"tracking-timeline"},G={class:"timeline-date"},J={class:"timeline-body"},O={key:0,class:"timeline-content"},Q=z({__name:"TrackingNoteTimeline",props:{notes:{},diagnosisId:{},readonly:{type:Boolean}},emits:["refresh"],setup(i,{emit:v}){const d=i,y=v,r=g(""),a=g(!1),_=o=>o?o.split(`
|
||||||
`).filter(Boolean):[],k=async()=>{if(!d.diagnosisId)return;const o=r.value.trim();if(o){a.value=!0;try{await T({diagnosis_id:d.diagnosisId,tracking_content:o}),C.msgSuccess("已添加"),r.value="",y("refresh")}finally{a.value=!1}}};return(o,n)=>{const h=I,b=V,N=w;return t(),e("div",L,[!i.readonly&&i.diagnosisId?(t(),e("div",M,[p(h,{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=s=>r.value=s),type:"textarea",rows:2,placeholder:"输入跟踪备注,回车换行;保存后将以「[HH:MM] 内容」追加到当天记录",maxlength:"1000","show-word-limit":"",resize:"none",disabled:a.value},null,8,["modelValue","disabled"]),l("div",A,[p(b,{type:"primary",size:"small",loading:a.value,disabled:!r.value.trim(),onClick:k},{default:H(()=>[...n[1]||(n[1]=[S(" 添加 ",-1)])]),_:1},8,["loading","disabled"])])])):m("",!0),i.notes.length?(t(),e("div",D,[(t(!0),e(c,null,u(i.notes,s=>(t(),e("div",{key:s.id,class:"timeline-node"},[n[2]||(n[2]=l("div",{class:"timeline-dot"},null,-1)),l("div",G,f(s.note_date),1),l("div",J,[s.content?(t(),e("div",O,[(t(!0),e(c,null,u(_(s.content),(x,B)=>(t(),e("div",{key:B,class:"content-line"},f(x),1))),128))])):m("",!0)])]))),128))])):m("",!0),!i.notes.length&&i.readonly?(t(),F(N,{key:2,description:"暂无跟踪备注","image-size":48})):m("",!0)])}}}),Tt=E(Q,[["__scopeId","data-v-82b635bd"]]);export{Tt as default};
|
`).filter(Boolean):[],k=async()=>{if(!d.diagnosisId)return;const o=r.value.trim();if(o){a.value=!0;try{await T({diagnosis_id:d.diagnosisId,tracking_content:o}),C.msgSuccess("已添加"),r.value="",y("refresh")}finally{a.value=!1}}};return(o,n)=>{const h=I,b=V,N=w;return t(),e("div",L,[!i.readonly&&i.diagnosisId?(t(),e("div",M,[p(h,{modelValue:r.value,"onUpdate:modelValue":n[0]||(n[0]=s=>r.value=s),type:"textarea",rows:2,placeholder:"输入跟踪备注,回车换行;保存后将以「[HH:MM] 内容」追加到当天记录",maxlength:"1000","show-word-limit":"",resize:"none",disabled:a.value},null,8,["modelValue","disabled"]),l("div",A,[p(b,{type:"primary",size:"small",loading:a.value,disabled:!r.value.trim(),onClick:k},{default:H(()=>[...n[1]||(n[1]=[S(" 添加 ",-1)])]),_:1},8,["loading","disabled"])])])):m("",!0),i.notes.length?(t(),e("div",D,[(t(!0),e(c,null,u(i.notes,s=>(t(),e("div",{key:s.id,class:"timeline-node"},[n[2]||(n[2]=l("div",{class:"timeline-dot"},null,-1)),l("div",G,f(s.note_date),1),l("div",J,[s.content?(t(),e("div",O,[(t(!0),e(c,null,u(_(s.content),(x,B)=>(t(),e("div",{key:B,class:"content-line"},f(x),1))),128))])):m("",!0)])]))),128))])):m("",!0),!i.notes.length&&i.readonly?(t(),F(N,{key:2,description:"暂无跟踪备注","image-size":48})):m("",!0)])}}}),Tt=E(Q,[["__scopeId","data-v-82b635bd"]]);export{Tt as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./account-adjust.vue_vue_type_script_setup_true_lang-BTuVahzq.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-DWEeyCDR.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
import{_ as o}from"./account-adjust.vue_vue_type_script_setup_true_lang-DcBoPFsT.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-DSYwOnd_.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{D as h,B as q,G as B,I,C as D}from"./element-plus-Bolc0EfP.js";import{_ as F}from"./index-DWEeyCDR.js";import{i as b}from"./index-CzSP4TPL.js";import{f as G,w,ak as j,G as S,aN as r,J as U,a,O as u,A}from"./@vue/runtime-core-C6bnekPw.js";import{y as n,q as y,r as J}from"./@vue/reactivity-DiY1c2vO.js";import{Q as k}from"./@vue/shared-mAAVTE9n.js";const M={class:"pr-8"},L=G({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:V}){const s=y(),i=d,f=V,o=J({action:1,num:"",remark:""}),m=y(),c=A(()=>Number(i.value)+Number(o.num)*(o.action==1?1:-1)),R={num:[{required:!0,message:"请输入调整的金额"}]},g=e=>{if(e.includes("-"))return b.msgError("请输入正整数");o.num=e},x=async()=>{var e;await((e=s.value)==null?void 0:e.validate()),f("confirm",o)},C=()=>{var e;f("update:show",!1),(e=s.value)==null||e.resetFields()};return w(()=>i.show,e=>{var t,l;e?(t=m.value)==null||t.open():(l=m.value)==null||l.close()}),w(c,e=>{e<0&&(b.msgError("调整后余额需大于0"),o.num="")}),(e,t)=>{const l=q,_=I,E=B,v=D,N=h;return j(),S(F,{ref_key:"popupRef",ref:m,title:"余额调整",width:"500px",onConfirm:x,async:!0,onClose:C},{default:r(()=>[U("div",M,[a(N,{ref_key:"formRef",ref:s,model:n(o),"label-width":"120px",rules:R},{default:r(()=>[a(l,{label:"当前余额"},{default:r(()=>[u("¥ "+k(d.value),1)]),_:1}),a(l,{label:"余额增减",required:"",prop:"action"},{default:r(()=>[a(E,{modelValue:n(o).action,"onUpdate:modelValue":t[0]||(t[0]=p=>n(o).action=p)},{default:r(()=>[a(_,{value:1},{default:r(()=>[...t[2]||(t[2]=[u("增加余额",-1)])]),_:1}),a(_,{value:2},{default:r(()=>[...t[3]||(t[3]=[u("扣减余额",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(l,{label:"调整余额",prop:"num"},{default:r(()=>[a(v,{"model-value":n(o).num,placeholder:"请输入调整的金额",type:"number",onInput:g},null,8,["model-value"])]),_:1}),a(l,{label:"调整后余额"},{default:r(()=>[u(" ¥ "+k(n(c)),1)]),_:1}),a(l,{label:"备注",prop:"remark"},{default:r(()=>[a(v,{modelValue:n(o).remark,"onUpdate:modelValue":t[1]||(t[1]=p=>n(o).remark=p),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{L as _};
|
import{D as h,B as q,G as B,I,C as D}from"./element-plus-Bolc0EfP.js";import{_ as F}from"./index-DSYwOnd_.js";import{i as b}from"./index-d3j0BX4t.js";import{f as G,w,ak as j,G as S,aN as r,J as U,a,O as u,A}from"./@vue/runtime-core-C6bnekPw.js";import{y as n,q as y,r as J}from"./@vue/reactivity-DiY1c2vO.js";import{Q as k}from"./@vue/shared-mAAVTE9n.js";const M={class:"pr-8"},L=G({__name:"account-adjust",props:{show:{type:Boolean,required:!0},value:{type:[Number,String],required:!0}},emits:["update:show","confirm"],setup(d,{emit:V}){const s=y(),i=d,f=V,o=J({action:1,num:"",remark:""}),m=y(),c=A(()=>Number(i.value)+Number(o.num)*(o.action==1?1:-1)),R={num:[{required:!0,message:"请输入调整的金额"}]},g=e=>{if(e.includes("-"))return b.msgError("请输入正整数");o.num=e},x=async()=>{var e;await((e=s.value)==null?void 0:e.validate()),f("confirm",o)},C=()=>{var e;f("update:show",!1),(e=s.value)==null||e.resetFields()};return w(()=>i.show,e=>{var t,l;e?(t=m.value)==null||t.open():(l=m.value)==null||l.close()}),w(c,e=>{e<0&&(b.msgError("调整后余额需大于0"),o.num="")}),(e,t)=>{const l=q,_=I,E=B,v=D,N=h;return j(),S(F,{ref_key:"popupRef",ref:m,title:"余额调整",width:"500px",onConfirm:x,async:!0,onClose:C},{default:r(()=>[U("div",M,[a(N,{ref_key:"formRef",ref:s,model:n(o),"label-width":"120px",rules:R},{default:r(()=>[a(l,{label:"当前余额"},{default:r(()=>[u("¥ "+k(d.value),1)]),_:1}),a(l,{label:"余额增减",required:"",prop:"action"},{default:r(()=>[a(E,{modelValue:n(o).action,"onUpdate:modelValue":t[0]||(t[0]=p=>n(o).action=p)},{default:r(()=>[a(_,{value:1},{default:r(()=>[...t[2]||(t[2]=[u("增加余额",-1)])]),_:1}),a(_,{value:2},{default:r(()=>[...t[3]||(t[3]=[u("扣减余额",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),a(l,{label:"调整余额",prop:"num"},{default:r(()=>[a(v,{"model-value":n(o).num,placeholder:"请输入调整的金额",type:"number",onInput:g},null,8,["model-value"])]),_:1}),a(l,{label:"调整后余额"},{default:r(()=>[u(" ¥ "+k(n(c)),1)]),_:1}),a(l,{label:"备注",prop:"remark"},{default:r(()=>[a(v,{modelValue:n(o).remark,"onUpdate:modelValue":t[1]||(t[1]=p=>n(o).remark=p),type:"textarea",rows:4},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])])]),_:1},512)}}});export{L as _};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./add-nav.vue_vue_type_script_setup_true_lang-CY3pR2vL.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./add-nav.vue_vue_type_script_setup_true_lang-CiBqj7Cj.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{C as E,B,g as C,i as N}from"./element-plus-Bolc0EfP.js";import{_ as $}from"./index-C5CUkFFb.js";import{_ as z}from"./picker-3ckv7nGW.js";import{_ as A}from"./picker-BFSyGoz9.js";import{c as D,i as r}from"./index-CzSP4TPL.js";import{D as I}from"./vuedraggable-5bKFmC7X.js";import{f as R,ak as p,I as F,J as l,a,aN as d,G,O as J,A as L}from"./@vue/runtime-core-C6bnekPw.js";import{y as c,a as O}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"bg-fill-light flex items-center w-full p-4 mb-4"},S={class:"upload-btn w-[60px] h-[60px]"},T={class:"ml-3 flex-1"},j={class:"flex items-center"},q={class:"flex items-center mt-[18px]"},H={class:"flex-1 flex items-center"},K={class:"drag-move cursor-move ml-auto"},oe=R({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:100},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:f}){const t=_,V=f,m=L({get(){return t.modelValue},set(s){V("update:modelValue",s)}}),x=()=>{var s;((s=t.modelValue)==null?void 0:s.length)<t.max?m.value.push({image:"",name:"导航名称",link:{},is_show:"1"}):r.msgError(`最多添加${t.max}个`)},g=s=>{var e;if(((e=t.modelValue)==null?void 0:e.length)<=t.min)return r.msgError(`最少保留${t.min}个`);m.value.splice(s,1)};return(s,e)=>{const i=D,v=A,h=E,k=z,b=C,w=B,y=$,U=N;return p(),F("div",null,[l("div",null,[a(c(I),{class:"draggable",modelValue:c(m),"onUpdate:modelValue":e[0]||(e[0]=o=>O(m)?m.value=o:null),animation:"300",handle:".drag-move","item-key":"index"},{item:d(({element:o,index:u})=>[(p(),G(y,{class:"w-[467px]",key:u,onClose:n=>g(u)},{default:d(()=>[l("div",P,[a(v,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:d(()=>[l("div",S,[a(i,{name:"el-icon-Plus",size:20})])]),_:1},8,["modelValue","onUpdate:modelValue"]),l("div",T,[l("div",j,[e[1]||(e[1]=l("span",{class:"text-tx-regular flex-none mr-3"},"名称",-1)),a(h,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),l("div",q,[e[2]||(e[2]=l("span",{class:"text-tx-regular flex-none mr-3"},"链接",-1)),a(k,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),a(w,{label:"是否显示",class:"mt-[18px]"},{default:d(()=>[l("div",H,[a(b,{modelValue:o.is_show,"onUpdate:modelValue":n=>o.is_show=n,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),l("div",K,[a(i,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),l("div",null,[a(U,{type:"primary",onClick:x},{default:d(()=>[...e[3]||(e[3]=[J("添加",-1)])]),_:1})])])}}});export{oe as _};
|
import{C as E,B,g as C,i as N}from"./element-plus-Bolc0EfP.js";import{_ as $}from"./index-CCEDJ4IW.js";import{_ as z}from"./picker-EwZXTd6I.js";import{_ as A}from"./picker-ClTaiCz-.js";import{c as D,i as r}from"./index-d3j0BX4t.js";import{D as I}from"./vuedraggable-5bKFmC7X.js";import{f as R,ak as p,I as F,J as l,a,aN as d,G,O as J,A as L}from"./@vue/runtime-core-C6bnekPw.js";import{y as c,a as O}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"bg-fill-light flex items-center w-full p-4 mb-4"},S={class:"upload-btn w-[60px] h-[60px]"},T={class:"ml-3 flex-1"},j={class:"flex items-center"},q={class:"flex items-center mt-[18px]"},H={class:"flex-1 flex items-center"},K={class:"drag-move cursor-move ml-auto"},oe=R({__name:"add-nav",props:{modelValue:{type:Array,default:()=>[]},max:{type:Number,default:100},min:{type:Number,default:1}},emits:["update:modelValue"],setup(_,{emit:f}){const t=_,V=f,m=L({get(){return t.modelValue},set(s){V("update:modelValue",s)}}),x=()=>{var s;((s=t.modelValue)==null?void 0:s.length)<t.max?m.value.push({image:"",name:"导航名称",link:{},is_show:"1"}):r.msgError(`最多添加${t.max}个`)},g=s=>{var e;if(((e=t.modelValue)==null?void 0:e.length)<=t.min)return r.msgError(`最少保留${t.min}个`);m.value.splice(s,1)};return(s,e)=>{const i=D,v=A,h=E,k=z,b=C,w=B,y=$,U=N;return p(),F("div",null,[l("div",null,[a(c(I),{class:"draggable",modelValue:c(m),"onUpdate:modelValue":e[0]||(e[0]=o=>O(m)?m.value=o:null),animation:"300",handle:".drag-move","item-key":"index"},{item:d(({element:o,index:u})=>[(p(),G(y,{class:"w-[467px]",key:u,onClose:n=>g(u)},{default:d(()=>[l("div",P,[a(v,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body",size:"60px","exclude-domain":""},{upload:d(()=>[l("div",S,[a(i,{name:"el-icon-Plus",size:20})])]),_:1},8,["modelValue","onUpdate:modelValue"]),l("div",T,[l("div",j,[e[1]||(e[1]=l("span",{class:"text-tx-regular flex-none mr-3"},"名称",-1)),a(h,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),l("div",q,[e[2]||(e[2]=l("span",{class:"text-tx-regular flex-none mr-3"},"链接",-1)),a(k,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),a(w,{label:"是否显示",class:"mt-[18px]"},{default:d(()=>[l("div",H,[a(b,{modelValue:o.is_show,"onUpdate:modelValue":n=>o.is_show=n,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),l("div",K,[a(i,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),l("div",null,[a(U,{type:"primary",onClick:x},{default:d(()=>[...e[3]||(e[3]=[J("添加",-1)])]),_:1})])])}}});export{oe as _};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{r as n}from"./index-CzSP4TPL.js";function e(t){return n.get({url:"/auth.admin/lists",params:t},{ignoreCancelToken:!0})}function i(t){return n.post({url:"/auth.admin/add",params:t})}function r(t){return n.post({url:"/auth.admin/edit",params:t})}function u(t){return n.post({url:"/auth.admin/delete",params:t})}function d(t){return n.get({url:"/auth.admin/detail",params:t})}export{e as a,r as b,u as c,i as d,d as e};
|
import{r as n}from"./index-d3j0BX4t.js";function e(t){return n.get({url:"/auth.admin/lists",params:t},{ignoreCancelToken:!0})}function i(t){return n.post({url:"/auth.admin/add",params:t})}function r(t){return n.post({url:"/auth.admin/edit",params:t})}function u(t){return n.post({url:"/auth.admin/delete",params:t})}function d(t){return n.get({url:"/auth.admin/detail",params:t})}export{e as a,r as b,u as c,i as d,d as e};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{r as e}from"./index-CzSP4TPL.js";function a(t){return e.get({url:"/article.articleCate/lists",params:t})}function l(t){return e.get({url:"/article.articleCate/all",params:t})}function i(t){return e.post({url:"/article.articleCate/add",params:t})}function c(t){return e.post({url:"/article.articleCate/edit",params:t})}function u(t){return e.post({url:"/article.articleCate/delete",params:t})}function n(t){return e.get({url:"/article.articleCate/detail",params:t})}function s(t){return e.post({url:"/article.articleCate/updateStatus",params:t})}function o(t){return e.get({url:"/article.article/lists",params:t})}function d(t){return e.post({url:"/article.article/add",params:t})}function f(t){return e.post({url:"/article.article/edit",params:t})}function C(t){return e.post({url:"/article.article/delete",params:t})}function p(t){return e.get({url:"/article.article/detail",params:t})}function g(t){return e.post({url:"/article.article/updateStatus",params:t})}export{a,u as b,s as c,c as d,i as e,n as f,p as g,f as h,d as i,l as j,o as k,g as l,C as m};
|
import{r as e}from"./index-d3j0BX4t.js";function a(t){return e.get({url:"/article.articleCate/lists",params:t})}function l(t){return e.get({url:"/article.articleCate/all",params:t})}function i(t){return e.post({url:"/article.articleCate/add",params:t})}function c(t){return e.post({url:"/article.articleCate/edit",params:t})}function u(t){return e.post({url:"/article.articleCate/delete",params:t})}function n(t){return e.get({url:"/article.articleCate/detail",params:t})}function s(t){return e.post({url:"/article.articleCate/updateStatus",params:t})}function o(t){return e.get({url:"/article.article/lists",params:t})}function d(t){return e.post({url:"/article.article/add",params:t})}function f(t){return e.post({url:"/article.article/edit",params:t})}function C(t){return e.post({url:"/article.article/delete",params:t})}function p(t){return e.get({url:"/article.article/detail",params:t})}function g(t){return e.post({url:"/article.article/updateStatus",params:t})}export{a,u as b,s as c,c as d,i as e,n as f,p as g,f as h,d as i,l as j,o as k,g as l,C as m};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{r as e}from"./index-CzSP4TPL.js";function r(s){return e.get({url:"/asset.AssetUser/lists",params:s})}function u(s){return e.post({url:"/asset.AssetUser/add",params:s})}function a(s){return e.post({url:"/asset.AssetUser/edit",params:s})}function i(s){return e.post({url:"/asset.AssetUser/delete",params:s})}function o(s){return e.get({url:"/asset.AssetResource/lists",params:s})}function n(s){return e.post({url:"/asset.AssetResource/add",params:s})}function A(s){return e.post({url:"/asset.AssetResource/edit",params:s})}function c(s){return e.post({url:"/asset.AssetResource/delete",params:s})}export{o as a,c as b,A as c,n as d,r as e,a as f,i as g,u as h};
|
import{r as e}from"./index-d3j0BX4t.js";function r(s){return e.get({url:"/asset.AssetUser/lists",params:s})}function u(s){return e.post({url:"/asset.AssetUser/add",params:s})}function a(s){return e.post({url:"/asset.AssetUser/edit",params:s})}function i(s){return e.post({url:"/asset.AssetUser/delete",params:s})}function o(s){return e.get({url:"/asset.AssetResource/lists",params:s})}function n(s){return e.post({url:"/asset.AssetResource/add",params:s})}function A(s){return e.post({url:"/asset.AssetResource/edit",params:s})}function c(s){return e.post({url:"/asset.AssetResource/delete",params:s})}export{o as a,c as b,A as c,n as d,r as e,a as f,i as g,u as h};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-D6EqqqMp.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";import"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-BwniOckk.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";import"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-8S8dFeAF.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-Bi9nBZld.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CUImi20n.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CpOakgKa.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CYt1e4-B.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./add-nav.vue_vue_type_script_setup_true_lang-CY3pR2vL.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-C0O8Aj38.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./add-nav.vue_vue_type_script_setup_true_lang-CiBqj7Cj.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{m as b,l as c,D as V}from"./element-plus-Bolc0EfP.js";import{_ as l}from"./menu-set.vue_vue_type_script_setup_true_lang-BboQjMk9.js";import{f as v,ak as x,I as k,J as E,a as o,aN as e,F as g,A as w}from"./@vue/runtime-core-C6bnekPw.js";import{y as r}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";const Bt=v({__name:"attr",props:{modelValue:{type:Object,default:()=>({nav:[],menu:{}})}},emits:["update:modelValue"],setup(n,{emit:s}){const u=n,d=s,m=w({get(){return u.modelValue},set(i){d("update:modelValue",i)}});return(i,t)=>{const a=c,f=b,_=V;return x(),k(g,null,[t[2]||(t[2]=E("div",{class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"}," pc导航设置 ",-1)),o(_,{class:"mt-4","label-width":"70px"},{default:e(()=>[o(f,{"model-value":"nav"},{default:e(()=>[o(a,{label:"主导航设置",name:"nav"},{default:e(()=>[o(l,{modelValue:r(m).nav,"onUpdate:modelValue":t[0]||(t[0]=p=>r(m).nav=p)},null,8,["modelValue"])]),_:1}),o(a,{label:"菜单设置",name:"menu"},{default:e(()=>[o(l,{modelValue:r(m).menu,"onUpdate:modelValue":t[1]||(t[1]=p=>r(m).menu=p)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})],64)}}});export{Bt as default};
|
import{m as b,l as c,D as V}from"./element-plus-Bolc0EfP.js";import{_ as l}from"./menu-set.vue_vue_type_script_setup_true_lang-tcruBiyk.js";import{f as v,ak as x,I as k,J as E,a as o,aN as e,F as g,A as w}from"./@vue/runtime-core-C6bnekPw.js";import{y as r}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";const Bt=v({__name:"attr",props:{modelValue:{type:Object,default:()=>({nav:[],menu:{}})}},emits:["update:modelValue"],setup(n,{emit:s}){const u=n,d=s,m=w({get(){return u.modelValue},set(i){d("update:modelValue",i)}});return(i,t)=>{const a=c,f=b,_=V;return x(),k(g,null,[t[2]||(t[2]=E("div",{class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2"}," pc导航设置 ",-1)),o(_,{class:"mt-4","label-width":"70px"},{default:e(()=>[o(f,{"model-value":"nav"},{default:e(()=>[o(a,{label:"主导航设置",name:"nav"},{default:e(()=>[o(l,{modelValue:r(m).nav,"onUpdate:modelValue":t[0]||(t[0]=p=>r(m).nav=p)},null,8,["modelValue"])]),_:1}),o(a,{label:"菜单设置",name:"menu"},{default:e(()=>[o(l,{modelValue:r(m).menu,"onUpdate:modelValue":t[1]||(t[1]=p=>r(m).menu=p)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})],64)}}});export{Bt as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CcLXaftI.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./add-nav.vue_vue_type_script_setup_true_lang-CY3pR2vL.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CQZNZbCw.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./add-nav.vue_vue_type_script_setup_true_lang-CiBqj7Cj.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CM4WX71i.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./picker-BFSyGoz9.js";import"./index-DWEeyCDR.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./index-BL6dsbzE.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./index-C5CUkFFb.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./usePaging-VsbTxSU0.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-tf3H3wmu.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./picker-ClTaiCz-.js";import"./index-DSYwOnd_.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./index-DyY9GvDW.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./index-CCEDJ4IW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./usePaging-VsbTxSU0.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-HyriZzJj.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./picker-BFSyGoz9.js";import"./index-DWEeyCDR.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./index-BL6dsbzE.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./index-C5CUkFFb.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./usePaging-VsbTxSU0.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./attr.vue_vue_type_script_setup_true_lang-CS653gq3.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./picker-ClTaiCz-.js";import"./index-DSYwOnd_.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./index-DyY9GvDW.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./index-CCEDJ4IW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./usePaging-VsbTxSU0.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
import{_ as o}from"./attr-setting.vue_vue_type_script_setup_true_lang-D8_76P18.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-mLE5osWA.js";import"./attr-7PK9WhVs.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";import"./content.vue_vue_type_script_setup_true_lang-BvOLeENJ.js";import"./decoration-img-Dp28C3kj.js";import"./attr.vue_vue_type_script_setup_true_lang-CS653gq3.js";import"./content-DS3w012M.js";import"./attr.vue_vue_type_script_setup_true_lang-Bi9nBZld.js";import"./content.vue_vue_type_script_setup_true_lang-u3As_vOW.js";import"./attr.vue_vue_type_script_setup_true_lang-CQZNZbCw.js";import"./add-nav.vue_vue_type_script_setup_true_lang-CiBqj7Cj.js";import"./content-CoBg6NFt.js";import"./attr.vue_vue_type_script_setup_true_lang-C0O8Aj38.js";import"./content.vue_vue_type_script_setup_true_lang-DapbQyia.js";import"./attr.vue_vue_type_script_setup_true_lang-DnkDutJb.js";import"./content-YnU_wygc.js";import"./decoration-aCqJXBo5.js";import"./attr.vue_vue_type_script_setup_true_lang-tf3H3wmu.js";import"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";import"./content-CMfufNZz.js";import"./content.vue_vue_type_script_setup_true_lang-BdUs-bp4.js";import"./attr.vue_vue_type_script_setup_true_lang-ChKJn1wI.js";import"./content-CS_27Dgq.js";import"./attr.vue_vue_type_script_setup_true_lang-CpOakgKa.js";import"./content.vue_vue_type_script_setup_true_lang-CIY-bZvS.js";import"./attr.vue_vue_type_script_setup_true_lang-9MDVGbdQ.js";import"./content-C3kj8KNg.js";export{o as default};
|
||||||
@@ -1 +0,0 @@
|
|||||||
import{_ as o}from"./attr-setting.vue_vue_type_script_setup_true_lang-DDmr-lx9.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-Bt8Hkr-W.js";import"./attr-BzYWAi6X.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";import"./content.vue_vue_type_script_setup_true_lang-CRMDYkY4.js";import"./decoration-img-CiTM0VMd.js";import"./attr.vue_vue_type_script_setup_true_lang-HyriZzJj.js";import"./content-BNODpXDk.js";import"./attr.vue_vue_type_script_setup_true_lang-8S8dFeAF.js";import"./content.vue_vue_type_script_setup_true_lang-DD_gAKLH.js";import"./attr.vue_vue_type_script_setup_true_lang-CcLXaftI.js";import"./add-nav.vue_vue_type_script_setup_true_lang-CY3pR2vL.js";import"./content-kPMlzIOx.js";import"./attr.vue_vue_type_script_setup_true_lang-CYt1e4-B.js";import"./content.vue_vue_type_script_setup_true_lang-BxhOOkyW.js";import"./attr.vue_vue_type_script_setup_true_lang-DnkDutJb.js";import"./content-D-YLPQeT.js";import"./decoration-7ei2B6H1.js";import"./attr.vue_vue_type_script_setup_true_lang-CM4WX71i.js";import"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";import"./content-D4j9eu3j.js";import"./content.vue_vue_type_script_setup_true_lang-DDRAihTE.js";import"./attr.vue_vue_type_script_setup_true_lang-ChKJn1wI.js";import"./content-CpiRgFSI.js";import"./attr.vue_vue_type_script_setup_true_lang-CUImi20n.js";import"./content.vue_vue_type_script_setup_true_lang-Mls3GfLO.js";import"./attr.vue_vue_type_script_setup_true_lang-9MDVGbdQ.js";import"./content-CXcsHHz9.js";export{o as default};
|
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as y,s as g}from"./element-plus-Bolc0EfP.js";import{e as b}from"./index-Bt8Hkr-W.js";import{f as x,ak as o,I as _,a as r,aN as c,J as h,G as i,K as w,at as k}from"./@vue/runtime-core-C6bnekPw.js";import{Q as v}from"./@vue/shared-mAAVTE9n.js";import{y as C}from"./@vue/reactivity-DiY1c2vO.js";const B={class:"pages-setting"},E={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2 text-xl font-medium"},V=x({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},emits:["update:content"],setup(e,{emit:m}){const d=m,p=a=>{d("update:content",a)};return(a,N)=>{const f=y,u=g;return o(),_("div",B,[r(f,{shadow:"never",class:"!border-none flex"},{default:c(()=>{var t;return[h("div",E,v((t=e.widget)==null?void 0:t.title),1)]}),_:1}),r(u,{class:"w-full",style:{height:"calc(100% - 60px)"}},{default:c(()=>{var t,n,s,l;return[(o(),i(w,null,[(o(),i(k((n=C(b)[(t=e.widget)==null?void 0:t.name])==null?void 0:n.attr),{content:(s=e.widget)==null?void 0:s.content,styles:(l=e.widget)==null?void 0:l.styles,type:e.type,"onUpdate:content":p},null,40,["content","styles","type"]))],1024))]}),_:1})])}}});export{V as _};
|
import{J as y,s as g}from"./element-plus-Bolc0EfP.js";import{e as b}from"./index-mLE5osWA.js";import{f as x,ak as o,I as _,a as r,aN as c,J as h,G as i,K as w,at as k}from"./@vue/runtime-core-C6bnekPw.js";import{Q as v}from"./@vue/shared-mAAVTE9n.js";import{y as C}from"./@vue/reactivity-DiY1c2vO.js";const B={class:"pages-setting"},E={class:"title flex items-center before:w-[3px] before:h-[14px] before:block before:bg-primary before:mr-2 text-xl font-medium"},V=x({__name:"attr-setting",props:{widget:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},emits:["update:content"],setup(e,{emit:m}){const d=m,p=a=>{d("update:content",a)};return(a,N)=>{const f=y,u=g;return o(),_("div",B,[r(f,{shadow:"never",class:"!border-none flex"},{default:c(()=>{var t;return[h("div",E,v((t=e.widget)==null?void 0:t.title),1)]}),_:1}),r(u,{class:"w-full",style:{height:"calc(100% - 60px)"}},{default:c(()=>{var t,n,s,l;return[(o(),i(w,null,[(o(),i(k((n=C(b)[(t=e.widget)==null?void 0:t.name])==null?void 0:n.attr),{content:(s=e.widget)==null?void 0:s.content,styles:(l=e.widget)==null?void 0:l.styles,type:e.type,"onUpdate:content":p},null,40,["content","styles","type"]))],1024))]}),_:1})])}}});export{V as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as j,B as A,C as F,g as J,i as S,D as z}from"./element-plus-Bolc0EfP.js";import{_ as G}from"./index-C5CUkFFb.js";import{c as H,i as k}from"./index-CzSP4TPL.js";import{_ as R}from"./picker-3ckv7nGW.js";import{_ as T}from"./picker-BFSyGoz9.js";import{D as q}from"./vuedraggable-5bKFmC7X.js";import{k as v}from"./lodash-es-C2A-Pj28.js";import{f as K,ak as d,I as b,a as o,aN as s,J as n,G as u,H as r,O as L,A as M}from"./@vue/runtime-core-C6bnekPw.js";import{y as _}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"flex-1"},Q={class:"bg-fill-light w-full p-4 mt-4"},W={class:"flex-1"},X={class:"flex-1 flex items-center"},Y={class:"drag-move cursor-move ml-auto"},Z={key:0,class:"mt-4"},f=5,me=K({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},emits:["update:content"],setup(m,{emit:y}){const p=y,c=m,g=M({get:()=>c.content,set:a=>{p("update:content",a)}}),w=()=>{var a;if(((a=c.content.data)==null?void 0:a.length)<f){const e=v(c.content);e.data.push({is_show:"1",image:"",name:"",link:{}}),p("update:content",e)}else k.msgError(`最多添加${f}张图片`)},E=a=>{var i;if(((i=c.content.data)==null?void 0:i.length)<=1)return k.msgError("最少保留一张图片");const e=v(c.content);e.data.splice(a,1),p("update:content",e)};return(a,e)=>{const i=T,U=R,C=F,h=A,B=J,D=H,N=G,$=S,I=j,O=z;return d(),b("div",null,[o(O,{"label-width":"70px"},{default:s(()=>[o(I,{shadow:"never",class:"!border-none flex mt-2"},{default:s(()=>{var x;return[e[2]||(e[2]=n("div",{class:"flex items-end"},[n("div",{class:"text-base text-[#101010] font-medium"},"图片设置"),n("div",{class:"text-xs text-tx-secondary ml-2"}," 最多添加5张,建议图片尺寸:750px*200px ")],-1)),n("div",P,[o(_(q),{class:"draggable",modelValue:_(g).data,"onUpdate:modelValue":e[0]||(e[0]=t=>_(g).data=t),animation:"300",handle:".drag-move"},{item:s(({element:t,index:V})=>[(d(),u(N,{key:V,onClose:l=>E(V),class:"w-full"},{default:s(()=>[n("div",Q,[o(i,{width:"396px",height:"196px",modelValue:t.image,"onUpdate:modelValue":l=>t.image=l,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),n("div",W,[o(h,{class:"mt-[18px]",label:"图片链接"},{default:s(()=>[m.type=="mobile"?(d(),u(U,{key:0,modelValue:t.link,"onUpdate:modelValue":l=>t.link=l},null,8,["modelValue","onUpdate:modelValue"])):r("",!0),m.type=="pc"?(d(),u(C,{key:1,placeholder:"请输入链接",modelValue:t.link.path,"onUpdate:modelValue":l=>t.link.path=l},null,8,["modelValue","onUpdate:modelValue"])):r("",!0)]),_:2},1024),o(h,{label:"是否显示",class:"mt-[18px] !mb-0"},{default:s(()=>[n("div",X,[o(B,{modelValue:t.is_show,"onUpdate:modelValue":l=>t.is_show=l,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),n("div",Y,[o(D,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),((x=m.content.data)==null?void 0:x.length)<f?(d(),b("div",Z,[o($,{class:"w-full",type:"primary",onClick:w},{default:s(()=>[...e[1]||(e[1]=[L("添加图片",-1)])]),_:1})])):r("",!0)]}),_:1})]),_:1})])}}});export{me as _};
|
import{J as j,B as A,C as F,g as J,i as S,D as z}from"./element-plus-Bolc0EfP.js";import{_ as G}from"./index-CCEDJ4IW.js";import{c as H,i as k}from"./index-d3j0BX4t.js";import{_ as R}from"./picker-EwZXTd6I.js";import{_ as T}from"./picker-ClTaiCz-.js";import{D as q}from"./vuedraggable-5bKFmC7X.js";import{k as v}from"./lodash-es-C2A-Pj28.js";import{f as K,ak as d,I as b,a as o,aN as s,J as n,G as u,H as r,O as L,A as M}from"./@vue/runtime-core-C6bnekPw.js";import{y as _}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"flex-1"},Q={class:"bg-fill-light w-full p-4 mt-4"},W={class:"flex-1"},X={class:"flex-1 flex items-center"},Y={class:"drag-move cursor-move ml-auto"},Z={key:0,class:"mt-4"},f=5,me=K({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})},type:{type:String,default:"mobile"}},emits:["update:content"],setup(m,{emit:y}){const p=y,c=m,g=M({get:()=>c.content,set:a=>{p("update:content",a)}}),w=()=>{var a;if(((a=c.content.data)==null?void 0:a.length)<f){const e=v(c.content);e.data.push({is_show:"1",image:"",name:"",link:{}}),p("update:content",e)}else k.msgError(`最多添加${f}张图片`)},E=a=>{var i;if(((i=c.content.data)==null?void 0:i.length)<=1)return k.msgError("最少保留一张图片");const e=v(c.content);e.data.splice(a,1),p("update:content",e)};return(a,e)=>{const i=T,U=R,C=F,h=A,B=J,D=H,N=G,$=S,I=j,O=z;return d(),b("div",null,[o(O,{"label-width":"70px"},{default:s(()=>[o(I,{shadow:"never",class:"!border-none flex mt-2"},{default:s(()=>{var x;return[e[2]||(e[2]=n("div",{class:"flex items-end"},[n("div",{class:"text-base text-[#101010] font-medium"},"图片设置"),n("div",{class:"text-xs text-tx-secondary ml-2"}," 最多添加5张,建议图片尺寸:750px*200px ")],-1)),n("div",P,[o(_(q),{class:"draggable",modelValue:_(g).data,"onUpdate:modelValue":e[0]||(e[0]=t=>_(g).data=t),animation:"300",handle:".drag-move"},{item:s(({element:t,index:V})=>[(d(),u(N,{key:V,onClose:l=>E(V),class:"w-full"},{default:s(()=>[n("div",Q,[o(i,{width:"396px",height:"196px",modelValue:t.image,"onUpdate:modelValue":l=>t.image=l,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),n("div",W,[o(h,{class:"mt-[18px]",label:"图片链接"},{default:s(()=>[m.type=="mobile"?(d(),u(U,{key:0,modelValue:t.link,"onUpdate:modelValue":l=>t.link=l},null,8,["modelValue","onUpdate:modelValue"])):r("",!0),m.type=="pc"?(d(),u(C,{key:1,placeholder:"请输入链接",modelValue:t.link.path,"onUpdate:modelValue":l=>t.link.path=l},null,8,["modelValue","onUpdate:modelValue"])):r("",!0)]),_:2},1024),o(h,{label:"是否显示",class:"mt-[18px] !mb-0"},{default:s(()=>[n("div",X,[o(B,{modelValue:t.is_show,"onUpdate:modelValue":l=>t.is_show=l,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),n("div",Y,[o(D,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"])]),((x=m.content.data)==null?void 0:x.length)<f?(d(),b("div",Z,[o($,{class:"w-full",type:"primary",onClick:w},{default:s(()=>[...e[1]||(e[1]=[L("添加图片",-1)])]),_:1})])):r("",!0)]}),_:1})]),_:1})])}}});export{me as _};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as B,G as F,I as N,B as O,P as U,Q as g,D as C}from"./element-plus-Bolc0EfP.js";import{_ as I}from"./add-nav.vue_vue_type_script_setup_true_lang-CY3pR2vL.js";import{f as j,ak as d,I as m,a as l,aN as o,J as s,O as x,F as c,ap as v,A as D}from"./@vue/runtime-core-C6bnekPw.js";import{y as n}from"./@vue/reactivity-DiY1c2vO.js";const G={class:"flex-1 mt-4"},P=j({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(V,{emit:b}){const y=b,w=V,a=D({get:()=>w.content,set:u=>{y("update:content",u)}});return(u,e)=>{const r=N,E=F,p=g,i=U,_=O,f=B,k=C;return d(),m("div",null,[l(k,{"label-width":"70px"},{default:o(()=>[l(f,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[6]||(e[6]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"展示样式")],-1)),l(E,{modelValue:n(a).style,"onUpdate:modelValue":e[0]||(e[0]=t=>n(a).style=t)},{default:o(()=>[l(r,{value:1},{default:o(()=>[...e[4]||(e[4]=[x("固定显示",-1)])]),_:1}),l(r,{value:2},{default:o(()=>[...e[5]||(e[5]=[x("分页滑动",-1)])]),_:1})]),_:1},8,["modelValue"]),l(_,{label:"每行数量",class:"mt-4"},{default:o(()=>[l(i,{modelValue:n(a).per_line,"onUpdate:modelValue":e[1]||(e[1]=t=>n(a).per_line=t),style:{width:"300px"}},{default:o(()=>[(d(),m(c,null,v(5,t=>l(p,{key:t,label:t+"个",value:t},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),l(_,{label:"显示行数"},{default:o(()=>[l(i,{modelValue:n(a).show_line,"onUpdate:modelValue":e[2]||(e[2]=t=>n(a).show_line=t),style:{width:"300px"}},{default:o(()=>[(d(),m(c,null,v(2,t=>l(p,{key:t,label:t+"行",value:t},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(f,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[7]||(e[7]=s("div",{class:"flex items-end"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单设置"),s("div",{class:"text-xs text-tx-secondary ml-2"},"建议图片尺寸:100px*100px")],-1)),s("div",G,[l(I,{modelValue:n(a).data,"onUpdate:modelValue":e[3]||(e[3]=t=>n(a).data=t)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{P as _};
|
import{J as B,G as F,I as N,B as O,P as U,Q as g,D as C}from"./element-plus-Bolc0EfP.js";import{_ as I}from"./add-nav.vue_vue_type_script_setup_true_lang-CiBqj7Cj.js";import{f as j,ak as d,I as m,a as l,aN as o,J as s,O as x,F as c,ap as v,A as D}from"./@vue/runtime-core-C6bnekPw.js";import{y as n}from"./@vue/reactivity-DiY1c2vO.js";const G={class:"flex-1 mt-4"},P=j({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(V,{emit:b}){const y=b,w=V,a=D({get:()=>w.content,set:u=>{y("update:content",u)}});return(u,e)=>{const r=N,E=F,p=g,i=U,_=O,f=B,k=C;return d(),m("div",null,[l(k,{"label-width":"70px"},{default:o(()=>[l(f,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[6]||(e[6]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"展示样式")],-1)),l(E,{modelValue:n(a).style,"onUpdate:modelValue":e[0]||(e[0]=t=>n(a).style=t)},{default:o(()=>[l(r,{value:1},{default:o(()=>[...e[4]||(e[4]=[x("固定显示",-1)])]),_:1}),l(r,{value:2},{default:o(()=>[...e[5]||(e[5]=[x("分页滑动",-1)])]),_:1})]),_:1},8,["modelValue"]),l(_,{label:"每行数量",class:"mt-4"},{default:o(()=>[l(i,{modelValue:n(a).per_line,"onUpdate:modelValue":e[1]||(e[1]=t=>n(a).per_line=t),style:{width:"300px"}},{default:o(()=>[(d(),m(c,null,v(5,t=>l(p,{key:t,label:t+"个",value:t},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1}),l(_,{label:"显示行数"},{default:o(()=>[l(i,{modelValue:n(a).show_line,"onUpdate:modelValue":e[2]||(e[2]=t=>n(a).show_line=t),style:{width:"300px"}},{default:o(()=>[(d(),m(c,null,v(2,t=>l(p,{key:t,label:t+"行",value:t},null,8,["label","value"])),64))]),_:1},8,["modelValue"])]),_:1})]),_:1}),l(f,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[7]||(e[7]=s("div",{class:"flex items-end"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单设置"),s("div",{class:"text-xs text-tx-secondary ml-2"},"建议图片尺寸:100px*100px")],-1)),s("div",G,[l(I,{modelValue:n(a).data,"onUpdate:modelValue":e[3]||(e[3]=t=>n(a).data=t)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{P as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as b,B as y,C as E,G as w,I as B,D as C}from"./element-plus-Bolc0EfP.js";import{_ as I}from"./add-nav.vue_vue_type_script_setup_true_lang-CY3pR2vL.js";import{f as N,ak as k,I as O,a as t,aN as o,J as a,O as u,A as U}from"./@vue/runtime-core-C6bnekPw.js";import{y as s}from"./@vue/reactivity-DiY1c2vO.js";const g={class:"flex-1"},J=N({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(p,{emit:i}){const f=i,_=p,l=U({get:()=>_.content,set:m=>{f("update:content",m)}});return(m,e)=>{const x=E,c=y,d=b,r=B,v=w,V=C;return k(),O("div",null,[t(V,{"label-width":"70px"},{default:o(()=>[t(d,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[t(c,{label:"标题"},{default:o(()=>[t(x,{class:"w-[396px]",modelValue:s(l).title,"onUpdate:modelValue":e[0]||(e[0]=n=>s(l).title=n)},null,8,["modelValue"])]),_:1})]),_:1}),t(d,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[5]||(e[5]=a("div",{class:"flex items-end mb-4"},[a("div",{class:"text-base text-[#101010] font-medium"},"展示样式")],-1)),t(v,{modelValue:s(l).style,"onUpdate:modelValue":e[1]||(e[1]=n=>s(l).style=n)},{default:o(()=>[t(r,{value:1},{default:o(()=>[...e[3]||(e[3]=[u("横排",-1)])]),_:1}),t(r,{value:2},{default:o(()=>[...e[4]||(e[4]=[u("竖排",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(d,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[6]||(e[6]=a("div",{class:"flex items-end mb-4"},[a("div",{class:"text-base text-[#101010] font-medium"},"菜单"),a("div",{class:"text-xs text-tx-secondary ml-2"},"建议图片尺寸:100px*100px")],-1)),a("div",g,[t(I,{modelValue:s(l).data,"onUpdate:modelValue":e[2]||(e[2]=n=>s(l).data=n)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{J as _};
|
import{J as b,B as y,C as E,G as w,I as B,D as C}from"./element-plus-Bolc0EfP.js";import{_ as I}from"./add-nav.vue_vue_type_script_setup_true_lang-CiBqj7Cj.js";import{f as N,ak as k,I as O,a as t,aN as o,J as a,O as u,A as U}from"./@vue/runtime-core-C6bnekPw.js";import{y as s}from"./@vue/reactivity-DiY1c2vO.js";const g={class:"flex-1"},J=N({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(p,{emit:i}){const f=i,_=p,l=U({get:()=>_.content,set:m=>{f("update:content",m)}});return(m,e)=>{const x=E,c=y,d=b,r=B,v=w,V=C;return k(),O("div",null,[t(V,{"label-width":"70px"},{default:o(()=>[t(d,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[t(c,{label:"标题"},{default:o(()=>[t(x,{class:"w-[396px]",modelValue:s(l).title,"onUpdate:modelValue":e[0]||(e[0]=n=>s(l).title=n)},null,8,["modelValue"])]),_:1})]),_:1}),t(d,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[5]||(e[5]=a("div",{class:"flex items-end mb-4"},[a("div",{class:"text-base text-[#101010] font-medium"},"展示样式")],-1)),t(v,{modelValue:s(l).style,"onUpdate:modelValue":e[1]||(e[1]=n=>s(l).style=n)},{default:o(()=>[t(r,{value:1},{default:o(()=>[...e[3]||(e[3]=[u("横排",-1)])]),_:1}),t(r,{value:2},{default:o(()=>[...e[4]||(e[4]=[u("竖排",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(d,{shadow:"never",class:"!border-none flex mt-2"},{default:o(()=>[e[6]||(e[6]=a("div",{class:"flex items-end mb-4"},[a("div",{class:"text-base text-[#101010] font-medium"},"菜单"),a("div",{class:"text-xs text-tx-secondary ml-2"},"建议图片尺寸:100px*100px")],-1)),a("div",g,[t(I,{modelValue:s(l).data,"onUpdate:modelValue":e[2]||(e[2]=n=>s(l).data=n)},null,8,["modelValue"])])]),_:1})]),_:1})])}}});export{J as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as V,B as w,C as x,D as b}from"./element-plus-Bolc0EfP.js";import{_ as g}from"./picker-BFSyGoz9.js";import{f as k,ak as E,I as U,a as e,aN as n,J as y,A as B}from"./@vue/runtime-core-C6bnekPw.js";import{y as o}from"./@vue/reactivity-DiY1c2vO.js";const j=k({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(u,{emit:r}){const p=r,i=u,l=B({get:()=>i.content,set:d=>{p("update:content",d)}});return(d,t)=>{const s=x,m=w,_=g,c=V,f=b;return E(),U("div",null,[e(f,{"label-width":"90px",size:"large","label-position":"top"},{default:n(()=>[e(c,{shadow:"never",class:"!border-none flex mt-2"},{default:n(()=>[e(m,{label:"平台名称"},{default:n(()=>[e(s,{class:"w-[400px]","show-word-limit":"",maxlength:"20",modelValue:o(l).title,"onUpdate:modelValue":t[0]||(t[0]=a=>o(l).title=a)},null,8,["modelValue"])]),_:1}),e(m,{label:"客服二维码"},{default:n(()=>[y("div",null,[e(_,{modelValue:o(l).qrcode,"onUpdate:modelValue":t[1]||(t[1]=a=>o(l).qrcode=a),"exclude-domain":""},null,8,["modelValue"])])]),_:1}),e(m,{label:"备注"},{default:n(()=>[e(s,{class:"w-[400px]","show-word-limit":"",maxlength:"20",modelValue:o(l).remark,"onUpdate:modelValue":t[2]||(t[2]=a=>o(l).remark=a)},null,8,["modelValue"])]),_:1}),e(m,{label:"联系电话"},{default:n(()=>[e(s,{class:"w-[400px]",modelValue:o(l).mobile,"onUpdate:modelValue":t[3]||(t[3]=a=>o(l).mobile=a)},null,8,["modelValue"])]),_:1}),e(m,{label:"服务时间"},{default:n(()=>[e(s,{class:"w-[400px]","show-word-limit":"",maxlength:"20",modelValue:o(l).time,"onUpdate:modelValue":t[4]||(t[4]=a=>o(l).time=a)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})])}}});export{j as _};
|
import{J as V,B as w,C as x,D as b}from"./element-plus-Bolc0EfP.js";import{_ as g}from"./picker-ClTaiCz-.js";import{f as k,ak as E,I as U,a as e,aN as n,J as y,A as B}from"./@vue/runtime-core-C6bnekPw.js";import{y as o}from"./@vue/reactivity-DiY1c2vO.js";const j=k({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(u,{emit:r}){const p=r,i=u,l=B({get:()=>i.content,set:d=>{p("update:content",d)}});return(d,t)=>{const s=x,m=w,_=g,c=V,f=b;return E(),U("div",null,[e(f,{"label-width":"90px",size:"large","label-position":"top"},{default:n(()=>[e(c,{shadow:"never",class:"!border-none flex mt-2"},{default:n(()=>[e(m,{label:"平台名称"},{default:n(()=>[e(s,{class:"w-[400px]","show-word-limit":"",maxlength:"20",modelValue:o(l).title,"onUpdate:modelValue":t[0]||(t[0]=a=>o(l).title=a)},null,8,["modelValue"])]),_:1}),e(m,{label:"客服二维码"},{default:n(()=>[y("div",null,[e(_,{modelValue:o(l).qrcode,"onUpdate:modelValue":t[1]||(t[1]=a=>o(l).qrcode=a),"exclude-domain":""},null,8,["modelValue"])])]),_:1}),e(m,{label:"备注"},{default:n(()=>[e(s,{class:"w-[400px]","show-word-limit":"",maxlength:"20",modelValue:o(l).remark,"onUpdate:modelValue":t[2]||(t[2]=a=>o(l).remark=a)},null,8,["modelValue"])]),_:1}),e(m,{label:"联系电话"},{default:n(()=>[e(s,{class:"w-[400px]",modelValue:o(l).mobile,"onUpdate:modelValue":t[3]||(t[3]=a=>o(l).mobile=a)},null,8,["modelValue"])]),_:1}),e(m,{label:"服务时间"},{default:n(()=>[e(s,{class:"w-[400px]","show-word-limit":"",maxlength:"20",modelValue:o(l).time,"onUpdate:modelValue":t[4]||(t[4]=a=>o(l).time=a)},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})])}}});export{j as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as I,B as O,C as j,g as A,i as F,D as J}from"./element-plus-Bolc0EfP.js";import{_ as z}from"./index-C5CUkFFb.js";import{c as G,i as g}from"./index-CzSP4TPL.js";import{_ as H}from"./picker-3ckv7nGW.js";import{_ as R}from"./picker-BFSyGoz9.js";import{D as S}from"./vuedraggable-5bKFmC7X.js";import{k as v}from"./lodash-es-C2A-Pj28.js";import{f as T,ak as _,I as h,a as t,aN as a,J as s,G as q,O as K,H as L,A as M}from"./@vue/runtime-core-C6bnekPw.js";import{y as p}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"bg-fill-light flex items-center w-full p-4 mt-4"},Q={class:"ml-3 flex-1"},W={class:"flex-1 flex items-center"},X={class:"drag-move cursor-move ml-auto"},Y={key:0,class:"mt-4"},r=5,ce=T({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(u,{emit:k}){const d=k,m=u,f=M({get:()=>m.content,set:l=>{d("update:content",l)}}),b=()=>{var l;if(((l=m.content.data)==null?void 0:l.length)<r){const e=v(m.content);e.data.push({is_show:"1",image:"",name:"",link:{}}),d("update:content",e)}else g.msgError(`最多添加${r}张图片`)},w=l=>{var c;if(((c=m.content.data)==null?void 0:c.length)<=1)return g.msgError("最少保留一张图片");const e=v(m.content);e.data.splice(l,1),d("update:content",e)};return(l,e)=>{const c=R,y=j,i=O,E=H,U=A,C=G,B=z,D=F,N=I,$=J;return _(),h("div",null,[t($,{"label-width":"70px"},{default:a(()=>[t(N,{shadow:"never",class:"!border-none flex mt-2"},{default:a(()=>{var x;return[e[2]||(e[2]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单"),s("div",{class:"text-xs text-tx-secondary ml-2"}," 最多添加5张,建议图片尺寸:750px*200px ")],-1)),t(p(S),{class:"draggable",modelValue:p(f).data,"onUpdate:modelValue":e[0]||(e[0]=o=>p(f).data=o),animation:"300",handle:".drag-move","item-key":"index"},{item:a(({element:o,index:V})=>[(_(),q(B,{key:V,onClose:n=>w(V),class:"w-[467px]"},{default:a(()=>[s("div",P,[t(c,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),s("div",Q,[t(i,{label:"图片名称"},{default:a(()=>[t(y,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(i,{class:"mt-[18px]",label:"图片链接"},{default:a(()=>[t(E,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(i,{label:"是否显示",class:"mt-[18px]"},{default:a(()=>[s("div",W,[t(U,{modelValue:o.is_show,"onUpdate:modelValue":n=>o.is_show=n,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),s("div",X,[t(C,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"]),((x=u.content.data)==null?void 0:x.length)<r?(_(),h("div",Y,[t(D,{class:"w-full",type:"primary",onClick:b},{default:a(()=>[...e[1]||(e[1]=[K("添加图片",-1)])]),_:1})])):L("",!0)]}),_:1})]),_:1})])}}});export{ce as _};
|
import{J as I,B as O,C as j,g as A,i as F,D as J}from"./element-plus-Bolc0EfP.js";import{_ as z}from"./index-CCEDJ4IW.js";import{c as G,i as g}from"./index-d3j0BX4t.js";import{_ as H}from"./picker-EwZXTd6I.js";import{_ as R}from"./picker-ClTaiCz-.js";import{D as S}from"./vuedraggable-5bKFmC7X.js";import{k as v}from"./lodash-es-C2A-Pj28.js";import{f as T,ak as _,I as h,a as t,aN as a,J as s,G as q,O as K,H as L,A as M}from"./@vue/runtime-core-C6bnekPw.js";import{y as p}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"bg-fill-light flex items-center w-full p-4 mt-4"},Q={class:"ml-3 flex-1"},W={class:"flex-1 flex items-center"},X={class:"drag-move cursor-move ml-auto"},Y={key:0,class:"mt-4"},r=5,ce=T({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(u,{emit:k}){const d=k,m=u,f=M({get:()=>m.content,set:l=>{d("update:content",l)}}),b=()=>{var l;if(((l=m.content.data)==null?void 0:l.length)<r){const e=v(m.content);e.data.push({is_show:"1",image:"",name:"",link:{}}),d("update:content",e)}else g.msgError(`最多添加${r}张图片`)},w=l=>{var c;if(((c=m.content.data)==null?void 0:c.length)<=1)return g.msgError("最少保留一张图片");const e=v(m.content);e.data.splice(l,1),d("update:content",e)};return(l,e)=>{const c=R,y=j,i=O,E=H,U=A,C=G,B=z,D=F,N=I,$=J;return _(),h("div",null,[t($,{"label-width":"70px"},{default:a(()=>[t(N,{shadow:"never",class:"!border-none flex mt-2"},{default:a(()=>{var x;return[e[2]||(e[2]=s("div",{class:"flex items-end mb-4"},[s("div",{class:"text-base text-[#101010] font-medium"},"菜单"),s("div",{class:"text-xs text-tx-secondary ml-2"}," 最多添加5张,建议图片尺寸:750px*200px ")],-1)),t(p(S),{class:"draggable",modelValue:p(f).data,"onUpdate:modelValue":e[0]||(e[0]=o=>p(f).data=o),animation:"300",handle:".drag-move","item-key":"index"},{item:a(({element:o,index:V})=>[(_(),q(B,{key:V,onClose:n=>w(V),class:"w-[467px]"},{default:a(()=>[s("div",P,[t(c,{modelValue:o.image,"onUpdate:modelValue":n=>o.image=n,"upload-class":"bg-body","exclude-domain":""},null,8,["modelValue","onUpdate:modelValue"]),s("div",Q,[t(i,{label:"图片名称"},{default:a(()=>[t(y,{modelValue:o.name,"onUpdate:modelValue":n=>o.name=n,placeholder:"请输入名称"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(i,{class:"mt-[18px]",label:"图片链接"},{default:a(()=>[t(E,{modelValue:o.link,"onUpdate:modelValue":n=>o.link=n},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),t(i,{label:"是否显示",class:"mt-[18px]"},{default:a(()=>[s("div",W,[t(U,{modelValue:o.is_show,"onUpdate:modelValue":n=>o.is_show=n,"active-value":"1","inactive-value":"0"},null,8,["modelValue","onUpdate:modelValue"]),s("div",X,[t(C,{name:"el-icon-Rank",size:"18"})])])]),_:2},1024)])])]),_:2},1032,["onClose"]))]),_:1},8,["modelValue"]),((x=u.content.data)==null?void 0:x.length)<r?(_(),h("div",Y,[t(D,{class:"w-full",type:"primary",onClick:b},{default:a(()=>[...e[1]||(e[1]=[K("添加图片",-1)])]),_:1})])):L("",!0)]}),_:1})]),_:1})])}}});export{ce as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{J as E,B as C,G as F,I as N,C as B,D as z}from"./element-plus-Bolc0EfP.js";import{_ as G}from"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";import{_ as I}from"./picker-BFSyGoz9.js";import{f as O,ak as r,G as s,aN as t,a as l,O as p,H as i,J as y,A as j}from"./@vue/runtime-core-C6bnekPw.js";import{y as a}from"./@vue/reactivity-DiY1c2vO.js";const T=O({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(m,{emit:g}){const b=g,x=m,o=j({get:()=>x.content,set:_=>{b("update:content",_)}});return(_,e)=>{const u=N,f=F,d=C,k=B,V=I,v=G,U=E,w=z;return r(),s(w,{ref:"form","label-width":"80px",size:"large"},{default:t(()=>[l(U,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>[l(d,{label:"页面标题"},{default:t(()=>[l(f,{modelValue:a(o).title_type,"onUpdate:modelValue":e[0]||(e[0]=n=>a(o).title_type=n)},{default:t(()=>[l(u,{value:"1"},{default:t(()=>[...e[7]||(e[7]=[p("文字",-1)])]),_:1}),l(u,{value:"2"},{default:t(()=>[...e[8]||(e[8]=[p("图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),m.content.title_type==1?(r(),s(d,{key:0},{default:t(()=>[l(k,{modelValue:a(o).title,"onUpdate:modelValue":e[1]||(e[1]=n=>a(o).title=n),maxlength:"8","show-word-limit":"",class:"w-[300px]",placeholder:"请输入页面标题"},null,8,["modelValue"])]),_:1})):i("",!0),m.content.title_type==2?(r(),s(d,{key:1},{default:t(()=>[l(V,{modelValue:a(o).title_img,"onUpdate:modelValue":e[2]||(e[2]=n=>a(o).title_img=n),limit:1,size:"100px"},null,8,["modelValue"]),e[9]||(e[9]=y("div",{class:"form-tips"},"建议图片尺寸:300px*40px",-1))]),_:1})):i("",!0),m.content.title_type==1?(r(),s(d,{key:2,label:"文字颜色"},{default:t(()=>[l(f,{modelValue:a(o).text_color,"onUpdate:modelValue":e[3]||(e[3]=n=>a(o).text_color=n)},{default:t(()=>[l(u,{value:"1"},{default:t(()=>[...e[10]||(e[10]=[p("白色",-1)])]),_:1}),l(u,{value:"2"},{default:t(()=>[...e[11]||(e[11]=[p("黑色",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):i("",!0),l(d,{label:"页面背景"},{default:t(()=>[l(f,{modelValue:a(o).bg_type,"onUpdate:modelValue":e[4]||(e[4]=n=>a(o).bg_type=n)},{default:t(()=>[l(u,{value:"1"},{default:t(()=>[...e[12]||(e[12]=[p("背景颜色",-1)])]),_:1}),l(u,{value:"2"},{default:t(()=>[...e[13]||(e[13]=[p("背景图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),m.content.bg_type==1?(r(),s(d,{key:3},{default:t(()=>[l(v,{modelValue:a(o).bg_color,"onUpdate:modelValue":e[5]||(e[5]=n=>a(o).bg_color=n),"reset-color":"#F5F5F5"},null,8,["modelValue"])]),_:1})):i("",!0),m.content.bg_type==2?(r(),s(d,{key:4},{default:t(()=>[l(V,{modelValue:a(o).bg_image,"onUpdate:modelValue":e[6]||(e[6]=n=>a(o).bg_image=n),limit:1,size:"100px"},null,8,["modelValue"]),e[14]||(e[14]=y("div",{class:"form-tips"},"建议图片尺寸:750px*高度不限",-1))]),_:1})):i("",!0)]),_:1})]),_:1},512)}}});export{T as _};
|
import{J as E,B as C,G as F,I as N,C as B,D as z}from"./element-plus-Bolc0EfP.js";import{_ as G}from"./index.vue_vue_type_script_setup_true_lang-Dgf091c-.js";import{_ as I}from"./picker-ClTaiCz-.js";import{f as O,ak as r,G as s,aN as t,a as l,O as p,H as i,J as y,A as j}from"./@vue/runtime-core-C6bnekPw.js";import{y as a}from"./@vue/reactivity-DiY1c2vO.js";const T=O({__name:"attr",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},emits:["update:content"],setup(m,{emit:g}){const b=g,x=m,o=j({get:()=>x.content,set:_=>{b("update:content",_)}});return(_,e)=>{const u=N,f=F,d=C,k=B,V=I,v=G,U=E,w=z;return r(),s(w,{ref:"form","label-width":"80px",size:"large"},{default:t(()=>[l(U,{shadow:"never",class:"!border-none flex mt-2"},{default:t(()=>[l(d,{label:"页面标题"},{default:t(()=>[l(f,{modelValue:a(o).title_type,"onUpdate:modelValue":e[0]||(e[0]=n=>a(o).title_type=n)},{default:t(()=>[l(u,{value:"1"},{default:t(()=>[...e[7]||(e[7]=[p("文字",-1)])]),_:1}),l(u,{value:"2"},{default:t(()=>[...e[8]||(e[8]=[p("图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),m.content.title_type==1?(r(),s(d,{key:0},{default:t(()=>[l(k,{modelValue:a(o).title,"onUpdate:modelValue":e[1]||(e[1]=n=>a(o).title=n),maxlength:"8","show-word-limit":"",class:"w-[300px]",placeholder:"请输入页面标题"},null,8,["modelValue"])]),_:1})):i("",!0),m.content.title_type==2?(r(),s(d,{key:1},{default:t(()=>[l(V,{modelValue:a(o).title_img,"onUpdate:modelValue":e[2]||(e[2]=n=>a(o).title_img=n),limit:1,size:"100px"},null,8,["modelValue"]),e[9]||(e[9]=y("div",{class:"form-tips"},"建议图片尺寸:300px*40px",-1))]),_:1})):i("",!0),m.content.title_type==1?(r(),s(d,{key:2,label:"文字颜色"},{default:t(()=>[l(f,{modelValue:a(o).text_color,"onUpdate:modelValue":e[3]||(e[3]=n=>a(o).text_color=n)},{default:t(()=>[l(u,{value:"1"},{default:t(()=>[...e[10]||(e[10]=[p("白色",-1)])]),_:1}),l(u,{value:"2"},{default:t(()=>[...e[11]||(e[11]=[p("黑色",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})):i("",!0),l(d,{label:"页面背景"},{default:t(()=>[l(f,{modelValue:a(o).bg_type,"onUpdate:modelValue":e[4]||(e[4]=n=>a(o).bg_type=n)},{default:t(()=>[l(u,{value:"1"},{default:t(()=>[...e[12]||(e[12]=[p("背景颜色",-1)])]),_:1}),l(u,{value:"2"},{default:t(()=>[...e[13]||(e[13]=[p("背景图片",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1}),m.content.bg_type==1?(r(),s(d,{key:3},{default:t(()=>[l(v,{modelValue:a(o).bg_color,"onUpdate:modelValue":e[5]||(e[5]=n=>a(o).bg_color=n),"reset-color":"#F5F5F5"},null,8,["modelValue"])]),_:1})):i("",!0),m.content.bg_type==2?(r(),s(d,{key:4},{default:t(()=>[l(V,{modelValue:a(o).bg_image,"onUpdate:modelValue":e[6]||(e[6]=n=>a(o).bg_image=n),limit:1,size:"100px"},null,8,["modelValue"]),e[14]||(e[14]=y("div",{class:"form-tips"},"建议图片尺寸:750px*高度不限",-1))]),_:1})):i("",!0)]),_:1})]),_:1},512)}}});export{T as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./auth.vue_vue_type_script_setup_true_lang-D1sdj39l.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./menu-C5c2Hj8l.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./role-CG6AJnvp.js";import"./index-DWEeyCDR.js";export{o as default};
|
import{_ as o}from"./auth.vue_vue_type_script_setup_true_lang-CnwMv72V.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./menu-BCkT2pWR.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./role-TSwl3gGr.js";import"./index-DSYwOnd_.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{D as I,s as G,B as J,H as M,$ as O,L as P}from"./element-plus-Bolc0EfP.js";import{m as U}from"./menu-C5c2Hj8l.js";import{a as $}from"./role-CG6AJnvp.js";import{_ as j}from"./index-DWEeyCDR.js";import{x as z}from"./index-CzSP4TPL.js";import{f as Q,ak as k,I as W,a as l,aN as d,aP as X,G as Y,J as y,n as x}from"./@vue/runtime-core-C6bnekPw.js";import{y as c,a as Z,q as f,n as r,r as ee}from"./@vue/reactivity-DiY1c2vO.js";const te={class:"edit-popup"},de=Q({__name:"auth",emits:["success","close"],setup(ae,{expose:C,emit:g}){const _=g,o=f(),h=f(),u=f(),b=r(!1),i=r(!0),m=r(!1),v=r([]),p=r([]),s=ee({id:"",name:"",desc:"",sort:0,data_scope:1,menu_id:[]}),E={name:[{required:!0,message:"请输入名称",trigger:["blur"]}]},w=()=>{m.value=!0,U().then(e=>{p.value=e,v.value=z(e),x(()=>{A()}),m.value=!1})},R=()=>{var a,n;const e=(a=o.value)==null?void 0:a.getCheckedKeys(),t=(n=o.value)==null?void 0:n.getHalfCheckedKeys();return e==null||e.unshift.apply(e,t),e},A=()=>{s.menu_id.forEach(e=>{x(()=>{var t;(t=o.value)==null||t.setChecked(e,!0,!1)})})},D=e=>{const t=p.value;for(let a=0;a<t.length;a++)o.value.store.nodesMap[t[a].id].expanded=e},K=e=>{var t,a;e?(t=o.value)==null||t.setCheckedKeys(v.value.map(n=>n.id)):(a=o.value)==null||a.setCheckedKeys([])},B=async()=>{var e,t;await((e=h.value)==null?void 0:e.validate()),s.menu_id=R(),await $(s),(t=u.value)==null||t.close(),_("success")},V=()=>{_("close")},S=()=>{var e;(e=u.value)==null||e.open()},T=async e=>{for(const t in s)e[t]!=null&&e[t]!=null&&(s[t]=e[t])};return w(),C({open:S,setFormData:T}),(e,t)=>{const a=M,n=O,F=J,L=G,N=I,q=P;return k(),W("div",te,[l(j,{ref_key:"popupRef",ref:u,title:"分配权限",async:!0,width:"550px",onConfirm:B,onClose:V},{default:d(()=>[X((k(),Y(N,{class:"ls-form",ref_key:"formRef",ref:h,rules:E,model:c(s),"label-width":"60px"},{default:d(()=>[l(L,{class:"h-[400px] sm:h-[600px]"},{default:d(()=>[l(F,{label:"权限",prop:"menu_id"},{default:d(()=>[y("div",null,[l(a,{label:"展开/折叠",onChange:D}),l(a,{label:"全选/不全选",onChange:K}),l(a,{modelValue:c(i),"onUpdate:modelValue":t[0]||(t[0]=H=>Z(i)?i.value=H:null),label:"父子联动"},null,8,["modelValue"]),y("div",null,[l(n,{ref_key:"treeRef",ref:o,data:c(p),props:{label:"name",children:"children"},"check-strictly":!c(i),"node-key":"id","default-expand-all":c(b),"show-checkbox":""},null,8,["data","check-strictly","default-expand-all"])])])]),_:1})]),_:1})]),_:1},8,["model"])),[[q,c(m)]])]),_:1},512)])}}});export{de as _};
|
import{D as I,s as G,B as J,H as M,$ as O,L as P}from"./element-plus-Bolc0EfP.js";import{m as U}from"./menu-BCkT2pWR.js";import{a as $}from"./role-TSwl3gGr.js";import{_ as j}from"./index-DSYwOnd_.js";import{x as z}from"./index-d3j0BX4t.js";import{f as Q,ak as k,I as W,a as l,aN as d,aP as X,G as Y,J as y,n as x}from"./@vue/runtime-core-C6bnekPw.js";import{y as c,a as Z,q as f,n as r,r as ee}from"./@vue/reactivity-DiY1c2vO.js";const te={class:"edit-popup"},de=Q({__name:"auth",emits:["success","close"],setup(ae,{expose:C,emit:g}){const _=g,o=f(),h=f(),u=f(),b=r(!1),i=r(!0),m=r(!1),v=r([]),p=r([]),s=ee({id:"",name:"",desc:"",sort:0,data_scope:1,menu_id:[]}),E={name:[{required:!0,message:"请输入名称",trigger:["blur"]}]},w=()=>{m.value=!0,U().then(e=>{p.value=e,v.value=z(e),x(()=>{A()}),m.value=!1})},R=()=>{var a,n;const e=(a=o.value)==null?void 0:a.getCheckedKeys(),t=(n=o.value)==null?void 0:n.getHalfCheckedKeys();return e==null||e.unshift.apply(e,t),e},A=()=>{s.menu_id.forEach(e=>{x(()=>{var t;(t=o.value)==null||t.setChecked(e,!0,!1)})})},D=e=>{const t=p.value;for(let a=0;a<t.length;a++)o.value.store.nodesMap[t[a].id].expanded=e},K=e=>{var t,a;e?(t=o.value)==null||t.setCheckedKeys(v.value.map(n=>n.id)):(a=o.value)==null||a.setCheckedKeys([])},B=async()=>{var e,t;await((e=h.value)==null?void 0:e.validate()),s.menu_id=R(),await $(s),(t=u.value)==null||t.close(),_("success")},V=()=>{_("close")},S=()=>{var e;(e=u.value)==null||e.open()},T=async e=>{for(const t in s)e[t]!=null&&e[t]!=null&&(s[t]=e[t])};return w(),C({open:S,setFormData:T}),(e,t)=>{const a=M,n=O,F=J,L=G,N=I,q=P;return k(),W("div",te,[l(j,{ref_key:"popupRef",ref:u,title:"分配权限",async:!0,width:"550px",onConfirm:B,onClose:V},{default:d(()=>[X((k(),Y(N,{class:"ls-form",ref_key:"formRef",ref:h,rules:E,model:c(s),"label-width":"60px"},{default:d(()=>[l(L,{class:"h-[400px] sm:h-[600px]"},{default:d(()=>[l(F,{label:"权限",prop:"menu_id"},{default:d(()=>[y("div",null,[l(a,{label:"展开/折叠",onChange:D}),l(a,{label:"全选/不全选",onChange:K}),l(a,{modelValue:c(i),"onUpdate:modelValue":t[0]||(t[0]=H=>Z(i)?i.value=H:null),label:"父子联动"},null,8,["modelValue"]),y("div",null,[l(n,{ref_key:"treeRef",ref:o,data:c(p),props:{label:"name",children:"children"},"check-strictly":!c(i),"node-key":"id","default-expand-all":c(b),"show-checkbox":""},null,8,["data","check-strictly","default-expand-all"])])])]),_:1})]),_:1})]),_:1},8,["model"])),[[q,c(m)]])]),_:1},512)])}}});export{de as _};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{K as L,D as N,B as K,C as I,P as O,Q as z,i as J,J as Q,M as R,N as S,L as $}from"./element-plus-Bolc0EfP.js";import{_ as j}from"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import{h as q}from"./index-CzSP4TPL.js";import{_ as A}from"./index.vue_vue_type_script_setup_true_lang-zwvapztR.js";import{w as G}from"./@vue/runtime-dom-DDAG46FW.js";import{g as M,h as H}from"./finance-BaTFwsEY.js";import{u as W}from"./useDictOptions-C3HKLxLn.js";import{u as X}from"./usePaging-VsbTxSU0.js";import{f as v,ak as s,I as h,a as e,aN as n,F as Y,ap as Z,G as w,O as p,aP as ee,J as _}from"./@vue/runtime-core-C6bnekPw.js";import{y as o,a as te,r as oe}from"./@vue/reactivity-DiY1c2vO.js";import{Q as y,o as ae}from"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./lodash-D3kF6u-c.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const ne={class:"flex items-center"},le={class:"flex justify-end mt-4"},ie=v({name:"balanceDetail"}),Xe=v({...ie,setup(re){const l=oe({user_info:"",change_type:"",start_time:"",end_time:""}),{pager:r,getLists:d,resetPage:c,resetParams:C}=X({fetchFun:M,params:l}),{optionsData:x}=W({change_type:{api:H}});return d(),(me,a)=>{const V=L,E=I,m=K,u=z,T=O,k=A,f=J,B=N,g=Q,i=S,D=q,P=R,U=j,F=$;return s(),h("div",null,[e(g,{class:"!border-none",shadow:"never"},{default:n(()=>[e(V,{type:"warning",title:"温馨提示:用户账户变动记录",closable:!1,"show-icon":""}),e(B,{ref:"formRef",class:"mb-[-16px] mt-[16px]",model:o(l),inline:!0},{default:n(()=>[e(m,{class:"w-[280px]",label:"用户信息"},{default:n(()=>[e(E,{modelValue:o(l).user_info,"onUpdate:modelValue":a[0]||(a[0]=t=>o(l).user_info=t),placeholder:"请输入用户账号/昵称/手机号",clearable:"",onKeyup:G(o(c),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),e(m,{class:"w-[280px]",label:"变动类型"},{default:n(()=>[e(T,{modelValue:o(l).change_type,"onUpdate:modelValue":a[1]||(a[1]=t=>o(l).change_type=t)},{default:n(()=>[e(u,{label:"全部",value:""}),(s(!0),h(Y,null,Z(o(x).change_type,(t,b)=>(s(),w(u,{key:b,label:t,value:b},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(m,{label:"记录时间"},{default:n(()=>[e(k,{startTime:o(l).start_time,"onUpdate:startTime":a[2]||(a[2]=t=>o(l).start_time=t),endTime:o(l).end_time,"onUpdate:endTime":a[3]||(a[3]=t=>o(l).end_time=t)},null,8,["startTime","endTime"])]),_:1}),e(m,null,{default:n(()=>[e(f,{type:"primary",onClick:o(c)},{default:n(()=>[...a[5]||(a[5]=[p("查询",-1)])]),_:1},8,["onClick"]),e(f,{onClick:o(C)},{default:n(()=>[...a[6]||(a[6]=[p("重置",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["model"])]),_:1}),e(g,{class:"!border-none mt-4",shadow:"never"},{default:n(()=>[ee((s(),w(P,{size:"large",data:o(r).lists},{default:n(()=>[e(i,{label:"用户账号",prop:"account","min-width":"100"}),e(i,{label:"用户昵称","min-width":"160"},{default:n(({row:t})=>[_("div",ne,[e(D,{class:"flex-none mr-2",src:t.avatar,width:40,height:40,"preview-teleported":"",fit:"contain"},null,8,["src"]),p(" "+y(t.nickname),1)])]),_:1}),e(i,{label:"手机号码",prop:"mobile","min-width":"100"}),e(i,{label:"变动金额",prop:"change_amount","min-width":"100"},{default:n(({row:t})=>[_("span",{class:ae({"text-error":t.action==2})},y(t.change_amount),3)]),_:1}),e(i,{label:"剩余金额",prop:"left_amount","min-width":"100"}),e(i,{label:"变动类型",prop:"change_type_desc","min-width":"120"}),e(i,{label:"来源单号",prop:"source_sn","min-width":"100"}),e(i,{label:"记录时间",prop:"create_time","min-width":"120"})]),_:1},8,["data"])),[[F,o(r).loading]]),_("div",le,[e(U,{modelValue:o(r),"onUpdate:modelValue":a[4]||(a[4]=t=>te(r)?r.value=t:null),onChange:o(d)},null,8,["modelValue","onChange"])])]),_:1})])}}});export{Xe as default};
|
import{K as L,D as N,B as K,C as I,P as O,Q as z,i as J,J as Q,M as R,N as S,L as $}from"./element-plus-Bolc0EfP.js";import{_ as j}from"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import{h as q}from"./index-d3j0BX4t.js";import{_ as A}from"./index.vue_vue_type_script_setup_true_lang-zwvapztR.js";import{w as G}from"./@vue/runtime-dom-DDAG46FW.js";import{g as M,h as H}from"./finance-4UqwcLe9.js";import{u as W}from"./useDictOptions-CZEljHBD.js";import{u as X}from"./usePaging-VsbTxSU0.js";import{f as v,ak as s,I as h,a as e,aN as n,F as Y,ap as Z,G as w,O as p,aP as ee,J as _}from"./@vue/runtime-core-C6bnekPw.js";import{y as o,a as te,r as oe}from"./@vue/reactivity-DiY1c2vO.js";import{Q as y,o as ae}from"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./lodash-D3kF6u-c.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const ne={class:"flex items-center"},le={class:"flex justify-end mt-4"},ie=v({name:"balanceDetail"}),Xe=v({...ie,setup(re){const l=oe({user_info:"",change_type:"",start_time:"",end_time:""}),{pager:r,getLists:d,resetPage:c,resetParams:C}=X({fetchFun:M,params:l}),{optionsData:x}=W({change_type:{api:H}});return d(),(me,a)=>{const V=L,E=I,m=K,u=z,T=O,k=A,f=J,B=N,g=Q,i=S,D=q,P=R,U=j,F=$;return s(),h("div",null,[e(g,{class:"!border-none",shadow:"never"},{default:n(()=>[e(V,{type:"warning",title:"温馨提示:用户账户变动记录",closable:!1,"show-icon":""}),e(B,{ref:"formRef",class:"mb-[-16px] mt-[16px]",model:o(l),inline:!0},{default:n(()=>[e(m,{class:"w-[280px]",label:"用户信息"},{default:n(()=>[e(E,{modelValue:o(l).user_info,"onUpdate:modelValue":a[0]||(a[0]=t=>o(l).user_info=t),placeholder:"请输入用户账号/昵称/手机号",clearable:"",onKeyup:G(o(c),["enter"])},null,8,["modelValue","onKeyup"])]),_:1}),e(m,{class:"w-[280px]",label:"变动类型"},{default:n(()=>[e(T,{modelValue:o(l).change_type,"onUpdate:modelValue":a[1]||(a[1]=t=>o(l).change_type=t)},{default:n(()=>[e(u,{label:"全部",value:""}),(s(!0),h(Y,null,Z(o(x).change_type,(t,b)=>(s(),w(u,{key:b,label:t,value:b},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(m,{label:"记录时间"},{default:n(()=>[e(k,{startTime:o(l).start_time,"onUpdate:startTime":a[2]||(a[2]=t=>o(l).start_time=t),endTime:o(l).end_time,"onUpdate:endTime":a[3]||(a[3]=t=>o(l).end_time=t)},null,8,["startTime","endTime"])]),_:1}),e(m,null,{default:n(()=>[e(f,{type:"primary",onClick:o(c)},{default:n(()=>[...a[5]||(a[5]=[p("查询",-1)])]),_:1},8,["onClick"]),e(f,{onClick:o(C)},{default:n(()=>[...a[6]||(a[6]=[p("重置",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["model"])]),_:1}),e(g,{class:"!border-none mt-4",shadow:"never"},{default:n(()=>[ee((s(),w(P,{size:"large",data:o(r).lists},{default:n(()=>[e(i,{label:"用户账号",prop:"account","min-width":"100"}),e(i,{label:"用户昵称","min-width":"160"},{default:n(({row:t})=>[_("div",ne,[e(D,{class:"flex-none mr-2",src:t.avatar,width:40,height:40,"preview-teleported":"",fit:"contain"},null,8,["src"]),p(" "+y(t.nickname),1)])]),_:1}),e(i,{label:"手机号码",prop:"mobile","min-width":"100"}),e(i,{label:"变动金额",prop:"change_amount","min-width":"100"},{default:n(({row:t})=>[_("span",{class:ae({"text-error":t.action==2})},y(t.change_amount),3)]),_:1}),e(i,{label:"剩余金额",prop:"left_amount","min-width":"100"}),e(i,{label:"变动类型",prop:"change_type_desc","min-width":"120"}),e(i,{label:"来源单号",prop:"source_sn","min-width":"100"}),e(i,{label:"记录时间",prop:"create_time","min-width":"120"})]),_:1},8,["data"])),[[F,o(r).loading]]),_("div",le,[e(U,{modelValue:o(r),"onUpdate:modelValue":a[4]||(a[4]=t=>te(r)?r.value=t:null),onChange:o(d)},null,8,["modelValue","onChange"])])]),_:1})])}}});export{Xe as default};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{K as c,J as _,M as d,N as f,i as u}from"./element-plus-Bolc0EfP.js";import{i as h,B as b}from"./index-CzSP4TPL.js";import{f as i,ak as w,I as C,a as t,aN as o,O as k}from"./@vue/runtime-core-C6bnekPw.js";import{y,n as E}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const x={class:"cache"},B=i({name:"cache"}),st=i({...B,setup(N){const m=E([{content:"系统缓存",desc:"系统运行过程中产生的各类缓存数据"}]),n=async()=>{await h.confirm("确认清除系统缓存?"),await b(),window.location.reload()};return(g,r)=>{const p=c,a=_,e=f,l=u,s=d;return w(),C("div",x,[t(a,{class:"!border-none",shadow:"never"},{default:o(()=>[t(p,{type:"warning",title:"温馨提示:管理系统运行过程中产生的缓存",closable:!1,"show-icon":""})]),_:1}),t(a,{class:"!border-none mt-4",shadow:"never"},{default:o(()=>[t(s,{data:y(m),size:"large"},{default:o(()=>[t(e,{label:"管理内容",prop:"content","min-width":"130"}),t(e,{label:"内容说明",prop:"desc","min-width":"180"}),t(e,{label:"操作",width:"130",fixed:"right"},{default:o(()=>[t(l,{type:"primary",link:"",onClick:n},{default:o(()=>[...r[0]||(r[0]=[k("清除系统缓存",-1)])]),_:1})]),_:1})]),_:1},8,["data"])]),_:1})])}}});export{st as default};
|
import{K as c,J as _,M as d,N as f,i as u}from"./element-plus-Bolc0EfP.js";import{i as h,B as b}from"./index-d3j0BX4t.js";import{f as i,ak as w,I as C,a as t,aN as o,O as k}from"./@vue/runtime-core-C6bnekPw.js";import{y,n as E}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const x={class:"cache"},B=i({name:"cache"}),st=i({...B,setup(N){const m=E([{content:"系统缓存",desc:"系统运行过程中产生的各类缓存数据"}]),n=async()=>{await h.confirm("确认清除系统缓存?"),await b(),window.location.reload()};return(g,r)=>{const p=c,a=_,e=f,l=u,s=d;return w(),C("div",x,[t(a,{class:"!border-none",shadow:"never"},{default:o(()=>[t(p,{type:"warning",title:"温馨提示:管理系统运行过程中产生的缓存",closable:!1,"show-icon":""})]),_:1}),t(a,{class:"!border-none mt-4",shadow:"never"},{default:o(()=>[t(s,{data:y(m),size:"large"},{default:o(()=>[t(e,{label:"管理内容",prop:"content","min-width":"130"}),t(e,{label:"内容说明",prop:"desc","min-width":"180"}),t(e,{label:"操作",width:"130",fixed:"right"},{default:o(()=>[t(l,{type:"primary",link:"",onClick:n},{default:o(()=>[...r[0]||(r[0]=[k("清除系统缓存",-1)])]),_:1})]),_:1})]),_:1},8,["data"])]),_:1})])}}});export{st as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{E as p,B as b,C as v,D as E,i as h}from"./element-plus-Bolc0EfP.js";import{u as V,g as C,P,c as B,d as F,_ as I}from"./index-CzSP4TPL.js";import{w as L}from"./@vue/runtime-dom-DDAG46FW.js";import{u as N}from"./useLockFn-X4Qce5KO.js";import{_ as z}from"./footer.vue_vue_type_script_setup_true_lang-DnvoeH7g.js";import{a as R}from"./vue-router-QlpZ4wdW.js";import{f as S,b as q,ak as U,I as D,J as i,a as s,aN as t,O as K}from"./@vue/runtime-core-C6bnekPw.js";import{y as u,q as M,r as O}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const T={class:"change-password flex flex-col"},$={class:"flex-1 flex items-center justify-center"},j={class:"change-password-card bg-body rounded-md px-10 py-10 w-[480px]"},G=S({__name:"change-password",setup(J){const n=M(),_=R(),d=V();q(()=>{C()||(p.error("请先登录"),_.push(P.LOGIN))});const e=O({password:"",password_confirm:""}),w={password:[{required:!0,message:"请输入新密码",trigger:"blur"},{min:6,message:"密码长度不能少于6位",trigger:"blur"}],password_confirm:[{required:!0,validator:(a,o,r)=>{o===""?r(new Error("请再次输入密码")):o!==e.password?r(new Error("两次输入的密码不一致")):r()},trigger:"blur"}]},l=async()=>{var a;await((a=n.value)==null?void 0:a.validate());try{await F({password:e.password,password_confirm:e.password_confirm}),p.success("密码修改成功,请重新登录"),d.isPaw=1,await d.logout()}catch(o){p.error((o==null?void 0:o.msg)||(o==null?void 0:o.message)||"密码修改失败")}},{isLock:g,lockFn:x}=N(l);return(a,o)=>{const r=B,c=v,f=b,y=E,k=h;return U(),D("div",T,[i("div",$,[i("div",j,[o[3]||(o[3]=i("div",{class:"text-center text-2xl font-medium mb-2"},"首次登录",-1)),o[4]||(o[4]=i("div",{class:"text-center text-gray-500 text-sm mb-8"},"为了您的账号安全,请修改初始密码",-1)),s(y,{ref_key:"formRef",ref:n,model:e,size:"large",rules:w},{default:t(()=>[s(f,{prop:"password"},{default:t(()=>[s(c,{modelValue:e.password,"onUpdate:modelValue":o[0]||(o[0]=m=>e.password=m),type:"password","show-password":"",placeholder:"请输入新密码"},{prepend:t(()=>[s(r,{name:"el-icon-Lock",size:"16"})]),_:1},8,["modelValue"])]),_:1}),s(f,{prop:"password_confirm"},{default:t(()=>[s(c,{modelValue:e.password_confirm,"onUpdate:modelValue":o[1]||(o[1]=m=>e.password_confirm=m),type:"password","show-password":"",placeholder:"请再次输入新密码",onKeyup:L(l,["enter"])},{prepend:t(()=>[s(r,{name:"el-icon-Lock",size:"16"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"]),s(k,{type:"primary",size:"large",loading:u(g),onClick:u(x),class:"w-full"},{default:t(()=>[...o[2]||(o[2]=[K(" 确认修改 ",-1)])]),_:1},8,["loading","onClick"])])]),s(z)])}}}),Ro=I(G,[["__scopeId","data-v-bbd4ab41"]]);export{Ro as default};
|
import{E as p,B as b,C as v,D as E,i as h}from"./element-plus-Bolc0EfP.js";import{u as V,g as C,P,c as B,d as F,_ as I}from"./index-d3j0BX4t.js";import{w as L}from"./@vue/runtime-dom-DDAG46FW.js";import{u as N}from"./useLockFn-X4Qce5KO.js";import{_ as z}from"./footer.vue_vue_type_script_setup_true_lang-biA1ofCD.js";import{a as R}from"./vue-router-QlpZ4wdW.js";import{f as S,b as q,ak as U,I as D,J as i,a as s,aN as t,O as K}from"./@vue/runtime-core-C6bnekPw.js";import{y as u,q as M,r as O}from"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const T={class:"change-password flex flex-col"},$={class:"flex-1 flex items-center justify-center"},j={class:"change-password-card bg-body rounded-md px-10 py-10 w-[480px]"},G=S({__name:"change-password",setup(J){const n=M(),_=R(),d=V();q(()=>{C()||(p.error("请先登录"),_.push(P.LOGIN))});const e=O({password:"",password_confirm:""}),w={password:[{required:!0,message:"请输入新密码",trigger:"blur"},{min:6,message:"密码长度不能少于6位",trigger:"blur"}],password_confirm:[{required:!0,validator:(a,o,r)=>{o===""?r(new Error("请再次输入密码")):o!==e.password?r(new Error("两次输入的密码不一致")):r()},trigger:"blur"}]},l=async()=>{var a;await((a=n.value)==null?void 0:a.validate());try{await F({password:e.password,password_confirm:e.password_confirm}),p.success("密码修改成功,请重新登录"),d.isPaw=1,await d.logout()}catch(o){p.error((o==null?void 0:o.msg)||(o==null?void 0:o.message)||"密码修改失败")}},{isLock:g,lockFn:x}=N(l);return(a,o)=>{const r=B,c=v,f=b,y=E,k=h;return U(),D("div",T,[i("div",$,[i("div",j,[o[3]||(o[3]=i("div",{class:"text-center text-2xl font-medium mb-2"},"首次登录",-1)),o[4]||(o[4]=i("div",{class:"text-center text-gray-500 text-sm mb-8"},"为了您的账号安全,请修改初始密码",-1)),s(y,{ref_key:"formRef",ref:n,model:e,size:"large",rules:w},{default:t(()=>[s(f,{prop:"password"},{default:t(()=>[s(c,{modelValue:e.password,"onUpdate:modelValue":o[0]||(o[0]=m=>e.password=m),type:"password","show-password":"",placeholder:"请输入新密码"},{prepend:t(()=>[s(r,{name:"el-icon-Lock",size:"16"})]),_:1},8,["modelValue"])]),_:1}),s(f,{prop:"password_confirm"},{default:t(()=>[s(c,{modelValue:e.password_confirm,"onUpdate:modelValue":o[1]||(o[1]=m=>e.password_confirm=m),type:"password","show-password":"",placeholder:"请再次输入新密码",onKeyup:L(l,["enter"])},{prepend:t(()=>[s(r,{name:"el-icon-Lock",size:"16"})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model"]),s(k,{type:"primary",size:"large",loading:u(g),onClick:u(x),class:"w-full"},{default:t(()=>[...o[2]||(o[2]=[K(" 确认修改 ",-1)])]),_:1},8,["loading","onClick"])])]),s(z)])}}}),Ro=I(G,[["__scopeId","data-v-bbd4ab41"]]);export{Ro as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{r as t}from"./index-CzSP4TPL.js";function o(e){return t.get({url:"/tools.generator/generateTable",params:e})}function n(e){return t.get({url:"/tools.generator/dataTable",params:e})}function a(e){return t.post({url:"/tools.generator/selectTable",params:e})}function l(e){return t.get({url:"/tools.generator/detail",params:e})}function s(e){return t.post({url:"/tools.generator/syncColumn",params:e})}function u(e){return t.post({url:"/tools.generator/delete",params:e})}function g(e){return t.post({url:"/tools.generator/edit",params:e})}function i(e){return t.post({url:"/tools.generator/preview",params:e})}function c(e){return t.post({url:"/tools.generator/generate",params:e})}function f(){return t.get({url:"/tools.generator/getModels"})}export{f as a,o as b,u as c,i as d,c as e,n as f,g,a as h,s,l as t};
|
import{r as t}from"./index-d3j0BX4t.js";function o(e){return t.get({url:"/tools.generator/generateTable",params:e})}function n(e){return t.get({url:"/tools.generator/dataTable",params:e})}function a(e){return t.post({url:"/tools.generator/selectTable",params:e})}function l(e){return t.get({url:"/tools.generator/detail",params:e})}function s(e){return t.post({url:"/tools.generator/syncColumn",params:e})}function u(e){return t.post({url:"/tools.generator/delete",params:e})}function g(e){return t.post({url:"/tools.generator/edit",params:e})}function i(e){return t.post({url:"/tools.generator/preview",params:e})}function c(e){return t.post({url:"/tools.generator/generate",params:e})}function f(){return t.get({url:"/tools.generator/getModels"})}export{f as a,o as b,u as c,i as d,c as e,n as f,g,a as h,s,l as t};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./code-preview.vue_vue_type_script_setup_true_lang-CWICztaf.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
import{_ as o}from"./code-preview.vue_vue_type_script_setup_true_lang-Cwg6trXq.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{m as B,l as N,s as T,i as $,V as j}from"./element-plus-Bolc0EfP.js";import{c as D,i as d}from"./index-CzSP4TPL.js";import{u as F}from"./vue-clipboard3-DByT_rEQ.js";import{f as S,ar as U,ak as c,I as i,a as t,aN as a,F as A,ap as G,G as I,J as u,O as J,A as L}from"./@vue/runtime-core-C6bnekPw.js";import{a as p,y as _,n as O}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"code-preview"},R={class:"flex",style:{height:"50vh"}},W=S({__name:"code-preview",props:{modelValue:{type:Boolean},code:{}},emits:["update:modelValue"],setup(r,{emit:f}){const V=r,b=f,{toClipboard:g}=F(),n=O("index0"),h=async l=>{try{await g(l),d.msgSuccess("复制成功")}catch{d.msgError("复制失败")}},s=L({get(){return V.modelValue},set(l){b("update:modelValue",l)}});return(l,e)=>{const v=U("highlightjs"),y=T,k=D,C=$,x=N,E=B,w=j;return c(),i("div",P,[t(w,{modelValue:_(s),"onUpdate:modelValue":e[1]||(e[1]=o=>p(s)?s.value=o:null),width:"900px",title:"代码预览"},{default:a(()=>[t(E,{modelValue:_(n),"onUpdate:modelValue":e[0]||(e[0]=o=>p(n)?n.value=o:null)},{default:a(()=>[(c(!0),i(A,null,G(r.code,(o,m)=>(c(),I(x,{label:o.name,name:`index${m}`,key:m},{default:a(()=>[u("div",R,[t(y,{class:"flex-1"},{default:a(()=>[t(v,{autodetect:"",code:o.content},null,8,["code"])]),_:2},1024),u("div",null,[t(C,{onClick:q=>h(o.content),type:"primary",link:""},{icon:a(()=>[t(k,{name:"el-icon-CopyDocument"})]),default:a(()=>[e[2]||(e[2]=J(" 复制 ",-1))]),_:1},8,["onClick"])])])]),_:2},1032,["label","name"]))),128))]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])])}}});export{W as _};
|
import{m as B,l as N,s as T,i as $,V as j}from"./element-plus-Bolc0EfP.js";import{c as D,i as d}from"./index-d3j0BX4t.js";import{u as F}from"./vue-clipboard3-DByT_rEQ.js";import{f as S,ar as U,ak as c,I as i,a as t,aN as a,F as A,ap as G,G as I,J as u,O as J,A as L}from"./@vue/runtime-core-C6bnekPw.js";import{a as p,y as _,n as O}from"./@vue/reactivity-DiY1c2vO.js";const P={class:"code-preview"},R={class:"flex",style:{height:"50vh"}},W=S({__name:"code-preview",props:{modelValue:{type:Boolean},code:{}},emits:["update:modelValue"],setup(r,{emit:f}){const V=r,b=f,{toClipboard:g}=F(),n=O("index0"),h=async l=>{try{await g(l),d.msgSuccess("复制成功")}catch{d.msgError("复制失败")}},s=L({get(){return V.modelValue},set(l){b("update:modelValue",l)}});return(l,e)=>{const v=U("highlightjs"),y=T,k=D,C=$,x=N,E=B,w=j;return c(),i("div",P,[t(w,{modelValue:_(s),"onUpdate:modelValue":e[1]||(e[1]=o=>p(s)?s.value=o:null),width:"900px",title:"代码预览"},{default:a(()=>[t(E,{modelValue:_(n),"onUpdate:modelValue":e[0]||(e[0]=o=>p(n)?n.value=o:null)},{default:a(()=>[(c(!0),i(A,null,G(r.code,(o,m)=>(c(),I(x,{label:o.name,name:`index${m}`,key:m},{default:a(()=>[u("div",R,[t(y,{class:"flex-1"},{default:a(()=>[t(v,{autodetect:"",code:o.content},null,8,["code"])]),_:2},1024),u("div",null,[t(C,{onClick:q=>h(o.content),type:"primary",link:""},{icon:a(()=>[t(k,{name:"el-icon-CopyDocument"})]),default:a(()=>[e[2]||(e[2]=J(" 复制 ",-1))]),_:1},8,["onClick"])])])]),_:2},1032,["label","name"]))),128))]),_:1},8,["modelValue"])]),_:1},8,["modelValue"])])}}});export{W as _};
|
||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
|||||||
import{r}from"./index-CzSP4TPL.js";function u(e){return r.get({url:"/user.user/lists",params:e},{ignoreCancelToken:!0})}function s(e){return r.get({url:"/user.user/detail",params:e})}function n(e){return r.post({url:"/user.user/edit",params:e})}function o(e){return r.post({url:"/user.user/adjustMoney",params:e})}export{o as a,u as b,s as g,n as u};
|
import{r}from"./index-d3j0BX4t.js";function u(e){return r.get({url:"/user.user/lists",params:e},{ignoreCancelToken:!0})}function s(e){return r.get({url:"/user.user/detail",params:e})}function n(e){return r.post({url:"/user.user/edit",params:e})}function o(e){return r.post({url:"/user.user/adjustMoney",params:e})}export{o as a,u as b,s as g,n as u};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-DDRAihTE.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-C5CUkFFb.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-3ckv7nGW.js";import"./index-DWEeyCDR.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-Bvbkj1Rp.js";import"./usePaging-VsbTxSU0.js";import"./picker-BFSyGoz9.js";import"./index-BL6dsbzE.js";import"./index-8GEGc2Yz.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-DA0zt1Rz.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-BdUs-bp4.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CCEDJ4IW.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./picker-EwZXTd6I.js";import"./index-DSYwOnd_.js";import"./index.vue_vue_type_script_setup_true_lang-EJPdzUeK.js";import"./article-3riIdyBp.js";import"./usePaging-VsbTxSU0.js";import"./picker-ClTaiCz-.js";import"./index-DyY9GvDW.js";import"./index-BS_MESkE.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-HzaZx3TF.js";import"./index.vue_vue_type_script_setup_true_lang-Lcfr_gGB.js";import"./vuedraggable-5bKFmC7X.js";import"./vue-BVs68q8v.js";import"./@vue/compiler-dom-CqayqxS7.js";import"./@vue/compiler-core-CvbQOXIO.js";import"./sortablejs-dsEAUXlE.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{s as _}from"./element-plus-Bolc0EfP.js";import l from"./decoration-img-CiTM0VMd.js";import{f,ak as r,I as e,a as p,aN as a,J as t,F as m,ap as c,H as v}from"./@vue/runtime-core-C6bnekPw.js";import{o as h,Q as d}from"./@vue/shared-mAAVTE9n.js";import{_ as x}from"./index-CzSP4TPL.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const y={class:"pc-aside absolute top-0 bottom-0 left-0 w-[150px]"},k={class:"h-full px-[10px] flex flex-col"},b={class:"mb-auto"},g={class:"nav"},w=["to"],C={class:"ml-[10px]"},N={class:"menu"},B={class:"ml-[6px] line-clamp-1"},E=f({__name:"content",props:{nav:{type:Array,default:()=>[]},menu:{type:Array,default:()=>[]}},setup(n){return(I,i)=>{const u=_;return r(),e("div",y,[p(u,null,{default:a(()=>[t("div",k,[t("div",b,[t("div",g,[(r(!0),e(m,null,c(n.nav,(o,s)=>(r(),e(m,{key:s},[o.is_show=="1"?(r(),e("div",{key:0,to:o.link.path,class:h(["nav-item",{active:s==0}])},[p(l,{width:"18px",height:"18px",src:s==0?o.selected:o.unselected,fit:"cover"},{error:a(()=>[...i[0]||(i[0]=[t("span",null,null,-1)])]),_:1},8,["src"]),t("div",C,d(o.name),1)],10,w)):v("",!0)],64))),128))])]),t("div",null,[t("div",N,[(r(!0),e(m,null,c(n.menu,(o,s)=>(r(),e("div",{class:"menu-item",key:s},[p(l,{width:"16px",height:"16px",src:o.unselected,fit:"cover"},{error:a(()=>[...i[1]||(i[1]=[t("span",null,null,-1)])]),_:1},8,["src"]),t("span",B,d(o.name),1)]))),128))])])])]),_:1})])}}}),ut=x(E,[["__scopeId","data-v-35c14957"]]);export{ut as default};
|
import{s as _}from"./element-plus-Bolc0EfP.js";import l from"./decoration-img-Dp28C3kj.js";import{f,ak as r,I as e,a as p,aN as a,J as t,F as m,ap as c,H as v}from"./@vue/runtime-core-C6bnekPw.js";import{o as h,Q as d}from"./@vue/shared-mAAVTE9n.js";import{_ as x}from"./index-d3j0BX4t.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const y={class:"pc-aside absolute top-0 bottom-0 left-0 w-[150px]"},k={class:"h-full px-[10px] flex flex-col"},b={class:"mb-auto"},g={class:"nav"},w=["to"],C={class:"ml-[10px]"},N={class:"menu"},B={class:"ml-[6px] line-clamp-1"},E=f({__name:"content",props:{nav:{type:Array,default:()=>[]},menu:{type:Array,default:()=>[]}},setup(n){return(I,i)=>{const u=_;return r(),e("div",y,[p(u,null,{default:a(()=>[t("div",k,[t("div",b,[t("div",g,[(r(!0),e(m,null,c(n.nav,(o,s)=>(r(),e(m,{key:s},[o.is_show=="1"?(r(),e("div",{key:0,to:o.link.path,class:h(["nav-item",{active:s==0}])},[p(l,{width:"18px",height:"18px",src:s==0?o.selected:o.unselected,fit:"cover"},{error:a(()=>[...i[0]||(i[0]=[t("span",null,null,-1)])]),_:1},8,["src"]),t("div",C,d(o.name),1)],10,w)):v("",!0)],64))),128))])]),t("div",null,[t("div",N,[(r(!0),e(m,null,c(n.menu,(o,s)=>(r(),e("div",{class:"menu-item",key:s},[p(l,{width:"16px",height:"16px",src:o.unselected,fit:"cover"},{error:a(()=>[...i[1]||(i[1]=[t("span",null,null,-1)])]),_:1},8,["src"]),t("span",B,d(o.name),1)]))),128))])])])]),_:1})])}}}),ut=x(E,[["__scopeId","data-v-35c14957"]]);export{ut as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-Mls3GfLO.js";import"./decoration-img-CiTM0VMd.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-DapbQyia.js";import"./decoration-img-Dp28C3kj.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as r}from"./index-CzSP4TPL.js";import{ak as p,I as i,J as o}from"./@vue/runtime-core-C6bnekPw.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const m="/admin/assets/default_avatar-C6VB7PGm.png",e={},s={class:"user-info flex items-center px-[25px]"};function a(n,t){return p(),i("div",s,[...t[0]||(t[0]=[o("img",{src:m,class:"w-[60px] h-[60px]",alt:""},null,-1),o("div",{class:"text-white text-[18px] ml-[10px]"},"未登录",-1)])])}const T=r(e,[["render",a],["__scopeId","data-v-4b1b613f"]]);export{T as default};
|
import{_ as r}from"./index-d3j0BX4t.js";import{ak as p,I as i,J as o}from"./@vue/runtime-core-C6bnekPw.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const m="/admin/assets/default_avatar-C6VB7PGm.png",e={},s={class:"user-info flex items-center px-[25px]"};function a(n,t){return p(),i("div",s,[...t[0]||(t[0]=[o("img",{src:m,class:"w-[60px] h-[60px]",alt:""},null,-1),o("div",{class:"text-white text-[18px] ml-[10px]"},"未登录",-1)])])}const T=r(e,[["render",a],["__scopeId","data-v-4b1b613f"]]);export{T as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as t}from"./index-CzSP4TPL.js";import{ak as o,I as r}from"./@vue/runtime-core-C6bnekPw.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const m={},i={class:"page-mate"};function p(e,c){return o(),r("div",i)}const S=t(m,[["render",p]]);export{S as default};
|
import{_ as t}from"./index-d3j0BX4t.js";import{ak as o,I as r}from"./@vue/runtime-core-C6bnekPw.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const m={},i={class:"page-mate"};function p(e,c){return o(),r("div",i)}const S=t(m,[["render",p]]);export{S as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as i,c as m}from"./index-CzSP4TPL.js";import{ak as p,I as e,J as t,a as s}from"./@vue/runtime-core-C6bnekPw.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const c={},a={class:"search"},n={class:"search-con flex items-center px-[15px]"};function _(d,o){const r=m;return p(),e("div",a,[t("div",n,[s(r,{name:"el-icon-Search",size:17}),o[0]||(o[0]=t("span",{class:"ml-[5px]"},"请输入关键词搜索",-1))])])}const W=i(c,[["render",_],["__scopeId","data-v-3514bdd8"]]);export{W as default};
|
import{_ as i,c as m}from"./index-d3j0BX4t.js";import{ak as p,I as e,J as t,a as s}from"./@vue/runtime-core-C6bnekPw.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./lodash-D3kF6u-c.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const c={},a={class:"search"},n={class:"search-con flex items-center px-[15px]"};function _(d,o){const r=m;return p(),e("div",a,[t("div",n,[s(r,{name:"el-icon-Search",size:17}),o[0]||(o[0]=t("span",{class:"ml-[5px]"},"请输入关键词搜索",-1))])])}const W=i(c,[["render",_],["__scopeId","data-v-3514bdd8"]]);export{W as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-BxhOOkyW.js";import"./decoration-img-CiTM0VMd.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-BvOLeENJ.js";import"./decoration-img-Dp28C3kj.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{c as y,_ as v}from"./index-CzSP4TPL.js";import d from"./decoration-img-CiTM0VMd.js";import{f as b,ak as t,I as e,J as i,H as m,F as x,ap as f,a as n,A as g}from"./@vue/runtime-core-C6bnekPw.js";import{Q as c}from"./@vue/shared-mAAVTE9n.js";import{y as u}from"./@vue/reactivity-DiY1c2vO.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./lodash-D3kF6u-c.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const k={class:"my-service"},w={key:0,class:"title px-[15px] py-[10px]"},B={key:1,class:"flex flex-wrap pt-[20px] pb-[10px]"},I={class:"mt-[7px]"},N={key:2},V={class:"ml-[10px] flex-1"},j=b({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){const _=o,a=g(()=>{var s;return((s=_.content.data)==null?void 0:s.filter(l=>l.is_show=="1"))||[]});return(s,l)=>{const h=y;return t(),e("div",k,[o.content.title?(t(),e("div",w,[i("div",null,c(o.content.title),1)])):m("",!0),o.content.style==1?(t(),e("div",B,[(t(!0),e(x,null,f(u(a),(r,p)=>(t(),e("div",{key:p,class:"flex flex-col items-center w-1/4 mb-[15px]"},[n(d,{width:"26px",height:"26px",src:r.image,alt:""},null,8,["src"]),i("div",I,c(r.name),1)]))),128))])):m("",!0),o.content.style==2?(t(),e("div",N,[(t(!0),e(x,null,f(u(a),(r,p)=>(t(),e("div",{key:p,class:"flex items-center border-b border-[#e5e5e5] h-[50px] px-[12px]"},[n(d,{width:"24px",height:"24px",src:r.image,alt:""},null,8,["src"]),i("div",V,c(r.name),1),i("div",null,[n(h,{name:"el-icon-ArrowRight"})])]))),128))])):m("",!0)])}}}),xt=v(j,[["__scopeId","data-v-2f09c27b"]]);export{xt as default};
|
import{c as y,_ as v}from"./index-d3j0BX4t.js";import d from"./decoration-img-Dp28C3kj.js";import{f as b,ak as t,I as e,J as i,H as m,F as x,ap as f,a as n,A as g}from"./@vue/runtime-core-C6bnekPw.js";import{Q as c}from"./@vue/shared-mAAVTE9n.js";import{y as u}from"./@vue/reactivity-DiY1c2vO.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./lodash-D3kF6u-c.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const k={class:"my-service"},w={key:0,class:"title px-[15px] py-[10px]"},B={key:1,class:"flex flex-wrap pt-[20px] pb-[10px]"},I={class:"mt-[7px]"},N={key:2},V={class:"ml-[10px] flex-1"},j=b({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(o){const _=o,a=g(()=>{var s;return((s=_.content.data)==null?void 0:s.filter(l=>l.is_show=="1"))||[]});return(s,l)=>{const h=y;return t(),e("div",k,[o.content.title?(t(),e("div",w,[i("div",null,c(o.content.title),1)])):m("",!0),o.content.style==1?(t(),e("div",B,[(t(!0),e(x,null,f(u(a),(r,p)=>(t(),e("div",{key:p,class:"flex flex-col items-center w-1/4 mb-[15px]"},[n(d,{width:"26px",height:"26px",src:r.image,alt:""},null,8,["src"]),i("div",I,c(r.name),1)]))),128))])):m("",!0),o.content.style==2?(t(),e("div",N,[(t(!0),e(x,null,f(u(a),(r,p)=>(t(),e("div",{key:p,class:"flex items-center border-b border-[#e5e5e5] h-[50px] px-[12px]"},[n(d,{width:"24px",height:"24px",src:r.image,alt:""},null,8,["src"]),i("div",V,c(r.name),1),i("div",null,[n(h,{name:"el-icon-ArrowRight"})])]))),128))])):m("",!0)])}}}),xt=v(j,[["__scopeId","data-v-2f09c27b"]]);export{xt as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import c from"./decoration-img-CiTM0VMd.js";import{f as n,ak as r,I as o,F as l,ap as f,a as d,J as u,A as _}from"./@vue/runtime-core-C6bnekPw.js";import{p as x,Q as y}from"./@vue/shared-mAAVTE9n.js";import{y as b}from"./@vue/reactivity-DiY1c2vO.js";import{_ as h}from"./index-CzSP4TPL.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const g={class:"tabbar flex"},v={class:"leading-3 text-[12px] mt-[4px]"},k=n({__name:"content",props:{style:{type:Object,default:()=>({})},list:{type:Array,default:()=>[]}},setup(e){const m=e,s=_(()=>{var t;return((t=m.list)==null?void 0:t.filter(i=>i.is_show==1))||[]});return(t,i)=>(r(),o("div",g,[(r(!0),o(l,null,f(b(s),(p,a)=>(r(),o("div",{key:a,class:"tabbar-item flex flex-col justify-center items-center flex-1",style:x({color:e.style.default_color})},[d(c,{width:"22px",height:"22px",src:p.unselected,fit:"cover"},null,8,["src"]),u("div",v,y(p.name),1)],4))),128))]))}}),st=h(k,[["__scopeId","data-v-0405bccb"]]);export{st as default};
|
import c from"./decoration-img-Dp28C3kj.js";import{f as n,ak as r,I as o,F as l,ap as f,a as d,J as u,A as _}from"./@vue/runtime-core-C6bnekPw.js";import{p as x,Q as y}from"./@vue/shared-mAAVTE9n.js";import{y as b}from"./@vue/reactivity-DiY1c2vO.js";import{_ as h}from"./index-d3j0BX4t.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const g={class:"tabbar flex"},v={class:"leading-3 text-[12px] mt-[4px]"},k=n({__name:"content",props:{style:{type:Object,default:()=>({})},list:{type:Array,default:()=>[]}},setup(e){const m=e,s=_(()=>{var t;return((t=m.list)==null?void 0:t.filter(i=>i.is_show==1))||[]});return(t,i)=>(r(),o("div",g,[(r(!0),o(l,null,f(b(s),(p,a)=>(r(),o("div",{key:a,class:"tabbar-item flex flex-col justify-center items-center flex-1",style:x({color:e.style.default_color})},[d(c,{width:"22px",height:"22px",src:p.unselected,fit:"cover"},null,8,["src"]),u("div",v,y(p.name),1)],4))),128))]))}}),st=h(k,[["__scopeId","data-v-0405bccb"]]);export{st as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import s from"./decoration-img-CiTM0VMd.js";import{f as p,ak as r,I as m,J as e,a as c,H as n,O as a,F as l}from"./@vue/runtime-core-C6bnekPw.js";import{Q as i}from"./@vue/shared-mAAVTE9n.js";import{_ as x}from"./index-CzSP4TPL.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const d={class:"customer-service bg-white flex flex-col justify-center items-center mx-[18px] mt-[15px] rounded-[10px] px-[10px] pb-[50px]"},f={class:"w-full border-solid border-0 border-b border-[#f5f5f5] p-[15px] text-center text-[#101010] text-base font-medium"},u={class:"mt-[30px]"},b={key:0,class:"text-sm mt-[20px] font-medium"},h={key:1,class:"text-sm mt-[12px] flex flex-wrap"},w=["href"],v={key:2,class:"text-muted text-sm mt-[15px]"},y=p({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(k,o)=>(r(),m(l,null,[o[0]||(o[0]=e("view",{class:"bg-white p-[15px] flex text-[#101010] font-medium text-lg"}," 联系我们 ",-1)),e("view",d,[e("view",f,i(t.content.title),1),e("view",u,[c(s,{width:"100px",height:"100px",src:t.content.qrcode,alt:""},null,8,["src"])]),t.content.remark?(r(),m("view",b,i(t.content.remark),1)):n("",!0),t.content.mobile?(r(),m("view",h,[e("a",{class:"ml-[5px] phone text-primary underline",href:"tel:"+t.content.mobile},i(t.content.mobile),9,w)])):n("",!0),t.content.time?(r(),m("view",v," 服务时间:"+i(t.content.time),1)):n("",!0)]),o[1]||(o[1]=a(" Î ",-1))],64))}}),nt=x(y,[["__scopeId","data-v-ed28524a"]]);export{nt as default};
|
import s from"./decoration-img-Dp28C3kj.js";import{f as p,ak as r,I as m,J as e,a as c,H as n,O as a,F as l}from"./@vue/runtime-core-C6bnekPw.js";import{Q as i}from"./@vue/shared-mAAVTE9n.js";import{_ as x}from"./index-d3j0BX4t.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";const d={class:"customer-service bg-white flex flex-col justify-center items-center mx-[18px] mt-[15px] rounded-[10px] px-[10px] pb-[50px]"},f={class:"w-full border-solid border-0 border-b border-[#f5f5f5] p-[15px] text-center text-[#101010] text-base font-medium"},u={class:"mt-[30px]"},b={key:0,class:"text-sm mt-[20px] font-medium"},h={key:1,class:"text-sm mt-[12px] flex flex-wrap"},w=["href"],v={key:2,class:"text-muted text-sm mt-[15px]"},y=p({__name:"content",props:{content:{type:Object,default:()=>({})},styles:{type:Object,default:()=>({})}},setup(t){return(k,o)=>(r(),m(l,null,[o[0]||(o[0]=e("view",{class:"bg-white p-[15px] flex text-[#101010] font-medium text-lg"}," 联系我们 ",-1)),e("view",d,[e("view",f,i(t.content.title),1),e("view",u,[c(s,{width:"100px",height:"100px",src:t.content.qrcode,alt:""},null,8,["src"])]),t.content.remark?(r(),m("view",b,i(t.content.remark),1)):n("",!0),t.content.mobile?(r(),m("view",h,[e("a",{class:"ml-[5px] phone text-primary underline",href:"tel:"+t.content.mobile},i(t.content.mobile),9,w)])):n("",!0),t.content.time?(r(),m("view",v," 服务时间:"+i(t.content.time),1)):n("",!0)]),o[1]||(o[1]=a(" Î ",-1))],64))}}),nt=x(y,[["__scopeId","data-v-ed28524a"]]);export{nt as default};
|
||||||
+1
-1
@@ -1 +1 @@
|
|||||||
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-CRMDYkY4.js";import"./decoration-img-CiTM0VMd.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-CzSP4TPL.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
import{_ as o}from"./content.vue_vue_type_script_setup_true_lang-CIY-bZvS.js";import"./decoration-img-Dp28C3kj.js";import"./element-plus-Bolc0EfP.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@vue/runtime-core-C6bnekPw.js";import"./@vue/reactivity-DiY1c2vO.js";import"./@vue/shared-mAAVTE9n.js";import"./@element-plus/icons-vue-B0jSCQ-G.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./index-d3j0BX4t.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";export{o as default};
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user