From 1c58b3c40a80f8bde77061dd9a1bb5f31c9717ea Mon Sep 17 00:00:00 2001 From: nm Date: Wed, 9 Oct 2024 12:09:14 +0800 Subject: [PATCH] code 123 --- .gitignore | 14 + README.md | 2 - app.js | 31 + app.json | 34 ++ app.wxss | 11 + components/navigation-bar/navigation-bar.js | 105 ++++ components/navigation-bar/navigation-bar.json | 5 + components/navigation-bar/navigation-bar.wxml | 64 +++ components/navigation-bar/navigation-bar.wxss | 96 ++++ images/rank1.png | Bin 0 -> 30996 bytes images/rank2.png | Bin 0 -> 30902 bytes images/rank3.png | Bin 0 -> 30967 bytes pages/change.zip | Bin 0 -> 3869 bytes pages/change/change.js | 417 ++++++++++++++ pages/change/change.json | 5 + pages/change/change.wxml | 17 + pages/change/change.wxss | 78 +++ pages/comment/comment.js | 107 ++++ pages/comment/comment.json | 5 + pages/comment/comment.wxml | 20 + pages/comment/comment.wxss | 94 +++ pages/demo1/demo1.js | 66 +++ pages/demo1/demo1.json | 3 + pages/demo1/demo1.wxml | 2 + pages/demo1/demo1.wxss | 1 + pages/index/index.js | 105 ++++ pages/index/index.json | 5 + pages/index/index.wxml | 25 + pages/index/index.wxss | 143 +++++ pages/index2/index2.js | 27 + pages/index2/index2.json | 5 + pages/index2/index2.wxml | 8 + pages/index2/index2.wxss | 34 ++ pages/index3/index3.js | 71 +++ pages/index3/index3.json | 3 + pages/index3/index3.wxml | 14 + pages/index3/index3.wxss | 66 +++ pages/index4/index4.js | 66 +++ pages/index4/index4.json | 3 + pages/index4/index4.wxml | 2 + pages/index4/index4.wxss | 1 + pages/index5/index5.js | 18 + pages/index5/index5.json | 5 + pages/index5/index5.wxml | 9 + pages/index5/index5.wxss | 55 ++ pages/rankk/rankk.js | 89 +++ pages/rankk/rankk.json | 5 + pages/rankk/rankk.wxml | 27 + pages/rankk/rankk.wxss | 130 +++++ pages/stu_client/stu_client.js | 21 + pages/stu_client/stu_client.json | 5 + pages/stu_client/stu_client.wxml | 5 + pages/stu_client/stu_client.wxss | 54 ++ pages/upload_stu/upload_stu.js | 85 +++ pages/upload_stu/upload_stu.json | 5 + pages/upload_stu/upload_stu.wxml | 5 + pages/upload_stu/upload_stu.wxss | 28 + project.config.json | 30 + project.private.config.json | 84 +++ sitemap.json | 7 + style/iconfont/demo.css | 539 ++++++++++++++++++ style/iconfont/demo_index.html | 211 +++++++ style/iconfont/iconfont.js | 1 + style/iconfont/iconfont.json | 16 + style/iconfont/iconfont.ttf | Bin 0 -> 1644 bytes style/iconfont/iconfont.woff | Bin 0 -> 1044 bytes style/iconfont/iconfont.woff2 | Bin 0 -> 676 bytes style/iconfont/iconfont.wxss | 26 + 68 files changed, 3213 insertions(+), 2 deletions(-) create mode 100644 .gitignore delete mode 100644 README.md create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 components/navigation-bar/navigation-bar.js create mode 100644 components/navigation-bar/navigation-bar.json create mode 100644 components/navigation-bar/navigation-bar.wxml create mode 100644 components/navigation-bar/navigation-bar.wxss create mode 100644 images/rank1.png create mode 100644 images/rank2.png create mode 100644 images/rank3.png create mode 100644 pages/change.zip create mode 100644 pages/change/change.js create mode 100644 pages/change/change.json create mode 100644 pages/change/change.wxml create mode 100644 pages/change/change.wxss create mode 100644 pages/comment/comment.js create mode 100644 pages/comment/comment.json create mode 100644 pages/comment/comment.wxml create mode 100644 pages/comment/comment.wxss create mode 100644 pages/demo1/demo1.js create mode 100644 pages/demo1/demo1.json create mode 100644 pages/demo1/demo1.wxml create mode 100644 pages/demo1/demo1.wxss create mode 100644 pages/index/index.js create mode 100644 pages/index/index.json create mode 100644 pages/index/index.wxml create mode 100644 pages/index/index.wxss create mode 100644 pages/index2/index2.js create mode 100644 pages/index2/index2.json create mode 100644 pages/index2/index2.wxml create mode 100644 pages/index2/index2.wxss create mode 100644 pages/index3/index3.js create mode 100644 pages/index3/index3.json create mode 100644 pages/index3/index3.wxml create mode 100644 pages/index3/index3.wxss create mode 100644 pages/index4/index4.js create mode 100644 pages/index4/index4.json create mode 100644 pages/index4/index4.wxml create mode 100644 pages/index4/index4.wxss create mode 100644 pages/index5/index5.js create mode 100644 pages/index5/index5.json create mode 100644 pages/index5/index5.wxml create mode 100644 pages/index5/index5.wxss create mode 100644 pages/rankk/rankk.js create mode 100644 pages/rankk/rankk.json create mode 100644 pages/rankk/rankk.wxml create mode 100644 pages/rankk/rankk.wxss create mode 100644 pages/stu_client/stu_client.js create mode 100644 pages/stu_client/stu_client.json create mode 100644 pages/stu_client/stu_client.wxml create mode 100644 pages/stu_client/stu_client.wxss create mode 100644 pages/upload_stu/upload_stu.js create mode 100644 pages/upload_stu/upload_stu.json create mode 100644 pages/upload_stu/upload_stu.wxml create mode 100644 pages/upload_stu/upload_stu.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 sitemap.json create mode 100644 style/iconfont/demo.css create mode 100644 style/iconfont/demo_index.html create mode 100644 style/iconfont/iconfont.js create mode 100644 style/iconfont/iconfont.json create mode 100644 style/iconfont/iconfont.ttf create mode 100644 style/iconfont/iconfont.woff create mode 100644 style/iconfont/iconfont.woff2 create mode 100644 style/iconfont/iconfont.wxss diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10fa70b --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# Windows +[Dd]esktop.ini +Thumbs.db +$RECYCLE.BIN/ + +# macOS +.DS_Store +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes + +# Node.js +node_modules/ diff --git a/README.md b/README.md deleted file mode 100644 index f1c6e12..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# order - diff --git a/app.js b/app.js new file mode 100644 index 0000000..40ca96c --- /dev/null +++ b/app.js @@ -0,0 +1,31 @@ +// app.js +App({}) +wx.cloud.init({ + env: 'software-9g3qgled9f6190ea' // 你的环境ID + }) + App({ + globalData: { + mynum: 0 , + myname:'', + }, +   onLaunch: function () { +     wx.cloud.init({ +       env: 'software-9g3qgled9f6190ea', // 替换为你的云开发环境ID +       traceUser: false, // 是否在将用户访问记录到用户管理中,在控制台中可见,默认为false +     }); +   }, + onHide: function(){ + const app = getApp(); + let db = wx.cloud.database(); //设置数据库 + let user = db.collection('user_ol');//单引号里为刚刚新建的集合名 + user.where({ + //先查询 + num: app.globalData.mynum + }).remove().then(res => { + console.log('删除成功') + }).catch(err => { + console.log('删除失败',err)//失败提示错误信息 + }) + + }, + }); \ No newline at end of file diff --git a/app.json b/app.json new file mode 100644 index 0000000..5ea39d9 --- /dev/null +++ b/app.json @@ -0,0 +1,34 @@ +{ + "pages": [ + "pages/index/index", + "pages/index5/index5", + "pages/index4/index4", + "pages/index2/index2", + "pages/rankk/rankk", + "pages/upload_stu/upload_stu", + "pages/change/change", + "pages/demo1/demo1", + "pages/index3/index3", + "pages/stu_client/stu_client", + "pages/comment/comment" + + ], + "window": { + "navigationBarTextStyle": "black", + "navigationStyle": "custom", + "navigationBarTitleText": "微信接口功能演示" + }, + "style": "v2", + "renderer": "skyline", + "rendererOptions": { + "skyline": { + "defaultDisplayBlock": true, + "disableABTest": true, + "sdkVersionBegin": "3.0.0", + "sdkVersionEnd": "15.255.255" + } + }, + "componentFramework": "glass-easel", + "sitemapLocation": "sitemap.json", + "lazyCodeLoading": "requiredComponents" +} diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..a21c7c2 --- /dev/null +++ b/app.wxss @@ -0,0 +1,11 @@ +/**app.wxss**/ +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 200rpx 0; + box-sizing: border-box; +} +@import "./style/iconfont/iconfont.wxss" diff --git a/components/navigation-bar/navigation-bar.js b/components/navigation-bar/navigation-bar.js new file mode 100644 index 0000000..e93f90f --- /dev/null +++ b/components/navigation-bar/navigation-bar.js @@ -0,0 +1,105 @@ +Component({ + options: { + multipleSlots: true // 在组件定义时的选项中启用多slot支持 + }, + /** + * 组件的属性列表 + */ + properties: { + extClass: { + type: String, + value: '' + }, + title: { + type: String, + value: '' + }, + background: { + type: String, + value: '' + }, + color: { + type: String, + value: '' + }, + back: { + type: Boolean, + value: true + }, + loading: { + type: Boolean, + value: false + }, + homeButton: { + type: Boolean, + value: false, + }, + animated: { + // 显示隐藏的时候opacity动画效果 + type: Boolean, + value: true + }, + show: { + // 显示隐藏导航,隐藏的时候navigation-bar的高度占位还在 + type: Boolean, + value: true, + observer: '_showChange' + }, + // back为true的时候,返回的页面深度 + delta: { + type: Number, + value: 1 + }, + }, + /** + * 组件的初始数据 + */ + data: { + displayStyle: '' + }, + lifetimes: { + attached() { + const rect = wx.getMenuButtonBoundingClientRect() + wx.getSystemInfo({ + success: (res) => { + const isAndroid = res.platform === 'android' + const isDevtools = res.platform === 'devtools' + this.setData({ + ios: !isAndroid, + innerPaddingRight: `padding-right: ${res.windowWidth - rect.left}px`, + leftWidth: `width: ${res.windowWidth - rect.left }px`, + safeAreaTop: isDevtools || isAndroid ? `height: calc(var(--height) + ${res.safeArea.top}px); padding-top: ${res.safeArea.top}px` : `` + }) + } + }) + }, + }, + /** + * 组件的方法列表 + */ + methods: { + _showChange(show) { + const animated = this.data.animated + let displayStyle = '' + if (animated) { + displayStyle = `opacity: ${ + show ? '1' : '0' + };transition:opacity 0.5s;` + } else { + displayStyle = `display: ${show ? '' : 'none'}` + } + this.setData({ + displayStyle + }) + }, + back() { + const data = this.data + if (data.delta) { + wx.navigateBack({ + delta: data.delta + }) + } + this.triggerEvent('back', { delta: data.delta }, {}) + } + }, +}) diff --git a/components/navigation-bar/navigation-bar.json b/components/navigation-bar/navigation-bar.json new file mode 100644 index 0000000..4a20f17 --- /dev/null +++ b/components/navigation-bar/navigation-bar.json @@ -0,0 +1,5 @@ +{ + "component": true, + "styleIsolation": "apply-shared", + "usingComponents": {} +} \ No newline at end of file diff --git a/components/navigation-bar/navigation-bar.wxml b/components/navigation-bar/navigation-bar.wxml new file mode 100644 index 0000000..be9a663 --- /dev/null +++ b/components/navigation-bar/navigation-bar.wxml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{title}} + + + + + + + + + + + + diff --git a/components/navigation-bar/navigation-bar.wxss b/components/navigation-bar/navigation-bar.wxss new file mode 100644 index 0000000..8bd379e --- /dev/null +++ b/components/navigation-bar/navigation-bar.wxss @@ -0,0 +1,96 @@ +.weui-navigation-bar { + --weui-FG-0:rgba(0,0,0,.9); + --height: 44px; + --left: 16px; +} +.weui-navigation-bar .android { + --height: 48px; +} + +.weui-navigation-bar { + overflow: hidden; + color: var(--weui-FG-0); + flex: none; +} + +.weui-navigation-bar__inner { + position: relative; + top: 0; + left: 0; + height: calc(var(--height) + env(safe-area-inset-top)); + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding-top: env(safe-area-inset-top); + width: 100%; + box-sizing: border-box; +} + +.weui-navigation-bar__left { + position: relative; + padding-left: var(--left); + display: flex; + flex-direction: row; + align-items: flex-start; + height: 100%; + box-sizing: border-box; +} + +.weui-navigation-bar__btn_goback_wrapper { + padding: 11px 18px 11px 16px; + margin: -11px -18px -11px -16px; +} + +.weui-navigation-bar__btn_goback_wrapper.weui-active { + opacity: 0.5; +} + +.weui-navigation-bar__btn_goback { + font-size: 12px; + width: 12px; + height: 24px; + -webkit-mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%; + mask: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='24' viewBox='0 0 12 24'%3E %3Cpath fill-opacity='.9' fill-rule='evenodd' d='M10 19.438L8.955 20.5l-7.666-7.79a1.02 1.02 0 0 1 0-1.42L8.955 3.5 10 4.563 2.682 12 10 19.438z'/%3E%3C/svg%3E") no-repeat 50% 50%; + -webkit-mask-size: cover; + mask-size: cover; + background-color: var(--weui-FG-0); +} + +.weui-navigation-bar__center { + font-size: 17px; + text-align: center; + position: relative; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + font-weight: bold; + flex: 1; + height: 100%; +} + +.weui-navigation-bar__loading { + margin-right: 4px; + align-items: center; +} + +.weui-loading { + font-size: 16px; + width: 16px; + height: 16px; + display: block; + background: transparent url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='80px' height='80px' viewBox='0 0 80 80' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3Eloading%3C/title%3E%3Cdefs%3E%3ClinearGradient x1='94.0869141%25' y1='0%25' x2='94.0869141%25' y2='90.559082%25' id='linearGradient-1'%3E%3Cstop stop-color='%23606060' stop-opacity='0' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3ClinearGradient x1='100%25' y1='8.67370605%25' x2='100%25' y2='90.6286621%25' id='linearGradient-2'%3E%3Cstop stop-color='%23606060' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%23606060' stop-opacity='0.3' offset='100%25'%3E%3C/stop%3E%3C/linearGradient%3E%3C/defs%3E%3Cg stroke='none' stroke-width='1' fill='none' fill-rule='evenodd' opacity='0.9'%3E%3Cg%3E%3Cpath d='M40,0 C62.09139,0 80,17.90861 80,40 C80,62.09139 62.09139,80 40,80 L40,73 C58.2253967,73 73,58.2253967 73,40 C73,21.7746033 58.2253967,7 40,7 L40,0 Z' fill='url(%23linearGradient-1)'%3E%3C/path%3E%3Cpath d='M40,0 L40,7 C21.7746033,7 7,21.7746033 7,40 C7,58.2253967 21.7746033,73 40,73 L40,80 C17.90861,80 0,62.09139 0,40 C0,17.90861 17.90861,0 40,0 Z' fill='url(%23linearGradient-2)'%3E%3C/path%3E%3Ccircle id='Oval' fill='%23606060' cx='40.5' cy='3.5' r='3.5'%3E%3C/circle%3E%3C/g%3E%3C/g%3E%3C/svg%3E%0A") no-repeat; + background-size: 100%; + margin-left: 0; + animation: loading linear infinite 1s; +} + +@keyframes loading { + from { + transform: rotate(0); + } + to { + transform: rotate(360deg); + } +} diff --git a/images/rank1.png b/images/rank1.png new file mode 100644 index 0000000000000000000000000000000000000000..b95ad9c2950e1804758f91e8fe92a89ddd20c624 GIT binary patch literal 30996 zcmaI7by!rpQ$92ucj;GeW?!DI9Yd=qdfu6>7Dt0OW0Iq9ksyzY#l0?EUiGqx9 zWr_LDG~pjx0L(PtvA0t|pq-y1pzPoccLZyB+BrKua

@_U&_&BWT=lePSA5s{2sJ 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 z zD`@sxOA!ttJQ*3+F&ohZzjTb#)erB`(zF>korzkB-$NIBjC|HsSS zINORJgs9tKPT~b`OkbSI4WG3jKZ$VsdyLRnj{SCHMVJwG;K6#MMNQFr!7y5=J~BD{ zqu5#hzIr_4j>YIz$S8I7^?!fUn8QmCCU1Z{!ql>l?YfQHOuAHTW$f*<8Ql=)Acij! zp!6#2j+4X6J{#qqH&*P8>%3=$V%J6a!g*y?x7P!O=)jPm^Wl67H2*>1+YDm@H5fKD zD8vK09L6rkrVTONMQvNQJ~G9c-^8)CUH4SV(xku@yM z5>SLXiPp#~>Rp|c!F*@76 literal 0 HcmV?d00001 diff --git a/pages/change.zip b/pages/change.zip new file mode 100644 index 0000000000000000000000000000000000000000..d8997a445ba2e005b3f483035a187a3e828ccad2 GIT binary patch literal 3869 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 { + db.collection('users') + 。skip(offset) + 。limit(size) + 。get({ + success: res => { + if (res.data.length > 0) { + records = records.concat(res.data); // 将新获取的记录添加到records数组中 + if (records.length < maxRecords) { + pageOffset += pageSize; // 更新偏移量,准备获取下一页 + fetchPageOfRecords(pageOffset, pageSize); // 递归调用以获取下一页的记录 + } else { + // 当获取到足够的记录后,处理records数组 + processRecords(); + } + } else { + console.log('没有更多的记录'); + processRecords(); // 如果没有更多的记录,处理已有的records数组 + } + }, + fail: err => { + console.error('查询失败', err); + } + }); + }; + + // 处理记录的函数 + const processRecords = () => { + if (records.length === 0) { + console.log('没有找到记录'); + return; + } + // 计算权重并选择记录 + const weightedRecords = this.calculateWeights(records); + const randomRecord = this.selectRecordByWeight(weightedRecords); + const xuenum = randomRecord.num; + + // 更新数据库中的记录,并添加当前服务器时间戳 + db.collection('users').doc(randomRecord._id).update({ + data: { + timestamp: _.set(db.serverDate()) // 设置当前服务器时间 + }, + success: updateRes => { + console.log('记录更新成功,时间戳添加'); + this.ifonlie(); + }, + fail: updateErr => { + console.error('记录更新失败', updateErr); + } + }); + + // 更新页面data对象中的randomRecord变量 + this.setData({ + randomRecord: randomRecord, + xuenum: xuenum + }); + + console.log('随机记录:', randomRecord); + }; + + // 开始分页查询 + fetchPageOfRecords(pageOffset, pageSize); + }, + + calculateWeights: function(records) { + return records.map(record => { + // 假设权重是分数的倒数,分数越高,权重越低 + const weight = 1 / (record.score || 1); // 防止除以0 + return { record, weight }; + }); + }, + + selectRecordByWeight: function(weightedRecords) { + let cumulativeWeight = 0; + weightedRecords.forEach(item => { + cumulativeWeight += item.weight; + }); + + if (cumulativeWeight === 0) return null; // 防止除以0 + + const randomValue = Math.random() * cumulativeWeight; + let currentWeight = 0; + for (let i = 0; i < weightedRecords.length; i++) { + currentWeight += weightedRecords[i].weight; + if (currentWeight >= randomValue) { + return weightedRecords[i].record; + } + } + return null; // 默认返回null,理论上不应该执行到这里 + }, + + ifonlie:function(){ + db.collection('user_ol').where({ + num:this.data.xuenum + }).get({ + success: res => { + // 查询成功 + this.addcount(); + if (res.data.length > 0) { + // 如果查询到数据 + wx.showToast({ + title: '学生在线', + icon: 'success', + duration: 2000 + }); + } else { + // 如果没有查询到数据 + wx.showToast({ + title: '学生缺勤', + icon: 'none', + duration: 2000 + }); + } + }, + }) + }, + + + + addcount: function() { + const that = this; // 保存当前上下文 + const db = wx.cloud.database(); // 获取数据库引用 + const xuenum = this.data.xuenum; // 从data对象中获取xuenum + + // 查询 user_ol 集合中特定学号的记录 + db.collection('user_ol').where({ + num: xuenum + }).get({ + success: function(res) { + // 查询成功,处理结果 + if (res.data.length > 0) { + // 获取记录的 _id 和 count 属性 + const recordId = res.data[0]._id; + const currentCount = res.data[0].count || 0; + + // 如果 count 是 0,则更新 users 集合中的 score 并增加 user_ol 集合中的 count + let scoreUpdatePromise; + if (currentCount >= 0) { + // 更新 users 集合中的 score + scoreUpdatePromise = db.collection('users').where({ + num: xuenum + }).update({ + data: { + score: that.data.randomRecord.score + 1 // 将 score 属性加1 + } + }); + } else { + scoreUpdatePromise = Promise.resolve(); // 如果不需要更新 score,使用空的 Promise + } + + scoreUpdatePromise.then(() => { + // 更新 user_ol 集合中的 count + return db.collection('user_ol').doc(recordId).update({ + data: { + count: currentCount + 1 // 将 count 属性加1 + } + }); + }).then(updateRes => { + // 更新成功 + console.log('更新成功', updateRes); + }).catch(updateErr => { + // 更新失败 + console.error('更新失败', updateErr); + }); + } + } + }); + }, + + gotoindex5() + { + wx.navigateTo({ + url: '/pages/index5/index5' // 确保路径正确 + }) + }, + + inputChange: function(e) { + this.setData({ + add: e.detail.value + }); + }, + + + queryUser: function() { + const that = this; // 保存当前上下文 + const db = wx.cloud.database(); // 获取数据库引用 + const xuenum = this.data.xuenum; // 从data对象中获取xuenum + const add = this.data.add; + + // 查询特定学号的记录 + db.collection('user_ol').where({ + num: xuenum + }).get({ + success: function(res) { + // 查询成功,处理结果 + if (res.data.length > 0) { + // 获取记录的 count 属性,如果没有则默认为 0 + const count = res.data[0].count || 0; + const temp = that.data.randomRecord.score; + + // 计算新的 score 值 + const newScore = parseFloat(add) * (0.9+ 0.1* count ) + temp; + console.log('成绩',newScore); + // 更新记录的 score + db.collection('users').where({ + num: xuenum + }).update({ + data: { + score: newScore + }, + success: function(updateRes) { + // 更新成功 + console.log('更新成功', updateRes); + wx.showToast({ + title: '分数更新成功', + icon: 'success', + duration: 2000 + }); + }, + fail: function(updateErr) { + // 更新失败 + console.error('更新失败', updateErr); + wx.showToast({ + title: '更新失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + } else { + // 如果没有查询到数据 + wx.showToast({ + title: '未找到对应的记录', + icon: 'none', + duration: 2000 + }); + } + }, + fail: function(err) { + // 查询失败 + console.error('查询失败', err); + wx.showToast({ + title: '查询失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + }, + + decreaseScore: function() { + const that = this; + const db = wx.cloud.database(); + const xuenum = this.data.xuenum; // 从data对象中获取xuenum + + if (xuenum === 0) { + wx.showToast({ + title: '学号未设置', + icon: 'none', + duration: 2000 + }); + return; + } + + // 查询 user_ol 集合中特定学号的记录 + db.collection('users').where({ + num: xuenum + }).get({ + success: function(res) { + if (res.data.length > 0) { + const record = res.data[0]; + if (record.score > 0) { // 确保 score 大于 0 才进行减操作 + // 更新 users 集合中的 score + db.collection('users').doc(record._id).update({ + data: { + score: db.command.inc(-1) // 将 score 属性减1 + }, + success: function(updateRes) { + // 更新成功 + console.log('分数减少成功', updateRes); + wx.showToast({ + title: '分数减少1', + icon: 'success', + duration: 2000 + }); + }, + fail: function(updateErr) { + // 更新失败 + console.error('分数减少失败', updateErr); + wx.showToast({ + title: '分数减少失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + } else { + wx.showToast({ + title: '分数不能为负', + icon: 'none', + duration: 2000 + }); + } + } else { + wx.showToast({ + title: '未找到对应的记录', + icon: 'none', + duration: 2000 + }); + } + }, + fail: function(err) { + console.error('查询失败', err); + wx.showToast({ + title: '查询失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + }, + + addScore: function() { + const that = this; + const db = wx.cloud.database(); + const xuenum = this.data.xuenum; // 从data对象中获取xuenum + + if (xuenum === 0) { + wx.showToast({ + title: '学号未设置', + icon: 'none', + duration: 2000 + }); + return; + } + + // 查询 user_ol 集合中特定学号的记录 + db.collection('users').where({ + num: xuenum + }).get({ + success: function(res) { + if (res.data.length > 0) { + const record = res.data[0]; + if (record.score > 0) { // 确保 score 大于 0 才进行减操作 + // 更新 users 集合中的 score + db.collection('users').doc(record._id).update({ + data: { + score: db.command.inc(0.5) // 将 score 属性减1 + }, + success: function(updateRes) { + // 更新成功 + console.log('分数减少成功', updateRes); + wx.showToast({ + title: '分数增加0.5', + icon: 'success', + duration: 2000 + }); + }, + fail: function(updateErr) { + // 更新失败 + console.error('分数减少失败', updateErr); + wx.showToast({ + title: '分数减少失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + } else { + wx.showToast({ + title: '分数不能为负', + icon: 'none', + duration: 2000 + }); + } + } else { + wx.showToast({ + title: '未找到对应的记录', + icon: 'none', + duration: 2000 + }); + } + }, + fail: function(err) { + console.error('查询失败', err); + wx.showToast({ + title: '查询失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + } +}); diff --git a/pages/change/change.json b/pages/change/change.json new file mode 100644 index 0000000..43275a5 --- /dev/null +++ b/pages/change/change.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } +} \ No newline at end of file diff --git a/pages/change/change.wxml b/pages/change/change.wxml new file mode 100644 index 0000000..3cc94fb --- /dev/null +++ b/pages/change/change.wxml @@ -0,0 +1,17 @@ + + + + diff --git a/pages/change/change.wxss b/pages/change/change.wxss new file mode 100644 index 0000000..77a7c1c --- /dev/null +++ b/pages/change/change.wxss @@ -0,0 +1,78 @@ +.data-button +{ + padding: 10px; + display:block; + background-color:skyblue; /* 按钮背景颜色 */ + border: none; /* 无边框 */ + width: 150%; /* 按钮宽度 */ + text-align: left; /* 文本左对齐 */ + cursor: default; /* 将鼠标指针设置为默认,因为这是一个显示数据的按钮 */ +} +.back +{ + background-color: skyblue; + border: none; + border-radius: 12px; + color:white; + padding: 15px 32px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + margin: 100px 2px; + cursor: pointer; + transition-duration: 0.4s; + -webkit-transition-duration: 0.4s; +} +.container +{ +background-image: url('http://cdnjson.com/images/2024/09/26/change.jpg'); +height: 100vh; +background-size: cover; +background-position: center; +} +.t-login { + width: 600rpx; + padding: 55rpx; + margin: 0 auto; + font-size: 28rpx; + background-color: #ffffff; + border-radius: 20rpx; + position: relative; + margin-top: -100rpx; + box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.15); + z-index: 9; + } + .t-login button { + font-size: 38rpx; + background: linear-gradient(to right, #02AAB0 0%, #00CDAC 51%, #02AAB0 100%); + color: #fff; + height: 120rpx; + line-height: 90rpx; + border-radius: 50rpx; + } + + .t-login input { + padding: 0 20rpx 0 120rpx; + height: 90rpx; + line-height: 90rpx; + margin-bottom: 50rpx; + background: #f6f6f6; + border: 1px solid #f6f6f6; + font-size: 28rpx; + border-radius: 50rpx; + } + + .t-login .t-a { + position: relative; + } + + .t-login .t-a image { + width: 40rpx; + height: 40rpx; + position: absolute; + left: 40rpx; + top: 28rpx; + } + + diff --git a/pages/comment/comment.js b/pages/comment/comment.js new file mode 100644 index 0000000..674493f --- /dev/null +++ b/pages/comment/comment.js @@ -0,0 +1,107 @@ +const app = getApp(); + +Page({ + data: { + latestRecord: null, // 使用null初始化 + comment: '', + comments: [], + hasMoreComments: true, // 是否还有更多评论 + }, + + onLoad: function() { + this.loadMoreComments(); + }, + + bindCommentInput: function(e) { + // 绑定输入框的输入事件 + this.setData({ + comment: e.detail.value + }); + }, + + clickBtn: function() { + this.loadMoreComments(); + }, + + submitComment: function() { + // 提交评论的逻辑 + const db = wx.cloud.database(); + const _ = db.command; + + if (this.data.comment.trim() === '') { + wx.showToast({ + title: '评论不能为空', + icon: 'none' + }); + return; + } + + // 添加评论到数据库 + db.collection('comments').add({ + data: { + content: this.data.comment, + createTime: db.serverDate(), // 设置当前服务器时间 + name: app.globalData.myname + }, + success: res => { + console.log('评论添加成功', res); + wx.showToast({ + title: '评论成功', + icon: 'success' + }); + // 清空输入框 + this.setData({ + comment: '' + }); + // 重新加载评论 + this.loadMoreComments(); + }, + fail: err => { + console.error('评论添加失败', err); + wx.showToast({ + title: '评论失败', + icon: 'none' + }); + } + }); + }, + + loadMoreComments: function() { + const db = wx.cloud.database(); + let that = this; + let pageSize = 20; // 每页数据量 + let page = 0; // 当前页码 + let allComments = this.data.comments; // 存储所有评论 + + function getData() { + db.collection('comments').orderBy('createTime', 'desc').skip(page * pageSize).limit(pageSize).get({ + success: res => { + console.log('评论', res.data); + if (res.data.length > 0) { + allComments = allComments.concat(res.data); // 将新获取的评论添加到数组中 + that.setData({ + comments: allComments + }); + page++; + if (res.data.length < pageSize) { + // 如果返回的数据少于pageSize,说明已经获取完所有评论 + that.setData({ + hasMoreComments: false + }); + } + } else { + console.log('没有查询到更多评论'); + that.setData({ + hasMoreComments: false + }); + } + }, + fail: err => { + console.error('查询失败:', err); + } + }); + } + + getData(); // 调用函数开始获取评论 + } +}); diff --git a/pages/comment/comment.json b/pages/comment/comment.json new file mode 100644 index 0000000..43275a5 --- /dev/null +++ b/pages/comment/comment.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } +} \ No newline at end of file diff --git a/pages/comment/comment.wxml b/pages/comment/comment.wxml new file mode 100644 index 0000000..99f1dce --- /dev/null +++ b/pages/comment/comment.wxml @@ -0,0 +1,20 @@ + + + + K班评论 + + + 姓名:{{item.name}} + 评论:{{item.content}} + + + + + diff --git a/pages/comment/comment.wxss b/pages/comment/comment.wxss new file mode 100644 index 0000000..afd7abc --- /dev/null +++ b/pages/comment/comment.wxss @@ -0,0 +1,94 @@ +.container{ + top: 90px; + left: 150px; + padding: 10px 15px; + font-size: 20px; + cursor: pointer; + text-align: center; + background-color: #00CDAC; + } + .container:hover { + background-color: #1795bb; + } + .container:active{ + background-color: #1795bb; + box-shadow: 0 5px #666; + transform:translateY(4px); + } + .all + { + background-image: url('http://cdnjson.com/images/2024/09/27/comment.jpg'); + height: 100vh; + background-size: cover; + background-position: center; + } + .t-login { + width: 600rpx; + padding: 55rpx; + margin: 0 auto; + font-size: 28rpx; + background-color: #ffffff; + border-radius: 20rpx; + position: relative; + margin-top: 300rpx; + box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.15); + z-index: 9; + } + .t-login button { + font-size: 38rpx; + background: linear-gradient(to right, #02AAB0 0%, #00CDAC 51%, #02AAB0 100%); + color: #fff; + height: 120rpx; + line-height: 90rpx; + border-radius: 50rpx; + } + + .t-login input { + padding: 0 20rpx 0 120rpx; + height: 90rpx; + line-height: 90rpx; + margin-bottom: 50rpx; + background: #f6f6f6; + border: 1px solid #f6f6f6; + font-size: 28rpx; + border-radius: 50rpx; + } + + .t-login .t-a { + position: relative; + } + + .t-login .t-a image { + width: 40rpx; + height: 40rpx; + position: absolute; + left: 40rpx; + top: 28rpx; + } +.comment_text { + display: flex; + height: 280px; + width: 280px; + border: 3rpx ; + border-radius: 10rpx; + margin-top: 200rpx; + } +.text-ti { + position: absolute; + font-size: 12px; + background: white; + margin: -10px 0 0 10px; + padding: 0px 5px; + color: rgb(144, 147, 167); + } +.comment-item text { + position: relative; + margin-right: 20rpx; + text-align: auto; + top: 20px; + left: 10px; + font-size: 25rpx; + font-weight: bold; + border-bottom: 1px dotted rgb(255, 0, 98); + display: inline-block; +} diff --git a/pages/demo1/demo1.js b/pages/demo1/demo1.js new file mode 100644 index 0000000..bdab404 --- /dev/null +++ b/pages/demo1/demo1.js @@ -0,0 +1,66 @@ +// pages/demo1/demo1.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/demo1/demo1.json b/pages/demo1/demo1.json new file mode 100644 index 0000000..7a58afc --- /dev/null +++ b/pages/demo1/demo1.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/demo1/demo1.wxml b/pages/demo1/demo1.wxml new file mode 100644 index 0000000..cbac833 --- /dev/null +++ b/pages/demo1/demo1.wxml @@ -0,0 +1,2 @@ + +pages/demo1/demo1.wxml \ No newline at end of file diff --git a/pages/demo1/demo1.wxss b/pages/demo1/demo1.wxss new file mode 100644 index 0000000..157fd8f --- /dev/null +++ b/pages/demo1/demo1.wxss @@ -0,0 +1 @@ +/* pages/demo1/demo1.wxss */ \ No newline at end of file diff --git a/pages/index/index.js b/pages/index/index.js new file mode 100644 index 0000000..888f44f --- /dev/null +++ b/pages/index/index.js @@ -0,0 +1,105 @@ +// pages/login/login.js +const app = getApp(); + +Page({ + data: { + id: '', // 学号 + name: '' // 姓名 + }, + bindidInput(e) { + this.setData({ + id: e.detail.value + }); + }, + bindnameInput(e) { + this.setData({ + name: e.detail.value + }); + }, + login() { + var that = this; + // 假设正确的学号和姓名 + const correctId = '33210'; + const correctName = '33210'; + + if (!that.data.id) { + wx.showToast({ title: '请输入学号', icon: 'none' }); + return; + } + if (!that.data.name) { + wx.showToast({ title: '请输入姓名', icon: 'none' }); + return; + } + + // 验证学号和姓名是否正确 + if (that.data.id === correctId && that.data.name === correctName) { + wx.showToast({ title: '登录成功!', icon: 'success' }); + wx.navigateTo({ + url: '/pages/index2/index2' // 确保路径正确 + }); + } else { + const app = getApp(); + let db = wx.cloud.database(); // 设置数据库 + let user_ol = db.collection('user_ol'); + let users = db.collection('users'); + let num = parseInt(that.data.id, 10); + app.globalData.myname = that.data.name; + app.globalData.mynum = num; + users.where({ + name: app.globalData.myname, + num: app.globalData.mynum + }).get({ + success: res => { + if (res.data.length > 0) { + // 如果查询到数据 + that.addtemp(); // 确保这里使用 that 调用 addtemp + wx.showToast({ + title: '登陆成功', + icon: 'success', + duration: 2000 + }); + } else { + // 如果没有查询到数据 + wx.showToast({ + title: '您不在学生名单上', + icon: 'none', + duration: 2000 + }); + } + }, + fail: err => { + console.error('查询失败', err); + wx.showToast({ + title: '查询失败,请重试', + icon: 'none', + duration: 2000 + }); + } + }); + } + }, + + addtemp() { + const that = this; // 保存当前上下文 + const user_ol = wx.cloud.database().collection('user_ol'); + const num = parseInt(that.data.id, 10); // 确保这里重新获取 num + user_ol.add({ + data: { + num: num, + name: that.data.name, + count: 0, + } + }).then(res => { + console.log('添加成功', res); + wx.navigateTo({ + url: '/pages/stu_client/stu_client' // 确保路径正确 + }); + }).catch(err => { + console.log('添加失败', err); // 失败提示错误信息 + }); + }, + + forgotPwd() { + wx.showToast({ title: '忘记信息', icon: 'none' }); + }, + }); diff --git a/pages/index/index.json b/pages/index/index.json new file mode 100644 index 0000000..c06691d --- /dev/null +++ b/pages/index/index.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } + } \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml new file mode 100644 index 0000000..04f2775 --- /dev/null +++ b/pages/index/index.wxml @@ -0,0 +1,25 @@ + + diff --git a/pages/index/index.wxss b/pages/index/index.wxss new file mode 100644 index 0000000..2b82152 --- /dev/null +++ b/pages/index/index.wxss @@ -0,0 +1,143 @@ +/* pages/login/login.wxss */ +.logo { + display: block; /* 使margin:auto;生效 */ + width: 200rpx; + height: 200rpx; + border-radius: 50%; + position: absolute; + top: 60px; /* 根据需要调整 */ + left: 50%; + transform: translateX(-50%); + } + +.img-a { + width: 100%; + } + .img-b { + width: 100%; + height: 45px; + bottom: 0; + position: absolute; + } + .login-bg { + height: 100vh; + background: linear-gradient(to bottom, #ff6a9a, #fe7d76); + position: relative; + } + + .t-login { + width: 600rpx; + padding: 55rpx; + margin: 0 auto; + font-size: 28rpx; + background-color: #ffffff; + border-radius: 20rpx; + position: relative; + margin-top: -100rpx; + box-shadow: 0 5px 7px 0 rgba(0, 0, 0, 0.15); + z-index: 9; + } + .t-login button { + font-size: 38rpx; + background: linear-gradient(to right, #ff8f77, #fe519f); + color: #fff; + height: 120rpx; + line-height: 90rpx; + border-radius: 50rpx; + } + + .t-login input { + padding: 0 20rpx 0 120rpx; + height: 90rpx; + line-height: 90rpx; + margin-bottom: 50rpx; + background: #f6f6f6; + border: 1px solid #f6f6f6; + font-size: 28rpx; + border-radius: 50rpx; + } + + .t-login .t-a { + position: relative; + } + + .t-login .t-a image { + width: 40rpx; + height: 40rpx; + position: absolute; + left: 40rpx; + top: 28rpx; + } + + .t-login .t-b { + text-align: left; + font-size: 46rpx; + color: #ff939b; + font-weight: bold; + margin: 0 0 50rpx 20rpx; + } + + .t-login .t-d { + text-align: center; + color: #999; + margin: 80rpx 0; + } + + .t-login .t-c { + text-align: right; + color: #c0c0c0; + margin: -20rpx 30rpx 40rpx 0; + } + + .t-login .t-f { + text-align: center; + margin: 200rpx 0 0 0; + color: #666; + } + + .t-login .t-f text { + margin-left: 20rpx; + color: #aaaaaa; + font-size: 27rpx; + } + + .t-login .uni-input-placeholder { + color: #aeaeae; + } + + .cl { + zoom: 1; + } + + .cl:after { + clear: both; + display: block; + visibility: hidden; + height: 0; + content: '\20'; + } + .cardBox { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -webkit-align-items: center; + align-items: center; + padding: 5rpx; + background: #ffffff; + opacity: 0.9; + -webkit-border-radius: 20rpx; + border-radius: 0 0 20rpx 20rpx; + height: 70rpx; + width: 600rpx; + margin: 0 auto; + position: relative; + text-align: center; + line-height: 70rpx; + color: #aaa; + font-size: 28rpx; + } + .cardBox .txt { + margin-left: 10rpx; + } \ No newline at end of file diff --git a/pages/index2/index2.js b/pages/index2/index2.js new file mode 100644 index 0000000..30edbdd --- /dev/null +++ b/pages/index2/index2.js @@ -0,0 +1,27 @@ +Page({ + // 发起签到 + startAttendance: function() { + // 这里可以添加发起签到的代码 + wx.navigateTo({ + url: '/pages/index5/index5' + }); + }, + + // 管理学生 + gotorank: function() { + // 这里可以添加管理学生的代码 + wx.navigateTo({ + url: '/pages/rankk/rankk' + }); + }, + gotostu: function() { + wx.navigateTo({ + url: '/pages/upload_stu/upload_stu' + }); + }, + goBack: function() { + wx.navigateBack({ + delta: 1 // 返回上一页面 + }); + } + }); \ No newline at end of file diff --git a/pages/index2/index2.json b/pages/index2/index2.json new file mode 100644 index 0000000..4f8c22d --- /dev/null +++ b/pages/index2/index2.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } + } \ No newline at end of file diff --git a/pages/index2/index2.wxml b/pages/index2/index2.wxml new file mode 100644 index 0000000..41fbdf9 --- /dev/null +++ b/pages/index2/index2.wxml @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/pages/index2/index2.wxss b/pages/index2/index2.wxss new file mode 100644 index 0000000..d09473c --- /dev/null +++ b/pages/index2/index2.wxss @@ -0,0 +1,34 @@ +.container { + display: flex; + flex-direction: column; /* 使子元素垂直排列 */ + align-items: center; /* 子元素在容器中居中对齐 */ + padding: 20px; /* 容器内边距 */ +} + +.action-button1{ + margin: 100px 20px; /* 按钮上下外边距 */ + padding: 20px; /* 按钮内边距 */ + background:linear-gradient(#ccfbff, #ef96c5); /* 按钮背景颜色 */ + color: white; /* 按钮文字颜色 */ + border-radius: 5px; /* 按钮边框圆角 */ +} +.action-button2{ + margin: 100px 20px; /* 按钮上下外边距 */ + padding: 20px; /* 按钮内边距 */ + background: linear-gradient(to right, #ead6ee, #a0f1ea); + color: white; /* 按钮文字颜色 */ + border-radius: 5px; /* 按钮边框圆角 */ +} +.action-button3{ + margin: 100px 20px; /* 按钮上下外边距 */ + padding: 20px; /* 按钮内边距 */ + background: linear-gradient(to bottom right, #eebd89, #d13abd); + color: white; /* 按钮文字颜色 */ + border-radius: 5px; /* 按钮边框圆角 */ +} +.login-bg { + background-image: url('http://cdnjson.com/images/2024/09/27/index_2.jpg'); + height: 100vh; + background-size: cover; + background-position: center; + } diff --git a/pages/index3/index3.js b/pages/index3/index3.js new file mode 100644 index 0000000..5532da1 --- /dev/null +++ b/pages/index3/index3.js @@ -0,0 +1,71 @@ +// pages/index3/index3.js +const app = getApp(); + +Page({ + data: { + latestRecord: null, // 使用null初始化 + comment: '', + comments: [] + }, + + onLoad: function() { + this.readLatestRecord(); + + }, + + + + clickBtn: function() { + this.readLatestRecord(); + }, + + + readLatestRecord: function() { + const db = wx.cloud.database(); // 获取数据库的引用 + const users = db.collection('users'); // 获取users集合的引用 + + // 使用orderBy和limit方法来查询timestamp最新的记录 + users.orderBy('timestamp', 'desc').limit(1).get({ + success: res => { + // 查询成功,获取最新的记录 + if (res.data.length > 0) { + const latestRecord = res.data[0]; + // 将查询结果存储在页面数据中 + this.setData({ + latestRecord: latestRecord + }); + console.log('最新的记录:', latestRecord); + } else { + console.log('没有查询到记录'); + this.setData({ + latestRecord: { + name: '暂时未开启点名' + } + }); + } + }, + fail: err => { + // 查询失败的处理逻辑 + console.error('查询失败:', err); + } + }); + }, + loadComments: function() { + const db = wx.cloud.database(); + // 按创建时间降序排序 + db.collection('comments').orderBy('createTime', 'desc').get({ + success: res => { + if (res.data.length > 0) { + this.setData({ + comments: res.data + }); + } else { + console.log('没有查询到评论'); + } + }, + fail: err => { + console.error('查询失败:', err); + } + }); + } +}); diff --git a/pages/index3/index3.json b/pages/index3/index3.json new file mode 100644 index 0000000..7a58afc --- /dev/null +++ b/pages/index3/index3.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/index3/index3.wxml b/pages/index3/index3.wxml new file mode 100644 index 0000000..202846d --- /dev/null +++ b/pages/index3/index3.wxml @@ -0,0 +1,14 @@ + + + K班 + + 学号: {{latestRecord.num}} + 姓名: {{latestRecord.name}} + 积分: {{latestRecord.score}} + + + + 暂时未开启点名 + + + diff --git a/pages/index3/index3.wxss b/pages/index3/index3.wxss new file mode 100644 index 0000000..97096d9 --- /dev/null +++ b/pages/index3/index3.wxss @@ -0,0 +1,66 @@ +.latest-record { + display: flex; + height: 100px; + width: 200px; + border: 3rpx solid #faca82; + border-radius: 10rpx; + } + .text-ti { + position: absolute; + font-size: 12px; + background: white; + margin: -10px 0 0 10px; + padding: 0px 5px; + color: rgb(144, 147, 167); + } + .people text { + position: relative; + display: block; + text-align: auto; + top: 20px; + left: 20px; + font-size: 35rpx; + font-weight: bold; + +} + +.container +{ + background-image: url('http://cdnjson.com/images/2024/09/27/sure.jpg'); + height: 100vh; + background-size: cover; + background-position: center; +} +.action-button{ + position: relative; + background-color: rgb(118, 224, 32); + border: none; + font-size: 28px; + color: #ffffff; + padding: 20px; + width: 200px; + text-align: center; + transition-duration: 0.6s; + text-decoration: none; + overflow: hidden; + cursor: pointer; +} +.action-button::after{ + content: ''; + background:#53a4f0; + display: block; + position: absolute; + padding-top: 300%; + padding-left: 350%; + margin-left: -20px !important; + margin-top: -120%; + opacity: 0; + transition:all 0.8s; +} +.action-button:active::after{ + padding: 0; + margin: 0; + opacity: 1; + transition: 0s; +} + diff --git a/pages/index4/index4.js b/pages/index4/index4.js new file mode 100644 index 0000000..0c6e25e --- /dev/null +++ b/pages/index4/index4.js @@ -0,0 +1,66 @@ +// pages/index4/index4.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/index4/index4.json b/pages/index4/index4.json new file mode 100644 index 0000000..7a58afc --- /dev/null +++ b/pages/index4/index4.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/index4/index4.wxml b/pages/index4/index4.wxml new file mode 100644 index 0000000..20f87d9 --- /dev/null +++ b/pages/index4/index4.wxml @@ -0,0 +1,2 @@ + +pages/index4/index4.wxml \ No newline at end of file diff --git a/pages/index4/index4.wxss b/pages/index4/index4.wxss new file mode 100644 index 0000000..7b4947e --- /dev/null +++ b/pages/index4/index4.wxss @@ -0,0 +1 @@ +/* pages/index4/index4.wxss */ \ No newline at end of file diff --git a/pages/index5/index5.js b/pages/index5/index5.js new file mode 100644 index 0000000..064471f --- /dev/null +++ b/pages/index5/index5.js @@ -0,0 +1,18 @@ +Page({ + enterAttendance: function() { + wx.navigateTo({ + url: '/pages/change/change' + }); + }, + gotoindex2: function() { + // 这里写跳转到 index2 页面的代码 + wx.navigateTo({ + url: '/pages/index2/index2' // 确保路径正确 + }); + }, + goBack: function() { + wx.navigateBack({ + delta: 1 // 返回上一页面 + }); + } + }); \ No newline at end of file diff --git a/pages/index5/index5.json b/pages/index5/index5.json new file mode 100644 index 0000000..4f8c22d --- /dev/null +++ b/pages/index5/index5.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } + } \ No newline at end of file diff --git a/pages/index5/index5.wxml b/pages/index5/index5.wxml new file mode 100644 index 0000000..3f67572 --- /dev/null +++ b/pages/index5/index5.wxml @@ -0,0 +1,9 @@ + + + + 教师端 + + + + + \ No newline at end of file diff --git a/pages/index5/index5.wxss b/pages/index5/index5.wxss new file mode 100644 index 0000000..dc02f3b --- /dev/null +++ b/pages/index5/index5.wxss @@ -0,0 +1,55 @@ +.container { + font-family: Arial, sans-serif; + text-align: center; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: start; + height: 100vh; + background-color: #fff; +} +.placeholder { + width: 200px; + height: 120px; + background-color: #ddd; + display: flex; + align-items: center; + justify-content: center; + margin: 60px 0; +} + +.button-container { + margin-top: 20px; +} +.button { + display: inline-block; + padding: 15px 25px; + font-size: 24px; + cursor: pointer; + text-align: center; + text-decoration: none; + outline: none; + color:#fff; + background-color: rgb(16, 185, 214); + border: none; + border-radius: 15px; + box-shadow: 0 9px #999; + } + .button:hover{ + background-color: #1795bb; + } + .button:active{ + background-color: #1795bb; + box-shadow: 0 5px #666; + transform:translateY(4px); + } + .container + { + background-image: url('http://cdnjson.com/images/2024/09/25/index_back.jpg'); + height: 100vh; + background-size: cover; + background-position: center; + } + \ No newline at end of file diff --git a/pages/rankk/rankk.js b/pages/rankk/rankk.js new file mode 100644 index 0000000..726257b --- /dev/null +++ b/pages/rankk/rankk.js @@ -0,0 +1,89 @@ +// 定义页面数据模型 +const db = wx.cloud.database({ + env: 'software-9g3qgled9f6190ea' +}) + +const app = getApp(); + +Page({ + data: { + records: [], + xuenum: '', + add:'', + randomRecord: null, + self: app.globalData.mynum + }, + + onLoad: function () { + this.clickBtn(); + +}, +onShow: function () { + this.clickBtn(); +}, +onPullDownRefresh: function () { //下拉刷新 + wx.stopPullDownRefresh(); + this.clickBtn(); +}, +clickBtn() { + const that = this; + let pageSize = 20; // 每页数据量 + let page = 0; // 当前页码 + let allData = []; // 存储所有数据 + + function getData() { + db.collection('users').skip(page * pageSize).limit(pageSize).get({ + success: function(res) { + console.log(res.data); + allData = allData.concat(res.data); // 将新获取的数据添加到数组中 + that.setData({ + records: allData + }); + + if (res.data.length < pageSize) { + // 如果返回的数据少于pageSize,说明已经获取完所有数据 + const sortedRecords = allData.sort(function(a, b) { + return b.score - a.score; + }); + that.setData({ + records: sortedRecords + }); + } else { + // 否则,继续获取下一页数据 + page++; + getData(); + } + }, + fail: function(err) { + console.error(err); + } + }); + } + + getData(); // 调用函数开始获取数据 +}, +inputChange: function(e) { + this.setData({ + add: e.detail.value + }); +}, + +queryUser: function(){ + const xuenum = this.data.xuenum; // 从data对象中获取xuenum + const add = this.data.add + const temp = +this.data.randomRecord.score-add + db.collection('users').where({ + num:xuenum + }).update({ + data:{ + score:temp + } + }).then(res => { + console.log('更新成功') + clickBtn(); + }).catch(err => { + console.log('更新失败',err) + }) + +}, +}); diff --git a/pages/rankk/rankk.json b/pages/rankk/rankk.json new file mode 100644 index 0000000..31b9d1f --- /dev/null +++ b/pages/rankk/rankk.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } +} \ No newline at end of file diff --git a/pages/rankk/rankk.wxml b/pages/rankk/rankk.wxml new file mode 100644 index 0000000..9e00000 --- /dev/null +++ b/pages/rankk/rankk.wxml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + {{item.name}} + {{item.num}} + -----------------这是您--------------- + 积分:{{item.score}}分 + + + + 第 {{index + 1}} 名 + + + + + + + diff --git a/pages/rankk/rankk.wxss b/pages/rankk/rankk.wxss new file mode 100644 index 0000000..3f751a1 --- /dev/null +++ b/pages/rankk/rankk.wxss @@ -0,0 +1,130 @@ +.container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; +} +.rank-item { +height: 300rpx; +width: 750rpx; +background: #fff; +padding: 20rpx 20rpx 20rpx 50rpx; +box-sizing: border-box; +position: relative; + +} + +.rank-item .rank-img { +width: 100rpx; +height: 100rpx; +float: left; +margin-right: 50rpx; +position: relative; +} + +.rank-item .rank-img image { +position: absolute; +border-radius: 50%; +width: 100rpx; +height: 100rpx; +top: 0; +left: 0; +} + +.rank-item .rank-name { +font-size: 32rpx; +height: 50rpx; +line-height: 50rpx; +color: #4e5b65; +font-weight: bold; +} + +.rank-item .rank-price { +height: 40rpx; +line-height: 40rpx; +margin-top: 10rpx; +font-size: 24rpx; +color: #d55a4a; +} + +.rank-item .rank-uv text { +font-size: 38rpx; +position: absolute; +height: 100rpx; +line-height: 100rpx; +bottom: 20rpx; +right: 20rpx; +color: #777; +} +.rank-item .rank-uv image { +position: absolute; +width: 100rpx; +height: 100rpx; +bottom: 120rpx; +right: 20rpx; +} +.action-button { +position: relative; +width: 80%; /* 按钮宽度 */ +padding: 10rpx; /* 按钮内边距 */ +background-color: #C84B31;/* 按钮背景颜色 */ +color: white; /* 按钮文字颜色 */ +border-radius: 5rpx; /* 按钮边框圆角 */ +} + +.rank_block { + display: flex; + flex-direction: column; + align-items: center; /* 使子元素在交叉轴上居中 */ + padding: 10px 0; /* 上下内边距 */ + border-bottom: 1px solid #f0f0f0; /* 每个排行榜项的下边框,最后一个可以去掉 */ +} + +.rank_item { + width: 100%; /* 占满父容器的宽度 */ + display: flex; + align-items: center; /* 使子元素在交叉轴上居中 */ + margin-bottom: 10px; /* 每个排行榜项的下边距 */ +} + +.rank-img { + width: 50px; /* 头像宽度 */ + height: 50px; /* 头像高度 */ + border-radius: 50%; /* 圆形头像 */ + overflow: hidden; /* 隐藏超出容器的部分 */ + margin-right: 10px; /* 与文本的间距 */ +} + +.rank-img image { + width: 100%; /* 占满父容器的宽度 */ + height: 100%; /* 占满父容器的高度 */ + object-fit: cover; /* 裁剪并填充整个元素 */ +} + +.rank-name { + flex-grow: 1; /* 占据剩余空间 */ + font-size: 16px; /* 字体大小 */ + color: #333; /* 字体颜色 */ +} + +.rank-price { + font-size: 14px; /* 字体大小 */ + color: #666; /* 字体颜色 */ +} + +.rank-uv { + display: flex; + align-items: center; + margin-top: 5px; /* 与上面元素的间距 */ +} + +.scroll-view { + height: 300px; /* 这里的高度可以根据你的页面布局进行调整 */ + overflow-y: scroll; /* 允许垂直方向滚动 */ + -webkit-overflow-scrolling: touch; /* 在iOS上启用原生滚动 */ + margin-top: 10px; /* 根据需要添加上边距 */ + padding: 10px; /* 内边距 */ + border: 1px solid #ccc; /* 边框,可以根据需要调整 */ + border-radius: 4px; /* 圆角边框 */ + background-color: #fff; /* 背景颜色 */ +} diff --git a/pages/stu_client/stu_client.js b/pages/stu_client/stu_client.js new file mode 100644 index 0000000..8598040 --- /dev/null +++ b/pages/stu_client/stu_client.js @@ -0,0 +1,21 @@ +// pages/index/index.js +Page({ + gotocomment() + { + wx.navigateTo({ + url: '/pages/comment/comment' // 确保路径正确 + }); + }, + gotorank() + { + wx.navigateTo({ + url: '/pages/rankk/rankk' // 确保路径正确 + }); + }, + gotoindex3() + { + wx.navigateTo({ + url: '/pages/index3/index3' // 确保路径正确 + }); + } +}) diff --git a/pages/stu_client/stu_client.json b/pages/stu_client/stu_client.json new file mode 100644 index 0000000..c06691d --- /dev/null +++ b/pages/stu_client/stu_client.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } + } \ No newline at end of file diff --git a/pages/stu_client/stu_client.wxml b/pages/stu_client/stu_client.wxml new file mode 100644 index 0000000..8a6333d --- /dev/null +++ b/pages/stu_client/stu_client.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/pages/stu_client/stu_client.wxss b/pages/stu_client/stu_client.wxss new file mode 100644 index 0000000..fd61cf7 --- /dev/null +++ b/pages/stu_client/stu_client.wxss @@ -0,0 +1,54 @@ +button { + padding: 80px; /* 按钮的厚度 */ + border-radius: 70%; /* 将按钮变成圆形 */ + color: white; + font-size: 16px; + cursor: pointer; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + outline: none; /* 移除焦点时的轮廓线 */ + } +button{ + display: flex; + align-items: center; + justify-content: center; +} + + /* 根据按钮内文字或图标的大小调整padding */ + .btn-top { + background-color: palegoldenrod; + width: 10px; /* 按钮的宽度 */ + height: 10px; /* 按钮的高度 */ + position: absolute; + top: 20%; + left: 50%; + transform: translate(-50%, -50%); + } + + .btn-left { + background-color:salmon; + width: 10px; + height: 10px; + position: absolute; + top: 50%; + left: 1%; + transform: translateY(-50%); + } + + .btn-right { + background-color:lightpink; + width: 10px; + height: 10px; + position: absolute; + top: 50%; + right: 1%; + transform: translateY(-50%); + } +.container +{ +background-image: url(' http://cdnjson.com/images/2024/09/27/index3.jpg'); +height: 100vh; +background-size: cover; +background-position: center; +} + + diff --git a/pages/upload_stu/upload_stu.js b/pages/upload_stu/upload_stu.js new file mode 100644 index 0000000..42008e5 --- /dev/null +++ b/pages/upload_stu/upload_stu.js @@ -0,0 +1,85 @@ +Page({ + clickBtn(){ + let that = this + wx.chooseMessageFile({ + count: 1, + type: 'file', + success:res=>{ + wx.showLoading({ + title: '正在上传', + }) + let filePath=res.tempFiles[0].path; + console.log("选择execl成功",filePath) + that.clearDatabase(); + that.cloudFile(filePath); + } + }) + }, + + clearDatabase() { + const db = wx.cloud.database({ + env:'software-9g3qgled9f6190ea' + }); + const stu = db.collection('users'); // 替换为你的集合名称 + stu.where({ + _id: db.command.exists(true) + }).remove().then(res=>{ + console.log('删除成功') + this.setData({ + number:'' + }) + }).catch(err => { + console.log('删除失败',err)//失败提示错误信息 + }) + }, + + cloudFile(path){ + let that = this + wx.cloud.uploadFile({ + cloudPath:"stu/test.xlsx", + filePath: path, + success: res=>{ + wx.hideLoading() + console.log("上传成功",res.fileID) + that.jiexi(res.fileID) + }, + fail: err=>{ + console.log("上传失败",err) + } + }) + }, + + jiexi(fileId){ + wx.cloud.callFunction({ + name:"excel", + data:{ + fileID: fileId + }, + success(res) { + console.log("success",res) + } , + fail(res) + { + console.log("failed",res) + } + }) + }, + clickBtn2(){ + wx.downloadFile({ + url:"https://736f-software-9g3qgled9f6190ea-1329643751.tcb.qcloud.la/stu/test.xlsx?sign=db95dcc9da0c7a414610887585aabbc5&t=1727246704", + success:res=>{ + var filePath=res. tempFilePath + this.opfile(filePath) + } + }) + }, + + opfile(path){ + wx.openDocument({ + filePath:path, + fileType:"xlsx" + }).then(res=>{ + console.log(res) + }) + } +}); \ No newline at end of file diff --git a/pages/upload_stu/upload_stu.json b/pages/upload_stu/upload_stu.json new file mode 100644 index 0000000..31b9d1f --- /dev/null +++ b/pages/upload_stu/upload_stu.json @@ -0,0 +1,5 @@ +{ + "usingComponents": { + "navigation-bar": "/components/navigation-bar/navigation-bar" + } +} \ No newline at end of file diff --git a/pages/upload_stu/upload_stu.wxml b/pages/upload_stu/upload_stu.wxml new file mode 100644 index 0000000..77d2387 --- /dev/null +++ b/pages/upload_stu/upload_stu.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/pages/upload_stu/upload_stu.wxss b/pages/upload_stu/upload_stu.wxss new file mode 100644 index 0000000..7395ad9 --- /dev/null +++ b/pages/upload_stu/upload_stu.wxss @@ -0,0 +1,28 @@ +.btn-container { + display: flex; + justify-content: space-between; /* 子元素分散对齐 */ + align-items: center; /* 子元素垂直居中 */ + width: 100%; /* 确保容器宽度为屏幕宽度 */ + padding: 10px 0; /* 上下padding,确保按钮不会紧贴屏幕顶部 */ + } +.action-button1 +{ + background-image: linear-gradient(to right, #3CA55C 0%, #B5AC49 51%, #3CA55C 100%); + padding: 20px; +} +.action-button2 +{ + background-image: linear-gradient(to right, #E55D87 0%, #5FC3E4 51%, #E55D87 100%); + padding: 20px; +} +.btn-container +{ +background-image: url('http://cdnjson.com/images/2024/09/25/v2-5ef7fc1a25366518a65e3066fd465300_r.jpg'); +height: 100vh; +background-size: cover; +background-position: center; +} + + + + \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..953f945 --- /dev/null +++ b/project.config.json @@ -0,0 +1,30 @@ +{ + "appid": "wxef6910a89c23b59e", + "compileType": "miniprogram", + "libVersion": "3.5.8", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "packNpmManually": true, + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + } + }, + "condition": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 4 + }, + "simulatorPluginLibVersion": {} +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..3c15602 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,84 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "%E6%9C%80%E7%BB%88%E7%89%88", + "setting": { + "compileHotReLoad": true, + "skylineRenderEnable": false + }, + "condition": { + "miniprogram": { + "list": [ + { + "name": "pages/stu_client/stu_client", + "pathName": "pages/stu_client/stu_client", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/index3/index3", + "pathName": "pages/index3/index3", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/index/index", + "pathName": "pages/index/index", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/change/change", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/upload_stu/upload_stu", + "pathName": "pages/upload_stu/upload_stu", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/rankk/rankk", + "pathName": "pages/rankk/rankk", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/index2/index2", + "pathName": "pages/index2/index2", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/index1/index1", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "pages/index4/index4", + "pathName": "pages/index4/index4", + "query": "", + "launchMode": "default", + "scene": null + }, + { + "name": "", + "pathName": "pages/index5/index5", + "query": "", + "launchMode": "default", + "scene": null + } + ] + } + } +} \ No newline at end of file diff --git a/sitemap.json b/sitemap.json new file mode 100644 index 0000000..cd24f35 --- /dev/null +++ b/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/style/iconfont/demo.css b/style/iconfont/demo.css new file mode 100644 index 0000000..a67054a --- /dev/null +++ b/style/iconfont/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/style/iconfont/demo_index.html b/style/iconfont/demo_index.html new file mode 100644 index 0000000..d13897e --- /dev/null +++ b/style/iconfont/demo_index.html @@ -0,0 +1,211 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    长箭头-copy-copy
    +
    &#xe65a;
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1727097835318') format('woff2'),
+       url('iconfont.woff?t=1727097835318') format('woff'),
+       url('iconfont.ttf?t=1727097835318') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + 长箭头-copy-copy +
    +
    .icon-arrdown-copy +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    长箭头-copy-copy
    +
    #icon-arrdown-copy
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/style/iconfont/iconfont.js b/style/iconfont/iconfont.js new file mode 100644 index 0000000..ecf0870 --- /dev/null +++ b/style/iconfont/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_4692956='',(n=>{var t=(e=(e=document.getElementsByTagName("script"))[e.length-1]).getAttribute("data-injectcss"),e=e.getAttribute("data-disable-injectsvg");if(!e){var o,i,d,c,a,l=function(t,e){e.parentNode.insertBefore(t,e)};if(t&&!n.__iconfont__svg__cssinject__){n.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(t){console&&console.log(t)}}o=function(){var t,e=document.createElement("div");e.innerHTML=n._iconfont_svg_string_4692956,(e=e.getElementsByTagName("svg")[0])&&(e.setAttribute("aria-hidden","true"),e.style.position="absolute",e.style.width=0,e.style.height=0,e.style.overflow="hidden",e=e,(t=document.body).firstChild?l(e,t.firstChild):t.appendChild(e))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(i=function(){document.removeEventListener("DOMContentLoaded",i,!1),o()},document.addEventListener("DOMContentLoaded",i,!1)):document.attachEvent&&(d=o,c=n.document,a=!1,r(),c.onreadystatechange=function(){"complete"==c.readyState&&(c.onreadystatechange=null,s())})}function s(){a||(a=!0,d())}function r(){try{c.documentElement.doScroll("left")}catch(t){return void setTimeout(r,50)}s()}})(window); \ No newline at end of file diff --git a/style/iconfont/iconfont.json b/style/iconfont/iconfont.json new file mode 100644 index 0000000..14a1852 --- /dev/null +++ b/style/iconfont/iconfont.json @@ -0,0 +1,16 @@ +{ + "id": "4692956", + "name": "no name", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "38645607", + "name": "长箭头-copy-copy", + "font_class": "arrdown-copy", + "unicode": "e65a", + "unicode_decimal": 58970 + } + ] +} diff --git a/style/iconfont/iconfont.ttf b/style/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9dd059bc6d4a6468e71626de43f57893ee794312 GIT binary patch literal 1644 zcmd^9OKTHR7(I6;NoyMupRv{2j*k`}HEDxZkt#l0grZVw7e&xSwHq>3_QV=rQ$goPNofE>>5K-2rq*+RL_C*gSHj zO#Fd!piH9ay?%}ODd)y=CA`#3z}PPo&5mc8=##o$ph#5AOTI{96YXu(4cDyLOYRRo zr2QqJm3*%n?wA^-EwP>U0kC(yHdn)`7*&8$?q>ebB8KeOT<4q9>A~-4t^3Zb>NqDI z8*2>OU8>E{RJhEfp+o7CZQ%#Z&9k?#`@PT(4ULQ;<(Q$1)v}3b$oTnKIFlul`RhFj z+N4#G5lARD7K6BrI169bxMSR^ui`WEf{_~HI@y1W>KLN4 zk|#yIehc!QM{g^7X^XIih8^qjnYCg?Vne(;E4B~p?A|Ln#mc2CQlf_s_eG|wEA!*y z&wI(#;-n}hJKNLg_O)VPtt*qsbiI1l)Yj3~G}A0n?dhNU)9oo)XBpnBdcgAEwdE^Y zu6PYitX=O(C%<0d81WW`Y4a8Zn8_?JFP?-I_#VPx=^bz$^4y#rL~CvzI;N0z^t zgfdA8vAMZ iXQO>q)H~*_%m3lOh9)$jBWVUf!Mo^gvpj!Vy8QyEVbhTS literal 0 HcmV?d00001 diff --git a/style/iconfont/iconfont.woff b/style/iconfont/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..35b9640b622e50729d54539b2e248e981688cf50 GIT binary patch literal 1044 zcmXT-cXMN4WB>vd5e9A$&6We@DJ?7?&+>#2QSPhU5vYP`$u3*0koH?2gsKL zVg*J%293PL+*F|08lc?{KssGuvCW2p{NfS@2IeB@{SG8l5V-yt>;bT-|VqiQiCND4c_sPFmJbb)7jA=Y_lKlLV zvWyN5@?v6Q^5^cdOUOvDKjvWMljQ&B$S=vq2n{QSN9DhYwmN=RV($neRRJr}AL z3|O#y0sH1>?%S?M>3dwU^zEA<{Dk9WMsb%%(oVO|Y7~j15qib5r6ZyCQ5Lows zZT_LqSMi7Jen#(TWBg}2+bcseE}dBNuA=X2lCb~V zl{Od6;%A1GHlGWWdKq#%d3Me27nb5HPt0=Rtz7;1#)>nuw(`YpDA9Yp{r1Ecju}Ec z2@4Hdljk@mw#h!`QsfD8aV<&zIpZCxSx02%|5E=K+fJ;MFKX3eDmfRUyzA1TN-N(! z-T2pmr6t;Vr)Ra8Oo=+{nY8HvXT;sok=3k#K#$nF)UwZ%ob)2Ze7^ o1A`vhn}*JbofBs^s&8DOp}OD3-`sNlf=P{x47$Or?7*l10ARmiJOBUy literal 0 HcmV?d00001 diff --git a/style/iconfont/iconfont.woff2 b/style/iconfont/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..53d33b4eaaa1d72be985e5dac1adb91cd13279ce GIT binary patch literal 676 zcmV;V0$crePew8T0RR9100N`{3jhEB00wLT00LM50RR9100000000000000000000 z0000SR0d!Gf^Z68a{)F2Bm)Qw1^@&g1%zh@HXF4C5!H)#vab%}F|MhGgsr=sdIJ5M zYtqf6Es67aC^)rW-!w%-c0m#OD@$zu>_4ugLQ2i_xxmIM$ffo?ajIN{*8z* zLpl58(HBx0q?ct>%i;mx^M6127tja3Ao7EvN1ar(rUy2_=?7i5MG@{yV8%08UisDR zn;eEq5Wtaia!^Ijk{Vn`)XW%x7@U5Ayjn(Le<$`jj=|89J%TN|(jXhyfLc@m>+$F1 z7nx!Y3LA}6SJ7A8!~NGLcZ{C3X3?*iU9N?mrvMv31Id5^sp-#`p^-LT8 z*CxvfeaNA0|0}+#+2g=d2UtE?iVfMn2-aDE*_A~qE zr-!K7gOf8Wcb4y8UtfN1P`$6Oo`N5)dS5@Tes{Zbd-a|?{xgHxMF4@fX`#2fW&N{v zG5~z?3l@u55bXEn7x*=53rI930m`&VI;aSqlvRMEn*z%Td-8Uw;dKjT!5*(03EB~q zLt{@QWw=Dx;6x^Du_qgjBvHKH2`?tlh;aa7Ss)PHxrD-%TWH*QpbYl}8+`c&Tip2% zN9x37Hz#6+F*imfXhEM44b9HeCHDG8zmAHVGJoVH(iF5+Q!Tx4MxJBNviVNLfn%EB zDbK@kB*;t&jZ{G-_jT>s-clKwiW{R6w4hIjhGrL%rTl$w^y{b?r2ctcBJ~b!)d18> znW2scxn|jXC*r^{P4Lvia2yG8`>=#YsxTp&``RTrRH?StroSij;F#*-F4kNXv!#75 K4dt^a0000}?l9E= literal 0 HcmV?d00001 diff --git a/style/iconfont/iconfont.wxss b/style/iconfont/iconfont.wxss new file mode 100644 index 0000000..2f6bd80 --- /dev/null +++ b/style/iconfont/iconfont.wxss @@ -0,0 +1,26 @@ + +.iconfont { + font-family: "iconfont" !important; + font-size: 20px; + font-style: normal; + width: 10px; /* 设置按钮宽度 */ + height: 40px; /* 设置按钮高度 */ + padding-left: 150px;/*按钮大小*/ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.iconfont { + position: relative; /* 相对于其正常位置进行定位 */ + right: 240px; /* 向左移动图标 */ + top: 40px; /* 向下移动图标 */ + } +.icon-arrdown-copy:before { + content: "\e65a"; +} +@font-face { + font-family: 'iconfont'; /* Project id 4692956 */ + src: url('//at.alicdn.com/t/c/font_4692956_lc5fjtas54.woff2?t=1727098445449') format('woff2'), + url('//at.alicdn.com/t/c/font_4692956_lc5fjtas54.woff?t=1727098445449') format('woff'), + url('//at.alicdn.com/t/c/font_4692956_lc5fjtas54.ttf?t=1727098445449') format('truetype'); + } +