Device Management頁面
- 1.ProjectList.vue
- 目的:使用者在Device Management 頁面可以編輯project的Id及敘述,並可新增新的project項目,另外也可以執行刪除動作。
- 架構說明:
Vue-components
src/components/ProjectManger/ProjectList.vue
src/components/MenuBar.vue
src/components/Common/Modal.vue
src/components/Common/ConfigModal.vue
Vue-router
src/router/index.js - UI:
- 邏輯說明:
1. 在Device Management中編輯Project的頁面(Url: /Login/CloudManager/DeviceManagement) 1.1 透過src/components/MenuBar.vue按下1號按鈕執行select function,透過src/router/index.js呼叫src/components/ProjectList.vue進入可編輯Project的頁面。 1.2 同時在src/components/MenuBar.vue檢查$store.state.user.scope使用者的權限將變數存入scopeEdit。 2. 一進入Project的頁面即執行$checkLogin和getProjectList function。 2.1 執行$checkLogin判斷scopeEdit狀態。 2.1.1 若為true即可顯示4、5號按鈕。 2.1.2 若為false即不顯示4、5、7號按鈕。 2.2 執行getProjectList列出所有project相關資訊。 2.2.1 呼叫API: GET /Projects。 2.2.1.1 若呼叫成功列出project資料,並將要顯示資訊存到projects陣列中。 2.2.1.2 若呼叫失敗則判斷err.response.status === 404狀態。 2.2.1.2.1 若為true,令projects = []。 2.2.1.2.2 若為false,執行$checkToken。 3. 按下2號按鈕執行getProjectList並依使用者選擇或輸入做排序。 4. 按下3號按鈕執行handleDetailClick。 4.1 呼叫API: /Projects/:projectId。 4.1.1 若呼叫成功,令detailVisible = true,並將要顯示的資訊存到tempProject物件中。 4.1.1.1 呼叫src/components/Common/ConfigModal.vue,並傳入Config、typeEdit、obj、type等參數,分別為:Config="true" :typeEdit="scopeEdit" :obj="tempProject" :type="'project'"。 4.1.1.1.1 若呼叫成功則跳出detail視窗 4.1.1.1.1.1 若typeEdit=true即顯示7號按鈕,按下7號按鈕執行handleEditClick。 4.1.1.1.1.1.1 分別將顯示的參數存入showObj物件,編輯參數存入editObj物件,並判斷obj.alarm!==undefined。 4.1.1.1.1.1.1.1 若為true將obj.alarm參數存入showAlarm和editAlarm。 4.1.1.1.1.2 編輯完後按下9號按鈕執行handleSaveClick。 4.1.1.1.1.2.1 呼叫API: PUT /Projects/{projectId}。 4.1.1.1.1.2.1.1 若呼叫成功即完成編輯,並回到一開始detail畫面。 4.1.1.1.1.2.1.2 若呼叫失敗回傳errMsg。 4.1.1.1.1.3 若不想儲存編輯按下8號按鈕,令editObj = {}並回到一開始detail畫面。 4.1.1.1.1.4 按下10號按鈕,令tempProject = {}並令detailVisible = False關閉視窗。 4.1.2 若呼叫失敗執行$checkToken。 5. 按下4號按鈕執行handleDeleteClick。 5.1 將選取的project資訊存入tempProject物件中,並令deleteVisiable = true。 5.1.1 呼叫src/components/Common/Modal.vue,顯示delete視窗。 5.1.1.1 按下11號按鈕執行handleDeleteSubmit。 5.1.1.1.1 執行deleteProject並呼叫API: DELETE /Projects/{projectId}。 5.1.1.1.1.1 若呼叫成功,將畫面上選取的project資訊刪除,並令deleteVisiable = false關閉視窗。 5.1.1.1.1.2 若呼叫失敗,顯示errStr,並令deleteVisiable = false關閉視窗。 5.1.1.2 按下12號按鈕執行handleCancelClick。 5.1.1.2.1 令tempProject = {},並令deleteVisiable = false關閉視窗。 6. 按下5號按鈕執行handleAddClick。 6.1 令addVisible = true和tempProject = {}。 6.1.1 呼叫src/components/Common/Modal.vue,顯示New Project視窗。 6.1.1.1 按下13號按鈕,執行handleAddSubmitClick。 6.1.1.1.1 判斷tempProject.projectId狀態。 6.1.1.1.1.1 若為flase,顯示errMsg。 6.1.1.1.1.2 若為true,執行createNewProject。 6.1.1.1.1.2.1 呼叫API: POST /Projects。 6.1.1.1.1.2.1.1 若呼叫成功執行getProjectList,並令addVisible = false關閉視窗。 6.1.1.1.1.2.1.2 若呼叫失敗顯示errMsg。 6.1.1.2 按下14號按鈕,執行handleCancelClick。 6.1.1.2.1 令tempProject = {}並令addVisible = false關閉視窗。 7. 按下6號按鈕執行handleProjectClick。 7.1 透過src/router/index.js呼叫src/components/ScadaList.vue進入可編輯SCADA的頁面。
- 2.ScadaList.vue
- 目的:使用者在Device Management 頁面可以編輯SCADA的Name、敘述、新增新的SCADA項目、同步、將SCADA移動至其他Project,另外也可以執行刪除動作。
- 架構說明:
Vue-components
src/components/ProjectManger/ScadaList.vue
src/components/Common/Modal.vue
src/components/Common/ConfigModal.vue
Vue-router
src/router/index.js - UI:
- 邏輯說明:
1. 在Device Management中編輯SCADA的頁面(Url: /Login/CloudManager/DeviceManagement/:projectId)。 1.1 透過src/router/index.js呼叫src/components/ScadaList.vue進入可編輯SCADA的頁面,將$store.state.user.scope使用者的權限將變數存入scopeEdit。 2. 一進入即執行$checkLogin、getScadaList和getScadaStatus。 2.1 執行$checkLogin判斷scopeEdit狀態。 2.1.1 若為true即可顯示5、6、7、9號按鈕。 2.1.2 若為false即不顯示5、6、7、9號按鈕。 2.2 執行getScadaList列出所有SCADA相關資訊。 2.2.1 呼叫API: GET /Scadas/info/{projectId}。 2.2.1.1 若呼叫成功列出SCADA資料,並將要顯示資訊存到devices陣列中。 2.2.1.2 若呼叫失敗則判斷err.response.status === 404狀態。 2.2.1.2.1 若為true,令devices = []。 2.2.1.2.2 若為false,執行$checkToken。 3. 按下1號按鈕執行getScadaList並依使用者選擇或輸入做排序。 4. 按下2號按鈕執行handleDetailClick。 4.1 呼叫API: /Scadas/info/{projectId}/{scadaId}。 4.1.1 若呼叫成功,令detailVisible = true,並將要顯示的資訊存到tempDevice物件中。 4.1.1.1 呼叫src/components/Common/ConfigModal.vue,並傳入Config、typeEdit、obj、type等參數,分別為:Config="true" :typeEdit="scopeEdit" :obj="tempDevice" :type="'scada'"。 4.1.1.1.1 若呼叫成功則跳出detail視窗。 4.1.1.1.1.1 若typeEdit=true即顯示9號按鈕,按下9號按鈕執行handleEditClick。 4.1.1.1.1.1.1 分別將顯示的參數存入showObj物件,編輯參數存入editObj物件,並判斷obj.alarm!==undefined。 4.1.1.1.1.1.1.1 若為true將obj.alarm參數存入showAlarm和editAlarm。 4.1.1.1.1.2 編輯完後按下12號按鈕執行handleSaveClick。 4.1.1.1.1.2.1 呼叫API: PUT /Scadas/{scadaId}。 4.1.1.1.1.2.1.1 若呼叫成功即完成編輯,並回到一開始detail畫面。 4.1.1.1.1.2.1.2 若呼叫失敗回傳errMsg。 4.1.1.1.1.3 若不想儲存編輯按下11號按鈕,令editObj = {}並回到一開始detail畫面。 4.1.1.1.1.4 按下10號按鈕,令tempProject = {}並令detailVisible = False關閉視窗。 4.1.2 若呼叫失敗執行$checkToken。 5. 3號燈號會由執行getScadaStatus的結果決定,若是$store.state.fullscreenLoading不為false和scadaId不為null即呼叫API: POST /Statuses/scada。 5.1 若呼叫成功3號則會亮綠燈並執行setTimer。 5.1.1 setTimer:每1000毫秒會執行一次getScadaStatus。 5.2 若呼叫失敗3號則會不亮燈並執行$checkToken和setTimer。 5.2.1 setTimer:每1000毫秒會執行一次getScadaStatus。 6. 按下4號按鈕執行handleMoveClick。 6.1 執行getProjectList並令moveVisiable = true,將選取的scadaId傳入tempScadaId字串。 6.1.1 呼叫src/components/Common/Modal.vue,顯示move to視窗。 6.1.1.1 呼叫API: /GET/Projects。 6.1.1.1.1 若呼叫成功將回傳資料存入projects陣列中,列在下選單。 6.1.1.1.2 若呼叫失敗判斷err.response.status === 404狀態。 6.1.1.1.2.1 若為true,令projects = []。 6.1.1.1.2.2 若為false,執行$checkToken。 6.1.2 選完project Id後按下14號按鈕執行handleMoveSubmit。 6.1.2.1 呼叫API: POST/Scadas。 6.1.2.1.1 若呼叫成功即完成編輯,並令moveVisiable = false關閉畫面。 6.1.2.1.2 若呼叫失敗,執行$checkToken。 6.1.3 若不想儲存按下13號按鈕執行handleCancelClick。 6.1.3.1 令projectIdSelect = "",並令moveVisiable = false關閉畫面。 7. 按下5號按鈕執行handleDeleteClick。 7.1 將選取的scada資料存入tempDevice,並令deleteVisible = true,顯示delete視窗。 7.1.1 呼叫src/components/Common/Modal.vue,顯示delete視窗。 7.1.1.1 若確定要刪除按下15號按鈕,執行deleteScada並呼叫API: DELETE /Projects/{projectId}。 7.1.1.1.1 若呼叫成功,將畫面上選取的SCADA資訊刪除,並令deleteVisiable = false關閉視窗。 7.1.1.1.2 若呼叫失敗,顯示errStr,並令deleteVisiable = false關閉視窗。 7.1.1.2 若不想要刪除按下16號按鈕執行handleCancelClick。 7.1.1.2.1 令tempDevice = {},並令deleteVisiable = false關閉視窗。 8. 按下6號按鈕執行handleAddClick。 8.1 令addVisible = true和tempDevice = {}。 8.1.1 呼叫src/components/Common/Modal.vue,顯示New SCADA視窗。 8.1.1.1 按下18號按鈕執行handleAddSubmitClick。 8.1.1.1.1 判斷devices.projectId狀態。 8.1.1.1.1.1 若為false,顯示errMsg。 8.1.1.1.1.2 若為true,執行createNewScada。 8.1.1.1.1.2.1 呼叫API: POST //Scadas。 8.1.1.1.1.2.1.1 若呼叫成功執行getScadaList,並令addVisible = false關閉視窗。 8.1.1.1.1.2.1.2 若呼叫失敗顯示errMsg。 8.1.1.2 按下17號按鈕,執行handleCancelClick。 8.1.1.2.1 令tempDevice = {}並令addVisible = false關閉視窗。 9. 按下7號按鈕執行handleSyncClick。 9.1 判斷isModified狀態。 9.1.1 若為true,將有更改過的scada存入arr陣列,呼叫 API: POST/Scadas/sync。 9.1.1.1 若呼叫成功,做同步動作,若res.data[idx].isSuccess為false回覆errStr。 9.1.1.2 若呼叫失敗,執行$checkToken並顯示errStr。 10. 按下8號按鈕執行handleDeviceClick。 10.1 透過src/router/index.js呼叫src/components/DeviceList.vue進入可編輯Device的頁面。