Commit 56d95d224b95745b59e352a7f13dd4c74eb61c6c

Authored by wdn127929
1 parent 51df2b83

预订安排调整、录入联系人电话非必填、仅预订停留在当前页面刷新

import 'package:json_annotation/json_annotation.dart';
part 'base_info_model.g.dart';
import 'package:json_annotation/json_annotation.dart';
part 'base_info_model.g.dart';
@JsonSerializable()
class BaseInfoModel extends Object {
class BaseInfoModel extends Object {
@JsonKey(name: 'ret')
int ret;
... ... @@ -15,18 +13,20 @@ part 'base_info_model.g.dart';
@JsonKey(name: 'msg')
String msg;
BaseInfoModel(this.ret,this.data,this.msg,);
BaseInfoModel(
this.ret,
this.data,
this.msg,
);
factory BaseInfoModel.fromJson(Map<String, dynamic> srcJson) => _$BaseInfoModelFromJson(srcJson);
factory BaseInfoModel.fromJson(Map<String, dynamic> srcJson) =>
_$BaseInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$BaseInfoModelToJson(this);
}
@JsonSerializable()
class BaseInfoSunModel extends Object {
class BaseInfoSunModel extends Object {
@JsonKey(name: 'id')
String id;
... ... @@ -51,12 +51,23 @@ part 'base_info_model.g.dart';
@JsonKey(name: 'qrcode')
String qrcode;
BaseInfoSunModel(this.id,this.sellerid,this.uid,this.photo,this.name,this.phone,this.position,this.qrcode,);
@JsonKey(name: 'wechat')
String wechat;
factory BaseInfoSunModel.fromJson(Map<String, dynamic> srcJson) => _$BaseInfoSunModelFromJson(srcJson);
BaseInfoSunModel(
this.id,
this.sellerid,
this.uid,
this.photo,
this.name,
this.phone,
this.position,
this.qrcode,
this.wechat
);
Map<String, dynamic> toJson() => _$BaseInfoSunModelToJson(this);
factory BaseInfoSunModel.fromJson(Map<String, dynamic> srcJson) =>
_$BaseInfoSunModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$BaseInfoSunModelToJson(this);
}
... ...
... ... @@ -24,14 +24,16 @@ Map<String, dynamic> _$BaseInfoModelToJson(BaseInfoModel instance) =>
BaseInfoSunModel _$BaseInfoSunModelFromJson(Map<String, dynamic> json) {
return BaseInfoSunModel(
json['id'] as String,
json['sellerid'] as String,
json['uid'] as String,
json['photo'] as String,
json['name'] as String,
json['phone'] as String,
json['position'] as String,
json['qrcode'] as String);
json['id'] as String,
json['sellerid'] as String,
json['uid'] as String,
json['photo'] as String,
json['name'] as String,
json['phone'] as String,
json['position'] as String,
json['qrcode'] as String,
json['wechat'] as String,
);
}
Map<String, dynamic> _$BaseInfoSunModelToJson(BaseInfoSunModel instance) =>
... ... @@ -43,5 +45,6 @@ Map<String, dynamic> _$BaseInfoSunModelToJson(BaseInfoSunModel instance) =>
'name': instance.name,
'phone': instance.phone,
'position': instance.position,
'qrcode': instance.qrcode
'qrcode': instance.qrcode,
'wechat': instance.wechat
};
... ...
import 'package:json_annotation/json_annotation.dart';
part 'reserve_info_model.g.dart';
import 'package:json_annotation/json_annotation.dart';
part 'reserve_info_model.g.dart';
@JsonSerializable()
class ReserveInfoModel extends Object {
class ReserveInfoModel extends Object {
@JsonKey(name: 'ret')
int ret;
... ... @@ -15,18 +13,20 @@ part 'reserve_info_model.g.dart';
@JsonKey(name: 'msg')
String msg;
ReserveInfoModel(this.ret,this.data,this.msg,);
ReserveInfoModel(
this.ret,
this.data,
this.msg,
);
factory ReserveInfoModel.fromJson(Map<String, dynamic> srcJson) => _$ReserveInfoModelFromJson(srcJson);
factory ReserveInfoModel.fromJson(Map<String, dynamic> srcJson) =>
_$ReserveInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$ReserveInfoModelToJson(this);
}
@JsonSerializable()
class SunReserveInfoModel extends Object {
class SunReserveInfoModel extends Object {
@JsonKey(name: 'row')
RowModel row;
... ... @@ -36,18 +36,20 @@ part 'reserve_info_model.g.dart';
@JsonKey(name: 'table')
List<dynamic> table;
SunReserveInfoModel(this.row,this.list,this.table,);
SunReserveInfoModel(
this.row,
this.list,
this.table,
);
factory SunReserveInfoModel.fromJson(Map<String, dynamic> srcJson) => _$SunReserveInfoModelFromJson(srcJson);
factory SunReserveInfoModel.fromJson(Map<String, dynamic> srcJson) =>
_$SunReserveInfoModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$SunReserveInfoModelToJson(this);
}
@JsonSerializable()
class RowModel extends Object {
class RowModel extends Object {
@JsonKey(name: 'id')
String id;
... ... @@ -93,15 +95,34 @@ part 'reserve_info_model.g.dart';
@JsonKey(name: 'type')
String type;
@JsonKey(name: 'region_name')
String regionName;
@JsonKey(name: 'name')
String name;
RowModel(this.id,this.tableinfo,this.tid,this.rname,this.sex,this.phone,this.cusman,this.ddate,this.cdate,this.cusdem,this.status,this.action,this.isSetDdate,this.ddateSolt,this.type,this.name,);
factory RowModel.fromJson(Map<String, dynamic> srcJson) => _$RowModelFromJson(srcJson);
RowModel(
this.id,
this.tableinfo,
this.tid,
this.rname,
this.sex,
this.phone,
this.cusman,
this.ddate,
this.cdate,
this.cusdem,
this.status,
this.action,
this.isSetDdate,
this.ddateSolt,
this.type,
this.regionName,
this.name,
);
factory RowModel.fromJson(Map<String, dynamic> srcJson) =>
_$RowModelFromJson(srcJson);
Map<String, dynamic> toJson() => _$RowModelToJson(this);
}
... ...
... ... @@ -56,6 +56,7 @@ RowModel _$RowModelFromJson(Map<String, dynamic> json) {
json['is_set_ddate'] as String,
json['ddate_solt'] as String,
json['type'] as String,
json['region_name'] as String,
json['name'] as String);
}
... ... @@ -75,5 +76,6 @@ Map<String, dynamic> _$RowModelToJson(RowModel instance) => <String, dynamic>{
'is_set_ddate': instance.isSetDdate,
'ddate_solt': instance.ddateSolt,
'type': instance.type,
'region_name': instance.regionName,
'name': instance.name
};
... ...
... ... @@ -10,6 +10,7 @@ class User {
String sellerid; //商户id
String sellercode; //商户编号
String sellername; //商户名称
String sellerimage; //商户图片
String sellerphone; //商户电话
String sellerAddr; //商户地址
int scatter; //是否有散座 0无 1有
... ... @@ -28,6 +29,7 @@ class User {
this.sellerid,
this.sellercode,
this.sellername,
this.sellerimage,
this.sellerphone,
this.sellerAddr,
this.scatter,
... ... @@ -45,6 +47,6 @@ class User {
@override
String toString() {
return 'User{openid: $openid, account: $account, role_name: $role_name, sellerid: $sellerid, sellercode: $sellercode, sellername: $sellername, sellerphone: $sellerphone, sellerAddr: $sellerAddr, scatter: $scatter, room: $room, cassette: $cassette, morning: $morning, noon: $noon, night: $night ,userphone:$userphone},token:$token}';
return 'User{openid: $openid, account: $account, role_name: $role_name, sellerid: $sellerid, sellercode: $sellercode, sellername: $sellername,sellerimage:$sellerimage, sellerphone: $sellerphone, sellerAddr: $sellerAddr, scatter: $scatter, room: $room, cassette: $cassette, morning: $morning, noon: $noon, night: $night ,userphone:$userphone},token:$token}';
}
}
... ...
... ... @@ -14,6 +14,7 @@ User _$UserFromJson(Map<String, dynamic> json) {
json['sellerid'] as String,
json['sellercode'] as String,
json['sellername'] as String,
json['sellerimage'] as String,
json['sellerphone'] as String,
json['sellerAddr'] as String,
json['scatter'] as int,
... ... @@ -33,6 +34,7 @@ Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
'sellerid': instance.sellerid,
'sellercode': instance.sellercode,
'sellername': instance.sellername,
'sellerimage': instance.sellerimage,
'sellerphone': instance.sellerphone,
'sellerAddr': instance.sellerAddr,
'scatter': instance.scatter,
... ...
... ... @@ -500,16 +500,15 @@ class _EditReserverPageState extends State<EditReserverPage> {
if (detailModel.phoneController.text
.trim()
.length ==
.length >
0) {
Utils.showToast('请填写电话');
return;
}
if (!Utils.phoneRegExp(
detailModel.phoneController.text)) {
Utils.showToast('手机号错误,请修改正确');
return;
if (!Utils.phoneRegExp(
detailModel.phoneController.text)) {
Utils.showToast('手机号错误,请修改正确');
return;
}
}
String sex = '1';
for (var item in detailModel.sexList) {
if (item['select']) {
... ...
... ... @@ -66,7 +66,7 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
String sid = ""; //商户id
ScrollController _controller = ScrollController();
String nameStr;
String nameStr = '';
FocusNode _cusdemNode = FocusNode();
... ... @@ -115,6 +115,8 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
for (var item in widget.detailEntity.tables) {
item.selected = true;
}
nameStr = _notebookDetailChangeModel.nameController.text;
_addNameSuffix(nameStr, _nameSuffix());
Map<String, String> params = {
"uid": Provider.of<UserModel>(context, listen: false).user.openid
};
... ... @@ -1949,6 +1951,8 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
return;
}
}
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
SunReserveInfoModel _model =
_notebookDetailChangeModel.detailEntity.type ==
... ... @@ -1957,7 +1961,7 @@ class _NoteBookChangeFPageState extends State<NoteBookChangeFPage> {
await _notebookDetailChangeModel
.updateOnlineReserveInfo(context)
: await _notebookDetailChangeModel
.setReserveInfo(context);
.setReserveInfo(context, nameStr);
if (ObjectUtil.isNotEmpty(_model.row) ||
ObjectUtil.isNotEmpty(_model.row.id)) {
print('成功');
... ...
... ... @@ -133,7 +133,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
///初始化时间 半个小时
_initTime(int dateSolt) {
ddateHm = detailEntity.ddateHm;
ddateHm = detailEntity.ddateStr;
UserModel userModel = Provider.of<UserModel>(context, listen: false);
String str = '';
if (dateSolt == 1) {
... ...
This diff could not be displayed because it is too large.
... ... @@ -34,13 +34,14 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
TextEditingController _nameController = TextEditingController();
TextEditingController _phoneController = TextEditingController();
TextEditingController _positionController = TextEditingController();
TextEditingController _wechatController = TextEditingController();
FocusNode _nameFocusNode = FocusNode();
FocusNode _phoneFocusNode = FocusNode();
FocusNode _positionFocusNode = FocusNode();
FocusNode _wechatFocusNode = FocusNode();
final picker = ImagePicker();
UploadImageProvider _uploadImageProvider;
BaseIndoProvider _baseIndoProvider;
... ... @@ -74,6 +75,7 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
_uploadImageProvider.erweima.qiniuUrl =
_baseIndoProvider.baseInfoSunModel.qrcode;
_phoneController.text = _baseIndoProvider.baseInfoSunModel.phone;
_wechatController.text = _baseIndoProvider.baseInfoSunModel.wechat;
_positionController.text = _baseIndoProvider.baseInfoSunModel.position;
_uploadImageProvider.imgSizeErweima = 64;
// setState(() {});
... ... @@ -112,6 +114,9 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
} else {
params['phone'] = _phoneController.text.trim();
}
if (_wechatController.text.trim().length > 0) {
params['wechat'] = _wechatController.text;
}
if (_uploadImageProvider.erweima.qiniuUrl != null &&
_uploadImageProvider.erweima.qiniuUrl != '') {
params['qrcode'] = _uploadImageProvider.erweima.qiniuUrl;
... ... @@ -383,91 +388,108 @@ class _BaseInfoPageState extends State<BaseInfoPage> {
onTap: () {
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
},
child: Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
physics: BouncingScrollPhysics(),
child: Column(
children: [
_imageWidget('头像', _uploadImageProvider.touxiang,
_uploadImageProvider.imgSizeTouxiang, 64),
VEmptyView(30),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
child: Container(
color: MyColours.color_ffffff,
child: Column(children: [
Expanded(
child: SingleChildScrollView(
controller: _scrollController,
physics: BouncingScrollPhysics(),
child: Column(
children: [
_imageWidget(
'头像',
_uploadImageProvider.touxiang,
_uploadImageProvider.imgSizeTouxiang,
64),
VEmptyView(30),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
child: _textfield('姓名', '请填写您的姓名',
_nameController, _nameFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield('姓名', '请填写您的姓名',
_nameController, _nameFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
child: _textfield('电话', '请填写您的联系电话',
_phoneController, _phoneFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield('电话', '请填写您的联系电话',
_phoneController, _phoneFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
child: _textfield('职位', '请填写您在餐厅中担任的职位',
_positionController, _positionFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(40),
_imageWidget('微信二维码', _uploadImageProvider.erweima,
_uploadImageProvider.imgSizeErweima, 0),
VEmptyView(30),
],
)),
),
VEmptyView(20),
Padding(
padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () {
//接口
_setCustomerActivityBaseinfo();
},
text: '保存',
fontSize: 34,
isBold: false,
height: ScreenUtil().setWidth(80),
width: double.infinity,
radius: ScreenUtil().setWidth(10),
))
]))));
VEmptyView(10),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield(
'职位',
'请填写您在餐厅中担任的职位',
_positionController,
_positionFocusNode)),
VEmptyView(10),
Container(
height: ScreenUtil().setWidth(2),
color: MyColours.color_efefef,
margin: EdgeInsets.only(
left: ScreenUtil().setWidth(108 * 2),
right: ScreenUtil().setWidth(40)),
),
VEmptyView(40),
// _imageWidget('微信二维码', _uploadImageProvider.erweima,
// _uploadImageProvider.imgSizeErweima, 0),
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
child: _textfield('微信号', '请填写您的微信号',
_wechatController, _wechatFocusNode)),
VEmptyView(30),
],
)),
),
VEmptyView(20),
Padding(
padding: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(40),
0,
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () {
//接口
_setCustomerActivityBaseinfo();
},
text: '保存',
fontSize: 34,
isBold: false,
height: ScreenUtil().setWidth(80),
width: double.infinity,
radius: ScreenUtil().setWidth(10),
))
])))));
}
}
... ...
... ... @@ -511,13 +511,13 @@ class TableManagerPageState extends State<TableManagerPage> {
bus.emit("refresh_tablemanager"); //刷新当前页面
bus.emit("refresh_book_list"); //刷新已预订列表
//进入订座详情页面
NavigatorUtil.goNotebookDetailPage(
context,
_model.row.id,
Provider.of<UserModel>(context, listen: false)
.user
.openid,
);
// NavigatorUtil.goNotebookDetailPage(
// context,
// _model.row.id,
// Provider.of<UserModel>(context, listen: false)
// .user
// .openid,
// );
// String ddate_solt = '';
// if (_model.row.isSetDdate == '1') {
// String createtime =
... ...
... ... @@ -28,6 +28,7 @@ class CouponProvider with ChangeNotifier {
List<CouponSunModel> couponListHistory = []; //优惠券历史列表
List<CouponSunModel> couponList = []; //优惠券列表
List<CouponSunModel> couponListSelect = []; //优惠券选择列表
int index = 0; //选中的优惠券index
CouponProvider() {
// for (int i = 0; i < 20; i++) {
... ... @@ -250,7 +251,7 @@ class CouponProvider with ChangeNotifier {
return couponListHistory;
}
///客户经理获取所创建活动列表(选择优惠券)
///客户经理获取所创建活动列表(选择优惠券)
Future<List<CouponSunModel>> getCustomerSelectActivityNew(
BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
... ... @@ -285,28 +286,28 @@ class CouponProvider with ChangeNotifier {
pageStateSelect = PageState.Success;
}
couponListSelect = CouponModel.fromJson(baseResp.responseData).data;
if (hasModify) {
//已经绑定
List<CouponSunModel> temp = [];
for (int i = 0; i < couponListSelect.length; i++) {
for (int j = 0; j < coupons.length; j++) {
if (couponListSelect[i].id == coupons[j]) {
temp.add(couponListSelect[i]);
}
}
}
couponListSelect = temp;
} else {
for (int i = 0; i < couponListSelect.length; i++) {
for (int j = 0; j < coupons.length; j++) {
if (couponListSelect[i].id == coupons[j]) {
couponListSelect[i].isCheck = true;
}
}
}
}
// if (hasModify) {
// //已经绑定
// List<CouponSunModel> temp = [];
// for (int i = 0; i < couponListSelect.length; i++) {
// for (int j = 0; j < coupons.length; j++) {
// if (couponListSelect[i].id == coupons[j]) {
// temp.add(couponListSelect[i]);
// }
// }
// }
// couponListSelect = temp;
// } else {
// for (int i = 0; i < couponListSelect.length; i++) {
// for (int j = 0; j < coupons.length; j++) {
// if (couponListSelect[i].id == coupons[j]) {
// couponListSelect[i].isCheck = true;
// }
// }
// }
// }
getCheckValue();
// getCheckValue();
notifyListeners();
} else {
pageStateSelect = PageState.ConnectivityError;
... ... @@ -454,10 +455,15 @@ class CouponProvider with ChangeNotifier {
if (baseResp.data == null) {
hasModify = false;
} else {
couponListSelect = CouponModel.fromJson(baseResp.responseData).data;
List<CouponSunModel> coupon =
CouponModel.fromJson(baseResp.responseData).data;
for (int i = 0; i < couponListSelect.length; i++) {
coupons.add(couponListSelect[i].id);
// coupons.add(couponListSelect[i].id);
// couponsShow.add(couponTemp[i].id);
if (coupon[0].id == couponListSelect[i].id) {
index = i;
}
}
hasModify = true;
notifyListeners();
... ... @@ -561,7 +567,7 @@ class CouponProvider with ChangeNotifier {
if (baseResp.code == Constant.status_success) {
if (baseResp.data != null) {
sunModel = AddForwardModel.fromJson(baseResp.responseData).data;
return true;
} else {
// Utils.showToast(baseResp.msg ?? "修改失败");
... ...
... ... @@ -73,6 +73,7 @@ class NotebookDetailChangeModel with ChangeNotifier {
if (detailEntity.rnameStr != '') {
nameController.text = detailEntity.rname;
}
if (detailEntity.cusdem != '') {
customController.text = detailEntity.cusdem;
}
... ... @@ -102,7 +103,7 @@ class NotebookDetailChangeModel with ChangeNotifier {
// getReserveList(context, needLoading: false);
}
_returnDate(DateTime day) {
_returnDate(DateTime day) {
// String time = Utils.lunarCalendarHolidays(day);
String date = _returnDayDateWeek(day);
// date += ' ${time}';
... ... @@ -531,7 +532,8 @@ class NotebookDetailChangeModel with ChangeNotifier {
}
///录入更改内部预订
Future<SunReserveInfoModel> setReserveInfo(BuildContext context) async {
Future<SunReserveInfoModel> setReserveInfo(
BuildContext context, String nameStr) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
// String tempTime;
... ... @@ -621,7 +623,7 @@ class NotebookDetailChangeModel with ChangeNotifier {
if (detailEntity.id.isNotEmpty && detailEntity.id != "-1") {
params['rid'] = detailEntity.id;
}
if (nameController.text.trim().length > 0) {
if (nameStr.trim().length > 0) {
String sex = '1';
for (var item in sexList) {
if (item['select']) {
... ... @@ -629,7 +631,7 @@ class NotebookDetailChangeModel with ChangeNotifier {
}
}
params['rname'] = nameController.text; //预订人姓名
params['rname'] = nameStr; //预订人姓名
params['sex'] = sex; //预订人性别:1:男 2:女
}
if (phoneController.text.trim().length > 0) {
... ...
... ... @@ -224,7 +224,7 @@ class NotebookDetailModel extends ChangeNotifier {
if (name != null) {
params['rname'] = name;
}
if (phone != null) {
if (phone != null && phone != '') {
params['phone'] = phone;
}
bool sucess =
... ...
... ... @@ -60,6 +60,7 @@ class UserModel with ChangeNotifier {
"account": user['account'],
"role_name": user['role_name'],
"sellerid": seller['id'],
"sellerimage": seller['seller_image'],
"sellercode": params['seller_code'],
"sellername": seller['sellername'],
"sellerphone": seller['seller_tel'],
... ...
... ... @@ -28,466 +28,474 @@ import 'package:webview_flutter/webview_flutter.dart';
import '../app.dart';
typedef BookTimeSetCallback = void Function(bool needChange);
const int START_YEAR = 1901;
const int END_YEAR = 2050;
const List gLunarHolDay = [
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1901
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1902
class Utils {
//人数
static List<String> getPersonNumList() {
List<String> personNumList = [];
for (int i = 1; i < 31; i++) {
personNumList.add(i.toString());
}
personNumList.add('30以上');
return personNumList;
}
static String getLunarSpecialDate(DateTime dateTime) {
String _day = '';
int iYear = dateTime.year;
int iMonth = dateTime.month;
int iDay = dateTime.day;
const List gLunarHolDay = [
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1901
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
0X78, //1903
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1902
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
0X87, //1904
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
0X78, //1903
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1905
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
0X87, //1904
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1906
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1905
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
0X78, //1907
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1906
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1908
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
0X78, //1907
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1909
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1908
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1910
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1909
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
0X78, //1911
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1910
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1912
0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
0X78, //1911
0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1913
0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1912
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1914
0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1913
0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
0X78, //1915
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1914
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1916
0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
0X78, //1915
0X95, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X87, //1917
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1916
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X77, //1918
0X95, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X87, //1917
0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
0X78, //1919
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X77, //1918
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1920
0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
0X78, //1919
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X87, //1921
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1920
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X77, //1922
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X87, //1921
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
0X78, //1923
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X77, //1922
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1924
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
0X78, //1923
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X87, //1925
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1924
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1926
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X87, //1925
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1927
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1926
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1928
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1927
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1929
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1928
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1930
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1929
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1931
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1930
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1932
0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1931
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1933
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1932
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1934
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1933
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1935
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1934
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1936
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1935
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1937
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1936
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1938
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1937
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1939
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1938
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1940
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1939
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1941
0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1940
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1942
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1941
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1943
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1942
0X96, 0XA5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1944
0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1943
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1945
0X96, 0XA5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1944
0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1946
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1945
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1947
0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1946
0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1948
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1947
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X79, 0X77,
0X87, //1949
0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1948
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1950
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X79, 0X77,
0X87, //1949
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1951
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1950
0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1952
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
0X78, //1951
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1953
0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1952
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X68, 0X78,
0X87, //1954
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1953
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1955
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X68, 0X78,
0X87, //1954
0X96, 0XA5, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1956
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1955
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1957
0X96, 0XA5, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1956
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1958
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1957
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1959
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1958
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1960
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1959
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1961
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1960
0X96, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1962
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1961
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1963
0X96, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1962
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1964
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1963
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1965
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1964
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1966
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1965
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1967
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1966
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1968
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1967
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1969
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1968
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1970
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1969
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1971
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1970
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1972
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
0X77, //1971
0XA5, 0XB5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1973
0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1972
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1974
0XA5, 0XB5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1973
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1975
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1974
0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X89, 0X88, 0X78, 0X87,
0X87, //1976
0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1975
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1977
0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X89, 0X88, 0X78, 0X87,
0X87, //1976
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
0X87, //1978
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1977
0X96, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1979
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
0X87, //1978
0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1980
0X96, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1979
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X77,
0X87, //1981
0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1980
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1982
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X77,
0X87, //1981
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1983
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1982
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //1984
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
0X77, //1983
0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1985
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //1984
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1986
0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //1985
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X69, 0X78,
0X87, //1987
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1986
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //1988
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X69, 0X78,
0X87, //1987
0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1989
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //1988
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1990
0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1989
0X95, 0XB4, 0X96, 0XA5, 0X86, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1991
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //1990
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //1992
0X95, 0XB4, 0X96, 0XA5, 0X86, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1991
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1993
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //1992
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1994
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1993
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X76, 0X78, 0X69, 0X78,
0X87, //1995
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1994
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //1996
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X76, 0X78, 0X69, 0X78,
0X87, //1995
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1997
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //1996
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1998
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //1997
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1999
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //1998
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2000
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //1999
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2001
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2000
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //2002
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2001
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //2003
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //2002
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2004
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //2003
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2005
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2004
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2006
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2005
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //2007
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2006
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2008
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
0X87, //2007
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2009
0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2008
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2010
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2009
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
0X87, //2011
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2010
0X96, 0XB4, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2012
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
0X87, //2011
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //2013
0X96, 0XB4, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2012
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2014
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //2013
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //2015
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2014
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2016
0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //2015
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //2017
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2016
0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2018
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //2017
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //2019
0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2018
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X86, //2020
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //2019
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2021
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X86, //2020
0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2022
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2021
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //2023
0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2022
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2024
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
0X87, //2023
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2025
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2024
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2026
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2025
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //2027
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2026
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2028
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //2027
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2029
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2028
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2030
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2029
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //2031
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2030
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2032
0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
0X87, //2031
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X86, //2033
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2032
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X78, 0X88, 0X78, 0X87,
0X87, //2034
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X86, //2033
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2035
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X78, 0X88, 0X78, 0X87,
0X87, //2034
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2036
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2035
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2037
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2036
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2038
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X86, //2037
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2039
0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2038
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2040
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2039
0XA5, 0XC3, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2041
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X96, //2040
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2042
0XA5, 0XC3, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2041
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2043
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
0X87, //2042
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X88, 0X87,
0X96, //2044
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2043
0XA5, 0XC3, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2045
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X88, 0X87,
0X96, //2044
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //2046
0XA5, 0XC3, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
0X86, //2045
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2047
0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
0X87, //2046
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA5, 0X97, 0X87, 0X87, 0X88, 0X86,
0X96, //2048
0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
0X87, //2047
0XA4, 0XC3, 0XA5, 0XA5, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X86, //2049
0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA5, 0X97, 0X87, 0X87, 0X88, 0X86,
0X96, //2048
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X78, 0X78, 0X87,
0X87 //2050
];
0XA4, 0XC3, 0XA5, 0XA5, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
0X86, //2049
class Utils {
static String getLunarSpecialDate(DateTime dateTime) {
String _day = '';
int iYear = dateTime.year;
int iMonth = dateTime.month;
int iDay = dateTime.day;
0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X78, 0X78, 0X87,
0X87 //2050
];
List chineseDays = [
"小寒",
"大寒",
... ... @@ -514,6 +522,8 @@ class Utils {
"大雪",
"冬至"
];
const int START_YEAR = 1901;
const int END_YEAR = 2050;
int array_index = (iYear - START_YEAR) * 12 + iMonth - 1;
... ...