Преглед изворни кода

Merge branch 'fix' into dev

hkshu12 пре 5 година
родитељ
комит
f153904d95

+ 7 - 1
src/App.vue

@@ -8,7 +8,7 @@
 </template>
 
 <script lang="ts">
-import { defineComponent } from 'vue';
+import { defineComponent, onMounted } from 'vue';
 import Menu from '@/components/Menu.vue';
 
 import { getVariableFromQueryString } from '@/utils/qs';
@@ -27,6 +27,12 @@ export default defineComponent({
 
     UserDispatcher.updateUserInfo();
     WorkspaceDispatcher.refreshProjectList();
+
+    onMounted(() => {
+      window.onbeforeunload = () => {
+        localStorage.setItem('workspace', JSON.stringify(store.state.workspace));
+      };
+    });
   },
 });
 </script>

+ 1 - 0
src/components/BugAddDrawer.vue

@@ -57,6 +57,7 @@ import { BugListAPI } from '../api';
 
 export default {
   name: 'BugAddDrawer',
+  emits: ['finish-add'],
   data() {
     return {
       showDrawer: false,

+ 6 - 4
src/components/BugEditDrawer.vue

@@ -115,8 +115,8 @@
                       </el-input-number>
                     </div>
                   </RowItem>
-                  <RowItem :label="'开始时间:'"><span>{{startTime}}</span></RowItem>
-                  <RowItem :label="'完成时间:'"><span>{{endTime}}</span></RowItem>
+                  <RowItem :label="'开始时间:'"><span>{{formatter(startTime)}}</span></RowItem>
+                  <RowItem :label="'完成时间:'"><span>{{formatter(endTime)}}</span></RowItem>
                 </el-col>
               </el-row>
               <el-row v-if="isEditing" class="entry-row" style="margin-top: 15px">
@@ -130,8 +130,8 @@
                 <el-table :data="commits">
                   <el-table-column type="expand">
                     <template #default="scope">
-                      <RowItem :label="'message:'" label-span="5" value-span="19">{{scope.row.message}}</RowItem>
-                      <RowItem :label="'timestamp:'" label-span="5" value-span="19">{{scope.row.timestamp}}</RowItem>
+                      <RowItem :label="'message:'" :label-span="5" :value-span="19">{{scope.row.message}}</RowItem>
+                      <RowItem :label="'timestamp:'" :label-span="5" :value-span="19">{{scope.row.timestamp}}</RowItem>
                     </template>
                   </el-table-column>
                   <el-table-column
@@ -167,6 +167,7 @@ import { BugListAPI } from '@/api';
 import PriorityTag from '@/components/PriorityTag.vue';
 import StateTag from '@/components/StateTag.vue';
 import { priorityOptions, stateOptions } from '@/utils/constants';
+import { formatter } from '@/utils/time';
 import RowItem from './RowItem.vue';
 
 export default {
@@ -210,6 +211,7 @@ export default {
     },
   },
   methods: {
+    formatter,
     show() {
       this.showDrawer = true;
     },

+ 5 - 2
src/components/GeneralTable.vue

@@ -53,13 +53,13 @@
       width="100"
     ></ElTableColumn>
     <ElTableColumn
-      prop="startTime"
       label="开始时间"
+      :formatter="(row) => formatter(row.startTime)"
       align="center"
     ></ElTableColumn>
     <ElTableColumn
-      prop="endTime"
       label="结束时间"
+      :formatter="(row) => formatter(row.endTime)"
       align="center"
     ></ElTableColumn>
     <ElTableColumn
@@ -87,6 +87,8 @@ import StateTag from '@/components/StateTag.vue';
 import PriorityTag from '@/components/PriorityTag.vue';
 import { ElTable } from 'element-plus';
 
+import { formatter } from '@/utils/time';
+
 interface Record {
   commits: Array<CommitRecord>;
   description: string;
@@ -135,6 +137,7 @@ export default defineComponent({
       tableRef,
       clearFilter,
       add,
+      formatter,
     };
   },
 });

+ 6 - 4
src/components/RequirementDrawer.vue

@@ -115,8 +115,8 @@
                       </el-input-number>
                     </div>
                   </RowItem>
-                  <RowItem :label="'开始时间:'"><span>{{startTime}}</span></RowItem>
-                  <RowItem :label="'完成时间:'"><span>{{endTime}}</span></RowItem>
+                  <RowItem :label="'开始时间:'"><span>{{formatter(startTime)}}</span></RowItem>
+                  <RowItem :label="'完成时间:'"><span>{{formatter(endTime)}}</span></RowItem>
                 </el-col>
               </el-row>
               <!-- 相关需求 -->
@@ -146,8 +146,8 @@
                 <el-table :data="commits">
                   <el-table-column type="expand">
                     <template #default="scope">
-                      <RowItem :label="'message:'" label-span="5" value-span="19">{{scope.row.message}}</RowItem>
-                      <RowItem :label="'timestamp:'" label-span="5" value-span="19">{{scope.row.timestamp}}</RowItem>
+                      <RowItem :label="'message:'" :label-span="5" :value-span="19">{{scope.row.message}}</RowItem>
+                      <RowItem :label="'timestamp:'" :label-span="5" :value-span="19">{{scope.row.timestamp}}</RowItem>
                     </template>
                   </el-table-column>
                   <el-table-column
@@ -183,6 +183,7 @@ import { RequirementAPI } from '@/api';
 import PriorityTag from '@/components/PriorityTag.vue';
 import StateTag from '@/components/StateTag.vue';
 import { priorityOptions, stateOptions } from '@/utils/constants';
+import { formatter } from '@/utils/time';
 import RowItem from './RowItem.vue';
 
 export default {
@@ -233,6 +234,7 @@ export default {
     },
   },
   methods: {
+    formatter,
     show() {
       this.showDrawer = true;
     },

+ 5 - 1
src/store/modules/workspace.ts

@@ -18,6 +18,10 @@ const DEFAULT: WorkspaceState = {
   projectList: [],
 };
 
+const FROM_LOCAL_STORAGE = JSON.parse(localStorage.getItem('workspace') || '{}');
+
+const INIT = Object.keys(FROM_LOCAL_STORAGE).length > 0 ? FROM_LOCAL_STORAGE : DEFAULT;
+
 const actions: ActionTree<WorkspaceState, RootState> = {
   async refreshProjectList({ commit }) {
     const projectList = (await ProjectAPI.getProjectListByUserId()) || [];
@@ -74,7 +78,7 @@ const getters: GetterTree<WorkspaceState, RootState> = {
 };
 
 export const workspace: Module<WorkspaceState, RootState> = {
-  state: () => DEFAULT,
+  state: () => INIT,
   actions,
   mutations,
   getters,

+ 11 - 0
src/utils/time.ts

@@ -0,0 +1,11 @@
+export const formatter = (timestamp: string | null) => {
+  if (!timestamp) return '';
+  const date = new Date(timestamp);
+  const year = date.getFullYear();
+  const month = `0${date.getMonth() + 1}`.substr(-2, 2);
+  const day = `0${date.getDate()}`.substr(-2, 2);
+  const hour = `0${date.getHours()}`.substr(-2, 2);
+  const minute = `0${date.getMinutes()}`.substr(-2, 2);
+  const second = `0${date.getSeconds()}`.substr(-2, 2);
+  return `${year}/${month}/${day} ${hour}:${minute}:${second}`;
+};

+ 6 - 5
src/views/Project/Pipeline.vue

@@ -23,7 +23,7 @@
         <ElTableColumn
           label="最近执行时间"
           align="center"
-          :formatter="(row) => timeFormatter(row, 'startTime')"
+          :formatter="(row) => formatter(row.startTime)"
         ></ElTableColumn>
         <ElTableColumn
           prop="result"
@@ -115,7 +115,7 @@
           <ElTableColumn
             label="执行时间"
             align="center"
-            :formatter="(row) => timeFormatter(row, 'startTime')"
+            :formatter="(row) => formatter(row.startTime)"
           ></ElTableColumn>
         </ElTable>
       </ElDialog>
@@ -210,7 +210,7 @@
         <ElTableColumn
           label="部署时间"
           align="center"
-          :formatter="(row) => timeFormatter(row, 'deployedTime')"
+          :formatter="(row) => formatter(row.deployedTime)"
         ></ElTableColumn>
         <ElTableColumn
           label="URL"
@@ -253,6 +253,8 @@ import jsonlint from '@/utils/jsonlint';
 import { PipelineAPI } from '@/api';
 import debounce from '@/utils/debounce';
 
+import { formatter } from '@/utils/time';
+
 export default {
   data() {
     return {
@@ -281,8 +283,7 @@ export default {
     this.templates = await PipelineAPI.getPipelineTemplates();
   },
   methods: {
-    timeFormatter: (row, property) => `${row[property].year}/${row[property].month}/${row[property].day} `
-            + `${row[property].hours}:${row[property].minutes}:${row[property].seconds}`,
+    formatter,
     async handleClick(action, id) {
       switch (action) {
         case 'create': {