@chenchaolong/plugin-trade-compliance-workbench 0.1.3 → 0.1.5

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.
@@ -8,10 +8,6 @@
8
8
 
9
9
  injectStyles()
10
10
 
11
- function isObject(value) {
12
- return value && typeof value === 'object' && !Array.isArray(value)
13
- }
14
-
15
11
  function post(type, body, transfer) {
16
12
  if (!instanceId && type !== 'ready') return
17
13
  parent.postMessage(Object.assign({ channel: CHANNEL, protocolVersion: VERSION, instanceId, type }, body || {}), '*', transfer || [])
@@ -31,20 +27,13 @@
31
27
  }
32
28
 
33
29
  function reportResize() {
34
- const height = Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, 720)
35
- post('resize', { height })
30
+ post('resize', { height: Math.max(document.body.scrollHeight, document.documentElement.scrollHeight, 720) })
36
31
  }
37
32
 
38
33
  async function toFilePayload(file) {
39
34
  const buffer = await file.arrayBuffer()
40
35
  return {
41
- payload: {
42
- name: file.name,
43
- type: file.type,
44
- size: file.size,
45
- lastModified: file.lastModified,
46
- buffer
47
- },
36
+ payload: { name: file.name, type: file.type, size: file.size, lastModified: file.lastModified, buffer },
48
37
  transfer: [buffer]
49
38
  }
50
39
  }
@@ -66,14 +55,9 @@
66
55
  const commands = collectAssistantCommands(payload)
67
56
  let dispatched = 0
68
57
  for (const command of commands) {
69
- const response = await request('invokeClientCommand', {
70
- commandKey: command.commandKey,
71
- payload: command.payload
72
- })
58
+ const response = await request('invokeClientCommand', { commandKey: command.commandKey, payload: command.payload })
73
59
  const result = getResponsePayload(response)
74
- if (result && result.success === false) {
75
- throw new Error(resolveMessage(result.message) || '智能体消息发送失败')
76
- }
60
+ if (result && result.success === false) throw new Error(resolveMessage(result.message) || '智能体消息发送失败')
77
61
  dispatched += 1
78
62
  }
79
63
  return dispatched
@@ -82,11 +66,12 @@
82
66
  function App() {
83
67
  const [context, setContext] = React.useState(null)
84
68
  const [data, setData] = React.useState(normalizeData(null))
85
- const [activePage, setActivePage] = React.useState('controlled-goods-page')
69
+ const [activePage, setActivePage] = React.useState('overview-page')
86
70
  const [selectedReviewId, setSelectedReviewId] = React.useState(null)
87
71
  const [busy, setBusy] = React.useState(false)
88
72
  const [notice, setNotice] = React.useState('')
89
73
  const [query, setQuery] = React.useState('')
74
+ const [showManualForm, setShowManualForm] = React.useState(false)
90
75
  const [form, setForm] = React.useState({ productName: '', hsCode: '', keywords: '', controlNote: '', enabled: true })
91
76
 
92
77
  React.useEffect(() => {
@@ -103,21 +88,27 @@
103
88
  }
104
89
  }, [])
105
90
 
106
- React.useEffect(reportResize, [data, activePage, selectedReviewId, busy, notice])
91
+ React.useEffect(reportResize, [data, activePage, selectedReviewId, busy, notice, showManualForm])
107
92
 
108
93
  const reviewItems = data.reviewItems
109
94
  const pendingItems = reviewItems.filter((item) => (item.reviewStatus || 'pending') === 'pending')
110
- const selectedReview = reviewItems.find((item) => item.id === selectedReviewId) || pendingItems[0] || reviewItems[0] || null
95
+ const controlledReviews = filterItems(reviewItems.filter((item) => item.type === 'controlled_goods'), query, reviewSearchKeys)
96
+ const pendingControlledReviews = controlledReviews.filter((item) => (item.reviewStatus || 'pending') === 'pending')
97
+ const supplierReviews = filterItems(reviewItems.filter((item) => item.type === 'supplier_product'), query, reviewSearchKeys)
98
+ const pendingSupplierReviews = supplierReviews.filter((item) => (item.reviewStatus || 'pending') === 'pending')
99
+ const salesReviews = filterItems(reviewItems.filter((item) => item.type === 'customs_workbook'), query, reviewSearchKeys)
100
+ const pendingSalesReviews = salesReviews.filter((item) => (item.reviewStatus || 'pending') === 'pending')
111
101
  const filteredControlledGoods = filterItems(data.controlledGoods, query, ['productName', 'hsCode', 'controlNote'])
112
102
  const filteredProducts = filterItems(data.products, query, ['supplierName', 'productName', 'model', 'enrichedHsCode', 'englishName'])
113
103
  const filteredWorkbooks = filterItems(data.workbookGenerations, query, ['fileName', 'invoiceNo', 'contractNo', 'sourceFileName'])
104
+ const selectedReview = reviewItems.find((item) => item.id === selectedReviewId) || null
114
105
 
115
106
  async function reload(nextContext) {
116
107
  const activeContext = nextContext || context
117
108
  if (!activeContext) return
118
109
  setBusy(true)
119
110
  try {
120
- const response = await request('requestData', { query: { page: 1, pageSize: 100, search: query, parameters: {} } })
111
+ const response = await request('requestData', { query: { page: 1, pageSize: 200, search: query, parameters: {} } })
121
112
  setData(normalizeData(getResponsePayload(response)))
122
113
  } catch (error) {
123
114
  showNotice('刷新失败:' + getErrorMessage(error), 'error')
@@ -132,8 +123,8 @@
132
123
  try {
133
124
  const response = await executeFileAction(actionKey, file, { name: file.name, fileName: file.name }, {})
134
125
  assertActionSuccess(response)
135
- const dispatched = await dispatchAssistantCommands(getResponsePayload(response))
136
- showNotice(dispatched ? '文件已发送给智能体解析,识别结果会进入待审核列表。' : '文件已提交,识别结果会进入待审核列表。', 'success')
126
+ const dispatched = await dispatchAssistantCommands(getActionDataPayload(response))
127
+ showNotice(dispatched ? '文件已发送给智能体解析,识别结果会进入待审核列表。' : '文件已登记,等待识别结果。', 'success')
137
128
  await reload()
138
129
  } catch (error) {
139
130
  showNotice(getErrorMessage(error), 'error')
@@ -156,6 +147,7 @@
156
147
  }, {})
157
148
  assertActionSuccess(response)
158
149
  setForm({ productName: '', hsCode: '', keywords: '', controlNote: '', enabled: true })
150
+ setShowManualForm(false)
159
151
  showNotice('管控商品已保存。', 'success')
160
152
  await reload()
161
153
  } catch (error) {
@@ -172,7 +164,7 @@
172
164
  const confirmedData = Object.assign({}, item.defaultData || {}, item.extractedData || {}, item.confirmedData || {})
173
165
  const response = await executeAction('confirm_review_item', item.id, { itemId: item.id, confirmedData }, {})
174
166
  assertActionSuccess(response)
175
- showNotice('审核项已确认。', 'success')
167
+ showNotice('审核项已确认并写入业务列表。', 'success')
176
168
  await reload()
177
169
  } catch (error) {
178
170
  showNotice(getErrorMessage(error), 'error')
@@ -183,10 +175,10 @@
183
175
 
184
176
  async function generateWorkbook() {
185
177
  if (busy) return
186
- const salesItem = reviewItems.find((item) => item.type === 'customs_workbook')
178
+ const salesItem = salesReviews.find((item) => item.reviewStatus === 'confirmed') || salesReviews[0]
187
179
  setBusy(true)
188
180
  try {
189
- const base = Object.assign({}, salesItem && salesItem.defaultData, salesItem && salesItem.extractedData, salesItem && salesItem.confirmedData)
181
+ const base = readMerged(salesItem || {})
190
182
  const invoiceNo = base.invoiceNo || ('INV-' + new Date().toISOString().slice(0, 10).replace(/-/g, ''))
191
183
  const response = await executeAction('generate_customs_workbook', null, {
192
184
  invoiceNo,
@@ -208,89 +200,115 @@
208
200
  function showNotice(message, level) {
209
201
  setNotice((level === 'error' ? '错误:' : '') + message)
210
202
  notify(level || 'info', message)
211
- setTimeout(() => setNotice(''), 4000)
203
+ setTimeout(() => setNotice(''), 4500)
212
204
  }
213
205
 
214
206
  return h('div', { className: 'tcw-shell' },
215
207
  h('header', { className: 'tcw-header' },
216
208
  h('div', { className: 'tcw-title-block' },
217
209
  h('span', { className: 'tcw-kicker' }, '外贸合规工作台'),
218
- h('h1', null, 'Trade Compliance Workbench'),
219
- h('p', null, '管控商品维护、供应商商品审核、销售发票生成')
210
+ h('h1', null, pageTitle(activePage)),
211
+ h('p', null, pageSubtitle(activePage))
220
212
  ),
221
213
  h('div', { className: 'tcw-header-actions' },
222
- h('input', {
223
- className: 'tcw-search',
224
- value: query,
225
- placeholder: '搜索商品、供应商、海关编码',
226
- onChange: (event) => setQuery(event.target.value)
227
- }),
214
+ h('input', { className: 'tcw-search', value: query, placeholder: '搜索商品、供应商、海关编码、文件名', onChange: (event) => setQuery(event.target.value) }),
228
215
  h('button', { className: 'tcw-btn tcw-btn-soft', disabled: busy, onClick: () => reload() }, busy ? '处理中' : '刷新')
229
216
  )
230
217
  ),
231
218
  notice ? h('div', { className: 'tcw-notice' }, notice) : null,
232
- h('section', { className: 'tcw-metrics' },
233
- metric('待审核', pendingItems.length),
234
- metric('管控商品', data.controlledGoods.length),
235
- metric('供应商商品', data.products.length),
236
- metric('发票历史', data.workbookGenerations.length)
237
- ),
238
219
  h('nav', { className: 'tcw-tabs' }, [
239
- tab('controlled-goods-page', '管控商品管理'),
240
- tab('products-page', '商品管理'),
241
- tab('workbooks-page', '生成销售发票')
220
+ tab('overview-page', '工作台总览'),
221
+ tab('controlled-goods-page', '管控商品'),
222
+ tab('products-page', '供应商商品'),
223
+ tab('workbooks-page', '销售发票')
242
224
  ]),
243
- h('main', { className: 'tcw-main' },
225
+ h('main', { className: selectedReview ? 'tcw-main with-drawer' : 'tcw-main' },
244
226
  h('section', { className: 'tcw-content' },
227
+ activePage === 'overview-page' ? renderOverviewPage() : null,
245
228
  activePage === 'controlled-goods-page' ? renderControlledGoodsPage() : null,
246
229
  activePage === 'products-page' ? renderProductsPage() : null,
247
230
  activePage === 'workbooks-page' ? renderWorkbooksPage() : null
248
231
  ),
249
- renderReviewDrawer(selectedReview)
232
+ selectedReview ? renderReviewDrawer(selectedReview) : null
250
233
  )
251
234
  )
252
235
 
253
236
  function tab(key, label) {
254
- return h('button', {
255
- key,
256
- className: key === activePage ? 'tcw-tab active' : 'tcw-tab',
257
- onClick: () => setActivePage(key)
258
- }, label)
237
+ return h('button', { key, className: key === activePage ? 'tcw-tab active' : 'tcw-tab', onClick: () => setActivePage(key) }, label)
238
+ }
239
+
240
+ function renderOverviewPage() {
241
+ return h('div', { className: 'tcw-page overview-page' },
242
+ h('section', { className: 'tcw-metrics' },
243
+ metric('待审核', pendingItems.length),
244
+ metric('管控识别待审', pendingControlledReviews.length),
245
+ metric('供应商商品待审', pendingSupplierReviews.length),
246
+ metric('销售合同待审', pendingSalesReviews.length),
247
+ metric('已入库管控商品', data.controlledGoods.length),
248
+ metric('已入库供应商商品', data.products.length),
249
+ metric('销售发票历史', data.workbookGenerations.length),
250
+ metric('全部审核记录', reviewItems.length)
251
+ ),
252
+ panel('最近待审核', pendingItems.slice(0, 12).length
253
+ ? compactReviewList(pendingItems.slice(0, 12))
254
+ : empty('暂无待审核记录。智能体识别结果会先出现在这里。'))
255
+ )
259
256
  }
260
257
 
261
258
  function renderControlledGoodsPage() {
262
259
  return h('div', { className: 'tcw-page controlled-goods-page' },
263
- h('div', { className: 'tcw-page-head' },
264
- h('div', null, h('h2', null, '管控商品管理'), h('p', null, '上传目录文件识别管控商品,也可以人工维护规则。')),
265
- uploadButton('upload_controlled_goods_file', '上传管控商品文件', 'accept-pdf-doc-xls')
266
- ),
267
- h('form', { className: 'tcw-form', onSubmit: saveControlledGoods },
268
- field('商品名称', h('input', { value: form.productName, onChange: updateForm('productName'), placeholder: '例如:高性能服务器' })),
269
- field('海关编码', h('input', { value: form.hsCode, onChange: updateForm('hsCode'), placeholder: '例如:8471501010' })),
270
- field('关键词', h('input', { value: form.keywords, onChange: updateForm('keywords'), placeholder: '逗号或空格分隔' })),
271
- field('管控说明', h('input', { value: form.controlNote, onChange: updateForm('controlNote'), placeholder: '许可证、两用物项、禁限说明' })),
272
- h('label', { className: 'tcw-check' }, h('input', { type: 'checkbox', checked: form.enabled, onChange: (event) => setForm(Object.assign({}, form, { enabled: event.target.checked })) }), '启用'),
273
- h('button', { className: 'tcw-btn tcw-btn-primary', disabled: busy || !form.productName.trim(), type: 'submit' }, '保存')
274
- ),
275
- table(['商品名称', '海关编码', '关键词', '状态', '管控说明'], filteredControlledGoods, (item) => [
276
- value(item.productName),
277
- value(item.hsCode),
278
- Array.isArray(item.keywords) ? item.keywords.join('、') : '-',
279
- status(item.enabled === false ? '停用' : '启用', item.enabled === false ? 'muted' : 'ok'),
280
- value(item.controlNote)
281
- ], '暂无管控商品,先上传目录或手动新增。')
260
+ pageToolbar('管控商品', '智能体识别结果先进入待审核,确认后写入正式管控商品库。', [
261
+ uploadButton('upload_controlled_goods_file', '上传管控商品文件'),
262
+ h('button', { className: 'tcw-btn tcw-btn-soft', onClick: () => setShowManualForm(!showManualForm) }, showManualForm ? '收起新增' : '手动新增')
263
+ ]),
264
+ showManualForm ? renderControlledGoodsForm() : null,
265
+ panel('待审核识别结果', h('div', { className: 'pending-controlled-goods' },
266
+ reviewTable(['商品名称', '海关编码', '关键词', '管控说明', '来源', '状态'], pendingControlledReviews, (item) => {
267
+ const row = readMerged(item)
268
+ return [
269
+ value(row.productName || item.title),
270
+ value(row.hsCode),
271
+ Array.isArray(row.keywords) ? row.keywords.join('、') : value(row.keywords),
272
+ value(row.controlNote),
273
+ value(item.sourceLocation || row.sourceFileName),
274
+ status(reviewStatusText(item.reviewStatus), 'warn')
275
+ ]
276
+ }, '暂无待审核管控商品。上传目录并等待智能体调用工具后会显示在这里。')
277
+ )),
278
+ panel('已入库管控商品', h('div', { className: 'confirmed-controlled-goods' },
279
+ table(['商品名称', '海关编码', '关键词', '状态', '管控说明'], filteredControlledGoods, (item) => [
280
+ value(item.productName),
281
+ value(item.hsCode),
282
+ Array.isArray(item.keywords) ? item.keywords.join('、') : '-',
283
+ status(item.enabled === false ? '停用' : '启用', item.enabled === false ? 'muted' : 'ok'),
284
+ value(item.controlNote)
285
+ ], '暂无已入库管控商品。确认待审核记录后会进入这里。')
286
+ ))
282
287
  )
283
288
  }
284
289
 
285
290
  function renderProductsPage() {
286
291
  const groups = groupBy(filteredProducts, (item) => value(item.supplierName, '未识别供应商'))
287
292
  return h('div', { className: 'tcw-page products-page' },
288
- h('div', { className: 'tcw-page-head' },
289
- h('div', null, h('h2', null, '商品管理'), h('p', null, '上传供应商合同后,商品信息按供应商归类并进入审核。')),
290
- uploadButton('upload_supplier_contract', '上传供应商合同', 'accept-doc-xls-pdf')
291
- ),
292
- Object.keys(groups).length === 0
293
- ? empty('暂无供应商商品,上传供应商合同后在这里审核。')
293
+ pageToolbar('供应商商品', '供应商合同识别结果先进入待审核,确认后按供应商归类入库。', [
294
+ uploadButton('upload_supplier_contract', '上传供应商合同')
295
+ ]),
296
+ panel('待审核供应商商品', h('div', { className: 'pending-supplier-products' },
297
+ reviewTable(['供应商', '商品', '型号', '海关编码', '退税率', '英文品名', '管控状态'], pendingSupplierReviews, (item) => {
298
+ const row = readMerged(item)
299
+ return [
300
+ value(row.supplierName),
301
+ value(row.productName || item.title),
302
+ value(row.model),
303
+ value(row.enrichedHsCode || row.contractHsCode),
304
+ value(row.taxRefundRate),
305
+ value(row.englishName),
306
+ status(controlStatusText(row.controlledStatus), controlStatusLevel(row.controlledStatus))
307
+ ]
308
+ }, '暂无待审核供应商商品。上传供应商合同并等待智能体识别后会显示在这里。')
309
+ )),
310
+ panel('已入库供应商商品', Object.keys(groups).length === 0
311
+ ? empty('暂无已入库供应商商品。确认待审核商品后会按供应商展示。')
294
312
  : Object.keys(groups).sort().map((supplier) =>
295
313
  h('section', { className: 'tcw-supplier-block', key: supplier },
296
314
  h('div', { className: 'tcw-supplier-head' }, h('strong', null, supplier), h('span', null, groups[supplier].length + ' 个商品')),
@@ -304,77 +322,93 @@
304
322
  ])
305
323
  )
306
324
  )
325
+ )
307
326
  )
308
327
  }
309
328
 
310
329
  function renderWorkbooksPage() {
311
- const salesReviews = reviewItems.filter((item) => item.type === 'customs_workbook')
312
330
  return h('div', { className: 'tcw-page workbooks-page' },
313
- h('div', { className: 'tcw-page-head' },
314
- h('div', null, h('h2', null, '生成销售发票'), h('p', null, '上传购销合同识别发票字段,审核后生成固定模板 Excel。')),
315
- h('div', { className: 'tcw-button-row' },
316
- uploadButton('upload_sales_contract', '上传购销合同', 'accept-doc-xls-pdf'),
317
- h('button', { className: 'tcw-btn tcw-btn-primary', disabled: busy, onClick: generateWorkbook }, '生成销售发票')
318
- )
319
- ),
320
- h('div', { className: 'tcw-split' },
321
- h('section', null,
322
- h('h3', null, '购销合同识别历史'),
323
- table(['文件/标题', '审核状态', '发票号', '合同号'], salesReviews, (item) => [
331
+ pageToolbar('销售发票', '上传购销合同后审核发票字段,审核通过后生成固定模板 Excel。', [
332
+ uploadButton('upload_sales_contract', '上传购销合同'),
333
+ h('button', { className: 'tcw-btn tcw-btn-primary', disabled: busy, onClick: generateWorkbook }, '生成销售发票')
334
+ ]),
335
+ panel('待审核购销合同', h('div', { className: 'pending-sales-contracts' },
336
+ reviewTable(['文件/标题', '审核状态', '发票号', '合同号', '买方', '卖方'], pendingSalesReviews, (item) => {
337
+ const row = readMerged(item)
338
+ return [
324
339
  value(item.title),
325
- status(reviewStatusText(item.reviewStatus), item.reviewStatus === 'confirmed' ? 'ok' : 'warn'),
326
- value(readMerged(item).invoiceNo),
327
- value(readMerged(item).contractNo)
328
- ], '暂无购销合同上传记录。')
329
- ),
330
- h('section', null,
331
- h('h3', null, '已生成销售发票'),
332
- table(['文件名', '发票号', '合同号', '模板工作表', '状态'], filteredWorkbooks, (item) => [
333
- value(item.fileName),
334
- value(item.invoiceNo),
335
- value(item.contractNo),
336
- Array.isArray(item.sheetNames) ? item.sheetNames.join('、') : '-',
337
- status(value(item.status, 'generated'), 'ok')
338
- ], '暂无销售发票生成历史。')
339
- )
340
- )
340
+ status(reviewStatusText(item.reviewStatus), 'warn'),
341
+ value(row.invoiceNo),
342
+ value(row.contractNo),
343
+ value(row.buyerName),
344
+ value(row.sellerName)
345
+ ]
346
+ }, '暂无待审核购销合同。')
347
+ )),
348
+ panel('已生成销售发票', table(['文件名', '发票号', '合同号', '模板工作表', '状态'], filteredWorkbooks, (item) => [
349
+ value(item.fileName),
350
+ value(item.invoiceNo),
351
+ value(item.contractNo),
352
+ Array.isArray(item.sheetNames) ? item.sheetNames.join('') : '-',
353
+ status(value(item.status, 'generated'), 'ok')
354
+ ], '暂无销售发票生成历史。'))
355
+ )
356
+ }
357
+
358
+ function renderControlledGoodsForm() {
359
+ return h('form', { className: 'tcw-form', onSubmit: saveControlledGoods },
360
+ field('商品名称', h('input', { value: form.productName, onChange: updateForm('productName'), placeholder: '例如:高性能服务器' })),
361
+ field('海关编码', h('input', { value: form.hsCode, onChange: updateForm('hsCode'), placeholder: '例如:8471501010' })),
362
+ field('关键词', h('input', { value: form.keywords, onChange: updateForm('keywords'), placeholder: '逗号或空格分隔' })),
363
+ field('管控说明', h('input', { value: form.controlNote, onChange: updateForm('controlNote'), placeholder: '许可证、两用物项、禁限说明' })),
364
+ h('label', { className: 'tcw-check' }, h('input', { type: 'checkbox', checked: form.enabled, onChange: (event) => setForm(Object.assign({}, form, { enabled: event.target.checked })) }), '启用'),
365
+ h('button', { className: 'tcw-btn tcw-btn-primary', disabled: busy || !form.productName.trim(), type: 'submit' }, '保存')
341
366
  )
342
367
  }
343
368
 
344
369
  function renderReviewDrawer(item) {
345
370
  return h('aside', { className: 'tcw-drawer' },
346
371
  h('div', { className: 'tcw-drawer-head' },
347
- h('div', null, h('h2', null, '对比审核'), h('p', null, item ? item.title : '暂无待审核信息')),
348
- item ? status(reviewStatusText(item.reviewStatus), item.reviewStatus === 'confirmed' ? 'ok' : 'warn') : null
372
+ h('div', null, h('h2', null, '对比审核'), h('p', null, item.title)),
373
+ h('button', { className: 'tcw-icon-btn', onClick: () => setSelectedReviewId(null) }, '×')
349
374
  ),
350
- !item ? empty('上传文件或等待智能体识别后,审核项会显示在这里。') : [
351
- h('div', { className: 'tcw-review-list', key: 'list' },
352
- reviewItems.slice(0, 8).map((review) =>
353
- h('button', {
354
- className: review.id === item.id ? 'tcw-review-chip active' : 'tcw-review-chip',
355
- key: review.id || review.title,
356
- onClick: () => setSelectedReviewId(review.id || null)
357
- }, h('span', null, reviewTypeText(review.type)), h('strong', null, review.title))
358
- )
359
- ),
360
- compareBlock('识别值', item.extractedData),
361
- compareBlock('默认值', item.defaultData),
362
- compareBlock('人工确认值', item.confirmedData),
363
- h('div', { className: 'tcw-evidence', key: 'evidence' },
364
- h('span', null, '来源证据'),
365
- h('strong', null, value(item.sourceLocation || readMerged(item).sourceFileName))
366
- ),
367
- h('button', { className: 'tcw-btn tcw-btn-primary tcw-wide', key: 'confirm', disabled: busy || item.reviewStatus === 'confirmed', onClick: () => confirmReview(item) }, item.reviewStatus === 'confirmed' ? '已确认' : '确认当前记录')
368
- ]
375
+ status(reviewStatusText(item.reviewStatus), item.reviewStatus === 'confirmed' ? 'ok' : 'warn'),
376
+ compareBlock('识别值', item.extractedData),
377
+ compareBlock('系统补全值', item.defaultData),
378
+ compareBlock('人工确认值', item.confirmedData),
379
+ h('div', { className: 'tcw-evidence' }, h('span', null, '来源证据'), h('strong', null, value(item.sourceLocation || readMerged(item).sourceFileName))),
380
+ h('button', { className: 'tcw-btn tcw-btn-primary tcw-wide', disabled: busy || item.reviewStatus === 'confirmed', onClick: () => confirmReview(item) }, item.reviewStatus === 'confirmed' ? '已确认' : '确认并入库')
381
+ )
382
+ }
383
+
384
+ function compactReviewList(items) {
385
+ return h('div', { className: 'tcw-compact-list' }, items.map((item) =>
386
+ h('button', { className: 'tcw-compact-row', key: item.id || item.title, onClick: () => openReview(item) },
387
+ h('span', null, reviewTypeText(item.type)),
388
+ h('strong', null, item.title),
389
+ h('em', null, reviewStatusText(item.reviewStatus))
390
+ )
391
+ ))
392
+ }
393
+
394
+ function reviewTable(headers, rows, mapRow, emptyText) {
395
+ return table(headers, rows, (row) => mapRow(row), emptyText, (row) => openReview(row))
396
+ }
397
+
398
+ function openReview(item) {
399
+ setSelectedReviewId(item && item.id ? item.id : null)
400
+ }
401
+
402
+ function pageToolbar(title, subtitle, actions) {
403
+ return h('div', { className: 'tcw-page-head' },
404
+ h('div', null, h('h2', null, title), h('p', null, subtitle)),
405
+ h('div', { className: 'tcw-button-row' }, actions)
369
406
  )
370
407
  }
371
408
 
372
- function uploadButton(actionKey, label, inputClass) {
373
- const id = actionKey + '-input'
409
+ function uploadButton(actionKey, label) {
374
410
  return h('label', { className: 'tcw-upload' },
375
411
  h('input', {
376
- id,
377
- className: inputClass,
378
412
  type: 'file',
379
413
  disabled: busy,
380
414
  onChange: (event) => {
@@ -396,25 +430,33 @@
396
430
  return h('div', { className: 'tcw-metric' }, h('span', null, label), h('strong', null, valueText))
397
431
  }
398
432
 
433
+ function panel(title, content) {
434
+ return h('section', { className: 'tcw-panel' }, h('h3', null, title), content)
435
+ }
436
+
399
437
  function field(label, child) {
400
438
  return h('label', { className: 'tcw-field' }, h('span', null, label), child)
401
439
  }
402
440
 
403
- function table(headers, rows, mapRow, emptyText) {
441
+ function table(headers, rows, mapRow, emptyText, onRowClick) {
404
442
  if (!rows || rows.length === 0) return empty(emptyText || '暂无数据。')
405
443
  return h('div', { className: 'tcw-table-wrap' },
406
444
  h('table', { className: 'tcw-table' },
407
445
  h('thead', null, h('tr', null, headers.map((item) => h('th', { key: item }, item)))),
408
- h('tbody', null, rows.map((row, index) => h('tr', { key: row.id || index }, mapRow(row).map((cell, cellIndex) => h('td', { key: cellIndex }, cell)))))
446
+ h('tbody', null, rows.map((row, index) =>
447
+ h('tr', { key: row.id || index, className: onRowClick ? 'clickable' : '', onClick: onRowClick ? () => onRowClick(row) : undefined },
448
+ mapRow(row).map((cell, cellIndex) => h('td', { key: cellIndex }, cell))
449
+ )
450
+ ))
409
451
  )
410
452
  )
411
453
  }
412
454
 
413
455
  function compareBlock(label, data) {
414
456
  const entries = Object.entries(isObject(data) ? data : {})
415
- return h('section', { className: 'tcw-compare', key: label },
457
+ return h('section', { className: 'tcw-compare' },
416
458
  h('h3', null, label),
417
- entries.length === 0 ? h('p', null, '暂无') : entries.slice(0, 12).map(([key, val]) =>
459
+ entries.length === 0 ? h('p', null, '暂无') : entries.slice(0, 16).map(([key, val]) =>
418
460
  h('div', { className: 'tcw-kv', key }, h('span', null, key), h('strong', null, stringify(val)))
419
461
  )
420
462
  )
@@ -428,6 +470,8 @@
428
470
  return h('div', { className: 'tcw-empty' }, text)
429
471
  }
430
472
 
473
+ const reviewSearchKeys = ['title', 'sourceLocation']
474
+
431
475
  function normalizeData(payload) {
432
476
  const body = payload && payload.summary ? payload.summary : payload || {}
433
477
  return {
@@ -446,37 +490,34 @@
446
490
  return response
447
491
  }
448
492
 
493
+ function getActionDataPayload(response) {
494
+ const result = getResponsePayload(response)
495
+ if (result && typeof result === 'object' && Object.prototype.hasOwnProperty.call(result, 'data')) return result.data
496
+ return result
497
+ }
498
+
449
499
  function assertActionSuccess(response) {
450
500
  const payload = getResponsePayload(response)
451
- if (payload && payload.success === false) {
452
- throw new Error(resolveMessage(payload.message) || '操作失败')
453
- }
501
+ if (payload && payload.success === false) throw new Error(resolveMessage(payload.message) || '操作失败')
454
502
  }
455
503
 
456
504
  function collectAssistantCommands(payload) {
457
505
  if (!payload || typeof payload !== 'object') return []
458
506
  const commands = []
459
- if (Array.isArray(payload.messages)) {
460
- payload.messages.forEach((message) => {
461
- const command = normalizeAssistantCommand(message)
462
- if (command) commands.push(command)
463
- })
464
- }
507
+ if (Array.isArray(payload.messages)) payload.messages.forEach((message) => {
508
+ const command = normalizeAssistantCommand(message)
509
+ if (command) commands.push(command)
510
+ })
465
511
  const directCommand = normalizeAssistantCommand(payload)
466
512
  if (directCommand) commands.push(directCommand)
467
513
  return commands
468
514
  }
469
515
 
470
516
  function normalizeAssistantCommand(value) {
471
- if (!value || typeof value !== 'object' || value.commandKey !== 'assistant.chat.send_message' || !value.payload) {
472
- return null
473
- }
517
+ if (!value || typeof value !== 'object' || value.commandKey !== 'assistant.chat.send_message' || !value.payload) return null
474
518
  const text = typeof value.payload.text === 'string' && value.payload.text.trim() ? value.payload.text : ''
475
519
  if (!text) return null
476
- return {
477
- commandKey: value.commandKey,
478
- payload: Object.assign({}, value.payload, { text })
479
- }
520
+ return { commandKey: value.commandKey, payload: Object.assign({}, value.payload, { text }) }
480
521
  }
481
522
 
482
523
  function resolveMessage(message) {
@@ -494,7 +535,10 @@
494
535
  function filterItems(items, query, keys) {
495
536
  const keyword = String(query || '').trim().toLowerCase()
496
537
  if (!keyword) return items
497
- return items.filter((item) => keys.some((key) => String(item && item[key] || '').toLowerCase().includes(keyword)))
538
+ return items.filter((item) => {
539
+ const merged = Object.assign({}, item || {}, readMerged(item || {}))
540
+ return keys.some((key) => String(merged[key] || '').toLowerCase().includes(keyword))
541
+ })
498
542
  }
499
543
 
500
544
  function groupBy(items, keyFn) {
@@ -549,31 +593,36 @@
549
593
  return 'muted'
550
594
  }
551
595
 
596
+ function pageTitle(key) {
597
+ if (key === 'overview-page') return '工作台总览'
598
+ if (key === 'controlled-goods-page') return '管控商品'
599
+ if (key === 'products-page') return '供应商商品'
600
+ return '销售发票'
601
+ }
602
+
603
+ function pageSubtitle(key) {
604
+ if (key === 'overview-page') return '查看处理进度、待审核数量和最近识别结果。'
605
+ if (key === 'controlled-goods-page') return '上传管控目录、审核识别结果、维护正式管控商品库。'
606
+ if (key === 'products-page') return '上传供应商合同,审核商品、HS Code、退税率和管控状态。'
607
+ return '上传购销合同,审核发票字段并生成固定模板 Excel。'
608
+ }
609
+
610
+ function isObject(value) {
611
+ return value && typeof value === 'object' && !Array.isArray(value)
612
+ }
613
+
552
614
  function injectStyles() {
553
615
  const style = document.createElement('style')
554
616
  style.textContent = `
555
- :root {
556
- color-scheme: light;
557
- --tcw-bg: #f4f6f8;
558
- --tcw-card: #ffffff;
559
- --tcw-card-soft: #f8fafb;
560
- --tcw-text: #17202e;
561
- --tcw-muted: #5d6b7a;
562
- --tcw-border: #dbe2ea;
563
- --tcw-primary: #176b87;
564
- --tcw-primary-dark: #0f5167;
565
- --tcw-success: #1b7f4c;
566
- --tcw-warning: #a35f00;
567
- --tcw-danger: #b42318;
568
- }
617
+ :root { color-scheme: light; --tcw-bg:#f5f7fa; --tcw-card:#fff; --tcw-soft:#f8fafc; --tcw-text:#152033; --tcw-muted:#66758a; --tcw-border:#dbe3ed; --tcw-primary:#176b87; --tcw-primary-dark:#0f5167; --tcw-success:#147a46; --tcw-warning:#9a5b00; --tcw-danger:#b42318; }
569
618
  * { box-sizing: border-box; }
570
619
  body { margin: 0; background: var(--tcw-bg); color: var(--tcw-text); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
571
620
  button, input { font: inherit; letter-spacing: 0; }
572
- .tcw-shell { display: grid; gap: 14px; min-height: 100vh; padding: 18px; }
573
- .tcw-header { display: grid; grid-template-columns: minmax(0, 1fr) minmax(360px, 520px); gap: 16px; align-items: end; }
574
- .tcw-title-block { display: grid; gap: 5px; }
575
- .tcw-kicker { color: var(--tcw-primary); font-size: 12px; font-weight: 800; }
576
- .tcw-title-block h1 { margin: 0; font-size: 24px; line-height: 1.25; }
621
+ .tcw-shell { display: grid; gap: 12px; min-height: 100vh; padding: 14px 16px 18px; }
622
+ .tcw-header { display: grid; grid-template-columns: minmax(0, 1fr) minmax(340px, 520px); gap: 12px; align-items: end; }
623
+ .tcw-title-block { display: grid; gap: 3px; }
624
+ .tcw-kicker { color: var(--tcw-primary); font-size: 12px; font-weight: 900; }
625
+ .tcw-title-block h1 { margin: 0; font-size: 22px; line-height: 1.22; }
577
626
  .tcw-title-block p, .tcw-page-head p, .tcw-drawer-head p { margin: 0; color: var(--tcw-muted); font-size: 13px; }
578
627
  .tcw-header-actions { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px; }
579
628
  .tcw-search, .tcw-field input { width: 100%; min-height: 36px; border: 1px solid var(--tcw-border); border-radius: 6px; background: var(--tcw-card); color: var(--tcw-text); padding: 8px 10px; }
@@ -581,62 +630,66 @@ button, input { font: inherit; letter-spacing: 0; }
581
630
  .tcw-btn:disabled, .tcw-upload:has(input:disabled) { cursor: not-allowed; opacity: .55; }
582
631
  .tcw-btn-primary { border-color: var(--tcw-primary); background: var(--tcw-primary); color: #fff; }
583
632
  .tcw-btn-primary:hover:not(:disabled) { background: var(--tcw-primary-dark); }
584
- .tcw-btn-soft { background: var(--tcw-card-soft); }
633
+ .tcw-btn-soft { background: var(--tcw-soft); }
585
634
  .tcw-wide { width: 100%; }
586
- .tcw-upload { border-style: dashed; border-color: color-mix(in srgb, var(--tcw-primary) 42%, var(--tcw-border)); color: var(--tcw-primary); font-weight: 700; }
635
+ .tcw-upload { border-style: dashed; border-color: color-mix(in srgb, var(--tcw-primary) 42%, var(--tcw-border)); color: var(--tcw-primary); font-weight: 800; }
587
636
  .tcw-upload input { display: none; }
588
- .tcw-notice { border: 1px solid color-mix(in srgb, var(--tcw-primary) 26%, var(--tcw-border)); border-radius: 6px; background: color-mix(in srgb, var(--tcw-primary) 8%, var(--tcw-card)); padding: 10px 12px; color: var(--tcw-primary-dark); font-size: 13px; }
637
+ .tcw-notice { border: 1px solid color-mix(in srgb, var(--tcw-primary) 24%, var(--tcw-border)); border-radius: 6px; background: color-mix(in srgb, var(--tcw-primary) 7%, var(--tcw-card)); padding: 10px 12px; color: var(--tcw-primary-dark); font-size: 13px; }
638
+ .tcw-tabs { display: flex; gap: 6px; overflow-x: auto; border-bottom: 1px solid var(--tcw-border); }
639
+ .tcw-tab { min-height: 38px; border: 0; border-bottom: 3px solid transparent; background: transparent; color: var(--tcw-muted); padding: 8px 12px; cursor: pointer; font-weight: 900; }
640
+ .tcw-tab.active { border-color: var(--tcw-primary); color: var(--tcw-primary); }
641
+ .tcw-main { display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; align-items: start; }
642
+ .tcw-main.with-drawer { grid-template-columns: minmax(0, 1fr) minmax(340px, 410px); }
643
+ .tcw-content, .tcw-drawer, .tcw-panel, .tcw-supplier-block { border: 1px solid var(--tcw-border); border-radius: 8px; background: var(--tcw-card); }
644
+ .tcw-content { min-width: 0; padding: 12px; }
645
+ .tcw-page { display: grid; gap: 12px; }
646
+ .tcw-page-head, .tcw-drawer-head, .tcw-supplier-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
647
+ .tcw-page-head h2, .tcw-drawer-head h2, .tcw-panel h3 { margin: 0 0 4px; font-size: 16px; line-height: 1.35; }
648
+ .tcw-button-row { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
649
+ .tcw-panel { display: grid; gap: 10px; padding: 12px; }
589
650
  .tcw-metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
590
651
  .tcw-metric { display: grid; gap: 4px; border: 1px solid var(--tcw-border); border-radius: 8px; background: var(--tcw-card); padding: 12px; }
591
652
  .tcw-metric span { color: var(--tcw-muted); font-size: 12px; }
592
653
  .tcw-metric strong { font-size: 22px; line-height: 1; }
593
- .tcw-tabs { display: flex; gap: 8px; border-bottom: 1px solid var(--tcw-border); }
594
- .tcw-tab { min-height: 38px; border: 0; border-bottom: 3px solid transparent; background: transparent; color: var(--tcw-muted); padding: 8px 12px; cursor: pointer; font-weight: 800; }
595
- .tcw-tab.active { border-color: var(--tcw-primary); color: var(--tcw-primary); }
596
- .tcw-main { display: grid; grid-template-columns: minmax(0, 1fr) minmax(320px, 390px); gap: 14px; align-items: start; }
597
- .tcw-content, .tcw-drawer, .tcw-supplier-block { border: 1px solid var(--tcw-border); border-radius: 8px; background: var(--tcw-card); }
598
- .tcw-content { min-width: 0; padding: 14px; }
599
- .tcw-page { display: grid; gap: 14px; }
600
- .tcw-page-head, .tcw-drawer-head, .tcw-supplier-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
601
- .tcw-page-head h2, .tcw-drawer-head h2, .tcw-split h3 { margin: 0 0 5px; font-size: 17px; line-height: 1.35; }
602
- .tcw-button-row { display: flex; flex-wrap: wrap; gap: 8px; justify-content: flex-end; }
603
- .tcw-form { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto auto; gap: 10px; align-items: end; border: 1px solid var(--tcw-border); border-radius: 8px; background: var(--tcw-card-soft); padding: 12px; }
654
+ .tcw-form { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto auto; gap: 10px; align-items: end; border: 1px solid var(--tcw-border); border-radius: 8px; background: var(--tcw-soft); padding: 12px; }
604
655
  .tcw-field { display: grid; gap: 5px; min-width: 0; }
605
- .tcw-field span { color: var(--tcw-muted); font-size: 12px; font-weight: 700; }
656
+ .tcw-field span { color: var(--tcw-muted); font-size: 12px; font-weight: 800; }
606
657
  .tcw-check { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; color: var(--tcw-muted); font-size: 13px; }
607
658
  .tcw-table-wrap { overflow: auto; border: 1px solid var(--tcw-border); border-radius: 8px; }
608
- .tcw-table { width: 100%; min-width: 760px; border-collapse: collapse; font-size: 12px; }
659
+ .tcw-table { width: 100%; min-width: 840px; border-collapse: collapse; font-size: 12px; }
609
660
  .tcw-table th, .tcw-table td { border-bottom: 1px solid var(--tcw-border); padding: 10px; text-align: left; vertical-align: top; }
610
- .tcw-table th { background: var(--tcw-card-soft); color: var(--tcw-muted); font-size: 11px; font-weight: 900; }
661
+ .tcw-table th { background: var(--tcw-soft); color: var(--tcw-muted); font-size: 11px; font-weight: 900; }
611
662
  .tcw-table tr:last-child td { border-bottom: 0; }
612
- .tcw-empty { display: grid; place-items: center; min-height: 110px; border: 1px dashed var(--tcw-border); border-radius: 8px; background: var(--tcw-card-soft); color: var(--tcw-muted); padding: 18px; text-align: center; }
663
+ .tcw-table tr.clickable { cursor: pointer; }
664
+ .tcw-table tr.clickable:hover td { background: color-mix(in srgb, var(--tcw-primary) 5%, transparent); }
665
+ .tcw-empty { display: grid; place-items: center; min-height: 96px; border: 1px dashed var(--tcw-border); border-radius: 8px; background: var(--tcw-soft); color: var(--tcw-muted); padding: 18px; text-align: center; }
613
666
  .tcw-supplier-block { display: grid; gap: 10px; padding: 12px; }
614
667
  .tcw-supplier-head strong { font-size: 15px; }
615
668
  .tcw-supplier-head span { color: var(--tcw-muted); font-size: 12px; }
616
- .tcw-split { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start; }
617
- .tcw-drawer { position: sticky; top: 12px; display: grid; gap: 12px; padding: 14px; }
618
- .tcw-review-list { display: grid; gap: 7px; max-height: 220px; overflow: auto; }
619
- .tcw-review-chip { display: grid; grid-template-columns: 42px minmax(0, 1fr); gap: 8px; width: 100%; border: 1px solid var(--tcw-border); border-radius: 6px; background: var(--tcw-card-soft); padding: 8px; cursor: pointer; text-align: left; }
620
- .tcw-review-chip.active { border-color: var(--tcw-primary); background: color-mix(in srgb, var(--tcw-primary) 7%, var(--tcw-card)); }
621
- .tcw-review-chip span { color: var(--tcw-primary); font-size: 12px; font-weight: 900; }
622
- .tcw-review-chip strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
669
+ .tcw-drawer { position: sticky; top: 10px; display: grid; gap: 12px; padding: 14px; max-height: calc(100vh - 24px); overflow: auto; }
670
+ .tcw-icon-btn { display: grid; place-items: center; width: 30px; height: 30px; border: 1px solid var(--tcw-border); border-radius: 6px; background: var(--tcw-card); cursor: pointer; }
671
+ .tcw-compact-list { display: grid; gap: 7px; }
672
+ .tcw-compact-row { display: grid; grid-template-columns: 52px minmax(0, 1fr) auto; gap: 8px; align-items: center; width: 100%; border: 1px solid var(--tcw-border); border-radius: 6px; background: var(--tcw-soft); padding: 9px; cursor: pointer; text-align: left; }
673
+ .tcw-compact-row span { color: var(--tcw-primary); font-size: 12px; font-weight: 900; }
674
+ .tcw-compact-row strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
675
+ .tcw-compact-row em { color: var(--tcw-muted); font-size: 12px; font-style: normal; }
623
676
  .tcw-compare { display: grid; gap: 6px; border-top: 1px solid var(--tcw-border); padding-top: 10px; }
624
677
  .tcw-compare h3 { margin: 0; font-size: 13px; }
625
- .tcw-kv { display: grid; grid-template-columns: minmax(92px, .38fr) minmax(0, 1fr); gap: 8px; border: 1px solid var(--tcw-border); border-radius: 6px; background: var(--tcw-card-soft); padding: 7px 8px; }
678
+ .tcw-kv { display: grid; grid-template-columns: minmax(92px, .34fr) minmax(0, 1fr); gap: 8px; border: 1px solid var(--tcw-border); border-radius: 6px; background: var(--tcw-soft); padding: 7px 8px; }
626
679
  .tcw-kv span { color: var(--tcw-muted); font-size: 11px; }
627
680
  .tcw-kv strong { overflow-wrap: anywhere; font-size: 12px; font-weight: 700; }
628
681
  .tcw-evidence { display: grid; gap: 4px; border: 1px solid color-mix(in srgb, var(--tcw-primary) 24%, var(--tcw-border)); border-radius: 6px; background: color-mix(in srgb, var(--tcw-primary) 6%, var(--tcw-card)); padding: 10px; }
629
- .tcw-evidence span { color: var(--tcw-muted); font-size: 11px; font-weight: 800; }
682
+ .tcw-evidence span { color: var(--tcw-muted); font-size: 11px; font-weight: 900; }
630
683
  .tcw-evidence strong { overflow-wrap: anywhere; font-size: 12px; }
631
684
  .tcw-status { display: inline-flex; width: fit-content; align-items: center; border-radius: 999px; padding: 3px 8px; font-size: 11px; font-weight: 900; }
632
685
  .tcw-status.ok { background: #e8f7ef; color: var(--tcw-success); }
633
686
  .tcw-status.warn { background: #fff4df; color: var(--tcw-warning); }
634
687
  .tcw-status.danger { background: #fde8e6; color: var(--tcw-danger); }
635
688
  .tcw-status.muted { background: #eef2f6; color: var(--tcw-muted); }
636
- @media (max-width: 980px) {
637
- .tcw-header, .tcw-main, .tcw-form, .tcw-split { grid-template-columns: 1fr; }
689
+ @media (max-width: 1040px) {
690
+ .tcw-header, .tcw-main.with-drawer, .tcw-form { grid-template-columns: 1fr; }
638
691
  .tcw-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
639
- .tcw-drawer { position: static; }
692
+ .tcw-drawer { position: static; max-height: none; }
640
693
  }
641
694
  `
642
695
  document.head.appendChild(style)
@@ -647,17 +700,9 @@ button, input { font: inherit; letter-spacing: 0; }
647
700
  if (!isObject(message) || message.channel !== CHANNEL || message.protocolVersion !== VERSION) return
648
701
  if (message.type === 'init') {
649
702
  instanceId = message.instanceId
650
- if (window.XpertRemoteUI && typeof window.XpertRemoteUI.applyTheme === 'function') {
651
- window.XpertRemoteUI.applyTheme(message.theme)
652
- }
703
+ if (window.XpertRemoteUI && typeof window.XpertRemoteUI.applyTheme === 'function') window.XpertRemoteUI.applyTheme(message.theme)
653
704
  if (window.__tradeComplianceSetContext) {
654
- window.__tradeComplianceSetContext({
655
- manifest: message.manifest,
656
- payload: message.payload,
657
- initialQuery: message.initialQuery || {},
658
- locale: message.locale,
659
- theme: message.theme
660
- })
705
+ window.__tradeComplianceSetContext({ manifest: message.manifest, payload: message.payload, initialQuery: message.initialQuery || {}, locale: message.locale, theme: message.theme })
661
706
  }
662
707
  setTimeout(reportResize, 0)
663
708
  return
@@ -670,11 +715,8 @@ button, input { font: inherit; letter-spacing: 0; }
670
715
  if (message.requestId && pending.has(message.requestId)) {
671
716
  const item = pending.get(message.requestId)
672
717
  pending.delete(message.requestId)
673
- if (message.type === 'error') {
674
- item.reject(new Error(message.message || '远程请求失败'))
675
- } else {
676
- item.resolve(message)
677
- }
718
+ if (message.type === 'error') item.reject(new Error(message.message || '远程请求失败'))
719
+ else item.resolve(message)
678
720
  }
679
721
  })
680
722
 
@@ -10,5 +10,6 @@ export declare class TradeComplianceWorkbenchViewProvider implements IXpertViewE
10
10
  getViewData(context: XpertResolvedViewHostContext, _viewKey: string, _query: XpertViewQuery): Promise<XpertViewDataResult>;
11
11
  executeViewAction(context: XpertResolvedViewHostContext, _viewKey: string, actionKey: string, request: XpertViewActionRequest): Promise<XpertViewActionResult>;
12
12
  executeViewFileAction(context: XpertResolvedViewHostContext, viewKey: string, actionKey: string, request: XpertViewActionRequest, file: XpertViewFileActionFile): Promise<XpertViewActionResult>;
13
+ private materializeConfirmedReviewItem;
13
14
  }
14
15
  //# sourceMappingURL=trade-compliance-workbench-view.provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trade-compliance-workbench-view.provider.d.ts","sourceRoot":"","sources":["../../src/lib/trade-compliance-workbench-view.provider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,2BAA2B,EAG3B,uBAAuB,EACxB,MAAM,sBAAsB,CAAA;AAW7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAA;AAQzF,qBAEa,oCAAqC,YAAW,2BAA2B;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,+BAA+B;IAErE,QAAQ,CAAC,OAAO,EAAE,4BAA4B;IAI9C,gBAAgB,CAAC,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,GAAG,0BAA0B,EAAE;IA6F9F,uBAAuB,CAC3B,QAAQ,EAAE,4BAA4B,EACtC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,8BAA8B,CAAC,WAAW,CAAC,GACrD,OAAO,CAAC,yBAAyB,CAAC;IAwB/B,WAAW,CACf,OAAO,EAAE,4BAA4B,EACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,mBAAmB,CAAC;IAoBzB,iBAAiB,CACrB,OAAO,EAAE,4BAA4B,EACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IAuD3B,qBAAqB,CACzB,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;CAoGlC"}
1
+ {"version":3,"file":"trade-compliance-workbench-view.provider.d.ts","sourceRoot":"","sources":["../../src/lib/trade-compliance-workbench-view.provider.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,yBAAyB,EACzB,8BAA8B,EAC9B,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACf,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,2BAA2B,EAG3B,uBAAuB,EACxB,MAAM,sBAAsB,CAAA;AAW7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAA;AAQzF,qBAEa,oCAAqC,YAAW,2BAA2B;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,+BAA+B;IAErE,QAAQ,CAAC,OAAO,EAAE,4BAA4B;IAI9C,gBAAgB,CAAC,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,GAAG,0BAA0B,EAAE;IA6F9F,uBAAuB,CAC3B,QAAQ,EAAE,4BAA4B,EACtC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,8BAA8B,CAAC,WAAW,CAAC,GACrD,OAAO,CAAC,yBAAyB,CAAC;IAwB/B,WAAW,CACf,OAAO,EAAE,4BAA4B,EACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,mBAAmB,CAAC;IAoBzB,iBAAiB,CACrB,OAAO,EAAE,4BAA4B,EACrC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC;IAyD3B,qBAAqB,CACzB,OAAO,EAAE,4BAA4B,EACrC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,qBAAqB,CAAC;YAsGnB,8BAA8B;CA+C7C"}
@@ -2,8 +2,10 @@ import { __decorate, __metadata } from "tslib";
2
2
  import { Injectable } from '@nestjs/common';
3
3
  import { readFile } from 'fs/promises';
4
4
  import { createRequire } from 'module';
5
- import { dirname, join } from 'path';
5
+ import { dirname, extname, join } from 'path';
6
6
  import { fileURLToPath } from 'url';
7
+ import mammoth from 'mammoth';
8
+ import * as XLSX from 'xlsx';
7
9
  import { renderRemoteReactIframeHtml, ViewExtensionProvider } from '@xpert-ai/plugin-sdk';
8
10
  import { AGENT_WORKBENCH_FIXED_SLOT, AGENT_WORKBENCH_MAIN_SLOT, TRADE_COMPLIANCE_FEATURE, TRADE_COMPLIANCE_ICON, TRADE_COMPLIANCE_PLUGIN_NAME, TRADE_COMPLIANCE_PROVIDER_KEY, TRADE_COMPLIANCE_REMOTE_ENTRY_KEY, TRADE_COMPLIANCE_VIEW_KEY } from './constants.js';
9
11
  import { TradeComplianceWorkbenchService } from './trade-compliance-workbench.service.js';
@@ -153,11 +155,13 @@ let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewPro
153
155
  if (!itemId) {
154
156
  return failure('itemId is required', '缺少 itemId');
155
157
  }
156
- return success(await this.service.confirmReviewItem(scope, itemId, readRecord(request.input, 'confirmedData')));
158
+ const item = await this.service.confirmReviewItem(scope, itemId, readRecord(request.input, 'confirmedData'));
159
+ return success(await this.materializeConfirmedReviewItem(scope, item));
157
160
  }
158
161
  if (actionKey === 'confirm_review_items') {
159
162
  const itemIds = readStringArray(request.input, 'itemIds');
160
- return success(await this.service.confirmReviewItems(scope, itemIds));
163
+ const items = await this.service.confirmReviewItems(scope, itemIds);
164
+ return success(await Promise.all(items.map((item) => this.materializeConfirmedReviewItem(scope, item))));
161
165
  }
162
166
  if (actionKey === 'refresh') {
163
167
  return { success: true, message: text('Refreshed', '已刷新'), refresh: true };
@@ -206,6 +210,7 @@ let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewPro
206
210
  }
207
211
  const scope = scopeFromContext(context);
208
212
  const fileName = getFileDisplayName(file, request.input);
213
+ const extractedText = await extractUploadedFileText(file, fileName);
209
214
  if (actionKey === 'upload_controlled_goods_file') {
210
215
  const result = await this.service.createReviewBatch(scope, {
211
216
  type: 'controlled_goods_file',
@@ -230,7 +235,7 @@ let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewPro
230
235
  fileName,
231
236
  role: 'controlled_goods_file',
232
237
  batchId: result.batch.id,
233
- text: buildControlledGoodsParsePrompt(fileName, result.batch.id)
238
+ text: buildControlledGoodsParsePrompt(fileName, result.batch.id, extractedText)
234
239
  }));
235
240
  }
236
241
  if (actionKey === 'upload_supplier_contract') {
@@ -262,7 +267,7 @@ let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewPro
262
267
  fileName,
263
268
  role: 'supplier_contract',
264
269
  batchId: result.batch.id,
265
- text: buildSupplierContractParsePrompt(fileName, result.batch.id)
270
+ text: buildSupplierContractParsePrompt(fileName, result.batch.id, extractedText)
266
271
  }));
267
272
  }
268
273
  if (actionKey === 'upload_sales_contract') {
@@ -291,11 +296,56 @@ let TradeComplianceWorkbenchViewProvider = class TradeComplianceWorkbenchViewPro
291
296
  fileName,
292
297
  role: 'sales_contract',
293
298
  batchId: result.batch.id,
294
- text: buildSalesContractParsePrompt(fileName, result.batch.id)
299
+ text: buildSalesContractParsePrompt(fileName, result.batch.id, extractedText)
295
300
  }));
296
301
  }
297
302
  return failure('Unsupported file action', '不支持的文件操作');
298
303
  }
304
+ async materializeConfirmedReviewItem(scope, item) {
305
+ const data = mergeReviewData(item.defaultData, item.extractedData, item.confirmedData);
306
+ if (item.type === 'controlled_goods') {
307
+ const productName = readString(data, 'productName') ?? item.title;
308
+ return {
309
+ item,
310
+ materialized: await this.service.saveControlledGoods(scope, {
311
+ productName,
312
+ hsCode: readString(data, 'hsCode'),
313
+ keywords: readStringArray(data, 'keywords'),
314
+ controlNote: readString(data, 'controlNote'),
315
+ enabled: readBoolean(data, 'enabled') ?? true,
316
+ sourceFileName: readString(data, 'sourceFileName'),
317
+ sourceLocation: item.sourceLocation ?? readString(data, 'sourceLocation')
318
+ })
319
+ };
320
+ }
321
+ if (item.type === 'supplier_product') {
322
+ const supplierName = readString(data, 'supplierName') ?? '未识别供应商';
323
+ const productName = readString(data, 'productName') ?? item.title;
324
+ return {
325
+ item,
326
+ materialized: await this.service.saveSupplierProduct(scope, {
327
+ supplierName,
328
+ supplierCreditCode: readString(data, 'supplierCreditCode'),
329
+ supplierAddress: readString(data, 'supplierAddress'),
330
+ productName,
331
+ model: readString(data, 'model'),
332
+ description: readString(data, 'description'),
333
+ quantity: readNumber(data, 'quantity'),
334
+ unit: readString(data, 'unit'),
335
+ taxInclusiveUnitPrice: readNumber(data, 'taxInclusiveUnitPrice'),
336
+ taxInclusiveTotalAmount: readNumber(data, 'taxInclusiveTotalAmount'),
337
+ contractHsCode: readString(data, 'contractHsCode'),
338
+ enrichedHsCode: readString(data, 'enrichedHsCode'),
339
+ taxRefundRate: readString(data, 'taxRefundRate'),
340
+ englishName: readString(data, 'englishName'),
341
+ controlledStatus: readControlledGoodsStatus(data, 'controlledStatus'),
342
+ controlNote: readString(data, 'controlNote'),
343
+ matchedControlledGoods: readRecordArray(data, 'matchedControlledGoods')
344
+ })
345
+ };
346
+ }
347
+ return { item, materialized: null };
348
+ }
299
349
  };
300
350
  TradeComplianceWorkbenchViewProvider = __decorate([
301
351
  Injectable(),
@@ -356,6 +406,31 @@ function readBoolean(input, key) {
356
406
  const value = typeof input === 'object' && input != null ? Reflect.get(input, key) : undefined;
357
407
  return typeof value === 'boolean' ? value : undefined;
358
408
  }
409
+ function readNumber(input, key) {
410
+ const value = typeof input === 'object' && input != null ? Reflect.get(input, key) : undefined;
411
+ if (typeof value === 'number' && Number.isFinite(value))
412
+ return value;
413
+ if (typeof value === 'string' && value.trim()) {
414
+ const parsed = Number(value.replace(/,/g, ''));
415
+ return Number.isFinite(parsed) ? parsed : undefined;
416
+ }
417
+ return undefined;
418
+ }
419
+ function readRecordArray(input, key) {
420
+ const value = typeof input === 'object' && input != null ? Reflect.get(input, key) : undefined;
421
+ return Array.isArray(value)
422
+ ? value.filter((item) => typeof item === 'object' && item != null && !Array.isArray(item))
423
+ : undefined;
424
+ }
425
+ function readControlledGoodsStatus(input, key) {
426
+ const value = readString(input, key);
427
+ return value === 'unchecked' || value === 'not_controlled' || value === 'suspected' || value === 'controlled'
428
+ ? value
429
+ : undefined;
430
+ }
431
+ function mergeReviewData(...records) {
432
+ return Object.assign({}, ...records.filter(Boolean));
433
+ }
359
434
  function getFileDisplayName(file, input) {
360
435
  return readString(input, 'name') ?? readString(input, 'fileName') ?? getFileName(file) ?? 'uploaded-document';
361
436
  }
@@ -381,6 +456,52 @@ function getFileSize(file) {
381
456
  const record = file;
382
457
  return typeof record.size === 'number' ? record.size : undefined;
383
458
  }
459
+ async function extractUploadedFileText(file, fileName) {
460
+ const buffer = getFileBuffer(file);
461
+ if (!buffer)
462
+ return undefined;
463
+ const extension = extname(fileName).toLowerCase();
464
+ const mimeType = getFileMimeType(file)?.toLowerCase() ?? '';
465
+ try {
466
+ if (extension === '.docx' || mimeType.includes('wordprocessingml.document')) {
467
+ const result = await mammoth.extractRawText({ buffer });
468
+ return normalizeExtractedText(result.value);
469
+ }
470
+ if (extension === '.xlsx' || extension === '.xls' || extension === '.csv' || mimeType.includes('spreadsheet') || mimeType.includes('csv')) {
471
+ const workbook = XLSX.read(buffer, { type: 'buffer' });
472
+ const parts = workbook.SheetNames.map((sheetName) => {
473
+ const sheet = workbook.Sheets[sheetName];
474
+ return [`【${sheetName}】`, XLSX.utils.sheet_to_csv(sheet, { blankrows: false })].join('\n');
475
+ });
476
+ return normalizeExtractedText(parts.join('\n\n'));
477
+ }
478
+ if (extension === '.txt' || extension === '.md' || extension === '.json' || extension === '.csv' || mimeType.startsWith('text/')) {
479
+ return normalizeExtractedText(buffer.toString('utf8'));
480
+ }
481
+ }
482
+ catch (error) {
483
+ const message = error instanceof Error ? error.message : String(error);
484
+ return `文件文本提取失败:${message}`;
485
+ }
486
+ return undefined;
487
+ }
488
+ function getFileBuffer(file) {
489
+ const value = file.buffer;
490
+ if (Buffer.isBuffer(value))
491
+ return value;
492
+ if (value instanceof ArrayBuffer)
493
+ return Buffer.from(value);
494
+ if (ArrayBuffer.isView(value))
495
+ return Buffer.from(value.buffer, value.byteOffset, value.byteLength);
496
+ return undefined;
497
+ }
498
+ function normalizeExtractedText(textValue) {
499
+ const value = textValue?.replace(/\r/g, '').replace(/[ \t]+\n/g, '\n').trim();
500
+ if (!value)
501
+ return undefined;
502
+ const limit = 50000;
503
+ return value.length > limit ? `${value.slice(0, limit)}\n...内容过长,已截断。` : value;
504
+ }
384
505
  function buildAssistantCommand(input) {
385
506
  const assistantFile = viewFileToAssistantFile(input.file, input.fileName, input.role);
386
507
  const files = assistantFile.id || assistantFile.fileAssetId || assistantFile.fileId || assistantFile.storageFileId ? [assistantFile] : [];
@@ -452,16 +573,17 @@ function toChatReference(file, fileName, role) {
452
573
  ].join('\n')
453
574
  };
454
575
  }
455
- function buildControlledGoodsParsePrompt(fileName, batchId) {
576
+ function buildControlledGoodsParsePrompt(fileName, batchId, extractedText) {
456
577
  return [
457
578
  `请解析我刚上传的管控商品文件《${fileName}》。`,
458
579
  '目标:识别文件中的管控商品、关键词、海关编码、管控说明、来源页码或条款。',
459
580
  `请调用工具 trade_compliance_save_controlled_goods_extraction 保存待审核结果,batchId 可记录为 ${batchId ?? '-'}。`,
460
581
  '每个 items 条目的 type 必须是 controlled_goods;extractedData 中请包含 productName、hsCode、keywords、controlNote;sourceLocation 记录证据位置。',
461
- '不要只回复文字,必须调用工具把识别结果写入插件。'
582
+ '不要只回复文字,必须调用工具把识别结果写入插件。',
583
+ buildExtractedTextSection(extractedText)
462
584
  ].join('\n');
463
585
  }
464
- function buildSupplierContractParsePrompt(fileName, batchId) {
586
+ function buildSupplierContractParsePrompt(fileName, batchId, extractedText) {
465
587
  return [
466
588
  `请解析我刚上传的供应商合同《${fileName}》。`,
467
589
  '目标:识别供应商信息和商品信息,商品信息包括商品名称、型号、描述、数量、单位、含税单价、含税金额、合同里的海关编码。',
@@ -469,16 +591,31 @@ function buildSupplierContractParsePrompt(fileName, batchId) {
469
591
  '再结合已有管控商品记录调用 trade_compliance_match_controlled_goods 判断是否为管控商品。',
470
592
  `最后调用 trade_compliance_save_supplier_contract_extraction 保存待审核结果,batchId 可记录为 ${batchId ?? '-'}。`,
471
593
  '每个 items 条目的 type 必须是 supplier_product;extractedData/defaultData 中请包含 supplierName、supplierCreditCode、supplierAddress、productName、model、description、quantity、unit、taxInclusiveUnitPrice、taxInclusiveTotalAmount、contractHsCode、enrichedHsCode、taxRefundRate、englishName、controlledStatus、controlNote。',
472
- '不要只回复文字,必须调用工具把识别结果写入插件。'
594
+ '不要只回复文字,必须调用工具把识别结果写入插件。',
595
+ buildExtractedTextSection(extractedText)
473
596
  ].join('\n');
474
597
  }
475
- function buildSalesContractParsePrompt(fileName, batchId) {
598
+ function buildSalesContractParsePrompt(fileName, batchId, extractedText) {
476
599
  return [
477
600
  `请解析我刚上传的购销合同《${fileName}》。`,
478
601
  '目标:识别销售发票和报关资料所需字段,包括发票号、合同号、买方、卖方、币种、贸易术语、付款方式、商品明细、数量、单价、金额、包装、毛重、净重等。',
479
602
  `请调用 trade_compliance_save_sales_contract_extraction 保存待审核结果,batchId 可记录为 ${batchId ?? '-'}。`,
480
603
  '每个 items 条目的 type 必须是 customs_workbook;extractedData 中请包含 invoiceNo、contractNo、buyerName、sellerName、currency、items 等字段。',
481
- '不要只回复文字,必须调用工具把识别结果写入插件。'
604
+ '不要只回复文字,必须调用工具把识别结果写入插件。',
605
+ buildExtractedTextSection(extractedText)
606
+ ].join('\n');
607
+ }
608
+ function buildExtractedTextSection(extractedText) {
609
+ if (!extractedText) {
610
+ return [
611
+ '',
612
+ '插件未能直接提取文件文本。如果消息中没有可读附件,请提示用户重新上传可解析的 docx、xlsx、csv 或 txt 文件。'
613
+ ].join('\n');
614
+ }
615
+ return [
616
+ '',
617
+ '插件已从上传文件中提取到以下文本,请优先基于这些内容解析:',
618
+ extractedText
482
619
  ].join('\n');
483
620
  }
484
621
  //# sourceMappingURL=trade-compliance-workbench-view.provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trade-compliance-workbench-view.provider.js","sourceRoot":"","sources":["../../src/lib/trade-compliance-workbench-view.provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trade-compliance-workbench-view.provider.js","sourceRoot":"","sources":["../../src/lib/trade-compliance-workbench-view.provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chenchaolong/plugin-trade-compliance-workbench",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Trade Compliance Workbench app plugin for controlled goods review, supplier product management, and customs workbook generation.",
5
5
  "author": {
6
6
  "name": "XpertAI",
@@ -43,6 +43,7 @@
43
43
  }
44
44
  },
45
45
  "dependencies": {
46
+ "mammoth": "^1.12.0",
46
47
  "tslib": "^2.3.0",
47
48
  "xlsx": "^0.18.5"
48
49
  },