w-table-vue 1.0.20 → 1.0.21

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.
Files changed (43) hide show
  1. package/README.md +1 -1
  2. package/dist/w-table-vue.umd.js +3 -3
  3. package/dist/w-table-vue.umd.js.map +1 -1
  4. package/docs/examples/app.html +1 -1
  5. package/docs/examples/app.umd.js +2 -2
  6. package/docs/examples/app.umd.js.map +1 -1
  7. package/docs/examples/w-table-edit_default.html +9 -1
  8. package/docs/examples/w-table-edit_editable.html +9 -1
  9. package/docs/examples/w-table-edit_editable_checkId.html +9 -1
  10. package/docs/examples/w-table-edit_editable_checkId_opt.modifyDataWhenSave_save(call cmp. method).html +9 -1
  11. package/docs/examples/w-table-edit_editable_checkId_successMsgFromAddRow_errorMsgFromAddRow.html +9 -1
  12. package/docs/examples/w-table-edit_editable_inforPaddingStyle_menuBackgroundColor.html +9 -1
  13. package/docs/examples/w-table-edit_editable_language_checkId_tooltipAddRow.html +9 -1
  14. package/docs/examples/w-table-edit_editable_language_textLabelDataName_textPlaceholderDataName.html +9 -1
  15. package/docs/examples/w-table-edit_editable_no enableInfor.html +9 -1
  16. package/docs/examples/w-table-edit_editable_no enableMenu.html +9 -1
  17. package/docs/examples/w-table-edit_editable_opt.beforeAddRow.html +9 -1
  18. package/docs/examples/w-table-edit_editable_opt.kpCellFormat_no useCellFormatWhenDownload.html +9 -1
  19. package/docs/examples/w-table-edit_editable_opt.kpConvertKeysWhenUploadData.html +9 -1
  20. package/docs/examples/w-table-edit_editable_opt.optForUploadData.html +9 -1
  21. package/docs/examples/w-table-edit_editable_opt.optForUploadData.uploadMode (append, no popup).html +550 -0
  22. package/docs/examples/w-table-edit_editable_slot btns-right.html +9 -1
  23. package/docs/examples/w-table-edit_fixIds (fix id).html +9 -1
  24. package/docs/examples/w-table-edit_hideIds (hide mappingId).html +9 -1
  25. package/docs/examples/w-table-edit_name_description.html +9 -1
  26. package/docs/examples/w-table-edit_no enableInfor.html +9 -1
  27. package/docs/examples/w-table-edit_no enableMenu.html +9 -1
  28. package/docs/examples/w-table-edit_opt.kpCellFormat.html +9 -1
  29. package/docs/examples/w-table-edit_opt.kpHead.html +9 -1
  30. package/docs/examples/w-table-edit_removeIdsWhenDownload (remove id, mappingId, order, isActive).html +9 -1
  31. package/docs/examples/w-table-edit_slot btns-left.html +9 -1
  32. package/docs/examples/w-table-edit_slot btns-right.html +9 -1
  33. package/docs/examples/w-table-edit_slot cell-render.html +9 -1
  34. package/docs/examples/w-table-edit_slot cell-tooltip.html +9 -1
  35. package/docs/examples/w-table-edit_slot head-render.html +9 -1
  36. package/docs/examples/w-table-edit_slot head-tooltip.html +9 -1
  37. package/docs/examples/w-table-edit_slot infor (name_description).html +9 -1
  38. package/docs/examples/w-table-edit_sortColIds (sort by order).html +9 -1
  39. package/docs/index.html +1 -1
  40. package/docs/module-WTableEdit.html +9 -9
  41. package/package.json +2 -2
  42. package/src/AppZoneWTableEdit.vue +28 -0
  43. package/src/components/WTableEdit.vue +91 -36
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -507,6 +507,14 @@
507
507
  });
508
508
  }
509
509
  }
510
+ },
511
+ opt9: {
512
+ keys: keys1,
513
+ kpHeadFilterType: kpHeadFilterType1,
514
+ rows: rows1,
515
+ optForUploadData: {
516
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
517
+ }
510
518
  }
511
519
  },
512
520
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -507,6 +507,14 @@
507
507
  });
508
508
  }
509
509
  }
510
+ },
511
+ opt9: {
512
+ keys: keys1,
513
+ kpHeadFilterType: kpHeadFilterType1,
514
+ rows: rows1,
515
+ optForUploadData: {
516
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
517
+ }
510
518
  }
511
519
  },
512
520
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -510,6 +510,14 @@
510
510
  });
511
511
  }
512
512
  }
513
+ },
514
+ opt9: {
515
+ keys: keys1,
516
+ kpHeadFilterType: kpHeadFilterType1,
517
+ rows: rows1,
518
+ optForUploadData: {
519
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
520
+ }
513
521
  }
514
522
  },
515
523
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -531,6 +531,14 @@
531
531
  });
532
532
  }
533
533
  }
534
+ },
535
+ opt9: {
536
+ keys: keys1,
537
+ kpHeadFilterType: kpHeadFilterType1,
538
+ rows: rows1,
539
+ optForUploadData: {
540
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
541
+ }
534
542
  }
535
543
  },
536
544
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -531,6 +531,14 @@
531
531
  });
532
532
  }
533
533
  }
534
+ },
535
+ opt9: {
536
+ keys: keys1,
537
+ kpHeadFilterType: kpHeadFilterType1,
538
+ rows: rows1,
539
+ optForUploadData: {
540
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
541
+ }
534
542
  }
535
543
  },
536
544
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -523,6 +523,14 @@
523
523
  });
524
524
  }
525
525
  }
526
+ },
527
+ opt9: {
528
+ keys: keys1,
529
+ kpHeadFilterType: kpHeadFilterType1,
530
+ rows: rows1,
531
+ optForUploadData: {
532
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
533
+ }
526
534
  }
527
535
  },
528
536
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -523,6 +523,14 @@
523
523
  });
524
524
  }
525
525
  }
526
+ },
527
+ opt9: {
528
+ keys: keys1,
529
+ kpHeadFilterType: kpHeadFilterType1,
530
+ rows: rows1,
531
+ optForUploadData: {
532
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
533
+ }
526
534
  }
527
535
  },
528
536
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -523,6 +523,14 @@
523
523
  });
524
524
  }
525
525
  }
526
+ },
527
+ opt9: {
528
+ keys: keys1,
529
+ kpHeadFilterType: kpHeadFilterType1,
530
+ rows: rows1,
531
+ optForUploadData: {
532
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
533
+ }
526
534
  }
527
535
  },
528
536
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -529,6 +529,14 @@
529
529
  });
530
530
  }
531
531
  }
532
+ },
533
+ opt9: {
534
+ keys: keys1,
535
+ kpHeadFilterType: kpHeadFilterType1,
536
+ rows: rows1,
537
+ optForUploadData: {
538
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
539
+ }
532
540
  }
533
541
  },
534
542
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -524,6 +524,14 @@
524
524
  });
525
525
  }
526
526
  }
527
+ },
528
+ opt9: {
529
+ keys: keys1,
530
+ kpHeadFilterType: kpHeadFilterType1,
531
+ rows: rows1,
532
+ optForUploadData: {
533
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
534
+ }
527
535
  }
528
536
  },
529
537
  actions: []
@@ -43,7 +43,7 @@
43
43
  />
44
44
 
45
45
  <!-- w-table-vue -->
46
- <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.20/dist/w-table-vue.umd.js"></script>
46
+ <script src="https://cdn.jsdelivr.net/npm/w-table-vue@1.0.21/dist/w-table-vue.umd.js"></script>
47
47
 
48
48
  <style>
49
49
  .item {
@@ -508,6 +508,14 @@
508
508
  });
509
509
  }
510
510
  }
511
+ },
512
+ opt9: {
513
+ keys: keys1,
514
+ kpHeadFilterType: kpHeadFilterType1,
515
+ rows: rows1,
516
+ optForUploadData: {
517
+ uploadMode: "append" //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
518
+ }
511
519
  }
512
520
  },
513
521
  actions: []
package/docs/index.html CHANGED
@@ -71,7 +71,7 @@
71
71
  <br class="clear">
72
72
 
73
73
  <footer>
74
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Sep 22 2026 22:20:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu Sep 24 2026 09:38:18 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
@@ -281,7 +281,7 @@
281
281
  <td>String</td>
282
282
  <td><code>'no effective data'</code></td>
283
283
  <td>No</td>
284
- <td>輸入上傳檔案中無有效數據事件訊息字串,預設'no effective data'</td>
284
+ <td>輸入上傳檔案中無有效數據事件訊息字串,此時不變動表格數據,預設'no effective data'</td>
285
285
  </tr><tr>
286
286
  <td><code>successMsgFromDownloadData</code></td>
287
287
  <td>String</td>
@@ -311,7 +311,7 @@
311
311
  <td>String</td>
312
312
  <td><code>'Choose mode of upload:'</code></td>
313
313
  <td>No</td>
314
- <td>輸入選擇上傳模式彈窗標題字串,預設'Choose mode of upload:'</td>
314
+ <td>輸入選擇上傳模式彈窗標題字串,opt.optForUploadData.uploadMode有預先指定時不顯示此彈窗,預設'Choose mode of upload:'</td>
315
315
  </tr><tr>
316
316
  <td><code>uploadModeTextForReplace</code></td>
317
317
  <td>String</td>
@@ -641,7 +641,7 @@
641
641
  <td>Object</td>
642
642
  <td><code>{}</code></td>
643
643
  <td>No</td>
644
- <td>輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',預設由彈窗選擇),beforeUpload代表上傳前的處理數據函數,parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),optForUploadData預設{}</td>
644
+ <td>輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',有給予時點擊上傳按鈕不顯示模式選擇彈窗而直接開啟選檔視窗,未給予或非前述值時由彈窗選擇),beforeUpload代表上傳前的處理數據函數(輸入讀取所得之數據陣列,回傳處理後之數據陣列或Promise,未給予時自動去除於表格各欄位之值皆為空的無效數據,處理後無數據時觸發error事件(errorMsgFromUploadEmptyData)且不變動表格數據),parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),組件不會修改此物件,optForUploadData預設{}</td>
645
645
  </tr><tr>
646
646
  <td><code>opt.modifyDataWhenSave</code></td>
647
647
  <td>function</td>
@@ -690,7 +690,7 @@
690
690
  </tr><tr>
691
691
  <td><code>error</code></td>
692
692
  <td>String</td>
693
- <td>當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串</td>
693
+ <td>當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串;使用者於上傳選檔視窗取消時不觸發</td>
694
694
  </tr></tbody>
695
695
  </table>
696
696
 
@@ -931,7 +931,7 @@
931
931
  <td>String</td>
932
932
  <td><code>'no effective data'</code></td>
933
933
  <td>No</td>
934
- <td>輸入上傳檔案中無有效數據事件訊息字串,預設'no effective data'</td>
934
+ <td>輸入上傳檔案中無有效數據事件訊息字串,此時不變動表格數據,預設'no effective data'</td>
935
935
  </tr><tr>
936
936
  <td><code>successMsgFromDownloadData</code></td>
937
937
  <td>String</td>
@@ -961,7 +961,7 @@
961
961
  <td>String</td>
962
962
  <td><code>'Choose mode of upload:'</code></td>
963
963
  <td>No</td>
964
- <td>輸入選擇上傳模式彈窗標題字串,預設'Choose mode of upload:'</td>
964
+ <td>輸入選擇上傳模式彈窗標題字串,opt.optForUploadData.uploadMode有預先指定時不顯示此彈窗,預設'Choose mode of upload:'</td>
965
965
  </tr><tr>
966
966
  <td><code>uploadModeTextForReplace</code></td>
967
967
  <td>String</td>
@@ -1291,7 +1291,7 @@
1291
1291
  <td>Object</td>
1292
1292
  <td><code>{}</code></td>
1293
1293
  <td>No</td>
1294
- <td>輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',預設由彈窗選擇),beforeUpload代表上傳前的處理數據函數,parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),optForUploadData預設{}</td>
1294
+ <td>輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',有給予時點擊上傳按鈕不顯示模式選擇彈窗而直接開啟選檔視窗,未給予或非前述值時由彈窗選擇),beforeUpload代表上傳前的處理數據函數(輸入讀取所得之數據陣列,回傳處理後之數據陣列或Promise,未給予時自動去除於表格各欄位之值皆為空的無效數據,處理後無數據時觸發error事件(errorMsgFromUploadEmptyData)且不變動表格數據),parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),組件不會修改此物件,optForUploadData預設{}</td>
1295
1295
  </tr><tr>
1296
1296
  <td><code>opt.modifyDataWhenSave</code></td>
1297
1297
  <td>function</td>
@@ -1340,7 +1340,7 @@
1340
1340
  </tr><tr>
1341
1341
  <td><code>error</code></td>
1342
1342
  <td>String</td>
1343
- <td>當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串</td>
1343
+ <td>當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串;使用者於上傳選檔視窗取消時不觸發</td>
1344
1344
  </tr></tbody>
1345
1345
  </table>
1346
1346
 
@@ -1449,7 +1449,7 @@
1449
1449
  <br class="clear">
1450
1450
 
1451
1451
  <footer>
1452
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Sep 22 2026 22:20:30 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1452
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Thu Sep 24 2026 09:38:18 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1453
1453
  </footer>
1454
1454
 
1455
1455
  <script>prettyPrint();</script>
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "w-table-vue",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "main": "dist/w-table-vue.umd.js",
5
5
  "dependencies": {
6
- "w-aggrid-vue": "^2.1.3",
6
+ "w-aggrid-vue": "^2.1.4",
7
7
  "w-component-vue": "^2.5.21",
8
8
  "wsemi": "^1.9.3"
9
9
  },
@@ -561,6 +561,26 @@
561
561
  </div>
562
562
 
563
563
 
564
+ <div class="bk">
565
+ <demolink
566
+ :pkgname="'w-table-vue'"
567
+ :kbname="'w-table-edit'"
568
+ :casename="'editable & opt.optForUploadData.uploadMode (append, no popup)'"
569
+ ></demolink>
570
+
571
+ <w-table-edit
572
+ style="width:600px; height:400px;"
573
+ :name="WTableEdit.name"
574
+ :description="WTableEdit.description"
575
+ :opt="WTableEdit.opt9"
576
+ :editable="true"
577
+ @success="evSuccess"
578
+ @error="evError"
579
+ ></w-table-edit>
580
+
581
+ </div>
582
+
583
+
564
584
  <div class="bk">
565
585
  <demolink
566
586
  :pkgname="'w-table-vue'"
@@ -905,6 +925,14 @@ export default {
905
925
  },
906
926
  },
907
927
  },
928
+ 'opt9': {
929
+ keys: keys1,
930
+ kpHeadFilterType: kpHeadFilterType1,
931
+ rows: rows1,
932
+ optForUploadData: {
933
+ uploadMode: 'append', //預先指定上傳模式, 點擊上傳按鈕時不顯示模式選擇彈窗, 直接開啟選檔視窗並附加於表格數據之後
934
+ },
935
+ },
908
936
  },
909
937
  'actions': [
910
938
  ],
@@ -95,10 +95,12 @@
95
95
  v-if="isFilter && hasEffRows"
96
96
  ></WButtonCircle>
97
97
 
98
+ <!-- 呼叫端於opt.optForUploadData.uploadMode預先指定上傳模式時, 以editable停用模式選擇彈窗(WPopup點擊觸發區即會自行開啟), 由clickUpload直接開啟選檔視窗 -->
98
99
  <WPopup
99
100
  v-model="showPickUploadMode"
100
101
  :labelContent="labelContentForUpload"
101
102
  :cmpZIndex="cmpZIndex"
103
+ :editable="uploadModePreset===''"
102
104
  >
103
105
 
104
106
  <template v-slot:trigger>
@@ -108,7 +110,7 @@
108
110
  :backgroundColor="'white'"
109
111
  :backgroundColorHover="'white'"
110
112
  :tooltip="tooltipUploadExcelFile"
111
- @click="showPickUploadMode=true"
113
+ @click="clickUpload"
112
114
  ></WButtonCircle>
113
115
  </template>
114
116
 
@@ -321,18 +323,18 @@ import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
321
323
  * @vue-prop {String} [errorMsgFromRemoveRow='can not remove selected rows'] 輸入移除數據失敗事件訊息字串,預設'can not remove selected rows'
322
324
  * @vue-prop {String} [successMsgFromUploadData='upload data successfully'] 輸入上傳數據成功事件訊息字串,預設'upload data successfully'
323
325
  * @vue-prop {String} [errorMsgFromUploadData='can not upload data'] 輸入無法上傳數據事件訊息字串,預設'can not upload data'
324
- * @vue-prop {String} [errorMsgFromUploadEmptyData='no effective data'] 輸入上傳檔案中無有效數據事件訊息字串,預設'no effective data'
326
+ * @vue-prop {String} [errorMsgFromUploadEmptyData='no effective data'] 輸入上傳檔案中無有效數據事件訊息字串,此時不變動表格數據,預設'no effective data'
325
327
  * @vue-prop {String} [successMsgFromDownloadData='download data successfully'] 輸入下載檔案成功事件訊息字串,預設'download data successfully'
326
328
  * @vue-prop {String} [errorMsgFromDownloadData='can not download data'] 輸入無法下載檔案事件訊息字串,預設'can not download data'
327
329
  * @vue-prop {String} [errorMsgFromNoName='no data name'] 輸入未輸入數據名稱事件訊息字串,預設'no data name'
328
330
  * @vue-prop {String} [errorMsgFromNoData='no data'] 輸入未給予有效數據事件訊息字串,預設'no data'
329
- * @vue-prop {String} [uploadModeTitle='Choose mode of upload:'] 輸入選擇上傳模式彈窗標題字串,預設'Choose mode of upload:'
331
+ * @vue-prop {String} [uploadModeTitle='Choose mode of upload:'] 輸入選擇上傳模式彈窗標題字串,opt.optForUploadData.uploadMode有預先指定時不顯示此彈窗,預設'Choose mode of upload:'
330
332
  * @vue-prop {String} [uploadModeTextForReplace='Replace'] 輸入取代上傳模式文字字串,預設'Replace'
331
333
  * @vue-prop {String} [uploadModeTextForAppend='Append'] 輸入插入於最後上傳模式文字字串,預設'Append'
332
334
  * @vue-prop {String} [labelContentForUpload=null] 輸入針對上傳模式之popup彈窗teleport至body內之內容div所給予之wtlp屬性值字串,供查找使用,預設null
333
335
  * @vue-event {Array} save 指調用組件的method,無輸入,會回傳當前的name、description、rows所構成的物件
334
336
  * @vue-event {String} success 當新增數據、上傳數據、下載數據成功時觸發,回傳對應成功訊息字串
335
- * @vue-event {String} error 當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串
337
+ * @vue-event {String} error 當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串;使用者於上傳選檔視窗取消時不觸發
336
338
  * @vue-slot {Object} infor 顯示模式下資訊區之渲染slot,slot props為{ infor },infor為{ name, description }
337
339
  * @vue-slot {Object} btns-left 選單按鈕區最左側之插入slot,slot props為{ editable }
338
340
  * @vue-slot {Object} btns-right 選單按鈕區最右側之插入slot,slot props為{ editable }
@@ -391,7 +393,7 @@ import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
391
393
  * @vue-prop {Boolean} [opt.autoFitColumn=false] 輸入當表格尺寸變更時自動調整欄寬布林值,預設false
392
394
  * @vue-prop {String} [opt.language='en'] 輸入指定語系字串,可選'en'、'zh-tw'、'zh-cn',預設同組件language
393
395
  * @vue-prop {Function} [opt.beforeAddRow=undefined] 輸入編輯模式新增數據前之修改新列事件,輸入newRow,輸出newRow,預設為undefined
394
- * @vue-prop {Object} [opt.optForUploadData={}] 輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',預設由彈窗選擇),beforeUpload代表上傳前的處理數據函數,parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),optForUploadData預設{}
396
+ * @vue-prop {Object} [opt.optForUploadData={}] 輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',有給予時點擊上傳按鈕不顯示模式選擇彈窗而直接開啟選檔視窗,未給予或非前述值時由彈窗選擇),beforeUpload代表上傳前的處理數據函數(輸入讀取所得之數據陣列,回傳處理後之數據陣列或Promise,未給予時自動去除於表格各欄位之值皆為空的無效數據,處理後無數據時觸發error事件(errorMsgFromUploadEmptyData)且不變動表格數據),parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),組件不會修改此物件,optForUploadData預設{}
395
397
  * @vue-prop {Function} [opt.modifyDataWhenSave=undefined] 輸入當儲存時修改儲存數據事件,輸入rows,輸出rows,預設為undefined
396
398
  * @vue-prop {Boolean} [opt.checkNoDataWhenSave=false] 輸入當儲存時是否檢核無數據布林值,預設false
397
399
  * @vue-prop {Number} [cmpZIndex=3000] 輸入彈窗使用z-index數字,供嵌於高z-index彈窗內時提高層級,預設3000
@@ -707,6 +709,20 @@ export default {
707
709
  return kp
708
710
  },
709
711
 
712
+ uploadModePreset: function() {
713
+ //console.log('computed uploadModePreset')
714
+
715
+ let vo = this
716
+
717
+ //uploadMode, 呼叫端於opt.optForUploadData.uploadMode預先指定之上傳模式, 僅接受'replace'與'append', 其餘視為未指定而由彈窗選擇
718
+ let uploadMode = get(vo, 'opt.optForUploadData.uploadMode', '')
719
+ if (uploadMode !== 'replace' && uploadMode !== 'append') {
720
+ uploadMode = ''
721
+ }
722
+
723
+ return uploadMode
724
+ },
725
+
710
726
  useKeys: function() {
711
727
  //console.log('computed useKeys')
712
728
 
@@ -1153,6 +1169,22 @@ export default {
1153
1169
 
1154
1170
  },
1155
1171
 
1172
+ clickUpload: function() {
1173
+ //console.log('methods clickUpload')
1174
+
1175
+ let vo = this
1176
+
1177
+ //check, 呼叫端已預先指定上傳模式時, 模式選擇彈窗已由WPopup之editable停用, 直接開啟選檔視窗
1178
+ if (vo.uploadModePreset !== '') {
1179
+ vo.uploadData(vo.uploadModePreset)
1180
+ return
1181
+ }
1182
+
1183
+ //showPickUploadMode
1184
+ vo.showPickUploadMode = true
1185
+
1186
+ },
1187
+
1156
1188
  uploadData: function(uploadModeSelect) {
1157
1189
  //console.log('methods uploadData', uploadModeSelect)
1158
1190
 
@@ -1166,59 +1198,82 @@ export default {
1166
1198
  return
1167
1199
  }
1168
1200
 
1169
- //optForUploadData
1201
+ //optForUploadData, 淺拷貝後才寫入uploadMode與beforeUpload, 不可改寫呼叫端之opt.optForUploadData, 否則首次所選模式會被存入而使後續彈窗選擇失效
1170
1202
  let optForUploadData = get(vo, 'opt.optForUploadData')
1171
1203
  if (!isobj(optForUploadData)) {
1172
1204
  optForUploadData = {}
1173
1205
  }
1206
+ optForUploadData = { ...optForUploadData }
1174
1207
 
1175
- //uploadMode, 選擇上傳模式
1176
- let uploadMode = get(optForUploadData, 'uploadMode')
1177
- if (!isestr(uploadMode)) {
1178
- optForUploadData.uploadMode = uploadModeSelect
1179
- }
1208
+ //uploadMode, 呼叫端有預先指定時使用之(此時不顯示模式選擇彈窗), 否則使用彈窗所選
1209
+ optForUploadData.uploadMode = vo.uploadModePreset !== '' ? vo.uploadModePreset : uploadModeSelect
1210
+
1211
+ //errNoEffData, 無有效數據之錯誤物件, 於catch以參照比對, 不與w-aggrid-vue或呼叫端beforeUpload之錯誤混淆
1212
+ let errNoEffData = { msg: 'no effective data' }
1180
1213
 
1181
- //beforeUpload, 自動去除無效數據
1214
+ //beforeUpload, 包裝呼叫端之beforeUpload(未給予時使用預設之去除無效數據), 處理後無數據時reject, w-aggrid-vue會於寫入表格前中止, 故取代與附加模式皆不變動表格數據
1182
1215
  let beforeUpload = get(optForUploadData, 'beforeUpload')
1183
- if (!isfun(beforeUpload)) {
1184
- optForUploadData.beforeUpload = (rows) => {
1185
- // console.log('beforeUpload', rows)
1186
-
1187
- //calc eff rows
1188
- let rs = []
1189
- each(rows, (row) => {
1190
- let b = every(row, (v) => {
1191
- return v === ''
1192
- })
1193
- if (!b) {
1194
- rs.push(row)
1216
+ optForUploadData.beforeUpload = (rows) => {
1217
+ // console.log('beforeUpload', rows)
1218
+ return Promise.resolve()
1219
+ .then(() => {
1220
+
1221
+ //呼叫端beforeUpload
1222
+ if (isfun(beforeUpload)) {
1223
+ return beforeUpload(rows)
1195
1224
  }
1225
+
1226
+ //calc eff rows, 各列於表格欄位(useKeys)之值皆為空者視為無效, 欄位與表格不符之列寫入後亦為空列故一併去除
1227
+ let rs = []
1228
+ each(rows, (row) => {
1229
+ let b = every(vo.useKeys, (k) => {
1230
+ let v = get(row, k)
1231
+ return v === '' || v === null || v === undefined
1232
+ })
1233
+ if (!b) {
1234
+ rs.push(row)
1235
+ }
1236
+ })
1237
+ // console.log('rs', rs)
1238
+
1239
+ return rs
1196
1240
  })
1197
- // console.log('rs', rs)
1241
+ .then((rs) => {
1198
1242
 
1199
- return rs
1200
- }
1243
+ //check, 無有效數據
1244
+ if (!isearr(rs)) {
1245
+ return Promise.reject(errNoEffData)
1246
+ }
1247
+
1248
+ return rs
1249
+ })
1201
1250
  }
1202
1251
  // console.log('optForUploadData', optForUploadData)
1203
1252
 
1204
1253
  //upload
1205
1254
  fun(optForUploadData)
1206
- .then((rows) => {
1207
- // console.log('upload then', rows)
1255
+ .then(() => {
1208
1256
 
1209
- //check
1210
- if (size(rows) === 0) {
1211
- vo.$emit('error', vo.errorMsgFromUploadEmptyData)
1212
- }
1213
- else {
1214
- vo.$emit('success', vo.successMsgFromUploadData)
1215
- }
1257
+ //emit
1258
+ vo.$emit('success', vo.successMsgFromUploadData)
1216
1259
 
1217
1260
  //reset rowsSelect
1218
1261
  vo.rowsSelect = []
1219
1262
 
1220
1263
  })
1221
1264
  .catch((err) => {
1265
+
1266
+ //check, 使用者於選檔視窗取消時w-aggrid-vue之uploadData以{ msg: 'no file' }reject, 屬正常操作, 靜默結束不觸發error事件
1267
+ if (get(err, 'msg') === 'no file') {
1268
+ return
1269
+ }
1270
+
1271
+ //check, 無有效數據, 此時w-aggrid-vue尚未寫入, 表格數據未變動
1272
+ if (err === errNoEffData) {
1273
+ vo.$emit('error', vo.errorMsgFromUploadEmptyData)
1274
+ return
1275
+ }
1276
+
1222
1277
  console.log('catch', err)
1223
1278
  vo.$emit('error', vo.errorMsgFromUploadData)
1224
1279
  })