Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
iBiz-Vue-Mob-R7-Res
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
iBiz-R7前端标准模板
iBiz-Vue-Mob-R7-Res
提交
79b612a0
提交
79b612a0
编写于
9月 27, 2020
作者:
KK
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
第三方服务
上级
02a407c0
变更
2
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
223 行增加
和
62 行删除
+223
-62
DingTalkService.ts
src/ibiz-core/third-party-service/DingTalkService.ts
+190
-44
ThirdPartyService.ts
src/ibiz-core/third-party-service/ThirdPartyService.ts
+33
-18
未找到文件。
src/ibiz-core/third-party-service/DingTalkService.ts
浏览文件 @
79b612a0
...
...
@@ -32,13 +32,15 @@ export class DingTalkService {
* @type {string}
* @memberof WeChatService
*/
private
readonly
ap
pId
:
string
=
"ding0466097cd833d9f9a1320dcb25e91351"
;
private
cor
pId
:
string
=
"ding0466097cd833d9f9a1320dcb25e91351"
;
/**
* 钉钉sdk
*
* @memberof DingTalkService
*/
public
readonly
dd
=
dd
;
/**
* 钉钉是否已经初始化
*
...
...
@@ -64,13 +66,13 @@ export class DingTalkService {
* @type {(any | null)}
* @memberof DingTalkService
*/
public
$store
:
any
;
public
$store
:
any
;
/**
* Creates an instance of DingTalkService.
* @memberof DingTalkService
*/
private
constructor
(
store
:
any
)
{
private
constructor
(
store
:
any
)
{
this
.
$store
=
store
;
if
(
DingTalkService
.
instance
)
{
return
DingTalkService
.
instance
;
...
...
@@ -79,7 +81,7 @@ export class DingTalkService {
if
(
info
.
indexOf
(
'DINGTALK'
)
!==
-
1
)
{
dd
.
ready
(()
=>
{
this
.
$isInit
=
true
;
this
.
navBack
();
this
.
dd_ready
();
});
dd
.
error
((
err
:
any
)
=>
{
alert
(
`dd加载错误:
${
JSON
.
stringify
(
err
)}
`
);
...
...
@@ -87,6 +89,16 @@ export class DingTalkService {
}
}
/**
* 钉钉初始化
*/
private
dd_ready
()
{
// 设置导航标题
this
.
setNavBack
();
//
this
.
dd
.
ui
.
webViewBounce
.
disable
({});
}
/**
* 钉钉登录
*
...
...
@@ -94,26 +106,132 @@ export class DingTalkService {
* @memberof DingTalkService
*/
public
async
login
():
Promise
<
any
>
{
const
access_token
:
any
=
await
this
.
get
(
`/uaa/open/dingtalk/access_token`
);
if
(
access_token
.
status
==
200
&&
access_token
.
data
&&
access_token
.
data
.
corp_id
){
const
res
:
any
=
await
dd
.
runtime
.
permission
.
requestAuthCode
({
corpId
:
access_token
.
data
.
corp_id
});
const
access_token
:
any
=
await
this
.
get
(
`/uaa/dingtalk/jsapi/sign`
);
if
(
access_token
.
status
==
200
&&
access_token
.
data
&&
access_token
.
data
.
corp_id
)
{
this
.
corpId
=
access_token
.
data
.
corp_id
;
this
.
authentication
(
access_token
.
data
.
agentId
,
this
.
corpId
,
access_token
.
data
.
timeStamp
,
access_token
.
data
.
nonceStr
,
access_token
.
data
.
signature
);
const
res
:
any
=
await
dd
.
runtime
.
permission
.
requestAuthCode
({
corpId
:
this
.
corpId
});
if
(
res
&&
res
.
code
)
{
const
userInfo
:
any
=
await
this
.
get
(
`/uaa/open/dingtalk/auth/
${
res
.
code
}
`
);
if
(
userInfo
.
status
==
200
&&
userInfo
.
data
.
token
&&
userInfo
.
data
.
user
)
{
const
userInfo
:
any
=
await
this
.
get
(
`/uaa/open/dingtalk/auth/
${
res
.
code
}
`
);
if
(
userInfo
.
status
==
200
&&
userInfo
.
data
.
token
&&
userInfo
.
data
.
user
)
{
localStorage
.
setItem
(
"token"
,
userInfo
.
data
.
token
);
localStorage
.
setItem
(
"user"
,
JSON
.
stringify
(
userInfo
.
data
.
user
));
return
{
issuccess
:
true
,
message
:
""
};
}
else
if
(
userInfo
.
status
==
400
){
return
{
issuccess
:
false
,
message
:
userInfo
.
data
.
message
};
}
else
{
return
{
issuccess
:
false
,
message
:
userInfo
.
data
.
message
};
return
{
issuccess
:
true
,
message
:
""
};
}
else
if
(
userInfo
.
status
==
400
)
{
return
{
issuccess
:
false
,
message
:
userInfo
.
data
.
message
};
}
else
{
return
{
issuccess
:
false
,
message
:
userInfo
.
data
.
message
};
}
}
else
{
return
{
issuccess
:
false
,
message
:
"钉钉用户信息获取失败"
};
}
}
else
{
return
{
issuccess
:
false
,
message
:
"获取企业id失败"
};
}
}
/**
* 鉴权
*
* @returns {Promise<any>} 返回用户信息
* @memberof DingTalkService
*/
private
authentication
(
agentId
:
string
,
corpId
:
string
,
timeStamp
:
any
,
nonceStr
:
string
,
signature
:
any
)
{
this
.
dd
.
config
({
agentId
:
agentId
,
// 必填,微应用ID
corpId
:
corpId
,
//必填,企业ID
timeStamp
:
timeStamp
,
// 必填,生成签名的时间戳
nonceStr
:
nonceStr
,
// 必填,生成签名的随机串
signature
:
signature
,
// 必填,签名
type
:
0
,
//选填。0表示微应用的jsapi,1表示服务窗的jsapi;不填默认为0。该参数从dingtalk.js的0.8.3版本开始支持
jsApiList
:
[
'device.audio.startRecord'
,
'device.audio.stopRecord'
,
'device.audio.onRecordEnd'
,
'device.audio.translateVoice'
]
// 必填,需要使用的jsapi列表,注意:不要带dd。
});
this
.
dd
.
error
((
error
:
any
)
=>
{
alert
(
'dd error: '
+
error
);
});
}
/**
* test
*/
public
async
test
()
{
const
access_token
:
any
=
await
this
.
get
(
`/uaa/dingtalk/jsapi/sign`
);
// alert(access_token.data.agentId)
this
.
authentication
(
'859826642'
,
access_token
.
data
.
corpId
,
access_token
.
data
.
timeStamp
,
access_token
.
data
.
nonceStr
,
access_token
.
data
.
signature
);
setTimeout
(()
=>
{
// this.getuuid();
},
2000
);
}
/**
* 开始录音
*
* @memberof DingTalkService
*/
private
startRecord
()
{
dd
.
device
.
audio
.
onRecordEnd
({
onSuccess
:
(
res
:
any
)
=>
{
res
.
duration
;
// 返回音频的时长,单位:秒
},
onFail
:
(
err
:
any
)
=>
{
}
}
else
{
return
{
issuccess
:
false
,
message
:
"钉钉用户信息获取失败"
};
});
this
.
dd
.
device
.
audio
.
startRecord
({
onSuccess
:
()
=>
{
//支持最长为300秒(包括)的音频录制,默认60秒(包括)。
},
onFail
:
(
err
:
any
)
=>
{
alert
(
JSON
.
stringify
(
err
))
}
});
}
}
else
{
return
{
issuccess
:
false
,
message
:
"获取企业id失败"
};
/**
* 停止录音
*
* @memberof DingTalkService
*/
private
stopRecord
():
Promise
<
any
>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
dd
.
device
.
audio
.
stopRecord
({
onSuccess
:
(
res
:
any
)
=>
{
res
.
mediaId
;
// 返回音频的MediaID,可用于本地播放和音频下载
res
.
duration
;
// 返回音频的时长,单位:秒
resolve
(
res
);
},
onFail
:
(
err
:
any
)
=>
{
alert
(
JSON
.
stringify
(
err
))
}
});;
});
}
/**
* 语音转文字
*
* @memberof DingTalkService
*/
private
translateVoice
(
arg
:
any
):
Promise
<
any
>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
this
.
dd
.
device
.
audio
.
translateVoice
({
mediaId
:
arg
.
mediaId
,
duration
:
arg
.
duration
,
onSuccess
:
(
res
:
any
)
=>
{
res
.
mediaId
;
// 转换的语音的mediaId
res
.
content
;
// 语音转换的文字内容
resolve
(
res
);
},
onFail
:
(
err
:
any
)
=>
{
alert
(
JSON
.
stringify
(
err
))
}
});
});
}
/**
...
...
@@ -172,7 +290,7 @@ export class DingTalkService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
p
ublic
close
()
{
p
rivate
close
()
{
this
.
dd
.
biz
.
navigation
.
close
({});
}
...
...
@@ -183,9 +301,9 @@ export class DingTalkService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
p
ublic
setTitle
(
title
:
string
)
{
p
rivate
setTitle
(
title
:
string
)
{
this
.
dd
.
biz
.
navigation
.
setTitle
({
title
:
title
,
title
:
title
,
});
}
...
...
@@ -196,17 +314,17 @@ export class DingTalkService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
private
navBack
()
{
if
(
Util
.
isAndroid
())
{
document
.
addEventListener
(
'backbutton'
,
(
e
:
any
)
=>
{
private
setNavBack
()
{
if
(
Util
.
isAndroid
())
{
document
.
addEventListener
(
'backbutton'
,
(
e
:
any
)
=>
{
e
.
preventDefault
();
this
.
controlBackEvent
();
},
false
)
}
else
{
},
false
)
}
else
{
dd
.
biz
.
navigation
.
setLeft
({
control
:
true
,
//是否控制点击事件,true 控制,false 不控制, 默认false
text
:
'返回'
,
//控制显示文本,空字符串表示显示默认文本
onSuccess
:
()
=>
{
control
:
true
,
//是否控制点击事件,true 控制,false 不控制, 默认false
text
:
'返回'
,
//控制显示文本,空字符串表示显示默认文本
onSuccess
:
()
=>
{
this
.
controlBackEvent
();
}
});
...
...
@@ -220,7 +338,7 @@ export class DingTalkService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
private
backEvent
:
Function
=
()
=>
{
};
private
backEvent
:
Function
=
()
=>
{
};
/**
* 设置钉钉导航栏返回事件
...
...
@@ -229,17 +347,45 @@ export class DingTalkService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
p
ublic
setBackEvent
(
event
:
Array
<
Function
>
)
{
this
.
backEvent
=
event
[
event
.
length
-
1
];
p
rivate
setBackEvent
(
event
:
Array
<
Function
>
)
{
this
.
backEvent
=
event
[
event
.
length
-
1
];
}
/**
* 是否调用导航栏返回事件
* @memberof DingTalkService
*/
p
ublic
controlBackEvent
()
{
p
rivate
controlBackEvent
()
{
if
(
this
.
$store
.
state
.
selectStatus
&&
this
.
$store
.
state
.
noticeStatus
)
{
this
.
backEvent
();
}
}
/**
* 钉钉开放事件
*/
public
ddEvent
(
tag
:
string
,
arg
:
any
)
{
if
(
Object
.
is
(
tag
,
'startRecord'
))
{
return
this
.
startRecord
();
}
if
(
Object
.
is
(
tag
,
'stopRecord'
))
{
return
this
.
stopRecord
();
}
if
(
Object
.
is
(
tag
,
'translateVoice'
))
{
return
this
.
translateVoice
(
arg
);
}
if
(
Object
.
is
(
tag
,
'login'
))
{
return
this
.
login
();
}
if
(
Object
.
is
(
tag
,
'setTitle'
))
{
return
this
.
setTitle
(
arg
);
}
if
(
Object
.
is
(
tag
,
'setBackEvent'
))
{
return
this
.
setBackEvent
(
arg
);
}
if
(
Object
.
is
(
tag
,
'close'
))
{
return
this
.
close
();
}
}
}
src/ibiz-core/third-party-service/ThirdPartyService.ts
浏览文件 @
79b612a0
...
...
@@ -49,7 +49,7 @@ export class ThirdPartyService {
* @type {WeChatService}
* @memberof ThirdPartyService
*/
private
backEvent
:
Array
<
Function
>
=
[];
private
backEvent
:
Array
<
Function
>
=
[];
/**
* 第三方导航标题
...
...
@@ -57,7 +57,7 @@ export class ThirdPartyService {
* @type {WeChatService}
* @memberof ThirdPartyService
*/
private
navTitle
:
Array
<
string
>
=
[];
private
navTitle
:
Array
<
string
>
=
[];
/**
* 是否已经初始化
...
...
@@ -143,7 +143,7 @@ export class ThirdPartyService {
* @returns {boolean}
* @memberof ThirdPartyService
*/
public
isWeChat
():
boolean
{
public
isWeChat
():
boolean
{
return
Object
.
is
(
this
.
platform
,
'WeChat'
);
}
...
...
@@ -165,9 +165,9 @@ export class ThirdPartyService {
* @returns {ThirdPartyService}
* @memberof ThirdPartyService
*/
public
close
(){
public
close
()
{
if
(
this
.
isDingTalk
())
{
this
.
dd
.
close
(
);
this
.
thirdPartyEvent
(
'close'
);
}
else
if
(
this
.
isWeChat
())
{
this
.
weChat
.
close
();
}
...
...
@@ -180,10 +180,10 @@ export class ThirdPartyService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
public
setTitle
(
title
:
string
)
{
public
setTitle
(
title
:
string
)
{
this
.
navTitle
.
push
(
title
);
if
(
this
.
isDingTalk
())
{
this
.
dd
.
setTitle
(
title
);
this
.
thirdPartyEvent
(
'setTitle'
,
title
);
}
else
if
(
this
.
isWeChat
())
{
this
.
weChat
.
setTitle
(
title
);
}
...
...
@@ -197,10 +197,10 @@ export class ThirdPartyService {
* @returns {DingTalkService}
* @memberof DingTalkService
*/
public
setBackEvent
(
event
:
Function
)
{
public
setBackEvent
(
event
:
Function
)
{
this
.
backEvent
.
push
(
event
);
if
(
this
.
isDingTalk
())
{
this
.
dd
.
setBackEvent
(
this
.
backEvent
);
this
.
thirdPartyEvent
(
'setBackEvent'
,
this
.
backEvent
);
}
else
if
(
this
.
isWeChat
())
{
this
.
weChat
.
setBackEvent
(
this
.
backEvent
);
}
...
...
@@ -210,18 +210,33 @@ export class ThirdPartyService {
* 第三方容器导航销毁返回事件
*/
public
destroyBackEvent
()
{
this
.
backEvent
=
this
.
backEvent
.
slice
(
0
,
-
1
);
this
.
navTitle
=
this
.
navTitle
.
slice
(
0
,
-
1
);
if
(
!
this
.
backEvent
)
{
this
.
backEvent
=
this
.
backEvent
.
slice
(
0
,
-
1
);
this
.
navTitle
=
this
.
navTitle
.
slice
(
0
,
-
1
);
if
(
!
this
.
backEvent
)
{
return
}
if
(
this
.
isDingTalk
())
{
this
.
dd
.
setTitle
(
this
.
navTitle
[
this
.
navTitle
.
length
-
1
]);
this
.
dd
.
setBackEvent
(
this
.
backEvent
);
this
.
thirdPartyEvent
(
'setTitle'
,
this
.
navTitle
[
this
.
navTitle
.
length
-
1
]);
this
.
thirdPartyEvent
(
'setBackEvent'
,
this
.
backEvent
);
}
else
if
(
this
.
isWeChat
())
{
this
.
weChat
.
setTitle
(
this
.
navTitle
[
this
.
navTitle
.
length
-
1
]);
this
.
weChat
.
setTitle
(
this
.
navTitle
[
this
.
navTitle
.
length
-
1
]);
this
.
weChat
.
setBackEvent
(
this
.
backEvent
);
}
}
public
test
()
{
this
.
dd
.
test
();
}
/**
* 第三方事件
*/
public
thirdPartyEvent
(
tag
:
string
,
arg
:
any
=
{}):
any
{
if
(
!
this
.
isInit
)
{
return
;
}
if
(
this
.
isDingTalk
())
{
return
this
.
dd
.
ddEvent
(
tag
,
arg
);
}
}
}
\ No newline at end of file
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录