Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
62c39768
U
uni-app
项目概览
DCloud
/
uni-app
2 个月 前同步成功
通知
717
Star
38705
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
62c39768
编写于
10月 28, 2019
作者:
Q
qiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: app-v3 增加 picker 组件
上级
a7367daa
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
279 addition
and
0 deletion
+279
-0
src/platforms/app-plus/view/components/picker/index.vue
src/platforms/app-plus/view/components/picker/index.vue
+180
-0
src/platforms/app-plus/view/components/picker/page.js
src/platforms/app-plus/view/components/picker/page.js
+99
-0
未找到文件。
src/platforms/app-plus/view/components/picker/index.vue
0 → 100644
浏览文件 @
62c39768
<
template
>
<uni-picker
@
click.stop=
"_show"
>
<slot
/>
</uni-picker>
</
template
>
<
script
>
import
{
emitter
}
from
'
uni-mixins
'
import
{
showPage
}
from
'
./page
'
const
mode
=
{
SELECTOR
:
'
selector
'
,
MULTISELECTOR
:
'
multiSelector
'
,
TIME
:
'
time
'
,
DATE
:
'
date
'
// 暂不支持城市选择
// REGION: 'region'
}
const
fields
=
{
YEAR
:
'
year
'
,
MONTH
:
'
month
'
,
DAY
:
'
day
'
}
export
default
{
name
:
'
Picker
'
,
mixins
:
[
emitter
],
props
:
{
name
:
{
type
:
String
,
default
:
''
},
range
:
{
type
:
Array
,
default
()
{
return
[]
}
},
rangeKey
:
{
type
:
String
,
default
:
''
},
value
:
{
type
:
[
Number
,
String
,
Array
],
default
:
0
},
mode
:
{
type
:
String
,
default
:
mode
.
SELECTOR
,
validator
(
val
)
{
return
Object
.
values
(
mode
).
indexOf
(
val
)
>=
0
}
},
fields
:
{
type
:
String
,
default
:
'
day
'
,
validator
(
val
)
{
return
Object
.
values
(
fields
).
indexOf
(
val
)
>=
0
}
},
start
:
{
type
:
String
,
default
()
{
if
(
this
.
mode
===
mode
.
TIME
)
{
return
'
00:00
'
}
if
(
this
.
mode
===
mode
.
DATE
)
{
let
year
=
new
Date
().
getFullYear
()
-
60
switch
(
this
.
fields
)
{
case
fields
.
YEAR
:
return
year
case
fields
.
MONTH
:
return
year
+
'
-01
'
case
fields
.
DAY
:
return
year
+
'
-01-01
'
}
}
return
''
}
},
end
:
{
type
:
String
,
default
()
{
if
(
this
.
mode
===
mode
.
TIME
)
{
return
'
23:59
'
}
if
(
this
.
mode
===
mode
.
DATE
)
{
let
year
=
new
Date
().
getFullYear
()
+
60
switch
(
this
.
fields
)
{
case
fields
.
YEAR
:
return
year
case
fields
.
MONTH
:
return
year
+
'
-12
'
case
fields
.
DAY
:
return
year
+
'
-12-31
'
}
}
return
''
}
},
disabled
:
{
type
:
[
Boolean
,
String
],
default
:
false
}
},
created
()
{
this
.
$dispatch
(
'
Form
'
,
'
uni-form-group-update
'
,
{
type
:
'
add
'
,
vm
:
this
})
Object
.
keys
(
this
.
$props
).
forEach
(
key
=>
{
if
(
key
!==
'
name
'
)
{
this
.
$watch
(
key
,
(
val
)
=>
{
this
.
_updatePicker
({
key
:
val
})
})
}
})
},
beforeDestroy
()
{
this
.
$dispatch
(
'
Form
'
,
'
uni-form-group-update
'
,
{
type
:
'
remove
'
,
vm
:
this
})
},
methods
:
{
_show
()
{
if
(
this
.
disabled
)
{
return
}
this
.
_showPicker
(
Object
.
assign
({},
this
.
$props
))
},
_showPicker
(
data
)
{
if
(
this
.
page
)
{
return
}
let
res
=
{
event
:
'
cancel
'
}
this
.
page
=
showPage
({
url
:
'
__uniapppicker
'
,
data
,
style
:
{
titleNView
:
false
,
animationType
:
'
none
'
,
animationDuration
:
0
,
background
:
'
rgba(0,0,0,0)
'
,
popGesture
:
'
none
'
},
onMessage
:
(
message
)
=>
{
const
event
=
message
.
event
if
(
event
===
'
created
'
)
{
this
.
_updatePicker
(
data
)
return
}
if
(
event
===
'
columnchange
'
)
{
delete
message
.
event
this
.
$trigger
(
event
,
{},
message
)
return
}
res
=
message
},
onClose
:
()
=>
{
this
.
page
=
null
const
event
=
res
.
event
delete
res
.
event
this
.
$trigger
(
event
,
{},
res
)
}
})
},
_updatePicker
(
data
)
{
this
.
page
&&
this
.
page
.
sendMessage
(
data
)
}
}
}
</
script
>
<
style
>
uni-picker
{
display
:
block
;
}
</
style
>
src/platforms/app-plus/view/components/picker/page.js
0 → 100644
浏览文件 @
62c39768
function
getPageType
()
{
return
typeof
window
===
'
object
'
&&
typeof
navigator
===
'
object
'
&&
typeof
document
===
'
object
'
?
'
vue
'
:
'
nvue
'
}
let
pageId
function
getPageId
()
{
return
pageId
||
(
pageId
=
plus
.
webview
.
currentWebview
().
id
)
}
let
initedEventListener
=
false
const
callbacks
=
{}
function
addEventListener
(
pageId
,
callback
)
{
let
type
=
getPageType
()
function
onPlusMessage
(
res
)
{
const
message
=
res
.
data
.
__message
if
(
!
message
||
!
message
.
__page
)
{
return
}
const
pageId
=
message
.
__page
const
callback
=
callbacks
[
pageId
]
callback
&&
callback
(
message
)
if
(
!
message
.
keep
)
{
delete
callbacks
[
pageId
]
}
}
if
(
!
initedEventListener
)
{
if
(
type
===
'
nvue
'
)
{
const
globalEvent
=
weex
.
requireModule
(
'
globalEvent
'
)
globalEvent
.
addEventListener
(
'
plusMessage
'
,
onPlusMessage
)
}
else
{
window
.
__plusMessage
=
onPlusMessage
}
initedEventListener
=
true
}
callbacks
[
pageId
]
=
callback
}
class
Page
{
constructor
(
webview
)
{
this
.
webview
=
webview
}
sendMessage
(
data
)
{
plus
.
webview
.
postMessageToUniNView
({
__message
:
{
data
}
},
this
.
webview
.
id
)
}
}
export
function
showPage
({
url
,
data
=
{},
style
=
{},
onMessage
,
onClose
})
{
const
type
=
getPageType
()
const
fromId
=
getPageId
()
const
titleNView
=
{
autoBackButton
:
true
,
titleSize
:
'
17px
'
}
const
pageId
=
`page
${
Date
.
now
()}
`
style
=
Object
.
assign
({},
style
)
if
(
style
.
titleNView
!==
false
&&
style
.
titleNView
!==
'
none
'
)
{
style
.
titleNView
=
Object
.
assign
(
titleNView
,
style
.
titleNView
)
}
const
defaultStyle
=
{
top
:
0
,
bottom
:
0
,
usingComponents
:
{},
popGesture
:
'
close
'
,
scrollIndicator
:
'
none
'
,
animationType
:
'
pop-in
'
,
animationDuration
:
200
,
uniNView
:
{
path
:
`_www/
${
url
}
.js?from=
${
fromId
}
&type=
${
type
}
&data=
${
encodeURIComponent
(
JSON
.
stringify
(
data
))}
`
,
defaultFontSize
:
plus
.
screen
.
resolutionWidth
/
20
,
viewport
:
plus
.
screen
.
resolutionWidth
}
}
style
=
Object
.
assign
(
defaultStyle
,
style
)
const
page
=
plus
.
webview
.
create
(
''
,
pageId
,
style
)
page
.
addEventListener
(
'
close
'
,
onClose
)
addEventListener
(
pageId
,
message
=>
{
if
(
typeof
onMessage
===
'
function
'
)
{
onMessage
(
message
.
data
)
}
if
(
!
message
.
keep
)
{
page
.
close
(
'
auto
'
)
}
})
page
.
show
(
style
.
animationType
,
style
.
animationDuration
)
return
new
Page
(
page
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录