/**
* Make sure the charset of the page using this script is
* set to utf-8 or you will not get the correct results.
*/
var utf8 = (function () {
var highSurrogateMin = 0xd800,
highSurrogateMax = 0xdbff,
lowSurrogateMin = 0xdc00,
lowSurrogateMax = 0xdfff,
surrogateBase = 0x10000;
function isHighSurrogate(charCode) {
return highSurrogateMin <= charCode && charCode <= highSurrogateMax;
}
function isLowSurrogate(charCode) {
return lowSurrogateMin <= charCode && charCode <= lowSurrogateMax;
}
function combineSurrogate(high, low) {
return ((high - highSurrogateMin) << 10) + (low - lowSurrogateMin) + surrogateBase;
}
/**
* Convert charCode to JavaScript String
* handling UTF16 surrogate pair
*/
function chr(charCode) {
var high, low;
if (charCode < surrogateBase) {
return String.fromCharCode(charCode);
}
// convert to UTF16 surrogate pair
high = ((charCode - surrogateBase) >> 10) + highSurrogateMin,
low = (charCode & 0x3ff) + lowSurrogateMin;
return String.fromCharCode(high, low);
}
/**
* Convert JavaScript String to an Array of
* UTF8 bytes
* @export
*/
function stringToBytes(str) {
var bytes = [],
strLength = str.length,
strIndex = 0,
charCode, charCode2;
while (strIndex < strLength) {
charCode = str.charCodeAt(strIndex++);
// handle surrogate pair
if (isHighSurrogate(charCode)) {
if (strIndex === strLength) {
throw new Error('Invalid format');
}
charCode2 = str.charCodeAt(strIndex++);
if (!isLowSurrogate(charCode2)) {
throw new Error('Invalid format');
}
charCode = combineSurrogate(charCode, charCode2);
}
// convert charCode to UTF8 bytes
if (charCode < 0x80) {
// one byte
bytes.push(charCode);
}
else if (charCode < 0x800) {
// two bytes
bytes.push(0xc0 | (charCode >> 6));
bytes.push(0x80 | (charCode & 0x3f));
}
else if (charCode < 0x10000) {
// three bytes
bytes.push(0xe0 | (charCode >> 12));
bytes.push(0x80 | ((charCode >> 6) & 0x3f));
bytes.push(0x80 | (charCode & 0x3f));
}
else {
// four bytes
bytes.push(0xf0 | (charCode >> 18));
bytes.push(0x80 | ((charCode >> 12) & 0x3f));
bytes.push(0x80 | ((charCode >> 6) & 0x3f));
bytes.push(0x80 | (charCode & 0x3f));
}
}
return bytes;
}
/**
* Convert an Array of UTF8 bytes to
* a JavaScript String
* @export
*/
function bytesToString(bytes) {
var str = '',
length = bytes.length,
index = 0,
byte,
charCode;
while (index < length) {
// first byte
byte = bytes[index++];
if (byte < 0x80) {
// one byte
charCode = byte;
}
else if ((byte >> 5) === 0x06) {
// two bytes
charCode = ((byte & 0x1f) << 6) | (bytes[index++] & 0x3f);
}
else if ((byte >> 4) === 0x0e) {
// three bytes
charCode = ((byte & 0x0f) << 12) | ((bytes[index++] & 0x3f) << 6) | (bytes[index++] & 0x3f);
}
else {
// four bytes
charCode = ((byte & 0x07) << 18) | ((bytes[index++] & 0x3f) << 12) | ((bytes[index++] & 0x3f) << 6) | (bytes[index++] & 0x3f);
}
str += chr(charCode);
}
return str;
}
return {
stringToBytes: stringToBytes,
bytesToString: bytesToString
};
}());
'use strict';
var app = angular.module('app', [
'ui.router',
'templatescache',
'ui.bootstrap',
'ngAnimate',
'ngCookies'
]);
angular.module('app').run(['$rootScope', '$state', '$stateParams','auth2Service',
function ($rootScope, $state, $stateParams, auth2Service) {
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
var locationChangeStartOff = $rootScope.$on('$locationChangeStart', function (event) {
auth2Service.checkAuthByServer();
});
}
]).config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/home'); //
$stateProvider.state('home', {
url: '/home',
templateUrl: 'templates/home.html',
controller: 'HomeController'
})
.state('webChat', {
url: '/webChat',
templateUrl: 'templates/webChat.html',
controller: 'WebController'
})
.state('webChat.conComplain', {
url: '/conComplain',
templateUrl: 'templates/webChat-1.html',
controller: 'WebController'
})
.state('webChat.queryEv', {
url: '/queryEv',
templateUrl: 'templates/webChat-2.html',
controller: 'WebController'
})
.state('webChat.dyInfo', {
url: '/dyInfo',
templateUrl: 'templates/webChat-3.html',
controller: 'WebController'
})
.state('webChat.phoneLogin', {
url: '/phoneLogin',
templateUrl: 'templates/webChat-4.html',
controller: 'WebController'
}).state('webChat.online', {
url: '/online',
templateUrl: 'templates/webChat-5.html',
controller: 'WebController'
});
}
]);
angular.module('templatescache', []).run(['$templateCache', function($templateCache) {$templateCache.put('templates/home.html','
\r\n
\r\n\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\u6B64\u529F\u80FD\u6B63\u5728\u5168\u529B\u5F00\u53D1\u4E2D\uFF0C\u656C\u8BF7\u671F\u5F85
\r\n
\u5173\u95ED\r\n
\r\n
\r\n
\r\n
\r\n
{{addr.regeocode.addressComponent.district}}\u6682\u4E0D\u652F\u6301\u6B64\u529F\u80FD
\r\n
\u5173\u95ED\r\n
\r\n
\r\n
\r\n
');
$templateCache.put('templates/webChat-1.html','\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\u54A8\u8BE2\u6295\u8BC9
\r\n
\r\n\r\n
\r\n
\r\n
');
$templateCache.put('templates/webChat-2.html','\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\u67E5\u8BE2\u8BC4\u4EF7
\r\n
\r\n\r\n
\r\n
\r\n
');
$templateCache.put('templates/webChat-3.html','\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\u52A8\u6001\u4FE1\u606F
\r\n
\r\n\r\n
\r\n
\r\n
');
$templateCache.put('templates/webChat-4.html','');
$templateCache.put('templates/webChat-5.html','\r\n\r\n \r\n\r\n
\r\n
\u59D3      \u540D\uFF1A*
\r\n
\u624B\u673A\u53F7\u7801\uFF1A*
\r\n
\u6295\u8BC9\u5185\u5BB9\uFF1A\r\n
*\r\n
\r\n
\u56FE      \u7247\uFF1A\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\u6240\u5728\u4F4D\u7F6E\uFF1A\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
');
$templateCache.put('templates/webChat.html','\r\n\r\n\r\n');}]);
'use strict';
angular.module('app').controller('HomeController', ['$scope', '$state', '$timeout', 'userService', function ($scope, $state, $timeout, userService) {
$scope.getAddSuccess = true;
$scope.currentUser = userService.getMe();
$scope.$on('$viewContentLoaded', function() {
//加载轮播
var swiper = new Swiper('.swiper-container', {
pagination: '.swiper-pagination',
paginationClickable: true,
loop: true,
autoplayDisableOnInteraction: false,
autoplay: 5000,
effect: 'coverflow',
slidesPerView: 'auto',
centeredSlides: true,
spaceBetween: -55,
coverflow: {
rotate: 30,
stretch: 0,
depth: 60,
modifier: 1,
slideShadows: false
}
});
//加载字体适应
var clientWidth = document.documentElement.clientWidth || window.innerWidth;
var innerWidth = Math.max(Math.min(clientWidth, 480), 320);
console.log(innerWidth);
if (innerWidth < 350) {
angular.element(".explain").removeClass("font-15");
angular.element(".explain").addClass("font-12");
} else if (innerWidth > 400) {
angular.element(".explain").removeClass("font-12");
angular.element(".explain").addClass("font-15");
}
console.log(userService.getMe());
//加载sdk
ysf.on({
'onload': function() {
$scope.sdk = true;
}
});
//加载地图,调用浏览器定位服务
var map, geolocation, marker, geocoder, regeocoder;
map = new AMap.Map('', {
resizeEnable: true,
zoom: 17
});
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:无穷大
maximumAge: 0, //定位结果缓存0毫秒,默认:0
convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
showButton: true, //显示定位按钮,默认:true
buttonPosition: 'RB', //定位按钮停靠位置,默认:'LB',左下角
buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
useNative: true
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, 'complete', onComplete); //返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位出错信息
function onComplete(data) {
$scope.getAddSuccess = true;
var geocoder = new AMap.Geocoder({
radius: 1000,
extensions: "all"
});
console.log("获取地址");
geocoder.getAddress(data.position, function(status, result) {
if (status === 'complete' && result.info === 'OK') {
$scope.addr = result;
$timeout();
}
});
};
function onError(data) {
$scope.getAddSuccess = false;
};
});
});
$scope.onOnlineClick = function(e) {
console.log($scope.sdk);
var activeClick = $(e.target);
//activeClick[0].parentElement.dataset.target = "#phoneLoginModal";
if (!$scope.getAddSuccess) {
alert("获取地址失败,请开启手机GPS定位功能,并允许获取地理位置授权");
window.location.reload();
} else if (!$scope.addr && $scope.getAddSuccess) {
alert("地理位置获取中,请稍后");
} else if ($scope.addr.regeocode.addressComponent.district === '莲都区') {
//activeClick[0].parentElement.parentElement.dataset.target = "#phoneLoginModal";
activeClick[0].parentElement.dataset.target = "#phoneLoginModal";
} else {
//activeClick[0].parentElement.parentElement.dataset.target = "#errorLoginModal";
activeClick[0].parentElement.dataset.target = "#errorLoginModal";
}
};
$scope.onlineService = function() {
//console.log($scope.mobile, $scope.sdk);
if ($scope.currentUser.Mobile.length == 11 && $scope.sdk) {
userService.update($scope.currentUser);
ysf.config({
uid: $scope.currentUser.Id, // 用户Id
name: $scope.currentUser.Nickname, // 用户名称
email: $scope.addr.regeocode.formattedAddress, // 用户邮箱
mobile: $scope.currentUser.Mobile, // 用户电话
success: function() { // 成功回调
ysf.open();
console.log('success');
},
error: function() { // 错误回调
// handle error
//ysf.open();
alert('error!!!');
}
});
} else {
alert("请正确输入手机号码");
}
};
}]);
'use strict';
angular.module('app').controller('WebController', ['$scope', '$timeout', 'userService', 'messageService', function($scope, $timeout, userService, messageService) {
//lxtalkClient.Invoke('{FB60F992-A0FD-47B3-AAA7-E80DF209C5A4}', '_Register', '', $scope);
$scope.bundle = {
userId: -1,
//不超过2000个字符
describe: '',
//不超过50个字符
name: '',
//手机号码
mobile: '',
//不超过100个字符
title: '',
/// 类型
/// 0我要咨询;1我要投诉;2我要建议;3领导信箱;4我要举报 5纠错
type: 0,
//是否建议 1-建议 0-投诉
advice: '0',
//是否公开互联网(1是;0否)
isPublic: 0,
assets: []
};
$scope.currentUser = userService.getMe();
$scope.bundle.name = $scope.currentUser.Nickname;
$scope.bundle.mobile = $scope.currentUser.Mobile;
$scope.$on('$viewContentLoaded', function() {
var clientWidth = document.documentElement.clientWidth || window.innerWidth;
var innerWidth = Math.max(Math.min(clientWidth, 480), 320);
//console.log(innerWidth);
if (innerWidth > 350) {
angular.element(".userInfo>div>span").addClass("font-14");
angular.element(".certificate").addClass("font-14");
angular.element(".userInfo .input-sm ").addClass("font-13");
angular.element(".userInfo .text-message").addClass("font-13");
} else {
angular.element(".font-13").removeClass("font-13");
angular.element(".font-14").removeClass("font-14");
}
});
$scope.imgView = function(event) {
angular.element(".onView").removeClass("onView");
var img = $(event.target);
img[0].className = "onView";
if (img[0].naturalWidth > img[0].naturalHeight) {
angular.element(".image-view").addClass("width-Img");
} else {
angular.element(".image-view").removeClass("width-Img");
}
$scope.imgUrl = img[0].src;
$(".image-big").remove();
$(".image-view").append('
');
};
$scope.delSure = function() {
$scope.sure = false;
var imgs = $(".images");
$(".image-big").remove();
for (var i = 0, len = imgs.length; i < len; i++) {
if (imgs[i].firstElementChild.className == "onView") {
imgs[i].remove();
var imgNum = $("#imgpreview").find('img').length;
if (imgNum == 2) {
angular.element(".images").removeClass("three");
angular.element(".images").addClass("two");
} else if (imgNum = 1) {
angular.element(".images").removeClass("two");
angular.element(".images").addClass("one");
}
return;
}
};
};
// $scope.actived = function($event) {
// var activeClick = $($event.target);
// if (activeClick[0].nodeName == "A") {
// angular.element(".Aa").removeClass("activeColor");
// angular.element(".glyphicon").removeClass("activeColor");
// activeClick.addClass("activeColor");
// } else if (activeClick[0].nodeName == "SPAN") {
// angular.element(".Aa").removeClass("activeColor");
// angular.element(".glyphicon").removeClass("activeColor");
// activeClick.addClass("activeColor");
// $(activeClick[0].parentElement).addClass("activeColor");
// }
// };
// $scope.footHide = function() {
// angular.element(".foot").addClass("hide");
// };
// $scope.footShow = function($event) {
// var activeClick = $($event.target);
// if (activeClick[0].className == "form-control input-sm" || activeClick[0].className == "text-message") {
// angular.element(".foot").addClass("hide");
// } else {
// $timeout(function() {
// angular.element(".foot").removeClass("hide");
// }, 400);
// }
// };
$scope.submit = function() {
var imgs = $(".images");
for (var i = 0, len = imgs.length; i < len; i++) {
$scope.bundle.assets.push({ assetType: 1, data: imgs[i].firstElementChild.src });
};
$scope.bundle.describe = $(".descr")[0].textContent;
if ($scope.mapPosition)
$scope.bundle.assets.push({ assetType: 0, data: { info: $scope.mapPosition.info, district: $scope.mapPosition.addressComponent.district, address: $scope.mapPosition.formattedAddress, position: $scope.mapPosition.position } });
console.log($scope.bundle);
$scope.submiting = true;
$timeout(function() {
$scope.submiting = false;
$scope.successed = true;
}, 1000);
//messageService.submit($scope.bundle, "successCallback", "failsCallback");
// $scope.bundle.name = "";
// $scope.bundle.mobile = "";
// $scope.bundle.describe = $(".descr")[0].textContent = "";
// $scope.bundle.assets = [];
};
$scope.imgPreview = function(fileDom) {
//判断是否支持FileReader
if (window.FileReader) {
var reader = new FileReader();
} else {
alert("您的设备不支持图片预览功能,如需该功能请升级您的设备!");
};
//获取文件
var file = fileDom.files[0];
var imageType = /^image\//;
//是否是图片
if (!imageType.test(file.type)) {
alert("请选择图片!");
return;
};
$("#file")[0].value = "";
//读取完成
reader.onload = function(e) {
// //获取图片dom
// var img = document.getElementById("preview");
// //图片路径设置为读取的图片
// img.src = e.target.result;
var img = new Image,
width = 1080, //image resize
quality = 0.9, //image quality
canvas = document.createElement("canvas"),
drawer = canvas.getContext("2d");
img.src = this.result;
$(img).on('load', function() {
$(img).off('load');
var imgNum = $("#imgpreview").find('img').length;
canvas.width = width;
canvas.height = width * (img.height / img.width);
drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
img.src = canvas.toDataURL(file.type, quality);
if (imgNum == 0) {
$("#imgpreview").append('
');
angular.element(".images").addClass("one");
} else if (imgNum == 1) {
$("#imgpreview").append('
');
angular.element(".images").removeClass("one");
angular.element(".images").addClass("two");
} else if (imgNum >= 2) {
$("#imgpreview").append('
');
angular.element(".images").removeClass("two");
angular.element(".images").addClass("three");
}
});
};
reader.readAsDataURL(file);
};
}]);
(function() {
'use strict';
angular
.module('app')
.directive('gaodeMap', Directive);
Directive.$inject = [];
function Directive() {
var directive = {
link: link,
restrict: 'E',
template: '',
replace: true,
scope: false
// scope: {
// options: '='
// }
};
return directive;
function link(scope, element, attrs) {
var map, geolocation, marker, geocoder;
//加载地图,调用浏览器定位服务
map = new AMap.Map('container', {
resizeEnable: true,
zoom: 17
});
map.plugin('AMap.Geolocation', function() {
geolocation = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位,默认:无穷大
maximumAge: 0, //定位结果缓存0毫秒,默认:0
convert: true, //自动偏移坐标,偏移后的坐标为高德坐标,默认:true
showButton: true, //显示定位按钮,默认:true
buttonPosition: 'RB', //定位按钮停靠位置,默认:'LB',左下角
buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
showMarker: true, //定位成功后在定位到的位置显示点标记,默认:true
showCircle: true, //定位成功后用圆圈表示定位精度范围,默认:true
panToLocation: true, //定位成功后将定位到的位置作为地图中心点,默认:true
zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
useNative: true
});
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation, 'complete', onComplete); //返回定位信息
AMap.event.addListener(geolocation, 'error', onError); //返回定位出错信息
function onComplete(data) {
map.clearMap();
scope.mapPosition = data;
var geocoder = new AMap.Geocoder({
radius: 1000,
extensions: "all"
});
var marker = new AMap.Marker({
map: map,
bubble: false,
visible: true
});
geocoder.getAddress(data.position, function(status, result) {
if (status == 'complete' && result.info === 'OK') {
//console.log(result);
$("#result")[0][0].textContent = result.regeocode.formattedAddress.substring(6);
$("#result")[0][1].textContent = result.regeocode.pois[0].name;
$("#result")[0][2].textContent = result.regeocode.pois[1].name;
} else {
alert("错误A:定位失败");
}
});
map.on('click', function(e) {
marker.setPosition(e.lnglat);
geocoder.getAddress(e.lnglat, function(status, result) {
if (status == 'complete' && result.info === 'OK') {
//console.log($("#result"));
//var sub = result.regeocode.formattedAddress.indexOf(result.regeocode.aois[0].name)
$("#result")[0][0].textContent = result.regeocode.formattedAddress.substring(6);
$("#result")[0][1].textContent = result.regeocode.pois[0].name;
$("#result")[0][2].textContent = result.regeocode.pois[1].name;
$("#result")[0].selectedIndex = 0;
} else {
alert("错误B:定位失败");
}
});
});
}
function onError(data) {}
});
}
}
})();
(function() {
'use strict';
angular
.module('app')
.service('auth2Service', auth2Service);
auth2Service.$inject = ['$cookies', '$http', '$location'];
function auth2Service($cookies, $http, $location) {
this.checkAuthByResponse = checkAuthByResponse;
this.checkAuthByCookie = checkAuthByCookie;
this.checkAuthByServer = checkAuthByServer;
function checkAuthByResponse(response) {
if (response.status == 501) {
window.location = "/home";
}
}
function checkAuthByServer() {
$http.get($cookies.get('BaseUrl') + '/api/auth/check').then(
function () {
},
checkAuthByResponse
);
}
function checkAuthByCookie() {
return $cookies.get('User') != "" || $cookies.get('User') != undefined;
}
}
})();
'use strict';
angular.module('app').service('messageService', ['$http', '$cookies', '$location', 'userService', function($http, $cookies, $location, userService) {
var self = this;
this.submit = function(bundle, successCallback, failsCallback) {
bundle.userId = userService.getMe().Id;
$http.post($cookies.get('BaseUrl') + '/api/bundle', bundle).then(successCallback, failsCallback);
}
this.getAll = function (successCallback, failsCallback) {
$http.get($cookies.get('BaseUrl') + '/api/bundle/all').then(successCallback, failsCallback);
}
this.getDe = function (bundleId, successCallback, failsCallback) {
$http.get($cookies.get('BaseUrl') + '/api/bundle/detail/' + bundleId).then(successCallback, failsCallback);
}
}]);
(function() {
'use strict';
angular
.module('app')
.service('userService', userService);
userService.$inject = ['$http', '$cookies', 'auth2Service'];
function userService($http, $cookies, auth2Service) {
this.getMe = getMe;
this.update = update;
function getMe() {
if (this.me != undefined) {
return this.me;
}
if ($cookies.get('User') != "" || $cookies.get('User') != undefined) {
this.me = JSON.parse($cookies.get('User'));
return this.me;
}
if (this.me === undefined)
$http.get($cookies.get('BaseUrl') + '/api/user').then(
function(response) {
this.me = response.data;
},
function(response) {
this.me = {};
auth2Service.checkAuthByResponse(response);
}
);
return this.me;
}
function update(u) {
if (u.Id != undefined)
$http.post($cookies.get('BaseUrl') + '/api/user', u).then(
function (response) {
console.log(response.data)
},
function (response) {
console.log(response.data)
}
);
}
}
})();