add前端代码

main
Mia-012 1 month ago
parent 40325d0281
commit 0113da6e30

@ -0,0 +1 @@
{"containers":[],"config":{}}

@ -0,0 +1,31 @@
/*
* Eslint config file
* Documentation: https://eslint.org/docs/user-guide/configuring/
* Install the Eslint extension before using this feature.
*/
module.exports = {
env: {
es6: true,
browser: true,
node: true,
},
ecmaFeatures: {
modules: true,
},
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
},
globals: {
wx: true,
App: true,
Page: true,
getCurrentPages: true,
getApp: true,
Component: true,
requirePlugin: true,
requireMiniProgram: true,
},
// extends: 'eslint:recommended',
rules: {},
}

@ -0,0 +1,19 @@
// app.js
App({
onLaunch() {
// 展示本地存储能力
const logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
},
globalData: {
userInfo: null
}
})

@ -0,0 +1,28 @@
{
"pages": [
"pages/index/index",
"pages/student/rules/rule2/rule2",
"pages/student/rules/rule1/rule1",
"pages/student/diandang/dd-yes/dd-yes",
"pages/student/diandang/dd-not/dd-not",
"pages/student/rank/rank",
"pages/student/dm/dm",
"pages/student/student",
"pages/teacher/Mode-arrive/Mode-arrive",
"pages/teacher/mode2/mode2",
"pages/teacher/Mode-quiz/Mode-quiz",
"pages/teacher/Trank/rank-Mode1/rank-Mode1",
"pages/teacher/Trank/rank-Mode2/rank-Mode2",
"pages/teacher/Mode-quiz_2/Mode-quiz_2",
"pages/teacher/teacher"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "Weixin",
"navigationBarBackgroundColor": "#ffffff"
},
"style": "v2",
"componentFramework": "glass-easel",
"sitemapLocation": "sitemap.json",
"lazyCodeLoading": "requiredComponents"
}

@ -0,0 +1,10 @@
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because it is too large Load Diff

@ -0,0 +1,9 @@
{
"treeData": [
{
"title": "minitest-1",
"caseId": "85b100f1-fc91-4825-af29-698a75e0bc35",
"rootPath": ""
}
]
}

@ -0,0 +1,12 @@
Page({
goToStudent() {
wx.navigateTo({
url: '../student/student?fromIndex=true'
});
},
goToTeacher() {
wx.navigateTo({
url: '../teacher/teacher'
});
}
});

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

@ -0,0 +1,12 @@
<view class="container" style="background-image: url('/image/index背景.png');"></view>
<image class="teacher-image" src="/image/teacher.png" mode="widthFix"></image>
<text class="text1">"简单"一点</text>
<image class="green1-image" src="/image/green1.png" mode="widthFix"></image>
<image class="green2-image" src="/image/green2.png" mode="widthFix"></image>
<image class="music-image" src="/image/music.png" mode="widthFix"></image>
<image class="home-image" src="/image/home.png" mode="widthFix"></image>
<view class="rectangle1"></view>
<view class="rectangle2"></view>
<view class="rectangle3"></view>
<text class="text2" bindtap="goToTeacher">我是老师</text>
<text class="text3" bindtap="goToStudent">我是学生</text>

@ -0,0 +1,115 @@
.container {
height: 100vh;
background-size: cover;
background-position: center;
z-index: -2;
}
.teacher-image {
position: absolute; /* 绝对定位 */
left: 50px; /* 距离左侧200px */
top: 222px; /* 距离顶部150px */
width: 260px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.text1 {
position: absolute; /* 绝对定位 */
left: 28px; /* 距离左侧50px */
top:135px; /* 距离顶部50px */
font-size: 55px; /* 字号 */
margin: 10psx; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 2;
}
.green1-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 180px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 1; /* 设置z-index确保在前面 */
}
.green2-image {
position: absolute; /* 绝对定位 */
left: 125px; /* 距离左侧200px */
top: 258px; /* 距离顶部150px */
width: 250px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 1; /* 设置z-index确保在前面 */
}
.music-image {
position: absolute; /* 绝对定位 */
left: 310px; /* 距离左侧200px */
top: 90px; /* 距离顶部150px */
width: 80px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.home-image {
position: absolute; /* 绝对定位 */
left: 15px; /* 距离左侧200px */
top: 30px; /* 距离顶部150px */
width: 40px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.rectangle1 {
position: absolute;
left: 3px; /* 矩形左上角的横坐标 */
top: 25px; /* 矩形左上角的纵坐标 */
width: 60px; /* 矩形的宽度 */
height: 40px; /* 矩形的高度 */
border-radius: 50px; /* 圆角边框 */
background-color:#fff4e6 ;
border: 3px dashed #e1b474; /* 矩形的边框 */
z-index: 1;
}
.rectangle2 {
position: absolute;
left: 80px; /* 矩形左上角的横坐标 */
top: 520px; /* 矩形左上角的纵坐标 */
width: 200px; /* 矩形的宽度 */
height: 60px; /* 矩形的高度 */
border-radius: 28px; /* 圆角边框 */
background-color:#2b84fe ;
border: 1px dashed #bbbbbb; /* 矩形的边框 */
z-index: 1;
}
.rectangle3 {
position: absolute;
left: 80px; /* 矩形左上角的横坐标 */
top: 600px; /* 矩形左上角的纵坐标 */
width: 200px; /* 矩形的宽度 */
height: 60px; /* 矩形的高度 */
border-radius: 28px; /* 圆角边框 */
background-color:#ffdb17 ;
border: 1px dashed #bbbbbb; /* 矩形的边框 */
z-index: 1;
}
.text2 {
position: absolute; /* 绝对定位 */
left: 105px; /* 距离左侧50px */
top:530px; /* 距离顶部50px */
font-size: 34px; /* 字号 */
margin: 10psx; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f2f2f0; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 2;
}
.text3 {
position: absolute; /* 绝对定位 */
left: 105px; /* 距离左侧50px */
top:610px; /* 距离顶部50px */
font-size: 34px; /* 字号 */
margin: 10psx; /* 边距 */
line-height: 20px; /* 行间距 */
color: #694b4b; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 2;
}

@ -0,0 +1,13 @@
// pages/student/diandang/dd-not/dd-not.js
Page({
goyes() {
wx.navigateTo({
url: '/pages/student/diandang/dd-yes/dd-yes',
});
},
goback() {
wx.navigateTo({
url: '/pages/student/student',
});
},
})

@ -0,0 +1,22 @@
<view class="container" style="background-image: url('/image/dd背景.jpg');">
</view>
<view class="rectangle1">
<label class="radio-label">
<input type="radio" name="choice" value="yes" class="radio-input" />
<view class="radio-custom" bindtap="goyes"></view>
<text class="radio-text "bindtap="goyes">是</text>
</label>
<label class="radio-label">
<input type="radio" name="choice" value="no" class="radio-input" />
<view class="radio-custom"></view>
<text class="radio-text" >否</text>
</label>
</view>
<view class="rectangle2">
</view>
<text class="custom-text">回答问题前使用积分进行抵押如果老师给分在2分以上积分返还并增加如果老师给分在2分以下则抵押的积分被扣除。</text>
<image class="boss-image" src="/image/hotboss.png" mode="widthFix"></image>
<image class="dd-image" src="/image/dd.png" mode="widthFix"></image>
<image class="yun-image" src="/image/云对话框.png" mode="widthFix"></image>
<text class="boss-text">你一定会后悔的</text>
<image class="fanhui-image" bindtap="goback" src="/image/fanhui2.png" mode="widthFix"></image>

@ -0,0 +1,129 @@
/* pages/student/diandang/dd-yes/dd-yes.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.rectangle1 {
position: absolute;
flex-direction: row; /* 元素横向排列 */
left: 0px; /* 矩形左上角的横坐标 */
top: 526px; /* 矩形左上角的纵坐标 */
width: 372px; /* 矩形的宽度 */
height: 47px; /* 矩形的高度 */
background-color: #e9b464; /* 矩形的背景颜色 */
border: 2px solid #bbbbbb; /* 矩形的边框 */
z-index: 1;
display: flex; /* 使用 flexbox 布局 */
align-items: center; /* 垂直居中 */
justify-content: space-around; /* 水平分布 */
}
.radio-label {
display: flex;
align-items: center;
margin-right: 5px; /* 元素之间的间距 */
}
.radio-input {
display: none;
}
.radio-custom {
width: 20px;
height: 20px;
border: 2px solid #333;
border-radius: 50%;
position: relative;
margin-right: 5px;
}
.radio-input:checked + .radio-custom {
border-color: green; /* 选中后边框颜色 */
}
.radio-input:checked + .radio-custom::after {
content: "";
display: block;
width: 12px;
height: 12px;
background-color: green; /* 选中后圆点颜色 */
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.radio-text {
font-size: 18px;
color: #333333;
}
.rectangle2 {
position: absolute;
left: 0px; /* 矩形左上角的横坐标 */
top: 577px; /* 矩形左上角的纵坐标 */
width: 372px; /* 矩形的宽度 */
height: 130px; /* 矩形的高度 */
background-color: #cd8b01; /* 矩形的背景颜色 */
z-index: 2
}
.custom-text {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧50px */
top:589px; /* 距离顶部50px */
font-size: 18px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f2de12; /* 文本颜色 */
padding: 10px; /* 内边距 */
z-index: 3
}
.boss-image {
position: absolute; /* 绝对定位 */
left: 100px; /* 距离左侧200px */
top: 185px; /* 距离顶部150px */
width: 300px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.dd-image {
position: absolute; /* 绝对定位 */
left: 128px; /* 距离左侧200px */
top: 50px; /* 距离顶部150px */
width: 120px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.yun-image {
position: absolute; /* 绝对定位 */
left: 50px; /* 距离左侧200px */
top: 250px; /* 距离顶部150px */
width: 160px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.boss-text {
position: absolute; /* 绝对定位 */
left: 48px; /* 距离左侧50px */
top:275px; /* 距离顶部50px */
font-size: 18px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 5
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}

@ -0,0 +1,71 @@
Page({
data: {
studentName: '',
studentId: '',
showInputModal: false, // 控制输入框的显示
pledgeScore: 0, // 典当积分
},
onLoad(options) {
// 从前一个页面获取学生信息
this.setData({
studentId: options.studentId,
studentName: options.studentName,
});
},
goback() {
wx.navigateTo({
url: '/pages/student/student',
});
},
confirmPledge() {
// 显示输入框
this.setData({ showInputModal: true });
},
cancelPledge() {
wx.navigateTo({
url: '/pages/student/diandang/dd-not/dd-not',
});
},
closeInputModal() {
this.setData({ showInputModal: false });
// wx.navigateTo({
// url: '/pages/student/student',
// });
},
handlePledgeInput(e) {
this.setData({ pledgeScore: e.detail.value });
},
submitPledge() {
const { studentId, studentName, pledgeScore } = this.data;
// 发送请求保存典当信息
wx.request({
url: 'http://127.0.0.1:8000/api/create_pledge/',
method: 'POST',
data: {
studentId: studentId,
studentName: studentName,
pledgeScore: pledgeScore,
},
success: (res) => {
if (res.statusCode === 201) {
wx.showToast({ title: '典当信息已保存', icon: 'success' });
this.closeInputModal(); // 关闭输入框
wx.navigateBack(); // 返回上一页
} else {
wx.showToast({ title: '典当失败', icon: 'none' });
}
},
fail: () => {
wx.showToast({ title: '请求失败,请检查网络', icon: 'none' });
}
});
},
});

@ -0,0 +1,29 @@
<view class="container" style="background-image: url('/image/dd背景.jpg');">
</view>
<view class="rectangle1">
<label class="radio-label">
<input type="radio" name="choice" value="yes" class="radio-input" />
<view class="radio-custom" bindtap="confirmPledge" ></view>
<text class="radio-text" bindtap="confirmPledge" >是</text>
</label>
<label class="radio-label">
<input type="radio" name="choice" value="no" class="radio-input" />
<view class="radio-custom" catchtap="cancelPledge" ></view>
<text class="radio-text" catchtap="cancelPledge" >否</text>
</label>
</view>
<view class="rectangle2"></view>
<text class="custom-text">回答问题前使用积分进行抵押如果老师给分在2分以上积分返还并增加如果老师给分在2分以下则抵押的积分被扣除。</text>
<image class="boss-image" src="/image/smileboss.png" mode="widthFix"></image>
<image class="dd-image" src="/image/dd.png" mode="widthFix"></image>
<image class="yun-image" src="/image/云对话框.png" mode="widthFix"></image>
<text class="boss-text">你是否要进行
积分典当呢?</text>
<image class="fanhui-image" bindtap="goback" src="/image/fanhui2.png" mode="widthFix"></image>
<modal wx:if="{{showInputModal}}" bindclose="closeInputModal" bindconfirm="submitPledge">
<view>
<input placeholder="请输入典当积分" bindinput="handlePledgeInput"/>
<!-- <button bindtap="submitPledge">确定</button> -->
</view>
</modal>

@ -0,0 +1,124 @@
/* pages/student/diandang/dd-yes/dd-yes.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.rectangle1 {
position: absolute;
flex-direction: row; /* 元素横向排列 */
left: 0px; /* 矩形左上角的横坐标 */
top: 526px; /* 矩形左上角的纵坐标 */
width: 372px; /* 矩形的宽度 */
height: 47px; /* 矩形的高度 */
background-color: #e9b464; /* 矩形的背景颜色 */
border: 2px solid #bbbbbb; /* 矩形的边框 */
z-index: 3;
display: flex; /* 使用 flexbox 布局 */
align-items: center; /* 垂直居中 */
justify-content: space-around; /* 水平分布 */
}
.radio-label {
display: flex;
align-items: center;
margin-right: 5px; /* 元素之间的间距 */
}
.radio-input {
display: none;
}
.radio-custom {
width: 20px;
height: 20px;
border: 2px solid #333;
border-radius: 50%;
position: relative;
margin-right: 5px;
}
.radio-input:checked + .radio-custom {
border-color: green; /* 选中后边框颜色 */
}
.radio-input:checked + .radio-custom::after {
content: "";
display: block;
width: 12px;
height: 12px;
background-color: green; /* 选中后圆点颜色 */
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.rectangle2 {
position: absolute;
left: 0px; /* 矩形左上角的横坐标 */
top: 577px; /* 矩形左上角的纵坐标 */
width: 372px; /* 矩形的宽度 */
height: 130px; /* 矩形的高度 */
background-color: #cd8b01; /* 矩形的背景颜色 */
z-index: 2
}
.custom-text {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧50px */
top:589px; /* 距离顶部50px */
font-size: 18px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f2de12; /* 文本颜色 */
padding: 10px; /* 内边距 */
z-index: 3
}
.boss-image {
position: absolute; /* 绝对定位 */
left: 180px; /* 距离左侧200px */
top: 348px; /* 距离顶部150px */
width: 220px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 1; /* 设置z-index确保在前面 */
}
.dd-image {
position: absolute; /* 绝对定位 */
left: 128px; /* 距离左侧200px */
top: 50px; /* 距离顶部150px */
width: 120px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.yun-image {
position: absolute; /* 绝对定位 */
left: 50px; /* 距离左侧200px */
top: 250px; /* 距离顶部150px */
width: 160px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.boss-text {
position: absolute; /* 绝对定位 */
left: 55px; /* 距离左侧50px */
top:275px; /* 距离顶部50px */
font-size: 18px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}

@ -0,0 +1,138 @@
Page({
data: {
showModal: false,
mystudentName: '',
mystudentId: '',
myscore: 0,
studentName: '',
studentId: '',
socket: null, // 保存WebSocket连接
},
goBack() {
wx.navigateTo({
url: '/pages/student/student',
});
},
onLoad(options) {
// 获取传递的数据
this.setData({
mystudentId: options.studentId,
mystudentName: options.studentName,
myscore: options.score,
});
this.connectWebSocket();
this.fetchStudentInfo();
},
// 连接 WebSocket
connectWebSocket() {
const socket = wx.connectSocket({
url: 'ws://127.0.0.1:8000/ws/classroom/',
});
socket.onMessage((message) => {
const data = JSON.parse(message.data);
if (data.action === 'student_picked') {
this.setData({
showModal: true,
studentName: data.name,
studentId: data.student_id,
});
// 弹窗显示被点中的学生
wx.showModal({
title: '点名结果',
content: `被点中的同学:姓名: ${this.data.studentName} 学号: ${this.data.studentId}`,
showCancel: false,
success: (res) => {
if (res.confirm) {
this.setData({ showModal: false });
}
}
});
}
});
this.setData({ socket });
},
// 豁免卡机制
useExemptionCard() {
wx.showModal({
title: '使用豁免卡',
content: `确认使用豁免卡吗?
购买点名豁免卡可以实现点名豁免一次一张需要10积分只有提问时可使用`,
success: (res) => {
if (res.confirm) {
// 更新积分
const newScore = this.data.myscore - 10;
this.setData({ myscore: newScore });
// 发送豁免卡信息给教师端
this.sendExemptionCardInfo();
} else {
// 用户选择不使用豁免卡
wx.showToast({ title: '未使用豁免卡', icon: 'none' });
}
}
});
},
sendExemptionCardInfo() {
const { mystudentId, mystudentName, myscore, socket } = this.data;
// 通过 WebSocket 向教师端发送豁免卡信息
const message = {
action: 'use_exemption_card',
studentId: mystudentId,
studentName: mystudentName,
newScore: myscore, // 更新后的积分
};
if (socket) {
socket.send({
data: JSON.stringify(message),
success: () => {
wx.showToast({ title: '豁免卡信息已发送', icon: 'success' });
},
fail: () => {
wx.showToast({ title: '发送信息失败', icon: 'none' });
}
});
} else {
wx.showToast({ title: 'WebSocket连接未建立', icon: 'none' });
}
},
// 下拉刷新
onPullDownRefresh() {
this.fetchStudentInfo(); // 获取最新的学生信息
},
// 从服务器获取学生最新信息
fetchStudentInfo() {
const { mystudentId } = this.data;
wx.request({
url: `http://127.0.0.1:8000/api/get_student_info/${mystudentId}/`, // 替换为你的 API 地址
method: 'GET',
success: (res) => {
if (res.statusCode === 200) {
const { name, score } = res.data;
this.setData({
mystudentName: name,
myscore: score, // 更新当前积分
});
wx.showToast({ title: '信息更新成功', icon: 'success' });
} else {
wx.showToast({ title: '获取信息失败', icon: 'none' });
}
wx.stopPullDownRefresh(); // 停止下拉刷新
},
fail: () => {
wx.showToast({ title: '请求失败,请检查网络', icon: 'none' });
wx.stopPullDownRefresh(); // 停止下拉刷新
}
});
},
});

@ -0,0 +1,3 @@
{
"enablePullDownRefresh": true
}

@ -0,0 +1,16 @@
<!--pages/student/dm/dm.wxml-->
<view class="container" style="background-image: url('/image/student背景.png');">
</view>
<image class="card-image" bindtap="useExemptionCard" src="/image/card.png" mode="widthFix"></image>
<image class="green-image1" src="/image/green.png" mode="widthFix"></image>
<image class="green-image2" src="/image/green.png" mode="widthFix"></image>
<text class="name" style="white-space: pre;"> 姓名:{{mystudentName}}
当前积分: {{myscore}}</text>
<view class="circle1"></view>
<image class="hu-image" src="/image/hu.png" mode="widthFix"></image>
<image class="hu-image2" src="/image/hu.png" mode="widthFix"></image>
<text class="dm-text" style="white-space: pre;" > 要点名啦</text>
<text class="card-text" style="white-space: pre;" bindtap="useExemptionCard"> 点名豁免卡</text>
<image class="fanhui-image" bindtap="goBack" src="/image/fanhui2.png" mode="widthFix"></image>

@ -0,0 +1,127 @@
/* pages/student/dm/dm.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.card-image {
position: absolute; /* 绝对定位 */
left: 210px; /* 距离左侧200px */
top: 510px; /* 距离顶部150px */
width: 150px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.green-image {
position: absolute; /* 绝对定位 */
left: -30px; /* 距离左侧200px */
top: -80px; /* 距离顶部150px */
width: 300px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.green-image1 {
position: absolute; /* 绝对定位 */
left: -50px; /* 距离左侧更左边,例如减小到 -100px */
top: -90px; /* 距离顶部更高,例如减小到 -100px */
width: 350px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.green-image2 {
position: absolute; /* 绝对定位 */
left: -20px; /* 距离左侧更左边,例如减小到 -100px */
top: -45px; /* 距离顶部更高,例如减小到 -100px */
width: 350px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.name {
position: absolute; /* 绝对定位 */
left: 20px; /* 距离左侧50px */
top:45px; /* 距离顶部50px */
font-size: 24px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#fdc904 ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.circle1 {
width: 250px; /* 圆形的宽度 */
height: 250px; /* 圆形的高度 */
background-color: #ffb6a4; /* 圆形的背景颜色 */
border: 5px solid #f1e029; /* 矩形的边框 */
box-shadow: 0px 0px 20px 10px rgba(0, 0, 0, 0.5); /* 添加阴影 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 50px;
top: 250px;
z-index: 3;
}
.hu-image {
position: absolute; /* 绝对定位 */
left: 45px; /* 距离左侧更左边,例如减小到 -100px */
top: 250px; /* 距离顶部更高,例如减小到 -100px */
width: 270px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 5; /* 设置z-index确保在前面 */
}
.hu-image2 {
position: absolute; /* 绝对定位 */
left: 65px; /* 距离左侧更左边,例如减小到 -100px */
top: 270px; /* 距离顶部更高,例如减小到 -100px */
width: 230px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 5; /* 设置z-index确保在前面 */
}
.dm-text {
position: absolute; /* 绝对定位 */
left: 75px; /* 距离左侧50px */
top:345px; /* 距离顶部50px */
font-size: 40px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#767676 ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 7;
opacity: 0.9;
}
.card-text {
position: absolute; /* 绝对定位 */
left: 200px; /* 距离左侧50px */
top:620px; /* 距离顶部50px */
font-size: 25px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#fdc904 ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 7;
opacity: 0.9;
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.grade1 {
position: absolute; /* 绝对定位 */
left: 20px; /* 距离左侧50px */
top:45px; /* 距离顶部50px */
font-size: 24px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#fdc904 ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}

@ -0,0 +1,39 @@
Page({
data: {
leaderboard: [], // 存储排行榜数据
},
onLoad() {
this.fetchLeaderboard();
},
goback() {
wx.navigateTo({
url: '/pages/student/student',
});
},
fetchLeaderboard() {
wx.request({
url: 'http://127.0.0.1:8000/api/leaderboard/', // 获取排行榜的 API
method: 'GET',
success: (res) => {
if (res.statusCode === 200) {
this.setData({
leaderboard: res.data, // 设置排行榜数据
});
} else {
wx.showToast({
title: '获取排行榜失败',
icon: 'none',
});
}
},
fail: () => {
wx.showToast({
title: '请求失败,请检查网络',
icon: 'none',
});
}
});
},
});

@ -0,0 +1,3 @@
{
"enablePullDownRefresh": true
}

@ -0,0 +1,39 @@
<!--pages/student/rank/rank.wxml-->
<view class="container" style="background-image: url('/image/rank背景.png');">
<image class="p1-image" src="/image/p1.png" mode="widthFix"></image>
<image class="p2-image" src="/image/p2.png" mode="widthFix"></image>
<image class="vs-image" src="/image/vs.png" mode="widthFix"></image>
<image class="rank1-image" src="/image/rank1.png" mode="widthFix"></image>
<view class="rectangle"></view>
<view class="rectangle-00"></view>
<view class="rectangle-01"></view>
<view class="rectangle-02"></view>
<view class="rectangle-03"></view>
<view class="rectangle-04"></view>
<view class="rectangle-05"></view>
<text class="rank-text" style="white-space: pre;"> 学生 积分 排行</text>
<view class="circle1"></view>
<view class="circle2"></view>
<view class="circle3"></view>
<view class="circle4"></view>
<view class="circle5"></view>
<image class="image1" src="/image/5.png" mode="widthFix"></image>
<image class="image2" src="/image/4.png" mode="widthFix"></image>
<image class="image3" src="/image/1.png" mode="widthFix"></image>
<image class="image4" src="/image/2.png" mode="widthFix"></image>
<image class="image5" src="/image/3.png" mode="widthFix"></image>
<image class="image6" src="/image/6.png" mode="widthFix"></image>
<block wx:for="{{leaderboard}}" wx:key="index">
<view>
<text class="text{{index + 1}}" style="white-space: pre;">
{{item.name}}</text>
<text class="text{{index + 6}}" style="white-space: pre;">
{{item.score}} {{index + 1}} </text>
</view>
</block>
<image class="fanhui-image" bindtap="goback" src="/image/fanhui.png" mode="widthFix"></image>
</view>

@ -0,0 +1,370 @@
/* pages/student/rank/rank.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.p1-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 500px; /* 距离顶部150px */
width: 200px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.p2-image {
position: absolute; /* 绝对定位 */
left: 160px; /* 距离左侧200px */
top: 480px; /* 距离顶部150px */
width: 240px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.vs-image {
position: absolute; /* 绝对定位 */
left: 120px; /* 距离左侧200px */
top: 530px; /* 距离顶部150px */
width: 200px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.rank1-image {
position: absolute; /* 绝对定位 */
left: 80px; /* 距离左侧200px */
top:0px; /* 距离顶部150px */
width: 200px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.rectangle {
position: absolute;
left: 30px; /* 矩形左上角的横坐标 */
top: 100px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 350px; /* 矩形的高度 */
background-color: rgba(132, 200, 200, 0.6); /* 原色透明度50% */
z-index: 1;
border: 13px solid #bd92f4; /* 矩形的边框 */
border-radius: 30px; /* 圆角边框 */
}
.rectangle-00 {
position: absolute;
left: 46px; /* 矩形左上角的横坐标 */
top: 155px; /* 矩形左上角的纵坐标 */
width: 274px; /* 矩形的宽度 */
height: 32px; /* 矩形的高度 */
background-color: #ececec;
z-index: 3;
border-radius: 10px; /* 圆角边框 */
opacity: 0.7;
}
.rectangle-01 {
position: absolute;
left: 43px; /* 矩形左上角的横坐标 */
top: 192px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 53px; /* 矩形的高度 */
background-color: #4a65b1;
z-index: 3;
opacity: 0.9;
}
.rectangle-02 {
position: absolute;
left: 43px; /* 矩形左上角的横坐标 */
top: 247px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 53px; /* 矩形的高度 */
background-color: #8a8eda;
z-index: 3;
opacity: 0.7;
}
.rectangle-03 {
position: absolute;
left: 43px; /* 矩形左上角的横坐标 */
top: 302px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 53px; /* 矩形的高度 */
background-color: #4a65b1;
z-index: 3;
opacity: 0.9;
}
.rectangle-04 {
position: absolute;
left: 43px; /* 矩形左上角的横坐标 */
top: 357px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 53px; /* 矩形的高度 */
background-color: #8a8eda;
z-index: 3;
opacity: 0.7;
}
.rectangle-05 {
position: absolute;
left: 43px; /* 矩形左上角的横坐标 */
top: 412px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 53px; /* 矩形的高度 */
background-color: #4a65b1;
z-index: 3;
opacity: 0.9;
border-radius: 7px; /* 圆角边框 */
}
.rank-text {
position: absolute; /* 绝对定位 */
left: 55px; /* 距离左侧50px */
top:140px; /* 距离顶部50px */
font-size: 18px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4d4dcd; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4
}
.circle1 {
width: 45px; /* 圆形的宽度 */
height: 45px; /* 圆形的高度 */
background-color: #cddf8a; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 50px;
top: 196px;
z-index: 3;
}
.circle2 {
width: 45px; /* 圆形的宽度 */
height: 45px; /* 圆形的高度 */
background-color:#cddf8a; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 50px;
top: 250px;
z-index: 3;
}
.circle3 {
width: 45px; /* 圆形的宽度 */
height: 45px; /* 圆形的高度 */
background-color: #cddf8a; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 50px;
top: 305px;
z-index: 3;
}
.circle4 {
width: 45px; /* 圆形的宽度 */
height: 45px; /* 圆形的高度 */
background-color: #cddf8a; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 50px;
top: 361px;
z-index: 3;
}
.circle5 {
width: 45px; /* 圆形的宽度 */
height: 45px; /* 圆形的高度 */
background-color: #cddf8a; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 50px;
top: 415px;
z-index: 3;
}
.image1 {
position: absolute; /* 绝对定位 */
left: 58px; /* 距离左侧200px */
top:203px; /* 距离顶部150px */
width: 30px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.image2 {
position: absolute; /* 绝对定位 */
left: 47px; /* 距离左侧200px */
top:246px; /* 距离顶部150px */
width: 52px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.image3 {
position: absolute; /* 绝对定位 */
left: 47px; /* 距离左侧200px */
top:292px; /* 距离顶部150px */
width: 52px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.image4 {
position: absolute; /* 绝对定位 */
left: 53px; /* 距离左侧200px */
top:359px; /* 距离顶部150px */
width: 38px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.image5 {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top:395px; /* 距离顶部150px */
width: 150px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.image6 {
position: absolute; /* 绝对定位 */
left: 60px; /* 距离左侧200px */
top:180px; /* 距离顶部150px */
width: 40px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.text1 {
position: absolute; /* 绝对定位 */
left: 65px; /* 距离左侧50px */
top:165px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text2 {
position: absolute; /* 绝对定位 */
left: 65px; /* 距离左侧50px */
top:220px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text3 {
position: absolute; /* 绝对定位 */
left: 65px; /* 距离左侧50px */
top:275px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text8 {
position: absolute; /* 绝对定位 */
left: 170px; /* 距离左侧50px */
top:275px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text4 {
position: absolute; /* 绝对定位 */
left: 65px; /* 距离左侧50px */
top:330px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text9 {
position: absolute; /* 绝对定位 */
left: 170px; /* 距离左侧50px */
top:330px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text5 {
position: absolute; /* 绝对定位 */
left: 65px; /* 距离左侧50px */
top:388px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text6 {
position: absolute; /* 绝对定位 */
left: 170px; /* 距离左侧50px */
top:165px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text7 {
position: absolute; /* 绝对定位 */
left: 170px; /* 距离左侧50px */
top:220px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text10 {
position: absolute; /* 绝对定位 */
left: 170px; /* 距离左侧50px */
top:388px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #f7f7f7; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}

@ -0,0 +1,18 @@
Page({
data: {},
onLoad() {
console.log('规则页面加载');
},
goBack() {
wx.navigateTo({
url: '/pages/student/student',
});
},
goTorule2() {
console.log('点击了rule2按钮'); // 添加调试信息
wx.navigateTo({
url: `/pages/student/rules/rule2/rule2`,
});
},
});

@ -0,0 +1,3 @@
{
"navigationBarTitleText": "游戏规则"
}

@ -0,0 +1,19 @@
<view class="container" style="background-image: url('/image/rule1背景.jpg');">
<view class="header">
<image class="title-image" src="/image/游戏规则.png" mode="widthFix"></image>
</view>
<view class="rules">
<view class="tab">
<text class="active">基础规则</text>
<text bindtap="goTorule2">进阶规则</text>
</view>
<view class="content">
<text>(1) 初始积分为0</text>
<text>(2) 每点到一次且到达课堂,即积分+1</text>
<text>(3) 点名回答问题时能够准确答复所提问的问题则加0.5分否则扣1分准备回答依据情况加0.5~3分。</text>
<text>(4) 积分越高,被点到的概率就越低。</text>
</view>
</view>
</view>
<image class="fanhui-image" bindtap="goBack" src="/image/fanhui2.png" mode="widthFix"></image>

@ -0,0 +1,68 @@
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.header {
text-align: center;
}
.title-image {
width: 500rpx;
max-height: 300px;
margin: -100px auto 0 auto; /* 向上移动20像素 */
}
.rules {
background-color:#d8bfab;
margin: -60px 50rpx 150rpx 50rpx;
border-radius: 34rpx;
padding-bottom: 30rpx;
}
.tab {
font-size: 40rpx;
display: flex;
justify-content: space-around;
background-color: #d8bfab;
padding: 65rpx 0rpx;
border-radius: 34rpx;
}
.tab text {
flex: 1;
text-align: center;
font-weight: bold;
color: #666;
}
.tab .active {
color: #333333;
text-decoration: underline; /* 添加下划线 */
}
.content {
margin: 0rpx 50rpx 90rpx 50rpx;
background-color: #b89172; /* 棕色背景 */
border-radius: 34rpx; /* 圆角 */
padding: 50rpx; /* 内边距,确保文本不靠边 */
}
.content text {
display: block;
color: #101010;
margin-bottom: 30rpx;
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}

@ -0,0 +1,15 @@
Page({
goBack() {
wx.navigateTo({
url: '/pages/student/student',
});
},
goTorule1() {
console.log('点击了rule1按钮'); // 添加调试信息
wx.navigateTo({
url: `/pages/student/rules/rule1/rule1`,
});
},
})

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

@ -0,0 +1,17 @@
<view class="container" style="background-image: url('/image/rule1背景.jpg');">
<view class="header">
<image class="title-image" src="/image/游戏规则.png" mode="widthFix"></image>
</view>
<view class="rules">
<view class="tab">
<text bindtap="goTorule1">基础规则</text>
<text class="active">进阶规则</text>
</view>
<view class="content">
<text><text class="bold">点名豁免卡:</text>学生可以使用积分购买“点名豁免卡”,在被点名时使用,可以避免回答问题。</text>
<text><text class="bold">积分抵押典当:</text>学生可以在回答问题前使用积分进行抵押如果老师给分在2分以上积分返还并增加如果老师给分在2分以下则抵押的积分被扣除。</text>
</view>
</view>
</view>
<image class="fanhui-image" bindtap="goBack" src="/image/fanhui2.png" mode="widthFix"></image>

@ -0,0 +1,70 @@
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.header {
text-align: center;
}
.title-image {
width: 500rpx;
max-height: 300px;
margin: -100px auto 0 auto; /* 向上移动20像素 */
}
.rules {
background-color:#d8bfab;
margin: -60px 50rpx 150rpx 50rpx;
border-radius: 34rpx;
padding-bottom: 30rpx;
}
.tab {
font-size: 40rpx;
display: flex;
justify-content: space-around;
background-color: #d8bfab;
padding: 65rpx 0rpx;
border-radius: 34rpx;
}
.tab text {
flex: 1;
text-align: center;
font-weight: bold;
color: #666;
}
.tab .active {
color: #333333;
text-decoration: underline; /* 添加下划线 */
}
.content {
margin: 0rpx 50rpx 90rpx 50rpx;
background-color: #b89172; /* 棕色背景 */
border-radius: 34rpx; /* 圆角 */
padding: 50rpx; /* 内边距,确保文本不靠边 */
}
.bold {
font-weight: bold; /* 这将使文本加粗 */
}
.content text {
display: block;
color: #101010;
margin-bottom: 30rpx;
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 0px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}

@ -0,0 +1,173 @@
Page({
data: {
studentName: '',
studentId: '',
avatar: '/image/4.png', // 默认头像
showModal: false, // 控制模态框显示
score: 0, // 学生积分
refreshing: false // 控制下拉刷新的状态
},
onLoad(options) {
const app = getApp();
const { fromIndex } = options; // 获取参数
if (fromIndex) {
// 清空全局变量和数据
app.globalData.studentInfo = null;
this.setData({
studentName: '',
studentId: '',
score: 0,
avatar: '/image/4.png'
});
} else if (app.globalData.studentInfo) {
const { studentName, studentId, score, avatar } = app.globalData.studentInfo;
this.setData({ studentName, studentId, score, avatar });
}
},
onShow() {
// 页面显示时只更新积分
this.updateScore();
},
showLoginModal() {
this.setData({ showModal: true });
},
handleInput(e) {
const { field } = e.currentTarget.dataset;
const value = e.detail.value;
this.setData({ [field]: value });
},
confirmInput() {
const { studentName, studentId } = this.data;
if (!studentName || !studentId) {
wx.showToast({ title: '请填写完整信息', icon: 'none' });
return;
}
this.setData({ showModal: false });
wx.request({
url: `http://127.0.0.1:8000/api/get_student_info/${studentId}/`,
method: 'GET',
success: (res) => {
if (res.statusCode === 200) {
this.setData({
score: res.data.score,
avatar: res.data.avatar || this.data.avatar // 更新头像
});
// 将学生信息存入全局变量
const app = getApp();
app.globalData.studentInfo = {
studentName,
studentId,
score: res.data.score,
avatar: this.data.avatar,
};
} else {
wx.showToast({ title: '信息错误,请重试', icon: 'none' });
}
},
fail: (error) => {
wx.showToast({ title: '无法获取学生信息,请检查网络连接', icon: 'none' });
}
});
},
cancelInput() {
this.setData({ showModal: false });
},
// 下拉刷新功能
onRefresh() {
this.setData({ refreshing: true }); // 开始刷新
this.updateScore(); // 更新积分
},
updateScore() {
const { studentId } = this.data;
if (!studentId) {
// wx.showToast({ title: '学生 ID 丢失', icon: 'none' });
this.setData({ refreshing: false }); // 刷新结束
return;
}
wx.request({
url: `http://127.0.0.1:8000/api/get_student_info/${studentId}/`,
method: 'GET',
success: (res) => {
console.log(res.data); // 打印 API 返回的数据
if (res.statusCode === 200) {
this.setData({
score: res.data.score,
refreshing: false // 刷新结束
});
} else {
wx.showToast({ title: '更新失败', icon: 'none' });
this.setData({ refreshing: false }); // 刷新结束
}
},
fail: (error) => {
wx.showToast({ title: '请求失败,请检查网络', icon: 'none' });
this.setData({ refreshing: false }); // 刷新结束
}
});
},
// 上传头像
uploadAvatar() {
wx.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
this.setData({ avatar: tempFilePath });
},
fail: (error) => {
wx.showToast({ title: '上传失败,请重试', icon: 'none' });
}
});
},
// 跳转到点名功能
rollCall() {
wx.navigateTo({
// url: '/pages/student/dm/dm?studentId=' + this.data.studentId,
url: `/pages/student/dm/dm?studentId=${this.data.studentId}&studentName=${this.data.studentName}&score=${this.data.score}`,
});
},
goBack() {
wx.navigateTo({
url: '/pages/index/index',
});
},
// 跳转到排行榜
goTorank() {
console.log('点击了排行榜按钮'); // 添加调试信息
wx.navigateTo({
url: '/pages/student/rank/rank',
});
},
// 跳转到典当页面
goToPledge() {
console.log('点击了典当按钮'); // 添加调试信息
wx.navigateTo({
url: `/pages/student/diandang/dd-yes/dd-yes?studentId=${this.data.studentId}&studentName=${this.data.studentName}`,
});
},
goToguize() {
console.log('点击了规则按钮'); // 添加调试信息
wx.navigateTo({
url: `/pages/student/rules/rule1/rule1`,
});
},
});

@ -0,0 +1,3 @@
{
"enablePullDownRefresh": true
}

@ -0,0 +1,50 @@
<!--pages/student/student.wxml-->
<!-- 自定义模态框 -->
<view wx:if="{{showModal}}" class="modal">
<view class="modal-content">
<view class="input-container">
<text class="label">学号:</text>
<input class="input-field" type="text" placeholder="请输入学号" bindinput="handleInput" data-field="studentId" />
</view>
<view class="input-container">
<text class="label">姓名:</text>
<input class="input-field" type="text" placeholder="请输入姓名" bindinput="handleInput" data-field="studentName" />
</view>
<view class="input-container">
<text class="label">上传头像:</text>
<button class="upload-button" bindtap="uploadAvatar">选择图片</button>
</view>
<button class="confirm-button" bindtap="confirmInput">确定</button>
<button class="cancel-button" bindtap="cancelInput">取消</button>
</view>
</view>
<scroll-view
class="scroll-view"
scroll-y="true"
enable-back-to-top
bindrefresh="onRefresh"
refreshing="{{refreshing}}">
<!-- 其他内容 -->
</scroll-view>
<view class="container" style="background-image: url('/image/学生背景.png');"></view>
<image class="lanren-image" src="/image/lanren.png" mode="widthFix"></image>
<image class="zi-image" src="/image/zi.png" mode="widthFix"></image>
<image class="dd-image" bindtap="goToPledge" src="/image/dd.png" mode="widthFix"></image>
<view class="circle1"></view>
<image class="guize-image" bindtap="goToguize" src="/image/guize.png" mode="widthFix"></image>
<text class="text1" bindtap="goToguize">规则</text>
<image class="paihang-image" bindtap="goTorank" src="/image/排行.png" mode="widthFix"></image>
<image class="yu-image" bindtap="rollCall" src="/image/yu.png" mode="widthFix"></image>
<view class="rectangle1"></view>
<view class="rectangle2"></view>
<image class="bao-image" src="{{avatar}}" mode="widthFix"></image>
<view class="rectangle3"></view>
<view class="rectangle4"></view>
<text class="text2"> {{studentName}}</text>
<text class="text3" bindtap="rollCall">点
名</text>
<text class="text4">当前积分: {{score}}</text>
<image class="fanhui-image" bindtap="goBack" src="/image/fanhui.png" mode="widthFix"></image>
<button class="submit-text" bindtap="showLoginModal">登录</button>

@ -0,0 +1,260 @@
/* pages/student/student.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center -50px;
}
.lanren-image {
position: absolute; /* 绝对定位 */
left: -33px; /* 距离左侧200px */
top: 452px; /* 距离顶部150px */
width: 410px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.zi-image {
position: absolute; /* 绝对定位 */
left: 160px; /* 距离左侧200px */
top: 132px; /* 距离顶部150px */
width: 230px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 1; /* 设置z-index确保在前面 */
}
.dd-image {
position: absolute; /* 绝对定位 */
left:16px; /* 距离左侧200px */
top: 366px; /* 距离顶部150px */
width: 100px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.circle1{
width: 110px; /* 圆形的宽度 */
height: 110px; /* 圆形的高度 */
background-color: #951d1d; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 10px;
top: 361px;
z-index: 1;
}
.guize-image {
position: absolute; /* 绝对定位 */
left:295px; /* 距离左侧200px */
top: 50px; /* 距离顶部150px */
width: 60px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.text1 {
position: absolute; /* 绝对定位 */
left: 288px; /* 距离左侧50px */
top:105px; /* 距离顶部50px */
font-size: 25px; /* 字号 */
margin: 10psx; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 2;
}
.paihang-image {
position: absolute; /* 绝对定位 */
left:8px; /* 距离左侧200px */
top: 250px; /* 距离顶部150px */
width: 120px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.yu-image {
position: absolute; /* 绝对定位 */
left:8px; /* 距离左侧200px */
top: 150px; /* 距离顶部150px */
width: 150px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.rectangle1 {
position: absolute;
left: 16px; /* 矩形左上角的横坐标 */
top: 35px; /* 矩形左上角的纵坐标 */
width: 85px; /* 矩形的宽度 */
height: 85px; /* 矩形的高度 */
background-color: #ffffff;
z-index: 3;
border-radius: 10px; /* 圆角边框 */
box-shadow: 0px 0px 10px 5px rgba(0, 0, 0, 0.5);
}
.rectangle2 {
position: absolute;
left: 22px; /* 矩形左上角的横坐标 */
top: 42px; /* 矩形左上角的纵坐标 */
width: 66px; /* 矩形的宽度 */
height: 66px; /* 矩形的高度 */
border: 3px solid #e1b474; /* 矩形的边框 */
z-index: 3;
border-radius: 10px; /* 圆角边框 */
}
.bao-image {
position: absolute; /* 绝对定位 */
left:9px; /* 距离左侧200px */
top: 28px; /* 距离顶部150px */
width: 100px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.rectangle3 {
position: absolute;
left: 90px; /* 矩形左上角的横坐标 */
top: 70px; /* 矩形左上角的纵坐标 */
width: 107px; /* 矩形的宽度 */
height: 50px; /* 矩形的高度 */
background-color: #ffffff;
z-index: 1;
border-radius: 10px; /* 圆角边框 */
}
.rectangle4 {
position: absolute;
left: 93px; /* 矩形左上角的横坐标 */
top: 75px; /* 矩形左上角的纵坐标 */
width: 100px; /* 矩形的宽度 */
height: 40px; /* 矩形的高度 */
background-color: #e1b474;
z-index: 1;
border-radius: 10px; /* 圆角边框 */
}
.text2 {
position: absolute; /* 绝对定位 */
left: 98px; /* 距离左侧50px */
top:65px; /* 距离顶部50px */
font-size: 22px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 7;
}
.text3 {
position: absolute; /* 绝对定位 */
left: 132px; /* 距离左侧50px */
top:145px; /* 距离顶部50px */
font-size: 22px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #ffffff; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 7;
}
.text4 {
position: absolute; /* 绝对定位 */
left: 82px; /* 距离左侧50px */
top:28px; /* 距离顶部50px */
font-size: 19px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #d56868; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 7;
}
.fanhui-image {
position: absolute; /* 绝对定位 */
left: 290px; /* 距离左侧200px */
top: -10px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 7; /* 设置z-index确保在前面 */
}
.bao-image {
position: absolute;
left: 9px;
top: 28px;
width: 100px;
height: 100px;
border-radius: 50%;
z-index: 7;
}
/* 模态框样式 */
.modal {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
display: flex;
justify-content: center;
align-items: center;
z-index: 8;
}
.modal-content {
background: #ffffff;
padding: 20px;
border-radius: 10px;
width: 80%;
z-index: 8;
}
/* 输入框容器 */
.input-container {
margin-top: 20px;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 8;
}
/* 标签样式 */
.label {
font-size: 20px;
color: #333;
z-index: 8;
}
/* 输入框样式 */
.input-field {
width: 60%;
padding: 10px;
font-size: 18px;
border: 1px solid #ddd;
border-radius: 5px;
z-index: 8;
}
/* 按钮样式 */
.upload-button {
margin-left: 10px;
z-index: 8;
}
.confirm-button, .cancel-button {
margin-top: 20px;
background-color: #007aff;
color: #ffffff;
padding: 10px;
border-radius: 5px;
z-index: 8;
}
.submit-text {
text-align: center; /* 文本水平居中 */
line-height: 50px; /* 设置行高为按钮高度以实现垂直居中 */
/* 其他属性保持不变 */
background-color: #e1b474;
border: 5px solid #ffffff; /* 设置边框颜色和宽度 */
border-radius: 15px; /* 设置圆角边框 */
width: -80px; /* 设置宽度 */
height: 50px; /* 设置高度 */
position: absolute; /* 绝对定位 */
left: 98px; /* 距离左侧50px */
top:600px; /* 距离顶部50px */
font-size: 22px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
z-index: 7;
}

@ -0,0 +1,99 @@
Page({
data: {
studentId: '',
studentName: '',
score: 0.0,
},
onLoad(options) {
this.setData({
studentId: options.studentId,
});
this.fetchStudentInfo();
},
// 获取学生姓名和积分
fetchStudentInfo() {
console.log("Student ID:", this.data.studentId); // 检查 studentId 的值
wx.request({
url: `http://127.0.0.1:8000/api/get_student_info/${this.data.studentId}/`, // 拼接 student_id
method: 'GET',
success: (res) => {
if (res.statusCode === 200 && res.data) {
this.setData({
studentName: res.data.name,
score: res.data.score,
});
} else if (res.data.error) {
wx.showToast({
title: res.data.error,
icon: 'none',
});
}
},
fail: (error) => {
console.error('获取学生信息失败:', error);
wx.showToast({
title: '获取学生信息失败',
icon: 'none',
});
},
});
},
// 加分
addScore() {
this.updateScore(1);
},
// 减分
reduceScore() {
this.updateScore(-1);
},
// 更新分数到数据库
updateScore(change) {
const currentScore = parseFloat(this.data.score); // 转换为数字
const newScore = (currentScore + change).toFixed(1); // 保留一位小数
wx.request({
url: 'http://127.0.0.1:8000/api/update_student_score/',
method: 'POST',
data: {
student_id: this.data.studentId,
score: parseFloat(newScore), // 确保发送为浮点数
},
success: (res) => {
if (res.data.success) {
this.setData({ score: parseFloat(newScore) }); // 更新状态
wx.showToast({
title: change > 0 ? '加分成功' : '扣分成功',
icon: 'success',
});
} else {
wx.showToast({
title: '更新失败',
icon: 'none',
});
}
},
fail: (error) => {
console.error('更新分数失败:', error);
},
});
},
// 跳转到排行榜
goTorank() {
console.log('点击了排行榜按钮'); // 添加调试信息
wx.navigateTo({
url: '/pages/teacher/Trank/rank-Mode1/rank-Mode1',
});
},
goBack() {
wx.navigateTo({
url: '/pages/teacher/teacher',
});
},
});

@ -0,0 +1,23 @@
<!--pages/teacher/Mode-arrive/Mode-arrive.wxml-->
<view class="container" style="background-image: url('/image/Mode1.png');">
</view>
<image class="ball-image" src="/image/ball.png" mode="widthFix"></image>
<image class="back-image" bindtap="goBack" src="/image/back.png" mode="widthFix"></image>
<view class="circle"></view>
<image class="rank-image" bindtap="goTorank" src="/image/rank.png" mode="widthFix"></image>
<view class="rectangle">
<text class="text1" >
学生姓名: {{studentName}}
当前分数: {{score}}
该同学是否在教室并答到</text>
<label class="radio-label">
<input type="radio" name="choice" value="yes" class="radio-input" />
<view class="radio-custom" bindtap="addScore"></view>
<text class="radio-text" bindtap="addScore">是</text>
</label>
<label class="radio-label">
<input type="radio" name="choice" value="no" class="radio-input" />
<view class="radio-custom" bindtap="reduceScore"></view>
<text class="radio-text" bindtap="reduceScore">否</text>
</label>
</view>

@ -0,0 +1,106 @@
/* pages/teacher/Mode-arrive/Mode-arrive.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.ball-image {
position: absolute; /* 绝对定位 */
left: -30px; /* 距离左侧200px */
top: 370px; /* 距离顶部150px */
width: 450px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.back-image {
position: absolute; /* 绝对定位 */
left: 5px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.circle {
width: 65px; /* 圆形的宽度 */
height: 65px; /* 圆形的高度 */
background-color: #80acd2; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 300px;
top: 6px;
z-index: 3;
}
.rank-image {
position: absolute; /* 绝对定位 */
left: 300px; /* 距离左侧200px */
top: 15px; /* 距离顶部150px */
width: 65px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.rectangle {
position: absolute;
left: 30px; /* 矩形左上角的横坐标 */
top: 120px; /* 矩形左上角的纵坐标 */
width: 320px; /* 矩形的宽度 */
height: 180px; /* 矩形的高度 */
background-color: #ffffff; /* 原色透明度50% */
z-index: 2;
border-radius: 42px; /* 圆角边框 */
border: 1px solid #bbbbbb; /* 矩形的边框 */
box-shadow: 0px 0px 10px 10px rgba(0, 0, 0, 0.5); /* 添加阴影 */
display: flex; /* 使用 flexbox 布局 */
align-items: center; /* 垂直居中 */
justify-content: space-around; /* 水平分布 */
}
.radio-label {
display: flex;
align-items: center;
margin-right: 5px; /* 元素之间的间距 */
margin-top: 85px;
}
.radio-input {
display: none;
}
.radio-custom {
width: 20px;
height: 20px;
border: 2px solid #333;
border-radius: 50%;
position: relative;
margin-right: 5px;
margin-top:0px;
}
.radio-input:checked + .radio-custom {
border-color: #bd3124; /* 选中后边框颜色 */
}
.radio-input:checked + .radio-custom::after {
content: "";
display: block;
width: 12px;
height: 12px;
background-color: #1684fc; /* 选中后圆点颜色 */
border-radius: 50%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.text1 {
position: absolute; /* 绝对定位 */
left: 20px; /* 距离左侧50px */
top:-20px; /* 距离顶部50px */
font-size: 20px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 25px; /* 行间距 */
color:#4f4f4f ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}

@ -0,0 +1,125 @@
Page({
data: {
showModal:false,
showModalNoPledge: false, // 控制无典当信息弹窗的显示
studentId: '',
studentName: '',
questionScore: 0,// 教师输入的分数
currentScore: 0,
pledgeScore: 0,
pledgeStatus: 0,
updatedScore: 0, // 更新后的分数
},
onLoad(options) {
console.log('Received studentId:', options.studentId); // 检查参数传递是否成功
this.setData({
studentId: options.studentId,
});
},
// 处理输入的分数
handleInputScore(e) {
const value = e.detail.value;
const numericValue = Number(value);
// 验证输入是否为有效的数字
if (!isNaN(numericValue)) {
this.setData({
questionScore: numericValue, // 使用 Number 转换为数字
});
} else {
this.setData({
questionScore: 0, // 如果不是数字,重置为 0
});
}
},
submitScore() {
const { studentId, questionScore } = this.data;
console.log('请求数据:', { studentId, questionScore }); // 打印请求数据
// 积分必须是一个数字
if (isNaN(questionScore)) {
wx.showToast({
title: '请输入有效的积分',
icon: 'none',
});
return;
}
// 更新学生积分并处理典当
wx.request({
url: 'http://127.0.0.1:8000/api/update_question_score', // 你的后端 API 地址
method: 'POST',
data: {
studentId: this.data.studentId,
questionScore: this.data.questionScore,
},
success: (res) => {
if (res.statusCode === 200) {
wx.showToast({
title: '积分更新成功',
icon: 'success',
});
// 判断返回的数据中是否有典当信息
const { current_score, pledge_score, pledge_status, updated_score} = res.data;
if (pledge_score && pledge_status === 1) {
// 设置数据并弹出典当信息的弹窗
this.setData({
currentScore: current_score,
pledgeScore: pledge_score,
showModal: true, // 显示典当信息弹窗
});
} else {
this.setData({
updatedScore: updated_score,
showModalNoPledge: true, // 显示无典当信息弹窗
});
}
} else {
wx.showToast({
title: res.data.error || '更新失败',
icon: 'none',
});
}
},
fail: () => {
wx.showToast({
title: '请求失败,请检查网络',
icon: 'none',
});
}
});
},
// 关闭典当信息弹窗
closeModal() {
this.setData({
showModal: false,
});
},
// 关闭无典当信息弹窗
closeModalNoPledge() {
this.setData({
showModalNoPledge: false,
});
},
goTorank() {
console.log('点击了排行榜按钮'); // 添加调试信息
wx.navigateTo({
url: '/pages/teacher/Trank/rank-Mode2/rank-Mode2',
});
},
goBack() {
wx.navigateTo({
url: '/pages/teacher/teacher',
});
},
});

@ -0,0 +1,53 @@
<!--pages/teacher/Mode-arrive/Mode-arrive.wxml-->
<view class="container" style="background-image: url('/image/Mode2.png');">
<button class="confirm-button" bindtap="submitScore">确定</button>
</view>
<image class="back-image" bindtap="goBack" src="/image/back.png" mode="widthFix"></image>
<view class="circle"></view>
<image class="rank-image" bindtap="goTorank" src="/image/rank.png" mode="widthFix"></image>
<image class="nobody-image" src="/image/nobody.png" mode="widthFix"></image>
<view class="rectangle1"></view>
<view class="rectangle2"></view>
<text class="text1">重复问题</text>
<text class="text2">回答质量</text>
<view class="circle1">
<text class="grade1">+0.5</text>
</view>
<view class="circle2">
<text class="grade2">0.5~3</text></view>
<view class="circle3">
<text class="grade3">-1</text>
</view>
<view class="rectangle3">
<input
placeholder="请输入该同学回答问题总积分"
type="text"
bindinput="handleInputScore"
/>
</view>
<!-- 典当信息弹窗仅在showModal为true时显示 -->
<view wx:if="{{showModal}}">
<modal show="{{showModal}}" bindconfirm="closeModal"title="该学生典当信息">
<view>
<text>当前积分: {{currentScore}}
典当积分: {{pledgeScore}}</text>
</view>
</modal>
</view>
<!-- 典当信息弹窗仅在showModal为true时显示 -->
<view wx:if="{{showModalNoPledge}}">
<modal show="{{showModalNoPledge}}" bindconfirm="closeModalNoPledge"title="该学生没有进行典当">
<view>
<text>更新后的积分: {{updatedScore}}</text>
</view>
</modal>
</view>

@ -0,0 +1,207 @@
/* pages/teacher/Mode-arrive/Mode-arrive.wxss */
.container {
height: 100vh;
background-size: cover;
background-position: center;
}
.ball-image {
position: absolute; /* 绝对定位 */
left: -30px; /* 距离左侧200px */
top: 370px; /* 距离顶部150px */
width: 450px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.back-image {
position: absolute; /* 绝对定位 */
left: 5px; /* 距离左侧200px */
top: 0px; /* 距离顶部150px */
width: 70px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 2; /* 设置z-index确保在前面 */
}
.circle {
width: 65px; /* 圆形的宽度 */
height: 65px; /* 圆形的高度 */
background-color: #80acd2; /* 圆形的背景颜色 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 300px;
top: 6px;
z-index: 3;
}
.rank-image {
position: absolute; /* 绝对定位 */
left: 300px; /* 距离左侧200px */
top: 15px; /* 距离顶部150px */
width: 65px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.nobody-image {
position: absolute; /* 绝对定位 */
left: -8px; /* 距离左侧200px */
top: 45px; /* 距离顶部150px */
width: 400px; /* 图片宽度 */
height: auto; /* 图片高度自适应 */
z-index: 3; /* 设置z-index确保在前面 */
}
.rectangle1 {
position: absolute;
left: 90px; /* 矩形左上角的横坐标 */
top: 305px; /* 矩形左上角的纵坐标 */
width: 180px; /* 矩形的宽度 */
height: 60px; /* 矩形的高度 */
background-color: #ffb6a4;
z-index: 3;
border: 7px solid #78ba7d; /* 矩形的边框 */
}
.rectangle2 {
position: absolute;
left: 90px; /* 矩形左上角的横坐标 */
top: 425px; /* 矩形左上角的纵坐标 */
width: 180px; /* 矩形的宽度 */
height: 60px; /* 矩形的高度 */
background-color: #ffb6a4;
z-index: 3;
border: 7px solid #78ba7d; /* 矩形的边框 */
}
.text1 {
position: absolute; /* 绝对定位 */
left: 105px; /* 距离左侧50px */
top:310px; /* 距离顶部50px */
font-size: 28px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.text2 {
position: absolute; /* 绝对定位 */
left: 105px; /* 距离左侧50px */
top:430px; /* 距离顶部50px */
font-size: 28px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color: #4f4f4f; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.circle1 {
width: 60px; /* 圆形的宽度 */
height: 60px; /* 圆形的高度 */
background-color: #ffffff; /* 圆形的背景颜色 */
border: 5px solid #ffd67b; /* 矩形的边框 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left:45px;
top: 290px;
z-index: 3;
}
.circle2 {
width: 95px; /* 圆形的宽度 */
height: 55px; /* 圆形的高度 */
background-color: #ffffff; /* 圆形的背景颜色 */
border: 5px solid #ffd67b; /* 矩形的边框 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left: 10px;
top: 390px;
z-index: 3;
}
.circle3 {
width: 45px; /* 圆形的宽度 */
height: 45px; /* 圆形的高度 */
background-color: #ffffff; /* 圆形的背景颜色 */
border: 5px solid #ffd67b; /* 矩形的边框 */
border-radius: 50%; /* 将矩形变成圆形 */
position: absolute;
left:255px;
top: 350px;
z-index: 3;
}
.grade1 {
position: absolute; /* 绝对定位 */
left: -20px; /* 距离左侧50px */
top:0px; /* 距离顶部50px */
font-size: 22px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#78ba7d ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.grade2 {
position: absolute; /* 绝对定位 */
left: -5px; /* 距离左侧50px */
top:-5px; /* 距离顶部50px */
font-size: 22px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#78ba7d ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.grade3 {
position: absolute; /* 绝对定位 */
left: -10px; /* 距离左侧50px */
top:-10px; /* 距离顶部50px */
font-size: 26px; /* 字号 */
margin: 10px; /* 边距 */
line-height: 20px; /* 行间距 */
color:#bd3124 ; /* 文本颜色 */
font-weight: bold;
padding: 10px; /* 内边距 */
z-index: 4;
opacity: 0.9;
}
.rectangle3 {
position: absolute;
left: 45px; /* 矩形左上角的横坐标 */
top: 535px; /* 矩形左上角的纵坐标 */
width: 280px; /* 矩形的宽度 */
height: 50px; /* 矩形的高度 */
background-color: #ffffff;
z-index: 3;
border: 1px solid #bbbbbb; /* 矩形的边框 */
border-radius: 46px;
box-shadow: 0px 0px 5px 5px rgba(0, 0, 0, 0.5); /* 添加阴影 */
}
input {
margin-top: 10px;
margin-left: 30px;
font-size: 16px;
color: #333;
padding: 5px;
z-index: 4;
}
.confirm-button {
width: 80px !important; /* 用于测试优先级问题 */
left: -5px; /* 距离左侧50px */
top:520px; /* 距离顶部50px */
padding: 5px; /* 内边距,控制按钮大小 */
font-size: 18px; /* 字号 */
color: #fcfcfc; /* 按钮文本颜色 */
background-color: #3662e5; /* 按钮背景颜色 */
border: 3px solid #e7cd2d; /* 矩形的边框 */
border-radius: 7px ; /* 圆角边框 */
cursor: pointer; /* 鼠标悬停时变成手指形状 */
z-index: 7
}
/* 悬停效果 */
.confirm-button:hover {
background-color: #0056b3; /* 悬停时按钮颜色 */
}

@ -0,0 +1,66 @@
// pages/teacher/Mode-quiz_2/Mode-quiz_2.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save