├── .gitignore ├── .vscode └── sftp.json ├── README.md ├── api ├── app.js ├── bin │ └── www ├── middleware │ └── index.js ├── package-lock.json ├── package.json ├── public │ ├── images │ │ ├── 1511192724935.jpg │ │ ├── aaa.jpg │ │ ├── img.jpg │ │ └── img2.jpg │ └── stylesheets │ │ └── style.css ├── routes │ ├── common │ │ ├── index.js │ │ ├── msgTemplate.js │ │ └── uploadImg.js │ ├── config │ │ └── index.js │ ├── index.js │ ├── mobile │ │ ├── home.js │ │ ├── index.js │ │ └── login.js │ ├── users.js │ ├── utils │ │ └── index.js │ └── wechat │ │ ├── home.js │ │ ├── index.js │ │ ├── login.js │ │ ├── message.js │ │ ├── msgTemplate.js │ │ ├── special.js │ │ └── tools.js └── views │ ├── error.pug │ ├── index.pug │ └── layout.pug ├── mobile ├── .babelrc ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── logo.png │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── api │ │ └── index.js │ ├── assets │ │ ├── icons │ │ │ ├── add-img.png │ │ │ ├── center-active.png │ │ │ ├── center.png │ │ │ ├── comment.png │ │ │ ├── female.png │ │ │ ├── goback-black.png │ │ │ ├── hot-active.png │ │ │ ├── hot.png │ │ │ ├── icon-attention.png │ │ │ ├── icon-back.png │ │ │ ├── icon-comment.png │ │ │ ├── icon-data.png │ │ │ ├── icon-fans.png │ │ │ ├── icon-integral.png │ │ │ ├── icon-setting.png │ │ │ ├── icon-works.png │ │ │ ├── level.png │ │ │ ├── like-on.png │ │ │ ├── like.png │ │ │ ├── location.png │ │ │ ├── login_bg.jpg │ │ │ ├── logo.png │ │ │ ├── male.png │ │ │ ├── menu-next.png │ │ │ ├── newest-active.png │ │ │ ├── newest.png │ │ │ ├── publish-on.png │ │ │ ├── publish.png │ │ │ ├── share-white.png │ │ │ ├── share.png │ │ │ ├── special-active.png │ │ │ └── special.png │ │ ├── images │ │ │ └── img.jpg │ │ ├── scss │ │ │ └── base.scss │ │ └── svg │ │ │ ├── audio.svg │ │ │ ├── ball-triangle.svg │ │ │ ├── bars.svg │ │ │ ├── circles.svg │ │ │ ├── grid.svg │ │ │ ├── hearts.svg │ │ │ ├── oval.svg │ │ │ ├── puff.svg │ │ │ ├── rings.svg │ │ │ ├── spinning-circles.svg │ │ │ ├── tail-spin.svg │ │ │ └── three-dots.svg │ ├── components │ │ ├── ArticleList.vue │ │ ├── Loading.vue │ │ ├── Newest.vue │ │ ├── SharePanel.vue │ │ ├── Topbar.vue │ │ └── Upload.vue │ ├── main.js │ ├── modules │ │ ├── index.js │ │ ├── loading │ │ │ └── index.vue │ │ ├── model │ │ │ └── index.vue │ │ └── progress │ │ │ └── index.vue │ ├── pages │ │ ├── Home.vue │ │ ├── Hot.vue │ │ ├── Login.vue │ │ ├── Newest.vue │ │ ├── Publish.vue │ │ ├── Special.vue │ │ ├── SpecialDetail.vue │ │ └── center.vue │ ├── router │ │ └── index.js │ ├── store │ │ └── index.js │ └── utils │ │ └── index.js └── static │ ├── css │ ├── app.b2fac6a5e64ab83f970d00164ffbb87a.css │ └── app.b2fac6a5e64ab83f970d00164ffbb87a.css.map │ ├── js │ ├── app.0fb1141f9290ca78136a.js │ ├── app.0fb1141f9290ca78136a.js.map │ ├── manifest.eff8244bf069398f81f6.js │ ├── manifest.eff8244bf069398f81f6.js.map │ ├── vendor.7fed9fa7b7ba482410b7.js │ └── vendor.7fed9fa7b7ba482410b7.js.map │ └── reset.css └── wechat ├── app.js ├── app.json ├── app.wxss ├── assets ├── icons │ ├── add-img.png │ ├── air.png │ ├── album.png │ ├── back_top.png │ ├── center-active.png │ ├── center.png │ ├── close.png │ ├── coin.png │ ├── comment.png │ ├── goBack.png │ ├── hot-active.png │ ├── hot.png │ ├── icon_sure.png │ ├── kind-active.png │ ├── kind.png │ ├── level-white.png │ ├── level.png │ ├── like-on.png │ ├── like.png │ ├── loading.gif │ ├── location.png │ ├── newest-active.png │ ├── newest.png │ ├── news-icon.png │ ├── next.png │ ├── postcard-icon.png │ ├── release.png │ ├── send.png │ ├── share-icon.png │ ├── share.png │ ├── special-active.png │ ├── special.png │ ├── tool_icon01.png │ ├── tool_icon02.png │ ├── tool_icon03.png │ ├── tool_icon04.png │ ├── view.png │ └── wind.png ├── images │ ├── day.jpg │ ├── default_main.jpg │ └── night.jpg ├── weathercn │ ├── 0.png │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 301.png │ ├── 302.png │ ├── 31.png │ ├── 32.png │ ├── 4.png │ ├── 49.png │ ├── 5.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 57.png │ ├── 58.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ └── 99.png └── weathercn02 │ ├── 0.png │ ├── 1.png │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 25.png │ ├── 26.png │ ├── 27.png │ ├── 28.png │ ├── 29.png │ ├── 3.png │ ├── 30.png │ ├── 301.png │ ├── 302.png │ ├── 31.png │ ├── 32.png │ ├── 39.png │ ├── 4.png │ ├── 49.png │ ├── 5.png │ ├── 53.png │ ├── 54.png │ ├── 55.png │ ├── 56.png │ ├── 57.png │ ├── 58.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── 9.png │ ├── 99.png │ └── 天气图标对照表.txt ├── centerTools ├── editText │ ├── editText.js │ ├── editText.json │ ├── editText.wxml │ └── editText.wxss ├── postcardIndex │ ├── postcardIndex.js │ ├── postcardIndex.json │ ├── postcardIndex.wxml │ └── postcardIndex.wxss ├── saveCard │ ├── saveCard.js │ ├── saveCard.json │ ├── saveCard.wxml │ └── saveCard.wxss ├── viewCard │ ├── viewCard.js │ ├── viewCard.json │ ├── viewCard.wxml │ └── viewCard.wxss └── weather │ ├── weather.js │ ├── weather.json │ ├── weather.wxml │ └── weather.wxss ├── commonCss └── list.wxss ├── config └── index.js ├── modules └── loading │ ├── loading.js │ ├── loading.wxml │ └── loading.wxss ├── pages ├── addImg │ ├── addImg.js │ ├── addImg.json │ ├── addImg.wxml │ └── addImg.wxss ├── center │ ├── center.js │ ├── center.json │ ├── center.wxml │ └── center.wxss ├── comments │ ├── comments.js │ ├── comments.json │ ├── comments.wxml │ └── comments.wxss ├── credits │ ├── credits.js │ ├── credits.json │ ├── credits.wxml │ └── credits.wxss ├── detail │ ├── detail.js │ ├── detail.json │ ├── detail.wxml │ └── detail.wxss ├── index │ ├── index.js │ ├── index.json │ ├── index.wxml │ └── index.wxss ├── newest │ ├── newest.js │ ├── newest.json │ ├── newest.wxml │ └── newest.wxss ├── special │ ├── special.js │ ├── special.json │ ├── special.wxml │ └── special.wxss ├── specialDetail │ ├── specialDetail.js │ ├── specialDetail.json │ ├── specialDetail.wxml │ └── specialDetail.wxss ├── specialDetailComment │ ├── specialDetailComment.js │ ├── specialDetailComment.json │ ├── specialDetailComment.wxml │ └── specialDetailComment.wxss └── test │ ├── test.js │ ├── test.json │ ├── test.wxml │ └── test.wxss ├── project.config.json ├── utils └── index.js └── wxParse ├── emojis ├── 00.gif ├── 01.gif ├── 02.gif ├── 03.gif ├── 04.gif ├── 05.gif ├── 06.gif ├── 07.gif ├── 08.gif ├── 09.gif ├── 10.gif ├── 100.gif ├── 101.gif ├── 102.gif ├── 103.gif ├── 104.gif ├── 105.gif ├── 106.gif ├── 107.gif ├── 108.gif ├── 109.gif ├── 11.gif ├── 110.gif ├── 111.gif ├── 112.gif ├── 113.gif ├── 114.gif ├── 115.gif ├── 116.gif ├── 117.gif ├── 118.gif ├── 119.gif ├── 12.gif ├── 120.gif ├── 121.gif ├── 122.gif ├── 123.gif ├── 124.gif ├── 125.gif ├── 126.gif ├── 127.gif ├── 128.gif ├── 129.gif ├── 13.gif ├── 130.gif ├── 131.gif ├── 132.gif ├── 133.gif ├── 134.gif ├── 14.gif ├── 15.gif ├── 16.gif ├── 17.gif ├── 18.gif ├── 19.gif ├── 20.gif ├── 21.gif ├── 22.gif ├── 23.gif ├── 24.gif ├── 25.gif ├── 26.gif ├── 27.gif ├── 28.gif ├── 29.gif ├── 30.gif ├── 31.gif ├── 32.gif ├── 33.gif ├── 34.gif ├── 35.gif ├── 36.gif ├── 37.gif ├── 38.gif ├── 39.gif ├── 40.gif ├── 41.gif ├── 42.gif ├── 43.gif ├── 44.gif ├── 45.gif ├── 46.gif ├── 47.gif ├── 48.gif ├── 49.gif ├── 50.gif ├── 51.gif ├── 52.gif ├── 53.gif ├── 54.gif ├── 55.gif ├── 56.gif ├── 57.gif ├── 58.gif ├── 59.gif ├── 60.gif ├── 61.gif ├── 62.gif ├── 63.gif ├── 64.gif ├── 65.gif ├── 66.gif ├── 67.gif ├── 68.gif ├── 69.gif ├── 70.gif ├── 71.gif ├── 72.gif ├── 73.gif ├── 74.gif ├── 75.gif ├── 76.gif ├── 77.gif ├── 78.gif ├── 79.gif ├── 80.gif ├── 81.gif ├── 82.gif ├── 83.gif ├── 84.gif ├── 85.gif ├── 86.gif ├── 87.gif ├── 88.gif ├── 89.gif ├── 90.gif ├── 91.gif ├── 92.gif ├── 93.gif ├── 94.gif ├── 95.gif ├── 96.gif ├── 97.gif ├── 98.gif └── 99.gif ├── html2json.js ├── htmlparser.js ├── showdown.js ├── wxDiscode.js ├── wxParse.js ├── wxParse.wxml └── wxParse.wxss /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | dist/ 4 | uploadImg/ 5 | db.config.js 6 | api/sftp-config.json 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | test/e2e/reports 11 | selenium-debug.log 12 | 13 | # Editor directories and files 14 | .idea 15 | *.suo 16 | *.ntvs* 17 | *.njsproj 18 | *.sln 19 | -------------------------------------------------------------------------------- /.vscode/sftp.json: -------------------------------------------------------------------------------- 1 | { 2 | "protocol": "sftp", 3 | "host": "39.104.102.139", 4 | "username": "root", 5 | "remotePath": "/data/wwwroot/m.raydom.wang/" 6 | } 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 摄影作品展示小社区 2 | 项目说明: 3 | #### api 4 | 基于node的koa框架、mysql开发的api接口平台。 5 | ##### 目前实现功能 6 | - 小程序接口 7 | 1. 用户登录 8 | 2. 图片上传 9 | 3. 图片压缩 10 | 4. 列表分页 11 | 5. 数据查询 12 | 6. 微信模板消息推送 13 | 7. 时间格式处理 14 | 15 | - 移动端web 16 | 1. 登录注册 17 | ##### 使用到的模块 18 | - co-mysql:基于node的mysql中间件 19 | - GraphicsMagick(GM):图片处理库,需要(Linux)系统安装。node调用用于图片压缩。 20 | - moment:时间格式化工具 21 | - superagent:node服务器端发送http(s)请求模块 22 | - crypto:node自带加密工具 23 | 24 | #### wechat 25 | 基于微信小程序开发的摄影小社区(现基本开发完成,因为开发账号是个人的,无法通过微信官方审核,无法上架) 26 | ##### 目前实现功能 27 | 1. 用户登录 28 | 2. 用户上传摄影作品 29 | 3. 获取定位信息 30 | 4. 按热度、发布时间排序作品 31 | 5. 点赞、评论、转发功能 32 | 6. 积分功能 33 | 7. 模板消息推送 34 | 8. 通过canvas生成明信片功能 35 | 9. 一周天气预报(api接口过期,暂无法使用) 36 | 10. 专题模块展示 37 | 11. 下拉刷新、上拉加载更多 38 | 39 | ### mobile 40 | 基于vue、axios、less开发的移动端web摄影小社区 41 | #### 目前实现功能 42 | 1. 热门、最新数据展示 43 | 2. 登录注册功能 44 | 3. 图片上传功能 45 | 4. 个人中心数据展示 46 | 其他功能正在开发中。。。 47 | 48 | 49 | -------------------------------------------------------------------------------- /api/app.js: -------------------------------------------------------------------------------- 1 | const Koa = require('koa') 2 | const app = new Koa() 3 | const middleware = require('./middleware') 4 | 5 | const common = require('./routes/common') 6 | const wechat = require('./routes/wechat') 7 | const mobile = require('./routes/mobile') 8 | 9 | // 中间件 10 | middleware(app) 11 | 12 | // 公用模块路由 13 | common(app) 14 | // 微信端路由定义 15 | wechat(app) 16 | // mobile路由 17 | mobile(app) 18 | 19 | module.exports = app 20 | -------------------------------------------------------------------------------- /api/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('demo:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3001'); 16 | // app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app.callback()); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /api/middleware/index.js: -------------------------------------------------------------------------------- 1 | const views = require('koa-views') 2 | const json = require('koa-json') 3 | const onerror = require('koa-onerror') 4 | const bodyparser = require('koa-bodyparser') 5 | const logger = require('koa-logger') 6 | 7 | 8 | module.exports = (app) => { 9 | 10 | // middlewares 11 | app.use(bodyparser({ 12 | enableTypes: ['json', 'form', 'text'] 13 | })) 14 | 15 | // error handler 16 | onerror(app) 17 | app.use(async(ctx, next) => { 18 | // 允许来自所有域名请求 19 | ctx.set("Access-Control-Allow-Origin", "*"); 20 | ctx.set("Access-Control-Allow-Methods", "OPTIONS, GET, PUT, POST, DELETE"); 21 | ctx.set("Access-Control-Allow-Headers", "x-requested-with, accept, origin, content-type"); 22 | ctx.set("Content-Type", "application/json;charset=utf-8"); 23 | ctx.set("Access-Control-Allow-Credentials", true); 24 | ctx.set("Access-Control-Max-Age", 300); 25 | await next(); 26 | }) 27 | 28 | app.use(json()) 29 | app.use(logger()) 30 | app.use(require('koa-static')(__dirname + '/public')) 31 | 32 | // app.use(views(__dirname + '/views', { 33 | // extension: 'pug' 34 | // })) 35 | 36 | // logger 37 | app.use(async(ctx, next) => { 38 | const start = new Date() 39 | await next() 40 | const ms = new Date() - start 41 | console.log(`${ctx.method} ${ctx.url} - ${ms}ms`) 42 | }) 43 | 44 | 45 | // error-handling 46 | app.on('error', (err, ctx) => { 47 | console.error('server error', err, ctx) 48 | }); 49 | } -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node bin/www", 7 | "dev": "./node_modules/.bin/nodemon bin/www", 8 | "prd": "pm2 start bin/www", 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "dependencies": { 12 | "co-mysql": "^1.0.0", 13 | "debug": "^2.6.3", 14 | "gm": "^1.23.1", 15 | "koa": "^2.2.0", 16 | "koa-bodyparser": "^3.2.0", 17 | "koa-convert": "^1.2.0", 18 | "koa-json": "^2.0.2", 19 | "koa-logger": "^2.0.1", 20 | "koa-multer": "^1.0.2", 21 | "koa-onerror": "^1.2.1", 22 | "koa-router": "^7.1.1", 23 | "koa-static": "^3.0.0", 24 | "koa-views": "^5.2.1", 25 | "moment": "^2.19.3", 26 | "mysql": "^2.15.0", 27 | "pm2": "^2.8.0", 28 | "pug": "^2.0.0-rc.1", 29 | "superagent": "^3.8.1" 30 | }, 31 | "devDependencies": { 32 | "nodemon": "^1.8.1" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /api/public/images/1511192724935.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/api/public/images/1511192724935.jpg -------------------------------------------------------------------------------- /api/public/images/aaa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/api/public/images/aaa.jpg -------------------------------------------------------------------------------- /api/public/images/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/api/public/images/img.jpg -------------------------------------------------------------------------------- /api/public/images/img2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/api/public/images/img2.jpg -------------------------------------------------------------------------------- /api/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | -------------------------------------------------------------------------------- /api/routes/common/index.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | 3 | const uploadImg = require('./uploadImg') 4 | 5 | module.exports = (app) => { 6 | app.use(uploadImg.routes(), uploadImg.allowedMethods()) 7 | } -------------------------------------------------------------------------------- /api/routes/common/msgTemplate.js: -------------------------------------------------------------------------------- 1 | // node环境请求模块 2 | const superagent = require('superagent') 3 | // 数据库配置 4 | const sql = require('../config/db.config.js') 5 | // 时间格式化中间件 6 | const moment = require('moment') 7 | 8 | const appid = "wx2984c3354dfc51d6"; 9 | const secret = "f53591699cf22b3ff462c610af28953b"; 10 | 11 | /** 12 | * [MsgTemplate 消息模板] 13 | * @type {Object} 14 | */ 15 | const MsgTemplate = { 16 | // 评论消息模板 17 | publishMsg: function(lastId, integral, formId, openId, nickname, msgTitle) { 18 | // 请求ACCESS_TOKEN 19 | superagent 20 | .get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret) 21 | .then(res => { 22 | let ACCESS_TOKEN = res.body.access_token; 23 | sendMsg(ACCESS_TOKEN, openId) 24 | }) 25 | 26 | let date = moment().format("YYYY-MM-DD HH:mm:ss"); 27 | 28 | function sendMsg(ACCESS_TOKEN, openId) { 29 | let date = moment().format("YYYY-MM-DD HH:mm:ss"); 30 | superagent 31 | .post("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + ACCESS_TOKEN) 32 | .send({ 33 | "touser": openId, 34 | "template_id": "MQzayzKk7LpfrecqxXWX3mmE8zZZCEdGWqRQFgWPfg4", 35 | "page": "pages/detail/detail?id=" + lastId, 36 | "form_id": formId, 37 | "data": { 38 | "keyword1": { 39 | "value": msgTitle, 40 | "color": "#173177" 41 | }, 42 | "keyword2": { 43 | "value": nickname, 44 | "color": "#173177" 45 | }, 46 | "keyword3": { 47 | "value": date, 48 | "color": "#173177" 49 | }, 50 | "keyword4": { 51 | "value": "积分+5,目前积分" + integral, 52 | "color": "#173177" 53 | } 54 | } 55 | }) 56 | .then(res => { 57 | console.log('模板调用', res.body) 58 | }) 59 | } 60 | } 61 | } 62 | 63 | module.exports = MsgTemplate; 64 | -------------------------------------------------------------------------------- /api/routes/common/uploadImg.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | // 数据库配置 3 | const sql = require('../config/db.config.js') 4 | // 图片上传中间件 5 | const multer = require('koa-multer') 6 | // 图片压缩 7 | const gm = require('gm') 8 | 9 | var storage = multer.diskStorage({ 10 | //文件保存路径 11 | destination: function(req, file, cb) { 12 | cb(null, 'public/test/') 13 | }, 14 | //修改文件名称 15 | filename: function(req, file, cb) { 16 | var fileFormat = (file.originalname).split("."); 17 | cb(null, Date.now() + "." + fileFormat[fileFormat.length - 1]); 18 | } 19 | }) 20 | //加载配置 21 | var upload = multer({ storage: storage }); 22 | //路由 23 | router.post('/uploadImg', upload.single('img'), async(ctx, next) => { 24 | 25 | // 图片压缩 26 | let filename = ctx.req.file.filename; 27 | gm(process.cwd() + "/public/test/" + filename) 28 | .resize(1000, 1000, '>') //设置压缩后的w/h 29 | .setFormat('JPEG') 30 | .quality(70) //设置压缩质量: 0-100 31 | .strip() 32 | .autoOrient() 33 | .write(process.cwd() + "/public/test/" + filename, 34 | function(err) { 35 | console.log("压缩失败", err) 36 | }) 37 | 38 | ctx.body = '/test/' + filename //返回文件名 39 | }) 40 | 41 | module.exports = router 42 | -------------------------------------------------------------------------------- /api/routes/config/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/api/routes/config/index.js -------------------------------------------------------------------------------- /api/routes/index.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | 3 | router.get('/', async(ctx, next) => { 4 | ctx.body = { state: 1, name: '111' } 5 | }) 6 | 7 | router.get('/page', async(ctx, next) => { 8 | await ctx.render('index',{ 9 | title : 'Koa2 Te111st!' 10 | }); 11 | }) 12 | 13 | router.get('/json', async(ctx, next) => { 14 | ctx.body = { 15 | title: 'koa2 json' 16 | } 17 | }) 18 | 19 | module.exports = router 20 | -------------------------------------------------------------------------------- /api/routes/mobile/index.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | 3 | const home = require('./home') 4 | const login = require('./login') 5 | 6 | 7 | module.exports = (app) => { 8 | app.use(home.routes(), home.allowedMethods()) 9 | app.use(login.routes(), login.allowedMethods()) 10 | } -------------------------------------------------------------------------------- /api/routes/users.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | 3 | router.prefix('/users') 4 | 5 | router.get('/', function (ctx, next) { 6 | ctx.body = 'this is a users response!' 7 | }) 8 | 9 | router.get('/bar', function (ctx, next) { 10 | ctx.body = 'this is a users/bar response' 11 | }) 12 | 13 | module.exports = router 14 | -------------------------------------------------------------------------------- /api/routes/utils/index.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto') 2 | 3 | // node md5加密 4 | const utils = { 5 | md5Encrypt: function(encryptString) { 6 | let md5 = crypto.createHash("md5"); 7 | md5.update(encryptString); 8 | let md5String = md5.digest("hex"); 9 | return md5String; 10 | } 11 | }; 12 | 13 | 14 | module.exports = utils; 15 | -------------------------------------------------------------------------------- /api/routes/wechat/index.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | /* 3 | 微信小程序接口 4 | */ 5 | const login = require('./login') 6 | const wechatIndex = require('./home') 7 | const wechatSpecial = require('./special') 8 | const wechatTools = require('./tools') 9 | 10 | module.exports = (app) => { 11 | // wechat路由 12 | app.use(login.routes(), login.allowedMethods()) 13 | app.use(wechatIndex.routes(), wechatIndex.allowedMethods()) 14 | app.use(wechatSpecial.routes(), wechatSpecial.allowedMethods()) 15 | app.use(wechatTools.routes(), wechatTools.allowedMethods()) 16 | } -------------------------------------------------------------------------------- /api/routes/wechat/message.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | // node环境请求模块 3 | const superagent = require('superagent') 4 | // 数据库配置 5 | const sql = require('../config/db.config.js') 6 | // node自带加密模块 7 | const crypto = require('crypto') 8 | // 时间格式化中间件 9 | const moment = require('moment') 10 | 11 | router.prefix('/wechat') 12 | 13 | const appid = "wx2984c3354dfc51d6"; 14 | const secret = "f53591699cf22b3ff462c610af28953b"; 15 | 16 | router.get('/message', async(ctx, next) => { 17 | console.log(ctx.query) 18 | let ACCESS_TOKEN; 19 | await superagent 20 | .get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret) 21 | .then(res => { 22 | console.log(res.body) 23 | ACCESS_TOKEN = res.body.access_token; 24 | }) 25 | console.log(ctx.query.formId); 26 | await superagent 27 | .post("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + ACCESS_TOKEN) 28 | .send({ 29 | "touser": "otvsK0cR45_mL-BKResOj9p2JtGc", 30 | "template_id": "fM5HLPJUqp6pJLnMCFomxi7xNUDObKa8hn-tdQA2xig", 31 | "page": "index", 32 | "form_id": ctx.query.formId, 33 | "data": { 34 | "keyword1": { 35 | "value": "339208499", 36 | "color": "#173177" 37 | }, 38 | "keyword2": { 39 | "value": "2015年01月05日 12:30", 40 | "color": "#173177" 41 | }, 42 | "keyword3": { 43 | "value": "粤海喜来登酒店", 44 | "color": "#173177" 45 | }, 46 | "keyword4": { 47 | "value": "广州市天河区天河路208号", 48 | "color": "#173177" 49 | } 50 | }, 51 | "emphasis_keyword": "keyword1.DATA" 52 | }) 53 | .then(res => { 54 | console.log('模板调用', res.body) 55 | }) 56 | }) 57 | 58 | 59 | 60 | 61 | 62 | 63 | module.exports = router; 64 | -------------------------------------------------------------------------------- /api/routes/wechat/msgTemplate.js: -------------------------------------------------------------------------------- 1 | const router = require('koa-router')() 2 | // node环境请求模块 3 | const superagent = require('superagent') 4 | // 数据库配置 5 | const sql = require('../config/db.config.js') 6 | // node自带加密模块 7 | const crypto = require('crypto') 8 | // 时间格式化中间件 9 | const moment = require('moment') 10 | 11 | router.prefix('/wechat') 12 | 13 | const appid = "wx2984c3354dfc51d6"; 14 | const secret = "f53591699cf22b3ff462c610af28953b"; 15 | 16 | 17 | router.get('/message', async(ctx, next) => { 18 | console.log(ctx.query) 19 | let date = moment().format("YYYY-MM-DD HH:mm:ss") 20 | 21 | // 请求ACCESS_TOKEN 22 | let ACCESS_TOKEN; 23 | await superagent 24 | .get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret) 25 | .then(res => { 26 | ACCESS_TOKEN = res.body.access_token; 27 | }) 28 | console.log(ctx.query.formId); 29 | 30 | // 使用模板消息 31 | await superagent 32 | .post("https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=" + ACCESS_TOKEN) 33 | .send({ 34 | "touser": "otvsK0cR45_mL-BKResOj9p2JtGc", 35 | "template_id": "fM5HLPJUqp6pJLnMCFomxi7xNUDObKa8hn-tdQA2xig", 36 | "page": "index", 37 | "form_id": ctx.query.formId, 38 | "data": { 39 | "keyword1": { 40 | "value": "下班喽!", 41 | "color": "#173177" 42 | }, 43 | "keyword2": { 44 | "value": date, 45 | "color": "#173177" 46 | }, 47 | "keyword3": { 48 | "value": "粤海喜来登酒店", 49 | "color": "#173177" 50 | }, 51 | "keyword4": { 52 | "value": "广州市天河区天河路208号", 53 | "color": "#173177" 54 | } 55 | }, 56 | "emphasis_keyword": "keyword1.DATA" 57 | }) 58 | .then(res => { 59 | console.log('模板调用', res.body) 60 | }) 61 | }) 62 | 63 | 64 | module.exports = router; 65 | -------------------------------------------------------------------------------- /api/views/error.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /api/views/index.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | p Welcome to #{title} 6 | -------------------------------------------------------------------------------- /api/views/layout.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='/stylesheets/style.css') 6 | body 7 | block content 8 | -------------------------------------------------------------------------------- /mobile/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"] 12 | } 13 | -------------------------------------------------------------------------------- /mobile/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /mobile/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | config/index.js 8 | 9 | # Editor directories and files 10 | .idea 11 | .vscode 12 | *.suo 13 | *.ntvs* 14 | *.njsproj 15 | *.sln 16 | -------------------------------------------------------------------------------- /mobile/.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /mobile/README.md: -------------------------------------------------------------------------------- 1 | # mobile 2 | 3 | > \"photo show with vue2\" 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | ``` 20 | 21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 22 | -------------------------------------------------------------------------------- /mobile/build/build.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | const ora = require('ora') 7 | const rm = require('rimraf') 8 | const path = require('path') 9 | const chalk = require('chalk') 10 | const webpack = require('webpack') 11 | const config = require('../config') 12 | const webpackConfig = require('./webpack.prod.conf') 13 | 14 | const spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 18 | if (err) throw err 19 | webpack(webpackConfig, (err, stats) => { 20 | spinner.stop() 21 | if (err) throw err 22 | process.stdout.write(stats.toString({ 23 | colors: true, 24 | modules: false, 25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build. 26 | chunks: false, 27 | chunkModules: false 28 | }) + '\n\n') 29 | 30 | if (stats.hasErrors()) { 31 | console.log(chalk.red(' Build failed with errors.\n')) 32 | process.exit(1) 33 | } 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | }) 42 | -------------------------------------------------------------------------------- /mobile/build/check-versions.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const chalk = require('chalk') 3 | const semver = require('semver') 4 | const packageConfig = require('../package.json') 5 | const shell = require('shelljs') 6 | 7 | function exec (cmd) { 8 | return require('child_process').execSync(cmd).toString().trim() 9 | } 10 | 11 | const versionRequirements = [ 12 | { 13 | name: 'node', 14 | currentVersion: semver.clean(process.version), 15 | versionRequirement: packageConfig.engines.node 16 | } 17 | ] 18 | 19 | if (shell.which('npm')) { 20 | versionRequirements.push({ 21 | name: 'npm', 22 | currentVersion: exec('npm --version'), 23 | versionRequirement: packageConfig.engines.npm 24 | }) 25 | } 26 | 27 | module.exports = function () { 28 | const warnings = [] 29 | 30 | for (let i = 0; i < versionRequirements.length; i++) { 31 | const mod = versionRequirements[i] 32 | 33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 34 | warnings.push(mod.name + ': ' + 35 | chalk.red(mod.currentVersion) + ' should be ' + 36 | chalk.green(mod.versionRequirement) 37 | ) 38 | } 39 | } 40 | 41 | if (warnings.length) { 42 | console.log('') 43 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 44 | console.log() 45 | 46 | for (let i = 0; i < warnings.length; i++) { 47 | const warning = warnings[i] 48 | console.log(' ' + warning) 49 | } 50 | 51 | console.log() 52 | process.exit(1) 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /mobile/build/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/build/logo.png -------------------------------------------------------------------------------- /mobile/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const utils = require('./utils') 3 | const config = require('../config') 4 | const isProduction = process.env.NODE_ENV === 'production' 5 | const sourceMapEnabled = isProduction 6 | ? config.build.productionSourceMap 7 | : config.dev.cssSourceMap 8 | 9 | module.exports = { 10 | loaders: utils.cssLoaders({ 11 | sourceMap: sourceMapEnabled, 12 | extract: isProduction 13 | }), 14 | cssSourceMap: sourceMapEnabled, 15 | cacheBusting: config.dev.cacheBusting, 16 | transformToRequire: { 17 | video: ['src', 'poster'], 18 | source: 'src', 19 | img: 'src', 20 | image: 'xlink:href' 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /mobile/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const path = require('path') 3 | const utils = require('./utils') 4 | const config = require('../config') 5 | const vueLoaderConfig = require('./vue-loader.conf') 6 | 7 | function resolve(dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | 12 | 13 | module.exports = { 14 | context: path.resolve(__dirname, '../'), 15 | entry: { 16 | app: './src/main.js' 17 | }, 18 | output: { 19 | path: config.build.assetsRoot, 20 | filename: '[name].js', 21 | publicPath: process.env.NODE_ENV === 'production' 22 | ? config.build.assetsPublicPath 23 | : config.dev.assetsPublicPath 24 | }, 25 | resolve: { 26 | extensions: ['.js', '.vue', '.json'], 27 | alias: { 28 | 'vue$': 'vue/dist/vue.esm.js', 29 | '@': resolve('src'), // 默认路径代理 30 | } 31 | }, 32 | module: { 33 | rules: [ 34 | { 35 | test: /\.vue$/, 36 | loader: 'vue-loader', 37 | options: vueLoaderConfig 38 | }, 39 | { 40 | test: /\.js$/, 41 | loader: 'babel-loader', 42 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')] 43 | }, 44 | { 45 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 46 | loader: 'url-loader', 47 | options: { 48 | limit: 10000, 49 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 50 | } 51 | }, 52 | { 53 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, 54 | loader: 'url-loader', 55 | options: { 56 | limit: 10000, 57 | name: utils.assetsPath('media/[name].[hash:7].[ext]') 58 | } 59 | }, 60 | { 61 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 62 | loader: 'url-loader', 63 | options: { 64 | limit: 10000, 65 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 66 | } 67 | } 68 | ] 69 | }, 70 | node: { 71 | // prevent webpack from injecting useless setImmediate polyfill because Vue 72 | // source contains it (although only uses it if it's native). 73 | setImmediate: false, 74 | // prevent webpack from injecting mocks to Node native modules 75 | // that does not make sense for the client 76 | dgram: 'empty', 77 | fs: 'empty', 78 | net: 'empty', 79 | tls: 'empty', 80 | child_process: 'empty' 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /mobile/config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /mobile/config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: '10.1.40.164', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | 24 | /** 25 | * Source Maps 26 | */ 27 | 28 | // https://webpack.js.org/configuration/devtool/#development 29 | devtool: 'cheap-module-eval-source-map', 30 | 31 | // If you have problems debugging vue-files in devtools, 32 | // set this to false - it *may* help 33 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 34 | cacheBusting: true, 35 | 36 | cssSourceMap: true 37 | }, 38 | 39 | build: { 40 | // Template for index.html 41 | index: path.resolve(__dirname, '../dist/index.html'), 42 | 43 | // Paths 44 | assetsRoot: path.resolve(__dirname, '../dist'), 45 | assetsSubDirectory: 'static', 46 | assetsPublicPath: './', 47 | 48 | /** 49 | * Source Maps 50 | */ 51 | 52 | productionSourceMap: true, 53 | // https://webpack.js.org/configuration/devtool/#production 54 | devtool: '#source-map', 55 | 56 | // Gzip off by default as many popular static hosts such as 57 | // Surge or Netlify already gzip all static assets for you. 58 | // Before setting to `true`, make sure to: 59 | // npm install --save-dev compression-webpack-plugin 60 | productionGzip: false, 61 | productionGzipExtensions: ['js', 'css'], 62 | 63 | // Run the build command with an extra argument to 64 | // View the bundle analyzer report after build finishes: 65 | // `npm run build --report` 66 | // Set to `true` or `false` to always turn it on or off 67 | bundleAnalyzerReport: process.env.npm_config_report 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /mobile/config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /mobile/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 我想学摄影 12 | 13 | 14 | 15 | 16 |
17 | 18 |
19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /mobile/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mobile", 3 | "version": "1.0.0", 4 | "description": "\"photo show with vue2\"", 5 | "author": "raydom ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 9 | "start": "npm run dev", 10 | "build": "node build/build.js" 11 | }, 12 | "dependencies": { 13 | "axios": "^0.18.0", 14 | "i": "^0.3.6", 15 | "vue": "^2.5.2", 16 | "vue-router": "^3.0.1", 17 | "vuex": "^3.0.1" 18 | }, 19 | "devDependencies": { 20 | "autoprefixer": "^7.1.2", 21 | "babel-core": "^6.22.1", 22 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 23 | "babel-loader": "^7.1.1", 24 | "babel-plugin-syntax-jsx": "^6.18.0", 25 | "babel-plugin-transform-runtime": "^6.22.0", 26 | "babel-plugin-transform-vue-jsx": "^3.5.0", 27 | "babel-preset-env": "^1.3.2", 28 | "babel-preset-stage-2": "^6.22.0", 29 | "chalk": "^2.0.1", 30 | "copy-webpack-plugin": "^4.0.1", 31 | "css-loader": "^0.28.0", 32 | "extract-text-webpack-plugin": "^3.0.0", 33 | "file-loader": "^1.1.4", 34 | "friendly-errors-webpack-plugin": "^1.6.1", 35 | "html-webpack-plugin": "^2.30.1", 36 | "node-notifier": "^5.1.2", 37 | "node-sass": "^4.8.3", 38 | "optimize-css-assets-webpack-plugin": "^3.2.0", 39 | "ora": "^1.2.0", 40 | "portfinder": "^1.0.13", 41 | "postcss-import": "^11.0.0", 42 | "postcss-loader": "^2.0.8", 43 | "postcss-url": "^7.2.1", 44 | "rimraf": "^2.6.0", 45 | "sass-loader": "^6.0.7", 46 | "sass-resources-loader": "^1.3.3", 47 | "semver": "^5.3.0", 48 | "shelljs": "^0.7.6", 49 | "uglifyjs-webpack-plugin": "^1.1.1", 50 | "url-loader": "^0.5.8", 51 | "vue-loader": "^13.3.0", 52 | "vue-style-loader": "^3.0.1", 53 | "vue-template-compiler": "^2.5.2", 54 | "webpack": "^3.6.0", 55 | "webpack-bundle-analyzer": "^2.9.0", 56 | "webpack-dev-server": "^2.9.1", 57 | "webpack-merge": "^4.1.0" 58 | }, 59 | "engines": { 60 | "node": ">= 6.0.0", 61 | "npm": ">= 3.0.0" 62 | }, 63 | "browserslist": [ 64 | "> 1%", 65 | "last 2 versions", 66 | "not ie <= 8" 67 | ] 68 | } 69 | -------------------------------------------------------------------------------- /mobile/src/api/index.js: -------------------------------------------------------------------------------- 1 | export const HOST = 'https://api.raydom.wang' 2 | -------------------------------------------------------------------------------- /mobile/src/assets/icons/add-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/add-img.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/center-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/center-active.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/center.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/comment.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/female.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/female.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/goback-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/goback-black.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/hot-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/hot-active.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/hot.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-attention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-attention.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-back.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-comment.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-data.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-fans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-fans.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-integral.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-integral.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-setting.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/icon-works.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/icon-works.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/level.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/like-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/like-on.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/like.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/location.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/login_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/login_bg.jpg -------------------------------------------------------------------------------- /mobile/src/assets/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/logo.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/male.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/male.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/menu-next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/menu-next.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/newest-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/newest-active.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/newest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/newest.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/publish-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/publish-on.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/publish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/publish.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/share-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/share-white.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/share.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/special-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/special-active.png -------------------------------------------------------------------------------- /mobile/src/assets/icons/special.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/icons/special.png -------------------------------------------------------------------------------- /mobile/src/assets/images/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/mobile/src/assets/images/img.jpg -------------------------------------------------------------------------------- /mobile/src/assets/scss/base.scss: -------------------------------------------------------------------------------- 1 | $mainColor: (#5756c0 #a09fed); 2 | $fontColor: (#333 #666 #999); 3 | $bgColor: (#f3f3f3); 4 | $url: './assets/icons/'; 5 | $comUrl: './../assets/icons/'; 6 | 7 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/audio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 15 | 16 | 17 | 21 | 22 | 23 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/ball-triangle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 38 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/bars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | 12 | 13 | 17 | 21 | 22 | 23 | 27 | 31 | 32 | 33 | 37 | 41 | 42 | 43 | 47 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/circles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/grid.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 13 | 14 | 15 | 19 | 20 | 21 | 25 | 26 | 27 | 31 | 32 | 33 | 37 | 38 | 39 | 43 | 44 | 45 | 49 | 50 | 51 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/hearts.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/oval.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/puff.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 19 | 20 | 21 | 28 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/rings.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 14 | 18 | 19 | 20 | 25 | 29 | 33 | 34 | 35 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/spinning-circles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 10 | 11 | 12 | 16 | 17 | 18 | 22 | 23 | 24 | 28 | 29 | 30 | 34 | 35 | 36 | 40 | 41 | 42 | 46 | 47 | 48 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/tail-spin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /mobile/src/assets/svg/three-dots.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 12 | 13 | 14 | 18 | 22 | 23 | 24 | 28 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /mobile/src/components/Loading.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 26 | 27 | 110 | -------------------------------------------------------------------------------- /mobile/src/components/Newest.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | 19 | 22 | 23 | -------------------------------------------------------------------------------- /mobile/src/components/SharePanel.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /mobile/src/components/Topbar.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 14 | 15 | 39 | -------------------------------------------------------------------------------- /mobile/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import router from './router' 5 | import axios from 'axios' 6 | import store from './store' 7 | 8 | Vue.config.productionTip = false 9 | Vue.prototype.$ajax = axios 10 | // 屏幕适配 11 | document.getElementsByTagName("html")[0].style.fontSize = document.documentElement.clientWidth / 18.75 + 'px' 12 | window.onresize = function () { 13 | document.getElementsByTagName("html")[0].style.fontSize = document.documentElement.clientWidth / 18.75 + 'px' 14 | } 15 | 16 | router.beforeEach((to, from, next) => { 17 | // 登录拦截 18 | let loginPages = ['/center']; 19 | let pagePath = to.path; 20 | if (loginPages.includes(pagePath)) { 21 | localStorage.getItem('isLogin') ? '' : router.push('/login'); 22 | } 23 | next() 24 | }) 25 | 26 | 27 | /* eslint-disable no-new */ 28 | new Vue({ 29 | el: '#app', 30 | store, 31 | router, 32 | }) 33 | -------------------------------------------------------------------------------- /mobile/src/modules/index.js: -------------------------------------------------------------------------------- 1 | import loading from './loading' 2 | import model from './model' 3 | import uploadProgress from './progress' 4 | 5 | 6 | export { loading, model, uploadProgress }; -------------------------------------------------------------------------------- /mobile/src/modules/loading/index.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 26 | 27 | 110 | -------------------------------------------------------------------------------- /mobile/src/modules/model/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | 16 | 32 | -------------------------------------------------------------------------------- /mobile/src/modules/progress/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | 20 | 53 | -------------------------------------------------------------------------------- /mobile/src/pages/Publish.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 61 | 62 | 89 | -------------------------------------------------------------------------------- /mobile/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | import App from '../App' 4 | const Home = r => require.ensure([], () => r(require('@/pages/Home')), 'Home') 5 | const Hot = r => require.ensure([], () => r(require('@/pages/Hot')), 'Hot') 6 | const Newest = r => require.ensure([], () => r(require('@/pages/Newest')), 'Newest') 7 | const Publish = r => require.ensure([], () => r(require('@/pages/Publish')), 'Publish') 8 | const Special = r => require.ensure([], () => r(require('@/pages/Special')), 'Special') 9 | const SpecialDetail = r => require.ensure([], () => r(require('@/pages/SpecialDetail')), 'SpecialDetail') 10 | const Center = r => require.ensure([], () => r(require('@/pages/Center')), 'Center') 11 | const Login = r => require.ensure([], () => r(require('@/pages/Login')), 'Login') 12 | 13 | Vue.use(Router) 14 | 15 | export default new Router({ 16 | // mode: 'history', 17 | scrollBehavior(to, from, savedPosition) { 18 | if (savedPosition) { 19 | return savedPosition 20 | } else { 21 | return { x: 0, y: 0 } 22 | } 23 | }, 24 | routes: [ 25 | { 26 | path: '/', 27 | component: App, 28 | redirect: '/home', 29 | children: [ 30 | { 31 | path: 'home', 32 | component: Home, 33 | }, { 34 | path: 'newest', 35 | component: Newest, 36 | }, 37 | { 38 | path: 'publish', 39 | component: Publish, 40 | }, 41 | { 42 | path: 'special', 43 | component: Special, 44 | children: [{ 45 | path: 'specialDetail', 46 | component: SpecialDetail, 47 | name: 'specialDetail' 48 | }] 49 | }, 50 | { 51 | path: 'center', 52 | component: Center 53 | } 54 | ] 55 | }, 56 | { 57 | path: '/login', 58 | component: Login 59 | } 60 | ] 61 | }) 62 | -------------------------------------------------------------------------------- /mobile/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | 4 | Vue.use(Vuex) 5 | 6 | const store = new Vuex.Store({ 7 | state: { 8 | imgNames: [], 9 | total: "", 10 | currentStep: "", 11 | uploadComplate: false 12 | }, 13 | mutations: { 14 | // 上传进度控制 15 | uploadStep(state, progress) { 16 | state.total = progress.total; 17 | state.currentStep = progress.currentStep; 18 | // console.log(state.total, state.currentStep) 19 | }, 20 | // 上传图品以后返回的文件名 21 | getUploadImgUrl(state, imgNames) { 22 | state.imgNames = imgNames; 23 | state.uploadComplate = true; 24 | } 25 | } 26 | }) 27 | 28 | export default store; -------------------------------------------------------------------------------- /mobile/src/utils/index.js: -------------------------------------------------------------------------------- 1 | import crypto from "crypto"; 2 | 3 | // node md5加密 4 | const md5Encrypt = function (encryptString) { 5 | let md5 = crypto.createHash("md5"); 6 | md5.update(encryptString); 7 | let md5String = md5.digest("hex"); 8 | return md5String; 9 | }; 10 | 11 | 12 | 13 | 14 | 15 | 16 | const Utils = { 17 | md5Encrypt: md5Encrypt 18 | } 19 | 20 | export default Utils; 21 | -------------------------------------------------------------------------------- /mobile/static/js/app.0fb1141f9290ca78136a.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1],{"3XaS":function(t,e){},NHnr:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=n("7+uW"),a={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"app"}},[e("router-view"),this._v(" "),this._m(0)],1)},staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("footer",[e("span",{staticClass:"home"},[this._v("\n 热门\n ")]),this._v(" "),e("span",{staticClass:"new"},[this._v("\n 最新\n ")]),this._v(" "),e("span",{staticClass:"special"},[this._v("\n 专题\n ")]),this._v(" "),e("span",{staticClass:"center"},[this._v("\n 我的\n ")])])}]};var i=n("VU/8")({name:"App"},a,!1,function(t){n("ZN2p")},"data-v-177c343e",null).exports,o=n("/ocq"),r={name:"home",data:function(){return{}},mounted:function(){console.log(1)}},c={render:function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"home"})},staticRenderFns:[]};var p=n("VU/8")(r,c,!1,function(t){n("3XaS")},"data-v-0359f79e",null).exports;s.a.use(o.a);var u=new o.a({routes:[{path:"/",name:"Home",component:p}]});s.a.config.productionTip=!1,document.getElementsByTagName("html")[0].style.fontSize=document.documentElement.clientWidth/18.75+"px",new s.a({el:"#app",router:u,components:{App:i},template:""})},ZN2p:function(t,e){}},["NHnr"]); 2 | //# sourceMappingURL=app.0fb1141f9290ca78136a.js.map -------------------------------------------------------------------------------- /mobile/static/js/manifest.eff8244bf069398f81f6.js: -------------------------------------------------------------------------------- 1 | !function(r){var n=window.webpackJsonp;window.webpackJsonp=function(e,u,c){for(var f,i,p,a=0,l=[];a { 13 | // console.log(res) 14 | }, 15 | fail: (res) => { 16 | console.log(res) 17 | that.getUserId(); 18 | that.getCode(); 19 | } 20 | }) 21 | }, 22 | 23 | /** 24 | * 当小程序启动,或从后台进入前台显示,会触发 onShow 25 | */ 26 | onShow: function (options) { 27 | 28 | }, 29 | 30 | /** 31 | * 当小程序从前台进入后台,会触发 onHide 32 | */ 33 | onHide: function () { 34 | 35 | }, 36 | 37 | /** 38 | * 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息 39 | */ 40 | onError: function (msg) { 41 | 42 | }, 43 | getUserId: function () { 44 | let userInfo, that = this; 45 | // 获取用户信息 46 | wx.getUserInfo({ 47 | success: res => { 48 | that.globalData.userInfo = res.userInfo 49 | // 用户登录获取用户 50 | } 51 | }) 52 | }, 53 | getCode: function () { 54 | let that = this; 55 | console.log(111) 56 | wx.login({ 57 | success: loginRes => { 58 | let userInfo = that.globalData.userInfo; 59 | console.log(userInfo) 60 | if (loginRes.code) { 61 | // 获取code成功后传到后台 62 | wx.request({ 63 | url: HOST + '/wechat/login', 64 | method: 'POST', 65 | data: { 66 | code: loginRes.code, 67 | userInfo: userInfo 68 | }, 69 | success: res => { 70 | // 后台返回用户信息存入本地缓存 71 | wx.setStorage({ 72 | key: "userId", 73 | data: res.data.userId, 74 | success: () => { 75 | 76 | } 77 | }) 78 | } 79 | }) 80 | } else { 81 | console.log('获取用户登录态失败!' + res.errMsg) 82 | } 83 | } 84 | 85 | }); 86 | }, 87 | globalData: { 88 | userInfo: null 89 | } 90 | 91 | }) -------------------------------------------------------------------------------- /wechat/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ 3 | "pages/index/index", 4 | "centerTools/weather/weather", 5 | "centerTools/editText/editText", 6 | "centerTools/viewCard/viewCard", 7 | "centerTools/postcardIndex/postcardIndex", 8 | "pages/special/special", 9 | "pages/center/center", 10 | "centerTools/saveCard/saveCard", 11 | "pages/credits/credits", 12 | "pages/addImg/addImg", 13 | "pages/test/test", 14 | "pages/specialDetailComment/specialDetailComment", 15 | "pages/specialDetail/specialDetail", 16 | "pages/newest/newest", 17 | "pages/detail/detail", 18 | "pages/comments/comments" 19 | ], 20 | "window": { 21 | "backgroundTextStyle": "light", 22 | "navigationBarBackgroundColor": "#5756c0", 23 | "navigationBarTextStyle": "white", 24 | "navigationBarTitleText": "我想学摄影" 25 | }, 26 | "tabBar": { 27 | "borderStyle": "black", 28 | "color": "#666", 29 | "backgroundColor": "#fff", 30 | "selectedColor": "#a09fed", 31 | "list": [ 32 | { 33 | "pagePath": "pages/index/index", 34 | "text": "热门", 35 | "iconPath": "assets/icons/hot.png", 36 | "selectedIconPath": "assets/icons/hot-active.png" 37 | }, 38 | { 39 | "pagePath": "pages/newest/newest", 40 | "text": "最新", 41 | "iconPath": "assets/icons/newest.png", 42 | "selectedIconPath": "assets/icons/newest-active.png" 43 | }, 44 | { 45 | "pagePath": "pages/addImg/addImg", 46 | "text": "发布", 47 | "iconPath": "assets/icons/release.png", 48 | "selectedIconPath": "assets/icons/release.png" 49 | }, 50 | { 51 | "pagePath": "pages/special/special", 52 | "text": "专题", 53 | "iconPath": "assets/icons/special.png", 54 | "selectedIconPath": "assets/icons/special-active.png" 55 | }, 56 | { 57 | "pagePath": "pages/center/center", 58 | "text": "我的", 59 | "iconPath": "assets/icons/center.png", 60 | "selectedIconPath": "assets/icons/center-active.png" 61 | } 62 | ] 63 | } 64 | } -------------------------------------------------------------------------------- /wechat/app.wxss: -------------------------------------------------------------------------------- 1 | @import "modules/loading/loading.wxss"; 2 | 3 | /* 模型盒设置 */ 4 | 5 | view, text, input, textarea, button, navigator { 6 | box-sizing: border-box; 7 | -webkit-box-sizing: border-box; 8 | } 9 | 10 | /* 色值预定义 */ 11 | 12 | .color-main { 13 | color: #a09fed; 14 | } 15 | 16 | .color-bg-main { 17 | background: #a09fed; 18 | } 19 | 20 | .color-assist1 { 21 | color: #addeff; 22 | } 23 | 24 | .color-bg-assist1 { 25 | background: #addeff; 26 | } 27 | 28 | .color-assist2 { 29 | color: #aaecd0; 30 | } 31 | 32 | .color-bg-assist2 { 33 | background: #aaecd0; 34 | } 35 | 36 | /* 底部加载文字 */ 37 | 38 | .end-text { 39 | border-top: 1px solid #efefef; 40 | background: #fdfdfd; 41 | text-align: center; 42 | font-size: 12px; 43 | color: #999; 44 | margin-bottom: 4rpx; 45 | margin-top: -8rpx; 46 | line-height: 20px; 47 | } 48 | 49 | .end-text image { 50 | display: inline-block; 51 | width: 12px; 52 | height: 12px; 53 | vertical-align: middle; 54 | margin-left: 12rpx; 55 | } 56 | 57 | /*返回顶部按钮*/ 58 | 59 | .backtop-icon { 60 | display: block; 61 | position: fixed; 62 | bottom: 20rpx; 63 | right: 24rpx; 64 | width: 80rpx; 65 | height: 80rpx; 66 | } 67 | -------------------------------------------------------------------------------- /wechat/assets/icons/add-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/add-img.png -------------------------------------------------------------------------------- /wechat/assets/icons/air.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/air.png -------------------------------------------------------------------------------- /wechat/assets/icons/album.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/album.png -------------------------------------------------------------------------------- /wechat/assets/icons/back_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/back_top.png -------------------------------------------------------------------------------- /wechat/assets/icons/center-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/center-active.png -------------------------------------------------------------------------------- /wechat/assets/icons/center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/center.png -------------------------------------------------------------------------------- /wechat/assets/icons/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/close.png -------------------------------------------------------------------------------- /wechat/assets/icons/coin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/coin.png -------------------------------------------------------------------------------- /wechat/assets/icons/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/comment.png -------------------------------------------------------------------------------- /wechat/assets/icons/goBack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/goBack.png -------------------------------------------------------------------------------- /wechat/assets/icons/hot-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/hot-active.png -------------------------------------------------------------------------------- /wechat/assets/icons/hot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/hot.png -------------------------------------------------------------------------------- /wechat/assets/icons/icon_sure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/icon_sure.png -------------------------------------------------------------------------------- /wechat/assets/icons/kind-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/kind-active.png -------------------------------------------------------------------------------- /wechat/assets/icons/kind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/kind.png -------------------------------------------------------------------------------- /wechat/assets/icons/level-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/level-white.png -------------------------------------------------------------------------------- /wechat/assets/icons/level.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/level.png -------------------------------------------------------------------------------- /wechat/assets/icons/like-on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/like-on.png -------------------------------------------------------------------------------- /wechat/assets/icons/like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/like.png -------------------------------------------------------------------------------- /wechat/assets/icons/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/loading.gif -------------------------------------------------------------------------------- /wechat/assets/icons/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/location.png -------------------------------------------------------------------------------- /wechat/assets/icons/newest-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/newest-active.png -------------------------------------------------------------------------------- /wechat/assets/icons/newest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/newest.png -------------------------------------------------------------------------------- /wechat/assets/icons/news-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/news-icon.png -------------------------------------------------------------------------------- /wechat/assets/icons/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/next.png -------------------------------------------------------------------------------- /wechat/assets/icons/postcard-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/postcard-icon.png -------------------------------------------------------------------------------- /wechat/assets/icons/release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/release.png -------------------------------------------------------------------------------- /wechat/assets/icons/send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/send.png -------------------------------------------------------------------------------- /wechat/assets/icons/share-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/share-icon.png -------------------------------------------------------------------------------- /wechat/assets/icons/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/share.png -------------------------------------------------------------------------------- /wechat/assets/icons/special-active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/special-active.png -------------------------------------------------------------------------------- /wechat/assets/icons/special.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/special.png -------------------------------------------------------------------------------- /wechat/assets/icons/tool_icon01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/tool_icon01.png -------------------------------------------------------------------------------- /wechat/assets/icons/tool_icon02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/tool_icon02.png -------------------------------------------------------------------------------- /wechat/assets/icons/tool_icon03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/tool_icon03.png -------------------------------------------------------------------------------- /wechat/assets/icons/tool_icon04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/tool_icon04.png -------------------------------------------------------------------------------- /wechat/assets/icons/view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/view.png -------------------------------------------------------------------------------- /wechat/assets/icons/wind.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/icons/wind.png -------------------------------------------------------------------------------- /wechat/assets/images/day.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/images/day.jpg -------------------------------------------------------------------------------- /wechat/assets/images/default_main.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/images/default_main.jpg -------------------------------------------------------------------------------- /wechat/assets/images/night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/images/night.jpg -------------------------------------------------------------------------------- /wechat/assets/weathercn/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/0.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/1.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/10.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/11.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/12.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/13.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/14.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/15.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/16.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/17.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/18.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/19.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/2.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/20.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/21.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/22.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/23.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/24.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/25.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/26.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/27.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/28.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/29.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/3.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/30.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/301.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/301.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/302.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/302.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/31.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/32.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/4.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/49.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/5.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/53.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/54.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/55.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/56.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/57.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/58.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/6.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/7.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/8.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/9.png -------------------------------------------------------------------------------- /wechat/assets/weathercn/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn/99.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/0.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/1.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/10.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/11.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/12.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/13.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/14.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/15.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/16.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/17.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/18.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/19.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/2.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/20.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/21.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/22.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/23.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/24.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/25.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/26.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/27.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/28.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/29.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/3.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/30.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/301.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/301.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/302.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/302.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/31.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/32.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/39.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/4.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/49.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/5.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/53.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/54.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/55.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/56.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/57.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/58.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/6.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/7.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/8.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/9.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/99.png -------------------------------------------------------------------------------- /wechat/assets/weathercn02/天气图标对照表.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Raydooom/photography/aaff85fcc067c52667011a1c0dc404751c054652/wechat/assets/weathercn02/天气图标对照表.txt -------------------------------------------------------------------------------- /wechat/centerTools/editText/editText.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "编辑文字", 3 | "backgroundTextStyle": "black", 4 | "navigationBarBackgroundColor": "#222", 5 | "navigationBarTextStyle": "white", 6 | "disableScroll": true 7 | } -------------------------------------------------------------------------------- /wechat/centerTools/editText/editText.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{title}} 6 | {{text}} 7 | —— {{fromName}} 8 | 9 | 10 | 11 | 12 | 文字编辑 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 明信片主题 22 | 23 | 明信片文字 24 | 25 | 发送人 26 | 27 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /wechat/centerTools/postcardIndex/postcardIndex.js: -------------------------------------------------------------------------------- 1 | //index.js 2 | //获取应用实例 3 | const app = getApp() 4 | import { server } from '../../config/index.js' 5 | 6 | Page({ 7 | data: { 8 | defaultImg: '../../assets/images/default_main.jpg', 9 | selectShow: false, 10 | defaultList: [], 11 | isLocal: false 12 | }, 13 | 14 | onLoad: function () { 15 | // this.getImg() 获取网络图片 16 | }, 17 | // 获取预设图片 18 | getImg() { 19 | let that = this 20 | wx.request({ 21 | url: server + "/postCard/getImg", 22 | success: (res) => { 23 | if (res.data.state == 1) { 24 | that.setData({ 25 | defaultList: res.data.data 26 | }) 27 | } else { 28 | wx.showModal({ 29 | title: '提示', 30 | content: '服务器连接失败!', 31 | }) 32 | } 33 | } 34 | }) 35 | }, 36 | // 点击选择图片按钮 37 | toSelect() { 38 | this.setData({ 39 | selectShow: !this.data.selectShow, 40 | isLocal: false 41 | }) 42 | }, 43 | // 选择本地图片 44 | localSelect() { 45 | let that = this 46 | wx.chooseImage({ 47 | count: 1, // 默认9 48 | sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 49 | sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 50 | success: function (res) { 51 | var tempFilePaths = res.tempFilePaths[0] 52 | that.setData({ 53 | defaultImg: tempFilePaths, 54 | isLocal: true 55 | }) 56 | } 57 | }) 58 | }, 59 | // 选择预设图片 60 | selectImg(e) { 61 | this.setData({ 62 | defaultImg: e.target.dataset.url 63 | }) 64 | }, 65 | sureSelect() { 66 | this.setData({ 67 | selectShow: false 68 | }) 69 | wx.navigateTo({ 70 | url: '../editText/editText?url=' + this.data.defaultImg + '&isLocal=' + this.data.isLocal, 71 | }) 72 | } 73 | }) 74 | -------------------------------------------------------------------------------- /wechat/centerTools/postcardIndex/postcardIndex.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "选择模板", 3 | "navigationBarBackgroundColor": "#222", 4 | "disableScroll": true 5 | } -------------------------------------------------------------------------------- /wechat/centerTools/postcardIndex/postcardIndex.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 黄金时代 6 | 那一年我二十一岁,在我一生的黄金时代。我有好多奢望。我想爱,想吃,还想在一瞬间变成天上半明半暗的云。 7 | —— 王小波 8 | 9 | 10 | 11 | 12 | 选择图片 13 | 14 | 15 | 16 | 17 | 25 | -------------------------------------------------------------------------------- /wechat/centerTools/saveCard/saveCard.json: -------------------------------------------------------------------------------- 1 | { 2 | "disableScroll": true 3 | } -------------------------------------------------------------------------------- /wechat/centerTools/saveCard/saveCard.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 保存到相册 8 | 9 | 10 | 11 | ———— 美图不够多?去热门作品看看吧 ———— 12 | 热门作品 13 | 14 | -------------------------------------------------------------------------------- /wechat/centerTools/saveCard/saveCard.wxss: -------------------------------------------------------------------------------- 1 | page { 2 | height: 100%; 3 | border-top: 1px solid #efefef; 4 | } 5 | 6 | page .main-img image { 7 | margin: 40rpx 75rpx; 8 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); 9 | width: 600rpx; 10 | height: 720rpx; 11 | } 12 | 13 | .btn-container { 14 | text-align: center; 15 | } 16 | 17 | .btn { 18 | display: inline-block; 19 | height: 72rpx; 20 | line-height: 72rpx; 21 | text-align: center; 22 | width: 260rpx; 23 | border-radius: 36rpx; 24 | background: #ddd; 25 | color: #fff; 26 | font-size: 32rpx; 27 | margin: 0 20rpx; 28 | } 29 | 30 | .btn.save { 31 | background: #0e94fa; 32 | } 33 | 34 | .btn.again { 35 | background: #03b5e1; 36 | vertical-align: middle; 37 | border: none; 38 | } 39 | 40 | .bottom { 41 | margin-top: 40rpx; 42 | } 43 | 44 | .bottom .info { 45 | font-size: 24rpx; 46 | display: block; 47 | text-align: center; 48 | color: #666; 49 | } 50 | 51 | .bottom .kind-btn { 52 | display: block; 53 | width: 320rpx; 54 | margin: 30rpx auto; 55 | text-align: center; 56 | background: #fff; 57 | border: 1px solid #999; 58 | line-height: 80rpx; 59 | height: 80rpx; 60 | font-size: 32rpx; 61 | border-radius: 40rpx; 62 | color: #333; 63 | } 64 | -------------------------------------------------------------------------------- /wechat/centerTools/viewCard/viewCard.js: -------------------------------------------------------------------------------- 1 | // pages/saveCard/saveCard.js 2 | import { HOST } from '../../config/index'; 3 | const app = getApp(); 4 | 5 | Page({ 6 | data: { 7 | postcard: '' 8 | }, 9 | onLoad: function (option) { 10 | this.getData(option) 11 | }, 12 | getData(option) { 13 | var that = this 14 | wx.request({ 15 | url: HOST + "/wechat/postcardView", 16 | data: { 17 | cardId: option.cardId, 18 | userId: option.userId 19 | }, 20 | success: function (res) { 21 | that.setData({ 22 | card: res.data.cardUrl 23 | }) 24 | that.downloadImg() 25 | } 26 | }) 27 | }, 28 | downloadImg() { 29 | var that = this 30 | wx.downloadFile({ 31 | url: that.data.card, 32 | success: function (res) { 33 | console.log(res) 34 | if (res.statusCode === 200) { 35 | that.setData({ 36 | postcard: res.tempFilePath 37 | }) 38 | } 39 | }, 40 | error(res) { 41 | wx.showModal({ 42 | title: '提醒', 43 | cancel: false, 44 | content: '图片下载错误!', 45 | }) 46 | } 47 | }) 48 | }, 49 | saveImg() { 50 | var that = this 51 | // 下载图片到本地 52 | wx.saveImageToPhotosAlbum({ 53 | filePath: that.data.postcard, 54 | success: function (res) { 55 | wx.showToast({ 56 | title: '保存成功!', 57 | icon: 'success', 58 | duration: 2000 59 | }) 60 | } 61 | }) 62 | }, 63 | goToCreate() { 64 | // wx.redirectTo({ 65 | // url: '../postcard/postcard' 66 | // }) 67 | wx.navigateTo({ 68 | url: '../postcard/postcard' 69 | }) 70 | } 71 | }) -------------------------------------------------------------------------------- /wechat/centerTools/viewCard/viewCard.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "收到明信片", 3 | "backgroundTextStyle": "black", 4 | "navigationBarBackgroundColor": "#222", 5 | "navigationBarTextStyle": "white", 6 | "disableScroll": true 7 | } -------------------------------------------------------------------------------- /wechat/centerTools/viewCard/viewCard.wxml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 保存相册 7 | 8 | 9 | 我要制作 10 | 11 | 12 | -------------------------------------------------------------------------------- /wechat/centerTools/viewCard/viewCard.wxss: -------------------------------------------------------------------------------- 1 | /**index.wxss**/ 2 | 3 | page { 4 | height: 100%; 5 | background: #111; 6 | overflow: hidden; 7 | } 8 | 9 | .container { 10 | height: 100%; 11 | display: flex; 12 | } 13 | 14 | .showImg { 15 | width: 100%; 16 | height: 900rpx; 17 | } 18 | 19 | .tool-bar { 20 | position: fixed; 21 | bottom: 0; 22 | left: 0; 23 | width: 100%; 24 | height: 94rpx; 25 | background: #fff; 26 | border-top: 1px solid #efefef; 27 | z-index: 5; 28 | } 29 | 30 | .tool-bar .btn { 31 | width: 49.5%; 32 | float: left; 33 | line-height: 92rpx; 34 | font-size: 24rpx; 35 | text-align: center; 36 | border-right: 1px solid #efefef; 37 | } 38 | 39 | .tool-bar .btn image { 40 | width: 24rpx; 41 | height: 24rpx; 42 | margin-right: 4rpx; 43 | display: inline-block; 44 | vertical-align: middle; 45 | margin-top: -2rpx; 46 | } 47 | -------------------------------------------------------------------------------- /wechat/centerTools/weather/weather.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationBarTitleText": "", 3 | "enablePullDownRefresh": false, 4 | "disableScroll": true 5 | } -------------------------------------------------------------------------------- /wechat/centerTools/weather/weather.wxml: -------------------------------------------------------------------------------- 1 | 2 |