From 9cf06d77201f75b518133203614c989b7c9f39b2 Mon Sep 17 00:00:00 2001
From: husq <931347610@qq.com>
Date: Tue, 29 Aug 2023 18:12:36 +0800
Subject: [PATCH] 前端跨域配置、项目列表、登录、登出等功能对接、项目列表样式修改

---
 src/api/http/request.ts                                                           |   74 +++++++-------
 src/pages/page-web/index.vue                                                      |    2 
 src/pages/page-web/projects/project_list/list_page.vue/components/data.ts         |    9 +
 src/types/enums.ts                                                                |    2 
 vite.config.ts                                                                    |   11 ++
 src/pages/page-web/projects/project_list/index.vue                                |    2 
 src/api/manage.ts                                                                 |    6 
 src/pages/page-web/projects/project_list/list_page.vue/list.vue                   |   90 ++++++++++++++---
 src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue |   17 +-
 src/pages/page-web/projects/project_list/list_page.vue/data.ts                    |   15 ++
 src/api/project-page/index.ts                                                     |   14 ++
 11 files changed, 164 insertions(+), 78 deletions(-)

diff --git a/src/api/http/request.ts b/src/api/http/request.ts
index d03d57e..5505fd6 100644
--- a/src/api/http/request.ts
+++ b/src/api/http/request.ts
@@ -23,7 +23,7 @@
   config => {
     config.headers[ELocalStorageKey.Token] = getAuthToken()
     // config.headers[REQUEST_ID] = uuidv4()
-    config.baseURL = CURRENT_CONFIG.baseURL
+    // config.baseURL = CURRENT_CONFIG.baseURL
     return config
   },
   error => {
@@ -33,50 +33,50 @@
 
 instance.interceptors.response.use(
   response => {
-    console.info('URL: ' + response.config.baseURL + response.config.url, '\nData: ', response.data, '\nResponse:', response)
+    // console.info('URL: ' + response.config.baseURL + response.config.url, '\nData: ', response.data, '\nResponse:', response)
     if (response.data.code && !response.data.success) {
       message.error(response.data.message)
     }
     return response
   },
   err => {
-    const requestId = err?.config?.headers && err?.config?.headers[REQUEST_ID]
-    if (requestId) {
-      console.info(REQUEST_ID, ':', requestId)
-    }
-    console.info('url: ', err?.config?.url, `【${err?.config?.method}】 \n>>>> err: `, err)
-
-    let description = '-'
-    if (err.response?.data && err.response.data.message) {
-      description = err.response.data.message
-    }
-    if (err.response?.data && err.response.data.result) {
-      description = err.response.data.result.message
-    }
-    // @See: https://github.com/axios/axios/issues/383
-    if (!err.response || !err.response.status) {
-      message.error('The network is abnormal, please check the backend service and try again')
-      return
-    }
-    if (err.response?.status !== 200) {
-      message.error(`ERROR_CODE: ${err.response?.status}`)
-    }
-    // if (err.response?.status === 403) {
-    //   // window.location.href = '/'
+    message.error(`ERROR_INFO: ${err}`)
+    // const requestId = err?.config?.headers && err?.config?.headers[REQUEST_ID]
+    // if (requestId) {
+    //   console.info(REQUEST_ID, ':', requestId)
     // }
-    if (err.response?.status === 401) {
-      console.error(err.response)
-      const flag: number = Number(localStorage.getItem(ELocalStorageKey.Flag))
-      switch (flag) {
-        case EUserType.Web:
-          router.push(ERouterName.LOGIN)
-          break
-        case EUserType.Pilot:
-          router.push(ERouterName.PILOT)
-          break
-      }
-    }
+    // console.info('url: ', err?.config?.url, `【${err?.config?.method}】 \n>>>> err: `, err)
 
+    // let description = '-'
+    // if (err.response?.data && err.response.data.message) {
+    //   description = err.response.data.message
+    // }
+    // if (err.response?.data && err.response.data.result) {
+    //   description = err.response.data.result.message
+    // }
+    // // @See: https://github.com/axios/axios/issues/383
+    // if (!err.response || !err.response.status) {
+    //   message.error('The network is abnormal, please check the backend service and try again')
+    //   return
+    // }
+    // if (err.response?.status !== 200) {
+    //   message.error(`ERROR_CODE: ${err.response?.status}`)
+    // }
+    // // if (err.response?.status === 403) {
+    // //   // window.location.href = '/'
+    // // }
+    // if (err.response?.status === 401) {
+    //   console.error(err.response)
+    //   const flag: number = Number(localStorage.getItem(ELocalStorageKey.Flag))
+    //   switch (flag) {
+    //     case EUserType.Web:
+    //       router.push(ERouterName.LOGIN)
+    //       break
+    //     case EUserType.Pilot:
+    //       router.push(ERouterName.PILOT)
+    //       break
+    //   }
+    // }
     return Promise.reject(err)
   },
 )
diff --git a/src/api/manage.ts b/src/api/manage.ts
index 8df6a52..34afc15 100644
--- a/src/api/manage.ts
+++ b/src/api/manage.ts
@@ -2,7 +2,7 @@
 import request, { CommonListResponse, IListWorkspaceResponse, IPage, IWorkspaceResponse } from '/@/api/http/request'
 import { Device } from '/@/types/device'
 
-const HTTP_PREFIX = '/system/auth'
+const HTTP_PREFIX = 'system/auth'
 
 // login
 export interface LoginBody {
@@ -28,13 +28,13 @@
 }
 
 export const login = async function (body: LoginBody): Promise<IWorkspaceResponse<any>> {
-  const url = `${HTTP_PREFIX}/login/password`
+  const url = 'api/system/auth/login/password'
   const result = await request.post(url, body)
   return result.data
 }
 
 export const loginOut = async function (): Promise<IWorkspaceResponse<any>> {
-  const url = `${HTTP_PREFIX}/logout`
+  const url = `api/${HTTP_PREFIX}/logout`
   const result = await request.delete(url)
   return result.data
 }
diff --git a/src/api/project-page/index.ts b/src/api/project-page/index.ts
new file mode 100644
index 0000000..ecb63db
--- /dev/null
+++ b/src/api/project-page/index.ts
@@ -0,0 +1,14 @@
+import request, { CommonListResponse, IListWorkspaceResponse, IPage, IWorkspaceResponse } from '/@/api/http/request'
+
+const HTTP_PREFIX = 'drone/dj'
+
+type projectPage= {
+    status:string
+
+}
+
+export const getPage = async function (query:any): Promise<IWorkspaceResponse<any>> {
+  const url = `api/${HTTP_PREFIX}/project/getPage`
+  const result = await request.get(url, query)
+  return result.data
+}
diff --git a/src/pages/page-web/index.vue b/src/pages/page-web/index.vue
index 3dc169f..52d91b4 100644
--- a/src/pages/page-web/index.vue
+++ b/src/pages/page-web/index.vue
@@ -74,7 +74,7 @@
   if (result.success) {
     localStorage.setItem(ELocalStorageKey.Token, result.data.token)
     localStorage.setItem(ELocalStorageKey.Username, result.data.user.username)
-    localStorage.setItem(ELocalStorageKey.UserInfo, result.data.user)
+    localStorage.setItem(ELocalStorageKey.UserInfo, JSON.stringify(result.data.user))
     console.log(root)
     root.$router.push(ERouterName.PROJECT_LIST)
   }
diff --git a/src/pages/page-web/projects/project_list/index.vue b/src/pages/page-web/projects/project_list/index.vue
index 6be3319..43c5940 100644
--- a/src/pages/page-web/projects/project_list/index.vue
+++ b/src/pages/page-web/projects/project_list/index.vue
@@ -35,7 +35,7 @@
 
     .left_content {
         width: 370px;
-        min-height: 100vh;
+        max-height: 100vh;
         background-color: black;
         color: $text-white-basic;
     }
diff --git a/src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue b/src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue
index 320035d..1b22144 100644
--- a/src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue
+++ b/src/pages/page-web/projects/project_list/list_page.vue/components/ProjectList.vue
@@ -1,21 +1,21 @@
 <!--
  * @Author: 胡思旗 931347610@qq.com
  * @Date: 2023-08-28 15:23:47
- * @LastEditors: 胡思旗 931347610@qq.com
- * @LastEditTime: 2023-08-28 16:19:49
+ * @LastEditors: husq 931347610@qq.com
+ * @LastEditTime: 2023-08-29 16:54:18
  * @FilePath: \Cloud-API-Demo-Web\src\pages\page-web\projects\project_list\list_page.vue\components\ProjectList.vue
  * @Description:项目列表组件
  *
  * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
 -->
 <template>
-    <div class="project-box flex-display flex-align-center">
+    <div class="project-box">
         <div class="project-card" v-for="item in cardList" :key="item.id">
             <div class="project-left">
                 <div class="head mb10 flex-display flex-align-center flex-justify-between">
                     <div class="head-left flex-display flex-align-center">
-                        <a-tag color="#87d068">进行中</a-tag>
-                        <span class="head-text">5</span>
+                        <a-tag color="#87d068">{{status[item.projectStatus]}}</a-tag>
+                        <span class="head-text">{{ item.projectName }}</span>
                     </div>
                     <div class="head-right">
                         <a-dropdown>
@@ -37,11 +37,12 @@
                     </div>
                 </div>
                 <div class="wrapper">
-                    <div class="introduction mb10">5</div>
-                    <div class="time mb5">创建时间: 2023/08/28</div>
+                    <div class="introduction mb10">{{ item.projectIntro }}</div>
+                    <div class="time mb5">创建时间: {{ item.createTime }}</div>
                     <div class="manager mb5 flex-display flex-align-center">
                         <user-outlined />
-                        <div class="user_name ml10">接口活</div>
+                        <!-- {{item.memberList[0].userId}} -->
+                        <div class="user_name ml10">测试角色</div>
                     </div>
                 </div>
             </div>
diff --git a/src/pages/page-web/projects/project_list/list_page.vue/components/data.ts b/src/pages/page-web/projects/project_list/list_page.vue/components/data.ts
index a88b38d..e087f88 100644
--- a/src/pages/page-web/projects/project_list/list_page.vue/components/data.ts
+++ b/src/pages/page-web/projects/project_list/list_page.vue/components/data.ts
@@ -11,9 +11,10 @@
 }
 export type projectCard={
     id:string
-    status:number
-    name:string
-    introduction:string
-    create_time:string
+    projectStatus:number
+    projectName:string
+    projectIntro:string
+    createTime:string
     memberList: Array<Menber>
+    [key:string]:any
 }
diff --git a/src/pages/page-web/projects/project_list/list_page.vue/data.ts b/src/pages/page-web/projects/project_list/list_page.vue/data.ts
index 0ea626a..2640720 100644
--- a/src/pages/page-web/projects/project_list/list_page.vue/data.ts
+++ b/src/pages/page-web/projects/project_list/list_page.vue/data.ts
@@ -1,3 +1,4 @@
+export const map = new Map([['createTime', false], ['createTimeAsc', true], ['projectName', false], ['projectNameAsc', true]])
 export const statusOption = [
   { label: '全部状态', value: '' },
   { label: '进行中', value: '0' },
@@ -9,8 +10,14 @@
   { label: '未加入', value: '1' },
 ]
 export const sortOption = [
-  { label: '创建时间倒叙', value: '' },
-  { label: '创建时间正序', value: '0' },
-  { label: '项目名称倒叙', value: '1' },
-  { label: '项目名称正序', value: '1' },
+  { label: '创建时间倒叙', value: 'createTime' },
+  { label: '创建时间正序', value: 'createTimeAsc' },
+  { label: '项目名称倒叙', value: 'projectName' },
+  { label: '项目名称正序', value: 'projectNameAsc' },
 ]
+export enum sortEnum{
+  'createTime' = 'createTime',
+  'projectName' = 'projectName',
+  'createTimeAsc' = 'createTime',
+  'projectNameAsc' = 'projectName'
+}
diff --git a/src/pages/page-web/projects/project_list/list_page.vue/list.vue b/src/pages/page-web/projects/project_list/list_page.vue/list.vue
index cd54364..80d1f3c 100644
--- a/src/pages/page-web/projects/project_list/list_page.vue/list.vue
+++ b/src/pages/page-web/projects/project_list/list_page.vue/list.vue
@@ -9,21 +9,32 @@
     </div>
     <div class="side-filter-warp">
       <div class="side-filter flex-display flex-align-center flex-justify-between">
-        <Select :bordered="false" :options="statusOption" v-model="params.status" @handleChange="statusHandleChange" />
-        <Select :bordered="false" :options="projectOption" v-model="params.project" @handleChange="projectHandleChange" />
-        <Select :bordered="false" :options="sortOption" v-model="params.sort" @handleChange="sortHandleChange" />
+        <Select :bordered="false" :options="statusOption" v-model="params.projectStatus" @handleChange="handleChange" />
+        <Select :bordered="false" :options="projectOption" v-model="params.project" @handleChange="handleChange" />
+        <Select :bordered="false" :options="sortOption" v-model="sort" @handleChange="sortHandleChange" />
         <MonitorOutlined :style="{ fontSize: '24px', display: 'flex', alignItems: 'center', marginRight: '12px' }" />
       </div>
+      <div class="side-filter-input">
+        <a-input v-model:value="params.projectName" placeholder="按项目名称搜索">
+          <template #suffix>
+            <MonitorOutlined :style="{color: '#fff',fontSize: '18px'}" />
+          </template>
+        </a-input>
+      </div>
     </div>
-    <List />
+    <div class="wrap_card">
+      <List :cardList="cardList" />
+    </div>
     <!-- <button @click="goDetail">列表详情</button> -->
   </div>
 </template>
 
 <script setup lang="ts">
 import { ERouterName } from '/@/types/enums'
-import { statusOption, sortOption, projectOption } from './data'
+import { statusOption, sortOption, projectOption, map, sortEnum } from './data'
+import { getPage as getProjectPage } from '/@/api/project-page'
 import { PlusCircleOutlined, MonitorOutlined } from '@ant-design/icons-vue'
+import { projectCard } from './components/data'
 import Select from '/@/components/Search/Select.vue'
 import List from './components/ProjectList.vue'
 const router = useRouter()
@@ -31,25 +42,47 @@
   console.log(router, '==========')
   router.push({ name: ERouterName.WORKSPACE })
 }
-const params = reactive({
-  status: '',
+const params = ref({
+  projectStatus: '',
   project: '',
-  sort: '',
+  orders: [
+    {
+      column: 'createTime',
+      asc: map.get('createTime')
+    }
+  ],
+  projectName: '',
 })
-
-const statusHandleChange = (e: any) => {
-  console.log(e, params, '=============')
+const sort = ref('createTime')
+const cardList = ref<projectCard[]>([])
+// 全部状态、全部项目筛选方法
+const handleChange = (e: any) => {
+  console.log(e, params.value, '=============')
 }
-const projectHandleChange = (e: any) => {
-  console.log(e, params, '=============')
+// 排序方法
+const sortHandleChange = (e: string) => {
+  params.value.orders = [
+    {
+      column: sortEnum[e],
+      asc: map.get(e)
+    }
+  ]
 }
-const sortHandleChange = (e: any) => {
-  console.log(e, params, '=============')
+const init = async () => {
+  const res = await getProjectPage(params.value)
+  cardList.value = res.data.records
 }
+onMounted(() => {
+  init()
+})
 </script>
 
 <style scoped lang="scss">
 .project {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+
   .side-header {
     height: 60px;
     font-size: 16px;
@@ -76,23 +109,44 @@
     border-bottom: 1px solid #4f4f4f;
   }
 
+  .side-filter-input {
+    padding: 8px 12px 4px 12px;
+  }
+
   :deep(.ant-select-borderless .ant-select-selector) {
     background-color: #232323 !important;
     color: #fff !important;
     padding: 0 12px;
   }
-  :deep(.ant-select-dropdown){
+
+  :deep(.ant-select-dropdown) {
     background-color: #232323 !important;
   }
-  :deep(.ant-select-item-option-selected){
+
+  :deep(.ant-input) {
+    background: #101010;
+    border: none;
+    color: #fff;
+  }
+  :deep(.ant-input-affix-wrapper){
+    background: #101010;
+  }
+  :deep(.ant-select-item-option-selected) {
     color: #1180ff !important;
     background-color: #333333 !important;
   }
-  :deep(.ant-select-item.ant-select-item-option){
+
+  :deep(.ant-select-item.ant-select-item-option) {
     color: #fff !important;
   }
+
   :deep(.ant-select-arrow) {
     color: #fff !important;
   }
+
+  .wrap_card {
+    flex: 1;
+    overflow-y: auto;
+  }
 }
 </style>
diff --git a/src/types/enums.ts b/src/types/enums.ts
index 52ebf08..4419855 100644
--- a/src/types/enums.ts
+++ b/src/types/enums.ts
@@ -56,7 +56,7 @@
 export enum ELocalStorageKey {
     Username = 'username',
     WorkspaceId = 'workspace_id',
-    Token = 'x-auth-token',
+    Token = 'Authorization',
     PlatformName = 'platform_name',
     WorkspaceName = 'workspace_name',
     WorkspaceDesc = 'workspace_desc',
diff --git a/vite.config.ts b/vite.config.ts
index 27baa26..68fef87 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -56,7 +56,16 @@
   server: {
     open: true,
     host: '0.0.0.0',
-    port: 8080
+    port: 8080,
+    proxy: {
+      '/api': {
+        // 代理请求之后的请求地址(你的真实接口地址)
+        target: 'http://172.16.13.129:8100',
+        rewrite: path => path.replace(/^\/api/, ''),
+        // 跨域
+        changeOrigin: true
+      }
+    }
   },
   envDir: './env',
   resolve: {

--
Gitblit v1.9.3