react_hsbc_teller 2.0.94 → 2.0.96
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/README.md +8 -0
- package/lib/hsbc.js +1 -1
- package/package.json +1 -1
- package/packages/api/api.js +19 -0
- package/packages/demo/demo.js +9 -1
- package/packages/pages/multiModule/components/transcription/transcription.jsx +291 -0
- package/packages/pages/multiModule/components/transcription/transcription.less +112 -0
- package/packages/pages/multiModule/multiModule.jsx +2 -0
- package/packages/pages/video/video.jsx +52 -14
- package/packages/demo/1.vue +0 -0
package/package.json
CHANGED
package/packages/api/api.js
CHANGED
|
@@ -737,6 +737,25 @@ class API extends Server{
|
|
|
737
737
|
throw err;
|
|
738
738
|
}
|
|
739
739
|
}
|
|
740
|
+
async oneClickCopy(params = {}){
|
|
741
|
+
try{
|
|
742
|
+
let result = await this.axios('post', '/hsbc/oneClickCopy/callback', params);
|
|
743
|
+
if (result && (result.data instanceof Object) && result.code === 200){
|
|
744
|
+
return result.data||[];
|
|
745
|
+
} else{
|
|
746
|
+
let err = {
|
|
747
|
+
tip: '服务异常',
|
|
748
|
+
response: result,
|
|
749
|
+
data: params,
|
|
750
|
+
// url: 'https://api.cangdu.org/shopro/data/products',
|
|
751
|
+
}
|
|
752
|
+
throw err;
|
|
753
|
+
}
|
|
754
|
+
}catch(err){
|
|
755
|
+
throw err;
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
|
|
740
759
|
// /**
|
|
741
760
|
// * 用途:获取记录数据
|
|
742
761
|
// * @url https://api.cangdu.org/shopro/data/record
|
package/packages/demo/demo.js
CHANGED
|
@@ -4,6 +4,7 @@ import Pdf from './pdf.js'
|
|
|
4
4
|
|
|
5
5
|
class Demo extends Component {
|
|
6
6
|
state = {
|
|
7
|
+
isTagFilter: true,
|
|
7
8
|
shareMask: false,
|
|
8
9
|
mtoken
|
|
9
10
|
:
|
|
@@ -19,6 +20,7 @@ sessionId
|
|
|
19
20
|
// imRoomId: '',
|
|
20
21
|
// sessionId: '',
|
|
21
22
|
pdfRendering: false,
|
|
23
|
+
zeroVolAlert: false,
|
|
22
24
|
isVideo: false,
|
|
23
25
|
tellerAccount: '20250528',
|
|
24
26
|
// callbackUrl: 'http://182.92.184.31:8720/hsbc/callback',
|
|
@@ -48,7 +50,8 @@ sessionId
|
|
|
48
50
|
salesBranchCode: 'salesBranchCode', //网点编号(分行号)
|
|
49
51
|
financialOffice: "defaultOfficeId", // 理财室
|
|
50
52
|
audioinputNameList: ['默认值 - 外部麦克风 (Realtek(R) Audio)'],
|
|
51
|
-
needPreSale: true
|
|
53
|
+
needPreSale: true,
|
|
54
|
+
needIpad: false,
|
|
52
55
|
}
|
|
53
56
|
componentWillMount() {
|
|
54
57
|
// if(window.localStorage.getItem('sessionId') && window.localStorage.getItem('sessionId') != 'null' && window.localStorage.getItem('sessionId') != 'undefined') {
|
|
@@ -214,6 +217,9 @@ userExit =(val)=>{
|
|
|
214
217
|
console.log('componentDidCatch')
|
|
215
218
|
console.error(error, info)
|
|
216
219
|
}
|
|
220
|
+
onOneClickCopyResult(val) {
|
|
221
|
+
console.log('onOneClickCopyResult', val)
|
|
222
|
+
}
|
|
217
223
|
render() {
|
|
218
224
|
return (
|
|
219
225
|
<div className="test">
|
|
@@ -221,6 +227,7 @@ userExit =(val)=>{
|
|
|
221
227
|
this.state.isVideo ?
|
|
222
228
|
<div>
|
|
223
229
|
<HSBC
|
|
230
|
+
needIpad={this.state.needIpad}
|
|
224
231
|
needPreSale={this.state.needPreSale}
|
|
225
232
|
isOpenSound={true}
|
|
226
233
|
shareMask={this.state.shareMask}
|
|
@@ -269,6 +276,7 @@ userExit =(val)=>{
|
|
|
269
276
|
staffPermission={this.staffPermission}
|
|
270
277
|
onRoomAttendanceList={this.onRoomAttendanceList}
|
|
271
278
|
onNewJoinerIn={this.onNewJoinerIn}
|
|
279
|
+
onOneClickCopyResult={this.onOneClickCopyResult}
|
|
272
280
|
>
|
|
273
281
|
|
|
274
282
|
<Pdf></Pdf>
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
import React, { Component } from "react"
|
|
2
|
+
import "./transcription.less"
|
|
3
|
+
import API from "@/api/api"
|
|
4
|
+
import { FormattedMessage, injectIntl } from "react-intl";
|
|
5
|
+
import Modal from "antd/lib/modal";
|
|
6
|
+
import 'antd/lib/modal/style'
|
|
7
|
+
import { Button } from '../../../../../node_modules/antd/lib/index';
|
|
8
|
+
import { message } from 'antd';
|
|
9
|
+
@injectIntl
|
|
10
|
+
class Transcription extends Component {
|
|
11
|
+
state = {
|
|
12
|
+
data: {
|
|
13
|
+
"roomId": "7742532490251215",
|
|
14
|
+
"sessionId": "46694435",
|
|
15
|
+
"appAccount": "20250528",
|
|
16
|
+
"appointmentId": "1072390549",
|
|
17
|
+
"step": "customer-risk",
|
|
18
|
+
"callbackUrl": "https://aag.wealth-platform.prod.ali.cloud.cn.hsbc/nosaml/api/meeting/wealth/api/v1/meeting/oneClickCopy/callback",
|
|
19
|
+
"list": [{
|
|
20
|
+
"title": "风险承受程度和语句确认",
|
|
21
|
+
"productName": ["汇丰代客境外理财计划-富达基金 - 环球科技基金 - 美元-累计"],
|
|
22
|
+
"productCode": "IPFD1234/IPFD2234/IPFD3334",
|
|
23
|
+
"transactionNumber": "20260316152044056919",
|
|
24
|
+
"file": [{
|
|
25
|
+
"transactionNumber": "20260316152044056919",
|
|
26
|
+
"docId": "ff9fd0cc-854a-456d-bc17-3b9e9e8901fa",
|
|
27
|
+
"docType": "QDII-UT-DOC7",
|
|
28
|
+
"appointmentId": "1072390549",
|
|
29
|
+
"step": "copy-risk",
|
|
30
|
+
"previewContent": "根据您在我行最新风险承受能力问卷评估的结果,您的风险承受程度为 5级--“激进型”。 如您的风险承受能力发生变化,请重新进行评估。请在以下抄录框中,填写您的风险承受程度“激进型“",
|
|
31
|
+
"reminderContent": "为保障您的投资权益请输入以上风险承受程度",
|
|
32
|
+
"copyContent": "激进型"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"transactionNumber": "20260316152044056919",
|
|
36
|
+
"docId": "ff9fd0cc-854a-456d-bc17-3b9e9e8901fa",
|
|
37
|
+
"docType": "QDII-UT-DOC7",
|
|
38
|
+
"appointmentId": "1072390549",
|
|
39
|
+
"step": "copy-statement",
|
|
40
|
+
"previewContent": "本人已经阅读相关风险提示,充分了解并清楚知晓本产品的风险,愿意承担相关投资风险。",
|
|
41
|
+
"reminderContent": "为保障您的投资权益请输入以上风险提示语句",
|
|
42
|
+
"copyContent": "本人已经阅读相关风险提示,充分了解并清楚知晓本产品的风险,愿意承担相关投资风险。"
|
|
43
|
+
}]
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"title": "风险承受程度和语句确认-English",
|
|
47
|
+
"productName": ["汇丰代客境外理财计划-富达基金 - 环球科技基金 - 美元-累计"],
|
|
48
|
+
"productCode": "IPFD1234/IPFD2234/IPFD3334",
|
|
49
|
+
"transactionNumber": "20260316152044056919",
|
|
50
|
+
"file": [{
|
|
51
|
+
"transactionNumber": "20260316152044056919",
|
|
52
|
+
"docId": "ff9fd0cc-854a-456d-bc17-3b9e9e8901fa",
|
|
53
|
+
"docType": "QDII-UT-DOC7",
|
|
54
|
+
"appointmentId": "1072390549",
|
|
55
|
+
"step": "copy-risk",
|
|
56
|
+
"previewContent": "According to your latest risk profile questionnaire result in our bank, your risk tolerance level is Level 0 – “Conservative”. Whenever any factor(s) affecting your risk tolerance level changes, you should reassess your risk profile.Please state your risk tolerance level as “{rpqName}” in this section.",
|
|
57
|
+
"reminderContent": "为保障您的投资权益请输入以上风险承受程度",
|
|
58
|
+
"copyContent": "“Conservative”"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"transactionNumber": "20260316152044056919",
|
|
62
|
+
"docId": "ff9fd0cc-854a-456d-bc17-3b9e9e8901fa",
|
|
63
|
+
"docType": "QDII-UT-DOC7",
|
|
64
|
+
"appointmentId": "1072390549",
|
|
65
|
+
"step": "copy-statement",
|
|
66
|
+
"previewContent": "I/We have read the relevant risk disclosure, obtained sufficient knowledge and understood clearly the product risk, and will undertake the relevant risk.",
|
|
67
|
+
"reminderContent": "为保障您的投资权益请输入以上风险提示语句",
|
|
68
|
+
"copyContent": "I/We have read the relevant risk disclosure, obtained sufficient knowledge and understood clearly the product risk, and will undertake the relevant risk."
|
|
69
|
+
}]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"title": "风险语句确认",
|
|
73
|
+
"productName": ["汇丰代客境外理财计划-贝莱德基金 - 环球科技基金 - 美元-累计"],
|
|
74
|
+
"productCode": "IPFD1234/IPFD2234/IPFD3334",
|
|
75
|
+
"transactionNumber": "20260316152044056920",
|
|
76
|
+
"file": [{
|
|
77
|
+
"productCode": "IPFD5678",
|
|
78
|
+
"transactionNumber": "20260316152044056920",
|
|
79
|
+
"docId": "ff9fd0cc-854a-456d-bc17-3b9e9e8901fa",
|
|
80
|
+
"docType": "QDII-UT-DOC7",
|
|
81
|
+
"appointmentId": "1072390549",
|
|
82
|
+
"step": "copy-statement",
|
|
83
|
+
"previewContent": "本人(等)已经阅读风险揭示,愿意承担投资风险。",
|
|
84
|
+
"reminderContent": "为保障您的投资权益请输入以上风险提示语句",
|
|
85
|
+
"copyContent": "本人(等)已经阅读风险揭示,愿意承担投资风险。"
|
|
86
|
+
}]
|
|
87
|
+
}]
|
|
88
|
+
},
|
|
89
|
+
formData: {},
|
|
90
|
+
index: 0,
|
|
91
|
+
isModalVisibleEnd: false,
|
|
92
|
+
isModalVisibleSubmitError: false,
|
|
93
|
+
isLoading: false,
|
|
94
|
+
}
|
|
95
|
+
componentWillMount() {
|
|
96
|
+
// 初始化数据
|
|
97
|
+
let data = this.props.data || this.state.data;
|
|
98
|
+
this.setState({
|
|
99
|
+
data: data,
|
|
100
|
+
formData: data.list && data.list.length > 0 ? data.list[this.state.index] : {}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
copy(index, item) {
|
|
104
|
+
let list = [...this.state.formData.file];
|
|
105
|
+
list[index].copy = item;
|
|
106
|
+
this.setState({
|
|
107
|
+
formData: { ...this.state.formData, file: list },
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// 检查是否所有 copy 都有值
|
|
111
|
+
isAllCopied() {
|
|
112
|
+
if (!this.state.formData.file || this.state.formData.file.length === 0) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
return this.state.formData.file.every(item => item.copy && item.copy.trim() !== '');
|
|
116
|
+
}
|
|
117
|
+
// 高亮匹配文本的方法
|
|
118
|
+
highlightMatch(text, searchText) {
|
|
119
|
+
if (!searchText || !text) {
|
|
120
|
+
return text;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const parts = text.split(searchText);
|
|
124
|
+
if (parts.length === 1) {
|
|
125
|
+
return text;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return parts.map((part, index) => (
|
|
129
|
+
<span key={index}>
|
|
130
|
+
{part}
|
|
131
|
+
{index < parts.length - 1 && <strong style={{ color: '#000000' }}>{searchText}</strong>}
|
|
132
|
+
</span>
|
|
133
|
+
));
|
|
134
|
+
}
|
|
135
|
+
next() {
|
|
136
|
+
// 防止重复点击
|
|
137
|
+
if (this.state.isLoading) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (this.state.index == this.state.data.list.length - 1) {
|
|
142
|
+
console.log('完成')
|
|
143
|
+
this.setState({ isLoading: true });
|
|
144
|
+
this.finishClick().finally(() => {
|
|
145
|
+
this.setState({ isLoading: false });
|
|
146
|
+
});
|
|
147
|
+
} else {
|
|
148
|
+
this.setState({
|
|
149
|
+
index: this.state.index + 1,
|
|
150
|
+
formData: this.state.data.list[this.state.index + 1] || {}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
sendMessage = () => {
|
|
155
|
+
this.props.sendMessage({
|
|
156
|
+
'typeId': 952702,
|
|
157
|
+
'sessionId': window.imRoom.sessionId,
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
finishClick = async () => {
|
|
161
|
+
try {
|
|
162
|
+
let result = await API.oneClickCopy({
|
|
163
|
+
...this.props.data
|
|
164
|
+
});
|
|
165
|
+
console.log(result)
|
|
166
|
+
|
|
167
|
+
if (result.code == 200) {
|
|
168
|
+
this.sendMessage()
|
|
169
|
+
this.props.finish()
|
|
170
|
+
} else {
|
|
171
|
+
this.setState({
|
|
172
|
+
isModalVisibleSubmitError: true
|
|
173
|
+
})
|
|
174
|
+
}
|
|
175
|
+
} catch (err) {
|
|
176
|
+
this.setState({
|
|
177
|
+
isModalVisibleSubmitError: true
|
|
178
|
+
})
|
|
179
|
+
console.log('pdfCallback', err)
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
handleSubmit = () => {
|
|
183
|
+
this.setState({
|
|
184
|
+
isModalVisibleSubmitError: false
|
|
185
|
+
})
|
|
186
|
+
}
|
|
187
|
+
exit = () => {
|
|
188
|
+
this.setState({
|
|
189
|
+
isModalVisibleEnd: true
|
|
190
|
+
})
|
|
191
|
+
}
|
|
192
|
+
handleCancelEnd = () => {
|
|
193
|
+
this.setState({
|
|
194
|
+
isModalVisibleEnd: false
|
|
195
|
+
})
|
|
196
|
+
}
|
|
197
|
+
handleOkEnd = () => {
|
|
198
|
+
this.setState({
|
|
199
|
+
isModalVisibleEnd: false
|
|
200
|
+
})
|
|
201
|
+
// 异常退出
|
|
202
|
+
this.props.handleReceiveMsg({
|
|
203
|
+
'typeId': 952701,
|
|
204
|
+
'sessionId': window.imRoom.sessionId,
|
|
205
|
+
})
|
|
206
|
+
this.props.finish();
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
render() {
|
|
210
|
+
return (
|
|
211
|
+
<div className="transcription">
|
|
212
|
+
<div className="thehead">
|
|
213
|
+
<div className="title">
|
|
214
|
+
<div className="title-color"></div>
|
|
215
|
+
<div className="title-text">{this.state.formData.title}</div>
|
|
216
|
+
</div>
|
|
217
|
+
<div className='btns'>
|
|
218
|
+
<div className="reset" onClick={() => this.exit()}><FormattedMessage id="exit" /></div>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
<div className="prompt">
|
|
222
|
+
交易流水号:{this.state.formData.transactionNumber}
|
|
223
|
+
</div>
|
|
224
|
+
<div className="prompt">产品代码:{this.state.formData.productCode}</div>
|
|
225
|
+
<div className="prompt">{this.state.formData.reminderContent}</div>
|
|
226
|
+
{
|
|
227
|
+
this.state.formData.file && this.state.formData.file.map((item, index) => {
|
|
228
|
+
return (
|
|
229
|
+
<div className="item" key={index}>
|
|
230
|
+
<div className="item-value">
|
|
231
|
+
<div className="item-content">{this.highlightMatch(item.previewContent, item.copyContent)}</div>
|
|
232
|
+
<div className="item-button">
|
|
233
|
+
<button className="item-button-copy" onClick={() => this.copy(index, item.copyContent)}>一键输入</button>
|
|
234
|
+
</div>
|
|
235
|
+
</div>
|
|
236
|
+
|
|
237
|
+
<div >
|
|
238
|
+
<div className="item-input">{item.copy}</div>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
)
|
|
242
|
+
})
|
|
243
|
+
}
|
|
244
|
+
<div className="submit">
|
|
245
|
+
<button
|
|
246
|
+
className="item-button-copy"
|
|
247
|
+
onClick={() => this.next()}
|
|
248
|
+
disabled={!this.isAllCopied() || this.state.isLoading}
|
|
249
|
+
style={!this.isAllCopied() || this.state.isLoading ? {
|
|
250
|
+
background: '#CCCCCC',
|
|
251
|
+
borderColor: '#CCCCCC',
|
|
252
|
+
color: '#999999',
|
|
253
|
+
cursor: 'not-allowed'
|
|
254
|
+
} : {}}
|
|
255
|
+
>
|
|
256
|
+
{this.state.isLoading ? '提交中...' : '确认'}
|
|
257
|
+
</button>
|
|
258
|
+
|
|
259
|
+
</div>
|
|
260
|
+
<Modal transitionName="" maskTransitionName="" getContainer={document.getElementById('multiModule')} destroyOnClose={true} closable={false} centered={true} visible={this.state.isModalVisibleEnd} footer={[<div key='end'>
|
|
261
|
+
<Button className="modelButtonCancel" onClick={this.handleCancelEnd}><FormattedMessage id="cancel" /></Button>
|
|
262
|
+
<Button className="modelButtonOk" type="primary" danger onClick={this.handleOkEnd}><FormattedMessage id="ok" /></Button>
|
|
263
|
+
</div>
|
|
264
|
+
]}>
|
|
265
|
+
<div className='endModal'>
|
|
266
|
+
<div className='modalEndTitle'>
|
|
267
|
+
<FormattedMessage id="whether" />
|
|
268
|
+
</div>
|
|
269
|
+
<div className='modalEnd'>
|
|
270
|
+
<FormattedMessage id="progress" />
|
|
271
|
+
</div>
|
|
272
|
+
</div>
|
|
273
|
+
</Modal>
|
|
274
|
+
<Modal transitionName="" maskTransitionName="" destroyOnClose={true} closable={false} centered={true} visible={this.state.isModalVisibleSubmitError} footer={[<div key='end'>
|
|
275
|
+
<Button className="modelButtonOk" type="primary" danger onClick={this.handleSubmit}><FormattedMessage id="ok" /></Button>
|
|
276
|
+
</div>
|
|
277
|
+
]}>
|
|
278
|
+
<div className='endModal'>
|
|
279
|
+
<div className='modalEndTitle'>
|
|
280
|
+
<FormattedMessage id="message" />
|
|
281
|
+
</div>
|
|
282
|
+
<div className='modalEnd'>
|
|
283
|
+
<FormattedMessage id="submission" />
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
</Modal>
|
|
287
|
+
</div>
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
export default Transcription;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
.transcription{
|
|
2
|
+
height: 100%;
|
|
3
|
+
background: #fff;
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
.thehead{
|
|
8
|
+
display: flex;
|
|
9
|
+
justify-content: space-between;
|
|
10
|
+
padding: 14px 24px 0;
|
|
11
|
+
.title{
|
|
12
|
+
display: flex;
|
|
13
|
+
.title-color{
|
|
14
|
+
width: 2px;
|
|
15
|
+
height: 1.5rem;
|
|
16
|
+
background: #00847F;
|
|
17
|
+
margin-top: 0.25rem;
|
|
18
|
+
}
|
|
19
|
+
.title-text{
|
|
20
|
+
font-size: 1.5rem;
|
|
21
|
+
color: #323232;
|
|
22
|
+
margin-left: 8px;
|
|
23
|
+
font-weight: 500;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
.btns{
|
|
28
|
+
display: flex;
|
|
29
|
+
}
|
|
30
|
+
.qianshu{
|
|
31
|
+
width: 96px;
|
|
32
|
+
height: 2rem;
|
|
33
|
+
background: #F9F2F3;
|
|
34
|
+
border-radius: 2px;
|
|
35
|
+
border: 1px solid #E5B2B5;
|
|
36
|
+
font-size: 14px;
|
|
37
|
+
color: #DB0011;
|
|
38
|
+
line-height: 2rem;
|
|
39
|
+
text-align: center;
|
|
40
|
+
}
|
|
41
|
+
.reset{
|
|
42
|
+
width: 96px;
|
|
43
|
+
height: 2rem;
|
|
44
|
+
background: white;
|
|
45
|
+
border-radius: 2px;
|
|
46
|
+
border: 1px solid #DCDCDC;
|
|
47
|
+
font-size: 14px;
|
|
48
|
+
color: #646464;
|
|
49
|
+
line-height: 2rem;
|
|
50
|
+
text-align: center;
|
|
51
|
+
margin-right: 8px;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
.prompt{
|
|
55
|
+
padding: 14px 24px 0;
|
|
56
|
+
font-size: 1rem;
|
|
57
|
+
}
|
|
58
|
+
.item{
|
|
59
|
+
padding: 14px 24px ;
|
|
60
|
+
.item-value{
|
|
61
|
+
display: flex;
|
|
62
|
+
justify-content: space-between;
|
|
63
|
+
align-items: center;
|
|
64
|
+
}
|
|
65
|
+
.item-content{
|
|
66
|
+
// border: 1px #666666 solid;
|
|
67
|
+
// padding: 14px 24px;
|
|
68
|
+
min-height: 50px;
|
|
69
|
+
}
|
|
70
|
+
.item-button{
|
|
71
|
+
display: flex;
|
|
72
|
+
justify-content: flex-end;
|
|
73
|
+
padding-bottom: 14px;
|
|
74
|
+
}
|
|
75
|
+
.item-button-title{
|
|
76
|
+
font-size: 1rem;
|
|
77
|
+
color: #323232;
|
|
78
|
+
margin-left: 8px;
|
|
79
|
+
font-weight: 500;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.item-input{
|
|
83
|
+
border: 1px #666666 solid;
|
|
84
|
+
padding: 14px 24px;
|
|
85
|
+
min-height: 50px;
|
|
86
|
+
color: #000000;
|
|
87
|
+
font-weight: bolder;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
.submit {
|
|
91
|
+
text-align: center;
|
|
92
|
+
}
|
|
93
|
+
.item-button-copy{
|
|
94
|
+
width: 96px;
|
|
95
|
+
height: 2rem;
|
|
96
|
+
background: #F9F2F3;
|
|
97
|
+
border-radius: 2px;
|
|
98
|
+
border: 1px solid #E5B2B5;
|
|
99
|
+
font-size: 14px;
|
|
100
|
+
color: #DB0011;
|
|
101
|
+
line-height: 2rem;
|
|
102
|
+
text-align: center;
|
|
103
|
+
cursor: pointer;
|
|
104
|
+
|
|
105
|
+
&:disabled {
|
|
106
|
+
background: #CCCCCC;
|
|
107
|
+
border-color: #CCCCCC;
|
|
108
|
+
color: #999999;
|
|
109
|
+
cursor: not-allowed;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -2,6 +2,7 @@ import React, { Component } from 'react';
|
|
|
2
2
|
import './multiModule.less'
|
|
3
3
|
import Copy from "./components/copy/copylist" //抄录
|
|
4
4
|
import Subscribe from "./components/subscribe/subscribe" //签署
|
|
5
|
+
import Transcription from "./components/transcription/transcription" // 一建抄录
|
|
5
6
|
class multiModule extends Component {
|
|
6
7
|
state = {
|
|
7
8
|
};
|
|
@@ -17,6 +18,7 @@ class multiModule extends Component {
|
|
|
17
18
|
{/* <Subscribe /> */}
|
|
18
19
|
{this.props.moduleName=='copy'?<Copy data={this.props.data} handleReceiveMsg={this.handleReceiveMsg} finish={this.finish}/>:null}
|
|
19
20
|
{this.props.moduleName=='subscribe'?<Subscribe data={this.props.data} handleReceiveMsg={this.handleReceiveMsg} finish={this.finish}/>:null}
|
|
21
|
+
{this.props.moduleName=='transcription'?<Transcription data={this.props.data} handleReceiveMsg={this.handleReceiveMsg} finish={this.finish}></Transcription>:null}
|
|
20
22
|
</div>
|
|
21
23
|
);
|
|
22
24
|
}
|
|
@@ -66,7 +66,7 @@ import axios from 'axios';
|
|
|
66
66
|
import CryptoJS from "crypto-js";
|
|
67
67
|
|
|
68
68
|
|
|
69
|
-
const SDK_VERISON = '2.0.
|
|
69
|
+
const SDK_VERISON = '2.0.96'
|
|
70
70
|
const IDtypeFront = '请客户在其设备后置摄像头下展示证件正面(如:身份证照片页面)'
|
|
71
71
|
const IDtypeBack = '请在后置摄像头下展示证件反面(如:身份证国徽页)'
|
|
72
72
|
const { Option } = Select;
|
|
@@ -727,7 +727,7 @@ class Video extends Component {
|
|
|
727
727
|
height: (420 * SCALE)
|
|
728
728
|
})
|
|
729
729
|
// 开启业务录制的时候type传值,在后面加标识,全局的不加
|
|
730
|
-
const filePath = 'recordId_' + this.props.tellerAccount + new Date().valueOf() + type;
|
|
730
|
+
const filePath = 'recordId_' + this.props.tellerAccount + new Date().valueOf() + '_' + type;
|
|
731
731
|
const recordParam = {};
|
|
732
732
|
recordParam.width = 1280 * SCALE;
|
|
733
733
|
recordParam.height = 720 * SCALE;
|
|
@@ -761,7 +761,11 @@ class Video extends Component {
|
|
|
761
761
|
},
|
|
762
762
|
];
|
|
763
763
|
recordParam.tagPositions = list
|
|
764
|
-
//
|
|
764
|
+
// 新加参数 isTagFilter true 的时候是开启只录制tag的,false是关闭录制全部的
|
|
765
|
+
if(this.props.isTagFilter) {
|
|
766
|
+
recordParam.tagFilter = 'tag' //之前是为了透出小蜜的,现在注释掉是因为客户需要放开
|
|
767
|
+
}
|
|
768
|
+
|
|
765
769
|
console.log('recordParam', recordParam);
|
|
766
770
|
// 开启音频录制,如果有业务id用,没用sessionid 用于在成功回调里去区分是音频还是正常
|
|
767
771
|
that.test_controller.StartRemoteRecord(filePath, recordParam, record_business_id ? record_business_id + '_' + type : this.state.sessionId + '_' + type)
|
|
@@ -2235,6 +2239,31 @@ class Video extends Component {
|
|
|
2235
2239
|
if(this.state.sessionId == Mival.data.sessionId ) {
|
|
2236
2240
|
this.messageClick('客户端音量过低', 'error')
|
|
2237
2241
|
}
|
|
2242
|
+
} else if (Mival.typeId == 9527) {
|
|
2243
|
+
// 一建抄录
|
|
2244
|
+
if(this.state.sessionId == Mival.sessionId) {
|
|
2245
|
+
this.setState({
|
|
2246
|
+
moduleData: Mival,
|
|
2247
|
+
isBackdrop: false
|
|
2248
|
+
}, ()=>{
|
|
2249
|
+
this.showModal('transcription')
|
|
2250
|
+
})
|
|
2251
|
+
}
|
|
2252
|
+
} else if (Mival.typeId == 952701) {
|
|
2253
|
+
if(this.state.sessionId == Mival.sessionId) {
|
|
2254
|
+
// 一建抄录--异常退出
|
|
2255
|
+
this.props.onOneClickCopyResult ({
|
|
2256
|
+
state: '0'
|
|
2257
|
+
})
|
|
2258
|
+
}
|
|
2259
|
+
|
|
2260
|
+
} else if (Mival.typeId == 952702) {
|
|
2261
|
+
if(this.state.sessionId == Mival.sessionId) {
|
|
2262
|
+
// 一建抄录--正常退出
|
|
2263
|
+
this.props.onOneClickCopyResult ({
|
|
2264
|
+
state: '1'
|
|
2265
|
+
})
|
|
2266
|
+
}
|
|
2238
2267
|
}
|
|
2239
2268
|
}
|
|
2240
2269
|
getUserTitle = (userId) => {
|
|
@@ -3143,8 +3172,9 @@ class Video extends Component {
|
|
|
3143
3172
|
console.log('新加⼊房间者', participant);
|
|
3144
3173
|
this.saveLog('mrtc someone joined room, userId=' + participant)
|
|
3145
3174
|
this.state.isCustomer = true
|
|
3146
|
-
|
|
3147
|
-
if (participant.includes(IPAD_SUFFIX) && this.state.businessId){
|
|
3175
|
+
// 改为根据this.props.needIpad判断是否需要ipad
|
|
3176
|
+
// if (participant.includes(IPAD_SUFFIX) && this.state.businessId){
|
|
3177
|
+
if (participant.includes(IPAD_SUFFIX) && this.props.needIpad){
|
|
3148
3178
|
this.saveVideoPoint('padConnected', 'ipad已连接');
|
|
3149
3179
|
}
|
|
3150
3180
|
if (participant.includes(H5_SUFFIX)){
|
|
@@ -3254,11 +3284,12 @@ class Video extends Component {
|
|
|
3254
3284
|
|
|
3255
3285
|
}
|
|
3256
3286
|
|
|
3257
|
-
// 记录ipad摄像头流,需要单独开启录制
|
|
3258
|
-
if (feed.mediaSource == 'VIDEO_SOURCE_CAMERA' && feed.uid.includes(IPAD_SUFFIX)) {
|
|
3287
|
+
// 记录ipad摄像头流,需要单独开启录制 额外需要判断是否要求ipad加入 this.props.needIpad
|
|
3288
|
+
if (feed.mediaSource == 'VIDEO_SOURCE_CAMERA' && feed.uid.includes(IPAD_SUFFIX) && this.props.needIpad) {
|
|
3259
3289
|
this.state.ipadTag = feed.tag;
|
|
3260
|
-
//
|
|
3261
|
-
if (
|
|
3290
|
+
// ipad未在录制,立即开启ipad录制(ipad后加入)---不需要根据是否业务了,上面根据this.props.needIpad判断是否需要ipad
|
|
3291
|
+
if (!this.state.ipadRecordId) {
|
|
3292
|
+
// if (this.state.businessId && !this.state.ipadRecordId) {
|
|
3262
3293
|
this.enableIpadRecording(this.state.businessId)
|
|
3263
3294
|
}
|
|
3264
3295
|
}
|
|
@@ -3342,7 +3373,9 @@ class Video extends Component {
|
|
|
3342
3373
|
console.log('取消发布者', feed)
|
|
3343
3374
|
|
|
3344
3375
|
// ipad取消发布提醒
|
|
3345
|
-
if (feed.uid.includes(IPAD_SUFFIX) && this.state.businessId){
|
|
3376
|
+
// if (feed.uid.includes(IPAD_SUFFIX) && this.state.businessId){
|
|
3377
|
+
// 现在不根据是否双录来判断,根据外部传入的this.props.needIpad
|
|
3378
|
+
if (feed.uid.includes(IPAD_SUFFIX) && this.props.needIpad){
|
|
3346
3379
|
// ipad单独处理,双录过程中ipad如果取消发布,要提示+循环播报直到ipad重新入会
|
|
3347
3380
|
this.setState({
|
|
3348
3381
|
IpadLeaveErrorModalVisible: true,
|
|
@@ -3363,7 +3396,7 @@ class Video extends Component {
|
|
|
3363
3396
|
}
|
|
3364
3397
|
setTimeout(this.ipadMediaClosePlay, 0);
|
|
3365
3398
|
} else if (feed.uid.includes(IPAD_SUFFIX)) {
|
|
3366
|
-
// 非双录下ipad离开提示iPad
|
|
3399
|
+
// 非双录下ipad离开提示iPad已断开-----this.props.needIpad为false
|
|
3367
3400
|
this.setState({
|
|
3368
3401
|
ipadTag: '',
|
|
3369
3402
|
})
|
|
@@ -3427,7 +3460,10 @@ class Video extends Component {
|
|
|
3427
3460
|
return
|
|
3428
3461
|
}
|
|
3429
3462
|
|
|
3430
|
-
if (participant.includes(IPAD_SUFFIX) && this.state.businessId){
|
|
3463
|
+
// if (participant.includes(IPAD_SUFFIX) && this.state.businessId){
|
|
3464
|
+
//判断条件从之前的是否双录过程中,改成--根据this.props.needIpad来判断,true是需要ipad,false是不需要ipad
|
|
3465
|
+
if (participant.includes(IPAD_SUFFIX) && this.props.needIpad){
|
|
3466
|
+
|
|
3431
3467
|
// ipad单独处理,双录过程中ipad如果离开,要提示+循环播报直到ipad重新入会
|
|
3432
3468
|
this.setState({
|
|
3433
3469
|
IpadLeaveErrorModalVisible: true,
|
|
@@ -3448,7 +3484,7 @@ class Video extends Component {
|
|
|
3448
3484
|
this.saveLog('iPad leave room during recording')
|
|
3449
3485
|
return
|
|
3450
3486
|
} else if (participant.includes(IPAD_SUFFIX)) {
|
|
3451
|
-
// 非双录下ipad离开提示iPad已断开
|
|
3487
|
+
// 非双录下ipad离开提示iPad已断开 --this.props.needIpad为false
|
|
3452
3488
|
this.setState({
|
|
3453
3489
|
ipadTag: '',
|
|
3454
3490
|
})
|
|
@@ -7413,7 +7449,7 @@ class Video extends Component {
|
|
|
7413
7449
|
this.state.envInfo.microResult=='合格' &&
|
|
7414
7450
|
this.state.envInfo.speakerResult=='合格' &&
|
|
7415
7451
|
(this.state.envInfo.lightResult=='合格' || this.props.recordMode == 2 ) &&
|
|
7416
|
-
(this.state.ipadTag || this.props.
|
|
7452
|
+
(this.state.ipadTag || !this.props.needIpad)
|
|
7417
7453
|
|
|
7418
7454
|
const sectionStyle = this.state.tabTitles.length > 0 ? {
|
|
7419
7455
|
zIndex: '-1',
|
|
@@ -8368,6 +8404,8 @@ Video.defaultProps = {
|
|
|
8368
8404
|
needPreSale: true, // 是否开启音频录制 默认true--只控制售前full
|
|
8369
8405
|
signalDisconnectedTime: 20, // 网络异常断开多久后异常弹窗提示
|
|
8370
8406
|
zeroVolAlert: true, // true 开启音量持续提示,,false不开启
|
|
8407
|
+
isTagFilter: true, // 默认true 的时候是开启只录制标签是tag的(剔除掉小蜜的声音的),false是关闭录制全部的
|
|
8408
|
+
needIpad: true,// 默认true 控制是否开启iPad(断连提示,弹窗关闭,录制判断),false不需要
|
|
8371
8409
|
logUrl: 'http://hsbc.cn-shanghai.log.aliyuncs.com/logstores/hsbc/track?APIVersion=0.6.0&app=meeting-ui',
|
|
8372
8410
|
internalUrl: 'https://wp-staff-gateway.wealth-platform.uat.ali.cloud.cn.hsbc/meeting-ui/OHB/CN/HSBC?chnlID=OHB&locale=zh_CN&chnlCC=CN&chnlGMC=HSBC&targetFunc=supervisorMeeting&sourceFunc=rmMeeting'
|
|
8373
8411
|
}
|
package/packages/demo/1.vue
DELETED
|
File without changes
|