###### tags: `會議紀錄` ###### Thunder:`行動版 #日期區間JSON放型別Date時區問題` ###### CodeReview :`工時系統 更新機制 service worker json` ###### CodeReview A1: `special.gaurd` `getExportColumnKeys` ###### CodeReview OSS: `OSS EDM Editer` ###### Announcement: ###### Attendee: 政儀、永佳、偉恩、弘翊、政儒 # 📌[R]2020/05/27前端會議 ## 踩雷事件 ### ⚡行動版 #日期區間JSON放型別Date時區問題 在開發行動版上的應收帳款對帳單時,發現資料會有異常的問題(資料與WEB版不一致)。我比對了WEB版與行動版傳給後端的參數,發現行動版的日期會與選擇的不一致。 **#行動版concole值與實際傳給後端的值👇** > console出來的日期與API傳送的日期,起訖相差了一天。 * [console] 前端要給後端的參數 ![console前端要給後端的參數](https://i.imgur.com/tam42Im.png) `起始日期: 2020 05 00 00:00:00 GMT+0800` `結束日期: 2020 05 31 00:00:00 GMT+0800` * [Network] Post API 前端給後端的參數 ![Network前端給後端的參數](https://i.imgur.com/RyqtsWZ.png) `起始日期: 2020-04-30 T16:00:00.000Z` `結束日期: 2020-05-30 T16:00:00.000Z` JSON為了可以支持用戶在不同的時區,因此會忽略日期的時區資訊轉並為UTC標準時間,才造成日期不一致的問題。 > JSON使用Date.prototype.toISOString不代表本地時間而是未經修改的UTC時間 > (給大家參考網路上的解決方法) > 1.存入的日期與顯示的日期分開處理,顯示日期在取得日期後再加上時區。 > 2.改寫Date.prototype.toISOString 但目前我是直接把日期轉成字串😂 [JSON Stringify changes time of date because of UTC](https://stackoverflow.com/questions/1486476/json-stringify-changes-time-of-date-because-of-utc) [JSON日期轉換的時區陷阱](https://blog.darkthread.net/blog/json-date-timezone-issue/) ## 寫法交流 ### ⛏special.gaurd 永佳寫的新路由元件,目前已經可以拿來使用。 ### ⛏OSS EDM Editer 由於舊的Editer太老舊,所以服務希望可以換一個新的套件。 弘翊在做EDM的時候覺得一個按鈕樣式可以分享給大家,這樣式需要做許多個class來呈現。 ```css= .flexBtns { display: flex; justify-content: space-between; } .editBtn { position: relative; padding: 5px 15px; border-radius: 4px; border: none; background-size: 200% auto; font-size: 110%; color: #FFF; background-image: linear-gradient(to right, #a4b8da 0%, #7190c5 51%, #a4b8da 100%); outline: none; cursor: pointer; transition: 0.2s; } .editBtn:hover::before { background: rgba(255, 255, 255, 0.2); } .editBtn:active::before { background: rgba(0, 0, 0, 0.05); box-shadow: inset 0 2px 5px rgba(0, 0, 0, 0.5); } .editBtn::before { content: ''; width: 100%; height: 100%; position: absolute; top: 0; left: 0; background: transparent; border-radius: 4px; transition: 0.2s; pointer-events: none; } .editBtn.purple { background-image: linear-gradient(to right, #cda4da 0%, #b271c5 51%, #cda4da 100%); } .editBtn.blue { background-image: linear-gradient(to right, #a4b8da 0%, #7190c5 51%, #a4b8da 100%); } /* Auto Save */ .autoSave { display: flex; align-items: center; } .autoSave p { margin: 0 5px 0 20px; } .autoSave input { display: none; } .autoSave input:checked ~ .checkBoxHolder { background: #afc6ee; } .autoSave input:checked ~ .checkBoxHolder .circle { left: 20px; } .autoSave input:checked ~ .checkBoxHolder::before { border: solid 1px #7190c5; } .autoSave input:checked ~ .checkBoxHolder .circle::before { animation: circle 0.4s linear forwards; } .autoSave .checkBoxHolder { position: relative; width: 43px; height: 26px; background: #FFFFFF; border-radius: 50px; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.5); /* overflow: hidden; */ transition: 0.5s 0.1s; cursor: pointer; } .autoSave .checkBoxHolder::before { content: ''; position: absolute; width: 30px; height: 16px; top: 50%; left: 50%; opacity: 0.5; border: solid 1px #c7c7c7; border-radius: 50px; transform: translate(-50%, -50%); transition: 0.5s 0.1s; } .autoSave .checkBoxHolder .circle { position: absolute; top: 3px; left: 3px; width: 20px; height: 20px; border-radius: 50%; background: #FFFFFF; box-shadow: 0 1px 5px #252525; transition: 0.5s 0.1s; } .autoSave .checkBoxHolder .circle::before { content: ''; position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; border-radius: 50%; background: rgba(16, 103, 253, 0.9); transform: translate(-50%, -50%); } .autoSave .checkBoxHolder .circle::after { content: ''; position: absolute; top: 50%; left: 50%; width: 100%; height: 100%; border-radius: 50%; background: #FFFFFF; transform: translate(-50%, -50%); } @keyframes circle { 0% { transform: translate(-50%, -50%) scale(1); opacity: 1; } 100% { transform: translate(-50%, -50%) scale(3); opacity: 0; } } ``` ### ⛏工時系統 更新機制 service worker json 政儀嘗試新更新機制,調整在工時系統裡,所以最近才會看到右下角有奇怪的訊息跑出來(但要升級V9才可以使用此套件,所以政儀將工時系統升級到9)。 希望可以嘗試讓A1不需要有轉圈圈的東西 * 這部分講了很多東西,但我有點忘記+不太了解,所以沒有詳細記錄QQ ### ⛏getExportColumnKeys 在許多作業裡會使用到轉出的功能,但我們在後續維護作業時,很容易在增減欄位時忘記修改輸出的欄位,因此政儀建議可以直接拿grid的header,就不用怕在調整欄位的時候忘記調整轉出這部分。 ==舊寫法 #將要轉出的欄位加到陣列裡== ```typescript /** 取得轉出的column */ getExportColumnKeys(): string[] { const columnKeys = ['ShowSeq_']; return columnKeys; } ``` ==新寫法 #畫面上的欄位都加到陣列裡== ```typescript /** 取得轉出的column */ getExportColumnKeys(): string[] { const columnKeys: string[] = []; this.gridColumnDefs.forEach((x) => { if (x.colId !== 'isSelected' && x.colId !== 'action') { columnKeys.push(x.colId); } }); return columnKeys; } ``` ## 事情公告 ### 📢無事情公告