Browse Source

zbytest003-2025-02-24 08:12:43

genlitex 2 tháng trước cách đây
mục cha
commit
3aff7215f5

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 4 - 0
dist/assets/index-BGxlk3xM.js


Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
dist/assets/index-JScoPS5J.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/6003/assets/index-BGxlk3xM.js"></script>
+    <link rel="stylesheet" crossorigin href="/ide/proxy/6003/assets/index-JScoPS5J.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 GenerateUserStoriesView from '../views/GenerateUserStoriesView.vue'
 
 const routes = [
   {
     path: '/',
     name: 'home',
     component: HomeView
+  },
+  {
+    path: '/login',
+    name: 'login',
+    component: LoginView
+  },
+  {
+    path: '/portal',
+    name: 'portal',
+    component: PortalView
+  },
+  {
+    path: '/generate-user-stories',
+    name: 'generate-user-stories',
+    component: GenerateUserStoriesView
   }
 ]
 

+ 89 - 0
src/views/GenerateUserStoriesView.vue

@@ -0,0 +1,89 @@
+<template>
+  <div class="min-h-screen flex bg-gradient-to-r from-white to-purple-600">
+    <!-- Left Sidebar -->
+    <aside class="w-64 bg-gradient-to-r from-white to-purple-600 text-white flex flex-col">
+      <div class="p-6">
+        <h1 class="text-xl font-semibold">聊天历史记录</h1>
+      </div>
+      <nav class="flex-1 px-4">
+        <div class="space-y-2">
+          <div v-for="(message, index) in chatHistory" :key="index" class="flex items-center gap-3 px-3 py-2 text-gray-300 rounded-lg hover:bg-white/20">
+            <div class="w-8 h-8 bg-gray-600 rounded-full flex items-center justify-center">
+              <UserIcon class="w-5 h-5 text-white" />
+            </div>
+            <span>{{ message.timestamp }}</span>
+          </div>
+        </div>
+      </nav>
+    </aside>
+
+    <!-- Main Content -->
+    <main class="flex-1 p-6 overflow-y-auto">
+      <div class="max-w-4xl mx-auto">
+        <!-- Chat Content -->
+        <div class="bg-white p-6 rounded-lg shadow-sm mb-6">
+          <div v-for="(message, index) in chatHistory" :key="index" class="mb-4">
+            <div v-if="message.sender === 'user'" class="flex justify-end">
+              <div class="max-w-sm p-3 rounded-lg bg-purple-600 text-white">
+                {{ message.content }}
+              </div>
+            </div>
+            <div v-else class="flex justify-start">
+              <div class="max-w-sm p-3 rounded-lg bg-gray-200 text-gray-900">
+                {{ message.content }}
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <!-- Chat Input -->
+        <div class="flex gap-2">
+          <div class="flex-1 relative">
+            <input
+                type="text"
+                v-model="newMessage"
+                placeholder="Type a message..."
+                class="w-full p-3 pr-12 border rounded-lg"
+            />
+            <UploadIcon class="absolute right-10 top-1/2 -translate-y-1/2 text-gray-400 cursor-pointer" @click="uploadFile" />
+          </div>
+          <button class="p-3 bg-purple-600 text-white rounded-lg hover:bg-purple-700" @click="sendMessage">
+            <SendIcon class="w-5 h-5" />
+          </button>
+        </div>
+      </div>
+    </main>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { User as UserIcon, Upload as UploadIcon, Send as SendIcon } from 'lucide-vue-next'
+
+const chatHistory = ref([
+  { sender: 'user', content: 'Hello!', timestamp: '10:00 AM' },
+  { sender: 'bot', content: 'Hi there! How can I assist you today?', timestamp: '10:01 AM' }
+])
+
+const newMessage = ref('')
+
+const sendMessage = () => {
+  if (newMessage.value.trim()) {
+    chatHistory.value.push({ sender: 'user', content: newMessage.value, timestamp: new Date().toLocaleTimeString() })
+    newMessage.value = ''
+    // Simulate bot response
+    setTimeout(() => {
+      chatHistory.value.push({ sender: 'bot', content: 'Thank you for your message.', timestamp: new Date().toLocaleTimeString() })
+    }, 1000)
+  }
+}
+
+const uploadFile = () => {
+  // Handle file upload logic here
+  alert('File upload functionality is not implemented yet.')
+}
+</script>
+
+<style scoped>
+/* Additional styles can be added here if needed */
+</style>

+ 73 - 0
src/views/LoginView.vue

@@ -0,0 +1,73 @@
+<template>
+  <div class="min-h-screen flex items-center justify-center bg-gradient-to-b from-white to-purple-600">
+    <div class="w-full max-w-md p-6 space-y-6 bg-white rounded-lg shadow-md">
+      <h2 class="text-3xl font-semibold text-center text-gray-900">Login</h2>
+      <form @submit.prevent="handleLogin" class="space-y-4">
+        <div>
+          <input
+            type="text"
+            v-model="username"
+            placeholder="Username"
+            class="w-full px-4 py-3 rounded-lg bg-gray-100 border border-gray-300 text-gray-900 focus:outline-none focus:border-purple-500"
+          />
+        </div>
+        <div>
+          <input
+            type="password"
+            v-model="password"
+            placeholder="Password"
+            class="w-full px-4 py-3 rounded-lg bg-gray-100 border border-gray-300 text-gray-900 focus:outline-none focus:border-purple-500"
+          />
+        </div>
+        <div class="flex items-center justify-between">
+          <div class="flex items-center">
+            <input
+              type="checkbox"
+              id="remember"
+              v-model="rememberMe"
+              class="w-4 h-4 rounded border-gray-300 bg-gray-100 text-purple-600 focus:ring-purple-500"
+            />
+            <label for="remember" class="ml-2 text-sm text-gray-900">Remember me</label>
+          </div>
+          <a href="#" class="text-sm text-purple-600 hover:text-purple-700">Forgot password?</a>
+        </div>
+        <button
+          type="submit"
+          class="w-full py-3 rounded-lg bg-purple-600 hover:bg-purple-700 text-white font-medium transition-colors"
+        >
+          Login
+        </button>
+        <div class="text-center text-sm text-gray-900">
+          Language:
+          <select
+            v-model="language"
+            class="px-3 py-1.5 rounded bg-gray-100 border border-gray-300 text-gray-900 focus:outline-none focus:border-purple-500"
+          >
+            <option value="en">English</option>
+            <option value="zh">中文</option>
+          </select>
+        </div>
+      </form>
+    </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('en')
+
+const handleLogin = () => {
+  if (username.value === 'admin' && password.value === 'admin') {
+    router.push('/portal')
+  } else {
+    alert('Invalid username or password')
+  }
+}
+</script>

+ 56 - 0
src/views/PortalView.vue

@@ -0,0 +1,56 @@
+<template>
+  <div class="min-h-screen flex bg-gradient-to-r from-white to-purple-600">
+    <!-- Left Sidebar -->
+    <nav class="w-64 bg-gradient-to-r from-white to-purple-600 p-4 space-y-4">
+      <div class="flex items-center gap-2 mb-8">
+        <h1 class="text-xl font-semibold">门户网站</h1>
+      </div>
+
+      <!-- Navigation Items -->
+      <div class="space-y-2">
+        <a href="#" class="flex items-center gap-3 p-3 rounded-lg bg-white/10 text-white/90 hover:bg-white/20">
+          <span>首页</span>
+        </a>
+      </div>
+    </nav>
+
+    <!-- Main Content -->
+    <main class="flex-1 p-6 space-y-6">
+      <!-- Lightweight Easy-to-Use Module -->
+      <section class="flex flex-col h-1/2 space-y-4">
+        <div class="p-6 rounded-2xl bg-white/10">
+          <h2 class="text-2xl font-semibold mb-2">轻量易用版模块</h2>
+          <div class="grid grid-cols-2 gap-4">
+            <div class="p-4 rounded-lg bg-white/20">
+              <h3 class="text-lg font-semibold mb-2">生成用户故事模块</h3>
+              <p class="text-white/70 mb-4">点击后跳转到生成用户故事界面。</p>
+              <a href="#/generate-user-stories" class="text-purple-600 hover:text-purple-700">生成用户故事</a>
+            </div>
+            <div class="p-4 rounded-lg bg-white/20">
+              <h3 class="text-lg font-semibold mb-2">生成测试脚本模块</h3>
+              <p class="text-white/70 mb-4">暂定功能。</p>
+              <button class="px-4 py-2 bg-purple-600 rounded-lg hover:bg-purple-700 transition-colors text-white">
+                生成测试脚本
+              </button>
+            </div>
+          </div>
+        </div>
+      </section>
+
+      <!-- Intelligent Project Analysis Module -->
+      <section class="flex flex-col h-1/2 space-y-4">
+        <div class="p-6 rounded-2xl bg-white/10">
+          <h2 class="text-2xl font-semibold mb-2">智能项目分析模块</h2>
+          <p class="text-white/70 mb-4">功能待定,未来版本中将添加更多数据分析功能。</p>
+        </div>
+      </section>
+    </main>
+  </div>
+</template>
+
+<script setup>
+</script>
+
+<style scoped>
+/* Add any additional styles if needed */
+</style>

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác