Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
高东东-金蝶建发
/
jf-yzj-satisfaction
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
32e39373
authored
Oct 25, 2023
by
golton_gao
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
update: 替换js桥为yzj的桥
parent
ff58a1eb
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
631 additions
and
2 deletions
src/base/NativeApi/cordova/cordovaApi.js
src/base/plugins/dialog.js
src/main.js
src/polyfill/cordova.js
src/polyfill/index.js
src/polyfill/request.js
src/base/NativeApi/cordova/cordovaApi.js
View file @
32e39373
...
...
@@ -24,7 +24,8 @@ export default class CordovaApi extends NativeApi {
conf
=
conf
||
{}
conf
.
platform
=
'cordova'
super
(
conf
)
var
self
=
this
/*
if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
var self = this
if (!window.document.getElementById('cordovaJS')) {
...
...
@@ -45,6 +46,10 @@ export default class CordovaApi extends NativeApi {
window.document.body.appendChild(script)
}
}
*/
window
.
qing
.
ready
(()
=>
{
self
.
doReady
(
self
)
})
}
set
methods
(
methods
)
{
...
...
src/base/plugins/dialog.js
View file @
32e39373
// 弹窗方法api
const
Alert
=
(
title
,
func
)
=>
{
const
titl
=
title
/*
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'provt') {
navigator.notification.alert(titl, func, '', '确定');
} else {
window.alert(titl)
func()
}
*/
window
.
alert
(
titl
)
func
()
}
const
Confirm
=
(
title
,
func
)
=>
{
const
tit
=
title
/*
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'provt') {
navigator.notification.confirm(tit, function (buttonIndex) {
if (buttonIndex == 1) {
...
...
@@ -27,6 +32,13 @@ const Confirm = (title, func) => {
func(false)
}
}
*/
let
res
=
window
.
confirm
(
tit
)
if
(
res
)
{
func
(
true
)
}
else
{
func
(
false
)
}
}
export
default
{
...
...
src/main.js
View file @
32e39373
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import
'./polyfill/index'
import
Vue
from
'vue'
import
App
from
'@/App'
import
router
from
'@/router'
...
...
@@ -33,12 +34,13 @@ Vue.config.productionTip = false
Vue
.
component
(
'title-bar'
,
TitleBar
)
// 全局注册标题栏
Vue
.
component
(
'page'
,
BasePage
)
Vue
.
prototype
.
$dialog
=
Dialog
// 全局的
对话框
Vue
.
prototype
.
$dialog
=
Dialog
// 全局的对话框
let
VMT
/* eslint-disable no-new */
if
(
process
.
env
.
NODE_ENV
===
'production'
)
{
/*
document.addEventListener('deviceready', function () {
VMT = new Vue({
el: '#app',
...
...
@@ -47,6 +49,15 @@ if (process.env.NODE_ENV === 'production') {
render: h => h(App)
})
})
*/
window
.
qing
.
ready
(
function
()
{
VMT
=
new
Vue
({
el
:
'#app'
,
router
,
store
,
render
:
(
h
)
=>
h
(
App
)
})
})
}
else
{
VMT
=
new
Vue
({
el
:
'#app'
,
...
...
src/polyfill/cordova.js
0 → 100644
View file @
32e39373
;(
function
(
global
)
{
var
qingjs
=
window
.
qing
var
qingPromise
=
function
(
fnName
,
params
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
var
originSuccess
=
params
.
success
var
originError
=
params
.
error
var
opt
=
Object
.
assign
(
params
,
{
success
:
function
(
res
)
{
if
(
originSuccess
)
{
originSuccess
(
res
)
}
resolve
(
res
)
},
error
:
function
(
e
)
{
if
(
originError
)
{
originError
(
e
)
}
reject
(
e
)
}
})
qingjs
.
call
(
fnName
,
opt
)
})
}
// 根据“工号”查询【工号、eid、orgId】等信息
function
getPersonInfosByJobNo
(
jobNos
)
{
var
opt
=
{
url
:
'/gateway/xmjf-other-service/person/role/query/jobNo'
,
serializer
:
'form'
,
method
:
'POST'
,
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
,
'Cloudoffice-Version'
:
'v0.0.1'
},
data
:
{
jobNos
:
jobNos
.
join
(
','
)
}
}
return
new
Promise
(
function
(
resolve
,
reject
)
{
opt
.
success
=
function
(
result
)
{
var
success
=
(
result
||
{}).
success
||
false
var
data
=
(
result
||
{}).
data
||
[]
if
(
String
(
success
).
toLowerCase
()
!==
'true'
||
data
.
length
===
0
)
{
reject
(
result
.
error
||
'获取人员信息失败!'
)
return
}
resolve
(
result
.
data
)
}
opt
.
error
=
function
(
e
)
{
reject
(
e
)
}
qingjs
.
call
(
'request'
,
opt
)
})
}
// 根据openId查询【工号、eid、orgId】等信息
function
getPersonInfosByoIds
(
oIds
)
{
var
opt
=
{
url
:
'/gateway/xmjf-other-service/person/role/query/oId'
,
serializer
:
'form'
,
method
:
'POST'
,
headers
:
{
'Content-Type'
:
'application/x-www-form-urlencoded'
,
'Cloudoffice-Version'
:
'v0.0.1'
},
data
:
{
oIds
:
oIds
.
join
(
','
)
}
}
return
new
Promise
(
function
(
resolve
,
reject
)
{
opt
.
success
=
function
(
result
)
{
var
success
=
(
result
||
{}).
success
var
data
=
(
result
||
{}).
data
||
[]
if
(
String
(
success
).
toLowerCase
()
!==
'true'
||
data
.
length
===
0
)
{
reject
(
result
.
error
||
'获取人员信息失败!'
)
return
}
resolve
(
result
.
data
)
}
opt
.
error
=
function
(
e
)
{
reject
(
e
)
}
qingjs
.
call
(
'request'
,
opt
)
})
}
// 通过qingjs选人
function
selectPersonByQing
(
selected
,
isMulti
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
qingjs
.
call
(
'selectPersons'
,
{
isMulti
:
isMulti
,
selected
:
selected
,
success
:
function
(
result
)
{
var
success
=
(
result
||
{}).
success
||
false
var
persons
=
((
result
||
{}).
data
||
{}).
persons
||
[]
if
(
String
(
success
).
toLowerCase
()
!==
'true'
||
persons
.
length
===
0
)
{
reject
(
result
.
error
||
'请选择人员后再提交'
)
return
}
resolve
(
persons
)
}
})
})
}
// 将人员信息转化成美信的
function
formatData2Mx
(
persons
)
{
// openId和人员的映射关系
var
personMap
=
{}
var
openIds
=
persons
.
map
(
function
(
p
)
{
// 将云之家的人员字段与美信的人员字段映射起来
p
.
telephonenumber
=
p
.
phone
p
.
cn
=
p
.
name
p
.
positionname
=
p
.
jobTitle
p
.
mobile
=
p
.
phone
// 创建缓存,方便后续根据openId查询人员信息
var
openId
=
p
.
openId
personMap
[
openId
]
=
p
return
openId
})
return
getPersonInfosByoIds
(
openIds
).
then
(
function
(
ids
)
{
var
persons
=
ids
.
map
(
function
(
personIds
)
{
var
openId
=
personIds
.
oId
var
jobNo
=
personIds
.
jobNo
// 从缓存里面查询对应人员
var
p
=
personMap
[
openId
]
// 更新工号
p
.
uid
=
jobNo
p
.
jobNo
=
jobNo
return
p
})
return
persons
})
}
// 选人
function
selectPersons
(
selected
,
isMulti
,
successFn
,
failFn
)
{
// 将传入的工号转为openId
var
selectedPromise
=
Promise
.
resolve
([])
if
(
selected
&&
selected
.
length
)
{
selectedPromise
=
getPersonInfosByJobNo
(
selected
)
}
// 根据openId选人
selectedPromise
.
then
(
function
(
persons
)
{
var
oIds
=
persons
.
map
(
function
(
p
)
{
return
p
.
oId
})
return
selectPersonByQing
(
oIds
,
isMulti
)
})
.
then
(
function
(
persons
)
{
// 格式化选人信息
return
formatData2Mx
(
persons
)
})
.
then
(
function
(
persons
)
{
successFn
({
result
:
true
,
array
:
persons
})
})
.
catch
(
function
()
{
failFn
({
result
:
false
,
array
:
[]
})
})
}
// 获取当前用户信息
function
getCurrentUserInfo
(
callback
)
{
var
opt
=
{
url
:
'/gateway/xmjf-other-service/person/role/save/person'
,
method
:
'POST'
,
headers
:
{
'Cloudoffice-Version'
:
'v0.0.1'
},
data
:
{},
success
:
callback
}
qingjs
.
call
(
'request'
,
opt
)
}
var
handlers
=
{
MIDEACOMMON
:
{
setBounces
:
function
(
p
,
successFn
,
failFn
)
{
p
=
p
||
[
0
]
var
enable
=
p
[
0
]
var
map
=
{
'0'
:
0
,
'1'
:
1
}
qingjs
.
call
(
'setBounce'
,
{
enable
:
map
[
`
${
enable
}
`
]
||
0
})
successFn
(
'success'
)
},
exit
:
function
(
p
,
successFn
,
failFn
)
{
qingjs
.
call
(
'closeWebView'
)
successFn
(
'success'
)
},
orgChoose1
:
function
(
p
,
successFn
,
failFn
)
{
selectPersons
([],
false
,
successFn
,
failFn
)
},
orgMuChoose1
:
function
(
selected
,
successFn
,
failFn
)
{
selectPersons
(
selected
,
true
,
successFn
,
failFn
)
},
openSysBrowser
:
function
(
urls
,
successFn
,
failFn
)
{
var
u
=
urls
||
[]
if
(
!
u
.
length
)
{
failFn
(
'未检测到要打开的url!'
)
return
}
qingjs
.
call
(
'localFunction'
,
{
name
:
'openExtBrowser'
,
param
:
{
url
:
u
[
0
]
},
success
:
successFn
})
},
language
:
function
(
param
,
successFn
,
failFn
)
{
var
lang
=
'zh-CN'
var
result
=
navigator
.
userAgent
.
match
(
/
(
;|^
)\s
*lang
\s
*:
([^
;
]
*
)
/
)
if
(
result
&&
result
.
length
===
3
)
{
lang
=
result
[
2
]
}
// 只取后面的国家代码
lang
=
lang
.
replace
(
/^
[
a-z
]
+
\-
/i
,
''
)
successFn
({
language
:
lang
.
toLowerCase
()
})
},
vcard
:
function
(
uids
,
successFn
,
failFn
)
{
var
jobNos
=
uids
||
[]
if
(
!
jobNos
.
length
)
{
failFn
(
'未检测到要打开人员的openId!'
)
return
}
// 通过工号获取openId,然后用openId打开人员详情页面。
getPersonInfosByJobNo
(
jobNos
)
.
then
(
function
(
personInfos
)
{
// 打开人员卡片只有一条信息
qingjs
.
call
(
'personInfo'
,
{
openId
:
personInfos
[
0
].
oId
})
successFn
(
true
)
})
.
catch
(
function
(
e
)
{
failFn
(
e
)
})
},
openUrl
:
function
(
params
,
successFn
,
failFn
)
{
// params的第一个参数是要打开的url
var
url
=
(
params
||
[])[
0
]
// 第二个参数是打开url的参数
var
_p
=
(
params
||
[])[
1
]
||
{}
if
(
!
url
)
{
failFn
(
'未检测到要打开的url!'
)
return
}
// 注册页面关闭的回调事件。
if
(
_p
.
H5CallBackFunction
)
{
var
fnName
=
_p
.
H5CallBackFunction
.
replace
(
'()'
,
''
)
var
fn
=
window
[
fnName
]
if
(
fn
&&
(
typeof
fn
===
'function'
))
{
qingjs
.
on
(
'appear'
,
function
()
{
fn
()
})
}
}
qingjs
.
call
(
'gotoLightApp'
,
{
urlParam
:
url
})
},
showWidget
:
function
()
{},
getExtra
:
function
(
params
,
successFn
,
failFn
)
{
successFn
(
null
)
}
},
MIDEAUSER
:
{
getUser
:
function
(
param
,
successFn
,
failFn
)
{
getCurrentUserInfo
(
function
(
result
)
{
var
success
=
(
result
||
{}).
success
var
error
=
(
result
||
{}).
error
var
data
=
(
result
||
{}).
data
||
{}
if
(
String
(
success
).
toLowerCase
()
!==
'true'
)
{
failFn
(
error
)
return
}
var
userInfo
=
data
.
userInfo
||
{}
successFn
({
uid
:
userInfo
.
username
,
email
:
userInfo
.
email
,
avatar
:
userInfo
.
avatar
,
cn
:
userInfo
.
name
,
gender
:
userInfo
.
gender
,
mobile
:
userInfo
.
email
,
fullDeptName
:
userInfo
.
fullDeptName
.
replace
(
'!'
,
'_'
),
departmentName
:
userInfo
.
deptName
,
ssoToken
:
data
.
ssoToken
})
})
}
},
MIDEAPDF
:
{
showTxt
:
function
(
param
,
successFn
,
failFn
)
{
var
p
=
param
||
{}
if
(
!
p
.
url
)
{
failFn
(
'未检测到要打开文件的url!'
)
return
}
/*
var ext = '';
var extIndex = param.title.lastIndexOf('.');
if (extIndex !== -1) {
var innerExt = param.title.slice(extIndex + 1);
if (innerExt.length > 0 && innerExt.length <=4) {
ext = innerExt;
}
}
*/
var
qingParam
=
{
fileDownloadUrl
:
param
.
url
,
success
:
successFn
,
fail
:
failFn
,
error
:
failFn
}
if
(
param
.
title
)
{
qingParam
.
fileName
=
param
.
title
}
qingjs
.
call
(
'showFile'
,
qingParam
)
},
showPdf
:
function
(
urls
,
successFn
,
failFn
)
{
var
u
=
urls
||
[]
if
(
!
u
.
length
)
{
failFn
(
'未检测到要打开文件的url!'
)
return
}
qingjs
.
call
(
'showFile'
,
{
fileDownloadUrl
:
u
[
0
],
success
:
successFn
,
fail
:
failFn
,
error
:
failFn
})
},
showRAR
:
function
()
{}
}
}
global
.
cordova
=
{
exec
:
function
(
successFn
,
failFn
,
module
,
method
,
params
)
{
params
=
params
||
[]
console
.
warn
(
'cordova-module:'
+
module
+
', method:'
+
method
)
var
modules
=
handlers
[
module
.
toUpperCase
()]
if
(
!
modules
)
{
console
.
error
(
'请求的模块'
+
module
+
'未注册!'
)
failFn
(
'请求的模块'
+
module
+
'未注册!'
)
return
}
var
handler
=
modules
[
method
]
if
(
!
handler
)
{
console
.
error
(
'未在'
+
module
+
'模块找到'
+
method
+
'方法的实现!'
)
// 当桥不存在的时候,不阻断业务让流程还可以正常走。
successFn
({})
return
}
handler
(
params
,
successFn
,
failFn
)
}
}
/*
var CAMERA = {
PictureSourceType: {
0: 'photo',
1: 'camera',
2: 'photo'
}
}
*/
global
.
navigator
.
camera
=
{
getPicture
:
function
(
successFn
,
failFn
,
params
)
{
var
sourceType
=
params
.
sourceType
||
1
var
opt
=
{
type
:
sourceType
===
1
?
'camera'
:
'photo'
}
qingPromise
(
'selectPic'
,
opt
)
.
then
(
function
(
result
)
{
var
success
=
(
result
||
{}).
success
||
false
var
data
=
(
result
||
{}).
data
||
{}
var
error
=
(
result
||
{}).
error
||
'获取图片信息失败!'
if
(
String
(
success
).
toLowerCase
()
===
'true'
)
{
successFn
(
data
.
fileData
)
}
else
{
failFn
(
error
)
}
})
.
catch
(
function
(
e
)
{
failFn
(
e
)
})
}
}
})(
window
)
src/polyfill/index.js
0 → 100644
View file @
32e39373
import
'./cordova.js'
import
'./request.js'
const
events
=
{}
window
.
customEvt
=
{
addEventListener
:
function
(
name
,
fn
)
{
if
(
!
events
[
name
])
{
events
[
name
]
=
[]
}
const
fns
=
events
[
name
]
||
[]
fns
.
push
(
fn
)
},
removeEventListener
:
function
(
name
,
fn
)
{
const
fns
=
events
[
name
]
||
[]
if
(
!
fn
)
{
events
[
name
]
=
[]
return
}
for
(
let
index
=
0
,
len
=
fns
.
length
;
index
<
len
;
index
++
)
{
const
_fn
=
fns
[
index
]
if
(
_fn
===
fn
)
{
fns
.
splice
(
index
,
1
)
break
}
}
},
triggerEvent
:
function
(
name
)
{
const
fns
=
events
[
name
]
||
[]
for
(
const
fn
of
fns
)
{
fn
()
}
}
}
var
customEvt
=
window
.
customEvt
var
qing
=
window
.
qing
qing
.
ready
(
function
()
{
// 重写左侧返回按钮
qing
.
call
(
'defback'
,
{
success
:
function
()
{
customEvt
.
triggerEvent
(
'backbutton'
)
}
})
// 绑定左侧按钮默认事件
customEvt
.
addEventListener
(
'backbutton'
,
()
=>
{
if
(
history
.
length
<=
1
)
{
// 顶级页面,则关闭当前Web
qing
.
call
(
'closeWebView'
)
}
else
{
history
.
back
()
}
})
})
src/polyfill/request.js
0 → 100644
View file @
32e39373
import
axios
from
'axios'
var
originAdapter
=
axios
.
defaults
.
adapter
axios
.
defaults
.
adapter
=
function
(
config
)
{
if
(
!
/^https
?
/
.
test
(
config
.
url
))
{
return
originAdapter
(
config
)
}
return
request
(
config
)
}
function
isObject
(
value
)
{
return
value
!==
null
&&
typeof
value
===
'object'
}
function
isFormData
(
fd
)
{
return
Object
.
prototype
.
toString
.
call
(
fd
)
===
'[object FormData]'
}
function
formData2obj
(
fd
)
{
var
data
=
{}
for
(
var
p
of
fd
.
entries
())
{
data
[
p
[
0
]]
=
p
[
1
]
}
return
data
}
function
params2object
(
url
)
{
var
params
=
{}
if
(
typeof
url
===
'object'
)
{
return
url
}
else
if
(
typeof
url
===
'string'
)
{
url
.
replace
(
/^.*
\?
|#.*$/g
,
''
)
.
split
(
'&'
)
.
forEach
((
n
)
=>
{
n
=
n
.
split
(
'='
)
if
(
n
.
length
===
2
)
{
params
[
n
[
0
]]
=
n
[
1
]
}
})
}
return
params
}
function
request
(
opt
)
{
opt
=
opt
||
{}
if
(
!
opt
.
url
)
{
return
Promise
.
reject
(
'interface url is required!'
)
}
// 默认get请求
opt
.
method
=
opt
.
method
||
'get'
// 处理params
var
urlParams
=
opt
.
params
||
{}
// 合并url和params字段的数据,如果params字段与url中有重名参数,以params中的为准
urlParams
=
Object
.
assign
(
params2object
(
opt
.
url
),
urlParams
)
// 处理url
// url如果包含空格,会在iOS中报错
opt
.
url
=
opt
.
url
.
replace
(
/^
\s
+|
\s
+$/g
,
''
)
// 将params拼接到url中
opt
.
url
=
opt
.
url
.
split
(
'?'
)[
0
]
+
'?'
+
Object
.
keys
(
urlParams
)
.
map
((
key
)
=>
{
var
val
=
urlParams
[
key
]
if
(
isObject
(
val
))
{
val
=
JSON
.
stringify
(
val
)
val
=
encodeURIComponent
(
val
)
}
else
if
(
/
[^\x
00-
\x
ff
]
/
.
test
(
val
))
{
val
=
encodeURIComponent
(
val
)
}
return
key
+
'='
+
val
})
.
join
(
'&'
)
// post非json即是form。
if
(
opt
.
method
.
toLowerCase
()
===
'post'
)
{
var
data
=
opt
.
data
if
(
isFormData
(
data
))
{
opt
.
headers
=
Object
.
assign
(
opt
.
headers
||
{},
{
'Content-Type'
:
'application/x-www-form-urlencoded'
})
opt
.
data
=
formData2obj
(
data
)
}
else
if
(
isObject
(
data
))
{
opt
.
headers
=
Object
.
assign
(
opt
.
headers
||
{},
{
'Content-Type'
:
'application/json;charset=UTF-8'
})
}
}
// 处理header
opt
.
headers
=
opt
.
headers
||
{}
// headers字段值必须是字符串型
Object
.
keys
(
opt
.
headers
).
forEach
(
function
(
key
)
{
var
val
=
opt
.
headers
[
key
]
var
type
=
typeof
val
if
(
type
===
'undefined'
)
{
delete
opt
.
headers
[
key
]
}
else
if
(
type
!==
'string'
)
{
opt
.
headers
[
key
]
=
val
+
''
}
})
return
new
Promise
(
function
(
resolve
,
reject
)
{
window
.
qing
.
call
(
'request'
,
{
url
:
opt
.
url
,
method
:
opt
.
method
,
headers
:
opt
.
headers
,
header
:
opt
.
headers
,
data
:
opt
.
data
||
{},
dataType
:
opt
.
dataType
,
success
:
function
(
resp
)
{
var
response
=
{
data
:
resp
.
data
,
status
:
resp
.
statusCode
,
headers
:
resp
.
header
,
config
:
opt
}
var
validateStatus
=
response
.
config
.
validateStatus
// Note: status is not exposed by XDomainRequest
if
(
!
response
.
status
||
!
validateStatus
||
validateStatus
(
response
.
status
)
)
{
resolve
(
response
)
}
else
{
var
error
=
new
Error
(
'Request failed with status code '
+
response
.
status
)
error
.
config
=
response
.
config
error
.
response
=
response
reject
(
error
)
}
},
error
:
function
(
e
)
{
var
error
=
new
Error
(
e
)
error
.
config
=
opt
reject
(
error
)
}
})
})
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment