抽离平台配置结果信息卡片

This commit is contained in:
yml
2026-05-04 11:27:31 +08:00
parent 8f6a72fa46
commit 58f25fad74
5 changed files with 62 additions and 60 deletions
+1
View File
@@ -16,6 +16,7 @@ declare module 'vue' {
AdminPlatformCloudtentaclesSection: typeof import('./components/admin/AdminPlatformCloudtentaclesSection.vue')['default'] AdminPlatformCloudtentaclesSection: typeof import('./components/admin/AdminPlatformCloudtentaclesSection.vue')['default']
AdminPlatformKhhaoSection: typeof import('./components/admin/AdminPlatformKhhaoSection.vue')['default'] AdminPlatformKhhaoSection: typeof import('./components/admin/AdminPlatformKhhaoSection.vue')['default']
AdminPlatformKuaishouEticketSection: typeof import('./components/admin/AdminPlatformKuaishouEticketSection.vue')['default'] AdminPlatformKuaishouEticketSection: typeof import('./components/admin/AdminPlatformKuaishouEticketSection.vue')['default']
AdminResultCard: typeof import('./components/admin/AdminResultCard.vue')['default']
AdminStatusTag: typeof import('./components/admin/AdminStatusTag.vue')['default'] AdminStatusTag: typeof import('./components/admin/AdminStatusTag.vue')['default']
ElButton: typeof import('element-plus/es')['ElButton'] ElButton: typeof import('element-plus/es')['ElButton']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import AdminResultCard from '@/components/admin/AdminResultCard.vue'
import type { import type {
AdminCloudtentaclesLoginTestResult, AdminCloudtentaclesLoginTestResult,
AdminCloudtentaclesPersistedSession, AdminCloudtentaclesPersistedSession,
@@ -168,32 +169,26 @@ defineProps<Props>()
<p v-if="cloudtentaclesResultError" class="error-copy">{{ cloudtentaclesResultError }}</p> <p v-if="cloudtentaclesResultError" class="error-copy">{{ cloudtentaclesResultError }}</p>
<div class="result-grid"> <div class="result-grid">
<article class="result-card"> <AdminResultCard label="短信发送" :value="cloudtentaclesSmsResult ? '成功' : '未执行'">
<span class="result-label">短信发送</span>
<strong>{{ cloudtentaclesSmsResult ? '成功' : '未执行' }}</strong>
<p v-if="cloudtentaclesSmsResult"> <p v-if="cloudtentaclesSmsResult">
{{ cloudtentaclesSmsResult.phoneMasked }}{{ formatAdminDateTime(cloudtentaclesSmsResult.sentAt) }} {{ cloudtentaclesSmsResult.phoneMasked }}{{ formatAdminDateTime(cloudtentaclesSmsResult.sentAt) }}
</p> </p>
<p v-else>先发送短信验证码确认手机号可用</p> <p v-else>先发送短信验证码确认手机号可用</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard label="登录结果" :value="cloudtentaclesLoginResult ? '成功' : '未执行'">
<span class="result-label">登录结果</span>
<strong>{{ cloudtentaclesLoginResult ? '成功' : '未执行' }}</strong>
<p v-if="cloudtentaclesLoginResult"> <p v-if="cloudtentaclesLoginResult">
{{ cloudtentaclesLoginResult.phoneMasked }}{{ formatAdminDateTime(cloudtentaclesLoginResult.loggedInAt) }} {{ cloudtentaclesLoginResult.phoneMasked }}{{ formatAdminDateTime(cloudtentaclesLoginResult.loggedInAt) }}
</p> </p>
<p v-else>填写短信验证码后可执行测试登录</p> <p v-else>填写短信验证码后可执行测试登录</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard label="会话校验" :value="cloudtentaclesValidateResult ? '成功' : '未执行'">
<span class="result-label">会话校验</span>
<strong>{{ cloudtentaclesValidateResult ? '成功' : '未执行' }}</strong>
<p v-if="cloudtentaclesValidateResult"> <p v-if="cloudtentaclesValidateResult">
权限 {{ cloudtentaclesValidateResult.session.permissionCount }} 余额 {{ cloudtentaclesValidateResult.asset }} 权限 {{ cloudtentaclesValidateResult.session.permissionCount }} 余额 {{ cloudtentaclesValidateResult.asset }}
</p> </p>
<p v-else>登录成功后可继续校验 token 会话</p> <p v-else>登录成功后可继续校验 token 会话</p>
</article> </AdminResultCard>
</div> </div>
</section> </section>
@@ -234,23 +229,23 @@ defineProps<Props>()
</div> </div>
<div class="result-grid"> <div class="result-grid">
<article class="result-card"> <AdminResultCard
<span class="result-label">当前 token</span> label="当前 token"
<strong>{{ cloudtentaclesValidateResult?.session.tokenMasked || cloudtentaclesLoginResult?.session.tokenMasked || '-' }}</strong> :value="cloudtentaclesValidateResult?.session.tokenMasked || cloudtentaclesLoginResult?.session.tokenMasked || '-'"
>
<p>原始 token 已写入上方输入框可继续用于校验或后续调试</p> <p>原始 token 已写入上方输入框可继续用于校验或后续调试</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard
<span class="result-label">权限</span> label="权限"
<strong>{{ cloudtentaclesValidateResult?.session.permissionCount || cloudtentaclesLoginResult?.session.permissionCount || 0 }} </strong> :value="`${cloudtentaclesValidateResult?.session.permissionCount || cloudtentaclesLoginResult?.session.permissionCount || 0} 项`"
>
<p>{{ (cloudtentaclesValidateResult?.session.permissions || cloudtentaclesLoginResult?.session.permissions || []).join('、') || '暂无' }}</p> <p>{{ (cloudtentaclesValidateResult?.session.permissions || cloudtentaclesLoginResult?.session.permissions || []).join('、') || '暂无' }}</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard label="余额" :value="cloudtentaclesValidateResult?.asset || cloudtentaclesLoginResult?.asset || 0">
<span class="result-label">余额</span>
<strong>{{ cloudtentaclesValidateResult?.asset || cloudtentaclesLoginResult?.asset || 0 }}</strong>
<p>可用于确认当前履约账号状态</p> <p>可用于确认当前履约账号状态</p>
</article> </AdminResultCard>
</div> </div>
</section> </section>
</template> </template>
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import AdminResultCard from '@/components/admin/AdminResultCard.vue'
import type { import type {
AdminKhhaoLoginTestResult, AdminKhhaoLoginTestResult,
AdminKhhaoOrderQueryResult, AdminKhhaoOrderQueryResult,
@@ -130,29 +131,23 @@ defineProps<Props>()
<p v-if="khhaoResultError" class="error-copy">{{ khhaoResultError }}</p> <p v-if="khhaoResultError" class="error-copy">{{ khhaoResultError }}</p>
<div class="result-grid"> <div class="result-grid">
<article class="result-card"> <AdminResultCard label="登录结果" :value="khhaoLoginResult ? '成功' : '未执行'">
<span class="result-label">登录结果</span>
<strong>{{ khhaoLoginResult ? '成功' : '未执行' }}</strong>
<p v-if="khhaoLoginResult"> <p v-if="khhaoLoginResult">
{{ khhaoLoginResult.attempt }} 次成功验证码识别 {{ khhaoLoginResult.captcha.recognizedText || '-' }} {{ khhaoLoginResult.attempt }} 次成功验证码识别 {{ khhaoLoginResult.captcha.recognizedText || '-' }}
{{ formatAdminDateTime(khhaoLoginResult.loggedInAt) }} {{ formatAdminDateTime(khhaoLoginResult.loggedInAt) }}
</p> </p>
<p v-else>可先点击测试登录验证账号密码与 OCR</p> <p v-else>可先点击测试登录验证账号密码与 OCR</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard label="查询结果" :value="`${khhaoQueryResult?.itemCount || 0} 条`">
<span class="result-label">查询结果</span>
<strong>{{ khhaoQueryResult?.itemCount || 0 }} </strong>
<p v-if="khhaoQueryResult">当前页 {{ khhaoQueryResult.page }} / 总计 {{ khhaoQueryResult.total }} </p> <p v-if="khhaoQueryResult">当前页 {{ khhaoQueryResult.page }} / 总计 {{ khhaoQueryResult.total }} </p>
<p v-else>可先点击查询订单验证拉单链路</p> <p v-else>可先点击查询订单验证拉单链路</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard label="同步结果" :value="`${khhaoSyncResult?.syncedCount || 0} 条`">
<span class="result-label">同步结果</span>
<strong>{{ khhaoSyncResult?.syncedCount || 0 }} </strong>
<p v-if="khhaoSyncResult">忽略 {{ khhaoSyncResult.ignoredCount }} 拉取 {{ khhaoSyncResult.fetchedCount }} </p> <p v-if="khhaoSyncResult">忽略 {{ khhaoSyncResult.ignoredCount }} 拉取 {{ khhaoSyncResult.fetchedCount }} </p>
<p v-else>完成履约配置后可在这里手动同步</p> <p v-else>完成履约配置后可在这里手动同步</p>
</article> </AdminResultCard>
</div> </div>
<div v-if="khhaoAutoSyncState" class="meta-card compact-meta"> <div v-if="khhaoAutoSyncState" class="meta-card compact-meta">
@@ -1,4 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import AdminResultCard from '@/components/admin/AdminResultCard.vue'
import type { EditableKuaishouEticketShop } from '@/composables/admin/platform-shops/types' import type { EditableKuaishouEticketShop } from '@/composables/admin/platform-shops/types'
import type { import type {
AdminKuaishouEticketConsumeResult, AdminKuaishouEticketConsumeResult,
@@ -189,32 +190,32 @@ defineProps<Props>()
</div> </div>
<aside class="kuaishou-side-panel"> <aside class="kuaishou-side-panel">
<article class="result-card kuaishou-side-card"> <AdminResultCard label="店铺总数" :value="kuaishouEticketStats.configuredShopCount" class="kuaishou-side-card">
<span class="result-label">店铺总数</span>
<strong>{{ kuaishouEticketStats.configuredShopCount }}</strong>
<p>其中 Cookie 就绪 {{ kuaishouEticketStats.cookieReadyCount }} </p> <p>其中 Cookie 就绪 {{ kuaishouEticketStats.cookieReadyCount }} </p>
</article> </AdminResultCard>
<article class="result-card kuaishou-side-card"> <AdminResultCard
<span class="result-label">当前调试店铺</span> label="当前调试店铺"
<strong>{{ activeKuaishouEticketShop?.kshopName || activeKuaishouEticketShop?.shopId || '未选择' }}</strong> :value="activeKuaishouEticketShop?.kshopName || activeKuaishouEticketShop?.shopId || '未选择'"
class="kuaishou-side-card"
>
<p>{{ kuaishouEticketStats.selectedShopReady ? '已具备调试条件,可直接查询核销信息。' : '请选择店铺并补全 Cookie。' }}</p> <p>{{ kuaishouEticketStats.selectedShopReady ? '已具备调试条件,可直接查询核销信息。' : '请选择店铺并补全 Cookie。' }}</p>
</article> </AdminResultCard>
<article class="result-card kuaishou-side-card"> <AdminResultCard
<span class="result-label">最近识别结果</span> label="最近识别结果"
<strong>{{ kuaishouEticketShopInfoResult?.shop.kshopName || kuaishouEticketShopInfoResult?.shop.shopId || '未执行' }}</strong> :value="kuaishouEticketShopInfoResult?.shop.kshopName || kuaishouEticketShopInfoResult?.shop.shopId || '未执行'"
class="kuaishou-side-card"
>
<p v-if="kuaishouEticketShopInfoResult">结算状态 {{ kuaishouEticketShopInfoResult.shop.settleStatus }}</p> <p v-if="kuaishouEticketShopInfoResult">结算状态 {{ kuaishouEticketShopInfoResult.shop.settleStatus }}</p>
<p v-else>可用读取店铺信息校验 Cookie 是否属于预期店铺</p> <p v-else>可用读取店铺信息校验 Cookie 是否属于预期店铺</p>
</article> </AdminResultCard>
<article class="result-card kuaishou-side-card kuaishou-guide-card"> <AdminResultCard label="建议顺序" value="先配置,再调试" class="kuaishou-side-card kuaishou-guide-card">
<span class="result-label">建议顺序</span>
<strong>先配置再调试</strong>
<p>1. 新增店铺并粘贴 Cookie</p> <p>1. 新增店铺并粘贴 Cookie</p>
<p>2. 读取店铺信息确认 kshopName / shopId</p> <p>2. 读取店铺信息确认 kshopName / shopId</p>
<p>3. 设为调试店铺后查询券码并执行核销</p> <p>3. 设为调试店铺后查询券码并执行核销</p>
</article> </AdminResultCard>
</aside> </aside>
</div> </div>
@@ -292,24 +293,20 @@ defineProps<Props>()
</div> </div>
<div class="result-grid"> <div class="result-grid">
<article class="result-card"> <AdminResultCard label="详情查询" :value="kuaishouEticketDetailResult ? (kuaishouEticketDetailResult.ok ? '成功' : '已返回') : '未执行'">
<span class="result-label">详情查询</span>
<strong>{{ kuaishouEticketDetailResult ? (kuaishouEticketDetailResult.ok ? '成功' : '已返回') : '未执行' }}</strong>
<p v-if="kuaishouEticketDetailResult?.detail"> <p v-if="kuaishouEticketDetailResult?.detail">
{{ kuaishouEticketDetailResult.goods?.itemTitle || kuaishouEticketDetailResult.goods?.skuDesc || '-' }} {{ kuaishouEticketDetailResult.goods?.itemTitle || kuaishouEticketDetailResult.goods?.skuDesc || '-' }}
剩余 {{ kuaishouEticketDetailResult.detail.leftCount }} / {{ kuaishouEticketDetailResult.detail.totalCount }} 剩余 {{ kuaishouEticketDetailResult.detail.leftCount }} / {{ kuaishouEticketDetailResult.detail.totalCount }}
</p> </p>
<p v-else>先通过查询券码获取核销详情并自动带出核销参数</p> <p v-else>先通过查询券码获取核销详情并自动带出核销参数</p>
</article> </AdminResultCard>
<article class="result-card"> <AdminResultCard label="核销执行" :value="kuaishouEticketConsumeResult ? (kuaishouEticketConsumeResult.consumed ? '已处理' : '已返回') : '未执行'">
<span class="result-label">核销执行</span>
<strong>{{ kuaishouEticketConsumeResult ? (kuaishouEticketConsumeResult.consumed ? '已处理' : '已返回') : '未执行' }}</strong>
<p v-if="kuaishouEticketConsumeResult"> <p v-if="kuaishouEticketConsumeResult">
{{ kuaishouEticketConsumeResult.errorMessage || (kuaishouEticketConsumeResult.ok ? '核销成功' : '接口已返回结果') }} {{ kuaishouEticketConsumeResult.errorMessage || (kuaishouEticketConsumeResult.ok ? '核销成功' : '接口已返回结果') }}
</p> </p>
<p v-else>查询详情后再执行核销会更稳妥</p> <p v-else>查询详情后再执行核销会更稳妥</p>
</article> </AdminResultCard>
</div> </div>
</section> </section>
@@ -0,0 +1,14 @@
<script setup lang="ts">
defineProps<{
label: string
value: string | number
}>()
</script>
<template>
<article class="result-card">
<span class="result-label">{{ label }}</span>
<strong>{{ value }}</strong>
<slot />
</article>
</template>