Browse Source

stash

master
kola-web 2 weeks ago
parent
commit
0a3c72c3b8
  1. 10
      .neoconf.json
  2. 2
      project.config.json
  3. 56
      project.private.config.json
  4. 22
      src/app.json
  5. 4
      src/app.ts
  6. 7
      src/custom-tab-bar/index.json
  7. 13
      src/custom-tab-bar/index.scss
  8. 67
      src/custom-tab-bar/index.ts
  9. 14
      src/custom-tab-bar/index.wxml
  10. BIN
      src/images/bg1.png
  11. BIN
      src/images/icon1.png
  12. BIN
      src/images/icon10.png
  13. BIN
      src/images/icon11.png
  14. BIN
      src/images/icon12.png
  15. BIN
      src/images/icon13.png
  16. BIN
      src/images/icon14.png
  17. BIN
      src/images/icon15.png
  18. BIN
      src/images/icon16.png
  19. BIN
      src/images/icon17.png
  20. BIN
      src/images/icon18.png
  21. BIN
      src/images/icon19.png
  22. BIN
      src/images/icon2.png
  23. BIN
      src/images/icon20.png
  24. BIN
      src/images/icon21.png
  25. BIN
      src/images/icon22.png
  26. BIN
      src/images/icon23.png
  27. BIN
      src/images/icon24.png
  28. BIN
      src/images/icon25.png
  29. BIN
      src/images/icon26.png
  30. BIN
      src/images/icon27.png
  31. BIN
      src/images/icon28.png
  32. BIN
      src/images/icon29.png
  33. BIN
      src/images/icon3.png
  34. BIN
      src/images/icon30.png
  35. BIN
      src/images/icon31.png
  36. BIN
      src/images/icon32.png
  37. BIN
      src/images/icon4.png
  38. BIN
      src/images/icon5.png
  39. BIN
      src/images/icon6.png
  40. BIN
      src/images/icon7.png
  41. BIN
      src/images/icon8.png
  42. BIN
      src/images/icon9.png
  43. BIN
      src/images/tabbar1.png
  44. BIN
      src/images/tabbar11.png
  45. BIN
      src/images/tabbar12.png
  46. BIN
      src/images/tabbar13.png
  47. BIN
      src/images/tabbar14.png
  48. BIN
      src/images/tabbar15.png
  49. BIN
      src/images/tabbar2.png
  50. BIN
      src/images/tabbar3.png
  51. BIN
      src/images/tabbar4.png
  52. BIN
      src/images/tabbar5.png
  53. 7
      src/pages/act/index.json
  54. 327
      src/pages/act/index.scss
  55. 52
      src/pages/act/index.ts
  56. 94
      src/pages/act/index.wxml
  57. 3
      src/pages/actAdd/index.json
  58. 0
      src/pages/actAdd/index.scss
  59. 8
      src/pages/actAdd/index.ts
  60. 0
      src/pages/actAdd/index.wxml
  61. 8
      src/pages/actDetail/index.json
  62. 278
      src/pages/actDetail/index.scss
  63. 8
      src/pages/actDetail/index.ts
  64. 127
      src/pages/actDetail/index.wxml
  65. 3
      src/pages/actResult/index.json
  66. 0
      src/pages/actResult/index.scss
  67. 8
      src/pages/actResult/index.ts
  68. 0
      src/pages/actResult/index.wxml
  69. 8
      src/pages/index/index.json
  70. 241
      src/pages/index/index.scss
  71. 90
      src/pages/index/index.ts
  72. 87
      src/pages/index/index.wxml
  73. 9
      src/pages/notice/index.json
  74. 125
      src/pages/notice/index.scss
  75. 15
      src/pages/notice/index.ts
  76. 59
      src/pages/notice/index.wxml
  77. 7
      src/pages/noticeDetail/index.json
  78. 154
      src/pages/noticeDetail/index.scss
  79. 8
      src/pages/noticeDetail/index.ts
  80. 38
      src/pages/noticeDetail/index.wxml
  81. 27
      src/pages/start/index.ts

10
.neoconf.json

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
{
"emmet_language_server": {
"init_options": {
"preferences": {
"css.intUnit": "rpx",
"css.floatUnitr": "rpx"
}
}
}
}

2
project.config.json

@ -66,7 +66,7 @@ @@ -66,7 +66,7 @@
],
"include": []
},
"appid": "wx2b0bb13edf717c1d",
"appid": "wx385f901f517046d0",
"scripts": {
"beforeCompile": "pnpm run beforeCompile",
"beforePreview": "pnpm run beforeCompile",

56
project.private.config.json

@ -1,6 +1,60 @@ @@ -1,6 +1,60 @@
{
"libVersion": "3.5.8",
"condition": {},
"condition": {
"miniprogram": {
"list": [
{
"name": "创建活动",
"pathName": "pages/actAdd/index",
"query": "",
"scene": null,
"launchMode": "default"
},
{
"name": "活动报名结果",
"pathName": "pages/actResult/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "通知详情",
"pathName": "pages/noticeDetail/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "通知",
"pathName": "pages/notice/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "活动详情",
"pathName": "pages/actDetail/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "活动",
"pathName": "pages/act/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "首页",
"pathName": "pages/index/index",
"query": "",
"launchMode": "default",
"scene": null
}
]
}
},
"projectname": "school-miniprogram",
"setting": {
"urlCheck": true,

22
src/app.json

@ -2,23 +2,41 @@ @@ -2,23 +2,41 @@
"pages": [
"pages/start/index",
"pages/index/index",
"pages/act/index",
"pages/notice/index",
"pages/actDetail/index",
"pages/actResult/index",
"pages/actAdd/index",
"pages/noticeDetail/index",
"pages/login/index",
"pages/my/index"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "校园小程序",
"navigationBarTextStyle": "black"
"navigationBarTitleText": "智能体小程序",
"navigationBarTextStyle": "black",
"navigationStyle": "custom"
},
"tabBar": {
"custom": true,
"color": "#8E8E93",
"selectedColor": "#4A6CF7",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页"
},
{
"pagePath": "pages/act/index",
"text": "活动"
},
{
"pagePath": "pages/notice/index",
"text": "通知"
},
{
"pagePath": "pages/my/index",
"text": "我的"
}

4
src/app.ts

@ -1,9 +1,9 @@ @@ -1,9 +1,9 @@
import page from '@/utils/page'
import { request } from './api/request'
import { parseScene } from './utils/util'
import { parseScene } from './utils/util'
const dayjs = require('dayjs')
const licia = require('miniprogram-licia')
require('/utils/dayjs/day-zh-cn.js')
const relativeTime = require('/utils/dayjs/relativeTime.js')

7
src/custom-tab-bar/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"van-tabbar": "@vant/weapp/tabbar/index",
"van-tabbar-item": "@vant/weapp/tabbar-item/index"
}
}

13
src/custom-tab-bar/index.scss

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
.tab-item {
.icon {
width: 44rpx;
height: 44rpx;
}
.name {
font-size: 24rpx;
color: rgba(148, 163, 184, 1);
&.active {
color: rgba(74, 184, 253, 1);
}
}
}

67
src/custom-tab-bar/index.ts

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
import { getCurrentPageUrl } from '@/utils/util'
const app = getApp()
Component({
properties: {},
data: {
imageUrl: app.globalData.imageUrl,
Timestamp: app.globalData.Timestamp,
isChild: 0,
active: 0,
list: [
{
pagePath: '/pages/index/index',
text: '首页',
icon: 'tabbar1',
iconActive: 'tabbar11',
},
{
pagePath: '/pages/act/index',
text: '活动',
icon: 'tabbar2',
iconActive: 'tabbar12',
},
{
pagePath: '/pages/notice/index',
text: '通知',
icon: 'tabbar3',
iconActive: 'tabbar13',
},
{
pagePath: '/pages/knowledge/index',
text: '智能体',
icon: 'tabbar4',
iconActive: 'tabbar14',
},
{
pagePath: '/pages/my/index',
text: '我的',
icon: 'tabbar5',
iconActive: 'tabbar15',
},
],
},
observers: {},
lifetimes: {
ready() {
const pagePath = getCurrentPageUrl()
const active = this.data.list.findIndex((item) => item.pagePath === pagePath)
this.setData({
active,
anyWhere: app.globalData.anyWhere,
})
},
},
methods: {
onChange() {},
handleNav(e) {
const { index } = e.currentTarget.dataset
const { list } = this.data
const pagePath = list[index].pagePath
wx.switchTab({
url: pagePath,
})
},
},
})

14
src/custom-tab-bar/index.wxml

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
<van-tabbar active="{{ active }}" active-color="rgba(74, 184, 253, 1)" bind:change="onChange" inactive-color="#010105">
<block wx:for="{{list}}" wx:key="*this">
<van-tabbar-item
class="tab-item"
wx:if="{{ index != 3 || !anyWhere}}"
bind:tap="handleNav"
data-index="{{index}}"
icon="/images/{{active==index ? item.iconActive : item.icon}}.png"
>
<view class="name {{index==active && 'active'}}">{{item.text}}</view>
<view class="hot"></view>
</van-tabbar-item>
</block>
</van-tabbar>

BIN
src/images/bg1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
src/images/icon1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/icon10.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
src/images/icon11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
src/images/icon12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/images/icon13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/images/icon14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
src/images/icon16.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
src/images/icon17.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/images/icon18.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
src/images/icon19.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
src/images/icon2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

BIN
src/images/icon20.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
src/images/icon21.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/icon22.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/images/icon23.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
src/images/icon24.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/images/icon25.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon26.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/icon27.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
src/images/icon28.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
src/images/icon29.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
src/images/icon3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/icon30.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/icon31.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
src/images/icon32.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 877 B

BIN
src/images/icon4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
src/images/icon5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

BIN
src/images/icon6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

BIN
src/images/icon7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/images/icon8.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
src/images/icon9.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
src/images/tabbar1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
src/images/tabbar11.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
src/images/tabbar12.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
src/images/tabbar13.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

BIN
src/images/tabbar14.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

BIN
src/images/tabbar15.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
src/images/tabbar2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/images/tabbar3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/images/tabbar4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
src/images/tabbar5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

7
src/pages/act/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"navigationStyle": "default",
"navigationBarTitleText": "活动",
"usingComponents": {
"van-popup": "@vant/weapp/popup/index"
}
}

327
src/pages/act/index.scss

@ -0,0 +1,327 @@ @@ -0,0 +1,327 @@
page {
background-color: rgba(247, 248, 250, 1);
}
.page {
padding-bottom: calc(60px + env(safe-area-inset-bottom));
.page-header {
padding: 30rpx 30rpx 0;
background-color: #fff;
.search {
margin: 30rpx;
padding: 12rpx 24rpx;
display: flex;
align-items: center;
gap: 16rpx;
background-color: rgba(247, 248, 250, 1);
border-radius: 40rpx;
.icon {
width: 38rpx;
height: 38rpx;
}
.content {
font-size: 28rpx;
color: rgba(148, 163, 184, 0.7);
line-height: 44rpx;
}
}
.options {
display: flex;
.tabs {
flex: 1;
overflow-x: auto;
display: flex;
align-items: center;
flex-wrap: nowrap;
overflow-x: auto;
&::-webkit-scrollbar {
display: none;
}
.tab {
flex-shrink: 0;
padding: 10rpx 18rpx 16rpx;
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
&.active {
position: relative;
font-size: 36rpx;
color: rgba(74, 184, 253, 1);
&::after {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
content: '';
display: block;
width: 32rpx;
height: 6rpx;
background: #4ab8fd;
border-radius: 19228rpx 19228rpx 19228rpx 19228rpx;
}
}
}
}
.filter-btn {
margin-top: 2rpx;
align-self: start;
padding: 8rpx 24rpx;
flex-shrink: 0;
display: flex;
align-items: center;
gap: 6rpx;
background-color: rgba(247, 248, 250, 1);
border-radius: 40rpx;
font-size: 28rpx;
color: rgba(74, 184, 253, 1);
.icon {
width: 32rpx;
height: 32rpx;
}
}
}
}
.type-list {
padding: 32rpx 30rpx;
display: flex;
gap: 30rpx;
flex-wrap: nowrap;
overflow-x: auto;
&::-webkit-scrollbar {
display: none;
}
.type {
flex-shrink: 0;
.icon {
display: block;
margin: 0 auto;
width: 32rpx;
height: 32rpx;
padding: 30rpx;
background-color: rgba(255, 255, 255, 1);
border-radius: 16rpx;
}
.icon-active {
display: none;
margin: 0 auto;
width: 32rpx;
height: 32rpx;
padding: 30rpx;
background: linear-gradient(90deg, #9ddffd 0%, #4ab8fd 100%);
border-radius: 16rpx;
}
.name {
margin-top: 15rpx;
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
text-align: center;
}
&.active {
.icon {
display: none;
}
.icon-active {
display: block;
}
.name {
color: rgba(74, 184, 253, 1);
}
}
}
}
.banner {
margin: 30rpx 30rpx 0;
height: 230rpx;
.b-img {
display: block;
width: 100%;
height: 100%;
}
}
.list {
margin: 30rpx;
.card {
margin-bottom: 24rpx;
padding: 24rpx;
display: flex;
gap: 24rpx;
background-color: #fff;
border-radius: 24rpx;
&:last-of-type {
border: none;
}
.photo {
flex-shrink: 0;
position: relative;
width: 262rpx;
height: 196rpx;
border-radius: 16rpx;
overflow: hidden;
.status {
position: absolute;
top: 0;
left: 0;
padding: 8rpx 16rpx;
font-size: 22rpx;
color: rgba(255, 255, 255, 1);
background: #feb54a;
border-radius: 16rpx 0rpx 16rpx 0rpx;
}
.p-img {
border-radius: 16rpx;
display: block;
width: 100%;
height: 100%;
}
.user {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
box-sizing: border-box;
text-align: center;
line-height: 44rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
background-color: rgba(0, 0, 0, 0.36);
backdrop-filter: blur(8rpx);
}
}
.wrap {
.title {
margin-bottom: 28rpx;
font-size: 32rpx;
color: rgba(17, 24, 39, 1);
line-height: 48rpx;
font-weight: bold;
height: 96rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
.date,
.site {
margin-top: 12rpx;
font-size: 28rpx;
color: rgba(100, 116, 139, 1);
display: flex;
align-items: center;
gap: 8rpx;
.icon {
width: 22rpx;
height: 22rpx;
}
}
}
}
}
}
.aside-bar {
position: fixed;
right: 30rpx;
bottom: 290rpx;
width: 110rpx;
height: 110rpx;
background: linear-gradient(90deg, #9ddffd 0%, #4ab8fd 100%);
box-shadow:
inset 0rpx 4rpx 24rpx 0rpx rgba(255, 255, 255, 0.25),
0rpx 15rpx 30rpx -6rpx rgba(74, 172, 219, 0.4);
border-radius: 55rpx 55rpx 55rpx 55rpx;
text-align: center;
padding-top: 14rpx;
box-sizing: border-box;
.icon {
width: 50rpx;
height: 50rpx;
}
.name {
font-size: 20rpx;
color: rgba(255, 255, 255, 1);
}
}
.popup {
background: #fff;
padding: 32rpx 30rpx 120rpx;
.popup-line {
margin: 0 auto;
width: 77rpx;
height: 8rpx;
background: #c0c6d6;
border-radius: 20rpx;
}
.row {
.r-title {
margin-top: 42rpx;
font-size: 36rpx;
color: rgba(17, 24, 39, 1);
font-weight: bold;
}
.select {
margin-top: 24rpx;
display: flex;
flex-wrap: wrap;
gap: 23rpx 16rpx;
.s-item {
font-size: 32rpx;
color: rgba(71, 85, 105, 1);
padding: 15rpx 30rpx;
background: #f7f8fa;
border-radius: 15rpx 15rpx 15rpx 15rpx;
}
}
.date-raneg {
margin-top: 24rpx;
display: flex;
align-items: center;
gap: 23rpx;
.line {
color: rgba(192, 198, 214, 1);
}
.date {
flex: 1;
.content {
padding: 23rpx;
display: flex;
align-items: center;
justify-content: center;
gap: 8rpx;
background: #f8fafd;
border-radius: 16rpx 16rpx 16rpx 16rpx;
.icon {
width: 33rpx;
height: 33rpx;
}
}
}
}
}
.popup-footer {
margin-top: 56rpx;
display: flex;
gap: 30rpx;
.cancel,
.sure {
display: flex;
align-items: center;
justify-content: center;
}
.cancel {
flex: 1;
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 1px solid #4ab8fd;
font-size: 32rpx;
color: rgba(74, 184, 253, 1);
}
.sure {
flex: 1;
height: 96rpx;
background: linear-gradient(90deg, #9ddffd 0%, #4ab8fd 100%);
box-shadow: 0rpx 15rpx 30rpx -6rpx rgba(74, 172, 219, 0.4);
border-radius: 16rpx 16rpx 16rpx 16rpx;
font-size: 32rpx;
color: #fff;
}
}
}

52
src/pages/act/index.ts

@ -0,0 +1,52 @@ @@ -0,0 +1,52 @@
const _app = getApp<IAppOption>()
Page({
data: {
filterShow: true,
typeList: [
{
name: '全部分类',
icon: '5',
iconActive: '6',
},
{
name: '学术科技',
icon: '7',
iconActive: '8',
},
{
name: '文体艺术',
icon: '9',
iconActive: '10',
},
{
name: '志愿公益',
icon: '11',
iconActive: '12',
},
{
name: '创新创业',
icon: '13',
iconActive: '14',
},
],
},
onLoad() {},
handlePopupClose() {
this.setData({
filterShow: false,
})
},
handleApply() {
wx.navigateTo({
url: '/pages/actAdd/index',
})
},
handleDetail() {
wx.navigateTo({
url: '/pages/actDetail/index',
})
},
})
export {}

94
src/pages/act/index.wxml

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
<view class="page">
<view class="page-header">
<view class="search">
<image class="icon" src="/images/icon1.png"></image>
<view class="content">请搜索你想要的内容</view>
</view>
<view class="options">
<view class="tabs">
<view class="tab {{index==0 && 'active'}}" wx:for="{{10}}" wx:key="index">全部</view>
</view>
<view class="filter-btn">
<image class="icon" src="/images/icon4.png"></image>
筛选
</view>
</view>
</view>
<view class="type-list">
<view class="type {{index==0 && 'active'}}" wx:for="{{typeList}}" wx:key="index">
<image class="icon" src="/images/icon5.png"></image>
<image class="icon-active" src="/images/icon6.png"></image>
<view class="name">全部分类</view>
</view>
</view>
<swiper class="banner">
<swiper-item>
<image class="b-img" mode="aspectFill" src="/images/bg1.png"></image>
</swiper-item>
</swiper>
<view class="list">
<view class="card" wx:for="{{2}}" wx:key="index" bind:tap="handleDetail">
<view class="photo">
<view class="status">进行中</view>
<image class="p-img" src="/images/bg1.png"></image>
<view class="user">128人已报名</view>
</view>
<view class="wrap">
<view class="title">
深职大第十五届校园歌手大赛深职大第十五届校园歌手大深职大第十五届校园歌手大深职大第十五届校园歌手大赛赛赛
</view>
<view class="date">
<image class="icon" src="/images/icon3.png"></image>
<view class="content">2026.04.01-2026.05.30</view>
</view>
<view class="site">
<image class="icon" src="/images/icon15.png"></image>
<view class="content">留仙洞校区音乐厅</view>
</view>
</view>
</view>
</view>
</view>
<view class="aside-bar" bind:tap="handleApply">
<image class="icon" src="/images/icon16.png"></image>
<view class="name">活动申请</view>
</view>
<van-popup show="{{ filterShow }}" position="bottom" round bind:close="handlePopupClose">
<view class="popup">
<view class="popup-line"></view>
<view class="row">
<view class="r-title">时间筛选</view>
<view class="select">
<view class="s-item">全部时间</view>
<view class="s-item">今天</view>
<view class="s-item">本周</view>
<view class="s-item">本月</view>
<view class="s-item">自定义时间</view>
</view>
</view>
<view class="row">
<view class="r-title">时间范围</view>
<view class="date-raneg">
<picker class="date" mode="date">
<view class="content">
2026-05-28
<image class="icon" src="/images/icon17.png"></image>
</view>
</picker>
<view class="line">-</view>
<picker class="date" mode="date">
<view class="content">
2026-05-28
<image class="icon" src="/images/icon17.png"></image>
</view>
</picker>
</view>
</view>
<view class="popup-footer">
<view class="cancel">取消</view>
<view class="sure">确定</view>
</view>
</view>
</van-popup>

3
src/pages/actAdd/index.json

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
{
"usingComponents": {}
}

0
src/pages/actAdd/index.scss

8
src/pages/actAdd/index.ts

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});
export {}

0
src/pages/actAdd/index.wxml

8
src/pages/actDetail/index.json

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
{
"usingComponents": {
"van-icon": "@vant/weapp/icon/index",
"van-count-down": "@vant/weapp/count-down/index",
"mp-html": "mp-html",
"van-rate": "@vant/weapp/rate/index"
}
}

278
src/pages/actDetail/index.scss

@ -0,0 +1,278 @@ @@ -0,0 +1,278 @@
page {
background-color: rgba(248, 250, 253, 1);
}
.page-title {
font-size: 32rpx;
color: #fff;
}
.page-back {
font-size: 32rpx;
color: #fff;
}
.page {
min-height: 100vh;
box-sizing: border-box;
padding-bottom: 280rpx;
.info-card {
margin: 349rpx 30rpx 0;
padding: 48rpx 30rpx 40rpx;
background-color: #fff;
border-radius: 24rpx;
.title {
font-size: 40rpx;
color: rgba(17, 24, 39, 1);
font-weight: bold;
line-height: 56rpx;
}
.stat {
margin-top: 28rpx;
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 32rpx;
.user {
flex: 1;
display: flex;
align-items: center;
gap: 18rpx;
.avatar-wrap {
display: flex;
align-items: center;
.icon {
margin-right: -8rpx;
width: 40rpx;
height: 40rpx;
}
}
.content {
font-size: 24rpx;
color: rgba(148, 163, 184, 1);
}
}
.pv,
.share {
flex-shrink: 0;
display: flex;
align-items: center;
gap: 12rpx;
font-size: 24rpx;
color: rgba(148, 163, 184, 1);
.icon {
width: 34rpx;
height: 34rpx;
}
}
}
.tags {
margin-top: 25rpx;
display: flex;
flex-wrap: wrap;
gap: 16rpx;
.tag {
padding: 4rpx 16rpx;
font-size: 24rpx;
border-radius: 8rpx;
color: rgba(74, 184, 253, 1);
background-color: rgba(74, 184, 253, 0.1);
}
}
.row-wrap {
margin-top: 24rpx;
border-top: 1px solid rgba(136, 142, 152, 0.19);
.row {
margin-top: 34rpx;
display: flex;
align-items: center;
gap: 12rpx;
.icon {
flex-shrink: 0;
width: 36rpx;
height: 36rpx;
}
.content {
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
}
}
}
}
.rich-card {
margin: 24rpx 30rpx 0;
padding: 30rpx;
background-color: #fff;
border-radius: 24rpx;
.r-title {
font-size: 36rpx;
color: rgba(17, 24, 39, 1);
font-weight: bold;
display: flex;
align-items: center;
gap: 20rpx;
&::before {
margin-left: -30rpx;
content: '';
display: block;
width: 10rpx;
height: 36rpx;
background: #4ab8fd;
border-radius: 0 12rpx 12rpx 0;
}
}
.mp-html {
margin-top: 30rpx;
}
}
.comment-list {
margin: 42rpx 30rpx 0;
.c-title {
font-size: 36rpx;
color: rgba(25, 28, 30, 1);
font-weight: bold;
}
.c-card {
margin-top: 30rpx;
padding: 30rpx;
background-color: #fff;
border-radius: 24rpx;
.user {
display: flex;
.avatar {
flex-shrink: 0;
width: 84rpx;
height: 84rpx;
border-radius: 50%;
}
.wrap {
padding-left: 16rpx;
.naem {
font-size: 32rpx;
color: rgba(17, 24, 39, 1);
}
.rate {
display: flex;
align-items: baseline;
gap: 10rpx;
.r-status {
font-size: 24rpx;
color: rgba(254, 181, 74, 1);
}
}
}
}
.content {
margin-top: 32rpx;
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
line-height: 42rpx;
}
.photo-wrap {
margin-top: 32rpx;
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 18rpx;
.photo-item {
aspect-ratio: 1 / 1;
.photo {
width: 100%;
height: 100%;
border-radius: 16rpx;
}
}
}
.c-footer {
margin-top: 24rpx;
display: flex;
align-items: center;
justify-content: space-between;
gap: 24rpx;
.date {
flex: 1;
font-size: 28rpx;
color: rgba(148, 163, 184, 1);
}
.stat {
display: flex;
align-items: center;
gap: 24rpx;
.s-item {
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 36rpx;
height: 36rpx;
}
.s-content {
font-size: 28rpx;
color: rgba(100, 116, 139, 1);
}
}
}
}
}
}
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
background-color: #fff;
.count-down-wrap {
padding: 10rpx 0;
position: absolute;
top: 0;
left: 50%;
width: 100%;
transform: translate(-50%, -100%);
background-color: rgba(255, 246, 233, 1);
.count-down {
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
gap: 8rpx;
white-space: nowrap;
color: rgba(254, 181, 74, 1);
.c-item {
padding: 0 10rpx;
color: #fff;
line-height: 56rpx;
background-color: rgba(254, 181, 74, 1);
min-width: 50rpx;
text-align: center;
box-sizing: border-box;
border-radius: 4rpx;
}
}
}
.options {
padding: 32rpx 32rpx calc(env(safe-area-inset-bottom) + 16rpx);
display: flex;
align-items: center;
gap: 26rpx;
.com,
.btn {
flex: 1;
height: 96rpx;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
border-radius: 16rpx;
font-size: 32rpx;
}
.com {
color: rgba(74, 184, 253, 1);
border: 1px solid #4ab8fd;
}
.btn {
color: #fff;
background: linear-gradient(90deg, #9ddffd 0%, #4ab8fd 100%);
}
}
}
}

8
src/pages/actDetail/index.ts

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});
export {}

127
src/pages/actDetail/index.wxml

@ -0,0 +1,127 @@ @@ -0,0 +1,127 @@
<navbar fixed customStyle="background:{{background}};">
<van-icon class="page-back" name="arrow-left" slot="left" />
<view class="page-title" slot="title">详情</view>
</navbar>
<view
class="page"
style="background: url('/images/bg1.png') no-repeat top center/100% 655rpx;padding-top: {{pageTop}}px;"
>
<view class="info-card">
<view class="title">深职大第十五届校园歌手大赛</view>
<view class="stat">
<view class="user">
<view class="avatar-wrap">
<image class="icon" src="/images/icon18.png"></image>
<image class="icon" src="/images/icon19.png"></image>
<image class="icon" src="/images/icon20.png"></image>
</view>
<view class="content">1345人已报名</view>
</view>
<view class="pv">
<image class="icon" src="/images/icon21.png"></image>
134次
</view>
<view class="share">
<image class="icon" src="/images/icon22.png"></image>
1380次
</view>
</view>
<view class="tags">
<view class="tag">校园活动</view>
<view class="tag">学生会</view>
</view>
<view class="row-wrap">
<view class="row">
<image class="icon" src="/images/icon27.png"></image>
<view class="content">报名时间 2026.5.30 - 2026.6.30.</view>
</view>
<view class="row">
<image class="icon" src="/images/icon28.png"></image>
<view class="content">活动时间 2026.7.1 19:00 - 2026.7.1 21:00</view>
</view>
<view class="row">
<image class="icon" src="/images/icon29.png"></image>
<view class="content">活动地点 留仙洞校区音乐厅</view>
</view>
<view class="row">
<image class="icon" src="/images/icon30.png"></image>
<view class="content">主办方 学生会</view>
</view>
</view>
</view>
<view class="rich-card">
<view class="r-title">活动介绍</view>
<mp-html class="mp-html" content="{{content}}"></mp-html>
</view>
<view class="comment-list">
<view class="c-title">精彩评论 (21条)</view>
<view class="c-card">
<view class="user">
<image class="avatar" src="/images/bg1.png"></image>
<view class="wrap">
<view class="name">李可可</view>
<view class="rate">
<van-rate value="{{4.5}}" color="#F7B550" allow-half readonly size="24rpx" void-color="#F7F8FA" />
<view class="r-status">非常满意</view>
</view>
</view>
</view>
<view class="content">
本次活动组织有序,流程顺畅,现场氛围良好。活动内容丰富、安排合理,服务贴心到位,整体体验良好。歌手们的实力都很强!
</view>
<view class="photo-wrap">
<view class="photo-item">
<image class="photo" src="/images/bg1.png"></image>
</view>
</view>
<view class="c-footer">
<view class="date">2026-01-01 12:00:00</view>
<view class="stat">
<view class="s-item">
<image class="icon" src="/images/icon31.png"></image>
<view class="s-content">34</view>
</view>
<view class="s-item">
<image class="icon" src="/images/icon32.png"></image>
<view class="s-content">回复</view>
</view>
</view>
</view>
</view>
</view>
<view class="footer">
<van-count-down
use-slot
time="{{ detail.LeftTime*1000 }}"
bind:change="handleTimeChange"
bind:finish="handleTimeFinish"
class="count-down-wrap"
>
<view class="count-down">
倒计时
<block wx:if="{{timeData.days>0}}">
<view class="c-item">{{timeData.days}}</view>
</block>
<block>
<view class="c-item">{{timeData.hours}}</view>
</block>
<block>
<view class="c-item">{{timeData.minutes}}</view>
</block>
<view class="c-item">{{timeData.seconds}}</view>
</view>
</van-count-down>
<view class="options">
<view class="com">去评论</view>
<view class="btn">我要报名</view>
</view>
</view>
</view>

3
src/pages/actResult/index.json

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
{
"usingComponents": {}
}

0
src/pages/actResult/index.scss

8
src/pages/actResult/index.ts

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});
export {}

0
src/pages/actResult/index.wxml

8
src/pages/index/index.json

@ -1,3 +1,9 @@ @@ -1,3 +1,9 @@
{
"usingComponents": {}
"navigationStyle": "custom",
"usingComponents": {
"van-icon": "@vant/weapp/icon/index",
"van-notice-bar": "@vant/weapp/notice-bar/index",
"van-tab": "@vant/weapp/tab/index",
"van-tabs": "@vant/weapp/tabs/index"
}
}

241
src/pages/index/index.scss

@ -1,3 +1,242 @@ @@ -1,3 +1,242 @@
page {
background: rgba(247, 248, 250, 1);
}
.page {
padding: 20rpx;
position: relative;
min-height: 100vh;
padding-bottom: calc(60px + env(safe-area-inset-bottom));
.search {
margin: 30rpx;
padding: 10rpx 24rpx;
display: flex;
align-items: center;
gap: 16rpx;
background-color: #fff;
border-radius: 40rpx;
.icon {
width: 38rpx;
height: 38rpx;
}
.content {
font-size: 28rpx;
color: rgba(148, 163, 184, 0.7);
line-height: 44rpx;
}
}
.notice {
margin: 353rpx 30rpx 0;
padding: 12rpx 24rpx;
background-color: #fff;
border-radius: 59rpx;
display: flex;
align-items: center;
gap: 12rpx;
.icon {
flex-shrink: 0;
width: 36rpx;
height: 36rpx;
}
.content {
flex: 1;
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
--notice-bar-padding: 0;
--notice-bar-line-height: 40rpx;
--notice-bar-height: 40rpx;
}
.more {
color: rgba(148, 163, 184, 1);
}
}
.kkd {
margin: 32rpx 30rpx;
padding: 36rpx;
background-color: #fff;
border-radius: 24rpx;
display: flex;
justify-content: space-between;
.k-item {
text-align: center;
flex: 1;
.icon {
width: 120rpx;
height: 120rpx;
}
.name {
margin-top: 13rpx;
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
}
}
}
.module {
margin: 35rpx 30rpx 0;
.m-header {
display: flex;
align-content: inherit;
justify-content: space-between;
.title {
font-size: 36rpx;
color: rgba(15, 29, 63, 1);
font-weight: bold;
}
.more {
font-size: 28rpx;
color: rgba(148, 163, 184, 1);
}
}
.activity-list {
margin: 20rpx -30rpx;
padding-left: 30rpx;
display: flex;
flex-wrap: nowrap;
gap: 24rpx;
overflow-x: auto;
&::-webkit-scrollbar {
display: none;
}
.a-card {
flex-shrink: 0;
width: 653rpx;
height: 218rpx;
.a-img {
display: block;
width: 100%;
height: 100%;
border-radius: 24rpx;
}
}
}
.agent-list {
margin: 20rpx -30rpx;
padding-left: 30rpx;
display: flex;
flex-wrap: nowrap;
gap: 24rpx;
overflow-x: auto;
&::-webkit-scrollbar {
display: none;
}
.a-card {
flex-shrink: 0;
padding-top: 44rpx;
width: 200rpx;
height: 264rpx;
background-color: #fff;
border-radius: 24rpx;
box-sizing: border-box;
.icon {
display: block;
margin: 0 auto;
width: 112rpx;
height: 112rpx;
border-radius: 16rpx;
}
.name {
margin-top: 32rpx;
padding: 0 10rpx;
font-size: 28rpx;
color: rgba(71, 85, 105, 1);
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
}
.recommend {
margin: 42rpx 30rpx 0;
--tabs-nav-background-color: transparent;
--tab-font-size: 32rpx;
.van-tab--active {
--tab-font-size: 36rpx;
font-weight: bold;
}
.van-tabs__line {
display: none;
}
.van-tab {
position: relative;
flex: none;
}
.van-tab--active::after {
content: '';
display: block;
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 42rpx;
height: 8rpx;
background: #4ab8fd;
border-radius: 37rpx 37rpx 37rpx 37rpx;
}
.van-tabs__nav {
gap: 70rpx;
}
.r-activity-list {
margin-top: 32rpx;
padding: 0 32rpx;
border-radius: 16rpx;
background-color: #fff;
.card {
padding: 24rpx 0;
display: flex;
gap: 24rpx;
padding-bottom: 24rpx;
border-bottom: 1px solid rgba(148, 163, 184, 0.1);
&:last-of-type{
border: none;
}
.photo {
flex-shrink: 0;
position: relative;
width: 262rpx;
height: 196rpx;
.status {
position: absolute;
top: 0;
left: 0;
padding: 8rpx 16rpx;
font-size: 22rpx;
color: rgba(255, 255, 255, 1);
background: #feb54a;
border-radius: 16rpx 0rpx 16rpx 0rpx;
}
.p-img {
border-radius: 16rpx;
display: block;
width: 100%;
height: 100%;
}
}
.wrap {
.title {
font-size: 32rpx;
color: rgba(17, 24, 39, 1);
line-height: 48rpx;
font-weight: bold;
}
.user {
margin-top: 18rpx;
color: rgba(100, 116, 139, 1);
font-size: 24rpx;
}
.date {
margin-top: 20rpx;
font-size: 24rpx;
color: rgba(100, 116, 139, 1);
display: flex;
align-items: center;
gap: 8rpx;
.icon {
width: 22rpx;
height: 22rpx;
}
}
}
}
}
}
}

90
src/pages/index/index.ts

@ -2,11 +2,99 @@ const app = getApp<IAppOption>() @@ -2,11 +2,99 @@ const app = getApp<IAppOption>()
Page({
data: {
title: '首页',
statusBarHeight: 44,
activeTab: 0,
navItems: [
{ type: 'schedule', label: '智能课表', icon: '/images/icon_schedule.png' },
{ type: 'bus', label: '校园巴士', icon: '/images/icon_bus.png' },
{ type: 'race', label: '活动报名', icon: '/images/icon_race.png' },
{ type: 'ai', label: 'AI辅导员', icon: '/images/icon_ai.png' },
],
tabList: [
{ label: '首页', icon: '/images/icon_home_active.png' },
{ label: '活动', icon: '/images/icon_calendar.png' },
{ label: '智能体', icon: '/images/icon_ai.png' },
{ label: '通知', icon: '/images/icon_bell.png' },
{ label: '我的', icon: '/images/icon_user.png' },
],
recommendAgents: [
{ id: 'ppt', name: 'PPT小助手', icon: '/images/agent_ppt.png', bgImage: '/images/activity_1.png' },
{ id: 'ielts', name: '雅思模拟考官', icon: '/images/agent_ielts.png', bgImage: '/images/activity_2.png' },
{ id: 'pdf', name: 'PDF翻译', icon: '/images/agent_pdf.png', bgImage: '/images/activity_3.png' },
],
recommendActivities: [
{
id: '3',
title: '英语角交流活动',
desc: '提升口语能力',
time: '活动时间:2026-04-01~2026-05-30',
image: '/images/activity_1.png',
},
{
id: '4',
title: '大学生创业项目大赛',
desc: '提升创新能力',
time: '活动时间:2026-04-01~2026-05-30',
image: '/images/activity_2.png',
},
],
hotActivities: [
{
id: '1',
title: '计算机学院编程大赛',
image: '/images/activity_1.png',
deadline: '截止日期:2026年5月30日',
},
{
id: '2',
title: '创新创业项目路演',
image: '/images/activity_2.png',
deadline: '截止日期:2026年6月15日',
},
],
},
onLoad() {
const sysInfo = wx.getSystemInfoSync()
this.setData({ statusBarHeight: sysInfo.statusBarHeight || 44 })
app.waitLogin()
},
onSearchTap() {
wx.showToast({ title: '搜索功能开发中', icon: 'none' })
},
onNavTap(e: WechatMiniprogram.TouchEvent) {
const type = e.currentTarget.dataset.type
wx.showToast({ title: `${type}功能开发中`, icon: 'none' })
},
onAnnounceTap() {
wx.showToast({ title: '公告详情开发中', icon: 'none' })
},
onMoreAgentsTap() {
wx.showToast({ title: '更多智能体开发中', icon: 'none' })
},
onAgentTap(e: WechatMiniprogram.TouchEvent) {
const id = e.currentTarget.dataset.id
wx.navigateTo({ url: `/pages/agent/index?id=${id}` })
},
onActivityTap(e: WechatMiniprogram.TouchEvent) {
const id = e.currentTarget.dataset.id
wx.navigateTo({ url: `/pages/activity-detail/index?id=${id}` })
},
onTabTap(e: WechatMiniprogram.TouchEvent) {
const index = e.currentTarget.dataset.index
if (index === this.data.activeTab) return
this.setData({ activeTab: index })
if (index === 4) {
wx.switchTab({ url: '/pages/my/index' })
}
},
})
export {}

87
src/pages/index/index.wxml

@ -1,3 +1,86 @@ @@ -1,3 +1,86 @@
<view class="page">
<text>{{title}}</text>
<view
class="page"
style="background: url('/images/bg1.png') no-repeat top center/100% 655rpx;padding-top: {{pageTop}}px;"
>
<view class="search">
<image class="icon" src="/images/icon1.png"></image>
<view class="content">请搜索你想要的内容</view>
</view>
<view class="notice">
<image class="icon" src="/images/icon2.png"></image>
<view class="content">
<van-notice-bar
color="rgba(71, 85, 105, 1)"
background="transparent"
speed="{{3}}"
text="技术是开发它的人的共同灵魂。"
/>
</view>
<van-icon class="more" name="arrow" />
</view>
<view class="kkd">
<view class="k-item" wx:for="{{4}}" wx:key="index">
<image class="icon" src="/images/icon2.png"></image>
<view class="name">智能课表</view>
</view>
</view>
<view class="module">
<view class="m-header">
<view class="title">热门活动</view>
<view class="more">
查看详情
<van-icon name="arrow" />
</view>
</view>
<view class="activity-list">
<view class="a-card" wx:for="{{4}}" wx:key="index">
<image class="a-img" mode="aspectFill" src="/images/bg1.png"></image>
</view>
</view>
</view>
<view class="module">
<view class="m-header">
<view class="title">推荐智能体</view>
<view class="more">
查看详情
<van-icon name="arrow" />
</view>
</view>
<view class="agent-list">
<view class="a-card" wx:for="{{4}}" wx:key="index">
<image class="icon" src="/images/icon2.png"></image>
<view class="name">PPT小助手</view>
</view>
</view>
</view>
<view class="recommend">
<van-tabs
active="{{ active }}"
color="rgba(74, 184, 253, 1)"
title-active-color="rgba(15, 29, 63, 1)"
title-inactive-color="rgba(71, 85, 105, 1)"
bind:change="onChange"
swipeable
>
<van-tab title="推荐活动">
<view class="r-activity-list">
<view class="card" wx:for="{{2}}" wx:key="index">
<view class="photo">
<view class="status">进行中</view>
<image class="p-img" src="/images/bg1.png"></image>
</view>
<view class="wrap">
<view class="title">深职大第十五届校园歌手大赛</view>
<view class="user">128人已报名</view>
<view class="date">
<image class="icon" src="/images/icon3.png"></image>
<view class="content">2026.04.01-2026.05.30</view>
</view>
</view>
</view>
</view>
</van-tab>
<van-tab title="智能体">内容 2</van-tab>
</van-tabs>
</view>
</view>

9
src/pages/notice/index.json

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
{
"navigationBarTitleText": "通知",
"navigationStyle": "default",
"usingComponents": {
"van-tab": "@vant/weapp/tab/index",
"van-tabs": "@vant/weapp/tabs/index",
"van-icon": "@vant/weapp/icon/index"
}
}

125
src/pages/notice/index.scss

@ -0,0 +1,125 @@ @@ -0,0 +1,125 @@
page {
background-color: rgba(247, 248, 250, 1);
}
.page {
.tabs {
.van-tabs__line {
width: 32rpx !important;
}
.van-tab--active {
--tab-font-size: 32rpx;
}
}
.page0 {
padding: 0 32rpx;
.module {
margin-top: 32rpx;
.date {
font-size: 28rpx;
color: rgba(148, 163, 184, 1);
text-align: center;
}
.card {
margin-top: 24rpx;
background-color: #fff;
border-radius: 24rpx;
padding: 32rpx;
.title {
font-size: 32rpx;
color: rgba(17, 24, 39, 1);
font-weight: bold;
}
.content {
margin-top: 24rpx;
font-size: 28rpx;
color: rgba(100, 116, 139, 1);
line-height: 44rpx;
}
.c-footer {
margin-top: 32rpx;
padding-top: 22rpx;
border-top: 1px solid rgba(235, 235, 235, 1);
display: flex;
align-items: center;
justify-content: space-between;
.tag {
font-size: 24rpx;
color: rgba(74, 184, 253, 1);
padding: 4rpx 16rpx;
border-radius: 6rpx;
background-color: rgba(74, 184, 253, 0.1);
}
.detail {
font-size: 28rpx;
color: rgba(148, 163, 184, 0.5);
}
}
}
}
}
.page2 {
padding: 0 32rpx;
.module {
margin-top: 32rpx;
.date {
font-size: 28rpx;
color: rgba(148, 163, 184, 1);
text-align: center;
}
.card {
margin-top: 24rpx;
background-color: #fff;
border-radius: 24rpx;
padding: 32rpx;
.title {
font-size: 32rpx;
color: rgba(17, 24, 39, 1);
font-weight: bold;
}
.content {
margin-top: 24rpx;
font-size: 28rpx;
color: rgba(100, 116, 139, 1);
line-height: 44rpx;
}
.c-footer {
margin-top: 30rpx;
display: flex;
align-items: center;
justify-content: space-between;
.tag {
font-size: 24rpx;
padding: 4rpx 16rpx;
border-radius: 6rpx;
&.tag1 {
color: rgba(111, 220, 174, 1);
background-color: rgba(111, 220, 174, 0.1);
}
&.tag2 {
color: rgba(253, 91, 89, 1);
background-color: rgba(253, 91, 89, 0.1);
}
&.tag3 {
color: rgba(74, 184, 253, 1);
background-color: rgba(74, 184, 253, 0.1);
}
&.tag4 {
color: rgba(254, 181, 74, 1);
background-color: rgba(254, 181, 74, 0.1);
}
&.tag5 {
color: rgba(171, 89, 248, 1);
background-color: rgba(171, 89, 248, 0.1);
}
}
.detail {
font-size: 28rpx;
color: rgba(148, 163, 184, 0.5);
}
}
}
}
}
}

15
src/pages/notice/index.ts

@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
const _app = getApp<IAppOption>()
Page({
data: {
active: 2,
},
onLoad() {},
handleDetail() {
wx.navigateTo({
url: '/pages/noticeDetail/index',
})
},
})
export {}

59
src/pages/notice/index.wxml

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
<view class="page">
<van-tabs
class="tabs"
color="rgba(74, 184, 253, 1)"
title-inactive-color="rgba(71, 85, 105, 1)"
title-active-color="rgba(74, 184, 253, 1)"
active="{{ active }}"
bind:change="onChange"
>
<van-tab title="公告">
<view class="page0">
<view class="module" wx:for="{{4}}" wx:key="index" bind:tap="handleDetail">
<view class="date">03-01 13:01</view>
<view class="card">
<view class="title">2025-2026学年暑期社会实践报名启动</view>
<view class="content">
本次活动聚焦社会服务、乡村振兴、红色教育、志愿服务等方向,引导青年以实干践行使命,用行...
</view>
<view class="c-footer">
<view class="tag">重要通知</view>
<view class="detail">
查看详情
<van-icon name="arrow" />
</view>
</view>
</view>
</view>
</view>
</van-tab>
<van-tab title="重要通知">内容 2</van-tab>
<van-tab title="活动通知">
<view class="page2">
<view class="module" wx:for="{{4}}" wx:key="index">
<view class="date">03-01 13:01</view>
<view class="card">
<view class="title">2025-2026学年暑期社会实践报名启动</view>
<view class="content">
本次活动聚焦社会服务、乡村振兴、红色教育、志愿服务等方向,引导青年以实干践行使命,用行...
</view>
<view class="reason">驳回原因:</view>
<view class="c-footer">
<!-- tag1 活动审核 -->
<!-- tag2 活动驳回 -->
<!-- tag3 报名通知 -->
<!-- tag4 签到通知 -->
<!-- tag5 评论审核 -->
<view class="tag tag1">重要通知</view>
<view class="detail">
查看详情
<van-icon name="arrow" />
</view>
</view>
</view>
</view>
</view>
</van-tab>
<van-tab title="智能体通知">内容 2</van-tab>
</van-tabs>
</view>

7
src/pages/noticeDetail/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"navigationBarTitleText": "通知详情",
"navigationStyle": "default",
"usingComponents": {
"mp-html": "mp-html"
}
}

154
src/pages/noticeDetail/index.scss

@ -0,0 +1,154 @@ @@ -0,0 +1,154 @@
.page {
padding: 32rpx;
.info {
.row {
display: flex;
align-items: center;
justify-content: space-between;
.type {
display: flex;
align-items: center;
gap: 8rpx;
.icon {
width: 34rpx;
height: 34rpx;
}
.content {
font-size: 32rpx;
color: rgba(74, 184, 253, 1);
}
}
.status {
font-size: 24rpx;
padding: 4rpx 16rpx;
border-radius: 6rpx;
&.status1 {
color: rgba(111, 220, 174, 1);
background-color: rgba(111, 220, 174, 0.1);
}
&.status2 {
color: rgba(253, 91, 89, 1);
background-color: rgba(253, 91, 89, 0.1);
}
&.status3 {
color: rgba(74, 184, 253, 1);
background-color: rgba(74, 184, 253, 0.1);
}
&.status4 {
color: rgba(254, 181, 74, 1);
background-color: rgba(254, 181, 74, 0.1);
}
&.status5 {
color: rgba(171, 89, 248, 1);
background-color: rgba(171, 89, 248, 0.1);
}
}
}
.title {
margin-top: 30rpx;
font-size: 42rpx;
line-height: 48rpx;
color: rgba(17, 24, 39, 1);
font-weight: bold;
}
.tag-wrap {
margin-top: 30rpx;
display: flex;
gap: 16rpx;
flex-wrap: wrap;
.tag {
font-size: 24rpx;
padding: 4rpx 16rpx;
border-radius: 6rpx;
&.tag1 {
color: rgba(111, 220, 174, 1);
background-color: rgba(111, 220, 174, 0.1);
}
&.tag2 {
color: rgba(253, 91, 89, 1);
background-color: rgba(253, 91, 89, 0.1);
}
&.tag3 {
color: rgba(74, 184, 253, 1);
background-color: rgba(74, 184, 253, 0.1);
}
&.tag4 {
color: rgba(254, 181, 74, 1);
background-color: rgba(254, 181, 74, 0.1);
}
&.tag5 {
color: rgba(171, 89, 248, 1);
background-color: rgba(171, 89, 248, 0.1);
}
}
}
.stat {
margin-top: 30rpx;
display: flex;
align-items: center;
gap: 36rpx;
.date,
.user {
display: flex;
align-items: center;
gap: 8rpx;
.icon {
width: 30rpx;
height: 30rpx;
}
.content {
font-size: 28rpx;
color: rgba(148, 163, 184, 1);
}
}
}
}
.mp-html {
margin-top: 30rpx;
}
.tip {
margin-top: 30rpx;
padding: 24rpx;
background-color: rgba(254, 181, 74, 0.1);
border-radius: 16rpx;
display: flex;
gap: 23rpx;
.icon {
margin-top: 4rpx;
flex-shrink: 0;
width: 32rpx;
height: 32rpx;
}
.wrap {
.w-title {
font-size: 32rpx;
color: rgba(254, 181, 74, 1);
}
.w-content {
font-size: 28rpx;
color: rgba(254, 181, 74, 1);
}
}
}
.footer {
position: fixed;
bottom: 0;
left: 0;
width: 100%;
box-sizing: border-box;
padding: 30rpx 30rpx calc(env(safe-area-inset-bottom) + 30rpx);
background-color: #fff;
box-shadow: 0rpx -4rpx 21rpx 0rpx rgba(0, 0, 0, 0.07);
.btn {
height: 96rpx;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(90deg, #9ddffd 0%, #4ab8fd 100%);
box-shadow: 0rpx 15rpx 30rpx -6rpx rgba(74, 172, 219, 0.4);
border-radius: 16rpx 16rpx 16rpx 16rpx;
}
}
}

8
src/pages/noticeDetail/index.ts

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});
export {}

38
src/pages/noticeDetail/index.wxml

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
<view class="page">
<view class="info">
<view class="row">
<view class="type">
<image class="icon" src="/images/icon23.png"></image>
<view class="content">通知</view>
</view>
<view class="status status1">已发布</view>
</view>
<view class="title">关于开展校园歌手大赛的通知</view>
<view class="tag-wrap">
<view class="tag tag1">校园活动</view>
</view>
<view class="stat">
<view class="date">
<image class="icon" src="/images/icon24.png"></image>
<view class="content">2026-05-20 14:30:00</view>
</view>
<view class="user">
<image class="icon" src="/images/icon25.png"></image>
<view class="content">浏览人数:128</view>
</view>
</view>
</view>
<view class="mp-html">
<mp-html content="{{content}}"></mp-html>
</view>
<view class="tip">
<image class="icon" src="/images/icon26.png"></image>
<view class="wrap">
<view class="w-title">温馨提示</view>
<view class="w-content">未尽事宜,请联系校团委文艺部,联系电话:0755-12345678。</view>
</view>
</view>
<view class="footer">
<view class="btn">查看活动详情</view>
</view>
</view>

27
src/pages/start/index.ts

@ -4,36 +4,9 @@ const app = getApp<IAppOption>() @@ -4,36 +4,9 @@ const app = getApp<IAppOption>()
Page({
data: {},
onLoad(options) {
if (options.scene) {
const params = parseScene(options.scene)
if (params) {
app.globalData.waitBindDoctorId = (params as any).doctorId
}
}
app.waitLogin().then(() => {
const initLoginInfo = app.globalData.initLoginInfo || {}
if (initLoginInfo.isLogin === 0) {
wx.reLaunch({
url: '/pages/index/index',
})
}
if (initLoginInfo.loginType === 1) {
if (initLoginInfo.isReg === 1) {
wx.reLaunch({
url: '/pages/index/index',
})
return
}
wx.reLaunch({
url: '/pages/index/index',
})
}
if (initLoginInfo.loginType === 2) {
wx.reLaunch({
url: '/pages/index/index',
})
}
})
},
})

Loading…
Cancel
Save