├── pages
├── add
│ ├── add.json
│ ├── add.wxss
│ ├── add.wxml
│ └── add.js
├── help
│ ├── help.json
│ ├── help.js
│ ├── help.wxss
│ └── help.wxml
├── detail
│ ├── detail.json
│ ├── detail.wxss
│ ├── detail.wxml
│ └── detail.js
├── index
│ ├── index.json
│ ├── index.wxml
│ ├── index.wxss
│ └── index.js
└── settings
│ ├── settings.json
│ ├── settings.wxss
│ ├── settings.wxml
│ └── settings.js
├── doc
└── img
│ ├── qr.jpg
│ └── pic1.jpg
├── img
├── face0.png
├── face1.png
├── face2.png
└── face3.png
├── app.wxss
├── .idea
└── vcs.xml
├── app.json
├── README.md
├── utils
├── util.js
└── list.js
└── app.js
/pages/add/add.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "添加清单"
3 | }
--------------------------------------------------------------------------------
/pages/help/help.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "帮助"
3 | }
--------------------------------------------------------------------------------
/pages/detail/detail.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "清单详情"
3 | }
--------------------------------------------------------------------------------
/pages/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "简约云清单"
3 | }
--------------------------------------------------------------------------------
/pages/settings/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "设置"
3 | }
--------------------------------------------------------------------------------
/doc/img/qr.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kulokai/Weapp_ToDoList/HEAD/doc/img/qr.jpg
--------------------------------------------------------------------------------
/img/face0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kulokai/Weapp_ToDoList/HEAD/img/face0.png
--------------------------------------------------------------------------------
/img/face1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kulokai/Weapp_ToDoList/HEAD/img/face1.png
--------------------------------------------------------------------------------
/img/face2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kulokai/Weapp_ToDoList/HEAD/img/face2.png
--------------------------------------------------------------------------------
/img/face3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kulokai/Weapp_ToDoList/HEAD/img/face3.png
--------------------------------------------------------------------------------
/doc/img/pic1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kulokai/Weapp_ToDoList/HEAD/doc/img/pic1.jpg
--------------------------------------------------------------------------------
/pages/help/help.js:
--------------------------------------------------------------------------------
1 | Page({
2 | data: {
3 | },
4 | onLoad: function () {
5 | }
6 | })
--------------------------------------------------------------------------------
/pages/help/help.wxss:
--------------------------------------------------------------------------------
1 | .main{padding:8px 16px;font-size: 18px}
2 | .p{padding: 16px 0;}
3 | .t{font-weight:bold;text-align:center;}
--------------------------------------------------------------------------------
/app.wxss:
--------------------------------------------------------------------------------
1 | /**app.wxss**/
2 | .container {
3 | height: 100%;
4 | display: flex;
5 | flex-direction: column;
6 | justify-content: space-between;
7 | box-sizing: border-box;
8 | }
9 |
--------------------------------------------------------------------------------
/pages/add/add.wxss:
--------------------------------------------------------------------------------
1 | .title{
2 | padding:16px 8px;
3 | border-bottom: 1px solid #DADADA;
4 | width:100%;
5 | }
6 | .picker{
7 | padding:16px 8px;
8 | border-bottom: 1px solid #DADADA;
9 | }
--------------------------------------------------------------------------------
/pages/detail/detail.wxss:
--------------------------------------------------------------------------------
1 | .title{
2 | padding:16px 8px;
3 | border-bottom: 1px solid #DADADA;
4 | width:100%;
5 | }
6 | .picker{
7 | padding:16px 8px;
8 | border-bottom: 1px solid #DADADA;
9 | }
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages":[
3 | "pages/index/index",
4 | "pages/detail/detail",
5 | "pages/settings/settings",
6 | "pages/help/help",
7 | "pages/add/add"
8 | ],
9 | "window":{
10 | "backgroundTextStyle":"light",
11 | "navigationBarBackgroundColor": "#1AAD16",
12 | "navigationBarTitleText": "WeChat",
13 | "navigationBarTextStyle":"white"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/pages/settings/settings.wxss:
--------------------------------------------------------------------------------
1 | .head{
2 | margin: 12px 0;
3 | text-align: center;
4 | padding: 36px 10px;
5 | background:#FAFAFA;
6 | border-top:1px solid #ddd;
7 | border-bottom:1px solid #ddd;
8 | }
9 |
10 | .item{
11 | padding: 12px 10px;
12 | line-height:32px;
13 | border-bottom:1px solid #ddd;
14 | }
15 |
16 | .version{text-align:center;font-size:14px;color:#999;margin-top:24px;}
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ### 介绍
2 | 这是一个简单的一个计划清单小程序,可以在微信上搜索《简约云清单》便可以找到。
3 | 
4 | 扫码预览本小程序哦 ↑
5 |
6 | ### 技术支持
7 | 1. 参考微信小程序文档 https://mp.weixin.qq.com/debug/wxadoc/dev/api/
8 | 2. 利用小程序接口wx.setStorage(OBJECT) 和 wx.getStorage(OBJECT)实现本地储存
9 |
10 | ### 已实现功能
11 | - [x] 可以给清单item标记颜色
12 | - [x] 可以在清单列表左划快捷操作
13 | - [x] 可以对清单列表进行颜色、完成状态进行筛选
14 |
15 | ### 计划
16 | - [ ] 开发后端程序实现云储存功能
17 |
18 | ### 效果
19 | 
20 | 
--------------------------------------------------------------------------------
/pages/help/help.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 使用帮助
5 |
6 |
7 | 1. 本工具的首页主要是清单列表和菜单栏;
8 | 2. 手指在清单项上左划会出现该项的菜单;
9 | 3. 点击清单项可以修改清单项的内容;
10 | 4. 工具栏左侧是筛选按钮,可以筛选颜色和状态。
11 | 5. 菜单栏中间的绿色按钮是创建按钮。
12 |
13 |
14 |
15 | 关于"简约云清单"
16 |
17 |
18 | "简约云清单" 为用户提供一个简约美观的清单计划工具,努力做一个小而美且实用的小工具。
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/utils/util.js:
--------------------------------------------------------------------------------
1 | function formatTime(date) {
2 | var year = date.getFullYear()
3 | var month = date.getMonth() + 1
4 | var day = date.getDate()
5 |
6 | var hour = date.getHours()
7 | var minute = date.getMinutes()
8 | var second = date.getSeconds()
9 |
10 |
11 | return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
12 | }
13 |
14 | function formatNumber(n) {
15 | n = n.toString()
16 | return n[1] ? n : '0' + n
17 | }
18 |
19 | module.exports = {
20 | formatTime: formatTime
21 | }
22 |
--------------------------------------------------------------------------------
/pages/add/add.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/pages/detail/detail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | //app.js
2 | App({
3 | onLaunch: function () {
4 |
5 | },
6 | getUserInfo:function(cb){
7 | var that = this
8 | if(this.globalData.userInfo){
9 | typeof cb == "function" && cb(this.globalData.userInfo)
10 | }else{
11 | //调用登录接口
12 | wx.login({
13 | success: function () {
14 | wx.getUserInfo({
15 | success: function (res) {
16 | that.globalData.userInfo = res.userInfo
17 | typeof cb == "function" && cb(that.globalData.userInfo)
18 | }
19 | })
20 | }
21 | })
22 | }
23 | },
24 | globalData:{
25 | userInfo:null
26 | },
27 | getOnShowFn:function(){
28 | var data = wx.getStorageSync('set');
29 | return data.noShowFn?1:0;
30 | }
31 | })
--------------------------------------------------------------------------------
/pages/settings/settings.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{user.nickName}}
5 |
6 |
7 |
8 | 主页显示待完成
9 |
10 |
11 |
12 |
13 |
14 | 开启简约云同步
15 |
16 |
17 |
18 |
19 |
20 | 上一次同步时间
21 |
22 | {{settings.upload_time}}
23 |
24 |
25 |
26 | 清空所有清单数据
27 |
28 |
29 | 当前版本 1.1.0
30 |
31 |
32 |
--------------------------------------------------------------------------------
/utils/list.js:
--------------------------------------------------------------------------------
1 | function topData(arr,id){
2 | var temp = [];
3 | var tempdata = [];
4 | for(var i = 0;i
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{vo.title}}
11 |
12 |
15 |
18 |
21 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | {{xs2}}
32 |
33 | +
34 |
35 | 帮助
36 | 设置
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/pages/settings/settings.js:
--------------------------------------------------------------------------------
1 | var app = getApp();
2 | Page({
3 | touchcount:0,
4 | data: {
5 | user:{},
6 | settings:{},
7 | rand:0,
8 | },
9 | switch1Change: function (e){
10 | this.data.settings.noShowFn = e.detail.value;
11 | this.setData({
12 | settings:this.data.settings
13 | })
14 | wx.showToast({
15 | title: '下次启动设置生效',
16 | icon: 'loading'
17 | })
18 | },
19 | switch2Change: function (e){
20 | this.data.settings.onUpload = e.detail.value;
21 | this.setData({
22 | settings:this.data.settings
23 | })
24 | wx.showToast({
25 | title: '下次启动设置生效',
26 | icon: 'loading'
27 | })
28 | },
29 | onLoad: function () {
30 | var that = this
31 | //调用应用实例的方法获取全局数据
32 | app.getUserInfo(function(userInfo){
33 | //更新数据
34 | that.setData({
35 | user:userInfo
36 | })
37 | })
38 | var data = wx.getStorageSync('set') || {};
39 | if(!data.hide){
40 | data.hide = 'none';
41 | }
42 | this.setData({
43 | settings:data,
44 | rand:parseInt(Math.random()*4)
45 | })
46 | },
47 | onUnload:function(){
48 | wx.setStorageSync('set',this.data.settings);
49 | },
50 | countTouch:function(){
51 | this.touchcount++;
52 | if(this.touchcount==9){
53 | wx.showToast({title: '点我干啥'})
54 | }
55 | if(this.touchcount==12){
56 | wx.showToast({title: '被你发现我了'});
57 | this.data.settings.hide = 'block';
58 | this.setData({
59 | settings:this.data.settings
60 | })
61 | }
62 | },
63 | clearData:function(){
64 | wx.setStorageSync('list',null);
65 | wx.showToast({title: '清除成功'});
66 |
67 | setTimeout(function(){
68 | wx.navigateBack();
69 | },800);
70 | }
71 | })
72 |
--------------------------------------------------------------------------------
/pages/index/index.wxss:
--------------------------------------------------------------------------------
1 | /**index.wxss**/
2 | .userinfo {
3 | display: flex;
4 | flex-direction: column;
5 | align-items: center;
6 | }
7 | .userinfo-avatar {
8 | width: 84rpx;
9 | height: 84rpx;
10 | margin: 10rpx;
11 | border-radius: 50%;
12 | }
13 | .userinfo-nickname {
14 | color: #aaa;
15 | }
16 |
17 |
18 |
19 | .list{
20 | padding-bottom:28vw;
21 | }
22 | .view-body{
23 | flex:1;
24 | width:100%;
25 | height:64px;
26 | border-bottom: 1px solid #DADADA;
27 | }
28 | .item{
29 | height: 64px;
30 | line-height: 64px;
31 | width: 160%
32 | }
33 | .item .content{
34 | width: 62.5%;
35 | float: left;
36 | }
37 | .item .content .text{
38 | vertical-align: top;
39 | }
40 | .item .content .type{
41 | width: 10rpx;
42 | height: 64px;
43 | display: inline-block;
44 | margin-right: 10rpx;
45 | vertical-align: top;
46 | }
47 | .item .showM{
48 | width: 8%;
49 | float: left;
50 | text-align: center;
51 | }
52 | .item .menu{
53 | width: 12.5%;
54 | float: left;
55 | text-align: center;
56 | color:snow;
57 | }
58 |
59 | .gn{background:#1AAD16}
60 | .bu{background:dodgerblue}
61 | .rd{background:orangered}
62 | .og{background:orange}
63 | .lb{background:lightskyblue}
64 | .fn{text-decoration:line-through;color:#AAA}
65 | .item>.fn{display:none}
66 |
67 | .bottom{
68 | width:100vw;
69 | background:#FAFAFA;
70 | position:fixed;
71 | text-align: center;
72 | border-top:1px solid #ddd;
73 | bottom: 0;
74 | right: 0;
75 | }
76 | .add-p{
77 | display:inline-block;
78 | border-radius: 50%;
79 | margin:0 2.2vw;
80 | margin-top:-5vw;
81 | border-top:1px solid #ddd;
82 | }
83 | .add{
84 | height: 20vw;
85 | width: 20vw;
86 | line-height: 20vw;
87 | border-radius: 50%;
88 | border:2vw solid #FAFAFA;
89 | text-align: center;
90 | font-size:10vw;
91 | font-weight: bold;
92 | background:#1AAD16;
93 | color:white;
94 | vertical-align:middle;
95 | }
96 | .xs{
97 | height: 10vw;
98 | width: 10vw;
99 | border: 1px solid #ddd;
100 | border-radius: 5vw;
101 | display:inline-block;
102 | vertical-align:middle;
103 | margin:0 1.5vw;
104 | line-height:10vw;
105 | font-size:12px;
106 | color:#aaa;
107 | }
108 | .xs2{
109 | right: 40vw;
110 | }
111 |
--------------------------------------------------------------------------------
/pages/detail/detail.js:
--------------------------------------------------------------------------------
1 |
2 | var listobj = require('../../utils/list.js')
3 | var color = ['','gn','rd','bu','og']
4 | var all = {};
5 | Page({
6 | data: {
7 | type:['普通','绿色','红色','蓝色','橙色'],
8 | type_name:'普通',
9 | id:null,
10 | index:0,
11 | thelist:{}
12 | },
13 | bindPickerChange: function(e) {
14 | this.setData({
15 | index: e.detail.value,
16 | type_name:this.data.type[e.detail.value]
17 | })
18 | },
19 | del:function(){
20 | all.list = listobj.delDataById(all.list,this.data.id);
21 | try {
22 | wx.setStorageSync('list', all);
23 | wx.showToast({
24 | title: '删除成功'
25 | })
26 | setTimeout(function(){
27 | wx.navigateBack();
28 | },1000);
29 | } catch (e) {
30 | wx.showToast({
31 | title: '删除失败:异常',
32 | icon: 'loading'
33 | })
34 | }
35 | },
36 | formSubmit: function(e) {
37 | var value = e.detail.value;
38 | if(value.title==''||value.title==null){
39 | wx.showToast({
40 | title: '标题不能为空',
41 | icon: 'loading'
42 | })
43 | return;
44 | }
45 | value.type = color[value.type];
46 | value.id = this.data.id;
47 | all.list = listobj.delDataById(all.list,this.data.id);
48 | all.list.unshift(value);
49 | all.time = parseInt((new Date()).valueOf()/1000);
50 | console.log(all);
51 | try {
52 | wx.setStorageSync('list', all);
53 | wx.showToast({
54 | title: '保存成功'
55 | })
56 | setTimeout(function(){
57 | wx.navigateBack();
58 | },1000);
59 | } catch (e) {
60 | wx.showToast({
61 | title: '保存失败:异常',
62 | icon: 'loading'
63 | })
64 | }
65 | },
66 | onLoad: function (option) {
67 | all = wx.getStorageSync('list') || [];
68 | if(all.list==[]){
69 | wx.showToast({
70 | title: '不存在的清单',
71 | icon: 'loading'
72 | })
73 | wx.navigateBack();
74 | }
75 | var arr = all.list.filter(function (elem) {
76 | return (elem.id == option.id);
77 | });
78 | if(arr==[]){
79 | wx.showToast({
80 | title: '不存在的清单',
81 | icon: 'loading'
82 | })
83 | wx.navigateBack();
84 | }
85 | var temp = color.indexOf(arr[0].type);
86 | temp = temp<0?0:temp;
87 | console.log(arr[0]);
88 | this.setData({
89 | id:option.id,
90 | index:temp,
91 | type_name:this.data.type[temp],
92 | thelist:arr[0]
93 | });
94 | }
95 | })
96 |
97 |
--------------------------------------------------------------------------------
/pages/index/index.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | var listobj = require('../../utils/list.js')
3 | //获取应用实例
4 | var app = getApp();
5 | var all = {};
6 | var color = ['','gn','rd','bu','og'];
7 | var color2= ['普通','绿色','红色','蓝色','橙色']
8 | var word = ['全部','未完','已完'];
9 | Page({
10 | data: {
11 | userInfo: {},
12 | list:{},
13 | left:0,
14 | xs:'',
15 | xs_index:0,
16 | xs2:'全部',
17 | xs2_index:0
18 | },
19 | //清单详情
20 | detail: function(e) {
21 | wx.navigateTo({
22 | url: '../detail/detail?id='+e.currentTarget.dataset.id
23 | })
24 | },
25 | //删除数据
26 | del: function(e) {
27 | var temp = listobj.delDataById(all.list,e.currentTarget.dataset.id);
28 | all.list = temp;
29 | showList(this);
30 | },
31 | //置顶数据
32 | top: function(e) {
33 | all.list = listobj.topData(all.list,e.currentTarget.dataset.id);
34 | showList(this);
35 | },
36 | //标记为完成
37 | finish: function(e) {
38 | all.list = listobj.finishData(all.list,e.currentTarget.dataset.id);
39 | showList(this);
40 | },
41 | toAddPage:function(e) {
42 | wx.navigateTo({
43 | url: '../add/add'
44 | })
45 | },
46 | toSettings:function(e) {
47 | wx.navigateTo({
48 | url: '../settings/settings'
49 | })
50 | },
51 | toHelp:function(e) {
52 | wx.navigateTo({
53 | url: '../help/help'
54 | })
55 | },
56 | onLoad: function () {
57 | console.log('onLoad')
58 | var xs2_index = app.getOnShowFn();
59 | this.setData({
60 | xs2_index:xs2_index,
61 | xs2:word[xs2_index]
62 | });
63 | var that = this
64 | //调用应用实例的方法获取全局数据
65 | app.getUserInfo(function(userInfo){
66 | //更新数据
67 | that.setData({
68 | userInfo:userInfo
69 | })
70 | })
71 | },
72 | onShow:function(){
73 | console.log('onShow')
74 | var firstData = {index:0,list:[
75 | {id:1,title:'欢迎您 使用简约云清单 ^_^',type:'gn'},
76 | {id:2,title:'向左划我,可以将我移除/置顶/完成',type:'bu'},
77 | {id:3,title:'点击我可以进入清单详情',type:'og'},
78 | {id:4,title:'我是已完成的记录',type:'rd',finish:'fn'},
79 | {id:5,title:'点击底部白色小圈可以筛选',type:''},
80 | {id:6,title:'点击底部【+】可以添加记录',type:''},
81 | ],time:0};
82 | var data = wx.getStorageSync('list') || firstData;
83 | all = data;
84 | showList(this);
85 | },
86 | onHide:function(){
87 | console.log('onHide')
88 | try {
89 | all.time = parseInt((new Date()).valueOf()/1000);
90 | wx.setStorageSync('list', all);
91 | } catch (e) {
92 | alert('保存失败:异常');
93 | }
94 | },
95 | xsPage:function(e){
96 | var xs_index = e.currentTarget.dataset.index + 1;
97 | xs_index = xs_index>=5?0:xs_index;
98 | this.setData({
99 | xs_index:xs_index,
100 | xs:color[xs_index]
101 | })
102 | showList(this);
103 | wx.showToast({title: color2[xs_index]+'·清单'})
104 | },
105 | xsPage2:function(e){
106 | var xs2_index = e.currentTarget.dataset.index + 1;
107 | xs2_index = xs2_index>=3?0:xs2_index;
108 | this.setData({
109 | xs2_index:xs2_index,
110 | xs2:word[xs2_index]
111 | })
112 | showList(this);
113 | wx.showToast({title: word[xs2_index]+'·清单'})
114 | }
115 | })
116 |
117 | function showList(instance){
118 | var arr = all.list;
119 | if(instance.data.xs!=''){
120 | arr = arr.filter(function (elem) {
121 | return (elem.type == instance.data.xs);
122 | });
123 | }
124 |
125 | if(instance.data.xs2_index==1){
126 | arr = arr.filter(function (elem) {
127 | return (elem.finish == null);
128 | });
129 | }
130 | if(instance.data.xs2_index==2){
131 | arr = arr.filter(function (elem) {
132 | return (elem.finish == 'fn');
133 | });
134 | }
135 |
136 | instance.setData({
137 | list:arr,
138 | left:0
139 | })
140 | }
141 |
142 |
--------------------------------------------------------------------------------