Initial Commit
14
.gitignore
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
# Windows
|
||||
[Dd]esktop.ini
|
||||
Thumbs.db
|
||||
$RECYCLE.BIN/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
|
||||
# Node.js
|
||||
node_modules/
|
16
app.js
Normal file
@ -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
|
||||
}
|
||||
})
|
22
app.json
Normal file
@ -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": "你的位置信息将用于小程序位置接口的效果展示"
|
||||
}
|
||||
}
|
||||
}
|
10
app.wxss
Normal file
@ -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;
|
||||
}
|
BIN
images/camera.png
Normal file
After Width: | Height: | Size: 574 B |
BIN
images/default-avatar.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
images/delete.png
Normal file
After Width: | Height: | Size: 757 B |
BIN
images/marker_red.png
Normal file
After Width: | Height: | Size: 812 B |
BIN
images/position.png
Normal file
After Width: | Height: | Size: 598 B |
BIN
images/select.png
Normal file
After Width: | Height: | Size: 320 B |
BIN
images/vioce.png
Normal file
After Width: | Height: | Size: 757 B |
452
lib/bmap-wx.js
Normal file
@ -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;
|
1122
lib/qqmap-wx-jssdk.js
Normal file
228
pages/caseCheck/caseCheck.js
Normal file
@ -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 () {
|
||||
|
||||
}
|
||||
})
|
3
pages/caseCheck/caseCheck.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
89
pages/caseCheck/caseCheck.wxml
Normal file
@ -0,0 +1,89 @@
|
||||
<view class="check">
|
||||
<view class="case-info">
|
||||
<view class="title-status">
|
||||
<view class="title">{{caseDetail.communityName}}</view>
|
||||
<view class="status">待处理</view>
|
||||
</view>
|
||||
<view class="info">
|
||||
<view class="row">{{caseDetail.caseContent}}</view>
|
||||
<view class="row">上报时间:{{caseDetail.reportDate}}</view>
|
||||
<view class="row">上报类型:{{caseDetail.caseTypeName}}</view>
|
||||
<view class="row">上报人员:{{caseDetail.caseReporter}}</view>
|
||||
</view>
|
||||
<view class="photo">
|
||||
<image src="{{requestUrl}}route/file/downloadfile/true/{{item}}" wx:for="{{imageList}}" wx:key="index" wx:if="{{item}}"></image>
|
||||
</view>
|
||||
<view class="map">
|
||||
<view class="position">{{caseDetail.casePosition}}</view>
|
||||
<view class="map-box">
|
||||
<map name="map" show-location longitude='{{longitude}}' latitude='{{latitude}}' scale='14' markers='{{markers}}'></map>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="handle">
|
||||
<view class="handle-title">案件处理详情</view>
|
||||
<view class="info handle-info">
|
||||
<view class="row">处理人员:{{caseDetail.handleUserName}}</view>
|
||||
<view class="row">处理时间:{{caseDetail.handleCreateTime}}</view>
|
||||
<view class="row">{{caseDetail.handleOpinion}}</view>
|
||||
<view class="photo handle-photo">
|
||||
<image src="{{requestUrl}}route/file/downloadfile/true/{{item}}" wx:for="{{handleList}}" wx:key="index" wx:if="{{item}}"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="check-container">
|
||||
<view class="handle-title"><text>*</text>案件处理详情</view>
|
||||
<view class="check-box">
|
||||
<view class="check-content">
|
||||
<textarea placeholder="请输入评价内容" model:value="{{evaluateContent}}"></textarea>
|
||||
</view>
|
||||
<view class="qualified">
|
||||
<view class="text">是否合格</view>
|
||||
<view class="input-box">
|
||||
<radio-group bindchange="isQualified">
|
||||
<label>
|
||||
<radio value="1" color="#008cff" checked="checked">是</radio>
|
||||
</label>
|
||||
<label>
|
||||
<radio value="0" color="#008cff">否</radio>
|
||||
</label>
|
||||
</radio-group>
|
||||
</view>
|
||||
</view>
|
||||
<view class="satisfied">
|
||||
<view class="satisfied-title">处理满意度</view>
|
||||
<view class="satisfied-box">
|
||||
<radio-group bindchange="isSatisfied">
|
||||
<label>
|
||||
<radio value="1" color="#008cff">非常不满意</radio>
|
||||
</label>
|
||||
<label>
|
||||
<radio value="2" color="#008cff">不满意</radio>
|
||||
</label>
|
||||
<label>
|
||||
<radio value="3" color="#008cff">一般</radio>
|
||||
</label>
|
||||
<label>
|
||||
<radio value="4" color="#008cff">满意</radio>
|
||||
</label>
|
||||
<label>
|
||||
<radio value="5" color="#008cff">非常满意</radio>
|
||||
</label>
|
||||
</radio-group>
|
||||
</view>
|
||||
</view>
|
||||
<view class="choose-photo">
|
||||
<view class="img-box" wx:for="{{showPhotoList}}" wx:key="index">
|
||||
<image src="{{item.path}}"></image>
|
||||
<image src="../../images/delete.png" class="delete-btn" data-num="{{index}}" bindtap="deleteImg"></image>
|
||||
</view>
|
||||
<view class="add" bindtap="chooseImage">
|
||||
<image src="../../images/camera.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="submit" bindtap="submitHandle">
|
||||
确认处理
|
||||
</view>
|
||||
</view>
|
180
pages/caseCheck/caseCheck.wxss
Normal file
@ -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;
|
||||
}
|
122
pages/caseDetail/caseDetail.js
Normal file
@ -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 () {
|
||||
|
||||
}
|
||||
})
|
3
pages/caseDetail/caseDetail.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
31
pages/caseDetail/caseDetail.wxml
Normal file
@ -0,0 +1,31 @@
|
||||
<view class="case">
|
||||
<view class="case-info">
|
||||
<view class="title-status">
|
||||
<view class="title">{{caseDetail.communityName}}</view>
|
||||
<view class="status" wx:if="{{caseDetail.caseStatus == 0}}">待处理</view>
|
||||
<view class="status" wx:if="{{caseDetail.caseStatus == 1}}">待立案</view>
|
||||
<view class="status" wx:if="{{caseDetail.caseStatus == 2}}">待下派</view>
|
||||
<view class="status" wx:if="{{caseDetail.caseStatus == 3}}">待处理</view>
|
||||
<view class="status" wx:if="{{caseDetail.caseStatus == 4}}">待检查</view>
|
||||
<view class="status" wx:if="{{caseDetail.caseStatus == 5}}">待结案</view>
|
||||
<view class="status green" wx:if="{{caseDetail.caseStatus == 6}}">已归档</view>
|
||||
<view class="status red" wx:if="{{caseDetail.caseStatus == -1}}">案件异常</view>
|
||||
</view>
|
||||
<view class="info">
|
||||
<view class="row">{{caseDetail.caseContent}}</view>
|
||||
<view class="row">上报时间:{{caseDetail.reportDate}}</view>
|
||||
<view class="row">上报类型:{{caseDetail.caseTypeName}}</view>
|
||||
<view class="row">上报人员:{{caseDetail.caseReporter}}</view>
|
||||
</view>
|
||||
<view class="photo">
|
||||
<image src="{{requestUrl}}route/file/downloadfile/true/{{item}}" wx:for="{{imageList}}" wx:key="index" wx:if="{{item}}"></image>
|
||||
</view>
|
||||
<view class="map">
|
||||
<view class="position">{{caseDetail.casePosition}}</view>
|
||||
<view class="map-box">
|
||||
<map name="map" show-location longitude='{{longitude}}' latitude='{{latitude}}' scale='14' markers='{{markers}}'></map>
|
||||
</view>
|
||||
</view>
|
||||
<view class="process" bindtap="goProcess">查看流程</view>
|
||||
</view>
|
||||
</view>
|
81
pages/caseDetail/caseDetail.wxss
Normal file
@ -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;
|
||||
}
|
472
pages/caseReport/caseReport.js
Normal file
@ -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 () {
|
||||
|
||||
}
|
||||
})
|
3
pages/caseReport/caseReport.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
132
pages/caseReport/caseReport.wxml
Normal file
@ -0,0 +1,132 @@
|
||||
<view class="report">
|
||||
<view class="title">基本信息</view>
|
||||
<view class="info">
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main">
|
||||
<view class="selected">
|
||||
<picker bindchange="bindPickerChange" value="{{officeIndex}}" range="{{officeArray}}">
|
||||
<view class="picker">
|
||||
{{officeArray[officeIndex]}}
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="select-icon">
|
||||
<image src="../../images/select.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main">
|
||||
<view class="selected">
|
||||
<picker bindchange="bindCommunityChange" value="{{communityIndex}}" range="{{communityArray}}">
|
||||
<view class="picker">
|
||||
{{communityArray[communityIndex]}}
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="select-icon">
|
||||
<image src="../../images/select.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main">
|
||||
<view class="selected">
|
||||
<picker bindchange="bindTypeChange" value="{{typeIndex}}" range="{{typeArray}}">
|
||||
<view class="picker">
|
||||
{{typeArray[typeIndex]}}
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="select-icon">
|
||||
<image src="../../images/select.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main">
|
||||
<view class="selected">
|
||||
<picker bindchange="bindTypeLvChange" value="{{typeLvIndex}}" range="{{typeLvArray}}">
|
||||
<view class="picker">
|
||||
{{typeLvArray[typeLvIndex]}}
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
<view class="select-icon">
|
||||
<image src="../../images/select.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main">
|
||||
<view class="selected">巡检采集</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main self-box">
|
||||
<view class="self">自行处理</view>
|
||||
<view class="self-check">
|
||||
<radio-group bindchange="isSelfHandle">
|
||||
<label>
|
||||
<radio value="0" color="#008cff" checked="checked">否</radio>
|
||||
</label>
|
||||
</radio-group>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row">
|
||||
<view class="required">*</view>
|
||||
<view class="main address-main">
|
||||
<view class="address">{{address}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="report">
|
||||
<view class="title">详细信息</view>
|
||||
<view class="info">
|
||||
<view class="row detail-row">
|
||||
<view class="detail-required">*</view>
|
||||
<view class="main detail-main">
|
||||
<textarea placeholder="请输入案件描述内容" model:value="{{caseDesc}}"></textarea>
|
||||
</view>
|
||||
</view>
|
||||
<view class="row detail-row">
|
||||
<view class="voice">
|
||||
<view class="voice-info" wx:if="{{!recodePath}}">
|
||||
<image src="../../images/vioce.png"></image>
|
||||
录音
|
||||
</view>
|
||||
<view class="voice-info" bindtap="playRecord" wx:else>
|
||||
<image src="../../images/vioce.png"></image>
|
||||
播放录音
|
||||
</view>
|
||||
<view class="voice-btn" bindlongpress="recordVoice" bindtouchend="recordEnd">长按录音</view>
|
||||
<!-- <view class="voice-btn" bindlongpress="recordVoice" bindtouchend="recordEnd" bindtouchmove="touchMove">长按录音</view> -->
|
||||
</view>
|
||||
</view>
|
||||
<view class="row detail-row">
|
||||
<view class="detail-required">*</view>
|
||||
<view class="main detail-main photo-main">
|
||||
<view class="choose-photo">
|
||||
<view class="img-box" wx:for="{{photoList}}" wx:key="index">
|
||||
<image src="{{item.path}}"></image>
|
||||
<image src="../../images/delete.png" class="delete-btn" data-num="{{index}}" bindtap="deleteImg"></image>
|
||||
</view>
|
||||
<view class="add" bindtap="chooseImage" wx:if="{{photoList.length < 9}}">
|
||||
<image src="../../images/camera.png"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="submit" bindtap="submitReport">
|
||||
上报
|
||||
</view>
|
191
pages/caseReport/caseReport.wxss
Normal file
@ -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;
|
||||
}
|
195
pages/index/index.js
Normal file
@ -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 () {
|
||||
|
||||
}
|
||||
})
|
3
pages/index/index.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
34
pages/index/index.wxml
Normal file
@ -0,0 +1,34 @@
|
||||
<view class="tab-box">
|
||||
<view class="tab {{tab == '0'?'active':''}}" data-tab="0" bindtap="changeTab">上报历史</view>
|
||||
<view class="tab {{tab == '1'?'active':''}}" data-tab="1" bindtap="changeTab">待检查</view>
|
||||
</view>
|
||||
<view class="list">
|
||||
<view class="list-box" wx:for="{{areaList}}" wx:key="index" data-id="{{item.reportCaseId}}" bindtap="goDetail" data-status="{{item.caseStatus}}">
|
||||
<view class="avatar">
|
||||
<image src="{{requestUrl}}route/file/downloadfile/true/{{item.casePhotos}}"></image>
|
||||
</view>
|
||||
<view class="case">
|
||||
<view class="case-info">
|
||||
<view class="case-title">
|
||||
<view class="title">{{item.communityName}}</view>
|
||||
<view class="status" wx:if="{{item.caseStatus == 0}}">待受理</view>
|
||||
<view class="status" wx:if="{{item.caseStatus == 1}}">待立案</view>
|
||||
<view class="status" wx:if="{{item.caseStatus == 2}}">待下派</view>
|
||||
<view class="status" wx:if="{{item.caseStatus == 3}}">待处理</view>
|
||||
<view class="status" wx:if="{{item.caseStatus == 4}}">待检查</view>
|
||||
<view class="status" wx:if="{{item.caseStatus == 5}}">待结案</view>
|
||||
<view class="status green" wx:if="{{item.caseStatus == 6}}">已归档</view>
|
||||
<view class="status red" wx:if="{{item.caseStatus == -1}}">案件异常</view>
|
||||
</view>
|
||||
<view class="case-desc">
|
||||
{{item.caseContent}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="case-postion">
|
||||
<image src="../../images/position.png"></image>
|
||||
{{item.casePosition}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="new-case" bindtap="goReport">案件上报</view>
|
109
pages/index/index.wxss
Normal file
@ -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;
|
||||
}
|
98
pages/process/process.js
Normal file
@ -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 () {
|
||||
|
||||
}
|
||||
})
|
3
pages/process/process.json
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"usingComponents": {}
|
||||
}
|
22
pages/process/process.wxml
Normal file
@ -0,0 +1,22 @@
|
||||
<view class="process">
|
||||
<view class="process-box" wx:for="{{processList}}" wx:key="index">
|
||||
<view class="time-status">
|
||||
<view class="point"></view>
|
||||
<view class="time">{{item.gmtCreate}}</view>
|
||||
<view class="status">{{item.optionType}}</view>
|
||||
</view>
|
||||
<view class="process-content">
|
||||
<view class="row">处理人:{{item.userName}}</view>
|
||||
<view class="row">处理描述:{{item.userOpinion}}</view>
|
||||
<view class="row" wx:if="{{item.handleUserName}}">受理人:{{item.handleUserName}}</view>
|
||||
<view class="row" wx:if="{{item.handleTime > 0}}">处理时限:{{item.handleTime}}天</view>
|
||||
<view class="row">
|
||||
<text wx:if="{{item.handleStatus == '1'}}" class="green">同意处理</text>
|
||||
<text class="gray" wx:else>未处理</text>
|
||||
</view>
|
||||
<view class="process-img">
|
||||
<image src="{{requestUrl}}route/file/downloadfile/true/{{inner}}" wx:for="{{item.userPhotos}}" wx:for-item="inner" wx:for-index="idx" wx:key="idx" wx:if="{{inner}}"></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
64
pages/process/process.wxss
Normal file
@ -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;
|
||||
}
|
70
project.config.json
Normal file
@ -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": []
|
||||
}
|
||||
}
|
||||
}
|
7
sitemap.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
|
||||
"rules": [{
|
||||
"action": "allow",
|
||||
"page": "*"
|
||||
}]
|
||||
}
|
15
utils/dialog.js
Normal file
@ -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;
|
227
utils/restAjax.js
Normal file
@ -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, ''').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;
|
32
utils/util.js
Normal file
@ -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
|
||||
}
|