Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
gm_flutter
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
林生雨
gm_flutter
Commits
c9f21205
Commit
c9f21205
authored
Jul 12, 2020
by
朱璇
Browse files
Options
Browse Files
Download
Plain Diff
conflict fix
parents
4c4b591d
3d293fff
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
421 additions
and
173 deletions
+421
-173
LevelOneItem.dart
lib/ClueModel/page/levelOne/LevelOneItem.dart
+6
-7
LevelOnePage.dart
lib/ClueModel/page/levelOne/LevelOnePage.dart
+4
-14
LevelTwoPage.dart
lib/ClueModel/page/levelTwo/LevelTwoPage.dart
+11
-5
MechanismBoxPage.dart
lib/ClueModel/page/mechanismBox/MechanismBoxPage.dart
+84
-84
MechanismModel.dart
lib/ClueModel/page/mechanismBox/MechanismModel.dart
+67
-6
FilterView.dart
lib/ClueModel/page/plan/FilterView.dart
+16
-0
PlanBar.dart
lib/ClueModel/page/plan/PlanBar.dart
+10
-6
PlanItem.dart
lib/ClueModel/page/plan/PlanItem.dart
+33
-33
PlanPage.dart
lib/ClueModel/page/plan/PlanPage.dart
+3
-3
ProjectView.dart
lib/ClueModel/page/plan/ProjectView.dart
+1
-1
SortView.dart
lib/ClueModel/page/plan/SortView.dart
+1
-1
TopPage.dart
lib/ClueModel/page/top/TopPage.dart
+8
-3
ClueApi.dart
lib/ClueModel/server/api/ClueApi.dart
+10
-2
ClueApi.serv.dart
lib/ClueModel/server/api/ClueApi.serv.dart
+25
-2
ConsultHospitalsBean.dart
lib/ClueModel/server/entity/ConsultHospitalsBean.dart
+130
-0
LevelOneFeedList.dart
lib/ClueModel/server/entity/LevelOneFeedList.dart
+6
-0
BaseComponent.dart
lib/commonModel/base/BaseComponent.dart
+6
-6
No files found.
lib/ClueModel/page/levelOne/LevelOneItem.dart
View file @
c9f21205
...
...
@@ -80,7 +80,7 @@ class LevelOneItem extends StatelessWidget {
};
RouterCenterImpl
()
.
findMainRouter
()
.
jumpPage
(
context
,
cards
.
doctor
.
messageU
rl
,
map
,
true
);
.
jumpPage
(
context
,
cards
.
doctor
.
gm_u
rl
,
map
,
true
);
},
child:
Container
(
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
),
...
...
@@ -107,7 +107,7 @@ class LevelOneItem extends StatelessWidget {
),
Positioned
(
left:
57
,
top:
1
8
,
top:
1
7
,
child:
Row
(
mainAxisSize:
MainAxisSize
.
min
,
crossAxisAlignment:
CrossAxisAlignment
.
baseline
,
...
...
@@ -117,8 +117,7 @@ class LevelOneItem extends StatelessWidget {
bold:
true
),
Container
(
margin:
EdgeInsets
.
only
(
left:
4
),
child:
baseText
(
cards
.
doctor
.
title
,
13
,
Color
(
0xff999999
),
bold:
true
),
child:
baseText
(
cards
.
doctor
.
title
,
13
,
Color
(
0xff999999
)),
)
],
),
...
...
@@ -181,7 +180,7 @@ class LevelOneItem extends StatelessWidget {
Positioned
(
left:
0
,
bottom:
0
,
child:
Container
(
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
,
height:
0.5
,
color:
Color
(
0xffE5E5E5
),
...
...
@@ -210,7 +209,7 @@ class LevelOneItem extends StatelessWidget {
};
RouterCenterImpl
()
.
findMainRouter
()
.
jumpPage
(
context
,
cards
.
hospital
.
messageU
rl
,
map
,
true
);
.
jumpPage
(
context
,
cards
.
hospital
.
gm_u
rl
,
map
,
true
);
},
child:
Container
(
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
),
...
...
@@ -233,7 +232,7 @@ class LevelOneItem extends StatelessWidget {
),
Positioned
(
left:
57
,
top:
1
7.
5
,
top:
15
,
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
-
57
,
child:
baseText
(
cards
.
hospital
.
name
,
15
,
Color
(
0xff333333
),
...
...
lib/ClueModel/page/levelOne/LevelOnePage.dart
View file @
c9f21205
...
...
@@ -278,7 +278,7 @@ class LevelOneState extends BaseState<LevelOnePage>
return
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
height:
54
,
margin:
EdgeInsets
.
only
(
top:
1
8
,
bottom:
12
),
margin:
EdgeInsets
.
only
(
top:
1
4
,
bottom:
12
),
child:
Stack
(
children:
<
Widget
>[
Positioned
(
...
...
@@ -288,7 +288,7 @@ class LevelOneState extends BaseState<LevelOnePage>
bold:
true
),
),
Positioned
(
bottom:
8
,
bottom:
6
,
left:
15
,
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
-
100
,
...
...
@@ -358,18 +358,8 @@ class LevelOneState extends BaseState<LevelOnePage>
children:
<
Widget
>[
Container
(
margin:
EdgeInsets
.
only
(
left:
2
,
right:
2
),
child:
Text
(
element
.
attrValue
,
textScaleFactor:
1.0
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
decoration:
TextDecoration
.
none
,
fontSize:
14
,
color:
Color
(
0xff282828
),
fontStyle:
FontStyle
.
normal
,
fontWeight:
FontWeight
.
w400
),
),
child:
baseText
(
element
.
attrValue
,
14
,
Color
(
0xff282828
),
bold:
true
),
),
Container
(
margin:
EdgeInsets
.
only
(
left:
2
,
right:
2
),
...
...
lib/ClueModel/page/levelTwo/LevelTwoPage.dart
View file @
c9f21205
...
...
@@ -58,6 +58,7 @@ class LevelTwoState extends BaseState<LevelTwoPage>
@override
void
initState
()
{
DioUtil
.
getInstance
().
setProxy
(
'172.30.9.253'
);
super
.
initState
();
_model
.
plan_id
=
widget
.
planId
;
_model
.
init
(()
{
...
...
@@ -340,7 +341,11 @@ class LevelTwoState extends BaseState<LevelTwoPage>
mainAxisSize:
MainAxisSize
.
min
,
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
<
Widget
>[
baseText
(
element
.
attrName
,
14
,
Color
(
0xff282828
),
bold:
true
),
Container
(
margin:
EdgeInsets
.
only
(
left:
2
,
right:
2
),
child:
baseText
(
element
.
attrName
,
14
,
Color
(
0xff282828
),
bold:
true
),
),
baseText
(
element
.
attrValue
,
11
,
Color
(
0xff999999
)),
],
),
...
...
@@ -362,7 +367,7 @@ class LevelTwoState extends BaseState<LevelTwoPage>
),
width:
double
.
maxFinite
,
height:
62
,
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
,
bottom:
20
),
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
,
bottom:
12
),
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
list
,
...
...
@@ -373,6 +378,7 @@ class LevelTwoState extends BaseState<LevelTwoPage>
Widget
explain
()
{
List
<
Widget
>
list
=
[];
list
.
add
(
Container
(
margin:
EdgeInsets
.
only
(
bottom:
4
),
height:
31
,
child:
Row
(
children:
<
Widget
>[
...
...
@@ -400,12 +406,12 @@ class LevelTwoState extends BaseState<LevelTwoPage>
if
(
_model
.
planoverItem
!=
null
)
{
_model
.
planoverItem
.
explanationAttrs
.
forEach
((
element
)
{
list
.
add
(
Container
(
margin:
EdgeInsets
.
only
(
bottom:
1
5
),
margin:
EdgeInsets
.
only
(
bottom:
1
0
),
child:
Row
(
children:
<
Widget
>[
Container
(
constraints:
BoxConstraints
(
maxWidth:
5
2
,
maxWidth:
5
4
,
),
child:
Text
(
element
.
attrName
,
...
...
@@ -445,7 +451,7 @@ class LevelTwoState extends BaseState<LevelTwoPage>
});
}
return
Container
(
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
,
bottom:
20
),
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
,
bottom:
3
),
child:
Column
(
mainAxisSize:
MainAxisSize
.
min
,
children:
list
,
...
...
lib/ClueModel/page/mechanismBox/MechanismBoxPage.dart
View file @
c9f21205
...
...
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import
'package:flutter_common/commonModel/picker/base/BaseBottomPicker.dart'
;
import
'package:flutter_common/commonModel/toast/NativeToast.dart'
;
import
'package:gm_flutter/ClueModel/page/levelOne/LevelOneListModel.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ConsultHospitalsBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/ClueModel/view/FiveStarView.dart'
;
import
'package:gm_flutter/commonModel/base/BaseComponent.dart'
;
...
...
@@ -16,9 +17,7 @@ class MechanismBox implements IBottomPicker {
VoidCallback
dismissCall
;
TextEditingController
textController
=
TextEditingController
();
MechanismModel
_model
=
new
MechanismModel
();
List
<
String
>
doctor_ids
=
new
List
();
LevelOneListModel
_levelModel
=
LevelOneListModel
();
RefreshController
refreshController
=
RefreshController
();
Function
(
String
str
)
refresh
;
...
...
@@ -35,13 +34,13 @@ class MechanismBox implements IBottomPicker {
@override
initState
(
dismissCall
,
BuildContext
context
)
{
this
.
dismissCall
=
dismissCall
;
_
levelM
odel
.
plan_id
=
plan_id
;
_
levelM
odel
.
tab_type
=
"hospital"
;
_
m
odel
.
plan_id
=
plan_id
;
_
m
odel
.
tab_type
=
"hospital"
;
_model
.
getQuestions
(
plan_id
);
_
levelM
odel
.
refreshView
(
true
);
_
m
odel
.
refreshView
(
true
);
refresh
=
(
str
)
{
_
levelM
odel
.
stateLive
.
notifyView
(
LOADING
);
_
levelM
odel
.
refreshView
(
true
);
_
m
odel
.
stateLive
.
notifyView
(
LOADING
);
_
m
odel
.
refreshView
(
true
);
};
}
...
...
@@ -93,7 +92,7 @@ class MechanismBox implements IBottomPicker {
RouterCenterImpl
().
findMainRouter
().
buriedEvent
(
"page_view"
,
map
);
textController
.
dispose
();
refreshController
.
dispose
();
_
levelM
odel
.
dispose
();
_
m
odel
.
dispose
();
_model
.
dispose
();
focusNode
.
dispose
();
}
...
...
@@ -104,8 +103,8 @@ class MechanismBox implements IBottomPicker {
children:
<
Widget
>[
title
(
mq
),
StreamBuilder
(
stream:
_
levelM
odel
.
stateLive
.
stream
,
initialData:
_
levelM
odel
.
stateLive
.
data
??
LOADING
,
stream:
_
m
odel
.
stateLive
.
stream
,
initialData:
_
m
odel
.
stateLive
.
data
??
LOADING
,
builder:
(
c
,
data
)
{
if
(
data
.
data
==
LOADING
)
{
return
Container
(
...
...
@@ -117,7 +116,7 @@ class MechanismBox implements IBottomPicker {
if
(
data
.
data
==
FAIL
)
{
return
errorItem
(
MediaQuery
.
of
(
context
).
size
.
width
,
mq
.
size
.
height
-
140
-
96
-
50
-
keyHeight
,
()
{
_
levelM
odel
.
refreshView
(
true
);
_
m
odel
.
refreshView
(
true
);
});
}
if
(
data
.
data
==
EMPTY
)
{
...
...
@@ -137,45 +136,41 @@ class MechanismBox implements IBottomPicker {
// 弹窗标题
Widget
title
(
mq
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
),
width:
mq
.
size
.
width
,
decoration:
BoxDecoration
(
border:
Border
(
bottom:
BorderSide
(
width:
.
5
,
color:
Color
(
0xffE5E5E5
)))),
height:
50
,
child:
Stack
(
alignment:
Alignment
.
center
,
children:
<
Widget
>[
Container
(
child:
Text
(
'请选择要咨询的机构'
,
style:
TextStyle
(
color:
Color
(
0xff282828
),
fontSize:
17
),
),
),
Positioned
(
right:
5
,
top:
16.5
,
child:
GestureDetector
(
onTap:
()
{
dismissCall
();
},
child:
Container
(
width:
13.5
,
height:
13.5
,
child:
Image
.
asset
(
"assets/close-btn.png"
),
return
GestureDetector
(
onTap:
()
{
dismissCall
();
},
child:
Container
(
margin:
EdgeInsets
.
only
(
left:
15
,
right:
15
),
width:
mq
.
size
.
width
,
decoration:
BoxDecoration
(
border:
Border
(
bottom:
BorderSide
(
width:
.
5
,
color:
Color
(
0xffE5E5E5
)))),
height:
50
,
child:
Stack
(
alignment:
Alignment
.
center
,
children:
<
Widget
>[
Container
(
child:
Text
(
'请选择要咨询的机构'
,
style:
TextStyle
(
color:
Color
(
0xff282828
),
fontSize:
17
),
),
))
],
),
);
),
Positioned
(
right:
5
,
top:
16.5
,
child:
Container
(
width:
13.5
,
height:
13.5
,
child:
Image
.
asset
(
"assets/close-btn.png"
),
))
],
),
));
}
// 机构列表
Widget
mechanismList
(
mq
,
keyHeight
)
{
Hospital
firstHospital
=
_levelModel
.
cardsLive
.
data
[
0
].
hospital
;
firstHospital
.
isCheck
=
true
;
doctor_ids
.
add
(
firstHospital
.
doctorId
);
return
Container
(
height:
mq
.
size
.
height
-
286
-
keyHeight
,
width:
mq
.
size
.
width
,
...
...
@@ -184,11 +179,11 @@ class MechanismBox implements IBottomPicker {
customScrollView:
CustomScrollView
(
physics:
ClampingScrollPhysics
(),
slivers:
<
Widget
>[
StreamBuilder
<
List
<
Card
s
>>(
stream:
_
levelM
odel
.
cardsLive
.
stream
,
initialData:
_
levelM
odel
.
cardsLive
.
data
??
[],
StreamBuilder
<
List
<
Hospital
s
>>(
stream:
_
m
odel
.
cardsLive
.
stream
,
initialData:
_
m
odel
.
cardsLive
.
data
??
[],
builder:
(
c
,
data
)
{
if
(
data
.
data
.
isEmpty
&&
_
levelM
odel
.
page
>
1
)
{
if
(
data
.
data
.
isEmpty
&&
_
m
odel
.
page
>
1
)
{
refreshController
.
loadNoData
();
}
else
{
refreshController
.
loadComplete
();
...
...
@@ -196,44 +191,42 @@ class MechanismBox implements IBottomPicker {
return
SliverList
(
delegate:
SliverChildBuilderDelegate
(
(
BuildContext
context
,
int
index
)
{
if
(
index
==
_
levelM
odel
.
data
.
length
)
{
if
(
index
==
_
m
odel
.
data
.
length
)
{
return
Container
(
height:
0
,
color:
Color
(
0xffF7F6FA
),
);
}
if
(
_levelModel
.
data
[
index
].
cardType
==
'hospital'
)
{
return
HospitalItem
(
_levelModel
.
data
[
index
].
hospital
,
index
);
}
else
{
return
Container
();
}
return
HospitalItem
(
_model
.
data
[
index
],
index
);
},
childCount:
_
levelM
odel
.
data
.
length
+
1
,
childCount:
_
m
odel
.
data
.
length
+
1
,
),
);
},
),
],
),
onLoading:
()
{
_
levelM
odel
.
loadMore
();
_
m
odel
.
loadMore
();
},
pullDown:
false
,
pullUp:
true
));
}
// 机构卡片
Widget
HospitalItem
(
Hospital
hospital
,
index
)
{
Widget
HospitalItem
(
Hospital
s
hospital
,
index
)
{
return
GestureDetector
(
behavior:
HitTestBehavior
.
opaque
,
onTap:
()
{
if
(
doctor_ids
.
contains
(
hospital
.
doctorId
))
{
doctor_ids
.
remove
(
hospital
.
doctorId
);
if
(
_model
.
doctor_ids
.
contains
(
hospital
.
doctorId
))
{
_model
.
doctor_ids
.
remove
(
hospital
.
doctorId
);
_model
.
hospital_ids
.
remove
(
hospital
.
hospitalId
);
}
else
{
doctor_ids
.
add
(
hospital
.
doctorId
);
_model
.
doctor_ids
.
add
(
hospital
.
doctorId
);
_model
.
hospital_ids
.
add
(
hospital
.
hospitalId
);
}
hospital
.
isCheck
=
!
hospital
.
isCheck
;
focusNode
.
unfocus
();
_levelModel
.
cardsLive
.
notifyView
(
_levelModel
.
cardsLive
.
data
);
if
(
doctor_ids
.
length
>
3
||
doctor_ids
.
length
==
0
)
{
_model
.
cardsLive
.
notifyView
(
_model
.
cardsLive
.
data
);
int
length
=
_model
.
doctor_ids
.
length
;
if
(
length
>
3
||
length
==
0
)
{
NativeToast
.
showNativeToast
(
'请选择1-3个机构咨询'
);
}
},
...
...
@@ -267,8 +260,11 @@ class MechanismBox implements IBottomPicker {
),
Positioned
(
left:
89
,
top:
16
,
child:
baseText
(
hospital
.
name
,
15
,
Color
(
0xff333333
)),
top:
13
,
child:
Container
(
width:
230
,
child:
baseText
(
hospital
.
name
,
15
,
Color
(
0xff282828
)),
),
),
Positioned
(
top:
38
,
...
...
@@ -278,18 +274,22 @@ class MechanismBox implements IBottomPicker {
mainAxisSize:
MainAxisSize
.
min
,
children:
<
Widget
>[
baseText
(
"¥"
,
12
,
Color
(
0xffFF5963
)),
baseText
(
"
${hospital.minPrice}
-
${hospital.maxPrice}
"
,
15
,
baseText
(
hospital
.
minPrice
==
hospital
.
maxPrice
?
"
${hospital.minPrice}
-
${hospital.maxPrice}
"
:
"
${hospital.minPrice}
"
,
15
,
Color
(
0xffFF5963
),
bold:
true
)
,
bold:
true
)
],
),
),
Positioned
(
bottom:
1
6
,
bottom:
1
4
,
left:
89
,
child:
Container
(
width:
230
,
child:
baseText
(
hospital
.
address
,
12
,
Color
(
0xff
666666
)),
child:
baseText
(
hospital
.
address
,
12
,
Color
(
0xff
999999
)),
),
),
Positioned
(
...
...
@@ -386,19 +386,19 @@ class MechanismBox implements IBottomPicker {
focusNode:
focusNode
,
textInputAction:
TextInputAction
.
send
,
onSubmitted:
(
txt
)
{
if
(
doctor_ids
.
length
>
3
||
doctor_ids
.
length
<
1
)
{
NativeToast
.
showNativeToast
(
'请选择1-3个机构咨询'
);
}
else
{
if
(
txt
.
isNotEmpty
)
{
_model
.
sendMessage
(
doctor_ids
.
join
(
','
),
txt
,
plan_id
,
(
i
)
{
if
(
i
==
0
)
{
dismissCall
();
textController
.
text
=
''
;
NativeToast
.
showNativeToast
(
'消息已发送成功'
)
;
}
}
);
}
print
(
_model
.
hospital_ids
.
toList
());
if
(
txt
.
isNotEmpty
)
{
_model
.
sendMessage
(
_model
.
doctor_ids
.
join
(
','
),
_model
.
hospital_ids
.
join
(
','
),
txt
,
plan_id
,
(
i
)
{
if
(
i
==
0
)
{
dismissCall
()
;
textController
.
text
=
''
;
NativeToast
.
showNativeToast
(
'消息已发送成功'
);
}
}
);
}
},
style:
...
...
@@ -411,7 +411,7 @@ class MechanismBox implements IBottomPicker {
hintStyle:
TextStyle
(
color:
Color
(
0xff999999
),
fontSize:
12
,
height:
2.
2
),
height:
2.
3
),
border:
InputBorder
.
none
));
},
))
...
...
lib/ClueModel/page/mechanismBox/MechanismModel.dart
View file @
c9f21205
...
...
@@ -2,17 +2,18 @@
* @author lsy
* @date 2020/6/29
**/
import
'dart:math'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_common/commonModel/live/BaseModel.dart'
;
import
'package:flutter_common/commonModel/live/LiveData.dart'
;
import
'package:flutter_common/commonModel/toast/NativeToast.dart'
;
import
'package:gm_flutter/ClueModel/server/api/ClueApi.serv.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ConsultHospitalsBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/commonModel/net/DioUtil.dart'
;
import
'package:gm_flutter/commonModel/rx/RxDispose.dart'
;
import
'package:gm_flutter/commonModel/util/PrintUtil.dart'
;
import
'package:gm_flutter/commonModel/bean/Pair.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
class
MechanismModel
extends
BaseModel
{
LiveData
<
List
<
String
>>
questionsLive
=
LiveData
();
...
...
@@ -21,6 +22,59 @@ class MechanismModel extends BaseModel {
LiveData
messageLive
=
LiveData
();
RxDispose
rxDispose
=
RxDispose
();
List
<
String
>
doctor_ids
=
new
List
();
List
<
String
>
hospital_ids
=
new
List
();
int
plan_id
;
String
tab_type
;
int
page
=
1
;
LiveData
<
int
>
levelStateLive
=
LiveData
();
LiveData
<
List
<
Hospitals
>>
cardsLive
=
LiveData
();
List
<
Hospitals
>
data
=
[];
void
refreshView
(
bool
clear
,
{
RefreshController
refreshListener
})
{
if
(
clear
)
{
data
.
clear
();
page
=
1
;
}
ClueApiImpl
.
getInstance
()
.
getLevelMechanismList
(
DioUtil
.
getInstance
().
getDio
(),
plan_id
,
page
)
.
listen
((
event
)
{
if
(
event
.
error
==
0
)
{
if
((
event
.
data
.
hospitals
==
null
||
event
.
data
.
hospitals
.
isEmpty
))
{
if
(
page
==
1
)
{
levelStateLive
.
notifyView
(
EMPTY
);
}
else
{
cardsLive
.
notifyView
([]);
}
}
else
{
if
(
page
==
1
)
{
for
(
var
i
=
0
;
i
<
event
.
data
.
hospitals
.
length
;
i
++)
{
if
(
i
<
3
)
{
event
.
data
.
hospitals
[
i
].
isCheck
=
true
;
doctor_ids
.
add
(
event
.
data
.
hospitals
[
i
].
doctorId
);
hospital_ids
.
add
(
event
.
data
.
hospitals
[
i
].
hospitalId
);
}
}
}
data
.
addAll
(
event
.
data
.
hospitals
);
cardsLive
.
notifyView
(
data
);
levelStateLive
.
notifyView
(
ENDLOADING
);
}
}
else
{
NativeToast
.
showNativeToast
(
event
.
message
);
levelStateLive
.
notifyView
(
FAIL
);
}
})
.
addToDispose
(
rxDispose
)
.
onError
((
err
)
{
PrintUtil
.
printBug
(
err
);
levelStateLive
.
notifyView
(
FAIL
);
});
}
getQuestions
(
int
plan_id
)
{
ClueApiImpl
.
getInstance
()
.
getConsultQuestions
(
DioUtil
.
getInstance
().
getDio
(),
plan_id
)
...
...
@@ -42,11 +96,11 @@ class MechanismModel extends BaseModel {
});
}
sendMessage
(
String
doctor_ids
,
String
question
,
int
plan_id
,
Function
(
int
state
)
func
)
{
sendMessage
(
String
doctor_ids
,
String
hospital_ids
,
String
question
,
int
plan_id
,
Function
(
int
state
)
func
)
{
ClueApiImpl
.
getInstance
()
.
sendMessage
(
DioUtil
.
getInstance
().
getDio
(),
doctor_ids
,
question
,
plan_id
)
.
sendMessage
(
DioUtil
.
getInstance
().
getDio
(),
doctor_ids
,
hospital_ids
,
question
,
plan_id
)
.
listen
((
event
)
{
print
(
event
.
toJson
());
if
(
event
.
error
==
0
)
{
...
...
@@ -67,5 +121,12 @@ class MechanismModel extends BaseModel {
questionsLive
.
dispost
();
stateLive
.
dispost
();
rxDispose
.
dispose
();
levelStateLive
.
dispost
();
cardsLive
.
dispost
();
}
void
loadMore
()
{
page
++;
refreshView
(
false
);
}
}
lib/ClueModel/page/plan/FilterView.dart
View file @
c9f21205
...
...
@@ -56,6 +56,22 @@ class FilterViewState extends State<FilterView> {
height:
186
,
child:
Stack
(
children:
<
Widget
>[
Positioned
(
top:
0
,
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
,
height:
1
,
decoration:
BoxDecoration
(
boxShadow:
[
BoxShadow
(
color:
Color
(
0x08000000
),
offset:
Offset
(
0.0
,
1.0
),
blurRadius:
6.0
,
spreadRadius:
0.0
),
],
),
),
),
Positioned
(
top:
54.5
,
right:
15
,
...
...
lib/ClueModel/page/plan/PlanBar.dart
View file @
c9f21205
...
...
@@ -66,17 +66,21 @@ class PlanBarView extends StatelessWidget {
},
child:
Container
(
alignment:
Alignment
.
center
,
height:
double
.
maxFinite
,
child:
Row
(
mainAxisSize:
MainAxisSize
.
min
,
crossAxisAlignment:
CrossAxisAlignment
.
end
,
children:
<
Widget
>[
baseText
(
text
,
14
,
index
==
showIndex
?
Color
(
0xff3FB5AF
)
:
Color
(
0xff666666
)),
Container
(
height:
double
.
maxFinite
,
alignment:
Alignment
.
center
,
child:
baseText
(
text
,
14
,
index
==
showIndex
?
Color
(
0xff3FB5AF
)
:
Color
(
0xff666666
)),
)
,
Container
(
width:
10
,
height:
13
,
padding:
EdgeInsets
.
only
(
top:
3
),
alignment:
Alignment
.
topCenter
,
alignment:
Alignment
.
center
,
height:
double
.
maxFinite
,
child:
Container
(
width:
6
,
height:
3.5
,
...
...
lib/ClueModel/page/plan/PlanItem.dart
View file @
c9f21205
...
...
@@ -56,7 +56,7 @@ class PlanItem extends StatelessWidget {
showOprea
=
showOprea
.
length
>
4
?
showOprea
.
substring
(
0
,
4
)
:
showOprea
;
}
return
Container
(
margin:
EdgeInsets
.
only
(
top:
10
,
left:
10
,
right:
10
),
margin:
EdgeInsets
.
only
(
top:
4
,
left:
10
,
right:
10
),
child:
Card
(
elevation:
3.0
,
child:
Container
(
...
...
@@ -82,13 +82,13 @@ class PlanItem extends StatelessWidget {
),
Positioned
(
left:
92
,
top:
1
4
,
top:
1
0
,
child:
Row
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisSize:
MainAxisSize
.
min
,
children:
<
Widget
>[
Container
(
constraints:
BoxConstraints
(
maxWidth:
1
2
6
),
constraints:
BoxConstraints
(
maxWidth:
1
1
6
),
child:
baseText
(
plans
.
name
,
14
,
Color
(
0xff282828
),
bold:
true
),
),
...
...
@@ -107,16 +107,15 @@ class PlanItem extends StatelessWidget {
borderRadius:
BorderRadius
.
circular
(
2
),
color:
Color
(
0xffF0F9F7
)),
alignment:
Alignment
.
center
,
child:
baseText
(
showOprea
,
11
,
Color
(
0xff3FB5AF
),
bold:
true
),
child:
baseText
(
showOprea
,
11
,
Color
(
0xff3FB5AF
)),
),
)
],
),
),
Positioned
(
top:
1
5
,
top:
1
2
,
right:
10
,
child:
Row
(
textBaseline:
TextBaseline
.
alphabetic
,
...
...
@@ -132,34 +131,35 @@ class PlanItem extends StatelessWidget {
],
),
),
Positioned
(
bottom:
16
,
right:
10
,
child:
baseText
(
"销量
${plans.salesCount}
"
,
11
,
Color
(
0xff282828
)),
),
Positioned
(
left:
91
,
bottom:
14
,
child:
Row
(
textBaseline:
TextBaseline
.
alphabetic
,
crossAxisAlignment:
CrossAxisAlignment
.
baseline
,
mainAxisSize:
MainAxisSize
.
min
,
children:
<
Widget
>[
price
==
"暂无报价"
?
Container
(
width:
0
,
height:
0
,
)
:
baseText
(
"¥"
,
12
,
Color
(
0xffFF5963
)),
baseText
(
price
,
price
==
"暂无报价"
?
13
:
15
,
price
==
"暂无报价"
?
Color
(
0xff999999
)
:
Color
(
0xffFF5963
),
bold:
price
!=
"暂无报价"
)
],
bottom:
8
,
child:
Container
(
width:
MediaQuery
.
of
(
context
).
size
.
width
-
30
-
91
-
10
,
child:
Row
(
textBaseline:
TextBaseline
.
alphabetic
,
crossAxisAlignment:
CrossAxisAlignment
.
baseline
,
mainAxisSize:
MainAxisSize
.
min
,
children:
<
Widget
>[
price
==
"暂无报价"
?
Container
(
width:
0
,
height:
0
,
)
:
baseText
(
"¥"
,
12
,
Color
(
0xffFF5963
)),
baseText
(
price
,
price
==
"暂无报价"
?
13
:
15
,
price
==
"暂无报价"
?
Color
(
0xff999999
)
:
Color
(
0xffFF5963
),
bold:
price
!=
"暂无报价"
),
Expanded
(
child:
Container
(),
),
baseText
(
"销量
${plans.salesCount}
"
,
11
,
Color
(
0xff282828
))
],
),
),
),
Positioned
(
...
...
lib/ClueModel/page/plan/PlanPage.dart
View file @
c9f21205
...
...
@@ -497,10 +497,10 @@ class PlanState extends BaseState<PlanPage> with TickerProviderStateMixin {
decoration:
BoxDecoration
(
boxShadow:
[
BoxShadow
(
color:
Color
s
.
black12
,
color:
Color
(
0x08000000
)
,
offset:
Offset
(
0.0
,
2.0
),
blurRadius:
0.5
,
spreadRadius:
0
.5
)
blurRadius:
12
,
spreadRadius:
0
)
],
color:
Colors
.
white
,
),
...
...
lib/ClueModel/page/plan/ProjectView.dart
View file @
c9f21205
...
...
@@ -102,7 +102,7 @@ class ProjectViewState extends State<ProjectView> {
child:
ListView
.
builder
(
itemBuilder:
(
c
,
index
)
{
return
Container
(
margin:
EdgeInsets
.
only
(
left:
20
,
top:
1
8
,
bottom:
18
),
margin:
EdgeInsets
.
only
(
left:
20
,
top:
1
5
,
bottom:
18
),
child:
baseText
(
widget
.
datas
[
selectIndex
].
subtags
[
index
].
name
,
14
,
Color
(
0xff464646
)),
).
gestureDetector
(()
{
...
...
lib/ClueModel/page/plan/SortView.dart
View file @
c9f21205
...
...
@@ -31,7 +31,7 @@ class SortView extends StatelessWidget {
child:
Stack
(
children:
<
Widget
>[
Positioned
(
top:
1
6
,
top:
1
3
,
child:
baseText
(
datas
[
index
].
name
,
13
,
...
...
lib/ClueModel/page/top/TopPage.dart
View file @
c9f21205
...
...
@@ -83,7 +83,9 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
@override
Widget
buildItem
(
BuildContext
context
)
{
return
Scaffold
(
body:
baseStateView
(
body:
SafeArea
(
top:
false
,
child:
baseStateView
(
MediaQuery
.
of
(
context
).
size
.
width
,
MediaQuery
.
of
(
context
).
size
.
height
,
_model
.
stateLive
,
...
...
@@ -104,7 +106,7 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
},
paddingTop:
MediaQueryData
.
fromWindow
(
window
).
padding
.
top
+
kToolbarHeight
),
);
)
)
;
}
Widget
homeWarp
()
{
...
...
@@ -138,7 +140,10 @@ class TopPageState extends BaseState<TopPage> with TickerProviderStateMixin {
}
return
false
;
},
child:
home
(),
child:
Container
(
color:
Color
(
0xffF7F6FA
),
child:
home
(),
),
),
),
baseSliverBack
(()
{
...
...
lib/ClueModel/server/api/ClueApi.dart
View file @
c9f21205
...
...
@@ -6,6 +6,7 @@ import 'package:flutter_common/Annotations/anno/Get.dart';
import
'package:flutter_common/Annotations/anno/Post.dart'
;
import
'package:flutter_common/Annotations/anno/Query.dart'
;
import
'package:flutter_common/Annotations/anno/ServiceCenter.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ConsultHospitalsBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ConsultQuestionsBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanBarBean.dart'
;
...
...
@@ -31,6 +32,10 @@ abstract class ClueApi {
LevelOneFeedList
getLevelOneList
(
@Query
(
"plan_id"
)
int
plan_id
,
@Query
(
"tab_type"
)
String
tab_type
,
@Query
(
"page"
)
int
page
);
@Get
(
"api/janus/plans/consult_hospitals"
)
ConsultHospitalsBean
getLevelMechanismList
(
@Query
(
"plan_id"
)
int
plan_id
,
@Query
(
"page"
)
int
page
);
@Get
(
"api/janus/plans/plan_compare"
)
PlanCompareDetail
getPlanCompareDetail
(
@Query
(
"plan_ids"
)
String
planIds
);
...
...
@@ -52,8 +57,11 @@ abstract class ClueApi {
ConsultQuestionsBean
getConsultQuestions
(
@Query
(
"plan_id"
)
int
plan_id
);
@Post
(
"api/janus/plans/plan_consult"
)
PlanConsultBean
sendMessage
(
@Query
(
"doctor_ids"
)
List
<
int
>
doctor_ids
,
@Query
(
"question"
)
String
question
,
@Query
(
"plan_id"
)
int
plan_id
);
PlanConsultBean
sendMessage
(
@Query
(
"doctor_ids"
)
String
doctor_ids
,
@Query
(
"hospital_ids"
)
String
hospital_ids
,
@Query
(
"question"
)
String
question
,
@Query
(
"plan_id"
)
int
plan_id
);
@Get
(
"api/janus/plans/rank"
)
PlanBarBean
getPlanBar
(
@Query
(
"rank_type"
)
String
rank_type
);
...
...
lib/ClueModel/server/api/ClueApi.serv.dart
View file @
c9f21205
...
...
@@ -17,6 +17,7 @@ import 'package:flutter/foundation.dart';
import
'package:gm_flutter/ClueModel/server/entity/ProjectDetailsItem.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlansCompareFeed.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/LevelOneFeedList.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/ConsultHospitalsBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanCompareDetail.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanBean.dart'
;
import
'package:gm_flutter/ClueModel/server/entity/PlanFeedBean.dart'
;
...
...
@@ -89,6 +90,23 @@ class ClueApiImpl {
});
}
Stream
<
ConsultHospitalsBean
>
getLevelMechanismList
(
Dio
_dio
,
int
plan_id
,
int
page
)
{
return
Stream
.
fromFuture
(
get
(
_dio
,
'api/janus/plans/consult_hospitals'
,
data:
{
'plan_id'
:
plan_id
,
'page'
:
page
,
})).
flatMap
((
value
)
{
if
(
value
!=
null
&&
(
value
.
statusCode
>=
200
&&
value
.
statusCode
<
300
))
{
return
Stream
.
fromFuture
(
compute
(
parseConsultHospitalsBean
,
value
.
toString
()));
}
else
{
throw
Exception
(
"--未知网络错误--"
);
}
});
}
Stream
<
PlanCompareDetail
>
getPlanCompareDetail
(
Dio
_dio
,
String
planIds
)
{
return
Stream
.
fromFuture
(
get
(
_dio
,
'api/janus/plans/plan_compare'
,
data:
{
'plan_ids'
:
planIds
,
...
...
@@ -159,10 +177,11 @@ class ClueApiImpl {
});
}
Stream
<
PlanConsultBean
>
sendMessage
(
Dio
_dio
,
String
doctor
_ids
,
String
question
,
int
plan_id
)
{
Stream
<
PlanConsultBean
>
sendMessage
(
Dio
_dio
,
String
doctor_ids
,
String
hospital
_ids
,
String
question
,
int
plan_id
)
{
return
Stream
.
fromFuture
(
post
(
_dio
,
'api/janus/plans/plan_consult'
,
data:
{
'doctor_ids'
:
doctor_ids
,
'hospital_ids'
:
hospital_ids
,
'question'
:
question
,
'plan_id'
:
plan_id
,
})).
flatMap
((
value
)
{
...
...
@@ -372,6 +391,10 @@ LevelOneFeedList parseLevelOneFeedList(String value) {
return
LevelOneFeedList
.
fromJson
(
json
.
decode
(
value
));
}
ConsultHospitalsBean
parseConsultHospitalsBean
(
String
value
)
{
return
ConsultHospitalsBean
.
fromJson
(
json
.
decode
(
value
));
}
PlanCompareDetail
parsePlanCompareDetail
(
String
value
)
{
return
PlanCompareDetail
.
fromJson
(
json
.
decode
(
value
));
}
...
...
lib/ClueModel/server/entity/ConsultHospitalsBean.dart
0 → 100644
View file @
c9f21205
class
ConsultHospitalsBean
{
int
error
;
String
message
;
Map
extra
;
Map
errorExtra
;
UserType
userType
;
Data
data
;
ConsultHospitalsBean
(
{
this
.
error
,
this
.
message
,
this
.
extra
,
this
.
errorExtra
,
this
.
userType
,
this
.
data
});
ConsultHospitalsBean
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
error
=
json
[
'error'
];
message
=
json
[
'message'
];
extra
=
json
[
'extra'
];
errorExtra
=
json
[
'error_extra'
];
userType
=
json
[
'user_type'
]
!=
null
?
new
UserType
.
fromJson
(
json
[
'user_type'
])
:
null
;
data
=
json
[
'data'
]
!=
null
?
new
Data
.
fromJson
(
json
[
'data'
])
:
null
;
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'error'
]
=
this
.
error
;
data
[
'message'
]
=
this
.
message
;
data
[
'extra'
]
=
this
.
extra
;
data
[
'error_extra'
]
=
this
.
errorExtra
;
if
(
this
.
userType
!=
null
)
{
data
[
'user_type'
]
=
this
.
userType
.
toJson
();
}
if
(
this
.
data
!=
null
)
{
data
[
'data'
]
=
this
.
data
.
toJson
();
}
return
data
;
}
}
class
UserType
{
UserType
();
UserType
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
return
data
;
}
}
class
Data
{
List
<
Hospitals
>
hospitals
;
Data
({
this
.
hospitals
});
Data
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
if
(
json
[
'hospitals'
]
!=
null
)
{
hospitals
=
new
List
<
Hospitals
>();
json
[
'hospitals'
].
forEach
((
v
)
{
hospitals
.
add
(
new
Hospitals
.
fromJson
(
v
));
});
}
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
if
(
this
.
hospitals
!=
null
)
{
data
[
'hospitals'
]
=
this
.
hospitals
.
map
((
v
)
=>
v
.
toJson
()).
toList
();
}
return
data
;
}
}
class
Hospitals
{
String
hospitalId
;
String
doctorId
;
String
portrait
;
String
name
;
String
minPrice
;
String
maxPrice
;
String
star
;
String
address
;
String
consultType
;
String
messageUrl
;
bool
isCheck
=
false
;
Hospitals
(
{
this
.
hospitalId
,
this
.
doctorId
,
this
.
portrait
,
this
.
name
,
this
.
minPrice
,
this
.
maxPrice
,
this
.
star
,
this
.
address
,
this
.
consultType
,
this
.
messageUrl
});
Hospitals
.
fromJson
(
Map
<
String
,
dynamic
>
json
)
{
hospitalId
=
json
[
'hospital_id'
];
doctorId
=
json
[
'doctor_id'
];
portrait
=
json
[
'portrait'
];
name
=
json
[
'name'
];
minPrice
=
json
[
'min_price'
];
maxPrice
=
json
[
'max_price'
];
star
=
json
[
'star'
];
address
=
json
[
'address'
];
consultType
=
json
[
'consult_type'
];
messageUrl
=
json
[
'message_url'
];
}
Map
<
String
,
dynamic
>
toJson
()
{
final
Map
<
String
,
dynamic
>
data
=
new
Map
<
String
,
dynamic
>();
data
[
'hosiptal_id'
]
=
this
.
hospitalId
;
data
[
'doctor_id'
]
=
this
.
doctorId
;
data
[
'portrait'
]
=
this
.
portrait
;
data
[
'name'
]
=
this
.
name
;
data
[
'min_price'
]
=
this
.
minPrice
;
data
[
'max_price'
]
=
this
.
maxPrice
;
data
[
'star'
]
=
this
.
star
;
data
[
'address'
]
=
this
.
address
;
data
[
'consult_type'
]
=
this
.
consultType
;
data
[
'message_url'
]
=
this
.
messageUrl
;
return
data
;
}
}
lib/ClueModel/server/entity/LevelOneFeedList.dart
View file @
c9f21205
...
...
@@ -211,6 +211,7 @@ class Hospital {
String
consultType
;
String
messageUrl
;
bool
isCheck
=
false
;
String
gm_url
;
Hospital
(
{
this
.
portrait
,
...
...
@@ -229,6 +230,7 @@ class Hospital {
name
=
json
[
'name'
];
minPrice
=
json
[
'min_price'
];
maxPrice
=
json
[
'max_price'
];
gm_url
=
json
[
'gm_url'
];
star
=
json
[
'star'
];
address
=
json
[
'address'
];
consultType
=
json
[
'consult_type'
];
...
...
@@ -244,6 +246,7 @@ class Hospital {
data
[
'min_price'
]
=
this
.
minPrice
;
data
[
'max_price'
]
=
this
.
maxPrice
;
data
[
'star'
]
=
this
.
star
;
data
[
'gm_url'
]
=
this
.
gm_url
;
data
[
'address'
]
=
this
.
address
;
data
[
'consult_type'
]
=
this
.
consultType
;
data
[
'message_url'
]
=
this
.
messageUrl
;
...
...
@@ -261,6 +264,7 @@ class Doctor {
String
title
;
String
consultType
;
String
messageUrl
;
String
gm_url
;
Doctor
(
{
this
.
portrait
,
...
...
@@ -278,6 +282,7 @@ class Doctor {
minPrice
=
json
[
'min_price'
];
maxPrice
=
json
[
'max_price'
];
doctor_id
=
json
[
'doctor_id'
];
gm_url
=
json
[
'gm_url'
];
star
=
json
[
'star'
];
title
=
json
[
'title'
];
consultType
=
json
[
'consult_type'
];
...
...
@@ -290,6 +295,7 @@ class Doctor {
data
[
'name'
]
=
this
.
name
;
data
[
'doctor_id'
]
=
this
.
doctor_id
;
data
[
'min_price'
]
=
this
.
minPrice
;
data
[
'gm_url'
]
=
this
.
gm_url
;
data
[
'max_price'
]
=
this
.
maxPrice
;
data
[
'star'
]
=
this
.
star
;
data
[
'title'
]
=
this
.
title
;
...
...
lib/commonModel/base/BaseComponent.dart
View file @
c9f21205
...
...
@@ -319,7 +319,7 @@ Widget baseRefreshView(RefreshController refreshController,
// body = baseText("加载失败", 12, Color(0xff545454));
// } else
if
(
mode
==
LoadStatus
.
noMore
)
{
body
=
baseText
(
"
没有更多数据了
"
,
12
,
Color
(
0xff545454
));
body
=
baseText
(
"
我们是有底线的
"
,
12
,
Color
(
0xff545454
));
}
// else {
// body = Container();
...
...
@@ -433,10 +433,10 @@ Widget baseTabBar(
color:
Colors
.
white
,
boxShadow:
[
BoxShadow
(
color:
Color
s
.
black12
,
color:
Color
(
0x08000000
)
,
offset:
Offset
(
0.0
,
2.0
),
blurRadius:
0.5
,
spreadRadius:
0
.5
)
blurRadius:
12
,
spreadRadius:
0
)
],
),
child:
TabBar
(
...
...
@@ -447,9 +447,9 @@ Widget baseTabBar(
unselectedLabelColor:
color
??
Color
(
0xffB5B5B5
),
labelColor:
color
??
Color
(
0xff282828
),
labelStyle:
TextStyle
(
fontSize:
fontSize
??
16
,
fontWeight:
FontWeight
.
w
5
00
),
TextStyle
(
fontSize:
fontSize
??
16
,
fontWeight:
FontWeight
.
w
6
00
),
unselectedLabelStyle:
TextStyle
(
fontSize:
fontSize
??
16
,
fontWeight:
FontWeight
.
w
5
00
),
TextStyle
(
fontSize:
fontSize
??
16
,
fontWeight:
FontWeight
.
w
6
00
),
labelPadding:
EdgeInsets
.
only
(),
indicator:
baseIndicator
??
BaseIndicator
(),
tabs:
list
,
...
...
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