├── pages
├── teacher
│ ├── index.json
│ ├── index.wxss
│ ├── index.wxml
│ └── index.js
├── rateandcomment
│ ├── index.json
│ ├── index.wxss
│ ├── index.wxml
│ └── index.js
├── logs
│ ├── logs.json
│ ├── logs.wxss
│ ├── logs.wxml
│ └── logs.js
├── .DS_Store
└── index
│ ├── index.wxss
│ ├── index.wxml
│ └── index.js
├── .DS_Store
├── images
└── nini.jpeg
├── app.wxss
├── app.json
├── utils
└── util.js
├── project.config.json
├── app.js
├── README.md
├── LICENSE
├── weui.wxss
└── zan.wxss
/pages/teacher/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/pages/rateandcomment/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/pages/logs/logs.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "查看启动日志"
3 | }
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NUAA-Open-Source/Mini-Program/master/.DS_Store
--------------------------------------------------------------------------------
/pages/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NUAA-Open-Source/Mini-Program/master/pages/.DS_Store
--------------------------------------------------------------------------------
/images/nini.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/NUAA-Open-Source/Mini-Program/master/images/nini.jpeg
--------------------------------------------------------------------------------
/pages/logs/logs.wxss:
--------------------------------------------------------------------------------
1 | .log-list {
2 | display: flex;
3 | flex-direction: column;
4 | padding: 40rpx;
5 | }
6 | .log-item {
7 | margin: 10rpx;
8 | }
9 |
--------------------------------------------------------------------------------
/pages/logs/logs.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{index + 1}}. {{log}}
5 |
6 |
7 |
--------------------------------------------------------------------------------
/pages/rateandcomment/index.wxss:
--------------------------------------------------------------------------------
1 | /* pages/rateandcomment/index.wxss */
2 | .bottomline {
3 | position: fixed;
4 | bottom: 0;
5 | width: 100%;
6 | }
7 | .lable_name {
8 | color: #000;
9 | font-size:50px;
10 | }
--------------------------------------------------------------------------------
/app.wxss:
--------------------------------------------------------------------------------
1 | /**app.wxss**/
2 | @import 'weui.wxss';
3 | @import 'zan.wxss';
4 | .container {
5 | height: 100%;
6 | display: flex;
7 | flex-direction: column;
8 | align-items: center;
9 | justify-content: space-between;
10 | padding: 200rpx 0;
11 | box-sizing: border-box;
12 | }
13 |
--------------------------------------------------------------------------------
/pages/logs/logs.js:
--------------------------------------------------------------------------------
1 | //logs.js
2 | const util = require('../../utils/util.js')
3 |
4 | Page({
5 | data: {
6 | logs: []
7 | },
8 | onLoad: function () {
9 | this.setData({
10 | logs: (wx.getStorageSync('logs') || []).map(log => {
11 | return util.formatTime(new Date(log))
12 | })
13 | })
14 | }
15 | })
16 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/index/index",
4 | "pages/logs/logs",
5 | "pages/teacher/index",
6 | "pages/rateandcomment/index"
7 | ],
8 | "window": {
9 | "backgroundTextStyle": "light",
10 | "navigationBarBackgroundColor": "#fff",
11 | "navigationBarTitleText": "WeChat",
12 | "navigationBarTextStyle": "black"
13 | }
14 | }
--------------------------------------------------------------------------------
/utils/util.js:
--------------------------------------------------------------------------------
1 | const formatTime = date => {
2 | const year = date.getFullYear()
3 | const month = date.getMonth() + 1
4 | const day = date.getDate()
5 | const hour = date.getHours()
6 | const minute = date.getMinutes()
7 | const second = date.getSeconds()
8 |
9 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
10 | }
11 |
12 | const formatNumber = n => {
13 | n = n.toString()
14 | return n[1] ? n : '0' + n
15 | }
16 |
17 | module.exports = {
18 | formatTime: formatTime
19 | }
20 |
--------------------------------------------------------------------------------
/project.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "description": "项目配置文件。",
3 | "setting": {
4 | "urlCheck": false,
5 | "es6": true,
6 | "postcss": true,
7 | "minified": true,
8 | "newFeature": true
9 | },
10 | "compileType": "miniprogram",
11 | "libVersion": "1.7.0",
12 | "appid": "wx99d84b2644e88fca",
13 | "projectname": "Mini-Program",
14 | "condition": {
15 | "search": {
16 | "current": -1,
17 | "list": []
18 | },
19 | "conversation": {
20 | "current": -1,
21 | "list": []
22 | },
23 | "miniprogram": {
24 | "current": -1,
25 | "list": []
26 | }
27 | }
28 | }
--------------------------------------------------------------------------------
/pages/index/index.wxss:
--------------------------------------------------------------------------------
1 | /**index.wxss**/
2 | .weui-cell{
3 | padding: 0
4 | }
5 | .weui-cells{
6 | margin-top: 0;
7 | }
8 | .picker{
9 | padding: 19rpx 26rpx;
10 | background-color: #FFFFFF;
11 | }
12 |
13 | .teacher-item{
14 | margin-bottom: 10rpx;
15 | display: flex;
16 | min-height: 10rpx;
17 | background-color: #FFFFFF;
18 | justify-content: center;
19 | align-items: center;
20 | text-align: center;
21 | font-size: 39rpx;
22 | color: #62B900;
23 | line-height: 2em;
24 | }
25 |
26 | .flex-wrp{
27 | display:flex;
28 | }
29 |
30 | .orderText{
31 | word-wrap:break-word;word-break:break-all;
32 | padding:5px;font-size:14px;
33 | }
34 | .weui-cell__ft{
35 | color:#000
36 | }
--------------------------------------------------------------------------------
/pages/teacher/index.wxss:
--------------------------------------------------------------------------------
1 | /* pages/teacher/index.wxss */
2 |
3 | /* 底栏 */
4 | .bottomline {
5 | position: fixed;
6 | bottom: 0;
7 | width: 100%;
8 | }
9 |
10 | /* 表单栏 */
11 |
12 | .weui-form-preview__label {
13 | min-width: 0;
14 | }
15 |
16 | .lable_name {
17 | color: #000;
18 | font-size:50px;
19 | }
20 |
21 | .weui-panel__hd {
22 | color: #000;
23 | }
24 |
25 | /* song */
26 | .flex-wrp{
27 | display: flex;
28 | }
29 |
30 | .rate-view{
31 | position: fixed;
32 | right: 0;
33 | display: flex;
34 | }
35 |
36 | .default-tri{
37 | margin: 5px;
38 | width: 0;
39 | height: 0;
40 | border-style: solid;
41 | border-width: 0 15px 15px 15px;
42 | border-color: transparent transparent #efefef transparent;
43 | }
44 |
45 | .select-tri{
46 | margin: 5px;
47 | width: 0;
48 | height: 0;
49 | border-style: solid;
50 | border-width: 0 15px 15px 15px;
51 | border-color: transparent transparent #62b900 transparent;
52 | }
53 |
54 | /* 分数居中 */
55 | .rateNumber{
56 | text-align: center
57 | }
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | //app.js
2 | App({
3 | onLaunch: function () {
4 | // 展示本地存储能力 存储log日志
5 | var logs = wx.getStorageSync('logs') || []
6 | logs.unshift(Date.now())
7 | wx.setStorageSync('logs', logs)
8 | wx.login({
9 | success: res => {
10 | // 发送 res.code 到后台换取 openId, sessionKey, unionId
11 | if (res.code) {
12 | //发起网络请求
13 | console.log("当前用户的res.code", res.code)
14 | wx.request({
15 | url: 'https://api.taxn.top/user/',
16 | data: {
17 | appid: '在此处填写appid',
18 | appsecret: '在此处填写secret',
19 | code: res.code
20 | },
21 | method: 'POST',
22 | header: {
23 | 'content-type': 'application/json' // 默认值
24 | },
25 | success: function (res) {
26 | console.log("当前用户的open_id", res.data)
27 | try {
28 | wx.setStorageSync('openid', res.data)
29 | } catch (e) {
30 | console.log('存储openid-user失败')
31 | }
32 | }
33 | })
34 | } else {
35 | console.log('获取用户登录态失败!' + res.errMsg)
36 | }
37 | }
38 | })
39 |
40 | },
41 | globalData: {
42 | userInfo: null,
43 | table: {
44 | "17": "航空宇航学院",
45 | "18": "能源与动力学院",
46 | "19": "自动化学院",
47 | "20": "电子信息工程学院",
48 | "21": "机电学院",
49 | "22": "材料科学与技术学院",
50 | "23": "民航学院",
51 | "24": "理学院",
52 | "25": "经济与管理学院",
53 | "26": "人文与社会科学学院",
54 | "27": "艺术学院",
55 | "28": "外国语学院",
56 | "29": "航天学院",
57 | "30": "计算机科学技术学院",
58 | "31": "马克思主义学院",
59 | "32": "国际教育学院",
60 | "32": "国际教育学院",
61 | "33": "体育部",
62 | "34": "军事教研室",
63 | "35": "学生处",
64 | "36": "图书馆",
65 | "37": "信息化技术中心/工程训练中心",
66 | "38": "电工电子实验中心",
67 | "39": "教务处",
68 | "40": "基础训练",
69 | "41": "竞赛活动"
70 | }
71 | }
72 | })
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 匿匿评 小程序端
2 | ### 关于本项目:
3 | _计划于2018年春季学期上线的_
4 | 南京航空航天大学 **非官方匿名教评**系统
5 | > 我们不要上枯燥无味,只念PPT,学不到东西的课。
6 | > 我们不要成为一个没有思想,只是默默接受一切事物的机器人。
7 | > 我们希望南航大优秀的教师能得到赞扬,让更多人学到受益终身的思想与真正有用的知识。
8 | > 我们也希望一些“不合格”的老师能够反省自己的教学方法与教学态度。
9 |
10 | ### 项目计划 [项目主页](https://github.com/NiNiPing)
11 |
12 | * [x] [程序后端](https://github.com/NiNiPing/Server)
13 | * [x] 微信小程序客户端
14 | * [ ] 移动web端
15 |
16 | ### 这个项目是干什么的?
17 | 1. 一个对教师进行匿名教评的平台,你可以获取你感兴趣的老师的评分,上课点名情况以及最重要的同学们对老师的评价。
18 | 2. 在这里我们不记录个人信息,你可以毫无顾忌地说出你的真正想法并打出你对老师的分数。如果你赞同或者不赞同别人的评价,可以为他的评论 加分 或者 减分。
19 |
20 | ### 为什么要做这个项目
21 | 1. 相比于其它领域,学生选课这件事儿似乎还停留在一个很原始的阶段。比如:网上买东西时,我们可以借助电商的评价体系,在购买商品之前就对商品的好坏做出一个判断;外出吃饭时,我们可以使用美团等网站来选择服务好、味道好的餐厅。
22 | 2. 选课时,我们对老师的甄别目前能够依靠的仅仅是同学们中间的口口相传。对于大部分老师的教学水平和质量我们无法预先知道。甚至有时候在别人的口中,我们听到了一个与真实情况相反的评价。我们停留在了一个好像“先买后用、无法退货”的局面。
23 | 3. 原有的教评系统与学号挂钩,且多为学院强制评教。无法获得真实的反馈信息,学生根本不知道自己投的票有什么用,有些教的差的老师也堂而皇之的年年坑人。**南航无法形成一个老师教学 学生评教 老师改进教学的正反馈**
24 | 4. 南航大将在以后进行开放性选课,必修课的老师也是可以选择的。我们希望为广大南航学子有一个参考,从而提升全南航老师的教学水平。
25 |
26 | ### 小程序界面展示
27 |
28 | 注:展示界面中对老师的评价均为模拟测试。
29 |
30 | #### 1.学院筛选与按照热度,评分,拼音排序 包含 1627 条 教师数据[了解我们如何获取全部老师信息](https://github.com/NiNiPing/teacherinfo)
31 |
32 | 
33 | #### 2. 拼音模糊搜索教师
34 | 
35 | #### 3. 对教师的进行评分与评价
36 | 
37 | #### 4. 对用户评论进行点赞与反对的支持
38 | 
39 | #### 5. 防刷分与刷评论
40 | 
41 |
42 | ### 如何复现
43 | **由于项目中 防刷分与刷评 论加入了对微信用户openid的验证。复现有两种方式**
44 | [查看微信官方文档了解openid](https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxchecksessionobject)
45 | 1. 申请小程序的开发权限并在app.js的wx.login模块加入appid与appsecrt。并且勾选微信开发工具中不校验安全域名的选项。
46 |
47 | 
48 |
49 |
50 | 2.联系我们。
51 |
52 | ### TODO
53 | * [ ] 更多评价方式
54 | * [ ] 更加好看的UI
55 | * [ ] 更多的教师数据展示
56 | * [ ] 分享界面
57 | * [ ] **推广**
58 |
59 | ### 联系方式
60 | 对于功能与意见的反馈可以直接在 **issue** 里面反应。我们很希望我们这个项目可以得到大家的支持与意见。如果你想加入我们的团队(**运营,代码,美工,开发,产品都可以加入进来**)也请直接联系我们。
61 |
62 | Email:wongguobin@gmail.com
63 |
64 |
65 |
--------------------------------------------------------------------------------
/pages/rateandcomment/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{teacherName}}
10 |
11 |
12 |
13 |
14 |
15 | 教师评分
16 |
17 |
18 |
19 | 分数
20 |
21 |
22 |
23 | {{rateNumbers[rateNumbersindex]}}分
24 |
25 |
26 |
27 |
28 | 点名率统计
29 |
30 |
31 | 该老师经常点名
32 |
33 |
34 |
35 |
36 |
37 |
38 | 对教师的评价
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/pages/teacher/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{teacherAveragescore}}
10 | {{teacherName}}
11 |
12 |
13 |
14 |
15 | 南京航空航天大学
16 | {{teacherCollege}}
17 |
18 |
19 | 点名率
20 | {{teacherCheckinpercentage}}
21 |
22 |
23 | 排名
24 | {{teacherRate}}
25 |
26 |
27 | 参与评分人数
28 | {{commentData.length}}
29 |
30 |
31 |
32 |
33 |
34 | {{commentData.length}}个评论
35 |
36 |
37 |
38 | {{commentData[index].content}}
39 |
40 | 发布于{{commentData[index].edit_time}}
41 | 时间
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | {{commentData[index].rate}}
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
63 |
64 |
65 |
66 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/pages/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
17 |
18 | 取消
19 |
20 |
21 |
22 |
23 |
24 |
25 | {{item.average_score}}
26 |
27 |
28 | {{item.name}}
29 | {{item.college}}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | 找不到老师?
39 | 帮助我们完善信息,让更多人获益
40 |
41 |
42 |
43 |
44 |
45 |
60 |
61 |
62 |
63 |
64 |
65 | 当前学院
66 |
67 |
68 |
69 | {{array[teacherIdx].name}}
70 |
71 |
72 |
73 |
74 |
75 |
76 | {{ordering[orderIdx].id}}排序
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | {{teacher.name}}
85 |
86 |
87 |
88 |
89 |
95 |
96 |
--------------------------------------------------------------------------------
/pages/index/index.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | //获取应用实例
3 | const app = getApp()
4 |
5 | Page({
6 | data: {
7 | inputShowed: false,
8 | inputVal: "", //当前输入的查询数据
9 | searchData: {},
10 | //song
11 | teacherIdx: "0",
12 | orderIdx: "0",
13 | ordering: [
14 | { "id": "热度", "name": "ordering=hot" },
15 | { "id": "评分", "name": "ordering=rate" },
16 | { "id": "拼音", "name": "ordering=pinyin" }
17 | ],
18 | teacherList: [],
19 | array: [
20 | { "id": "16", "name": "全部" },
21 | { "id": "17", "name": "航空宇航学院" },
22 | { "id": "18", "name": "能源与动力学院" },
23 | { "id": "19", "name": "自动化学院" },
24 | { "id": "20", "name": "电子信息工程学院" },
25 | { "id": "21", "name": "机电学院" },
26 | { "id": "22", "name": "材料科学与技术学院" },
27 | { "id": "23", "name": "民航学院" },
28 | { "id": "24", "name": "理学院" },
29 | { "id": "25", "name": "经济与管理学院" },
30 | { "id": "26", "name": "人文与社会科学学院" },
31 | { "id": "27", "name": "艺术学院" },
32 | { "id": "28", "name": "外国语学院" },
33 | { "id": "29", "name": "航天学院" },
34 | { "id": "30", "name": "计算机科学技术学院" },
35 | { "id": "31", "name": "马克思主义学院" },
36 | { "id": "32", "name": "国际教育学院" },
37 | { "id": "32", "name": "国际教育学院" },
38 | { "id": "36", "name": "图书馆" },
39 | { "id": "37", "name": "信息化技术中心/工程训练中心" },
40 | { "id": "38", "name": "电工电子实验中心" },
41 | { "id": "39", "name": "教务处" },
42 | { "id": "40", "name": "基础训练" },
43 | { "id": "41", "name": "竞赛活动" }
44 | ]
45 |
46 | },
47 | //song
48 | bindOrderChange: function (e) {
49 | console.log('排序picker发送选择改变,携带值为', e.detail.value);
50 | this.setData({
51 | orderIdx: e.detail.value
52 | });
53 | var that = this;
54 | var teacherList = [];
55 |
56 | var requestUrl = 'https://api.taxn.top/teacher/?';
57 | requestUrl += this.data.teacherIdx == 0 ? '' : 'college=' + this.data.array[this.data.teacherIdx].id + '&';
58 | requestUrl += this.data.ordering[this.data.orderIdx].name;
59 | wx.request({
60 | url: requestUrl,
61 | data: {
62 | limit: 8
63 | },
64 | success: function (result) {
65 | // 获取当前页的老师的信息
66 | for (var i = 0; i < result.data.results.length; i++) {
67 | teacherList.push(result.data.results[i]);
68 | }
69 | that.setData({
70 | teacherList: teacherList,
71 | })
72 | },
73 |
74 | fail: function ({ errMsg }) {
75 | console.log('request fail', errMsg)
76 | }
77 | })
78 |
79 | },
80 | bindTeacherChange: function (e) {
81 | console.log('学院picker发送选择改变,携带值为', e.detail.value);
82 | this.setData({
83 | teacherIdx: e.detail.value
84 | });
85 |
86 | var that = this;
87 | var teacherList = [];
88 |
89 | var requestUrl = 'https://api.taxn.top/teacher/?';
90 | requestUrl += this.data.teacherIdx == 0 ? '' : 'college=' + this.data.array[this.data.teacherIdx].id + '&';
91 | requestUrl += this.data.ordering[this.data.orderIdx].name;
92 | wx.request({
93 | url: requestUrl,
94 |
95 | data: {
96 | limit:8
97 | },
98 | success: function (result) {
99 | // 获取当前页的老师的信息
100 | for (var i = 0; i < result.data.results.length; i++) {
101 | teacherList.push(result.data.results[i]);
102 | }
103 | that.setData({
104 | teacherList: teacherList,
105 | })
106 | console.log('request success', result)
107 | },
108 |
109 | fail: function ({ errMsg }) {
110 | console.log('request fail', errMsg)
111 | }
112 | })
113 | },
114 | // 跳转到老师详情的页面
115 | selectTeacher: function (e) {
116 | console.log('../teacher/details?search=' + this.data.teacherList[e.currentTarget.id].pinyin + '&ordering=pinyin');
117 | wx.navigateTo({
118 | url: '../teacher/index?id=' + this.data.teacherList[e.currentTarget.id].id,
119 | })
120 | },
121 | //事件处理函数
122 | bindViewTap: function () {
123 | wx.navigateTo({
124 | url: '../logs/logs'
125 | })
126 | },
127 |
128 | onLoad: function () {
129 | var that = this;
130 | var teacherList = [];
131 | wx.request({
132 | url: 'https://api.taxn.top/teacher/?ordering=hot',
133 | data: {
134 | limit: 8
135 | },
136 | success: function (result) {
137 | // 获取当前页的老师的信息
138 | for (var i = 0; i < result.data.results.length; i++) {
139 | teacherList.push(result.data.results[i]);
140 | }
141 | console.log("teacherList");
142 | console.log(teacherList);
143 | that.setData({
144 | teacherList: teacherList,
145 | })
146 | //console.log('request success', result)
147 | },
148 |
149 | fail: function ({ errMsg }) {
150 | console.log('request fail', errMsg)
151 | }
152 | })
153 | },
154 |
155 | showInput: function () {
156 | this.setData({
157 | inputShowed: true
158 | });
159 | },
160 | hideInput: function () {
161 | this.setData({
162 | inputVal: "",
163 | inputShowed: false
164 | });
165 | },
166 | clearInput: function () {
167 | this.setData({
168 | inputVal: ""
169 | });
170 | },
171 | inputTyping: function (e) {
172 | this.setData({
173 | inputVal: e.detail.value
174 | });
175 | this.searchInput(e.detail.value);
176 | },
177 |
178 | // 向服务器发送查找请求
179 | searchInput: function (inputString) {
180 | var searchResult = []
181 | var that = this
182 | wx.request({
183 | url: 'https://api.taxn.top/teacher/',
184 | data: {
185 | search: inputString,
186 | ordering: 'hot',
187 | limit: '15'
188 | },
189 | header: {
190 | 'content-type': 'application/json' // 默认值
191 | },
192 | success: function (res) {
193 | console.log(res.data)
194 | for (var i = 0; i < res.data.results.length; i++) {
195 | var searchResultKey = res.data.results[i];
196 | searchResultKey['college'] = app.globalData.table[searchResultKey['college']]
197 | searchResult.push(searchResultKey);
198 | }
199 | that.setData({
200 | searchData: searchResult
201 | });
202 | },
203 | })
204 | }
205 | //song
206 |
207 |
208 | })
209 |
--------------------------------------------------------------------------------
/pages/rateandcomment/index.js:
--------------------------------------------------------------------------------
1 | // pages/rateandcomment/index.js
2 | //给老师评分的界面
3 |
4 |
5 | Page({
6 |
7 | /**
8 | * 页面的初始数据
9 | */
10 | data: {
11 | rateNumbers: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
12 | rateNumbersindex: 0,
13 | teacherId: "",
14 | teacherName: "",
15 | //老师分数
16 | teacherRate: 1,
17 | //老师是否点名
18 | teacherCheckin: false,
19 | //老师的评价内容
20 | teacherComment: "",
21 | //当前评论的用户
22 | userOpenid:"",
23 | //判断是否是第一次评论
24 | //false是第一次评论 true状态的话就是修改评论
25 | newOrold:false, //!传入参数后改为字符串型
26 | myRateid:"",
27 | myCommentid:""
28 | },
29 |
30 | /**
31 | * 生命周期函数--监听页面加载
32 | */
33 | onLoad: function (options) {
34 | //绑定数据
35 | var that = this
36 | wx.setNavigationBarTitle({
37 | title: "给" + options.teacherName + "老师 打分"
38 | });
39 | that.setData({
40 | teacherId: options.teacherId,
41 | teacherName: options.teacherName,
42 | newOrold: options.newOrold,
43 | userOpenid: options.userOpenid
44 | });
45 | },
46 |
47 | /**
48 | * 生命周期函数--监听页面初次渲染完成
49 | */
50 | onReady: function () {
51 | console.log(this.data.newOrold)
52 | if (this.data.newOrold == "true"){
53 | this.searchRateandCommentid();
54 | }
55 | else{
56 |
57 | }
58 | },
59 | bindtap:function(){
60 | this.sendTeacherRate()
61 | this.sendTeachercomment()
62 |
63 | wx.showToast({
64 | title: '已完成',
65 | icon: 'success',
66 | duration: 5000
67 | });
68 |
69 | wx.redirectTo({
70 | url: '../index/index'
71 | })
72 | },
73 | //根据 useropid与teacherid求rateid commentid
74 | searchRateandCommentid:function(){
75 | var that = this
76 | console.log("run searchRateandCommentid")
77 | wx.request({
78 | url: 'https://api.taxn.top/rate/',
79 | data: {
80 | user: that.data.userOpenid,
81 | teacher: that.data.teacherId
82 | },
83 | header: {
84 | 'content-type': 'application/json'
85 | },
86 | success: function (res) {
87 | console.log("my rateid is "+res.data.results[0].id)
88 | that.setData({
89 | myRateid: res.data.results[0].id
90 | });
91 | }
92 | });
93 | wx.request({
94 | url: 'https://api.taxn.top/comment/',
95 | data: {
96 | user: that.data.userOpenid,
97 | teacher: that.data.teacherId
98 | },
99 | header: {
100 | 'content-type': 'application/json'
101 | },
102 | success: function (res) {
103 | console.log("my commentid is " + res.data.results[0].id)
104 | that.setData({
105 | myCommentid: res.data.results[0].id
106 | });
107 | }
108 | })
109 |
110 | },
111 | /**
112 | * 生命周期函数--监听页面显示
113 | */
114 | onShow: function () {
115 |
116 | },
117 |
118 | /**
119 | * 生命周期函数--监听页面隐藏
120 | */
121 | onHide: function () {
122 |
123 | },
124 |
125 | /**
126 | * 生命周期函数--监听页面卸载
127 | */
128 | onUnload: function () {
129 |
130 | },
131 |
132 | /**
133 | * 页面相关事件处理函数--监听用户下拉动作
134 | */
135 | onPullDownRefresh: function () {
136 |
137 | },
138 |
139 | /**
140 | * 页面上拉触底事件的处理函数
141 | */
142 | onReachBottom: function () {
143 |
144 | },
145 |
146 | /**
147 | * 用户点击右上角分享
148 | */
149 | onShareAppMessage: function () {
150 |
151 | },
152 | //教师分数
153 | bindChange: function (e) {
154 | this.setData({
155 | rateNumbersindex: e.detail.value,
156 | teacherRate: parseInt(e.detail.value) + 1
157 | })
158 | },
159 | //教师是否点名
160 | switchChange: function (e) {
161 | this.setData({
162 | teacherCheckin: e.detail.value
163 | })
164 | },
165 | //教师评价
166 | bindTextAreaBlur: function (e) {
167 | this.setData({
168 | teacherComment: e.detail.value
169 | })
170 | },
171 | //发送教师的评价分数与是否点名信息
172 | sendTeacherRate:function(){
173 | //创建分数情况
174 | if (this.data.newOrold == "false"){
175 | console.log('创建新的分数')
176 | wx.request({
177 | url: 'https://api.taxn.top/rate/',
178 | data: {
179 | user: this.data.userOpenid,
180 | rate: this.data.teacherRate,
181 | check_in: this.data.teacherCheckin,
182 | teacher: this.data.teacherId
183 | },
184 | method: 'POST',
185 | header: {
186 | 'content-type': 'application/json' // 默认值
187 | },
188 | success: function (res) {
189 | console.log(res.data)
190 | }
191 | })
192 | }
193 | //修改分数情况
194 | else{
195 | console.log('修改原有分数')
196 | wx.request({
197 | url: 'https://api.taxn.top/rate/' + this.data.myRateid +'/',
198 | data: {
199 | user: this.data.userOpenid,
200 | rate: this.data.teacherRate,
201 | check_in: this.data.teacherCheckin,
202 | teacher: this.data.teacherId
203 | },
204 | method: 'PUT',//注意是PUT
205 | header: {
206 | 'content-type': 'application/json' // 默认值
207 | },
208 | success: function (res) {
209 | console.log(res.data)
210 | }
211 | })
212 | }
213 |
214 | },
215 | //发送教师的评论
216 | sendTeachercomment:function(){
217 | //创建评论情况
218 | if (this.data.newOrold == "false") {
219 | console.log('创建新的评价')
220 | wx.request({
221 | url: 'https://api.taxn.top/comment/',
222 | data: {
223 | content: this.data.teacherComment,
224 | user: this.data.userOpenid,
225 | teacher: this.data.teacherId
226 | },
227 | method: 'POST',
228 | header: {
229 | 'content-type': 'application/json' // 默认值
230 | },
231 | success: function (res) {
232 | console.log(res.data)
233 | }
234 | })
235 | }
236 | //修改原有评论情况
237 | else {
238 | console.log('修改原有评论')
239 | wx.request({
240 | url: 'https://api.taxn.top/comment/' + this.data.myCommentid+'/',
241 | data: {
242 | content: this.data.teacherComment,
243 | user: this.data.userOpenid,
244 | teacher: this.data.teacherId
245 | },
246 | method: 'PUT',//注意是PUT
247 | header: {
248 | 'content-type': 'application/json' // 默认值
249 | },
250 | success: function (res) {
251 | console.log(res.data)
252 | }
253 | })
254 | }
255 | }
256 | })
--------------------------------------------------------------------------------
/pages/teacher/index.js:
--------------------------------------------------------------------------------
1 | // pages/teacher/index.js
2 | const app = getApp()
3 |
4 | Page({
5 |
6 | /**
7 | * 页面的初始数据
8 | */
9 | data: {
10 | teacherId : "",
11 | teacherName:"",
12 | teacherAveragescore:"",
13 | teacherCollege:"",
14 | teacherCheckinpercentage:"",
15 | teacherRate:"",
16 | commentData:[],
17 | selectIdx: 0,//选中哪一条评论
18 | likeClass: [],//每一条评论的点赞情况
19 | dislikeClass: [],//每一条评论的反对情况
20 | //判断是否是第一次评论
21 | //false是第一次评论 true状态的话就是修改评论
22 | newOrold:false,
23 | oldCommentRate:[],//用户之前点过赞或者反对的评论
24 | userOpenid:""
25 | },
26 |
27 | /**
28 | * 生命周期函数--监听页面加载
29 | */
30 | onLoad: function (options) {
31 | wx.showLoading({
32 | title: '加载中',
33 | })
34 | setTimeout(function () {
35 | wx.hideLoading()
36 | }, 2000)
37 |
38 | console.log(options)
39 | var that = this
40 | that.setData({
41 | teacherId : options.id,
42 | });
43 | that.searchTeacherbyid()
44 |
45 | try {
46 | var value = wx.getStorageSync('openid')
47 | if (value) {
48 | // Do something with return value
49 | that.setData({
50 | userOpenid: value.openid
51 | });
52 | }
53 | } catch (e) {
54 | // Do something when catch error
55 | console.log(e)
56 | }
57 |
58 | // // 获取当前用户-异步
59 | // wx.getStorage({
60 | // key: 'openid',
61 | // success: function (res) {
62 | // that.setData({
63 | // userOpenid: res.data['openid']
64 | // });
65 | // }
66 | // })
67 |
68 | that.judgeCommentRate()
69 | that.searchCommentdata()
70 | },
71 | //通过ID刷新老师界面
72 | searchTeacherbyid:function(){
73 | var that = this
74 | wx.request({
75 | url: 'https://api.taxn.top/teacher/' + that.data.teacherId+'/',
76 | success:function(res){
77 | that.setData({
78 | teacherName: res.data.name,
79 | teacherAveragescore: res.data.average_score,
80 | // searchResultKey['college'] = app.globalData.table[searchResultKey['college']
81 | teacherCollege: app.globalData.table[res.data.college],
82 | teacherCheckinpercentage: res.data.check_in_percentage,
83 | teacherRate: res.data.rate
84 | })
85 | wx.setNavigationBarTitle({
86 | title: that.data.teacherName + "老师 " + that.data.teacherAveragescore + "分"
87 | });
88 | }
89 | })
90 | },
91 | // 判断用户是否之前存在评价
92 | judgeNeworold:function(){
93 | var that = this
94 | wx.request({
95 | url: 'https://api.taxn.top/rate/',
96 | data: {
97 | teacher: that.data.teacherId,
98 | user: that.data.userOpenid
99 | },
100 | header: {
101 | 'content-type': 'application/json' // 默认值
102 | },
103 | success: function (res){
104 | console.log(res.data)
105 | if(res.data.count > 0){
106 | that.setData({
107 | newOrold:true
108 | })
109 | }
110 | }
111 | })
112 | },
113 | //载入评论数据
114 | searchCommentdata: function () {
115 | var that = this
116 |
117 | var searchResult
118 | // 获取当前老师ID的所有评论
119 | wx.request({
120 | url: 'https://api.taxn.top/comment/',
121 | data: {
122 | teacher: that.data.teacherId
123 | },
124 | header: {
125 | 'content-type': 'application/json' // 默认值
126 | },
127 | success: function (res) {
128 | var like = []
129 | var dislike = []
130 |
131 | searchResult = res.data.results
132 | console.log("searchResult",searchResult)
133 | console.log("oldCommentRate", that.data.oldCommentRate)
134 | for (var i = 0; i < searchResult.length; i++) {
135 | // 将编辑日期切分至年月日
136 | searchResult[i].edit_time = searchResult[i].edit_time.substr(0, searchResult[i].edit_time.indexOf('T'))
137 | // 载入当前用户以前点过赞的内容样式
138 | var j
139 | for (j = 0; j < that.data.oldCommentRate.length; j++) {
140 | if (searchResult[i].id == that.data.oldCommentRate[j].comment) {
141 | if (that.data.oldCommentRate[i].like == true) {
142 | like.push("select-tri")
143 | dislike.push("default-tri")
144 | } else {
145 | like.push("default-tri")
146 | dislike.push("select-tri")
147 | }
148 | break;
149 | }
150 | }
151 | if (j == that.data.oldCommentRate.length) {
152 | like.push("default-tri")
153 | dislike.push("default-tri")
154 | }
155 | }
156 | console.log(searchResult, like, dislike)
157 | that.setData({
158 | commentData: searchResult,
159 | likeClass: like,
160 | dislikeClass: dislike,
161 | })
162 | }
163 | })
164 | },
165 |
166 | likeTap: function (e) {
167 | var that = this
168 | // 如果该评论已经点过赞,则用PUT方法
169 | var method = "POST"
170 |
171 | var like = this.data.likeClass
172 | var dislike = this.data.dislikeClass
173 | var commentData = this.data.commentData
174 | // 如果已经点过赞,则无需再次PUT
175 | if (like[e.currentTarget.id] == "select-tri") return;
176 | // 如果之前反对过,则用PUT方法
177 | if (dislike[e.currentTarget.id] == "select-tri") method = "PUT"
178 |
179 | if (dislike[e.currentTarget.id] == "select-tri")
180 | commentData[e.currentTarget.id].rate = commentData[e.currentTarget.id].rate + 2
181 | else
182 | commentData[e.currentTarget.id].rate = commentData[e.currentTarget.id].rate + 1
183 |
184 | console.log("here")
185 | like[e.currentTarget.id] = "select-tri"
186 | dislike[e.currentTarget.id] = "default-tri"
187 | console.log(like, dislike);
188 |
189 | var _id //点赞或反对的id
190 | for (var i = 0; i < that.data.oldCommentRate.length; i++) {
191 | if (that.data.commentData[e.currentTarget.id].id == that.data.oldCommentRate[i].comment) {
192 | _id = that.data.oldCommentRate[i].id
193 | break;
194 | }
195 | }
196 | console.log("_id is ", _id)
197 |
198 | wx.request({
199 | url: 'https://api.taxn.top/roc/' + (method=="PUT"?_id +'/':"") ,
200 | data: {
201 | user: that.data.userOpenid,
202 | like: "true",
203 | comment: parseInt(that.data.commentData[e.currentTarget.id].id)
204 | },
205 | method: method,
206 | header: {
207 | 'content-type': 'application/json' // 默认值
208 | },
209 | success: function (res) {
210 | console.log(res)
211 | },
212 | fail: function (res) {
213 | console.log(res)
214 | }
215 | })
216 |
217 | that.setData({
218 | selectId: e.currentTarget.id,
219 | likeClass: like,
220 | dislikeClass: dislike,
221 | commentData: commentData
222 | })
223 | },
224 | // 反对的处理
225 | dislikeTap: function (e) {
226 | var that = this
227 | // 如果该评论已经反对过,则用PUT方法
228 | var method = "POST"
229 |
230 | var like = this.data.likeClass
231 | var dislike = this.data.dislikeClass
232 | var commentData = this.data.commentData
233 | // 如果已经反对过,则无需再次PUT
234 | if (dislike[e.currentTarget.id] == "select-tri") return;
235 | // 如果之前点过赞,则选择用PUT
236 | if (like[e.currentTarget.id] == "select-tri") method = "PUT"
237 |
238 | if (like[e.currentTarget.id] == "select-tri")
239 | commentData[e.currentTarget.id].rate = commentData[e.currentTarget.id].rate - 2
240 | else
241 | commentData[e.currentTarget.id].rate = commentData[e.currentTarget.id].rate - 1
242 |
243 | var _id //点赞或反对的id
244 | dislike[e.currentTarget.id] = "select-tri"
245 | like[e.currentTarget.id] = "default-tri"
246 | for (var i = 0;i