feat(lottery):草创抽奖详情

This commit is contained in:
BTMuli
2023-03-30 22:52:28 +08:00
parent 842066f345
commit 9298f23ae9
5 changed files with 170 additions and 1 deletions

View File

@@ -2,7 +2,7 @@
* @file plugins Mys index.ts
* @description Mys plugin index
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha
* @since Alpha v0.1.1
*/
// Post
@@ -14,6 +14,8 @@ import { getGachaCard } from "./utils/gacha";
// News
import { getNoticeList, getActivityList, getNewsList } from "./request/news";
import { getNoticeCard, getActivityCard, getNewsCard } from "./utils/news";
// Lottery
import { getLotteryData } from "./request/lottery";
const MysOper = {
Post: {
@@ -36,6 +38,9 @@ const MysOper = {
news: getNewsCard,
},
},
Lottery: {
get: getLotteryData,
},
};
export default MysOper;

View File

@@ -0,0 +1,83 @@
/**
* @file plugins Mys interface lottery.ts
* @description Mys 插件抽奖接口
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha v0.1.1
*/
import { MysResponse } from "./base";
import { User } from "./user";
/**
* @description 抽奖返回数据
* @since Alpha v0.1.1
* @interface LotteryResponse
* @extends {MysResponse}
* @property {LotteryData} data.show_lottery 抽奖数据
* @return {LotteryResponse}
*/
export interface LotteryResponse extends MysResponse {
data: {
show_lottery: LotteryData;
};
}
/**
* @description 抽奖数据
* @since Alpha v0.1.1
* @interface LotteryData
* @property {string} id 抽奖 ID
* @property {User} creator 创建者
* @property {string} draw_time 抽奖时间
* @property {string} participant_way 参与方式 // Forward: 转发
* @property {boolean} is_expect_unfocus_user 是否限制未关注用户
* @property {boolean} is_expect_non_real_name_user 是否限制未实名用户
* @property {LotteryReward[]} user_rewards 用户奖励
* @property {string} status 状态 // Settled: 已结算
* @property {boolean} is_blocked 是否被屏蔽
* @property {string} user_status 用户状态 // NotParticipant: 未参与
* @property {boolean} is_upload_address 是否上传地址
* @property {string} lottery_entity_summary 抽奖实体摘要
* @property {string} entity_id 实体 ID // 若为帖子,则为帖子 ID
* @property {string} entity_type 实体类型 // Post: 帖子
* @property {string} now_time 当前时间
* @return {LotteryData}
*/
export interface LotteryData {
id: string;
creator: User;
draw_time: string;
participant_way: string;
is_expect_unfocus_user: boolean;
is_expect_non_real_name_user: boolean;
user_rewards: LotteryReward[];
status: string;
is_blocked: boolean;
user_status: string;
is_upload_address: boolean;
lottery_entity_summary: string;
entity_id: string;
entity_type: string;
now_time: string;
}
/**
* @description 抽奖奖励
* @since Alpha v0.1.1
* @interface LotteryReward
* @property {string} reward_name 奖励名称
* @property {number} winner_number 获奖人数
* @property {number} scheduled_winner_number 预计获奖人数
* @property {boolean} is_send_by_post 是否通过帖子发放
* @property {User[]} users 用户列表
* @property {string} id 奖励 ID
* @return {LotteryReward}
*/
export interface LotteryReward {
reward_name: string;
winner_number: number;
scheduled_winner_number: number;
is_send_by_post: boolean;
users: User[];
id: string;
}

View File

@@ -0,0 +1,32 @@
/**
* @file plugins Mys interface lottery.ts
* @description Mys 插件抽奖接口
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha v0.1.1
*/
import { http } from "@tauri-apps/api";
import { LotteryResponse, LotteryData } from "../interface/lottery";
// 抽奖 API
const LOTTERY_API =
"https://bbs-api.miyoushe.com/painter/wapi/lottery/user/show?gids=2&id={lottery_id}";
/**
* @description 获取抽奖信息
* @since Alpha v0.1.1
* @param {string} lottery_id 抽奖 ID
* @return {Promise<LotteryData>}
*/
export async function getLotteryData(lottery_id: string): Promise<LotteryData> {
return await http
.fetch<LotteryResponse>(LOTTERY_API.replace("{lottery_id}", lottery_id), {
method: "GET",
headers: {
"Content-Type": "application/json",
},
})
.then(res => {
return res.data.data.show_lottery;
});
}

View File

@@ -7,6 +7,8 @@
// 帖子相关
import TPost from "../../views/t-post.vue";
import TPostJson from "../../views/t-post-json.vue";
// 抽奖
import TLottery from "../../views/t-lottery.vue";
const subRoutes = [
{
@@ -19,6 +21,11 @@ const subRoutes = [
name: "帖子详情JSON",
component: TPostJson,
},
{
path: "/lottery/:lottery_id",
name: "抽奖详情",
component: TLottery,
},
];
export default subRoutes;

42
src/views/t-lottery.vue Normal file
View File

@@ -0,0 +1,42 @@
<template>
<div v-if="loading">
<t-loading :empty="loadingEmpty" :title="loadingTitle" />
</div>
<div v-else>
<h1>{{ lottery_id }}</h1>
{{ lottery }}
</div>
</template>
<script lang="ts" setup>
// vue
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import TLoading from "../components/t-loading.vue";
// plugins
import MysOper from "../plugins/Mys";
// loading
const loading = ref(true as boolean);
const loadingTitle = ref("正在加载");
const loadingEmpty = ref(false as boolean);
// 数据
const lottery_id = useRoute().params.lottery_id as string;
const lottery = ref({} as any);
onMounted(async () => {
// 检查数据
if (!lottery_id) {
loadingEmpty.value = true;
loadingTitle.value = "未找到数据";
return;
}
// 获取数据
loadingTitle.value = "正在获取数据...";
lottery.value = await MysOper.Lottery.get(lottery_id);
setInterval(() => {
loading.value = false;
}, 200);
});
</script>
<style></style>