@pisell/materials 2.2.32 → 2.2.33
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.
- package/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/index.js +1 -1
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/preview.js +7 -7
- package/build/lowcode/render/default/view.css +1 -1
- package/build/lowcode/render/default/view.js +5 -5
- package/build/lowcode/view.css +1 -1
- package/build/lowcode/view.js +17 -17
- package/es/components/iconfont/index.js +1 -1
- package/es/components/pisellInformationEntry/Input/index.js +9 -3
- package/es/components/pisellInformationEntry/constants.d.ts +10 -0
- package/es/components/pisellInformationEntry/constants.js +10 -0
- package/es/components/pisellInformationEntry/hooks/useTerminalPeripherals.d.ts +8 -0
- package/es/components/pisellInformationEntry/hooks/useTerminalPeripherals.js +54 -0
- package/es/components/pisellInformationEntry/index.js +21 -4
- package/es/components/pisellInformationEntry/index.less +1 -1
- package/es/components/pisellLoading/index.d.ts +2 -0
- package/es/components/pisellLoading/index.js +3 -1
- package/es/components/pisellStatisticList/index.less +2 -1
- package/es/components/pisellWalletPassCard/index.d.ts +2 -0
- package/es/components/pisellWalletPassCard/index.js +16 -4
- package/es/components/pisellWalletPassCard/index.less +4 -0
- package/es/locales/en-US.d.ts +2 -0
- package/es/locales/en-US.js +3 -1
- package/es/locales/zh-CN.d.ts +2 -0
- package/es/locales/zh-CN.js +3 -1
- package/es/locales/zh-TW.d.ts +2 -0
- package/es/locales/zh-TW.js +3 -1
- package/lib/components/iconfont/index.js +1 -1
- package/lib/components/pisellInformationEntry/Input/index.js +9 -1
- package/lib/components/pisellInformationEntry/constants.d.ts +10 -0
- package/lib/components/pisellInformationEntry/constants.js +12 -0
- package/lib/components/pisellInformationEntry/hooks/useTerminalPeripherals.d.ts +8 -0
- package/lib/components/pisellInformationEntry/hooks/useTerminalPeripherals.js +83 -0
- package/lib/components/pisellInformationEntry/index.js +18 -2
- package/lib/components/pisellInformationEntry/index.less +1 -1
- package/lib/components/pisellLoading/index.d.ts +2 -0
- package/lib/components/pisellLoading/index.js +2 -1
- package/lib/components/pisellStatisticList/index.less +2 -1
- package/lib/components/pisellWalletPassCard/index.d.ts +2 -0
- package/lib/components/pisellWalletPassCard/index.js +8 -4
- package/lib/components/pisellWalletPassCard/index.less +4 -0
- package/lib/locales/en-US.d.ts +2 -0
- package/lib/locales/en-US.js +3 -1
- package/lib/locales/zh-CN.d.ts +2 -0
- package/lib/locales/zh-CN.js +3 -1
- package/lib/locales/zh-TW.d.ts +2 -0
- package/lib/locales/zh-TW.js +3 -1
- package/lowcode/pisell-card-list/meta.ts +60 -24
- package/lowcode/pisell-information-entry/meta.ts +22 -7
- package/lowcode/pisell-loading/meta.ts +8 -0
- package/package.json +3 -3
|
@@ -2,7 +2,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
2
2
|
import { createFromIconfontCN } from '@ant-design/icons';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
var MyIcon = createFromIconfontCN({
|
|
5
|
-
scriptUrl: 'https://
|
|
5
|
+
scriptUrl: 'https://static.pisellcdn.com/pisell2iconfont.js' // 在 iconfont.cn 上生成
|
|
6
6
|
});
|
|
7
7
|
|
|
8
8
|
var IconFont = function IconFont(props) {
|
|
@@ -11,7 +11,7 @@ import Iconfont from "../../iconfont";
|
|
|
11
11
|
import "./index.less";
|
|
12
12
|
import { getText } from "../../../locales";
|
|
13
13
|
var PisellEntryInput = function PisellEntryInput(props) {
|
|
14
|
-
var
|
|
14
|
+
var _onChange = props.onChange,
|
|
15
15
|
searchDescribe = props.searchDescribe;
|
|
16
16
|
var _useState = useState(''),
|
|
17
17
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -25,7 +25,13 @@ var PisellEntryInput = function PisellEntryInput(props) {
|
|
|
25
25
|
autoFocus: true,
|
|
26
26
|
value: value,
|
|
27
27
|
onChange: function onChange(e) {
|
|
28
|
-
|
|
28
|
+
setValue(e.target.value);
|
|
29
|
+
if (!e.target.value) {
|
|
30
|
+
_onChange(e.target.value);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
onPressEnter: function onPressEnter(e) {
|
|
34
|
+
_onChange(value);
|
|
29
35
|
},
|
|
30
36
|
style: {
|
|
31
37
|
flex: 1
|
|
@@ -40,7 +46,7 @@ var PisellEntryInput = function PisellEntryInput(props) {
|
|
|
40
46
|
}), /*#__PURE__*/React.createElement(Button, {
|
|
41
47
|
size: "large",
|
|
42
48
|
onClick: function onClick() {
|
|
43
|
-
return
|
|
49
|
+
return _onChange(value);
|
|
44
50
|
},
|
|
45
51
|
disabled: !value
|
|
46
52
|
}, getText('pisell-information-entry-input-search'))), /*#__PURE__*/React.createElement("div", {
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import { EntryModeType } from './index';
|
|
2
2
|
export declare const entryModeTextIcon: Record<EntryModeType['type'], any>;
|
|
3
|
+
export declare const entryModeErrorTextIcon: {
|
|
4
|
+
scanner: {
|
|
5
|
+
icon: string;
|
|
6
|
+
text: string;
|
|
7
|
+
};
|
|
8
|
+
nfc: {
|
|
9
|
+
icon: string;
|
|
10
|
+
text: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
3
13
|
export declare const passiveModeType: string[];
|
|
@@ -16,6 +16,16 @@ export var entryModeTextIcon = {
|
|
|
16
16
|
text: 'NFC ready'
|
|
17
17
|
}
|
|
18
18
|
};
|
|
19
|
+
export var entryModeErrorTextIcon = {
|
|
20
|
+
scanner: {
|
|
21
|
+
icon: 'pisell2-a-Scanner11',
|
|
22
|
+
text: 'Scanner'
|
|
23
|
+
},
|
|
24
|
+
nfc: {
|
|
25
|
+
icon: 'pisell2-a-NFC1',
|
|
26
|
+
text: 'NFC'
|
|
27
|
+
}
|
|
28
|
+
};
|
|
19
29
|
|
|
20
30
|
// 没有操作界面的输入模式
|
|
21
31
|
export var passiveModeType = ['scanner', 'nfc'];
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare type Peripherals = {
|
|
2
|
+
scanner: 'none' | 'connected' | 'disconnect';
|
|
3
|
+
nfc: 'none' | 'connected' | 'disconnect';
|
|
4
|
+
};
|
|
5
|
+
declare const useTerminalPeripherals: (onChange?: ((val: string) => void) | undefined) => {
|
|
6
|
+
peripheralsStatus: Peripherals;
|
|
7
|
+
};
|
|
8
|
+
export default useTerminalPeripherals;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
7
|
+
import { useEffect, useState } from 'react';
|
|
8
|
+
import useEngineContext from "../../../hooks/useEngineContext";
|
|
9
|
+
var useTerminalPeripherals = function useTerminalPeripherals(onChange) {
|
|
10
|
+
var _context$appHelper;
|
|
11
|
+
var context = useEngineContext();
|
|
12
|
+
var _ref = ((_context$appHelper = context.appHelper) === null || _context$appHelper === void 0 ? void 0 : _context$appHelper.utils) || {},
|
|
13
|
+
interaction = _ref.interaction;
|
|
14
|
+
var _useState = useState({
|
|
15
|
+
scanner: 'none',
|
|
16
|
+
nfc: 'none'
|
|
17
|
+
}),
|
|
18
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
19
|
+
peripheralsStatus = _useState2[0],
|
|
20
|
+
setPeripheralsStatus = _useState2[1];
|
|
21
|
+
useEffect(function () {
|
|
22
|
+
var _interaction$utils, _interaction$utils$mo, _interaction$utils2, _interaction$utils2$p, _interaction$utils3, _interaction$utils3$m;
|
|
23
|
+
// 获取外部设备扫描结果
|
|
24
|
+
interaction === null || interaction === void 0 ? void 0 : (_interaction$utils = interaction.utils) === null || _interaction$utils === void 0 ? void 0 : (_interaction$utils$mo = _interaction$utils.mountFunction) === null || _interaction$utils$mo === void 0 ? void 0 : _interaction$utils$mo.call(_interaction$utils, 'global', 'peripheralsResult', function (strVal) {
|
|
25
|
+
try {
|
|
26
|
+
var _val = JSON.parse(strVal);
|
|
27
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(_val.value);
|
|
28
|
+
} catch (err) {
|
|
29
|
+
console.error(err);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// 主动获取设备连接状态
|
|
34
|
+
interaction === null || interaction === void 0 ? void 0 : (_interaction$utils2 = interaction.utils) === null || _interaction$utils2 === void 0 ? void 0 : (_interaction$utils2$p = _interaction$utils2.postMessageToApp) === null || _interaction$utils2$p === void 0 ? void 0 : _interaction$utils2$p.call(_interaction$utils2, {
|
|
35
|
+
module: 'global',
|
|
36
|
+
key: 'get_peripherals_status',
|
|
37
|
+
data: {}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
// 设备当前连接状态返回
|
|
41
|
+
interaction === null || interaction === void 0 ? void 0 : (_interaction$utils3 = interaction.utils) === null || _interaction$utils3 === void 0 ? void 0 : (_interaction$utils3$m = _interaction$utils3.mountFunction) === null || _interaction$utils3$m === void 0 ? void 0 : _interaction$utils3$m.call(_interaction$utils3, 'global', 'peripheralsStatus', function (strPeripherals) {
|
|
42
|
+
try {
|
|
43
|
+
var peripherals = JSON.parse(strPeripherals);
|
|
44
|
+
setPeripheralsStatus(peripherals);
|
|
45
|
+
} catch (err) {
|
|
46
|
+
console.error(err);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}, []);
|
|
50
|
+
return {
|
|
51
|
+
peripheralsStatus: peripheralsStatus
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
export default useTerminalPeripherals;
|
|
@@ -19,11 +19,12 @@ import classNames from 'classnames';
|
|
|
19
19
|
import usePisellConfig from "../pisell-config-provider/hooks/usePisellConfig";
|
|
20
20
|
import PisellCard from "../pisellCard";
|
|
21
21
|
import Iconfont from "../iconfont";
|
|
22
|
-
import { entryModeTextIcon, passiveModeType } from "./constants";
|
|
22
|
+
import { entryModeErrorTextIcon, entryModeTextIcon, passiveModeType } from "./constants";
|
|
23
23
|
import Scan from "./Scan";
|
|
24
24
|
import Button from "../button";
|
|
25
25
|
import Input from "./Input";
|
|
26
26
|
import { hasCamera } from "./utils";
|
|
27
|
+
import useTerminalPeripherals from "./hooks/useTerminalPeripherals";
|
|
27
28
|
import "./index.less";
|
|
28
29
|
var CardButton = function CardButton(props) {
|
|
29
30
|
var icon = props.icon,
|
|
@@ -44,6 +45,8 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
|
|
|
44
45
|
_useState2 = _slicedToArray(_useState, 2),
|
|
45
46
|
currentType = _useState2[0],
|
|
46
47
|
setCurrentType = _useState2[1];
|
|
48
|
+
var _useTerminalPeriphera = useTerminalPeripherals(onChange),
|
|
49
|
+
peripheralsStatus = _useTerminalPeriphera.peripheralsStatus;
|
|
47
50
|
|
|
48
51
|
// 可用录入模式
|
|
49
52
|
var _useState3 = useState(entryModes),
|
|
@@ -72,11 +75,20 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
|
|
|
72
75
|
return item.type !== 'scanCode';
|
|
73
76
|
});
|
|
74
77
|
case 5:
|
|
78
|
+
available = available.filter(function (item) {
|
|
79
|
+
if (item.type === 'scanner') {
|
|
80
|
+
return peripheralsStatus.scanner !== 'none';
|
|
81
|
+
}
|
|
82
|
+
if (item.type === 'nfc') {
|
|
83
|
+
return peripheralsStatus.nfc !== 'none';
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
});
|
|
75
87
|
if (available.length === 1) {
|
|
76
88
|
setCurrentType(available[0].type);
|
|
77
89
|
}
|
|
78
90
|
setAvailableEntryModes(available);
|
|
79
|
-
case
|
|
91
|
+
case 8:
|
|
80
92
|
case "end":
|
|
81
93
|
return _context.stop();
|
|
82
94
|
}
|
|
@@ -87,7 +99,7 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
|
|
|
87
99
|
};
|
|
88
100
|
}();
|
|
89
101
|
getEntryModes();
|
|
90
|
-
}, [entryModes]);
|
|
102
|
+
}, [entryModes, peripheralsStatus]);
|
|
91
103
|
var handleChange = function handleChange(val) {
|
|
92
104
|
onChange === null || onChange === void 0 ? void 0 : onChange(val);
|
|
93
105
|
};
|
|
@@ -164,10 +176,15 @@ var PisellInformationEntry = function PisellInformationEntry(props) {
|
|
|
164
176
|
className: "pisell-information-entry-modes"
|
|
165
177
|
}, availableEntryModes.map(function (item) {
|
|
166
178
|
var detail = entryModeTextIcon[item.type];
|
|
179
|
+
var icon = detail.icon;
|
|
180
|
+
if (['scanner', 'nfc'].includes(item.type)) {
|
|
181
|
+
var disconnect = entryModeErrorTextIcon[item.type];
|
|
182
|
+
icon = peripheralsStatus[item.type] === 'connected' ? detail.icon : disconnect.icon;
|
|
183
|
+
}
|
|
167
184
|
return /*#__PURE__*/React.createElement(CardButton, {
|
|
168
185
|
bordered: !passiveModeType.includes(item.type),
|
|
169
186
|
icon: /*#__PURE__*/React.createElement(Iconfont, {
|
|
170
|
-
type:
|
|
187
|
+
type: icon,
|
|
171
188
|
className: "pisell-card-button-icon"
|
|
172
189
|
}),
|
|
173
190
|
className: classNames('pisell-information-entry-item', _defineProperty({}, 'pisell-entry-ready', passiveModeType.includes(item.type))),
|
|
@@ -13,6 +13,8 @@ export interface PisellLoadingProps extends SpinProps {
|
|
|
13
13
|
mask?: boolean | MaskType;
|
|
14
14
|
/** 是否全屏 */
|
|
15
15
|
fullscreen?: boolean;
|
|
16
|
+
/** 延迟显示加载效果的时间(防止闪烁) */
|
|
17
|
+
delay?: number;
|
|
16
18
|
}
|
|
17
19
|
declare const PisellLoading: (props: PisellLoadingProps) => React.JSX.Element;
|
|
18
20
|
export default PisellLoading;
|
|
@@ -8,7 +8,8 @@ var PisellLoading = function PisellLoading(props) {
|
|
|
8
8
|
var children = props.children,
|
|
9
9
|
fullscreen = props.fullscreen,
|
|
10
10
|
mask = props.mask,
|
|
11
|
-
loading = props.loading
|
|
11
|
+
loading = props.loading,
|
|
12
|
+
delay = props.delay;
|
|
12
13
|
var ref = useRef(null);
|
|
13
14
|
var _ref = mask || {},
|
|
14
15
|
_ref$backgroundColor = _ref.backgroundColor,
|
|
@@ -32,6 +33,7 @@ var PisellLoading = function PisellLoading(props) {
|
|
|
32
33
|
className: 'pisell-loading-wrapper'
|
|
33
34
|
}, /*#__PURE__*/React.createElement(Spin, {
|
|
34
35
|
fullscreen: fullscreen,
|
|
36
|
+
delay: delay,
|
|
35
37
|
spinning: loading,
|
|
36
38
|
indicator: /*#__PURE__*/React.createElement(IconFont, {
|
|
37
39
|
type: 'pisell2-loader2',
|
|
@@ -31,10 +31,11 @@
|
|
|
31
31
|
}
|
|
32
32
|
.pisell-lowcode-statistic-list-item-children-label {
|
|
33
33
|
color: var(--Base-White, #fff);
|
|
34
|
-
font-size:
|
|
34
|
+
font-size: 14px;
|
|
35
35
|
font-weight: 400;
|
|
36
36
|
line-height: 18px; /* 150% */
|
|
37
37
|
margin-right: 4px;
|
|
38
|
+
opacity: 0.7;
|
|
38
39
|
}
|
|
39
40
|
.pisell-lowcode-statistic-list-item-children-value {
|
|
40
41
|
color: var(--Base-White, #fff);
|
|
@@ -42,10 +42,16 @@ var PisellWalletPassCard = function PisellWalletPassCard(props) {
|
|
|
42
42
|
_props$showQrCode = props.showQrCode,
|
|
43
43
|
showQrCode = _props$showQrCode === void 0 ? true : _props$showQrCode,
|
|
44
44
|
_props$showBalanceSym = props.showBalanceSymbol,
|
|
45
|
-
showBalanceSymbol = _props$showBalanceSym === void 0 ? true : _props$showBalanceSym
|
|
45
|
+
showBalanceSymbol = _props$showBalanceSym === void 0 ? true : _props$showBalanceSym,
|
|
46
|
+
_props$showDisabledRe = props.showDisabledReason,
|
|
47
|
+
showDisabledReason = _props$showDisabledRe === void 0 ? true : _props$showDisabledRe,
|
|
48
|
+
_props$showDiscount = props.showDiscount,
|
|
49
|
+
showDiscount = _props$showDiscount === void 0 ? false : _props$showDiscount,
|
|
50
|
+
discount = props.discount;
|
|
46
51
|
return /*#__PURE__*/React.createElement("div", {
|
|
47
52
|
className: classNames('pisell-wallet-pass-card', {
|
|
48
|
-
'pisell-card-disabled': disabled
|
|
53
|
+
'pisell-card-disabled': disabled,
|
|
54
|
+
'pisell-card-disabled-hide-disabled-reason': disabled && !showDisabledReason
|
|
49
55
|
}),
|
|
50
56
|
style: showCover ? {
|
|
51
57
|
backgroundImage: "url('".concat(cover || 'data:image/jpeg;base64,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', "')")
|
|
@@ -73,7 +79,13 @@ var PisellWalletPassCard = function PisellWalletPassCard(props) {
|
|
|
73
79
|
useThousandsSeparator: true,
|
|
74
80
|
value: balance,
|
|
75
81
|
showCurrencySymbol: showBalanceSymbol
|
|
76
|
-
}))
|
|
82
|
+
})), showDiscount && /*#__PURE__*/React.createElement("div", {
|
|
83
|
+
className: "pisell-card-amount-item"
|
|
84
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
85
|
+
className: "pisell-card-amount-item-label"
|
|
86
|
+
}, getText('pisell-discount-card-title')), /*#__PURE__*/React.createElement("div", {
|
|
87
|
+
className: "pisell-card-amount-item-value"
|
|
88
|
+
}, discount, "% ", getText('pisell-discount-card-unit')))), /*#__PURE__*/React.createElement("div", {
|
|
77
89
|
className: "pisell-card-code-wrap"
|
|
78
90
|
}, /*#__PURE__*/React.createElement("div", {
|
|
79
91
|
className: "pisell-card-code"
|
|
@@ -83,7 +95,7 @@ var PisellWalletPassCard = function PisellWalletPassCard(props) {
|
|
|
83
95
|
value: qrCode,
|
|
84
96
|
preview: true,
|
|
85
97
|
size: 60
|
|
86
|
-
}))), (disabled || disabledReason) && /*#__PURE__*/React.createElement("div", {
|
|
98
|
+
}))), (disabled || disabledReason) && showDisabledReason && /*#__PURE__*/React.createElement("div", {
|
|
87
99
|
className: "pisell-card-warn-message"
|
|
88
100
|
}, /*#__PURE__*/React.createElement(Iconfont, {
|
|
89
101
|
className: "pisell-card-icon",
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
border-radius: 12px;
|
|
9
9
|
background-size: cover;
|
|
10
10
|
height: 190px;
|
|
11
|
+
background-position: center center;
|
|
11
12
|
.pisell-card-name-wrap {
|
|
12
13
|
display: flex;
|
|
13
14
|
justify-content: space-between;
|
|
@@ -97,4 +98,7 @@
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
}
|
|
101
|
+
}
|
|
102
|
+
.pisell-card-disabled-hide-disabled-reason {
|
|
103
|
+
height: 165px !important;
|
|
100
104
|
}
|
package/es/locales/en-US.d.ts
CHANGED
|
@@ -112,5 +112,7 @@ declare const _default: {
|
|
|
112
112
|
'pisell-adjust-price-discount-percentage': string;
|
|
113
113
|
'pisell-adjust-price-total-after-discount': string;
|
|
114
114
|
'pisell-adjust-price-discount-can-be-maximum': string;
|
|
115
|
+
'pisell-discount-card-title': string;
|
|
116
|
+
'pisell-discount-card-unit': string;
|
|
115
117
|
};
|
|
116
118
|
export default _default;
|
package/es/locales/en-US.js
CHANGED
|
@@ -137,5 +137,7 @@ export default {
|
|
|
137
137
|
'pisell-adjust-price-discount-amount': "Amount",
|
|
138
138
|
'pisell-adjust-price-discount-percentage': "Percentage",
|
|
139
139
|
'pisell-adjust-price-total-after-discount': "Total after discount: ",
|
|
140
|
-
'pisell-adjust-price-discount-can-be-maximum': "Discount can be maximum"
|
|
140
|
+
'pisell-adjust-price-discount-can-be-maximum': "Discount can be maximum",
|
|
141
|
+
'pisell-discount-card-title': 'Discount',
|
|
142
|
+
'pisell-discount-card-unit': 'off'
|
|
141
143
|
};
|
package/es/locales/zh-CN.d.ts
CHANGED
|
@@ -112,5 +112,7 @@ declare const _default: {
|
|
|
112
112
|
'pisell-adjust-price-discount-percentage': string;
|
|
113
113
|
'pisell-adjust-price-total-after-discount': string;
|
|
114
114
|
'pisell-adjust-price-discount-can-be-maximum': string;
|
|
115
|
+
'pisell-discount-card-title': string;
|
|
116
|
+
'pisell-discount-card-unit': string;
|
|
115
117
|
};
|
|
116
118
|
export default _default;
|
package/es/locales/zh-CN.js
CHANGED
|
@@ -137,5 +137,7 @@ export default {
|
|
|
137
137
|
'pisell-adjust-price-discount-amount': "金额",
|
|
138
138
|
'pisell-adjust-price-discount-percentage': "百分比",
|
|
139
139
|
'pisell-adjust-price-total-after-discount': "打折后总价",
|
|
140
|
-
'pisell-adjust-price-discount-can-be-maximum': "折扣最高可达"
|
|
140
|
+
'pisell-adjust-price-discount-can-be-maximum': "折扣最高可达",
|
|
141
|
+
'pisell-discount-card-title': '折扣',
|
|
142
|
+
'pisell-discount-card-unit': '折扣'
|
|
141
143
|
};
|
package/es/locales/zh-TW.d.ts
CHANGED
|
@@ -112,5 +112,7 @@ declare const _default: {
|
|
|
112
112
|
'pisell-adjust-price-discount-percentage': string;
|
|
113
113
|
'pisell-adjust-price-total-after-discount': string;
|
|
114
114
|
'pisell-adjust-price-discount-can-be-maximum': string;
|
|
115
|
+
'pisell-discount-card-title': string;
|
|
116
|
+
'pisell-discount-card-unit': string;
|
|
115
117
|
};
|
|
116
118
|
export default _default;
|
package/es/locales/zh-TW.js
CHANGED
|
@@ -137,5 +137,7 @@ export default {
|
|
|
137
137
|
'pisell-adjust-price-discount-amount': "金額",
|
|
138
138
|
'pisell-adjust-price-discount-percentage': "百分比",
|
|
139
139
|
'pisell-adjust-price-total-after-discount': "打折后總價",
|
|
140
|
-
'pisell-adjust-price-discount-can-be-maximum': "折扣最高可達"
|
|
140
|
+
'pisell-adjust-price-discount-can-be-maximum': "折扣最高可達",
|
|
141
|
+
'pisell-discount-card-title': '折扣',
|
|
142
|
+
'pisell-discount-card-unit': '折扣'
|
|
141
143
|
};
|
|
@@ -35,7 +35,7 @@ module.exports = __toCommonJS(iconfont_exports);
|
|
|
35
35
|
var import_icons = require("@ant-design/icons");
|
|
36
36
|
var import_react = __toESM(require("react"));
|
|
37
37
|
var MyIcon = (0, import_icons.createFromIconfontCN)({
|
|
38
|
-
scriptUrl: "https://
|
|
38
|
+
scriptUrl: "https://static.pisellcdn.com/pisell2iconfont.js"
|
|
39
39
|
// 在 iconfont.cn 上生成
|
|
40
40
|
});
|
|
41
41
|
var IconFont = (props) => {
|
|
@@ -46,7 +46,15 @@ var PisellEntryInput = (props) => {
|
|
|
46
46
|
{
|
|
47
47
|
autoFocus: true,
|
|
48
48
|
value,
|
|
49
|
-
onChange: (e) =>
|
|
49
|
+
onChange: (e) => {
|
|
50
|
+
setValue(e.target.value);
|
|
51
|
+
if (!e.target.value) {
|
|
52
|
+
onChange(e.target.value);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
onPressEnter: (e) => {
|
|
56
|
+
onChange(value);
|
|
57
|
+
},
|
|
50
58
|
style: { flex: 1 },
|
|
51
59
|
prefix: /* @__PURE__ */ import_react.default.createElement(import_iconfont.default, { style: { color: "#667085" }, type: "pisell2-search-lg" }),
|
|
52
60
|
allowClear: true
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import { EntryModeType } from './index';
|
|
2
2
|
export declare const entryModeTextIcon: Record<EntryModeType['type'], any>;
|
|
3
|
+
export declare const entryModeErrorTextIcon: {
|
|
4
|
+
scanner: {
|
|
5
|
+
icon: string;
|
|
6
|
+
text: string;
|
|
7
|
+
};
|
|
8
|
+
nfc: {
|
|
9
|
+
icon: string;
|
|
10
|
+
text: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
3
13
|
export declare const passiveModeType: string[];
|
|
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
// src/components/pisellInformationEntry/constants.ts
|
|
20
20
|
var constants_exports = {};
|
|
21
21
|
__export(constants_exports, {
|
|
22
|
+
entryModeErrorTextIcon: () => entryModeErrorTextIcon,
|
|
22
23
|
entryModeTextIcon: () => entryModeTextIcon,
|
|
23
24
|
passiveModeType: () => passiveModeType
|
|
24
25
|
});
|
|
@@ -41,9 +42,20 @@ var entryModeTextIcon = {
|
|
|
41
42
|
text: "NFC ready"
|
|
42
43
|
}
|
|
43
44
|
};
|
|
45
|
+
var entryModeErrorTextIcon = {
|
|
46
|
+
scanner: {
|
|
47
|
+
icon: "pisell2-a-Scanner11",
|
|
48
|
+
text: "Scanner"
|
|
49
|
+
},
|
|
50
|
+
nfc: {
|
|
51
|
+
icon: "pisell2-a-NFC1",
|
|
52
|
+
text: "NFC"
|
|
53
|
+
}
|
|
54
|
+
};
|
|
44
55
|
var passiveModeType = ["scanner", "nfc"];
|
|
45
56
|
// Annotate the CommonJS export names for ESM import in node:
|
|
46
57
|
0 && (module.exports = {
|
|
58
|
+
entryModeErrorTextIcon,
|
|
47
59
|
entryModeTextIcon,
|
|
48
60
|
passiveModeType
|
|
49
61
|
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare type Peripherals = {
|
|
2
|
+
scanner: 'none' | 'connected' | 'disconnect';
|
|
3
|
+
nfc: 'none' | 'connected' | 'disconnect';
|
|
4
|
+
};
|
|
5
|
+
declare const useTerminalPeripherals: (onChange?: ((val: string) => void) | undefined) => {
|
|
6
|
+
peripheralsStatus: Peripherals;
|
|
7
|
+
};
|
|
8
|
+
export default useTerminalPeripherals;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/components/pisellInformationEntry/hooks/useTerminalPeripherals.ts
|
|
30
|
+
var useTerminalPeripherals_exports = {};
|
|
31
|
+
__export(useTerminalPeripherals_exports, {
|
|
32
|
+
default: () => useTerminalPeripherals_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(useTerminalPeripherals_exports);
|
|
35
|
+
var import_react = require("react");
|
|
36
|
+
var import_useEngineContext = __toESM(require("../../../hooks/useEngineContext"));
|
|
37
|
+
var useTerminalPeripherals = (onChange) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const context = (0, import_useEngineContext.default)();
|
|
40
|
+
const { interaction } = ((_a = context.appHelper) == null ? void 0 : _a.utils) || {};
|
|
41
|
+
const [peripheralsStatus, setPeripheralsStatus] = (0, import_react.useState)({
|
|
42
|
+
scanner: "none",
|
|
43
|
+
nfc: "none"
|
|
44
|
+
});
|
|
45
|
+
(0, import_react.useEffect)(() => {
|
|
46
|
+
var _a2, _b, _c, _d, _e, _f;
|
|
47
|
+
(_b = (_a2 = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _a2.mountFunction) == null ? void 0 : _b.call(
|
|
48
|
+
_a2,
|
|
49
|
+
"global",
|
|
50
|
+
"peripheralsResult",
|
|
51
|
+
(strVal) => {
|
|
52
|
+
try {
|
|
53
|
+
const val = JSON.parse(strVal);
|
|
54
|
+
onChange == null ? void 0 : onChange(val.value);
|
|
55
|
+
} catch (err) {
|
|
56
|
+
console.error(err);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
(_d = (_c = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _c.postMessageToApp) == null ? void 0 : _d.call(_c, {
|
|
61
|
+
module: "global",
|
|
62
|
+
key: "get_peripherals_status",
|
|
63
|
+
data: {}
|
|
64
|
+
});
|
|
65
|
+
(_f = (_e = interaction == null ? void 0 : interaction.utils) == null ? void 0 : _e.mountFunction) == null ? void 0 : _f.call(
|
|
66
|
+
_e,
|
|
67
|
+
"global",
|
|
68
|
+
"peripheralsStatus",
|
|
69
|
+
(strPeripherals) => {
|
|
70
|
+
try {
|
|
71
|
+
const peripherals = JSON.parse(strPeripherals);
|
|
72
|
+
setPeripheralsStatus(peripherals);
|
|
73
|
+
} catch (err) {
|
|
74
|
+
console.error(err);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
}, []);
|
|
79
|
+
return {
|
|
80
|
+
peripheralsStatus
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
var useTerminalPeripherals_default = useTerminalPeripherals;
|