Browse Source

zbytest003-2025-02-28 04:02:04

genlitex 2 months ago
parent
commit
4e09d19952

File diff suppressed because it is too large
+ 4 - 0
dist/assets/index-BtNtMvdM.js


File diff suppressed because it is too large
+ 0 - 0
dist/assets/index-CMExf0Zs.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/6005/assets/index-BtNtMvdM.js"></script>
+    <link rel="stylesheet" crossorigin href="/ide/proxy/6005/assets/index-CMExf0Zs.css">
+  </head>
+  <body>
+    <div id="app"></div>
+  </body>
+</html>

+ 19 - 1
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',
+    name: 'Home',
     component: HomeView
+  },
+  {
+    path: '/login',
+    name: 'Login',
+    component: LoginView
+  },
+  {
+    path: '/portal',
+    name: 'Portal',
+    component: PortalView
+  },
+  {
+    path: '/user-story',
+    name: 'UserStory',
+    component: UserStoryChatView
   }
 ]
 

+ 69 - 0
src/views/LoginView.vue

@@ -0,0 +1,69 @@
+<template>
+  <div class="min-h-screen bg-gradient-to-r from-white to-purple-500 flex items-center justify-center">
+    <div class="bg-white p-8 rounded-lg shadow-md w-full max-w-sm">
+      <h2 class="text-2xl font-bold mb-6">登录</h2>
+      <form @submit.prevent="handleLogin">
+        <div class="mb-4">
+          <label for="username" class="block text-gray-700 font-bold mb-2">用户名</label>
+          <input v-model="username" type="text" id="username" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline" placeholder="Username">
+        </div>
+        <div class="mb-4">
+          <label for="password" class="block text-gray-700 font-bold mb-2">密码</label>
+          <input v-model="password" type="password" id="password" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline" placeholder="Password">
+        </div>
+        <div class="flex items-center justify-between">
+          <div class="flex items-center">
+            <input id="remember" type="checkbox" class="form-checkbox h-5 w-5 text-blue-600">
+            <label for="remember" class="ml-2 block text-sm text-gray-900">记住我</label>
+          </div>
+          <a href="#" class="inline-block align-baseline font-bold text-sm text-blue-500 hover:text-blue-800">忘记密码?</a>
+        </div>
+        <div class="mb-4">
+          <label for="language" class="block text-gray-700 font-bold mb-2">语言选择</label>
+          <select v-model="language" id="language" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
+            <option value="zh-CN">中文</option>
+            <option value="en-US">英文</option>
+          </select>
+        </div>
+        <div class="flex items-center justify-center">
+          <button type="submit" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">登录</button>
+        </div>
+      </form>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+import { useRouter } from 'vue-router';
+
+export default {
+  setup() {
+    const username = ref('');
+    const password = ref('');
+    const remember = ref(false);
+    const language = ref('zh-CN');
+    const router = useRouter();
+
+    const handleLogin = () => {
+      if (username.value === 'admin' && password.value === 'admin') {
+        router.push('/portal');
+      } else {
+        alert('Invalid credentials');
+      }
+    };
+
+    return {
+      username,
+      password,
+      remember,
+      language,
+      handleLogin,
+    };
+  },
+};
+</script>
+
+<style scoped>
+/* Add any additional styles here */
+</style>

+ 45 - 0
src/views/PortalView.vue

@@ -0,0 +1,45 @@
+<template>
+  <div class="flex min-h-screen">
+    <div class="bg-[#08002E] text-white w-64 p-4">
+      <ul>
+        <li class="mb-2">
+          <a href="#/portal" class="block px-4 py-2 hover:bg-blue-500">首页</a>
+        </li>
+        <li class="mb-2">
+          <a href="#/project-management" class="block px-4 py-2 hover:bg-blue-500">项目管理</a>
+        </li>
+        <li class="mb-2">
+          <a href="#/data-analysis" class="block px-4 py-2 hover:bg-blue-500">数据分析</a>
+        </li>
+      </ul>
+    </div>
+    <div class="flex-1 bg-gradient-to-r from-white to-purple-500 p-4">
+      <div class="mb-4">
+        <div class="flex">
+          <div class="w-1/2 p-4">
+            <a href="#/user-story" class="block px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-700">生成用户故事</a>
+          </div>
+          <div class="w-1/2 p-4">
+            <a href="#" class="block px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-700">生成测试脚本</a>
+          </div>
+        </div>
+      </div>
+      <div>
+        <div class="p-4">
+          <h2 class="text-2xl font-bold mb-4">智能项目分析模块</h2>
+          <p>智能项目分析模块内容待定</p>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'PortalView',
+};
+</script>
+
+<style scoped>
+/* Add any additional styles here */
+</style>

+ 79 - 0
src/views/UserStoryChatView.vue

@@ -0,0 +1,79 @@
+<template>
+  <div class="flex min-h-screen">
+    <div class="bg-[#08002E] text-white w-64 p-4 overflow-y-auto">
+      <h2 class="text-xl font-bold mb-4">聊天历史记录</h2>
+      <ul>
+        <li v-for="(message, index) in chatHistory" :key="index" class="mb-2">
+          {{ message }}
+        </li>
+      </ul>
+    </div>
+    <div class="flex-1 bg-gradient-to-r from-white to-purple-500 p-4">
+      <div class="mb-4">
+        <textarea v-model="message" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline" placeholder="输入消息..."></textarea>
+      </div>
+      <div>
+        <button @click="sendMessage" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">发送</button>
+        <button @click="uploadFile" class="ml-2 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">上传文件</button>
+        <input type="file" ref="fileInput" @change="handleFileUpload" style="display: none;" />
+      </div>
+      <div class="mt-4">
+        <ul>
+          <li v-for="(message, index) in chatMessages" :key="index" class="mb-2">
+            {{ message }}
+          </li>
+        </ul>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { ref } from 'vue';
+
+export default {
+  name: 'UserStoryChatView',
+  setup() {
+    const chatHistory = ref([]);
+    const chatMessages = ref([]);
+    const message = ref('');
+    const fileInput = ref(null);
+
+    const sendMessage = () => {
+      if (message.value.trim()) {
+        chatMessages.value.push(`你: ${message.value}`);
+        // Simulate automatic response
+        setTimeout(() => {
+          chatMessages.value.push(`系统: 自动回复 - ${message.value}`);
+        }, 1000);
+        message.value = '';
+      }
+    };
+
+    const uploadFile = () => {
+      fileInput.value.click();
+    };
+
+    const handleFileUpload = (event) => {
+      const file = event.target.files[0];
+      if (file) {
+        chatMessages.value.push(`你: 已上传文件 - ${file.name}`);
+      }
+    };
+
+    return {
+      chatHistory,
+      chatMessages,
+      message,
+      fileInput,
+      sendMessage,
+      uploadFile,
+      handleFileUpload,
+    };
+  },
+};
+</script>
+
+<style scoped>
+/* Add any additional styles here */
+</style>

Some files were not shown because too many files changed in this diff