Skip to content

Commit

Permalink
Merge pull request #20 from ShanghaitechGeekPie/MobileFeature
Browse files Browse the repository at this point in the history
UI Improvement for small screen use
  • Loading branch information
Clarivy authored Jun 29, 2024
2 parents 7b6e7fa + 57066a2 commit cd1f786
Show file tree
Hide file tree
Showing 126 changed files with 11,400 additions and 10,555 deletions.
Empty file modified README.md
100644 → 100755
Empty file.
Empty file modified jsconfig.json
100644 → 100755
Empty file.
222 changes: 116 additions & 106 deletions src/App.vue
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,106 +1,116 @@
<template>
<v-app>
<Header :snackbar.sync="snackbar" />
<v-main>
<div>
<InsiderBanner />
</div>
<div>
<ActivityBanner :Enable=true>
评论拿赏金功能上线啦!详情请点击<a @click="$router.push('/activities')">这里</a>!
</ActivityBanner>
</div>

<router-view :key="$route.path" />
<v-snackbar
v-model="snackbar.show"
:color="snackbar.color"
:timeout="snackbar.timeout"
outlined
>
{{ snackbar.text }}
<template #action="{ attrs }">
<v-btn v-bind="attrs" @click="snackbar.show = false" icon>
<v-icon :color="snackbar.color">
{{ icons.mdiClose }}
</v-icon>
</v-btn>
</template>
</v-snackbar>
</v-main>
</v-app>
</template>
<script>
import Header from '@/components/global/Header';
import InsiderBanner from '@/components/global/InsiderBanner';
import ActivityBanner from '@/components/global/ActivityBanner';
import useSnackbar from '@/composables/global/useSnackbar';
import { getPreset } from '@/composables/global/useCookie';
import { provide, reactive } from 'vue';
import { mdiClose } from '@mdi/js';
export default {
name: 'App',
components: { Header, InsiderBanner, ActivityBanner },
setup() {
const { snackbar } = useSnackbar();
const global = reactive({
userProfile: getPreset(),
isLogin:
Object.getOwnPropertyNames(getPreset()).filter(
(key) => key !== '__ob__',
).length !== 0,
});
const searchInput = reactive({
isRegexp: false,
keys: [''],
});
const savedCourseAllStatus = reactive({
page: 1,
});
const savedCourseAllFilterStatus = reactive({
selected: [],
sortKey: '综合评分',
order: '从高到低',
});
provide('global', global);
provide('searchInput', searchInput);
provide('savedCourseAllStatus', savedCourseAllStatus);
provide('savedCourseAllFilterStatus', savedCourseAllFilterStatus);
return { snackbar };
},
data() {
return {
icons: {
mdiClose,
},
};
},
created() {
console.log(`
_____ ____ _
/ ____| | _ \\ | |
| | ___ _ _ _ __ ___ ___| |_) | ___ _ __ ___| |__
| | / _ \\| | | | '__/ __|/ _ \\ _ < / _ \\ '_ \\ / __| '_ \\
| |___| (_) | |_| | | \\__ \\ __/ |_) | __/ | | | (__| | | |
\\_____\\___/ \\__,_|_| |___/\\___|____/ \\___|_| |_|\\___|_| |_|
`);
try {
document.body.removeChild(document.getElementById('app-loader'));
this.$vuetify.theme.dark = window.matchMedia(
'(prefers-color-scheme: dark)',
).matches;
} catch {}
},
};
</script>
<style>
body {
overflow-x: hidden;
}
</style>
<template>
<v-app>
<Header :snackbar.sync="snackbar" />
<v-main>
<MenuSideBar />
<div>
<InsiderBanner />
</div>
<div>
<ActivityBanner :Enable="true">
评论拿赏金功能上线啦!详情请点击<a
@click="$router.push('/activities')"
>这里</a
>!
</ActivityBanner>
</div>

<router-view :key="$route.path" />
<v-snackbar
v-model="snackbar.show"
:color="snackbar.color"
:timeout="snackbar.timeout"
outlined
>
{{ snackbar.text }}
<template #action="{ attrs }">
<v-btn v-bind="attrs" @click="snackbar.show = false" icon>
<v-icon :color="snackbar.color">
{{ icons.mdiClose }}
</v-icon>
</v-btn>
</template>
</v-snackbar>
</v-main>
</v-app>
</template>
<script>
import Header from '@/components/global/Header';
import InsiderBanner from '@/components/global/InsiderBanner';
import ActivityBanner from '@/components/global/ActivityBanner';
import useSnackbar from '@/composables/global/useSnackbar';
import { getPreset } from '@/composables/global/useCookie';
import { provide, reactive } from 'vue';
import { mdiClose } from '@mdi/js';
import MenuSideBar from '@/components/global/MenuSideBar.vue';
export default {
name: 'App',
components: { Header, InsiderBanner, ActivityBanner, MenuSideBar },
setup() {
const { snackbar } = useSnackbar();
const global = reactive({
userProfile: getPreset(),
isLogin:
Object.getOwnPropertyNames(getPreset()).filter(
(key) => key !== '__ob__',
).length !== 0,
});
const searchInput = reactive({
isRegexp: false,
keys: [''],
});
const savedCourseAllStatus = reactive({
page: 1,
});
const savedCourseAllFilterStatus = reactive({
selected: [],
sortKey: '综合评分',
order: '从高到低',
});
const menuBarStatus = reactive({
drawer: false,
});
provide('global', global);
provide('menu', menuBarStatus);
provide('searchInput', searchInput);
provide('savedCourseAllStatus', savedCourseAllStatus);
provide('savedCourseAllFilterStatus', savedCourseAllFilterStatus);
return { snackbar };
},
data() {
return {
icons: {
mdiClose,
},
};
},
created() {
console.log(`
_____ ____ _
/ ____| | _ \\ | |
| | ___ _ _ _ __ ___ ___| |_) | ___ _ __ ___| |__
| | / _ \\| | | | '__/ __|/ _ \\ _ < / _ \\ '_ \\ / __| '_ \\
| |___| (_) | |_| | | \\__ \\ __/ |_) | __/ | | | (__| | | |
\\_____\\___/ \\__,_|_| |___/\\___|____/ \\___|_| |_|\\___|_| |_|
`);
try {
document.body.removeChild(document.getElementById('app-loader'));
this.$vuetify.theme.dark = window.matchMedia(
'(prefers-color-scheme: dark)',
).matches;
} catch {}
},
};
</script>
<style>
body {
overflow-x: hidden;
}
</style>
2 changes: 1 addition & 1 deletion src/assets/comment_policy.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
发一条友善的评论
发一条友善的评论
124 changes: 62 additions & 62 deletions src/assets/contributors.json
Original file line number Diff line number Diff line change
@@ -1,62 +1,62 @@
[
{
"name": "teafrogsf",
"home": "qq:861940148",
"avatar": "qq:861940148"
},
{
"name": "WAAutoMaton",
"home": "github:WAAutoMaton",
"avatar": "github:24771667"
},
{
"name": "yanglinshu",
"home": "github:yanglinshu",
"avatar": "github:46046648"
},
{
"name": "Clarivy",
"home": "github:Clarivy",
"avatar": "github:62002698"
},
{
"name": "wenxuanjun",
"home": "github:wenxuanjun",
"avatar": "github:41050170"
},
{
"name": "陆沈欢",
"home": "qq:2366384567",
"avatar": "qq:2366384567"
},
{
"name": "邓宸希",
"home": "qq:3260984912",
"avatar": "qq:3260984912"
},
{
"name": "魏之远",
"home": "qq:1258678835",
"avatar": "qq:1258678835"
},
{
"name": "失踪猫猫",
"home": "qq:2330905078",
"avatar": "qq:2330905078"
},
{
"name": "猫剩子",
"home": "qq:2512031097",
"avatar": "qq:2512031097"
},
{
"name": "Tropinone",
"home": "qq:1841610434,",
"avatar": "qq:1841610434"
},
{
"name": "存开心",
"home": "qq:2174656630",
"avatar": "qq:2174656630"
}
]
[
{
"name": "teafrogsf",
"home": "qq:861940148",
"avatar": "qq:861940148"
},
{
"name": "WAAutoMaton",
"home": "github:WAAutoMaton",
"avatar": "github:24771667"
},
{
"name": "yanglinshu",
"home": "github:yanglinshu",
"avatar": "github:46046648"
},
{
"name": "Clarivy",
"home": "github:Clarivy",
"avatar": "github:62002698"
},
{
"name": "wenxuanjun",
"home": "github:wenxuanjun",
"avatar": "github:41050170"
},
{
"name": "陆沈欢",
"home": "qq:2366384567",
"avatar": "qq:2366384567"
},
{
"name": "邓宸希",
"home": "qq:3260984912",
"avatar": "qq:3260984912"
},
{
"name": "魏之远",
"home": "qq:1258678835",
"avatar": "qq:1258678835"
},
{
"name": "失踪猫猫",
"home": "qq:2330905078",
"avatar": "qq:2330905078"
},
{
"name": "猫剩子",
"home": "qq:2512031097",
"avatar": "qq:2512031097"
},
{
"name": "Tropinone",
"home": "qq:1841610434,",
"avatar": "qq:1841610434"
},
{
"name": "存开心",
"home": "qq:2174656630",
"avatar": "qq:2174656630"
}
]
31 changes: 16 additions & 15 deletions src/assets/privacy_policy.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
更新日期:2022年10月1日
生效日期:2022年10月1日
请您知悉,本指引**目前**并不具有真实的法律效力,仅作为CourshBench运营团队与CourseBench用户之间的公约。请您在使用本平台前,仔细阅读并充分理解该指引。
更新日期:2022 年 10 月 1 日
生效日期:2022 年 10 月 1 日
请您知悉,本指引**目前**并不具有真实的法律效力,仅作为 CourshBench 运营团队与 CourseBench 用户之间的公约。请您在使用本平台前,仔细阅读并充分理解该指引。

1. 我们收集和使用的个人信息
在您使用CourseBench的过程中,我们将收集您在使用我们的服务时主动提供或因为使用服务而产生的信息。我们对您用户信息的收集和使用均已征得您的同意,且仅用于为您提供及优化我们的服务和维护您的账户安全。我们会尽可能地以最小限度收集必要的信息。
如果您拒绝我们收集这些信息,您将无法使用我们的评论和点赞服务。但您仍然能够使用我们的基础服务,如搜索和浏览课程评价页面等功能。
我们会按如下方式收集您的信息:
1.1 当您注册并使用CourseBench账号时,我们需要收集您的邮箱作为必要信息。我们也会在征集您的同意后收集您的学段、入学时间、真实姓名等信息。
1.2 当您使用CourseBench的搜索、点赞/踩、评论等功能时,为了CourseBench的维护和可持续发展,我们会收集在此过程中产生的日志等信息,并保存您生产的内容(包括点赞/踩、评论等信息)。
1.3 您可以在个人主页中更改您的学段、入学时间、真实姓名信息。您还可以添加或更改您的昵称。我们会收集这些信息,且不保存更改前的内容。
1.4 当您向CourseBench提出建议或反馈时,我们会收集您的联系方式,以便于与您进行进一步的交流和沟通。
1.5 当您向CourseBench提供赞助时,我们会在征得您的同意后收集您的昵称、邮箱、头像等信息,并用于Sponsor页面的展示。我们不会将这些信息用于其他用途。
1.6 由于提供服务的必要性,我们会在您使用我们的服务过程中收集包括但不限于IP地址、浏览器标识符、操作系统等设备信息。
在您使用 CourseBench 的过程中,我们将收集您在使用我们的服务时主动提供或因为使用服务而产生的信息。我们对您用户信息的收集和使用均已征得您的同意,且仅用于为您提供及优化我们的服务和维护您的账户安全。我们会尽可能地以最小限度收集必要的信息。
如果您拒绝我们收集这些信息,您将无法使用我们的评论和点赞服务。但您仍然能够使用我们的基础服务,如搜索和浏览课程评价页面等功能。
我们会按如下方式收集您的信息:
1.1 当您注册并使用 CourseBench 账号时,我们需要收集您的邮箱作为必要信息。我们也会在征集您的同意后收集您的学段、入学时间、真实姓名等信息。
1.2 当您使用 CourseBench 的搜索、点赞/踩、评论等功能时,为了 CourseBench 的维护和可持续发展,我们会收集在此过程中产生的日志等信息,并保存您生产的内容(包括点赞/踩、评论等信息)。
1.3 您可以在个人主页中更改您的学段、入学时间、真实姓名信息。您还可以添加或更改您的昵称。我们会收集这些信息,且不保存更改前的内容。
1.4 当您向 CourseBench 提出建议或反馈时,我们会收集您的联系方式,以便于与您进行进一步的交流和沟通。
1.5 当您向 CourseBench 提供赞助时,我们会在征得您的同意后收集您的昵称、邮箱、头像等信息,并用于 Sponsor 页面的展示。我们不会将这些信息用于其他用途。
1.6 由于提供服务的必要性,我们会在您使用我们的服务过程中收集包括但不限于 IP 地址、浏览器标识符、操作系统等设备信息。
2. 我们如何保护您的信息
2.1 我们将采取业内认可的方式来保护您的信息。我们将尽可能地使用一切合理的方式来保护您的信息不受侵害。您的密码将被以安全的加密方式存储在数据库中。您的浏览器与CourseBench交互数据时,数据将受到SSL加密保护。我们会时刻关注您的安全。
2.2 如果我们需要使用您的去标识化信息用于CourseBench的更新和优化,我们会将您的信息进行脱敏处理。
2.1 我们将采取业内认可的方式来保护您的信息。我们将尽可能地使用一切合理的方式来保护您的信息不受侵害。您的密码将被以安全的加密方式存储在数据库中。您的浏览器与 CourseBench 交互数据时,数据将受到 SSL 加密保护。我们会时刻关注您的安全。
2.2 如果我们需要使用您的去标识化信息用于 CourseBench 的更新和优化,我们会将您的信息进行脱敏处理。
3. 我们如何更新与修改该指引
我们可能会在网站进行重大更新时同步更新该指引。我们会提供显著的通知来说明具体的变更内容,且在获取您的同意前,我们不会按照更新后的指引收集、使用、处理和存储您的信息。
我们可能会在网站进行重大更新时同步更新该指引。我们会提供显著的通知来说明具体的变更内容,且在获取您的同意前,我们不会按照更新后的指引收集、使用、处理和存储您的信息。
Loading

0 comments on commit cd1f786

Please sign in to comment.