commit c68f4fb7ad81c5f29edc60bc4624b93ead02440e
Author: dong_bo0602 <358256383@qq.com>
Date: Sat Mar 20 10:59:52 2021 +0800
Initial Commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..14ea590
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..3ac381d
--- /dev/null
+++ b/app.js
@@ -0,0 +1,16 @@
+//app.js
+var restAjax = require('utils/restAjax.js');
+var dialog = require('utils/dialog.js');
+App({
+ loginUrl: 'https://www.tenlion.com.cn/usercenter/',
+ // requestUrl: 'http://192.168.0.120:8083/servicecity/',
+ requestUrl: 'https://www.tenlion.com.cn/servicecity/',
+ restAjax: restAjax,
+ dialog: dialog,
+ onLaunch: function () {
+
+ },
+ globalData: {
+ userInfo: null
+ }
+})
\ No newline at end of file
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..8df9b7f
--- /dev/null
+++ b/app.json
@@ -0,0 +1,22 @@
+{
+ "pages":[
+ "pages/index/index",
+ "pages/caseCheck/caseCheck",
+ "pages/caseReport/caseReport",
+ "pages/caseDetail/caseDetail",
+ "pages/process/process"
+ ],
+ "window":{
+ "backgroundTextStyle":"light",
+ "navigationBarBackgroundColor": "#008cff",
+ "navigationBarTitleText": "片长制城市管理服务平台",
+ "navigationBarTextStyle":"white"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json",
+ "permission": {
+ "scope.userLocation": {
+ "desc": "你的位置信息将用于小程序位置接口的效果展示"
+ }
+ }
+}
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..06c6fc9
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,10 @@
+/**app.wxss**/
+.container {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ padding: 200rpx 0;
+ box-sizing: border-box;
+}
diff --git a/images/camera.png b/images/camera.png
new file mode 100644
index 0000000..4aedb8d
Binary files /dev/null and b/images/camera.png differ
diff --git a/images/default-avatar.png b/images/default-avatar.png
new file mode 100644
index 0000000..ccbc452
Binary files /dev/null and b/images/default-avatar.png differ
diff --git a/images/delete.png b/images/delete.png
new file mode 100644
index 0000000..7418ea8
Binary files /dev/null and b/images/delete.png differ
diff --git a/images/marker_red.png b/images/marker_red.png
new file mode 100644
index 0000000..8b4e20d
Binary files /dev/null and b/images/marker_red.png differ
diff --git a/images/position.png b/images/position.png
new file mode 100644
index 0000000..abd46db
Binary files /dev/null and b/images/position.png differ
diff --git a/images/select.png b/images/select.png
new file mode 100644
index 0000000..1db700f
Binary files /dev/null and b/images/select.png differ
diff --git a/images/vioce.png b/images/vioce.png
new file mode 100644
index 0000000..7e7531b
Binary files /dev/null and b/images/vioce.png differ
diff --git a/lib/bmap-wx.js b/lib/bmap-wx.js
new file mode 100644
index 0000000..c6ca337
--- /dev/null
+++ b/lib/bmap-wx.js
@@ -0,0 +1,452 @@
+/**
+ * @file 微信小程序JSAPI
+ * @author 崔健 cuijian03@baidu.com 2017.01.10
+ * @update 邓淑芳 623996689@qq.com 2019.07.03
+ */
+
+/**
+ * 百度地图微信小程序API类
+ *
+ * @class
+ */
+class BMapWX {
+
+ /**
+ * 百度地图微信小程序API类
+ *
+ * @constructor
+ */
+ constructor(param) {
+ this.ak = param["ak"];
+ }
+
+ /**
+ * 使用微信接口进行定位
+ *
+ * @param {string} type 坐标类型
+ * @param {Function} success 成功执行
+ * @param {Function} fail 失败执行
+ * @param {Function} complete 完成后执行
+ */
+ getWXLocation(type, success, fail, complete) {
+ type = type || 'gcj02',
+ success = success || function () { };
+ fail = fail || function () { };
+ complete = complete || function () { };
+ wx.getLocation({
+ type: type,
+ success: success,
+ fail: fail,
+ complete: complete
+ });
+ }
+
+ /**
+ * POI周边检索
+ *
+ * @param {Object} param 检索配置
+ * 参数对象结构可以参考
+ * http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi
+ */
+ search(param) {
+ var that = this;
+ param = param || {};
+ let searchparam = {
+ query: param["query"] || '生活服务$美食&酒店',
+ scope: param["scope"] || 1,
+ filter: param["filter"] || '',
+ coord_type: param["coord_type"] || 2,
+ page_size: param["page_size"] || 10,
+ page_num: param["page_num"] || 0,
+ output: param["output"] || 'json',
+ ak: that.ak,
+ sn: param["sn"] || '',
+ timestamp: param["timestamp"] || '',
+ radius: param["radius"] || 2000,
+ ret_coordtype: 'gcj02ll'
+ };
+ let otherparam = {
+ iconPath: param["iconPath"],
+ iconTapPath: param["iconTapPath"],
+ width: param["width"],
+ height: param["height"],
+ alpha: param["alpha"] || 1,
+ success: param["success"] || function () { },
+ fail: param["fail"] || function () { }
+ };
+ let type = 'gcj02';
+ let locationsuccess = function (result) {
+ searchparam["location"] = result["latitude"] + ',' + result["longitude"];
+ wx.request({
+ url: 'https://api.map.baidu.com/place/v2/search',
+ data: searchparam,
+ header: {
+ "content-type": "application/json"
+ },
+ method: 'GET',
+ success(data) {
+ let res = data["data"];
+ if (res["status"] === 0) {
+ let poiArr = res["results"];
+ // outputRes 包含两个对象,
+ // originalData为百度接口返回的原始数据
+ // wxMarkerData为小程序规范的marker格式
+ let outputRes = {};
+ outputRes["originalData"] = res;
+ outputRes["wxMarkerData"] = [];
+ for (let i = 0; i < poiArr.length; i++) {
+ outputRes["wxMarkerData"][i] = {
+ id: i,
+ latitude: poiArr[i]["location"]["lat"],
+ longitude: poiArr[i]["location"]["lng"],
+ title: poiArr[i]["name"],
+ iconPath: otherparam["iconPath"],
+ iconTapPath: otherparam["iconTapPath"],
+ address: poiArr[i]["address"],
+ telephone: poiArr[i]["telephone"],
+ alpha: otherparam["alpha"],
+ width: otherparam["width"],
+ height: otherparam["height"]
+ }
+ }
+ otherparam.success(outputRes);
+ } else {
+ otherparam.fail({
+ errMsg: res["message"],
+ statusCode: res["status"]
+ });
+ }
+ },
+ fail(data) {
+ otherparam.fail(data);
+ }
+ });
+ }
+ let locationfail = function (result) {
+ otherparam.fail(result);
+ };
+ let locationcomplete = function (result) {
+ };
+ if (!param["location"]) {
+ that.getWXLocation(type, locationsuccess, locationfail, locationcomplete);
+ } else {
+ let longitude = param.location.split(',')[1];
+ let latitude = param.location.split(',')[0];
+ let errMsg = 'input location';
+ let res = {
+ errMsg: errMsg,
+ latitude: latitude,
+ longitude: longitude
+ };
+ locationsuccess(res);
+ }
+ }
+
+ /**
+ * sug模糊检索
+ *
+ * @param {Object} param 检索配置
+ * 参数对象结构可以参考
+ * http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-api
+ */
+ suggestion(param) {
+ var that = this;
+ param = param || {};
+ let suggestionparam = {
+ query: param["query"] || '',
+ region: param["region"] || '全国',
+ city_limit: param["city_limit"] || false,
+ output: param["output"] || 'json',
+ ak: that.ak,
+ sn: param["sn"] || '',
+ timestamp: param["timestamp"] || '',
+ ret_coordtype: 'gcj02ll'
+ };
+ let otherparam = {
+ success: param["success"] || function () { },
+ fail: param["fail"] || function () { }
+ };
+ wx.request({
+ url: 'https://api.map.baidu.com/place/v2/suggestion',
+ data: suggestionparam,
+ header: {
+ "content-type": "application/json"
+ },
+ method: 'GET',
+ success(data) {
+ let res = data["data"];
+ if (res["status"] === 0) {
+ otherparam.success(res);
+ } else {
+ otherparam.fail({
+ errMsg: res["message"],
+ statusCode: res["status"]
+ });
+ }
+ },
+ fail(data) {
+ otherparam.fail(data);
+ }
+ });
+ }
+
+ /**
+ * rgc检索(逆地理编码:经纬度->地点描述)
+ *
+ * @param {Object} param 检索配置
+ * 参数对象结构可以参考
+ * https://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad
+ *
+ */
+ regeocoding (param) {
+ var that = this;
+ param = param || {};
+ let regeocodingparam = {
+ coordtype: param["coordtype"] || 'gcj02ll',
+ ret_coordtype: 'gcj02ll',
+ radius: param["radius"] || 1000,
+ ak: that.ak,
+ sn: param["sn"] || '',
+ output: param["output"] || 'json',
+ callback: param["callback"] || function () { },
+ extensions_poi: param["extensions_poi"] || 1,
+ extensions_road: param["extensions_road"] || false,
+ extensions_town: param["extensions_town"] || false,
+ language: param["language"] || 'zh-CN',
+ language_auto: param["language_auto"] || 0
+ };
+ let otherparam = {
+ iconPath: param["iconPath"],
+ iconTapPath: param["iconTapPath"],
+ width: param["width"],
+ height: param["height"],
+ alpha: param["alpha"] || 1,
+ success: param["success"] || function () { },
+ fail: param["fail"] || function () { }
+ };
+ let type = 'gcj02';
+ let locationsuccess = function (result) {
+ regeocodingparam["location"] = result["latitude"] + ',' + result["longitude"];
+ wx.request({
+ url: 'https://api.map.baidu.com/reverse_geocoding/v3',
+ data: regeocodingparam,
+ header: {
+ "content-type": "application/json"
+ },
+ method: 'GET',
+ success(data) {
+ let res = data["data"];
+ if (res["status"] === 0) {
+ let poiObj = res["result"];
+ // outputRes 包含两个对象:
+ // originalData为百度接口返回的原始数据
+ // wxMarkerData为小程序规范的marker格式
+ let outputRes = {};
+ outputRes["originalData"] = res;
+ outputRes["wxMarkerData"] = [];
+ outputRes["wxMarkerData"][0] = {
+ id: 0,
+ latitude: result["latitude"],
+ longitude: result["longitude"],
+ address: poiObj["formatted_address"],
+ iconPath: otherparam["iconPath"],
+ iconTapPath: otherparam["iconTapPath"],
+ desc: poiObj["sematic_description"],
+ business: poiObj["business"],
+ alpha: otherparam["alpha"],
+ width: otherparam["width"],
+ height: otherparam["height"]
+ }
+ otherparam.success(outputRes);
+ } else {
+ otherparam.fail({
+ errMsg: res["message"],
+ statusCode: res["status"]
+ });
+ }
+ },
+ fail(data) {
+ otherparam.fail(data);
+ }
+ });
+ };
+ let locationfail = function (result) {
+ otherparam.fail(result);
+ }
+ let locationcomplete = function (result) {
+ };
+ if (!param["location"]) {
+ that.getWXLocation(type, locationsuccess, locationfail, locationcomplete);
+ } else {
+ let longitude = param.location.split(',')[1];
+ let latitude = param.location.split(',')[0];
+ let errMsg = 'input location';
+ let res = {
+ errMsg: errMsg,
+ latitude: latitude,
+ longitude: longitude
+ };
+ locationsuccess(res);
+ }
+ }
+
+ /**
+ * gc检索(地理编码:地点->经纬度)
+ *
+ * @param {Object} param 检索配置
+ * 参数对象结构可以参考
+ * https://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding
+ *
+ */
+ geocoding(param) {
+ var that = this;
+ param = param || {};
+ let geocodingparam = {
+ address: param["address"] || '',
+ city: param["city"] || '',
+ ret_coordtype: param["coordtype"] || 'gcj02ll',
+ ak: that.ak,
+ sn: param["sn"] || '',
+ output: param["output"] || 'json',
+ callback: param["callback"] || function () { }
+ };
+ let otherparam = {
+ iconPath: param["iconPath"],
+ iconTapPath: param["iconTapPath"],
+ width: param["width"],
+ height: param["height"],
+ alpha: param["alpha"] || 1,
+ success: param["success"] || function () { },
+ fail: param["fail"] || function () { }
+ };
+ if (param["address"]) {
+ wx.request({
+ url: 'https://api.map.baidu.com/geocoding/v3',
+ data: geocodingparam,
+ header: {
+ "content-type": "application/json"
+ },
+ method: 'GET',
+ success(data) {
+ let res = data["data"];
+ if (res["status"] === 0){
+ let poiObj = res["result"];
+ // outputRes 包含两个对象:
+ // originalData为百度接口返回的原始数据
+ // wxMarkerData为小程序规范的marker格式
+ let outputRes = res;
+ outputRes["originalData"] = res;
+ outputRes["wxMarkerData"] = [];
+ outputRes["wxMarkerData"][0] = {
+ id: 0,
+ latitude: poiObj["location"]["lat"],
+ longitude: poiObj["location"]["lng"],
+ iconPath: otherparam["iconPath"],
+ iconTapPath: otherparam["iconTapPath"],
+ alpha: otherparam["alpha"],
+ width: otherparam["width"],
+ height: otherparam["height"]
+ }
+ otherparam.success(outputRes);
+ } else {
+ otherparam.fail({
+ errMsg: res["message"],
+ statusCode: res["status"]
+ });
+ }
+ },
+ fail(data) {
+ otherparam.fail(data);
+ }
+ });
+ } else {
+ let errMsg = 'input address!';
+ let res = {
+ errMsg: errMsg
+ };
+ otherparam.fail(res);
+ }
+ }
+
+ /**
+ * 天气检索
+ *
+ * @param {Object} param 检索配置
+ */
+ weather(param) {
+ var that = this;
+ param = param || {};
+ let weatherparam = {
+ coord_type: param["coord_type"] || 'gcj02',
+ output: param["output"] || 'json',
+ ak: that.ak,
+ sn: param["sn"] || '',
+ timestamp: param["timestamp"] || ''
+ };
+ let otherparam = {
+ success: param["success"] || function () { },
+ fail: param["fail"] || function () { }
+ };
+ let type = 'gcj02';
+ let locationsuccess = function (result) {
+ weatherparam["location"] = result["longitude"] + ',' + result["latitude"];
+ wx.request({
+ url: 'https://api.map.baidu.com/telematics/v3/weather',
+ data: weatherparam,
+ header: {
+ "content-type": "application/json"
+ },
+ method: 'GET',
+ success(data) {
+ let res = data["data"];
+ if (res["error"] === 0 && res["status"] === 'success') {
+ let weatherArr = res["results"];
+ // outputRes 包含两个对象,
+ // originalData为百度接口返回的原始数据
+ // wxMarkerData为小程序规范的marker格式
+ let outputRes = {};
+ outputRes["originalData"] = res;
+ outputRes["currentWeather"] = [];
+ outputRes["currentWeather"][0] = {
+ currentCity: weatherArr[0]["currentCity"],
+ pm25: weatherArr[0]["pm25"],
+ date: weatherArr[0]["weather_data"][0]["date"],
+ temperature: weatherArr[0]["weather_data"][0]["temperature"],
+ weatherDesc: weatherArr[0]["weather_data"][0]["weather"],
+ wind: weatherArr[0]["weather_data"][0]["wind"]
+ };
+ otherparam.success(outputRes);
+ } else {
+ otherparam.fail({
+ errMsg: res["message"],
+ statusCode: res["status"]
+ });
+ }
+ },
+ fail(data) {
+ otherparam.fail(data);
+ }
+ });
+ }
+ let locationfail = function (result) {
+ otherparam.fail(result);
+ }
+ let locationcomplete = function (result) {
+ }
+ if (!param["location"]) {
+ that.getWXLocation(type, locationsuccess, locationfail, locationcomplete);
+ } else {
+ let longitude = param.location.split(',')[0];
+ let latitude = param.location.split(',')[1];
+ let errMsg = 'input location';
+ let res = {
+ errMsg: errMsg,
+ latitude: latitude,
+ longitude: longitude
+ };
+ locationsuccess(res);
+ }
+ }
+ }
+
+ module.exports.BMapWX = BMapWX;
\ No newline at end of file
diff --git a/lib/qqmap-wx-jssdk.js b/lib/qqmap-wx-jssdk.js
new file mode 100644
index 0000000..595b65b
--- /dev/null
+++ b/lib/qqmap-wx-jssdk.js
@@ -0,0 +1,1122 @@
+/**
+ * 微信小程序JavaScriptSDK
+ *
+ * @version 1.2
+ * @date 2019-03-06
+ */
+
+var ERROR_CONF = {
+ KEY_ERR: 311,
+ KEY_ERR_MSG: 'key格式错误',
+ PARAM_ERR: 310,
+ PARAM_ERR_MSG: '请求参数信息有误',
+ SYSTEM_ERR: 600,
+ SYSTEM_ERR_MSG: '系统错误',
+ WX_ERR_CODE: 1000,
+ WX_OK_CODE: 200
+};
+var BASE_URL = 'https://apis.map.qq.com/ws/';
+var URL_SEARCH = BASE_URL + 'place/v1/search';
+var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
+var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
+var URL_CITY_LIST = BASE_URL + 'district/v1/list';
+var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
+var URL_DISTANCE = BASE_URL + 'distance/v1/';
+var URL_DIRECTION = BASE_URL + 'direction/v1/';
+var MODE = {
+ driving: 'driving',
+ transit: 'transit'
+};
+var EARTH_RADIUS = 6378136.49;
+var Utils = {
+ /**
+ * md5加密方法
+ * 版权所有©2011 Sebastian Tschan,https://blueimp.net
+ */
+ safeAdd(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+ },
+ bitRotateLeft(num, cnt) {
+ return (num << cnt) | (num >>> (32 - cnt));
+ },
+ md5cmn(q, a, b, x, s, t) {
+ return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b);
+ },
+ md5ff(a, b, c, d, x, s, t) {
+ return this.md5cmn((b & c) | (~b & d), a, b, x, s, t);
+ },
+ md5gg(a, b, c, d, x, s, t) {
+ return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+ },
+ md5hh(a, b, c, d, x, s, t) {
+ return this.md5cmn(b ^ c ^ d, a, b, x, s, t);
+ },
+ md5ii(a, b, c, d, x, s, t) {
+ return this.md5cmn(c ^ (b | ~d), a, b, x, s, t);
+ },
+ binlMD5(x, len) {
+ /* append padding */
+ x[len >> 5] |= 0x80 << (len % 32);
+ x[((len + 64) >>> 9 << 4) + 14] = len;
+
+ var i;
+ var olda;
+ var oldb;
+ var oldc;
+ var oldd;
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ for (i = 0; i < x.length; i += 16) {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = this.md5ff(a, b, c, d, x[i], 7, -680876936);
+ d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+ c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+ b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+ a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+ d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+ c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+ b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+ a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+ d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+ c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063);
+ b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+ a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+ d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+ c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+ b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+ a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+ d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+ c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+ b = this.md5gg(b, c, d, a, x[i], 20, -373897302);
+ a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+ d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+ c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+ b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+ a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+ d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+ c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+ b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+ a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+ d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+ c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+ b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+ a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558);
+ d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+ c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+ b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+ a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+ d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+ c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+ b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+ a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+ d = this.md5hh(d, a, b, c, x[i], 11, -358537222);
+ c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+ b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+ a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+ d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+ c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+ b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+ a = this.md5ii(a, b, c, d, x[i], 6, -198630844);
+ d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+ c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+ b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+ a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+ d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+ c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+ b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+ a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+ d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+ c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+ b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+ a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+ d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+ c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+ b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+ a = this.safeAdd(a, olda);
+ b = this.safeAdd(b, oldb);
+ c = this.safeAdd(c, oldc);
+ d = this.safeAdd(d, oldd);
+ }
+ return [a, b, c, d];
+ },
+ binl2rstr(input) {
+ var i;
+ var output = '';
+ var length32 = input.length * 32;
+ for (i = 0; i < length32; i += 8) {
+ output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+ }
+ return output;
+ },
+ rstr2binl(input) {
+ var i;
+ var output = [];
+ output[(input.length >> 2) - 1] = undefined;
+ for (i = 0; i < output.length; i += 1) {
+ output[i] = 0;
+ }
+ var length8 = input.length * 8;
+ for (i = 0; i < length8; i += 8) {
+ output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+ }
+ return output;
+ },
+ rstrMD5(s) {
+ return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8));
+ },
+ rstrHMACMD5(key, data) {
+ var i;
+ var bkey = this.rstr2binl(key);
+ var ipad = [];
+ var opad = [];
+ var hash;
+ ipad[15] = opad[15] = undefined;
+ if (bkey.length > 16) {
+ bkey = this.binlMD5(bkey, key.length * 8);
+ }
+ for (i = 0; i < 16; i += 1) {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5c5c5c5c;
+ }
+ hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
+ return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128));
+ },
+ rstr2hex(input) {
+ var hexTab = '0123456789abcdef';
+ var output = '';
+ var x;
+ var i;
+ for (i = 0; i < input.length; i += 1) {
+ x = input.charCodeAt(i);
+ output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+ }
+ return output;
+ },
+ str2rstrUTF8(input) {
+ return unescape(encodeURIComponent(input));
+ },
+ rawMD5(s) {
+ return this.rstrMD5(this.str2rstrUTF8(s));
+ },
+ hexMD5(s) {
+ return this.rstr2hex(this.rawMD5(s));
+ },
+ rawHMACMD5(k, d) {
+ return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d));
+ },
+ hexHMACMD5(k, d) {
+ return this.rstr2hex(this.rawHMACMD5(k, d));
+ },
+
+ md5(string, key, raw) {
+ if (!key) {
+ if (!raw) {
+ return this.hexMD5(string);
+ }
+ return this.rawMD5(string);
+ }
+ if (!raw) {
+ return this.hexHMACMD5(key, string);
+ }
+ return this.rawHMACMD5(key, string);
+ },
+ /**
+ * 得到md5加密后的sig参数
+ * @param {Object} requestParam 接口参数
+ * @param {String} sk签名字符串
+ * @param {String} featrue 方法名
+ * @return 返回加密后的sig参数
+ */
+ getSig(requestParam, sk, feature, mode) {
+ var sig = null;
+ var requestArr = [];
+ Object.keys(requestParam).sort().forEach(function(key){
+ requestArr.push(key + '=' + requestParam[key]);
+ });
+ if (feature == 'search') {
+ sig = '/ws/place/v1/search?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'suggest') {
+ sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'reverseGeocoder') {
+ sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'geocoder') {
+ sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'getCityList') {
+ sig = '/ws/district/v1/list?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'getDistrictByCityId') {
+ sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'calculateDistance') {
+ sig = '/ws/distance/v1/?' + requestArr.join('&') + sk;
+ }
+ if (feature == 'direction') {
+ sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk;
+ }
+ sig = this.md5(sig);
+ return sig;
+ },
+ /**
+ * 得到终点query字符串
+ * @param {Array|String} 检索数据
+ */
+ location2query(data) {
+ if (typeof data == 'string') {
+ return data;
+ }
+ var query = '';
+ for (var i = 0; i < data.length; i++) {
+ var d = data[i];
+ if (!!query) {
+ query += ';';
+ }
+ if (d.location) {
+ query = query + d.location.lat + ',' + d.location.lng;
+ }
+ if (d.latitude && d.longitude) {
+ query = query + d.latitude + ',' + d.longitude;
+ }
+ }
+ return query;
+ },
+
+ /**
+ * 计算角度
+ */
+ rad(d) {
+ return d * Math.PI / 180.0;
+ },
+ /**
+ * 处理终点location数组
+ * @return 返回终点数组
+ */
+ getEndLocation(location){
+ var to = location.split(';');
+ var endLocation = [];
+ for (var i = 0; i < to.length; i++) {
+ endLocation.push({
+ lat: parseFloat(to[i].split(',')[0]),
+ lng: parseFloat(to[i].split(',')[1])
+ })
+ }
+ return endLocation;
+ },
+
+ /**
+ * 计算两点间直线距离
+ * @param a 表示纬度差
+ * @param b 表示经度差
+ * @return 返回的是距离,单位m
+ */
+ getDistance(latFrom, lngFrom, latTo, lngTo) {
+ var radLatFrom = this.rad(latFrom);
+ var radLatTo = this.rad(latTo);
+ var a = radLatFrom - radLatTo;
+ var b = this.rad(lngFrom) - this.rad(lngTo);
+ var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));
+ distance = distance * EARTH_RADIUS;
+ distance = Math.round(distance * 10000) / 10000;
+ return parseFloat(distance.toFixed(0));
+ },
+ /**
+ * 使用微信接口进行定位
+ */
+ getWXLocation(success, fail, complete) {
+ wx.getLocation({
+ type: 'gcj02',
+ success: success,
+ fail: fail,
+ complete: complete
+ });
+ },
+
+ /**
+ * 获取location参数
+ */
+ getLocationParam(location) {
+ if (typeof location == 'string') {
+ var locationArr = location.split(',');
+ if (locationArr.length === 2) {
+ location = {
+ latitude: location.split(',')[0],
+ longitude: location.split(',')[1]
+ };
+ } else {
+ location = {};
+ }
+ }
+ return location;
+ },
+
+ /**
+ * 回调函数默认处理
+ */
+ polyfillParam(param) {
+ param.success = param.success || function () { };
+ param.fail = param.fail || function () { };
+ param.complete = param.complete || function () { };
+ },
+
+ /**
+ * 验证param对应的key值是否为空
+ *
+ * @param {Object} param 接口参数
+ * @param {String} key 对应参数的key
+ */
+ checkParamKeyEmpty(param, key) {
+ if (!param[key]) {
+ var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
+ param.fail(errconf);
+ param.complete(errconf);
+ return true;
+ }
+ return false;
+ },
+
+ /**
+ * 验证参数中是否存在检索词keyword
+ *
+ * @param {Object} param 接口参数
+ */
+ checkKeyword(param){
+ return !this.checkParamKeyEmpty(param, 'keyword');
+ },
+
+ /**
+ * 验证location值
+ *
+ * @param {Object} param 接口参数
+ */
+ checkLocation(param) {
+ var location = this.getLocationParam(param.location);
+ if (!location || !location.latitude || !location.longitude) {
+ var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');
+ param.fail(errconf);
+ param.complete(errconf);
+ return false;
+ }
+ return true;
+ },
+
+ /**
+ * 构造错误数据结构
+ * @param {Number} errCode 错误码
+ * @param {Number} errMsg 错误描述
+ */
+ buildErrorConfig(errCode, errMsg) {
+ return {
+ status: errCode,
+ message: errMsg
+ };
+ },
+
+ /**
+ *
+ * 数据处理函数
+ * 根据传入参数不同处理不同数据
+ * @param {String} feature 功能名称
+ * search 地点搜索
+ * suggest关键词提示
+ * reverseGeocoder逆地址解析
+ * geocoder地址解析
+ * getCityList获取城市列表:父集
+ * getDistrictByCityId获取区县列表:子集
+ * calculateDistance距离计算
+ * @param {Object} param 接口参数
+ * @param {Object} data 数据
+ */
+ handleData(param,data,feature){
+ if (feature == 'search') {
+ var searchResult = data.data;
+ var searchSimplify = [];
+ for (var i = 0; i < searchResult.length; i++) {
+ searchSimplify.push({
+ id: searchResult[i].id || null,
+ title: searchResult[i].title || null,
+ latitude: searchResult[i].location && searchResult[i].location.lat || null,
+ longitude: searchResult[i].location && searchResult[i].location.lng || null,
+ address: searchResult[i].address || null,
+ category: searchResult[i].category || null,
+ tel: searchResult[i].tel || null,
+ adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null,
+ city: searchResult[i].ad_info && searchResult[i].ad_info.city || null,
+ district: searchResult[i].ad_info && searchResult[i].ad_info.district || null,
+ province: searchResult[i].ad_info && searchResult[i].ad_info.province || null
+ })
+ }
+ param.success(data, {
+ searchResult: searchResult,
+ searchSimplify: searchSimplify
+ })
+ } else if (feature == 'suggest') {
+ var suggestResult = data.data;
+ var suggestSimplify = [];
+ for (var i = 0; i < suggestResult.length; i++) {
+ suggestSimplify.push({
+ adcode: suggestResult[i].adcode || null,
+ address: suggestResult[i].address || null,
+ category: suggestResult[i].category || null,
+ city: suggestResult[i].city || null,
+ district: suggestResult[i].district || null,
+ id: suggestResult[i].id || null,
+ latitude: suggestResult[i].location && suggestResult[i].location.lat || null,
+ longitude: suggestResult[i].location && suggestResult[i].location.lng || null,
+ province: suggestResult[i].province || null,
+ title: suggestResult[i].title || null,
+ type: suggestResult[i].type || null
+ })
+ }
+ param.success(data, {
+ suggestResult: suggestResult,
+ suggestSimplify: suggestSimplify
+ })
+ } else if (feature == 'reverseGeocoder') {
+ var reverseGeocoderResult = data.result;
+ var reverseGeocoderSimplify = {
+ address: reverseGeocoderResult.address || null,
+ latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null,
+ longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null,
+ adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null,
+ city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null,
+ district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null,
+ nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null,
+ province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null,
+ street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null,
+ street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null,
+ recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null,
+ rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null
+ };
+ if (reverseGeocoderResult.pois) {//判断是否返回周边poi
+ var pois = reverseGeocoderResult.pois;
+ var poisSimplify = [];
+ for (var i = 0;i < pois.length;i++) {
+ poisSimplify.push({
+ id: pois[i].id || null,
+ title: pois[i].title || null,
+ latitude: pois[i].location && pois[i].location.lat || null,
+ longitude: pois[i].location && pois[i].location.lng || null,
+ address: pois[i].address || null,
+ category: pois[i].category || null,
+ adcode: pois[i].ad_info && pois[i].ad_info.adcode || null,
+ city: pois[i].ad_info && pois[i].ad_info.city || null,
+ district: pois[i].ad_info && pois[i].ad_info.district || null,
+ province: pois[i].ad_info && pois[i].ad_info.province || null
+ })
+ }
+ param.success(data,{
+ reverseGeocoderResult: reverseGeocoderResult,
+ reverseGeocoderSimplify: reverseGeocoderSimplify,
+ pois: pois,
+ poisSimplify: poisSimplify
+ })
+ } else {
+ param.success(data, {
+ reverseGeocoderResult: reverseGeocoderResult,
+ reverseGeocoderSimplify: reverseGeocoderSimplify
+ })
+ }
+ } else if (feature == 'geocoder') {
+ var geocoderResult = data.result;
+ var geocoderSimplify = {
+ title: geocoderResult.title || null,
+ latitude: geocoderResult.location && geocoderResult.location.lat || null,
+ longitude: geocoderResult.location && geocoderResult.location.lng || null,
+ adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null,
+ province: geocoderResult.address_components && geocoderResult.address_components.province || null,
+ city: geocoderResult.address_components && geocoderResult.address_components.city || null,
+ district: geocoderResult.address_components && geocoderResult.address_components.district || null,
+ street: geocoderResult.address_components && geocoderResult.address_components.street || null,
+ street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null,
+ level: geocoderResult.level || null
+ };
+ param.success(data,{
+ geocoderResult: geocoderResult,
+ geocoderSimplify: geocoderSimplify
+ });
+ } else if (feature == 'getCityList') {
+ var provinceResult = data.result[0];
+ var cityResult = data.result[1];
+ var districtResult = data.result[2];
+ param.success(data,{
+ provinceResult: provinceResult,
+ cityResult: cityResult,
+ districtResult: districtResult
+ });
+ } else if (feature == 'getDistrictByCityId') {
+ var districtByCity = data.result[0];
+ param.success(data, districtByCity);
+ } else if (feature == 'calculateDistance') {
+ var calculateDistanceResult = data.result.elements;
+ var distance = [];
+ for (var i = 0; i < calculateDistanceResult.length; i++){
+ distance.push(calculateDistanceResult[i].distance);
+ }
+ param.success(data, {
+ calculateDistanceResult: calculateDistanceResult,
+ distance: distance
+ });
+ } else if (feature == 'direction') {
+ var direction = data.result.routes;
+ param.success(data,direction);
+ } else {
+ param.success(data);
+ }
+ },
+
+ /**
+ * 构造微信请求参数,公共属性处理
+ *
+ * @param {Object} param 接口参数
+ * @param {Object} param 配置项
+ * @param {String} feature 方法名
+ */
+ buildWxRequestConfig(param, options, feature) {
+ var that = this;
+ options.header = { "content-type": "application/json" };
+ options.method = 'GET';
+ options.success = function (res) {
+ var data = res.data;
+ if (data.status === 0) {
+ that.handleData(param, data, feature);
+ } else {
+ param.fail(data);
+ }
+ };
+ options.fail = function (res) {
+ res.statusCode = ERROR_CONF.WX_ERR_CODE;
+ param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+ };
+ options.complete = function (res) {
+ var statusCode = +res.statusCode;
+ switch(statusCode) {
+ case ERROR_CONF.WX_ERR_CODE: {
+ param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+ break;
+ }
+ case ERROR_CONF.WX_OK_CODE: {
+ var data = res.data;
+ if (data.status === 0) {
+ param.complete(data);
+ } else {
+ param.complete(that.buildErrorConfig(data.status, data.message));
+ }
+ break;
+ }
+ default:{
+ param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
+ }
+
+ }
+ };
+ return options;
+ },
+
+ /**
+ * 处理用户参数是否传入坐标进行不同的处理
+ */
+ locationProcess(param, locationsuccess, locationfail, locationcomplete) {
+ var that = this;
+ locationfail = locationfail || function (res) {
+ res.statusCode = ERROR_CONF.WX_ERR_CODE;
+ param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+ };
+ locationcomplete = locationcomplete || function (res) {
+ if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
+ param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+ }
+ };
+ if (!param.location) {
+ that.getWXLocation(locationsuccess, locationfail, locationcomplete);
+ } else if (that.checkLocation(param)) {
+ var location = Utils.getLocationParam(param.location);
+ locationsuccess(location);
+ }
+ }
+};
+
+
+class QQMapWX {
+
+ /**
+ * 构造函数
+ *
+ * @param {Object} options 接口参数,key 为必选参数
+ */
+ constructor(options) {
+ if (!options.key) {
+ throw Error('key值不能为空');
+ }
+ this.key = options.key;
+ };
+
+ /**
+ * POI周边检索
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 参数对象结构可以参考
+ * @see http://lbs.qq.com/webservice_v1/guide-search.html
+ */
+ search(options) {
+ var that = this;
+ options = options || {};
+
+ Utils.polyfillParam(options);
+
+ if (!Utils.checkKeyword(options)) {
+ return;
+ }
+
+ var requestParam = {
+ keyword: options.keyword,
+ orderby: options.orderby || '_distance',
+ page_size: options.page_size || 10,
+ page_index: options.page_index || 1,
+ output: 'json',
+ key: that.key
+ };
+
+ if (options.address_format) {
+ requestParam.address_format = options.address_format;
+ }
+
+ if (options.filter) {
+ requestParam.filter = options.filter;
+ }
+
+ var distance = options.distance || "1000";
+ var auto_extend = options.auto_extend || 1;
+ var region = null;
+ var rectangle = null;
+
+ //判断城市限定参数
+ if (options.region) {
+ region = options.region;
+ }
+
+ //矩形限定坐标(暂时只支持字符串格式)
+ if (options.rectangle) {
+ rectangle = options.rectangle;
+ }
+
+ var locationsuccess = function (result) {
+ if (region && !rectangle) {
+ //城市限定参数拼接
+ requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+ }
+ } else if (rectangle && !region) {
+ //矩形搜索
+ requestParam.boundary = "rectangle(" + rectangle + ")";
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+ }
+ } else {
+ requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+ }
+ }
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_SEARCH,
+ data: requestParam
+ }, 'search'));
+ };
+ Utils.locationProcess(options, locationsuccess);
+ };
+
+ /**
+ * sug模糊检索
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 参数对象结构可以参考
+ * http://lbs.qq.com/webservice_v1/guide-suggestion.html
+ */
+ getSuggestion(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+
+ if (!Utils.checkKeyword(options)) {
+ return;
+ }
+
+ var requestParam = {
+ keyword: options.keyword,
+ region: options.region || '全国',
+ region_fix: options.region_fix || 0,
+ policy: options.policy || 0,
+ page_size: options.page_size || 10,//控制显示条数
+ page_index: options.page_index || 1,//控制页数
+ get_subpois : options.get_subpois || 0,//返回子地点
+ output: 'json',
+ key: that.key
+ };
+ //长地址
+ if (options.address_format) {
+ requestParam.address_format = options.address_format;
+ }
+ //过滤
+ if (options.filter) {
+ requestParam.filter = options.filter;
+ }
+ //排序
+ if (options.location) {
+ var locationsuccess = function (result) {
+ requestParam.location = result.latitude + ',' + result.longitude;
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
+ }
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_SUGGESTION,
+ data: requestParam
+ }, "suggest"));
+ };
+ Utils.locationProcess(options, locationsuccess);
+ } else {
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
+ }
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_SUGGESTION,
+ data: requestParam
+ }, "suggest"));
+ }
+ };
+
+ /**
+ * 逆地址解析
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 请求参数结构可以参考
+ * http://lbs.qq.com/webservice_v1/guide-gcoder.html
+ */
+ reverseGeocoder(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+ var requestParam = {
+ coord_type: options.coord_type || 5,
+ get_poi: options.get_poi || 0,
+ output: 'json',
+ key: that.key
+ };
+ if (options.poi_options) {
+ requestParam.poi_options = options.poi_options
+ }
+
+ var locationsuccess = function (result) {
+ requestParam.location = result.latitude + ',' + result.longitude;
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder');
+ }
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_GET_GEOCODER,
+ data: requestParam
+ }, 'reverseGeocoder'));
+ };
+ Utils.locationProcess(options, locationsuccess);
+ };
+
+ /**
+ * 地址解析
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 请求参数结构可以参考
+ * http://lbs.qq.com/webservice_v1/guide-geocoder.html
+ */
+ geocoder(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+
+ if (Utils.checkParamKeyEmpty(options, 'address')) {
+ return;
+ }
+
+ var requestParam = {
+ address: options.address,
+ output: 'json',
+ key: that.key
+ };
+
+ //城市限定
+ if (options.region) {
+ requestParam.region = options.region;
+ }
+
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder');
+ }
+
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_GET_GEOCODER,
+ data: requestParam
+ },'geocoder'));
+ };
+
+
+ /**
+ * 获取城市列表
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 请求参数结构可以参考
+ * http://lbs.qq.com/webservice_v1/guide-region.html
+ */
+ getCityList(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+ var requestParam = {
+ output: 'json',
+ key: that.key
+ };
+
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList');
+ }
+
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_CITY_LIST,
+ data: requestParam
+ },'getCityList'));
+ };
+
+ /**
+ * 获取对应城市ID的区县列表
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 请求参数结构可以参考
+ * http://lbs.qq.com/webservice_v1/guide-region.html
+ */
+ getDistrictByCityId(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+
+ if (Utils.checkParamKeyEmpty(options, 'id')) {
+ return;
+ }
+
+ var requestParam = {
+ id: options.id || '',
+ output: 'json',
+ key: that.key
+ };
+
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId');
+ }
+
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_AREA_LIST,
+ data: requestParam
+ },'getDistrictByCityId'));
+ };
+
+ /**
+ * 用于单起点到多终点的路线距离(非直线距离)计算:
+ * 支持两种距离计算方式:步行和驾车。
+ * 起点到终点最大限制直线距离10公里。
+ *
+ * 新增直线距离计算。
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 请求参数结构可以参考
+ * http://lbs.qq.com/webservice_v1/guide-distance.html
+ */
+ calculateDistance(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+
+ if (Utils.checkParamKeyEmpty(options, 'to')) {
+ return;
+ }
+
+ var requestParam = {
+ mode: options.mode || 'walking',
+ to: Utils.location2query(options.to),
+ output: 'json',
+ key: that.key
+ };
+
+ if (options.from) {
+ options.location = options.from;
+ }
+
+ //计算直线距离
+ if(requestParam.mode == 'straight'){
+ var locationsuccess = function (result) {
+ var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标
+ var data = {
+ message:"query ok",
+ result:{
+ elements:[]
+ },
+ status:0
+ };
+ for (var i = 0; i < locationTo.length; i++) {
+ data.result.elements.push({//将坐标存入
+ distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng),
+ duration:0,
+ from:{
+ lat: result.latitude,
+ lng:result.longitude
+ },
+ to:{
+ lat: locationTo[i].lat,
+ lng: locationTo[i].lng
+ }
+ });
+ }
+ var calculateResult = data.result.elements;
+ var distanceResult = [];
+ for (var i = 0; i < calculateResult.length; i++) {
+ distanceResult.push(calculateResult[i].distance);
+ }
+ return options.success(data,{
+ calculateResult: calculateResult,
+ distanceResult: distanceResult
+ });
+ };
+
+ Utils.locationProcess(options, locationsuccess);
+ } else {
+ var locationsuccess = function (result) {
+ requestParam.from = result.latitude + ',' + result.longitude;
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance');
+ }
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: URL_DISTANCE,
+ data: requestParam
+ },'calculateDistance'));
+ };
+
+ Utils.locationProcess(options, locationsuccess);
+ }
+ };
+
+ /**
+ * 路线规划:
+ *
+ * @param {Object} options 接口参数对象
+ *
+ * 请求参数结构可以参考
+ * https://lbs.qq.com/webservice_v1/guide-road.html
+ */
+ direction(options) {
+ var that = this;
+ options = options || {};
+ Utils.polyfillParam(options);
+
+ if (Utils.checkParamKeyEmpty(options, 'to')) {
+ return;
+ }
+
+ var requestParam = {
+ output: 'json',
+ key: that.key
+ };
+
+ //to格式处理
+ if (typeof options.to == 'string') {
+ requestParam.to = options.to;
+ } else {
+ requestParam.to = options.to.latitude + ',' + options.to.longitude;
+ }
+ //初始化局部请求域名
+ var SET_URL_DIRECTION = null;
+ //设置默认mode属性
+ options.mode = options.mode || MODE.driving;
+
+ //设置请求域名
+ SET_URL_DIRECTION = URL_DIRECTION + options.mode;
+
+ if (options.from) {
+ options.location = options.from;
+ }
+
+ if (options.mode == MODE.driving) {
+ if (options.from_poi) {
+ requestParam.from_poi = options.from_poi;
+ }
+ if (options.heading) {
+ requestParam.heading = options.heading;
+ }
+ if (options.speed) {
+ requestParam.speed = options.speed;
+ }
+ if (options.accuracy) {
+ requestParam.accuracy = options.accuracy;
+ }
+ if (options.road_type) {
+ requestParam.road_type = options.road_type;
+ }
+ if (options.to_poi) {
+ requestParam.to_poi = options.to_poi;
+ }
+ if (options.from_track) {
+ requestParam.from_track = options.from_track;
+ }
+ if (options.waypoints) {
+ requestParam.waypoints = options.waypoints;
+ }
+ if (options.policy) {
+ requestParam.policy = options.policy;
+ }
+ if (options.plate_number) {
+ requestParam.plate_number = options.plate_number;
+ }
+ }
+
+ if (options.mode == MODE.transit) {
+ if (options.departure_time) {
+ requestParam.departure_time = options.departure_time;
+ }
+ if (options.policy) {
+ requestParam.policy = options.policy;
+ }
+ }
+
+ var locationsuccess = function (result) {
+ requestParam.from = result.latitude + ',' + result.longitude;
+ if (options.sig) {
+ requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction',options.mode);
+ }
+ wx.request(Utils.buildWxRequestConfig(options, {
+ url: SET_URL_DIRECTION,
+ data: requestParam
+ }, 'direction'));
+ };
+
+ Utils.locationProcess(options, locationsuccess);
+ }
+};
+
+module.exports = QQMapWX;
\ No newline at end of file
diff --git a/pages/caseCheck/caseCheck.js b/pages/caseCheck/caseCheck.js
new file mode 100644
index 0000000..c461bed
--- /dev/null
+++ b/pages/caseCheck/caseCheck.js
@@ -0,0 +1,228 @@
+// pages/caseCheck/caseCheck.js
+var bmap = require('../../lib/bmap-wx.js');
+var app = getApp()
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ caseId: '',
+ longitude: '111.759608',
+ latitude: '40.860318',
+ markers: [],
+ caseDetail: {},
+ token: wx.getStorageSync('token'),
+ requestUrl: app.requestUrl,
+ evaluateContent: '',
+ isPass: 1,
+ grade: '',
+ photoList: []
+ },
+ getDetail: function () {
+ var self = this
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/reportcase/getreportcase/' + self.data.caseId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ console.log(data)
+ var imgArr, handleArr
+ imgArr = data.casePhotos.split(',')
+ handleArr = data.handlePhotos.split(',')
+ var arr = [{longitude: data.caseLongitude,latitude: data.caseLatitude,iconPath:'../../images/marker_red.png',width:'25px',height: '30px'}]
+ self.setData({
+ markers: arr
+ });
+ self.setData({
+ caseDetail: data,
+ longitude: data.caseLongitude,
+ latitude: data.caseLatitude,
+ imageList: imgArr,
+ handleList: handleArr
+ })
+ });
+ },
+ isQualified: function (e) {
+ this.setData({
+ isPass: e.detail.value
+ })
+ },
+ isSatisfied: function (e) {
+ this.setData({
+ grade: e.detail.value
+ })
+ },
+ // 选择图片
+ chooseImage: function () {
+ var self = this
+ wx.chooseImage({
+ count: 9 - self.data.photoList.length,
+ sourceType: ['album', 'camera'],
+ success: function (res) {
+ console.log(res)
+ self.setData({
+ showPhotoList: self.data.photoList.concat(res.tempFiles)
+ })
+ wx.showToast({
+ title: '上传中',
+ icon: 'loading'
+ })
+ var arr = []
+ for (let i = 0; i < res.tempFiles.length; i++) {
+ var path = res.tempFiles[i].path;
+ app.restAjax.file(app.restAjax.path('{requestUrl}app/file/uploadimage', [app.requestUrl]), path, 'image', {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var id = JSON.parse(data).data
+ arr.push(id)
+ if (arr.length == res.tempFiles.length) {
+ self.setData({
+ photoList: arr
+ })
+ wx.hideToast()
+ }
+ }, function (code, data) {
+ console.log(data)
+ })
+ }
+ }
+ })
+ },
+ // 删除图片
+ deleteImg: function (e) {
+ var idx = e.currentTarget.dataset.num
+ var self = this
+ self.data.photoList.splice(idx, 1)
+ self.data.showPhotoList.splice(idx, 1)
+ self.setData({
+ showPhotoList: self.data.showPhotoList,
+ photoList: self.data.photoList
+ })
+ },
+ // 确认处理
+ submitHandle: function () {
+ var photo = '', self = this
+ if (!self.data.evaluateContent) {
+ wx.showToast({
+ title: '请输入评价内容',
+ duration: 2000,
+ icon: 'none'
+ })
+ return
+ }
+ if (!self.data.grade) {
+ wx.showToast({
+ title: '请选择满意度',
+ duration: 2000,
+ icon: 'none'
+ })
+ return
+ }
+ if (this.data.photoList.length == 0) {
+ wx.showToast({
+ title: '请至少上传一张照片',
+ duration: 2000,
+ icon: 'none'
+ })
+ return
+ }
+ for (let i = 0; i < this.data.photoList.length; i++) {
+
+ if (i == this.data.photoList.length - 1) {
+ photo += this.data.photoList[i]
+ } else {
+ photo += this.data.photoList[i] + ','
+ }
+ console.log(i, photo)
+ }
+ var info = {
+ inspectPhotos: photo,
+ inspectOpinion: self.data.evaluateContent,
+ isPass: self.data.isPass,
+ grade: self.data.grade
+ }
+ app.restAjax.post(app.restAjax.path('{reqesutUrl}app/reportcase/savereportcaseinspect/' + self.data.caseId, [app.requestUrl]), info, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ if (code == '200') {
+ wx.showToast({
+ title: '处理成功',
+ duration: 2000,
+ success: function () {
+ setTimeout(function () {
+ wx.navigateTo({
+ url: '../index/index',
+ })
+ }, 2000)
+ }
+ })
+ }
+ });
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({
+ caseId: options.id
+ })
+ this.getDetail()
+ var BMap = new bmap.BMapWX({
+ ak: 'Zk732rbyjd327q7Zj9EOtRjUn2ED1GWK'
+ });
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/caseCheck/caseCheck.json b/pages/caseCheck/caseCheck.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/caseCheck/caseCheck.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/caseCheck/caseCheck.wxml b/pages/caseCheck/caseCheck.wxml
new file mode 100644
index 0000000..29216d9
--- /dev/null
+++ b/pages/caseCheck/caseCheck.wxml
@@ -0,0 +1,89 @@
+
+
+
+ {{caseDetail.communityName}}
+ 待处理
+
+
+ {{caseDetail.caseContent}}
+ 上报时间:{{caseDetail.reportDate}}
+ 上报类型:{{caseDetail.caseTypeName}}
+ 上报人员:{{caseDetail.caseReporter}}
+
+
+
+
+
+ {{caseDetail.casePosition}}
+
+
+
+
+
+
+ 案件处理详情
+
+ 处理人员:{{caseDetail.handleUserName}}
+ 处理时间:{{caseDetail.handleCreateTime}}
+ {{caseDetail.handleOpinion}}
+
+
+
+
+
+
+ *案件处理详情
+
+
+
+
+
+ 是否合格
+
+
+
+
+
+
+
+
+ 处理满意度
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确认处理
+
+
\ No newline at end of file
diff --git a/pages/caseCheck/caseCheck.wxss b/pages/caseCheck/caseCheck.wxss
new file mode 100644
index 0000000..6fe6cdf
--- /dev/null
+++ b/pages/caseCheck/caseCheck.wxss
@@ -0,0 +1,180 @@
+page{
+ background: #f2f1f6;
+}
+.check{
+ padding: 20rpx;
+}
+.case-info{
+ background: #fff;
+ border-radius: 10rpx;
+ padding: 20rpx;
+ margin-bottom: 15rpx;
+}
+.title-status{
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 10rpx;
+}
+.title{
+ font-size: 36rpx;
+ line-height: 60rpx;
+ display: inline-block;
+ max-width: 65%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #06a3f6;
+}
+.status{
+ line-height: 60rpx;
+ display: inline-block;
+ padding: 0 30rpx;
+ background: #fff7ec;
+ color: #fdc36e;
+ border-radius: 30rpx;
+}
+.status.green{
+ color: #2dfe2e;
+ background: rgba(45,254,46,0.1)
+}
+.status.red{
+ color: red;
+ background: rgba(255,0,0,0.1)
+}
+.row{
+ border-bottom: 1px dashed #EEE;
+ font-size: 32rpx;
+ color: #888;
+ line-height: 60rpx;
+}
+.photo{
+ margin: 50rpx 0;
+}
+.photo image{
+ width: 140rpx;
+ height: 140rpx;
+ margin-right: 10rpx;
+ margin-bottom: 10rpx;
+}
+.position{
+ font-size: 36rpx;
+ color: #06a3f6;
+ margin-bottom: 10rpx;
+}
+.map-box map{
+ width: 100%;
+ height: 400rpx;
+}
+.handle-info{
+ border-radius: 10rpx;
+ background: #fff;
+ margin-top: 15rpx;
+ padding: 20rpx 20rpx 10rpx;
+}
+.handle-photo{
+ margin: 20rpx 0 0;
+}
+.handle-title{
+ font-size: 36rpx;
+ color: #888;
+}
+.handle-title text{
+ color: red;
+}
+.check-box{
+ padding: 20rpx;
+ background: #fff;
+ border-radius: 10rpx;
+ margin-top: 15rpx;
+}
+.check-content{
+ background: #f2f1f6;
+ margin-bottom: 20rpx;
+}
+.check-content textarea{
+ width: 100%;
+ height: 300rpx;
+ padding: 15rpx;
+ box-sizing: border-box;
+}
+.qualified{
+ display: flex;
+ justify-content: space-between;
+ background: #f2f1f6;
+ padding: 15rpx;
+}
+.qualified label{
+ margin-right: 20rpx;
+}
+.qualified label:last-child{
+ margin-right: 0;
+}
+.satisfied{
+ margin-top: 15rpx;
+ background: #f2f1f6;
+ padding: 15rpx;
+}
+.satisfied-title{
+ font-size: 36rpx;
+}
+.satisfied-box label{
+ display: block;
+ margin-top: 15rpx;
+}
+.choose-photo{
+ margin-top: 15rpx;
+}
+.choose-photo .img-box{
+ width: 32%;
+ height: 140rpx;
+ margin-right: 2%;
+ margin-bottom: 10rpx;
+ position: relative;
+ display: inline-block;
+}
+.img-box image{
+ width: 100%;
+ height: 100%;
+}
+.img-box .delete-btn{
+ position: absolute;
+ top: -10rpx;
+ right: -10rpx;
+ width: 40rpx;
+ height: 40rpx;
+}
+.choose-photo .img-box:nth-child(3n){
+ margin-right: 0;
+}
+.photo-main{
+ background: none;
+ padding: 0;
+}
+.add{
+ display: inline-block;
+ width: 32%;
+ height: 140rpx;
+ background: #f1f1f6;
+ position: relative;
+}
+.add image{
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 60rpx;
+ height: 60rpx;
+}
+.submit{
+ width: 710rpx;
+ height: 100rpx;
+ background: #008cff;
+ line-height: 100rpx;
+ text-align: center;
+ color: #fff;
+ border-radius: 10rpx;
+ margin: 15rpx auto;
+}
+.check-container{
+ margin-top: 15rpx;
+}
\ No newline at end of file
diff --git a/pages/caseDetail/caseDetail.js b/pages/caseDetail/caseDetail.js
new file mode 100644
index 0000000..1cef167
--- /dev/null
+++ b/pages/caseDetail/caseDetail.js
@@ -0,0 +1,122 @@
+const app = getApp()
+// var QQMapWX = require('../../lib/qqmap-wx-jssdk.js');
+var bmap = require('../../lib/bmap-wx.js');
+// pages/caseDetail/caseDetail.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ requestUrl: app.requestUrl,
+ token: '',
+ caseId: '',
+ caseDetail: {},
+ longitude: '',
+ latitude: '',
+ markers: [],
+ imageList: []
+ },
+ // 获取详情
+ getDetail: function () {
+ var self = this
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/reportcase/getreportcase/' + self.data.caseId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var imgArr
+ imgArr = data.casePhotos.split(',')
+ var arr = [{longitude: data.caseLongitude,latitude: data.caseLatitude,iconPath:'../../images/marker_red.png',width:'25px',height: '30px'}]
+ // varwxMarkerData = arr;
+ self.setData({
+ markers: arr
+ });
+ self.setData({
+ caseDetail: data,
+ longitude: data.caseLongitude,
+ latitude: data.caseLatitude,
+ imageList: imgArr
+ })
+ });
+ },
+ // 查看流程
+ goProcess: function () {
+ var self = this
+ wx.navigateTo({
+ url: '../process/process?id=' + self.data.caseId,
+ })
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({
+ caseId: options.id
+ })
+ wx.getStorage({
+ key: 'token',
+ success: function (res) {
+ self.setData({
+ token: res.data
+ })
+ self.getDetail()
+ }
+ })
+
+ var BMap = new bmap.BMapWX({
+ ak: 'Zk732rbyjd327q7Zj9EOtRjUn2ED1GWK'
+ });
+
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/caseDetail/caseDetail.json b/pages/caseDetail/caseDetail.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/caseDetail/caseDetail.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/caseDetail/caseDetail.wxml b/pages/caseDetail/caseDetail.wxml
new file mode 100644
index 0000000..3e577e8
--- /dev/null
+++ b/pages/caseDetail/caseDetail.wxml
@@ -0,0 +1,31 @@
+
+
+
+ {{caseDetail.communityName}}
+ 待处理
+ 待立案
+ 待下派
+ 待处理
+ 待检查
+ 待结案
+ 已归档
+ 案件异常
+
+
+ {{caseDetail.caseContent}}
+ 上报时间:{{caseDetail.reportDate}}
+ 上报类型:{{caseDetail.caseTypeName}}
+ 上报人员:{{caseDetail.caseReporter}}
+
+
+
+
+
+ {{caseDetail.casePosition}}
+
+
+
+
+ 查看流程
+
+
\ No newline at end of file
diff --git a/pages/caseDetail/caseDetail.wxss b/pages/caseDetail/caseDetail.wxss
new file mode 100644
index 0000000..62ad6a8
--- /dev/null
+++ b/pages/caseDetail/caseDetail.wxss
@@ -0,0 +1,81 @@
+page{
+ background: #f2f1f6;
+}
+.case{
+ width: 710rpx;
+ margin: 20rpx auto;
+ padding: 20rpx;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 10rpx;
+}
+.case-info{
+ margin-bottom: 15rpx;
+}
+.title-status{
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 10rpx;
+}
+.title{
+ font-size: 36rpx;
+ line-height: 60rpx;
+ display: inline-block;
+ max-width: 65%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: #06a3f6;
+}
+.status{
+ line-height: 60rpx;
+ display: inline-block;
+ padding: 0 30rpx;
+ background: #fff7ec;
+ color: #fdc36e;
+ border-radius: 30rpx;
+}
+.status.green{
+ color: #2dfe2e;
+ background: rgba(45,254,46,0.1)
+}
+.status.red{
+ color: red;
+ background: rgba(255,0,0,0.1)
+}
+.row{
+ border-bottom: 1px dashed #EEE;
+ font-size: 32rpx;
+ color: #888;
+ line-height: 60rpx;
+}
+.photo{
+ margin: 50rpx 0;
+}
+.photo image{
+ width: 140rpx;
+ height: 140rpx;
+ margin-right: 10rpx;
+ margin-bottom: 10rpx;
+}
+.position{
+ font-size: 36rpx;
+ color: #06a3f6;
+ margin-bottom: 10rpx;
+}
+.map-box map{
+ width: 100%;
+ height: 400rpx;
+}
+.process{
+ width: 100%;
+ height: 80rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 10rpx;
+ background: #06a3f6;
+ color: #fff;
+ font-size: 30rpx;
+ margin-top: 15rpx;
+}
\ No newline at end of file
diff --git a/pages/caseReport/caseReport.js b/pages/caseReport/caseReport.js
new file mode 100644
index 0000000..021c93a
--- /dev/null
+++ b/pages/caseReport/caseReport.js
@@ -0,0 +1,472 @@
+const app = getApp()
+var bmap = require('../../lib/bmap-wx.js');
+let wxMarkerData = [];
+// pages/caseReport/caseReport.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ address: '获取案件地址中...',
+ recodePath: '',
+ recorderManager: wx.getRecorderManager(),
+ innerAudioContext: wx.createInnerAudioContext(),
+ // 办事处
+ officeIndex: 0,
+ officeArray: [],
+ officeList: [],
+ officeSelectedId: '',
+ // 社区
+ communityIndex: 0,
+ communityArray: [],
+ communityList: [],
+ communitySelectedId: '',
+ // 类型
+ typeIndex: 0,
+ typeArray: [],
+ typeList: [],
+ typeSelectedId: '',
+ // 类型二级
+ typeLvIndex: 0,
+ typeLvArray: [],
+ typeLvList: [],
+ typeLvSelectedId: '',
+ // 案件类型
+ caseIndex: 0,
+ caseArray: [],
+ caseList: [],
+ caseSelectedId: '',
+ photoList: [],
+ startTouch: {},
+ selfHandle: 0,
+ caseDesc: '',
+ imageList: [],
+ token: ''
+ },
+ // 办事处列表
+ getOfficeList: function () {
+ var self = this
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/dict/listdict/9d179f05-3ea0-48f7-853c-d3b7124b791c', [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var arr = []
+ for (let i = 0 ; i < data.length; i++) {
+ arr.push(data[i].dictName)
+ }
+ self.setData({
+ officeArray: arr,
+ officeList: data,
+ officeSelectedId: data[0].dictId
+ })
+ self.getCommunityList()
+ });
+ },
+ // 办事处选中
+ bindPickerChange: function (e) {
+ var self = this
+ this.setData({
+ officeIndex: e.detail.value,
+ officeSelectedId: self.data.officeList[e.detail.value].dictId
+ })
+ wx.showToast({
+ title: '加载中',
+ icon: 'loading'
+ })
+ this.getCommunityList()
+ },
+ // 社区列表
+ getCommunityList: function () {
+ var self = this
+ self.setData({
+ communityIndex: 0
+ })
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/community/listareacommunity/' + self.data.officeSelectedId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var arr = []
+ for (let i = 0 ; i < data.length; i++) {
+ arr.push(data[i].communityName)
+ }
+ self.setData({
+ communityArray: arr,
+ communityList: data,
+ communitySelectedId: data[0].communityId
+ })
+ wx.hideToast()
+ });
+ },
+ // 选中社区
+ bindCommunityChange: function (e) {
+ var self = this
+ this.setData({
+ communityIndex: e.detail.value,
+ communitySelectedId: self.data.communityList[e.detail.value].communityId
+ })
+ },
+ // 类型列表
+ getTypeList: function () {
+ var self = this
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/dict/listdict/46d108b2-4ef9-4f6f-b30c-0c700e3ee852' + self.data.officeSelectedId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var arr = []
+ for (let i = 0 ; i < data.length; i++) {
+ arr.push(data[i].dictName)
+ }
+ self.setData({
+ typeArray: arr,
+ typeList: data,
+ typeSelectedId: data[0].dictId
+ })
+ self.getTypeLv()
+ });
+ },
+ // 类型选中
+ bindTypeChange: function (e) {
+ var self = this
+ this.setData({
+ typeIndex: e.detail.value,
+ typeSelectedId: self.data.typeList[e.detail.value].dictId
+ })
+ self.getTypeLv()
+ },
+ // 类型二级
+ getTypeLv: function () {
+ var self = this
+ self.setData({
+ typeLvIndex: 0
+ })
+ wx.showToast({
+ title: '加载中',
+ icon: 'loading'
+ })
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/dict/listdict/' + self.data.typeSelectedId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var arr = []
+ for (let i = 0 ; i < data.length; i++) {
+ arr.push(data[i].dictName)
+ }
+ self.setData({
+ typeLvArray: arr,
+ typeLvList: data,
+ typeLvSelectedId: data[0].dictId
+ })
+ wx.hideToast()
+ });
+ },
+ // 类型二级选中
+ bindTypeLvChange: function (e) {
+ var self = this
+ this.setData({
+ typeLvIndex: e.detail.value,
+ typeLvSelectedId: self.data.typeLvList[e.detail.value].dictId
+ })
+ self.getTypeLv()
+ },
+ // 案件类型列表
+ getCaseList: function () {
+ var self = this
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/dict/listdict/46d108b2-4ef9-4f6f-b30c-0c700e3ee852' + self.data.officeSelectedId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var arr = []
+ for (let i = 0 ; i < data.length; i++) {
+ arr.push(data[i].dictName)
+ }
+ self.setData({
+ typeArray: arr,
+ typeList: data,
+ typeSelectedId: data[0].dictId
+ })
+ self.getTypeLv()
+ });
+ },
+ // 录音
+ recordVoice: function (e) {
+ this.setData({
+ startTouch: e.touches[0]
+ })
+ var options = {
+ format: 'mp3'
+ }
+ this.data.recorderManager.start(options)
+ wx.showToast({
+ title: "正在录音",
+ icon: "none",
+ duration: 60000//先定义个60秒,后面可以手动调用wx.hideToast()隐藏
+ });
+ },
+ // 录音结束
+ recordEnd: function () {
+ var self = this
+ this.data.recorderManager.stop()
+ this.data.recorderManager.onStop(function (res) {
+ var path = res.tempFilePath
+ self.setData({
+ recodePath: path
+ })
+ wx.showToast({
+ title: '上传中',
+ icon: 'loading'
+ })
+ app.restAjax.file(app.restAjax.path('{requestUrl}app/file/uploadaudio', [app.requestUrl]), path, 'audio', {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var id = JSON.parse(data).data
+ self.setData({
+ audioId: id
+ })
+ wx.hideToast()
+ }, function (code, data) {
+ console.log(data)
+ })
+ })
+ var self = this
+ wx.hideToast()
+ },
+ // 播放录音
+ playRecord: function () {
+ var innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.src = this.data.recodePath
+ innerAudioContext.play()
+ },
+ // 选择图片
+ chooseImage: function () {
+ var self = this
+ wx.chooseImage({
+ count: 9 - self.data.photoList.length,
+ sourceType: ['album', 'camera'],
+ success: function (res) {
+ self.setData({
+ photoList: self.data.photoList.concat(res.tempFiles)
+ })
+ wx.showToast({
+ title: '上传中',
+ icon: 'loading'
+ })
+ var arr = []
+ for (let i = 0; i < res.tempFiles.length; i++) {
+ var path = res.tempFiles[i].path;
+ app.restAjax.file(app.restAjax.path('{requestUrl}app/file/uploadimage', [app.requestUrl]), path, 'image', {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ var id = JSON.parse(data).data
+ arr.push(id)
+ if (arr.length == res.tempFiles.length) {
+ self.setData({
+ imageList: arr
+ })
+ wx.hideToast()
+ }
+ }, function (code, data) {
+ console.log(data)
+ })
+ }
+ }
+ })
+ },
+ // 删除图片
+ deleteImg: function (e) {
+ var idx = e.currentTarget.dataset.num
+ var self = this
+ self.data.photoList.splice(idx, 1)
+ self.data.imageList.splice(idx, 1)
+ self.setData({
+ photoList: self.data.photoList,
+ imageList: self.data.imageList
+ })
+ },
+ // touchMove: function (e) {
+ // var moveLenght = e.touches[e.touches.length - 1].clientY - this.data.startTouch.clientY;
+ // if (Math.abs(moveLenght) > 50) {
+ // wx.showToast({
+ // title: "松开手指,取消发送",
+ // icon: "none",
+ // duration: 60000
+ // });
+ // } else {
+ // wx.showToast({
+ // title: "正在录音,上划取消发送",
+ // icon: "none",
+ // duration: 60000
+ // });
+ // }
+ // },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ // 是否自行处理
+ isSelfHandle: function (e) {
+ this.setData({
+ selfHandle: e.detail.value
+ })
+ },
+ // 提交上报
+ submitReport: function () {
+ var self = this
+ var photos = ''
+ if (!self.data.caseDesc) {
+ wx.showToast({
+ title: '案件内容不能为空',
+ icon: 'none',
+ duration: 2000
+ })
+ return
+ }
+ if (self.data.imageList.length != 'undefined' && self.data.imageList.length != 0) {
+ for (let i = 0; i < self.data.imageList.length; i++) {
+ if (i == self.data.imageList.length - 1) {
+ photos += self.data.imageList[i]
+ } else {
+ photos += self.data.imageList[i] + ','
+ }
+ }
+ } else {
+ wx.showToast({
+ title: '请至少上传一张照片',
+ icon: 'none',
+ duration: 2000
+ })
+ return
+ }
+
+ var info = {
+ areaId: self.data.officeSelectedId,
+ areaName: self.data.officeArray[self.data.officeIndex],
+ casePhotos: photos,
+ caseAudio: self.data.audioId,
+ communityId: self.data.communitySelectedId,
+ communityName: self.data.communityArray[self.data.communityIndex],
+ caseSource: 1,
+ isSelf: self.data.selfHandle,
+ caseTypeId: self.data.typeLvSelectedId,
+ caseTypeName: self.data.typeLvArray[self.data.typeLvIndex],
+ caseContent: self.data.caseDesc,
+ caseLatitude: self.data.latitude,
+ caseLongitude: self.data.longitude,
+ casePosition: self.data.address
+ }
+ wx.showToast({
+ title: '上传中',
+ icon: 'loading'
+ })
+ app.restAjax.post(app.restAjax.path('{reqesutUrl}app/reportcase/saveappautoreportcase', [app.requestUrl]), info, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ if (code == '200') {
+ wx.hideToast()
+ wx.showToast({
+ title: '上报成功',
+ duration: 1500
+ })
+ setTimeout(function () {
+ wx.navigateTo({
+ url: '../index/index',
+ })
+ }, 1500)
+ }
+ }, function (code, data) {
+ wx.showToast({
+ title: data.msg,
+ duration: 2000
+ })
+ });
+ },
+ onLoad: function (options) {
+ var self = this
+ wx.getStorage({
+ key: 'token',
+ success: function (res) {
+ self.setData({
+ token: res.data
+ })
+ self.getOfficeList()
+ self.getTypeList()
+ }
+ })
+ var BMap = new bmap.BMapWX({
+ ak: 'Zk732rbyjd327q7Zj9EOtRjUn2ED1GWK'
+ });
+ var success = function (data) {
+ self.setData({
+ address: data.wxMarkerData[0].address,
+ latitude: data.wxMarkerData[0].latitude,
+ longitude: data.wxMarkerData[0].longitude
+ })
+ }
+ var fail = function (data) {
+ console.log(data);
+ }
+ BMap.regeocoding({
+ fail:fail,
+ success:success
+ });
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/caseReport/caseReport.json b/pages/caseReport/caseReport.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/caseReport/caseReport.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/caseReport/caseReport.wxml b/pages/caseReport/caseReport.wxml
new file mode 100644
index 0000000..04c5c3e
--- /dev/null
+++ b/pages/caseReport/caseReport.wxml
@@ -0,0 +1,132 @@
+
+ 基本信息
+
+
+ *
+
+
+
+
+ {{officeArray[officeIndex]}}
+
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ {{communityArray[communityIndex]}}
+
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ {{typeArray[typeIndex]}}
+
+
+
+
+
+
+
+
+
+ *
+
+
+
+
+ {{typeLvArray[typeLvIndex]}}
+
+
+
+
+
+
+
+
+
+ *
+
+ 巡检采集
+
+
+
+ *
+
+ 自行处理
+
+
+
+
+
+
+
+
+ *
+
+ {{address}}
+
+
+
+
+
+ 详细信息
+
+
+ *
+
+
+
+
+
+
+
+
+ 录音
+
+
+
+ 播放录音
+
+ 长按录音
+
+
+
+
+ *
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上报
+
\ No newline at end of file
diff --git a/pages/caseReport/caseReport.wxss b/pages/caseReport/caseReport.wxss
new file mode 100644
index 0000000..70ba910
--- /dev/null
+++ b/pages/caseReport/caseReport.wxss
@@ -0,0 +1,191 @@
+page{
+ background: #f2f1f6;
+}
+.report, .detail{
+ padding: 0 20rpx;
+}
+.report{
+ margin-bottom: 15rpx;
+}
+.title, .detail-title{
+ font-size: 36rpx;
+ margin-bottom: 15rpx;
+}
+.info{
+ padding: 20rpx 20rpx 0;
+ overflow: hidden;
+ background: #fff;
+ border-radius: 10rpx;
+ box-shadow: 0 0 10rpx #EEE;
+}
+.row{
+ margin-bottom: 20rpx;
+ position: relative;
+ padding-left: 20rpx;
+}
+.required{
+ position: absolute;
+ top: 0;
+ left: 0;
+ color: red;
+}
+.main{
+ background: #f1f1f6;
+ width: 100%;
+ height: 75rpx;
+ border-radius: 10rpx;
+ padding: 0 15rpx;
+ box-sizing: border-box;
+ position: relative;
+}
+.main input{
+ width: 100%;
+ height: 100%;
+}
+.selected{
+ display: block;
+ line-height: 75rpx;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ padding-right: 75rpx;
+}
+.select-icon{
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 75rpx;
+ height: 75rpx;
+}
+.select-icon image{
+ width: 30rpx;
+ height: 22rpx;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%,-50%);
+}
+.detail-required{
+ color: red;
+}
+.detail-row{
+ margin-bottom: 20rpx;
+ padding-left: 0;
+}
+.detail-row textarea{
+ width: 100%;
+ height: 200rpx;
+ padding: 10rpx;
+ box-sizing: border-box;
+ background: #f1f1f6;
+}
+.detail .info{
+ padding: 20rpx;
+}
+.voice{
+ display: flex;
+ justify-content: space-between;
+ padding: 20rpx;
+ background: #f1f1f6;
+ border-radius: 10rpx;
+}
+.detail-info{
+ background: #FFF;
+ border-radius: 10rpx;
+ padding: 20rpx 20rpx 0;
+ overflow: hidden;
+}
+.detail-main{
+ height: auto;
+}
+.voice-btn{
+ height: 70rpx;
+ padding: 0 20rpx;
+ background: #008cff;
+ color: #fff;
+ border-radius: 10rpx;
+ line-height: 70rpx;
+}
+.voice-info{
+ line-height: 70rpx;
+ padding-left: 50rpx;
+ position: relative;
+}
+.voice-info image{
+ position: absolute;
+ top: 50%;
+ left: 0;
+ width: 45rpx;
+ height: 45rpx;
+ transform: translate(0,-50%);
+}
+.choose-photo .img-box{
+ width: 32%;
+ height: 140rpx;
+ margin-right: 2%;
+ margin-bottom: 10rpx;
+ position: relative;
+ display: inline-block;
+}
+.img-box image{
+ width: 100%;
+ height: 100%;
+}
+.img-box .delete-btn{
+ position: absolute;
+ top: -10rpx;
+ right: -10rpx;
+ width: 40rpx;
+ height: 40rpx;
+}
+.choose-photo .img-box:nth-child(3n){
+ margin-right: 0;
+}
+.photo-main{
+ background: none;
+ padding: 0;
+}
+.submit{
+ width: 710rpx;
+ height: 100rpx;
+ background: #008cff;
+ line-height: 100rpx;
+ text-align: center;
+ color: #fff;
+ border-radius: 10rpx;
+ margin: 15rpx auto;
+}
+.add{
+ display: inline-block;
+ width: 32%;
+ height: 140rpx;
+ background: #f1f1f6;
+ position: relative;
+}
+.add image{
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 60rpx;
+ height: 60rpx;
+}
+.address{
+ line-height: 75rpx;
+}
+.self-box{
+ display: flex;
+ justify-content: space-between;
+}
+.self, .self-check label{
+ line-height: 75rpx;
+}
+.self-check label{
+ margin-right: 15rpx;
+}
+.self-check label:last-child{
+ margin-right: 0;
+}
+.address-main{
+ height: auto;
+}
\ No newline at end of file
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..853daaf
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,195 @@
+const app = getApp()
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ token: '',
+ areaList: [],
+ requestUrl: app.requestUrl,
+ page: {
+ page: 1,
+ rows: 20,
+ totalPage: 1
+ },
+ tab: 0
+ },
+ // 登录
+ doLogin: function () {
+ var self = this
+ wx.login({
+ success: function (res) {
+ app.restAjax.post(app.restAjax.path('{url}wxminiapp/auth/login', [app.loginUrl]), {
+ jsCode: res.code
+ }, null, function (code, data) {
+ var tokenArray = data.data.split('_');
+ var token = tokenArray[0];
+ self.setData({
+ token: token
+ })
+ wx.setStorageSync('token', token);
+ self.getList()
+ }, function (code, data) {
+ app.dialog.msg(data.msg);
+ });
+ }
+ })
+ },
+ // 获取列表
+ getList: function () {
+ var self = this
+ wx.showToast({
+ title: '加载中',
+ icon: 'loading'
+ })
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/reportcase/listpagereportcase', [app.requestUrl]), self.data.page, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ if(data.rows.length == 0) {
+ self.setData({
+ [`page.page`] : self.data.page.page - 1
+ })
+ app.dialog.msg('暂无更多')
+ return false;
+ }
+ data.rows.forEach(function (i) {
+ i.casePhotos = i.casePhotos.split(',')[0]
+ })
+ if (self.data.page.page == 1) {
+ self.setData({
+ areaList: data.rows
+ })
+ } else {
+ self.setData({
+ areaList: self.data.areaList.concat(data.rows)
+ })
+ }
+ wx.hideToast()
+ });
+ },
+ // 查看详情
+ goDetail: function (e) {
+ if (e.currentTarget.dataset.status == '4') {
+ wx.navigateTo({
+ url: '../caseCheck/caseCheck?id=' + e.currentTarget.dataset.id,
+ })
+ } else {
+ wx.navigateTo({
+ url: '../caseDetail/caseDetail?id=' + e.currentTarget.dataset.id,
+ })
+ }
+
+ },
+ // 前往上报
+ goReport: function () {
+ wx.navigateTo({
+ url: '../caseReport/caseReport',
+ })
+ },
+ // 切换
+ changeTab: function (e) {
+ var cur = e.currentTarget.dataset.tab
+ if (this.data.tab != cur) {
+ this.setData({
+ tab: cur,
+ [`page.page`]: 1
+ })
+ if (cur == '0') {
+ this.getList()
+ } else {
+ this.getCheckList()
+ }
+ }
+ },
+ // 获取待检查列表
+ getCheckList: function () {
+ var self = this
+ wx.showToast({
+ title: '加载中',
+ icon: 'loading'
+ })
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/reportcase/listpagereportcaseinspectofmine', [app.requestUrl]), self.data.page, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ if (self.data.page.page) {
+ self.setData({
+ areaList: data.rows
+ })
+ } else {
+ self.setData({
+ areaList: self.data.areaList.concat(data.rows)
+ })
+ }
+ wx.hideToast()
+ });
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.doLogin()
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+ var self = this
+ var pageNum = 'page.page'
+ self.setData({
+ [pageNum]: self.data.page.page + 1
+ })
+ if (self.data.tab == '0') {
+ this.getList()
+ } else {
+ this.getCheckList()
+ }
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/index/index.json b/pages/index/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/index/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..8f67b34
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,34 @@
+
+ 上报历史
+ 待检查
+
+
+
+
+
+
+
+
+
+ {{item.communityName}}
+ 待受理
+ 待立案
+ 待下派
+ 待处理
+ 待检查
+ 待结案
+ 已归档
+ 案件异常
+
+
+ {{item.caseContent}}
+
+
+
+
+ {{item.casePosition}}
+
+
+
+
+案件上报
\ No newline at end of file
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..d1b4dc6
--- /dev/null
+++ b/pages/index/index.wxss
@@ -0,0 +1,109 @@
+page{
+ background: #f2f1f6;
+}
+.tab-box{
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ height: 100rpx;
+ display: flex;
+ background: #fff;
+ overflow-x: auto;
+}
+.tab{
+ display: flex;
+ flex: 1;
+ flex-shrink: 0;
+ justify-content: center;
+ align-items: center;
+ font-size: 30rpx;
+ box-sizing: border-box;
+}
+.tab.active{
+ font-size: 36rpx;
+ color: #226cd9;
+ border-bottom: 3px solid #226cd9;
+}
+.list{
+ margin-top: 100rpx;
+ padding: 20rpx 20rpx 0;
+}
+.list-box{
+ padding: 20rpx;
+ background: #fff;
+ border-radius: 10rpx;
+ margin-bottom: 20rpx;
+ display: flex;
+ justify-content: space-between;
+}
+.avatar, .avatar image{
+ width: 150rpx;
+ height: 150rpx;
+}
+.case{
+ width: 500rpx;
+}
+.case-info{
+ border-bottom: 1px dashed #EEE;
+}
+.case-title{
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 10rpx;
+}
+.title{
+ font-size: 36rpx;
+ line-height: 60rpx;
+ display: inline-block;
+ max-width: 65%;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.status{
+ line-height: 60rpx;
+ display: inline-block;
+ padding: 0 30rpx;
+ background: #fff7ec;
+ color: #fdc36e;
+ border-radius: 30rpx;
+}
+.status.green{
+ color: #2dfe2e;
+ background: rgba(45,254,46,0.1)
+}
+.status.red{
+ color: red;
+ background: rgba(255,0,0,0.1)
+}
+.case-desc{
+ font-size: 28rpx;
+ color: #888;
+ margin-bottom: 10rpx;
+}
+.case-postion{
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ font-size: 28rpx;
+ color: #108aff;
+ margin-top: 10rpx;
+}
+.case-postion image{
+ width: 30rpx;
+ height: 28rpx;
+}
+.new-case{
+ position: fixed;
+ bottom: 40rpx;
+ right: 40rpx;
+ width: 120rpx;
+ height: 120rpx;
+ background: #108aff;
+ color: #fff;
+ border-radius: 50%;
+ padding: 20rpx;
+ box-sizing: border-box;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/pages/process/process.js b/pages/process/process.js
new file mode 100644
index 0000000..8002525
--- /dev/null
+++ b/pages/process/process.js
@@ -0,0 +1,98 @@
+const app = getApp()
+// pages/process/process.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ requestUrl: app.requestUrl,
+ token: '',
+ caseId: '',
+ processList: []
+ },
+ // 获取流程
+ getProcess: function () {
+ var self = this
+ app.restAjax.get(app.restAjax.path('{reqesutUrl}app/reportcase/listreportcaselog/' + self.data.caseId, [app.requestUrl]), {}, {
+ headers: {
+ token: self.data.token
+ }
+ }, function (code, data) {
+ console.log(data)
+ for (let i = 0; i < data.length; i++) {
+ data[i].userPhotos = data[i].userPhotos.split(',')
+ }
+ self.setData({
+ processList: data
+ })
+ });
+ },
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({
+ caseId: options.id
+ })
+ wx.getStorage({
+ key: 'token',
+ success: function (res) {
+ self.setData({
+ token: res.data
+ })
+ self.getProcess()
+ }
+ })
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/process/process.json b/pages/process/process.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/process/process.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/process/process.wxml b/pages/process/process.wxml
new file mode 100644
index 0000000..521a917
--- /dev/null
+++ b/pages/process/process.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+ {{item.gmtCreate}}
+ {{item.optionType}}
+
+
+ 处理人:{{item.userName}}
+ 处理描述:{{item.userOpinion}}
+ 受理人:{{item.handleUserName}}
+ 处理时限:{{item.handleTime}}天
+
+ 同意处理
+ 未处理
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/process/process.wxss b/pages/process/process.wxss
new file mode 100644
index 0000000..c11ffc9
--- /dev/null
+++ b/pages/process/process.wxss
@@ -0,0 +1,64 @@
+page{
+ background: #f2f1f6;
+}
+.process{
+ padding: 0 10rpx 0 25rpx;
+}
+.process-box{
+ border-left: 3px solid #17bef5;
+ box-sizing: border-box;
+ padding-left: 25rpx;
+ padding-bottom: 15rpx;
+}
+.time-status{
+ display: flex;
+ justify-content: space-between;
+ position: relative;
+ font-size: 30rpx;
+ padding: 10rpx 0;
+}
+.point{
+ position: absolute;
+ top: 26rpx;
+ left: -42rpx;
+ width: 30rpx;
+ height: 30rpx;
+ background: #17bef5;
+ border-radius: 50%;
+}
+.time{
+ line-height: 60rpx;
+}
+.status{
+ line-height: 60rpx;
+ padding: 0 20rpx;
+ background: #dae5f7;
+ color: #158afa;
+ border-radius: 30rpx;
+}
+.process-content{
+ padding: 20rpx;
+ background: #fff;
+ border-radius: 10rpx;
+}
+.row{
+ border-bottom: 1px dashed #EEE;
+ font-size: 28rpx;
+ color: #888;
+ line-height: 50rpx;
+}
+.row text.green{
+ color: #2dfe2e;
+}
+.row text.gray{
+ color: #888;
+}
+.process-img{
+ margin-top: 10rpx;
+}
+.process-img image{
+ width: 140rpx;
+ height: 140rpx;
+ margin-right: 10rpx;
+ margin-bottom: 10rpx;
+}
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..5c97c05
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,70 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "enhance": false,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": false,
+ "coverView": true,
+ "nodeModules": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "uglifyFileName": false,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "compileHotReLoad": false,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "bundle": false,
+ "useIsolateContext": true,
+ "useCompilerModule": true,
+ "userConfirmedUseCompilerModuleSwitch": false,
+ "userConfirmedBundleSwitch": false,
+ "packNpmManually": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.15.0",
+ "appid": "wxc529578602bca580",
+ "projectname": "report",
+ "debugOptions": {
+ "hidedInDevtools": []
+ },
+ "scripts": {},
+ "isGameTourist": false,
+ "condition": {
+ "search": {
+ "list": []
+ },
+ "conversation": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "plugin": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /dev/null
+++ b/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/utils/dialog.js b/utils/dialog.js
new file mode 100644
index 0000000..ef95156
--- /dev/null
+++ b/utils/dialog.js
@@ -0,0 +1,15 @@
+function msg(text) {
+ wx.showToast({
+ title: text,
+ icon: 'none',
+ duration: 1000
+ })
+}
+function loading(msg) {
+ wx.showLoading({
+ title: msg,
+ mask: true
+ })
+}
+module.exports.msg = msg;
+module.exports.loading = loading;
\ No newline at end of file
diff --git a/utils/restAjax.js b/utils/restAjax.js
new file mode 100644
index 0000000..c818e8d
--- /dev/null
+++ b/utils/restAjax.js
@@ -0,0 +1,227 @@
+var methods = {
+ POST_METHOD: 'POST',
+ DELETE_METHOD: 'DELETE',
+ PUT_METHOD: 'PUT',
+ GET_METHOD: 'GET'
+};
+
+/**
+ * 新增
+ * @param url
+ * @param dataObj
+ * @param args
+ * @param successCallback
+ * @param errorCallback
+ * @param completeCallback
+ */
+function postJson(url, dataObj, args, successCallback, errorCallback, completeCallback) {
+ doAjax(url, methods.POST_METHOD, dataObj, args, successCallback, errorCallback, completeCallback);
+}
+
+/**
+ * 删除
+ * @param url
+ * @param dataObj
+ * @param args
+ * @param successCallback
+ * @param errorCallback
+ * @param completeCallback
+ */
+function deleteForm(url, dataObj, args, successCallback, errorCallback, completeCallback) {
+ doAjax(url, methods.DELETE_METHOD, dataObj, args, successCallback, errorCallback, completeCallback);
+}
+
+/**
+ * 修改
+ * @param url
+ * @param dataObj
+ * @param args
+ * @param successCallback
+ * @param errorCallback
+ * @param completeCallback
+ */
+function putJson(url, dataObj, args, successCallback, errorCallback, completeCallback) {
+ doAjax(url, methods.PUT_METHOD, dataObj, args, successCallback, errorCallback, completeCallback);
+}
+
+/**
+ * 查询
+ * @param url
+ * @param dataObj
+ * @param args
+ * @param successCallback
+ * @param errorCallback
+ * @param completeCallback
+ */
+function getForm(url, dataObj, args, successCallback, errorCallback, completeCallback) {
+ doAjax(url, methods.GET_METHOD, dataObj, args, successCallback, errorCallback, completeCallback);
+}
+
+/**
+ * 执行上传
+ * @param url
+ * @param method
+ * @param dataObj
+ * @param args
+ * @param successCallback
+ * @param errorCallback
+ * @param completeCallback
+ */
+function doAjax(url, method, dataObj, args, successCallback, errorCallback, completeCallback) {
+ var headers = {};
+ if (args != null && typeof (args.headers) != 'undefined' && args.headers != null) {
+ headers = args.headers;
+ }
+ wx.request({
+ url: url,
+ method: method,
+ data: dataObj,
+ header: headers,
+ dataType: 'json',
+ success: function (response) {
+ if (response.statusCode == 200) {
+ successCallback(response.statusCode, response.data, args);
+ } else {
+ if (errorCallback && typeof (errorCallback) == 'function') {
+ errorCallback(response.statusCode, response.data);
+ }
+ }
+ },
+ fail: function (response) {
+ console.log(response);
+ },
+ complete: function () {
+ if (completeCallback && typeof (completeCallback) == 'function') {
+ completeCallback();
+ }
+ }
+ })
+}
+
+/**
+ * 检测是路径参数有重复值
+ * @param pathArgArray
+ * @returns {boolean}
+ */
+function pathArgsHasSameValue(pathArgArray) {
+ var tempArgIndex = 0;
+ var tempArgs = pathArgArray[tempArgIndex];
+ for (var i = (tempArgIndex + 1), item; item = pathArgArray[i]; i++) {
+ if (tempArgs == item) {
+ throw new Error('参数' + item + '有重复值!!!');
+ }
+ if (i == pathArgArray.length - 1) {
+ tempArgs = pathArgArray[++tempArgIndex];
+ i = tempArgIndex;
+ continue;
+ }
+ }
+}
+
+/**
+ * 获取页面间传递的参数
+ * @param url
+ */
+function getParamsArg(url) {
+ var params = url.split('?')[1];
+ var paramsObj = {};
+ if (typeof (params) == 'undefined' || params == null) {
+ return paramsObj;
+ }
+ var paramsKVs = params.split('&');
+ for (var i = 0, item = null; item = paramsKVs[i++];) {
+ var kvs = item.split('=');
+ if (kvs.length == 1) {
+ paramsObj[kvs[0]] = null;
+ }
+ if (kvs.length == 2) {
+ paramsObj[kvs[0]] = decodeURI(kvs[1]);
+ }
+ }
+ return paramsObj;
+}
+
+/**
+ * 构建路径
+ * @param basePath 请求路径,{参数},
+ * @param pathArgs 替换的路径参数,不能重复
+ * @returns {*}
+ */
+function buildPath(basePath, pathArgs) {
+ var path = basePath;
+ if (!basePath || !(typeof (basePath) == 'string')) {
+ throw new Error('basePath必须为字符串!!!');
+ }
+ if (!pathArgs || !Array.isArray(pathArgs)) {
+ throw new Error('pathArgs必须为数组!!!');
+ }
+ var pathArgArray = basePath.match(/\{\w+\}/g);
+ if (!pathArgArray) {
+ return path;
+ }
+ pathArgsHasSameValue(pathArgArray);
+ for (var i = 0, item; item = pathArgArray[i]; i++) {
+ path = path.replace(item, pathArgs[i]);
+ }
+ return path;
+}
+
+/**
+ * 通过form对象上传文件
+ * @param url
+ * @param formData
+ * @param args
+ * @param successCallback
+ * @param errorCallback
+ * @param beforeCallback
+ * @param completeCallback
+ */
+function postFile(url, path, name, args, successCallback, errorCallback, completeCallback) {
+ var headers = {};
+ if (args != null && typeof (args.headers) != 'undefined' && args.headers != null) {
+ headers = args.headers;
+ }
+ wx.uploadFile({
+ filePath: path,
+ name: name,
+ url: url,
+ header: headers,
+ success: function (response) {
+ if (response.statusCode == 200) {
+ successCallback(response.statusCode, response.data, args);
+ } else {
+ if (errorCallback && typeof (errorCallback) == 'function') {
+ errorCallback(response.statusCode, response.data);
+ }
+ }
+ },
+ fail: function (response) {
+ console.log(response);
+ },
+ complete: function () {
+ if (completeCallback && typeof (completeCallback) == 'function') {
+ completeCallback();
+ }
+ }
+ })
+};
+
+/**
+ * xss 转义
+ * @param html
+ * @returns {string}
+ */
+function escape(html) {
+ return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&')
+ .replace(//g, '>')
+ .replace(/'/g, ''').replace(/"/g, '"');
+}
+
+module.exports.post = postJson;
+module.exports.delete = deleteForm;
+module.exports.put = putJson;
+module.exports.get = getForm;
+module.exports.params = getParamsArg;
+module.exports.path = buildPath;
+module.exports.escape = escape;
+module.exports.file = postFile;
\ No newline at end of file
diff --git a/utils/util.js b/utils/util.js
new file mode 100644
index 0000000..9e2b322
--- /dev/null
+++ b/utils/util.js
@@ -0,0 +1,32 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+
+ return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
+}
+
+/**
+ *
+ * @param {*} date
+ */
+const formatDate = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+
+ return [year, month, day].map(formatNumber).join('-')
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+}
+
+module.exports = {
+ formatTime: formatTime,
+ formatDate: formatDate
+}