w-web-api 1.0.52 → 1.0.55
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 +1 -1
- package/dist/css/app.cad4a1ca.css +1 -0
- package/dist/index.tmp +4 -2
- package/dist/js/app-legacy.7687b23b.js +1 -0
- package/dist/js/app.7687b23b.js +1 -0
- package/dist/js/chunk-vendors-legacy.4c27cf51.js +15 -0
- package/dist/js/chunk-vendors.4c27cf51.js +15 -0
- package/dist/w-web-api.umd.js +2 -2
- package/dist/w-web-api.umd.js.map +1 -1
- package/docs/WWebApi.html +2 -2
- package/docs/index.html +1 -1
- package/docs/{WWebApi.mjs.html → server_WWebApi.mjs.html} +113 -66
- package/docs/src_components_Common_CheckYesNo.vue.html +187 -0
- package/g.getSettings.mjs +3 -0
- package/logs/2026-06-19T16.log +6 -0
- package/logs/2026-06-20T11.log +4 -0
- package/logs/2026-06-20T14.log +2 -0
- package/logs/2026-06-21T20.log +1 -0
- package/logs/2026-06-21T21.log +4 -0
- package/logs/2026-06-22T07.log +12 -0
- package/logs/2026-06-22T08.log +808 -0
- package/logs/2026-06-22T09.log +104 -0
- package/logs/2026-06-22T10.log +26 -0
- package/logs/2026-06-22T11.log +860 -0
- package/logs/2026-06-22T12.log +430 -0
- package/logs/2026-06-22T23.log +1547 -0
- package/logs/2026-06-23T00.log +473 -0
- package/logs/2026-06-23T08.log +231 -0
- package/logs/2026-06-23T09.log +179 -0
- package/logs/2026-07-01T11.log +488 -0
- package/logs/2026-07-09T22.log +370 -0
- package/logs/2026-07-09T23.log +370 -0
- package/logs/2026-07-10T12.log +284 -0
- package/logs/2026-07-10T13.log +777 -0
- package/logs/2026-07-11T17.log +2 -0
- package/package.json +20 -15
- package/public/index.html +9 -2
- package/server/WWebApi.mjs +110 -63
- package/server/procApis.mjs +62 -0
- package/server/procLang.mjs +372 -66
- package/server/procProxy.mjs +120 -0
- package/server/srLog.mjs +30 -0
- package/server/staLogs/filterVpfsByWindow.mjs +27 -0
- package/server/staLogs/staEvent.mjs +131 -0
- package/server/staLogs/test_staEvent.mjs +198 -0
- package/settings.json +18 -0
- package/src/App.vue +11 -7
- package/src/assets/scalar-ui.css +113 -0
- package/src/components/Common/CheckYes.vue +102 -0
- package/src/components/Common/CheckYesNo.vue +115 -0
- package/src/components/Common/LoadingWinBar.vue +114 -0
- package/src/components/Layout.vue +8 -26
- package/src/components/LayoutContent.vue +299 -350
- package/src/components/LayoutContentEdit.vue +577 -0
- package/src/components/LayoutContentStats.vue +485 -0
- package/src/components/LayoutContentTest.vue +781 -0
- package/src/components/MdPanel.vue +80 -58
- package/src/main.js +11 -8
- package/src/plugins/mUI.mjs +19 -39
- package/src/schema/tables/apis.mjs +30 -0
- package/src/store/mutations.mjs +0 -14
- package/src/store/types.mjs +0 -3
- package/srv.mjs +50 -20
- package/tableTags.json +1 -1
- package/z/344/277/256/346/255/243/350/246/217/345/212/203/346/233/270.md +246 -0
- package/.github/workflows/ci-test.yml +0 -24
- package/.vscode/launch.json +0 -18
- package/db/wapis/apis/data.mdb +0 -0
- package/db/wapis/apis/lock.mdb +0 -0
- package/dist/css/app.b5cf2ef5.css +0 -1
- package/dist/js/app-legacy.927b5679.js +0 -1
- package/dist/js/app.927b5679.js +0 -1
- package/dist/js/chunk-vendors-legacy.ffb0c6c5.js +0 -13
- package/dist/js/chunk-vendors.ffb0c6c5.js +0 -13
- package/src/plugins/mDataSelectorSchema.mjs +0 -30
- package/src/plugins/mShare.mjs +0 -44
- package/tableTags-web-api.json +0 -1
- package/test/all.test.mjs +0 -10
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# w-web-api 修正規劃書
|
|
2
|
+
|
|
3
|
+
## ✅ 覆核(2026-07-11 主代理派獨立子代理逐項查證)
|
|
4
|
+
|
|
5
|
+
> 逐項讀碼 + 實跑複驗本書宣稱: **9/9 全數屬實, 無待修項, 未動任何檔案**。
|
|
6
|
+
>
|
|
7
|
+
> - **AA-1 / AA-2 現況描述準確**: `WWebApi.mjs:351-358` 確為 `if (true)` 包裹之恆真分支(含註解掉的 early-return);`procProxy.mjs:80-88` axios 確無 `maxRedirects`/`maxContentLength`, `isAllowTarget`(`:13`/`:35-40`)須 caller 傳入才生效 —— 維持「報告不改 / 併 ADR-006 實作附註」判定。
|
|
8
|
+
> - **P-3**: spec bullet(測試API E2E-004~008 / 統計 E2E-004 / 初始語系 E2E-004/005)與對應 e2e case(echo server 11077、Authorization/X-API-Key/Basic 斷言、`#timeGroupSel` 切換、csErrConn/csLogout)皆落地。
|
|
9
|
+
> - **P-4**: CLAUDE.md 僅餘 2 筆刻意對照之 `generateBaseline` 字樣(`:249`/`:290`, 皆為「本專案無」語句), `deleteTestUsersAndTokens` 0 筆。**P-5**: trace 計數精確吻合(統計 30 筆 / 初始語系 16 筆 `[file:line]`)。**P-6**: 「共用 E2E-001」歸零。
|
|
10
|
+
> - **實跑**: `node server/staLogs/test_staEvent.mjs` 三段 PASS、exit 0(含 day 檔名 × hr fmt 粒度自適應直測)。
|
|
11
|
+
> - **P-1 baseline**: `test/pics/display/` eng/cht mtime 皆為 07-10 12:58~13:01 同批寫出, 與「重產後容差內還原原 byte」機制一致(eng 檔 mtime 更新屬還原動作之預期副作用;byte 級溯源因無備份檔可比, 無法獨立覆核, 非失實)。
|
|
12
|
+
> - **後續(同日業主授權執行)**: AA-1 之 `if (true)` 死碼包裹已清理並驗證無迴歸, 詳 AA-1 節;AA-2 依原判維持併 ADR-006 實作時處理(單獨設 `maxRedirects: 0` 屬行為變更, 不先行)。
|
|
13
|
+
|
|
14
|
+
## 🔍 稽核追加(2026-07-11 三維度稽核 → 主代理逐項查核)
|
|
15
|
+
|
|
16
|
+
> 架構/風格/弱點三維度稽核(opus 半邊 + 主代理讀碼複查)。本專案稽核成熟度極高(ADR-001~026 已收錄幾乎所有常見稽核項)。**待修 bug = 0**, 僅 2 項低度供參(皆非必修)。
|
|
17
|
+
|
|
18
|
+
### AA-1 [低度 / 程式碼氣味] `getTokenUser` 之 `if (true)` 恆真死分支 — ✅ 已清理(2026-07-11)
|
|
19
|
+
- **位置**: `server/WWebApi.mjs:351-358` —— `if (true) { /* 註解掉的 iseobj 檢查 */ await checkUser(userSelf) }`。功能正確(checkUser 恆執行), 但 `if(true)` 包裹 + 註解掉的 early-return 為死碼氣味。
|
|
20
|
+
- **處置**: 原依 §5「既有死碼提報不自刪」報告不改。
|
|
21
|
+
- **✅ 已清理(2026-07-11, 業主授權「有什麼需要修改的由你去修」)**: 移除 `if (true)` 包裹與其內註解掉之 early-return 區塊, 保留 `//check` 標籤與 `await checkUser(userSelf)`(功能完全等價, 零行為變更)。驗證: `node --check` 通過;`npx mocha test/unit-procApis.test.mjs test/api-http.test.mjs` **10 passing / 0 failing**(含「非法 token → checkUser reject」case 直接行使本路徑)。
|
|
22
|
+
|
|
23
|
+
### AA-2 [低度 / SSRF 加固, 併入 ADR-006 未來實作] `procProxy` axios 未設 `maxRedirects`
|
|
24
|
+
- **位置**: `server/procProxy.mjs:80-88`(axios 未設 `maxRedirects`/`maxContentLength`)。`isAllowTarget` 白名單機制已存在(:13,:35)但須 caller 傳入 opt.isAllowTarget 才生效。
|
|
25
|
+
- **真痛三條件**: ①合約內=是(SSRF 防護);②已被觀察=否;③後果具體=**條件式**——ADR-006 指示未來部署到可觸及內網時要接線 `isAllowTarget` 白名單拒私網/metadata, 但 axios 預設跟隨 3xx 轉址會使「URL-only 白名單」被 `302 Location: 169.254.169.254` 繞過。**現行 isAllowTarget 未被 caller 接線, 無立即觸發路徑。**
|
|
26
|
+
- **處置**: 非本輪必修。**建議在實作 ADR-006 之 isAllowTarget 白名單時, 同步設 `maxRedirects: 0`**(或每次 redirect 重跑白名單)。已請主代理視為 ADR-006 之實作附註。
|
|
27
|
+
|
|
28
|
+
### 正面確認(已查核, 非誤報)
|
|
29
|
+
- server 端 16 個 `reject('errXxx')` key 逐一存在於 procLang 且 eng/cht 齊備(ADR-015 無破口)。
|
|
30
|
+
- 無 NoSQL operator injection / path traversal(送 ORM 之 id/group/keyTable 皆經 isestr+白名單驗字串)。無 Vue2 async-arrow 靜默編錯(grep 0)。debug log 經 maskTok 遮罩。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
> ## ✅ 執行狀態: **P-1 ~ P-7 全部完成**(2026-07-10, 主代理 + 子代理分工)
|
|
35
|
+
>
|
|
36
|
+
> | 項 | 處置 | 結果 |
|
|
37
|
+
> |---|---|---|
|
|
38
|
+
> | P-1 | cht baseline 手術式重產: 備份 82 張 → `E2E_REGEN=1` 全跑(61 passing)→ 逐張 pixelmatch 比對「新產 vs 備份」: 容差內 49 張**還原原 byte**(全部 eng + 未含頁首之 cht), 超容差 33 張保留新產(**全部為 cht**, diff 值 1918/1742 px 高度一致 = 頁首描述固定區域, 與根因完全吻合), 新增 20 張(P-3) | ✔ 正常模式全跑 **61 passing / 0 failing**(原 26/19);抽視覺確認 cht 頁首已為中文描述 |
|
|
39
|
+
> | P-2 | `test_staEvent.mjs` 追加粒度自適應直測 + day 檔名整合測 | ✔ 全 PASS exit 0 |
|
|
40
|
+
> | P-3 | 四組 spec 缺口全數補齊(先 spec 後 test): (a)認證帶入 E2E-004/005/006(測試自帶 echo server:11077 驗 Authorization/X-API-Key/Basic 真的送達)、(b)請求建構器 E2E-007/008(KV 增刪勾選 + POST body)、(c)統計時間範圍切換 stainfor E2E-004、(d)連線狀態 csErrConn/csLogout init E2E-004/005(沿用 CLAUDE.md 明文之懸置+connState 強制機制;兩圖為靜態 PNG 免遮蔽) | ✔ 新增 16 個 case(8+2+2+4 ×語系並含多階段)首跑全綠 |
|
|
41
|
+
> | P-4 | CLAUDE.md lifecycle 段改述實際 REGEN 機制(mocha `--baseline`/`E2E_REGEN=1` + root after), 移除虛構之 generateBaseline/直跑分支/deleteTestUsersAndTokens;audit 指令改為「檢查測試檔未繞過集中管理」 | ✔(殘留 2 筆 `generateBaseline` 字樣為刻意對比說明「本專案無」, 非 doc rot) |
|
|
42
|
+
> | P-5 | 兩份 spec trace 補行號與深度(統計 30 筆 / 初始語系 16 筆 [file:line]) | ✔ 抽驗 5/5 與程式碼一致 |
|
|
43
|
+
> | P-6 | e2e-display 三處「共用 E2E-001」陳舊註解改為實際產製之 baseline 檔名 | ✔ 歸零;另訂正 `e2e-setup.mjs:22`「否則 byte 比對」陳舊用詞 |
|
|
44
|
+
> | P-7 | 規劃書自身兩瑕疵: (a)已於本節註記(`assertBaselineMatch` 計數 1 為 `:236` 刻意對照);(b)危險舊 snippet 之訂正已寫回其源頭 `w-web-sso/z修正規劃書.md` 批 B 節(加警語+修正版) | ✔ |
|
|
45
|
+
>
|
|
46
|
+
> **最終驗收(2026-07-10)**: e2e **61 passing / 0 failing**;unit+api 10 passing;`test_staEvent` PASS。
|
|
47
|
+
|
|
48
|
+
> **本版更新**: 2026-07-09 | **更新者**: 主代理(獨立查證,未採信前版自陳之「✔」)
|
|
49
|
+
> **本版動作**: ①覆核前版規劃書是否合理屬實 ②盤查 `./spec` 流程覆蓋度 ③盤查 `./test` 之 unit/api/e2e 完整度與風格。
|
|
50
|
+
> **結構**: 待修正項在前(§一~§三),已修正項在後(§四),設計取捨已移出至 [`spec/設計要點與取捨.md`](spec/設計要點與取捨.md) 之 ADR-023~026。
|
|
51
|
+
> **行號基準**: 2026-07-09 工作區狀態。**動手前務必先 grep 確認行號**,勿盲信本文行號。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 零、執行紀律(動工前必讀)
|
|
56
|
+
|
|
57
|
+
1. **只做本規劃書明列之項目**;凍結區(§五)一律不碰。
|
|
58
|
+
2. **每批完成即驗收**,不要一次全改再驗。
|
|
59
|
+
3. 暫存檔一律落 `C:\opensrc\w-web-api\tmp\`;探索用 Glob/Grep/Read,禁止 dump-to-disk。
|
|
60
|
+
4. 不主動 commit(業主自行決定)。
|
|
61
|
+
5. **不得改動** `test/e2e-setup.mjs` 之比對實作與參數預設值(`maxDiffPixels=100` / `threshold=0.1` / `includeAA:false`);**不得重產 baseline**(除非取得 §一 P-1 之明示授權)。
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# 待修正項
|
|
66
|
+
|
|
67
|
+
## 一、P0|阻斷性:cht baseline 全面失效(須業主授權)
|
|
68
|
+
|
|
69
|
+
### P-1 | `npx mocha test/e2e-*.test.mjs` = 26 passing / **19 failing**,失敗全為 `[cht]`
|
|
70
|
+
|
|
71
|
+
**根因(主代理以靜態控制流獨立確證,無需跑 e2e)**:
|
|
72
|
+
|
|
73
|
+
| 環節 | 證據 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| `webDescription.cht` 由英文改為中文 | `git show HEAD:srv.mjs` 之 cht 值 = 英文(與 eng 同字);工作區 `srv.mjs:49` 已為中文。`srv.mjs` mtime = **2026-07-06 15:21** |
|
|
76
|
+
| 該值渲染於**頁首** | `srv.mjs:49` → `server/WWebApi.mjs:207` → `:241 procLang({webDescription})` → kpLang → `src/components/Layout.vue:24` `{{$t('webDescription')}}` |
|
|
77
|
+
| cht baseline 早於改動 | `test/pics/display/display-cht-*.png` mtime = **2026-06-22 11:42** |
|
|
78
|
+
| eng 不受影響 | eng 值未變 |
|
|
79
|
+
|
|
80
|
+
→ 所有 cht 全頁 baseline 之頁首描述文字與現況不符。**與批 A(文件/註解)、批 B(統計過濾)無關**,屬 2026-07-06 該次改動只跑 `npm run build`、未跑 e2e 所致。
|
|
81
|
+
|
|
82
|
+
**處置**:
|
|
83
|
+
- 本次**不重產任何 baseline**(依全域技能「重產須先經業主授權」)。
|
|
84
|
+
- 建議:業主授權後,針對受影響之 **cht** baseline 執行手術式重產(**僅 cht,eng 不動**),再全跑 e2e 驗綠。
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 二、P1|測試與規格之實質缺口
|
|
89
|
+
|
|
90
|
+
### P-2 | `filterVpfsByWindow` 之「粒度自適應」防線**無任何回歸測試**
|
|
91
|
+
|
|
92
|
+
- **現況**:`server/staLogs/filterVpfsByWindow.mjs:22` 之 `bn >= keyStart.slice(0, bn.length)` 是本模組的招牌防線。`test/` 內 0 引用;`server/staLogs/test_staEvent.mjs` 僅間接觸及兩條路徑:**fail-open**(`:65` 寫入非 ISO 檔名 `old.log`)與 **hr 檔名 × hr fmt**(`:63-64` 之 `${keyNow}.log` / `${keyPrev}.log`)。
|
|
93
|
+
- **未被覆蓋之分支**:**day 粒度檔名(10 字元)× hr 粒度 fmt(13 字元)**。模組註解(`:11-14`)自陳:若不做 `slice`,`'2026-07-08' < '2026-07-08T21'` → **含 tStart 之當天檔被誤判窗外 → 漏讀整天資料**。
|
|
94
|
+
- **可觸發性**:`srLog` 之 `logInterval`(決定檔名粒度)與 `staEvent` 之 `timeInterval`(決定 fmt)是**兩個獨立設定**(`settings.json` vs 前端傳入),實務上可不同。
|
|
95
|
+
- **後果具體**:該防線若被誤改,唯一守門是 staEvent 整合測,而現有整合測**打不到此分支** → regression 靜默漏網,統計頁漏一整天資料且無錯誤可循。
|
|
96
|
+
- **建議修法**:於 `server/staLogs/test_staEvent.mjs` 增(或另建 `test/unit-filterVpfsByWindow.test.mjs`):
|
|
97
|
+
1. 建 **day 粒度檔名**(如 `2026-07-08.log`)+ 以 `fmt='YYYY-MM-DDTHH'` 呼叫 → 斷言當天檔**被保留**(守住 slice 防線)。
|
|
98
|
+
2. 建明確窗外之 **hr 檔名** → 斷言**被剔除**。
|
|
99
|
+
- **風險**:極低(純函式、無副作用)。
|
|
100
|
+
|
|
101
|
+
### P-3 | spec 缺三組重要流程之 `E2E-NNN` bullet
|
|
102
|
+
|
|
103
|
+
> 註:rubric #1「Case 對齊」實測**通過**(spec bullet 數 ≡ `it()` 數:展示 9/9、編輯 5/5、測試 3/3、統計 3/3、初始語系 3/3)。本項缺的是**spec 未為既有功能定義 bullet**,非 test 漏做 spec 已定義之 case。
|
|
104
|
+
|
|
105
|
+
| # | 缺口 | 證據 | 為何重要 |
|
|
106
|
+
|---|---|---|---|
|
|
107
|
+
| a | **測試分頁「認證帶入」無測試翻譯** | `LayoutContentTest.vue:409-465` 之 bearer/apikey/basic 三分支;`spec/流程_測試API.md` 之 trace 006a/b/c 與「認證帶入分支」表**已詳述**,但 `test/e2e-apitest.test.mjs`(3 個 it())**無任何 `Authorization` 注入斷言** | 違 §14.2「測試是規格的翻譯」:spec 已寫成規格卻無 predicate。authConfigJson 解析若壞,使用者的認證標頭靜默消失 |
|
|
108
|
+
| b | **測試分頁請求建構器編輯能力** | Query/Headers KV 列增/刪/勾選/改鍵值(`LayoutContentTest.vue:71,89,99,130,148,158`)、Body 編輯 + 非 GET 送出(`:178,289,546`)全無 E2E | 「測試任意 API」是本套件三大核心價值之一,目前僅覆蓋「改 URL → GET 送出」 |
|
|
109
|
+
| c | **統計頁時間範圍切換** | `LayoutContentStats.vue:16` `v-model=timeGroup`(1時/4時/8時/1日 重採樣);`spec/流程_統計資訊.md` description 有提,**無 E2E case**;`test/e2e-stainfor.test.mjs` 完全未觸發 | `resampledData` 為統計頁核心展示邏輯 |
|
|
110
|
+
| d | **連線狀態畫面 `csErrConn` / `csLogout`** | `src/components/LayoutState.vue:30,42` 有完整 i18n 文字與圖示;spec 全域 grep **0 命中**。`csErrConn` 於 `src/main.js` 之 getWebInfor catch 修好後**已可觸發** | **專案 `CLAUDE.md` 自身明文指導**要涵蓋「其他連線狀態畫面(連線錯誤/拒絕登入/已登入過場)」,並給了「連線懸置 + 前端狀態 API 強制切換」的作法,卻無 spec 亦無 e2e |
|
|
111
|
+
|
|
112
|
+
- **建議修法**:擇一——①於對應 spec 增 `E2E-NNN` bullet 並補 e2e;②若判定為刻意不測,寫入 `spec/設計要點與取捨.md` 明示取捨(**不可默默不做**)。
|
|
113
|
+
- 次要(可併入或明示取捨):編輯表單之 `valInvalidJson` 格式驗證(`LayoutContentEdit.vue:377`,僅列於「錯誤處理分層」表無 case)、取消鈕(`:242 onClickCancel`)。
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 三、P2|文件與現實脫節(doc rot)
|
|
118
|
+
|
|
119
|
+
### P-4 | `CLAUDE.md` 之「e2e lifecycle 實作映射」整段描述不存在的機制 —— **且其 audit 指令恆為空,構成假安全感**
|
|
120
|
+
|
|
121
|
+
- **現況**(皆已 grep 證實不存在於本專案):
|
|
122
|
+
- `CLAUDE.md:248`「非框架直跑分支 flag: `process.argv.includes('--baseline')`(每個 test 檔內 `generateBaseline()` 函式末尾須顯式 `cleanup()`)」→ **`test/e2e-*.test.mjs` 無任何檔使用 `process.argv`**;**`generateBaseline` 全 `test/` 0 命中**。
|
|
123
|
+
- `CLAUDE.md:249`「非框架直跑入口: `node test/e2e-<flow>.test.mjs --baseline`」→ 無此入口。
|
|
124
|
+
- `CLAUDE.md:282-285` 之 audit 指令 `grep -lE "process\.argv\.includes\('--baseline'\)" test/e2e-*.test.mjs | ...` → **回傳恆為空**,永遠「通過」。
|
|
125
|
+
- `CLAUDE.md` 之「標準 baseline 主函式範本」內含 `deleteTestUsersAndTokens()` —— **此為 `w-web-sso` 之函式**,本專案不存在。
|
|
126
|
+
- **實際機制**:regen 由 `test/e2e-setup.mjs:23` `let REGEN = process.argv.includes('--baseline') || process.env.E2E_REGEN === '1'` 判定,走 **mocha 參數或 `E2E_REGEN=1` 環境變數**;cleanup 由 mocha root `after` hook(`:194-199`)統一觸發,**無直跑分支需顯式 cleanup**。
|
|
127
|
+
- **後果具體**:後續 agent 依 CLAUDE.md 撰寫 e2e 時會產出不存在的 `generateBaseline()` 結構;audit 指令給出虛假的「全部通過」。
|
|
128
|
+
- **建議修法**:更新 `CLAUDE.md` 之 lifecycle 映射表與 audit 指令,改述為實際的 `REGEN`(`--baseline` 旗標或 `E2E_REGEN=1`)+ mocha root `after` 機制;移除 `generateBaseline()` 範本與 `deleteTestUsersAndTokens()` 殘留。
|
|
129
|
+
- **風險**:0(doc-only)。
|
|
130
|
+
|
|
131
|
+
### P-5 | `spec/流程_統計資訊.md` 與 `spec/流程_初始語系.md` 之 trace 段**全數缺行號**、深度不足
|
|
132
|
+
|
|
133
|
+
- **現況**:兩份**有**「## 執行流程」trace 段,但引用一律寫成 `[src/components/LayoutContentStats.vue]`、`[server/WWebApi.mjs]` 等**不帶 `:行號`**(`[file:line]` ref 數 = **0**;對照展示 37 / 編輯 54 / 測試 34 筆)。
|
|
134
|
+
- **違反**:全域 §15.2「檔名行號放該行最末尾 `[檔名:行號]`」;且未追到底、未標 `await`/條件分支/`catch` 攔截範圍。統計資訊之 trace 僅 001-003(`resampledData`/`eventRows`/時間切換全未進 trace);初始語系之 `getLang` 優先序、注入取代、攔截懸置等關鍵步皆未標行號。
|
|
135
|
+
- **建議修法**:補齊 `[檔名:行號]`、追到底、標出 await 與分支(措辭與縮排規則對齊 `spec/流程_展示API文件.md` 之既有 trace,不自創)。
|
|
136
|
+
- **風險**:0(doc-only)。
|
|
137
|
+
|
|
138
|
+
### P-6 | `test/e2e-display.test.mjs` 三處註解與程式碼矛盾
|
|
139
|
+
|
|
140
|
+
- **現況**:`:184`、`:303`、`:342` 之註解均寫「視覺共用 E2E-001 baseline,不另產」,但程式碼**正確地**各自產製 baseline:`:214` `E2E-002-tree.png`、`:335` `E2E-005-header.png`(另有 `E2E-005-pills`、`E2E-006-{input,output,request,response}`),且與 `spec` 及 `test/pics/display/` 實檔相符。
|
|
141
|
+
- **判定**:**程式對、註解舊**(doc rot)。
|
|
142
|
+
- **建議修法**:僅修註解使其對齊 spec 與實檔。**不得依註解去刪除 baseline 產製**。
|
|
143
|
+
- **風險**:0(僅註解)。
|
|
144
|
+
|
|
145
|
+
### P-7 | 前版規劃書自身之兩處瑕疵(供本次一併更正)
|
|
146
|
+
|
|
147
|
+
| # | 位置 | 問題 |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| a | 前版 §五驗收總表 A-3 | 寫「`grep -c "assertBaselineMatch" CLAUDE.md` 應為 **0**」,但 A-2 新增之防誤判警語(`CLAUDE.md:236`)**刻意**保留 `sso/perm/task 為 assertBaselineMatch` 作為對照 → 實際計數為 **1**。驗收條件與自身設計矛盾,應改為「僅 `:236` 對照用途允許出現」 |
|
|
150
|
+
| b | 前版 §三 B-1 之程式碼範例 | 給的簽章 `filterVpfsByWindow(vpfs, tStart, timeInterval='hr')` 於內部推導 fmt,**有真 bug**:當 `logInterval='day'`(檔名 10 字元)而 `timeInterval='hr'`(keyStart 13 字元)時,`'2026-07-08' >= '2026-07-08T21'` 為 false → **含 tStart 之當天檔被誤判窗外、漏讀整天資料**。實作者已改為 `(vpfs, tStart, fmt)` + `keyStart.slice(0, bn.length)` 修正之。**規劃書範例應更正,以免日後照抄回退** |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
# 已修正項
|
|
155
|
+
|
|
156
|
+
## 四、前版批 A / 批 B —— 主代理獨立查證結果
|
|
157
|
+
|
|
158
|
+
> 查證方式:逐項 grep / Read 實際檔案,不採信前版自陳之「✔」。
|
|
159
|
+
|
|
160
|
+
| 項 | 內容 | 查證結果 |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| A-1 | `CLAUDE.md:115` 改寫為契約語意、不點名 API | ✔ 已改 |
|
|
163
|
+
| A-2 | 新增「e2e baseline 比對落地映射」節 | ✔ `CLAUDE.md:231-236` 存在,內容正確(含防誤判警語) |
|
|
164
|
+
| A-3 | `CLAUDE.md:105`/`:124` 函式名訂正(**誤報主因**) | ✔ 兩處均已改為 `assertOrRegenBaseline`。(驗收條件本身有誤,見 P-7a) |
|
|
165
|
+
| A-4 | `test/e2e-setup.mjs:287` 陳舊註解 | ✔ `byte-equal` 計數 = 0;**`:282` / `:344` 之精確相等(settle 偵測)完好未被誤改** |
|
|
166
|
+
| A-5 | 兩份流程文件補容差描述(6 處) | ✔ `流程_統計資訊.md` / `流程_初始語系.md` 各 3 處 |
|
|
167
|
+
| A-6 | README 不改 | ✔ 維持(防誤報之正面陳述已由 A-2 覆蓋) |
|
|
168
|
+
| B-1 | `staEvent` 開檔前時間窗過濾(抽 `filterVpfsByWindow.mjs`) | ✔ 已落地,**且實作優於前版規劃書**(見 P-7b)。惟粒度自適應分支缺測(見 P-2) |
|
|
169
|
+
|
|
170
|
+
**誤報事件之根絕**:先前「`assertBaselineMatch` 是 byte-exact 的 `buf.equals()`,專案內完全沒有 pixelmatch」為**誤報**。本專案比對函式實名 `assertOrRegenBaseline`(`test/e2e-setup.mjs:394`),確用 pixelmatch 容差(`:438-439`)。誤報鏈(全域技能 + `CLAUDE.md` 寫死他專案函式名)已由 A-2/A-3 與全域技能修正切斷。
|
|
171
|
+
|
|
172
|
+
## 五、e2e 五維度 rubric 盤查結果 —— **全數通過**
|
|
173
|
+
|
|
174
|
+
> 依全域技能 `role-code-for-test-e2e` 完整度 rubric 逐維度列(硬規則:不得因 case 數對齊就報全覆蓋)。
|
|
175
|
+
|
|
176
|
+
| # | 維度 | 結果 | 佐證 |
|
|
177
|
+
|---|---|---|---|
|
|
178
|
+
| 1 | Case 對齊 | **通過** | spec bullet ≡ `it()`:展示 9/9、編輯 5/5、測試 3/3、統計 3/3、初始語系 3/3 |
|
|
179
|
+
| 2 | Act 真實 | **通過** | 文字輸入走 `typeIntoInput`(Pattern D:click → 驗 `activeElement` → `keyboard.insertText`,`e2e-setup.mjs:306-328`);點擊走 `getByText().click()` / `locator.click()`。全 `test/` grep `.fill(` / `el.value=` / `dispatchEvent` / `vm.` **0 命中** |
|
|
180
|
+
| 3 | Assert 完整 | **通過** | 每 case 皆有語意斷言 + stable 態 pixel baseline;無 baseline 者(display E2E-007/008、init E2E-003)皆 spec 明訂。edit 另補 DB 副作用斷言 |
|
|
181
|
+
| 4 | 多語覆蓋 | **通過** | 各檔 `LANGS=['eng','cht']` 外圈迴圈;display E2E-008 單輪符合 spec(該 case 本身即雙語切換) |
|
|
182
|
+
| 5 | Cleanup 完整 | **通過** | 各檔 `beforeEach resetToBaseSeed()` + `after resetToBaseSeed()`;init/stainfor 另 `restartBackend('./settings.json')` + `fs.rmSync(SYNTH_FD)`。無直跑分支需顯式 cleanup(見 P-4) |
|
|
183
|
+
|
|
184
|
+
**附加項亦通過**:per-case fresh browser(`beforeEach chromium.launch` + `afterEach browser.close`)、端點一律 `127.0.0.1`(`e2e-setup.mjs:26`)、所有 baseline 走 `captureStable*`(無裸 `page.screenshot`)、紅框 `#f26` / 5px(`e2e-setup.mjs:504`)、baseline 命名與 `test/pics/` 實檔一致。
|
|
185
|
+
|
|
186
|
+
**unit / api 測試**:`test/unit-procApis.test.mjs`、`test/api-http.test.mjs`、`server/staLogs/test_staEvent.mjs` 之斷言均為 spec 契約之翻譯,**無 false-green、無「現狀指紋」式 `buf.equals` 斷言**。
|
|
187
|
+
|
|
188
|
+
## 六、已判定為設計取捨(不列待修,已寫入 ADR)
|
|
189
|
+
|
|
190
|
+
以下項經三條件檢驗屬**刻意取捨**,已寫入 [`spec/設計要點與取捨.md`](spec/設計要點與取捨.md):
|
|
191
|
+
|
|
192
|
+
| ADR | 內容 |
|
|
193
|
+
|---|---|
|
|
194
|
+
| ADR-023 | `test_staEvent.mjs` 置 `server/staLogs/`、`test_` 前綴、node assert(避開 mocha 預設 glob;與被測模組同置) |
|
|
195
|
+
| ADR-024 | mocha 預設 glob 載入 `test/e2e-setup.mjs`(0 test、benign,且正是 root teardown 註冊點) |
|
|
196
|
+
| ADR-025 | `procProxy` / `procLang` 不另建 unit,由 e2e 整合覆蓋主路徑;`errProxyRequestFailed`、`errReqTargetNotAllowed`(不可達)刻意不測 |
|
|
197
|
+
| ADR-026 | `provideTabs` / `filePathToCode` 不建測試(範例 scaffolding 與 trivial helper) |
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 七、凍結區(**本次不執行**)
|
|
202
|
+
|
|
203
|
+
| 項目 | 狀態 |
|
|
204
|
+
|---|---|
|
|
205
|
+
| `test/e2e-setup.mjs` 之比對實作、參數預設值、`includeAA:false` | 不動(現況正確) |
|
|
206
|
+
| `test/e2e-setup.mjs:282` / `:344` 之精確相等(settle 偵測) | 不動(刻意如此,勿改為容差) |
|
|
207
|
+
| ADR-009(`spec/設計要點與取捨.md`) | 不動(內容完整且函式名正確) |
|
|
208
|
+
| 已一致之四份流程文件(展示API文件 / 測試API / 編輯API + `CLAUDE.md:115`) | 不動 |
|
|
209
|
+
| baseline 圖檔 / 標準圖重產 | 不動(除非取得 P-1 授權) |
|
|
210
|
+
| 前端重複樣板重構 | **業主已指示重構凍結** |
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 八、建議處理順序
|
|
215
|
+
|
|
216
|
+
| 序 | 項目 | 需授權? | 風險 |
|
|
217
|
+
|---|---|---|---|
|
|
218
|
+
| 1 | **P-1** cht baseline 手術式重產 | ✅ **須業主授權** | 中(凍結規格) |
|
|
219
|
+
| 2 | **P-2** `filterVpfsByWindow` 粒度自適應補 unit | 否 | 極低 |
|
|
220
|
+
| 3 | **P-4** `CLAUDE.md` lifecycle 段更正(消除假安全感) | 否 | 0(doc) |
|
|
221
|
+
| 4 | **P-6** `e2e-display` 三處註解 doc rot | 否 | 0(註解) |
|
|
222
|
+
| 5 | **P-5** 兩份 spec trace 補行號與深度 | 否 | 0(doc) |
|
|
223
|
+
| 6 | **P-7** 更正本規劃書自身之驗收條件與 B-1 程式碼範例 | 否 | 0(doc) |
|
|
224
|
+
| 7 | **P-3** spec 補重要流程 bullet(或明示取捨) | 建議先確認方向 | 低~中 |
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 九、驗收方式
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
cd C:\opensrc\w-web-api
|
|
232
|
+
|
|
233
|
+
# P-2 之後
|
|
234
|
+
node server/staLogs/test_staEvent.mjs # 或新 unit 檔
|
|
235
|
+
node --check server/staLogs/filterVpfsByWindow.mjs
|
|
236
|
+
|
|
237
|
+
# P-4 / P-5 / P-6 / P-7 為 doc-only,目視 + grep 驗證即可
|
|
238
|
+
grep -rn "generateBaseline\|deleteTestUsersAndTokens" CLAUDE.md # 應為 0
|
|
239
|
+
grep -c "共用 E2E-001 baseline" test/e2e-display.test.mjs # 應為 0
|
|
240
|
+
|
|
241
|
+
# P-1 授權後
|
|
242
|
+
E2E_REGEN=1 npx mocha test/e2e-<flow>.test.mjs --reporter list # 僅重產 cht
|
|
243
|
+
npx mocha test/e2e-*.test.mjs --reporter list # 應全綠
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
> **基準線**: 目前 `unit + api` 層 10 passing / 0 failing;`e2e` 層 26 passing / **19 failing**(全為 cht,根因見 P-1)。
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
name: Node.js CI
|
|
2
|
-
|
|
3
|
-
on: [push]
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
build:
|
|
7
|
-
|
|
8
|
-
runs-on: ubuntu-latest
|
|
9
|
-
|
|
10
|
-
strategy:
|
|
11
|
-
matrix:
|
|
12
|
-
node-version: [22.x]
|
|
13
|
-
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
- name: Use Node.js ${{ matrix.node-version }}
|
|
17
|
-
uses: actions/setup-node@v1
|
|
18
|
-
with:
|
|
19
|
-
node-version: ${{ matrix.node-version }}
|
|
20
|
-
- run: npm cache clean -f
|
|
21
|
-
- run: npm install
|
|
22
|
-
- run: npm test
|
|
23
|
-
env:
|
|
24
|
-
CI: true
|
package/.vscode/launch.json
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
// 使用 IntelliSense 以得知可用的屬性。
|
|
3
|
-
// 暫留以檢視現有屬性的描述。
|
|
4
|
-
// 如需詳細資訊,請瀏覽: https://go.microsoft.com/fwlink/?linkid=830387
|
|
5
|
-
"version": "0.2.0",
|
|
6
|
-
"configurations": [
|
|
7
|
-
{
|
|
8
|
-
"type": "node",
|
|
9
|
-
"request": "launch",
|
|
10
|
-
"name": "啟動程式",
|
|
11
|
-
"skipFiles": [
|
|
12
|
-
"<node_internals>/**"
|
|
13
|
-
],
|
|
14
|
-
"program": "${workspaceFolder}/srv.mjs",
|
|
15
|
-
"runtimeArgs": []
|
|
16
|
-
}
|
|
17
|
-
]
|
|
18
|
-
}
|
package/db/wapis/apis/data.mdb
DELETED
|
Binary file
|
package/db/wapis/apis/lock.mdb
DELETED
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.pgc-rotate[data-v-5b4e8bee]{width:100%;height:100%;margin:auto;position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;-webkit-transition:all .6s ease-in-out;transition:all .6s ease-in-out;-webkit-animation:progress-circular-rotate-5b4e8bee 1.4s linear infinite;animation:progress-circular-rotate-5b4e8bee 1.4s linear infinite;-webkit-transform-origin:center center;transform-origin:center center}.pgc-dash[data-v-5b4e8bee]{-webkit-animation:progress-circular-dash-5b4e8bee 1.4s ease-in-out infinite;animation:progress-circular-dash-5b4e8bee 1.4s ease-in-out infinite;stroke-linecap:round;stroke-dasharray:80,200;stroke-dashoffset:0px}@-webkit-keyframes progress-circular-dash-5b4e8bee{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-124px}}@keyframes progress-circular-dash-5b4e8bee{0%{stroke-dasharray:1,200;stroke-dashoffset:0px}50%{stroke-dasharray:100,200;stroke-dashoffset:-15px}to{stroke-dasharray:100,200;stroke-dashoffset:-124px}}@-webkit-keyframes progress-circular-rotate-5b4e8bee{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes progress-circular-rotate-5b4e8bee{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.WPopperFix[data-popper-reference-hidden][data-v-14d6bcb4]{visibility:hidden;pointer-events:none}.sb[data-v-6ce5bdb1]{-webkit-transition:opacity .3s;transition:opacity .3s;scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.3) transparent}.sb[data-v-6ce5bdb1]::-webkit-scrollbar{width:8px;height:8px}.sb[data-v-6ce5bdb1]::-webkit-scrollbar-track{background:transparent}.sb[data-v-6ce5bdb1]::-webkit-scrollbar-thumb{background:rgba(0,0,0,.3);border-radius:20px;border:3px solid transparent}.ts[data-v-9a483320]{-webkit-transition:all .3s cubic-bezier(.25,.8,.5,1);transition:all .3s cubic-bezier(.25,.8,.5,1)}.bs[data-v-9a483320]{-webkit-box-shadow:0 8px 2px -8px rgba(0,0,0,.3),0 16px 24px 2px rgba(0,0,0,.3),0 6px 30px 5px rgba(0,0,0,.3);box-shadow:0 8px 2px -8px rgba(0,0,0,.3),0 16px 24px 2px rgba(0,0,0,.3),0 6px 30px 5px rgba(0,0,0,.3)}.fade-enter-active[data-v-a0c94508],.fade-leave-active[data-v-a0c94508]{-webkit-transition:all .3s;transition:all .3s}.fade-enter[data-v-a0c94508],.fade-leave-to[data-v-a0c94508]{-webkit-transform:scaleX(0);transform:scaleX(0)}.fade-enter-to[data-v-a0c94508],.fade-leave[data-v-a0c94508]{-webkit-transform:scaleX(100%);transform:scaleX(100%)}.caretRight[data-v-26dfca3e]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block}.cc[data-v-26dfca3e]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.circle[data-v-26dfca3e]{width:22px;height:22px;min-width:22px;min-height:22px;max-width:22px;max-height:22px;border-radius:50%}.md[data-v-1a0f86f5] table{border-collapse:collapse;margin:0;padding:0;word-break:normal}.md[data-v-1a0f86f5] tr{margin:0;padding:0}.md[data-v-1a0f86f5] table tr th{font-weight:700;background:#eee;border:1px solid #ddd;border-bottom:0;margin:0;padding:6px 13px}.md[data-v-1a0f86f5] table tr td{border:1px solid #ddd;margin:0;padding:6px 13px}.md[data-v-1a0f86f5] h1{font-size:1.2rem;line-height:1.2rem}.md[data-v-1a0f86f5] h1,.md[data-v-1a0f86f5] h2{font-weight:700;margin-top:.5rem;margin-bottom:.5rem}.md[data-v-1a0f86f5] h2{font-size:1.1rem;line-height:1.1rem}.md[data-v-1a0f86f5] h3,.md[data-v-1a0f86f5] h4,.md[data-v-1a0f86f5] h5,.md[data-v-1a0f86f5] h6{font-weight:700;font-size:1rem;line-height:1rem;margin-top:.5rem;margin-bottom:.5rem}.bk[data-v-56f2385e]{display:inline-block;width:200px;padding:0 10px 10px 0;vertical-align:top}.bk-title[data-v-56f2385e]{padding:3px;font-size:.8rem;color:#888}.bk-item[data-v-56f2385e]{padding:3px 5px;font-size:.9rem;line-height:.9rem;border-radius:5px;border:1px solid #ddd;background:#fff}body,html{font-family:微軟正黑體,Microsoft JhengHei,MicrosoftJhengHeiRegular,Avenir,Helvetica,Arial,sans-serif;overflow-y:hidden}a,button,div,input,p,pre,span,textarea{font-family:inherit}.fade-enter-active{-webkit-animation:go 1s;animation:go 1s}.fade-leave-active{-webkit-animation:back 1s;animation:back 1s}@-webkit-keyframes go{0%{opacity:0}to{opacity:1}}@keyframes go{0%{opacity:0}to{opacity:1}}@-webkit-keyframes back{0%{opacity:1}to{opacity:0}}@keyframes back{0%{opacity:1}to{opacity:0}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){var t={4621:function(t,e,n){"use strict";var a={};n.r(a),n.d(a,{UpdateConnState:function(){return vt},UpdateData:function(){return St},UpdateHeightApp:function(){return Ct},UpdateHeightAppEff:function(){return bt},UpdateHeightToolbar:function(){return Tt},UpdateKpText:function(){return ht},UpdateLang:function(){return At},UpdateLoading:function(){return yt},UpdateMenu:function(){return Et},UpdateSyncState:function(){return It},UpdateTableData:function(){return wt},UpdateUserSelf:function(){return Gt},UpdateUserToken:function(){return kt},UpdateWebInfor:function(){return gt}});var i={};n.r(i);var r={};n.r(r);var o={};n.r(o),n.d(o,{at:function(){return Ge.Z}});var p=n(6423),s=n(144),d=n(3286),c=n(9096),l=n(5877),m=n(234),u=n(5708),f=function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"domresize",rawName:"v-domresize"}],on:{domresize:t.resize}},[t.ready?t._e():e("LayoutState",{style:"opacity:".concat(t.ready?0:1,";")}),e("transition",{attrs:{"enter-active-class":"fade-enter-active","leave-active-class":"fade-leave-active"}},[t.ready?e("Layout"):t._e()],1)],1)},g=[],A=n(8652),h=n(8258),v=n(5216),I=n(282),y=n(9902),w=function(){var t=this,e=t._self._c;return e("div",{staticStyle:{height:"100svh",background:"#f5f5f5"}},[e("div",{style:"height:".concat(t.heightToolbar,"px; overflow-y:hidden; padding:0px 10px; background:#fff; border-bottom:1px solid #ccc; display:flex; align-items:center;")},[t._e(),e("div",{staticStyle:{"padding-left":"5px","white-space":"nowrap"}},[e("div",{staticStyle:{display:"flex","align-items":"center"}},[t.webLogo?e("div",{staticStyle:{"padding-right":"10px",display:"flex","align-items":"center"}},[e("img",{staticStyle:{width:"36px","_min-width":"36px",height:"36px"},attrs:{src:t.webLogo}})]):t._e(),e("div",[e("div",{staticStyle:{"font-size":"1.2rem",color:"#000"}},[t._v(t._s(t.webName))]),e("div",{staticStyle:{"font-size":"0.8rem",color:"#666"}},[t._v(t._s(t.$t("webDescription")))])])])]),e("div",{staticStyle:{width:"100%"}}),t.showLangSelect?e("div",{staticStyle:{"padding-right":"10px","white-space":"nowrap"}},[e("WTextSelect",{staticStyle:{width:"100px"},attrs:{items:t.keysLang,value:t.lang},on:{input:t.toggleLang},scopedSlots:t._u([{key:"select",fn:function(e){return[t._v(" "+t._s(t.getLangText(e.item))+" ")]}},{key:"item",fn:function(e){return[t._v(" "+t._s(t.getLangText(e.item))+" ")]}}],null,!1,2218956916)})],1):t._e()],1),e("div",{style:"height:calc( 100% - ".concat(t.heightToolbar,"px );")},[e("LayoutContent")],1)])},S=[],C=n(9820),b=n(9947),T=function(){var t=this,e=t._self._c;return e("div",{directives:[{name:"domresize",rawName:"v-domresize"}],staticStyle:{height:"100%",width:"100%"},attrs:{changeApis:t.changeApis},on:{domresize:t.resize}},[t.syncState?[e("WDrawer",{style:"height:".concat(t.panelHeight,"px; width:100%;"),attrs:{drawerWidth:t.drawerWidth,drawerWidthMin:t.drawerWidthMin,drawerWidthMax:t.drawerWidthMax,mode:"from-left",dragDrawerWidth:!0,autoSwitchToHide:!0,autoSwitchToShow:!0,autoSwitchToFloat:!0,switchWidth:2.3*t.drawerWidth},on:{"update:drawerWidth":function(e){t.drawerWidth=e},"update:drawer-width":function(e){t.drawerWidth=e}},scopedSlots:t._u([{key:"drawer",fn:function(n){return[e("div",{style:"height:".concat(n.height,"px; background:#fff; position:relative;")},[t.apisTree.length>0?[e("WTree",{style:"height:".concat(n.height,"px;"),attrs:{viewHeightMax:n.height,data:t.apisTree,iconHeight:t.lineHeightTree,defItemHeight:t.lineHeightTree,activable:!0,itemActive:t.apiActive,funActive:t.funActive,itemTextColorActive:"#000",itemBackgroundColorActive:"rgba(100,100,100,0.15)"},scopedSlots:t._u([{key:"item",fn:function(n){return["node"!==n.data.type?e("div",{style:"display:flex; align-items:center; min-height:".concat(t.lineHeightTree,"px;")},[t._v(" "+t._s(n.data.key)+" ")]):e("div",{style:"display:flex; align-items:center; min-height:".concat(t.lineHeightTree,"px; cursor:pointer;"),on:{click:function(e){t.ckItem(t.getItemByKey(n.data.text))}}},[e("div",{staticStyle:{"padding-right":"5px"}},[e("div",{style:"padding:0px 6px; font-size:0.7rem; border-radius:10px; border:1px solid #ddd; color:#fff; background:".concat(t.getMethodColorByKey(n.data.text),";")},[t._v(" "+t._s(t.getMethodByKey(n.data.text))+" ")])]),e("div",[t._v(" "+t._s(t.$ui.gv(t.getItemByKey(n.data.text),"name"))+" ")])])]}}],null,!0)})]:e("div",{staticStyle:{padding:"20px","font-size":"0.9rem"}},[t._v(" "+t._s(t.$t("waitingData"))+" ")]),t.drawer?e("div",{style:"position:absolute; top:1px; right:12px;"},[e("WButtonCircle",{attrs:{paddingStyle:{v:3,h:3},icon:"mdi-arrow-left",iconSize:16,backgroundColor:"#fff",backgroundColorHover:"#eee",backgroundColorFocus:"#fff",borderColor:"transparent",borderColorHover:"#eee",borderColorFocus:"#eee",tooltip:t.$t("menuTreeHide"),shadow:!0},on:{click:function(e){t.drawer=!1}}})],1):t._e()],2)]}},{key:"content",fn:function(n){return[e("div",{style:"height:".concat(n.height,"px; width:").concat(n.width,"px; position:relative;")},[[t.apiSelect?e("div",{style:"height:".concat(n.height,"px; overflow-y:auto;")},[e("div",{staticStyle:{padding:"20px"}},[e("div",{staticStyle:{padding:"5px"}},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("apiUrl"))+" ")]),e("div",{staticStyle:{padding:"10px","border-radius":"5px",border:"1px solid #ddd",background:"#fff",display:"flex","align-items":"center"}},[e("div",{staticStyle:{"padding-right":"5px"}},[e("div",{style:"padding:0px 6px; font-size:0.7rem; border-radius:10px; border:1px solid #ddd; color:#fff; background:".concat(t.getMethodColor(t.apiSelect),";")},[t._v(" "+t._s(t.getMethod(t.apiSelect))+" ")])]),e("div",{staticStyle:{"font-size":"0.8rem"}},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"url"))+" ")])])]),e("div",{staticStyle:{padding:"10px"}},[e("div",{staticStyle:{color:"#485ed5"}},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"name"))+" ")]),e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"description"))+" ")])]),e("div",{staticStyle:{padding:"10px"}},[e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("tokens"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"tokens"))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("version"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"version"))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("levels"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,""))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("keywords"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,""))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("state"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,""))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("timeCreate"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"timeCreate",t.getDay))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("timeUpdate"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"timeUpdate",t.getDay))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("creator"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"creator"))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("dataSource"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"dataSource"))+" ")])]),e("div",{staticClass:"bk"},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("isActive"))+" ")]),e("div",{staticClass:"bk-item"},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"isActive"))+" ")])])]),e("div",{staticStyle:{padding:"10px"}},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("mdInputParams"))+" ")]),e("div",{staticClass:"bk-item",staticStyle:{padding:"10px"}},[e("MdPanel",{attrs:{md:t.$ui.gv(t.apiSelect,"mdInputParams")}})],1)]),e("div",{staticStyle:{padding:"10px"}},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("inputExample"))+" ")]),e("div",{staticClass:"bk-item",staticStyle:{padding:"10px"}},[t._v(" "+t._s(t.$ui.gv(t.apiSelect,"inputExample"))+" ")])]),e("div",{staticStyle:{padding:"10px"}},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("mdOutputParams"))+" ")]),e("div",{staticClass:"bk-item",staticStyle:{padding:"10px"}},[e("MdPanel",{attrs:{md:t.$ui.gv(t.apiSelect,"mdOutputParams")}})],1)]),e("div",{staticStyle:{padding:"10px"}},[e("div",{staticClass:"bk-title"},[t._v(" "+t._s(t.$t("outputExample"))+" ")]),e("div",{staticStyle:{"padding-top":"3px"}},[e("div",{staticStyle:{"padding-left":"10px","margin-bottom":"-1px"}},[e("WGroupChipRadio",{attrs:{items:t.optputMenuItems,value:t.optputMenuItemSelect,group:!0,"group-border-radius-style":{top:!0},"group-shift":7,"border-radius":20,"border-color":"#ddd","border-color-hover":"#dadada","border-color-active":"orange lighten-2","margin-style":{}},on:{input:t.changeOptputMenuItemSelect}})],1),e("div",{staticStyle:{border:"1px solid #ddd",background:"#fff"}},["tree"===t.optputMenuItemSelectId?e("div",{staticStyle:{padding:"10px 15px"}},[e("WJsonView",{staticStyle:{width:"100%"},attrs:{viewHeightMax:null,data:t.getOutputJsonObj(t.apiSelect)}})],1):t._e(),"raw"===t.optputMenuItemSelectId?e("div",{staticStyle:{padding:"15px",color:"#555","font-size":"0.85rem"}},[e("pre",{staticStyle:{margin:"0px",padding:"0px"}},[t._v(t._s(t.getOutputJson(t.apiSelect)))])]):t._e()])])])])]):e("div",{staticStyle:{padding:"20px","font-size":"0.9rem"}},[t._v(" "+t._s(t.$t("noSelectApi"))+" ")])],t.drawer?t._e():e("div",{style:"position:absolute; top:1px; left:4px;"},[e("WButtonCircle",{attrs:{paddingStyle:{v:3,h:3},icon:"mdi-arrow-right",iconSize:16,backgroundColor:"#fff",backgroundColorHover:"#eee",backgroundColorFocus:"#fff",borderColor:"transparent",borderColorHover:"#eee",borderColorFocus:"#eee",tooltip:t.$t("menuTreeShow"),shadow:!0},on:{click:function(e){t.drawer=!0}}})],1)],2)]}}],null,!1,206236260),model:{value:t.drawer,callback:function(e){t.drawer=e},expression:"drawer"}})]:[e("div",{staticStyle:{padding:"20px","font-size":"0.9rem"}},[t._v(" "+t._s(t.$t("waitingData"))+" ")])]],2)},E=[],k=n(560),G=n(878),N=n(8309),B=n(6991),x=n(8656),R=n(1988),P=n(3320),Z=n(4649),O=n(338),D=n(5005),M=n(4143),j=n(1702),L=n(2994),U=function(){var t=this,e=t._self._c;return e("div",[e("div",{staticClass:"md",domProps:{innerHTML:t._s(t.mdh)}})])},z=[],H=n(3787),Y=n.n(H),W={components:{},props:{md:{type:String,default:""}},data:function(){return{}},computed:{mdh:function(){var t=this,e=new(Y().Converter);e.setOption("tables",!0);var n=e.makeHtml(t.md);return n}},methods:{}},Q=W,F=n(1001),V=(0,F.Z)(Q,U,z,!1,null,"1a0f86f5",null),X=V.exports,K={components:{WButtonCircle:C.Z,WGroupChipRadio:D.Z,WDrawer:M.Z,WTree:j.Z,WJsonView:L.Z,MdPanel:X},props:{},data:function(){return{panelWidth:0,panelHeight:0,drawer:!0,drawerWidth:320,drawerWidthMin:200,drawerWidthMax:700,lineHeightTree:38,apisTree:[],kpApisTree:{},apiActive:null,apiSelect:null,kpColorMethod:{GET:"#7c2",POST:"#68f",PUT:"#f82",DEL:"#f26"},optputMenuItemSelectId:"tree"}},computed:{syncState:function(){return(0,p.Z)(this,"$store.state.syncState")},apis:function(){return(0,p.Z)(this,"$store.state.apis")},changeApis:function(){var t=this,e=t.apis;return t.genTree(e),""},optputMenuItems:function(){var t=this,e=[{id:"tree",text:t.$t("outputMenuTree"),icon:"mdi-vanity-light"},{id:"raw",text:t.$t("outputMenuRaw"),icon:"mdi-lan"}];return e},optputMenuItemSelect:function(){var t=this,e=(0,x.Z)(t.optputMenuItems,{id:t.optputMenuItemSelectId});return e}},methods:{resize:function(t){var e=this;e.panelWidth=t.snew.clientWidth,e.panelHeight=t.snew.clientHeight},genTree:function(){var t=this;if(t.apiActive=null,t.apiSelect=null,t.apisTree=[],t.kpApisTree={},0!==(0,N.Z)(t.apis)){var e=(0,A.Z)(t.apis),n={},a={};(0,G.Z)(e,(function(t){var e=t.id,i="".concat(t.levels,".").concat(t.name);a[e]=t,(0,R.Z)((0,p.Z)(n,i))||(0,k.Z)(n,i,e)}));var i=(0,O.Z)(n,{bindRoot:"全部"}),r=(0,p.Z)(e,0,null);t.apiSelect=r,t.apisTree=i,t.kpApisTree=a}},getItemByKey:function(t){var e=this,n=e.kpApisTree[t];return n},getMethod:function(t){var e=(0,p.Z)(t,"method","").toUpperCase();return e},getMethodByKey:function(t){var e=this,n=e.getItemByKey(t),a=(0,p.Z)(n,"method","").toUpperCase();return a},getMethodColor:function(t){var e=this,n=e.getMethod(t),a=(0,p.Z)(e.kpColorMethod,n,"#888");return a},getMethodColorByKey:function(t){var e=this,n=e.getMethodByKey(t),a=(0,p.Z)(e.kpColorMethod,n,"#888");return a},getDay:function(t){return(0,Z.Z)(t)},getOutputJson:function(t){var e=(0,p.Z)(t,"outputExample","");return e=(0,B.Z)(e),e},getOutputJsonObj:function(t){var e=this.getOutputJson(t),n=(0,P.Z)(e);return n},funActive:function(t){var e=this,n=!Array.isArray(t.item.children);if(n&&!(0,v.Z)(e.apiActive)){var a=t.item.id;e.apiActive={id:a}}return n},changeOptputMenuItemSelect:function(t){var e=this;e.optputMenuItemSelectId=t.id},ckItem:function(t){var e=this;e.apiSelect=(0,A.Z)(t)}}},J=K,q=(0,F.Z)(J,T,E,!1,null,"56f2385e",null),_=q.exports,$={components:{WButtonCircle:C.Z,WTextSelect:b.Z,LayoutContent:_},props:{},data:function(){return{drawer:!1,firstSetting:!0,showLangSelect:!1,keysLang:["eng","cht"],kpLangSelect:{eng:"English",cht:"中文"}}},mounted:function(){var t=this;if(t.firstSetting){var e=(0,p.Z)(t,"webInfor.showLanguage","");t.showLangSelect="y"===e;var n=(0,p.Z)(t,"webInfor.language","");t.$ui.setLang(n,"layout mounted"),t.firstSetting=!1}},computed:{viewState:function(){return(0,p.Z)(this,"$store.state.viewState","")},heightToolbar:function(){var t=this;return(0,p.Z)(t,"$store.state.heightToolbar",0)},userToken:function(){var t=this;return(0,p.Z)(t,"$store.state.userToken")},lang:function(){var t=this;return(0,p.Z)(t,"$store.state.lang","")},webInfor:function(){var t=(0,p.Z)(this,"$store.state.webInfor");return t},webName:{get:function(){var t=this,e=t.$t("webName");return(0,h.Z)(e)||(e=t.$t("waitingData")),document.title=e,e}},webLogo:function(){var t=this;return(0,p.Z)(t,"$store.state.webInfor.webLogo","")},userSelf:function(){var t=this;return(0,p.Z)(t,"$store.state.userSelf","")},userName:function(){var t=this;return(0,p.Z)(t,"userSelf.name","")}},methods:{getLangText:function(t){var e=this,n=(0,p.Z)(e,"kpLangSelect.".concat(t),"");return n},toggleLang:function(t){var e=this;e.$ui.setLang(t,"toggle")}}},tt=$,et=(0,F.Z)(tt,w,S,!1,null,"57695a2c",null),nt=et.exports,at=function(){var t=this,e=t._self._c;return e("div",{style:"position:absolute; top:0px; left:0px; width:100%; height:100%; transition:all 0.5s linear; display:flex; align-items:center; justify-content:center;"},["csIng"===t.connState?[e("img",{staticStyle:{width:"100px",height:"100px"},attrs:{src:t.img_connection}}),e("div",{staticStyle:{"margin-left":"10px"}},[e("div",{staticStyle:{color:"#aaa"}},[t._v(" "+t._s(t.$t("csIng"))+" ")])])]:"csLogin"===t.connState?[e("img",{staticStyle:{width:"100px",height:"100px"},attrs:{src:t.img_connection}}),e("div",{staticStyle:{"margin-left":"10px"}},[e("div",{staticStyle:{color:"#aaa"}},[t._v(" "+t._s(t.$t("csLogin"))+" ")])])]:"csLogout"===t.connState?[e("img",{staticStyle:{width:"75px",height:"75px"},attrs:{src:t.img_logout}}),e("div",{staticStyle:{"margin-left":"10px"}},[e("div",{staticStyle:{color:"#aaa"}},[t._v(" "+t._s(t.$t("csLogout"))+" ")])])]:"csErrConn"===t.connState?[e("img",{staticStyle:{width:"75px",height:"75px"},attrs:{src:t.img_dissconnection}}),e("div",{staticStyle:{"margin-left":"10px"}},[e("div",{staticStyle:{color:"#aaa"}},[t._v(" "+t._s(t.$t("csErrConn"))+" ")])])]:[e("img",{staticStyle:{width:"75px",height:"75px"},attrs:{src:t.img_deny}}),e("div",{staticStyle:{"margin-left":"10px"}},[e("div",{staticStyle:{color:"#aaa"}},[t._v(" "+t._s(t.$t("csErrLogin"))+" ")])])]],2)},it=[],rt={components:{},props:{},data:function(){return{img_connection:"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTAwcHgiIGhlaWdodD0iMTAwcHgiIHZpZXdCb3g9IjAgMCAxMDAgMTAwIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+DQo8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSIxMy44MTkzIiBmaWxsPSJub25lIiBzdHJva2U9IiM1ZjJhNjIiIHN0cm9rZS13aWR0aD0iMiI+DQogIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InIiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuMjY1ODIyNzg0ODEwMTI2NHMiIHZhbHVlcz0iMDs0NCIga2V5VGltZXM9IjA7MSIga2V5U3BsaW5lcz0iMCAwLjIgMC44IDEiIGNhbGNNb2RlPSJzcGxpbmUiIGJlZ2luPSItMC42MzI5MTEzOTI0MDUwNjMycyI+PC9hbmltYXRlPg0KICA8YW5pbWF0ZSBhdHRyaWJ1dGVOYW1lPSJvcGFjaXR5IiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxLjI2NTgyMjc4NDgxMDEyNjRzIiB2YWx1ZXM9IjE7MCIga2V5VGltZXM9IjA7MSIga2V5U3BsaW5lcz0iMC4yIDAgMC44IDEiIGNhbGNNb2RlPSJzcGxpbmUiIGJlZ2luPSItMC42MzI5MTEzOTI0MDUwNjMycyI+PC9hbmltYXRlPg0KPC9jaXJjbGU+DQo8Y2lyY2xlIGN4PSI1MCIgY3k9IjUwIiByPSIzNS44MTY1IiBmaWxsPSJub25lIiBzdHJva2U9IiNhOTc2YzMiIHN0cm9rZS13aWR0aD0iMiI+DQogIDxhbmltYXRlIGF0dHJpYnV0ZU5hbWU9InIiIHJlcGVhdENvdW50PSJpbmRlZmluaXRlIiBkdXI9IjEuMjY1ODIyNzg0ODEwMTI2NHMiIHZhbHVlcz0iMDs0NCIga2V5VGltZXM9IjA7MSIga2V5U3BsaW5lcz0iMCAwLjIgMC44IDEiIGNhbGNNb2RlPSJzcGxpbmUiPjwvYW5pbWF0ZT4NCiAgPGFuaW1hdGUgYXR0cmlidXRlTmFtZT0ib3BhY2l0eSIgcmVwZWF0Q291bnQ9ImluZGVmaW5pdGUiIGR1cj0iMS4yNjU4MjI3ODQ4MTAxMjY0cyIgdmFsdWVzPSIxOzAiIGtleVRpbWVzPSIwOzEiIGtleVNwbGluZXM9IjAuMiAwIDAuOCAxIiBjYWxjTW9kZT0ic3BsaW5lIj48L2FuaW1hdGU+DQo8L2NpcmNsZT4NCjwvc3ZnPg==",img_logout:"data:image/png;base64,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",img_dissconnection:"data:image/png;base64,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",img_deny:"data:image/png;base64,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"}},computed:{connState:function(){var t=this;return(0,p.Z)(t,"$store.state.connState")}},methods:{}},ot=rt,pt=(0,F.Z)(ot,at,it,!1,null,"7f6340a0",null),st=pt.exports,dt={components:{Layout:nt,LayoutState:st},data:function(){return{ll:null}},beforeMount:function(){var t=this;t.$ui.setVo(t);var e=(0,p.Z)(window,"___pmwperm___.language","");function n(e){console.log("login success",(0,A.Z)(e.user)),t.$ui.updateConnState("csLogin"),t.$ui.updateUserToken(e.token),t.$ui.updateUserSelf(e.user)}function a(e){console.log("login error",(0,A.Z)(e)),t.$ui.updateConnState("csErrLogin"),t.$ui.updateUserToken("");var n=(0,p.Z)(window,"___pmwapi___.urlRedirect","");if(!(0,h.Z)(n))throw console.log("urlRedirect",n),new Error("invalid urlRedirect");(0,I.Z)()?(console.log("60s redirect to:",n),setTimeout((function(){window.location.href=n}),6e4)):window.location.href=n}t.$ui.setLang(e,"app init"),console.log("login...");var i=(0,y.Z)("wapi",{timeWaitAnimation:2e3,params:{}});i.login({afterGetUser:null,afterLogin:null,loginSuccess:n,loginError:a}),t.ll=i},computed:{ready:function(){var t=this,e=(0,p.Z)(t,"$store.state.connState"),n=(0,p.Z)(t,"$store.state.webInfor"),a="csLogin"===e,i=(0,v.Z)(n),r=a&&i;return r}},methods:{resize:function(t){var e=this;e.$ui.syncHeight()}}},ct=dt,lt=(0,F.Z)(ct,f,g,!1,null,null,null),mt=lt.exports,ut=n(629),ft=n(1180),gt="UpdateWebInfor",At="UpdateLang",ht="UpdateKpText",vt="UpdateConnState",It="UpdateSyncState",yt="UpdateLoading",wt="UpdateTableData",St="UpdateData",Ct="UpdateHeightApp",bt="UpdateHeightAppEff",Tt="UpdateHeightToolbar",Et="UpdateMenu",kt="UpdateUserToken",Gt="UpdateUserSelf",Nt=n(3836),Bt=n(7179),xt=n(4054),Rt=n(9881),Pt=n(7741),Zt=n(9991);function Ot(t){return t.indexOf("\\\\")>=0?"```"+t+"```":t}var Dt=Ot;function Mt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function jt(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?Mt(Object(n),!0).forEach((function(e){(0,ft.Z)(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Mt(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}var Lt="apis",Ut="APIs",zt="APIs",Ht={id:{pk:!0,name:"主鍵",type:"STRING"},order:{name:"順序",type:"INTEGER"},name:{name:"名稱",type:"STRING"},description:{name:"說明",type:"TEXT"},url:{name:"網址",type:"STRING"},method:{name:"方法",type:"STRING"},version:{name:"版本",type:"STRING"},group:{name:"群組",type:"STRING"},levels:{name:"階層群組",type:"STRING"},keywords:{name:"關鍵字",type:"STRING"},state:{name:"狀態",type:"STRING"},creator:{name:"創建者",type:"STRING"},dataSource:{name:"資料提供者",type:"STRING"},tokens:{name:"金鑰",type:"TEXT"},mdInputParams:{name:"輸入參數md說明",type:"STRING"},inputExample:{name:"輸入範例",type:"STRING"},mdOutputParams:{name:"輸出資料md說明",type:"STRING"},outputExample:{name:"輸出範例",type:"STRING"},timeCreate:{name:"創建時間",type:"STRING"},timeUpdate:{name:"更新時間",type:"STRING"},isActive:{name:"是否有效",type:"STRING"}},Yt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=(0,Rt.Z)(t,(0,Bt.Z)(Ht));return e.id="".concat((0,xt.Z)()),e.timeCreate=(0,Zt.Z)(),e.timeUpdate=e.timeCreate,e.isActive="y",e},Wt=function(){var t=(0,Nt.Z)([{id:"id-for-apis-sys-1",name:"取得API清單",description:"API管理中心取得API清單資訊",url:"http://localhost:11005/getAPIsList",method:"get",version:"v1",group:"全部",levels:"API",keywords:"API;center",state:"ok",creator:"apis-system",dataSource:"apis-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-1",name:"取得寵物清單",description:"寵物管理中心取得寵物清單資訊",url:"http://localhost:11005/getPetsList",method:"get",version:"v1",group:"寵物",levels:"寵物",keywords:"pets",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-dogs-1",name:"取得狗狗清單",description:"取得狗狗清單資訊",url:"http://localhost:11005/getDogsList",method:"get",version:"v1",group:"寵物",levels:"寵物.狗狗",keywords:"pets;dogs",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-dogs-2",name:"新增狗狗資訊",description:"新增狗狗資訊",url:"http://localhost:11005/addDog",method:"post",version:"v1",group:"寵物",levels:"寵物.狗狗",keywords:"pets;dogs",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### POST參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-dogs-3",name:"變更狗狗資訊",description:"變更狗狗資訊",url:"http://localhost:11005/updateDog",method:"put",version:"v1",group:"寵物",levels:"寵物.狗狗",keywords:"pets;dogs",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-dogs-4",name:"刪除狗狗資訊",description:"刪除狗狗資訊",url:"http://localhost:11005/deleteDog",method:"del",version:"v1",group:"寵物",levels:"寵物.狗狗",keywords:"pets;dogs",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-cats-1",name:"取得貓咪清單",description:"取得貓咪清單資訊",url:"http://localhost:11005/getCatsList",method:"get",version:"v1",group:"寵物",levels:"寵物.貓咪",keywords:"pets;cats",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-cats-2",name:"新增貓咪資訊",description:"新增貓咪資訊",url:"http://localhost:11005/addCat",method:"post",version:"v1",group:"寵物",levels:"寵物.貓咪",keywords:"pets;cats",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### POST參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-cats-3",name:"變更貓咪資訊",description:"變更貓咪資訊",url:"http://localhost:11005/updateCat",method:"put",version:"v1",group:"寵物",levels:"寵物.貓咪",keywords:"pets;cats",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-pets-cats-4",name:"刪除貓咪資訊",description:"刪除貓咪資訊",url:"http://localhost:11005/deleteCat",method:"del",version:"v1",group:"寵物",levels:"寵物.貓咪",keywords:"pets;cats",state:"ok",creator:"pets-system",dataSource:"pets-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-vehicles-cars-1",name:"取得汽車清單",description:"取得汽車清單資訊",url:"http://localhost:11005/getcarsList",method:"get",version:"v1",group:"寵物",levels:"交通工具.汽車",keywords:"vehicles;cars",state:"ok",creator:"vehicles-system",dataSource:"vehicles-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-vehicles-cars-2",name:"新增汽車資訊",description:"新增汽車資訊",url:"http://localhost:11005/addDog",method:"post",version:"v1",group:"寵物",levels:"交通工具.汽車",keywords:"vehicles;cars",state:"ok",creator:"vehicles-system",dataSource:"vehicles-data",mdInputParams:"### POST參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-vehicles-cars-3",name:"變更汽車資訊",description:"變更汽車資訊",url:"http://localhost:11005/updateDog",method:"put",version:"v1",group:"寵物",levels:"交通工具.汽車",keywords:"vehicles;cars",state:"ok",creator:"vehicles-system",dataSource:"vehicles-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '},{id:"id-for-apis-vehicles-cars-4",name:"刪除汽車資訊",description:"刪除汽車資訊",url:"http://localhost:11005/deleteDog",method:"del",version:"v1",group:"寵物",levels:"交通工具.汽車",keywords:"vehicles;cars",state:"ok",creator:"vehicles-system",dataSource:"vehicles-data",mdInputParams:"### GET網址參數\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| token | STRING | key-for-token |\n| id | STRING | id-for-test |\n| paramA | INTEGER | 123 |\n| paramB | DOUBLE | 123.456 |\n ",inputExample:"http://localhost:11005/getAPIsList?token={token}&id={id}¶mA=123¶mB=123.456",mdOutputParams:"### 回傳數據欄位: Array of objects\n| 參數 | 型別 | 範例 |\n| -- | -- | -- |\n| id | STRING | id-for-test |\n| weight | DOUBLE | 12.3 |\n| color | STRING | #f26 |\n| paramA | INTEGER | 321 |\n| paramB | DOUBLE | 654.321 |\n| paramC | STRING | ".concat(Dt("C:\\\\pj\\abc\\filename.pdf")," |\n "),outputExample:'\n[\n {\n "id": "id-for-test-1",\n "weight": 12.3,\n "color": "#f26",\n "paramA": 101,\n "paramB": 0.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename1.pdf"\n },\n {\n "id": "id-for-test-2",\n "weight": 22.3,\n "color": "#2f6",\n "paramA": 102,\n "paramB": 1.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename2.pdf"\n },\n {\n "id": "id-for-test-3",\n "weight": 32.3,\n "color": "#26f",\n "paramA": 103,\n "paramB": 2.01,\n "paramC": "C:\\\\\\\\pj\\\\abc\\\\filename3.pdf"\n }\n]\n '}],(function(t,e){var n=Yt(jt(jt({},t),{},{order:e}));return(0,h.Z)(t.timeUpdate)&&(n.timeUpdate=t.timeUpdate),n=(0,Pt.Z)(n,(0,Bt.Z)(Ht)),n}));return console.log("已產生: {keyTable} 測試資料",t),t},Qt={keyTable:Lt,tableNameCht:Ut,tableNameEng:zt,settings:Ht,funNew:Yt,funTest:Wt},Ft=Qt,Vt=n(3365),Xt={apis:Ft},Kt={};for(var Jt in Xt)Kt[Jt]=(0,Vt.Z)(Xt[Jt],{useCreateStorage:!1});var qt,_t=Kt,$t={hostname:"".concat(window.location.origin),webInfor:{},connState:"csIng",syncState:!1,viewState:"lists",loading:!1,settings:{leftDrawerWidth:200},heightApp:0,heightAppEff:0,heightToolbar:60,menu:{},userToken:"",user:{id:"",name:"",email:"",isAdmin:"n"},lang:"eng",kpText:{}};(0,G.Z)(_t,(function(t,e){$t[e]=null}));var te=(qt={},(0,ft.Z)(qt,gt,(function(t,e){t.webInfor=e})),(0,ft.Z)(qt,At,(function(t,e){t.lang=e})),(0,ft.Z)(qt,ht,(function(t,e){t.kpText=e})),(0,ft.Z)(qt,vt,(function(t,e){t.connState=e})),(0,ft.Z)(qt,It,(function(t,e){t.syncState=e})),(0,ft.Z)(qt,yt,(function(t,e){t.loading=e})),(0,ft.Z)(qt,wt,(function(t,e){t[e.tableName]=e.data})),(0,ft.Z)(qt,St,(function(t,e){(0,k.Z)(t,e.path,e.data)})),(0,ft.Z)(qt,Ct,(function(t,e){t.heightApp=e})),(0,ft.Z)(qt,bt,(function(t,e){t.heightAppEff=e})),(0,ft.Z)(qt,Tt,(function(t,e){t.heightToolbar=e})),(0,ft.Z)(qt,Et,(function(t,e){t.menu=e})),(0,ft.Z)(qt,kt,(function(t,e){t.userToken=e})),(0,ft.Z)(qt,Gt,(function(t,e){t.userSelf=e})),qt);s.ZP.use(ut.ZP);var ee=new ut.ZP.Store({state:$t,mutations:te,getters:i,actions:r,strict:!0});ee.types=a,s.ZP.prototype.$store=ee;var ne=ee,ae=n(5861),ie=n(4687),re=n(6128),oe=n(2101),pe=(n(3396),n(2283),n(2593)),se=(n(9088),{csIng:{eng:"Connecting...",cht:"連線中..."},csLogin:{eng:"Logged in",cht:"已登入"},csLogout:{eng:"Logged out",cht:"已登出"},csErrConn:{eng:"Unable to connect",cht:"無法連線"},csErrLogin:{eng:"Login denied",cht:"拒絕登入"}}),de=s.ZP.prototype;function ce(t){de=t}function le(t){de.$store.commit(de.$store.types.UpdateConnState,t)}function me(t){de.$store.commit(de.$store.types.UpdateLoading,t)}function ue(t){de.$store.commit(de.$store.types.UpdateUserToken,t)}function fe(t){de.$store.commit(de.$store.types.UpdateUserSelf,t)}function ge(){function t(e){(0,G.Z)(e,(function(e){e.$forceUpdate(),e.$children&&t(e.$children)}))}t(de.$children)}function Ae(t){return"eng"!==t&&"cht"!==t&&(t="eng"),t}function he(){var t="";if(!(0,h.Z)(t)){var e=(0,p.Z)(window,"___pmwperm___.language","");(0,h.Z)(e)&&(t=Ae(e))}if(!(0,h.Z)(t)){var n=(0,p.Z)(de,"$store.state.lang","");(0,h.Z)(n)&&(t=Ae(n))}return t=Ae(t),t}function ve(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;(0,h.Z)(t)||(t=he()),t=Ae(t);var e=(0,p.Z)(de,"$store.state.lang","");t!==e&&de.$store.commit(de.$store.types.UpdateLang,t);var n=(0,p.Z)(de,"$store.state.webInfor.kpLang",{}),a=(0,p.Z)(n,t,{});de.$store.commit(de.$store.types.UpdateKpText,a),ge()}function Ie(t){var e=(0,p.Z)(de,"$store.state.kpText"),n=(0,p.Z)(e,t,"");if(!(0,h.Z)(n)){var a=he();n=(0,p.Z)(se,"".concat(t,".").concat(a),"")}return(0,h.Z)(n)||(n=t),n}function ye(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,a=(0,p.Z)(t,e,"");if(!(0,h.Z)(a)){var i=Ie("empty");return i}return(0,oe.Z)(n)&&(a=n(a)),a}function we(){var t=(0,p.Z)(de,"$store.state.heightToolbar"),e=window.innerHeight-t;return de.$store.commit(de.$store.types.UpdateHeightApp,window.innerHeight),de.$store.commit(de.$store.types.UpdateHeightAppEff,e),""}function Se(){return Ce.apply(this,arguments)}function Ce(){return Ce=(0,ae.Z)(ie.mark((function t(){var e,n=arguments;return ie.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(e=n.length>0&&void 0!==n[0]?n[0]:0,!(e>0)){t.next=4;break}return t.next=4,(0,re.Z)(e);case 4:return t.next=6,(0,pe.Z)((function(){return(0,v.Z)((0,p.Z)(de,"$dsrl"))}));case 6:return t.next=8,(0,pe.Z)((function(){return(0,p.Z)(de,"$store.state.syncState")}));case 8:case"end":return t.stop()}}),t)}))),Ce.apply(this,arguments)}var be={setVo:ce,updateConnState:le,updateLoading:me,updateUserToken:ue,updateUserSelf:fe,forceUpdate:ge,setLang:ve,getKpText:Ie,gv:ye,syncHeight:we,waitData:Se},Te=be;function Ee(t){function e(e,n,a){var i=(0,x.Z)(t,(0,ft.Z)({},e,n));return i||(i=""),(0,h.Z)(a)&&(i=(0,p.Z)(i,a,"")),i}function n(t){return e("keyTable",t,"tableNameCht")}return{getTableInforBy:e,getTableChtByKey:n}}var ke=Ee,Ge=n(7881);s.ZP.config.productionTip=!1,s.ZP.prototype.$alert=function(){var t=Array.prototype.slice.call(arguments),e=t[0],n=t[1];console.log(e,n),"close"!==e&&(0,c.Z)(e,n)};var Ne=ke(_t);s.ZP.prototype.$ui=Te,s.ZP.prototype.$t=Te.getKpText,s.ZP.prototype.$s=o,s.ZP.prototype.$dssm=Ne,s.ZP.prototype.$ds=_t,s.ZP.prototype.$dg={},s.ZP.directive("domresize",(0,m.Z)()),s.ZP.directive("dommutation",(0,l.Z)()),s.ZP.directive("domdragdrop",(0,u.Z)()),(0,d.Z)({showLog:!1,url:window.location.origin+window.location.pathname,useWaitToken:!0,apiName:"api",tokenType:"Bearer",getToken:function(){var t=(0,p.Z)(s.ZP.prototype,"$store.state.userToken","");return t},getServerMethods:function(t){s.ZP.prototype.$fapi=t,t.getWebInfor().then((function(t){s.ZP.prototype.$store.commit(s.ZP.prototype.$store.types.UpdateWebInfor,t),Te.setLang(null,"get webInfor"),s.ZP.prototype.$store.commit(s.ZP.prototype.$store.types.UpdateSyncState,!0)})).catch((function(t){console.log(t)}))},recvData:function(t){s.ZP.prototype.$store.commit(s.ZP.prototype.$store.types.UpdateTableData,t)}}),new s.ZP({store:ne,render:function(t){return t(mt)}}).$mount("#app")},2016:function(t){function e(t){return Promise.resolve().then((function(){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}))}e.keys=function(){return[]},e.resolve=e,e.id=2016,t.exports=e},2480:function(){}},e={};function n(a){var i=e[a];if(void 0!==i)return i.exports;var r=e[a]={exports:{}};return t[a].call(r.exports,r,r.exports,n),r.exports}n.m=t,function(){var t=[];n.O=function(e,a,i,r){if(!a){var o=1/0;for(c=0;c<t.length;c++){a=t[c][0],i=t[c][1],r=t[c][2];for(var p=!0,s=0;s<a.length;s++)(!1&r||o>=r)&&Object.keys(n.O).every((function(t){return n.O[t](a[s])}))?a.splice(s--,1):(p=!1,r<o&&(o=r));if(p){t.splice(c--,1);var d=i();void 0!==d&&(e=d)}}return e}r=r||0;for(var c=t.length;c>0&&t[c-1][2]>r;c--)t[c]=t[c-1];t[c]=[a,i,r]}}(),function(){n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,{a:e}),e}}(),function(){n.d=function(t,e){for(var a in e)n.o(e,a)&&!n.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:e[a]})}}(),function(){n.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"===typeof window)return window}}()}(),function(){n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)}}(),function(){n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}}(),function(){var t={143:0};n.O.j=function(e){return 0===t[e]};var e=function(e,a){var i,r,o=a[0],p=a[1],s=a[2],d=0;if(o.some((function(e){return 0!==t[e]}))){for(i in p)n.o(p,i)&&(n.m[i]=p[i]);if(s)var c=s(n)}for(e&&e(a);d<o.length;d++)r=o[d],n.o(t,r)&&t[r]&&t[r][0](),t[r]=0;return n.O(c)},a=self["webpackChunkw_web_api"]=self["webpackChunkw_web_api"]||[];a.forEach(e.bind(null,0)),a.push=e.bind(null,a.push.bind(a))}();var a=n.O(void 0,[998],(function(){return n(4621)}));a=n.O(a)})();
|