diff --git a/src/components/Header.vue b/src/components/Header.vue index de2c4f3..38d63aa 100644 --- a/src/components/Header.vue +++ b/src/components/Header.vue @@ -52,6 +52,7 @@ onMounted(() => { align-items: center; width: 72vw; height: 60px; + /* margin-top: var(--status-bar-height); */ padding-left: 15px; } .back-btn { diff --git a/src/pages.json b/src/pages.json index 9ef883e..91a4cb3 100644 --- a/src/pages.json +++ b/src/pages.json @@ -1,136 +1,73 @@ { "pages": [ { - "path": "pages/index", - "style": { - "navigationBarTitleText": "首页" - } + "path": "pages/index" }, { - "path": "pages/my-device", - "style": { - "navigationBarTitleText": "我的设备" - } + "path": "pages/image-share" }, { - "path": "pages/device-intro", - "style": { - "navigationBarTitleText": "智能弓箭" - } + "path": "pages/my-device" }, { - "path": "pages/user", - "style": { - "navigationBarTitleText": "用户信息" - } + "path": "pages/device-intro" }, { - "path": "pages/orders", - "style": { - "navigationBarTitleText": "订单" - } + "path": "pages/user" }, { - "path": "pages/order-detail", - "style": { - "navigationBarTitleText": "订单详情" - } + "path": "pages/orders" }, { - "path": "pages/be-vip", - "style": { - "navigationBarTitleText": "会员" - } + "path": "pages/order-detail" }, { - "path": "pages/grade-intro", - "style": { - "navigationBarTitleText": "等级介绍" - } + "path": "pages/be-vip" }, { - "path": "pages/rank-intro", - "style": { - "navigationBarTitleText": "段位介绍" - } + "path": "pages/grade-intro" }, { - "path": "pages/my-growth", - "style": { - "navigationBarTitleText": "我的成长" - } + "path": "pages/rank-intro" }, { - "path": "pages/first-try", - "style": { - "navigationBarTitleText": "新手试炼" - } + "path": "pages/my-growth" }, { - "path": "pages/practise", - "style": { - "navigationBarTitleText": "个人练习" - } + "path": "pages/first-try" }, { - "path": "pages/practise-one", - "style": { - "navigationBarTitleText": "个人单组练习" - } + "path": "pages/practise" }, { - "path": "pages/practise-two", - "style": { - "navigationBarTitleText": "个人耐力挑战" - } + "path": "pages/practise-one" }, { - "path": "pages/friend-battle", - "style": { - "navigationBarTitleText": "好友约战" - } + "path": "pages/practise-two" }, { - "path": "pages/battle-room", - "style": { - "navigationBarTitleText": "对战房间" - } + "path": "pages/friend-battle" }, { - "path": "pages/ranking", - "style": { - "navigationBarTitleText": "排行赛" - } + "path": "pages/battle-room" }, { - "path": "pages/rank-list", - "style": { - "navigationBarTitleText": "排行榜" - } + "path": "pages/ranking" }, { - "path": "pages/team-match", - "style": { - "navigationBarTitleText": "排位赛" - } + "path": "pages/rank-list" }, { - "path": "pages/melee-match", - "style": { - "navigationBarTitleText": "排位赛" - } + "path": "pages/team-match" }, { - "path": "pages/match-detail", - "style": { - "navigationBarTitleText": "排位赛" - } + "path": "pages/melee-match" }, { - "path": "pages/battle-result", - "style": { - "navigationBarTitleText": "对战结果" - } + "path": "pages/match-detail" + }, + { + "path": "pages/battle-result" } ], "globalStyle": { diff --git a/src/pages/image-share.vue b/src/pages/image-share.vue new file mode 100644 index 0000000..f91d280 --- /dev/null +++ b/src/pages/image-share.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/static/device-icon.png b/src/static/device-icon.png index 37e65f4..065eaf1 100644 Binary files a/src/static/device-icon.png and b/src/static/device-icon.png differ diff --git a/src/static/first-try-title.png b/src/static/first-try-title.png new file mode 100644 index 0000000..55df35f Binary files /dev/null and b/src/static/first-try-title.png differ diff --git a/src/static/qr-code.png b/src/static/qr-code.png new file mode 100644 index 0000000..082c6f7 Binary files /dev/null and b/src/static/qr-code.png differ diff --git a/src/util.js b/src/util.js new file mode 100644 index 0000000..ad227cf --- /dev/null +++ b/src/util.js @@ -0,0 +1,51 @@ +export function renderLine(ctx, from) { + ctx.beginPath(); + ctx.lineWidth = 1; + ctx.strokeStyle = "rgba(255, 255, 255, 0.3)"; + const length = 35; + ctx.moveTo(from, 293); + ctx.lineTo(from + length, 293); + ctx.stroke(); +} + +export function renderText(ctx, text, size, color, x, y) { + ctx.setFontSize(size); + ctx.setFillStyle(color); + ctx.fillText(text, x, y); +} + +export function renderRankTitle(ctx, text) { + const fontSize = 10; + const textWidth = ctx.measureText(text).width; + const padding = 8; // 文字与背景边缘的间距 + const radius = 10; // 圆角半径 + const textX = 75; + const textY = 55; + const x = textX - padding; // 文字 x 坐标减去内边距 + const y = textY - fontSize - padding / 2 + 1; // 文字 y 坐标减去字体大小和内边距 + const width = textWidth + padding * 2 - 15; // 背景宽度 + const height = fontSize + padding + 1; // 背景高度 + + // 开始绘制圆角矩形 + ctx.beginPath(); + ctx.moveTo(x + radius, y); + // 上边框 + ctx.lineTo(x + width - radius, y); + ctx.arcTo(x + width, y, x + width, y + radius, radius); + // 右边框 + ctx.lineTo(x + width, y + height - radius); + ctx.arcTo(x + width, y + height, x + width - radius, y + height, radius); + // 下边框 + ctx.lineTo(x + radius, y + height); + ctx.arcTo(x, y + height, x, y + height - radius, radius); + // 左边框 + ctx.lineTo(x, y + radius); + ctx.arcTo(x, y, x + radius, y, radius); + + // 设置背景颜色并填充 + ctx.fillStyle = "#5F51FF"; + ctx.fill(); + ctx.setFontSize(fontSize); + ctx.setFillStyle("rgba(255, 255, 255, 0.9)"); + ctx.fillText(text, textX, textY); // 绘制文字 +}