tplus-portaltouch 3.17.14 → 3.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,23 +50,13 @@ var _themeModal = require('./themeModal');
50
50
 
51
51
  var _themeModal2 = _interopRequireDefault(_themeModal);
52
52
 
53
- var _uploadList = require('./uploadList');
54
-
55
- var _uploadList2 = _interopRequireDefault(_uploadList);
56
-
57
- var _mobxReact = require('mobx-react');
58
-
59
- var _offlinePointDesc = require('./offlinePointDesc');
60
-
61
53
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
62
54
 
55
+ require('../../utils/networkCheck');
63
56
  var Item = _antd.Menu.Item;
64
57
 
65
58
  var defaultFromat = 'yyyy-MM-dd hh:mm:ss';
66
- var t = _mutantsMicrofx.i18n.getFixedT(null, 'newretail');
67
- var UPLOAD_BASE_PATH = '/login';
68
- var NETWORK_THEME_PATH = "/";
69
- var weakRemindNum = 0; // 弱网提示初始值
59
+
70
60
  //头部时间
71
61
  function HeadTime(props) {
72
62
  var time = props.time,
@@ -121,396 +111,34 @@ function HeadTime(props) {
121
111
  }
122
112
 
123
113
  //头部联网状态
124
- var OnLineStatus = (0, _mobxReact.observer)(function (props) {
114
+ function OnLineStatus(props) {
125
115
  var networkStatus = props.networkStatus;
126
- var networkCheckStore = _mutantsMicrofx.stores.networkCheckStore;
127
-
128
- var networkState = networkCheckStore.networkState;
129
- var networkOn = true;
130
- var iconName = 'WiFi';
131
- switch (networkState) {
132
- case '联网':
133
- iconName = 'WiFi';
134
- break;
135
- case '弱网':
136
- iconName = 'ruowifi';
137
- break;
138
- case '离线':
139
- networkOn = false;
140
- iconName = 'wuwangluo';
141
- break;
142
- default:
143
- break;
144
- }
145
- var switchNetwork = function switchNetwork(checked, event) {
146
- networkCheckStore.switchOnLine(checked);
147
- };
148
- var lineIcon = _react2.default.createElement(_tplusComponentsTouch.Ticon, {
149
- icon: iconName,
150
- className: 'network-state-icon'
151
- });
152
- return _react2.default.createElement(
153
- 'div',
154
- null,
155
- _react2.default.createElement(
156
- 'span',
157
- { className: 'network-status', style: { marginRight: '10px' } },
158
- networkStatus || lineIcon
159
- ),
160
- _react2.default.createElement(
161
- 'span',
162
- null,
163
- _react2.default.createElement(_antd.Switch, { checkedChildren: '\u5F00\u542F', unCheckedChildren: '\u5173\u95ED', defaultChecked: true, checked: networkOn, onChange: switchNetwork })
164
- )
165
- );
166
- });
167
-
168
- //头部联网状态
169
- var OnLineStatusToggle = (0, _mobxReact.observer)(function (props) {
170
- var isOfflineCash = (0, _tplusPoslogin.PosInitData)('IsOfflineCash') === "1";
171
- var isShowUploadBtnsByRouter = props.isShowUploadBtnsByRouter,
172
- isResetNetWorkTheme = props.isResetNetWorkTheme;
173
- var networkCheckStore = _mutantsMicrofx.stores.networkCheckStore,
174
- offlineSys = _mutantsMicrofx.stores.offlineSys;
175
-
176
- var networkState = networkCheckStore.networkState;
177
- var isOnLine = !offlineSys.isOffline;
178
- var iconName = 'WiFi';
179
- if (isOfflineCash) {
180
- switch (networkState) {
181
- case '联网':
182
- iconName = 'WiFi';
183
- break;
184
- case '弱网':
185
- iconName = 'ruowifi';
186
- break;
187
- case '离线':
188
- isOnLine = false;
189
- offlineSys.setIsOffline(!isOnLine);
190
- iconName = 'wuwangluo';
191
- break;
192
- default:
193
- break;
194
- }
195
- if (networkState === '弱网' && weakRemindNum <= 3) {
196
- weakRemindNum++;
197
- _tplusComponentsTouch.ModalWraper.confirm({
198
- title: t('提示'),
199
- content: t('当前网络不好,是否切换到离线?'),
200
- onOk: function onOk() {
201
- setOffLine();
202
- }
203
- });
204
- }
205
- }
206
116
 
207
- function switchStatus() {
208
- if (networkState === '离线') {
209
- _tplusComponentsTouch.Message.tip('当前无网络,无法切换为在线状态');
210
- return;
211
- }
212
- _tplusComponentsTouch.ModalWraper.confirm({
213
- title: t('提示'),
214
- content: t('\u786E\u5B9A\u8981\u5207\u6362\u4E3A' + (isOnLine ? '离' : '在') + '\u7EBF\u73AF\u5883\u5417\uFF1F'),
215
- onOk: function onOk() {
216
- if (isOnLine) {
217
- setOffLine();
218
- return;
219
- }
220
- offlineSys.setIsOffline(isOnLine);
221
- }
222
- });
223
- }
224
- function setOffLine() {
225
- if (offlineSys.getDataIsOffline()) {
226
- offlineSys.setIsOffline(true);
227
- } else {
228
- _tplusComponentsTouch.ModalWraper.confirm({
229
- title: t('提示'),
230
- content: t('数据还未下载完,是否切换到离线?'),
231
- onOk: function onOk() {
232
- offlineSys.setIsOffline(true);
233
- }
234
- });
235
- }
236
- }
237
- return _react2.default.createElement(
238
- 'div',
239
- { className: 'on-off-wrap' },
240
- _react2.default.createElement(
241
- 'div',
242
- { className: 'status-square' },
243
- _react2.default.createElement(
244
- 'span',
245
- { className: 'status-tog-btn', style: { color: '' + (isResetNetWorkTheme ? '#fff' : '') } },
246
- _react2.default.createElement(_tplusComponentsTouch.Ticon, { icon: iconName })
247
- )
248
- ),
249
- isShowUploadBtnsByRouter && isOfflineCash && _react2.default.createElement(
250
- 'div',
251
- { className: 'status-square c-pointer online-status-bg ' + (isOnLine || isResetNetWorkTheme ? '' : 'off-line') },
252
- _react2.default.createElement(
253
- 'span',
254
- { className: 'status-tog-btn', onClick: switchStatus },
255
- _react2.default.createElement(
256
- 'span',
257
- null,
258
- isOnLine ? '在线' : '离线'
259
- ),
260
- _react2.default.createElement(
261
- 'span',
262
- null,
263
- _react2.default.createElement(_tplusComponentsTouch.Ticon, { icon: 'zaixianlixian', className: 'ts-14' })
264
- )
265
- ),
266
- _react2.default.createElement(
267
- _antd.Popover,
268
- { placement: 'bottom', overlayClassName: 'offline-popver', content: _react2.default.createElement(
269
- 'pre',
270
- null,
271
- _offlinePointDesc.OFFLINE_POINT_DESC
272
- ), trigger: 'hover' },
273
- _react2.default.createElement(
274
- 'span',
275
- { className: 'status-tog-btn' },
276
- _react2.default.createElement(_tplusComponentsTouch.Ticon, { icon: 'tanhao1' })
277
- )
278
- )
279
- )
280
- );
281
- });
282
-
283
- //零售单上传
284
- function RetailUpload() {
285
- var _this = this;
286
-
287
- var _useState3 = (0, _react.useState)(false),
117
+ var _useState3 = (0, _react.useState)((navigator || {}).onLine ? '联网' : '离线'),
288
118
  _useState4 = (0, _slicedToArray3.default)(_useState3, 2),
289
- isModalVisible = _useState4[0],
290
- setIsModalVisible = _useState4[1];
291
-
292
- var _useState5 = (0, _react.useState)(false),
293
- _useState6 = (0, _slicedToArray3.default)(_useState5, 2),
294
- isUpLoading = _useState6[0],
295
- setIsUpLoading = _useState6[1];
296
-
297
- var refModal = (0, _react.useRef)(null);
298
- var showModal = function () {
299
- var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
300
- return _regenerator2.default.wrap(function _callee$(_context) {
301
- while (1) {
302
- switch (_context.prev = _context.next) {
303
- case 0:
304
- refModal && refModal.current.fetch();
305
- setIsModalVisible(true);
306
-
307
- case 2:
308
- case 'end':
309
- return _context.stop();
310
- }
311
- }
312
- }, _callee, _this);
313
- }));
314
-
315
- return function showModal() {
316
- return _ref3.apply(this, arguments);
317
- };
318
- }();
319
-
320
- var handleOk = function () {
321
- var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() {
322
- var isUpLoad = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
323
- return _regenerator2.default.wrap(function _callee2$(_context2) {
324
- while (1) {
325
- switch (_context2.prev = _context2.next) {
326
- case 0:
327
- setIsModalVisible(false);
328
-
329
- if (isUpLoad) {
330
- _context2.next = 4;
331
- break;
332
- }
333
-
334
- _tplusComponentsTouch.Message.tip('暂无可以上传的单据');
335
- return _context2.abrupt('return');
336
-
337
- case 4:
338
- if (!isUpLoading) {
339
- _context2.next = 7;
340
- break;
341
- }
342
-
343
- _tplusComponentsTouch.Message.tip('零售单正在上传……');
344
- return _context2.abrupt('return');
345
-
346
- case 7:
347
- setIsUpLoading(true);
348
- _context2.prev = 8;
349
- _context2.next = 11;
350
- return _mutantsMicrofx.stores.offlineSys.uploadRetail();
119
+ networkState = _useState4[0],
120
+ setNetworkStatus = _useState4[1];
351
121
 
352
- case 11:
353
- _tplusComponentsTouch.Message.success('零售单上传成功');
354
- _context2.next = 17;
355
- break;
356
-
357
- case 14:
358
- _context2.prev = 14;
359
- _context2.t0 = _context2['catch'](8);
360
-
361
- _tplusComponentsTouch.Message.error('上传失败');
362
-
363
- case 17:
364
- setIsUpLoading(false);
365
-
366
- case 18:
367
- case 'end':
368
- return _context2.stop();
369
- }
370
- }
371
- }, _callee2, _this, [[8, 14]]);
372
- }));
373
-
374
- return function handleOk() {
375
- return _ref4.apply(this, arguments);
122
+ var checkNetwork = new CheckNetwork(function (status) {
123
+ var state = "online" != status ? '离线' : '联网';
124
+ setNetworkStatus(state);
125
+ });
126
+ (0, _react.useEffect)(function () {
127
+ return function () {
128
+ checkNetwork.destroy();
376
129
  };
377
- }();
378
-
379
- var handleCancel = function handleCancel() {
380
- setIsModalVisible(false);
381
- };
130
+ }, [networkState]);
131
+ var lineIcon = _react2.default.createElement(_tplusComponentsTouch.Ticon, {
132
+ icon: '' + (networkState === '联网' ? 'WiFi' : 'wuwangluo'),
133
+ className: 'network-state-icon'
134
+ });
382
135
  return _react2.default.createElement(
383
136
  'div',
384
- { className: 'upload-retail' },
385
- _react2.default.createElement(
386
- 'div',
387
- { className: 'status-square online-status-bg c-pointer', onClick: showModal },
388
- _react2.default.createElement(
389
- 'span',
390
- { className: 'status-tog-btn' },
391
- _react2.default.createElement(
392
- 'span',
393
- { className: '' + (isUpLoading ? 'isRetailUpLoading' : '') },
394
- _react2.default.createElement(_tplusComponentsTouch.Ticon, { icon: 'shangchuan' })
395
- ),
396
- _react2.default.createElement(
397
- 'span',
398
- { className: 'fast-upload-btn' },
399
- '\u4E0A\u4F20\u96F6\u552E\u5355'
400
- )
401
- )
402
- ),
403
- _react2.default.createElement(UnLoadNum, null),
404
- _react2.default.createElement(_uploadList2.default, { ref: refModal, visible: isModalVisible, handleOk: handleOk, handleCancel: handleCancel })
137
+ { className: 'network-status' },
138
+ networkStatus || lineIcon
405
139
  );
406
140
  }
407
- // 零售单未上传的数量
408
- var UnLoadNum = (0, _mobxReact.observer)(function () {
409
- var retailNotUploadNumber = _mutantsMicrofx.stores.offlineSys.retailNotUploadNumber;
410
141
 
411
- return _react2.default.createElement(
412
- 'span',
413
- { style: { display: retailNotUploadNumber > 0 ? 'inherit' : 'none' }, className: 'up-count-btn' },
414
- retailNotUploadNumber > 99 ? '99+' : retailNotUploadNumber
415
- );
416
- });
417
- //零售单下载
418
- function RetailDownload() {
419
- var _this2 = this;
420
-
421
- var offlineSys = _mutantsMicrofx.stores.offlineSys;
422
-
423
- var _useState7 = (0, _react.useState)(false),
424
- _useState8 = (0, _slicedToArray3.default)(_useState7, 2),
425
- isDownload = _useState8[0],
426
- setIsDownload = _useState8[1];
427
-
428
- var _useState9 = (0, _react.useState)('下载数据'),
429
- _useState10 = (0, _slicedToArray3.default)(_useState9, 2),
430
- downStr = _useState10[0],
431
- setDownStr = _useState10[1];
432
-
433
- var handleDownLoad = function () {
434
- var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3() {
435
- var result;
436
- return _regenerator2.default.wrap(function _callee3$(_context3) {
437
- while (1) {
438
- switch (_context3.prev = _context3.next) {
439
- case 0:
440
- if (!isDownload) {
441
- _context3.next = 3;
442
- break;
443
- }
444
-
445
- _tplusComponentsTouch.Message.tip('下载中……');
446
- return _context3.abrupt('return');
447
-
448
- case 3:
449
- setDownStr('0 %');
450
- setIsDownload(true);
451
- _tplusComponentsTouch.Message.tip('下载中……');
452
- _context3.prev = 6;
453
- _context3.next = 9;
454
- return offlineSys.downloadCatcherData(function (e) {
455
- setDownStr(e.percent + ' %');
456
- });
457
-
458
- case 9:
459
- result = _context3.sent;
460
-
461
- if (result) {
462
- _tplusComponentsTouch.Message.success('\u6570\u636E\u4E0B\u8F7D\u6210\u529F');
463
- } else {
464
- _tplusComponentsTouch.Message.error('\u6570\u636E\u4E0B\u8F7D\u5931\u8D25');
465
- }
466
- _context3.next = 16;
467
- break;
468
-
469
- case 13:
470
- _context3.prev = 13;
471
- _context3.t0 = _context3['catch'](6);
472
-
473
- _tplusComponentsTouch.Message.error('数据下载失败');
474
-
475
- case 16:
476
- setDownStr('下载数据');
477
- setIsDownload(false);
478
-
479
- case 18:
480
- case 'end':
481
- return _context3.stop();
482
- }
483
- }
484
- }, _callee3, _this2, [[6, 13]]);
485
- }));
486
-
487
- return function handleDownLoad() {
488
- return _ref5.apply(this, arguments);
489
- };
490
- }();
491
- return _react2.default.createElement(
492
- 'div',
493
- { className: 'download-retail' },
494
- _react2.default.createElement(
495
- 'div',
496
- { className: 'status-square online-status-bg c-pointer', onClick: handleDownLoad },
497
- _react2.default.createElement(
498
- 'span',
499
- { className: 'status-tog-btn' },
500
- _react2.default.createElement(
501
- 'span',
502
- { className: '' + (isDownload ? 'isRetailDownLoading' : '') },
503
- _react2.default.createElement(_tplusComponentsTouch.Ticon, { icon: 'xiazaishuju' })
504
- ),
505
- _react2.default.createElement(
506
- 'span',
507
- { className: 'fast-upload-btn' },
508
- downStr
509
- )
510
- )
511
- )
512
- );
513
- }
514
142
  var releaseDate = void 0,
515
143
  releaseVersion = void 0;
516
144
  try {
@@ -543,25 +171,11 @@ function HeadContent(props, context) {
543
171
  onClick = props.onClick,
544
172
  location = props.location;
545
173
 
546
- var _useState11 = (0, _react.useState)(false),
547
- _useState12 = (0, _slicedToArray3.default)(_useState11, 2),
548
- themeVisible = _useState12[0],
549
- setThemeVisible = _useState12[1];
550
-
551
- var _useState13 = (0, _react.useState)(window.location.href.indexOf(UPLOAD_BASE_PATH) < 0),
552
- _useState14 = (0, _slicedToArray3.default)(_useState13, 2),
553
- isShowUploadBtnsByRouter = _useState14[0],
554
- setIsShowUploadBtnsByRouter = _useState14[1];
555
-
556
- var _useState15 = (0, _react.useState)(window.location.pathname === NETWORK_THEME_PATH),
557
- _useState16 = (0, _slicedToArray3.default)(_useState15, 2),
558
- isResetNetWorkTheme = _useState16[0],
559
- setIsResetNetWorkTheme = _useState16[1];
174
+ var _useState5 = (0, _react.useState)(false),
175
+ _useState6 = (0, _slicedToArray3.default)(_useState5, 2),
176
+ themeVisible = _useState6[0],
177
+ setThemeVisible = _useState6[1];
560
178
 
561
- props.history.listen(function (route) {
562
- setIsResetNetWorkTheme(route.pathname === NETWORK_THEME_PATH);
563
- setIsShowUploadBtnsByRouter(route.pathname.indexOf(UPLOAD_BASE_PATH) < 0);
564
- });
565
179
  var menuProps = { onClick: onClick };
566
180
  var menus = _react2.default.createElement(
567
181
  _antd.Menu,
@@ -589,12 +203,12 @@ function HeadContent(props, context) {
589
203
  title: '关闭提示',
590
204
  content: '您确定要关闭应用吗?',
591
205
  onOk: function onOk() {
592
- var _this3 = this;
206
+ var _this = this;
593
207
 
594
- return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4() {
595
- return _regenerator2.default.wrap(function _callee4$(_context4) {
208
+ return (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
209
+ return _regenerator2.default.wrap(function _callee$(_context) {
596
210
  while (1) {
597
- switch (_context4.prev = _context4.next) {
211
+ switch (_context.prev = _context.next) {
598
212
  case 0:
599
213
  _tplusComponentsTouch.Loading.show({
600
214
  className: 'close-app-loading',
@@ -611,8 +225,8 @@ function HeadContent(props, context) {
611
225
  delay: false
612
226
  });
613
227
  context.actionHook.actionChange('close-app');
614
- _context4.prev = 2;
615
- _context4.next = 5;
228
+ _context.prev = 2;
229
+ _context.next = 5;
616
230
  return _tplusApi.User.logout(function () {
617
231
  setTimeout(function () {
618
232
  _mutantsMicrofx.nativeMs.doWindow(item.event);
@@ -620,12 +234,12 @@ function HeadContent(props, context) {
620
234
  });
621
235
 
622
236
  case 5:
623
- _context4.next = 12;
237
+ _context.next = 12;
624
238
  break;
625
239
 
626
240
  case 7:
627
- _context4.prev = 7;
628
- _context4.t0 = _context4['catch'](2);
241
+ _context.prev = 7;
242
+ _context.t0 = _context['catch'](2);
629
243
 
630
244
  _tplusApi.User.clear();
631
245
  _mutantsMicrofx.localStore.remove('user');
@@ -635,10 +249,10 @@ function HeadContent(props, context) {
635
249
 
636
250
  case 12:
637
251
  case 'end':
638
- return _context4.stop();
252
+ return _context.stop();
639
253
  }
640
254
  }
641
- }, _callee4, _this3, [[2, 7]]);
255
+ }, _callee, _this, [[2, 7]]);
642
256
  }))();
643
257
  }
644
258
  });
@@ -656,8 +270,8 @@ function HeadContent(props, context) {
656
270
  };
657
271
 
658
272
  var setInventoryFocus = function setInventoryFocus() {
659
- var _ref6 = _mutantsUtil.platform || {},
660
- isHorizontalPad = _ref6.isHorizontalPad;
273
+ var _ref3 = _mutantsUtil.platform || {},
274
+ isHorizontalPad = _ref3.isHorizontalPad;
661
275
 
662
276
  if (!!isHorizontalPad) return;
663
277
  var doms = document.getElementsByClassName('app hot-key-focus-container');
@@ -740,9 +354,7 @@ function HeadContent(props, context) {
740
354
  _react2.default.createElement('i', { className: 'header-triangle-down' })
741
355
  )
742
356
  ),
743
- _react2.default.createElement(OnLineStatusToggle, { isShowUploadBtnsByRouter: isShowUploadBtnsByRouter, isResetNetWorkTheme: isResetNetWorkTheme }),
744
- isShowUploadBtnsByRouter && _react2.default.createElement(RetailUpload, null),
745
- isShowUploadBtnsByRouter && _react2.default.createElement(RetailDownload, null)
357
+ _react2.default.createElement(OnLineStatus, { OnLineStatus: networkStatus })
746
358
  ),
747
359
  isElectron && headControlNode,
748
360
  _react2.default.createElement(
@@ -1 +1 @@
1
- {"version":3,"sources":["tplus-portaltouch/components/header/headContent.js"],"names":["HeadContent","Item","Menu","defaultFromat","t","i18n","getFixedT","UPLOAD_BASE_PATH","NETWORK_THEME_PATH","weakRemindNum","HeadTime","props","time","dateFormat","unMount","timeStr","Date","now","currentTime","setCurrentTime","timeout","refreshDate","setTimeout","clearTimeout","split","date_YMD","date_HMS","platform","isVerticalTouch","OnLineStatus","networkStatus","networkCheckStore","stores","networkState","networkOn","iconName","switchNetwork","checked","event","switchOnLine","lineIcon","marginRight","OnLineStatusToggle","isOfflineCash","isShowUploadBtnsByRouter","isResetNetWorkTheme","offlineSys","isOnLine","isOffline","setIsOffline","ModalWraper","confirm","title","content","onOk","setOffLine","switchStatus","Message","tip","getDataIsOffline","color","OFFLINE_POINT_DESC","RetailUpload","isModalVisible","setIsModalVisible","isUpLoading","setIsUpLoading","refModal","showModal","current","fetch","handleOk","isUpLoad","uploadRetail","success","error","handleCancel","UnLoadNum","retailNotUploadNumber","display","RetailDownload","isDownload","setIsDownload","downStr","setDownStr","handleDownLoad","downloadCatcherData","e","percent","result","releaseDate","releaseVersion","__RELEASESDATE__","__BUILDVERSION__","context","isElectron","env","businessName","storeName","posCode","logo","style","history","solt","isPortal","isLogin","menu","onClick","location","themeVisible","setThemeVisible","window","href","indexOf","setIsShowUploadBtnsByRouter","pathname","setIsResetNetWorkTheme","listen","route","menuProps","menus","map","item","i","key","icon","controlConfig","type","beforeEvent","className","Loading","show","node","delay","actionHook","actionChange","User","logout","nativeMs","doWindow","clear","localStore","remove","splitUser","value","regEmail","RegExp","isEmail","test","setInventoryFocus","isHorizontalPad","doms","document","getElementsByClassName","input","getElementById","length","console","log","focus","clickTheme","isShow","userName","overlayClassName","moreInfoNode","headControlNode","v","width","height","replace","preventDefault","contextTypes","PropTypes","object"],"mappings":"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","file":"headContent.js","sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\r\nimport { Ticon, ModalWraper, Loading, Spin, Message } from 'tplus-components-touch';\r\nimport { Tooltip, Menu, Dropdown, Switch, Popover } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport { formatDate } from '../../utils';\r\nimport { env, nativeMs, localStore, i18n } from 'mutants-microfx';\r\nimport { PosInitData } from 'tplus-poslogin';\r\nimport { User } from 'tplus-api';\r\nimport { verticalHeadTime, verticalHeadContent } from './vertical-touch';\r\nimport { platform } from 'mutants-util';\r\nimport ThemeModal from \"./themeModal\";\r\nimport UploadOrder from \"./uploadList\";\r\nimport {stores} from 'mutants-microfx';\r\nimport {observer} from 'mobx-react';\r\nimport {OFFLINE_POINT_DESC} from './offlinePointDesc';\r\nconst { Item } = Menu;\r\nconst defaultFromat = 'yyyy-MM-dd hh:mm:ss';\r\nconst t = i18n.getFixedT(null, 'newretail');\r\nconst UPLOAD_BASE_PATH = '/login';\r\nconst NETWORK_THEME_PATH = \"/\";\r\nlet weakRemindNum = 0;// 弱网提示初始值\r\n//头部时间\r\nfunction HeadTime(props) {\r\n const { time, dateFormat } = props;\r\n let unMount = false;\r\n const timeStr = typeof time === 'number' ? formatDate(time, dateFormat) : time;\r\n const [currentTime, setCurrentTime] = useState(formatDate(Date.now(), dateFormat));\r\n let timeout;\r\n function refreshDate() {\r\n if (time) return;\r\n !unMount && setCurrentTime(formatDate(Date.now(), dateFormat));\r\n timeout = setTimeout(refreshDate, 1000);\r\n }\r\n useEffect(() => {\r\n refreshDate();\r\n return () => {\r\n unMount = true;\r\n clearTimeout(timeout);\r\n };\r\n }, [currentTime]);\r\n const [date_YMD, date_HMS] = currentTime.split(' ') || [];\r\n\r\n if (platform.isVerticalTouch) return verticalHeadTime({ date_HMS });\r\n return (\r\n <div className='time'>\r\n {timeStr ?\r\n <div>{timeStr}</div> :\r\n <div>\r\n {date_YMD}\r\n <span>{date_HMS}</span>\r\n </div>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\n//头部联网状态\r\nconst OnLineStatus = observer((props)=>{\r\n const { networkStatus } = props;\r\n const { networkCheckStore } = stores;\r\n const networkState = networkCheckStore.networkState;\r\n let networkOn = true;\r\n let iconName = 'WiFi';\r\n switch (networkState) {\r\n case '联网':\r\n iconName = 'WiFi';\r\n break;\r\n case '弱网':\r\n iconName = 'ruowifi';\r\n break;\r\n case '离线':\r\n networkOn = false;\r\n iconName = 'wuwangluo';\r\n break;\r\n default:\r\n break;\r\n }\r\n const switchNetwork = (checked ,event)=>{\r\n networkCheckStore.switchOnLine(checked);\r\n }\r\n const lineIcon = <Ticon\r\n icon={iconName}\r\n className=\"network-state-icon\"\r\n />\r\n return (\r\n <div><span className='network-status' style={{marginRight:'10px'}}>{networkStatus || lineIcon}</span><span><Switch checkedChildren=\"开启\" unCheckedChildren=\"关闭\" defaultChecked checked={networkOn} onChange={switchNetwork}/></span></div>\r\n );\r\n});\r\n\r\n//头部联网状态\r\nconst OnLineStatusToggle = observer(props => {\r\n const isOfflineCash = PosInitData('IsOfflineCash') === \"1\";\r\n const { isShowUploadBtnsByRouter, isResetNetWorkTheme } = props;\r\n const { networkCheckStore , offlineSys } = stores;\r\n const networkState = networkCheckStore.networkState;\r\n let isOnLine = !offlineSys.isOffline\r\n let iconName = 'WiFi';\r\n if (isOfflineCash) {\r\n switch (networkState) {\r\n case '联网':\r\n iconName = 'WiFi';\r\n break;\r\n case '弱网':\r\n iconName = 'ruowifi';\r\n break;\r\n case '离线':\r\n isOnLine = false;\r\n offlineSys.setIsOffline(!isOnLine);\r\n iconName = 'wuwangluo';\r\n break;\r\n default:\r\n break;\r\n }\r\n if (networkState === '弱网' && weakRemindNum <= 3) {\r\n weakRemindNum ++;\r\n ModalWraper.confirm({\r\n title: t('提示'),\r\n content: t('当前网络不好,是否切换到离线?'),\r\n onOk: () => {\r\n setOffLine();\r\n }\r\n });\r\n }\r\n }\r\n\r\n function switchStatus() {\r\n if (networkState === '离线') {\r\n Message.tip('当前无网络,无法切换为在线状态');\r\n return;\r\n }\r\n ModalWraper.confirm({\r\n title: t('提示'),\r\n content: t(`确定要切换为${isOnLine ? '离' : '在'}线环境吗?`),\r\n onOk: () => {\r\n if (isOnLine) {\r\n setOffLine();\r\n return;\r\n }\r\n offlineSys.setIsOffline(isOnLine);\r\n }\r\n });\r\n }\r\n function setOffLine() {\r\n if (offlineSys.getDataIsOffline()) {\r\n offlineSys.setIsOffline(true);\r\n } else {\r\n ModalWraper.confirm({\r\n title: t('提示'),\r\n content: t('数据还未下载完,是否切换到离线?'),\r\n onOk: () => {\r\n offlineSys.setIsOffline(true);\r\n }\r\n });\r\n }\r\n }\r\n return (\r\n <div className='on-off-wrap'>\r\n <div className='status-square'>\r\n <span className=\"status-tog-btn\" style={{color: `${isResetNetWorkTheme ? '#fff' : ''}`}}>{<Ticon icon={iconName}/>}</span>\r\n </div>\r\n { isShowUploadBtnsByRouter && isOfflineCash && <div className={`status-square c-pointer online-status-bg ${isOnLine || isResetNetWorkTheme ? '' : 'off-line'}`}>\r\n <span className=\"status-tog-btn\" onClick={switchStatus}>\r\n <span>{isOnLine ? '在线' : '离线'}</span>\r\n <span>{<Ticon icon=\"zaixianlixian\" className=\"ts-14\"/>}</span>\r\n </span>\r\n <Popover placement=\"bottom\" overlayClassName={'offline-popver'} content={<pre>{OFFLINE_POINT_DESC}</pre>} trigger=\"hover\">\r\n <span className=\"status-tog-btn\">{<Ticon icon=\"tanhao1\"/>}</span>\r\n </Popover>\r\n </div>}\r\n </div>\r\n );\r\n});\r\n\r\n//零售单上传\r\nfunction RetailUpload() {\r\n const [isModalVisible, setIsModalVisible] = useState(false);\r\n const [isUpLoading, setIsUpLoading] = useState(false);\r\n const refModal = useRef(null);\r\n const showModal = async () => {\r\n refModal && refModal.current.fetch();\r\n setIsModalVisible(true);\r\n };\r\n\r\n const handleOk = async (isUpLoad = false) => {\r\n setIsModalVisible(false);\r\n if (!isUpLoad) {\r\n Message.tip('暂无可以上传的单据');\r\n return;\r\n }\r\n if (isUpLoading) {\r\n Message.tip('零售单正在上传……');\r\n return;\r\n }\r\n setIsUpLoading(true);\r\n try {\r\n await stores.offlineSys.uploadRetail();\r\n Message.success('零售单上传成功');\r\n } catch (err) {\r\n Message.error('上传失败');\r\n }\r\n setIsUpLoading(false);\r\n };\r\n\r\n const handleCancel = () => {\r\n setIsModalVisible(false);\r\n };\r\n return (\r\n <div className='upload-retail'>\r\n <div className=\"status-square online-status-bg c-pointer\" onClick={showModal}>\r\n <span className=\"status-tog-btn\">\r\n <span className={`${isUpLoading ? 'isRetailUpLoading' : ''}`}>{<Ticon icon=\"shangchuan\"/>}</span>\r\n <span className=\"fast-upload-btn\">上传零售单</span>\r\n </span>\r\n </div>\r\n <UnLoadNum/>\r\n <UploadOrder ref={refModal} visible={isModalVisible} handleOk={handleOk} handleCancel={handleCancel}/>\r\n </div>\r\n );\r\n}\r\n// 零售单未上传的数量\r\nconst UnLoadNum = observer(() => {\r\n const {offlineSys: {retailNotUploadNumber} } = stores;\r\n return <span style={{display: retailNotUploadNumber > 0 ? 'inherit' : 'none'}} className=\"up-count-btn\">{retailNotUploadNumber > 99 ? '99+' : retailNotUploadNumber}</span>\r\n});\r\n//零售单下载\r\nfunction RetailDownload() {\r\n const {offlineSys} = stores;\r\n const [isDownload, setIsDownload] = useState(false);\r\n const [downStr, setDownStr] = useState('下载数据');\r\n const handleDownLoad = async () => {\r\n if (isDownload) {\r\n Message.tip('下载中……');\r\n return;\r\n }\r\n setDownStr('0 %');\r\n setIsDownload(true);\r\n Message.tip('下载中……');\r\n try {\r\n let result = await offlineSys.downloadCatcherData(e => {\r\n setDownStr(e.percent + ' %');\r\n });\r\n if (result) {\r\n Message.success(`数据下载成功`);\r\n } else {\r\n Message.error(`数据下载失败`);\r\n }\r\n } catch(err){\r\n Message.error('数据下载失败');\r\n }\r\n setDownStr('下载数据');\r\n setIsDownload(false);\r\n };\r\n return (\r\n <div className='download-retail'>\r\n <div className=\"status-square online-status-bg c-pointer\" onClick={handleDownLoad}>\r\n <span className=\"status-tog-btn\">\r\n <span className={`${isDownload ? 'isRetailDownLoading' : ''}`}>{<Ticon icon=\"xiazaishuju\"/>}</span>\r\n <span className=\"fast-upload-btn\">{downStr}</span>\r\n </span>\r\n </div>\r\n </div>\r\n );\r\n}\r\nlet releaseDate, releaseVersion;\r\ntry {\r\n releaseDate = __RELEASESDATE__;\r\n releaseVersion = __BUILDVERSION__;\r\n} catch (error) {\r\n releaseDate = '';\r\n releaseVersion = '';\r\n}\r\nexport default function HeadContent(props, context) {\r\n const isElectron = (env || {}).platform === 'electron';\r\n const {businessName = '', storeName = '', posCode, logo, networkStatus, style = {}, history,\r\n dateFormat = defaultFromat, solt, time, isPortal, isLogin, menu = [], onClick, location} = props;\r\n const [themeVisible, setThemeVisible] = useState(false);\r\n const [isShowUploadBtnsByRouter, setIsShowUploadBtnsByRouter] = useState(window.location.href.indexOf(UPLOAD_BASE_PATH) < 0);\r\n const [isResetNetWorkTheme, setIsResetNetWorkTheme] = useState(window.location.pathname === NETWORK_THEME_PATH);\r\n props.history.listen(route => {\r\n setIsResetNetWorkTheme(route.pathname === NETWORK_THEME_PATH);\r\n setIsShowUploadBtnsByRouter(route.pathname.indexOf(UPLOAD_BASE_PATH) < 0);\r\n });\r\n const menuProps = {onClick};\r\n const menus = (\r\n <Menu {...menuProps}>\r\n {menu.map((item, i) =>\r\n <Item key={item.key || i}>\r\n {item.icon && <Ticon icon={item.icon}/>}\r\n <span>{item.title}</span>\r\n </Item>)\r\n }\r\n </Menu>\r\n );\r\n\r\n const controlConfig = [\r\n {type: 'suoxiao', event: 'min'},\r\n {\r\n type: 'guanbixiao',\r\n event: 'close',\r\n beforeEvent: (item) => {\r\n return ModalWraper.confirm({\r\n className: 'tplus-confirm-modal',\r\n title: '关闭提示',\r\n content: '您确定要关闭应用吗?',\r\n async onOk() {\r\n Loading.show({\r\n className: 'close-app-loading',\r\n node: <div className='close-app-spin'>\r\n <Spin scale={1.2} type='shape' visible/>\r\n <h1>应用关闭中...</h1>\r\n </div>,\r\n delay: false\r\n });\r\n context.actionHook.actionChange('close-app');\r\n try {\r\n await User.logout(() => {\r\n setTimeout(() => {\r\n nativeMs.doWindow(item.event);\r\n }, 500); // 需要为500ms 时间短可能会不能正常注销清理\r\n });\r\n } catch (err) {\r\n User.clear();\r\n localStore.remove('user');\r\n setTimeout(() => {\r\n nativeMs.doWindow(item.event);\r\n }, 500);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n ];\r\n\r\n const splitUser = (value) => {\r\n const regEmail = new RegExp('^[A-Za-zd0-9]+([-_.][A-Za-zd0-9]+)*@([A-Za-zd0-9]+[-.])+[A-Za-zd]{2,5}$');\r\n const isEmail = regEmail.test(value);\r\n\r\n if (isEmail) {\r\n return value.split('@')[0];\r\n }\r\n return value;\r\n }\r\n\r\n const setInventoryFocus = () => {\r\n const { isHorizontalPad } = platform || {};\r\n if (!!isHorizontalPad) return;\r\n let doms = document.getElementsByClassName('app hot-key-focus-container');\r\n let input = document.getElementById('productPoint');\r\n if (input) setTimeout(() => { if (doms && doms.length > 0) { console.log('headContent--商品焦点==Focus==');input.focus() } }, 300)\r\n }\r\n\r\n const clickTheme = (isShow) => {\r\n setThemeVisible(isShow)\r\n }\r\n\r\n const userName = PosInitData('UserName');\r\n const overlayClassName = `_portal-header-dropdown ${!isPortal ? 'inside-header' : ''}`;\r\n const moreInfoNode = <div className='pos-more-info-container'>\r\n <h1 className='business-name'>{businessName}</h1>\r\n <h1 className='store-code'>{posCode}</h1>\r\n </div>\r\n\r\n const headControlNode = <div className=\"head-content-control\">\r\n {controlConfig.map(v => <Ticon\r\n type={v.type}\r\n key={v.type}\r\n onClick={() => {\r\n if (nativeMs) {\r\n const {beforeEvent} = v;\r\n if (beforeEvent) {\r\n return beforeEvent(v);\r\n }\r\n nativeMs.doWindow(v.event)\r\n if (typeof setInventoryFocus == 'function') {\r\n setInventoryFocus()\r\n }\r\n }\r\n }}\r\n />)}\r\n </div>\r\n\r\n if (platform.isVerticalTouch) return verticalHeadContent({ style, releaseVersion, releaseDate,\r\n time, dateFormat, logo, HeadTime, headControlNode, location, history, clickTheme, themeVisible, isPortal, isLogin });\r\n\r\n return (<div style={{display: 'inline-block', width: '100%', height: '100%', ...style}} className='head-content' data-release={`${releaseVersion} ${releaseDate}`}>\r\n <div className=\"head-content-left\">\r\n {!!logo && <div className='business-logo' onClick={()=>{history.replace('/')}}>{logo}</div>}\r\n {!!storeName && <Tooltip trigger=\"click\" placement=\"bottomRight\" title={moreInfoNode} color={'#fff'} overlayClassName='head-business-tip'>\r\n <div className='store-name'>{storeName}<i className='header-triangle-down' /></div>\r\n </Tooltip>}\r\n {/* <OnLineStatus networkStatus={networkStatus}/> */}\r\n <OnLineStatusToggle isShowUploadBtnsByRouter={isShowUploadBtnsByRouter} isResetNetWorkTheme={isResetNetWorkTheme}/>\r\n {isShowUploadBtnsByRouter && <RetailUpload/>}\r\n {isShowUploadBtnsByRouter && <RetailDownload/>}\r\n </div>\r\n {isElectron && headControlNode}\r\n <div className=\"head-content-right\">\r\n {!isLogin && <Ticon icon=\"huanfu\" className={`theme-icon ${!isPortal ? 'pos-page' : ''}` } onClick={() => {clickTheme(true)}}/>}\r\n {!isLogin && !!userName && <Dropdown\r\n overlayClassName={overlayClassName}\r\n trigger={['click']}\r\n overlay={menus}\r\n placement=\"bottomRight\"\r\n arrow\r\n >\r\n <div className='header-info-render-content' onClick={e => e.preventDefault()}>\r\n <div className='store-info-item'>\r\n <p className='biller'>开单员:<span>{splitUser(userName)}</span></p>\r\n </div>\r\n <i className='header-triangle-down'/>\r\n </div>\r\n </Dropdown>}\r\n {!isLogin && <div className='store-info-item'>{solt}</div>}\r\n <HeadTime time={time} dateFormat={dateFormat}/>\r\n </div>\r\n <ThemeModal\r\n visible={themeVisible}\r\n isVertical={platform.isVerticalTouch}\r\n isPortal={isPortal}\r\n closeFn={(isShow) => clickTheme(isShow)}\r\n />\r\n </div>);\r\n}\r\n\r\nHeadContent.contextTypes = {\r\n actionHook: PropTypes.object,\r\n}\r\n"]}
1
+ {"version":3,"sources":["tplus-portaltouch/components/header/headContent.js"],"names":["HeadContent","require","Item","Menu","defaultFromat","HeadTime","props","time","dateFormat","unMount","timeStr","Date","now","currentTime","setCurrentTime","timeout","refreshDate","setTimeout","clearTimeout","split","date_YMD","date_HMS","platform","isVerticalTouch","OnLineStatus","networkStatus","navigator","onLine","networkState","setNetworkStatus","checkNetwork","CheckNetwork","status","state","destroy","lineIcon","releaseDate","releaseVersion","__RELEASESDATE__","__BUILDVERSION__","error","context","isElectron","env","businessName","storeName","posCode","logo","style","history","solt","isPortal","isLogin","menu","onClick","location","themeVisible","setThemeVisible","menuProps","menus","map","item","i","key","icon","title","controlConfig","type","event","beforeEvent","ModalWraper","confirm","className","content","onOk","Loading","show","node","delay","actionHook","actionChange","User","logout","nativeMs","doWindow","clear","localStore","remove","splitUser","value","regEmail","RegExp","isEmail","test","setInventoryFocus","isHorizontalPad","doms","document","getElementsByClassName","input","getElementById","length","console","log","focus","clickTheme","isShow","userName","overlayClassName","moreInfoNode","headControlNode","v","display","width","height","replace","e","preventDefault","contextTypes","PropTypes","object"],"mappings":"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","file":"headContent.js","sourcesContent":["import React, { useState, useEffect } from 'react';\r\nimport { Ticon, ModalWraper, Loading, Spin } from 'tplus-components-touch';\r\nimport { Tooltip, Menu, Dropdown } from 'antd';\r\nimport PropTypes from 'prop-types';\r\nimport { formatDate } from '../../utils';\r\nimport { env, nativeMs, localStore } from 'mutants-microfx';\r\nimport { PosInitData } from 'tplus-poslogin';\r\nimport { User } from 'tplus-api';\r\nimport { verticalHeadTime, verticalHeadContent } from './vertical-touch';\r\nimport { platform } from 'mutants-util';\r\nimport ThemeModal from \"./themeModal\";\r\n\r\nrequire('../../utils/networkCheck');\r\nconst { Item } = Menu;\r\nconst defaultFromat = 'yyyy-MM-dd hh:mm:ss';\r\n\r\n//头部时间\r\nfunction HeadTime(props) {\r\n const { time, dateFormat } = props;\r\n let unMount = false;\r\n const timeStr = typeof time === 'number' ? formatDate(time, dateFormat) : time;\r\n const [currentTime, setCurrentTime] = useState(formatDate(Date.now(), dateFormat));\r\n let timeout;\r\n function refreshDate() {\r\n if (time) return;\r\n !unMount && setCurrentTime(formatDate(Date.now(), dateFormat));\r\n timeout = setTimeout(refreshDate, 1000);\r\n }\r\n useEffect(() => {\r\n refreshDate();\r\n return () => {\r\n unMount = true;\r\n clearTimeout(timeout);\r\n };\r\n }, [currentTime]);\r\n const [date_YMD, date_HMS] = currentTime.split(' ') || [];\r\n\r\n if (platform.isVerticalTouch) return verticalHeadTime({ date_HMS });\r\n return (\r\n <div className='time'>\r\n {timeStr ?\r\n <div>{timeStr}</div> :\r\n <div>\r\n {date_YMD}\r\n <span>{date_HMS}</span>\r\n </div>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\n//头部联网状态\r\nfunction OnLineStatus(props) {\r\n const { networkStatus } = props;\r\n const [networkState, setNetworkStatus] = useState((navigator || {}).onLine ? '联网' : '离线');\r\n const checkNetwork = new CheckNetwork(function (status) {\r\n const state = \"online\" != status ? '离线' : '联网';\r\n setNetworkStatus(state);\r\n });\r\n useEffect(() => {\r\n return () => {\r\n checkNetwork.destroy();\r\n };\r\n }, [networkState]);\r\n const lineIcon = <Ticon\r\n icon={`${networkState === '联网' ? 'WiFi' : 'wuwangluo'}`}\r\n className=\"network-state-icon\"\r\n />\r\n return (\r\n <div className='network-status'>{networkStatus || lineIcon}</div>\r\n );\r\n}\r\n\r\nlet releaseDate, releaseVersion;\r\ntry {\r\n releaseDate = __RELEASESDATE__;\r\n releaseVersion = __BUILDVERSION__;\r\n} catch (error) {\r\n releaseDate = '';\r\n releaseVersion = '';\r\n}\r\nexport default function HeadContent(props, context) {\r\n const isElectron = (env || {}).platform === 'electron';\r\n const {businessName = '', storeName = '', posCode, logo, networkStatus, style = {}, history,\r\n dateFormat = defaultFromat, solt, time, isPortal, isLogin, menu = [], onClick, location} = props;\r\n const [themeVisible, setThemeVisible] = useState(false);\r\n const menuProps = {onClick};\r\n const menus = (\r\n <Menu {...menuProps}>\r\n {menu.map((item, i) =>\r\n <Item key={item.key || i}>\r\n {item.icon && <Ticon icon={item.icon}/>}\r\n <span>{item.title}</span>\r\n </Item>)\r\n }\r\n </Menu>\r\n );\r\n\r\n const controlConfig = [\r\n {type: 'suoxiao', event: 'min'},\r\n {\r\n type: 'guanbixiao',\r\n event: 'close',\r\n beforeEvent: (item) => {\r\n return ModalWraper.confirm({\r\n className: 'tplus-confirm-modal',\r\n title: '关闭提示',\r\n content: '您确定要关闭应用吗?',\r\n async onOk() {\r\n Loading.show({\r\n className: 'close-app-loading',\r\n node: <div className='close-app-spin'>\r\n <Spin scale={1.2} type='shape' visible/>\r\n <h1>应用关闭中...</h1>\r\n </div>,\r\n delay: false\r\n });\r\n context.actionHook.actionChange('close-app');\r\n try {\r\n await User.logout(() => {\r\n setTimeout(() => {\r\n nativeMs.doWindow(item.event);\r\n }, 500); // 需要为500ms 时间短可能会不能正常注销清理\r\n });\r\n } catch (err) {\r\n User.clear();\r\n localStore.remove('user');\r\n setTimeout(() => {\r\n nativeMs.doWindow(item.event);\r\n }, 500);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n ];\r\n\r\n const splitUser = (value) => {\r\n const regEmail = new RegExp('^[A-Za-zd0-9]+([-_.][A-Za-zd0-9]+)*@([A-Za-zd0-9]+[-.])+[A-Za-zd]{2,5}$');\r\n const isEmail = regEmail.test(value);\r\n\r\n if (isEmail) {\r\n return value.split('@')[0];\r\n }\r\n return value;\r\n }\r\n\r\n const setInventoryFocus = () => {\r\n const { isHorizontalPad } = platform || {};\r\n if (!!isHorizontalPad) return;\r\n let doms = document.getElementsByClassName('app hot-key-focus-container');\r\n let input = document.getElementById('productPoint');\r\n if (input) setTimeout(() => { if (doms && doms.length > 0) { console.log('headContent--商品焦点==Focus==');input.focus() } }, 300)\r\n }\r\n\r\n const clickTheme = (isShow) => {\r\n setThemeVisible(isShow)\r\n }\r\n\r\n const userName = PosInitData('UserName');\r\n const overlayClassName = `_portal-header-dropdown ${!isPortal ? 'inside-header' : ''}`;\r\n const moreInfoNode = <div className='pos-more-info-container'>\r\n <h1 className='business-name'>{businessName}</h1>\r\n <h1 className='store-code'>{posCode}</h1>\r\n </div>\r\n\r\n const headControlNode = <div className=\"head-content-control\">\r\n {controlConfig.map(v => <Ticon\r\n type={v.type}\r\n key={v.type}\r\n onClick={() => {\r\n if (nativeMs) {\r\n const {beforeEvent} = v;\r\n if (beforeEvent) {\r\n return beforeEvent(v);\r\n }\r\n nativeMs.doWindow(v.event)\r\n if (typeof setInventoryFocus == 'function') {\r\n setInventoryFocus()\r\n }\r\n }\r\n }}\r\n />)}\r\n </div>\r\n\r\n if (platform.isVerticalTouch) return verticalHeadContent({ style, releaseVersion, releaseDate,\r\n time, dateFormat, logo, HeadTime, headControlNode, location, history, clickTheme, themeVisible, isPortal, isLogin });\r\n\r\n return (<div style={{display: 'inline-block', width: '100%', height: '100%', ...style}} className='head-content' data-release={`${releaseVersion} ${releaseDate}`}>\r\n <div className=\"head-content-left\">\r\n {!!logo && <div className='business-logo' onClick={()=>{history.replace('/')}}>{logo}</div>}\r\n {!!storeName && <Tooltip trigger=\"click\" placement=\"bottomRight\" title={moreInfoNode} color={'#fff'} overlayClassName='head-business-tip'>\r\n <div className='store-name'>{storeName}<i className='header-triangle-down' /></div>\r\n </Tooltip>}\r\n <OnLineStatus OnLineStatus={networkStatus}/>\r\n </div>\r\n {isElectron && headControlNode}\r\n <div className=\"head-content-right\">\r\n {!isLogin && <Ticon icon=\"huanfu\" className={`theme-icon ${!isPortal ? 'pos-page' : ''}` } onClick={() => {clickTheme(true)}}/>}\r\n {!isLogin && !!userName && <Dropdown\r\n overlayClassName={overlayClassName}\r\n trigger={['click']}\r\n overlay={menus}\r\n placement=\"bottomRight\"\r\n arrow\r\n >\r\n <div className='header-info-render-content' onClick={e => e.preventDefault()}>\r\n <div className='store-info-item'>\r\n <p className='biller'>开单员:<span>{splitUser(userName)}</span></p>\r\n </div>\r\n <i className='header-triangle-down'/>\r\n </div>\r\n </Dropdown>}\r\n {!isLogin && <div className='store-info-item'>{solt}</div>}\r\n <HeadTime time={time} dateFormat={dateFormat}/>\r\n </div>\r\n <ThemeModal\r\n visible={themeVisible}\r\n isVertical={platform.isVerticalTouch}\r\n isPortal={isPortal}\r\n closeFn={(isShow) => clickTheme(isShow)}\r\n />\r\n </div>);\r\n}\r\n\r\nHeadContent.contextTypes = {\r\n actionHook: PropTypes.object,\r\n}\r\n"]}