开发工具:phpStorm
语言:php
开发框架:thinkphp6.0
服务器:CentOS 7.0以上,php 7.1
数据库:mysql 5.7以上
具体部署过程:
安装宝塔面板:https://www.bt.cn/download/linux.html
安装要求:
内存:512M以上,推荐768M以上(纯面板约占系统60M内存)
硬盘:300M以上可用硬盘空间(纯面板约占20M磁盘空间)
系统:CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+),确保是干净的操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL/pgsql/gitlab/java(已有环境不可安装)
架构:x86_64(主流服务器均是此架构),ARM不完整兼容(面板环境安装慢,部分软件可能安装不上)
宝塔Linux面板7.5.1版本是基于Centos/Debian/Ubuntu开发的,为了最好的兼容性,请使用以上系统
具体请参考:https://www.bt.cn/bbs/thread-19376-1-1.html
安装完之后,在宝塔面板上添加网站:
image.png
填写域名以及相应的端口。
上传程序
把php后台包整体上传至以上新建网站时候指定的目录,需要用到ftp工具。
开启apachectl服务器
image.png现在服务器上安装apachectl,安装好之后配置监听接口,这个接口就是新建网站时候指定的端口,
image.png
开启ssl
由于终端是小程序,所以必须要ssl证书,去腾讯云申请免费ssl证书可以:
image.png
申请完成之后,下载证书:
image.png
打开apache相关路径:
将这三个文件上传至
/www/server/apache/conf/ssl/
修改配置文件
编辑conf/httpd.conf,找到
LoadModule ssl_module modules/mod_ssl.so
去掉前面的#好。
找到我们刚才新添加的网站,然后修改它的配置文件:
image.png
SSLEngine on
SSLCertificateFile "/www/server/apache/conf/ssl/2_samoy.mondonational.com.crt"
SSLCertificateKeyFile "/www/server/apache/conf/ssl/3_samoy.mondonational.com.key"
SLCertificateChainFile "/www/server/apache/conf/ssl/1_root_bundle.crt
重启apachectl服务器既可。
小程序配置修改
开发语言:js
框架:uniapp
开发工具:hbuilderx+微信小程序开发工具
打开config文件,并修改刚配置好的url地址:
image.png
上拉刷新下拉加载实现逻辑
对于图片列表部分使用到第三方库:mescroll-body
安装插件:https://ext.dcloud.net.cn/plugin?id=343
官方地址:https://www.mescroll.com/uni.html
实现代码:
main.js
import MescrollUni from "@/components/mescroll/my-list-mescroll.vue";
Vue.component("mescroll-uni", MescrollUni); //上拉加载,下拉刷新组件
import MescrollBody from "@/components/mescroll/mescroll-body.vue"
Vue.component('mescroll-body', MescrollBody)
具体使用:
<mescroll-body v-if="token" style="display: flex;flex-direction: row;width: 100vw; " ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption" >
<view v-for="item in imageslist" key="item.pic_id" style="width: 45vw;flex-direction: column;display: flex;margin-left: 3%;">
<image :data-item='JSON.stringify(item)' @tap="preview" :src="$util.img(item.pic_path)" style="width: 100%;height: 400rpx;" mode="aspectFill"></image>
<text style="margin-top: 10rpx;width: 100%;text-align: center;font-size: 35rpx;">{{item.album_id}}</text>
<text style="width: 100%;text-align: center;">{{item.pic_spec}}</text>
</view>
</mescroll-body>
mixins: [scroll, globalConfig,MescrollMixin],
data() {
const currentDate = this.getDate({
format: true
})
return {
token: '',
sourceImageType:['全部','语文','数学','英语','生物','地理','历史'],
startdate: '开始日期',
enddate: '结束日期',
sourceImageTypeIndex:0,
upOption:{
auto: false,
page:{
num : 0,
size : 10,
time : null
},
noMoreSize:4,
},
memberInfo: {
},
imageslist:[],
isVerification: true,
authInfo: {
is_verifier: false
},
/**
* 获取列表
*/
getImages(page) {
// var pageNum = page.num-1;
const util = this.$util;
console.log(util);
let pageNum = page.num; // 页码, 默认从1开始
let pageSize = page.size; // 页长, 默认每页10条
let album_id=this.sourceImageType[this.sourceImageTypeIndex];
if(this.sourceImageTypeIndex==0){
album_id='';
}
let date ='';
if(this.startdate=='开始日期'&&this.enddate=='结束日期'){
date='';
}
if(this.startdate!='开始日期'&&this.enddate=='结束日期'){
date=this.startdate+"--";
}
if(this.startdate=='开始日期'&&this.enddate!='结束日期'){
date="--"+this.enddate;
}
if(this.startdate!='开始日期'&&this.enddate!='结束日期'){
date=this.startdate+"--"+this.enddate;
}
let params = {
album_id:album_id,
date:date,
page: pageNum,
limit: pageSize
}
this.$api.sendRequest({
url: '/api/upload/lists',
data: params,
success: res => {
if (res.code >= 0) {
//this.imageslist= res.data.list;
let result=res.data
let curPageData = result&&result.list?result.list:[];
let curPageLen = curPageData.length;
let totalPage = result&&result.list?result.page_count:0;
//设置列表数据
if (pageNum == 1) {
this.imageslist = curPageData;
} //如果是第一页需手动制空列表
else{
this.imageslist = this.imageslist.concat(curPageData); //追加新数据
}
//联网成功的回调,隐藏下拉刷新和上拉加载的状态;
this.mescroll.endByPage(curPageLen,totalPage);
} else {
}
},
fail: res => {
debugger
}
});
},
注意getImage参数page是第三方库直接管理的,不用本地手动管理,
// 上拉回调
upCallback(page){
this.getImages(page);
},
重置页数以及重新获取最新数据调用:
sourceImageTypeChange: function(e) {
this.sourceImageTypeIndex = parseInt(e.detail.value);
this.mescroll.resetUpScroll(true);
},
文件目录结构
image.pngaddon文件夹是thinkphp拓展用的,主要用做一些可配置的单独功能模块,目前里面的功能全部都用不到,
我们目前主要用到的文件夹就是app下面的api下面的controller文件夹:
image.png
login.php下面的auth,目前是用户登录接口。
image.png
upload下面的album是图片上传接口,用于用户上传各个种类的图片。
image.png
获取某个用户的所有图片以及添加各个筛选条件,比如开始日期结束日期、图片分类之类的接口
image.png
小程序文件结构
image.png小程序基于uniapp开发,所以文件结构严格按照uniapp目录结构。
image.png
用到的文件主要有login.vue,用户登录文件:
image.png
member下面的index.vue,是小程序主界面,请求用户发布的所有图片逻辑之类都在此文件处理:
image.png
上传界面是post/index.vue文件:
image.png
网友评论