---
# System prepended metadata

title: DeviceOn/BI Portal RD Test scenario 2021/04~2021/06
tags: [DeviceOnBI]

---

# DeviceOn/BI Portal RD Test scenario 2021/04~2021/06
---
###### tags: `DeviceOnBI`

## 2021/06/28
### Alice
#### feature/panel-grid-item-active

**Purpose**
1. [SRPDashboard][fix] fix multiple clicks to active on the same panel multiple times & fix cause no data.targets,  "cannot read property 'map' of undefined" error

**Test**
1. test for SRP Dashboard
    - [x] add blank -> add multiple panels -> change active or click same grid item -> check if function run
    - [x] edit dashboard -> change active or click same grid item -> check if function run
    - [x] add blank -> add multiple panels -> change active -> check no data.targets error

## 2021/06/25
### Tingwei
#### [Change]When edition === 'azure-aks' , profile uses profile server.

**Purpose**
1. [Change]When edition === 'azure-aks' , profile uses profile server.
2. [Change]Rename "profileServerAPIOnPremises" to "profileServerAPI"
2. [Change]Rename "profileLibraryAPI" to "profileProxyAPI"


**Test**
1. test
	- [x] localhost works
	- Azure needs to deploy
	
## 2021/06/24
### Tingwei
#### [Fix][SRPDashboard][Grouped Bar Chart] Old version "timeinterval" of targets is uppercase. Which causes showing error in BI. Fix it by toLowerCase().

**Purpose**
1. [Fix][SRPDashboard][Grouped Bar Chart] Old version "timeinterval" of targets is uppercase. Which causes showing error in BI. Fix it by toLowerCase().
2. [Change][SRPDashboard] To avoid misunderstanding, change timeinterval of default target JSON from "Hour" to "min" in Grouped Bar Chart, Log Chart, Graph.
3. [Change][SRPDashboard] To avoid misunderstanding, in Water Statistic, change timeinterval of default target JSON from "Hour" to "select time interval" which is the same as the default panel template.

**Test**
1. test
	- [x] New from Template -> choose 3.1 Inflow Pumping station -> click Grouped Bar Chart -> check whether X axis shows Hour and there is no error in Console
	- [x] Log chart works fine
	- [x] Grach works fine
	- [x] Water Statistic works fine

## 2021/06/23
### Tingwei
#### [SRPDashboard][Path] Integrating new data source, etc

**Purpose**
1. [SRPDashboard][Path] Integrating new data source
1. [Fix][SRPDashboard]Changing correct data source query from "org to object to parameter" in Grafana is available (mapping org. by object nameLangId)

**Test**
1. test
	- [x] change an object name which was bound in a dashboard -> refresh page -> edit the dashboard -> check whether path name is correct
	- [x] edit a dashboard in Grafana -> edit a group bar chart -> change datasource object -> save in Grafana -> check whether path name is correct

## 2021/06/22
### Tingwei
#### [SRPDashboard][SaaS Composer] Integrating new data source.

**Purpose**
1. [SRPDashboard][SaaS Composer] Integrating new data source.

**Test**
1. test new from Blank and save 
	- [x] New from Blank -> add a Switch Panel and a SaaS Composer -> add a display without object -> save the display
	- [x] add a display with groups and an object -> save the display
	- [x] -> save the dashboard
2. test new from Template and save 
	- [x] New from Template -> add a Switch Panel and a SaaS Composer -> add a display without object -> save the display
	- [x] add a display with groups and an object -> save the display
	- [x] -> save the dashboard
3. test editing the dashboard which we just created
	- [x] -> edit the dashboard which we just created -> edit a display and make groups changing -> save the display 
	- [x] -> edit a display and make object changing -> save the display 
	- [x] -> delete a display
	- [x] save this dashboard
4. test editing the old version dashboard which contains a SaaS Composer
	- [x] -> edit a display and make groups changing -> save the display 
	- [x] -> edit a display and make object changing -> save the display 
	- [x] -> delete a display
5. saving in BI and test in Grafana
	- [x] -> change group -> check display changing
	- [x] -> select group and object -> check display changing
	- changing variables in Grafana has some problems
6. test select group and object UI changing in BI
	- [x] -> edit a display -> select groups and object -> change a group to **"select group"** -> check whether children groups and object are reset

## 2021/06/21
### Alice
#### feature/srp-shortcut-key-detect

**Purpose**
1. [SRPDashboard] shortcut key detect fix
2. [SRPDashboard] add shortcutFlag, clear panel focus and activeIndex

**Test**
1. test for SRP Dashboard
    - [x] mac/windows -> new blank -> add panel -> ctrl + v/delete shortcut key test -> click right aria -> ctrl + v/delete shortcut key test -> click panel -> ctrl + v/delete shortcut key test -> click grid that the part except panel item -> check panel item active & panel setting hide
    - [x] windows -> edit dashboard -> ctrl + v (no click panel)-> check panel duplicate correctly
    - [x] mac -> edit dashboard -> ctrl + v (no click panel)-> check panel duplicate correctly
    - [x] windows -> edit dashboard -> `Delete`/`Backspace` -> check panel duplicate correctly
    - [x] mac -> edit dashboard -> `Backspace` -> check panel duplicate correctly


## 2021/06/18
### Tingwei
#### [Group] [Object] Fine-tune dialog style

**Purpose**
1. [Group] [Object] Fixed dialog header and dialog footer when dialog height > min-height 690px
2. [Group] [Object] Fine-tune layout and style of the main dialog and its items

**Test**
1. test org in mac & windows
	- [x] edit a root org -> check header and footer 
	- [x] -> check all fields in Basic Information of main dialog
	- [x] -> click Notification -> check all fields in Basic Information
	- [x] -> click Inspection -> check all fields in Basic Information
2. test object in mac & windows
	- [x] edit a object -> check header and footer 
	- [x] -> check all fields in the main dialog

## 2021/06/15
### Tingwei
#### [Fix][Group][Object] In dialogs, the footer uses localLang, body uses editLang, etc.

**Purpose**
1. [Fix][Group][Object] In dialogs, the footer uses localLang, body uses editLang.
2. [Fix][Group][Object] In dialogs, fine-tune style: fix padding of the parameter title bar, underline, toolbar, and parameter table, background color of the top half body, background color of input.
3. [Fix][Group][Object] In dialogs, change "Name" to "Display Name."
4. [Fix][Group] In dialogs, If lev is 1 or creating a root org., show Root Organization Information, otherwise, show Group Information.
5. [Fix][Group] In dialogs, translation was wrong when "Changing to not default lang -> click Notification -> click Basic Information," we found the lang tab is default lang, but the translation is the last lang we choose before.

**Test**
1. test 1 ~ 3
	- [x] edit group -> change lang -> check parameter table title translation
	- [x] -> check padding of the parameter title bar, underline, toolbar, and parameter table, 
	- [x] -> check background color of the top half body
	- [x] -> check input background color
	- [x] -> check "Display Name"
	- [x] edit object -> change lang -> check parameter table title translation and footer button translation
	- [x] -> check padding of the parameter title bar, underline, toolbar, and parameter table
	- [x] -> check input background color
	- [x] -> check "Display Name"
2. test 4
	- [x] create root org -> check Root Organization Information
	- [x] edit root org -> check Root Organization Information
	- [x] create group -> check Group Information
	- [x] edit group -> check Group Information
3. test 5
	- [x] Changing to not default lang -> click Notification -> click Basic Information -> check lang

## 2021/06/11
### Tingwei
#### [Change] Pages which path starting from "/index" or "/home" use "defaultLang" as "localLang" and hide the language dropdown, etc.

**Purpose**
1. [Change] Pages which path starting from "/index" or "/home" use "defaultLang" as "localLang" and hide the language dropdown.
2. [Fix] In routeRedirect function, if from.path === target, next(false) to reject routing and showApp().
3. [Fix] In pageMobileDeviceList, "My Devices" translation key is wrong.

**Test**
1. test purpose 1 
    - [x] visit /index/organizationManagement -> check whether language dropdown hides
    - [x] visit /home -> check whether language dropdown hides
    - [x] -> change default language in account page -> check whether all translation changed
    - [x] -> logout -> Signup page -> check check whether language dropdown shows -> change it to the another language
    - [x] -> go back to /login -> login -> check whether the '/home' page is translated with account default language
    - [x] /welcome page -> check check whether language dropdown shows and works
    - [x] /mobile/device/deviceList -> check check whether language dropdown shows and works

2. test purpose 2 
	- [x] go to '/home' -> input '/welcome' in Url and press Enter -> check whether page shows in '/home'
3. test purpose 3
	- [x] go to '/mobile/device/deviceList' -> change language

## 2021/06/09
### Tingwei
#### [Menu] Showing "No menu, yet" when the data loaded and there is no accessible data, etc.

**Purpose**
1. [Menu] Showing "No menu, yet" when the data loaded and there is no accessible data.
2. [Menu] Showing "No Search Results, yet." when there is keyword and accessible data.
3. [Menu] Set the position of clear button of search input vertical center.
4. [SRPDashboard] showing "No Dashboards, yet." when the data loaded and there is no accessible data.
5. [Devices] showing "No Devices, yet." when the data loaded and there is no accessible data.

**Test**
1. test purpose 1 in Menu Management. Check the belows test
    - [x] visit menuManagement with a no accessible menu account -> check whether showing "No menu, yet." after the loading mask closed
    - [x] -> input a mismatch menu keyword -> check whether showing "No menu, yet."
    - [x] visit menuManagement with an having accessible menu account
2. test purpose 2 in Menu Management
    - [x] -> input a mismatch menu keyword -> check whether showing "No Search Results, yet."
3. test purpose 3 in Menu Management
    - [x] -> input a keyword -> check whether the position of clear button of search input is vertical center
4. test purpose 4 in Dashboards. Check the belows test
    - [x] visit srpdashboard page with a no accessible dashboard account
    - [x] visit srpdashboard page with having an accessible dashboard account
5. test purpose 5 in My Devices. Check the belows test
    - [x] visit Devices page with a no device account
    - [x] visit Monitor page with a no device account
    - [x] visit Event page with a no device account
    - [x] visit Firmware page with a no device account
    - [x] visit Configure page with a no device account
    - [x] visit Devices page with a having device account
    - [x] visit Monitor page with a having device account
    - [x] visit Event page with a having device account
    - [x] visit Firmware page with a having device account
    - [x] visit Configure page with a having device

#### [Fix][Profile] A profile is the last row of a slice of data, i.g., the 24th profile. When it was edited in the condition "a row which includes 24%(cards in a row) === 0", the next slice fetching request will not be asked. etc.

**Purpose**
1. [Fix][Profile] A profile is the last row of a slice of data, i.g., the 24th profile. When it was edited in the condition "a row which includes 24%(cards in a row) === 0", the next slice fetching request will not be asked.
2. [Fix][Profile] When we search a keyword, and then we edit a profile and change its name to a name that mismatches the keyword, after saving, the loading mask will not be close because the active id is not found in this search results.

**Test**
1. test purpose 1
	- [x] modify the browser window to make sure a row contains 6 cards -> edit the 48th profile and save
2. test purpose 2
	- [x] search "tingwei" -> edit any profile -> change its name to "xxx" -> save

## 2021/06/08
### Tingwei
#### [Profile] Support highlight, etc.

**Purpose**
1. [Profile] Support highlight
2. [Profile] Search support keyboard Enter
3. [Fix] Total profile count behind the Profile word sets the loaded list length mistakenly.
4. [Fix] Reset scroll to the top when submit searching.

**Test**
1. test purpose 1, check the belows test
    - [x] add profile -> check whether scrolling to the highlight card and the search options are not changed.
    - [x] edit profile -> check whether scrolling to the highlight card and the search options are not changed.
    - [x] delete profile -> check whether the profile is deleted and the scrolling box stays in the current position.
    - [x] (This test will fail if response status code is 500): search only one profile name -> edit the only one profile -> rename it to a mismatch keyword name -> save the profile -> because there is no more profile in the search result, check whether clear the keyword but the others are not reset
    - [x] (This test will fail if response status code is 500): search only one profile name -> delete the only one profile -> because there is no more profile in the search result, check whether clear the keyword but the others are not reset
2. test purpose 2 & 4:
    - [x] search only one profile name by inputting profile name and pressing **"enter"**  -> check whether submit searching and scroll to the top
3. test purpose 3:
	- [x] check profile total count

## 2021/06/07
### Alice
#### feature/menu-highlight

**Purpose**
1. [menuManagement][change] card highlight
2. [menuManagement][change] create heighlight
3. [menuManagement][change] test scroll for create

**Test**
1. create card -> save -> check scroll position -> check card highlight
2. select dropdown -> edit card -> save -> check scroll position -> check card highlight
3. select dropdown -> delete card

## 2021/06/03
### Alice
#### feature/outer-loading

**Purpose**
1. [pageInspection][change] outer loading

**Test**
1. test tab change -> show outer loading at inspection

#### feature/langsrc-key-change

**Purpose**
1. [forwardingDialog][change] error code key change

**Test**
1. This translation has not been added to the database and cannot be tested

## 2021/05/31
### Tingwei
#### [Update][Notification Group]Notification Group Dialog Discard Handler

**Purpose**
1. [Update][Notification Group]Notification group dialog supports discard handler
2. [Update][Notification Group]Notification group dialog supports Esc

**Test**
1. test purpose 1+2, events trigger by something changing
    - [x] create -> change something -> esc
    - [x] edit -> change something -> cancel

2. test purpose 1+2, events trigger by no changing, the discard dialog no needs to popup
    - [x] create -> esc
    - [x] edit -> cancel
    - [x] create -> change something -> save
    - [x] edit -> change something -> save
    - [x] create -> click save -> press esc -> create -> check whether there is no error message
3. test purpose 1, changing fields check whether the discard dialog popups
    - [x] name
    - [x] description
    - [x] Notification Type
    - [x] Alarm Group
    - [x] Alarm User Group
    - [x] Message - keyin
    - [x] Message - insert Variable
    - [x] Message - insert Others...
    - [x] Message - paste by mouse right dropdown
    - [x] Message - paste by ctrl + v

### Alice 
#### feature/auth-delete-error

**Purpose**
1. [auth][add] binding rule list error code and dependents rule list
2. [auth][add] connect api and get the error data

**Test**
1. test for forwarding page
     - [x] add a auth -> add rule -> use the auth just added -> save -> delete the auth & check the list was shown correct info

#### feature/auth-delete-error

**Purpose**
1. [forwardingDialog] show error code & hasError timing

**Test**
1. test for forwarding dialog
     - [x] enter exist name -> show error code & message
     - [x] hide error tips when save has no valid error

## 2021/05/28
### Tingwei
#### [Update][Menu Management] Menu dialog discard handler, etc.

**Purpose**
1. [Update][Menu Management] Menu dialog discard handler
2. [Fix] menuSelectDialog vertical middle
3. [Fix][Menu Management] Correct "DELETE" to "Delete" in more dropdown of the menu tree
4. [Fix][Menu Management][SRPDashboard] "New From Template" dialog title language key does not use "new_from_template", but uses "select_dashboard" mistakenly. "select_dashboard" is already used in menuSelectDialog.vue in menu dialog. Unfortunately, somebody translated "select_dashboard" to "New From Template" when the "New From Template" project changed the dialog title from "Select Dashboard" to "New From Template" a long time ago.

**Test**
1. test purpose 1, events trigger by something changing
    - [x] create -> change something -> esc
    - [x] edit -> change something -> cancel

2. test purpose 1, events trigger by no changing, the discard dialog no needs to popup
    - [x] create -> esc
    - [x] edit -> cancel
    - [x] create -> change something -> save
    - [x] edit -> change something -> save
3. test purpose 1, changing fields check whether the discard dialog popups
    - [x] upload image
    - [x] delete image
    - [x] org name
    - [x] menu title
    - [x] menu name
    - [x] availability
    - [x] Focal Point - title
    - [x] Focal Point - URL (keyin)
    - [x] Focal Point - URL (select dialog)
    - [x] Management Scorecard - title
    - [x] Management Scorecard -URL (keyin)
    - [x] Management Scorecard -URL (select dialog)
    - [x] Site Menu - click "Sync"
    - [x] Site Menu - set as Homepage
    - [x] Site Menu - move up
    - [x] Site Menu - move down
    - [x] Site Menu - Promote
    - [x] Site Menu - Demote
    - [x] Site Menu - Delete
    - [x] Site Menu - Page Name
    - [x] Site Menu - Page URL (keyin)
    - [x] Site Menu - Page URL (select dialog)
    - [x] Site Menu - drap & drop success
    - [x] Menu Display Language
4. test purpose 2
    - [x] click button on the right side of URL input -> chech select dashboard dialog
5. test purpose 3
    - [x] Check whether "DELETE" is corrected to "Delete" in the more dropdown of the menu tree
6. test purpose 4
    - [x] go to SRPDashboard page -> "new from template" -> check "new from template" dialog title
    - [x] check ["select_dashboard" translation](https://docs.google.com/spreadsheets/d/11nZyjyBx9ewp7I964hN1H492V0q9Hyo0EGo8Oa_ucCA/edit#gid=1106240201)

## 2021/05/27
### Tingwei
#### [Loading] Change animation to clockwise

**Purpose**
1. [Loading] Change animation to clockwise

**Test**
1. check loading
  - [x] full-screen loading
  - [x] small loading

## 2021/05/26
### Tingwei
#### [Update][Device] EdgeLink & SCADA dialog supports Discard Handler.

**Purpose**
1. [Update][Device] EdgeLink & SCADA dialog supports Discard Handler.

**Test**
1. events trigger by something changing
    - [x] create -> change something -> esc
    - [x] edit -> change something -> cancel
2. events trigger by no changing, the discard dialog no needs to popup
    - [x] create -> esc
    - [x] edit -> cancel
    - [x] create -> change something -> save
    - [x] edit -> change something -> save
3. changing fields check whether the discard dialog popup
    - [x] upload image
    - [x] delete image
    - [x] name
    - [x] description

## 2021/05/25
### Tingwei
#### [Update][Profile] Discard handler

**Purpose**
1. [Update][Profile] Discard handler
2. [Fix][Loading] Loading animation counter-clockwise.
3. [Fix]Full-screen Loading opacity.

**Test**
1. events trigger by something changing
    - [x] create -> change something -> esc
    - [x] edit -> change something -> cancel
    - [x] upload profile excel-> change something -> cancel
    - [x] create from device -> select some tags -> next -> change something -> prev
2. events trigger by no changing, the discard dialog no needs to popup
    - [x] create -> esc
    - [x] edit -> cancel
    - [x] upload profile excel -> cancel
    - [x] create from device -> select some tags -> next -> cancel
    - [x] create -> change something -> save
    - [x] edit -> change something -> save
3. changing fields check whether the discard dialog popup
    - [x] upload image
    - [x] delete image
    - [x] name
    - [x] description
    - [x] block type
    - [x] select a category
    - [x] create a category
    - [x] delete a category
    - [x] upload alarm code excel
    - [x] delete alarm code excel
    - [x] availability
    - [x] change share code
    - [x] click `Use suggested code`
    - [x] saving parameter successfully
    - [x] delete parameter
4. check small loading animation
5. check full-screen loading animation

## 2021/05/24
### Tingwei
#### [Change][Loading] New loading style

**Purpose**
1. [Change][Loading] New loading style

**Test**
1. test 1
    - [x] check full screen loading

## 2021/5/19
### Tingwei
[Fix][Profile] maxChangeRatePerMin default is 100, etc.

**Purpose**
1. [Fix][Profile][Create from Device] maxChangeRatePerMin default is 100, etc.
2. [Fix][Profile][Create from Device] "SAVE" button is not disabled at step 1.

**Test**
1. test 1 & 2
     - [x] create from device in profileManagement -> check whether "SAVE" button is disabled 
     - [x] -> select "ITsungWaterPC -> Pump1" -> copy to the right list -> next -> check whether "SAVE" button is not disabled 
     - [x] -> edit "FlowIn" -> check whether maxChangeRatePerMin is 100
     - [x] -> save this profile -> edit it again -> check whether "SAVE" button is not disabled 
     - [x] create new profile   -> check whether "SAVE" button is not disabled

## 2021/5/18
### Tingwei
#### [Fix] device is not disabled when its block is disabled( another block is selected ), etc.

**Purpose**
1. [Fix] device is not disabled when its block is disabled( another block is selected ).
2. [Fix][selectParameterDialog] Fix parameter icon 

**Test**
1. test 1
     - [x] -> select "ITsungWaterPC -> Pump1" -> check whether "Tingwei-PC" is disabled
     - [x] copy "ITsungWaterPC -> Pump1" to right -> check whether "Tingwei-PC" is disabled
     - [x] remove "ITsungWaterPC -> Pump1 -> Current" from the right list ->  -> check whether "Tingwei-PC" is disabled and whether "ITsungWaterPC -> Pump1 -> Current" is not disabled
     - [x] remove all "ITsungWaterPC -> Pump1" from the right list -> check whether "Tingwei-PC" is not disabled
2. test 2
    - [x] check parameter icon of selectParameterDialog

## 2021/5/17
### Alice 
#### feature/api-new-auth-type

**Purpose**
1. [ForwardingDialog][change] basicinfo auth filter fix and add new type

**Test**
1. test for forwardingDialog
     - [x] open add API dialog -> check auth type is currect
     - [x] open add MQTT dialog -> check auth type is currect
## 2021/5/14
### Tingwei
#### [Change][Profile] Change "Create rom Device" tree font-weight to "normal".

**Purpose**
1. Refer to the title

**Test**
1. test 
     - [x] profile create from device -> check font-weight in tree

## 2021/5/13
### Tingwei
#### [Fix] Fix device tags are disabled mistakenlly when the device is disabled.

**Purpose**
1. Refer to the title

**Test**
1. test selecting from left to right or selecting from right to left
     - [x] -> select a tag in block in the left side list -> check whether unselected to right tags of Devices are not disabled 
     - [x] -> select a tag in block in the left side list -> check whether tags of the other blocks are disabled
     - [x] -> select a block in the left side list -> copy to right -> check whether tags of the other blocks are disabled in the left side list
     - [x] -> select a block in the left side list -> copy to right -> check whether unselected to right tags of Devices are not disabled 
     - [x] select a device in the right side list -> copy to right -> check whether unselected to right tags of Devices are not disabled

## 2021/5/12
### Alice 
#### feature/forwarding-dialog

**Purpose**
1. [pageForwarding][change] change the search placeholder by clicking the tab
2. [forwardingDialog][change] filter optional authentication type by dialog content type
3. [pageForwarding][change] clear search input when add/edit/delete
4. [forwardingDialog][change] 1. subtitle error tips, 2. api url input position & width tweak, 3. queryBody default value
5. [forwardingDialog][add] api url format valid
6. [APIUrlComponent] [add] http rule valid & [fix] param trans problem
7. [forwardingDialog][change] improve the verification for blocking save
8. [forwardingDialog][change] regex fix => first word need to be http:// or https://

**Test**
1. test for pageForwarding
     - [x] change tab -> placeholder change
     - [x] add/edit/delete rule -> search input clear
2. test for forwardingDialog
     - [x] open API/MQTT/SQL dialog -> check auth list has already been filter
     - [x] save rule when it is not pass verification -> check the error above title 
     - [x] input a string other than a URL -> check input valid
     - [x] add param -> delete first few characters -> blur -> check param key have been change -> delete last few characters -> check param key have been change
     - [x] input URL without start with http:// or https:// -> save -> check error

### Tingwei
#### [Fix][Notification Group] Fix variable color is not correct, i.g., changing from "{Device Namea}" to "{Device Name}".

**Purpose**
1. Refer to the title 

**Test**
1. test 
    - [x] "{Device Namea}" to "{Device Name}
    - [x] "{Device Nam}" to "{Device Name}
    - [x] "{Device Nae}" to "{Device Name}
    - [x] "{evice Name}" to "{Device Name}
    - [x] "Device Name}" to "{Device Name}
    - [x] "{Device Name" to "{Device Name}
    

## 2021/5/11
### Tingwei
#### [Update][SRPDashboard] Add highlight style and go to the page which contains the highlight dashboard if it exists in the search result list.

**Purpose**
1. Add highlight style 
2. go to the page which contains the highlight dashboard if it exists in the search result list.
3. After a dashboard is saved, "keyword", Sort By" and "Cards Per page" are not reset. Only in no search result condition, "keyword" will be reset.

**Test**
1. test 
     - [x] add dashboard named "z tingwei" at the first page -> chech whether set page to the page which "z tingwei" dashboard exist and "z tingwei" dashboard is highlighted.
     - [x] edit dashboard which is not in the first page -> save  -> chech whether the web stays in the page
     - [x] edit "A" dashboard which is the last one of a page in "A tab" -> switch to "B Tab" -> create a dashboard its position is ahead of "A" dashboard in "B tab" -> switch to "A Tab" -> save "A" Dashboard -> chech whether set page to the page which "A" dashboard exist and "A" dashboard is highlighted.
     - [x] delete a dashboard from more than one dashboard page -> chech whether the web stays in the page
     - [x] delete a dashboard from the last page which contains only one dashboard  -> chech whether the web stays in the page
     - [x] search a dashboard which is only one in the search result -> delete the dashboard
     - [x] search "zting" -> edit "ztingwei 4" and change its name to "z tingwei 4" -> save -> the web stays in "zting" result page

### [Change]Hide "Data Exchange"

**Purpose**
1. Refer to the title

**Test**
1. check
    - [x] Home
    - [x] nodepageBI tabs

## 2021/5/10
### Tingwei
#### [Update][jsonEditor] "no parameter" condition supports validation.

**Purpose**
1. [Update][jsonEditor] "no parameter" condition supports validation.

**Test**
1. test 
     - [x] no parameter(token body example): required (uncomment \<testJsonEditor\/\> in pagePlugin )
     - [x] no parameter(token body example): json invalid (uncomment \<testJsonEditor\/\> in pagePlugin )
     - [x] required (test in forwardingDialog)
     - [x] invalid JSON (i.g., redundent comma mark, lack comma)
     - [x] invalid: parameter key is not in ""
     - [x] parameter key is in ""
     - [x] parameter value is in ""
     - [x] parameter value is not in ""
     - [x] normal key and value
     - [x] not required condition (test in Plugin or uncomment \<testJsonEditor\/\> in pagePlugin )

## 2021/5/7
### Alice 
#### feature/forwarding-dialog

**Purpose**
1. [pageForwarding][fix] MQTT filter type fix
2. [pageForwarding][fix] 1. open MQTT, 2. query status & time 0 exception handle
3. [APIUrlEditor][fix] desc disappear

**Test**
1. test for MQTT
     - [x] add MQTT rule -> save
     - [x] edit MQTT rule -> save
     - [x] delete MQTT rule at list
     - [x] check/uncheck MQTT filter at list
2. test for list & dialog
     - [x] enter characters in APIUrlEditor -> error & desc exist
     - [x] add rule -> check query status & last query time is not 0

### Tingwei
#### [Update][jsonEditor] Add basic validation, etc.

**Purpose**
1. [Update][jsonEditor] Add basic validation
2. [Change] Integrate basic ace-editor css of jsonEditor and sqlEditor to ace-editor.scss

**Test**
1. test 
     - [x] required (test in forwardingDialog)
     - [x] invalid JSON (i.g., redundent comma mark, lack comma)
     - [x] invalid: parameter key is not in ""
     - [x] parameter key is in ""
     - [x] parameter value is in ""
     - [x] parameter value is not in ""
     - [x] normal key and value
     - [x] not required condition (test in Plugin or uncomment \<testJsonEditor\/\> in pagePlugin )

## 2021/5/6
### Tingwei
#### [Fix] select a device, it has a block, but the others block are not disabled

**Purpose**
1. [Fix] select a device, it has a block, but the others block are not disabled

**Test**
1. test 
     - [x] create from device -> select \"Tingwei-PC\" directly -> check whether the other blocks are disabled

#### [Fix][SRPDashboard] Defect #24951, 在dashboard分頁，新增樣板儀表板，sava後，點預覽儀表板，在回來BI，點新增空白儀表板，會出現空白畫面.

**Purpose**
1. Refer to the title

**Test**
1. check whether the dialog is correct in below conditions 
     - [x] click the card "..." button -> create "new blank"
     - [x] click the card "..." button -> create "new from template"
     - [x] click the card "..." button -> create "new from existing"
     - [x] create "new blank"
     - [x] create "new from template"
     - [x] create "new from existing"
     - [x] edit a srpdashboard which was created by "new blank"
     - [x] edit a srpdashboard which was created by "new from template"
     - [x] edit a srpdashboard which was created by "new from existing"

#### [Update][jsonEditor] Extend "no param highlight".

**Purpose**
1. [Update][jsonEditor] Extend "no param highlight".

**Test**
1. test by uncomment \<testJsonEditor\/\> in pagePlugin.vue
     - [x] check "token body example (no parameter)" in page plugin

## 2021/5/5
### Alice 
#### feature/forwarding-dialog

**Purpose**
1. [Forwarding][change] add and change rule
2. [Home][change] activate plugin/forwarding app button
3. [Forwarding][change] forwarding dialog validate add

**Test Case**
1. test for forwarding dialog
   - [x] name is required => 64 char
   - [x] desc => 200 char
   - [x] query frequency is required & need > 5 min and =< 1440 min
   - [x] url is required => 512 char
   - [x] body is required => length > 1
   - [x] param valid => duplicate -> red, no datasource -> red
   - [x] check param type before send，if type = null, key trans red
   - [x] duplicate name

#### feature/210505-bug-fix

**Purpose**
- [menu, home, objectList][fix] 
  1. hide filter button
  2. home app icon activate
  3. multi-language translate change

**Test Case**
1. test for menu
  -[x] check filter button hidden
2. test for home
  -[x] check `archiving` button is activated
3. multi-language for object list (langresc)


### Tingwei
#### [Add][Profile] create profile from device, etc

**Purpose**
1. [Add][Profile] create profile from device
2. [Add][selectTagWithoutDialog] selectTagWithoutDialog.vue
3. [Add][ovalArrowStep] ovalArrowStep.vue
4. [Update][SearchDropdown] extend prepend slot

**Test**
1. test selecting from left to right or selecting from right to left
     - [x] create from device -> select a device in the left side list -> copy to right
     - [x] -> select a tag in block in the left side list -> check whether the other blocks are disabled -> copy to right
     - [x] -> select a block in the left side list -> copy to right
     - [x] select a device in the right side list -> copy to left
     - [x] -> select a tag in block in the right side list -> copy to left
     - [x] -> select a block in the right side list -> copy to left
     - [x] all to right
     - [x] -> all to left
2. test filter , search, pagination
     - [x] left "Device/Block Name" filter 
     - [x] right "Device/Block Name" filter 
     - [x] middle filter
     - [x] middle search
     - [ ] pagination
3. next to add prodile, data
    - [x] next
    - [x] prev
    - [x] auto fill block type
    - [x] if block, shortName = parameter name
    - [x] if parameter name is repeated && it is device tag -> parameter name add searialNo
    - [x] if parameter name is repeated && it is block tag -> parameter name do not need to add searialNo
    - [x] dataType: item.dataType % 10 => 
            1:Number(瞬时值), (i.g., Current)
            2:Discrete, (i.g., DigitalTest)
            3:String, (i.g., AlmCode)
            4:Number(累计值)
    - [x] description
    - [x] language.description : desc || ''
    - [x] engUnit : unit || ''
    - [x] language.engUnit : unit || ''
    - [x] groupRec: "0",
    - [x] recType: item.dataType % 10 === 4 ? 'Cumulative' : 'Current',
    - [x] rectRate: '0'
    - [x] dataKeptDays: 30
    - [x] maxChangeRatePerMin: item.dataType % 10 === 4 ? 100 : 1 
    - [x] dataType === "Number", spanHi: !isNaN(+item.spanHi) ? (''+item.spanHi) : "999999999",
    - [x] dataType === "Number", spanLo: !isNaN(+item.spanLo) ? (''+item.spanLo) : "-999999999",
    - [x] dataType === "Number", decimalPrecision: !isNaN(+item.decimalPrecision) ? item.decimalPrecision : 2
    - [x] dataType === "Discrete", descriptor: Object.keys(dictScope).length > 0 ? dictScope : {0: 0, 1: 1}
    - [x] edit a parameter -> make some change -> save
    - [x] use the profile to create object from profile -> select Pump1 -> save
 

## 2021/5/3
### Alice 
#### feature/forwarding-dialog

**Purpose**
1. [pageForwarding][change] move the fetch rule from dialog to the page
2. [pageForwarding][change] 
    1. get the rule from store when show dialog
    2. mark the param state before send
    3. change method and add isEdit
3. [pageForwarding][change] add get and store the rule
4. [pageForwarding][change] add call list update emit
5. [Component][change] trim the api url (avoid the /n or other symbol)
6. [BITabs][change] add right/left border when tab was active
7. [pageForwarding][change] lastQueryTime timestamp trans
8. [pageForwarding][change] the dialog ruleId judge timing
9. [BITabs][change] height & hover color change
10. [pageForwarding][change] disabled dropdown option and type filter
11. [pageForwarding][add] query status icon

**Test Case**
1. test for forwarding list
- check "Is MQTT&SQL disabled", in the "Create" drop-down list and the "Filter" checkbox.
   - [x] drop-down list
   - [x] checkbox
- query status test (by fake data)
   - [x] connectType = `API`, status = 200 ~ 299 => show green ✔
   - [x] connectType = `MQTT` or `SQL`, status = `success` => show green ✔
   - [x] connectType = `API`,  status < 200 or status > 299 => show red ✘ 
   - [x] connectType = `MQTT` or `SQL`,  status = `failed` or other string => show red ✘ 
- last query time
   - [x] show in yyyy-MM-dd hh:mm:ss format
2. test for forwarding dialog
- check method list
   - [x] remove `GET` options
   - [x] add `PATCH` options
- check APIUrlVariableInsertEditor component
   - [x] api url no /r/n or other extra symbols when transferring out
- edit dialog
   - [x] show existing data
- forwarding test and save
   - [x] save -> update param mark
   - [x] combine data -> test/save -> api response 200 -> edit -> check data existing
3. BI tabs
- for tabs style
   - [x] change darker colors for tabs hover
   - [x] add right and left border for active tabs
   - [x] reduce the tab bar height

## 2021/4/27
### Tingwei
#### [Fix][jsonEditor][sqlEditor] Empty initial value and deleting all text do not $emit.

**Purpose**
1. [Fix][jsonEditor][sqlEditor] Empty initial value and deleting all text do not $emit.

**Test Case**
1. test 1, uncomment <testJsonEditor/> and <testSqlEditor/> in page Plugin , and check $emit
    - [x] testJsonEditor : initial bodytestText value is undefined || null || ''
    - [x] testJsonEditor : input and delete all test
    - [x] testSqlEditor : initial bodytestText value is undefined || null || ''
    - [x] testSqlEditor : input and delete all test

## 2021/4/23
### Tingwei
#### [Fix][jsonEditor]key path parses to 'xxx.' mistakenly when the json is a root array. '\[xxx\]' is correct, etc.

**Purpose**
1. [Fix][jsonEditor]key path parses to 'xxx.' mistakenly when the json is a root array. '\[xxx\]' is correct.
2. [Fix][ResizeHandler] customResizeHandler merging mainPageResizeHandler causes dirty Objet reference. Fix by mixins.

**Test Case**
1. test 1, uncomment <testJsonEditor/> in page Plugin and click some key
    - [x] [0].a
    - [x] [2].arr[1].city
    - [x] [2].null

2. test 2 in device management
    - [x] >1920px - show sidebar, Device Status and Model Type do not change to the second line
    - [x] 1920px - default hidden sidebar, Device Status and Model Type do not move to the second line
    - [x] 1366px - default hidden sidebar, Device Status and Model Type move to the second line
    - [x] In chrome console, keyin document.getElementById('deviceList').__vue__.$_checkView, it's undefined. (it mixins customResizeHandler, not mainPageResizeHandler. $_checkView is a method of mainPageResizeHandler)

## 2021/4/22
### Alice 
#### feature/fix device tag type defaulttext

**Purpose**
1. [Devices][fix] fix device tag type's defaulttext in tag info list
2. [Devices][fix] fix key to match langresc

**Test Case**
1. check device -> taginfo type changed & type text lang change

## 2021/4/15
### Tingwei
#### [Change]"Current Time" -> "System Time", "Parameter Uploaded Time" -> "Parameter Time"

**Purpose**
1. [Change]"Current Time" -> "System Time", "Parameter Uploaded Time" -> "Parameter Time"

**Test Case**
1. test
    - [x] check parameter list ("Current Time" -> "System Time")
    - [x] select time dialog -> check "Current Time" -> "System Time", "Parameter Uploaded Time" -> "Parameter Time"

## 2021/4/14
### Tingwei
#### [Add][selectTimeDialog] Add selectTimeDialog( Never test real api ), etc.

**Purpose**
1. [Add][selectTimeDialog] Add selectTimeDialog.
2. [Change][bindTag] "bindTag.vue" supports dropdown list.

**Test Case**
1. test parameter list item
    - [x] url - no data source -> click '+' to set pure parameter
    - [x] url - no data source -> change to time -> click '+' -> use current time -> change time format -> save
    - [x] url - pure parameter -> change to time + parameter -> default timestamp + current time -> change time format -> save
    - [x] url - no data source -> change to time -> click '+' -> use parameter and add one -> save
    - [x] body - no data source -> click '+' to set pure parameter
    - [x] body - no data source -> change to time -> click '+' -> default timestamp + current time -> change time format -> save
    - [x] body - pure parameter -> change to time + parameter -> click '+' -> change time format -> save
    - [x] body - no data source -> change to time -> click '+' -> use parameter and add one -> save

2. 2. Time Format input field validation
    - [x] required
    - [x] max-length 64

#### [Fix][Forwarding] Fix "Value of the parameter table" font-weight and margin-bottom of "API URL" block.

**Purpose**
1. [Fix][Forwarding] Fix "Value of the parameter table" font-weight and margin-bottom of "API URL" block.

**Test Case**
1. test 
    - [x] "Value of the parameter table" font-weight
    - [x] margin-bottom of "API URL" block.


## 2021/04/09
### Alice
#### feature/forwarding-dialog

**Purpose**
1. [pageForwarding][fix] forwarding create api fix
2. [pageForwarding][add] add modules/forwarding.js (store authList for forwarding dialog)
3. [pageForwarding][add] forwarding list add new column
4. [pageForwarding][add] forwarding list edit & delete
5. [pageForwarding][add] forwarding dialog

**Test Case**
1. test for forwarding list
 - [x] show column correct
 - [x] show auth/rule edit dialog
 - [x] show delete auth/rule
2. test for forwarding dialog
 - [x] read the auth list
 - [x] create a forwarding rule

## 2021/04/8
### Tingwei
#### [Fix][Graph][Grouped Bar Chart] Fix "X Axis sample SVG" highlight.

**Purpose**
1.  [Fix][Graph][Grouped Bar Chart] Fix "X Axis sample SVG" highlight.

**Test Case**
1. test 
    - [x] graph X Axis
    - [x] graph Left Y Axis
    - [x] graph Right X Axis
    - [x] grouped bar chart X Axis
    - [x] grouped bar chart Left Y Axis
    - [x] grouped bar chart Right X Axis


#### [Fix] Fix, "tag info search API" searching "#MSYS_EdgeStatus" ( it contains hash char ) sends no keyword.

**Purpose**
1.  [Fix] Fix, "tag info search API" searching "#MSYS_EdgeStatus" ( it contains hash char ) sends no keyword.

**Test Case**
1. test 
    - [x] device management -> search "#MSYS_EdgeStatus" in side bar
    - [x] device management -> search "#" in side bar
    - [x] device management -> search "M" in side bar