|
...
|
...
|
@@ -21,7 +21,6 @@ import 'package:one_key/widgets/v_empty_view.dart'; |
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
class NotebookDetailPage extends StatefulWidget {
|
|
|
|
|
|
|
|
final String rid;
|
|
|
|
|
|
|
|
NotebookDetailPage(this.rid);
|
|
...
|
...
|
@@ -34,227 +33,366 @@ class NotebookDetailPage extends StatefulWidget { |
|
|
|
}
|
|
|
|
|
|
|
|
class NotebookDetailPageState extends State<NotebookDetailPage> {
|
|
|
|
|
|
|
|
NotebookDetailModel detailModel= NotebookDetailModel();
|
|
|
|
NotebookDetailModel detailModel = NotebookDetailModel();
|
|
|
|
|
|
|
|
NotebookDetail detailEntity;
|
|
|
|
|
|
|
|
String cusmanText="";
|
|
|
|
|
|
|
|
List<Manager> managers=[];//客户经理
|
|
|
|
String cusmanText = "";
|
|
|
|
|
|
|
|
List<Manager> managers = []; //客户经理
|
|
|
|
|
|
|
|
Manager manager=Manager();
|
|
|
|
Manager manager = Manager();
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
// TODO: implement initState
|
|
|
|
super.initState();
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
|
|
|
detailEntity=await detailModel.getReserveDetail(context, {
|
|
|
|
"rid":widget.rid,
|
|
|
|
detailEntity = await detailModel.getReserveDetail(context, {
|
|
|
|
"rid": widget.rid,
|
|
|
|
});
|
|
|
|
setState(() {
|
|
|
|
cusmanText=detailEntity.cusman.isEmpty?"请选择":detailEntity.cusman;
|
|
|
|
cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
|
|
|
|
});
|
|
|
|
managers=await detailModel.getManagers(context);
|
|
|
|
managers = await detailModel.getManagers(context);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
//设置当前客户经理
|
|
|
|
_setCurrManager(){
|
|
|
|
manager=managers.firstWhere((manager)=>manager.userName==cusmanText,orElse: ()=>Manager());
|
|
|
|
if(manager.id==null||manager.id.toString().isEmpty)return;
|
|
|
|
Map<String,String> params={
|
|
|
|
"rid":detailEntity.id,
|
|
|
|
"cusman_id":manager.id.toString(),
|
|
|
|
"cusman":manager.userName
|
|
|
|
_setCurrManager() {
|
|
|
|
manager = managers.firstWhere((manager) => manager.userName == cusmanText,
|
|
|
|
orElse: () => Manager());
|
|
|
|
if (manager.id == null || manager.id.toString().isEmpty) return;
|
|
|
|
Map<String, String> params = {
|
|
|
|
"rid": detailEntity.id,
|
|
|
|
"cusman_id": manager.id.toString(),
|
|
|
|
"cusman": manager.userName
|
|
|
|
};
|
|
|
|
detailModel.setReserveCusmnan(context, params);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 取消预订, 变更预订按钮
|
|
|
|
Widget _cancelAndChangeBtn(GestureTapCallback onTap, String title) {
|
|
|
|
return InkWell(
|
|
|
|
onTap: onTap,
|
|
|
|
child: Align(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
child: Text(title,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_199095,
|
|
|
|
fontSize: ScreenUtil().setSp(34))),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
// TODO: implement build
|
|
|
|
return SafeArea(
|
|
|
|
child: detailEntity==null?Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: double.infinity,
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
):Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
MyAppBar(
|
|
|
|
"订座详情",
|
|
|
|
showBack: true,
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: DefaultTextStyle(style: TextStyle(decoration: TextDecoration.none),child: Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
child: SingleChildScrollView(
|
|
|
|
child: Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
padding:
|
|
|
|
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(43)),
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
RowMultiText("用餐时段", detailEntity.ddateMd),
|
|
|
|
Stack(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Column(
|
|
|
|
children: <Widget>[
|
|
|
|
RowMultiText("用餐时间", detailEntity.ddateHm),
|
|
|
|
Offstage(
|
|
|
|
offstage: detailEntity.type=="0"?false:true,
|
|
|
|
child: RowMultiText("用餐人数", detailEntity.pnum),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
Image.asset(detailEntity.statuImgAssets,width: ScreenUtil().setWidth(100),height: ScreenUtil().setWidth(30),)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
Offstage(
|
|
|
|
offstage: detailEntity.demands.length<=0?true:false,
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
RowMultiText("包间需求", (detailEntity.demands.length.toString()+"个")??""),
|
|
|
|
Align(
|
|
|
|
alignment: Alignment.centerRight,
|
|
|
|
child: Offstage(
|
|
|
|
offstage: detailEntity.demands.length>0?false:true,
|
|
|
|
child: Container(
|
|
|
|
height: ScreenUtil().setHeight(210),
|
|
|
|
child: ListView.builder(itemBuilder: (BuildContext contxt,int index){
|
|
|
|
return NeedItem(detailEntity.demands[index]);
|
|
|
|
},itemCount: detailEntity.demands.length,shrinkWrap: true,scrollDirection: Axis.horizontal,),
|
|
|
|
child: detailEntity == null
|
|
|
|
? Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: double.infinity,
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
)
|
|
|
|
: Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
MyAppBar(
|
|
|
|
"订座详情",
|
|
|
|
showBack: true,
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: DefaultTextStyle(
|
|
|
|
style: TextStyle(decoration: TextDecoration.none),
|
|
|
|
child: Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
child: SingleChildScrollView(
|
|
|
|
child: Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
padding: EdgeInsets.symmetric(
|
|
|
|
horizontal: ScreenUtil().setWidth(43)),
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
RowMultiText("用餐时段", detailEntity.ddateMd),
|
|
|
|
Stack(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Column(
|
|
|
|
children: <Widget>[
|
|
|
|
RowMultiText(
|
|
|
|
"用餐时间", detailEntity.ddateHm),
|
|
|
|
Offstage(
|
|
|
|
offstage: detailEntity.type == "0"
|
|
|
|
? false
|
|
|
|
: true,
|
|
|
|
child: RowMultiText(
|
|
|
|
"用餐人数", detailEntity.pnum),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
Image.asset(
|
|
|
|
detailEntity.statuImgAssets,
|
|
|
|
width: ScreenUtil().setWidth(100),
|
|
|
|
height: ScreenUtil().setWidth(30),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
RowMultiText("预订桌位", (detailEntity.tables.length.toString()+"个")),
|
|
|
|
Align(
|
|
|
|
alignment: Alignment.centerRight,
|
|
|
|
child: Offstage(
|
|
|
|
offstage: detailEntity.tables.length>0?false:true,
|
|
|
|
child: Container(
|
|
|
|
height: ScreenUtil().setHeight(210),
|
|
|
|
child: ListView.builder(itemBuilder: (BuildContext contxt,int index){
|
|
|
|
return TableItem(detailEntity.tables[index]);
|
|
|
|
},itemCount: detailEntity.tables.length,shrinkWrap: true,scrollDirection: Axis.horizontal,),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
),
|
|
|
|
RowMultiText("客户姓名", detailEntity.rnameStr),
|
|
|
|
RowMultiText("客户电话", detailEntity.phone??""),
|
|
|
|
RowMultiText("备注信息",detailEntity.cusdem??""),
|
|
|
|
MyDivider(double.infinity, ScreenUtil().setHeight(1)),
|
|
|
|
Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
width: double.infinity,
|
|
|
|
height: ScreenUtil().setHeight(80),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
child: Stack(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Positioned(
|
|
|
|
left: 0,
|
|
|
|
child: Text(
|
|
|
|
"客户经理",
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_828282,
|
|
|
|
fontSize: ScreenUtil().setSp(30)),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Positioned(
|
|
|
|
right: 0,
|
|
|
|
child: GestureDetector(
|
|
|
|
onTap: () async {
|
|
|
|
List<String> list=[];
|
|
|
|
for(Manager manager in managers){
|
|
|
|
list.add(manager.roleUserName);
|
|
|
|
}
|
|
|
|
DialogUtil.showSelectCusmanDialog(context,list).then((value){
|
|
|
|
if(value!=null){
|
|
|
|
setState(() {
|
|
|
|
cusmanText=managers[value.first].userName;
|
|
|
|
});
|
|
|
|
_setCurrManager();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
child: Text(
|
|
|
|
cusmanText,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize: ScreenUtil().setSp(30),
|
|
|
|
decoration: TextDecoration.underline,
|
|
|
|
Offstage(
|
|
|
|
offstage: detailEntity.demands.length <= 0
|
|
|
|
? true
|
|
|
|
: false,
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
RowMultiText(
|
|
|
|
"包间需求",
|
|
|
|
(detailEntity.demands.length
|
|
|
|
.toString() +
|
|
|
|
"个") ??
|
|
|
|
""),
|
|
|
|
Align(
|
|
|
|
alignment: Alignment.centerRight,
|
|
|
|
child: Offstage(
|
|
|
|
offstage: detailEntity
|
|
|
|
.demands.length >
|
|
|
|
0
|
|
|
|
? false
|
|
|
|
: true,
|
|
|
|
child: Container(
|
|
|
|
height: ScreenUtil()
|
|
|
|
.setHeight(210),
|
|
|
|
child: ListView.builder(
|
|
|
|
itemBuilder:
|
|
|
|
(BuildContext contxt,
|
|
|
|
int index) {
|
|
|
|
return NeedItem(
|
|
|
|
detailEntity
|
|
|
|
.demands[index]);
|
|
|
|
},
|
|
|
|
itemCount: detailEntity
|
|
|
|
.demands.length,
|
|
|
|
shrinkWrap: true,
|
|
|
|
scrollDirection:
|
|
|
|
Axis.horizontal,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
))
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
RowMultiText(
|
|
|
|
"预订桌位",
|
|
|
|
(detailEntity.tables.length.toString() +
|
|
|
|
"个")),
|
|
|
|
Align(
|
|
|
|
alignment: Alignment.centerRight,
|
|
|
|
child: Offstage(
|
|
|
|
offstage:
|
|
|
|
detailEntity.tables.length > 0
|
|
|
|
? false
|
|
|
|
: true,
|
|
|
|
child: Container(
|
|
|
|
height: ScreenUtil().setHeight(210),
|
|
|
|
child: ListView.builder(
|
|
|
|
itemBuilder: (BuildContext contxt,
|
|
|
|
int index) {
|
|
|
|
return TableItem(
|
|
|
|
detailEntity.tables[index]);
|
|
|
|
},
|
|
|
|
itemCount:
|
|
|
|
detailEntity.tables.length,
|
|
|
|
shrinkWrap: true,
|
|
|
|
scrollDirection: Axis.horizontal,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)),
|
|
|
|
RowMultiText("客户姓名", detailEntity.rnameStr),
|
|
|
|
RowMultiText(
|
|
|
|
"客户电话", detailEntity.phone ?? ""),
|
|
|
|
RowMultiText(
|
|
|
|
"备注信息", detailEntity.cusdem ?? ""),
|
|
|
|
MyDivider(double.infinity,
|
|
|
|
ScreenUtil().setHeight(1)),
|
|
|
|
Container(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
width: double.infinity,
|
|
|
|
height: ScreenUtil().setHeight(80),
|
|
|
|
alignment: Alignment.center,
|
|
|
|
child: Stack(
|
|
|
|
alignment: Alignment.center,
|
|
|
|
children: <Widget>[
|
|
|
|
Positioned(
|
|
|
|
left: 0,
|
|
|
|
child: Text(
|
|
|
|
"客户经理",
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_828282,
|
|
|
|
fontSize:
|
|
|
|
ScreenUtil().setSp(30)),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Positioned(
|
|
|
|
right: 0,
|
|
|
|
child: GestureDetector(
|
|
|
|
onTap: () async {
|
|
|
|
List<String> list = [];
|
|
|
|
for (Manager manager
|
|
|
|
in managers) {
|
|
|
|
list.add(
|
|
|
|
manager.roleUserName);
|
|
|
|
}
|
|
|
|
DialogUtil
|
|
|
|
.showSelectCusmanDialog(
|
|
|
|
context, list)
|
|
|
|
.then((value) {
|
|
|
|
if (value != null) {
|
|
|
|
setState(() {
|
|
|
|
cusmanText =
|
|
|
|
managers[value.first]
|
|
|
|
.userName;
|
|
|
|
});
|
|
|
|
_setCurrManager();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
child: Text(
|
|
|
|
cusmanText,
|
|
|
|
style: TextStyle(
|
|
|
|
color: MyColours.color_353535,
|
|
|
|
fontSize:
|
|
|
|
ScreenUtil().setSp(30),
|
|
|
|
decoration:
|
|
|
|
TextDecoration.underline,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
RowMultiText(
|
|
|
|
"记录人", detailEntity.note_name ?? ""),
|
|
|
|
Offstage(
|
|
|
|
offstage: (detailEntity.status == "4" &&
|
|
|
|
detailEntity.cancel != null)
|
|
|
|
? false
|
|
|
|
: true,
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
MyDivider(double.infinity,
|
|
|
|
ScreenUtil().setHeight(2)),
|
|
|
|
RowMultiText("取消原因",
|
|
|
|
detailEntity.cancel?.desc ?? ""),
|
|
|
|
RowMultiText(
|
|
|
|
"取消时间",
|
|
|
|
detailEntity.cancel?.cdateStr ??
|
|
|
|
""),
|
|
|
|
RowMultiText("操作人",
|
|
|
|
detailEntity.cancel?.uname ?? ""),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
),
|
|
|
|
RowMultiText("记录人", detailEntity.note_name??""),
|
|
|
|
Offstage(
|
|
|
|
offstage: (detailEntity.status=="4"&&detailEntity.cancel!=null)?false:true,
|
|
|
|
child: Column(
|
|
|
|
children: <Widget>[
|
|
|
|
MyDivider(double.infinity, ScreenUtil().setHeight(2)),
|
|
|
|
RowMultiText("取消原因", detailEntity.cancel?.desc??""),
|
|
|
|
RowMultiText("取消时间", detailEntity.cancel?.cdateStr??""),
|
|
|
|
RowMultiText("操作人", detailEntity.cancel?.uname??""),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
)),
|
|
|
|
),
|
|
|
|
Offstage(
|
|
|
|
offstage: (detailEntity.status == "3" ||
|
|
|
|
detailEntity.status == "4" ||
|
|
|
|
detailEntity.status == "6")
|
|
|
|
? true
|
|
|
|
: false,
|
|
|
|
child: Container(
|
|
|
|
width: double.infinity,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
border: Border(
|
|
|
|
top: BorderSide(
|
|
|
|
color: MyColours.color_dbe3e3,
|
|
|
|
width: ScreenUtil().setWidth(1)))),
|
|
|
|
padding: EdgeInsets.symmetric(
|
|
|
|
horizontal: ScreenUtil().setHeight(40)),
|
|
|
|
margin: EdgeInsets.symmetric(
|
|
|
|
vertical: ScreenUtil().setHeight(20)),
|
|
|
|
child: CommonButton(
|
|
|
|
content: "通知客户",
|
|
|
|
width: 669,
|
|
|
|
height: 80,
|
|
|
|
fontSize: 34,
|
|
|
|
onPress: () {
|
|
|
|
DialogUtil.showShareDialog(context)?.then((value) {
|
|
|
|
switch (value) {
|
|
|
|
case 1: //微信
|
|
|
|
NavigatorUtil.goInvicationPage(
|
|
|
|
context,
|
|
|
|
detailEntity.id,
|
|
|
|
detailEntity.tableinfoStr,
|
|
|
|
detailEntity.ddate,
|
|
|
|
detailEntity.ddateStr);
|
|
|
|
break;
|
|
|
|
case 2: //短信
|
|
|
|
NavigatorUtil.goSmsPage(
|
|
|
|
context, detailEntity.id);
|
|
|
|
break;
|
|
|
|
case 3: //电话
|
|
|
|
if (detailEntity.phone != null &&
|
|
|
|
detailEntity.phone.isNotEmpty) {
|
|
|
|
Utils.goPhone(detailEntity.phone);
|
|
|
|
} else {
|
|
|
|
Utils.showToast("没有客户电话!");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
Offstage(
|
|
|
|
offstage: (detailEntity.status == "3" ||
|
|
|
|
detailEntity.status == "4" ||
|
|
|
|
detailEntity.status == "6")
|
|
|
|
? true
|
|
|
|
: false,
|
|
|
|
child: Container(
|
|
|
|
width: double.infinity,
|
|
|
|
height: ScreenUtil().setWidth(80),
|
|
|
|
margin: EdgeInsets.symmetric(
|
|
|
|
horizontal: ScreenUtil().setHeight(40)),
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
border: Border.all(
|
|
|
|
color: MyColours.color_199095,
|
|
|
|
width: ScreenUtil().setWidth(2)),
|
|
|
|
borderRadius:
|
|
|
|
BorderRadius.circular(ScreenUtil().setWidth(5)),
|
|
|
|
),
|
|
|
|
// child: Text('fff'),
|
|
|
|
child: Material(
|
|
|
|
child: Row(
|
|
|
|
children: [
|
|
|
|
Expanded(
|
|
|
|
child: _cancelAndChangeBtn(() {
|
|
|
|
print('点击变更预订');
|
|
|
|
}, '变更预订')),
|
|
|
|
MyDivider(
|
|
|
|
ScreenUtil().setWidth(2),
|
|
|
|
ScreenUtil().setWidth(50),
|
|
|
|
color: MyColours.color_199095,
|
|
|
|
),
|
|
|
|
Expanded(
|
|
|
|
child: _cancelAndChangeBtn(() {
|
|
|
|
print('点击取消预订');
|
|
|
|
}, '取消预订')),
|
|
|
|
],
|
|
|
|
)),
|
|
|
|
),
|
|
|
|
)),
|
|
|
|
),
|
|
|
|
Offstage(
|
|
|
|
offstage: (detailEntity.status=="3"||detailEntity.status=="4"||detailEntity.status=="6")?true:false,
|
|
|
|
child: Container(
|
|
|
|
width: double.infinity,
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
color: MyColours.color_ffffff,
|
|
|
|
border: Border(top:BorderSide(color: MyColours.color_dbe3e3,width: ScreenUtil().setWidth(1)))
|
|
|
|
),
|
|
|
|
padding: EdgeInsets.symmetric(vertical: ScreenUtil().setHeight(20),horizontal: ScreenUtil().setHeight(36)),
|
|
|
|
child:CommonButton(
|
|
|
|
content: "通知顾客",
|
|
|
|
width: 669,
|
|
|
|
height: 80,
|
|
|
|
fontSize: 34,
|
|
|
|
onPress: () {
|
|
|
|
DialogUtil.showShareDialog(context)?.then((value){
|
|
|
|
switch(value){
|
|
|
|
case 1://微信
|
|
|
|
NavigatorUtil.goInvicationPage(context,detailEntity.id,detailEntity.tableinfoStr,detailEntity.ddate,detailEntity.ddateStr);
|
|
|
|
break;
|
|
|
|
case 2://短信
|
|
|
|
NavigatorUtil.goSmsPage(context, detailEntity.id);
|
|
|
|
break;
|
|
|
|
case 3://电话
|
|
|
|
if(detailEntity.phone!=null&&detailEntity.phone.isNotEmpty){
|
|
|
|
Utils.goPhone(detailEntity.phone);
|
|
|
|
}else{
|
|
|
|
Utils.showToast("没有客户电话!");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
VEmptyView(ScreenUtil().setWidth(60))
|
|
|
|
],
|
|
|
|
),
|
|
|
|
)
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|