gisq-dd-mobile
Version:
gisq dingding mobile lib
249 lines (245 loc) • 6.58 kB
JavaScript
import dd from 'gdt-jsapi'
import axios from 'axios'
export var gd = {
authorCode: "",
accessToken: "",
ticket: "",
userInfo: "",
locate: function locate() {
console.log("locate");
},
alert: function alert(msg) {
console.log("locate");
if (!dd) return;
dd.alert({
message: msg
});
},
axiosGet: function(url, params) {
return new Promise((resolve, reject) => {
axios.get(url, {
params: params
}).then(res => {
resolve(res.data);
}).catch(err => {
reject(err.data)
})
});
},
axiosPost: function(url, params) {
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
return new Promise((resolve, reject) => {
axios.post(url, params)
.then(res => {
resolve(res.data);
})
.catch(err => {
reject(err.data)
});
});
},
axiosPostFormData: function axiosPost(url, params) {
axios.defaults.headers.post['Content-Type'] = 'application/json';
return new Promise(function(resolve, reject) {
var fd = new FormData();
for (let it in params) {
fd.append(it, params[it]);
}
axios.post(url, fd).then(res => {
resolve(res.data);
})
.catch(err => {
reject(err.data)
});
});
},
getAccessToken: function(baseUrl, params) {
var _this = this;
var url = "/user/getAccessToken";
this.axiosGet(baseUrl + url, params).then(accessTokenStr => {
localStorage.setItem("gisqDdAccessToken", accessTokenStr);
_this.accessToken = accessTokenStr;
});
},
getTicket: function(baseUrl, params, isJsAuth) {
//TODO ajax getTicket
var _this = this;
var url = "/user/getJsAuthorTicket";
this.axiosGet(baseUrl + url, params).then(ticketStr => {
localStorage.setItem("gisqDdTicket", ticketStr);
if (isJsAuth) _this.jsAuthor(ticketStr);
_this.ticket = ticketStr;
});
},
jsAuthor: function(ticketStr, successCallback) {
if (!dd) return;
var _this = this;
dd.authConfig({
ticket: ticketStr,
jsApiList: ["alert", "createChatGroup", "openChat", "copyToClipboard",
"getGeolocation", "chooseDepartments", "chooseContactWithComplexPicker",
"chooseContact", "takePhoto"
]
}).then(res => {
console.log(res)
successCallback();
//_this.alert("js授权错误"+JSON.stringify(res));
}).catch(err => {
console.log(err)
_this.alert("js授权错误" + JSON.stringify(err));
})
},
getAuthorCode: function(corpId) {
if (!dd) return;
return new Promise((resolve, reject) => {
dd.getAuthCode({
corpId: corpId
}).then(res => {
console.log(res)
resolve(res)
}).catch(err => {
//_this.alert("获取授权码错误"+JSON.stringify(err));
reject(err);
})
});
},
getUserDetail: function(baseUrl, accessToken, authorCode) {
var _this = this;
var url = "/user/getUserDetail";
var params = {
"accessToken": accessToken,
"authorCode": authorCode
}
this.axiosGet(baseUrl + url, params).then(userInfo => {
localStorage.setItem("gisqDdUserInfo", userInfo);
_this.userInfo = userInfo;
});
},
freeLogin: function(corpId, baseUrl, isJsAuth, successCallback, errorCallback) {
var _this = this;
this.getAuthorCode(corpId).then(function(authCodeJson) {
var url = "/user/freeLogin";
var params = {
"authorCode": authCodeJson.code
}
_this.axiosPostFormData(baseUrl + url, params).then(res => {
//_this.alert("freeLogin" + JSON.stringify(res));
if (res && res.data.userInfo) {
_this.accessToken = res.data.accessToken;
_this.ticket = res.data.jsTicket;
_this.userInfo = res.data.userInfo;
successCallback(res);
if (isJsAuth) {
_this.jsAuthor(_this.ticket, function() {});
}
} else {
errorCallback("failed to login");
}
});
}).catch(err => {
_this.alert("获取授权码错误" + JSON.stringify(err));
});
},
getGeolocation: function(useCache, successCallback, errorCallback) {
dd.getGeolocation({
targetAccuracy: 200,
coordinate: 0,
withReGeocode: false,
useCache: useCache, //默认是true,如果需要频繁获取地理位置,请设置false
}).then(res => {
successCallback(res);
}).catch(err => {
errorCallback(err);
})
},
takePhoto: function(successCallback, errorCallback) {
dd.takePhoto().then(res => {
successCallback(res);
}).catch(err => {
errorCallback(err);
});
},
recordVideo: function(successCallback, errorCallback) {
dd.shootVideo().then(res => {
successCallback(res)
}).catch(err => {
errorCallback(err);
})
},
getPhoneInfo: function(successCallback, errorCallback) {
dd.getPhoneInfo().then(res => {
successCallback(res)
}).catch(err => {
errorCallback(err)
})
},
getUUID: function(successCallback, errorCallback) {
dd.getUUID().then(res => {
successCallback(res)
}).catch(err => {
errorCallback(err)
})
},
scan: function(type, successCallback, errorCallback) {
dd.scan({
type: type ? type : "qr"
}).then(res => {
successCallback(res)
}).catch(err => {
errorCallback(err)
})
},
version: function(successCallback, errorCallback) {
dd.version().then(res => {
successCallback(res)
}).catch(err => {
errorCallback(err)
})
},
ready: function(callback) {
dd.ready(function() {
//调用jsapi方法
callback();
})
},
getLoginUser: function(successCallback, errorCallback) {
dd.getLoginUser().then(res => {
successCallback(res)
}).catch(err => {
errorCallback(err)
})
},
fetchLocal: function(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (xhr.status == 0) {
xhr.status = 200;
}
resolve(new Response(xhr.response, {
status: xhr.status
}));
};
xhr.onerror = function() {
reject(new TypeError('Local request failed'));
};
xhr.open('GET', url);
xhr.send(null);
});
},
getMobileLocalFile: function(path,fileName, successCallback,errorCallback) {
this.fetchLocal(path).then(function(response) {
return response.arrayBuffer();
}).then(function(arrayBuffer) {
//console.log(arrayBuffer)
var fd = new File([new Blob([arrayBuffer])], fileName, {
"type": "text/plain",
"lastModified": "" + new Date() + ""
});
successCallback(fd);
}).catch(function(err) {
errorCallback(err);
});
}
};