Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-admin-consultation
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
jingqi.liu
pica-admin-consultation
提交
301d389f
提交
301d389f
编写于
3月 05, 2022
作者:
张磊
浏览文件
操作
浏览文件
下载
差异文件
fix eslint
上级
69d7a644
53f0c5fa
变更
28
显示空白字符变更
内嵌
并排
正在显示
28 个修改的文件
包含
2612 行增加
和
1422 行删除
+2612
-1422
.env.testing
.env.testing
+1
-1
diagnosis.js
src/api/diagnosis.js
+15
-0
serviceSchedule.js
src/api/serviceSchedule.js
+8
-1
diagnosis-live.vue
src/components/IM/diagnosis-live.vue
+39
-5
diagnosis-time.vue
src/components/common/diagnosis-time.vue
+13
-6
updateDepartId.vue
src/components/common/updateDepartId.vue
+292
-0
upload-music.vue
src/components/editor/upload-music.vue
+7
-6
table-serviceSchedule.vue
src/components/list/table-serviceSchedule.vue
+18
-1
table-set-component.vue
src/components/list/table-set-component.vue
+13
-0
index.js
src/router/index.js
+21
-0
diagnosis-list-new.js
src/utils/GeneralData/diagnosis-list-new.js
+11
-0
RtcClient.js
src/utils/RtcClient.js
+143
-110
constants.js
src/utils/constants.js
+9
-9
env-config.js
src/utils/env-config.js
+10
-6
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
diagnosis-list-new.vue
src/views/IM/diagnosis-admin/diagnosis-list-new.vue
+96
-11
index.scss
src/views/IM/diagnosis-admin/modal/index.scss
+6
-0
orderStatusUpdate.vue
src/views/IM/diagnosis-admin/orderStatusUpdate.vue
+143
-0
overviewScheduling.vue
src/views/IM/diagnosis-admin/overviewScheduling.vue
+4
-4
schedReminder.vue
src/views/IM/diagnosis-admin/schedReminder.vue
+172
-0
serviceSchedule.vue
src/views/IM/diagnosis-admin/serviceSchedule.vue
+80
-9
slidebar.vue
src/views/layout/components/slidebar.vue
+1
-3
未找到文件。
.env.testing
浏览文件 @
301d389f
NODE_ENV=production
# 自定义 VUE_APP_ENV
VUE_APP_ENV ='test'
VUE_APP_ENV ='test
ing
'
VUE_APP_SERVICE_URL=https://test1-sc.yunqueyi.com
# 阿里云OSS对象存储地址
...
...
src/api/diagnosis.js
浏览文件 @
301d389f
...
...
@@ -302,3 +302,18 @@ export const departmentAll = async () => {
method
:
'get'
,
});
};
//
export
const
updateDepartmentId
=
async
(
data
)
=>
{
return
request
({
url
:
'/diagnose/admin/diagnose/diagnoseId/fresh/departmentId'
,
data
:
data
,
method
:
'post'
,
});
};
export
const
savePCDayCount
=
async
(
data
)
=>
{
return
request
({
url
:
'/diagnose/doctor/work/savePCDayCount'
,
data
:
data
,
method
:
'post'
,
});
};
src/api/serviceSchedule.js
浏览文件 @
301d389f
...
...
@@ -67,7 +67,7 @@ export const previewWork = async (data) => {
};
export
const
setPlatformUpper
=
async
(
data
)
=>
{
return
request
({
url
:
`/diagnose/doctor/work/setPlatformUpper/
${
data
.
num
}
`
,
url
:
'/diagnose/doctor/work/setPlatformUpper'
,
data
:
data
,
method
:
'post'
,
});
...
...
@@ -92,3 +92,10 @@ export const getLevelAndDayCount = async (data) => {
method
:
'post'
,
});
};
// 暂时添加刷新问诊接口
export
const
getOrderNoFresh
=
async
(
diagnoseLogId
)
=>
{
return
request
({
url
:
`/diagnose/admin/diagnose/diagnoseOrderNo/fresh/
${
diagnoseLogId
}
`
,
method
:
'get'
,
});
};
src/components/IM/diagnosis-live.vue
浏览文件 @
301d389f
...
...
@@ -614,8 +614,35 @@
const
that
=
this
;
this
.
timerOfStatus
=
setInterval
(
function
()
{
getOnlineStatus
(
roomId
).
then
((
res
)
=>
{
const
l
=
res
.
data
;
console
.
log
(
'res=='
,
res
,
that
.
memberList
);
if
(
!
res
.
data
)
{
return
false
;
}
const
l
=
res
.
data
.
map
((
i
)
=>
{
return
i
.
userId
;
});
// l = [1089725294, 1089728785];
// that.memberList = [
// {
// accId: 'd_3651506947_uat',
// avatarImageUrl: 'https://test-file.yunqueyi.com/File/doctor_default.png',
// id: 1089725294,
// liveUserId: 'd_3651506947_uat_1089725294',
// name: '顾超',
// role: 2,
// status: 3,
// type: 1
// },
// {
// accId: 'd_1909506947_uat',
// avatarImageUrl: 'https://test-file.yunqueyi.com/File/doctor_default.png',
// id: 1089728785,
// liveUserId: 'd_1909506947_uat_1089728785',
// name: '陈影',
// role: 1,
// status: 3,
// type: 1,
// }
// ];
if
(
l
&&
l
.
length
>
0
&&
...
...
@@ -623,20 +650,27 @@
that
.
memberList
.
length
>
0
)
{
that
.
memberList
.
map
((
i
)
=>
{
if
(
l
.
includes
[
i
])
{
console
.
log
(
'res==---'
,
l
,
i
.
id
,
l
.
includes
(
i
.
id
));
if
(
l
.
includes
(
i
.
id
))
{
// 在线 更新状态
that
.
addNewMember
(
i
.
liveUserId
);
}
else
{
// 不在线 更新状态
if
(
i
.
role
==
1
&&
that
.
doctorTrtcEntryStatus
!=
3
)
{
that
.
addNew
Member
(
i
.
liveUserId
);
that
.
remove
Member
(
i
.
liveUserId
);
}
if
(
i
.
role
==
2
&&
that
.
userTrtcEntryStatus
!=
3
)
{
that
.
addNew
Member
(
i
.
liveUserId
);
that
.
remove
Member
(
i
.
liveUserId
);
}
}
});
}
else
{
if
(
that
.
memberList
&&
that
.
memberList
.
length
>
0
)
{
that
.
memberList
.
map
((
i
)
=>
{
that
.
removeMember
(
i
.
liveUserId
);
});
}
}
});
},
2000
);
...
...
src/components/common/diagnosis-time.vue
浏览文件 @
301d389f
...
...
@@ -24,11 +24,11 @@
</div>
<div
class=
"doctor-info"
>
<div
class=
"name-floor"
>
<span
class=
"name-info-detail"
>
{{
userName
}}
</span>
<span
class=
"doctor-info-name"
>
基层医生
</span>
<p
class=
"info-phone"
>
<span
class=
"name-info-detail"
>
{{
userName
}}
</span>
<span
class=
"info-phone"
>
{{
userNamePhone
}}
</
p
>
</
span
>
</div>
<div
class=
"daignose-info"
>
<span>
分诊科室:
{{
triageDepartment
}}
</span>
...
...
@@ -276,15 +276,17 @@
border-radius
:
8px
;
height
:
68px
;
display
:
flex
;
padding
:
20px
30px
20px
0
;
.name-floor
{
width
:
50%
;
padding
:
10px
26px
;
display
:
flex
;
align-items
:
center
;
.name-info-detail
{
font-size
:
18px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#02120f
;
margin-bottom
:
8px
;
margin-right
:
5px
;
}
.doctor-info-name
{
...
...
@@ -292,7 +294,9 @@
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#666666
;
margin-bottom
:
8px
;
border-radius
:
9px
;
border
:
1px
solid
#d9d9d9
;
margin-right
:
8px
;
}
.info-phone
{
font-size
:
18px
;
...
...
@@ -306,7 +310,10 @@
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#666666
;
padding-top
:
40px
;
display
:
flex
;
align-items
:
center
;
width
:
50%
;
justify-content
:
flex-end
;
}
}
.work-info-Num
{
...
...
src/components/common/updateDepartId.vue
0 → 100644
浏览文件 @
301d389f
<
template
>
<div
class=
"update-departId"
>
<el-dialog
:title=
"title"
:visible
.
sync=
"diaUpdateDeIdVisible"
@
close=
"cancel"
>
<div
class=
"update-shownamephone"
>
<div
class=
"update-namephone"
>
<div
class=
"update-name"
>
<span
class=
"doctor-name"
>
基层医生
</span>
<span
class=
"namephone-show"
>
{{
userName
}}
</span>
<span
class=
"namephone-show"
>
{{
userNamePhone
}}
</span>
</div>
<div
class=
"depart-show"
>
原分诊科室:
{{
triageDepartment
}}
</div>
</div>
<div
class=
"deparment-show"
>
<p
class=
"update-dename"
>
修改新分诊科室
</p>
<el-cascader
ref=
"cascader"
v-model=
"triageDepartmentId"
filterable
clearable
class=
"serviceSchedule-cascader"
:options=
"allTilst"
placeholder=
"选择科室"
:show-all-levels=
"false"
@
change=
"changeDepartment"
>
<template
slot-scope=
"
{ data }">
<span
:style=
"
{ fontSize: '15px', color: '#606266' }">
{{
data
.
label
}}
</span>
<span
:style=
"
{
fontSize: '10px',
color: '#606266',
marginLeft: '10px',
opacity: '0.7',
}"
>
{{
data
.
text
}}
</span>
</
template
>
</el-cascader>
</div>
<div
class=
"work-info-botton"
>
<span
slot=
"footer"
class=
"dialog-footer"
style=
"text-align: center"
>
<el-button
class=
"contest"
type=
"primary"
:disabled=
"isClick"
@
click=
"confirm"
>
确定
</el-button>
<el-button
class=
"cancel-submit"
@
click=
"cancel"
>
取 消
</el-button>
</span>
</div>
</div>
</el-dialog>
</div>
</template>
<
script
>
import
{
updateDepartmentId
,
departmentAll
}
from
'@/api/diagnosis'
;
let
vm
=
null
;
export
default
{
props
:
{
diaUpdateDeIdVisible
:
{
type
:
Boolean
,
default
:
false
,
},
diagnoseLogId
:
{
type
:
Number
,
default
:
0
,
},
triageDepartment
:
{
type
:
String
,
default
:
''
,
},
userName
:
{
type
:
String
,
default
:
''
,
},
userNamePhone
:
{
type
:
String
,
default
:
''
,
},
},
data
()
{
return
{
show
:
false
,
title
:
''
,
confirmTxt
:
'确定'
,
cancleTxt
:
''
,
triageDepartmentId
:
''
,
newTriageDepartment
:
''
,
allTilst
:
[],
allList
:
{},
};
},
created
()
{
vm
=
this
;
this
.
departmentAll
();
},
methods
:
{
departmentAll
()
{
departmentAll
().
then
((
res
)
=>
{
if
(
res
.
code
==
'000000'
)
{
this
.
allList
=
res
.
data
||
{};
this
.
showListALL
();
}
});
},
showListALL
()
{
const
arr
=
[];
const
{
departmentMapList
,
parentDepartmentList
}
=
this
.
allList
;
parentDepartmentList
.
map
((
item
)
=>
{
const
obj
=
{
label
:
item
.
departmentName
,
value
:
item
.
departmentId
,
children
:
[],
};
departmentMapList
.
map
((
info
)
=>
{
if
(
info
.
parentDepartmentId
===
obj
.
value
)
{
const
children
=
[];
info
.
diagnoseDepartmentRespList
.
map
((
detail
)
=>
{
const
secondObj
=
{
label
:
detail
.
departmentName
,
value
:
detail
.
departmentId
,
text
:
''
,
};
let
secondChildren
=
''
;
(
detail
.
departmentDeseaseRespList
||
[]).
map
((
res
)
=>
{
secondChildren
+=
res
.
deseaseName
+
' '
;
});
secondObj
.
text
=
secondChildren
?
`(
${
secondChildren
}
)`
:
''
;
children
.
push
(
secondObj
);
});
obj
.
children
=
children
;
}
});
arr
.
push
(
obj
);
});
console
.
log
(
arr
);
this
.
allTilst
=
arr
;
},
confirm
()
{
if
(
this
.
newTriageDepartment
==
''
)
{
this
.
$message
({
message
:
'请选择修改科室'
,
type
:
'warning'
,
duration
:
1000
,
});
return
false
;
}
const
params
=
{
diagnoseLogId
:
this
.
diagnoseLogId
,
triageDepartmentId
:
this
.
triageDepartmentId
,
triageDepartment
:
this
.
newTriageDepartment
,
};
vm
.
isClick
=
true
;
updateDepartmentId
(
params
)
.
then
((
res
)
=>
{
vm
.
isClick
=
false
;
if
(
res
.
code
==
'000000'
)
{
vm
.
cancel
();
vm
.
$emit
(
'search'
);
}
else
{
vm
.
$message
.
error
(
res
.
message
);
}
})
.
catch
(
function
()
{
vm
.
isClick
=
false
;
// vm.$message.error(err.message);
});
},
cancel
()
{
this
.
$emit
(
'update:diaUpdateDeIdVisible'
,
false
);
},
// 获取选择的值
changeDepartment
()
{
const
checkedNodes
=
this
.
$refs
[
'cascader'
].
getCheckedNodes
();
console
.
log
(
checkedNodes
);
if
(
checkedNodes
.
length
>
0
)
{
this
.
triageDepartmentId
=
checkedNodes
[
0
].
value
;
this
.
newTriageDepartment
=
checkedNodes
[
0
].
label
;
}
else
{
this
.
triageDepartmentId
=
''
;
this
.
newTriageDepartment
=
''
;
}
},
},
};
</
script
>
<
style
lang=
"scss"
scoped
>
.update-departId
{
.update-shownamephone
{
padding
:
20px
30px
;
.update-namephone
{
padding
:
20px
30px
;
background
:
rgba
(
240
,
242
,
245
,
0
.6
);
border-radius
:
8px
;
display
:
flex
;
width
:
100%
;
.update-name
{
width
:
50%
;
display
:
flex
;
justify-content
:
flex-start
;
align-items
:
center
;
.doctor-name
{
padding
:
2px
3px
;
border-radius
:
10px
;
border
:
1px
solid
#d9d9d9
;
margin-right
:
8px
;
}
.namephone-show
{
font-size
:
18px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#02120f
;
margin-right
:
8px
;
}
}
.depart-show
{
width
:
50%
;
display
:
flex
;
justify-content
:
flex-end
;
}
}
.deparment-show
{
margin-top
:
28px
;
.update-dename
{
font-size
:
14px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#02120f
;
margin-bottom
:
9px
;
}
/
deep
/
.serviceSchedule-cascader
{
.el-input
{
.el-input__inner
{
width
:
180px
;
height
:
32px
;
background
:
#ffffff
;
border-radius
:
16px
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0
.15
);
}
.el-input__suffix
{
display
:
flex
;
align-items
:
center
;
}
}
input
:
:-
webkit-input-placeholder
{
color
:
#89888b
;
}
}
}
.work-info-botton
{
padding
:
35px
0
;
.dialog-footer
{
.contest
{
width
:
180px
;
height
:
40px
;
background
:
#0d9078
;
border-radius
:
20px
;
}
.cancel-submit
{
width
:
180px
;
height
:
40px
;
border-radius
:
20px
;
border
:
1px
solid
#0d9078
;
font-size
:
14px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#0d9078
;
}
}
}
}
}
</
style
>
src/components/editor/upload-music.vue
浏览文件 @
301d389f
...
...
@@ -77,6 +77,7 @@
},
watch
:
{
musicList
(
newv
)
{
console
.
log
(
newv
);
this
.
musicArr
=
newv
||
[];
},
},
...
...
@@ -87,10 +88,11 @@
},
methods
:
{
musicUrl
(
item
)
{
console
.
log
(
item
);
if
(
item
.
url
)
{
return
item
.
url
;
}
return
item
.
response
.
data
.
domainPath
+
item
.
response
.
data
.
path
;
return
item
.
data
.
domainPath
+
item
.
data
.
path
;
},
beforeRemove
()
{
this
.
loading
=
true
;
...
...
@@ -104,7 +106,8 @@
},
1000
);
},
sucess
(
fileList
)
{
this
.
musicArr
=
fileList
;
console
.
log
(
fileList
);
this
.
musicArr
.
push
(
fileList
);
this
.
loading
=
false
;
},
errfn
()
{
...
...
@@ -116,10 +119,8 @@
const
newArr
=
[];
if
(
this
.
musicArr
&&
this
.
musicArr
.
length
)
{
this
.
musicArr
.
forEach
((
item
)
=>
{
if
(
item
.
response
)
{
newArr
.
push
(
item
.
response
.
data
.
domainPath
+
item
.
response
.
data
.
path
);
if
(
item
.
data
)
{
newArr
.
push
(
item
.
data
.
domainPath
+
item
.
data
.
path
);
}
else
if
(
item
.
url
&&
item
.
from
)
{
newArr
.
push
(
item
.
url
);
}
...
...
src/components/list/table-serviceSchedule.vue
浏览文件 @
301d389f
...
...
@@ -68,6 +68,12 @@
:filters=
"createList"
:filter-method=
"getLevel"
/>
<el-table-column
prop=
"preNum"
label=
"接诊上限/小时"
width=
"150"
align=
"center"
/>
<el-table-column
prop=
"workStatus"
label=
"排班状态"
...
...
@@ -121,7 +127,7 @@
label=
"操作"
fixed=
"right"
align=
"center"
min-width=
"2
0
0"
min-width=
"2
7
0"
>
<
template
slot-scope=
"scope"
>
<div
...
...
@@ -148,6 +154,12 @@
>
查看
</div>
<div
class=
"download-btn"
@
click=
"setMaxNumValue(scope.row)"
>
接诊上限
</div>
</div>
</
template
>
</el-table-column>
...
...
@@ -225,6 +237,7 @@
text
:
'未开通'
,
},
],
// maxNumValue: '',
};
},
computed
:
{},
...
...
@@ -254,6 +267,10 @@
addSchedule
(
value
,
val
)
{
this
.
$emit
(
'addSchedule'
,
value
,
val
);
},
// 点击接诊上限按钮弹框打开
setMaxNumValue
(
value
)
{
this
.
$emit
(
'setMaxNumValue'
,
value
);
},
// 分页
handleSizeChange
(
value
)
{
this
.
$emit
(
'handleSizeChange'
,
value
);
...
...
src/components/list/table-set-component.vue
浏览文件 @
301d389f
...
...
@@ -118,6 +118,15 @@
>
设为待匹配医生
</el-button>
<el-button
v-if=
"showBtn(scope.row, 22, 21)"
type=
"primary"
size=
"small"
class=
"btn"
@
click=
"updateDepartId(scope.row)"
>
修改科室
</el-button>
<el-button
v-if=
"showBtn(scope.row, 3, 4, 5, 6, 21, 22, 23, 24, 25, 26)"
type=
"primary"
...
...
@@ -356,6 +365,10 @@
waitMatchDot
(
row
)
{
this
.
$emit
(
'waitMatchDot'
,
row
);
},
// 修改科室
updateDepartId
(
row
)
{
this
.
$emit
(
'updateDepartId'
,
row
);
},
// 发送消息
sendMessage
(
row
)
{
this
.
$emit
(
'sendMessage'
,
row
);
...
...
src/router/index.js
浏览文件 @
301d389f
...
...
@@ -80,12 +80,25 @@ const overviewScheduling = (r) =>
()
=>
r
(
require
(
'@/views/IM/diagnosis-admin/overviewScheduling.vue'
)),
'overviewScheduling'
);
const
schedReminder
=
(
r
)
=>
require
.
ensure
(
[],
()
=>
r
(
require
(
'@/views/IM/diagnosis-admin/schedReminder.vue'
)),
'overviewScheduling'
);
const
administrators
=
(
r
)
=>
require
.
ensure
(
[],
()
=>
r
(
require
(
'@/views/IM/diagnosis-admin/administrators.vue'
)),
'administrators'
);
const
orderStatusUpdate
=
(
r
)
=>
require
.
ensure
(
[],
()
=>
r
(
require
(
'@/views/IM/diagnosis-admin/orderStatusUpdate.vue'
)),
'orderStatusUpdate'
);
const
Layout
=
(
r
)
=>
require
.
ensure
([],
()
=>
r
(
require
(
'@/views/layout/Layout.vue'
)),
'Layout'
);
...
...
@@ -154,10 +167,18 @@ const routerConfig = [
path
:
'/overviewScheduling'
,
component
:
overviewScheduling
,
},
{
path
:
'/schedReminder'
,
component
:
schedReminder
,
},
{
path
:
'/administrators'
,
component
:
administrators
,
},
{
path
:
'/orderStatusUpdate'
,
component
:
orderStatusUpdate
,
},
],
},
];
...
...
src/utils/GeneralData/diagnosis-list-new.js
浏览文件 @
301d389f
...
...
@@ -14,12 +14,23 @@ export const DIAGNOS_LIST_NEW = [
label
:
'订单金额'
,
showtooltip
:
false
,
},
{
prop
:
'consultRoad'
,
label
:
'订单业务类型'
,
showtooltip
:
false
,
},
{
prop
:
'diagnoseTypeStr'
,
label
:
'预约类型'
,
showtooltip
:
false
,
with
:
'200'
,
},
{
prop
:
'type'
,
label
:
'问诊类型'
,
showtooltip
:
false
,
with
:
'200'
,
},
{
prop
:
'refundRemark'
,
label
:
'外呼状态'
,
...
...
src/utils/RtcClient.js
浏览文件 @
301d389f
/* 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/constants.js
浏览文件 @
301d389f
...
...
@@ -119,7 +119,7 @@ export const STATUS_LIST = [
value
:
6
,
},
{
label
:
'
已匹配
'
,
label
:
'
待联系
'
,
value
:
21
,
},
{
...
...
@@ -289,21 +289,21 @@ export const ALL_TAB_LIST = [
active
:
'99'
,
},
{
label
:
'待
匹配
'
,
label
:
'待
分诊
'
,
active
:
'2'
,
},
{
label
:
'
已匹配
'
,
label
:
'
待联系
'
,
active
:
'102'
,
},
{
label
:
'稍后跟进'
,
active
:
'101'
,
},
{
label
:
'待分诊'
,
active
:
'22'
,
},
//
{
//
label: '待分诊',
//
active: '22',
//
},
{
label
:
'待匹配医生'
,
active
:
'23'
,
...
...
@@ -389,7 +389,7 @@ export const TRIAGE_TAB_LIST = [
// active: '22'
// },
{
label
:
'待
匹配
'
,
label
:
'待
分诊
'
,
active
:
'2'
,
},
];
...
...
@@ -421,7 +421,7 @@ export const MATCH_TAB_LIST = [
active
:
'99'
,
},
{
label
:
'
已匹配
'
,
label
:
'
待联系
'
,
active
:
'102'
,
},
{
...
...
src/utils/env-config.js
浏览文件 @
301d389f
...
...
@@ -15,7 +15,8 @@ export const envConfig = {
qiniuImgUrl
:
'https://test1-file.yunqueyi.com'
,
loginUrl
:
'https://dev-saas.yunqueyi.com/pica-login/work_station.html'
,
// innerLoginUrl: 'http://localhost:8090/PICA_SSO_FE/html/pica_index.html',
innerLoginUrl
:
'https://dev-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
innerLoginUrl
:
'https://dev-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
yuequeyiIndexUrl
:
'https://dev-saas.yunqueyi.com/pica_index.html'
,
phomeDemain
:
'https://dev-phome.yunqueyi.com'
,
picakfAccId
:
'picaop_dev'
,
...
...
@@ -27,18 +28,20 @@ export const envConfig = {
qiniuResourceUrl
:
'https://test1-videos.yunqueyi.com'
,
qiniuImgUrl
:
'https://test1-file.yunqueyi.com'
,
loginUrl
:
'https://dev-saas.yunqueyi.com/pica-login/work_station.html'
,
innerLoginUrl
:
'https://dev-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
innerLoginUrl
:
'https://dev-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
yuequeyiIndexUrl
:
'https://dev-saas.yunqueyi.com/pica_index.html'
,
phomeDemain
:
'https://dev-phome.yunqueyi.com'
,
picakfAccId
:
'picaop_dev'
,
},
test
:
{
test
ing
:
{
baseUrl
:
'https://test1-sc.yunqueyi.com'
,
qiniuFileUrl
:
'https://test1-sc.yunqueyi.com/contents/admin/qiniu/token1'
,
qiniuResourceUrl
:
'https://test1-videos.yunqueyi.com'
,
qiniuImgUrl
:
'https://test1-file.yunqueyi.com'
,
loginUrl
:
'https://test1.yunqueyi.com/pica-login/work_station.html'
,
innerLoginUrl
:
'https://test1-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
innerLoginUrl
:
'https://test1-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
yuequeyiIndexUrl
:
'https://test1.yunqueyi.com/pica_index.html'
,
phomeDemain
:
'https://test1-phome.yunqueyi.com'
,
picakfAccId
:
'picaop_test'
,
...
...
@@ -51,7 +54,8 @@ export const envConfig = {
qiniuImgUrl
:
'https://test1-file.yunqueyi.com'
,
qiniuResourceUrl
:
'https://test1-videos.yunqueyi.com'
,
loginUrl
:
'https://uat.yunqueyi.com/pica-login/work_station.html'
,
innerLoginUrl
:
'https://uat-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
innerLoginUrl
:
'https://uat-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
,
yuequeyiIndexUrl
:
'https://uat.yunqueyi.com/pica_index.html'
,
phomeDemain
:
'https://uat-phome.yunqueyi.com'
,
picakfAccId
:
'picaop_uat'
,
...
...
@@ -66,5 +70,5 @@ export const envConfig = {
yuequeyiIndexUrl
:
'https://www.yunqueyi.com/pica_index.html'
,
phomeDemain
:
'https://phome.yunqueyi.com'
,
picakfAccId
:
'picaop'
,
}
}
,
};
src/utils/fetch-qiniu.js
浏览文件 @
301d389f
/
/ 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
浏览文件 @
301d389f
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
浏览文件 @
301d389f
/**
* 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
浏览文件 @
301d389f
/* 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
浏览文件 @
301d389f
/* 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
浏览文件 @
301d389f
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
浏览文件 @
301d389f
/* 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/diagnosis-list-new.vue
浏览文件 @
301d389f
...
...
@@ -31,6 +31,25 @@
/>
</el-form-item>
</div>
<div>
<el-form-item
label=
"问诊类型"
class=
"t-b"
>
<el-select
v-model=
"searchParam.type"
placeholder=
"请选择问诊类型"
style=
"width: 220px"
>
<el-option
v-for=
"item of consultationTypeList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
</div>
<div>
<el-form-item
label=
"分诊科室"
...
...
@@ -57,6 +76,7 @@
:options=
"allTilst"
placeholder=
"选择科室"
:show-all-levels=
"false"
style=
"width: 220px"
@
change=
"changeDepart"
>
<template
slot-scope=
"
{ data }">
...
...
@@ -310,6 +330,26 @@
/>
</el-form-item>
</div>
<div>
<el-form-item
label=
"订单业务类型"
class=
"t-b"
>
<el-select
v-model=
"searchParam.consultRoad"
placeholder=
"请选择订单业务类型"
clearable
style=
"width: 220px"
>
<el-option
v-for=
"item of orderBusinessList"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
</div>
</div>
<div
class=
"form-btn"
>
<div
class=
"form-btn-li"
>
...
...
@@ -402,6 +442,7 @@
@
cancelRefund=
"cancelRefund"
@
witeGo=
"witeGo"
@
waitMatchDot=
"waitMatchDot"
@
updateDepartId=
"updateDepartId"
@
applyCancel=
"applyCancel"
@
sendMessage=
"sendMessage"
@
joinDiagnose=
"joinDiagnose"
...
...
@@ -486,6 +527,16 @@
:department-id=
"departmentId"
@
search=
"search"
/>
<!-- 修改科室 -->
<updateDeparId
v-if=
"diaUpdateDeIdVisible"
:dia-update-de-id-visible
.
sync=
"diaUpdateDeIdVisible"
:user-name=
"userName"
:user-name-phone=
"userNamePhone"
:diagnose-log-id=
"diagnoseLogId"
:triage-department=
"triageDepartment"
@
search=
"search"
/>
<rematching-doctor
:rematching-options=
"rematchingOptions"
:rematching-visible
.
sync=
"rematchingVisible"
...
...
@@ -547,6 +598,7 @@
import
RematchingDoctor
from
'../../../components/common/rematching-doctor'
;
import
TableSetComponent
from
'@/components/list/table-set-component'
;
import
applyCancelComponent
from
'../../../components/common/applyCancel'
;
import
updateDeparId
from
'../../../components/common/updateDepartId'
;
export
default
{
components
:
{
TableSetComponent
,
...
...
@@ -561,6 +613,7 @@
DiagnosisTime
,
RematchingDoctor
,
applyCancelComponent
,
updateDeparId
,
},
data
()
{
return
{
...
...
@@ -579,6 +632,7 @@
tabrefresh
:
true
,
searchParam
:
{
id
:
''
,
type
:
''
,
operateName
:
''
,
assistantVal
:
''
,
receptionVal
:
''
,
...
...
@@ -602,6 +656,7 @@
price
:
''
,
refundRemark
:
''
,
matchingWay
:
null
,
consultRoad
:
null
,
},
noteList
:
[],
alltabslist
:
[],
...
...
@@ -610,6 +665,16 @@
sourceList
:
SOURCE_LIST
,
priceList
:
ORDER_PRICE
,
matchingWayList
:
MATCHING_LIST
,
orderBusinessList
:
[
{
label
:
'中医实践'
,
value
:
1
,
},
{
label
:
'向上问诊'
,
value
:
0
,
},
],
tabpaneList
:
[],
rematchingOptions
:
[],
// 备注信息
Raw_tabpaneList
:
[],
...
...
@@ -624,6 +689,7 @@
followupVisible
:
false
,
doctorVisible
:
false
,
diagnosisVisible
:
false
,
diaUpdateDeIdVisible
:
false
,
coordinatingVisible
:
false
,
diagnosisDoctorVisible
:
false
,
diagnoseFlag
:
false
,
...
...
@@ -659,6 +725,24 @@
departmentId
:
''
,
allTilst
:
[],
allList
:
{},
consultationTypeList
:
[
{
label
:
'全部'
,
value
:
''
,
},
{
label
:
'名医问诊'
,
value
:
2
,
},
{
label
:
'极速问诊'
,
value
:
1
,
},
{
label
:
'-'
,
value
:
0
,
},
],
};
},
watch
:
{
...
...
@@ -690,7 +774,6 @@
departmentAll
()
{
departmentAll
().
then
((
res
)
=>
{
if
(
res
.
code
==
'000000'
)
{
console
.
log
(
res
,
'res111'
);
this
.
allList
=
res
.
data
||
{};
this
.
showListALL
();
}
...
...
@@ -727,7 +810,6 @@
arr
.
push
(
obj
);
});
console
.
log
(
arr
);
this
.
allTilst
=
arr
;
},
changeDepart
()
{
...
...
@@ -737,10 +819,6 @@
}
else
{
this
.
searchParam
.
triageDepartmentId
=
''
;
}
console
.
log
(
this
.
searchParam
.
triageDepartmentId
,
'this.searchParam.triageDepartmentId'
);
},
changeStartTime
(
time
)
{
this
.
rangeTimeData
=
time
...
...
@@ -748,7 +826,6 @@
?
new
Date
(
time
.
time
).
format
(
'yyyy-MM-dd hh:mm:ss'
)
:
''
:
''
;
console
.
log
(
this
.
rangeTimeData
,
'this.rangeTimeData'
);
},
getTableData
(
val
)
{
this
.
saveTableData
=
val
||
[];
...
...
@@ -1038,6 +1115,7 @@
this
.
assistantTime
=
''
;
this
.
searchParam
=
Object
.
assign
(
this
.
searchParam
,
{
id
:
''
,
type
:
''
,
operateName
:
''
,
assistantVal
:
''
,
receptionVal
:
''
,
...
...
@@ -1058,6 +1136,7 @@
assistantBeginTime
:
''
,
assistantEndTime
:
''
,
inNewTimeObj
:
{},
consultRoad
:
null
,
});
},
// 导出
...
...
@@ -1118,21 +1197,28 @@
applyCancel
(
row
)
{
this
.
diagnoseLogId
=
row
.
diagnoseLogId
;
this
.
dialogFormVisible
=
true
;
console
.
log
(
row
);
},
// 设为待匹配医生
waitMatchDot
(
row
)
{
console
.
log
(
row
,
'doctorData111'
);
this
.
doctorData
=
row
;
this
.
diagnoseLogId
=
row
.
diagnoseLogId
;
this
.
userName
=
row
.
userName
;
this
.
userNamePhone
=
row
.
userMobile
;
this
.
triageDepartment
=
row
.
triageDepartment
;
this
.
departmentId
=
row
.
d
epartmentId
;
this
.
departmentId
=
row
.
triageD
epartmentId
;
this
.
diagnosisTimeVisible
=
true
;
this
.
bizType
=
5
;
// }
},
// 修改科室
updateDepartId
(
row
)
{
console
.
log
(
row
);
this
.
diagnoseLogId
=
row
.
diagnoseLogId
;
this
.
userName
=
row
.
userName
;
this
.
userNamePhone
=
row
.
userMobile
;
this
.
triageDepartment
=
row
.
triageDepartment
;
this
.
diaUpdateDeIdVisible
=
true
;
},
// 发送消息
sendMessage
(
row
)
{
this
.
$router
.
push
({
...
...
@@ -1199,7 +1285,6 @@
},
// 设为待确认时间
waitMatchTime
(
row
)
{
console
.
log
(
row
,
'row'
);
this
.
doctorInfo
=
row
;
this
.
rangeTimeData
=
row
.
assistantBeginTime
;
this
.
diagnoseFlag
=
true
;
...
...
src/views/IM/diagnosis-admin/modal/index.scss
浏览文件 @
301d389f
...
...
@@ -124,6 +124,12 @@
.show-work-set
{
margin-top
:
100px
;
}
.maxNum-first-show
{
margin-top
:
20px
;
.show-sep-num
{
color
:
red
;
}
}
.agment-left-con
{
padding
:
15px
;
text-align
:
center
;
...
...
src/views/IM/diagnosis-admin/orderStatusUpdate.vue
0 → 100644
浏览文件 @
301d389f
<
template
>
<div
class=
"diagnosis-list-content"
>
<div
class=
"select-content screenSet"
>
<div
class=
"title"
>
咨询订单管理后台
</div>
</div>
<div
class=
"component-content screenSet"
>
<el-form
ref=
"form"
:inline=
"true"
:model=
"form"
label-width=
"180px"
>
<el-form-item
label=
"订单变化(待问诊>问诊中)"
>
<el-input
v-model=
"form.orderName"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"submitConfirm"
>
刷新
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</
template
>
<
script
>
// 这个页面只是暂时的,等自动排班版本修改
import
{
getOrderNoFresh
}
from
'@/api/serviceSchedule'
;
export
default
{
name
:
'OrderStatusUpdate'
,
data
()
{
return
{
form
:
{
orderName
:
''
,
},
submitFlag
:
true
,
};
},
mounted
()
{},
methods
:
{
submitConfirm
()
{
this
.
$confirm
(
'是否要跟新订单状态?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}).
then
(()
=>
{
this
.
onSubmit
();
});
},
onSubmit
()
{
if
(
this
.
form
.
orderName
&&
this
.
submitFlag
)
{
this
.
submitFlag
=
false
;
getOrderNoFresh
(
this
.
form
.
orderName
).
then
((
res
)
=>
{
let
tipText
=
''
;
if
(
res
.
code
===
'000000'
)
{
tipText
=
'更新订单成功'
;
}
else
{
tipText
=
res
.
message
;
}
this
.
form
.
orderName
=
''
;
this
.
submitFlag
=
true
;
this
.
$message
({
message
:
tipText
,
type
:
'warning'
,
duration
:
1000
,
});
});
}
else
{
this
.
$message
({
message
:
'请先输入订单id'
,
type
:
'warning'
,
duration
:
1000
,
});
}
console
.
log
(
this
.
form
);
},
init
()
{
console
.
log
(
11
);
},
},
};
</
script
>
<
style
lang=
"scss"
scoped
>
.diagnosis-list-content
{
.select-content
{
margin-bottom
:
10px
;
padding
:
10px
;
background
:
#fff
;
overflow
:
hidden
!
important
;
.title
{
height
:
50px
;
display
:
flex
;
justify-content
:
flex-start
;
align-items
:
center
;
}
.form-container
{
display
:
flex
;
justify-content
:
space-between
;
.form-li
{
display
:
flex
;
flex-direction
:
column
;
// justify-content: space-between;
}
.form-btn
{
display
:
flex
;
flex-direction
:
column
;
justify-content
:
flex-start
;
.form-btn-li
{
display
:
flex
;
justify-content
:
flex-end
;
margin-bottom
:
20px
;
}
}
}
.select-bottom
{
height
:
50px
;
cursor
:
pointer
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
color
:
#0d9078
;
}
.btn-wrap
{
text-align
:
right
;
}
.t-b
{
margin-bottom
:
10px
;
}
}
.component-content
{
height
:
400px
;
padding
:
10px
;
background
:
#fff
;
overflow
:
hidden
!
important
;
}
}
</
style
>
src/views/IM/diagnosis-admin/overviewScheduling.vue
浏览文件 @
301d389f
...
...
@@ -6,7 +6,7 @@
<div
class=
"header"
>
<el-breadcrumb
separator=
"/"
>
<el-breadcrumb-item>
首页
</el-breadcrumb-item>
<el-breadcrumb-item>
服务排班表
</el-breadcrumb-item>
<el-breadcrumb-item>
医生排班总览
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div
class=
"agment-box"
>
...
...
@@ -68,7 +68,7 @@
查询
</el-button>
</div>
<div
class=
"agmentSelect-select-right"
>
<
!-- <
div class="agmentSelect-select-right">
设置系统每小时接诊上限
<el-input-number
v-model="maxDiaNum"
...
...
@@ -85,7 +85,7 @@
>
保存
</el-button>
</div>
</div>
-->
</div>
<div
class=
"fullCalendar-show"
...
...
@@ -191,7 +191,7 @@
watch
:
{},
created
()
{
this
.
departmentAll
();
this
.
getPlatformUpper
();
//
this.getPlatformUpper();
},
mounted
()
{},
methods
:
{
...
...
src/views/IM/diagnosis-admin/schedReminder.vue
0 → 100644
浏览文件 @
301d389f
<
template
>
<div
v-loading=
"loading"
style=
"width: 100%; position: relative; justifycontent: space-between"
>
<div
class=
"header"
>
<el-breadcrumb
separator=
"/"
>
<el-breadcrumb-item>
首页
</el-breadcrumb-item>
<el-breadcrumb-item>
服务排班表
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div
class=
"agment-box"
>
<div
class=
"setagment"
>
<div
class=
"choose_around"
>
<span>
选择要排班提醒的上级医生范围:
</span>
<div
class=
"showLevel"
>
<el-checkbox-group
v-model=
"checkList"
@
change=
"handlecheckedProps"
>
<el-checkbox
v-for=
"item in levelList"
:key=
"item.id"
:label=
"item.id"
class=
"select-checkbox"
>
{{
item
.
name
}}
</el-checkbox>
</el-checkbox-group>
</div>
</div>
<div
class=
"agmentSelect-select-right"
>
设置系统每小时接诊上限:
<el-input-number
v-model=
"maxDiaNum"
:step=
"1"
:min=
"0"
:max=
"10000000"
step-strictly
@
change=
"getInputNumber"
/>
<el-button
type=
"primary"
class=
"submit-btn"
@
click=
"setPlatformUpper"
>
保存
</el-button>
</div>
</div>
</div>
</div>
</
template
>
<
script
>
import
{
setPlatformUpper
,
getPlatformUpper
}
from
'@/api/serviceSchedule'
;
export
default
{
data
()
{
return
{
levelList
:
[
{
id
:
1
,
name
:
'运营等级1'
,
},
{
id
:
2
,
name
:
'运营等级2'
,
},
{
id
:
3
,
name
:
'运营等级3'
,
},
{
id
:
4
,
name
:
'运营等级4'
,
},
{
id
:
5
,
name
:
'运营等级5'
,
},
],
checkList
:
[],
maxDiaNum
:
0
,
};
},
watch
:
{},
created
()
{
this
.
getPlatformUpper
();
},
mounted
()
{},
methods
:
{
getPlatformUpper
()
{
getPlatformUpper
().
then
((
res
)
=>
{
if
(
res
.
code
===
'000000'
)
{
this
.
maxDiaNum
=
res
.
data
.
count
;
this
.
checkList
=
res
.
data
.
levelList
;
}
});
},
setPlatformUpper
()
{
const
param
=
{
count
:
this
.
maxDiaNum
,
levelList
:
this
.
checkList
,
};
setPlatformUpper
(
param
).
then
((
res
)
=>
{
if
(
res
.
code
===
'000000'
)
{
this
.
$message
.
success
(
'保存成功'
);
this
.
getPlatformUpper
();
}
});
},
handlecheckedProps
(
val
)
{
console
.
log
(
val
);
this
.
checkList
=
val
||
[];
},
},
};
</
script
>
<
style
lang=
"scss"
scoped
>
.header
{
padding
:
30px
;
width
:
100%
;
}
.agment-box
{
padding
:
0
25px
25px
25px
;
border-radius
:
6px
;
min-height
:
700px
;
// flex: 3.8;
width
:
100%
;
overflow
:
hidden
;
.setagment
{
min-height
:
500px
;
background
:
#fff
;
padding
:
30px
25px
50px
25px
;
.choose_around
{
display
:
flex
;
span
{
font-size
:
16px
;
}
.showLevel
{
padding
:
20px
20px
50px
20px
;
.el-checkbox-group
{
display
:
flex
;
flex-direction
:
column
;
.el-checkbox
{
padding
:
10px
;
color
:
black
;
}
}
}
}
.agmentSelect-select-right
{
position
:
relative
;
padding-top
:
10px
;
.el-input-number
{
margin
:
0
10px
;
}
.submit-btn
{
position
:
absolute
;
left
:
280px
;
top
:
100px
;
padding
:
10px
30px
;
height
:
32px
;
background
:
#0d9078
;
border-radius
:
16px
;
display
:
flex
;
align-items
:
center
;
}
}
}
}
</
style
>
src/views/IM/diagnosis-admin/serviceSchedule.vue
浏览文件 @
301d389f
...
...
@@ -138,6 +138,7 @@
:total-rows=
"searchParam.totalRows"
:loading=
"loading"
:create-list=
"newCreateList"
:center-dialog-visible=
"centerDialogVisible"
@
sortfunc=
"sortfunc"
@
getServiceOpen=
"getServiceOpen"
@
getWorkStatus=
"getWorkStatus"
...
...
@@ -145,6 +146,7 @@
@
handleSizeChange=
"handleSizeChange"
@
handleCurrentChange=
"handleCurrentChange"
@
addSchedule=
"addSchedule"
@
setMaxNumValue=
"setMaxNumValue"
/>
</div>
</div>
...
...
@@ -155,6 +157,36 @@
href=
""
target=
"_blank"
/>
<el-dialog
:visible
.
sync=
"centerDialogVisible"
width=
"30%"
center
class=
"el-dialog-show"
>
<div
class=
"set-agment-maxNum"
>
<div
class=
"num-max"
>
<span
class=
"hour-num-title"
>
每小时接诊上限人数
</span>
<div
class=
"num-input-show"
>
<el-input-number
v-model=
"maxNumValue"
:min=
"0"
:max=
"20"
@
change=
"getMaxNumValue"
/>
</div>
</div>
</div>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"centerDialogVisible = false"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"submitSetData"
>
确 定
</el-button>
</span>
</el-dialog>
</div>
</template>
...
...
@@ -165,7 +197,7 @@
workInStep
,
getLevel
,
}
from
'@/api/serviceSchedule'
;
import
{
departmentAll
}
from
'@/api/diagnosis'
;
import
{
departmentAll
,
savePCDayCount
}
from
'@/api/diagnosis'
;
import
TableServiceSchedule
from
'@/components/list/table-serviceSchedule'
;
export
default
{
components
:
{
...
...
@@ -227,6 +259,9 @@
newCreateList
:
[],
allTilst
:
[],
allList
:
{},
centerDialogVisible
:
false
,
doctorInfo
:
{},
maxNumValue
:
''
,
};
},
watch
:
{},
...
...
@@ -403,20 +438,33 @@
this
.
search
();
},
addSchedule
(
value
,
val
)
{
// this.ScheduleListShow = false;
// this.schedulingType = val;
const
target
=
this
.
$refs
.
target
;
const
{
origin
}
=
window
.
location
;
const
u
=
`
${
origin
}
/consultation/pica-admin-consultation/addEditSchedule?type=
${
val
}
&doctorId=
${
value
.
doctorId
}
&id=
${
value
.
id
}
`
;
target
.
setAttribute
(
'href'
,
u
);
target
.
click
();
},
// goBack(flag) {
// this.ScheduleListShow = true;
// if (flag) {
// this.search();
// }
// },
setMaxNumValue
(
value
)
{
this
.
doctorInfo
=
value
;
this
.
maxNumValue
=
value
.
preNum
;
this
.
centerDialogVisible
=
true
;
},
// 每小时接诊上限人数
getMaxNumValue
(
value
)
{
this
.
maxNumValue
=
value
;
},
submitSetData
()
{
const
params
=
{
doctorId
:
this
.
doctorInfo
.
doctorId
,
preNum
:
this
.
maxNumValue
,
};
savePCDayCount
(
params
).
then
((
res
)
=>
{
if
(
res
.
code
==
'000000'
)
{
this
.
centerDialogVisible
=
false
;
this
.
search
();
}
});
},
},
};
</
script
>
...
...
@@ -541,6 +589,29 @@
}
}
}
.el-dialog-show
{
.set-agment-maxNum
{
.num-max
{
text-align
:
center
;
.hour-num-title
{
font-size
:
16px
;
font-family
:
PingFangSC-Regular
,
PingFang
SC
;
font-weight
:
400
;
color
:
#02120f
;
}
.num-input-show
{
padding-top
:
10px
;
.el-input
{
width
:
50%
;
/
deep
/
.el-input__inner
{
border-radius
:
20px
;
text-align
:
center
;
}
}
}
}
}
}
}
</
style
>
<
style
lang=
"scss"
>
...
...
src/views/layout/components/slidebar.vue
浏览文件 @
301d389f
...
...
@@ -133,7 +133,7 @@
case
'development'
:
url
=
'https://dev-sockets.yunqueyi.com'
;
break
;
case
'test'
:
case
'test
ing
'
:
url
=
'https://test1-sockets.yunqueyi.com'
;
break
;
case
'uat'
:
...
...
@@ -181,8 +181,6 @@
color
:
#fff
;
background
:
#06232c
;
}
}
}
</
style
>
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录