# 移动端记账本
**Repository Path**: kennana/mobile_account_book
## Basic Information
- **Project Name**: 移动端记账本
- **Description**: 移动端记账本
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2018-12-27
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# account
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Run your tests
```
npm run test
```
### Lints and fixes files
```
npm run lint
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).
#### 两个目的
**第一个目的**:`这一个移动端记账本的创作来源呢,其实是我在学习了理财的课程之后,突然想为自己写一个记账的东西来记录自己每天花费的钱,从而可以降低那些不必要的开销,从而达到理财的第一步。`
**当然还有另一个目的就是**:`做这个移动端简单的项目,主要是为了熟悉vue.js,从项目构建到完成目录,以及后台数据库的设计,后台逻辑的处理,全程由我自己一个人完成,这个项目历史大概有1个多月吧,虽然项目看起来很小,但是简单亦不简单啊,这个时间段遇到很多问题,都是自己一个人靠着百度,自己理解解决了问题,总的来说,这个项目对我来还是蛮重要的,还是我的第一个开源项目吧,希望大佬不要嘲笑,看到的尽管留言,给出完善的意见,感谢`
#### 项目用的技术展
###### holderjs:一开始设计原型的时候使用站位图插件
其用法如下:
holder.js 可以帮我们快速生成占位图片,而且还能定义占位图片的一些基本样式。
用法简单,可以直接去官网下载,或直接引用Bootcss的CDN :
1、基本:默认单位为px,用小写的x连接图片的宽高:

2、使用p代表%:

3、让占位图片在缩放长宽比,可以加上auto参数:
4、配色方案:
holder.js共定义了6种占位图片配色,分别是:sky、vine、lava、gray、industrial、social
配色可以通过theme参数设置:

5、随机配色:
#### 优秀的远程服务插件
axios:地址入口 : https://www.kancloud.cn/yunye/axios/234845
用法如下:
安装
使用 npm:
$ npm install axios
使用 bower:
$ bower install axios
使用 cdn:
Example
执行 GET 请求
// 为给定 ID 的 user 创建请求
axios.get('/user?ID=12345')
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
// 可选地,上面的请求可以这样做
axios.get('/user', {
params: {
ID: 12345
}
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
执行 POST 请求
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
执行多个并发请求
function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
// 两个请求现在都执行完成
}));
axios API
可以通过向 axios 传递相关配置来创建请求
axios(config)
// 发送 POST 请求
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
}
});
axios(url[, config])
// 发送 GET 请求(默认的方法)
axios('/user/12345');
请求方法的别名
为方便起见,为所有支持的请求方法提供了别名
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
#### 自己封装了一下字体响应式改变
rem.js
```
// 设置字体大小
setFontSize(){
(function(doc,win){
var docEl = doc.documentElement, //文档根标签
resizeEvent = 'orientationchange' in window ? 'orientationchang' :'resize'; //viewport变化事件源
var rescale = function(){
//重置方法
win.clientWidth = docEl.clientWidth;
if (!win.clientWidth) return;
// 改变DOM根节点fontSize大小的值;
// (屏幕宽度/设计图宽度) = 缩放或扩大的比例值;
docEl.style.fontSize = 40 * (win.clientWidth / 750) + 'px';
}
if (!doc.addEventListener) return;
win.addEventListener(resizeEvent, rescale, false);
doc.addEventListener('DOMContentLoaded', rescale, false);
})(document, window);
}
```
#### 自己对axios.post()和axios.get()方法进行二次封装
axios_get_post.js
```
// eslint-disable-next-line
/* eslint-disable */
// 对 axios.get() 和 axios.post()进行封装
import axios from 'axios'
import qs from 'qs'
/*
post 方式
axios({
method: 'post',
url: '/user/123456',
data: {
username: 'ken',
password: '123456'
}
})
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
get 方式
axios({
method: 'get',
url: '/user/123456',
})
// 可选地,上面的请求可以这样做
axios.get('/user', {
params: {
ID: 12345
}
})
//伪代码的编写
axios({
method: 'post' || 'get',
url: '/user/123456',
data: {
username: 'ken',
password: '123456',
} || params: {
ID: '123456'
}
})
*/
export default function axios_get_post(params){
return new Promise((resolve, reject)=>{
let opt = {
method: params.method || 'get',
url: params.url,
headers: {
'Content-Type':'application/x-www-form-urlencoded'
},
}
if(params.method == 'post'){
opt.data = params.data
}else {
//
opt.params = params
}
// 拦截处理
axios.interceptors.request.use((req) => {
if (req.method === 'post') {
// 转换成JSON格式
req.data = qs.stringify(req.data);
}
return req;
}, (error) => Promise.reject(error));
axios(opt).then(res=>{
resolve(res.data)
}).catch(err=>{
reject(err)
})
})
}
```
#### 当初封装上述函数的时候遇到一个问题如下:
axios.js以post方式传递数据后台获取不到数据,这到底是什么原因
#### mint-ui的插件的使用
在这个项目中使用的最多就是MessageBox()这个组件
npm 安装
推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用。
npm i mint-ui@1 -S
CDN
目前可以通过 unpkg.com/mint-ui@1 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用。
Hello world
通过 CDN 的方式我们可以很容易地使用 Mint UI 写出一个 Hello world 页面。
#### 遇到跨域问题的解决方案如下
vue.js请求后台遇到跨域引爆这篇文章
#### Vue CLI3本地代理配置
vue-cli3的本地代理配置
#### 使用了vue-lazyload图片懒加载
一. vue lazyload插件:
插件地址:https://github.com/hilongjw/vue-lazyload
demo:http://hilongjw.github.io/vue-lazyload/
二. 简单使用实例:
这个插件还是蛮好用的,就是感觉这个插件的开发文档有点太啰嗦了,一股脑把所有的api扩展都罗列出来,源码中并没有可以运行的实例提供。
其实这个插件做简单使用的话是很简单的,看官方文档的话反而被误导了,可以先按下边的实例实现简单引用,后边再根据开发文档做扩展。
1. 安装插件:
```
npm install vue-lazyload --save-dev
```
2. main.js引入插件:
```
import VueLazyLoad from 'vue-lazyload'
Vue.use(VueLazyLoad,{
error:'./static/error.png',
loading:'./static/loading.png'
})
```
3. vue文件中将需要懒加载的图片绑定 v-bind:src 修改为 v-lazy
```