diff --git a/.gitignore b/.gitignore
index f3dcd24..001d9f8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
api_docs/
.idea/
+res/
# Windows
[Dd]esktop.ini
diff --git a/cloudfunctions/callback/config.json b/cloudfunctions/callback/config.json
new file mode 100644
index 0000000..43aa5fc
--- /dev/null
+++ b/cloudfunctions/callback/config.json
@@ -0,0 +1,7 @@
+{
+ "permissions": {
+ "openapi": [
+ "customerServiceMessage.send"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/cloudfunctions/callback/index.js b/cloudfunctions/callback/index.js
new file mode 100644
index 0000000..c80f887
--- /dev/null
+++ b/cloudfunctions/callback/index.js
@@ -0,0 +1,26 @@
+const cloud = require('wx-server-sdk')
+
+cloud.init({
+ // API 调用都保持和云函数当前所在环境一致
+ env: cloud.DYNAMIC_CURRENT_ENV
+})
+
+// 云函数入口函数
+exports.main = async (event, context) => {
+
+ console.log(event)
+
+ const { OPENID } = cloud.getWXContext()
+
+ const result = await cloud.openapi.customerServiceMessage.send({
+ touser: OPENID,
+ msgtype: 'text',
+ text: {
+ content: '收到:' + event.Content,
+ }
+ })
+
+ console.log(result)
+
+ return result
+}
diff --git a/cloudfunctions/callback/package.json b/cloudfunctions/callback/package.json
new file mode 100644
index 0000000..2372c5c
--- /dev/null
+++ b/cloudfunctions/callback/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "callback",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "wx-server-sdk": "latest"
+ }
+}
\ No newline at end of file
diff --git a/cloudfunctions/echo/config.json b/cloudfunctions/echo/config.json
new file mode 100644
index 0000000..16348ce
--- /dev/null
+++ b/cloudfunctions/echo/config.json
@@ -0,0 +1,5 @@
+{
+ "permissions": {
+ "openapi": []
+ }
+}
diff --git a/cloudfunctions/echo/index.js b/cloudfunctions/echo/index.js
new file mode 100644
index 0000000..4f83878
--- /dev/null
+++ b/cloudfunctions/echo/index.js
@@ -0,0 +1,8 @@
+const cloud = require('wx-server-sdk')
+
+exports.main = async (event, context) => {
+ // event.userInfo 是已废弃的保留字段,在此不做展示
+ // 获取 OPENID 等微信上下文请使用 cloud.getWXContext()
+ delete event.userInfo
+ return event
+}
diff --git a/cloudfunctions/echo/package.json b/cloudfunctions/echo/package.json
new file mode 100644
index 0000000..89107db
--- /dev/null
+++ b/cloudfunctions/echo/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "echo",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "wx-server-sdk": "latest"
+ }
+}
\ No newline at end of file
diff --git a/cloudfunctions/openapi/config.json b/cloudfunctions/openapi/config.json
new file mode 100644
index 0000000..0074569
--- /dev/null
+++ b/cloudfunctions/openapi/config.json
@@ -0,0 +1,15 @@
+{
+ "permissions": {
+ "openapi": [
+ "wxacode.get",
+ "subscribeMessage.send",
+ "subscribeMessage.addTemplate",
+ "templateMessage.send",
+ "templateMessage.addTemplate",
+ "templateMessage.deleteTemplate",
+ "templateMessage.getTemplateList",
+ "templateMessage.getTemplateLibraryById",
+ "templateMessage.getTemplateLibraryList"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/cloudfunctions/openapi/index.js b/cloudfunctions/openapi/index.js
new file mode 100644
index 0000000..6d38b11
--- /dev/null
+++ b/cloudfunctions/openapi/index.js
@@ -0,0 +1,83 @@
+// 云函数入口文件
+const cloud = require('wx-server-sdk')
+
+cloud.init()
+
+// 云函数入口函数
+exports.main = async (event, context) => {
+ console.log(event)
+ switch (event.action) {
+ case 'requestSubscribeMessage': {
+ return requestSubscribeMessage(event)
+ }
+ case 'sendSubscribeMessage': {
+ return sendSubscribeMessage(event)
+ }
+ case 'getWXACode': {
+ return getWXACode(event)
+ }
+ case 'getOpenData': {
+ return getOpenData(event)
+ }
+ default: {
+ return
+ }
+ }
+}
+
+async function requestSubscribeMessage(event) {
+ // 此处为模板 ID,开发者需要到小程序管理后台 - 订阅消息 - 公共模板库中添加模板,
+ // 然后在我的模板中找到对应模板的 ID,填入此处
+ return '请到管理后台申请模板 ID 然后在此替换' // 如 'N_J6F05_bjhqd6zh2h1LHJ9TAv9IpkCiAJEpSw0PrmQ'
+}
+
+async function sendSubscribeMessage(event) {
+ const { OPENID } = cloud.getWXContext()
+
+ const { templateId } = event
+
+ const sendResult = await cloud.openapi.subscribeMessage.send({
+ touser: OPENID,
+ templateId,
+ miniprogram_state: 'developer',
+ page: 'pages/openapi/openapi',
+ // 此处字段应修改为所申请模板所要求的字段
+ data: {
+ thing1: {
+ value: '咖啡',
+ },
+ time3: {
+ value: '2020-01-01 00:00',
+ },
+ }
+ })
+
+ return sendResult
+}
+
+async function getWXACode(event) {
+ let {path} = event;
+ const wxacodeResult = await cloud.openapi.wxacode.get({
+ path
+ })
+
+ const fileExtensionMatches = wxacodeResult.contentType.match(/\/([^\/]+)/)
+ const fileExtension = (fileExtensionMatches && fileExtensionMatches[1]) || 'jpg'
+
+ const uploadResult = await cloud.uploadFile({
+ cloudPath: `images/wxacode/${path.replace(/[\/?&]/g,"_")}.${fileExtension}`,
+ fileContent: wxacodeResult.buffer,
+ })
+
+ if (!uploadResult.fileID) {
+ throw new Error(`upload failed with empty fileID and storage server status code ${uploadResult.statusCode}`)
+ }
+
+ return uploadResult.fileID
+}
+
+async function getOpenData(event) {
+ return cloud.getOpenData({
+ list: event.openData.list,
+ })
+}
diff --git a/cloudfunctions/openapi/package.json b/cloudfunctions/openapi/package.json
new file mode 100644
index 0000000..0a39461
--- /dev/null
+++ b/cloudfunctions/openapi/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "openapi",
+ "version": "1.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "wx-server-sdk": "latest"
+ }
+}
diff --git a/miniprogram/.gitignore b/miniprogram/.gitignore
index a7f4eac..275e7b9 100644
--- a/miniprogram/.gitignore
+++ b/miniprogram/.gitignore
@@ -1,4 +1,6 @@
js/apiConfig.js
+towxml/
+wemark/
# Windows
[Dd]esktop.ini
diff --git a/miniprogram/account/.gitignore b/miniprogram/account/.gitignore
deleted file mode 100644
index fff60ac..0000000
--- a/miniprogram/account/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-towxml/
\ No newline at end of file
diff --git a/miniprogram/account/pages/about/about.js b/miniprogram/account/pages/about/about.js
index e9540cc..0029f94 100644
--- a/miniprogram/account/pages/about/about.js
+++ b/miniprogram/account/pages/about/about.js
@@ -1,75 +1,20 @@
-const Towxml = require('../../towxml/main');
-
if (!global.towxml)
- global.towxml = new Towxml();
+ global.towxml = require('../../../towxml/index');
Page({
- /**
- * 页面的初始数据
- */
- md: '# 服务协议\n\n尊敬的用户,您好!\n欢迎使用本网站,在您使用本网站前,请您认真阅读并遵守《服务协议》(以下简称”本协议”),请您务必审慎阅读、充分理解协议的各条款内容。\n当您在注册过程中点击查看”看过并同意本服务协议”,按照注册流程成功注册为网站的用户即表示您已充分阅读、理解并完全接受本协议中的全部条款。您承诺接受并遵守本协议的约定,届时您不应以未阅读本协议的内容等理由,主张本协议无效或本协议中的某些条款无效,或要求撤销本协议。\n\n## 本网站权利和义务\n1. 尊重用户隐私:尊重用户隐私,保障用户隐私安全是网站的一项基本政策;\n2. 管理网站用户:网站依据国家法律、地方法律和国际法律等的标准以及本行业的规则来管理网站注册用户;\n3. 处理用户反馈:网站的相关人员会及时处理用户反馈的问题并给予及时回复。\n## 用户权利和义务\n1. 用户在使用网站的过程中,必须遵守如下原则:\n2. 遵守中国的有关法律和法规;\n3. 使用网络服务不作非法用途;\n4. 不干扰和混乱网络服务;\n5. 遵守所有使用网络服务的网络协议、规定、程序和惯例;\n6. 不传输任何非法的、骚扰性的、中伤他人的、辱骂性的、恐吓性的、伤害性的、庸俗的,淫秽等信息资料;\n7. 不传输任何教唆他人构成犯罪行为的资料;\n8. 用户不得故意或者过失损害网站合法权利和利益。及时回复。\n## 关于责任\n鉴于网络服务的特殊性,本网站有权在事先通知的情况下,变更、中断、升级部分网络服务。本网站不担保网络服务不会中断,但承诺在用户可承受的时间内快速恢复服务,同时确保用户数据的安全性和可靠性。\n\n## 免责条款\n鉴于互联网服务的特点,本网站对用户自行上传的资料不承担任何法律责任,希望各网友对网站提供的互动服务中的内容进行监督,若发现存在侵犯任何第三人著作权等合法权益的内容,请及时告知,我们将严格按照《信息网络传播权保护条例》中的规定予以删除。\n\n1. 本网站属于非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请来信告知:zhongjin@educoder.net\n2. 本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。\n3. 任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。\n4. 本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。\n## 侵权投诉\nEducoder平台是一个接受外来投稿的平台,部分图片和文字来自互联网或原作者自行编辑。投稿到Educoder平台的文章,默认作者授权其全部图文内容在Educoder平台、在其微信公众号及微博帐号进行发布,Educoder平台对这一部分内容不进行预先审查。\n如您发现平台上文章或图片涉嫌侵犯您的权利请您将所涉及的文章 URL 和侵权理由以邮件形式发送到邮箱(zhongjin@educoder.net),我们将在核实情况后依照《中华人民共和国侵权责任法》及其司法解释对内容进行屏蔽、删除和通知原作者。\n\n## 服务条款的修改\n本网站保留在必要时对本协议修改的权利,一旦发生变动,这些条款可由网站项目组及时更新,且毋须另行通知,修改后的条款一旦在网页上公布即有效代替原来的服务条款。您可随时查阅最新版服务条款。\n\n**本协议最终解释权归本网站所有**。'
+ md: '# 服务协议\n\n尊敬的用户,您好!\n欢迎使用本平台,在您使用本平台前,请您认真阅读并遵守《服务协议》(以下简称”本协议”),请您务必审慎阅读、充分理解协议的各条款内容。\n当您在注册过程中点击查看”看过并同意本服务协议”,按照注册流程成功注册为平台的用户即表示您已充分阅读、理解并完全接受本协议中的全部条款。您承诺接受并遵守本协议的约定,届时您不应以未阅读本协议的内容等理由,主张本协议无效或本协议中的某些条款无效,或要求撤销本协议。\n\n## 本平台权利和义务\n1. 尊重用户隐私:尊重用户隐私,保障用户隐私安全是平台的一项基本政策;\n2. 管理平台用户:平台依据国家法律、地方法律和国际法律等的标准以及本行业的规则来管理平台注册用户;\n3. 处理用户反馈:平台的相关人员会及时处理用户反馈的问题并给予及时回复。\n## 用户权利和义务\n1. 用户在使用平台的过程中,必须遵守如下原则:\n2. 遵守中国的有关法律和法规;\n3. 使用网络服务不作非法用途;\n4. 不干扰和混乱网络服务;\n5. 遵守所有使用网络服务的网络协议、规定、程序和惯例;\n6. 不传输任何非法的、骚扰性的、中伤他人的、辱骂性的、恐吓性的、伤害性的、庸俗的,淫秽等信息资料;\n7. 不传输任何教唆他人构成犯罪行为的资料;\n8. 用户不得故意或者过失损害平台合法权利和利益。及时回复。\n## 关于责任\n鉴于网络服务的特殊性,本平台有权在事先通知的情况下,变更、中断、升级部分网络服务。本平台不担保网络服务不会中断,但承诺在用户可承受的时间内快速恢复服务,同时确保用户数据的安全性和可靠性。\n\n## 免责条款\n鉴于互联网服务的特点,本平台对用户自行上传的资料不承担任何法律责任,希望各网友对平台提供的互动服务中的内容进行监督,若发现存在侵犯任何第三人著作权等合法权益的内容,请及时告知,我们将严格按照《信息网络传播权保护条例》中的规定予以删除。\n\n1. 本平台属于非赢利性平台,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请来信告知:zhongjin@educoder.net\n2. 本平台转载文章仅为传播更多信息之目的,凡在本平台出现的信息,均仅供参考。本平台将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。\n3. 任何透过本平台网页而链接及得到的资讯、产品及服务,本平台概不负责,亦不负任何法律责任。\n4. 本平台所刊发、转载的文章,其版权均归原作者所有,如其他媒体、平台或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。\n## 侵权投诉\nEducoder平台是一个接受外来投稿的平台,部分图片和文字来自互联网或原作者自行编辑。投稿到Educoder平台的文章,默认作者授权其全部图文内容在Educoder平台、在其微信公众号及微博帐号进行发布,Educoder平台对这一部分内容不进行预先审查。\n如您发现平台上文章或图片涉嫌侵犯您的权利请您将所涉及的文章 URL 和侵权理由以邮件形式发送到邮箱(zhongjin@educoder.net),我们将在核实情况后依照《中华人民共和国侵权责任法》及其司法解释对内容进行屏蔽、删除和通知原作者。\n\n## 服务条款的修改\n本平台保留在必要时对本协议修改的权利,一旦发生变动,这些条款可由平台项目组及时更新,且毋须另行通知,修改后的条款一旦在网页上公布即有效代替原来的服务条款。您可随时查阅最新版服务条款。\n\n**本协议最终解释权归本平台所有**。'
,
data: {
article: {}
},
- /**
- * 生命周期函数--监听页面加载
- */
onLoad: function (options) {
- const _ts = this;
- let data = global.towxml.toJson(this.md,'markdown');
- _ts.setData({
- article: data
+ let article = global.towxml(this.md, 'markdown')
+ this.setData({
+ article
});
},
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
onShareAppMessage: function () {
}
diff --git a/miniprogram/account/pages/about/about.json b/miniprogram/account/pages/about/about.json
index 8835af0..1184b39 100644
--- a/miniprogram/account/pages/about/about.json
+++ b/miniprogram/account/pages/about/about.json
@@ -1,3 +1,5 @@
{
- "usingComponents": {}
+ "usingComponents": {
+ "towxml": "/towxml/towxml"
+ }
}
\ No newline at end of file
diff --git a/miniprogram/account/pages/about/about.wxml b/miniprogram/account/pages/about/about.wxml
index f8cfd98..0494fa5 100644
--- a/miniprogram/account/pages/about/about.wxml
+++ b/miniprogram/account/pages/about/about.wxml
@@ -1,4 +1 @@
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/miniprogram/account/pages/about/about.wxss b/miniprogram/account/pages/about/about.wxss
index f142ba9..e69de29 100644
--- a/miniprogram/account/pages/about/about.wxss
+++ b/miniprogram/account/pages/about/about.wxss
@@ -1,16 +0,0 @@
-/* pages/about/about.wxss */
-
-/**基础风格样式**/
-@import '/account/towxml/style/main.wxss';
-/**如果页面有动态主题切换,则需要将使用到的样式全部引入**/
-
-/**主题配色(浅色样式)**/
-@import '/account/towxml/style/theme/light.wxss';
-
-/**主题配色(深色样式)**/
-@import '/account/towxml/style/theme/dark.wxss';
-
-
-.container{
- padding-bottom: 40rpx;
-}
\ No newline at end of file
diff --git a/miniprogram/account/pages/agreement/agreement.js b/miniprogram/account/pages/agreement/agreement.js
deleted file mode 100644
index 7ac0699..0000000
--- a/miniprogram/account/pages/agreement/agreement.js
+++ /dev/null
@@ -1,73 +0,0 @@
-const Towxml = require('../../towxml/main');
-
-if(!global.towxml)
- global.towxml = new Towxml();
-
-Page({
-
- agreement: '# 服务协议\n\n尊敬的用户,您好!\n欢迎使用本网站,在您使用本网站前,请您认真阅读并遵守《服务协议》(以下简称”本协议”),请您务必审慎阅读、充分理解协议的各条款内容。\n当您在注册过程中点击查看”看过并同意本服务协议”,按照注册流程成功注册为网站的用户即表示您已充分阅读、理解并完全接受本协议中的全部条款。您承诺接受并遵守本协议的约定,届时您不应以未阅读本协议的内容等理由,主张本协议无效或本协议中的某些条款无效,或要求撤销本协议。\n\n## 本网站权利和义务\n1. 尊重用户隐私:尊重用户隐私,保障用户隐私安全是网站的一项基本政策;\n2. 管理网站用户:网站依据国家法律、地方法律和国际法律等的标准以及本行业的规则来管理网站注册用户;\n3. 处理用户反馈:网站的相关人员会及时处理用户反馈的问题并给予及时回复。\n## 用户权利和义务\n1. 用户在使用网站的过程中,必须遵守如下原则:\n2. 遵守中国的有关法律和法规;\n3. 使用网络服务不作非法用途;\n4. 不干扰和混乱网络服务;\n5. 遵守所有使用网络服务的网络协议、规定、程序和惯例;\n6. 不传输任何非法的、骚扰性的、中伤他人的、辱骂性的、恐吓性的、伤害性的、庸俗的,淫秽等信息资料;\n7. 不传输任何教唆他人构成犯罪行为的资料;\n8. 用户不得故意或者过失损害网站合法权利和利益。及时回复。\n## 关于责任\n鉴于网络服务的特殊性,本网站有权在事先通知的情况下,变更、中断、升级部分网络服务。本网站不担保网络服务不会中断,但承诺在用户可承受的时间内快速恢复服务,同时确保用户数据的安全性和可靠性。\n\n## 免责条款\n鉴于互联网服务的特点,本网站对用户自行上传的资料不承担任何法律责任,希望各网友对网站提供的互动服务中的内容进行监督,若发现存在侵犯任何第三人著作权等合法权益的内容,请及时告知,我们将严格按照《信息网络传播权保护条例》中的规定予以删除。\n\n1. 本网站属于非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请来信告知:zhongjin@educoder.net\n2. 本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。\n3. 任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。\n4. 本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。\n## 侵权投诉\nEducoder平台是一个接受外来投稿的平台,部分图片和文字来自互联网或原作者自行编辑。投稿到Educoder平台的文章,默认作者授权其全部图文内容在Educoder平台、在其微信公众号及微博帐号进行发布,Educoder平台对这一部分内容不进行预先审查。\n如您发现平台上文章或图片涉嫌侵犯您的权利请您将所涉及的文章 URL 和侵权理由以邮件形式发送到邮箱(zhongjin@educoder.net),我们将在核实情况后依照《中华人民共和国侵权责任法》及其司法解释对内容进行屏蔽、删除和通知原作者。\n\n## 服务条款的修改\n本网站保留在必要时对本协议修改的权利,一旦发生变动,这些条款可由网站项目组及时更新,且毋须另行通知,修改后的条款一旦在网页上公布即有效代替原来的服务条款。您可随时查阅最新版服务条款。\n\n**本协议最终解释权归本网站所有**。'
- ,
- data: {
- article: {}
- },
-
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- const _ts = this;
- let data = global.towxml.toJson(this.agreement, 'markdown');
- _ts.setData({
- article: data
- });
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
-
- }
-})
\ No newline at end of file
diff --git a/miniprogram/account/pages/agreement/agreement.json b/miniprogram/account/pages/agreement/agreement.json
deleted file mode 100644
index 8835af0..0000000
--- a/miniprogram/account/pages/agreement/agreement.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/miniprogram/account/pages/agreement/agreement.wxml b/miniprogram/account/pages/agreement/agreement.wxml
deleted file mode 100644
index f8cfd98..0000000
--- a/miniprogram/account/pages/agreement/agreement.wxml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/miniprogram/account/pages/agreement/agreement.wxss b/miniprogram/account/pages/agreement/agreement.wxss
deleted file mode 100644
index e09007c..0000000
--- a/miniprogram/account/pages/agreement/agreement.wxss
+++ /dev/null
@@ -1,15 +0,0 @@
-/* pages/about/about.wxss */
-
-/**基础风格样式**/
-@import '/account/towxml/style/main.wxss';
-/**如果页面有动态主题切换,则需要将使用到的样式全部引入**/
-
-/**主题配色(浅色样式)**/
-@import '/account/towxml/style/theme/light.wxss';
-
-/**主题配色(深色样式)**/
-@import '/account/towxml/style/theme/dark.wxss';
-
-.container{
- padding-bottom: 40rpx;
-}
\ No newline at end of file
diff --git a/miniprogram/app.js b/miniprogram/app.js
index ef6daab..a0b401c 100644
--- a/miniprogram/app.js
+++ b/miniprogram/app.js
@@ -11,7 +11,7 @@ App({
versionCode: config.versionCode,
debug: config.debug
},
- client: client,
+ client,
api(name, config){return client.api(name,config)},
callApi(options){return client.callApi(options)},
user(){ return client.user},
@@ -25,6 +25,29 @@ App({
icon:"none"
})
},
+ showMsg(res){
+ wx.showToast({
+ title: res.message,
+ })
+ },
+ getPageUrl(url){
+ return url.replace(/{(.*)}/, function (match, name) {
+ for (var u of __wxConfig.pages) {
+ if (u.endsWith("/"+name))
+ return "/" + u;
+ }
+ return match;
+ });
+ },
+ reLaunch({url, success, fail, complete}){
+ wx.reLaunch({url: this.getPageUrl(url),success,fail,complete})
+ },
+ redirectTo({url, success, fail, complete}){
+ wx.redirectTo({url: this.getPageUrl(url),success,fail,complete})
+ },
+ navigateTo({url, success, fail, complete}){
+ wx.navigateTo({url: this.getPageUrl(url),success,fail,complete})
+ },
shareApp({imageUrl,path,title}){
return {
title: title||"EduCoder教学",
diff --git a/miniprogram/app.json b/miniprogram/app.json
index 617cb38..dc5580b 100644
--- a/miniprogram/app.json
+++ b/miniprogram/app.json
@@ -2,58 +2,74 @@
"pages": [
"pages/my_courses/my_courses",
"pages/findmore/findmore",
- "pages/exercise_setting/exercise_setting",
- "pages/course_setting/course_setting",
- "pages/exercises/exercises",
"pages/courses/courses",
- "pages/exercise/exercise",
- "pages/setting/setting",
- "pages/course/course",
- "pages/files/files",
- "pages/question_setting/question_setting",
- "pages/exercise_grade/exercise_grade",
- "pages/course_invite/course_invite",
- "pages/exercise_result/exercise_result",
- "pages/code_edit/code_edit"
+ "pages/my/my"
],
"subpackages": [
{
- "name": "account",
"root": "account",
"pages": [
"pages/login/login",
"pages/reset_password/reset_password",
"pages/register/register",
- "pages/about/about",
- "pages/agreement/agreement"
+ "pages/about/about"
]
},
{
- "name":"avatar",
- "root":"avatar",
+ "root": "avatar",
+ "pages": [
+ "pages/image_crop/image_crop"
+ ]
+ },
+ {
+ "root": "course",
+ "pages": [
+ "pages/course/course",
+ "pages/course_invite/course_invite",
+ "pages/course_setting/course_setting"
+ ]
+ },
+ {
+ "root":"exercise",
"pages":[
- "pages/image_crop/image_crop"
+ "pages/exercise/exercise",
+ "pages/exercise_grade/exercise_grade",
+ "pages/exercise_setting/exercise_setting",
+ "pages/question_setting/question_setting"
]
}
],
"preloadRule": {
- "pages/setting/setting": {
+ "pages/my/my": {
"network": "all",
"packages": [
"avatar",
"account"
]
+ },
+ "pages/my_courses/my_courses": {
+ "network": "all",
+ "packages": [
+ "course","account"
+ ]
+ },
+ "course/pages/course/course":{
+ "network":"all",
+ "packages":[
+ "exercise","account"
+ ]
}
},
"window": {
"backgroundTextStyle": "dark",
- "navigationBarTitleText": "EduCoder",
+ "navigationBarBackgroundColor": "#fbfbfb",
"navigationBarTextStyle": "black",
- "backgroundColor": "#f2f2f2",
- "navigationBarBackgroundColor": "#fbfbfb"
+ "navigationBarTitleText": "EduCoder",
+ "backgroundColor": "#f5f5f5"
},
"tabBar": {
- "selectedColor": "#00C7B7",
+ "selectedColor": "#00b0f0",
+ "color": "#8a8a8a",
"list": [
{
"pagePath": "pages/my_courses/my_courses",
@@ -63,7 +79,7 @@
},
{
"pagePath": "pages/courses/courses",
- "text": "课程列表",
+ "text": "课堂列表",
"iconPath": "images/tab_contact_default.png",
"selectedIconPath": "images/tab_contact_pressed.png"
},
@@ -74,15 +90,12 @@
"selectedIconPath": "images/tab_findmore_pressed.png"
},
{
- "pagePath": "pages/setting/setting",
- "iconPath": "images/tab_settings_default.png",
- "selectedIconPath": "images/tab_settings_pressed.png",
- "text": "设置"
+ "pagePath": "pages/my/my",
+ "iconPath": "images/tab_my_default.png",
+ "selectedIconPath": "images/tab_my_pressed.png",
+ "text": "我的"
}
]
},
- "sitemapLocation": "sitemap.json",
- "navigateToMiniProgramAppIdList": [
- "wx8c7028f9dcd29c99"
- ]
+ "sitemapLocation": "sitemap.json"
}
\ No newline at end of file
diff --git a/miniprogram/app.wxss b/miniprogram/app.wxss
index 5e3ec4c..048dcaf 100644
--- a/miniprogram/app.wxss
+++ b/miniprogram/app.wxss
@@ -1,18 +1,16 @@
-
page {
height: 100%;
- background-color: #f2f2f2;
+ background-color: #f0f0f0;
}
.flex-wrap{
display: flex;
flex-direction: row;
}
.form-wrap {
- border-top: 1px solid #bbb;
margin: 12px 0;
}
.tappable{
- color: #1aad19;
+ color: #0080f0;
padding: 0 12px;
}
@@ -30,9 +28,21 @@ page {
color: #888;
font-size: 12px;
}
-.error{
- color:red;
-}
-.warning{
- color: orange;
-}
+.error{color:red;}
+.warning{color: orange;}
+.color-main{color:#00b0f0}
+.color-dark-main{color:#0080f0}
+button.button-main{background:#00b0f0}
+.border-main{border-color:#00b0f0}
+.flex-col,.flex-row{display: flex}
+.flex-col{flex-direction: column}
+
+.single-line{
+ overflow: hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+}
+.round{
+ border-radius: 50%;
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/miniprogram/components/add-tips/add-tips.wxml b/miniprogram/components/add-tips/add-tips.wxml
index 390e8a6..b773bf2 100644
--- a/miniprogram/components/add-tips/add-tips.wxml
+++ b/miniprogram/components/add-tips/add-tips.wxml
@@ -6,7 +6,7 @@
-
+
1. 点击右上角按钮
diff --git a/miniprogram/components/add-tips/add-tips.wxss b/miniprogram/components/add-tips/add-tips.wxss
index 10a5d55..de10d18 100644
--- a/miniprogram/components/add-tips/add-tips.wxss
+++ b/miniprogram/components/add-tips/add-tips.wxss
@@ -1,7 +1,6 @@
.box {
position: fixed;
top: 0;
- /* left: 0; */
right: 0;
z-index: 999;
display: flex;
@@ -20,7 +19,7 @@
}
.body {
background-color: #00b0f0;
- box-shadow: 0 10rpx 20rpx -10rpx #00b0f0;
+ box-shadow: 0 5rpx 10rpx -5rpx #00b0f0;
border-radius: 12rpx;
display: flex;
align-items: center;
diff --git a/miniprogram/components/course-item/course-item.js b/miniprogram/components/course-item/course-item.js
new file mode 100644
index 0000000..51b53b3
--- /dev/null
+++ b/miniprogram/components/course-item/course-item.js
@@ -0,0 +1,16 @@
+
+Component({
+ properties: {
+ course_id:Number,
+ teacher:Object,
+ name:String,
+ school:String
+ },
+ data: {
+ eduImgDir:global.config.eduImgDir,
+ imgDir:global.config.imgDir
+ },
+ methods: {
+
+ }
+})
diff --git a/miniprogram/components/course/course.json b/miniprogram/components/course-item/course-item.json
similarity index 100%
rename from miniprogram/components/course/course.json
rename to miniprogram/components/course-item/course-item.json
diff --git a/miniprogram/components/course-item/course-item.wxml b/miniprogram/components/course-item/course-item.wxml
new file mode 100644
index 0000000..8f3bd6d
--- /dev/null
+++ b/miniprogram/components/course-item/course-item.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ {{name}}
+ {{school}} {{teacher.real_name}}
+
+
+
\ No newline at end of file
diff --git a/miniprogram/components/course-item/course-item.wxss b/miniprogram/components/course-item/course-item.wxss
new file mode 100644
index 0000000..2f5260b
--- /dev/null
+++ b/miniprogram/components/course-item/course-item.wxss
@@ -0,0 +1,62 @@
+.bg0{
+ background-image: linear-gradient(to bottom right,#dd6098,#d47782);
+}
+.bg1{
+ background-image: linear-gradient(to bottom right,#56A9EF,#3B99F1);
+}
+.bg2{
+ background-image: linear-gradient(to bottom right,#7585E5,#6080e0);
+}
+.bg3{
+ background-image: linear-gradient(to bottom right,#Ff806c, #F38462);
+}
+.bg4{
+ background-image: linear-gradient(to bottom right,#c0a077,#c79769);
+}
+.bg5{
+ background-image: linear-gradient(to bottom right,#469493,#30b490);
+}
+.bg6{
+ background-image: linear-gradient(to bottom right,#b5764D,#c26b50);
+}
+.header{
+ text-align: end;
+}
+.action{
+ width: 20px;
+ height: 22px;
+ opacity: 0;
+}
+.course{
+ color: white;
+ font-size:13px;
+ border-radius: 5px;
+ padding: 0px 8px 18px 8px;
+}
+.body{
+ display: flex;
+}
+
+.avatar{
+ width: 52px;
+ height: 52px;
+ border-radius: 50%;
+ overflow: hidden;
+ flex: none;
+ margin: 0 16px 0 8px;
+}
+.course-info{
+ flex: auto;
+ width: 10px;
+}
+.course-name{
+ overflow: hidden;
+ text-overflow:ellipsis;
+ white-space: nowrap;
+ font-size: 17px;
+ font-weight: bold;
+ margin-bottom: 4px;
+}
+.school{
+ padding-right: 10px;
+}
\ No newline at end of file
diff --git a/miniprogram/components/course/course.js b/miniprogram/components/course/course.js
deleted file mode 100644
index 755b430..0000000
--- a/miniprogram/components/course/course.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// components/course/course.js
-Component({
- /**
- * 组件的属性列表
- */
- properties: {
- name:{
- type: String
- },
- teacher:{
- type:Object
- },
- visits:{
- type: Number
- },
- members_count:{
- type: Number
- },
- homework_commons_count:{
- type:Number
- },
- can_visited:{
- type: Boolean
- },
- is_public:{
- type: Boolean
- }
- },
-
- data: {
-
- },
-
-
- methods: {
-
- }
-})
diff --git a/miniprogram/components/course/course.wxml b/miniprogram/components/course/course.wxml
deleted file mode 100644
index daef4fd..0000000
--- a/miniprogram/components/course/course.wxml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/miniprogram/components/course/course.wxss b/miniprogram/components/course/course.wxss
deleted file mode 100644
index 0b2af36..0000000
--- a/miniprogram/components/course/course.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* components/course/course.wxss */
\ No newline at end of file
diff --git a/miniprogram/components/edu-icon/edu-icon.js b/miniprogram/components/edu-icon/edu-icon.js
deleted file mode 100644
index e16e1d2..0000000
--- a/miniprogram/components/edu-icon/edu-icon.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// components/icon/myicon.js
-Component({
- /**
- * 组件的属性列表
- */
- properties: {
- addGlobalClass: true
- },
-
-
- externalClasses: ['custom-class'],
-
- properties: {
- info: null,
- type: String,
- size: String,
- color: String
- },
- /**
- * 组件的初始数据
- */
- data: {
-
- },
-
- /**
- * 组件的方法列表
- */
- methods: {
- }
-})
diff --git a/miniprogram/components/edu-icon/edu-icon.wxml b/miniprogram/components/edu-icon/edu-icon.wxml
deleted file mode 100644
index 40e8fbb..0000000
--- a/miniprogram/components/edu-icon/edu-icon.wxml
+++ /dev/null
@@ -1,5 +0,0 @@
-
- {{ info }}
-
diff --git a/miniprogram/components/edu-icon/edu-icon.wxss b/miniprogram/components/edu-icon/edu-icon.wxss
deleted file mode 100644
index 3535090..0000000
--- a/miniprogram/components/edu-icon/edu-icon.wxss
+++ /dev/null
@@ -1,942 +0,0 @@
-@font-face {font-family: "iconfont";
- src: url('iconfont.eot?t=1572859243353'); /* IE9 */
- src: url('iconfont.eot?t=1572859243353#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
- url('iconfont.woff?t=1572859243353') format('woff'),
- url('iconfont.ttf?t=1572859243353') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
- url('iconfont.svg?t=1572859243353#iconfont') format('svg'); /* iOS 4.1- */
-}
-
-.iconfont {
- font-family: "iconfont" !important;
- font-size: 16px;
- font-style: normal;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-roundclose:before {
- content: "\e673";
-}
-
-.icon-timefill:before {
- content: "\e679";
-}
-
-.icon-roundaddfill:before {
- content: "\e6d8";
-}
-
-.icon-cuban2shangchuanyunduan:before {
- content: "\e86d";
-}
-
-.icon-css3:before {
- content: "\ea8b";
-}
-
-.icon-html5:before {
- content: "\eb10";
-}
-
-.icon-31:before {
- content: "\e6b2";
-}
-
-.icon-zhangjie1:before {
- content: "\e68e";
-}
-
-.icon-htmal5icon19:before {
- content: "\e66b";
-}
-
-.icon-shequ:before {
- content: "\e6bc";
-}
-
-.icon-vs:before {
- content: "\e682";
-}
-
-.icon-weibiaoti12:before {
- content: "\e671";
-}
-
-.icon-pdf:before {
- content: "\e740";
-}
-
-.icon-danxuanxuanzhong1:before {
- content: "\e6bd";
-}
-
-.icon-shijian:before {
- content: "\e69c";
-}
-
-.icon-shezhi:before {
- content: "\e66f";
-}
-
-.icon-xiazai18:before {
- content: "\e627";
-}
-
-.icon-liwu:before {
- content: "\e611";
-}
-
-.icon-phpkaifa:before {
- content: "\e67e";
-}
-
-.icon-fujian:before {
- content: "\e670";
-}
-
-.icon-linux:before {
- content: "\e765";
-}
-
-.icon-wenhao:before {
- content: "\e680";
-}
-
-.icon-zuobiao:before {
- content: "\e674";
-}
-
-.icon-expand:before {
- content: "\e6db";
-}
-
-.icon-zhongzhi1:before {
- content: "\e609";
-}
-
-.icon-luyou:before {
- content: "\e677";
-}
-
-.icon-dianzan1:before {
- content: "\e639";
-}
-
-.icon-fuzhi:before {
- content: "\e68f";
-}
-
-.icon-dianzan11:before {
- content: "\e66d";
-}
-
-.icon-sanjiaoxing-up:before {
- content: "\e78f";
-}
-
-.icon-sanjiaoxing-down:before {
- content: "\e791";
-}
-
-.icon-renzhengxinxi:before {
- content: "\e693";
-}
-
-.icon-weibiaoti105:before {
- content: "\e6c0";
-}
-
-.icon-gift:before {
- content: "\e63c";
-}
-
-.icon-xiaoxi:before {
- content: "\e614";
-}
-
-.icon-mail:before {
- content: "\e66a";
-}
-
-.icon-compress:before {
- content: "\e65e";
-}
-
-.icon-daimapeizhir:before {
- content: "\e727";
-}
-
-.icon-tishi1:before {
- content: "\e690";
-}
-
-.icon-net:before {
- content: "\e607";
-}
-
-.icon-edit:before {
- content: "\e691";
-}
-
-.icon-xianshi:before {
- content: "\e695";
-}
-
-.icon-suo:before {
- content: "\e6c9";
-}
-
-.icon-default:before {
- content: "\e67f";
-}
-
-.icon-xiaoxi1:before {
- content: "\e6a4";
-}
-
-.icon-xiazai1:before {
- content: "\e6ac";
-}
-
-.icon-chexiao:before {
- content: "\e657";
-}
-
-.icon-qq:before {
- content: "\e687";
-}
-
-.icon-biaoqian:before {
- content: "\e74f";
-}
-
-.icon-dashujucunchu:before {
- content: "\e678";
-}
-
-.icon-guanzhu:before {
- content: "\e6c5";
-}
-
-.icon-laba:before {
- content: "\e608";
-}
-
-.icon-mstest:before {
- content: "\e686";
-}
-
-.icon-tianjiachengyuan:before {
- content: "\e69a";
-}
-
-.icon-yincang1:before {
- content: "\e9b5";
-}
-
-.icon-triangle:before {
- content: "\e600";
-}
-
-.icon-qizhi:before {
- content: "\e699";
-}
-
-.icon-csdn:before {
- content: "\e602";
-}
-
-.icon-yonghujiaose_wushuju:before {
- content: "\e69e";
-}
-
-.icon-moban:before {
- content: "\e692";
-}
-
-.icon-VPN:before {
- content: "\e601";
-}
-
-.icon-jia:before {
- content: "\e605";
-}
-
-.icon-yinhangqia1:before {
- content: "\e697";
-}
-
-.icon-weibo:before {
- content: "\e688";
-}
-
-.icon-kong:before {
- content: "\e69f";
-}
-
-.icon-kecheng:before {
- content: "\e60a";
-}
-
-.icon-shezhi1:before {
- content: "\e71d";
-}
-
-.icon-chenggong:before {
- content: "\e68b";
-}
-
-.icon-sandian:before {
- content: "\e6f8";
-}
-
-.icon-jibenxinxi:before {
- content: "\e694";
-}
-
-.icon-base:before {
- content: "\e683";
-}
-
-.icon-weixin2:before {
- content: "\e603";
-}
-
-.icon-StackOverflow:before {
- content: "\e689";
-}
-
-.icon-zhongzhi2:before {
- content: "\e68a";
-}
-
-.icon-huodong:before {
- content: "\e6bb";
-}
-
-.icon-yincang:before {
- content: "\e6a0";
-}
-
-.icon-weibiaoti-:before {
- content: "\e60d";
-}
-
-.icon-weizhi:before {
- content: "\e676";
-}
-
-.icon-jquery:before {
- content: "\e67a";
-}
-
-.icon-docker:before {
- content: "\e67b";
-}
-
-.icon-python:before {
- content: "\e67c";
-}
-
-.icon-php:before {
- content: "\e67d";
-}
-
-.icon-yinhangqia:before {
- content: "\e675";
-}
-
-.icon-linkedin:before {
- content: "\e60c";
-}
-
-.icon-wenjianjia:before {
- content: "\e640";
-}
-
-.icon-SQLserver:before {
- content: "\e705";
-}
-
-.icon-zhiliangfenxi:before {
- content: "\e68d";
-}
-
-.icon-shangchuantupian1:before {
- content: "\e7fd";
-}
-
-.icon-dengluIpjiankong:before {
- content: "\e684";
-}
-
-.icon-itsm-liuchengguanli:before {
- content: "\e685";
-}
-
-.icon-lianjie:before {
- content: "\e7db";
-}
-
-.icon-fenzhi:before {
- content: "\e610";
-}
-
-.icon-wangzhikelong:before {
- content: "\e612";
-}
-
-.icon-xiazai:before {
- content: "\e613";
-}
-
-.icon-daima:before {
- content: "\e615";
-}
-
-.icon-tijiaojilu:before {
- content: "\e616";
-}
-
-.icon-xuanzeti:before {
- content: "\e617";
-}
-
-.icon-bianji:before {
- content: "\e618";
-}
-
-.icon-xiangshang:before {
- content: "\e61a";
-}
-
-.icon-shanchudiao:before {
- content: "\e620";
-}
-
-.icon-xinjian:before {
- content: "\e619";
-}
-
-.icon-shangshengpaixu:before {
- content: "\e621";
-}
-
-.icon-jiangli:before {
- content: "\e61b";
-}
-
-.icon-shanchu:before {
- content: "\e61c";
-}
-
-.icon-yincangbiyan:before {
- content: "\e61d";
-}
-
-.icon-kaisuo:before {
- content: "\e61e";
-}
-
-.icon-guansuo:before {
- content: "\e61f";
-}
-
-.icon-banbenku:before {
- content: "\e622";
-}
-
-.icon-issue:before {
- content: "\e623";
-}
-
-.icon-shangchuantupian:before {
- content: "\e625";
-}
-
-.icon-ceping:before {
- content: "\e626";
-}
-
-.icon-tpixiaoxitixing:before {
- content: "\e624";
-}
-
-.icon-qqzaixianzixun:before {
- content: "\e628";
-}
-
-.icon-erweima:before {
- content: "\e629";
-}
-
-.icon-yijianfankui:before {
- content: "\e62a";
-}
-
-.icon-youxiangrenzheng:before {
- content: "\e62b";
-}
-
-.icon-shoujirenzheng:before {
- content: "\e62c";
-}
-
-.icon-zhiyerenzheng:before {
- content: "\e62d";
-}
-
-.icon-shenfenrenzheng:before {
- content: "\e62e";
-}
-
-.icon-pingfen:before {
- content: "\e62f";
-}
-
-.icon-pingfen-xian:before {
- content: "\e630";
-}
-
-.icon-zuoye:before {
- content: "\e631";
-}
-
-.icon-tishicuowu:before {
- content: "\e632";
-}
-
-.icon-ziyuan:before {
- content: "\e633";
-}
-
-.icon-tishi:before {
- content: "\e636";
-}
-
-.icon-chengyuan:before {
- content: "\e63a";
-}
-
-.icon-gonggao:before {
- content: "\e63b";
-}
-
-.icon-dianzan:before {
- content: "\e634";
-}
-
-.icon-dianzan-xian:before {
- content: "\e635";
-}
-
-.icon-fanhuishangcidaima:before {
- content: "\e637";
-}
-
-.icon-zhongzhi:before {
- content: "\e638";
-}
-
-.icon-xuanzhuan:before {
- content: "\e63d";
-}
-
-.icon-shixun:before {
- content: "\e63e";
-}
-
-.icon-suoxiao:before {
- content: "\e63f";
-}
-
-.icon-xiajiantou:before {
- content: "\e642";
-}
-
-.icon-gouxuan:before {
- content: "\e644";
-}
-
-.icon-liulanyan:before {
- content: "\e646";
-}
-
-.icon-jingyan:before {
- content: "\e647";
-}
-
-.icon-xiaoxilingdang:before {
- content: "\e641";
-}
-
-.icon-shixunguanqia:before {
- content: "\e648";
-}
-
-.icon-sousuo:before {
- content: "\e643";
-}
-
-.icon-fabu:before {
- content: "\e64a";
-}
-
-.icon-tianjiafangda:before {
- content: "\e645";
-}
-
-.icon-xiangxiayidong:before {
- content: "\e64b";
-}
-
-.icon-xiangshangyidong:before {
- content: "\e64c";
-}
-
-.icon-guanbi:before {
- content: "\e64d";
-}
-
-.icon-biyezhuanhuan:before {
- content: "\e6f1";
-}
-
-.icon-zhengyan:before {
- content: "\e649";
-}
-
-.icon-huifu1:before {
- content: "\e64e";
-}
-
-.icon-wenjian:before {
- content: "\e64f";
-}
-
-.icon-zhankai:before {
- content: "\e650";
-}
-
-.icon-shousuo:before {
- content: "\e651";
-}
-
-.icon-zuojiantou:before {
- content: "\e652";
-}
-
-.icon-youjiantou:before {
- content: "\e653";
-}
-
-.icon-shangjiantou:before {
- content: "\e654";
-}
-
-.icon-bianjidaibeijing:before {
- content: "\e655";
-}
-
-.icon-bofang:before {
- content: "\e656";
-}
-
-.icon-wancheng:before {
- content: "\e658";
-}
-
-.icon-fenzuzuoye:before {
- content: "\e65d";
-}
-
-.icon-putongzuoye:before {
- content: "\e65c";
-}
-
-.icon-shezhi2:before {
- content: "\e698";
-}
-
-.icon-wenjuan:before {
- content: "\e659";
-}
-
-.icon-taolun:before {
- content: "\e65a";
-}
-
-.icon-fenban:before {
- content: "\e65f";
-}
-
-.icon-dongtai:before {
- content: "\e660";
-}
-
-.icon-shijuan:before {
- content: "\e65b";
-}
-
-.icon-caidan:before {
- content: "\e661";
-}
-
-.icon-chengyuanguanli:before {
- content: "\e662";
-}
-
-.icon-tianjia:before {
- content: "\e672";
-}
-
-.icon-xiangxiayi:before {
- content: "\e663";
-}
-
-.icon-xiangshangyi:before {
- content: "\e664";
-}
-
-.icon-gengduo:before {
- content: "\e665";
-}
-
-.icon-reset:before {
- content: "\e7fe";
-}
-
-.icon-xueyuanguanliyuan:before {
- content: "\e666";
-}
-
-.icon-kongxing:before {
- content: "\e667";
-}
-
-.icon-shixing:before {
- content: "\e668";
-}
-
-.icon-xiajiang:before {
- content: "\e669";
-}
-
-.icon-fuzhi1:before {
- content: "\e800";
-}
-
-.icon-gengduo1:before {
- content: "\e7f9";
-}
-
-.icon-congshulianjie:before {
- content: "\e6ee";
-}
-
-.icon-shouji:before {
- content: "\e69d";
-}
-
-.icon-zhinengjiankongtixi:before {
- content: "\e6b4";
-}
-
-.icon-xinzengtishi:before {
- content: "\e66c";
-}
-
-.icon-wanchenggouxuan:before {
- content: "\e66e";
-}
-
-.icon-java:before {
- content: "\f1d7";
-}
-
-.icon-youjiang:before {
- content: "\e792";
-}
-
-.icon-fork:before {
- content: "\e6b3";
-}
-
-.icon-mingpian:before {
- content: "\e69b";
-}
-
-.icon-mysql:before {
- content: "\ec6d";
-}
-
-.icon-kehuliuyan:before {
- content: "\e71a";
-}
-
-.icon-github:before {
- content: "\e763";
-}
-
-.icon-mongodb1:before {
- content: "\e60b";
-}
-
-.icon-anquanshezhi:before {
- content: "\e606";
-}
-
-.icon-trustie:before {
- content: "\e681";
-}
-
-.icon-wuquanxian:before {
- content: "\e6a2";
-}
-
-.icon-shixundaibeijing:before {
- content: "\e68c";
-}
-
-.icon-gongcheng:before {
- content: "\e60f";
-}
-
-.icon-jinggao:before {
- content: "\e696";
-}
-
-.icon-tianjiadaohang:before {
- content: "\e604";
-}
-
-.icon-zhuye:before {
- content: "\e6d3";
-}
-
-.icon-yunweijiankong:before {
- content: "\e6a3";
-}
-
-.icon-gongyiliucheng:before {
- content: "\e6a5";
-}
-
-.icon-zhiliangkongzhi:before {
- content: "\e6a6";
-}
-
-.icon-shebeiguanli:before {
- content: "\e6a7";
-}
-
-.icon-shengmingzhouqi:before {
- content: "\e6a8";
-}
-
-.icon-bianji1:before {
- content: "\e6a1";
-}
-
-.icon-paixu1:before {
- content: "\e6aa";
-}
-
-.icon-renzhengshangjia:before {
- content: "\e6ab";
-}
-
-.icon-shenfenzhenghaomaguizheng:before {
- content: "\e6ad";
-}
-
-.icon-Page-1:before {
- content: "\e6ae";
-}
-
-.icon-Page-3:before {
- content: "\e6af";
-}
-
-.icon-Page:before {
- content: "\e6b0";
-}
-
-.icon-yemian:before {
- content: "\e6b1";
-}
-
-.icon-bianzu:before {
- content: "\e6b5";
-}
-
-.icon-xuexizhongxin:before {
- content: "\e6b6";
-}
-
-.icon-tongji:before {
- content: "\e6bf";
-}
-
-.icon-menu_voucher:before {
- content: "\e6b8";
-}
-
-.icon-menu_events:before {
- content: "\e6b9";
-}
-
-.icon-menu_map:before {
- content: "\e6ba";
-}
-
-.icon-menu_date:before {
- content: "\e6a9";
-}
-
-.icon-menu_people:before {
- content: "\e6b7";
-}
-
-.icon-healthmode:before {
- content: "\e60e";
-}
-
-.icon-nenghaofenxix:before {
- content: "\e6be";
-}
-
-.icon-detectionx:before {
- content: "\e6c1";
-}
-
-.icon-communityx:before {
- content: "\e6c2";
-}
-
-.icon-hostingx2:before {
- content: "\e6c3";
-}
-
-.icon-projectx:before {
- content: "\e6c4";
-}
-
-.icon__info {
- color: #fff;
- left: 100%;
- top: -.5em;
- font-size: 0.5em;
- padding: 0 0.3em;
- text-align: center;
- min-width: 1.2em;
- line-height: 1.2;
- position: absolute;
- border-radius: 0.6em;
- box-sizing: border-box;
- background-color: #f44;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
- font-family: PingFang SC, Helvetica Neue, Arial, sans-serif;
-}
\ No newline at end of file
diff --git a/miniprogram/components/error-page/error-page.js b/miniprogram/components/error-page/error-page.js
new file mode 100644
index 0000000..1b64ab7
--- /dev/null
+++ b/miniprogram/components/error-page/error-page.js
@@ -0,0 +1,12 @@
+const app = getApp();
+Component({
+ properties: {
+ status:Number
+ },
+ data: {
+
+ },
+ methods: {
+
+ }
+})
diff --git a/miniprogram/components/edu-icon/edu-icon.json b/miniprogram/components/error-page/error-page.json
similarity index 100%
rename from miniprogram/components/edu-icon/edu-icon.json
rename to miniprogram/components/error-page/error-page.json
diff --git a/miniprogram/components/error-page/error-page.wxml b/miniprogram/components/error-page/error-page.wxml
new file mode 100644
index 0000000..d6f9be5
--- /dev/null
+++ b/miniprogram/components/error-page/error-page.wxml
@@ -0,0 +1,5 @@
+
+
+ {{msg}}
+
+
\ No newline at end of file
diff --git a/miniprogram/components/error-page/error-page.wxss b/miniprogram/components/error-page/error-page.wxss
new file mode 100644
index 0000000..cec4605
--- /dev/null
+++ b/miniprogram/components/error-page/error-page.wxss
@@ -0,0 +1,23 @@
+.body{
+ z-index: 1000;
+ top: 0;
+ right: 0;
+ position: fixed;
+ left: 0;
+ display: flex;
+ flex-direction: column;
+ padding-top: 24px;
+}
+.img{
+ width: 200px;
+ height: 200px;
+}
+.msg{
+
+}
+.btn{
+
+}
+
+
+
diff --git a/miniprogram/components/modal/join-course/join-course.js b/miniprogram/components/modal/join-course/join-course.js
index 8ad8273..01120d6 100644
--- a/miniprogram/components/modal/join-course/join-course.js
+++ b/miniprogram/components/modal/join-course/join-course.js
@@ -1,8 +1,6 @@
const app = getApp();
Component({
- /**
- * 组件的属性列表
- */
+
properties: {
hidden:{
type:Boolean,
@@ -10,18 +8,12 @@ Component({
}
},
- /**
- * 组件的初始数据
- */
data: {
invite_code:"",
identities:[],
hidden:false
},
- /**
- * 组件的方法列表
- */
methods: {
cancel: function (event) {
this.setData({ hidden: true });
@@ -38,42 +30,18 @@ Component({
for (var identity of identities) {
data[identity] = 1;
}
- console.log(data);
- console.log({ ...data });
app.api("courses.apply_to_join_course")({ ...data })
.then(res => {
- if (res.status == 401) {
- wx.showToast({
- title: "请先登陆",
- icon: "none"
- });
- return;
- }
console.log(res);
- wx.showToast({
- title: res.message
- })
- if (res.data.course_id){
+ app.showMsg(res);
+ if (res.course_id){
wx.navigateTo({
- url: `/pages/course/course?course_id=${res.data.course_id}`
+ url: `/course/pages/course/course?course_id=${res.course_id}`
});
}
this.cancel();
})
- .catch(error => {
- console.log("hi");
- if(error.code==401){
- wx.showToast({
- title: "请先登陆",
- icon: "none"
- });
- }else
- wx.showToast({
- title: error.message,
- icon: "none"
- });
- //console.warn(error);
- })
+ .catch(app.showError)
}
}
diff --git a/miniprogram/components/my-icon/my-icon.js b/miniprogram/components/my-icon/my-icon.js
deleted file mode 100644
index f7d8bcb..0000000
--- a/miniprogram/components/my-icon/my-icon.js
+++ /dev/null
@@ -1,31 +0,0 @@
-Component({
- /**
- * 组件的属性列表
- */
- properties: {
- addGlobalClass: true
- },
-
-
- externalClasses: ['custom-class'],
-
- properties: {
- info: null,
- type: String,
- size: String,
- color: String
- },
- /**
- * 组件的初始数据
- */
- data: {
-
- },
-
- /**
- * 组件的方法列表
- */
- methods: {
-
- }
-})
diff --git a/miniprogram/components/my-icon/my-icon.wxml b/miniprogram/components/my-icon/my-icon.wxml
deleted file mode 100644
index 21d6287..0000000
--- a/miniprogram/components/my-icon/my-icon.wxml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- {{ info }}
-
diff --git a/miniprogram/components/my-icon/my-icon.wxss b/miniprogram/components/my-icon/my-icon.wxss
deleted file mode 100644
index c1f795e..0000000
--- a/miniprogram/components/my-icon/my-icon.wxss
+++ /dev/null
@@ -1,60 +0,0 @@
-@font-face {font-family: "iconfont";
- src: url('iconfont.eot?t=1572072148156'); /* IE9 */
- src: url('iconfont.eot?t=1572072148156#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
- url('iconfont.woff?t=1572072148156') format('woff'),
- url('iconfont.ttf?t=1572072148156') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
- url('iconfont.svg?t=1572072148156#iconfont') format('svg'); /* iOS 4.1- */
-}
-
-.iconfont {
- font-family: "iconfont" !important;
- font-size: 16px;
- font-style: normal;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-.myicon-absent_student:before {
- content: "\e635";
-}
-
-.myicon-present_student:before {
- content: "\e60d";
-}
-.myicon-answer:before {
- content: "\e647";
-}
-.myicon-question:before {
- content: "\e648";
-}
-
-.myicon-internet_class:before {
- content: "\e67f";
-}
-
-.myicon-close:before {
- content: "\e637";
-}
-
-.myicon-add:before {
- content: "\e600";
-}
-
-.myicon__info {
- color: #fff;
- left: 100%;
- top: -.5em;
- font-size: 0.5em;
- padding: 0 0.3em;
- text-align: center;
- min-width: 1.2em;
- line-height: 1.2;
- position: absolute;
- border-radius: 0.6em;
- box-sizing: border-box;
- background-color: #f44;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%);
- font-family: PingFang SC, Helvetica Neue, Arial, sans-serif;
-}
diff --git a/miniprogram/components/nav-bar/nav-bar.js b/miniprogram/components/nav-bar/nav-bar.js
new file mode 100644
index 0000000..0730337
--- /dev/null
+++ b/miniprogram/components/nav-bar/nav-bar.js
@@ -0,0 +1,84 @@
+
+Component({
+ properties: {
+ list:{
+ type:Array,
+ observer:function(){
+ //console.log("observer list",this.data);
+ if(this.data._itemWidth&&this.data._itemWidth>0)
+ this.attached();
+ }
+ },
+ mg:Number,
+ bg:{
+ type:String,
+ value:"white"
+ },
+ default:{
+ type:Object,
+ value:{}
+ },
+ type:{
+ type:String,
+ value:"nav"
+ },
+ current:{
+ type:Number,
+ observer: function(current){
+ this.trigger();
+ this.scroll();
+ }
+ },
+ width:{
+ type:Number,
+ value:750
+ },
+ itemWidth:{
+ type:Number,
+ value:-1
+ },
+ cancellable:{
+ type:Number,
+ value:0
+ },
+ autoscroll:{
+ type:Number,
+ value:1
+ }
+ },
+ data: {
+ scrollLeft: 0
+ },
+ attached(){
+ if(this.data.itemWidth==-1)
+ var _itemWidth = Math.max(this.data.width/this.data.list.length,150);
+ else
+ var _itemWidth = this.data.itemWidth;
+ this.setData({ _itemWidth });
+ this.scroll();
+ },
+ methods: {
+ scroll(){
+ if(this.data.current>=0&&this.data.autoscroll&&this.data.itemWidth>0){
+ let scrollLeft = (this.data.current+0.5)*this.data.itemWidth+0.5*this.data.width;
+ this.setData({scrollLeft})
+ }
+ },
+ trigger(){
+ let {current} = this.data;
+ if (current >= 0)
+ var value = this.data.list[current];
+ else
+ var value = this.data.default;
+ this.triggerEvent("change", { current, value});
+ },
+ switchNav({currentTarget:{dataset:{current}}}){
+ if(current==this.data.current) {
+ if(this.data.cancellable)
+ current=-1;
+ else return
+ }
+ this.setData({current});
+ }
+ }
+})
diff --git a/miniprogram/components/my-icon/my-icon.json b/miniprogram/components/nav-bar/nav-bar.json
similarity index 100%
rename from miniprogram/components/my-icon/my-icon.json
rename to miniprogram/components/nav-bar/nav-bar.json
diff --git a/miniprogram/components/nav-bar/nav-bar.wxml b/miniprogram/components/nav-bar/nav-bar.wxml
new file mode 100644
index 0000000..64ccbee
--- /dev/null
+++ b/miniprogram/components/nav-bar/nav-bar.wxml
@@ -0,0 +1,5 @@
+
+
+ {{item.text}}
+
+
\ No newline at end of file
diff --git a/miniprogram/components/nav-bar/nav-bar.wxss b/miniprogram/components/nav-bar/nav-bar.wxss
new file mode 100644
index 0000000..dd73b8c
--- /dev/null
+++ b/miniprogram/components/nav-bar/nav-bar.wxss
@@ -0,0 +1,62 @@
+.c-container {
+ box-sizing: border-box;
+ line-height: 34px;
+ height: 34px;
+ font-size: 13px;
+ white-space: nowrap;
+}
+view.common{
+ color: dimgray;
+ text-align: center;
+ display: inline-block;
+ height: 34px;
+ line-height: 34px;
+}
+view.c-nav {
+ box-sizing: border-box;
+ transition: all 0.26s ease;
+}
+view.c-nav.active{
+ color: #0080f0;
+ font-size: 15px;
+ border-bottom: 2px solid #0080f0;
+}
+view.c-plain.active{
+ color: #0080f0;
+ font-size: 15px;
+}
+view.c-cap{
+border-radius: 36px;
+background: #dbdbdb;
+padding: 0 14px
+}
+view.c-cap.active{
+ background: #00a0f0;
+ color: white;
+}
+
+view.c-line{
+ position: relative;
+}
+text.c-line{
+ display: flex;
+ justify-content: center;
+ transition: all 0.26s ease;
+}
+text.c-line.active{
+ font-size: 15px;
+ color: #0080f0;
+}
+text.c-line::after{
+ transition: all 0.26s ease;
+ width: 0px;
+ height: 5px;
+ position: absolute;
+ content: "";
+ bottom: 0;
+ border-radius: 10px;
+}
+text.c-line.active::after{
+ width: 22px;
+ background: #0080f0;
+}
\ No newline at end of file
diff --git a/miniprogram/components/require-login/require-login.js b/miniprogram/components/require-login/require-login.js
new file mode 100644
index 0000000..cecabb9
--- /dev/null
+++ b/miniprogram/components/require-login/require-login.js
@@ -0,0 +1,11 @@
+Component({
+ properties: {
+ user_id:{
+ type:Number
+ },
+ bg:{
+ type:String,
+ value:"#0080f0"
+ }
+ }
+})
diff --git a/miniprogram/pages/code_edit/code_edit.json b/miniprogram/components/require-login/require-login.json
similarity index 54%
rename from miniprogram/pages/code_edit/code_edit.json
rename to miniprogram/components/require-login/require-login.json
index 8835af0..e8cfaaf 100644
--- a/miniprogram/pages/code_edit/code_edit.json
+++ b/miniprogram/components/require-login/require-login.json
@@ -1,3 +1,4 @@
{
+ "component": true,
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/components/require-login/require-login.wxml b/miniprogram/components/require-login/require-login.wxml
new file mode 100644
index 0000000..c6bad73
--- /dev/null
+++ b/miniprogram/components/require-login/require-login.wxml
@@ -0,0 +1,3 @@
+
+ 点击登陆,获取更多内容
+
\ No newline at end of file
diff --git a/miniprogram/components/require-login/require-login.wxss b/miniprogram/components/require-login/require-login.wxss
new file mode 100644
index 0000000..4e0d571
--- /dev/null
+++ b/miniprogram/components/require-login/require-login.wxss
@@ -0,0 +1,9 @@
+.nav{
+color: white;
+display: flex;
+justify-content: center;
+align-items: center;
+height: 34px;
+flex: none;
+font-size: 15px;
+}
\ No newline at end of file
diff --git a/miniprogram/config.js b/miniprogram/config.js
index 87897c6..aedead9 100644
--- a/miniprogram/config.js
+++ b/miniprogram/config.js
@@ -1,24 +1,13 @@
-export const contact= {
- wechat: 'wxid_jja9klxyquox22',
- email: '1460454420@qq.com',
- qq: '1460454420',
- phone: ""
-};
+const cloudDir = "cloud://educoder.6564-educoder-1300855313/";
+const eduUrl = "https://www.educoder.net";
-export const leancloud={
- //@todo
- appid: "",
- appkey: ""
-}
-const config = global.config = {
+module.exports = global.config = {
versionCode: 2020022002,
- debug: true,
- contact: {
- wechat: 'wxid_jja9klxyquox22',
- email: '1460454420@qq.com',
- qq: '1460454420',
- phone: ""
- }
+ version:"0.9.1",
+ apiRoot:eduUrl+"/api/",
+ cloudDir,
+ eduUrl,
+ imgDir:cloudDir+"images/",
+ eduImgDir:eduUrl+"/images/",
}
-export default config;
\ No newline at end of file
diff --git a/miniprogram/course/components/attachment/attachment.js b/miniprogram/course/components/attachment/attachment.js
new file mode 100644
index 0000000..2015af9
--- /dev/null
+++ b/miniprogram/course/components/attachment/attachment.js
@@ -0,0 +1,72 @@
+const app = getApp();
+Component({
+ properties: {
+ course_id: {
+ type: Number
+ },
+ id: {
+ type: Number
+ },
+ refresh:{
+ type:Boolean,
+ observer:function(v){
+ if(v){
+ this.onLoad();
+ this.setData({ refresh: false });
+ }
+ }
+ }
+ },
+
+ data: {
+ imgDir: global.config.imgDir,
+ files:[],
+ loading:true
+ },
+ attached(){
+ console.log("attachment",this.data);
+ this.onLoad();
+ },
+ methods: {
+ pull_files: function () {
+ wx.showLoading({
+ title: '加载中',
+ })
+ app.callApi({ name: "files", data: { course_id: this.data.course_id }, complete: () => { wx.hideLoading(); this.setData({ loading: false }) } })
+ .then(res => {
+ console.log("pull_files");
+ console.log(res);
+ this.setData({ files: res.data.files });
+ })
+ .catch(console.error);
+ },
+
+ previewFile: function ({ currentTarget: { dataset:{url=""} } }) {
+ let ext = url.split(".").slice(-1)[0].toLowerCase();
+ if(["bmp","jpg","png","gif"].indexOf(ext)!=-1){
+ wx.previewImage({
+ urls: [url]
+ });
+ return;
+ }
+ wx.showLoading({
+ title: '下载中',
+ })
+ wx.downloadFile({
+ url: global.config.eduUrl + url,
+ success: (res) => {
+ wx.openDocument({
+ filePath: res.tempFilePath,
+ fail: app.showError
+ });
+ },
+ fail: app.showError,
+ complete: wx.hideLoading
+ })
+
+ },
+ onLoad: function (options) {
+ this.pull_files();
+ },
+ }
+})
diff --git a/miniprogram/pages/course/course.json b/miniprogram/course/components/attachment/attachment.json
similarity index 54%
rename from miniprogram/pages/course/course.json
rename to miniprogram/course/components/attachment/attachment.json
index 8835af0..e8cfaaf 100644
--- a/miniprogram/pages/course/course.json
+++ b/miniprogram/course/components/attachment/attachment.json
@@ -1,3 +1,4 @@
{
+ "component": true,
"usingComponents": {}
}
\ No newline at end of file
diff --git a/miniprogram/course/components/attachment/attachment.wxml b/miniprogram/course/components/attachment/attachment.wxml
new file mode 100644
index 0000000..3377007
--- /dev/null
+++ b/miniprogram/course/components/attachment/attachment.wxml
@@ -0,0 +1,17 @@
+
+ 课堂资源
+
+
+
+
+
+
+ {{file.title}}
+ 上传者:{{file.author.name}}
+
+
+
+
+
diff --git a/miniprogram/pages/files/files.wxss b/miniprogram/course/components/attachment/attachment.wxss
similarity index 100%
rename from miniprogram/pages/files/files.wxss
rename to miniprogram/course/components/attachment/attachment.wxss
diff --git a/miniprogram/course/components/exercise/exercise.js b/miniprogram/course/components/exercise/exercise.js
new file mode 100644
index 0000000..a96b9fe
--- /dev/null
+++ b/miniprogram/course/components/exercise/exercise.js
@@ -0,0 +1,139 @@
+const app = getApp();
+const navData= [
+ {
+ text: "全部",
+ exercise_status: "all",
+ course_identities: [2, 5, 6]
+ },
+ {
+ text: '提交中',
+ exercise_status: 2,
+ course_identities: [2, 5, 6]
+ },
+ {
+ text: '已截止',
+ exercise_status: 3,
+ course_identities: [2, 5, 6]
+ },
+ {
+ text: "未发布",
+ exercise_status: 1,
+ course_identities: [2]
+ }
+]
+Component({
+ options: {
+ pureDataPattern: /^_/
+ },
+ properties: {
+ course_id:{
+ type:Number
+ },
+ id:{
+ type:Number
+ },
+ refresh:{
+ type:Boolean,
+ observer:function(v){
+ if(v) {
+ this.onPullDownRefresh();
+ this.setData({ refresh: false });
+ }
+ }
+ }
+ },
+ data: {
+ imgDir: global.config.imgDir,
+ loading: true,
+ require_login: false,
+ page_status: 0,
+ exercises: [],
+ current_status: "all",
+ navList:navData,
+ currentTab: 0,
+ navScrollLeft: 0,
+ user:{}
+ },
+
+ attached(){
+ this.onLoad();
+ },
+ methods: {
+ switchNav({detail:{current,value}}){
+ this.setData({ current_status: value.exercise_status});
+ },
+ exercise_result: function ({ currentTarget: { dataset } }) {
+ app.navigateTo({
+ url: `{exercise_result}?exercise_id=${dataset.exercise_id}`,
+ })
+ },
+ see_grade: function ({ currentTarget: { dataset } }) {
+ app.navigateTo({
+ url: `{exercise_grade}?exercise_id=${dataset.exercise_id}`,
+ })
+ },
+ edit_exercise: function ({ currentTarget: { dataset } }) {
+ app.navigateTo({
+ url: `{exercise_setting}?course_id=${this.data.course_id}&exercise_id=${dataset.exercise_id}`,
+ })
+ },
+ create_exercise: function () {
+ app.navigateTo({
+ url: `{exercise_setting}?course_id=${this.data.course_id}`,
+ })
+ },
+ pull_exercise: function () {
+ app.api("courses.exercises")({ course_id: this.data.course_id })
+ .then(res => {
+ console.log("pull_exercise");
+ console.log(res);
+ if (res.exercises) {
+ this.setData({ exercises: res.exercises, loading: false });
+ }
+ console.log(this.data)
+ })
+ .catch(e => {
+ console.error(e);
+ app.showError(e)
+ });
+ },
+ see_exercise: function ({ currentTarget: { dataset } }) {
+ app.navigateTo({
+ url: '{exercise}?exercise_id=' + dataset.exercise_id,
+ });
+ },
+ enter_exercise: function ({ currentTarget: { dataset } }) {
+ wx.showModal({
+ title: '确认',
+ content: '开始作答吗?',
+ success: res => {
+ if (res.confirm) {
+ app.navigateTo({
+ url: '{exercise}?exercise_id=' + dataset.exercise_id,
+ });
+ }
+ }
+ });
+ },
+ onLoad: function (options) {
+ app.api("courses.top_banner")({ course_id: this.data.course_id })
+ .then(res => {
+ this.setData({ course: res })
+ console.log(res)
+ })
+ this.pull_exercise();
+ this.setData({ require_login: false });
+ },
+ onShow: function () {
+
+ },
+ onPullDownRefresh: function () {
+ this.pull_exercise();
+ },
+ onShareAppMessage: function () {
+
+ }
+ }
+})
+
+
diff --git a/miniprogram/course/components/exercise/exercise.json b/miniprogram/course/components/exercise/exercise.json
new file mode 100644
index 0000000..cc390d8
--- /dev/null
+++ b/miniprogram/course/components/exercise/exercise.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "nav-bar":"/components/nav-bar/nav-bar"
+ }
+}
\ No newline at end of file
diff --git a/miniprogram/course/components/exercise/exercise.wxml b/miniprogram/course/components/exercise/exercise.wxml
new file mode 100644
index 0000000..bbbd601
--- /dev/null
+++ b/miniprogram/course/components/exercise/exercise.wxml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+ {{exercise.exercise_name}}
+
+
+ 还有{{exercise.exercise_left_time||' '}}截止
+
+ {{exercise_tip}}
+
+ 进入答题
+ 查看答题
+ 编辑
+
+
+
+
+
+
+
+
diff --git a/miniprogram/pages/exercises/exercises.wxss b/miniprogram/course/components/exercise/exercise.wxss
similarity index 62%
rename from miniprogram/pages/exercises/exercises.wxss
rename to miniprogram/course/components/exercise/exercise.wxss
index e32a90c..70ea355 100644
--- a/miniprogram/pages/exercises/exercises.wxss
+++ b/miniprogram/course/components/exercise/exercise.wxss
@@ -1,40 +1,18 @@
.container{
height: 100%;
-}
-.nav {
- height: 85rpx;
- width: 100%;
- box-sizing: border-box;
- overflow: hidden;
- line-height: 70rpx;
- font-size: 16px;
- white-space: nowrap;
- position: fixed;
- top: 0;
- left: 0;
- z-index: 99;
-}
-.nav-item {
- width: 25%;
- display: inline-block;
- text-align: center;
-}
-.active{
- color: green;
- border-bottom: 3rpx solid green;
+ display: flex;
+ flex-direction: column;
}
.tab-box{
- padding-top: 85rpx;
- height: 100%;
box-sizing: border-box;
+ flex: 1 1 10px;
+ height: 10px;
+ padding :0 12px;
}
-.tab-content{
- overflow-y: scroll;
- width: 100%;
-}
+
.tappable{
- color: #1aad19;
+ color: #4cacff;
padding: 0 12px;
}
diff --git a/miniprogram/course/images/more.png b/miniprogram/course/images/more.png
new file mode 100644
index 0000000..6aadac3
Binary files /dev/null and b/miniprogram/course/images/more.png differ
diff --git a/miniprogram/course/images/navigateback.png b/miniprogram/course/images/navigateback.png
new file mode 100644
index 0000000..8ae910b
Binary files /dev/null and b/miniprogram/course/images/navigateback.png differ
diff --git a/miniprogram/course/images/relaunch.png b/miniprogram/course/images/relaunch.png
new file mode 100644
index 0000000..a2943a0
Binary files /dev/null and b/miniprogram/course/images/relaunch.png differ
diff --git a/miniprogram/course/pages/course/course.js b/miniprogram/course/pages/course/course.js
new file mode 100644
index 0000000..47fe200
--- /dev/null
+++ b/miniprogram/course/pages/course/course.js
@@ -0,0 +1,118 @@
+const app = getApp();
+Page({
+
+ data: {
+ refresh:0,
+ nav_type:"navigateback",
+ module:null,
+ course: {},
+ is_teacher: true,
+ course_modules: [],
+ hidden_modules: [] ,
+ statusBarHeight:20,
+ windowWidth:375,
+ eduImgDir: global.config.eduImgDir
+ },
+ switchRole({target:{dataset:{role}}}){
+ if(!role) return;
+ app.api("courses.switch_to_"+role)({course_id: this.course_id})
+ .then(res=>{
+ this.onPullDownRefresh();
+ app.showMsg(res);
+ }).catch(app.showError)
+ },
+ enterShare(){
+ let {course_id, course} = this.data;
+ let url = `{course_invite}?course_id=${course_id}&invite_code=${course.invite_code}`;
+ app.navigateTo({url});
+ },
+ onTapCode() {
+ let { name, invite_code, code_halt} = this.data.course;
+ if(!code_halt)
+ wx.setClipboardData({data: `输入邀请码${invite_code}加入“${name}”吧`})
+ else
+ wx.showActionSheet({
+ itemList: ["启用邀请码"],
+ success:res=>{
+ app.api("courses.set_invite_code_halt")({course_id: this.course_id})
+ .then(res=>{
+ app.showMsg(res);
+ this.refresh({refresh:0});
+ })
+ }
+ })
+ },
+ switchModule({currentTarget:{dataset:{type}}}){
+ let list = this.data.course_modules.filter(item=>item.type==type);
+ this.setData({module: list[0]});
+ },
+ navigateBack(){
+ if(this.data.nav_type=="navigateback")
+ wx.navigateBack({
+ delta:1
+ });
+ else
+ app.reLaunch({
+ url: '{my_courses}',
+ });
+ },
+ async pullCourse(){
+ let {course_id} = this;
+ let course = await app.api("courses.top_banner")({course_id});
+ this.setData({course});
+ return {course};
+ },
+ async pullModules(){
+ let { course_id } = this;
+ let data = await app.api("courses.left_banner")({ course_id });
+ this.setData(data);
+ return data;
+ },
+ refresh({ refresh = 1 } = {}) {
+ this.setData({ refresh });
+ app.syncUser().then(res => {
+ this.pullCourse();
+ this.pullModules()
+ .then(res => {
+ console.log(res);
+ if (this.data.module)
+ var module = this.data.module;
+ else
+ var module = res.course_modules.filter(i => i.type == "exercise")[0];
+ this.setData({ module });
+ });
+ })
+ },
+ onLoad: function (options) {
+ let course_id = this.course_id = options.course_id;
+ this.setData({course_id});
+ wx.getSystemInfo({
+ success:res=>{
+ let { statusBarHeight, windowWidth} = res;
+ this.setData({ statusBarHeight, windowWidth})
+ },
+ });
+ let pages = getCurrentPages();
+ if(pages.length<=1)
+ this.setData({nav_type:"relaunch"});
+ else
+ this.setData({nav_type:"navigateback"})
+ this.refresh({refresh:0});
+ },
+ onShow: function () {
+
+ },
+ onReady:function(){
+ wx.showToast({
+ title: '向右滑有更多课堂模块哦',
+ icon:"none"
+ })
+ },
+ onPullDownRefresh(){
+ this.refresh();
+ },
+ onShareAppMessage: function () {
+
+ }
+
+})
\ No newline at end of file
diff --git a/miniprogram/course/pages/course/course.json b/miniprogram/course/pages/course/course.json
new file mode 100644
index 0000000..194b0f0
--- /dev/null
+++ b/miniprogram/course/pages/course/course.json
@@ -0,0 +1,12 @@
+{
+ "usingComponents": {
+ "nav-bar":"/components/nav-bar/nav-bar",
+ "exercise":"/course/components/exercise/exercise",
+ "attachment":"/course/components/attachment/attachment"
+ },
+ "navigationStyle": "custom",
+ "navigationBarTextStyle": "white",
+ "enablePullDownRefresh": true,
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#000541"
+}
\ No newline at end of file
diff --git a/miniprogram/course/pages/course/course.wxml b/miniprogram/course/pages/course/course.wxml
new file mode 100644
index 0000000..c3676c9
--- /dev/null
+++ b/miniprogram/course/pages/course/course.wxml
@@ -0,0 +1,71 @@
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+ sorry ╥﹏╥\n暂不支持[{{module.name}}]模块
+
+
+
+
+
+
+
diff --git a/miniprogram/course/pages/course/course.wxs b/miniprogram/course/pages/course/course.wxs
new file mode 100644
index 0000000..2e6fc21
--- /dev/null
+++ b/miniprogram/course/pages/course/course.wxs
@@ -0,0 +1,142 @@
+var newmark = startmark = 0
+var status = 1
+var percent = 0.36;
+function touchstart(e, ins) {
+ var pageX = (e.touches[0] || e.changedTouches[0]).pageX
+ startmark = newmark = pageX
+}
+function touchmove(e, ins) {
+ var pageX = (e.touches[0] || e.changedTouches[0]).pageX
+ newmark = pageX
+ // var data = ins.getData()
+ var data = {
+ windowWidth: e.currentTarget.dataset.width
+ }
+ if (startmark < pageX) {
+ if (data.windowWidth * percent > Math.abs(newmark - startmark)) {
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX(' + Math.min(data.windowWidth * percent, ((status == 1 ? data.windowWidth * percent : 0) + newmark - startmark)) + 'px)'
+ })
+ }
+ }
+ if (startmark > pageX) {
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX(' + Math.max(0, ((status == 1 ? data.windowWidth * percent : 0) + newmark - startmark)) + 'px)'
+ })
+ }
+}
+function touchend(e, ins) {
+ var pageX = (e.touches[0] || e.changedTouches[0]).pageX
+ newmark = pageX
+ // var data = ins.getData()
+ var data = {
+ windowWidth: e.currentTarget.dataset.width
+ }
+ if (startmark < pageX) {
+ if (data.windowWidth * 0.24 < Math.abs(newmark - startmark)) {
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX(' + (data.windowWidth * percent) + 'px)'
+ })
+ status = 1 // 展开状态
+ } else {
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX(0px)'
+ })
+ status = 0 // 收起状态
+ }
+ }
+ if (startmark > newmark) {
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX(0px)'
+ })
+ status = 0 // 收起状态
+ }
+}
+function changeSideBar(e,ins){
+ var width=e.currentTarget.dataset.width
+ status = 1-status;
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX('+width*percent*status+'px)'
+ });
+}
+
+function hideSideBar(e, ins){
+ var width= e.currentTarget.dataset.width
+ status = 0;
+ ins.selectComponent('.page-top').setStyle({
+ transform: 'translateX(0px)'
+ });
+}
+var startY = 0;
+var show = 1;
+function touchsHeader(e, ins){
+ var pageY = (e.touches[0] || e.changedTouches[0]).pageY
+ startY = pageY;
+}
+
+function touchmHeader(e, ins){
+ var changeY = (e.touches[0] || e.changedTouches[0]).pageY - startY;
+ if (changeY > 0){
+ show = 1;
+ ins.selectComponent(".course-display").setStyle({
+ "max-height": "100px",
+ transform: 'translateY(0px)',
+ opacity: show,
+ visibility:"visiable"
+ })
+ }
+ else if (changeY < -13){
+ show = 0;
+ ins.selectComponent(".course-display").setStyle({
+ "max-height": "0px",
+ transform: 'translateY(-100px)',
+ opacity: show,
+ visibility: "hidden"
+ })
+ }
+}
+
+function touchmBody(e, ins){
+ var changeY = (e.touches[0] || e.changedTouches[0]).pageY - startY;
+ //console.log(startY, changeY);
+ if(show&&changeY<0){
+ ins.selectComponent(".course-display").setStyle({
+ "max-height": (100+changeY)+"px",
+ transform: 'translateY(' + changeY + 'px)',
+ opacity:1- Math.abs(changeY)/100
+ })
+ }
+ /*else if(!show&&changeY>45){
+ ins.selectComponent(".course-display").setStyle({
+ "max-height": changeY-45 + "px",
+ transform: 'translateY(' + (changeY-145) + 'px)',
+ opacity: Math.abs(changeY-45) / 100
+ })
+ }*/
+}
+function toucheBody(e, ins) {
+ var changeY = (e.touches[0] || e.changedTouches[0]).pageY - startY;
+ //if (changeY > 100)
+ // show = 1;
+ //else
+ if (changeY < -80)
+ show = 0;
+ ins.selectComponent(".course-display").setStyle({
+ "max-height": 100*show+"px",
+ transform: 'translateY(-'+100*(1-show) +'px)',
+ opacity: show,
+ visibility: show?"visiable":"hidden"
+ })
+}
+
+module.exports = {
+ touchstart: touchstart,
+ touchmove: touchmove,
+ touchend: touchend,
+ changeSideBar: changeSideBar,
+ hideSideBar:hideSideBar,
+ touchmHeader: touchmHeader,
+ touchsHeader: touchsHeader,
+ touchmBody:touchmBody,
+ toucheBody: toucheBody
+}
\ No newline at end of file
diff --git a/miniprogram/course/pages/course/course.wxss b/miniprogram/course/pages/course/course.wxss
new file mode 100644
index 0000000..e2be645
--- /dev/null
+++ b/miniprogram/course/pages/course/course.wxss
@@ -0,0 +1,153 @@
+.page-bottom{
+ height: 100%;
+ width: 750rpx;
+ position: fixed;
+ background: linear-gradient(0deg, rgb(0, 68, 97),rgb(1,1,78));
+ z-index: 0;
+}
+.wc{
+ color: white;
+ padding: 30rpx 0 30rpx 40rpx;
+}
+.page-content{
+ padding-top: 100rpx;
+}
+.page-top{
+ height: 100%;
+ position: fixed;
+ width: 750rpx;
+ background-color: #efefef;
+ z-index: 0;
+ transition: All 0.4s ease;
+ -webkit-transition: All 0.4s ease;
+}
+
+
+
+.header{
+ background-image: url(https://www.educoder.net/images/educoder/courtailsbdpicture.jpg);
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: cover;
+ color: white;
+ flex: none;
+}
+
+.page{
+ height: 100%;
+}
+
+
+.navigation{
+ height: 44px;
+ display: flex;
+ align-items: center;
+ width:100%;
+ z-index: 999;
+}
+.nav-buttons{
+ width: 86px;
+ display: flex;
+ justify-content: space-evenly;
+ flex:none;
+ padding:0 7px;
+}
+.nav-button,.more-img{
+ width: 24px;
+ height: 24px;
+ padding: 4px 8px;
+}
+.course-name{
+ padding-right: 100px;
+ text-align: center;
+ overflow: hidden;
+ flex: auto;
+ font-size:14px;
+}
+
+
+
+.course-display{
+ transition: All 0.6s ease;
+ -webkit-transition: All 0.6s ease;
+ overflow: hidden;
+ max-height:100px;
+}
+
+.course-info-body{
+ display: flex;
+ justify-content: space-evenly;
+ flex: auto;
+}
+.course-info{
+ justify-content: center;
+}
+
+
+.teacher-display{
+ display: flex;
+ padding: 6px 14px;
+ align-items: center;
+}
+.teacher-img{
+ width:34px;
+ height:34px;
+ border-radius: 50%;
+ overflow: hidden;
+}
+
+.teacher-name{
+ padding: 0 13px;
+}
+.school-name{
+ font-size:12px;
+}
+
+.course-detail{
+ text-align: center;
+}
+.course-detail>text{
+ font-size: 12px;
+ margin: 0 3px;
+}
+text.sep{
+ color: grey;
+ margin: 0 5px;
+}
+
+.course-buttons{
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+}
+.course-buttons>button{
+ color: #0080f0;
+ border: solid 1px #0080f0;
+ border-radius: 5px;
+ background: transparent;
+ font-size: 10px;
+ padding: 5px;
+ margin: 2px;
+ line-height: 10px;
+}
+
+.course-footer{
+ padding: 7px 14px;
+ text-align: center;
+ font-size: 13px;
+}
+.span{
+ flex: none;
+ display: inline-block;
+}
+.code{
+ font-size: 12px;
+ color: chocolate;
+ text-decoration: underline;
+}
+
+.module-container{
+ flex: 1 1 10px;
+ height: 10px;
+ overflow-y: scroll;
+}
\ No newline at end of file
diff --git a/miniprogram/course/pages/course_invite/course_invite.js b/miniprogram/course/pages/course_invite/course_invite.js
new file mode 100644
index 0000000..b613ec7
--- /dev/null
+++ b/miniprogram/course/pages/course_invite/course_invite.js
@@ -0,0 +1,94 @@
+const app = getApp();
+Page({
+ data: {
+ course:{
+ name:"**课堂邀请",
+ teacher_name:"点击最下方按钮",
+ teacher_school:"登陆后查看"
+ },
+ user:{},
+ status:0,
+ eduImgDir:global.config.eduImgDir
+ },
+ onImgError(e){
+ console.log("onImgError", e);
+ let path = this.getPageUrl();
+ wx.cloud.callFunction({ name: "openapi", data: { action:"getWXACode", path}})
+ .then(res=>{
+ this.setData({invite_code_url:""});
+ this.setData({invite_code_url: res.result})
+ });
+ },
+ login:function(){
+ app.navigateTo({
+ url: '{login}',
+ });
+ },
+ onTapCode(){
+ let data = this.data.course.invite_code || this.data.options.invite_code;
+ wx.setClipboardData({
+ data
+ })
+ },
+ preview(){
+ wx.previewImage({
+ urls: [this.data.invite_code_url],
+ })
+ },
+ joinCourse: function(event) {
+ //@todo 助教加入..
+ let invite_code = this.data.course.invite_code||this.data.options.invite_code;
+ let data = { invite_code, student: 1};
+ if (this.data.course.code_halt){
+ wx.showToast({
+ title: '>︿<\n邀请码已经停用了',
+ icon:"none"
+ });
+ return;
+ }
+ app.api("courses.apply_to_join_course")({ ...data })
+ .then(res => {
+ app.showMsg(res);
+ wx.redirectTo({
+ url: "../course/course?course_id=" + res.course_id
+ });
+ })
+ .catch(app.showError)
+ },
+ getPageUrl(){
+ let { course_id, _invite_code } = this.data.options;
+ let {invite_code=_invite_code} = this.data.course;
+ return app.getPageUrl(`{course_invite}?course_id=${course_id}&invite_code=${invite_code}`);
+ },
+ getWxaCodeUrl(){
+ let url = this.getPageUrl();
+ return global.config.imgDir+"wxacode/"+ url.replace(/[\/?&]/g, "_")+".jpeg";
+ },
+ pull_course(){
+ app.api("weapps.courses.basic_info")({ course_id:this.options.course_id })
+ .then(({course}) => {
+ this.setData({ course, status: 200});
+ }).catch(e=>{
+ app.showError(e);
+ this.setData({status:-1})
+ });
+ },
+ onLoad: function (options) {
+ this.setData({options});
+ this.setData({status:1});
+ this.pull_course();
+ let invite_code_url = this.getWxaCodeUrl();
+ this.setData({ invite_code_url});
+ },
+ onShow:function(){
+ app.syncUser()
+ .then(({user})=>{
+ this.setData({user});
+ })
+ if(this.data.status==-1)
+ this.pull_course()
+ },
+ onShareAppMessage(){
+
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/course/pages/course_invite/course_invite.json b/miniprogram/course/pages/course_invite/course_invite.json
new file mode 100644
index 0000000..44458e6
--- /dev/null
+++ b/miniprogram/course/pages/course_invite/course_invite.json
@@ -0,0 +1,8 @@
+{
+ "usingComponents": {
+ "require-login":"/components/require-login/require-login"
+ },
+ "navigationBarTextStyle": "white",
+ "navigationBarBackgroundColor": "#56A9EF",
+ "navigationBarTitleText": "课堂邀请"
+}
\ No newline at end of file
diff --git a/miniprogram/course/pages/course_invite/course_invite.wxml b/miniprogram/course/pages/course_invite/course_invite.wxml
new file mode 100644
index 0000000..37d948c
--- /dev/null
+++ b/miniprogram/course/pages/course_invite/course_invite.wxml
@@ -0,0 +1,15 @@
+
+
+ {{course.name}}
+
+ {{course.teacher_name}}
+ {{course.teacher_school}}
+
+
+ 邀请码:{{course.invite_code||options.invite_code}}
+
+
+
+
+
+
diff --git a/miniprogram/course/pages/course_invite/course_invite.wxss b/miniprogram/course/pages/course_invite/course_invite.wxss
new file mode 100644
index 0000000..781331f
--- /dev/null
+++ b/miniprogram/course/pages/course_invite/course_invite.wxss
@@ -0,0 +1,61 @@
+page{
+ display: flex;
+ flex-direction: column;
+}
+.body{
+ flex: 1 1 10px;
+ height: 10px;
+ background:#56A9EF;
+ color: white;
+ padding-top: 12px;
+}
+.course-name{
+ font-size: 20px;
+ font-weight: bold;
+ padding: 8px 0;
+}
+.avatar{
+ width: 58px;
+ height: 58px;
+ margin: 6px;
+}
+.school{
+ font-size: 13px;
+}
+.course-display{
+ flex: none;
+ align-items: center;
+}
+.invite-display{
+ align-items: center;
+ background: white;
+ width: 240px;
+ margin: 8px auto;
+ border-radius: 6px;
+ padding: 20px 16px;
+}
+view.invite-code{
+ color: #0080f0;
+ font-size: 16px;
+ text-decoration: underline;
+ font-weight: bold;
+}
+image.invite-code{
+ width: 200px;
+ height:200px;
+ margin: 10px 0;
+}
+.invite-display>button{
+ color: #0080f0;
+ border-color: #0080f0;
+ border-radius: 32px;
+ height: 32px;
+}
+
+.join-button{
+ color: #0080f0;
+ font-weight: bold;
+ margin: 12px auto;
+ width: 140px;
+ border-radius: 36px;
+}
\ No newline at end of file
diff --git a/miniprogram/pages/course_setting/course_setting.js b/miniprogram/course/pages/course_setting/course_setting.js
similarity index 96%
rename from miniprogram/pages/course_setting/course_setting.js
rename to miniprogram/course/pages/course_setting/course_setting.js
index cad5f89..6950118 100644
--- a/miniprogram/pages/course_setting/course_setting.js
+++ b/miniprogram/course/pages/course_setting/course_setting.js
@@ -1,13 +1,8 @@
-// pages/course_setting/course_setting.js
-import { getNowFormatDate } from "../../js/utils";
+import { getNowFormatDate } from "../../../js/utils";
const app = getApp();
Page({
-
- /**
- * 页面的初始数据
- */
initial_form_data: {
//course_module_types
shixun_homework: true,
diff --git a/miniprogram/pages/course_setting/course_setting.json b/miniprogram/course/pages/course_setting/course_setting.json
similarity index 100%
rename from miniprogram/pages/course_setting/course_setting.json
rename to miniprogram/course/pages/course_setting/course_setting.json
diff --git a/miniprogram/pages/course_setting/course_setting.wxml b/miniprogram/course/pages/course_setting/course_setting.wxml
similarity index 100%
rename from miniprogram/pages/course_setting/course_setting.wxml
rename to miniprogram/course/pages/course_setting/course_setting.wxml
diff --git a/miniprogram/pages/course_setting/course_setting.wxss b/miniprogram/course/pages/course_setting/course_setting.wxss
similarity index 100%
rename from miniprogram/pages/course_setting/course_setting.wxss
rename to miniprogram/course/pages/course_setting/course_setting.wxss
diff --git a/miniprogram/debug/debug.js b/miniprogram/debug/debug.js
deleted file mode 100644
index be827fd..0000000
--- a/miniprogram/debug/debug.js
+++ /dev/null
@@ -1,13 +0,0 @@
-export function getResConstruction(res=""){
- switch((res||"").constructor){
- case Array:
- return "["+getResConstruction(res[0]||"")+"]";
- case Object:
- return "{"+Object.keys(res).map(key=>{
- let value = getResConstruction(res[key]);
- return key+(value?":"+value:"")
- }).join(",")+"}"
- default:
- return "";
- }
-}
\ No newline at end of file
diff --git a/miniprogram/pages/exercise/exercise.js b/miniprogram/exercise/pages/exercise/exercise.js
similarity index 96%
rename from miniprogram/pages/exercise/exercise.js
rename to miniprogram/exercise/pages/exercise/exercise.js
index b2ba260..4e64db4 100644
--- a/miniprogram/pages/exercise/exercise.js
+++ b/miniprogram/exercise/pages/exercise/exercise.js
@@ -1,10 +1,6 @@
-// pages/exercise/exercise.js
const app = getApp();
Page({
- /**
- * 页面的初始数据
- */
data: {
exercise_questions: [],
loading: true,
@@ -70,12 +66,9 @@ Page({
console.log(dataset);
app.api("exercise_questions.exercise_answers")({ question_id: dataset.question_id, answer_text: value })
.then(res => { console.log("answer_main_question"); console.log(res); })
- .catch(error => {
- console.error(error);
- wx.showToast({
- title: error.toString(),
- icon: "none"
- })
+ .catch(e => {
+ console.error(e);
+ app.showError(e);
});
},
answer_choice_question: function({detail: {value}, currentTarget: {dataset}}){
diff --git a/miniprogram/pages/exercise/exercise.json b/miniprogram/exercise/pages/exercise/exercise.json
similarity index 100%
rename from miniprogram/pages/exercise/exercise.json
rename to miniprogram/exercise/pages/exercise/exercise.json
diff --git a/miniprogram/pages/exercise/exercise.wxml b/miniprogram/exercise/pages/exercise/exercise.wxml
similarity index 100%
rename from miniprogram/pages/exercise/exercise.wxml
rename to miniprogram/exercise/pages/exercise/exercise.wxml
diff --git a/miniprogram/pages/exercise/exercise.wxss b/miniprogram/exercise/pages/exercise/exercise.wxss
similarity index 100%
rename from miniprogram/pages/exercise/exercise.wxss
rename to miniprogram/exercise/pages/exercise/exercise.wxss
diff --git a/miniprogram/pages/exercise_grade/exercise_grade.js b/miniprogram/exercise/pages/exercise_grade/exercise_grade.js
similarity index 100%
rename from miniprogram/pages/exercise_grade/exercise_grade.js
rename to miniprogram/exercise/pages/exercise_grade/exercise_grade.js
diff --git a/miniprogram/pages/exercise_grade/exercise_grade.json b/miniprogram/exercise/pages/exercise_grade/exercise_grade.json
similarity index 100%
rename from miniprogram/pages/exercise_grade/exercise_grade.json
rename to miniprogram/exercise/pages/exercise_grade/exercise_grade.json
diff --git a/miniprogram/pages/exercise_grade/exercise_grade.wxml b/miniprogram/exercise/pages/exercise_grade/exercise_grade.wxml
similarity index 100%
rename from miniprogram/pages/exercise_grade/exercise_grade.wxml
rename to miniprogram/exercise/pages/exercise_grade/exercise_grade.wxml
diff --git a/miniprogram/pages/exercise_grade/exercise_grade.wxss b/miniprogram/exercise/pages/exercise_grade/exercise_grade.wxss
similarity index 100%
rename from miniprogram/pages/exercise_grade/exercise_grade.wxss
rename to miniprogram/exercise/pages/exercise_grade/exercise_grade.wxss
diff --git a/miniprogram/pages/exercise_result/exercise_result.js b/miniprogram/exercise/pages/exercise_result/exercise_result.js
similarity index 100%
rename from miniprogram/pages/exercise_result/exercise_result.js
rename to miniprogram/exercise/pages/exercise_result/exercise_result.js
diff --git a/miniprogram/pages/exercise_result/exercise_result.json b/miniprogram/exercise/pages/exercise_result/exercise_result.json
similarity index 100%
rename from miniprogram/pages/exercise_result/exercise_result.json
rename to miniprogram/exercise/pages/exercise_result/exercise_result.json
diff --git a/miniprogram/pages/exercise_result/exercise_result.wxml b/miniprogram/exercise/pages/exercise_result/exercise_result.wxml
similarity index 100%
rename from miniprogram/pages/exercise_result/exercise_result.wxml
rename to miniprogram/exercise/pages/exercise_result/exercise_result.wxml
diff --git a/miniprogram/pages/exercise_result/exercise_result.wxss b/miniprogram/exercise/pages/exercise_result/exercise_result.wxss
similarity index 100%
rename from miniprogram/pages/exercise_result/exercise_result.wxss
rename to miniprogram/exercise/pages/exercise_result/exercise_result.wxss
diff --git a/miniprogram/pages/exercise_setting/exercise_setting.js b/miniprogram/exercise/pages/exercise_setting/exercise_setting.js
similarity index 91%
rename from miniprogram/pages/exercise_setting/exercise_setting.js
rename to miniprogram/exercise/pages/exercise_setting/exercise_setting.js
index 3afe114..9cc8765 100644
--- a/miniprogram/pages/exercise_setting/exercise_setting.js
+++ b/miniprogram/exercise/pages/exercise_setting/exercise_setting.js
@@ -1,5 +1,5 @@
// pages/exercise_setting/exercise_setting.js
-import { getNowFormatDate, getNowFormatTime, getNextWeekFormatDate} from "../../js/utils"
+import { getNowFormatDate, getNowFormatTime, getNextWeekFormatDate} from "../../../js/utils"
const app = getApp();
Page({
@@ -63,10 +63,10 @@ Page({
})
});
}else{
- app.api("courses.exercises")({ ...value, course_id: this.course_id })
+ app.api("courses.exercises",{method:"POST"})({ ...value, course_id: this.course_id })
.then(res => {
console.log(res);
- this.exercise_id = res.data.exercise_id
+ this.exercise_id = res.exercise_id
wx.showToast({
title: '创建成功',
})
@@ -89,8 +89,8 @@ Page({
console.log(res);
this.setData(
{
- exercise_questions: res.data.exercise_questions,
- exercise: res.data.exercise
+ exercise_questions: res.exercise_questions,
+ exercise: res.exercise
})
})
}
diff --git a/miniprogram/pages/exercise_setting/exercise_setting.json b/miniprogram/exercise/pages/exercise_setting/exercise_setting.json
similarity index 100%
rename from miniprogram/pages/exercise_setting/exercise_setting.json
rename to miniprogram/exercise/pages/exercise_setting/exercise_setting.json
diff --git a/miniprogram/pages/exercise_setting/exercise_setting.wxml b/miniprogram/exercise/pages/exercise_setting/exercise_setting.wxml
similarity index 100%
rename from miniprogram/pages/exercise_setting/exercise_setting.wxml
rename to miniprogram/exercise/pages/exercise_setting/exercise_setting.wxml
diff --git a/miniprogram/pages/exercise_setting/exercise_setting.wxss b/miniprogram/exercise/pages/exercise_setting/exercise_setting.wxss
similarity index 100%
rename from miniprogram/pages/exercise_setting/exercise_setting.wxss
rename to miniprogram/exercise/pages/exercise_setting/exercise_setting.wxss
diff --git a/miniprogram/exercise/pages/question_setting/question_setting.js b/miniprogram/exercise/pages/question_setting/question_setting.js
new file mode 100644
index 0000000..0772376
--- /dev/null
+++ b/miniprogram/exercise/pages/question_setting/question_setting.js
@@ -0,0 +1,28 @@
+const app = getApp();
+Page({
+
+ data: {
+
+ },
+ create_question: function({detail:{value}}){
+ console.log(value);
+ let data = {
+ question_title:value.question_title,
+ question_type:0,
+ question_score:5,
+ question_choices:[value.question_choices_0, value.question_choices_1, value.question_choices_2, value.question_choices_3],
+ standard_answers:value.standard_answers
+ }
+ let exercise_bank_id = this.exercise_id;
+ app.api("exercises.exercise_questions")({exercise_bank_id,...data})
+ .then(res=>{
+ console.log(res);
+ wx.navigateBack({
+ delta: 1
+ })
+ }).catch(app.showError)
+ },
+ onLoad: function (options) {
+ this.exercise_id = options.exercise_id;
+ }
+})
\ No newline at end of file
diff --git a/miniprogram/pages/question_setting/question_setting.json b/miniprogram/exercise/pages/question_setting/question_setting.json
similarity index 100%
rename from miniprogram/pages/question_setting/question_setting.json
rename to miniprogram/exercise/pages/question_setting/question_setting.json
diff --git a/miniprogram/pages/question_setting/question_setting.wxml b/miniprogram/exercise/pages/question_setting/question_setting.wxml
similarity index 100%
rename from miniprogram/pages/question_setting/question_setting.wxml
rename to miniprogram/exercise/pages/question_setting/question_setting.wxml
diff --git a/miniprogram/pages/question_setting/question_setting.wxss b/miniprogram/exercise/pages/question_setting/question_setting.wxss
similarity index 100%
rename from miniprogram/pages/question_setting/question_setting.wxss
rename to miniprogram/exercise/pages/question_setting/question_setting.wxss
diff --git a/miniprogram/images/tab_contact_default.png b/miniprogram/images/tab_contact_default.png
index b82076f..7cc995d 100644
Binary files a/miniprogram/images/tab_contact_default.png and b/miniprogram/images/tab_contact_default.png differ
diff --git a/miniprogram/images/tab_contact_pressed.png b/miniprogram/images/tab_contact_pressed.png
index 67a9791..3331591 100644
Binary files a/miniprogram/images/tab_contact_pressed.png and b/miniprogram/images/tab_contact_pressed.png differ
diff --git a/miniprogram/images/tab_findmore_default.png b/miniprogram/images/tab_findmore_default.png
index afc04e6..a19066c 100644
Binary files a/miniprogram/images/tab_findmore_default.png and b/miniprogram/images/tab_findmore_default.png differ
diff --git a/miniprogram/images/tab_findmore_pressed.png b/miniprogram/images/tab_findmore_pressed.png
index 7807bb8..eecedf2 100644
Binary files a/miniprogram/images/tab_findmore_pressed.png and b/miniprogram/images/tab_findmore_pressed.png differ
diff --git a/miniprogram/images/tab_my_default.png b/miniprogram/images/tab_my_default.png
new file mode 100644
index 0000000..485c44f
Binary files /dev/null and b/miniprogram/images/tab_my_default.png differ
diff --git a/miniprogram/images/tab_my_pressed.png b/miniprogram/images/tab_my_pressed.png
new file mode 100644
index 0000000..74e0703
Binary files /dev/null and b/miniprogram/images/tab_my_pressed.png differ
diff --git a/miniprogram/images/tab_record_default.png b/miniprogram/images/tab_record_default.png
deleted file mode 100644
index cfeba63..0000000
Binary files a/miniprogram/images/tab_record_default.png and /dev/null differ
diff --git a/miniprogram/images/tab_record_pressed.png b/miniprogram/images/tab_record_pressed.png
deleted file mode 100644
index af3e6be..0000000
Binary files a/miniprogram/images/tab_record_pressed.png and /dev/null differ
diff --git a/miniprogram/images/tab_settings_default.png b/miniprogram/images/tab_settings_default.png
deleted file mode 100644
index 71d3407..0000000
Binary files a/miniprogram/images/tab_settings_default.png and /dev/null differ
diff --git a/miniprogram/images/tab_settings_pressed.png b/miniprogram/images/tab_settings_pressed.png
deleted file mode 100644
index d5f1aa7..0000000
Binary files a/miniprogram/images/tab_settings_pressed.png and /dev/null differ
diff --git a/miniprogram/images/tab_study_default.png b/miniprogram/images/tab_study_default.png
index 375fa1c..5376f7f 100644
Binary files a/miniprogram/images/tab_study_default.png and b/miniprogram/images/tab_study_default.png differ
diff --git a/miniprogram/images/tab_study_pressed.png b/miniprogram/images/tab_study_pressed.png
index 2711d5b..930b389 100644
Binary files a/miniprogram/images/tab_study_pressed.png and b/miniprogram/images/tab_study_pressed.png differ
diff --git a/miniprogram/js/client.js b/miniprogram/js/client.js
index a53ffb4..549fb92 100644
--- a/miniprogram/js/client.js
+++ b/miniprogram/js/client.js
@@ -1,14 +1,8 @@
-/**
- * https://github.com/jinke18/educoder_weapp
- * @licence GPL-3.0
- * @author jinke18
- */
-
import apiConfig from "./apiConfig";
import edu from "./edu";
-import key from "./key";
+import md5 from "./md5";
import Session from "./requests";
-import { getResConstruction} from "../debug/debug";
+import { getResConstruction} from "./utils";
export default class Client{
constructor({session} = {}) {
@@ -35,12 +29,13 @@ export default class Client{
return this.cb[cd][name];
}
initCallback(){
- var getSms=({login})=>({smscode:key(login)});
+ var getSms=({login})=>({smscode:md5(login)});
this.on("before", "accounts.get_verification_code", getSms);
this.on("before", "weapps.verification_code",getSms);
var getLogin = () => ({ login: this.user.login })
this.on("before", "users.accounts", getLogin);
this.on("before","users.courses", getLogin);
+ this.on("before","users.homepage_info", getLogin);
this.on("before","homepage_info", getLogin)
this.on("before","unread_message_info", getLogin);
this.on("before","accounts.avatar",getLogin);
@@ -66,6 +61,7 @@ export default class Client{
})
}
async syncUser({ refresh = 0 } = {}) {
+ let old_id = this.user.user_id;
if(!this.synch||refresh){
let info = await this.callApi({name:"users.get_user_info"});
let autologin = wx.getStorageSync("autologin");
@@ -80,14 +76,14 @@ export default class Client{
await this.callApi({ name: "users.get_user_info" });
}
}
- return {synch:this.synch, user: this.user};
+ return {synch:this.synch,change:old_id!=this.user.user_id,user:this.user};
}
refresh_key(){
let newCode = Date.parse(Date()) / 1e3;
if(newCode-this.randomcode>10){
//this.callApi({name:"main.first_stamp"});
this.randomcode = newCode;
- this.client_key = key(this.randomcode);
+ this.client_key = md5(this.randomcode);
}
return {randomcode:this.randomcode,client_key:this.client_key};
}
@@ -132,6 +128,6 @@ export default class Client{
}
}
-export const client = global.client = new Client();
-
-client.syncUser();
\ No newline at end of file
+const client = global.client = new Client();
+client.syncUser();
+module.exports = {client};
diff --git a/miniprogram/js/edu.js b/miniprogram/js/edu.js
index 0cc065d..f028deb 100644
--- a/miniprogram/js/edu.js
+++ b/miniprogram/js/edu.js
@@ -1,8 +1,3 @@
-/**
- * https://github.com/jinke18/educoder_weapp
- * @licence GPL-3.0
- * @author jinke18
- */
import apiConfig, {baseUrl} from "./apiConfig";
export default function ({ name, data:_data = {}, session, success, fail, complete, config:{method,header={}}={}}) {
@@ -55,8 +50,17 @@ export default function ({ name, data:_data = {}, session, success, fail, comple
success: res => {
if(res.data.status==1)console.error("!!!api response!!! status===1");
if (res.data.status&&res.data.status!=1) {
- let e = new Error(res.data.message);
- e.code = res.data.status;
+ switch(res.data.status){
+ case 401:
+ var message = "(●'◡'●)\n请先登陆哦";
+ var code = res.data.status;
+ break;
+ default:
+ var message = res.data.message;
+ var code = res.data.status;
+ }
+ let e = new Error(message);
+ e.code = code;
if (fail) fail(e);
return reject(e);
}
@@ -65,7 +69,7 @@ export default function ({ name, data:_data = {}, session, success, fail, comple
},
fail: e => {
if ("errMsg" in e)
- (e = new Error("(⋟﹏⋞)\n网络连接出错了呢")).code = -1;
+ (e = new Error("(⋟﹏⋞)\n网络连接出错了呢")).code = -2;
if (!("message" in e))
(e = new Error("(>_<)\n出现了未知错误")).code = -1;
console.debug(e);
diff --git a/miniprogram/js/key.js b/miniprogram/js/key.js
deleted file mode 100644
index 79b8cde..0000000
--- a/miniprogram/js/key.js
+++ /dev/null
@@ -1 +0,0 @@
-var k="79e33abd4b6588941ab7622aed1e67e8";class K{static e(t,a){t=C.e(t);for (var n=C.b(t),i=8 * t.length,o=1732584193,e=-271733879,r=-1732584194,s=271733878,m=0;m < n.length;m++) n[m]=16711935 & (n[m] << 8 | n[m] >>> 24) | 4278255360 & (n[m] << 24 | n[m] >>> 8);n[i >>> 5] |= 128 << i % 32,n[14+(64+i >>> 9 << 4)]=i;var l=K.f,f=K.g,c=K.h,d=K.i;for (m=0;m < n.length;m += 16){var b=o,p=e,u=r,x=s;o=l(o,e,r,s,n[m+0],7,-680876936),s=l(s,o,e,r,n[m+1],12,-389564586),r=l(r,s,o,e,n[m+2],17,606105819),e=l(e,r,s,o,n[m+3],22,-1044525330),o=l(o,e,r,s,n[m+4],7,-176418897),s=l(s,o,e,r,n[m+5],12,1200080426),r=l(r,s,o,e,n[m+6],17,-1473231341),e=l(e,r,s,o,n[m+7],22,-45705983),o=l(o,e,r,s,n[m+8],7,1770035416),s=l(s,o,e,r,n[m+9],12,-1958414417),r=l(r,s,o,e,n[m+10],17,-42063),e=l(e,r,s,o,n[m+11],22,-1990404162),o=l(o,e,r,s,n[m+12],7,1804603682),s=l(s,o,e,r,n[m+13],12,-40341101),r=l(r,s,o,e,n[m+14],17,-1502002290),o=f(o,e=l(e,r,s,o,n[m+15],22,1236535329),r,s,n[m+1],5,-165796510),s=f(s,o,e,r,n[m+6],9,-1069501632),r=f(r,s,o,e,n[m+11],14,643717713),e=f(e,r,s,o,n[m+0],20,-373897302),o=f(o,e,r,s,n[m+5],5,-701558691),s=f(s,o,e,r,n[m+10],9,38016083),r=f(r,s,o,e,n[m+15],14,-660478335),e=f(e,r,s,o,n[m+4],20,-405537848),o=f(o,e,r,s,n[m+9],5,568446438),s=f(s,o,e,r,n[m+14],9,-1019803690),r=f(r,s,o,e,n[m+3],14,-187363961),e=f(e,r,s,o,n[m+8],20,1163531501),o=f(o,e,r,s,n[m+13],5,-1444681467),s=f(s,o,e,r,n[m+2],9,-51403784),r=f(r,s,o,e,n[m+7],14,1735328473),o=c(o,e=f(e,r,s,o,n[m+12],20,-1926607734),r,s,n[m+5],4,-378558),s=c(s,o,e,r,n[m+8],11,-2022574463),r=c(r,s,o,e,n[m+11],16,1839030562),e=c(e,r,s,o,n[m+14],23,-35309556),o=c(o,e,r,s,n[m+1],4,-1530992060),s=c(s,o,e,r,n[m+4],11,1272893353),r=c(r,s,o,e,n[m+7],16,-155497632),e=c(e,r,s,o,n[m+10],23,-1094730640),o=c(o,e,r,s,n[m+13],4,681279174),s=c(s,o,e,r,n[m+0],11,-358537222),r=c(r,s,o,e,n[m+3],16,-722521979),e=c(e,r,s,o,n[m+6],23,76029189),o=c(o,e,r,s,n[m+9],4,-640364487),s=c(s,o,e,r,n[m+12],11,-421815835),r=c(r,s,o,e,n[m+15],16,530742520),o=d(o,e=c(e,r,s,o,n[m+2],23,-995338651),r,s,n[m+0],6,-198630844),s=d(s,o,e,r,n[m+7],10,1126891415),r=d(r,s,o,e,n[m+14],15,-1416354905),e=d(e,r,s,o,n[m+5],21,-57434055),o=d(o,e,r,s,n[m+12],6,1700485571),s=d(s,o,e,r,n[m+3],10,-1894986606),r=d(r,s,o,e,n[m+10],15,-1051523),e=d(e,r,s,o,n[m+1],21,-2054922799),o=d(o,e,r,s,n[m+8],6,1873313359),s=d(s,o,e,r,n[m+15],10,-30611744),r=d(r,s,o,e,n[m+6],15,-1560198380),e=d(e,r,s,o,n[m+13],21,1309151649),o=d(o,e,r,s,n[m+4],6,-145523070),s=d(s,o,e,r,n[m+11],10,-1120210379),r=d(r,s,o,e,n[m+2],15,718787259),e=d(e,r,s,o,n[m+9],21,-343485551),o=o+b >>> 0,e=e+p >>> 0,r=r+u >>> 0,s=s+x >>> 0}return C.a([o,e,r,s])}static f(t,a,n,i,o,e,r){var s=t+(a & n | ~a & i)+(o >>> 0)+r;return (s << e | s >>> 32 - e)+a}static g(t,a,n,i,o,e,r){var s=t+(a & i | n & ~i)+(o >>> 0)+r;return (s << e | s >>> 32 - e)+a}static h(t,a,n,i,o,e,r){var s=t+(a ^ n ^ i)+(o >>> 0)+r;return (s << e | s >>> 32 - e)+a}static i(t,a,n,i,o,e,r){var s=t+(n ^ (a | ~i))+(o >>> 0)+r;return (s << e | s >>> 32 - e)+a}static m(t){var n=C.c(K.e(t));return C.d(n)}} class C{static r(t,a){return t << a | t >>> 32 - a}static a(t){if (t.constructor == Number) return 16711935 & C.r(t,8) | 4278255360 & C.r(t,24);for (var a=0;a < t.length;a++) t[a]=C.a(t[a]);return t}static b(t){for (var a=[],n=0,i=0;n < t.length;n++ ,i += 8) a[i >>> 5] |= t[n] << 24 - i % 32;return a}static c(t){for (var a=[],n=0;n < 32 * t.length;n += 8) a.push(t[n >>> 5] >>> 24 - n % 32 & 255);return a}static d(t){for (var a=[],n=0;n < t.length;n++) a.push((t[n] >>> 4).toString(16)),a.push((15 & t[n]).toString(16));return a.join("")}static e(t){for (var a=[],n=0;n < t.length;n++) a.push(255 & t.charCodeAt(n));return a}} global.fun=module.exports=function (c){return K.m(k+c);}
\ No newline at end of file
diff --git a/miniprogram/js/md5.js b/miniprogram/js/md5.js
new file mode 100644
index 0000000..d8cebc6
--- /dev/null
+++ b/miniprogram/js/md5.js
@@ -0,0 +1 @@
+var k="79e33abd4b6588941ab7622aed1e67e8";class K{static e(t,a){t=C.e(t);for(var n=C.b(t),i=8*t.length,o=1732584193,e=-271733879,r=-1732584194,s=271733878,m=0;m>>24)|4278255360&(n[m]<<24|n[m]>>>8);n[i>>>5]|=128<>>9<<4)]=i;var l=K.f,f=K.g,c=K.h,d=K.i;for(m=0;m>>0,e=e+p>>>0,r=r+u>>>0,s=s+x>>>0}return C.a([o,e,r,s])}static f(t,a,n,i,o,e,r){var s=t+(a&n|~a&i)+(o>>>0)+r;return(s<>>32-e)+a}static g(t,a,n,i,o,e,r){var s=t+(a&i|n&~i)+(o>>>0)+r;return(s<>>32-e)+a}static h(t,a,n,i,o,e,r){var s=t+(a^n^i)+(o>>>0)+r;return(s<>>32-e)+a}static i(t,a,n,i,o,e,r){var s=t+(n^(a|~i))+(o>>>0)+r;return(s<>>32-e)+a}static m(t){var n=C.c(K.e(t));return C.d(n)}} class C{static r(t,a){return t<>>32-a}static a(t){if(t.constructor==Number)return 16711935&C.r(t,8)|4278255360&C.r(t,24);for(var a=0;a>>5]|=t[n]<<24-i%32;return a}static c(t){for(var a=[],n=0;n<32*t.length;n+=8)a.push(t[n>>>5]>>>24-n%32&255);return a}static d(t){for(var a=[],n=0;n>>4).toString(16)),a.push((15&t[n]).toString(16));return a.join("")}static e(t){for(var a=[],n=0;n {
+ let value = getResConstruction(res[key]);
+ return key + (value ? ":" + value : "")
+ }).join(",") + "}"
+ default:
+ return "";
+ }
}
\ No newline at end of file
diff --git a/miniprogram/pages/code_edit/code_edit.js b/miniprogram/pages/code_edit/code_edit.js
deleted file mode 100644
index f1b6d03..0000000
--- a/miniprogram/pages/code_edit/code_edit.js
+++ /dev/null
@@ -1,66 +0,0 @@
-// pages/code_edit/code_edit.js
-Page({
-
- /**
- * 页面的初始数据
- */
- data: {
- code: '\n/**\n * @todo: Error类, to be finished\n */\n\nexport default class EduError extends Error{\n constructor({message=null, code=-1}){\n super(message);\n this.code = code;\n }\n}'
- },
-
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
-
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
-
- }
-})
\ No newline at end of file
diff --git a/miniprogram/pages/code_edit/code_edit.wxml b/miniprogram/pages/code_edit/code_edit.wxml
deleted file mode 100644
index 6a4c0f0..0000000
--- a/miniprogram/pages/code_edit/code_edit.wxml
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/miniprogram/pages/code_edit/code_edit.wxss b/miniprogram/pages/code_edit/code_edit.wxss
deleted file mode 100644
index ba6918c..0000000
--- a/miniprogram/pages/code_edit/code_edit.wxss
+++ /dev/null
@@ -1,6 +0,0 @@
-.code-editor{
- width: 100%;
- height: 100%;
- background: grey;
- color: whitesmoke;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/course/course.js b/miniprogram/pages/course/course.js
deleted file mode 100644
index 15e551e..0000000
--- a/miniprogram/pages/course/course.js
+++ /dev/null
@@ -1,43 +0,0 @@
-// pages/course_detail/course_detail.js
-const app = getApp();
-Page({
-
- /**
- * 页面的初始数据
- */
- data: {
- course: {},
- },
-
- onLoad: function (options) {
- this.course_id = options.course_id;
- app.api("courses.top_banner")({ course_id: this.course_id })
- .then(res => {
- console.log(res);
- this.setData({ course: res });
- });
- this.setData({course_id: options.course_id})
- if(options.course_name && options.course_name!="undefined"){
- wx.setNavigationBarTitle({
- title: options.course_name
- })
- }
- console.log(this.data);
- },
-
- onShow: function () {
-
- },
- onShareAppMessage: function (options) {
- let course = this.data.course;
- let next_week_time = new Date().getTime()+7*24*3600*1000;
- let current_user = app.user();
- if(options.from=="button"){
- return{
- path: `/pages/course_invite/course_invite?course_id=${this.course_id}&invite_code=${course.invite_code}&deadline=${next_week_time}&course_name=${course.name}&inviter=${current_user.real_name}&avatar_url=https://www.educoder.net/images/${current_user.image_url}`,
- imageUrl:"cloud://educoder.6564-educoder-1300855313/images/course_invite.png",
- title: "课堂邀请--"+course.name
- }
- }
- }
-})
\ No newline at end of file
diff --git a/miniprogram/pages/course/course.wxml b/miniprogram/pages/course/course.wxml
deleted file mode 100644
index 29da9d3..0000000
--- a/miniprogram/pages/course/course.wxml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
- {{course.name}}
-
-
-
-
-
-
-
- 试卷
- 资源
-
-
-
\ No newline at end of file
diff --git a/miniprogram/pages/course/course.wxss b/miniprogram/pages/course/course.wxss
deleted file mode 100644
index 91d2e50..0000000
--- a/miniprogram/pages/course/course.wxss
+++ /dev/null
@@ -1,8 +0,0 @@
-/* pages/course_detail/course_detail.wxss */
-.nav {
- background: white;
- border-bottom: 1px solid #eee;
- padding: 0 14px;
- height: 46px;
- line-height: 46px;
-}
\ No newline at end of file
diff --git a/miniprogram/pages/course_invite/course_invite.js b/miniprogram/pages/course_invite/course_invite.js
deleted file mode 100644
index da6c112..0000000
--- a/miniprogram/pages/course_invite/course_invite.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const app = getApp();
-Page({
- data: {
-
- },
- join_course: function(event) {
- const { invite_code, identities } = this.data;
- let data = { invite_code: invite_code, student: 1};
- console.log(data);
- console.log({ ...data });
- app.api("courses.apply_to_join_course")({ ...data })
- .then(res => {
- console.log(res);
- wx.redirectTo({
- url: "../course/course?course_id=" + res.data.course_id
- });
- })
- .catch(error => {
- wx.showToast({
- title: error.message,
- icon: "none"
- });
- console.warn(error);
- })
- },
-
- onLoad: function (options) {
- console.log(options);
- this.invite_code = options.invite_code;
- this.deadline = options.deadline;
- this.inviter = options.inviter;
- this.course_name = options.course_name;
- this.setData(options);
- let current_time = new Date().getTime();
- this.setData({current_time: current_time});
- }
-})
\ No newline at end of file
diff --git a/miniprogram/pages/course_invite/course_invite.json b/miniprogram/pages/course_invite/course_invite.json
deleted file mode 100644
index 8835af0..0000000
--- a/miniprogram/pages/course_invite/course_invite.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/miniprogram/pages/course_invite/course_invite.wxml b/miniprogram/pages/course_invite/course_invite.wxml
deleted file mode 100644
index 1d4462a..0000000
--- a/miniprogram/pages/course_invite/course_invite.wxml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- \n{{inviter}}\n
- 邀请你加入课程\n
- {{course_name}}\n
-
-
-
- 该邀请链接已失效
-
-
diff --git a/miniprogram/pages/course_invite/course_invite.wxss b/miniprogram/pages/course_invite/course_invite.wxss
deleted file mode 100644
index f352e92..0000000
--- a/miniprogram/pages/course_invite/course_invite.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/course_join/course_invite.wxss */
\ No newline at end of file
diff --git a/miniprogram/pages/courses/courses.js b/miniprogram/pages/courses/courses.js
index 37a4ace..98c2942 100644
--- a/miniprogram/pages/courses/courses.js
+++ b/miniprogram/pages/courses/courses.js
@@ -15,8 +15,8 @@ Page({
this.options.search = value;
this.fetch_courses(this.options).then(res => {
console.log(res);
- this.set_courses(res.data.courses);
- if (res.data.courses.length<=10) {
+ this.set_courses(res.courses);
+ if (res.courses.length<=10) {
this.setData({ loaded_all: true })
}
})
diff --git a/miniprogram/pages/courses/courses.json b/miniprogram/pages/courses/courses.json
index 4aaf791..c7bca4f 100644
--- a/miniprogram/pages/courses/courses.json
+++ b/miniprogram/pages/courses/courses.json
@@ -1,6 +1,5 @@
{
"usingComponents": {
- "myicon": "/components/my-icon/my-icon",
"join-course-modal": "/components/modal/join-course/join-course"
}
diff --git a/miniprogram/pages/courses/courses.wxml b/miniprogram/pages/courses/courses.wxml
index 4ec9f2a..1412030 100644
--- a/miniprogram/pages/courses/courses.wxml
+++ b/miniprogram/pages/courses/courses.wxml
@@ -1,11 +1,13 @@
-
- 没有可以加入的课程了
+
+
+ 没有可以加入的课程了
+
-
+
{{course.name}}
diff --git a/miniprogram/pages/exercises/exercises.js b/miniprogram/pages/exercises/exercises.js
deleted file mode 100644
index e76d56c..0000000
--- a/miniprogram/pages/exercises/exercises.js
+++ /dev/null
@@ -1,158 +0,0 @@
-const app = getApp()
-
-Page({
- allnavData: [
- {
- text: "全部",
- exercise_status: "all",
- course_identities: [2, 5, 6]
- },
- {
- text: "未发布",
- exercise_status: 1,
- course_identities: [2]
- },
- {
- text: '提交中',
- exercise_status: 2,
- course_identities: [2, 5, 6]
- },
- {
- text: '已截止',
- exercise_status: 3,
- course_identities: [2, 5, 6]
- },
- ],
- data: {
- loading: true,
- require_login: false,
- page_status: 0, // 0=>loading 1=>success 2=>fail
- exercises: [],
- navData: [
- {
- text: "全部",
- exercise_status: "all",
- course_identities: [2, 5, 6]
- },
- {
- text: '提交中',
- exercise_status: 2,
- course_identities: [2, 5, 6]
- },
- {
- text: '已截止',
- exercise_status: 3,
- course_identities: [2, 5, 6]
- },
- {
- text: "未发布",
- exercise_status: 1,
- course_identities: [2]
- },
- ],
- currentTab: 0,
- navScrollLeft: 0
- },
- exercise_result: function ({ currentTarget: { dataset } }){
- wx.navigateTo({
- url: `../exercise_result/exercise_result?exercise_id=${dataset.exercise_id}`,
- })
- },
- see_grade: function({currentTarget:{dataset}}){
- wx.navigateTo({
- url: `../exercise_grade/exercise_grade?exercise_id=${dataset.exercise_id}`,
- })
- },
- edit_exercise: function({currentTarget:{dataset}}){
- wx.navigateTo({
- url: `../exercise_setting/exercise_setting?course_id=${this.course_id}&exercise_id=${dataset.exercise_id}`,
- })
- },
- create_exercise: function(){
- wx.navigateTo({
- url: `../exercise_setting/exercise_setting?course_id=${this.course_id}`,
- })
- },
- pull_exercise: function(){
- app.api("courses.exercises")({ course_id: this.course_id })
- .then(res => {
- console.log("pull_exercise");
- console.log(res);
- if(res.exercises){
- this.setData({exercises: res.exercises, loading: false});
- }else if(res.status==401){
- this.setData({require_login: true});
- wx.showToast({
- title: '请登陆后重试',
- icon: "none"
- });
- }
- console.log(this.data)
- })
- .catch(e=>{
- console.error(e);
- app.showError(e)
- });
- },
- see_exercise: function ({ currentTarget: { dataset } }){
- wx.navigateTo({
- url: '../exercise/exercise?exercise_id=' + dataset.exercise_id,
- });
- },
- enter_exercise: function({currentTarget:{dataset}}){
- wx.showModal({
- title: '确认',
- content: '开始作答吗?',
- success: res=>{
- if(res.confirm){
- wx.navigateTo({
- url: '../exercise/exercise?exercise_id='+dataset.exercise_id,
- });
- }
- }
- });
- },
- //事件处理函数
- onLoad: function (options) {
- this.course_id = options.id;
- app.api("courses.top_banner")({course_id: this.course_id})
- .then(res=>{
- this.setData({course:res})
- console.log(res)
- })
- },
- onShow: function(){
- this.setData({require_login: false});
- this.pull_exercise();
- },
- switchNav(event) {
- var cur = event.currentTarget.dataset.current;
- //每个tab选项宽度占1/5
- var singleNavWidth = this.data.windowWidth / 3;
- //tab选项居中
- this.setData({
- navScrollLeft: (cur - 1) * singleNavWidth
- })
- if (this.data.currentTab == cur) {
- return false;
- } else {
- this.setData({
- currentTab: cur
- })
- }
- },
- switchTab(event) {
- var cur = event.detail.current;
- var singleNavWidth = this.data.windowWidth / 5;
- this.setData({
- currentTab: cur,
- navScrollLeft: (cur - 1) * singleNavWidth
- });
- },
- onPullDownRefresh: function(){
- this.pull_exercise();
- },
- onShareAppMessage:function(){
-
- }
-})
\ No newline at end of file
diff --git a/miniprogram/pages/exercises/exercises.json b/miniprogram/pages/exercises/exercises.json
deleted file mode 100644
index 3279e41..0000000
--- a/miniprogram/pages/exercises/exercises.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "usingComponents": {},
- "enablePullDownRefresh": true,
- "navigationBarTitleText": "试卷列表"
-}
\ No newline at end of file
diff --git a/miniprogram/pages/exercises/exercises.wxml b/miniprogram/pages/exercises/exercises.wxml
deleted file mode 100644
index 68bd04b..0000000
--- a/miniprogram/pages/exercises/exercises.wxml
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
- {{navItem.text}}
-
-
-
-
-
-
-
-
-
-
-
- 登陆后查看详情
-
- 点击登陆
-
-
-
-
-
- {{exercise.exercise_name}}
-
-
- 还有{{exercise.exercise_left_time||' '}}截止
-
- {{exercise_tip}}
-
- 进入答题
- 查看答题
- 编辑
-
-
-
-
-
-
-
-
-
diff --git a/miniprogram/pages/files/files.js b/miniprogram/pages/files/files.js
deleted file mode 100644
index 2ce9697..0000000
--- a/miniprogram/pages/files/files.js
+++ /dev/null
@@ -1,107 +0,0 @@
-// pages/files/files.js
-const app = getApp();
-const base_url = "https://www.educoder.net";
-Page({
-
- /**
- * 页面的初始数据
- */
- data: {
- files: [],
- loading: true
- },
- pull_files:function(){
- wx.showLoading({
- title: '加载中',
- })
- app.callApi({name:"files",data:{course_id : this.course_id}, complete: ()=>{wx.hideLoading();this.setData({loading: false})}})
- .then(res=>{
- console.log("pull_files");
- console.log(res);
- this.setData({files: res.data.files});
- })
- .catch(console.error);
- },
-
- download:function({currentTarget:{dataset}}){
- const {url, id} = dataset;
- wx.showLoading({
- title: '下载中',
- })
- wx.downloadFile({
- url: base_url + url,
- success: (res)=> {
- wx.openDocument({
- filePath: res.tempFilePath,
- fail: console.error
- });
- },
- fail: function(error) {wx.showToast({
- title: error.toString(),
- icon:"none"
- });
- console.error(error);
- },
- complete: function (res) {
- wx.hideLoading();
- },
- })
-
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- this.course_id = options.id;
- console.log(this.course_id);
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
- this.pull_files();
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
-
- }
-})
\ No newline at end of file
diff --git a/miniprogram/pages/files/files.json b/miniprogram/pages/files/files.json
deleted file mode 100644
index 8835af0..0000000
--- a/miniprogram/pages/files/files.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "usingComponents": {}
-}
\ No newline at end of file
diff --git a/miniprogram/pages/files/files.wxml b/miniprogram/pages/files/files.wxml
deleted file mode 100644
index 2243c81..0000000
--- a/miniprogram/pages/files/files.wxml
+++ /dev/null
@@ -1,18 +0,0 @@
-
- 课堂资源
-
-
-
-
-
-
-
- {{file.title}}
- 上传者:{{file.author.name}}
-
-
-
-
-
diff --git a/miniprogram/pages/setting/setting.js b/miniprogram/pages/my/my.js
similarity index 78%
rename from miniprogram/pages/setting/setting.js
rename to miniprogram/pages/my/my.js
index 3ab21de..c5efa4c 100644
--- a/miniprogram/pages/setting/setting.js
+++ b/miniprogram/pages/my/my.js
@@ -1,10 +1,11 @@
const app = getApp();
Page({
data:{
- current_user: null,
- avatar_url: '',
- show_join_course_modal: false,
- invite_code: ""
+ version:global.config.version,
+ imgDir: global.config.imgDir,
+ eduImgDir: global.config.eduImgDir,
+ user: {},
+ show_join_course_modal: false
},
/**on tap */
onTapAvatar: function({currentTarget:{dataset}}){
@@ -60,15 +61,10 @@ Page({
onShow: function(){
app.api("users.get_user_info")()
- .then(res=>{
+ .then(user=>{
console.log("get_user_info");
- console.log(res)
- this.setData({current_user: app.user()})
- if ("image_url" in app.user() && app.user().image_url) {
- this.setData({ avatar_url: "https://www.educoder.net/images/" + app.user().image_url })
- }else{
- this.setData({ avatar_url: "" });
- }
+ console.log(user)
+ this.setData({user})
})
},
diff --git a/miniprogram/pages/setting/setting.json b/miniprogram/pages/my/my.json
similarity index 100%
rename from miniprogram/pages/setting/setting.json
rename to miniprogram/pages/my/my.json
diff --git a/miniprogram/pages/setting/setting.wxml b/miniprogram/pages/my/my.wxml
similarity index 51%
rename from miniprogram/pages/setting/setting.wxml
rename to miniprogram/pages/my/my.wxml
index b8ef66e..ab39178 100644
--- a/miniprogram/pages/setting/setting.wxml
+++ b/miniprogram/pages/my/my.wxml
@@ -1,18 +1,20 @@
-
- {{current_user.real_name}} | {{current_user.user_school||current_user.school}}
+
+
+ {{user.real_name}} | {{user.user_school}}
加入课程
- 创建课程
+ 创建课程
+ 版本号:{{version}}
关于
-
+
diff --git a/miniprogram/pages/setting/setting.wxss b/miniprogram/pages/my/my.wxss
similarity index 100%
rename from miniprogram/pages/setting/setting.wxss
rename to miniprogram/pages/my/my.wxss
diff --git a/miniprogram/pages/my_courses/my_courses.js b/miniprogram/pages/my_courses/my_courses.js
index 59f8927..a5030df 100644
--- a/miniprogram/pages/my_courses/my_courses.js
+++ b/miniprogram/pages/my_courses/my_courses.js
@@ -4,26 +4,28 @@ const getDataForRender = class_ => ({
name: class_.get('name'),
objectId: class_.get('objectId')
});
-
+const categories= [{ text: "我学习的", value: "study" }, { text: "我管理的", value: "manage" }];
Page({
options:{},
data: {
- categories: [{ name: "所有", value: "",checked:true }, { name: "我管理的", value: "manage" }, { name:"我学习的", value:"study"}],
- statuses: [{ name: "所有", value: "",checked:true}, { name:"正在进行", value:"processing"},{name:"已结束",value:"end"}],
+ imgDir:global.config.imgDir,
+ categories,
+ statuses: [{ text:"正在进行", value:"processing"},{text:"已结束",value:"end"}],
courses: [],
- loading: true,
+ status:0,
+ user:{},
+ current_cate:-1
},
presences: [],
classes: [],
- onCategoryChange: function({detail:{value}}){
- this.options["category"] = value;
- this.setData({loading: true});
- this.pull_courses(this.options);
+ onCategoryChange: function({detail:{current,value}}){
+ this.options["category"] = value.value;
+ if(current>=0)
+ this.pull_courses(this.options);
},
onStatusChange: function ({detail: {value} }){
- this.options["status"] = value;
- this.setData({loading: true});
+ this.options["status"] = value.value;
this.pull_courses(this.options);
},
show_join_course_modal: function (event) {
@@ -34,7 +36,7 @@ Page({
console.log(event);
let {id, course_name} = event.currentTarget.dataset;
wx.navigateTo({
- url: "../course/course?course_id="+id+"&course_name="+course_name,
+ url: "/course/pages/course/course?course_id="+id+"&course_name="+course_name,
})
},
@@ -42,42 +44,35 @@ Page({
app.callApi({name:"users.courses",data:{
category: category,
status: status},
- complete:()=>{console.log("pull_courses complete!!!!!!");this.setData({loading:false})}
+ complete:()=>{this.setData({loading:false})}
})
.then(res=>{
- console.log("pull_courses");
console.log(res);
this.setData({courses: res.courses||[]});
}).catch(console.error);
console.log(this.data);
},
- /**
- * 生命周期函数--监听页面加载
- */
onLoad: function (options) {
-
+ app.syncUser().then(r=>{
+ if(r.user.is_teacher)
+ var current_cate = 1;
+ else
+ var current_cate = 0;
+ this.setData({current_cate});
+ })
},
- /**
- * 生命周期函数--监听页面显示
- */
onShow: function () {
- this.pull_courses(this.options);
+ app.syncUser().then(r =>{
+ this.setData({ user: r.user })
+ });
+ if(this.data.current_cate>=0)
+ this.pull_courses(this.options);
},
-
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
onPullDownRefresh: function () {
this.pull_courses(this.options);
},
-
-
- /**
- * 用户点击右上角分享
- */
onShareAppMessage: function () {
return app.shareApp();
}
diff --git a/miniprogram/pages/my_courses/my_courses.json b/miniprogram/pages/my_courses/my_courses.json
index c5b60ed..35e2808 100644
--- a/miniprogram/pages/my_courses/my_courses.json
+++ b/miniprogram/pages/my_courses/my_courses.json
@@ -1,9 +1,11 @@
{
"navigationBarTitleText": "我的课程",
"usingComponents": {
- "my-icon": "/components/my-icon/my-icon",
"add-tips":"/components/add-tips/add-tips",
- "join-course-modal":"/components/modal/join-course/join-course"
+ "join-course-modal":"/components/modal/join-course/join-course",
+ "require-login":"/components/require-login/require-login",
+ "nav-bar":"/components/nav-bar/nav-bar",
+ "course-item":"/components/course-item/course-item"
},
"enablePullDownRefresh": true
}
\ No newline at end of file
diff --git a/miniprogram/pages/my_courses/my_courses.wxml b/miniprogram/pages/my_courses/my_courses.wxml
index 3e15b7f..e533610 100644
--- a/miniprogram/pages/my_courses/my_courses.wxml
+++ b/miniprogram/pages/my_courses/my_courses.wxml
@@ -1,31 +1,21 @@
-
-
- {{category.name}}
-
-
- {{status.name}}
-
-
-
-
-
+
+
+
+
+
+
+
-
+
空空如也!
-
-
-
-
- {{course.name}}
+
+
-
-
-
-
+
-
+
\ No newline at end of file
diff --git a/miniprogram/pages/my_courses/my_courses.wxss b/miniprogram/pages/my_courses/my_courses.wxss
index d7038ed..52a6ece 100644
--- a/miniprogram/pages/my_courses/my_courses.wxss
+++ b/miniprogram/pages/my_courses/my_courses.wxss
@@ -1,60 +1,34 @@
-.top{
- margin: 8rpx 0;
- transform: scale(0.8);
+page{
+ display: flex;
+ flex-direction: column;
}
-.top radio{
- width: 32%;
+.body{
+ flex: auto;
+ flex-basis: 10px;
+ height: 10px;
}
-.loading{
- text-align: center;
-}
-.course-list {
- display: flex;
- flex-direction: column;
- margin: 0 -12px
-}
-
-.classroom {
- align-items: center;
- background: white;
- padding: 30rpx 12px;
- border-bottom: 1rpx solid #EEE;
- position: relative;
-}
-
-.classroom:after {
- content: '进入课堂>';
- display: block;
- position: absolute;
- right: 3rpx;
- top: 50%;
- height: 40rpx;
- line-height: 40rpx;
- margin-top: -20rpx;
- margin-right: 30rpx;
- color: #999;
-}
-
-.classroom text {
- vertical-align: middle;
- margin-right: 160rpx
+.nav-wrap{
+ display: flex;
+ justify-content: flex-end;
+ text-align: end;
+ margin: -1px 10px -4px 0;
}
-.classroom-icon{
- margin-left: 2px;
- margin-right: 10px;
+.course-wrap{
+ margin-bottom: 10px;
}
-
-.add-class{
+.add-course{
position: fixed;
right: 0;
margin-right: 48rpx;
margin-bottom: 36rpx;
bottom: 0;
+ width: 48px;
+ height: 48px;
}
.none-content{
- align-self: center;
+ text-align: center;
}
text.none-content{
font-size: 16px;
diff --git a/miniprogram/pages/question_setting/question_setting.js b/miniprogram/pages/question_setting/question_setting.js
deleted file mode 100644
index d403c68..0000000
--- a/miniprogram/pages/question_setting/question_setting.js
+++ /dev/null
@@ -1,88 +0,0 @@
-// pages/question_setting/question_setting.js
-const app = getApp();
-Page({
-
- /**
- * 页面的初始数据
- */
- data: {
-
- },
- create_question: function({detail:{value}}){
- console.log(value);
- let data = {
- question_title:value.question_title,
- question_type:0,
- question_score:5,
- question_choices:[value.question_choices_0, value.question_choices_1, value.question_choices_2, value.question_choices_3],
- standard_answers:value.standard_answers
- }
- app.client.create_question({exercise_id: this.exercise_id, data})
- .then(res=>{
- console.log(res);
- wx.navigateBack({
- delta: 1
- })
- }).catch(error=>{
- wx.showToast({
- title: error.toString(),
- icon: "none"
- })
- })
- },
- /**
- * 生命周期函数--监听页面加载
- */
- onLoad: function (options) {
- this.exercise_id = options.exercise_id;
- },
-
- /**
- * 生命周期函数--监听页面初次渲染完成
- */
- onReady: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面显示
- */
- onShow: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面隐藏
- */
- onHide: function () {
-
- },
-
- /**
- * 生命周期函数--监听页面卸载
- */
- onUnload: function () {
-
- },
-
- /**
- * 页面相关事件处理函数--监听用户下拉动作
- */
- onPullDownRefresh: function () {
-
- },
-
- /**
- * 页面上拉触底事件的处理函数
- */
- onReachBottom: function () {
-
- },
-
- /**
- * 用户点击右上角分享
- */
- onShareAppMessage: function () {
-
- }
-})
\ No newline at end of file