├── 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 | ![](http://p0xjmrizh.bkt.clouddn.com/15160083852364.gif) 33 | #### 2. 拼音模糊搜索教师 34 | ![](http://p0xjmrizh.bkt.clouddn.com/15160084090136.gif) 35 | #### 3. 对教师的进行评分与评价 36 | ![](http://p0xjmrizh.bkt.clouddn.com/15160084237196.gif) 37 | #### 4. 对用户评论进行点赞与反对的支持 38 | ![](http://p0xjmrizh.bkt.clouddn.com/15160084422650.gif) 39 | #### 5. 防刷分与刷评论 40 | ![](http://p0xjmrizh.bkt.clouddn.com/15160084523309.gif) 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 | ![](http://p0xjmrizh.bkt.clouddn.com/15160035478151.jpg) 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 |