后端(主 agent 独立复跑验证,非采信子 agent 自报): - 新建 game-module-ad(广告引擎)+ game-module-trade(分账/结算/提现),克隆黄金模板 project - 契约先行已锁:ad.yaml/trade.yaml + Flyway V6/V7;ad 计费 uk_trace 收紧为 (trace_id,event_type,tenant_id) 防 reward 被 impression 静默吞掉 - ad↔trade Feign seam(AdRevenueApi.getUnsettledRevenue/markSettled)+ project-api 归因(getCreatorUserId,game 模块首个跨模块 Feign,仿 yudao DictDataApi) - AdProvider SPI(mock,留 csj/gdt 注入位);资金安全:金额用分/uk 幂等/状态机 CAS/防超扣/T+1 结算补偿 - pay 不建,复用 yudao-pay 后置(Doc B:收单归 pay、钱包提现归 trade;MVP 钱财闭环 ad→trade 不经收单) - 验证:mvn -pl yudao-server -am compile 全量 BUILD SUCCESS;ad 15 + trade 24 = 39 单测绿;huijing 残留=0、裸 select*=0 前端 game-admin(运营后台): - 克隆 yudao-ui-admin-vue3 裁剪(删 crm/erp/mall/mes/iot 等无关业务模块)+ 5 个 MVP 运营页接 admin-api(审核/精选/看板/广告位/提现审核)+ mock 兜底 - 构建验证移至 mini-desktop(本机 5.8G 内存 OOM,见执行 spec) 文档:HJ-PAR-002 review+execution 双 spec + Workflow 编排脚本 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
58 lines
1.3 KiB
Vue
58 lines
1.3 KiB
Vue
<script lang="ts" setup>
|
|
import { isDark } from '@/utils/is'
|
|
import { useAppStore } from '@/store/modules/app'
|
|
import { useDesign } from '@/hooks/web/useDesign'
|
|
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
|
import routerSearch from '@/components/RouterSearch/index.vue'
|
|
|
|
defineOptions({ name: 'APP' })
|
|
|
|
const { getPrefixCls } = useDesign()
|
|
const prefixCls = getPrefixCls('app')
|
|
const appStore = useAppStore()
|
|
const currentSize = computed(() => appStore.getCurrentSize)
|
|
const greyMode = computed(() => appStore.getGreyMode)
|
|
const { wsCache } = useCache()
|
|
|
|
// 根据浏览器当前主题设置系统主题色
|
|
const setDefaultTheme = () => {
|
|
let isDarkTheme = wsCache.get(CACHE_KEY.IS_DARK)
|
|
if (isDarkTheme === null) {
|
|
isDarkTheme = isDark()
|
|
}
|
|
appStore.setIsDark(isDarkTheme)
|
|
}
|
|
setDefaultTheme()
|
|
</script>
|
|
<template>
|
|
<ConfigGlobal :size="currentSize">
|
|
<RouterView :class="greyMode ? `${prefixCls}-grey-mode` : ''" />
|
|
<routerSearch />
|
|
</ConfigGlobal>
|
|
</template>
|
|
<style lang="scss">
|
|
$prefix-cls: #{$namespace}-app;
|
|
|
|
.size {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
|
|
html,
|
|
body {
|
|
@extend .size;
|
|
|
|
padding: 0 !important;
|
|
margin: 0;
|
|
overflow: hidden;
|
|
|
|
#app {
|
|
@extend .size;
|
|
}
|
|
}
|
|
|
|
.#{$prefix-cls}-grey-mode {
|
|
filter: grayscale(100%);
|
|
}
|
|
</style>
|