Răsfoiți Sursa

zbytest003-2025-02-24 10:21:10

genlitex 2 luni în urmă
părinte
comite
0a9e2d6fcf

Fișier diff suprimat deoarece este prea mare
+ 4 - 0
dist/assets/index-ClHKwL9B.js


Fișier diff suprimat deoarece este prea mare
+ 0 - 0
dist/assets/index-DmYjOcLi.css


+ 14 - 0
dist/index.html

@@ -0,0 +1,14 @@
+<!doctype html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Vite + Vue</title>
+    <script type="module" crossorigin src="/ide/proxy/6009/assets/index-ClHKwL9B.js"></script>
+    <link rel="stylesheet" crossorigin href="/ide/proxy/6009/assets/index-DmYjOcLi.css">
+  </head>
+  <body>
+    <div id="app"></div>
+  </body>
+</html>

+ 18 - 0
src/router/index.js

@@ -1,11 +1,29 @@
 import { createRouter, createWebHashHistory } from 'vue-router'
 import HomeView from '../views/HomeView.vue'
+import LoginView from '../views/LoginView.vue'
+import PortalView from '../views/PortalView.vue'
+import UserStoryChatView from '../views/UserStoryChatView.vue'
 
 const routes = [
   {
     path: '/',
     name: 'home',
     component: HomeView
+  },
+  {
+    path: '/login',
+    name: 'login',
+    component: LoginView
+  },
+  {
+    path: '/portal',
+    name: 'portal',
+    component: PortalView
+  },
+  {
+    path: '/user-story',
+    name: 'user-story',
+    component: UserStoryChatView
   }
 ]
 

+ 79 - 0
src/views/LoginView.vue

@@ -0,0 +1,79 @@
+<template>
+  <div class="min-h-screen flex bg-gradient-to-br from-white to-purple-600">
+    <div class="w-full flex flex-col justify-center items-center p-8">
+      <div class="max-w-md w-full mx-auto">
+        <div class="mb-8">
+          <h2 class="text-3xl font-semibold text-white mb-2">Login</h2>
+        </div>
+
+        <form @submit.prevent="handleLogin" class="space-y-6">
+          <div>
+            <input
+                type="text"
+                v-model="username"
+                placeholder="请输入用户名"
+                class="w-60% px-4 py-3 rounded-lg bg-white border border-gray-300 text-gray-700 focus:outline-none focus:border-purple-500"
+            />
+          </div>
+
+          <div>
+            <input
+                type="password"
+                v-model="password"
+                placeholder="请输入密码"
+                class="w-60% px-4 py-3 rounded-lg bg-white border border-gray-300 text-gray-700 focus:outline-none focus:border-purple-500"
+            />
+          </div>
+
+          <div class="flex items-center">
+            <input
+                type="checkbox"
+                id="remember"
+                v-model="rememberMe"
+                class="w-4 h-4 rounded border-gray-300 bg-white text-purple-500 focus:ring-purple-500"
+            />
+            <label for="remember" class="ml-2 text-gray-700">记住我</label>
+          </div>
+
+          <div class="flex justify-between">
+            <a href="#/reset-password" class="text-purple-500 hover:text-purple-700">忘记密码?</a>
+            <select
+                v-model="language"
+                class="px-3 py-1.5 rounded bg-white border border-gray-300 text-gray-700 focus:outline-none focus:border-purple-500"
+            >
+              <option value="en">English</option>
+              <option value="zh">中文</option>
+            </select>
+          </div>
+
+          <button
+              type="submit"
+              class="w-30% py-3 rounded-lg bg-purple-500 hover:bg-purple-600 text-white font-medium transition-colors"
+          >
+            登录
+          </button>
+        </form>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { useRouter } from 'vue-router'
+
+const router = useRouter()
+
+const username = ref('')
+const password = ref('')
+const rememberMe = ref(false)
+const language = ref('zh')
+
+const handleLogin = () => {
+  if (username.value === 'admin' && password.value === 'admin') {
+    router.push('/portal')
+  } else {
+    alert('用户名或密码错误')
+  }
+}
+</script>

+ 50 - 0
src/views/PortalView.vue

@@ -0,0 +1,50 @@
+<template>
+  <div class="min-h-screen bg-gradient-to-br from-white to-purple-600 flex">
+    <!-- Sidebar -->
+    <nav class="w-64 bg-[#08002E] p-4 space-y-4">
+      <div class="flex items-center gap-2 mb-8">
+        <h1 class="text-18px font-bold text-white">门户</h1>
+      </div>
+
+      <!-- Navigation Items -->
+      <div class="space-y-2">
+        <a href="#/user-story" class="flex items-center gap-3 p-3 rounded-lg bg-[#1A103C] text-white hover:bg-[#1A103C]/80">
+          <span>生成用户故事模块</span>
+        </a>
+        <a href="#/test-script" class="flex items-center gap-3 p-3 rounded-lg bg-[#1A103C] text-white hover:bg-[#1A103C]/80">
+          <span>生成测试脚本模块</span>
+        </a>
+        <a href="#/intelligent-analysis" class="flex items-center gap-3 p-3 rounded-lg bg-[#1A103C] text-white hover:bg-[#1A103C]/80">
+          <span>智能项目分析模块</span>
+        </a>
+      </div>
+    </nav>
+
+    <!-- Main Content -->
+    <main class="flex-1 p-6 space-y-6 bg-gradient-to-br from-white to-purple-600">
+      <div class="grid md:grid-cols-2 gap-6">
+        <!-- Lightweight Version Module -->
+        <div class="p-6 rounded-2xl bg-white">
+          <h2 class="text-2xl font-semibold mb-2">轻量易用版模块</h2>
+          <p class="text-gray-700">包含生成用户故事模块和生成测试脚本模块。</p>
+        </div>
+
+        <!-- Intelligent Project Analysis Module -->
+        <div class="p-6 rounded-2xl bg-white">
+          <h2 class="text-2xl font-semibold mb-2">智能项目分析模块</h2>
+          <p class="text-gray-700">提供深入的项目分析功能。</p>
+        </div>
+      </div>
+    </main>
+  </div>
+</template>
+
+<script setup>
+import { useRouter } from 'vue-router'
+
+const router = useRouter()
+</script>
+
+<style>
+
+</style>

+ 118 - 0
src/views/UserStoryChatView.vue

@@ -0,0 +1,118 @@
+<template>
+  <div class="flex h-screen bg-gradient-to-br from-white to-purple-600">
+    <!-- Sidebar -->
+    <aside class="w-64 bg-[#08002E] text-white flex flex-col">
+      <div class="p-6">
+        <div class="flex items-center gap-2">
+          <div class="w-8 h-8 bg-purple-500 rounded-lg flex items-center justify-center">
+            <PlaySquare class="w-5 h-5" />
+          </div>
+          <span class="text-18px font-bold">门户</span>
+        </div>
+      </div>
+
+      <nav class="flex-1 px-4">
+        <div class="space-y-2">
+          <a href="#/portal" class="flex items-center gap-3 px-3 py-2 text-white rounded-lg hover:bg-[#1A103C]/80">
+            <span>返回门户网站</span>
+          </a>
+          <a href="#/user-story" class="flex items-center gap-3 px-3 py-2 text-white rounded-lg hover:bg-[#1A103C]/80">
+            <span>生成用户故事模块</span>
+          </a>
+        </div>
+
+        <div class="mt-8 mb-4 text-xs text-white px-3">聊天历史记录</div>
+        <div class="space-y-2">
+          <a v-for="(item, index) in chatHistory"
+             :key="index"
+             href="#"
+             class="flex items-center gap-3 px-3 py-2 text-white rounded-lg hover:bg-[#1A103C]/80">
+            <span>{{ item }}</span>
+          </a>
+        </div>
+      </nav>
+    </aside>
+
+    <!-- Main Content -->
+    <main class="flex-1 overflow-auto bg-gradient-to-br from-white to-purple-600">
+      <div class="max-w-4xl mx-auto p-8">
+        <div class="flex justify-between items-center mb-8">
+          <div>
+            <h1 class="text-2xl font-semibold mb-2">用户故事生成</h1>
+          </div>
+        </div>
+
+        <div class="bg-white p-6 rounded-lg shadow-sm mb-6">
+          <p class="text-gray-600">在这个区域进行聊天,我可以帮助你生成用户故事。</p>
+        </div>
+
+        <div class="flex flex-col space-y-4">
+          <div v-for="(message, index) in messages"
+               :key="index"
+               class="flex"
+               :class="{ 'justify-end': message.user === 'user' }">
+            <div class="p-3 rounded-lg"
+                 :class="{ 'bg-blue-200': message.user === 'user', 'bg-gray-200': message.user === 'system' }">
+              <p>{{ message.text }}</p>
+              <p v-if="message.file" class="text-sm text-gray-500">上传文件: {{ message.file }}</p>
+            </div>
+          </div>
+        </div>
+
+        <div class="flex gap-2 mt-4">
+          <div class="flex-1 relative">
+            <input
+                v-model="userInput"
+                type="text"
+                placeholder="输入你的消息..."
+                class="w-full p-3 pr-12 border rounded-lg"
+            />
+            <label for="file-upload" class="absolute right-4 top-1/2 -translate-y-1/2 text-gray-400 cursor-pointer">
+              <Upload class="w-5 h-5" />
+            </label>
+            <input
+                id="file-upload"
+                type="file"
+                class="hidden"
+                @change="handleFileUpload"
+            />
+          </div>
+          <button class="p-3 bg-purple-500 text-white rounded-lg hover:bg-purple-600"
+                  @click="sendMessage">
+            <Send class="w-5 h-5" />
+          </button>
+        </div>
+      </div>
+    </main>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { PlaySquare, Upload, Send } from 'lucide-vue-next'
+
+const userInput = ref('')
+const messages = ref([])
+const chatHistory = ref(['会话1', '会话2'])
+
+const sendMessage = () => {
+  if (userInput.value.trim()) {
+    messages.value.push({ user: 'user', text: userInput.value })
+    userInput.value = ''
+    setTimeout(() => {
+      messages.value.push({ user: 'system', text: '这是系统的回复。' })
+    }, 1000)
+  }
+}
+
+const handleFileUpload = (event) => {
+  const file = event.target.files[0]
+  if (file) {
+    messages.value.push({ user: 'user', text: '上传了文件', file: file.name })
+  }
+}
+</script>
+
+<style>
+
+</style>

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff