Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-admin-consultation
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
com.pica.cloud.education.frontend
pica-admin-consultation
提交
4950eb8f
提交
4950eb8f
编写于
3月 05, 2022
作者:
张磊
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'feat/zl' into 'release'
Feat/zl See merge request
!263
上级
53f0c5fa
301d389f
变更
13
显示空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
1671 行增加
和
1381 行删除
+1671
-1381
diagnosis.js
src/api/diagnosis.js
+1
-1
diagnosis-live.vue
src/components/IM/diagnosis-live.vue
+3
-6
diagnosis-time.vue
src/components/common/diagnosis-time.vue
+1
-1
RtcClient.js
src/utils/RtcClient.js
+143
-110
fetch-qiniu.js
src/utils/fetch-qiniu.js
+81
-76
fetch.js
src/utils/fetch.js
+31
-35
index.js
src/utils/index.js
+98
-105
RtcClient.js
src/utils/live/RtcClient.js
+142
-109
index.js
src/utils/live/index.js
+35
-24
qiniu-util.js
src/utils/qiniu-util.js
+342
-319
utils.js
src/utils/utils.js
+781
-582
index.scss
src/views/IM/diagnosis-admin/modal/index.scss
+2
-2
serviceSchedule.vue
src/views/IM/diagnosis-admin/serviceSchedule.vue
+11
-11
未找到文件。
src/api/diagnosis.js
浏览文件 @
4950eb8f
src/components/IM/diagnosis-live.vue
浏览文件 @
4950eb8f
...
...
@@ -649,7 +649,6 @@
that
.
memberList
&&
that
.
memberList
.
length
>
0
)
{
that
.
memberList
.
map
((
i
)
=>
{
console
.
log
(
'res==---'
,
l
,
i
.
id
,
l
.
includes
(
i
.
id
));
if
(
l
.
includes
(
i
.
id
))
{
...
...
@@ -666,14 +665,12 @@
}
}
});
}
else
{
if
(
that
.
memberList
&&
that
.
memberList
.
length
>
0
)
{
that
.
memberList
.
map
(
i
=>
{
}
else
{
if
(
that
.
memberList
&&
that
.
memberList
.
length
>
0
)
{
that
.
memberList
.
map
((
i
)
=>
{
that
.
removeMember
(
i
.
liveUserId
);
});
}
}
});
},
2000
);
...
...
src/components/common/diagnosis-time.vue
浏览文件 @
4950eb8f
...
...
@@ -295,7 +295,7 @@
font-weight
:
400
;
color
:
#666666
;
border-radius
:
9px
;
border
:
1px
solid
#
D9D9D
9
;
border
:
1px
solid
#
d9d9d
9
;
margin-right
:
8px
;
}
.info-phone
{
...
...
src/utils/RtcClient.js
浏览文件 @
4950eb8f
/* eslint-disable */
class
RtcClient
{
constructor
(
options
)
{
this
.
sdkAppId_
=
options
.
sdkAppId
;
...
...
@@ -25,7 +26,7 @@ class RtcClient {
mode
:
'live'
,
sdkAppId
:
this
.
sdkAppId_
,
userId
:
this
.
userId_
,
userSig
:
this
.
userSig_
userSig
:
this
.
userSig_
,
});
this
.
handleEvents
();
}
catch
(
error
)
{
...
...
@@ -43,7 +44,7 @@ class RtcClient {
try
{
await
this
.
client_
.
join
({
roomId
:
this
.
roomId_
,
role
:
this
.
role
role
:
this
.
role
,
});
console
.
log
(
'加入房间trtc成功'
);
this
.
isJoined_
=
true
;
...
...
@@ -52,7 +53,7 @@ class RtcClient {
audio
:
true
,
video
:
false
,
userId
:
this
.
userId_
,
mirror
:
true
mirror
:
true
,
});
this
.
startRTC
();
}
catch
(
e
)
{
...
...
@@ -69,7 +70,7 @@ class RtcClient {
width
:
this
.
vueInstance
.
viedoParams
.
webVideoWidth
,
height
:
this
.
vueInstance
.
viedoParams
.
webVideoHeight
,
frameRate
:
this
.
vueInstance
.
viedoParams
.
webVideoFramerate
,
bitrate
:
this
.
vueInstance
.
viedoParams
.
webVideoBitrate
/* kpbs */
bitrate
:
this
.
vueInstance
.
viedoParams
.
webVideoBitrate
/* kpbs */
,
});
// 避免重复开摄像头
this
.
stopPush
();
...
...
@@ -86,27 +87,30 @@ class RtcClient {
return
;
}
try
{
this
.
localStream_
.
initialize
().
catch
(
error
=>
{
this
.
localStream_
.
initialize
()
.
catch
((
error
)
=>
{
this
.
vueInstance
.
$message
({
message
:
'打开设备失败,请检查您的设备!'
,
type
:
'error'
type
:
'error'
,
});
console
.
error
(
'failed initialize localStream '
+
error
);
}).
then
(()
=>
{
})
.
then
(()
=>
{
// 本地流在主播放器上播放,并且插入到一个关联的box中
var
localVideoWrapEl
=
document
.
getElementById
(
'ask'
);
this
.
localStream_
.
play
(
localVideoWrapEl
,
{
muted
:
true
muted
:
true
,
});
// 主播直接推流
if
(
this
.
role
==
'anchor'
)
{
this
.
publish
();
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{
this
.
vueInstance
.
$message
({
message
:
'麦克风打开失败!'
,
type
:
'error'
type
:
'error'
,
});
});
}
catch
(
e
)
{
...
...
@@ -117,12 +121,16 @@ class RtcClient {
// 发布本地流
async
publish
()
{
this
.
client_
&&
this
.
client_
.
publish
(
this
.
localStream_
).
then
(()
=>
{
this
.
client_
&&
this
.
client_
.
publish
(
this
.
localStream_
)
.
then
(()
=>
{
console
.
log
(
'本地流发布成功'
);
this
.
isPublished_
=
true
;
// 手动将麦克风打开
this
.
unmuteLocalAudio
();
}).
catch
(
error
=>
{
})
.
catch
((
error
)
=>
{
console
.
log
(
'本地流发布失败'
);
this
.
isPublished_
=
false
;
this
.
vueInstance
.
reloadfn
();
...
...
@@ -189,12 +197,12 @@ class RtcClient {
roomID
:
this
.
roomId_
,
// 房间id
viewslist
:
this
.
viewslist
,
// 当前房间用户列表
TRTCType
:
'mute'
,
// trtc 实时通讯状态数据类型 1. error , 2.network-quality 3. AudioStats
TRTCData
:
{
muteLocalAudio
:
'静音'
},
// trtc 实时通讯状态数据
TRTCData
:
{
muteLocalAudio
:
'静音'
},
// trtc 实时通讯状态数据
};
_VM
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
this
.
localStream_
.
muteAudio
();
}
...
...
@@ -207,12 +215,12 @@ class RtcClient {
roomID
:
this
.
roomId_
,
// 房间id
viewslist
:
this
.
viewslist
,
// 当前房间用户列表
TRTCType
:
'unmute'
,
// trtc 实时通讯状态数据类型 1. error , 2.network-quality 3. AudioStats
TRTCData
:
{
muteLocalAudio
:
'取消静音'
},
// trtc 实时通讯状态数据
TRTCData
:
{
muteLocalAudio
:
'取消静音'
},
// trtc 实时通讯状态数据
};
_VM
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
this
.
localStream_
.
unmuteAudio
();
}
...
...
@@ -239,15 +247,17 @@ class RtcClient {
// client的一些事件监听
handleEvents
()
{
// 报错
this
.
client_
.
on
(
'error'
,
err
=>
{
console
.
log
(
'client 报错了--------------------------------------------------------------'
);
this
.
client_
.
on
(
'error'
,
(
err
)
=>
{
console
.
log
(
'client 报错了--------------------------------------------------------------'
);
console
.
log
(
err
);
// alert(err);
window
.
onbeforeunload
=
null
;
location
.
reload
();
});
this
.
client_
.
on
(
'network-quality'
,
event
=>
{
this
.
client_
.
on
(
'network-quality'
,
(
event
)
=>
{
console
.
log
(
'--network-quality'
,
event
);
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
...
...
@@ -258,9 +268,9 @@ class RtcClient {
_VM
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
this
.
client_
.
getLocalAudioStats
().
then
(
stats
=>
{
this
.
client_
.
getLocalAudioStats
().
then
(
(
stats
)
=>
{
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
viewslist
:
this
.
viewslist
,
// 当前房间用户列表
...
...
@@ -270,10 +280,10 @@ class RtcClient {
_VM
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
});
this
.
client_
.
getRemoteAudioStats
().
then
(
stats
=>
{
this
.
client_
.
getRemoteAudioStats
().
then
(
(
stats
)
=>
{
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
viewslist
:
this
.
viewslist
,
// 当前房间用户列表
...
...
@@ -284,10 +294,9 @@ class RtcClient {
_VM
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
});
});
// 房间被解散了
...
...
@@ -296,20 +305,20 @@ class RtcClient {
});
// 当一个远程同伴(必须推流)进入房间时触发
this
.
client_
.
on
(
'peer-join'
,
evt
=>
{
this
.
client_
.
on
(
'peer-join'
,
(
evt
)
=>
{
const
userId
=
evt
.
userId
;
console
.
log
(
'有远程同伴进入房间:'
,
userId
);
});
// 当远处的同伴离开房间时触发(删减好友列表)
this
.
client_
.
on
(
'peer-leave'
,
evt
=>
{
this
.
client_
.
on
(
'peer-leave'
,
(
evt
)
=>
{
const
userId
=
evt
.
userId
;
console
.
log
(
'有远程同伴离开房间:'
+
userId
);
this
.
removeUserList
(
userId
);
});
// 在添加远程流时触发
this
.
client_
.
on
(
'stream-added'
,
evt
=>
{
this
.
client_
.
on
(
'stream-added'
,
(
evt
)
=>
{
const
remoteStream
=
evt
.
stream
;
// 获取流的StreamId
const
id
=
remoteStream
.
getId
();
...
...
@@ -317,19 +326,21 @@ class RtcClient {
const
userId
=
remoteStream
.
getUserId
();
this
.
members_
.
set
(
userId
,
remoteStream
);
this
.
inmembers_
.
set
(
userId
,
remoteStream
);
console
.
log
(
`remote stream added: [
${
userId
}
] ID:
${
id
}
type:
${
remoteStream
.
getType
()}
`
);
console
.
log
(
`remote stream added: [
${
userId
}
] ID:
${
id
}
type:
${
remoteStream
.
getType
()}
`
);
// 我们订阅远端的流
console
.
log
(
'subscribe to this remote stream'
);
this
.
client_
.
subscribe
(
remoteStream
);
});
// 在订阅远程流时触发
this
.
client_
.
on
(
'stream-subscribed'
,
evt
=>
{
this
.
client_
.
on
(
'stream-subscribed'
,
(
evt
)
=>
{
const
remoteStream
=
evt
.
stream
;
const
id
=
remoteStream
.
getId
();
const
uid
=
remoteStream
.
userId_
;
this
.
remoteStreams_
.
push
(
remoteStream
);
remoteStream
.
on
(
'player-state-changed'
,
event
=>
{
remoteStream
.
on
(
'player-state-changed'
,
(
event
)
=>
{
console
.
log
(
`
${
event
.
type
}
player is
${
event
.
state
}
`
);
// 远端流是播放还是暂停状态(显示按钮等画面不同)
if
(
event
.
type
==
'video'
&&
event
.
state
==
'STOPPED'
)
{
...
...
@@ -360,14 +371,13 @@ class RtcClient {
setTimeout
(()
=>
{
// 避免其他乱入视频
const
index
=
this
.
viewslist
.
findIndex
((
item
=>
{
const
index
=
this
.
viewslist
.
findIndex
((
item
)
=>
{
if
(
item
&&
item
.
userId
)
{
return
item
.
userId
==
uid
;
}
else
{
return
-
1
;
}
}));
});
if
(
index
<
0
)
{
return
;
}
...
...
@@ -381,11 +391,10 @@ class RtcClient {
this
.
changeView
(
id
,
'vioce'
,
false
);
}
},
1000
);
});
// 当远程流被移除时触发
this
.
client_
.
on
(
'stream-removed'
,
evt
=>
{
this
.
client_
.
on
(
'stream-removed'
,
(
evt
)
=>
{
const
remoteStream
=
evt
.
stream
;
const
id
=
remoteStream
.
getId
();
const
uid
=
remoteStream
.
userId_
;
...
...
@@ -393,14 +402,14 @@ class RtcClient {
// 停止播放并删除相应<video>标签
remoteStream
.
stop
();
this
.
inmembers_
.
delete
(
uid
);
this
.
remoteStreams_
=
this
.
remoteStreams_
.
filter
(
stream
=>
{
this
.
remoteStreams_
=
this
.
remoteStreams_
.
filter
(
(
stream
)
=>
{
return
stream
.
getId
()
!==
id
;
});
this
.
removeUserList
(
uid
);
});
// 流更新
this
.
client_
.
on
(
'stream-updated'
,
evt
=>
{
this
.
client_
.
on
(
'stream-updated'
,
(
evt
)
=>
{
console
.
log
(
'=========流更新========stream-updated==================='
);
console
.
log
(
evt
);
const
remoteStream
=
evt
.
stream
;
...
...
@@ -408,37 +417,52 @@ class RtcClient {
// remoteStream.hasVideo() // 是否有视频轨道
// remoteStream.hasAudio() //是否有音轨道
// remoteStream.getType() // 主要用于判断一个远端流是主音视频流还是辅路视频流,辅路视频流通常是一个屏幕分享流。
console
.
log
(
'remoteStream ID: '
+
remoteStream
.
getId
()
+
' was updated hasAudio: '
+
remoteStream
.
hasAudio
()
+
' hasVideo: '
+
remoteStream
.
hasVideo
());
console
.
log
(
'remoteStream ID: '
+
remoteStream
.
getId
()
+
' was updated hasAudio: '
+
remoteStream
.
hasAudio
()
+
' hasVideo: '
+
remoteStream
.
hasVideo
()
);
});
// 关闭音轨道
this
.
client_
.
on
(
'mute-audio'
,
evt
=>
{
this
.
client_
.
on
(
'mute-audio'
,
(
evt
)
=>
{
this
.
changeView
(
evt
.
userId
,
'vioce'
,
false
);
console
.
log
(
evt
.
userId
+
'关闭麦克风============================================'
);
console
.
log
(
evt
.
userId
+
'关闭麦克风============================================'
);
});
// 打开音轨道
this
.
client_
.
on
(
'unmute-audio'
,
evt
=>
{
this
.
client_
.
on
(
'unmute-audio'
,
(
evt
)
=>
{
this
.
changeView
(
evt
.
userId
,
'vioce'
,
true
);
if
(
evt
.
type
==
'audio'
&&
evt
.
state
==
'PLAYING'
&&
this
.
vueInstance
.
type
==
1
)
{
if
(
evt
.
type
==
'audio'
&&
evt
.
state
==
'PLAYING'
&&
this
.
vueInstance
.
type
==
1
)
{
this
.
changeView
(
evt
.
userId
,
'mask'
,
true
);
}
});
// 关闭视频轨道
this
.
client_
.
on
(
'mute-video'
,
evt
=>
{
console
.
log
(
evt
.
userId
+
'关闭 video=============================================='
);
this
.
client_
.
on
(
'mute-video'
,
(
evt
)
=>
{
console
.
log
(
evt
.
userId
+
'关闭 video=============================================='
);
this
.
changeView
(
evt
.
userId
,
'mask'
,
true
);
});
// 打开视频轨道
this
.
client_
.
on
(
'unmute-video'
,
evt
=>
{
console
.
log
(
evt
.
userId
+
'打开 video============================================='
);
this
.
client_
.
on
(
'unmute-video'
,
(
evt
)
=>
{
console
.
log
(
evt
.
userId
+
'打开 video============================================='
);
if
(
this
.
members_
.
get
(
evt
.
userId
))
{
this
.
changeView
(
evt
.
userId
,
'mask'
,
false
);
}
});
}
...
...
@@ -452,7 +476,7 @@ class RtcClient {
// 移除视频数组
removeUserList
(
userId
)
{
for
(
let
i
=
0
;
i
<
this
.
viewslist
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
this
.
viewslist
.
length
;
i
++
)
{
if
(
this
.
viewslist
[
i
]
&&
this
.
viewslist
[
i
].
userId
==
userId
)
{
this
.
viewslist
[
i
]
=
null
;
}
...
...
@@ -462,7 +486,10 @@ class RtcClient {
// 改变视频数组属性
changeView
(
id
,
attr
,
val
)
{
for
(
let
i
=
0
;
i
<
this
.
viewslist
.
length
;
i
++
)
{
if
(
this
.
viewslist
[
i
]
&&
(
this
.
viewslist
[
i
].
userId
==
id
||
this
.
viewslist
[
i
].
id
==
id
))
{
if
(
this
.
viewslist
[
i
]
&&
(
this
.
viewslist
[
i
].
userId
==
id
||
this
.
viewslist
[
i
].
id
==
id
)
)
{
this
.
viewslist
[
i
][
attr
]
=
val
;
}
}
...
...
@@ -471,7 +498,13 @@ class RtcClient {
add
(
id
,
uid
,
isMask
)
{
this
.
vueInstance
.
memberList
.
forEach
((
ele
,
index
)
=>
{
if
(
ele
.
liveUserId
==
uid
)
{
this
.
viewslist
[
index
]
=
{
id
:
id
,
userId
:
uid
,
nick
:
uid
,
mask
:
isMask
,
vioce
:
true
};
this
.
viewslist
[
index
]
=
{
id
:
id
,
userId
:
uid
,
nick
:
uid
,
mask
:
isMask
,
vioce
:
true
,
};
}
});
}
...
...
src/utils/fetch-qiniu.js
浏览文件 @
4950eb8f
/
/ api路径
import
{
isNotEmptyUtils
}
from
'./utils'
;
/
* eslint-disable */
import
{
isNotEmptyUtils
}
from
'./utils'
;
export
default
async
(
url
=
''
,
data
=
{},
type
=
'POST'
,
method
=
'fetch'
)
=>
{
export
default
async
(
url
=
''
,
data
=
{},
type
=
'POST'
,
method
=
'fetch'
)
=>
{
type
=
type
.
toUpperCase
();
// url = (server==='WECHAT'?wechatUrl:baseUrl) + url;
...
...
@@ -12,7 +12,7 @@ export default async(url = '', data = {}, type = 'POST', method = 'fetch') => {
console
.
log
(
'完整url:'
,
url
);
if
(
type
==
'GET'
&&
data
)
{
let
dataStr
=
''
;
// 数据拼接字符串
Object
.
keys
(
data
).
forEach
(
key
=>
{
Object
.
keys
(
data
).
forEach
((
key
)
=>
{
dataStr
+=
key
+
'='
+
data
[
key
]
+
'&'
;
});
...
...
@@ -30,17 +30,22 @@ export default async(url = '', data = {}, type = 'POST', method = 'fetch') => {
// mode: "cors",
headers
:
{
// 'Access-Control-Allow-Origin': '*',
'Accept'
:
'*'
,
Accept
:
'*'
,
'Content-Type'
:
'application/json'
,
'sysCode'
:
'2'
sysCode
:
'2'
,
// 'token': localStorage.getItem('token') || null, //固定传header:
// 'system_code': 'todo' //固定传header:系统编号
},
};
if
(
type
==
'POST'
||
type
===
'PUT'
||
type
===
'PATCH'
||
type
===
'DELETE'
&&
data
)
{
if
(
type
==
'POST'
||
type
===
'PUT'
||
type
===
'PATCH'
||
(
type
===
'DELETE'
&&
data
)
)
{
Object
.
defineProperty
(
requestConfig
,
'body'
,
{
value
:
JSON
.
stringify
(
data
)
value
:
JSON
.
stringify
(
data
),
});
}
try
{
...
...
src/utils/fetch.js
浏览文件 @
4950eb8f
import
axios
from
'axios'
;
import
store
from
'../store'
;
// import { getHostnameAndPort } from '../utils'
// axios.defaults.withCredentials = true
...
...
@@ -7,48 +6,45 @@ import store from '../store';
const
service
=
axios
.
create
({
// baseURL: process.env.BASE_API
timeout
:
600000
,
withCredentials
:
false
withCredentials
:
false
,
});
// request拦截器
service
.
interceptors
.
request
.
use
(
config
=>
{
service
.
interceptors
.
request
.
use
(
(
config
)
=>
{
config
.
headers
[
'sysCode'
]
=
26
;
config
.
headers
[
'token'
]
=
localStorage
.
getItem
(
'token'
);
config
.
headers
[
'deviceInfo'
]
=
JSON
.
stringify
({
'app_channel'
:
''
,
'app_mac'
:
''
,
'app_uuid'
:
''
,
'app_version'
:
''
,
'device_brand'
:
''
,
'device_ip'
:
''
,
'device_model'
:
''
,
'device_net'
:
''
,
'device_ops'
:
''
,
'resolution_wh'
:
''
,
'system_level'
:
''
,
'device_type'
:
'10'
});
config
.
headers
[
'deviceInfo'
]
=
JSON
.
stringify
({
app_channel
:
''
,
app_mac
:
''
,
app_uuid
:
''
,
app_version
:
''
,
device_brand
:
''
,
device_ip
:
''
,
device_model
:
''
,
device_net
:
''
,
device_ops
:
''
,
resolution_wh
:
''
,
system_level
:
''
,
device_type
:
'10'
,
});
Object
.
assign
(
config
.
headers
,
config
.
changeHeader
);
if
(
config
.
fileHeader
)
{
config
.
headers
[
'Content-Type'
]
=
'application/x-www-form-urlencoded'
;
}
// if (config.data && config.data.setEntry) {
// config.headers['sysCode'] = config.data.sysCode || 10
// if(config.data.token){
// config.headers['token'] = config.data.token || '63C3FA92AF8A45A48B31EB7FD97B95EB'
// }
// config.headers['deviceInfo'] = JSON.stringify({ "app_channel": "", "app_mac": "", "app_uuid": "", "app_version": "", "device_brand": "", "device_ip": "", "device_model": "", "device_net": "", "device_ops": "", "resolution_wh": "", "system_level": "", "device_type": '10' })
// }
return
config
;
},
error
=>
{
},
(
error
)
=>
{
Promise
.
reject
(
error
);
});
}
);
// respone拦截器
service
.
interceptors
.
response
.
use
(
response
=>
{
const
res
=
response
.
data
;
/*
baseUrl时,返回000000为成功
apiUrl时,返回200为成功
*/
// if (res.code !== '000000') {
// return Promise.reject(response.data)
// } else {
(
response
)
=>
{
return
response
.
data
;
// }
},
error
=>
{
(
error
)
=>
{
return
Promise
.
reject
(
error
);
}
);
...
...
src/utils/index.js
浏览文件 @
4950eb8f
/**
* Created by Anndy Yang on 18/09/18.
*/
/* eslint-disable */
import
{
envConfig
}
from
'@/utils/env-config'
;
export
function
setEventByModuleCode
(
itemData
)
{
const
modeCode
=
itemData
.
appModuleInfo
.
code
||
''
;
let
paramList
=
itemData
.
appModuleInfo
.
paramList
?
itemData
.
appModuleInfo
.
paramList
:
''
;
let
paramList
=
itemData
.
appModuleInfo
.
paramList
?
itemData
.
appModuleInfo
.
paramList
:
''
;
if
(
modeCode
===
'M001'
||
modeCode
===
'M002'
||
modeCode
===
'M003'
)
{
paramList
=
''
;
}
else
if
(
modeCode
===
'M100'
||
modeCode
===
'M300'
)
{
const
urlPara
=
getUrlParmByCode
(
paramList
);
paramList
[
0
]
&&
(
paramList
[
0
].
value
+=
urlPara
);
}
else
if
(
modeCode
===
'M400'
)
{
}
if
(
typeof
paramList
===
'string'
&&
!
paramList
)
{
paramList
=
[];
...
...
@@ -84,18 +81,14 @@ export function arraySort(originData, isUp = true, sortedField, converFun) {
sourceB
=
converFun
(
sourceB
[
sortedField
]);
}
}
// if(!sourceA || !sourceB) {
// sourceA = 0
// sourceB = 0
// }
if
(
isUp
)
{
if
((
sourceA
-
0
)
>
(
sourceB
-
0
)
)
{
if
(
sourceA
-
0
>
sourceB
-
0
)
{
swap
=
sortedData
[
j
];
sortedData
[
j
]
=
sortedData
[
j
+
1
];
sortedData
[
j
+
1
]
=
swap
;
}
}
else
{
if
((
sourceA
-
0
)
<
(
sourceB
-
0
)
)
{
if
(
sourceA
-
0
<
sourceB
-
0
)
{
swap
=
sortedData
[
j
];
sortedData
[
j
]
=
sortedData
[
j
+
1
];
sortedData
[
j
+
1
]
=
swap
;
...
...
src/utils/live/RtcClient.js
浏览文件 @
4950eb8f
/* eslint-disable */
class
RtcClient
{
constructor
(
options
)
{
this
.
sdkAppId_
=
options
.
sdkAppId
;
...
...
@@ -25,7 +26,7 @@ class RtcClient {
mode
:
'live'
,
sdkAppId
:
this
.
sdkAppId_
,
userId
:
this
.
userId_
,
userSig
:
this
.
userSig_
userSig
:
this
.
userSig_
,
});
this
.
handleEvents
();
}
catch
(
error
)
{
...
...
@@ -43,7 +44,7 @@ class RtcClient {
try
{
await
this
.
client_
.
join
({
roomId
:
this
.
roomId_
,
role
:
this
.
role
role
:
this
.
role
,
});
console
.
log
(
'加入房间trtc成功'
);
this
.
isJoined_
=
true
;
...
...
@@ -52,7 +53,7 @@ class RtcClient {
audio
:
true
,
video
:
false
,
userId
:
this
.
userId_
,
mirror
:
true
mirror
:
true
,
});
this
.
startRTC
();
}
catch
(
e
)
{
...
...
@@ -69,7 +70,7 @@ class RtcClient {
width
:
this
.
vueInstance
.
viedoParams
.
webVideoWidth
,
height
:
this
.
vueInstance
.
viedoParams
.
webVideoHeight
,
frameRate
:
this
.
vueInstance
.
viedoParams
.
webVideoFramerate
,
bitrate
:
this
.
vueInstance
.
viedoParams
.
webVideoBitrate
/* kpbs */
bitrate
:
this
.
vueInstance
.
viedoParams
.
webVideoBitrate
/* kpbs */
,
});
// 避免重复开摄像头
this
.
stopPush
();
...
...
@@ -86,14 +87,16 @@ class RtcClient {
return
;
}
try
{
this
.
localStream_
.
initialize
().
catch
(
error
=>
{
this
.
localStream_
.
initialize
()
.
catch
((
error
)
=>
{
this
.
vueInstance
.
$message
({
message
:
'打开设备失败,请检查您的设备!'
,
type
:
'error'
type
:
'error'
,
});
console
.
error
(
'failed initialize localStream '
+
error
);
}).
then
(()
=>
{
})
.
then
(()
=>
{
// 本地流在主播放器上播放,并且插入到一个关联的box中
// var localVideoWrapEl = document.getElementById('ask');
// this.localStream_.play(localVideoWrapEl, {
...
...
@@ -103,10 +106,11 @@ class RtcClient {
if
(
this
.
role
==
'anchor'
)
{
this
.
publish
();
}
}).
catch
(
error
=>
{
})
.
catch
((
error
)
=>
{
this
.
vueInstance
.
$message
({
message
:
'麦克风打开失败!'
,
type
:
'error'
type
:
'error'
,
});
});
}
catch
(
e
)
{
...
...
@@ -117,13 +121,17 @@ class RtcClient {
// 发布本地流
async
publish
()
{
this
.
client_
&&
this
.
client_
.
publish
(
this
.
localStream_
).
then
(()
=>
{
this
.
client_
&&
this
.
client_
.
publish
(
this
.
localStream_
)
.
then
(()
=>
{
console
.
log
(
'本地流发布成功'
);
this
.
isPublished_
=
true
;
// 手动将麦克风打开
this
.
unmuteLocalAudio
();
this
.
vueInstance
.
isMicOn
=
true
;
}).
catch
(
error
=>
{
})
.
catch
((
error
)
=>
{
console
.
log
(
'本地流发布失败'
);
this
.
isPublished_
=
false
;
this
.
vueInstance
.
reloadfn
();
...
...
@@ -217,8 +225,10 @@ class RtcClient {
// client的一些事件监听
handleEvents
()
{
// 报错
this
.
client_
.
on
(
'error'
,
err
=>
{
console
.
log
(
'client 报错了--------------------------------------------------------------'
);
this
.
client_
.
on
(
'error'
,
(
err
)
=>
{
console
.
log
(
'client 报错了--------------------------------------------------------------'
);
console
.
log
(
err
);
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
...
...
@@ -229,14 +239,14 @@ class RtcClient {
this
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
// alert(err);
window
.
onbeforeunload
=
null
;
location
.
reload
();
});
this
.
client_
.
on
(
'network-quality'
,
event
=>
{
this
.
client_
.
on
(
'network-quality'
,
(
event
)
=>
{
console
.
log
(
'--network-quality'
,
event
);
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
...
...
@@ -247,9 +257,9 @@ class RtcClient {
this
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
this
.
client_
.
getLocalAudioStats
().
then
(
stats
=>
{
this
.
client_
.
getLocalAudioStats
().
then
(
(
stats
)
=>
{
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
viewslist
:
this
.
viewslist
,
// 当前房间用户列表
...
...
@@ -259,10 +269,10 @@ class RtcClient {
this
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
});
this
.
client_
.
getRemoteAudioStats
().
then
(
stats
=>
{
this
.
client_
.
getRemoteAudioStats
().
then
(
(
stats
)
=>
{
const
params
=
{
roomID
:
this
.
roomId_
,
// 房间id
viewslist
:
this
.
viewslist
,
// 当前房间用户列表
...
...
@@ -272,32 +282,31 @@ class RtcClient {
this
.
$sendBuriedData
({
action
:
'TRTC'
,
component_tag
:
'TRTC#0'
,
web_data
:
params
web_data
:
params
,
});
});
});
// 房间被解散了
this
.
client_
.
on
(
'client-banned'
,
err
=>
{
this
.
client_
.
on
(
'client-banned'
,
(
err
)
=>
{
console
.
log
(
'房间被解散了'
);
});
// 当一个远程同伴(必须推流)进入房间时触发
this
.
client_
.
on
(
'peer-join'
,
evt
=>
{
this
.
client_
.
on
(
'peer-join'
,
(
evt
)
=>
{
const
userId
=
evt
.
userId
;
console
.
log
(
'有远程同伴进入房间:'
,
userId
);
});
// 当远处的同伴离开房间时触发(删减好友列表)
this
.
client_
.
on
(
'peer-leave'
,
evt
=>
{
this
.
client_
.
on
(
'peer-leave'
,
(
evt
)
=>
{
const
userId
=
evt
.
userId
;
console
.
log
(
'有远程同伴离开房间:'
+
userId
);
this
.
remove
(
userId
);
});
// 在添加远程流时触发
this
.
client_
.
on
(
'stream-added'
,
evt
=>
{
this
.
client_
.
on
(
'stream-added'
,
(
evt
)
=>
{
const
remoteStream
=
evt
.
stream
;
// 获取流的StreamId
const
id
=
remoteStream
.
getId
();
...
...
@@ -305,19 +314,21 @@ class RtcClient {
const
userId
=
remoteStream
.
getUserId
();
this
.
members_
.
set
(
userId
,
remoteStream
);
this
.
inmembers_
.
set
(
userId
,
remoteStream
);
console
.
log
(
`remote stream added: [
${
userId
}
] ID:
${
id
}
type:
${
remoteStream
.
getType
()}
`
);
console
.
log
(
`remote stream added: [
${
userId
}
] ID:
${
id
}
type:
${
remoteStream
.
getType
()}
`
);
// 我们订阅远端的流
console
.
log
(
'subscribe to this remote stream'
);
this
.
client_
.
subscribe
(
remoteStream
);
});
// 在订阅远程流时触发
this
.
client_
.
on
(
'stream-subscribed'
,
evt
=>
{
this
.
client_
.
on
(
'stream-subscribed'
,
(
evt
)
=>
{
const
remoteStream
=
evt
.
stream
;
const
id
=
remoteStream
.
getId
();
const
uid
=
remoteStream
.
userId_
;
this
.
remoteStreams_
.
push
(
remoteStream
);
remoteStream
.
on
(
'player-state-changed'
,
event
=>
{
remoteStream
.
on
(
'player-state-changed'
,
(
event
)
=>
{
console
.
log
(
`
${
event
.
type
}
player is
${
event
.
state
}
`
);
// 远端流是播放还是暂停状态(显示按钮等画面不同)
if
(
event
.
type
==
'video'
&&
event
.
state
==
'STOPPED'
)
{
...
...
@@ -348,14 +359,13 @@ class RtcClient {
setTimeout
(()
=>
{
// 避免其他乱入视频
const
index
=
this
.
viewslist
.
findIndex
((
item
=>
{
const
index
=
this
.
viewslist
.
findIndex
((
item
)
=>
{
if
(
item
&&
item
.
userId
)
{
return
item
.
userId
==
uid
;
}
else
{
return
-
1
;
}
}));
});
if
(
index
<
0
)
{
return
;
}
...
...
@@ -369,11 +379,10 @@ class RtcClient {
this
.
changeView
(
id
,
'vioce'
,
false
);
}
},
1000
);
});
// 当远程流被移除时触发
this
.
client_
.
on
(
'stream-removed'
,
evt
=>
{
this
.
client_
.
on
(
'stream-removed'
,
(
evt
)
=>
{
const
remoteStream
=
evt
.
stream
;
const
id
=
remoteStream
.
getId
();
const
uid
=
remoteStream
.
userId_
;
...
...
@@ -381,14 +390,14 @@ class RtcClient {
// 停止播放并删除相应<video>标签
remoteStream
.
stop
();
this
.
inmembers_
.
delete
(
uid
);
this
.
remoteStreams_
=
this
.
remoteStreams_
.
filter
(
stream
=>
{
this
.
remoteStreams_
=
this
.
remoteStreams_
.
filter
(
(
stream
)
=>
{
return
stream
.
getId
()
!==
id
;
});
this
.
remove
(
uid
);
});
// 流更新
this
.
client_
.
on
(
'stream-updated'
,
evt
=>
{
this
.
client_
.
on
(
'stream-updated'
,
(
evt
)
=>
{
console
.
log
(
'=========流更新========stream-updated==================='
);
console
.
log
(
evt
);
const
remoteStream
=
evt
.
stream
;
...
...
@@ -396,37 +405,52 @@ class RtcClient {
// remoteStream.hasVideo() // 是否有视频轨道
// remoteStream.hasAudio() //是否有音轨道
// remoteStream.getType() // 主要用于判断一个远端流是主音视频流还是辅路视频流,辅路视频流通常是一个屏幕分享流。
console
.
log
(
'remoteStream ID: '
+
remoteStream
.
getId
()
+
' was updated hasAudio: '
+
remoteStream
.
hasAudio
()
+
' hasVideo: '
+
remoteStream
.
hasVideo
());
console
.
log
(
'remoteStream ID: '
+
remoteStream
.
getId
()
+
' was updated hasAudio: '
+
remoteStream
.
hasAudio
()
+
' hasVideo: '
+
remoteStream
.
hasVideo
()
);
});
// 关闭音轨道
this
.
client_
.
on
(
'mute-audio'
,
evt
=>
{
this
.
client_
.
on
(
'mute-audio'
,
(
evt
)
=>
{
this
.
changeView
(
evt
.
userId
,
'vioce'
,
false
);
console
.
log
(
evt
.
userId
+
'关闭麦克风============================================'
);
console
.
log
(
evt
.
userId
+
'关闭麦克风============================================'
);
});
// 打开音轨道
this
.
client_
.
on
(
'unmute-audio'
,
evt
=>
{
this
.
client_
.
on
(
'unmute-audio'
,
(
evt
)
=>
{
this
.
changeView
(
evt
.
userId
,
'vioce'
,
true
);
if
(
evt
.
type
==
'audio'
&&
evt
.
state
==
'PLAYING'
&&
this
.
vueInstance
.
type
==
1
)
{
if
(
evt
.
type
==
'audio'
&&
evt
.
state
==
'PLAYING'
&&
this
.
vueInstance
.
type
==
1
)
{
this
.
changeView
(
evt
.
userId
,
'mask'
,
true
);
}
});
// 关闭视频轨道
this
.
client_
.
on
(
'mute-video'
,
evt
=>
{
console
.
log
(
evt
.
userId
+
'关闭 video=============================================='
);
this
.
client_
.
on
(
'mute-video'
,
(
evt
)
=>
{
console
.
log
(
evt
.
userId
+
'关闭 video=============================================='
);
this
.
changeView
(
evt
.
userId
,
'mask'
,
true
);
});
// 打开视频轨道
this
.
client_
.
on
(
'unmute-video'
,
evt
=>
{
console
.
log
(
evt
.
userId
+
'打开 video============================================='
);
this
.
client_
.
on
(
'unmute-video'
,
(
evt
)
=>
{
console
.
log
(
evt
.
userId
+
'打开 video============================================='
);
if
(
this
.
members_
.
get
(
evt
.
userId
))
{
this
.
changeView
(
evt
.
userId
,
'mask'
,
false
);
}
});
}
...
...
@@ -440,7 +464,7 @@ class RtcClient {
// 移除视频数组
remove
(
userId
)
{
for
(
let
i
=
0
;
i
<
this
.
viewslist
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
this
.
viewslist
.
length
;
i
++
)
{
if
(
this
.
viewslist
[
i
]
&&
this
.
viewslist
[
i
].
userId
==
userId
)
{
this
.
viewslist
[
i
]
=
null
;
}
...
...
@@ -450,7 +474,10 @@ class RtcClient {
// 改变视频数组属性
changeView
(
id
,
attr
,
val
)
{
for
(
let
i
=
0
;
i
<
this
.
viewslist
.
length
;
i
++
)
{
if
(
this
.
viewslist
[
i
]
&&
(
this
.
viewslist
[
i
].
userId
==
id
||
this
.
viewslist
[
i
].
id
==
id
))
{
if
(
this
.
viewslist
[
i
]
&&
(
this
.
viewslist
[
i
].
userId
==
id
||
this
.
viewslist
[
i
].
id
==
id
)
)
{
this
.
viewslist
[
i
][
attr
]
=
val
;
}
}
...
...
@@ -459,7 +486,13 @@ class RtcClient {
add
(
id
,
uid
,
isMask
)
{
this
.
vueInstance
.
memberList
.
forEach
((
ele
,
index
)
=>
{
if
(
ele
.
liveUserId
==
uid
)
{
this
.
viewslist
[
index
]
=
{
id
:
id
,
userId
:
uid
,
nick
:
uid
,
mask
:
isMask
,
vioce
:
true
};
this
.
viewslist
[
index
]
=
{
id
:
id
,
userId
:
uid
,
nick
:
uid
,
mask
:
isMask
,
vioce
:
true
,
};
}
});
}
...
...
src/utils/live/index.js
浏览文件 @
4950eb8f
/* eslint-disable */
/* 浏览器兼容提示 */
export
const
CHECK_BROWSER_TIPS
=
{
BROWSER_NOT_COMPATIBLE
:
'您的浏览器不支持直播功能!'
,
BROWSER_NOT_SUPPORT_SCREEN_SHARE
:
'您的浏览器不支持直播功能!'
BROWSER_NOT_SUPPORT_SCREEN_SHARE
:
'您的浏览器不支持直播功能!'
,
};
export
const
setLgTenText
=
time
=>
{
export
const
setLgTenText
=
(
time
)
=>
{
return
time
<
10
?
`0
${
time
}
`
:
time
;
};
...
...
@@ -21,11 +22,13 @@ export const countDown = (endtime) => {
const
nowtime
=
new
Date
();
// 获取当前时间
const
time
=
endtime
-
nowtime
.
getTime
();
// 距离结束时间的毫秒数
if
(
time
>
0
)
{
const
lefth
=
Math
.
floor
(
time
/
(
1000
*
60
*
60
)
%
24
);
// 计算小时数
const
leftm
=
Math
.
floor
(
time
/
(
1000
*
60
)
%
60
);
// 计算分钟数
const
lefts
=
Math
.
floor
(
time
/
1000
%
60
);
// 计算秒数
const
lefth
=
Math
.
floor
(
(
time
/
(
1000
*
60
*
60
)
)
%
24
);
// 计算小时数
const
leftm
=
Math
.
floor
(
(
time
/
(
1000
*
60
)
)
%
60
);
// 计算分钟数
const
lefts
=
Math
.
floor
(
(
time
/
1000
)
%
60
);
// 计算秒数
// 返回倒计时的字符串
return
`
${
setLgTenText
(
lefth
)}
:
${
setLgTenText
(
leftm
)}
:
${
setLgTenText
(
lefts
)}
`
;
return
`
${
setLgTenText
(
lefth
)}
:
${
setLgTenText
(
leftm
)}
:
${
setLgTenText
(
lefts
)}
`
;
}
else
{
return
'时间已到'
;
}
...
...
@@ -34,20 +37,20 @@ export const countDown = (endtime) => {
export
const
laseTime
=
(
endtime
)
=>
{
const
nowtime
=
new
Date
();
// 获取当前时间
const
time
=
endtime
-
nowtime
.
getTime
();
// 距离结束时间的毫秒数
const
lefth
=
Math
.
floor
(
time
/
(
1000
*
60
*
60
)
%
24
);
// 计算小时数
const
leftm
=
Math
.
floor
(
time
/
(
1000
*
60
)
%
60
);
// 计算分钟数
const
lefts
=
Math
.
floor
(
time
/
1000
%
60
);
// 计算秒数
const
lefth
=
Math
.
floor
(
(
time
/
(
1000
*
60
*
60
)
)
%
24
);
// 计算小时数
const
leftm
=
Math
.
floor
(
(
time
/
(
1000
*
60
)
)
%
60
);
// 计算分钟数
const
lefts
=
Math
.
floor
(
(
time
/
1000
)
%
60
);
// 计算秒数
return
{
lefth
,
leftm
,
lefts
lefts
,
};
};
export
const
lastm
=
(
startTime
,
endTime
)
=>
{
const
time
=
endTime
-
startTime
;
// 距离结束时间的毫秒数
const
lefth
=
Math
.
floor
(
time
/
(
1000
*
60
*
60
)
%
24
);
// 计算小时数
const
leftm
=
Math
.
floor
(
time
/
(
1000
*
60
)
%
60
);
// 计算分钟数
const
lefth
=
Math
.
floor
(
(
time
/
(
1000
*
60
*
60
)
)
%
24
);
// 计算小时数
const
leftm
=
Math
.
floor
(
(
time
/
(
1000
*
60
)
)
%
60
);
// 计算分钟数
return
lefth
*
60
+
leftm
;
};
...
...
@@ -69,7 +72,7 @@ export const listSort = (one, two, three, four, arr) => {
const
a
=
h
.
sort
(
listCompare
(
three
));
const
b
=
a
.
sort
(
listCompare
(
two
));
newList
=
b
.
sort
(
listCompare
(
one
,
1
));
newList
.
forEach
(
item
=>
{
newList
.
forEach
(
(
item
)
=>
{
if
(
item
.
isCalling
)
{
callArr
.
push
(
item
);
}
...
...
@@ -80,7 +83,7 @@ export const listSort = (one, two, three, four, arr) => {
return
{
newList
,
callArr
,
inviteArr
inviteArr
,
};
};
...
...
@@ -93,13 +96,21 @@ export const getBroswer = () => {
const
sys
=
{};
const
ua
=
navigator
.
userAgent
.
toLowerCase
();
let
s
;
(
s
=
ua
.
match
(
/edge
\/([\d
.
]
+
)
/
))
?
sys
.
edge
=
s
[
1
]
:
(
s
=
ua
.
match
(
/rv:
([\d
.
]
+
)\)
like gecko/
))
?
sys
.
ie
=
s
[
1
]
:
(
s
=
ua
.
match
(
/msie
([\d
.
]
+
)
/
))
?
sys
.
ie
=
s
[
1
]
:
(
s
=
ua
.
match
(
/firefox
\/([\d
.
]
+
)
/
))
?
sys
.
firefox
=
s
[
1
]
:
(
s
=
ua
.
match
(
/chrome
\/([\d
.
]
+
)
/
))
?
sys
.
chrome
=
s
[
1
]
:
(
s
=
ua
.
match
(
/opera.
([\d
.
]
+
)
/
))
?
sys
.
opera
=
s
[
1
]
:
(
s
=
ua
.
match
(
/version
\/([\d
.
]
+
)
.*safari/
))
?
sys
.
safari
=
s
[
1
]
:
0
;
(
s
=
ua
.
match
(
/edge
\/([\d
.
]
+
)
/
))
?
(
sys
.
edge
=
s
[
1
])
:
(
s
=
ua
.
match
(
/rv:
([\d
.
]
+
)\)
like gecko/
))
?
(
sys
.
ie
=
s
[
1
])
:
(
s
=
ua
.
match
(
/msie
([\d
.
]
+
)
/
))
?
(
sys
.
ie
=
s
[
1
])
:
(
s
=
ua
.
match
(
/firefox
\/([\d
.
]
+
)
/
))
?
(
sys
.
firefox
=
s
[
1
])
:
(
s
=
ua
.
match
(
/chrome
\/([\d
.
]
+
)
/
))
?
(
sys
.
chrome
=
s
[
1
])
:
(
s
=
ua
.
match
(
/opera.
([\d
.
]
+
)
/
))
?
(
sys
.
opera
=
s
[
1
])
:
(
s
=
ua
.
match
(
/version
\/([\d
.
]
+
)
.*safari/
))
?
(
sys
.
safari
=
s
[
1
])
:
0
;
if
(
sys
.
edge
)
return
{
broswer
:
'Edge'
,
version
:
sys
.
edge
};
if
(
sys
.
ie
)
return
{
broswer
:
'IE'
,
version
:
sys
.
ie
};
...
...
src/utils/qiniu-util.js
浏览文件 @
4950eb8f
import
{
isEmptyUtils
,
isNotEmptyUtils
,
subString
}
from
'./utils'
;
/* eslint-disable */
import
{
isEmptyUtils
,
isNotEmptyUtils
,
subString
}
from
'./utils'
;
import
fetchQiniu
from
'./fetch-qiniu.js'
;
import
{
getQiniuToken1
,
uploadVideo
,
uploadImg
}
from
'./index'
;
const
qiniu
=
require
(
'qiniu-js'
);
...
...
@@ -14,7 +15,7 @@ const result = {
fullPath
:
null
,
// 文件网络路径(文件url)
size
:
null
,
// 资源尺寸,单位为字节
name
:
null
,
// 原始文件名
ext
:
null
// 上传资源的后缀名,通过自动检测的mimeType 或者原文件的后缀来获取
ext
:
null
,
// 上传资源的后缀名,通过自动检测的mimeType 或者原文件的后缀来获取
};
// 上传状态
...
...
@@ -48,7 +49,7 @@ const errorCode = new Map([
[
630
,
'已创建的空间数量达到上限,无法创建新空间。'
],
[
631
,
'指定空间不存在'
],
[
640
,
'调用列举资源(list)接口时,指定非法的marker参数。'
],
[
701
,
'在断点续上传过程中,后续上传接收地址不正确或ctx信息已过期。'
]
[
701
,
'在断点续上传过程中,后续上传接收地址不正确或ctx信息已过期。'
],
]);
const
qiniuErrorCheck
=
function
(
code
)
{
...
...
@@ -67,14 +68,15 @@ export const createFilePath = (file, fileName) => {
return
null
;
}
const
arr
=
fileName
.
split
(
'_'
);
if
(
arr
.
length
!=
4
)
{
if
(
arr
.
length
!=
4
)
{
alert
(
'上传视频文件名格式不正确'
);
return
null
;
}
const
arr4
=
arr
[
3
].
split
(
'.'
);
// 文件全路径(文件路径 + 文件名) 扩展名/年/月/日/
const
filePath
=
arr
[
0
]
+
'/'
+
arr
[
1
]
+
'/'
+
arr
[
2
]
+
'_'
+
arr4
[
0
]
+
'.'
+
arr4
[
1
];
const
filePath
=
arr
[
0
]
+
'/'
+
arr
[
1
]
+
'/'
+
arr
[
2
]
+
'_'
+
arr4
[
0
]
+
'.'
+
arr4
[
1
];
console
.
log
(
filePath
);
return
filePath
;
};
...
...
@@ -88,7 +90,8 @@ const doQiniuAction1 = (fileType) => {
console
.
log
(
'send---'
+
fileApiUrl
);
return
new
Promise
(
function
(
resolve
,
reject
)
{
// if(isEmptyUtils(localStorage.getItem('qiniuToken'))){
fetchQiniu
(
fileApiUrl
,
{
'fileType'
:
fileType
},
'GET'
).
then
(
function
(
result
)
{
fetchQiniu
(
fileApiUrl
,
{
fileType
:
fileType
},
'GET'
)
.
then
(
function
(
result
)
{
let
token
=
null
;
if
(
isNotEmptyUtils
(
result
)
&&
result
.
code
==
'000000'
)
{
token
=
result
.
data
.
qiniuToken
;
...
...
@@ -99,7 +102,8 @@ const doQiniuAction1 = (fileType) => {
reject
(
result
);
console
.
error
(
'七牛临时授权失败:'
,
result
);
}
}).
catch
(
function
(
error
)
{
})
.
catch
(
function
(
error
)
{
reject
();
console
.
error
(
'七牛临时授权失败:'
,
error
);
});
...
...
@@ -120,11 +124,9 @@ const doQiniuAction1 = (fileType) => {
* @returns {Promise}
*/
export
const
qiniuUpload
=
(
self
,
file
,
filePath
,
previewId
,
progressId
)
=>
{
// var deferred = $q.defer();
return
new
Promise
(
function
(
resolve
,
reject
)
{
if
(
isEmptyUtils
(
file
)
||
isEmptyUtils
(
filePath
))
{
console
.
error
(
'七牛上传失败:非法参数'
);
reject
();
...
...
@@ -140,12 +142,12 @@ export const qiniuUpload = (self, file, filePath, previewId, progressId) => {
const
putExtra
=
{
fname
:
file
.
name
,
// 原文件名
params
:
{},
// 用来放置自定义变量
mimeType
:
mimeTypeArray
||
null
// null || array,用来限制上传文件类型,为 null 时表示不对文件类型限制;限制类型放到数组里: ["image/png", "image/jpeg", "image/gif"]
mimeType
:
mimeTypeArray
||
null
,
// null || array,用来限制上传文件类型,为 null 时表示不对文件类型限制;限制类型放到数组里: ["image/png", "image/jpeg", "image/gif"]
};
const
config
=
{
useCdnDomain
:
true
,
// 表示是否使用 cdn 加速域名,为布尔值,true 表示使用,默认为 false。
region
:
null
// 选择上传域名区域;当为 null 或 undefined 时,自动分析上传域名区域
region
:
null
,
// 选择上传域名区域;当为 null 或 undefined 时,自动分析上传域名区域
};
/*
...
...
@@ -175,10 +177,11 @@ export const qiniuUpload = (self, file, filePath, previewId, progressId) => {
* */
const
complete
=
function
(
res
)
{
console
.
log
(
'七牛上传完成'
);
setTimeout
(
function
()
{
setTimeout
(
function
()
{
result
.
key
=
res
.
key
;
result
.
path
=
'/'
+
res
.
key
;
result
.
fullPath
=
domain
+
'/'
+
res
.
key
+
'?v='
+
new
Date
().
getTime
();
result
.
fullPath
=
domain
+
'/'
+
res
.
key
+
'?v='
+
new
Date
().
getTime
();
result
.
size
=
res
.
fsize
;
result
.
name
=
res
.
fname
;
result
.
ext
=
res
.
ext
;
...
...
@@ -197,9 +200,7 @@ export const qiniuUpload = (self, file, filePath, previewId, progressId) => {
obj
.
empty
().
append
(
$img
);
obj
.
css
(
'max-width'
,
'100%'
);
}
},
2000
);
};
/**
...
...
@@ -214,11 +215,13 @@ export const qiniuUpload = (self, file, filePath, previewId, progressId) => {
// status = false;
self
.
qiniuUploadStatus
=
false
;
localStorage
.
removeItem
(
'qiniuToken'
);
console
.
log
(
'七牛上传失败,详细信息请参考:https://developer.qiniu.com/kodo/api/3928/error-responses'
);
console
.
log
(
'七牛上传失败,详细信息请参考:https://developer.qiniu.com/kodo/api/3928/error-responses'
);
// 输出简略错误信息
if
(
err
.
isRequestError
)
{
qiniuErrorCheck
(
err
.
code
);
}
else
{
}
else
{
console
.
error
(
err
);
}
...
...
@@ -232,11 +235,9 @@ export const qiniuUpload = (self, file, filePath, previewId, progressId) => {
// 上传开始
subscription
=
observable
.
subscribe
(
next
,
error
,
complete
);
});
// return deferred.promise;
});
};
...
...
@@ -264,7 +265,20 @@ const guid = () => {
return
(((
1
+
Math
.
random
())
*
0x10000
)
|
0
).
toString
(
16
).
substring
(
1
);
}
return
(
S4
()
+
S4
()
+
'-'
+
S4
()
+
'-'
+
S4
()
+
'-'
+
S4
()
+
'-'
+
S4
()
+
S4
()
+
S4
());
return
(
S4
()
+
S4
()
+
'-'
+
S4
()
+
'-'
+
S4
()
+
'-'
+
S4
()
+
'-'
+
S4
()
+
S4
()
+
S4
()
);
};
/**
* 文件重命名--七牛图片 2018 11
...
...
@@ -298,7 +312,6 @@ export const getFilePath = (file, fileName, folder) => {
var
filePath
=
ext
+
'/'
+
'admin/im/'
+
timeStamp
(
date
)
+
'.'
+
suffix
;
console
.
log
(
'filePath=============='
,
filePath
);
return
filePath
;
};
/**
...
...
@@ -311,7 +324,14 @@ export const getFilePath = (file, fileName, folder) => {
* @param fileType 1--图片和文件 空为视频
* @returns {Promise}
*/
export
const
doUpload
=
(
self
,
file
,
filePath
,
previewId
,
progressId
,
fileType
)
=>
{
export
const
doUpload
=
(
self
,
file
,
filePath
,
previewId
,
progressId
,
fileType
)
=>
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
if
(
isEmptyUtils
(
file
)
||
isEmptyUtils
(
filePath
))
{
console
.
error
(
'七牛上传失败:非法参数'
);
...
...
@@ -325,12 +345,12 @@ export const doUpload = (self, file, filePath, previewId, progressId, fileType)
const
putExtra
=
{
fname
:
file
.
name
,
// 原文件名
params
:
{},
// 用来放置自定义变量
mimeType
:
mimeTypeArray
||
null
// null || array,用来限制上传文件类型,为 null 时表示不对文件类型限制;限制类型放到数组里: ["image/png", "image/jpeg", "image/gif"]
mimeType
:
mimeTypeArray
||
null
,
// null || array,用来限制上传文件类型,为 null 时表示不对文件类型限制;限制类型放到数组里: ["image/png", "image/jpeg", "image/gif"]
};
const
config
=
{
useCdnDomain
:
true
,
// 表示是否使用 cdn 加速域名,为布尔值,true 表示使用,默认为 false。
region
:
null
// 选择上传域名区域;当为 null 或 undefined 时,自动分析上传域名区域
region
:
null
,
// 选择上传域名区域;当为 null 或 undefined 时,自动分析上传域名区域
};
/*
...
...
@@ -352,10 +372,10 @@ export const doUpload = (self, file, filePath, previewId, progressId, fileType)
const
progress
=
res
.
total
.
percent
.
toFixed
(
2
);
self
.
uploadProgress
=
Number
(
progress
);
if
(
progressId
==
'uploadProgress1'
)
{
if
(
progressId
==
'uploadProgress1'
)
{
self
.
uploadProgress1
=
Number
(
progress
);
}
if
(
progressId
==
'uploadProgress2'
)
{
if
(
progressId
==
'uploadProgress2'
)
{
self
.
uploadProgress2
=
Number
(
progress
);
}
console
.
log
(
'Progress2: '
+
progress
);
...
...
@@ -367,13 +387,15 @@ export const doUpload = (self, file, filePath, previewId, progressId, fileType)
* */
const
complete
=
function
(
res
)
{
console
.
log
(
'七牛上传完成'
);
setTimeout
(
function
()
{
setTimeout
(
function
()
{
result
.
key
=
res
.
key
;
result
.
path
=
'/'
+
res
.
key
;
if
(
!
fileType
)
{
// 图片 文件
if
(
!
fileType
)
{
// 图片 文件
console
.
log
(
'---domain-------'
,
domain
);
result
.
fullPath
=
domain
+
'/'
+
res
.
key
;
}
else
{
// 视频
}
else
{
// 视频
console
.
log
(
'----domain1------'
,
domain1
);
result
.
fullPath
=
domain1
+
'/'
+
res
.
key
;
}
...
...
@@ -397,11 +419,13 @@ export const doUpload = (self, file, filePath, previewId, progressId, fileType)
// status = false;
self
.
qiniuUploadStatus
=
false
;
localStorage
.
removeItem
(
'qiniuToken'
);
console
.
log
(
'七牛上传失败,详细信息请参考:https://developer.qiniu.com/kodo/api/3928/error-responses'
);
console
.
log
(
'七牛上传失败,详细信息请参考:https://developer.qiniu.com/kodo/api/3928/error-responses'
);
// 输出简略错误信息
if
(
err
.
isRequestError
)
{
qiniuErrorCheck
(
err
.
code
);
}
else
{
}
else
{
console
.
error
(
err
);
}
return
reject
(
new
Error
(
'七牛上传失败'
));
...
...
@@ -409,7 +433,6 @@ export const doUpload = (self, file, filePath, previewId, progressId, fileType)
// 上传开始
subscription
=
observable
.
subscribe
(
next
,
error
,
complete
);
});
// 保存到全局对象
window
.
QNSubscription
=
subscription
;
...
...
src/utils/utils.js
浏览文件 @
4950eb8f
/* eslint-disable */
import
axios
from
'axios'
;
// 对象的合并
export
const
containObject
=
function
(...
obj1
)
{
export
const
containObject
=
function
(...
obj1
)
{
const
obj
=
Object
.
assign
(...
obj1
);
return
obj
;
};
// 获取页面自适应高度
export
function
resizeHeight
(
cMinusHeight
=
152
,
iMinuxHeight
=
210
,
refHeightId
=
'slidebar-container'
,
containerHeightId
=
'screenSet'
)
{
export
function
resizeHeight
(
cMinusHeight
=
152
,
iMinuxHeight
=
210
,
refHeightId
=
'slidebar-container'
,
containerHeightId
=
'screenSet'
)
{
// let containerHeight = p_getElm(refHeightId).getBoundingClientRect().height - 15;
let
containerHeight
=
document
.
body
.
clientHeight
-
80
;
p_getElm
(
containerHeightId
).
style
.
height
=
containerHeight
-
cMinusHeight
+
'px'
;
window
.
onresize
=
function
()
{
if
(
p_getElm
(
refHeightId
)
&&
p_getElm
(
containerHeightId
))
{
containerHeight
=
p_getElm
(
refHeightId
).
getBoundingClientRect
().
height
-
15
;
p_getElm
(
containerHeightId
).
style
.
height
=
containerHeight
-
cMinusHeight
+
'px'
;
p_getElm
(
containerHeightId
).
style
.
height
=
containerHeight
-
cMinusHeight
+
'px'
;
window
.
onresize
=
function
()
{
if
(
p_getElm
(
refHeightId
)
&&
p_getElm
(
containerHeightId
))
{
containerHeight
=
p_getElm
(
refHeightId
).
getBoundingClientRect
().
height
-
15
;
p_getElm
(
containerHeightId
).
style
.
height
=
containerHeight
-
cMinusHeight
+
'px'
;
}
};
}
...
...
@@ -46,7 +54,8 @@ Array.prototype.remove = function (obj) {
};
// 时间处理
Date
.
prototype
.
format
=
function
(
fmt
)
{
// author: meizz
Date
.
prototype
.
format
=
function
(
fmt
)
{
// author: meizz
const
o
=
{
'M+'
:
this
.
getMonth
()
+
1
,
// 月份
'd+'
:
this
.
getDate
(),
// 日
...
...
@@ -54,15 +63,20 @@ Date.prototype.format = function (fmt) { // author: meizz
'm+'
:
this
.
getMinutes
(),
// 分
's+'
:
this
.
getSeconds
(),
// 秒
'q+'
:
Math
.
floor
((
this
.
getMonth
()
+
3
)
/
3
),
// 季度
'S'
:
this
.
getMilliseconds
()
S
:
this
.
getMilliseconds
(),
// 毫秒
};
if
(
/
(
y+
)
/
.
test
(
fmt
))
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
this
.
getFullYear
()
+
''
)
.
substr
(
4
-
RegExp
.
$1
.
length
));
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
this
.
getFullYear
()
+
''
).
substr
(
4
-
RegExp
.
$1
.
length
)
);
for
(
const
k
in
o
)
if
(
new
RegExp
(
'('
+
k
+
')'
).
test
(
fmt
))
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
(
RegExp
.
$1
.
length
==
1
)
?
(
o
[
k
])
:
((
'00'
+
o
[
k
]).
substr
((
''
+
o
[
k
]).
length
)));
fmt
=
fmt
.
replace
(
RegExp
.
$1
,
RegExp
.
$1
.
length
==
1
?
o
[
k
]
:
(
'00'
+
o
[
k
]).
substr
((
''
+
o
[
k
]).
length
)
);
return
fmt
;
};
...
...
@@ -71,7 +85,8 @@ Date.prototype.format = function (fmt) { // author: meizz
* @param {Object} str
*/
export
const
base64encode
=
(
str
)
=>
{
const
base64EncodeChars
=
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
;
const
base64EncodeChars
=
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
;
let
out
,
i
,
len
;
let
c1
,
c2
,
c3
;
len
=
str
.
length
;
...
...
@@ -88,16 +103,16 @@ export const base64encode = (str) => {
c2
=
str
.
charCodeAt
(
i
++
);
if
(
i
==
len
)
{
out
+=
base64EncodeChars
.
charAt
(
c1
>>
2
);
out
+=
base64EncodeChars
.
charAt
(((
c1
&
0x3
)
<<
4
)
|
((
c2
&
0xF
0
)
>>
4
));
out
+=
base64EncodeChars
.
charAt
((
c2
&
0xF
)
<<
2
);
out
+=
base64EncodeChars
.
charAt
(((
c1
&
0x3
)
<<
4
)
|
((
c2
&
0xf
0
)
>>
4
));
out
+=
base64EncodeChars
.
charAt
((
c2
&
0xf
)
<<
2
);
out
+=
'='
;
break
;
}
c3
=
str
.
charCodeAt
(
i
++
);
out
+=
base64EncodeChars
.
charAt
(
c1
>>
2
);
out
+=
base64EncodeChars
.
charAt
(((
c1
&
0x3
)
<<
4
)
|
((
c2
&
0xF
0
)
>>
4
));
out
+=
base64EncodeChars
.
charAt
(((
c2
&
0xF
)
<<
2
)
|
((
c3
&
0xC
0
)
>>
6
));
out
+=
base64EncodeChars
.
charAt
(
c3
&
0x3F
);
out
+=
base64EncodeChars
.
charAt
(((
c1
&
0x3
)
<<
4
)
|
((
c2
&
0xf
0
)
>>
4
));
out
+=
base64EncodeChars
.
charAt
(((
c2
&
0xf
)
<<
2
)
|
((
c3
&
0xc
0
)
>>
6
));
out
+=
base64EncodeChars
.
charAt
(
c3
&
0x3f
);
}
return
out
;
};
...
...
@@ -106,7 +121,136 @@ export const base64encode = (str) => {
* @param {Object} str
*/
export
const
base64decode
=
(
str
)
=>
{
const
base64DecodeChars
=
new
Array
(
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
62
,
-
1
,
-
1
,
-
1
,
63
,
52
,
53
,
54
,
55
,
56
,
57
,
58
,
59
,
60
,
61
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
26
,
27
,
28
,
29
,
30
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
41
,
42
,
43
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
);
const
base64DecodeChars
=
new
Array
(
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
62
,
-
1
,
-
1
,
-
1
,
63
,
52
,
53
,
54
,
55
,
56
,
57
,
58
,
59
,
60
,
61
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
0
,
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
,
11
,
12
,
13
,
14
,
15
,
16
,
17
,
18
,
19
,
20
,
21
,
22
,
23
,
24
,
25
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
,
26
,
27
,
28
,
29
,
30
,
31
,
32
,
33
,
34
,
35
,
36
,
37
,
38
,
39
,
40
,
41
,
42
,
43
,
44
,
45
,
46
,
47
,
48
,
49
,
50
,
51
,
-
1
,
-
1
,
-
1
,
-
1
,
-
1
);
let
c1
,
c2
,
c3
,
c4
;
let
i
,
len
,
out
;
len
=
str
.
length
;
...
...
@@ -116,39 +260,29 @@ export const base64decode = (str) => {
/* c1 */
do
{
c1
=
base64DecodeChars
[
str
.
charCodeAt
(
i
++
)
&
0xff
];
}
while
(
i
<
len
&&
c1
==
-
1
);
if
(
c1
==
-
1
)
break
;
}
while
(
i
<
len
&&
c1
==
-
1
);
if
(
c1
==
-
1
)
break
;
/* c2 */
do
{
c2
=
base64DecodeChars
[
str
.
charCodeAt
(
i
++
)
&
0xff
];
}
while
(
i
<
len
&&
c2
==
-
1
);
if
(
c2
==
-
1
)
break
;
}
while
(
i
<
len
&&
c2
==
-
1
);
if
(
c2
==
-
1
)
break
;
out
+=
String
.
fromCharCode
((
c1
<<
2
)
|
((
c2
&
0x30
)
>>
4
));
/* c3 */
do
{
c3
=
str
.
charCodeAt
(
i
++
)
&
0xff
;
if
(
c3
==
61
)
return
out
;
if
(
c3
==
61
)
return
out
;
c3
=
base64DecodeChars
[
c3
];
}
while
(
i
<
len
&&
c3
==
-
1
);
if
(
c3
==
-
1
)
break
;
out
+=
String
.
fromCharCode
(((
c2
&
0XF
)
<<
4
)
|
((
c3
&
0x3C
)
>>
2
));
}
while
(
i
<
len
&&
c3
==
-
1
);
if
(
c3
==
-
1
)
break
;
out
+=
String
.
fromCharCode
(((
c2
&
0xf
)
<<
4
)
|
((
c3
&
0x3c
)
>>
2
));
/* c4 */
do
{
c4
=
str
.
charCodeAt
(
i
++
)
&
0xff
;
if
(
c4
==
61
)
return
out
;
if
(
c4
==
61
)
return
out
;
c4
=
base64DecodeChars
[
c4
];
}
while
(
i
<
len
&&
c4
==
-
1
);
if
(
c4
==
-
1
)
break
;
}
while
(
i
<
len
&&
c4
==
-
1
);
if
(
c4
==
-
1
)
break
;
out
+=
String
.
fromCharCode
(((
c3
&
0x03
)
<<
6
)
|
c4
);
}
return
out
;
...
...
@@ -204,7 +338,7 @@ export const isEmptyUtils = (obj) => {
* 校验数组是否为空
* */
export
const
isEmptyList
=
(
list
)
=>
{
return
(
isEmptyUtils
(
list
)
||
!
(
list
instanceof
Array
)
||
list
.
length
===
0
)
;
return
isEmptyUtils
(
list
)
||
!
(
list
instanceof
Array
)
||
list
.
length
===
0
;
};
/**
...
...
@@ -219,54 +353,53 @@ export const isNotEmptyList = (list) => {
* * @param {String} [obj] 校验对象
* */
export
const
isNumber
=
(
obj
)
=>
{
return
(
obj
!=
null
&&
obj
.
toString
().
match
(
'^[0-9]*$'
)
!=
null
)
;
return
obj
!=
null
&&
obj
.
toString
().
match
(
'^[0-9]*$'
)
!=
null
;
};
// 获取用户系统信息start
const
detectOS
=
()
=>
{
const
sUserAgent
=
navigator
.
userAgent
;
const
isWin
=
(
navigator
.
platform
==
'Win32'
)
||
(
navigator
.
platform
==
'Windows'
);
const
isMac
=
(
navigator
.
platform
==
'Mac68K'
)
||
(
navigator
.
platform
==
'MacPPC'
)
||
(
navigator
.
platform
==
'Macintosh'
)
||
(
navigator
.
platform
==
'MacIntel'
);
if
(
isMac
)
return
'Mac'
;
const
isUnix
=
(
navigator
.
platform
==
'X11'
)
&&
!
isWin
&&
!
isMac
;
if
(
isUnix
)
return
'Unix'
;
const
isLinux
=
(
String
(
navigator
.
platform
).
indexOf
(
'Linux'
)
>
-
1
);
if
(
isLinux
)
return
'Linux'
;
const
isIos
=
(
sUserAgent
.
indexOf
(
'Mac OS X'
)
>
-
1
);
if
(
isIos
)
return
'Mac'
;
const
isWin
=
navigator
.
platform
==
'Win32'
||
navigator
.
platform
==
'Windows'
;
const
isMac
=
navigator
.
platform
==
'Mac68K'
||
navigator
.
platform
==
'MacPPC'
||
navigator
.
platform
==
'Macintosh'
||
navigator
.
platform
==
'MacIntel'
;
if
(
isMac
)
return
'Mac'
;
const
isUnix
=
navigator
.
platform
==
'X11'
&&
!
isWin
&&
!
isMac
;
if
(
isUnix
)
return
'Unix'
;
const
isLinux
=
String
(
navigator
.
platform
).
indexOf
(
'Linux'
)
>
-
1
;
if
(
isLinux
)
return
'Linux'
;
const
isIos
=
sUserAgent
.
indexOf
(
'Mac OS X'
)
>
-
1
;
if
(
isIos
)
return
'Mac'
;
if
(
isWin
)
{
const
isWinXP
=
sUserAgent
.
indexOf
(
'Windows NT 5.1'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows XP'
)
>
-
1
;
if
(
isWinXP
)
return
'WinXP'
;
const
isWinVista
=
sUserAgent
.
indexOf
(
'Windows NT 6.0'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows Vista'
)
>
-
1
;
if
(
isWinVista
)
return
'WinVista'
;
const
isWin7
=
sUserAgent
.
indexOf
(
'Windows NT 6.1'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 7'
)
>
-
1
;
if
(
isWin7
)
return
'Win7'
;
const
isWin8_1
=
sUserAgent
.
indexOf
(
'Windows NT 6.2'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 8'
)
>
-
1
;
const
isWin8_2
=
sUserAgent
.
indexOf
(
'Windows NT 6.3'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 8.1'
)
>
-
1
;
if
(
isWin8_1
||
isWin8_2
)
return
'Win8'
;
const
isWin10_1
=
sUserAgent
.
indexOf
(
'Windows NT 6.4'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 10'
)
>
-
1
;
const
isWin10_2
=
sUserAgent
.
indexOf
(
'Windows NT 10.0'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 10'
)
>
-
1
;
if
(
isWin10_1
||
isWin10_2
)
return
'Win10'
;
const
isWinXP
=
sUserAgent
.
indexOf
(
'Windows NT 5.1'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows XP'
)
>
-
1
;
if
(
isWinXP
)
return
'WinXP'
;
const
isWinVista
=
sUserAgent
.
indexOf
(
'Windows NT 6.0'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows Vista'
)
>
-
1
;
if
(
isWinVista
)
return
'WinVista'
;
const
isWin7
=
sUserAgent
.
indexOf
(
'Windows NT 6.1'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 7'
)
>
-
1
;
if
(
isWin7
)
return
'Win7'
;
const
isWin8_1
=
sUserAgent
.
indexOf
(
'Windows NT 6.2'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 8'
)
>
-
1
;
const
isWin8_2
=
sUserAgent
.
indexOf
(
'Windows NT 6.3'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 8.1'
)
>
-
1
;
if
(
isWin8_1
||
isWin8_2
)
return
'Win8'
;
const
isWin10_1
=
sUserAgent
.
indexOf
(
'Windows NT 6.4'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 10'
)
>
-
1
;
const
isWin10_2
=
sUserAgent
.
indexOf
(
'Windows NT 10.0'
)
>
-
1
||
sUserAgent
.
indexOf
(
'Windows 10'
)
>
-
1
;
if
(
isWin10_1
||
isWin10_2
)
return
'Win10'
;
}
return
'other'
;
};
...
...
@@ -312,47 +445,52 @@ const getTerminalType = () => {
// alert(navigator.userAgent);
if
(
navigator
.
userAgent
.
indexOf
(
'iPad'
)
>
-
1
)
{
// alert("iPad");
return
brow
=
'iPad'
;
return
(
brow
=
'iPad'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Android'
)
>
-
1
||
navigator
.
userAgent
.
indexOf
(
'Linux'
)
>
-
1
)
{
if
(
navigator
.
userAgent
.
indexOf
(
'Android'
)
>
-
1
||
navigator
.
userAgent
.
indexOf
(
'Linux'
)
>
-
1
)
{
// alert("Android");
return
brow
=
'android手机'
;
return
(
brow
=
'android手机'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'iPhone'
)
>
-
1
if
(
navigator
.
userAgent
.
indexOf
(
'iPhone'
)
>
-
1
// || navigator.userAgent.indexOf('Mac') > -1
)
{
// alert("iPhone");
return
brow
=
'iPhone手机'
;
return
(
brow
=
'iPhone手机'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Trident'
)
>
-
1
)
{
// alert("Trident");
return
brow
=
'电脑'
;
return
(
brow
=
'电脑'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Presto'
)
>
-
1
)
{
// alert("Presto");
return
brow
=
'电脑'
;
return
(
brow
=
'电脑'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Chrome'
)
>
-
1
)
{
// alert("Chrome");
return
brow
=
'电脑'
;
return
(
brow
=
'电脑'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'AppleWebKit'
)
>
-
1
)
{
// alert("AppleWebKit");
return
brow
=
'iPad'
;
return
(
brow
=
'iPad'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Gecko'
)
>
-
1
&&
navigator
.
userAgent
.
indexOf
(
'KHTML'
)
==
-
1
)
{
if
(
navigator
.
userAgent
.
indexOf
(
'Gecko'
)
>
-
1
&&
navigator
.
userAgent
.
indexOf
(
'KHTML'
)
==
-
1
)
{
// alert("Gecko");
return
brow
=
'电脑'
;
return
(
brow
=
'电脑'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Mac OS X'
)
>
-
1
)
{
// alert("ios");
return
brow
=
'ios'
;
return
(
brow
=
'ios'
)
;
}
if
(
navigator
.
userAgent
.
indexOf
(
'Safari'
)
==
-
1
)
{
// alert("Safari");
return
brow
=
'电脑'
;
return
(
brow
=
'电脑'
)
;
}
return
brow
;
};
...
...
@@ -455,7 +593,7 @@ export const logout = () => {
const
ssoLoginUrl
=
localStorage
.
getItem
(
'ssoLogin'
);
const
ssoOriginUrl
=
localStorage
.
getItem
(
'ssoOrigin'
);
console
.
log
(
'logoutUrl:'
+
logoutUrl
);
/* alert("ssoLogin Url:"+ ssoLoginUrl)
/* alert("ssoLogin Url:"+ ssoLoginUrl)
alert("logOut url:" + logoutUrl)
alert("ssoOrigin url:" + ssoOriginUrl);*/
localStorage
.
clear
();
...
...
@@ -464,16 +602,16 @@ export const logout = () => {
localStorage
.
setItem
(
'ssoLogin'
,
ssoLoginUrl
);
localStorage
.
setItem
(
'ssoOrigin'
,
ssoOriginUrl
);
if
(
isEmptyUtils
(
logoutUrl
))
{
if
(
isEmptyUtils
(
ssoLoginUrl
))
{
window
.
location
.
href
=
localStorage
.
getItem
(
'ssoOrigin'
)
+
'/PICA_SSO_FE/html/pica_login.html'
;
}
else
{
if
(
isEmptyUtils
(
ssoLoginUrl
))
{
window
.
location
.
href
=
localStorage
.
getItem
(
'ssoOrigin'
)
+
'/PICA_SSO_FE/html/pica_login.html'
;
}
else
{
window
.
location
.
href
=
localStorage
.
getItem
(
'ssoLogin'
);
}
}
else
{
// window.location.href = logoutUrl;
window
.
location
.
href
=
localStorage
.
getItem
(
'ssoOrigin'
)
+
'/PICA_SSO_FE/html/pica_login.html'
;
window
.
location
.
href
=
localStorage
.
getItem
(
'ssoOrigin'
)
+
'/PICA_SSO_FE/html/pica_login.html'
;
}
};
...
...
@@ -488,7 +626,16 @@ export const logout = () => {
* @param {Function} [cancelFunction] 按取消按钮认时,执行的函数
* @param {String} [messageType] 消息类型 success,info,warning,error
* */
export
const
messageBox
=
(
self
,
title
,
content
,
confirmButton
,
confirmFunction
,
cancelButton
,
cancelFunction
,
messageType
)
=>
{
export
const
messageBox
=
(
self
,
title
,
content
,
confirmButton
,
confirmFunction
,
cancelButton
,
cancelFunction
,
messageType
)
=>
{
const
titleText
=
title
?
title
:
'提示'
;
const
contentText
=
content
?
content
:
''
;
const
confirmButtonText
=
confirmButton
?
confirmButton
:
'确定'
;
...
...
@@ -499,11 +646,13 @@ export const messageBox = (self, title, content, confirmButton, confirmFunction,
}
if
(
isNotEmptyUtils
(
cancelButton
))
{
self
.
$confirm
(
contentText
,
titleText
,
{
self
.
$confirm
(
contentText
,
titleText
,
{
confirmButtonText
:
confirmButtonText
,
cancelButtonText
:
cancelButton
,
type
:
type
}).
then
(()
=>
{
type
:
type
,
})
.
then
(()
=>
{
// self.$message({
// type: 'success',
// message: '删除成功!'
...
...
@@ -511,7 +660,8 @@ export const messageBox = (self, title, content, confirmButton, confirmFunction,
if
(
confirmFunction
instanceof
Function
)
{
confirmFunction
();
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{
// self.$message({
// type: 'info',
// message: '已取消删除'
...
...
@@ -524,7 +674,7 @@ export const messageBox = (self, title, content, confirmButton, confirmFunction,
self
.
$alert
(
contentText
,
titleText
,
{
confirmButtonText
:
confirmButtonText
,
type
:
type
,
callback
:
action
=>
{
callback
:
(
action
)
=>
{
// self.$message({
// type: 'info',
// message: `action: ${ action }`
...
...
@@ -532,7 +682,7 @@ export const messageBox = (self, title, content, confirmButton, confirmFunction,
if
(
confirmFunction
instanceof
Function
)
{
confirmFunction
();
}
}
},
});
}
};
...
...
@@ -548,7 +698,16 @@ export const messageBox = (self, title, content, confirmButton, confirmFunction,
* @param {Function} [cancelFunction] 按取消按钮认时,执行的函数
* @param {String} [messageType] 消息类型 success,info,warning,error
* */
export
const
htmlMessageBox
=
(
self
,
title
,
content
,
confirmButton
,
confirmFunction
,
cancelButton
,
cancelFunction
,
messageType
)
=>
{
export
const
htmlMessageBox
=
(
self
,
title
,
content
,
confirmButton
,
confirmFunction
,
cancelButton
,
cancelFunction
,
messageType
)
=>
{
const
titleText
=
title
?
title
:
'提示'
;
const
contentText
=
content
?
content
:
''
;
const
confirmButtonText
=
confirmButton
?
confirmButton
:
'确定'
;
...
...
@@ -560,16 +719,19 @@ export const htmlMessageBox = (self, title, content, confirmButton, confirmFunct
// debugger
if
(
isNotEmptyUtils
(
cancelButton
))
{
self
.
$confirm
(
contentText
,
titleText
,
{
self
.
$confirm
(
contentText
,
titleText
,
{
confirmButtonText
:
confirmButtonText
,
cancelButtonText
:
cancelButton
,
dangerouslyUseHTMLString
:
true
,
// 是否将 message 属性作为 HTML 片段处理
type
:
type
}).
then
(()
=>
{
type
:
type
,
})
.
then
(()
=>
{
if
(
confirmFunction
instanceof
Function
)
{
confirmFunction
();
}
}).
catch
(()
=>
{
})
.
catch
(()
=>
{
if
(
cancelFunction
instanceof
Function
)
{
cancelFunction
();
}
...
...
@@ -579,7 +741,7 @@ export const htmlMessageBox = (self, title, content, confirmButton, confirmFunct
confirmButtonText
:
confirmButtonText
,
dangerouslyUseHTMLString
:
true
,
// 是否将 message 属性作为 HTML 片段处理
type
:
type
,
callback
:
action
=>
{
callback
:
(
action
)
=>
{
// self.$message({
// type: 'info',
// message: `action: ${ action }`
...
...
@@ -587,7 +749,7 @@ export const htmlMessageBox = (self, title, content, confirmButton, confirmFunct
if
(
confirmFunction
instanceof
Function
)
{
confirmFunction
();
}
}
},
});
}
};
...
...
@@ -605,16 +767,30 @@ export const errorResponseCheck = (error, self) => {
const
code
=
error
?
(
error
.
response
?
error
.
response
.
data
:
0
)
:
0
;
// console.log("请求失败:%s", code);
if
(
code
==
'40011'
)
{
messageBox
(
self
,
'登录'
,
'登录失效,请重新登录!'
,
'是'
,
function
()
{
messageBox
(
self
,
'登录'
,
'登录失效,请重新登录!'
,
'是'
,
function
()
{
logout
();
},
''
,
null
);
},
''
,
null
);
setTimeout
(
function
()
{
logout
();
},
2000
);
}
else
if
(
code
==
'40013'
)
{
messageBox
(
self
,
'提示'
,
'刷新太过频繁,休息一下!'
,
'是'
,
function
()
{
},
''
,
null
);
messageBox
(
self
,
'提示'
,
'刷新太过频繁,休息一下!'
,
'是'
,
function
()
{},
''
,
null
);
// setTimeout(function () {
//
// }, 2000);
...
...
@@ -626,7 +802,6 @@ export const errorResponseCheck = (error, self) => {
self
.
$message
.
error
(
'操作失败'
);
}
},
100
);
};
// 截位
...
...
@@ -654,7 +829,7 @@ export const openLoading = (self) => {
text
:
'Loading'
,
// target:'#bodyContent',
spinner
:
'el-icon-loading'
,
background
:
'rgba(0, 0, 0, 0.7)'
background
:
'rgba(0, 0, 0, 0.7)'
,
};
self
.
elLoadingId
=
self
.
$loading
(
options
);
return
self
.
elLoadingId
;
...
...
@@ -684,14 +859,13 @@ export const getConstantList = (self, codeObject) => {
}
const
req
=
{
params
:
{
numMap
:
JSON
.
stringify
(
codeObject
)
}
numMap
:
JSON
.
stringify
(
codeObject
),
},
};
self
.
$axios
.
get
(
localStorage
.
getItem
(
'msUrl'
)
+
'constants'
,
req
).
then
(
function
(
res
)
{
const
map
=
JSON
.
parse
(
JSON
.
stringify
(
res
.
data
.
data
));
// 通过这个实现深拷贝
self
.
$axios
.
get
(
localStorage
.
getItem
(
'msUrl'
)
+
'constants'
,
req
)
.
then
(
function
(
res
)
{
const
map
=
JSON
.
parse
(
JSON
.
stringify
(
res
.
data
.
data
));
// 通过这个实现深拷贝
for
(
const
key
in
map
)
{
self
[
key
]
=
map
[
key
];
}
...
...
@@ -704,13 +878,17 @@ export const initDepartment = (self, obj, type) => {
}
var
num
=
{
id
:
obj
,
type
:
type
type
:
type
,
};
axios
.
create
().
post
(
localStorage
.
getItem
(
'kfUrl'
)
+
'PICAAddressHospitalServiceImpl/postDepartmentList'
,
axios
.
create
()
.
post
(
localStorage
.
getItem
(
'kfUrl'
)
+
'PICAAddressHospitalServiceImpl/postDepartmentList'
,
num
).
then
(
function
(
res
)
{
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
res
.
data
.
departmentList
));
// 通过这个实现深拷贝
)
.
then
(
function
(
res
)
{
const
list
=
JSON
.
parse
(
JSON
.
stringify
(
res
.
data
.
departmentList
));
// 通过这个实现深拷贝
if
(
obj
==
-
1
)
{
self
.
departmentListP
=
list
;
}
else
{
...
...
@@ -724,13 +902,15 @@ export const initDepartment = (self, obj, type) => {
};
export
const
getPdepartmentId
=
(
self
)
=>
{
if
(
isNotEmptyList
(
self
.
model
.
departmentId
)
||
!
self
.
departmentList
instanceof
Array
)
{
if
(
isNotEmptyList
(
self
.
model
.
departmentId
)
||
!
self
.
departmentList
instanceof
Array
)
{
return
null
;
}
if
(
self
.
departmentList
.
length
>
0
)
{
if
(
self
.
departmentList
.
length
>
0
)
{
return
self
.
departmentList
[
0
].
parent_id
;
}
else
{
}
else
{
return
-
1
;
}
};
...
...
@@ -752,25 +932,37 @@ export const getPositionList = (provinceId, cityId, countyId, townId) => {
provinceId
,
cityId
,
countyId
,
townId
townId
,
};
axios
.
create
().
post
(
axios
.
create
()
.
post
(
localStorage
.
getItem
(
'kfUrl'
)
+
'combineHospital/getPositionList'
,
num
).
then
(
function
(
res
)
{
)
.
then
(
function
(
res
)
{
resolve
(
res
);
}).
then
(
function
(
res
)
{
})
.
then
(
function
(
res
)
{
reject
(
res
);
});
});
};
export
const
setOptionLabel
=
(
self
,
selfModel
,
selfEId
,
selfEName
,
list
,
listEId
,
listEName
)
=>
{
export
const
setOptionLabel
=
(
self
,
selfModel
,
selfEId
,
selfEName
,
list
,
listEId
,
listEName
)
=>
{
if
(
isEmptyList
(
list
)
||
isEmptyUtils
(
listEId
)
||
isEmptyUtils
(
listEName
))
{
return
;
}
for
(
let
i
=
0
;
i
<
list
.
length
;
i
++
)
{
if
(
list
[
i
][
listEId
]
==
self
[
selfModel
][
selfEId
])
{
if
(
list
[
i
][
listEId
]
==
self
[
selfModel
][
selfEId
])
{
self
[
selfModel
][
selfEName
]
=
list
[
i
][
listEName
];
break
;
}
...
...
@@ -781,13 +973,17 @@ export const setOptionLabel = (self, selfModel, selfEId, selfEName, list, listEI
// 将文件大小B转为MB
export
const
betaHandle
=
(
limit
)
=>
{
var
size
=
''
;
if
(
limit
<
1024
)
{
// 小于0.1KB,则转化成B
if
(
limit
<
1024
)
{
// 小于0.1KB,则转化成B
size
=
limit
+
'B'
;
}
else
if
(
limit
<
(
1024
*
1024
))
{
// 小于0.1MB,则转化成KB
}
else
if
(
limit
<
1024
*
1024
)
{
// 小于0.1MB,则转化成KB
size
=
(
limit
/
1024
).
toFixed
(
0
)
+
'KB'
;
}
else
if
(
limit
<
(
1024
*
1024
*
1024
))
{
// 小于0.1GB,则转化成MB
}
else
if
(
limit
<
1024
*
1024
*
1024
)
{
// 小于0.1GB,则转化成MB
size
=
(
limit
/
(
1024
*
1024
)).
toFixed
(
1
)
+
'MB'
;
}
else
{
// 其他转化成GB
}
else
{
// 其他转化成GB
size
=
(
limit
/
(
1024
*
1024
*
1024
)).
toFixed
(
1
)
+
'GB'
;
}
return
size
;
...
...
@@ -797,7 +993,10 @@ export const betaHandle = (limit) => {
export
const
timeHandle
=
(
str
)
=>
{
const
date
=
new
Date
(
str
*
1
);
const
Y
=
date
.
getFullYear
()
+
'-'
;
const
M
=
(
date
.
getMonth
()
+
1
<
10
?
'0'
+
(
date
.
getMonth
()
+
1
)
:
date
.
getMonth
()
+
1
)
+
'-'
;
const
M
=
(
date
.
getMonth
()
+
1
<
10
?
'0'
+
(
date
.
getMonth
()
+
1
)
:
date
.
getMonth
()
+
1
)
+
'-'
;
const
D
=
change
(
date
.
getDate
())
+
' '
;
const
h
=
change
(
date
.
getHours
())
+
':'
;
const
m
=
change
(
date
.
getMinutes
());
...
...
@@ -805,7 +1004,7 @@ export const timeHandle = (str) => {
};
// 补0操作
const
change
=
(
num
)
=>
{
if
(
parseInt
(
num
)
<
10
)
{
if
(
parseInt
(
num
)
<
10
)
{
num
=
'0'
+
num
;
}
return
num
;
...
...
@@ -829,12 +1028,12 @@ export const bindDragHeader = (classname, content) => {
const
t
=
e
.
clientY
-
disY
;
let
x
,
y
,
tran
;
if
(
contranslate
.
length
>
1
)
{
x
=
(
l
+
Number
(
contranslate
[
0
])
)
+
'px'
;
y
=
(
t
+
Number
(
contranslate
[
1
])
)
+
'px'
;
}
else
{
x
=
(
l
)
+
'px'
;
y
=
(
t
)
+
'px'
;
if
(
contranslate
.
length
>
1
)
{
x
=
l
+
Number
(
contranslate
[
0
]
)
+
'px'
;
y
=
t
+
Number
(
contranslate
[
1
]
)
+
'px'
;
}
else
{
x
=
l
+
'px'
;
y
=
t
+
'px'
;
}
tran
=
`translate(
${
x
}
,
${
y
}
)`
;
...
...
src/views/IM/diagnosis-admin/modal/index.scss
浏览文件 @
4950eb8f
...
...
@@ -124,9 +124,9 @@
.show-work-set
{
margin-top
:
100px
;
}
.maxNum-first-show
{
.maxNum-first-show
{
margin-top
:
20px
;
.show-sep-num
{
.show-sep-num
{
color
:
red
;
}
}
...
...
src/views/IM/diagnosis-admin/serviceSchedule.vue
浏览文件 @
4950eb8f
...
...
@@ -197,7 +197,7 @@
workInStep
,
getLevel
,
}
from
'@/api/serviceSchedule'
;
import
{
departmentAll
,
savePCDayCount
}
from
'@/api/diagnosis'
;
import
{
departmentAll
,
savePCDayCount
}
from
'@/api/diagnosis'
;
import
TableServiceSchedule
from
'@/components/list/table-serviceSchedule'
;
export
default
{
components
:
{
...
...
@@ -259,9 +259,9 @@
newCreateList
:
[],
allTilst
:
[],
allList
:
{},
centerDialogVisible
:
false
,
doctorInfo
:{},
maxNumValue
:
''
centerDialogVisible
:
false
,
doctorInfo
:
{},
maxNumValue
:
''
,
};
},
watch
:
{},
...
...
@@ -455,16 +455,16 @@
},
submitSetData
()
{
const
params
=
{
doctorId
:
this
.
doctorInfo
.
doctorId
,
preNum
:
this
.
maxNumValue
doctorId
:
this
.
doctorInfo
.
doctorId
,
preNum
:
this
.
maxNumValue
,
};
savePCDayCount
(
params
).
then
(
res
=>
{
savePCDayCount
(
params
).
then
(
(
res
)
=>
{
if
(
res
.
code
==
'000000'
)
{
this
.
centerDialogVisible
=
false
;
this
.
search
();
}
});
}
}
,
},
};
</
script
>
...
...
@@ -611,7 +611,7 @@
}
}
}
}
}
}
</
style
>
<
style
lang=
"scss"
>
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录