306132416@qq.com 6 år sedan
incheckning
ff8621d1ec
59 ändrade filer med 12413 tillägg och 0 borttagningar
  1. 17 0
      App.vue
  2. 262 0
      common/airport.js
  3. 1 0
      common/city.data.js
  4. 97 0
      common/graceChecker.js
  5. 352 0
      common/html-parser.js
  6. 257 0
      common/permission.js
  7. 120 0
      common/uni-nvue.css
  8. 1447 0
      common/uni.css
  9. 73 0
      common/util.js
  10. 421 0
      components/uni-icon/uni-icon.vue
  11. 9 0
      components/uni-popup/config.json
  12. 83 0
      components/uni-popup/readme.md
  13. 206 0
      components/uni-popup/uni-popup.vue
  14. 11 0
      main.js
  15. 80 0
      manifest.json
  16. 32 0
      pages.json
  17. 8 0
      pages/chat/chat.vue
  18. 22 0
      pages/chat/chatDetail/chatDetail.vue
  19. 52 0
      pages/index/index.vue
  20. 22 0
      pages/selfInfo/selfDetail/selfDetail.vue
  21. 8 0
      pages/selfInfo/selfInfo.vue
  22. BIN
      static/alienware.png
  23. BIN
      static/logo.png
  24. 76 0
      uni.scss
  25. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  26. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  27. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  28. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/chat/chat.js.map
  29. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/chat/chatDetail/chatDetail.js.map
  30. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map
  31. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/selfInfo/selfDetail/selfDetail.js.map
  32. 1 0
      unpackage/dist/dev/.sourcemap/mp-weixin/pages/selfInfo/selfInfo.js.map
  33. 4 0
      unpackage/dist/dev/mp-weixin/app.js
  34. 17 0
      unpackage/dist/dev/mp-weixin/app.json
  35. 1 0
      unpackage/dist/dev/mp-weixin/app.wxss
  36. 107 0
      unpackage/dist/dev/mp-weixin/common/main.js
  37. 17 0
      unpackage/dist/dev/mp-weixin/common/main.wxss
  38. 157 0
      unpackage/dist/dev/mp-weixin/common/runtime.js
  39. 7703 0
      unpackage/dist/dev/mp-weixin/common/vendor.js
  40. 114 0
      unpackage/dist/dev/mp-weixin/pages/chat/chat.js
  41. 3 0
      unpackage/dist/dev/mp-weixin/pages/chat/chat.json
  42. 1 0
      unpackage/dist/dev/mp-weixin/pages/chat/chat.wxml
  43. 124 0
      unpackage/dist/dev/mp-weixin/pages/chat/chatDetail/chatDetail.js
  44. 3 0
      unpackage/dist/dev/mp-weixin/pages/chat/chatDetail/chatDetail.json
  45. 1 0
      unpackage/dist/dev/mp-weixin/pages/chat/chatDetail/chatDetail.wxml
  46. 163 0
      unpackage/dist/dev/mp-weixin/pages/index/index.js
  47. 4 0
      unpackage/dist/dev/mp-weixin/pages/index/index.json
  48. 1 0
      unpackage/dist/dev/mp-weixin/pages/index/index.wxml
  49. 43 0
      unpackage/dist/dev/mp-weixin/pages/index/index.wxss
  50. 124 0
      unpackage/dist/dev/mp-weixin/pages/selfInfo/selfDetail/selfDetail.js
  51. 3 0
      unpackage/dist/dev/mp-weixin/pages/selfInfo/selfDetail/selfDetail.json
  52. 1 0
      unpackage/dist/dev/mp-weixin/pages/selfInfo/selfDetail/selfDetail.wxml
  53. 114 0
      unpackage/dist/dev/mp-weixin/pages/selfInfo/selfInfo.js
  54. 3 0
      unpackage/dist/dev/mp-weixin/pages/selfInfo/selfInfo.json
  55. 1 0
      unpackage/dist/dev/mp-weixin/pages/selfInfo/selfInfo.wxml
  56. 33 0
      unpackage/dist/dev/mp-weixin/project.config.json
  57. 7 0
      unpackage/dist/dev/mp-weixin/sitemap.json
  58. BIN
      unpackage/dist/dev/mp-weixin/static/alienware.png
  59. BIN
      unpackage/dist/dev/mp-weixin/static/logo.png

+ 17 - 0
App.vue

@@ -0,0 +1,17 @@
+<script>
+	export default {
+		onLaunch: function() {
+			console.log('App Launch')
+		},
+		onShow: function() {
+			console.log('App Show')
+		},
+		onHide: function() {
+			console.log('App Hide')
+		}
+	}
+</script>
+
+<style>
+	/*每个页面公共css */
+</style>

+ 262 - 0
common/airport.js

@@ -0,0 +1,262 @@
+module.exports ={
+    "list": [{
+        "letter": "A",
+        "data": [
+            "阿克苏机场",
+            "阿拉山口机场",
+            "阿勒泰机场",
+            "阿里昆莎机场",
+            "安庆天柱山机场",
+            "澳门国际机场"
+        ]
+    }, {
+        "letter": "B",
+        "data": [
+            "保山机场",
+            "包头机场",
+            "北海福成机场",
+            "北京南苑机场",
+            "北京首都国际机场"
+        ]
+    }, {
+        "letter": "C",
+        "data": [
+            "长白山机场",
+            "长春龙嘉国际机场",
+            "常德桃花源机场",
+            "昌都邦达机场",
+            "长沙黄花国际机场",
+            "长治王村机场",
+            "常州奔牛机场",
+            "成都双流国际机场",
+            "赤峰机场"
+        ]
+    }, {
+        "letter": "D",
+        "data": [
+            "大理机场",
+            "大连周水子国际机场",
+            "大庆萨尔图机场",
+            "大同东王庄机场",
+            "达州河市机场",
+            "丹东浪头机场",
+            "德宏芒市机场",
+            "迪庆香格里拉机场",
+            "东营机场",
+            "敦煌机场"
+        ]
+    }, {
+        "letter": "E",
+        "data": [
+            "鄂尔多斯机场",
+            "恩施许家坪机场",
+            "二连浩特赛乌苏国际机场"
+        ]
+    }, {
+        "letter": "F",
+        "data": [
+            "阜阳西关机场",
+            "福州长乐国际机场"
+        ]
+    }, {
+        "letter": "G",
+        "data": [
+            "赣州黄金机场",
+            "格尔木机场",
+            "固原六盘山机场",
+            "广元盘龙机场",
+            "广州白云国际机场",
+            "桂林两江国际机场",
+            "贵阳龙洞堡国际机场"
+        ]
+    }, {
+        "letter": "H",
+        "data": [
+            "哈尔滨太平国际机场",
+            "哈密机场",
+            "海口美兰国际机场",
+            "海拉尔东山国际机场",
+            "邯郸机场",
+            "汉中机场",
+            "杭州萧山国际机场",
+            "合肥骆岗国际机场",
+            "和田机场",
+            "黑河机场",
+            "呼和浩特白塔国际机场",
+            "淮安涟水机场",
+            "黄山屯溪国际机场"
+        ]
+    }, {
+        "letter": "I",
+        "data": []
+    }, {
+        "letter": "J",
+        "data": [
+            "济南遥墙国际机场",
+            "济宁曲阜机场",
+            "鸡西兴凯湖机场",
+            "佳木斯东郊机场",
+            "嘉峪关机场",
+            "锦州小岭子机场",
+            "景德镇机场",
+            "井冈山机场",
+            "九江庐山机场",
+            "九寨黄龙机场"
+        ]
+    }, {
+        "letter": "K",
+        "data": [
+            "喀什机场",
+            "克拉玛依机场",
+            "库车龟兹机场",
+            "库尔勒机场",
+            "昆明巫家坝国际机场"
+        ]
+    }, {
+        "letter": "L",
+        "data": [
+            "拉萨贡嘎机场",
+            "兰州中川机场",
+            "丽江三义机场",
+            "黎平机场",
+            "连云港白塔埠机场",
+            "临沧机场",
+            "临沂机场",
+            "林芝米林机场",
+            "柳州白莲机场",
+            "龙岩冠豸山机场",
+            "泸州蓝田机场",
+            "洛阳北郊机场"
+        ]
+    }, {
+        "letter": "M",
+        "data": [
+            "满洲里西郊机场",
+            "绵阳南郊机场",
+            "漠河古莲机场",
+            "牡丹江海浪机场"
+        ]
+    }, {
+        "letter": "N",
+        "data": [
+            "南昌昌北国际机场",
+            "南充高坪机场",
+            "南京禄口国际机场",
+            "南宁吴圩机场",
+            "南通兴东机场",
+            "南阳姜营机场",
+            "宁波栎社国际机场"
+        ]
+    }, {
+        "letter": "O",
+        "data": []
+    }, {
+        "letter": "P",
+        "data": [
+            "普洱思茅机场"
+        ]
+    }, {
+        "letter": "Q",
+        "data": [
+            "齐齐哈尔三家子机场",
+            "秦皇岛山海关机场",
+            "青岛流亭国际机场",
+            "衢州机场",
+            "泉州晋江机场"
+        ]
+    }, {
+        "letter": "R",
+        "data": [
+            "日喀则和平机场"
+        ]
+    }, {
+        "letter": "S",
+        "data": [
+            "三亚凤凰国际机场",
+            "汕头外砂机场",
+            "上海虹桥国际机场",
+            "上海浦东国际机场",
+            "深圳宝安国际机场",
+            "沈阳桃仙国际机场",
+            "石家庄正定国际机场",
+            "苏南硕放国际机场"
+        ]
+    }, {
+        "letter": "T",
+        "data": [
+            "塔城机场",
+            "太原武宿国际机场",
+            "台州路桥机场 (黄岩机场)",
+            "唐山三女河机场",
+            "腾冲驼峰机场",
+            "天津滨海国际机场",
+            "通辽机场",
+            "铜仁凤凰机场"
+        ]
+    }, {
+        "letter": "U",
+        "data": []
+    }, {
+        "letter": "V",
+        "data": []
+    }, {
+        "letter": "W",
+        "data": [
+            "万州五桥机场",
+            "潍坊机场",
+            "威海大水泊机场",
+            "文山普者黑机场",
+            "温州永强国际机场",
+            "乌海机场",
+            "武汉天河国际机场",
+            "乌兰浩特机场",
+            "乌鲁木齐地窝堡国际机场",
+            "武夷山机场",
+            "梧州长洲岛机场"
+        ]
+    }, {
+        "letter": "X",
+        "data": [
+            "西安咸阳国际机场",
+            "西昌青山机场",
+            "锡林浩特机场",
+            "西宁曹家堡机场",
+            "西双版纳嘎洒机场",
+            "厦门高崎国际机场",
+            "香港国际机场",
+            "襄阳刘集机场",
+            "兴义机场",
+            "徐州观音机场"
+        ]
+    }, {
+        "letter": "Y",
+        "data": [
+            "延安二十里堡机场",
+            "盐城机场",
+            "延吉朝阳川机场",
+            "烟台莱山国际机场",
+            "宜宾菜坝机场",
+            "宜昌三峡机场",
+            "伊春林都机场",
+            "伊宁机场",
+            "义乌机场",
+            "银川河东机场",
+            "永州零陵机场",
+            "榆林榆阳机场",
+            "玉树巴塘机场",
+            "运城张孝机场"
+        ]
+    }, {
+        "letter": "Z",
+        "data": [
+            "湛江机场",
+            "昭通机场",
+            "郑州新郑国际机场",
+            "芷江机场",
+            "重庆江北国际机场",
+            "中卫香山机场",
+            "舟山朱家尖机场",
+            "珠海三灶机场"
+        ]
+    }]
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
common/city.data.js


+ 97 - 0
common/graceChecker.js

@@ -0,0 +1,97 @@
+/**
+数据验证(表单验证)
+来自 grace.hcoder.net 
+作者 hcoder 深海
+*/
+module.exports = {
+	error:'',
+	check : function (data, rule){
+		for(var i = 0; i < rule.length; i++){
+			if (!rule[i].checkType){return true;}
+			if (!rule[i].name) {return true;}
+			if (!rule[i].errorMsg) {return true;}
+			if (!data[rule[i].name]) {this.error = rule[i].errorMsg; return false;}
+			switch (rule[i].checkType){
+				case 'string':
+					var reg = new RegExp('^.{' + rule[i].checkRule + '}$');
+					if(!reg.test(data[rule[i].name])) {this.error = rule[i].errorMsg; return false;}
+				break;
+				case 'int':
+					var reg = new RegExp('^(-[1-9]|[1-9])[0-9]{' + rule[i].checkRule + '}$');
+					if(!reg.test(data[rule[i].name])) {this.error = rule[i].errorMsg; return false;}
+					break;
+				break;
+				case 'between':
+					if (!this.isNumber(data[rule[i].name])){
+						this.error = rule[i].errorMsg;
+						return false;
+					}
+					var minMax = rule[i].checkRule.split(',');
+					minMax[0] = Number(minMax[0]);
+					minMax[1] = Number(minMax[1]);
+					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
+						this.error = rule[i].errorMsg;
+						return false;
+					}
+				break;
+				case 'betweenD':
+					var reg = /^-?[1-9][0-9]?$/;
+					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+					var minMax = rule[i].checkRule.split(',');
+					minMax[0] = Number(minMax[0]);
+					minMax[1] = Number(minMax[1]);
+					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
+						this.error = rule[i].errorMsg;
+						return false;
+					}
+				break;
+				case 'betweenF': 
+					var reg = /^-?[0-9][0-9]?.+[0-9]+$/;
+					if (!reg.test(data[rule[i].name])){this.error = rule[i].errorMsg; return false;}
+					var minMax = rule[i].checkRule.split(',');
+					minMax[0] = Number(minMax[0]);
+					minMax[1] = Number(minMax[1]);
+					if (data[rule[i].name] > minMax[1] || data[rule[i].name] < minMax[0]) {
+						this.error = rule[i].errorMsg;
+						return false;
+					}
+				break;
+				case 'same':
+					if (data[rule[i].name] != rule[i].checkRule) { this.error = rule[i].errorMsg; return false;}
+				break;
+				case 'notsame':
+					if (data[rule[i].name] == rule[i].checkRule) { this.error = rule[i].errorMsg; return false; }
+				break;
+				case 'email':
+					var reg = /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
+					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+				break;
+				case 'phoneno':
+					var reg = /^1[0-9]{10,10}$/;
+					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+				break;
+				case 'zipcode':
+					var reg = /^[0-9]{6}$/;
+					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+				break;
+				case 'reg':
+					var reg = new RegExp(rule[i].checkRule);
+					if (!reg.test(data[rule[i].name])) { this.error = rule[i].errorMsg; return false; }
+				break;
+				case 'in':
+					if(rule[i].checkRule.indexOf(data[rule[i].name]) == -1){
+						this.error = rule[i].errorMsg; return false;
+					}
+				break;
+				case 'notnull':
+					if(data[rule[i].name] == null || data[rule[i].name].length < 1){this.error = rule[i].errorMsg; return false;}
+				break;
+			}
+		}
+		return true;
+	},
+	isNumber : function (checkVal){
+		var reg = /^-?[1-9][0-9]?.?[0-9]*$/;
+		return reg.test(checkVal);
+	}
+}

+ 352 - 0
common/html-parser.js

@@ -0,0 +1,352 @@
+/*
+ * HTML5 Parser By Sam Blowes
+ *
+ * Designed for HTML5 documents
+ *
+ * Original code by John Resig (ejohn.org)
+ * http://ejohn.org/blog/pure-javascript-html-parser/
+ * Original code by Erik Arvidsson, Mozilla Public License
+ * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
+ *
+ * ----------------------------------------------------------------------------
+ * License
+ * ----------------------------------------------------------------------------
+ *
+ * This code is triple licensed using Apache Software License 2.0,
+ * Mozilla Public License or GNU Public License
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.  You may obtain a copy
+ * of the License at http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is Simple HTML Parser.
+ *
+ * The Initial Developer of the Original Code is Erik Arvidsson.
+ * Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights
+ * Reserved.
+ *
+ * ////////////////////////////////////////////////////////////////////////////
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ * ----------------------------------------------------------------------------
+ * Usage
+ * ----------------------------------------------------------------------------
+ *
+ * // Use like so:
+ * HTMLParser(htmlString, {
+ *     start: function(tag, attrs, unary) {},
+ *     end: function(tag) {},
+ *     chars: function(text) {},
+ *     comment: function(text) {}
+ * });
+ *
+ * // or to get an XML string:
+ * HTMLtoXML(htmlString);
+ *
+ * // or to get an XML DOM Document
+ * HTMLtoDOM(htmlString);
+ *
+ * // or to inject into an existing document/DOM node
+ * HTMLtoDOM(htmlString, document);
+ * HTMLtoDOM(htmlString, document.body);
+ *
+ */
+// Regular Expressions for parsing tags and attributes
+var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; // Empty Elements - HTML 5
+
+var empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); // Block Elements - HTML 5
+// fixed by xxx 将 ins 标签从块级名单中移除
+
+var block = makeMap('a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'); // Inline Elements - HTML 5
+
+var inline = makeMap('abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'); // Elements that you can, intentionally, leave open
+// (and which close themselves)
+
+var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); // Attributes that have their values filled in disabled="disabled"
+
+var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); // Special Elements (can contain anything)
+
+var special = makeMap('script,style');
+function HTMLParser(html, handler) {
+  var index;
+  var chars;
+  var match;
+  var stack = [];
+  var last = html;
+
+  stack.last = function () {
+    return this[this.length - 1];
+  };
+
+  while (html) {
+    chars = true; // Make sure we're not in a script or style element
+
+    if (!stack.last() || !special[stack.last()]) {
+      // Comment
+      if (html.indexOf('<!--') == 0) {
+        index = html.indexOf('-->');
+
+        if (index >= 0) {
+          if (handler.comment) {
+            handler.comment(html.substring(4, index));
+          }
+
+          html = html.substring(index + 3);
+          chars = false;
+        } // end tag
+
+      } else if (html.indexOf('</') == 0) {
+        match = html.match(endTag);
+
+        if (match) {
+          html = html.substring(match[0].length);
+          match[0].replace(endTag, parseEndTag);
+          chars = false;
+        } // start tag
+
+      } else if (html.indexOf('<') == 0) {
+        match = html.match(startTag);
+
+        if (match) {
+          html = html.substring(match[0].length);
+          match[0].replace(startTag, parseStartTag);
+          chars = false;
+        }
+      }
+
+      if (chars) {
+        index = html.indexOf('<');
+        var text = index < 0 ? html : html.substring(0, index);
+        html = index < 0 ? '' : html.substring(index);
+
+        if (handler.chars) {
+          handler.chars(text);
+        }
+      }
+    } else {
+      html = html.replace(new RegExp('([\\s\\S]*?)<\/' + stack.last() + '[^>]*>'), function (all, text) {
+        text = text.replace(/<!--([\s\S]*?)-->|<!\[CDATA\[([\s\S]*?)]]>/g, '$1$2');
+
+        if (handler.chars) {
+          handler.chars(text);
+        }
+
+        return '';
+      });
+      parseEndTag('', stack.last());
+    }
+
+    if (html == last) {
+      throw 'Parse Error: ' + html;
+    }
+
+    last = html;
+  } // Clean up any remaining tags
+
+
+  parseEndTag();
+
+  function parseStartTag(tag, tagName, rest, unary) {
+    tagName = tagName.toLowerCase();
+
+    if (block[tagName]) {
+      while (stack.last() && inline[stack.last()]) {
+        parseEndTag('', stack.last());
+      }
+    }
+
+    if (closeSelf[tagName] && stack.last() == tagName) {
+      parseEndTag('', tagName);
+    }
+
+    unary = empty[tagName] || !!unary;
+
+    if (!unary) {
+      stack.push(tagName);
+    }
+
+    if (handler.start) {
+      var attrs = [];
+      rest.replace(attr, function (match, name) {
+        var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : '';
+        attrs.push({
+          name: name,
+          value: value,
+          escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') // "
+
+        });
+      });
+
+      if (handler.start) {
+        handler.start(tagName, attrs, unary);
+      }
+    }
+  }
+
+  function parseEndTag(tag, tagName) {
+    // If no tag name is provided, clean shop
+    if (!tagName) {
+      var pos = 0;
+    } // Find the closest opened tag of the same type
+    else {
+        for (var pos = stack.length - 1; pos >= 0; pos--) {
+          if (stack[pos] == tagName) {
+            break;
+          }
+        }
+      }
+
+    if (pos >= 0) {
+      // Close all the open elements, up the stack
+      for (var i = stack.length - 1; i >= pos; i--) {
+        if (handler.end) {
+          handler.end(stack[i]);
+        }
+      } // Remove the open elements from the stack
+
+
+      stack.length = pos;
+    }
+  }
+}
+
+function makeMap(str) {
+  var obj = {};
+  var items = str.split(',');
+
+  for (var i = 0; i < items.length; i++) {
+    obj[items[i]] = true;
+  }
+
+  return obj;
+}
+
+function removeDOCTYPE(html) {
+  return html.replace(/<\?xml.*\?>\n/, '').replace(/<!doctype.*>\n/, '').replace(/<!DOCTYPE.*>\n/, '');
+}
+
+function parseAttrs(attrs) {
+  return attrs.reduce(function (pre, attr) {
+    var value = attr.value;
+    var name = attr.name;
+
+    if (pre[name]) {
+			pre[name] = pre[name] + " " + value;
+    } else {
+			pre[name] = value;
+    }
+
+    return pre;
+  }, {});
+}
+
+function parseHtml(html) {
+  html = removeDOCTYPE(html);
+  var stacks = [];
+  var results = {
+    node: 'root',
+    children: []
+  };
+  HTMLParser(html, {
+    start: function start(tag, attrs, unary) {
+      var node = {
+        name: tag
+      };
+
+      if (attrs.length !== 0) {
+        node.attrs = parseAttrs(attrs);
+      }
+
+      if (unary) {
+        var parent = stacks[0] || results;
+
+        if (!parent.children) {
+          parent.children = [];
+        }
+
+        parent.children.push(node);
+      } else {
+        stacks.unshift(node);
+      }
+    },
+    end: function end(tag) {
+      var node = stacks.shift();
+      if (node.name !== tag) console.error('invalid state: mismatch end tag');
+
+      if (stacks.length === 0) {
+        results.children.push(node);
+      } else {
+        var parent = stacks[0];
+
+        if (!parent.children) {
+          parent.children = [];
+        }
+
+        parent.children.push(node);
+      }
+    },
+    chars: function chars(text) {
+      var node = {
+        type: 'text',
+        text: text
+      };
+
+      if (stacks.length === 0) {
+        results.children.push(node);
+      } else {
+        var parent = stacks[0];
+
+        if (!parent.children) {
+          parent.children = [];
+        }
+
+        parent.children.push(node);
+      }
+    },
+    comment: function comment(text) {
+      var node = {
+        node: 'comment',
+        text: text
+      };
+      var parent = stacks[0];
+
+      if (!parent.children) {
+        parent.children = [];
+      }
+
+      parent.children.push(node);
+    }
+  });
+  return results.children;
+}
+
+export default parseHtml;

+ 257 - 0
common/permission.js

@@ -0,0 +1,257 @@
+/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启
+
+var isIOS
+
+function album() {
+    var result = 0;
+    var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
+    var authStatus = PHPhotoLibrary.authorizationStatus();
+    if (authStatus === 0) {
+        result = null;
+    } else if (authStatus == 3) {
+        result = 1;
+    } else {
+        result = 0;
+    }
+    plus.ios.deleteObject(PHPhotoLibrary);
+    return result;
+}
+
+function camera() {
+    var result = 0;
+    var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
+    var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
+    if (authStatus === 0) {
+        result = null;
+    } else if (authStatus == 3) {
+        result = 1;
+    } else {
+        result = 0;
+    }
+    plus.ios.deleteObject(AVCaptureDevice);
+    return result;
+}
+
+function location() {
+    var result = 0;
+    var cllocationManger = plus.ios.import("CLLocationManager");
+    var enable = cllocationManger.locationServicesEnabled();
+    var status = cllocationManger.authorizationStatus();
+    if (!enable) {
+        result = 2;
+    } else if (status === 0) {
+        result = null;
+    } else if (status === 3 || status === 4) {
+        result = 1;
+    } else {
+        result = 0;
+    }
+    plus.ios.deleteObject(cllocationManger);
+    return result;
+}
+
+function push() {
+    var result = 0;
+    var UIApplication = plus.ios.import("UIApplication");
+    var app = UIApplication.sharedApplication();
+    var enabledTypes = 0;
+    if (app.currentUserNotificationSettings) {
+        var settings = app.currentUserNotificationSettings();
+        enabledTypes = settings.plusGetAttribute("types");
+        if (enabledTypes == 0) {
+            result = 0;
+            console.log("推送权限没有开启");
+        } else {
+            result = 1;
+            console.log("已经开启推送功能!")
+        }
+        plus.ios.deleteObject(settings);
+    } else {
+        enabledTypes = app.enabledRemoteNotificationTypes();
+        if (enabledTypes == 0) {
+            result = 3;
+            console.log("推送权限没有开启!");
+        } else {
+            result = 4;
+            console.log("已经开启推送功能!")
+        }
+    }
+    plus.ios.deleteObject(app);
+    plus.ios.deleteObject(UIApplication);
+    return result;
+}
+
+function contact() {
+    var result = 0;
+    var CNContactStore = plus.ios.import("CNContactStore");
+    var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
+    if (authStatus === 0) {
+        result = null;
+    } else if (authStatus == 3) {
+        result = 1;
+    } else {
+        result = 0;
+    }
+    plus.ios.deleteObject(CNContactStore);
+    return result;
+}
+
+function record() {
+    var result = null;
+    var avaudiosession = plus.ios.import("AVAudioSession");
+    var avaudio = avaudiosession.sharedInstance();
+    var status = avaudio.recordPermission();
+    console.log("permissionStatus:" + status);
+    if (status === 1970168948) {
+        result = null;
+    } else if (status === 1735552628) {
+        result = 1;
+    } else {
+        result = 0;
+    }
+    plus.ios.deleteObject(avaudiosession);
+    return result;
+}
+
+function calendar() {
+    var result = null;
+    var EKEventStore = plus.ios.import("EKEventStore");
+    var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
+    if (ekAuthStatus == 3) {
+        result = 1;
+        console.log("日历权限已经开启");
+    } else {
+        console.log("日历权限没有开启");
+    }
+    plus.ios.deleteObject(EKEventStore);
+    return result;
+}
+
+function memo() {
+    var result = null;
+    var EKEventStore = plus.ios.import("EKEventStore");
+    var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
+    if (ekAuthStatus == 3) {
+        result = 1;
+        console.log("备忘录权限已经开启");
+    } else {
+        console.log("备忘录权限没有开启");
+    }
+    plus.ios.deleteObject(EKEventStore);
+    return result;
+}
+
+
+function requestIOS(permissionID) {
+    return new Promise((resolve, reject) => {
+        switch (permissionID) {
+            case "push":
+                resolve(push());
+                break;
+            case "location":
+                resolve(location());
+                break;
+            case "record":
+                resolve(record());
+                break;
+            case "camera":
+                resolve(camera());
+                break;
+            case "album":
+                resolve(album());
+                break;
+            case "contact":
+                resolve(contact());
+                break;
+            case "calendar":
+                resolve(calendar());
+                break;
+            case "memo":
+                resolve(memo());
+                break;
+            default:
+                resolve(0);
+                break;
+        }
+    });
+}
+
+function requestAndroid(permissionID) {
+    return new Promise((resolve, reject) => {
+        plus.android.requestPermissions(
+            [permissionID],
+            function(resultObj) {
+                var result = 0;
+                for (var i = 0; i < resultObj.granted.length; i++) {
+                    var grantedPermission = resultObj.granted[i];
+                    console.log('已获取的权限:' + grantedPermission);
+                    result = 1
+                }
+                for (var i = 0; i < resultObj.deniedPresent.length; i++) {
+                    var deniedPresentPermission = resultObj.deniedPresent[i];
+                    console.log('拒绝本次申请的权限:' + deniedPresentPermission);
+                    result = 0
+                }
+                for (var i = 0; i < resultObj.deniedAlways.length; i++) {
+                    var deniedAlwaysPermission = resultObj.deniedAlways[i];
+                    console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
+                    result = -1
+                }
+                resolve(result);
+            },
+            function(error) {
+                resolve({
+                    code: error.code,
+                    message: error.message
+                });
+            }
+        );
+    });
+}
+
+function gotoAppPermissionSetting() {
+    if (permission.isIOS) {
+        var UIApplication = plus.ios.import("UIApplication");
+        var application2 = UIApplication.sharedApplication();
+        var NSURL2 = plus.ios.import("NSURL");
+        var setting2 = NSURL2.URLWithString("app-settings:");
+        application2.openURL(setting2);
+        plus.ios.deleteObject(setting2);
+        plus.ios.deleteObject(NSURL2);
+        plus.ios.deleteObject(application2);
+    } else {
+        var Intent = plus.android.importClass("android.content.Intent");
+        var Settings = plus.android.importClass("android.provider.Settings");
+        var Uri = plus.android.importClass("android.net.Uri");
+        var mainActivity = plus.android.runtimeMainActivity();
+        var intent = new Intent();
+        intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+        var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
+        intent.setData(uri);
+        mainActivity.startActivity(intent);
+    }
+}
+
+function gotoiOSPermissionSetting() {
+    var UIApplication = plus.ios.import("UIApplication");
+    var application2 = UIApplication.sharedApplication();
+    var NSURL2 = plus.ios.import("NSURL");
+    var setting2 = NSURL2.URLWithString("App-prefs:root=General");
+    application2.openURL(setting2);
+
+    plus.ios.deleteObject(setting2);
+    plus.ios.deleteObject(NSURL2);
+    plus.ios.deleteObject(application2);
+}
+
+const permission = {
+    get isIOS(){
+        return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios')
+    },
+    requestIOS: requestIOS,
+    requestAndroid: requestAndroid,
+    gotoAppSetting: gotoAppPermissionSetting,
+    gotoiOSSetting: gotoiOSPermissionSetting
+}
+
+module.exports = permission

+ 120 - 0
common/uni-nvue.css

@@ -0,0 +1,120 @@
+/* #ifndef APP-PLUS-NVUE */
+page {
+    min-height: 100%;
+    height: auto;
+}
+/* #endif */
+
+/* 解决头条小程序字体图标不显示问题,因为头条运行时自动插入了span标签,且有全局字体 */
+/* #ifdef MP-TOUTIAO */
+text :not(view) {
+    font-family: uniicons;
+}
+/* #endif */
+
+.uni-icon {
+    font-family: uniicons;
+    font-weight: normal;
+}
+
+.uni-container {
+    padding: 15px;
+    background-color: #f8f8f8;
+}
+
+.uni-header-logo {
+    padding: 15px 15px;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    margin-top: 10upx;
+}
+
+.uni-header-image {
+    width: 80px;
+    height: 80px;
+}
+
+.uni-hello-text {
+    margin-bottom: 20px;
+}
+
+.hello-text {
+    color: #7A7E83;
+    font-size: 14px;
+    line-height: 20px;
+}
+
+.hello-link {
+    color: #7A7E83;
+    font-size: 14px;
+    line-height: 20px;
+}
+
+.uni-panel {
+    margin-bottom: 12px;
+}
+
+.uni-panel-h {
+    background-color: #ffffff;
+    flex-direction: row;
+    align-items: center;
+    padding: 12px;
+}
+/*
+.uni-panel-h:active {
+    background-color: #f8f8f8;
+}
+ */
+.uni-panel-h-on {
+    background-color: #f0f0f0;
+}
+
+.uni-panel-text {
+    flex: 1;
+    color: #000000;
+    font-size: 14px;
+    font-weight: normal;
+}
+
+.uni-panel-icon {
+    margin-left: 15px;
+    color: #999999;
+    font-size: 14px;
+    font-weight: normal;
+    transform: rotate(0deg);
+    transition-duration: 0s;
+    transition-property: transform;
+}
+
+.uni-panel-icon-on {
+    transform: rotate(180deg);
+}
+
+.uni-navigate-item {
+    flex-direction: row;
+    align-items: center;
+    background-color: #FFFFFF;
+    border-top-style: solid;
+    border-top-color: #f0f0f0;
+    border-top-width: 1px;
+    padding: 12px;
+}
+
+.uni-navigate-item:active {
+    background-color: #f8f8f8;
+}
+
+.uni-navigate-text {
+    flex: 1;
+    color: #000000;
+    font-size: 14px;
+    font-weight: normal;
+}
+
+.uni-navigate-icon {
+    margin-left: 15px;
+    color: #999999;
+    font-size: 14px;
+    font-weight: normal;
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1447 - 0
common/uni.css


+ 73 - 0
common/util.js

@@ -0,0 +1,73 @@
+function formatTime(time) {
+	if (typeof time !== 'number' || time < 0) {
+		return time
+	}
+
+	var hour = parseInt(time / 3600)
+	time = time % 3600
+	var minute = parseInt(time / 60)
+	time = time % 60
+	var second = time
+
+	return ([hour, minute, second]).map(function (n) {
+		n = n.toString()
+		return n[1] ? n : '0' + n
+	}).join(':')
+}
+
+function formatLocation(longitude, latitude) {
+	if (typeof longitude === 'string' && typeof latitude === 'string') {
+		longitude = parseFloat(longitude)
+		latitude = parseFloat(latitude)
+	}
+
+	longitude = longitude.toFixed(2)
+	latitude = latitude.toFixed(2)
+
+	return {
+		longitude: longitude.toString().split('.'),
+		latitude: latitude.toString().split('.')
+	}
+}
+var dateUtils = {
+	UNITS: {
+		'年': 31557600000,
+		'月': 2629800000,
+		'天': 86400000,
+		'小时': 3600000,
+		'分钟': 60000,
+		'秒': 1000
+	},
+	humanize: function (milliseconds) {
+		var humanize = '';
+		for (var key in this.UNITS) {
+			if (milliseconds >= this.UNITS[key]) {
+				humanize = Math.floor(milliseconds / this.UNITS[key]) + key + '前';
+				break;
+			}
+		}
+		return humanize || '刚刚';
+	},
+	format: function (dateStr) {
+		var date = this.parse(dateStr)
+		var diff = Date.now() - date.getTime();
+		if (diff < this.UNITS['天']) {
+			return this.humanize(diff);
+		}
+		var _format = function (number) {
+			return (number < 10 ? ('0' + number) : number);
+		};
+		return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' +
+			_format(date.getHours()) + ':' + _format(date.getMinutes());
+	},
+	parse: function (str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象
+		var a = str.split(/[^0-9]/);
+		return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
+	}
+};
+
+module.exports = {
+	formatTime: formatTime,
+	formatLocation: formatLocation,
+	dateUtils: dateUtils
+}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 421 - 0
components/uni-icon/uni-icon.vue


+ 9 - 0
components/uni-popup/config.json

@@ -0,0 +1,9 @@
+{
+	"id":"329",
+	"name":"PopUp",
+	"desc":"弹出层",
+	"url":"popup",
+	"edition":"1.1.2",
+	"path":"https://ext.dcloud.net.cn/plugin?id=329",
+	"update_log":"- 新增 显示弹窗属性\n- 修复 h5 取消导航栏,顶部空白问题"
+}

+ 83 - 0
components/uni-popup/readme.md

@@ -0,0 +1,83 @@
+## Popup 弹出层
+
+弹出层组件,为了解决遮罩弹层的问题。组件名:``uni-popup``,代码块: uPopup。
+
+
+**使用方式:**
+
+在 ``script`` 中引用组件 
+
+```javascript
+import uniPopup from "@/components/uni-popup/uni-popup.vue"
+export default {
+    components: {uniPopup}
+}
+```
+
+**基本用法**
+
+```html
+<uni-popup ref="popup" type="bottom">底部弹出 Popup</uni-popup>
+```
+
+**属性说明:**
+
+|  属性名	|    类型	| 默认值| 说明															|
+| ---		| ---		| ---	| ---															|
+| animation	| Boolean	|true	| 是否开启动画													|
+| type		| String	|center	| 弹出方式,可选值:top(顶部),center(居中),bottom(底部)	|
+| show		| Boolean	|false	| 显示弹窗	|
+| custom	| Boolean	|false	| 是否自定义内容												|
+| maskClick	| Boolean	|true	| 蒙版点击是否关闭弹窗											|
+
+
+**方法说明:**
+通过 `ref` 获取组件方法
+
+|事件称名	|说明		|
+|---		|----		|
+|open		|打开弹出层	|
+|close		|关闭弹出层	|
+
+```html
+<view>
+	<button @click="openPopup">打开弹出层</button>
+	<uni-popup ref="popup" type="center">
+		弹出层示例
+		<button @click="closePopup">关闭弹出层</button>
+	</uni-popup>
+</view>
+```
+
+```javascript
+export default {
+	methods:{
+		openPopup(){
+			this.$refs.popup.open()
+		},
+		closePopup(){
+			this.$refs.popup.close()
+		}
+	}
+}
+```
+
+Tips 
+- show 的作用与 open() 效果一致 ,在使用中显示弹窗二者只能选择其一。如果使用 show 显示弹窗,那么关闭弹窗时,应将 show 置为 false
+
+### 更新日志
+
+**1.1.2**
+- 新增 显示弹窗属性
+- 修复 h5 取消导航栏,顶部空白问题
+
+**1.1.1**
+- 修复 图片不显示的问题
+
+**1.1.0**
+- 新增 动画效果
+- 修复 示例底部弹出样式错乱的 bug
+- 优化 代码重构 可完全自定义内容
+
+**1.0.0**
+- 初始化项目

+ 206 - 0
components/uni-popup/uni-popup.vue

@@ -0,0 +1,206 @@
+<template>
+  <view
+    v-if="showPopup"
+    class="uni-popup">
+    <view
+      :class="[ani, animation ? 'ani' : '', !custom ? 'uni-custom' : '']"
+      class="uni-popup__mask"
+      @click="close(true)" />
+    <view
+      :class="[type, ani, animation ? 'ani' : '', !custom ? 'uni-custom' : '']"
+      class="uni-popup__wrapper"
+      @click="close(true)">
+      <view
+        class="uni-popup__wrapper-box"
+        @click.stop="clear">
+        <slot />
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'UniPopup',
+  props: {
+    // 开启动画
+    animation: {
+      type: Boolean,
+      default: true
+    },
+    // 弹出层类型,可选值,top: 顶部弹出层;bottom:底部弹出层;center:全屏弹出层
+    type: {
+      type: String,
+      default: 'center'
+    },
+    // 是否开启自定义
+    custom: {
+      type: Boolean,
+      default: false
+    },
+    // maskClick
+    maskClick: {
+      type: Boolean,
+      default: true
+    },
+    show: {
+      type: Boolean,
+      default: true
+    }
+  },
+  data () {
+    return {
+      ani: '',
+      showPopup: false
+    }
+  },
+  watch: {
+    show (newValue) {
+      if (newValue) {
+        this.open()
+      } else {
+        this.close()
+      }
+    }
+  },
+  created () {},
+  methods: {
+    clear () {},
+    open () {
+      this.$emit('change', {
+        show: true
+      })
+      this.showPopup = true
+      this.$nextTick(() => {
+        setTimeout(() => {
+          this.ani = 'uni-' + this.type
+        }, 30)
+      })
+    },
+    close (type) {
+      if (!this.maskClick && type) return
+      this.$emit('change', {
+        show: false
+      })
+      this.ani = ''
+      this.$nextTick(() => {
+        setTimeout(() => {
+          this.showPopup = false
+        }, 300)
+      })
+    }
+  }
+}
+</script>
+<style lang="scss">
+.uni-popup {
+  position: fixed;
+  /*  #ifdef  H5  */
+  top: 0px;
+  // top: 50px;
+  /*  #endif  */
+  /*  #ifndef  H5  */
+  top: 0px;
+  /*  #endif  */
+  bottom: 0;
+  left: 0;
+  right: 0;
+  z-index: 99999;
+  overflow: hidden;
+
+  &__mask {
+    position: absolute;
+    top: 0;
+    bottom: 0;
+    left: 0;
+    right: 0;
+    z-index: 998;
+    background: rgba(0, 0, 0, 0.4);
+    opacity: 0;
+
+    &.ani {
+      transition: all 0.3s;
+    }
+
+    &.uni-top,
+    &.uni-bottom,
+    &.uni-center {
+      opacity: 1;
+    }
+  }
+
+  &__wrapper {
+    position: absolute;
+    z-index: 999;
+    box-sizing: border-box;
+
+    &.ani {
+      transition: all 0.3s;
+    }
+
+    &.top {
+      top: 0;
+      left: 0;
+      width: 100%;
+      transform: translateY(-100%);
+    }
+
+    &.bottom {
+      bottom: 0;
+      left: 0;
+      width: 100%;
+      transform: translateY(100%);
+    }
+
+    &.center {
+      width: 100%;
+      height: 100%;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      transform: scale(1.2);
+      opacity: 0;
+    }
+
+    &-box {
+      position: relative;
+      box-sizing: border-box;
+    }
+
+    &.uni-custom {
+      & .uni-popup__wrapper-box {
+        padding: 30upx;
+        background: #fff;
+      }
+
+      &.center {
+        & .uni-popup__wrapper-box {
+          position: relative;
+          max-width: 80%;
+          max-height: 80%;
+          overflow-y: scroll;
+        }
+      }
+
+      &.top,
+      &.bottom {
+        & .uni-popup__wrapper-box {
+          width: 100%;
+          max-height: 500px;
+          overflow-y: scroll;
+        }
+      }
+    }
+
+    &.uni-top,
+    &.uni-bottom {
+      transform: translateY(0);
+    }
+
+    &.uni-center {
+      transform: scale(1);
+      opacity: 1;
+    }
+  }
+}
+</style>

+ 11 - 0
main.js

@@ -0,0 +1,11 @@
+import Vue from 'vue'
+import App from './App'
+
+Vue.config.productionTip = false
+
+App.mpType = 'app'
+
+const app = new Vue({
+    ...App
+})
+app.$mount()

+ 80 - 0
manifest.json

@@ -0,0 +1,80 @@
+{
+	"name" : "myChannelPrice",
+	"appid" : "__UNI__B2ACDFB",
+	"description": "",
+	"versionName": "1.0.0",
+	"versionCode": "100",
+	"transformPx": false,
+    /* 5+App特有相关 */
+	"app-plus": {
+		"usingComponents": true,
+		"splashscreen": {
+			"alwaysShowBeforeRender": true,
+			"waiting": true,
+			"autoclose": true,
+			"delay": 0
+		},
+        /* 模块配置 */
+		"modules": {
+
+		},
+        /* 应用发布信息 */
+		"distribute": {
+            /* android打包配置 */
+			"android": {
+				"permissions": ["<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
+					"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+					"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+					"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.CAMERA\"/>",
+					"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+					"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
+					"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+					"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+					"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
+					"<uses-feature android:name=\"android.hardware.camera\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
+				]
+			},
+            /* ios打包配置 */
+			"ios": {
+
+			},
+            /* SDK配置 */
+			"sdkConfigs": {
+
+			}
+		}
+	},
+    /* 快应用特有相关 */
+	"quickapp": {
+
+	},
+    /* 小程序特有相关 */
+	"mp-weixin": {
+		"appid": "",
+		"setting": {
+			"urlCheck": false
+		},
+		"usingComponents": true
+	},
+    "mp-alipay" : {
+        "usingComponents" : true
+    },
+    "mp-baidu" : {
+        "usingComponents" : true
+    },
+    "mp-toutiao" : {
+        "usingComponents" : true
+    }
+}

+ 32 - 0
pages.json

@@ -0,0 +1,32 @@
+{
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+			"path": "pages/index/index",
+			"style": {
+				"navigationBarTitleText": "首页"
+			}
+		}
+	    ,{
+            "path" : "pages/chat/chat",
+            "style" : {}
+        }
+        ,{
+            "path" : "pages/chat/chatDetail/chatDetail",
+            "style" : {}
+        }
+		,{
+		    "path" : "pages/selfInfo/selfInfo",
+		    "style" : {}
+		}
+        ,{
+            "path" : "pages/selfInfo/selfDetail/selfDetail",
+            "style" : {}
+        }
+    ],
+	"globalStyle": {
+		"navigationBarTextStyle": "black",
+		"navigationBarTitleText": "mini_rabot",
+		"navigationBarBackgroundColor": "#F8F8F8",
+		"backgroundColor": "#F8F8F8"
+	}
+}

+ 8 - 0
pages/chat/chat.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 22 - 0
pages/chat/chatDetail/chatDetail.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 52 - 0
pages/index/index.vue

@@ -0,0 +1,52 @@
+<template>
+	<view class="content">
+		<image class="logo" src="/static/logo.png" mode="aspectFit"></image>
+		<view class="text-area">
+			<text class="title">{{title}}</text>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				title: 'RABOT'
+			}
+		},
+		onLoad() {
+
+		},
+		methods: {
+
+		}
+	}
+</script>
+
+<style>
+	.content {
+		display: flex;
+		flex-direction: column;
+		align-items: center;
+		justify-content: center;
+	}
+
+	.logo {
+		height: 200upx;
+		width: 200upx;
+		margin-top: 200upx;
+		margin-left: auto;
+		margin-right: auto;
+		margin-bottom: 50upx;
+	}
+
+	.text-area {
+		display: flex;
+		justify-content: center;
+	}
+
+	.title {
+		font-size: 36upx;
+		color: #8f8f94;
+	}
+</style>

+ 22 - 0
pages/selfInfo/selfDetail/selfDetail.vue

@@ -0,0 +1,22 @@
+<template>
+	<view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			}
+		},
+		methods: {
+			
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 8 - 0
pages/selfInfo/selfInfo.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

BIN
static/alienware.png


BIN
static/logo.png


+ 76 - 0
uni.scss

@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:24upx;
+$uni-font-size-base:28upx;
+$uni-font-size-lg:32upx;
+
+/* 图片尺寸 */
+$uni-img-size-sm:40upx;
+$uni-img-size-base:52upx;
+$uni-img-size-lg:80upx;
+
+/* Border Radius */
+$uni-border-radius-sm: 4upx;
+$uni-border-radius-base: 6upx;
+$uni-border-radius-lg: 12upx;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 10px;
+$uni-spacing-row-base: 20upx;
+$uni-spacing-row-lg: 30upx;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 8upx;
+$uni-spacing-col-base: 16upx;
+$uni-spacing-col-lg: 24upx;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:40upx;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:36upx;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:30upx;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/chat/chat.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/chat/chatDetail/chatDetail.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/index/index.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/selfInfo/selfDetail/selfDetail.js.map


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/pages/selfInfo/selfInfo.js.map


+ 4 - 0
unpackage/dist/dev/mp-weixin/app.js

@@ -0,0 +1,4 @@
+
+require('./common/runtime.js')
+require('./common/vendor.js')
+require('./common/main.js')

+ 17 - 0
unpackage/dist/dev/mp-weixin/app.json

@@ -0,0 +1,17 @@
+{
+  "pages": [
+    "pages/index/index",
+    "pages/chat/chat",
+    "pages/chat/chatDetail/chatDetail",
+    "pages/selfInfo/selfInfo",
+    "pages/selfInfo/selfDetail/selfDetail"
+  ],
+  "subPackages": [],
+  "window": {
+    "navigationBarTextStyle": "black",
+    "navigationBarTitleText": "mini_rabot",
+    "navigationBarBackgroundColor": "#F8F8F8",
+    "backgroundColor": "#F8F8F8"
+  },
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/app.wxss

@@ -0,0 +1 @@
+@import './common/main.wxss';

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 107 - 0
unpackage/dist/dev/mp-weixin/common/main.js


+ 17 - 0
unpackage/dist/dev/mp-weixin/common/main.wxss

@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/*每个页面公共css */
+

+ 157 - 0
unpackage/dist/dev/mp-weixin/common/runtime.js

@@ -0,0 +1,157 @@
+
+  !function(){try{var r=Function("return this")();r&&!r.Math&&Object.assign(r,{Array:Array,Date:Date,Error:Error,Function:Function,Math:Math,Object:Object,RegExp:RegExp,String:String,TypeError:TypeError,setTimeout:setTimeout,clearTimeout:clearTimeout,setInterval:setInterval,clearInterval:clearInterval})}catch(r){}}();
+  /******/ (function(modules) { // webpackBootstrap
+/******/ 	// install a JSONP callback for chunk loading
+/******/ 	function webpackJsonpCallback(data) {
+/******/ 		var chunkIds = data[0];
+/******/ 		var moreModules = data[1];
+/******/ 		var executeModules = data[2];
+/******/
+/******/ 		// add "moreModules" to the modules object,
+/******/ 		// then flag all "chunkIds" as loaded and fire callback
+/******/ 		var moduleId, chunkId, i = 0, resolves = [];
+/******/ 		for(;i < chunkIds.length; i++) {
+/******/ 			chunkId = chunkIds[i];
+/******/ 			if(installedChunks[chunkId]) {
+/******/ 				resolves.push(installedChunks[chunkId][0]);
+/******/ 			}
+/******/ 			installedChunks[chunkId] = 0;
+/******/ 		}
+/******/ 		for(moduleId in moreModules) {
+/******/ 			if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ 				modules[moduleId] = moreModules[moduleId];
+/******/ 			}
+/******/ 		}
+/******/ 		if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ 		while(resolves.length) {
+/******/ 			resolves.shift()();
+/******/ 		}
+/******/
+/******/ 		// add entry modules from loaded chunk to deferred list
+/******/ 		deferredModules.push.apply(deferredModules, executeModules || []);
+/******/
+/******/ 		// run deferred modules when all chunks ready
+/******/ 		return checkDeferredModules();
+/******/ 	};
+/******/ 	function checkDeferredModules() {
+/******/ 		var result;
+/******/ 		for(var i = 0; i < deferredModules.length; i++) {
+/******/ 			var deferredModule = deferredModules[i];
+/******/ 			var fulfilled = true;
+/******/ 			for(var j = 1; j < deferredModule.length; j++) {
+/******/ 				var depId = deferredModule[j];
+/******/ 				if(installedChunks[depId] !== 0) fulfilled = false;
+/******/ 			}
+/******/ 			if(fulfilled) {
+/******/ 				deferredModules.splice(i--, 1);
+/******/ 				result = __webpack_require__(__webpack_require__.s = deferredModule[0]);
+/******/ 			}
+/******/ 		}
+/******/ 		return result;
+/******/ 	}
+/******/
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+/******/
+/******/ 	// object to store loaded and loading chunks
+/******/ 	// undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ 	// Promise = chunk loading, 0 = chunk loaded
+/******/ 	var installedChunks = {
+/******/ 		"common/runtime": 0
+/******/ 	};
+/******/
+/******/ 	var deferredModules = [];
+/******/
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+/******/
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId]) {
+/******/ 			return installedModules[moduleId].exports;
+/******/ 		}
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			i: moduleId,
+/******/ 			l: false,
+/******/ 			exports: {}
+/******/ 		};
+/******/
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ 		// Flag the module as loaded
+/******/ 		module.l = true;
+/******/
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+/******/
+/******/
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+/******/
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+/******/
+/******/ 	// define getter function for harmony exports
+/******/ 	__webpack_require__.d = function(exports, name, getter) {
+/******/ 		if(!__webpack_require__.o(exports, name)) {
+/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ 		}
+/******/ 	};
+/******/
+/******/ 	// define __esModule on exports
+/******/ 	__webpack_require__.r = function(exports) {
+/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ 		}
+/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
+/******/ 	};
+/******/
+/******/ 	// create a fake namespace object
+/******/ 	// mode & 1: value is a module id, require it
+/******/ 	// mode & 2: merge all properties of value into the ns
+/******/ 	// mode & 4: return value when already ns object
+/******/ 	// mode & 8|1: behave like require
+/******/ 	__webpack_require__.t = function(value, mode) {
+/******/ 		if(mode & 1) value = __webpack_require__(value);
+/******/ 		if(mode & 8) return value;
+/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ 		var ns = Object.create(null);
+/******/ 		__webpack_require__.r(ns);
+/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ 		return ns;
+/******/ 	};
+/******/
+/******/ 	// getDefaultExport function for compatibility with non-harmony modules
+/******/ 	__webpack_require__.n = function(module) {
+/******/ 		var getter = module && module.__esModule ?
+/******/ 			function getDefault() { return module['default']; } :
+/******/ 			function getModuleExports() { return module; };
+/******/ 		__webpack_require__.d(getter, 'a', getter);
+/******/ 		return getter;
+/******/ 	};
+/******/
+/******/ 	// Object.prototype.hasOwnProperty.call
+/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "/";
+/******/
+/******/ 	var jsonpArray = global["webpackJsonp"] = global["webpackJsonp"] || [];
+/******/ 	var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ 	jsonpArray.push = webpackJsonpCallback;
+/******/ 	jsonpArray = jsonpArray.slice();
+/******/ 	for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ 	var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ 	// run deferred modules from other chunks
+/******/ 	checkDeferredModules();
+/******/ })
+/************************************************************************/
+/******/ ([]);
+//# sourceMappingURL=../../.sourcemap/mp-weixin/common/runtime.js.map
+  

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 7703 - 0
unpackage/dist/dev/mp-weixin/common/vendor.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 114 - 0
unpackage/dist/dev/mp-weixin/pages/chat/chat.js


+ 3 - 0
unpackage/dist/dev/mp-weixin/pages/chat/chat.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/chat/chat.wxml

@@ -0,0 +1 @@
+<view class="_div"></view>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 124 - 0
unpackage/dist/dev/mp-weixin/pages/chat/chatDetail/chatDetail.js


+ 3 - 0
unpackage/dist/dev/mp-weixin/pages/chat/chatDetail/chatDetail.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/chat/chatDetail/chatDetail.wxml

@@ -0,0 +1 @@
+<view></view>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 163 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.js


+ 4 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.json

@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "首页",
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.wxml

@@ -0,0 +1 @@
+<view class="content"><image class="logo" src="/static/logo.png" mode="aspectFit"></image><view class="text-area"><text class="title">{{title}}</text></view></view>

+ 43 - 0
unpackage/dist/dev/mp-weixin/pages/index/index.wxss

@@ -0,0 +1,43 @@
+
+.content {
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: -ms-flexbox;
+	display: flex;
+	-webkit-box-orient: vertical;
+	-webkit-box-direction: normal;
+	-webkit-flex-direction: column;
+	    -ms-flex-direction: column;
+	        flex-direction: column;
+	-webkit-box-align: center;
+	-webkit-align-items: center;
+	    -ms-flex-align: center;
+	        align-items: center;
+	-webkit-box-pack: center;
+	-webkit-justify-content: center;
+	    -ms-flex-pack: center;
+	        justify-content: center;
+}
+.logo {
+	height: 200rpx;
+	width: 200rpx;
+	margin-top: 200rpx;
+	margin-left: auto;
+	margin-right: auto;
+	margin-bottom: 50rpx;
+}
+.text-area {
+	display: -webkit-box;
+	display: -webkit-flex;
+	display: -ms-flexbox;
+	display: flex;
+	-webkit-box-pack: center;
+	-webkit-justify-content: center;
+	    -ms-flex-pack: center;
+	        justify-content: center;
+}
+.title {
+	font-size: 36rpx;
+	color: #8f8f94;
+}
+

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 124 - 0
unpackage/dist/dev/mp-weixin/pages/selfInfo/selfDetail/selfDetail.js


+ 3 - 0
unpackage/dist/dev/mp-weixin/pages/selfInfo/selfDetail/selfDetail.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/selfInfo/selfDetail/selfDetail.wxml

@@ -0,0 +1 @@
+<view></view>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 114 - 0
unpackage/dist/dev/mp-weixin/pages/selfInfo/selfInfo.js


+ 3 - 0
unpackage/dist/dev/mp-weixin/pages/selfInfo/selfInfo.json

@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}

+ 1 - 0
unpackage/dist/dev/mp-weixin/pages/selfInfo/selfInfo.wxml

@@ -0,0 +1 @@
+<view class="_div"></view>

+ 33 - 0
unpackage/dist/dev/mp-weixin/project.config.json

@@ -0,0 +1,33 @@
+{
+	"description": "项目配置文件。",
+	"packOptions": {
+		"ignore": []
+	},
+	"setting": {
+		"urlCheck": false
+	},
+	"compileType": "miniprogram",
+	"libVersion": "2.7.0",
+	"appid": "touristappid",
+	"projectname": "myChannelPrice",
+	"simulatorType": "wechat",
+	"simulatorPluginLibVersion": {},
+	"condition": {
+		"search": {
+			"current": -1,
+			"list": []
+		},
+		"conversation": {
+			"current": -1,
+			"list": []
+		},
+		"game": {
+			"current": -1,
+			"list": []
+		},
+		"miniprogram": {
+			"current": -1,
+			"list": []
+		}
+	}
+}

+ 7 - 0
unpackage/dist/dev/mp-weixin/sitemap.json

@@ -0,0 +1,7 @@
+{
+  "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+  "rules": [{
+  "action": "allow",
+  "page": "*"
+  }]
+}

BIN
unpackage/dist/dev/mp-weixin/static/alienware.png


BIN
unpackage/dist/dev/mp-weixin/static/logo.png