软件工程第一次作业---简单的资料分享平台

| 博客班级 | https://edu.cnblogs.com/campus/zjcsxy/SE2020 |
| ---- | ---- | ---- |
| 作业要求 | https://edu.cnblogs.com/campus/zjcsxy/SE2020/homework/11334 |
| 作业目标 |1.编写一个小程序,可以全新编写,也可以学习别人的小程序进行修改 2.熟悉git代码管理流程,将源代码上传到到 3.github在博客园班级中写一篇相应的博文 |
| 作业源代码| https://github.com/momoshenchi/zuccresource- |
| 学号 | 31802053 |
| 院系| 浙大城市学院计算机专业 |
| 姓名学号| 王钧亮 31802053|

前言

这种资料平台的兴起已经是很久之前的事情,这次微信小程序我也不知道如何下手,就开始作这件事.
我的前景是愿城院学子不再受到考试折磨,当然软件工程这种课也要给他们留下模板
注: 全部代码95%以上都是手打,版权所有,请勿抄袭

项目大致功能:
用户进入首页后可以顺序浏览所有文件信息,文件排列没有顺序.到达底部后,弹出提示
首页还可以进行上传操作和发帖求助.上传操作只会上传到云端,需要管理员(本人)审核后送入数据库.
进入帖子页面,右上角点击可以发帖,中间是帖子的信息.
tabbar栏还有一个分类页面,是根据学院进行排列(不过还没实现),学院右侧是具体的科目信息,点击可以跳转到具体资源页面
在资源页面,可以看见文件的大致信息.点击选择评价可以给出好评或差评.
底部的加入收藏可以放入每个人的收藏栏.
点击下载有一个局限,会下载到一个难以找到的地方...


预期目标:

城院资料共享 (项目)功能

刚开始资料以考试试卷和计算机资料为主

1.用户识别,登录✅

2.用户可以查看自己的下载,收藏 ❎

3.可以实现下载资料的功能✅

4.在每个下载页面,可以查看各种数据(下载量,好评率,页数),以及对每份文档评论❎

5.用户可以上传文档 ✅

6.用户可以评论文档,每个文档每个用户只能评论一次 ❎

7.(对用户的下载做出限制) ❎

8.发帖求助,互动,回答帖子 ❎

9.有分类页面,可以进行检索✅

10.可以预览文件 ✅

微信开发综述(我个人对于微信小程序的理解及项目涉及)

采用模块化的开发思想,开发模式类似于vue.js,react.js

每个模块共有4个文件.分别为wxml,wxss,wxjs,json.

分为两个层级视图层(wxml),逻辑层(wxjs)

wxss负责美化工作,json文件功能则被大幅限制

后端向wxjs中的data传输数据,wxml使用data中的数据在页面渲染显示

sitemap只需要在开发时使用,可设置小程序搜索索引
项目使用云开发,结合里面的云存储,数据库,云函数功能实现后端,小程序代码实现前端,前后端代码没有完全分离,还有很大进步空间.
app.json负责全局配置
属性:
pages :

页面路径列表 必填
window 常用设置:

  "window": {
    "enablePullDownRefresh": true,
    "backgroundTextStyle": "dark",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "name",
    "navigationBarTextStyle": "black"
  },

background : page下拉区域才为背景(设置enablePullDownRefresh)

enablePullDownRefresh:true 全局下拉刷新

tabBar:

切换条(菜单栏),可以切换页面

图片

设置文字颜色(设置成与icon相匹配)

属性:

color : tab 上的文字默认颜色

selectedColor : 文字选中颜色

设置list属性:

list中设置pagePath,text 属性,必须设置两个页面以上

"tabBar": {
    "list":[
        {
          "pagePath": "pages/test/1",
          "text": "首页",
           "iconPath": "",
          "selectedIconPath": ""
        },
        {
          "pagePath": "pages/logs/logs",
          "text": "日志",
          "iconPath": "",
          "selectedIconPath": ""
        }
    ]
  }

设置tabbar图片:
iconPath string 否 图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。
当 position 为 top 时,不显示 icon。
selectedIconPath string 否 选中时的图片路径,icon 大小限制为 40kb,建议尺寸为 81px * 81px,不支持网络图片。
当 position 为 top 时,不显示 icon。

页面生命周期

常用的生命周期元素
onLoad->onShow->onReady

onLoad 开始加载,一个页面只会触发一次(初始化页面数据)

onReady 初次渲染完成,一个页面只会触发一次

onShow 应用切到前台时以及页面切换触发

onHide 应用隐藏以及页面之间切换的时候首先隐藏当前页面,再加载其他页面

onShow/onHide会反复调用

常用处理函数:

onPullDownRefresh下拉刷新(只有设置允许下拉) (页面数据效果刷新) 常用

onReachBottom 页面滚动触底( 需要足够多的数据, 实现上拉加载下一页) 常用

onShareAppMessage 分享按钮

onPageScroll 页面滚动就一直触发

onResize 页面尺寸变化,横竖屏切换

onTabItemTap 自己是tabbar页面,点击自己的按钮触发

下面是一些标签组件:

标签类似于

用于布局

用于左右两侧的滚动条. 必须设置scroll-y属性控制

以及wxss中的page{height:100%}

不会换行, 只能嵌套text, selectable 长按可复制 (只有该标签有此功能)

decode 对 & nbsp; 等解码

导航组件 类似于超链接 ,用于跳转. 可以在其中嵌套按纽跳转

属性:open-type为页面的跳转方式:

  • navigate 默认值 ,保留当前页面,有返回箭头,****不能跳转tabar界面

  • redirect 关闭当前页面,跳转,有home按钮****,不能跳转tabar界面

  • switchTab 跳转tabBar页面,关闭其他非tab页面

  • relaunch 关闭所有页面,打开任意页面

button 非常强大 (注 :这里有一个博客园的bug,不能写button标签形式)

使用图片时统一使用外网图片

默认宽度 320px,高度240px

属性 : mode 决定裁剪,缩放模式

  • scaleToFill 默认不保持横纵比,使宽高完全适配

  • aspectFit 保持横纵比 (页面轮播图常用)

  • widthFix 指定宽度,高度按比例调整

轮播图

每一项被包裹,里面嵌套

默认宽度100% 高度150px

swiper无法根据宽度自动设置高度,需要手动设置

设置经验 :图片和swiper的宽度设置为100%,image mode设置为width-fit

swiper高度=100vw*原图高度/宽度

文件配置:

真机调试

使用api概述

wx.cloud.callFunction

执行云函数的操作,非常频繁使用

wx.cloud.callFunction({
      name: 'thumb',
      data: {
        good: true,
        "id": id,
        rate:rate
      },

wx.cloud.uploadFile

小程序端可以分别调用 wx.cloud.uploadFilewx.cloud.downloadFile 完成上传和下载云文件操作。

下面简单的几行代码,即可实现在小程序内让用户选择一张图片,然后上传到云端管理的功能:

`// 让用户选择一张图片 
wx.chooseImage({  success: chooseResult => {    
// 将图片上传至云存储空间    
	wx.cloud.uploadFile({      // 指定上传到的云路径      
	cloudPath: 'my-photo.png',      // 指定要上传的文件的小程序临时文件路径     
	filePath: chooseResult.tempFilePaths[0],      // 成功回调     
	success: res => {        console.log('上传成功', res)      },    
	})  
}, 
})`

wx.openDocument

直接打开指定地址的一个文件,在手机上会生成临时文件,不推荐作为下载使用

 wx.openDocument({
                filePath: res.tempFilePath,
                success: res => {
                  console.log(res)
                  wx.hideLoading()
                }

wx.getStorageSync

wx.getStorageSync("关键字")

wx.setStorageSync("关键字",数据)
目前,微信给每个小程序提供了10M的本地缓存空间

  1. 有了本地缓存,小程序可以做到:

    • 离线应用(已测试在无网络的情况下,可以操作缓存数据)
    • 流畅的用户体验
    • 减少网络请求,节省服务器资源
  2. 哪些数据适合缓存:

    • 热数据

    • 静态数据(用户数据,服务器授权ID等)

    • 网络地址(图片、文件等网络地址)

    • 分页列表数据及详情内容

wx.showModel

(弹出是或否的选择框),有一个点击按钮

wx.showModal({

     title: '提示',

     content: '这是一个模态弹窗',

     success: function (res) {

       if (res.confirm) {//这里是点击了确定以后

         console.log('用户点击确定')

       } else {//这里是点击了取消以后

         console.log('用户点击取消')

       }

     }

   })

wx.showToast(弹出成功或失败的图标),没有点击按钮

wx.showToast({

  title: '成功',

  icon: 'success',

  duration: 2000//持续的时间

 })

数据库操作

wx.cloud.init({环境id})在app.js中初始化

图片上传云存储,在数据库中进行封装

一定要修改读写权限(巨坑)

注:(弊端,文件上传后就无法更改文件夹位置,这就是腾讯的工程师吗)

腾讯云中的数据库改变自关系数据库,每个集合都是一张表

但是关系数据库中可以有好多数据库,腾讯云只能有一个

image-20201017205336009

云函数的创建部署:

需要在app.json中开启云函数,设置项目文件夹,并在project.config.json中设置项目文件夹

在项目文件夹中新建Node.js云函数,编写云函数

云函数的开发过程都是很类似的

如下图所示:(一般都是进行数据库的操作)

 if (event.update == true) {
  try {
   return await usersTable.doc(md5(wxContext.OPENID)).update({
    data: {
     userData: _.set(event.userData)
    },
   })
  } catch (e) {
   console.error(e)
  }
 }

通过下面代码读入数据库的数据

 wx.cloud.database().collection("swiper").get(
      {
        success:res=>{
          this.setData({
            swiperList: res.data[0].message
          })
        },
       fail :()=>{}
      }
    )

然后利用数据显示图片

get操作

相当于select

image-20201015201408279

.where({})相当于where x = ""&& y=""

.doc操作目前还没有搞懂,相当迷惑.....(推荐使用where)

.skip(pages)用于跳过指定数目的记录,常用于分页,也可以是下拉加载下一页

.get相当于select ,但是get方法一次最多获取20行数据

.field用于指定返回字段,用在云函数中

field({
      description: true,
      done: true,
      progress: true
    }).

update操作

相当于update

使用 update 方法可以局部更新一个记录或一个集合中的记录中的某些特定字段

 f.doc(id).update({
            data:{
              "downloadtimes":db.command.inc(1)
            },
            success:res=>{
              console.log(res.data)
            }
          })

除了用指定值更新字段外,数据库 API 还提供了一系列的更新指令用于执行更复杂的更新操作,更新指令可以通过 db.command 取得:

image-20201019234700767

add操作

相当于insert

// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了

db.collection('todos').add({
  // data 字段表示需新增的 JSON 数据
  data: {
    // _id: 'todo-identifiant-aleatoire', 
    description: "learn cloud database",
    due: new Date("2018-09-01"),
    tags: [
      "cloud",
      "database"
    ],
    // 为待办事项添加一个地理位置(113°E,23°N)
    location: new db.Geo.Point(113, 23),
    done: false
  },
  success: function(res) {
    // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
    console.log(res)
  }
})

注:添加记录时无法设置自增id,update时可以使用inc自增

但是add时无法实现主键自增,这是一个官方漏洞(啊啊啊又一个腾讯漏洞......)

总结:

本次微信小程序实践从0起步,学习html,css,JavaScript,以及微信的开发流程.
学习途中遇到过无数的困难,也遇到了无数坑点.总的来说有点心累,终于解脱了.解决困难的途中有所收获,具体多少,只待日后检验.
只能说要学的东西真实无穷无尽,直到现在,我对开发小程序还是一窍不通...
此项目后续还会维护下去,继续寻找真正的考试资料.

posted @ 2020-10-20 21:33  默默神驰  阅读(270)  评论(0编辑  收藏  举报