commit cfb1f866b58385010c320c77b2b4ae18fb2599ab
Author: Basyc <1120815294@qq.com>
Date: Sat Dec 7 10:20:50 2024 +0800
Initial Commit
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..115cc02
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,31 @@
+/*
+ * Eslint config file
+ * Documentation: https://eslint.org/docs/user-guide/configuring/
+ * Install the Eslint extension before using this feature.
+ */
+module.exports = {
+ env: {
+ es6: true,
+ browser: true,
+ node: true,
+ },
+ ecmaFeatures: {
+ modules: true,
+ },
+ parserOptions: {
+ ecmaVersion: 2018,
+ sourceType: 'module',
+ },
+ globals: {
+ wx: true,
+ App: true,
+ Page: true,
+ getCurrentPages: true,
+ getApp: true,
+ Component: true,
+ requirePlugin: true,
+ requireMiniProgram: true,
+ },
+ // extends: 'eslint:recommended',
+ rules: {},
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..14ea590
--- /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/app.js b/app.js
new file mode 100644
index 0000000..1efbf53
--- /dev/null
+++ b/app.js
@@ -0,0 +1,35 @@
+// app.js
+App({
+ onLaunch() {
+
+ // 登录
+ wx.login({
+ success: res => {
+ // 发送 res.code 到后台换取 openId, sessionKey, unionId
+ }
+ })
+ },
+
+ routeSafer(hasUserInfo){
+ hasUserInfo=this.globalData.hasUserInfo
+ if (hasUserInfo != true) {
+ wx.showToast({
+ title: '请先登录!',
+ icon:'error',
+ duration:1000,
+ success(){
+ setTimeout(() => {
+ wx.redirectTo({
+ url: '/pages/index/index',
+ })
+ }, 1000);
+ }
+ })
+ }
+ },
+
+ globalData: {
+ userInfo:{},
+ hasUserInfo:false
+ }
+})
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..4dd1f5b
--- /dev/null
+++ b/app.json
@@ -0,0 +1,49 @@
+{
+ "pages": [
+ "pages/index/index",
+ "pages/intro/intro",
+ "pages/shop/shop",
+ "pages/main/main",
+ "pages/shop/goods/goods",
+ "pages/shop/buycar/buycar",
+ "pages/shop/goods/evaluate/evaluate",
+ "pages/person/person"
+ ],
+ "tabBar": {
+ "list": [
+ {
+ "pagePath": "pages/intro/intro",
+ "text": "首页",
+ "iconPath": "/data/icon/shouye-copy.png",
+ "selectedIconPath":"/data/icon/shouye.png"
+ },
+ {
+ "pagePath": "pages/main/main",
+ "text": "赛事报名",
+ "iconPath": "/data/icon/saishi1.png",
+ "selectedIconPath":"/data/icon/saishi1-copy.png"
+ },
+ {
+ "pagePath": "pages/shop/shop",
+ "text": "教学教辅",
+ "iconPath": "/data/icon/read.png",
+ "selectedIconPath": "/data/icon/read-copy.png"
+ },
+ {
+ "pagePath": "pages/person/person",
+ "text": "个人中心",
+ "iconPath": "/data/icon/icon-.png",
+ "selectedIconPath": "/data/icon/icon--copy.png"
+ }
+ ]
+ },
+ "window": {
+ "backgroundTextStyle": "dark",
+ "navigationBarBackgroundColor": "#325395",
+ "navigationBarTitleText": "ZJCF青少年人工智能",
+ "navigationBarTextStyle": "white"
+ },
+ "componentFramework": "glass-easel",
+ "sitemapLocation": "sitemap.json",
+ "lazyCodeLoading": "requiredComponents"
+}
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..c7ecf74
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,22 @@
+/**app.wxss**/
+@font-face {
+ font-family: 'iconfont';
+ src: url('iconfont.ttf?t=1731926234801') format('truetype');
+ }
+
+.container {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ padding: 200rpx 0;
+ box-sizing: border-box;
+}
+button{
+ border-radius: 0;
+ margin: 0;
+ padding: 0;
+}
+button::after{ border: none; }
+
diff --git a/data/icon/icon--copy.png b/data/icon/icon--copy.png
new file mode 100644
index 0000000..b37c3cb
Binary files /dev/null and b/data/icon/icon--copy.png differ
diff --git a/data/icon/icon-.png b/data/icon/icon-.png
new file mode 100644
index 0000000..3a92d48
Binary files /dev/null and b/data/icon/icon-.png differ
diff --git a/data/icon/read-copy.png b/data/icon/read-copy.png
new file mode 100644
index 0000000..eb5f412
Binary files /dev/null and b/data/icon/read-copy.png differ
diff --git a/data/icon/read.png b/data/icon/read.png
new file mode 100644
index 0000000..f4660e6
Binary files /dev/null and b/data/icon/read.png differ
diff --git a/data/icon/saishi1-copy.png b/data/icon/saishi1-copy.png
new file mode 100644
index 0000000..4b68ab0
Binary files /dev/null and b/data/icon/saishi1-copy.png differ
diff --git a/data/icon/saishi1.png b/data/icon/saishi1.png
new file mode 100644
index 0000000..bbcf1f7
Binary files /dev/null and b/data/icon/saishi1.png differ
diff --git a/data/icon/shouye-copy.png b/data/icon/shouye-copy.png
new file mode 100644
index 0000000..3959385
Binary files /dev/null and b/data/icon/shouye-copy.png differ
diff --git a/data/icon/shouye.png b/data/icon/shouye.png
new file mode 100644
index 0000000..a3fd676
Binary files /dev/null and b/data/icon/shouye.png differ
diff --git a/data/image/shouye.jpg b/data/image/shouye.jpg
new file mode 100644
index 0000000..f40db89
Binary files /dev/null and b/data/image/shouye.jpg differ
diff --git a/data/image/star.webp b/data/image/star.webp
new file mode 100644
index 0000000..f423a7f
Binary files /dev/null and b/data/image/star.webp differ
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..0c5699c
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,59 @@
+// index.js
+const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
+const app=getApp()
+
+Page({
+ data: {
+ userInfo: {
+ avatarUrl: defaultAvatarUrl,
+ nickName: '',
+ },
+ userName: '',
+ },
+ onChooseAvatar(e) {
+ const {
+ avatarUrl
+ } = e.detail
+ this.setData({
+ userInfo: {
+ avatarUrl
+ },
+ })
+ },
+ iptHandler(e) {
+ const nickName = e.detail.value
+ this.setData({
+ // 通过e.detail.value获取到文本框最新的值
+ userName: nickName,
+ })
+ },
+ onLogin() {
+ if (this.data.userInfo.avatarUrl != defaultAvatarUrl && this.data.userName != '') {
+ wx.clearStorageSync('userInfo')
+ var userInfo = {
+ avatarUrl: '',
+ nickName: ''
+ }
+ userInfo.avatarUrl = this.data.userInfo.avatarUrl
+ userInfo.nickName = this.data.userName
+ wx.showToast({
+ title: '登录中',
+ icon: "loading",
+ duration: 800,
+ complete() {
+ app.globalData.userInfo=userInfo
+ app.globalData.hasUserInfo=true;
+ wx.switchTab({
+ url: '/pages/intro/intro'
+ })
+ }
+ });
+ } else {
+ wx.showToast({
+ title: '请输入用户头像及昵称',
+ icon: "error",
+ duration: 2000
+ });
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..43c5f3e
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ 昵称
+
+
+
+
+
+
+
+
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..2b7eb47
--- /dev/null
+++ b/pages/index/index.wxss
@@ -0,0 +1,61 @@
+/**index.wxss**/
+.userinfo {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ color: #aaa;
+ width: 80%;
+ }
+
+ .userinfo-avatar {
+ overflow: hidden;
+ width: 128rpx;
+ height: 128rpx;
+ margin: 20rpx;
+ border-radius: 50%;
+ }
+
+ .usermotto {
+ margin-top: 200px;
+ width: 100px;
+ }
+
+ .avatar-wrapper {
+ padding: 0;
+ width: 56px ;
+ height: 56px;
+ border-radius: 8px;
+ margin-top: 40px;
+ margin-bottom: 40px;
+ }
+
+ .avatar {
+ display: block;
+ width: 56px;
+ height: 56px;
+ }
+
+ .nickname-wrapper {
+ display: flex;
+ width: 100%;
+ padding: 16px;
+ box-sizing: border-box;
+ border-top: .5px solid rgba(0, 0, 0, 0.1);
+ border-bottom: .5px solid rgba(0, 0, 0, 0.1);
+ color: black;
+ }
+
+ .nickname-label {
+ width: 105px;
+ }
+
+ .nickname-input {
+ flex: 1;
+ }
+
+ .login{
+ width: 200rpx;
+ height: 80rpx;
+ line-height: 80rpx;
+ border-radius: 10%;
+ }
\ No newline at end of file
diff --git a/pages/intro/intro.js b/pages/intro/intro.js
new file mode 100644
index 0000000..d9ff605
--- /dev/null
+++ b/pages/intro/intro.js
@@ -0,0 +1,65 @@
+// pages/intro/intro.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/intro/intro.json b/pages/intro/intro.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/intro/intro.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/intro/intro.wxml b/pages/intro/intro.wxml
new file mode 100644
index 0000000..1589ca2
--- /dev/null
+++ b/pages/intro/intro.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+学会简介
+
+
diff --git a/pages/intro/intro.wxss b/pages/intro/intro.wxss
new file mode 100644
index 0000000..cab5884
--- /dev/null
+++ b/pages/intro/intro.wxss
@@ -0,0 +1,39 @@
+/* pages/intro/intro.wxss */
+.intro_container{
+ width: 100%;
+ height: 100vh;
+ position: relative;
+ background-color: #15042f;
+}
+.shouye {
+ width: 100%;
+ height: 200px;
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.shouye image {
+ width: 100%;
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+
+.card {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin: -25vh 0 0 -45vmin;
+ width: 90vmin; /* 调整宽度以适应需求 */
+ height: 50vh;
+ background-color: white;
+ border-radius: 10px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ text-align: center;
+ background-color: #342c5293;
+ backdrop-filter: blur(10px);
+}
\ No newline at end of file
diff --git a/pages/main/main.js b/pages/main/main.js
new file mode 100644
index 0000000..7bf3205
--- /dev/null
+++ b/pages/main/main.js
@@ -0,0 +1,65 @@
+// pages/main/main.js
+const app=getApp()
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ hasUserInfo:false,
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+ app.routeSafer(this.data.hasUserInfo)
+},
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/main/main.json b/pages/main/main.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/main/main.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/main/main.wxml b/pages/main/main.wxml
new file mode 100644
index 0000000..140ade1
--- /dev/null
+++ b/pages/main/main.wxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 2024年第四届《英语世界》杯全国大学生翻译大赛
+ 报名日期:2024.09.08 ~ 2024.11.23
+
+
+
+
+
+
+
+ 2024年第五届“中译国青杯”国际组织文件翻译大赛
+ 报名日期:2024.09.30 ~ 2024.11.29
+
+
+
+
+
+
+
+ 第二届“数学周报” 全国大学生数学能力大赛
+ 报名日期:2024年08月20日-2024年11月30日
+
+
+
+
\ No newline at end of file
diff --git a/pages/main/main.wxss b/pages/main/main.wxss
new file mode 100644
index 0000000..a262291
--- /dev/null
+++ b/pages/main/main.wxss
@@ -0,0 +1,49 @@
+/* pages/main/main.wxss */
+swiper{
+ height: 60vmin;
+}
+.swiper_image{
+ width: 100%;
+}
+.cont {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 20px; /* 可根据需要调整内边距 */
+ box-sizing: border-box;
+ }
+
+ .card {
+ width: 90vmin;
+ border-radius: 10px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ overflow: hidden;
+ background-color: #fff; /* 背景颜色 */
+ }
+
+ .image {
+ width: 100%;
+ height: 25vh;
+ border-top-left-radius: 10px;
+ border-top-right-radius: 10px;
+ }
+
+ .info {
+ padding: 10px;
+ display: flex;
+ flex-flow: column;
+ }
+
+ .name {
+ font-size: 18px;
+ color: #333;
+ margin-bottom: 5px; /* 为名称和日期之间添加一些间距 */
+ white-space: nowrap; /* 防止名称换行 */
+ overflow: hidden; /* 隐藏溢出的文本 */
+ text-overflow: ellipsis; /* 显示省略号 */
+ }
+
+ .date {
+ font-size: 14px;
+ color: #666;
+ }
\ No newline at end of file
diff --git a/pages/person/person.js b/pages/person/person.js
new file mode 100644
index 0000000..47f3296
--- /dev/null
+++ b/pages/person/person.js
@@ -0,0 +1,84 @@
+// pages/person/person.js
+const app = getApp()
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ userInfo: app.globalData.userInfo
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ },
+ talkOnline() {
+ wx.showToast({
+ title: '还没写这里的代码',
+ icon: 'none'
+ })
+ },
+ quitOut() {
+ app.globalData.userInfo = {}
+ app.globalData.hasUserInfo = false
+ this.setData({
+ userInfo: {}
+ })
+ wx.redirectTo({
+ url: '/pages/index/index',
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/person/person.json b/pages/person/person.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/person/person.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/person/person.wxml b/pages/person/person.wxml
new file mode 100644
index 0000000..8922a7b
--- /dev/null
+++ b/pages/person/person.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ {{userInfo.nickName}}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/person/person.wxss b/pages/person/person.wxss
new file mode 100644
index 0000000..db5542d
--- /dev/null
+++ b/pages/person/person.wxss
@@ -0,0 +1,63 @@
+.usrinfo{
+ width: 100%;
+ height: 35vh;
+ background-color: #325395;
+}
+.avatarcon{
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 150px;
+}
+.avatar{
+ width: 100px;
+ height: 100px;
+ border-radius: 50%;
+ justify-content: center;
+ align-items: center;
+ border: 3px solid white;
+ box-shadow: 0 0 10px;
+}
+
+.nickName{
+ width: 100%;
+ text-align: center;
+ font-weight: 700;
+ color: white;
+ font-family:'Times New Roman', Times, serif;
+ font-size: 25px;
+}
+
+/* 列表容器样式 */
+.list {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-top: 20px; /* 根据需要调整 */
+ }
+
+ /* 按钮样式 */
+ .btn1, .btn2, .btn3 {
+ width: 80%; /* 按钮宽度 */
+ height: 50px;
+ line-height: 50px;
+ margin: 10px 0; /* 按钮外边距 */
+ background-color: #1AAD19; /* 按钮背景颜色 */
+ color: white; /* 按钮文字颜色 */
+ text-align: center; /* 文字居中 */
+ border-radius: 5px; /* 按钮圆角 */
+ font-size: 16px; /* 文字大小 */
+ }
+
+ /* 为不同的按钮添加不同的样式,如果需要的话 */
+ .btn1 {
+ background-color: #007aff; /* 在线客服按钮背景颜色 */
+ }
+
+ .btn2 {
+ background-color: #ff9900; /* 个人资料按钮背景颜色 */
+ }
+
+ .btn3 {
+ background-color: #ff3b30; /* 退出登录按钮背景颜色 */
+ }
\ No newline at end of file
diff --git a/pages/shop/buycar/buycar.js b/pages/shop/buycar/buycar.js
new file mode 100644
index 0000000..b89b01c
--- /dev/null
+++ b/pages/shop/buycar/buycar.js
@@ -0,0 +1,107 @@
+Page({
+ data: {
+ cartItems: [
+ { id: 1, name: '商品A', price: 100, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png', selected: false },
+ { id: 2, name: '商品B', price: 200, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png', selected: false },
+ { id: 3, name: '商品C', price: 300, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png', selected: false },
+ { id: 4, name: '商品D', price: 400, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png', selected: false },
+ { id: 5, name: '商品E', price: 500, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png', selected: false }
+ ],
+ total: 0,
+ total_goods: 0,
+ allSelected: false
+ },
+
+ onLoad: function() {
+ this.calculateTotal();
+ this.calculateTotal_goods();
+ },
+
+ toggleSelection: function(e) {
+ const id = e.currentTarget.dataset.id;
+ const index = this.data.cartItems.findIndex(item => item.id === id);
+ if (index !== -1) {
+ let updatedItem = this.data.cartItems[index];
+ updatedItem.selected = !updatedItem.selected;
+ this.setData({
+ ['cartItems[' + index + ']']: updatedItem
+ });
+ this.calculateTotal();
+ this.calculateTotal_goods();
+ this.updateAllSelected();
+ }
+ },
+
+ toggleAllSelection: function() {
+ const newSelection = !this.data.allSelected;
+ const updatedCartItems = this.data.cartItems.map(item => ({
+ ...item,
+ selected: newSelection
+ }));
+ this.setData({
+ cartItems: updatedCartItems,
+ allSelected: newSelection
+ });
+ this.calculateTotal();
+ this.calculateTotal_goods();
+ },
+
+ increaseQuantity: function(e) {
+ const id = e.currentTarget.dataset.id;
+ const index = this.data.cartItems.findIndex(item => item.id === id);
+ if (index !== -1) {
+ let updatedItem = this.data.cartItems[index];
+ updatedItem.quantity += 1;
+ this.setData({
+ ['cartItems[' + index + ']']: updatedItem
+ });
+ this.calculateTotal();
+ }
+ },
+
+ decreaseQuantity: function(e) {
+ const id = e.currentTarget.dataset.id;
+ const index = this.data.cartItems.findIndex(item => item.id === id);
+ if (index !== -1) {
+ let updatedItem = this.data.cartItems[index];
+ if (updatedItem.quantity > 1) {
+ updatedItem.quantity -= 1;
+ this.setData({
+ ['cartItems[' + index + ']']: updatedItem
+ });
+ this.calculateTotal();
+ }
+ }
+ },
+
+ calculateTotal: function() {
+ let total = 0;
+ this.data.cartItems.forEach(item => {
+ if (item.selected) {
+ total += item.price * item.quantity;
+ }
+ });
+ this.setData({ total: total });
+ },
+
+ calculateTotal_goods: function() {
+ let total_goods = this.data.cartItems.reduce((acc, item) => {
+ return acc + (item.selected ? 1 : 0);
+ }, 0);
+
+ this.setData({ total_goods: total_goods });
+ },
+
+ updateAllSelected: function() {
+ const allSelected = this.data.cartItems.every(item => item.selected);
+ this.setData({ allSelected: allSelected });
+ },
+
+ checkout: function() {
+ wx.showToast({
+ title: '结算成功',
+ icon: 'success',
+ duration: 2000
+ });
+ }
+ });
\ No newline at end of file
diff --git a/pages/shop/buycar/buycar.json b/pages/shop/buycar/buycar.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/shop/buycar/buycar.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/shop/buycar/buycar.wxml b/pages/shop/buycar/buycar.wxml
new file mode 100644
index 0000000..f277258
--- /dev/null
+++ b/pages/shop/buycar/buycar.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+ 全选
+
+
+ 总计: ¥{{ total }}
+
+
+
+
\ No newline at end of file
diff --git a/pages/shop/buycar/buycar.wxss b/pages/shop/buycar/buycar.wxss
new file mode 100644
index 0000000..62f12c1
--- /dev/null
+++ b/pages/shop/buycar/buycar.wxss
@@ -0,0 +1,123 @@
+.cart-container {
+ padding: 20px;
+ background-color: #f9f9f9;
+ border-radius: 10px;
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ padding-bottom: 60px; /* 为底部结算栏留出空间 */
+ }
+
+ .cart-item {
+ display: flex;
+ align-items: center;
+ padding: 20px;
+ background-color: #fff;
+ border-radius: 8px;
+ margin-bottom: 20px;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+ }
+
+ .item-checkbox {
+ margin-right: 10px;
+ }
+
+ .item-image {
+ width: 80px;
+ height: 80px;
+ margin-right: 20px;
+ border-radius: 8px;
+ }
+
+ .item-details {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ }
+
+ .item-name {
+ font-size: 14px;
+ color: #333;
+ margin-bottom: 10px;
+ }
+
+ .item-footer {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+
+ .item-price {
+ font-size: 16px;
+ color: red;
+ }
+
+ .quantity-control {
+ display: flex;
+ align-items: center;
+ }
+
+ .quantity-control button {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+ margin: 0 5px;
+
+ }
+
+ .quantity-control button:active {
+ background-color: #d0d0d0;
+ }
+
+ .checkout-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ background-color: #fff;
+ padding: 10px 20px;
+ box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.05);
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ z-index: 100;
+ box-sizing: border-box; /* 确保内边距不会影响宽度 */
+ }
+
+ .select-all {
+ display: flex;
+ align-items: center;
+ }
+
+ .select-all-checkbox {
+ margin-right: 10px;
+ }
+
+ .total-and-checkout {
+ display: flex;
+ align-items: center;
+ }
+
+ .total-and-checkout text {
+ font-size: 16px;
+ font-weight: bold;
+ color: #333;
+ margin-right: 10px;
+ }
+
+ .checkout-bar button {
+ width: 100px;
+ height: 40px;
+ line-height: 40px;
+ background-color: #1aad19;
+ color: #fff;
+ border: none;
+ border-radius: 40px;
+ font-size: 16px;
+ }
+
+ .checkout-bar button:hover {
+ background-color: #179a16;
+ }
\ No newline at end of file
diff --git a/pages/shop/goods/evaluate/evaluate.js b/pages/shop/goods/evaluate/evaluate.js
new file mode 100644
index 0000000..b6255fa
--- /dev/null
+++ b/pages/shop/goods/evaluate/evaluate.js
@@ -0,0 +1,46 @@
+// pages/reviews/reviews.js
+
+Page({
+ data: {
+ reviews: [
+ {
+ username: '用户A',
+ rating: 5,
+ comment: '非常满意,质量非常好!',
+ timestamp: '2023-10-01 10:00'
+ },
+ {
+ username: '用户B',
+ rating: 4,
+ comment: '不错,值得推荐!',
+ timestamp: '2023-10-02 11:00'
+ },
+ {
+ username: '用户C',
+ rating: 3,
+ comment: '一般般,还可以吧。',
+ timestamp: '2023-10-03 12:00'
+ },
+ {
+ username: '用户D',
+ rating: 2,
+ comment: '不太满意,有些问题。',
+ timestamp: '2023-10-04 13:00'
+ },
+ {
+ username: '用户E',
+ rating: 1,
+ comment: '非常不满意,不推荐购买!',
+ timestamp: '2023-10-05 14:00'
+ }
+ ]
+ },
+
+ onLoad: function () {
+ console.log('Reviews page loaded');
+ },
+
+ onBack: function () {
+ wx.navigateBack();
+ }
+ });
\ No newline at end of file
diff --git a/pages/shop/goods/evaluate/evaluate.json b/pages/shop/goods/evaluate/evaluate.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/shop/goods/evaluate/evaluate.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/shop/goods/evaluate/evaluate.wxml b/pages/shop/goods/evaluate/evaluate.wxml
new file mode 100644
index 0000000..429c069
--- /dev/null
+++ b/pages/shop/goods/evaluate/evaluate.wxml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+ {{item.username}}
+
+
+
+
+
+
+
+
+
+
+ {{item.timestamp}}
+
+
+
\ No newline at end of file
diff --git a/pages/shop/goods/evaluate/evaluate.wxss b/pages/shop/goods/evaluate/evaluate.wxss
new file mode 100644
index 0000000..9595b6f
--- /dev/null
+++ b/pages/shop/goods/evaluate/evaluate.wxss
@@ -0,0 +1,74 @@
+/* pages/reviews/reviews.wxss */
+
+/* 全局样式 */
+.container {
+ background-color: #f5f5f5;
+ padding: 20rpx;
+ }
+
+ /* 顶部导航栏 */
+ .navbar {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ background-color: #007aff;
+ padding: 20rpx;
+ color: #ffffff;
+ font-size: 32rpx;
+ }
+
+ .back-btn {
+ color: #ffffff;
+ font-size: 28rpx;
+ }
+
+ .title {
+ font-weight: bold;
+ }
+
+ /* 评价列表 */
+ .reviews-list {
+ margin-top: 20rpx;
+ }
+
+ .review-item {
+ background-color: #ffffff;
+ border-radius: 10rpx;
+ padding: 20rpx;
+ margin-bottom: 20rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ }
+
+ .user-info {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 10rpx;
+ }
+
+ .username {
+ font-weight: bold;
+ font-size: 28rpx;
+ }
+
+ .rating {
+ display: flex;
+ align-items: center;
+ }
+
+ .star {
+ width: 32rpx;
+ height: 32rpx;
+ margin-left: 5rpx;
+ }
+
+ .comment {
+ font-size: 28rpx;
+ color: #333333;
+ margin-bottom: 10rpx;
+ }
+
+ .timestamp {
+ font-size: 24rpx;
+ color: #999999;
+ }
\ No newline at end of file
diff --git a/pages/shop/goods/goods.js b/pages/shop/goods/goods.js
new file mode 100644
index 0000000..861044b
--- /dev/null
+++ b/pages/shop/goods/goods.js
@@ -0,0 +1,56 @@
+// pages/product/product.js
+
+Page({
+ data: {
+ // 可以在这里添加更多的数据
+ goods_item:[
+ { id: 1, name: '商品A', price: 100, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png', selected: false },
+ { id: 2, name: '商品B', price: 200, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png', selected: false },
+ { id: 3, name: '商品C', price: 300, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png', selected: false },
+ { id: 4, name: '商品D', price: 400, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png', selected: false },
+ { id: 5, name: '商品E', price: 500, quantity: 1, image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png', selected: false }
+ ],
+ user: {
+ avatar: 'https://ts3.cn.mm.bing.net/th?id=OIP-C.y6rdSCGpxbfeb8Rd1CpSuwAAAA&w=250&h=250&c=8&rs=1&qlt=90&o=6&pid=3.1&rm=2', // 默认头像路径
+ nickname: '匿名用户' // 默认昵称
+ },
+ comment: {
+ text: '这是一个很棒的产品,我非常喜欢!', // 默认评语
+ purchaseTime: '2024-11-20' // 默认购买时间
+ }
+ },
+
+ onLoad: function () {
+ console.log('Product page loaded');
+ wx.setNavigationBarTitle({
+ title: '商品详情',
+ })
+ },
+
+ onSearch: function (e) {
+ console.log('Search clicked', e.detail.value);
+ // 处理搜索逻辑
+ },
+
+ onBuyNow: function () {
+ console.log('Buy now clicked');
+ // 处理立即购买逻辑
+ },
+
+ onAddToCart: function () {
+ console.log('Add to cart clicked');
+ // 处理加入购物车逻辑
+ },
+
+ onViewReviews: function () {
+ console.log('View reviews clicked');
+ wx.navigateTo({
+ url: '/pages/shop/goods/evaluate/evaluate',
+ })
+ },
+
+ onContactCustomerService: function () {
+ console.log('Contact customer service clicked');
+ // 处理联系客服逻辑
+ }
+ });
\ No newline at end of file
diff --git a/pages/shop/goods/goods.json b/pages/shop/goods/goods.json
new file mode 100644
index 0000000..a97367d
--- /dev/null
+++ b/pages/shop/goods/goods.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
diff --git a/pages/shop/goods/goods.wxml b/pages/shop/goods/goods.wxml
new file mode 100644
index 0000000..780ec56
--- /dev/null
+++ b/pages/shop/goods/goods.wxml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+ ¥1798
+ ¥1998
+
+ 已售1000+
+
+ 海产大礼包包含生蚝三文鱼波士顿龙虾扇贝蛤蜊海虾
+
+ 距离活动结束还有8小时8分48秒
+
+
+ 商品评价(1)
+
+
+
+
+
+
+
+ 商品详情
+
+
+
+
+
+
+
+ 相关支持由湛江市计算机协会提供
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/shop/goods/goods.wxss b/pages/shop/goods/goods.wxss
new file mode 100644
index 0000000..bdae064
--- /dev/null
+++ b/pages/shop/goods/goods.wxss
@@ -0,0 +1,164 @@
+/* 商品展示区 */
+.product-display {
+ background-color: #ffffff;
+ border-radius: 10rpx;
+ padding: 10rpx;
+ margin-top: 20rpx;
+ margin: 20rpx 5px;
+}
+
+.swiper {
+ width: 100%;
+ height: 600rpx;
+ overflow: hidden;
+}
+
+.swiper-image {
+ width: 100%;
+ height: 100%;
+}
+
+.product-info {
+ font-size: 28rpx;
+ color: #333333;
+ margin-top: 20rpx;
+}
+
+.product-name {
+ margin-bottom: 10rpx;
+ font-size: 18px;
+}
+
+.price-info {
+ display: flex;
+ align-items: baseline;
+}
+
+.original-price {
+ text-decoration: line-through;
+ color: #999999;
+ margin-right: 10rpx;
+}
+
+.discount-price {
+ color: #ff5722;
+ font-size: 25px;
+}
+
+.box-top {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 100rpx;
+}
+
+.promotion-info {
+ margin-bottom: 20px;
+}
+
+.countdown {
+ color: #999999;
+}
+
+.review-info {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.view-reviews-btn {
+ width: 250rpx;
+ height: 30px;
+ background-color: transparent;
+ color: #7c7c7c;
+ font-size: 14px;
+ line-height: 30px;
+}
+
+.comment-card {
+ background-color: #fff;
+ padding: 16px;
+ }
+
+ .user-info {
+ display: flex;
+ align-items: center;
+ margin-bottom: 8px;
+ }
+
+ .avatar {
+ width: 40px;
+ height: 40px;
+ border-radius: 50%;
+ margin-right: 12px;
+ }
+
+ .nickname {
+ font-size: 14px;
+ color: #333;
+ }
+
+ .comment {
+ margin-bottom: 8px;
+ font-size: 14px;
+ color: #666;
+ }
+
+ .purchase-time {
+ font-size: 12px;
+ color: #999;
+ }
+
+.goods_intro{
+ width: 100%;
+}
+
+ .intro_top{
+ width: 100%;
+ height: 60px;
+ text-align: center;
+ line-height: 60px;
+ border-top: 1px solid #666;
+ }
+
+ .intro_image{
+ width: 100%;
+ }
+/* 购买操作区 */
+.purchase-buttons {
+ display: flex;
+ align-items: center;
+ position: fixed;
+ bottom: -20px;
+ height: 60px;
+ left: 0;
+ width: 100%;
+ z-index: 100;
+ margin: 15px 0;
+ background-color: white;
+ justify-content: space-around;
+ margin-top: 20rpx;
+}
+
+.buy-now-btn,
+.add-to-cart-btn {
+ background-color: #ff5722;
+ color: #ffffff;
+ border: none;
+ border-radius: 5px;
+ font-size: 28rpx;
+ width: 45%;
+ height: 40px;
+ line-height: 40px;
+}
+
+.add-to-cart-btn {
+ background-color: #007aff;
+}
+
+.bottom{
+ height: 100px;
+ text-align: center;
+ font-size: 14px;
+ line-height: 50px;
+}
\ No newline at end of file
diff --git a/pages/shop/shop.js b/pages/shop/shop.js
new file mode 100644
index 0000000..7898aff
--- /dev/null
+++ b/pages/shop/shop.js
@@ -0,0 +1,113 @@
+Page({
+ data: {
+ // 轮播图图片列表
+ imageList: [
+ 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png',
+ 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png',
+ 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png',
+ 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png',
+ 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png',
+ 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner6.png',
+ // 更多图片路径...
+ ],
+
+ // 商品分类
+ categories: ['全部', '教材','课程资源包'],
+
+ // 当前选中的分类索引
+ currentCategoryIndex: 0,
+
+ // 商品列表
+ productList: [
+ {
+ image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png',
+ name: '商品名称1',
+ price: 99.99,
+ category: '教材'
+ },
+ {
+ image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png',
+ name: '商品名称2',
+ price: 199.99,
+ category: '教材'
+ },
+ {
+ image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png',
+ name: '商品名称3',
+ price: 199.99,
+ category: '课程资源包'
+ },
+ {
+ image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png',
+ name: '商品名称4',
+ price: 199.99,
+ category: '课程资源包'
+ },
+ {
+ image: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png',
+ name: '商品名称5',
+ price: 199.99,
+ category: '课程资源包'
+ },
+ // 更多商品数据...
+ ],
+
+ // 过滤后的商品列表
+ filteredProductList: []
+ },
+
+ onPullDownRefresh: function() {
+ // 执行下拉刷新操作,如重新加载数据
+ // 模拟数据加载
+ wx.showNavigationBarLoading(); // 在标题栏中显示加载
+
+ // 假设这里进行了数据刷新
+ setTimeout(() => {
+ // 数据刷新完毕,停止加载
+ wx.hideNavigationBarLoading();
+ wx.stopPullDownRefresh(); // 停止下拉动作
+ }, 1500);
+ },
+
+ onLoad: function(options) {
+ // 页面加载时执行的初始化操作
+ this.filterProductsByCategory(this.data.currentCategoryIndex);
+ },
+
+ // 切换分类
+ switchCategory: function(e) {
+ const index = e.currentTarget.dataset.index;
+ this.setData({
+ currentCategoryIndex: index
+ });
+ this.filterProductsByCategory(index);
+ },
+
+ // 根据分类过滤商品列表
+ filterProductsByCategory: function(categoryIndex) {
+ let filteredList = [];
+ if (categoryIndex === 0) {
+ // 全部分类
+ filteredList = this.data.productList;
+ } else {
+ const selectedCategory = this.data.categories[categoryIndex];
+ filteredList = this.data.productList.filter(item => item.category === selectedCategory);
+ }
+ this.setData({
+ filteredProductList: filteredList
+ });
+ },
+
+ // 其他页面事件处理函数...
+ to_car() {
+ wx.navigateTo({
+ url: '/pages/shop/buycar/buycar',
+ })
+ },
+
+ to_goods() {
+ wx.navigateTo({
+ url: '/pages/shop/goods/goods',
+ })
+ }
+});
\ No newline at end of file
diff --git a/pages/shop/shop.json b/pages/shop/shop.json
new file mode 100644
index 0000000..7360326
--- /dev/null
+++ b/pages/shop/shop.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "enablePullDownRefresh": true
+}
\ No newline at end of file
diff --git a/pages/shop/shop.wxml b/pages/shop/shop.wxml
new file mode 100644
index 0000000..b435a52
--- /dev/null
+++ b/pages/shop/shop.wxml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+ ¥{{item.price}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/shop/shop.wxss b/pages/shop/shop.wxss
new file mode 100644
index 0000000..9f1c795
--- /dev/null
+++ b/pages/shop/shop.wxss
@@ -0,0 +1,139 @@
+/* 首页容器 */
+.container {
+ padding: 10px;
+}
+
+/* 轮播图样式 */
+.swiper {
+ width: 100%;
+ height: 200px; /* 根据实际需求调整高度 */
+ margin: 20px;
+}
+
+.slide-image {
+ width: 100%;
+ height: 100%;
+ border-radius: 10px; /* 圆角 */
+}
+
+/* 商品分类Tab栏样式 */
+.tabs {
+ display: flex;
+ width: 100%;
+ flex-wrap: nowrap;
+ background-color: #f8f8f8;
+ border-radius: 5px;
+ height: 40px;
+ margin: 0 0 10px 0;
+}
+
+.tab {
+ text-align: center;
+ width: 100%;
+ height: 100%;
+ line-height: 40px;
+ font-size: 14px;
+ color: #333;
+ cursor: pointer;
+ border-radius: 5px;
+}
+
+.tab.active {
+ color: #ff5722;
+ border-bottom: 2px solid #ff5722;
+}
+
+/* 商品列表样式 */
+.product-list {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+}
+
+.product-column {
+ width: 48%; /* 两列布局,留出间隙 */
+ box-sizing: border-box;
+ margin-bottom: 20px;
+}
+
+.product-item {
+ width: 100%;
+ border-radius: 10px; /* 圆角 */
+ overflow: hidden;
+ box-shadow: 0 4px 8px rgba(0,0,0,0.1);
+ background-color: #fff;
+}
+
+.product-image {
+ width: 100%;
+ height: 40vmin;
+ object-fit: cover;
+}
+
+.product-info {
+ padding: 15px;
+ display: flex;
+ flex-wrap: wrap;
+ flex-flow: column;
+}
+
+.product-name {
+ font-size: 16px;
+ color: #333;
+ margin-bottom: 10px;
+ white-space: nowrap; /* 防止名称换行 */
+ overflow: hidden; /* 隐藏溢出的文本 */
+ text-overflow: ellipsis; /* 显示省略号 */
+}
+
+.product-price {
+ font-size: 15px;
+ color: #f00;
+}
+
+.contain {
+ height: 100%;
+ width: 100%;
+ display: flex;
+ flex-wrap: nowrap;
+ justify-content: space-between;
+ align-items: center;
+}
+
+/* 定义一个圆形按钮的样式 */
+.addcar {
+ text-align: center;
+ line-height: 30px;
+ width: 30px; /* 按钮宽度 */
+ height: 30px; /* 按钮高度 */
+ background-color: #ffffff; /* 按钮背景颜色 */
+ border-radius: 10px; /* 圆角为50%,使其成为圆形 */
+ color: rgb(255, 255, 255); /* 文字颜色 */
+ font-size: 16px; /* 文字大小 */
+ box-shadow: 0 0px 10px 1px rgba(0, 0, 0, 0.2); /* 按钮阴影 */
+}
+
+/* 按钮点击时的样式 */
+.addcar:active {
+ background-color: #c9c9c9; /* 点击时的背景颜色 */
+}
+
+.tocar {
+ position: fixed;
+ bottom: 12vh;
+ right: 7vmin;
+ width: 50px;
+ height: 50px;
+ text-align: center;
+ line-height: 50px;
+ background-color: #ffffff; /* 按钮背景颜色 */
+ border-radius: 50%; /* 圆角为50%,使其成为圆形 */
+ color: rgb(255, 0, 0); /* 文字颜色 */
+ font-size: 20px; /* 文字大小 */
+ box-shadow: 0 0px 10px 1px rgba(0, 0, 0, 0.2); /* 按钮阴影 */
+}
+
+.tocar:active {
+ background-color: #c9c9c9; /* 点击时的背景颜色 */
+}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..68baf63
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,29 @@
+{
+ "compileType": "miniprogram",
+ "libVersion": "trial",
+ "setting": {
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "enhance": true,
+ "showShadowRootInWxmlPanel": true,
+ "packNpmRelationList": [],
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "ignoreUploadUnusedFiles": true
+ },
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "auto",
+ "tabSize": 2
+ },
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "appid": "wx8ae8ce848baae8a9"
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..657f0a0
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,7 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "miniprogram-2",
+ "setting": {
+ "compileHotReLoad": true
+ }
+}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /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/utils/util.js b/utils/util.js
new file mode 100644
index 0000000..764bc2c
--- /dev/null
+++ b/utils/util.js
@@ -0,0 +1,19 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+
+ return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : `0${n}`
+}
+
+module.exports = {
+ formatTime
+}