浏览代码

薪资模块

zhengnaiwen_citu 2 月之前
父节点
当前提交
928af40ff3

+ 19 - 3
src/api/dataChart.js

@@ -12,11 +12,27 @@ export function addFeedback (data) {
 }
 
 // 获取指定用户user_id的最近N次的会话信息
-export function getConversations (data) {
-  return http.get('/vanna/v0/user/guest/conversations', data)
+export function getConversations (id, data) {
+  return http.get(`/vanna/v0/user/${id}/conversations`, data)
 }
 
-// 获取指定用户user_id的最近N次的会话信息
+// 获取会话信息明细
 export function getConversationsById (id) {
   return http.get(`/vanna/v0/conversation/${id}/messages`)
 }
+
+// react 模式
+// 问答
+export function getAskThroughReact (data, config) {
+  return http.post('/vanna/v0/ask_react_agent', data, config)
+}
+
+// 获取指定用户user_id的最近N次的会话信息
+export function getConversationsThroughReact (id, data) {
+  return http.get(`/vanna/v0/react/direct/users/${id}/conversations`, data)
+}
+
+// 获取会话信息明细
+export function getConversationsByIdThroughReact (threadId) {
+  return http.get(`/vanna/v0/react/direct/conversations/${threadId}`)
+}

+ 24 - 5
src/components/MTable/index.vue

@@ -1,13 +1,32 @@
 <template>
-  <v-data-table
-    v-bind="$attrs"
-    v-on="$listeners"
-  ></v-data-table>
+  <div>
+    <v-data-table
+      v-bind="$attrs"
+      v-on="$listeners"
+      hide-default-footer
+    ></v-data-table>
+    <v-divider></v-divider>
+    <v-pagination
+      v-model="page"
+      :length="total"
+    ></v-pagination>
+  </div>
 </template>
 
 <script>
 export default {
-  name: 'MTable'
+  name: 'MTable',
+  props: {
+    total: {
+      type: Number,
+      default: 0
+    }
+  },
+  data () {
+    return {
+      page: 1
+    }
+  }
 }
 </script>
 

+ 6 - 0
src/router/defaultRoute.js

@@ -14,6 +14,12 @@ const base = [
         name: 'home',
         meta: { title: '首页' },
         component: () => import('@/views/home/index')
+      },
+      {
+        path: '/react',
+        name: 'react',
+        meta: { title: 'react模式' },
+        component: () => import('@/views/react/index')
       }
     ]
   },

+ 20 - 6
src/views/home/dataChartEditChat.vue

@@ -229,11 +229,17 @@
 <script>
 import {
   getAsk,
+  getAskThroughReact,
   addFeedback
 } from '@/api/dataChart'
 import { mapGetters } from 'vuex'
 export default {
   name: 'dataChartEditChat',
+  inject: {
+    react: {
+      default: false
+    }
+  },
   data () {
     return {
       routingMode: undefined,
@@ -320,12 +326,20 @@ export default {
       this.question = ''
       try {
         this.abortController = new AbortController()
-        const { data } = await getAsk({
-          question,
-          user_id: this.userInfo.id,
-          routing_mode: this.routingMode,
-          conversation_id: this.conversationId
-        }, {
+        const getApi = this.react ? getAskThroughReact : getAsk
+        const query = this.react
+          ? {
+              question,
+              user_id: this.userInfo.id,
+              conversation_id: this.conversationId
+            }
+          : {
+              question,
+              user_id: this.userInfo.id,
+              routing_mode: this.routingMode,
+              conversation_id: this.conversationId
+            }
+        const { data } = await getApi(query, {
           signal: this.abortController.signal
         })
         ask.content = data

+ 55 - 21
src/views/home/homeSide.vue

@@ -1,19 +1,18 @@
 <template>
   <v-navigation-drawer
     class="grey lighten-4 navigation"
-    dark
+    :dark="!react"
     permanent
   >
     <template v-slot:prepend>
-      <v-list-item light>
+      <v-list-item :light="!react">
         <v-list-item-content>
-          <v-list-item-title class="text-h6">AI取数</v-list-item-title>
+          <v-list-item-title class="text-h6">AI取数 <small class="indigo--text">{{ react ? '(REACT模式)' : '' }}</small></v-list-item-title>
           <!-- <v-list-item-subtitle>Logged In</v-list-item-subtitle> -->
         </v-list-item-content>
       </v-list-item>
       <slot name="header"></slot>
     </template>
-    <v-divider light></v-divider>
     <!-- <v-card elevation="0" style="background-color: unset;" :loading="loading"> -->
       <div class="text-center" v-if="loading">
         <v-progress-circular
@@ -21,7 +20,7 @@
           color="primary"
         ></v-progress-circular>
       </div>
-      <v-list dense light>
+      <v-list dense :light="!react">
         <v-list-item-group
           v-model="selected"
           color="primary"
@@ -41,19 +40,26 @@
 
     <template v-slot:append>
       <div class="pa-2">
-        <!-- <v-btn class="mb-3" color="indigo" block outlined @click="$router.push('/knowledge-base')">
-          产品知识库
-        </v-btn>
-        <v-btn class="mb-3" color="indigo" block outlined @click="$router.push('/data-assets')">
-          数据资产
-        </v-btn>
-        <v-btn class="mb-3" color="indigo" block outlined @click="$router.push('/my-chart')">
+        <div class="d-flex justify-space-around text-center mb-3">
+          <div
+            v-for="(item, index) in fabItems"
+            :key="index"
+          >
+            <v-btn fab :color="item.color" x-small depressed @click="$router.push(item.to)">
+              <v-icon>{{ item.icon }}</v-icon>
+            </v-btn>
+            <div class="text-caption" :class="item.textColor">
+              {{ item.text }}
+            </div>
+          </div>
+        </div>
+        <v-btn class="mb-3" color="indigo" block @click="$router.push('/my-chart')">
           我的图表
         </v-btn>
-        <v-btn class="mb-3" color="indigo" block outlined @click="$router.push('/team-chart')">
-          团队共享
-        </v-btn> -->
-        <v-btn block @click="handleLogout">
+        <v-btn class="mb-3" block color="indigo" @click="handleReact">
+          切换{{ react ? 'ASK模式' : 'REACT模式' }}
+        </v-btn>
+        <v-btn block color="indigo" @click="handleLogout">
           Logout
         </v-btn>
       </div>
@@ -64,17 +70,34 @@
 <script>
 import {
   getConversations,
-  getConversationsById
+  getConversationsById,
+  getConversationsThroughReact,
+  getConversationsByIdThroughReact
 } from '@/api/dataChart'
+import { mapGetters } from 'vuex'
 export default {
   name: 'homeSide',
+  inject: {
+    react: {
+      default: false
+    }
+  },
   data () {
     return {
+      loading: false,
       selected: null,
       lastSelected: null,
-      conversationList: []
+      conversationList: [],
+      fabItems: [
+        { icon: 'mdi-database', text: '产品知识库', color: 'indigo', textColor: 'indigo--text', to: '/knowledge-base' },
+        { icon: 'mdi-assistant', text: '数据资产', color: 'indigo', textColor: 'indigo--text', to: '/data-assets' },
+        { icon: 'mdi-account-multiple-check-outline', text: '团队共享', color: 'indigo', textColor: 'indigo--text', to: '/team-chart' }
+      ]
     }
   },
+  computed: {
+    ...mapGetters(['userInfo'])
+  },
   created () {
     this.getConversationList()
   },
@@ -82,7 +105,8 @@ export default {
     async getConversationList () {
       this.loading = true
       try {
-        const { data } = await getConversations({ limit: 5 })
+        const subApi = this.react ? getConversationsThroughReact : getConversations
+        const { data } = await subApi(this.userInfo.id, { limit: 5 })
         this.conversationList = data.conversations
         this.selected = null
       } catch (error) {
@@ -92,7 +116,7 @@ export default {
       }
     },
     async onSelectConversation (index) {
-      if (!index && typeof index !== 'number') {
+      if (index === null) {
         setTimeout(() => {
           this.selected = this.lastSelected
         })
@@ -100,7 +124,8 @@ export default {
       }
       this.lastSelected = index
       try {
-        const { data } = await getConversationsById(this.conversationList[index].conversation_id)
+        const getApi = this.react ? getConversationsByIdThroughReact : getConversationsById
+        const { data } = await getApi(this.conversationList[index].conversation_id)
         this.$emit('update', data)
       } catch (error) {
         this.$snackbar.error(error)
@@ -109,6 +134,15 @@ export default {
 
     handleLogout () {
       this.$store.dispatch('user/userLogout')
+    },
+    handleReact () {
+      if (this.react) {
+        // this.$router.push('/home')
+        window.open('/home', '_blank')
+        return
+      }
+      window.open('/react', '_blank')
+      // this.$router.push('/react')
     }
   }
 }

+ 9 - 1
src/views/home/index.vue

@@ -20,7 +20,7 @@
       <div v-if="showChart" class="chart-list heightFull overflow-y-auto mr-3">
         <div v-for="item in items" :key="item.key" class="chart-type mb-3" @click="onChange(item.key)">
           <div>
-            <span class="mdi" :class="item.icon"></span>
+            <span class="mdi indigo--text" :class="item.icon"></span>
           </div>
           <div>
             {{ item.title }}
@@ -87,6 +87,11 @@ export default {
     FullscreenToggle,
     HomeSide
   },
+  inject: {
+    react: {
+      default: false
+    }
+  },
   data () {
     return {
       showChart: false,
@@ -111,6 +116,9 @@ export default {
       }).sort((a, b) => a.sort - b.sort)
     }
   },
+  created () {
+    console.log(this.react)
+  },
   methods: {
     onNew () {
       this.$refs.dataChartEditChatRefs.onNew()

+ 18 - 1
src/views/knowledgeBase/index.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="pa-3">
-    <m-table></m-table>
+    <m-table
+      :headers="headers"
+    ></m-table>
   </div>
 </template>
 
@@ -10,6 +12,21 @@ export default {
   name: 'knowledgeBase',
   components: {
     MTable
+  },
+  data () {
+    return {
+      headers: [{
+        text: '业务机构',
+        align: 'start',
+        sortable: false,
+        value: 'name'
+      },
+      { text: '业务名称', value: 'calories' },
+      { text: '关键词', value: 'fat' },
+      { text: '时间', value: 'carbs' },
+      { text: '附件', value: 'protein' },
+      { text: '操作', value: 'iron' }]
+    }
   }
 }
 </script>

+ 20 - 0
src/views/react/index.vue

@@ -0,0 +1,20 @@
+<template>
+  <HomePage></HomePage>
+</template>
+
+<script>
+import HomePage from '../home'
+export default {
+  name: 'reactPage',
+  components: {
+    HomePage
+  },
+  provide: {
+    react: true
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>