|
@@ -1,1988 +0,0 @@
|
|
|
-var starter = angular.module('starter', ['ionic', 'ngResource', 'underscore', 'ngCordova', 'pascalprecht.translate']);
|
|
|
-
|
|
|
-starter.run(function ($ionicPlatform, $rootScope, $http, formatFilter, $q, $cordovaPreferences, $ionicLoading, $timeout, $ionicHistory, $cordovaKeyboard, $translate, global, cfg, showPopup) {
|
|
|
- // $ionicLoading.show({
|
|
|
- // template: '数据加载中...'
|
|
|
- // }).then(function () {
|
|
|
- // console.log("loading starter.run");
|
|
|
- // });
|
|
|
-
|
|
|
- $rootScope.commons = {
|
|
|
- refresh: false,
|
|
|
- upload_maxcount: 10,
|
|
|
- bigImage: undefined, //显示大图
|
|
|
- modal: undefined, //模态窗口
|
|
|
- goBackIsDisable: undefined, //禁用返回键
|
|
|
- isShowPopup: undefined, //加载动画
|
|
|
- fun: null
|
|
|
- };
|
|
|
-
|
|
|
- $ionicPlatform.ready(function () {
|
|
|
- if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
|
|
|
- cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
|
|
|
- cordova.plugins.Keyboard.disableScroll(true);
|
|
|
- }
|
|
|
- if (window.StatusBar) {
|
|
|
- StatusBar.styleDefault();
|
|
|
- }
|
|
|
-
|
|
|
- // $ionicLoading.hide();
|
|
|
- if (window.cordovaLinker)
|
|
|
- window.cordovaLinker.loadFinished("", function () {
|
|
|
- }, function () {
|
|
|
- });
|
|
|
- if (typeof navigator.globalization !== "undefined") {
|
|
|
- navigator.globalization.getPreferredLanguage(function (language) {
|
|
|
- console.log("globalization -> " + JSON.stringify(language));
|
|
|
- // alert(JSON.stringify(language))
|
|
|
- var value = (language.value).split('-')[0];
|
|
|
- if ((language.value).split('-')[1] == 'TW') {
|
|
|
- value = language.value
|
|
|
- }
|
|
|
- switch (value) {
|
|
|
- case 'zh-TW':
|
|
|
- value = 'locate-zh_tw';
|
|
|
- break;
|
|
|
- case 'en':
|
|
|
- value = 'locate-en_us';
|
|
|
- break;
|
|
|
- case 'zh':
|
|
|
- default:
|
|
|
- value = 'locate-zh_cn';
|
|
|
- break;
|
|
|
- }
|
|
|
- $translate.use(value).then(function (data) {
|
|
|
- console.log("SUCCESS -> " + data);
|
|
|
- }, function (error) {
|
|
|
- console.log("ERROR -> " + error);
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- });
|
|
|
-
|
|
|
- global.fetch_user = function () {
|
|
|
- var deferred = $q.defer();
|
|
|
- if (global.user && global.user.token) {
|
|
|
- usergot(global.user, deferred)
|
|
|
- } else if (ionic.Platform.platform() == 'win32' || ionic.Platform.platform() == 'linux') {
|
|
|
- $http.post(formatFilter('{0}authcheck/', cfg.api), "imid=zPayHMi6s&password=123456", {
|
|
|
- headers: {
|
|
|
- 'Content-Type': 'application/x-www-form-urlencoded'
|
|
|
- }
|
|
|
- }).then(function (response) {
|
|
|
- usergot(response.data, deferred);
|
|
|
- }, function (error) {
|
|
|
- console.log('通过post方式获取用户信息authcheck失败' + error);
|
|
|
- deferred.reject(error);
|
|
|
- })
|
|
|
- } else {
|
|
|
- $ionicPlatform.ready(function () {
|
|
|
- $cordovaPreferences.fetch('user')
|
|
|
- .success(function (value) {
|
|
|
- usergot(ionic.Platform.isAndroid() ? JSON.parse(value) : value, deferred);
|
|
|
- })
|
|
|
- .error(function (error) {
|
|
|
- console.error("通过$cordovaPreferences方式获取用户信息失败: " + error);
|
|
|
- deferred.reject(error);
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
- return deferred.promise;
|
|
|
- };
|
|
|
-
|
|
|
- usergot = function (data, deferred) {
|
|
|
- global.user = data;
|
|
|
- if (data.cfg) {
|
|
|
- global.api = data.cfg.api;
|
|
|
- }
|
|
|
- deferred.resolve(data);
|
|
|
- console.warn(JSON.stringify(global.user));
|
|
|
- };
|
|
|
-
|
|
|
- global.fetch_user();
|
|
|
-
|
|
|
- global.goBack = function () {
|
|
|
- if (window.cordovaLinker != undefined) {
|
|
|
- if ($ionicHistory.backView()) {
|
|
|
- $ionicHistory.goBack();
|
|
|
- } else {
|
|
|
- window.cordovaLinker.goBack(1, function (s) {
|
|
|
- console.log(s);
|
|
|
- }, function (err) {
|
|
|
- console.error(err);
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function keyboardHideHandler(e) {
|
|
|
- cordova.plugins.Keyboard.isVisible = true;
|
|
|
- $timeout(function () {
|
|
|
- cordova.plugins.Keyboard.isVisible = false;
|
|
|
- }, 100);
|
|
|
- }
|
|
|
-
|
|
|
- window.addEventListener('native.keyboardhide', keyboardHideHandler);
|
|
|
-
|
|
|
- $ionicPlatform.registerBackButtonAction(function (e) {
|
|
|
- $timeout(function () {
|
|
|
- if ($rootScope.commons.isShowPopup) {
|
|
|
- showPopup.hideLoading();
|
|
|
- } else if ($rootScope.commons.goBackIsDisable) {
|
|
|
- return false;
|
|
|
- } else if ($cordovaKeyboard.isVisible()) {
|
|
|
- $cordovaKeyboard.close();
|
|
|
- } else if ($rootScope.commons.bigImage) {
|
|
|
- if ($rootScope.commons.fun == null) $rootScope.commons.bigImage = false;
|
|
|
- else {
|
|
|
- $rootScope.commons.fun();
|
|
|
- $rootScope.commons.fun = null;
|
|
|
- }
|
|
|
- } else if ($rootScope.commons.modal != null) {
|
|
|
- if ($rootScope.commons.fun == null) {
|
|
|
- $rootScope.commons.modal.hide();
|
|
|
- $rootScope.commons.modal = null;
|
|
|
- } else {
|
|
|
- $rootScope.commons.fun();
|
|
|
- $rootScope.commons.fun = null;
|
|
|
- }
|
|
|
- } else {
|
|
|
- if ($ionicHistory.backView()) {
|
|
|
- if ($rootScope.commons.fun == null) {
|
|
|
- $ionicHistory.goBack();
|
|
|
- } else {
|
|
|
- $rootScope.commons.fun();
|
|
|
- $rootScope.commons.fun = null;
|
|
|
- }
|
|
|
- } else {
|
|
|
- global.goBack();
|
|
|
- }
|
|
|
- }
|
|
|
- return false;
|
|
|
- })
|
|
|
- }, 201);
|
|
|
-
|
|
|
- var _user;
|
|
|
- _user = window.localStorage.getItem("global.user");
|
|
|
- if (_user != undefined) {
|
|
|
- console.log("localStorage get: " + _user);
|
|
|
- global.user = JSON.parse(_user);
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.config(function ($stateProvider, $urlRouterProvider, $ionicConfigProvider, $httpProvider, $provide, $translateProvider, $resourceProvider, cfg) {
|
|
|
- $ionicConfigProvider.platform.ios.tabs.style('standard');
|
|
|
- $ionicConfigProvider.platform.ios.tabs.position('bottom');
|
|
|
- $ionicConfigProvider.platform.android.tabs.style('standard');
|
|
|
- $ionicConfigProvider.platform.android.tabs.position('bottom');
|
|
|
-
|
|
|
- $ionicConfigProvider.platform.ios.navBar.alignTitle('center');
|
|
|
- $ionicConfigProvider.platform.android.navBar.alignTitle('center');
|
|
|
-
|
|
|
- $ionicConfigProvider.platform.ios.backButton.previousTitleText('').icon('ion-ios-arrow-thin-left');
|
|
|
- $ionicConfigProvider.platform.android.backButton.previousTitleText('').icon('ion-android-arrow-back');
|
|
|
-
|
|
|
- $ionicConfigProvider.platform.ios.views.transition('ios');
|
|
|
- $ionicConfigProvider.platform.android.views.transition('android');
|
|
|
-
|
|
|
- var regex = new RegExp('\.(html|js|css|png|jpg)$', 'i');
|
|
|
- var isAsset = function (url) {
|
|
|
- return regex.test(url);
|
|
|
- };
|
|
|
-
|
|
|
- $stateProvider.state('selectmember', {
|
|
|
- url: '/selectmember',
|
|
|
- templateUrl: '/templates/common/selectmember.html',
|
|
|
- controller: 'SelectMemberCtrl'
|
|
|
- })
|
|
|
-
|
|
|
- .state('selectsinglemember', {
|
|
|
- url: '/selectsinglemember',
|
|
|
- templateUrl: '/templates/common/selectsinglemember.html',
|
|
|
- controller: 'SelectSingleMemberCtrl'
|
|
|
- })
|
|
|
-
|
|
|
- .state('selectdept', {
|
|
|
- url: '/selectdept/:id',
|
|
|
- templateUrl: '/templates/common/selectdept.html',
|
|
|
- controller: 'SelectDeptCtrl'
|
|
|
- })
|
|
|
-
|
|
|
- .state('fieldtype', {
|
|
|
- url: '/fieldtype/:id',
|
|
|
- templateUrl: '/templates/common/fieldtype.html',
|
|
|
- controller: 'FormFieldTypeCtrl'
|
|
|
- })
|
|
|
-
|
|
|
- .state('transfer', {
|
|
|
- url: '/transfer/:module/:id',
|
|
|
- templateUrl: '/templates/common/transfer.html',
|
|
|
- controller: 'TransferCtrl'
|
|
|
- })
|
|
|
-
|
|
|
- .state('selectsingledept', {
|
|
|
- url: '/selectsingledept',
|
|
|
- templateUrl: '/templates/common/selectsingledept.html',
|
|
|
- controller: 'SelectSingleDeptCtrl'
|
|
|
- })
|
|
|
-
|
|
|
- $urlRouterProvider.otherwise('/index');
|
|
|
-
|
|
|
- $translateProvider.useStaticFilesLoader({
|
|
|
- prefix: '/i18n/',
|
|
|
- suffix: '.json'
|
|
|
- });
|
|
|
-
|
|
|
- $httpProvider.interceptors.push(function ($q, cfg, global) {
|
|
|
- return {
|
|
|
- 'request': function (config) {
|
|
|
- if (!isAsset(config.url) && (global.refresh || global.debug)) { //if the call is not for an asset file
|
|
|
- config.url += (config.url.indexOf("?") === -1 ? "?" : "&") + "v=" + Date.now();
|
|
|
- if (global.refresh)
|
|
|
- global.refresh = false;
|
|
|
- }
|
|
|
-
|
|
|
- if (config.url.startsWith(cfg.api) || config.url.indexOf(global.api) == 0) {//分页时自带了请求路径
|
|
|
- if (config.url.startsWith(cfg.api)) config.url = global.api + config.url;
|
|
|
- console.log(angular.lowercase(config.method) + " url: " + config.url);
|
|
|
- if (global.user.token) {
|
|
|
- config.headers['authorization'] = 'Token ' + global.user.token;
|
|
|
- console.log(' authorization:' + config.headers['authorization']);
|
|
|
- }
|
|
|
- }
|
|
|
- config.timeout = 10000;
|
|
|
- return config;
|
|
|
- },
|
|
|
- 'responseError': function (rejection) {
|
|
|
- console.error(JSON.stringify(rejection));
|
|
|
- return $q.reject(rejection);
|
|
|
- }
|
|
|
- };
|
|
|
- });
|
|
|
- $resourceProvider.defaults.stripTrailingSlashes = false;
|
|
|
- $resourceProvider.defaults.actions.update = {
|
|
|
- method: 'PUT',
|
|
|
- params: {
|
|
|
- id: "@id"
|
|
|
- }
|
|
|
- };
|
|
|
- $resourceProvider.defaults.actions.patch = {
|
|
|
- method: 'PATCH',
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.constant('cfg', {
|
|
|
- // api: 'http://192.168.1.5:8000/api/'
|
|
|
- api: '/api/'
|
|
|
-})
|
|
|
-
|
|
|
-.value('global', {
|
|
|
- user: {
|
|
|
- usrid: "",
|
|
|
- token: "",
|
|
|
- usrname: "",
|
|
|
- compno: "",
|
|
|
- compname: "",
|
|
|
- deptno: "",
|
|
|
- deptname: "",
|
|
|
- roleid: "",
|
|
|
- im_usrid: "",
|
|
|
- cellphone: "",
|
|
|
- password: ""
|
|
|
- },
|
|
|
- api: "",
|
|
|
- debug: true,
|
|
|
- refresh: false
|
|
|
-})
|
|
|
-
|
|
|
-_.mixin({
|
|
|
- diff: function (_new, _old) {
|
|
|
- var r = {C: [], D: [], U: []};
|
|
|
- list_new = _.pluck(_new, 'id');
|
|
|
- list_old = _.pluck(_old, 'id');
|
|
|
- r.D = _.difference(list_old, list_new).join(',');
|
|
|
- r.C = _.filter(_new, function (item) {
|
|
|
- return item.id == undefined;
|
|
|
- });
|
|
|
- r.U = _.map(_.filter(_new, function (item) {
|
|
|
- return item.isModified && item.id != undefined;
|
|
|
- }), _.clone);
|
|
|
- _.each(r.U, function (item) {
|
|
|
- delete item.isModified;
|
|
|
- });
|
|
|
-
|
|
|
- _.each(r.C, function (item) {
|
|
|
- delete item.isModified;
|
|
|
- });
|
|
|
- return r;
|
|
|
- }
|
|
|
-});
|
|
|
-//http://stackoverflow.com/questions/33106114/cordova-javascript-error-has-no-method-startswith-android
|
|
|
-if (typeof String.prototype.startsWith != 'function') {
|
|
|
- String.prototype.startsWith = function (str) {
|
|
|
- return this.indexOf(str) === 0;
|
|
|
- };
|
|
|
-}
|
|
|
-starter.controller('SelectParentCtrl', function ($scope, $state, Member) {
|
|
|
- $scope.deptlst = [];
|
|
|
- $scope.emplst = [];
|
|
|
- $scope.index = 0;
|
|
|
- $scope.isUp = false;
|
|
|
- $scope.deptid = 1;
|
|
|
- $scope.titlename = Member.titlename;
|
|
|
- $scope.selectedemplst = Member.selectedemplst;
|
|
|
- $scope.disabled = Member.disabled;
|
|
|
- $scope.showall = Member.showall;
|
|
|
- $scope.showgroup = Member.showgroup;
|
|
|
- $scope.loading = true;
|
|
|
- $scope.leftbtn = [{
|
|
|
- text: '取消',
|
|
|
- click: 'cancel'
|
|
|
- }, {
|
|
|
- text: '上一层',
|
|
|
- click: 'up'
|
|
|
- }];
|
|
|
-})
|
|
|
-
|
|
|
-.controller('SelectMemberCtrl', function ($scope, $state, $ionicHistory, $rootScope, $ionicModal, $timeout, $controller, Dept, Member) {
|
|
|
- var parentctrl = $controller('SelectParentCtrl', {$scope: $scope});
|
|
|
- var showgroupmodel = $ionicModal.fromTemplateUrl('/templates/common/modal-selectgroup.html', {
|
|
|
- scope: $scope,
|
|
|
- animation: 'slide-in-right'
|
|
|
- });
|
|
|
- var startdept = null;
|
|
|
- $rootScope.commons.goBackIsDisable = true;
|
|
|
- var beforeEnter = $scope.$on("$ionicView.beforeEnter", function () {
|
|
|
- if (Member.homerenderdata.length != 0) {
|
|
|
- $scope.loading = false;
|
|
|
- _.each(Member.homerenderdata, function (item) {
|
|
|
- $scope.deptlst.push(item);
|
|
|
- });
|
|
|
- init_selected(Member.resourcemember);
|
|
|
- } else {
|
|
|
- Dept.getDep().then(function (data) {
|
|
|
- startdept = _.find(data, function (itemdept) {
|
|
|
- return itemdept.parent == null; //获取公司的顶层部门
|
|
|
- });
|
|
|
- getemp(startdept.id);
|
|
|
- data = _.filter(data, function (item) {
|
|
|
- return item.parent == startdept.id;
|
|
|
- });
|
|
|
- $scope.deptlst = data;
|
|
|
- init_selected(Member.resourcemember);
|
|
|
- }, function (err) {
|
|
|
- alert(JSON.stringify(err))
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- $scope.changeindex = function (index, dtid) {
|
|
|
- $scope.index = index;
|
|
|
- $scope.deptid = dtid;
|
|
|
- };
|
|
|
-
|
|
|
- $scope.change = function (emp) {
|
|
|
- if (emp.selected) {
|
|
|
- $scope.selectedemplst.push(emp);
|
|
|
- Member.selectedemplst = $scope.selectedemplst;
|
|
|
- } else {
|
|
|
- $scope.selectedemplst = _.filter($scope.selectedemplst, function (e) {
|
|
|
- return e.user_id != parseInt(emp.user_id);
|
|
|
- });
|
|
|
- Member.selectedemplst = $scope.selectedemplst;
|
|
|
- }
|
|
|
- setselectedcount();
|
|
|
- };
|
|
|
-
|
|
|
- $scope.up = function () {
|
|
|
- var dept = undefined;
|
|
|
- if (Member.homerenderdata.length > 0) {
|
|
|
- dept = _.find(Member.homerenderdata, function (item) {
|
|
|
- return item.id == parseInt($scope.deptid);
|
|
|
- })
|
|
|
- }
|
|
|
- if (dept != undefined) {
|
|
|
- $scope.deptlst = $scope.deptlst.concat(Member.homerenderdata);
|
|
|
- $scope.emplst = [];
|
|
|
- $scope.index = 0;
|
|
|
- } else {
|
|
|
- dept = _.find(Dept.all(), function (d) {
|
|
|
- return d.id == parseInt($scope.deptid);
|
|
|
- });
|
|
|
- getdept_emp(dept.parent);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.cancel = function () {
|
|
|
- Member.selectedemplst = [];
|
|
|
- Member.dialogresult = 0;
|
|
|
- if (Member.cancelroutename != "") {
|
|
|
- $state.go(Member.cancelroutename, Member.cancelrouteparams);
|
|
|
- } else {
|
|
|
- $ionicHistory.goBack();
|
|
|
- }
|
|
|
- };
|
|
|
- var dep = {};
|
|
|
- $scope.changedept = function (dept) {
|
|
|
- dep = dept;
|
|
|
- getdept_emp(dept.id);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.ok = function () {
|
|
|
- Member.dialogresult = 1;
|
|
|
- Member.all = 0;
|
|
|
- if (Member.routename != '') {
|
|
|
- $state.go(Member.routename, Member.routeparams);
|
|
|
- } else {
|
|
|
- $ionicHistory.goBack(); //todo:带参数跳转
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.selectAll = function () {
|
|
|
- Member.all = 1;
|
|
|
- $state.go(Member.routename, Member.routeparams);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.back = function () {
|
|
|
- if ($rootScope.commons.modal != null) {
|
|
|
- $rootScope.commons.modal.hide();
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.toselectgroup = function () {
|
|
|
- showgroupmodel.then(function (modal) {
|
|
|
- $rootScope.commons.modal = modal;
|
|
|
- $rootScope.commons.modal.show();
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- $scope.$on("$destroy", function () {
|
|
|
- $rootScope.commons.goBackIsDisable = false;
|
|
|
- Member.member = {};
|
|
|
- });
|
|
|
-
|
|
|
- function init_selected(data) {
|
|
|
- setdeptrighticon($scope.deptlst);
|
|
|
- Member.selectedemplst = [];
|
|
|
- if (!Member.disabled) {
|
|
|
- $scope.selectedemplst = $scope.selectedemplst.concat(data);
|
|
|
- Member.selectedemplst = $scope.selectedemplst;
|
|
|
- }
|
|
|
- setselectedcount();
|
|
|
- }
|
|
|
-
|
|
|
- function getemp(id) {
|
|
|
- Dept.getEmp(id).then(function (data) {
|
|
|
- console.log(data);
|
|
|
- Member.member[id.toString()] = angular.copy(data);
|
|
|
- $scope.emplst = data;
|
|
|
- setitem();
|
|
|
- $scope.loading = false;
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- function getdept_emp(did) {
|
|
|
- if (Member.member[did.toString()]) {
|
|
|
- set_member(did);
|
|
|
- } else {
|
|
|
- $scope.loading = true;
|
|
|
- Dept.getEmp(did).then(function (data) {
|
|
|
- Member.member[did.toString()] = angular.copy(data);
|
|
|
- set_member(did);
|
|
|
- $scope.loading = false;
|
|
|
- }, function (err) {
|
|
|
- $scope.loading = false;
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var set_member = function (did) {
|
|
|
- $scope.deptlst = Dept.getChildDept(did);
|
|
|
- setdeptrighticon($scope.deptlst);
|
|
|
- $scope.emplst = Member.member[did.toString()];
|
|
|
- setitem();
|
|
|
- $scope.deptid = did;
|
|
|
- $scope.index = (startdept && did == startdept.id) ? 0 : 1;
|
|
|
- };
|
|
|
-
|
|
|
- function setselectedcount() {
|
|
|
- $scope.selectcount = $scope.selectedemplst.length > 0 ? "(" + $scope.selectedemplst.length + ")" : "";
|
|
|
- }
|
|
|
-
|
|
|
- function setitem() {
|
|
|
- _.each($scope.emplst, function (e) {
|
|
|
- e.selected = false;
|
|
|
- e.disabled = false;
|
|
|
- e.depname = dep.depname;
|
|
|
- set_isenable(e, Member.resourcemember, true);
|
|
|
- set_isenable(e, Member.unenabledata, false);
|
|
|
- var e1 = _.find($scope.selectedemplst, {'user_id': e.user_id});
|
|
|
- if (e1 != undefined) e.selected = true;
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- function set_isenable(e, data, op) {
|
|
|
- var p = _.find(data, {'user_id': e.user_id});
|
|
|
- if (p != undefined) {
|
|
|
- e.disabled = e.selected = true;
|
|
|
- if (!Member.disabled && op) e.disabled = false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function setdeptrighticon(deptlst) {
|
|
|
- _.each(deptlst, function (d) {
|
|
|
- d.isShow = isShow(d);
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- function isShow(dept) {
|
|
|
- var childdepts = Dept.getChildDept(dept.id);
|
|
|
- return !(childdepts.length == 0);
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.controller('SelectSingleMemberCtrl', function ($scope, $ionicHistory, $state, $controller, Dept, Member) {
|
|
|
- var parentctrl = $controller('SelectParentCtrl', {$scope: $scope});
|
|
|
- var startdept = {};
|
|
|
- $scope.init = function () {
|
|
|
- Dept.getDep().then(function (data) {
|
|
|
- startdept = _.find(data, function (itemdept) {
|
|
|
- return itemdept.parent == null; //获取公司的顶层部门
|
|
|
- });
|
|
|
- getemp(startdept.id);
|
|
|
- data = _.filter(data, function (item) {
|
|
|
- return item.parent == startdept.id;
|
|
|
- });
|
|
|
- $scope.deptlst = data;
|
|
|
- setdeptrighticon($scope.deptlst);
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- $scope.changeindex = function (index, dtid) {
|
|
|
- $scope.index = index;
|
|
|
- $scope.deptid = dtid;
|
|
|
- };
|
|
|
-
|
|
|
- $scope.change = function (emp) {
|
|
|
- Member.dialogresult = 1;
|
|
|
- Member.selectedemplst = [];
|
|
|
- Member.selectedemplst.push(emp);
|
|
|
- if (Member.routename != '') {
|
|
|
- $state.go(Member.routename, Member.routeparams);
|
|
|
- } else {
|
|
|
- $ionicHistory.goBack(); //todo:带参数跳转
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.up = function () {
|
|
|
- var dept = _.find(Dept.all(), function (d) {
|
|
|
- return d.id == parseInt($scope.deptid);
|
|
|
- });
|
|
|
- getdept_emp(dept.parent);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.cancel = function () {
|
|
|
- Member.dialogresult = 0;
|
|
|
- Member.selectedemplst = [];
|
|
|
- $ionicHistory.goBack();
|
|
|
- };
|
|
|
-
|
|
|
- var dep = {};
|
|
|
- $scope.changedept = function (dept) {
|
|
|
- dep = dept;
|
|
|
- getdept_emp(dept.id);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.deptdisplay = function () {
|
|
|
- return $scope.deptlst.length > 0;
|
|
|
- };
|
|
|
-
|
|
|
- function getemp(deptid) {
|
|
|
- Dept.getEmp(deptid).then(function (data) {
|
|
|
- Member.member[deptid.toString()] = angular.copy(data);
|
|
|
- $scope.emplst = data;
|
|
|
- setitem();
|
|
|
- $scope.loading = false;
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- function getdept_emp(did) {
|
|
|
- if (Member.member[did.toString()]) {
|
|
|
- set_member(did);
|
|
|
- } else {
|
|
|
- $scope.loading = true;
|
|
|
- Dept.getEmp(did).then(function (data) {
|
|
|
- Member.member[did.toString()] = angular.copy(data);
|
|
|
- set_member(did);
|
|
|
- $scope.loading = false;
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var set_member = function (did) {
|
|
|
- $scope.deptlst = Dept.getChildDept(did);
|
|
|
- setdeptrighticon($scope.deptlst);
|
|
|
- $scope.emplst = Member.member[did.toString()];
|
|
|
- setitem();
|
|
|
- $scope.deptid = did;
|
|
|
- $scope.index = (startdept && did == startdept.id) ? 0 : 1;
|
|
|
- };
|
|
|
-
|
|
|
- function setitem() {
|
|
|
- _.each($scope.emplst, function (e) {
|
|
|
- e.selected = false;
|
|
|
- e.disabled = false;
|
|
|
- e.depname = dep.depname;
|
|
|
- _.each(Member.resourcemember, function (p) {
|
|
|
- if (p.user_id == parseInt(e.user_id)) {
|
|
|
- e.disabled = true;
|
|
|
- e.selected = true;
|
|
|
- if (!Member.disabled) e.disabled = false;
|
|
|
- }
|
|
|
- });
|
|
|
- _.each($scope.selectedemplst, function (e1) {
|
|
|
- if (e1.user_id == e.user_id) e.selected = true;
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- function setdeptrighticon(deptlst) {
|
|
|
- _.each(deptlst, function (d) {
|
|
|
- d.isShow = isShow(d);
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- function isShow(dept) {
|
|
|
- return Dept.getChildDept(dept.id).length != 0;
|
|
|
- }
|
|
|
-
|
|
|
- $scope.$on("$destroy", function () {
|
|
|
- Member.member = {};
|
|
|
- });
|
|
|
-
|
|
|
- $scope.$on('$ionicView.beforeLeave', function (e) {
|
|
|
- if (Member.emit.is_have)
|
|
|
- $scope.$emit(Member.emit.name);
|
|
|
- });
|
|
|
-})
|
|
|
-
|
|
|
-.controller('SelectDeptCtrl', function ($scope, $state, $ionicHistory, $timeout, $controller, Dept, Member) {
|
|
|
- var parentctrl = $controller('SelectParentCtrl', {$scope: $scope});
|
|
|
- $scope.id = $state.params['id'];
|
|
|
- $scope.selecteddepts = Member.selecteddepts;
|
|
|
- $scope.selectdeptcount = '';
|
|
|
- $scope.isallcheck = Member.isallcheck;
|
|
|
- $scope.flag = 0;
|
|
|
- $scope.isAll = false;
|
|
|
- var deptid = 1;
|
|
|
- var resourcedept = [];
|
|
|
- var startdept = null;
|
|
|
- $scope.isAllCheck = function () {
|
|
|
- Member.dialogresult = 1;
|
|
|
- $scope.isallcheck = !$scope.isallcheck;
|
|
|
- Member.isallcheck = $scope.isallcheck;
|
|
|
- if (Member.isallcheck) {
|
|
|
- Member.selecteddepts = [];
|
|
|
- if (Member.routename != '') {
|
|
|
- $state.go(Member.routename, Member.routeparams);
|
|
|
- } else {
|
|
|
- $ionicHistory.goBack(); //todo:带参数跳转
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.cancel = function () {
|
|
|
- Member.dialogresult = 0;
|
|
|
- Member.selecteddepts = [];
|
|
|
- $ionicHistory.goBack();
|
|
|
- };
|
|
|
-
|
|
|
- $scope.ok = function () {
|
|
|
- console.log($scope.selecteddepts.length);
|
|
|
- Member.dialogresult = 1;
|
|
|
- Member.all = 0;
|
|
|
- if (Member.routename != '') {
|
|
|
- $state.go(Member.routename, Member.routeparams);
|
|
|
- } else {
|
|
|
- $ionicHistory.goBack(); //todo:带参数跳转
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.up = function () {
|
|
|
- if ($scope.index == 0 && Member.showall) {
|
|
|
- $scope.showall = true;
|
|
|
- }
|
|
|
- var dept = _.find(Dept.all(), function (d) {
|
|
|
- return d.id == parseInt(deptid);
|
|
|
- });
|
|
|
- getChildDept(dept.parent);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.change = function (dept) {
|
|
|
- if (Member.isallcheck) {
|
|
|
- $scope.isallcheck = !$scope.isallcheck;
|
|
|
- Member.isallcheck = $scope.isallcheck;
|
|
|
- }
|
|
|
- if (dept.selected) {
|
|
|
- $scope.selecteddepts.push(dept);
|
|
|
- Member.selecteddepts = $scope.selecteddepts;
|
|
|
- } else {
|
|
|
- $scope.selecteddepts = _.filter($scope.selecteddepts, function (e) {
|
|
|
- return e.id != parseInt(dept.id);
|
|
|
- });
|
|
|
- Member.selecteddepts = $scope.selecteddepts;
|
|
|
- }
|
|
|
- setselectedcount();
|
|
|
- };
|
|
|
-
|
|
|
- $scope.tochilddept = function (dept) {
|
|
|
- if ($scope.index == startdept.id) {
|
|
|
- $scope.showall = false;
|
|
|
- }
|
|
|
- getChildDept(dept.id);
|
|
|
- };
|
|
|
-
|
|
|
- function setdept(data) {
|
|
|
- _.each(data, function (item) {
|
|
|
- item.selected = false;
|
|
|
- item.isdisabled = false;
|
|
|
- item.ishide = false;
|
|
|
- item.disableddesc = '';
|
|
|
- item.isShow = isShow(item);
|
|
|
- if (Member.datatype == 3) {
|
|
|
- if (item.diarymobid != null && $state.params["id"] != item.diarymobid) {
|
|
|
- item.disableddesc = '(已设置)';
|
|
|
- item.isdisabled = true;
|
|
|
- }
|
|
|
- } else if (Member.datatype == 4) {
|
|
|
- if (item.workatdsetid != null && $state.params["id"] != item.workatdsetid) {
|
|
|
- item.disableddesc = '(已设置)';
|
|
|
- item.isdisabled = true;
|
|
|
- }
|
|
|
- }
|
|
|
- if (_.find(Member.resourcemember, function (rsc) {
|
|
|
- return rsc.id == item.id ? true : false
|
|
|
- })) {
|
|
|
- item.selected = true;
|
|
|
- }
|
|
|
- });
|
|
|
- $scope.deptlst = data;
|
|
|
- }
|
|
|
-
|
|
|
- function getChildDept(did) {
|
|
|
- var childdepts = Dept.getChildDept(did);
|
|
|
- if (childdepts.length > 0) {
|
|
|
- deptid = did;
|
|
|
- if (did == startdept.id) {
|
|
|
- $scope.index = 0;
|
|
|
- } else {
|
|
|
- $scope.index = 1;
|
|
|
- }
|
|
|
- setdept(childdepts);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function setselectedcount() {
|
|
|
- if (Member.selecteddepts.length > 0) {
|
|
|
- $scope.selectcount = "(" + Member.selecteddepts.length + ")";
|
|
|
- } else {
|
|
|
- $scope.selectcount = "";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function isShow(dept) {
|
|
|
- var childdepts = Dept.getChildDept(dept.id);
|
|
|
- if (childdepts.length == 0) {
|
|
|
- return false;
|
|
|
- } else {
|
|
|
- return true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var beforeEnter = $scope.$on("$ionicView.beforeEnter", function () {
|
|
|
- $scope.loading = true;
|
|
|
- Dept.getDep().then(function (data) {
|
|
|
- startdept = _.find(data, function (itemdept) {
|
|
|
- return itemdept.parent == null; //获取公司的顶层部门
|
|
|
- });
|
|
|
- Member.selecteddepts = Member.resourcemember;
|
|
|
- $scope.selecteddepts = Member.selecteddepts;
|
|
|
-
|
|
|
- if (Member.datatype == 3) {
|
|
|
- _.each(data, function (item) {
|
|
|
- if (item.diarymobid != null) {
|
|
|
- $scope.flag++;
|
|
|
- }
|
|
|
- if (item.id == 1 && item.diarymobid != null) {
|
|
|
- $scope.isAll = true;
|
|
|
- }
|
|
|
- })
|
|
|
- } else if (Member.datatype == 4) {
|
|
|
- _.each(data, function (item) {
|
|
|
- if (item.workatdsetid != null) {
|
|
|
- $scope.flag++;
|
|
|
- }
|
|
|
- if (item.id == 1 && item.workatdsetid != null) {
|
|
|
- $scope.isAll = true;
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- if ($scope.id == -1) {
|
|
|
- if ($scope.flag == 1 && $scope.isAll) {
|
|
|
- $scope.showall = true;
|
|
|
- } else if ($scope.flag >= 1 && !$scope.isAll) {
|
|
|
- $scope.showall = false;
|
|
|
- }
|
|
|
- if ($scope.flag >= 1 && $scope.flag + 1 == data.length && !$scope.isAll) {
|
|
|
- $scope.isAll = true;
|
|
|
- }
|
|
|
- } else {
|
|
|
- if ($scope.flag == 1 && $scope.isAll) {
|
|
|
- $scope.showall = true;
|
|
|
- } else if ($scope.flag >= 1 && !$scope.isAll && Member.resourcemember.length == 0) {
|
|
|
- $scope.showall = true;
|
|
|
- } else if ($scope.flag >= 1 && !$scope.isAll && $scope.flag == Member.resourcemember.length) {
|
|
|
- $scope.showall = true;
|
|
|
- } else if ($scope.flag >= 1 && !$scope.isAll && $scope.flag != Member.resourcemember.length) {
|
|
|
- $scope.showall = false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var rst = _.filter(data, function (a) {
|
|
|
- return (a.level === 1);
|
|
|
- });
|
|
|
- setdept(rst);
|
|
|
-
|
|
|
- if (!Member.disabled) {
|
|
|
- _.each(Member.resourcemember, function (m) {
|
|
|
- $scope.selecteddepts.push(m);
|
|
|
- });
|
|
|
- Member.selecteddepts = $scope.selecteddepts;
|
|
|
- }
|
|
|
- setselectedcount();
|
|
|
- }).finally(function () {
|
|
|
- $scope.loading = false;
|
|
|
- });
|
|
|
- });
|
|
|
-
|
|
|
- $scope.$on("$destroy", function () {
|
|
|
- beforeEnter = null;
|
|
|
- })
|
|
|
-})
|
|
|
-
|
|
|
-.controller('SelectSingleDeptCtrl', function ($scope, $state, $ionicHistory, $timeout, Dept, Member) {
|
|
|
- $scope.titlename = Member.titlename;
|
|
|
- var active_dept_id = 1;
|
|
|
- var startdept = null;
|
|
|
- $scope.leftbtn = [{
|
|
|
- text: '取消',
|
|
|
- click: 'cancel'
|
|
|
- }, {
|
|
|
- text: '上一层',
|
|
|
- click: 'up'
|
|
|
- }];
|
|
|
- var beforeEnter = $scope.$on("$ionicView.beforeEnter", function () {
|
|
|
- $scope.loading = true;
|
|
|
- Dept.getDep().then(function (data) {
|
|
|
- startdept = _.find(data, {'parent': null});
|
|
|
- $scope.id = Member.resourcemember.length > 0 ? Member.resourcemember[0].id : null;
|
|
|
- getChildDept(startdept.id);
|
|
|
- }).finally(function () {
|
|
|
- $scope.loading = false;
|
|
|
- });
|
|
|
- });
|
|
|
-
|
|
|
- $scope.cancel = function () {
|
|
|
- Member.dialogresult = 0;
|
|
|
- Member.selecteddepts = [];
|
|
|
- $ionicHistory.goBack();
|
|
|
- };
|
|
|
-
|
|
|
- $scope.up = function () {
|
|
|
- getChildDept(_.find(Dept.all(), {'id': active_dept_id}).parent);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.change = function (dept) {
|
|
|
- Member.selecteddepts = [];
|
|
|
- if (dept.selected) {
|
|
|
- Member.selecteddepts.push(dept);
|
|
|
- Member.routename == "" ? $ionicHistory.goBack() : $state.go(Member.routename, Member.routeparams);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- $scope.tochilddept = function (dept) {
|
|
|
- getChildDept(dept.id);
|
|
|
- };
|
|
|
-
|
|
|
- $scope.is_showright = function (dept) {
|
|
|
- return Dept.getChildDept(dept.id).length > 0;
|
|
|
- };
|
|
|
-
|
|
|
- function getChildDept(did) {
|
|
|
- var childdepts = Dept.getChildDept(did);
|
|
|
- if (childdepts.length > 0) {
|
|
|
- active_dept_id = did;
|
|
|
- $scope.index = did == startdept.id ? 0 : 1;
|
|
|
- var item = _.find(childdepts, {'id': $scope.id});
|
|
|
- if (item != undefined) item.selected = item != undefined;
|
|
|
- $scope.deptlst = childdepts;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- $scope.$on("$destroy", function () {
|
|
|
- beforeEnter = null;
|
|
|
- })
|
|
|
-})
|
|
|
-
|
|
|
-.controller('TransferCtrl', function ($scope, $state, $stateParams, $ionicPopup, $ionicHistory, global, Member) {
|
|
|
- $scope.selectmember = function () {
|
|
|
- $scope.isremove = false;
|
|
|
- Member.resourcemember = [];
|
|
|
- Member.resourcemember.push({
|
|
|
- id: global.user.usrid
|
|
|
- });
|
|
|
- Member.routename = '';
|
|
|
- Member.titlename = '选择联系人';
|
|
|
- $state.go('selectmember');
|
|
|
- };
|
|
|
-
|
|
|
- $scope.goback = function () {
|
|
|
- $ionicHistory.goBack();
|
|
|
- };
|
|
|
-
|
|
|
- function selectMember() {
|
|
|
- if (Member.selectedemplst.length > 0) {
|
|
|
- $scope.memberlist.push(global.user.imusrid);
|
|
|
- _.each(Member.selectedemplst, function (item) {
|
|
|
- $scope.memberlist.push(item.im_usrid);
|
|
|
- });
|
|
|
- Member.selectedemplst = [];
|
|
|
- if (window.cordovaLinker != undefined) {
|
|
|
- var discussion = {
|
|
|
- name: "讨论组",
|
|
|
- ids: []
|
|
|
- };
|
|
|
- discussion.ids = $scope.memberlist;
|
|
|
- window.cordovaLinker.discuss(discussion, function (s) {
|
|
|
- console.log(s);
|
|
|
-
|
|
|
- var confirmPopup = $ionicPopup.confirm({
|
|
|
- title: '<br/><div>转发至</div><br/>',
|
|
|
- subTitle: discussion.name,
|
|
|
- okText: '是',
|
|
|
- cancelText: '否'
|
|
|
- });
|
|
|
- confirmPopup.then(function (res) {
|
|
|
- if (res) {
|
|
|
- //:todo转发
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- }, function (err) {
|
|
|
- console.error(err);
|
|
|
- });
|
|
|
- }
|
|
|
- Member.resourcemember = [];
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- var beforeEnter = $scope.$on("$ionicView.beforeEnter", function () {
|
|
|
- $scope.module = $stateParams.module;
|
|
|
- $scope.id = $stateParams.id;
|
|
|
- $scope.linkurl = '/tab/app/' + $scope.module + '/' + $scope.id;
|
|
|
- console.log($scope.linkurl);
|
|
|
- $scope.memberlist = [];
|
|
|
- $scope.popup = {
|
|
|
- isPopup: false
|
|
|
- };
|
|
|
- selectMember();
|
|
|
- });
|
|
|
-
|
|
|
- $scope.$on("$destroy", function () {
|
|
|
- beforeEnter = null;
|
|
|
- })
|
|
|
-})
|
|
|
-
|
|
|
-starter.directive('itemMember', function (Dept) {
|
|
|
- return {
|
|
|
- restrict: 'E',
|
|
|
- replace: true,
|
|
|
- template: '<div><ion-checkbox ng-model="emp.selected" ng-disabled="emp.disabled" ng-change="change(emp)" class="ion-checkbox-class">' +
|
|
|
- '<img ng-src="../../../img/panda.png" />' +
|
|
|
- '<label class="labelname">{{emp.username}}</label>' +
|
|
|
- '<label class="labelrole">{{emp.degree}}</label>' +
|
|
|
- '</ion-checkbox>' +
|
|
|
- '</div>'
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.directive('itemDept', function (Dept) {
|
|
|
- return {
|
|
|
- restrict: 'E',
|
|
|
- replace: true,
|
|
|
- template: '<div>' +
|
|
|
- '<ion-item class="item item-icon-right" type="item-text-wrap" ng-click="changedept(dept);">' +
|
|
|
- '{{dept.depname}}' +
|
|
|
- '<i class="icon ion-chevron-right icon-accessory" ng-show="dept.isShow"></i>' +
|
|
|
- '</ion-item>' +
|
|
|
- '</div>'
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.directive('footerMember', function (Dept) {
|
|
|
- return {
|
|
|
- restrict: 'E',
|
|
|
- replace: true,
|
|
|
- template: '<div class="bar bar-footer bar-dark footer-div" ng-class={true:"bigview",false:""}[isUp]>' +
|
|
|
- '<i class="cirl-i" ng-class={true:"ion-ios-arrow-down",false:"ion-ios-arrow-up"}[isUp] ng-click="isUp = !isUp"></i>' +
|
|
|
- '<ul class="ul-imgs dept-icon">' +
|
|
|
- '<li ng-repeat="user in selectedemplst">{{user.username}}</li>' +
|
|
|
- '</ul>' +
|
|
|
- '<button ng-disabled="selectedemplst.length==0" ng-click="ok();" class="button pull-right button-calm">确定{{selectcount}}</button>' +
|
|
|
- '</div>'
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.directive('rjCloseBackDrop', [function () {
|
|
|
- return {
|
|
|
- scope: false,
|
|
|
- restrict: 'A',
|
|
|
- replace: false,
|
|
|
- link: function (scope, iElm, iAttrs, controller) {
|
|
|
- var htmlEl = angular.element(document.querySelector('html'));
|
|
|
- htmlEl.unbind("click");
|
|
|
- htmlEl.on("click", function (event) {
|
|
|
- if (event.target.nodeName === "HTML" &&
|
|
|
- scope.popup.optionsPopup &&
|
|
|
- scope.popup.isPopup) {
|
|
|
- scope.popup.optionsPopup.close();
|
|
|
- scope.popup.isPopup = false;
|
|
|
- } else if (event.target.nodeName === "DIV" &&
|
|
|
- scope.popup.optionsPopup &&
|
|
|
- scope.popup.isSetPopup) {
|
|
|
- scope.popup.optionsPopup.close();
|
|
|
- scope.popup.isSetPopup = false;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- };
|
|
|
-}])
|
|
|
-
|
|
|
-//放大缩小图片
|
|
|
-.directive('ngPinchZoom', [function () {
|
|
|
- var _directive = {
|
|
|
- restrict: 'A',
|
|
|
- scope: false,
|
|
|
- link: _link
|
|
|
- };
|
|
|
-
|
|
|
- function _link(scope, element, attrs) {
|
|
|
- var elWidth, elHeight;
|
|
|
-
|
|
|
- // mode : 'pinch' or 'swipe'
|
|
|
- var mode = '';
|
|
|
-
|
|
|
- // distance between two touche points (mode : 'pinch')
|
|
|
- var distance = 0;
|
|
|
- var initialDistance = 0;
|
|
|
-
|
|
|
- // image scaling
|
|
|
- var scale = 1;
|
|
|
- var relativeScale = 1;
|
|
|
- var initialScale = 1;
|
|
|
- var maxScale = parseInt(attrs.maxScale, 10);
|
|
|
- if (isNaN(maxScale) || maxScale <= 1) {
|
|
|
- maxScale = 3;
|
|
|
- }
|
|
|
-
|
|
|
- // position of the upper left corner of the element
|
|
|
- var positionX = 0;
|
|
|
- var positionY = 0;
|
|
|
-
|
|
|
- var initialPositionX = 0;
|
|
|
- var initialPositionY = 0;
|
|
|
-
|
|
|
- // central origin (mode : 'pinch')
|
|
|
- var originX = 0;
|
|
|
- var originY = 0;
|
|
|
-
|
|
|
- // start coordinate and amount of movement (mode : 'swipe')
|
|
|
- var startX = 0;
|
|
|
- var startY = 0;
|
|
|
- var moveX = 0;
|
|
|
- var moveY = 0;
|
|
|
-
|
|
|
- var image = new Image();
|
|
|
- image.onload = function () {
|
|
|
- elWidth = element[0].clientWidth;
|
|
|
- elHeight = element[0].clientHeight;
|
|
|
-
|
|
|
- element.css({
|
|
|
- '-webkit-transform-origin': '0 0',
|
|
|
- 'transform-origin': '0 0'
|
|
|
- });
|
|
|
-
|
|
|
- element.on('touchstart', touchstartHandler);
|
|
|
- element.on('touchmove', touchmoveHandler);
|
|
|
- element.on('touchend', touchendHandler);
|
|
|
- };
|
|
|
-
|
|
|
- if (attrs.ngSrc) {
|
|
|
- image.src = attrs.ngSrc;
|
|
|
- } else {
|
|
|
- if (attrs.src) {
|
|
|
- image.src = attrs.src;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param {object} evt
|
|
|
- */
|
|
|
- function touchstartHandler(evt) {
|
|
|
- var touches = evt.originalEvent ? evt.originalEvent.touches : evt.touches;
|
|
|
-
|
|
|
- startX = touches[0].clientX;
|
|
|
- startY = touches[0].clientY;
|
|
|
- initialPositionX = positionX;
|
|
|
- initialPositionY = positionY;
|
|
|
- moveX = 0;
|
|
|
- moveY = 0;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param {object} evt
|
|
|
- */
|
|
|
- function touchmoveHandler(evt) {
|
|
|
- var touches = evt.originalEvent ? evt.originalEvent.touches : evt.touches;
|
|
|
-
|
|
|
- if (mode === '') {
|
|
|
- if (touches.length === 1 && scale > 1) {
|
|
|
-
|
|
|
- mode = 'swipe';
|
|
|
-
|
|
|
- } else if (touches.length === 2) {
|
|
|
-
|
|
|
- mode = 'pinch';
|
|
|
-
|
|
|
- initialScale = scale;
|
|
|
- initialDistance = getDistance(touches);
|
|
|
- originX = touches[0].clientX -
|
|
|
- parseInt((touches[0].clientX - touches[1].clientX) / 2, 10) -
|
|
|
- element[0].offsetLeft - initialPositionX;
|
|
|
- originY = touches[0].clientY -
|
|
|
- parseInt((touches[0].clientY - touches[1].clientY) / 2, 10) -
|
|
|
- element[0].offsetTop - initialPositionY;
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (mode === 'swipe') {
|
|
|
- evt.preventDefault();
|
|
|
-
|
|
|
- moveX = touches[0].clientX - startX;
|
|
|
- moveY = touches[0].clientY - startY;
|
|
|
-
|
|
|
- positionX = initialPositionX + moveX;
|
|
|
- positionY = initialPositionY + moveY;
|
|
|
-
|
|
|
- transformElement();
|
|
|
-
|
|
|
- } else if (mode === 'pinch' && touches.length === 2) {
|
|
|
- evt.preventDefault();
|
|
|
-
|
|
|
- distance = getDistance(touches);
|
|
|
- relativeScale = distance / initialDistance;
|
|
|
- scale = relativeScale * initialScale;
|
|
|
-
|
|
|
- positionX = originX * (1 - relativeScale) + initialPositionX + moveX;
|
|
|
- positionY = originY * (1 - relativeScale) + initialPositionY + moveY;
|
|
|
-
|
|
|
- transformElement();
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param {object} evt
|
|
|
- */
|
|
|
- function touchendHandler(evt) {
|
|
|
- var touches = evt.originalEvent ? evt.originalEvent.touches : evt.touches;
|
|
|
-
|
|
|
- if (mode === '' || touches.length > 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (scale < 1) {
|
|
|
-
|
|
|
- scale = 1;
|
|
|
- positionX = 0;
|
|
|
- positionY = 0;
|
|
|
-
|
|
|
- } else if (scale > maxScale) {
|
|
|
-
|
|
|
- scale = maxScale;
|
|
|
- relativeScale = scale / initialScale;
|
|
|
- positionX = originX * (1 - relativeScale) + initialPositionX + moveX;
|
|
|
- positionY = originY * (1 - relativeScale) + initialPositionY + moveY;
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
- if (positionX > 0) {
|
|
|
- positionX = 0;
|
|
|
- } else if (positionX < elWidth * (1 - scale)) {
|
|
|
- positionX = elWidth * (1 - scale);
|
|
|
- }
|
|
|
- if (positionY > 0) {
|
|
|
- positionY = 0;
|
|
|
- } else if (positionY < elHeight * (1 - scale)) {
|
|
|
- positionY = elHeight * (1 - scale);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- transformElement(0.1);
|
|
|
- mode = '';
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param {Array} touches
|
|
|
- * @return {number}
|
|
|
- */
|
|
|
- function getDistance(touches) {
|
|
|
- var d = Math.sqrt(Math.pow(touches[0].clientX - touches[1].clientX, 2) +
|
|
|
- Math.pow(touches[0].clientY - touches[1].clientY, 2));
|
|
|
- return parseInt(d, 10);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * @param {number} [duration]
|
|
|
- */
|
|
|
- function transformElement(duration) {
|
|
|
- var transition = duration ? 'all cubic-bezier(0,0,.5,1) ' + duration + 's' : '';
|
|
|
- var matrixArray = [scale, 0, 0, scale, positionX, positionY];
|
|
|
- var matrix = 'matrix(' + matrixArray.join(',') + ')';
|
|
|
-
|
|
|
- element.css({
|
|
|
- '-webkit-transition': transition,
|
|
|
- transition: transition,
|
|
|
- '-webkit-transform': matrix + ' translate3d(0,0,0)',
|
|
|
- transform: matrix
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return _directive;
|
|
|
-}])
|
|
|
-
|
|
|
-.directive('focusMe', function ($timeout) {
|
|
|
- return {
|
|
|
- scope: {
|
|
|
- trigger: '=focusMe'
|
|
|
- },
|
|
|
- link: function (scope, element) {
|
|
|
- scope.$watch('trigger', function (value) {
|
|
|
- if (value === true) {
|
|
|
- $timeout(function () {
|
|
|
- element[0].focus();
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.directive('imagePopover', [function () {
|
|
|
- return {
|
|
|
- restrict: "E",
|
|
|
- scope: {
|
|
|
- allImages: '='
|
|
|
- },
|
|
|
- template: "<img ng-repeat='img in allImages' ng-click='showImages($index,$event)' ng-src='{{img.file_thumbnail_path}}' class='img-popver-pad'/>",
|
|
|
- controller: function ($scope, $rootScope, $ionicModal) {
|
|
|
- $scope.showImages = function (index, event) {
|
|
|
- if (event != undefined) {
|
|
|
- event.stopPropagation();
|
|
|
- }
|
|
|
- $scope.activeSlide = index;
|
|
|
- $scope.showModal('../../templates/modal-imagepopover.html');
|
|
|
- };
|
|
|
-
|
|
|
- $scope.bigImage = $rootScope.commons.bigImage;
|
|
|
- $scope.showModal = function (templateUrl) {
|
|
|
- $rootScope.commons.fun = clear_change;
|
|
|
- $rootScope.commons.bigImage = true;
|
|
|
- $ionicModal.fromTemplateUrl(templateUrl, {
|
|
|
- scope: $scope,
|
|
|
- animation: 'slide-in-up'
|
|
|
- }).then(function (modal) {
|
|
|
- $rootScope.commons.modal = modal;
|
|
|
- $rootScope.commons.modal.show();
|
|
|
- });
|
|
|
- };
|
|
|
-
|
|
|
- $scope.closeModal = function () {
|
|
|
- clear_change();
|
|
|
- $rootScope.commons.fun = null;
|
|
|
- };
|
|
|
-
|
|
|
- function clear_change() {
|
|
|
- $rootScope.commons.bigImage = false;
|
|
|
- $rootScope.commons.modal.hide();
|
|
|
- $rootScope.commons.modal.remove();
|
|
|
- $rootScope.commons.modal = null;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}])
|
|
|
-
|
|
|
-.directive('removePopoverHeader', [function () {
|
|
|
- return {
|
|
|
- restrict: "A",
|
|
|
- link: function (scope, iElm, iAttrs, controller) {
|
|
|
- document.getElementsByClassName('popup')[0].removeChild(document.getElementsByClassName('popup-head')[0]);
|
|
|
- }
|
|
|
- }
|
|
|
-}])
|
|
|
-
|
|
|
-.directive('setPopoverStyle', [function () {
|
|
|
- return {
|
|
|
- restrict: "A",
|
|
|
- scope:{
|
|
|
- width:"=",
|
|
|
- headerwidth:"="
|
|
|
- },
|
|
|
- link: function (scope, iElm, iAttrs, controller) {
|
|
|
- document.getElementsByClassName('popup')[0].style.width="300px";
|
|
|
- document.getElementsByClassName('popup-head')[0].className +=" popup-header-height";
|
|
|
- }
|
|
|
- }
|
|
|
-}])
|
|
|
-
|
|
|
-.directive('ionBackButton', [function () {
|
|
|
- return {
|
|
|
- restrict: "E",
|
|
|
- replace: false,
|
|
|
- template: '<button class="button ion-chevron-left button-clear button-dark" ng-click="goBack()"> 返回</button>',
|
|
|
- controller: function ($scope, global) {
|
|
|
- $scope.goBack = function () {
|
|
|
- global.goBack();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}])
|
|
|
-
|
|
|
-.directive('showBigImage', [function () {
|
|
|
- return {
|
|
|
- restrict: "E",
|
|
|
- scope: {
|
|
|
- url: '=',
|
|
|
- files: '='
|
|
|
- },
|
|
|
- template: "<img ng-repeat='img in files' ng-click='showBigImage(img)' ng-src='{{img.file_thumbnail_path}}' class='img-popver-pad'/>",
|
|
|
- controller: function ($scope, $rootScope) {
|
|
|
- $scope.showBigImage = function (img) {
|
|
|
- $scope.url = img.file_full_path;
|
|
|
- $rootScope.commons.bigImage = true;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}])
|
|
|
-starter.factory('Tool', function ($http, $q, $translate, $ionicHistory) {
|
|
|
- var tempData = {};
|
|
|
- var translates = {
|
|
|
- "weekdays": ['sundayTitle', 'mondayTitle', 'tuesdayTitle', 'wednesdayTitle', 'thursdayTitle', 'fridayTitle', 'saturdayTitle']
|
|
|
- };
|
|
|
- return {
|
|
|
- trim: function (str) {
|
|
|
- if (str == null) {
|
|
|
- str = "";
|
|
|
- }
|
|
|
- return str.replace(/(^\s*)|(\s*$)/g, "");
|
|
|
- },
|
|
|
- getTempData: function (key) {
|
|
|
- return tempData[key]
|
|
|
- },
|
|
|
- setTempData: function (key) {
|
|
|
- tempData[key] = []
|
|
|
- },
|
|
|
- get: function (url, iscache, key) {
|
|
|
- var deferred = $q.defer();
|
|
|
- iscache = iscache || false;
|
|
|
- $http.get(url).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- if (iscache)
|
|
|
- tempData[key] = res.data;
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- get_nextpage: function (url) {
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.get(url).then(function (res) {
|
|
|
- deferred.resolve(res);
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- post: function (url, data, isjson) {
|
|
|
- var deferred = $q.defer();
|
|
|
- var header = null;
|
|
|
- if (isjson == false) {
|
|
|
- header = {
|
|
|
- 'Content-Type': 'application/x-www-form-urlencoded'
|
|
|
- };
|
|
|
- }
|
|
|
- $http.post(url, data, {
|
|
|
- headers: header
|
|
|
- }).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- })
|
|
|
- return deferred.promise;
|
|
|
-
|
|
|
- },
|
|
|
- patch: function (url, data) {
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.patch(url, data).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- }, function (err) {
|
|
|
- deferred.resolve(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- put: function (url, data, iscache) {
|
|
|
- var deferred = $q.defer();
|
|
|
- iscache = iscache || false;
|
|
|
- $http.put(url, data).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- if (iscache)
|
|
|
- tempData = res.data;
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- delete: function (url) {
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.delete(url).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- getTranslateByKey: function (type, key) {
|
|
|
- if (translates[type] === undefined || translates[type][key] === undefined)
|
|
|
- return null;
|
|
|
- return $translate.instant(translates[type][key]);
|
|
|
- },
|
|
|
- removeBackView: function (routes) {
|
|
|
- var view = $ionicHistory.backView();
|
|
|
- if (!view)
|
|
|
- return;
|
|
|
- if (!(_.isArray(routes)))
|
|
|
- routes = [routes];
|
|
|
- _.find(routes, function (route) {
|
|
|
- if (view.stateName == route) {
|
|
|
- return $ionicHistory.removeBackView();
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.factory('showPopup', function ($timeout, $ionicLoading, $ionicPopup, $rootScope, $ionicModal) {
|
|
|
- var typeArr = [
|
|
|
- '<i class="icon icon-warn" style="font-size:3em;"></i><br/>',
|
|
|
- '<ion-spinner icon="android"></ion-spinner><br/>'
|
|
|
- ];
|
|
|
-
|
|
|
- function showLoadingToast(type, text, isShowBackDrop) {
|
|
|
- if (isShowBackDrop == undefined) {
|
|
|
- isShowBackDrop = true;
|
|
|
- }
|
|
|
- // Setup the loader
|
|
|
- $ionicLoading.show({
|
|
|
- template: typeArr[type] + text,
|
|
|
- animation: 'fade-in',
|
|
|
- showBackdrop: isShowBackDrop,
|
|
|
- maxWidth: 200,
|
|
|
- Showdelay: 0
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- function hideLoadingToast() {
|
|
|
- $ionicLoading.hide();
|
|
|
- }
|
|
|
-
|
|
|
- function popupInfo(type, text, isShowBackDrop, delay) {
|
|
|
- if (delay == undefined) {
|
|
|
- delay = 1500;
|
|
|
- }
|
|
|
- //弹出缓冲提示
|
|
|
- showLoadingToast(type, text, isShowBackDrop);
|
|
|
- //这里使用定时器是为了缓存一下加载过程,防止加载过快
|
|
|
- $timeout(function () {
|
|
|
- //停止缓冲提示
|
|
|
- hideLoadingToast();
|
|
|
- }, delay);
|
|
|
- }
|
|
|
-
|
|
|
- return {
|
|
|
- //触发函数
|
|
|
- PopupWindow: function (type, text, isShowBackDrop, delay) {
|
|
|
- popupInfo(type, text, isShowBackDrop, delay);
|
|
|
- },
|
|
|
- hideLoading: function () {
|
|
|
- hideLoadingToast();
|
|
|
- $rootScope.commons.isShowPopup = false;
|
|
|
- },
|
|
|
- showLoading: function (type, text, isShowBackDrop, delay) {
|
|
|
- showLoadingToast(type, text, isShowBackDrop);
|
|
|
- $rootScope.commons.isShowPopup = true;
|
|
|
- delay = delay || 10000;
|
|
|
- $timeout(function () {
|
|
|
- if ($rootScope.commons.isShowPopup) {
|
|
|
- $ionicLoading.hide();
|
|
|
- console.log(self);
|
|
|
- popupInfo(0, '请求超时!', false);
|
|
|
- $rootScope.commons.isShowPopup = false;
|
|
|
- }
|
|
|
- }, delay);
|
|
|
- },
|
|
|
- confirm: function (title, okText, cancelText) {
|
|
|
- var confirmpopup = $ionicPopup.confirm({
|
|
|
- title: '<br/><div>' + title + '</div><br/>',
|
|
|
- okText: okText,
|
|
|
- cancelText: cancelText
|
|
|
- });
|
|
|
- return confirmpopup;
|
|
|
- },
|
|
|
- showSelectImgPopup: function (camera, imagePicker, scope) {
|
|
|
- var optionsPopup = $ionicPopup.show({
|
|
|
- templateUrl: '../../templates/template-selectimg.html',
|
|
|
- scope: scope
|
|
|
- });
|
|
|
- scope.Camera = camera;
|
|
|
- scope.ImagePicker = imagePicker;
|
|
|
- return optionsPopup;
|
|
|
- },
|
|
|
- modalTemplate: function (templateurl, animation, scope) {
|
|
|
- return $ionicModal.fromTemplateUrl(templateurl, {
|
|
|
- scope: scope,
|
|
|
- animation: animation,
|
|
|
- focusFirstInput: true
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.factory('ImageManage', function ($q, $cordovaCamera, $cordovaImagePicker, $cordovaFileTransfer, $cordovaFile, $http, cfg, formatFilter, Tool) {
|
|
|
- var Qiniu_UploadUrl = "http://up.qiniu.com";
|
|
|
-
|
|
|
- function S4() {
|
|
|
- return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
|
|
- }
|
|
|
-
|
|
|
- function guid() {
|
|
|
- return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
|
|
|
- }
|
|
|
-
|
|
|
- return {
|
|
|
- ImagePicker_getPictures: function (_imagecount) {
|
|
|
- if (_imagecount == undefined) {
|
|
|
- _imagecount = 1;
|
|
|
- }
|
|
|
- var deferred = $q.defer();
|
|
|
- var options = {
|
|
|
- maximumImagesCount: _imagecount,
|
|
|
- quality: 30
|
|
|
- };
|
|
|
- var promises = [];
|
|
|
- $cordovaImagePicker.getPictures(options).then(function (results) {
|
|
|
- _.each(results, function (res) {
|
|
|
- var deferred1 = $q.defer();
|
|
|
- window.resolveLocalFileSystemURL(res, function done(fileEntry) {
|
|
|
- fileEntry.file(function (fileObj) {
|
|
|
- var reader = new FileReader();
|
|
|
- reader.onloadend = function (e) {
|
|
|
- deferred1.resolve("data:image/jpeg;base64," + window.btoa(e.target.result))
|
|
|
- };
|
|
|
- reader.readAsBinaryString(fileObj);
|
|
|
- }, function (err) {
|
|
|
- alert(JSON.stringify(err))
|
|
|
- })
|
|
|
- });
|
|
|
- promises.push(deferred1.promise);
|
|
|
- });
|
|
|
- deferred.resolve(promises);
|
|
|
- }, function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- Camera_getPicture: function (_allowEdit) {
|
|
|
- if (_allowEdit == undefined) {
|
|
|
- _allowEdit = false;
|
|
|
- }
|
|
|
- var deferred = $q.defer();
|
|
|
- var options = {
|
|
|
- quality: 30,
|
|
|
- destinationType: Camera.DestinationType.DATA_URL,
|
|
|
- sourceType: Camera.PictureSourceType.CAMERA,
|
|
|
- allowEdit: _allowEdit,
|
|
|
- encodingType: Camera.EncodingType.JPEG,
|
|
|
- popoverOptions: CameraPopoverOptions,
|
|
|
- saveToPhotoAlbum: true,
|
|
|
- correctOrientation: true
|
|
|
- };
|
|
|
- $cordovaCamera.getPicture(options).then(function (imageData) {
|
|
|
- deferred.resolve("data:image/jpeg;base64," + imageData);
|
|
|
- }, function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- upload: function (fileurls, token, _filepath) {
|
|
|
- var promises = [];
|
|
|
- var files = fileurls;
|
|
|
- var options = new FileUploadOptions();
|
|
|
- if (!_.isArray(files)) {
|
|
|
- files = [];
|
|
|
- files.push(fileurls);
|
|
|
- }
|
|
|
- _.each(files, function (itemfile) {
|
|
|
- var params = {};
|
|
|
- options.params = params;
|
|
|
- params.token = token;
|
|
|
- params.mimeType = "image/jpg";
|
|
|
- params.key = _filepath + guid() + itemfile.substr(itemfile.lastIndexOf('.'));
|
|
|
- promises.push($cordovaFileTransfer.upload(Qiniu_UploadUrl, itemfile, options, true));
|
|
|
- });
|
|
|
- return $q.all(promises);
|
|
|
- },
|
|
|
- getToken: function (app, id, cls) {
|
|
|
- var url = formatFilter('{0}qiniuupload/?app={1}&cls={2}&pk={3}', cfg.api, app, cls, id);
|
|
|
- return $http.get(url);
|
|
|
- },
|
|
|
- get_upload_Token: function (_url, compid) {
|
|
|
- var url = formatFilter('{0}{1}/{2}/', cfg.api, _url, compid);
|
|
|
- return $http.get(url);
|
|
|
- },
|
|
|
- uploadImage: function (fileurls, app, id, cls) {
|
|
|
- var url = formatFilter('{0}qiniuupload/?app={1}&cls={2}&pk={3}', cfg.api, app, cls, id);
|
|
|
- var defer_promises = $q.defer();
|
|
|
- Tool.get(url).then(function (data) {
|
|
|
- var promises = [];
|
|
|
- var options = new FileUploadOptions();
|
|
|
- var params = {};
|
|
|
- options.params = params;
|
|
|
- params.token = data.token;
|
|
|
- params.mimeType = "image/jpg";
|
|
|
- _.each(_.isArray(fileurls) ? fileurls : [fileurls], function (itemfile) {
|
|
|
- params.key = data.filepath + guid();
|
|
|
- var defer_up = $q.defer();
|
|
|
- $cordovaFileTransfer.upload(Qiniu_UploadUrl, itemfile, options, true).then(function (res) {
|
|
|
- defer_up.resolve(res);
|
|
|
- }, function (err) {
|
|
|
- console.log(JSON.stringify(err));
|
|
|
- defer_up.reject(err);
|
|
|
- });
|
|
|
- promises.push(defer_up.promise);
|
|
|
- });
|
|
|
- defer_promises.resolve(promises);
|
|
|
- }, function (err) {
|
|
|
- defer_promises.reject(err);
|
|
|
- alert('get upload token error' + JSON.stringify(err));
|
|
|
- });
|
|
|
- return defer_promises.promise;
|
|
|
- }
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.factory('Member', function () {
|
|
|
- var member = {};
|
|
|
- var defaultmember = {};
|
|
|
- member.resourcemember = []; //基础数据
|
|
|
- member.selectedemplst = []; //选中的员工数据
|
|
|
- member.selecteddepts = []; //选中的部门数据
|
|
|
- member.isallcheck = false; //是否选中全部成员(部门)
|
|
|
- member.unenabledata = [];//未启用的数据(禁用的数据)
|
|
|
-
|
|
|
- member.homerenderdata = []; //目前为展示部门数据
|
|
|
-
|
|
|
- member.routename = ''; //点击确定后需要跳转的路由名称,默认是goBack();
|
|
|
- member.routeparams = {}; //"确定" 路由参数
|
|
|
- member.cancelroutename = ''; //点击取消后需要跳转的路由名称,默认是goBack();
|
|
|
- member.cancelrouteparams = {}; //"取消" 路由参数
|
|
|
- member.titlename = "选择成员"; //页面显示的标题名称
|
|
|
- member.datatype = ''; //成员类型 0:不计考勤成员 1:可查看考勤统计成员
|
|
|
- member.disabled = true; //是否需要禁用基础数据
|
|
|
- member.hide = false; //是否需要隐藏基础数据
|
|
|
- member.dialogresult = 1; //0:是点击了取消按钮退出,1:点击了确定按钮
|
|
|
- member.showall = false; //默认不显示‘全部成员’栏位
|
|
|
- member.showgroup = false; //默认不显示‘选择小组’栏位
|
|
|
- member.all = 1; // 全部成员/部分成员 : 1/0
|
|
|
- member.customerop = null; //自定义操作
|
|
|
-
|
|
|
- member.emit = {is_have: false, name: ''};
|
|
|
-
|
|
|
- member.member = {};//用来存放相对应部门的员工数据,一部门ID作为key
|
|
|
- return member;
|
|
|
-})
|
|
|
-
|
|
|
-.factory('Dept', function ($http, $q, cfg, formatFilter, Tool, global) {
|
|
|
- var deptlst = [];
|
|
|
- var resultdept = new Array();
|
|
|
- var resultemp = new Array();
|
|
|
- return {
|
|
|
- selecteddepts: [], //存放被选中的部门集合
|
|
|
- titleName: {
|
|
|
- name: ''
|
|
|
- },
|
|
|
- save: function (up_depts, del_deptids, add_depts, compid) {
|
|
|
- var datas = [];
|
|
|
- if (del_deptids.length > 0) {
|
|
|
- datas.push({
|
|
|
- "op": "del",
|
|
|
- "values": del_deptids
|
|
|
- });
|
|
|
- }
|
|
|
- if (add_depts.length > 0) {
|
|
|
- datas.push({
|
|
|
- "op": "add",
|
|
|
- "values": add_depts
|
|
|
- });
|
|
|
- }
|
|
|
- if (up_depts.length > 0) {
|
|
|
- datas.push({
|
|
|
- "op": "up",
|
|
|
- "values": up_depts
|
|
|
- });
|
|
|
- }
|
|
|
- var url = formatFilter('{0}depts/?compid={1}', cfg.api, compid);
|
|
|
- return Tool.patch(url, datas)
|
|
|
- },
|
|
|
- all: function () {
|
|
|
- deptlst = Tool.getTempData('deptlist') || [];
|
|
|
- return deptlst;
|
|
|
- },
|
|
|
- setdeptlst: function (data) {
|
|
|
- deptlst = data;
|
|
|
- Tool.setTempData('deptlist')
|
|
|
- },
|
|
|
- getDep: function (compid) {
|
|
|
- var url = formatFilter('{0}depts/', cfg.api);
|
|
|
- if (compid) {
|
|
|
- url = formatFilter('{0}depts/?compid={1}', cfg.api, compid);
|
|
|
- }
|
|
|
- return Tool.get(url, true, 'deptlist')
|
|
|
- },
|
|
|
- getEmp: function (deptid, compid) {
|
|
|
- var url = formatFilter('{0}usrs/', cfg.api);
|
|
|
- if (deptid != undefined) {
|
|
|
- url = formatFilter('{0}usrs/?deptid={1}', cfg.api, deptid);
|
|
|
- }
|
|
|
- if (compid != undefined && deptid != undefined) {
|
|
|
- url = formatFilter('{0}usrs/?compid={1}&deptid={2}', cfg.api, compid, deptid);
|
|
|
- }
|
|
|
- return Tool.get(url)
|
|
|
- },
|
|
|
- getChildDept: function (pid) {
|
|
|
- return _.filter(this.all(), function (dept) {
|
|
|
- return parseInt(dept.parent) == parseInt(pid);
|
|
|
- });
|
|
|
- },
|
|
|
- getUsrDetail: function () {
|
|
|
- return Tool.get(formatFilter('{0}usrs/{1}/?compid={2}', cfg.api, global.user.usrid, global.user.compno), true, 'userinfo');
|
|
|
- },
|
|
|
- putUsrInfo: function (data) {
|
|
|
- data.dept = data.dept_id;
|
|
|
- data = _.pick(data, 'username', 'sex', 'dept', 'degree', 'email');
|
|
|
- return Tool.put(formatFilter('{0}usrs/{1}/', cfg.api, global.user.usrid), data)
|
|
|
- }
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.factory('General', function ($http, $q, cfg, global, formatFilter) {
|
|
|
- var Comment = {};
|
|
|
- var Read = {};
|
|
|
- return {
|
|
|
- getComment: function (id, module) {
|
|
|
- var url = formatFilter('{0}{1}/comments/?{2}id={3}', cfg.api, module, module, id);
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.get(url).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- Comment = res.data;
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- getRead: function (id, module, type) {
|
|
|
- var url = formatFilter('{0}{1}/readeds/?{2}id={3}', cfg.api, module, module, id);
|
|
|
- if (type != undefined) {
|
|
|
- url += '&type=unreads'
|
|
|
- }
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.get(url).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- postComment: function (data, module) {
|
|
|
- var url = formatFilter('{0}{1}/comment/', cfg.api, module);
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.post(url, data, {
|
|
|
- headers: {
|
|
|
- 'Content-Type': 'application/json'
|
|
|
- }
|
|
|
- }).then(function (res) {
|
|
|
- console.log(res.data)
|
|
|
- deferred.resolve(res.data);
|
|
|
- res.data.user__username = global.user.usrname;
|
|
|
- res.data.user_id = global.user.usrid;
|
|
|
- res.data.create_dd = new Date();
|
|
|
- Comment.splice(0, 0, res.data);
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- postRead: function (data, module) {
|
|
|
- console.log(Read)
|
|
|
- var url = formatFilter('{0}{1}/readeds/', cfg.api, module);
|
|
|
- var deferred = $q.defer();
|
|
|
- $http.post(url, data, {
|
|
|
- headers: {
|
|
|
- 'Content-Type': 'application/json'
|
|
|
- }
|
|
|
- }).then(function (res) {
|
|
|
- deferred.resolve(res.data);
|
|
|
- },
|
|
|
- function (err) {
|
|
|
- deferred.reject(err);
|
|
|
- });
|
|
|
- return deferred.promise;
|
|
|
- },
|
|
|
- deleteComment: function (id, module) {
|
|
|
- var comment = _.find(Comment, function (item) {
|
|
|
- if (item.id === parseInt(id)) {
|
|
|
- return item;
|
|
|
- }
|
|
|
- })
|
|
|
- if (comment != undefined) {
|
|
|
- Comment.splice(Comment.indexOf(comment), 1);
|
|
|
- var url = formatFilter('{0}{1}/comment/{2}/', cfg.api, module, id);
|
|
|
- return $http.delete(url);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-starter.filter("format", function () {
|
|
|
- return function (input) {
|
|
|
- var args = arguments;
|
|
|
- return input.replace(/\{(\d+)\}/g, function (match, capture) {
|
|
|
- return args[1 * capture + 1];
|
|
|
- });
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.filter('getDateDiff', function () {
|
|
|
- return function (dateTimeStamp) {
|
|
|
- if (dateTimeStamp == null) {
|
|
|
- return null;
|
|
|
- }
|
|
|
-
|
|
|
- var minute = 1000 * 60;
|
|
|
- var hour = minute * 60;
|
|
|
- var day = hour * 24;
|
|
|
- var week = day * 7;
|
|
|
- var month = day * 30;
|
|
|
- var year = day * 365;
|
|
|
- var now = new Date().getTime();
|
|
|
- var datetime = new Date(dateTimeStamp).getTime()
|
|
|
- var diffValue = now - datetime;
|
|
|
-
|
|
|
- if (diffValue + 10000 < 0) {
|
|
|
- //非法操作
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- var yearC = diffValue / year;
|
|
|
- var monthC = diffValue / month;
|
|
|
- var weekC = diffValue / week;
|
|
|
- var dayC = diffValue / day;
|
|
|
- var hourC = diffValue / hour;
|
|
|
- var minC = diffValue / minute;
|
|
|
-
|
|
|
- if (yearC >= 1) {
|
|
|
- result = parseInt(yearC) + "年前";
|
|
|
- } else if (monthC >= 1) {
|
|
|
- result = parseInt(monthC) + "个月前";
|
|
|
- } else if (weekC >= 1) {
|
|
|
- result = parseInt(weekC) + "周前";
|
|
|
- } else if (dayC >= 1) {
|
|
|
- result = parseInt(dayC) + "天前";
|
|
|
- } else if (hourC >= 1) {
|
|
|
- result = parseInt(hourC) + "小时前";
|
|
|
- } else if (minC >= 1) {
|
|
|
- result = parseInt(minC) + "分钟前";
|
|
|
- } else
|
|
|
- result = "刚刚";
|
|
|
- return result;
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.filter('SwitchHtmlContent', function () {
|
|
|
- return function (content) {
|
|
|
- if (content != null) {
|
|
|
- content = content.replace(/\n/g, '<br/>');
|
|
|
- if (typeof ioNull != 'undefined') {
|
|
|
- return ioNull.emoji.parse(content);
|
|
|
- }
|
|
|
- }
|
|
|
- return content;
|
|
|
- }
|
|
|
-})
|
|
|
-
|
|
|
-.filter('percentage', function ($window) {
|
|
|
- return function (input, decimals, suffix) {
|
|
|
- decimals = angular.isNumber(decimals) ? decimals : 2;
|
|
|
- suffix = suffix || '%';
|
|
|
- if ($window.isNaN(input)) {
|
|
|
- return '';
|
|
|
- }
|
|
|
- return Math.round(input * Math.pow(10, decimals + 2)) / Math.pow(10, decimals) + suffix
|
|
|
- };
|
|
|
-})
|
|
|
-
|
|
|
-.filter('strtimeformat', function ($filter) {
|
|
|
- var dateFilter = $filter('date');
|
|
|
-
|
|
|
- function formatter(value) {
|
|
|
- return dateFilter(value, 'HH:mm'); //format
|
|
|
- }
|
|
|
-
|
|
|
- return function (str) {
|
|
|
- if (str == null)
|
|
|
- return null;
|
|
|
- str = new Date('2016/10/1 ' + str);
|
|
|
- return formatter(str);
|
|
|
- };
|
|
|
-})
|