Pārlūkot izejas kodu

zbytest003-2025-02-18 06:57:04

genlitex 2 mēneši atpakaļ
vecāks
revīzija
08acb6ad19
2 mainītis faili ar 839 papildinājumiem un 13 dzēšanām
  1. 12 13
      src/router/index.js
  2. 827 0
      src/views/ChatView.vue

+ 12 - 13
src/router/index.js

@@ -1,17 +1,16 @@
-import { createRouter, createWebHashHistory } from 'vue-router'
-import HomeView from '../views/HomeView.vue'
+import ChatView from '../views/ChatView.vue';
 
 const routes = [
+  // Existing routes
   {
-    path: '/',
-    name: 'home',
-    component: HomeView
-  }
-]
+    path: '/chat',
+    name: 'Chat',
+    component: ChatView,
+  },
+];
 
-const router = createRouter({
-  history: createWebHashHistory(location.pathname),
-  routes
-})
-
-export default router
+export default new Router({
+  mode: 'history',
+  base: process.env.BASE_URL,
+  routes,
+});

+ 827 - 0
src/views/ChatView.vue

@@ -0,0 +1,827 @@
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.chat-view {
+  display: flex;
+  height: 100vh;
+  background-color: grey;
+}
+
+.sidebar {
+  width: 250px;
+  background-color: #08002E;
+  color: white;
+  padding: 20px;
+  overflow-y: auto;
+}
+
+.sidebar .title {
+  font-weight: bold;
+  margin-bottom: 10px;
+}
+
+.sidebar .item {
+  cursor: pointer;
+  padding: 10px;
+  border-radius: 4px;
+  transition: background-color 0.3s ease;
+}
+
+.sidebar .item:hover {
+  background-color: #1f1f1f;
+}
+
+.sidebar .add-new {
+  margin-top: 20px;
+  text-align: center;
+}
+
+.sidebar .add-new button {
+  background-color: #007bff;
+  color: white;
+  border: none;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.sidebar .add-new button:hover {
+  background-color: #0056b3;
+}
+
+.main-content {
+  flex-grow: 1;
+  padding: 20px;
+  background-color: #f0f0f0;
+}
+
+.main-content .greeting {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area label {
+  display: inline-block;
+  background-color: #007bff;
+  color: white;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .upload-area label:hover {
+  background-color: #0056b3;
+}
+
+.main-content .document-list {
+  list-style-type: none;
+  padding: 0;
+}
+
+.main-content .document-list li {
+  background-color: white;
+  border: 1px solid #ddd;
+  padding: 10px;
+  border-radius: 4px;
+  margin-bottom: 10px;
+  transition: box-shadow 0.3s ease;
+}
+
+.main-content .document-list li:hover {
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.main-content .document-list li .filename {
+  font-weight: bold;
+}
+
+.main-content .document-list li .actions {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.main-content .document-list li .actions .delete-button {
+  background-color: #ff4d4d;
+  color: white;
+  border: none;
+  padding: 5px 10px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .document-list li .actions .delete-button:hover {
+  background-color: #d42f2f;
+}
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.chat-view {
+  display: flex;
+  height: 100vh;
+  background-color: grey;
+}
+
+.sidebar {
+  width: 250px;
+  background-color: #08002E;
+  color: white;
+  padding: 20px;
+  overflow-y: auto;
+}
+
+.sidebar .title {
+  font-weight: bold;
+  margin-bottom: 10px;
+}
+
+.sidebar .item {
+  cursor: pointer;
+  padding: 10px;
+  border-radius: 4px;
+  transition: background-color 0.3s ease;
+}
+
+.sidebar .item:hover {
+  background-color: #1f1f1f;
+}
+
+.sidebar .add-new {
+  margin-top: 20px;
+  text-align: center;
+}
+
+.sidebar .add-new button {
+  background-color: #007bff;
+  color: white;
+  border: none;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.sidebar .add-new button:hover {
+  background-color: #0056b3;
+}
+
+.main-content {
+  flex-grow: 1;
+  padding: 20px;
+  background-color: #f0f0f0;
+}
+
+.main-content .greeting {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area label {
+  display: inline-block;
+  background-color: #007bff;
+  color: white;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .upload-area label:hover {
+  background-color: #0056b3;
+}
+
+.main-content .document-list {
+  list-style-type: none;
+  padding: 0;
+}
+
+.main-content .document-list li {
+  background-color: white;
+  border: 1px solid #ddd;
+  padding: 10px;
+  border-radius: 4px;
+  margin-bottom: 10px;
+  transition: box-shadow 0.3s ease;
+}
+
+.main-content .document-list li:hover {
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.main-content .document-list li .filename {
+  font-weight: bold;
+}
+
+.main-content .document-list li .actions {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.main-content .document-list li .actions .delete-button {
+  background-color: #ff4d4d;
+  color: white;
+  border: none;
+  padding: 5px 10px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .document-list li .actions .delete-button:hover {
+  background-color: #d42f2f;
+}
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.chat-view {
+  display: flex;
+  height: 100vh;
+  background-color: grey;
+}
+
+.sidebar {
+  width: 250px;
+  background-color: #08002E;
+  color: white;
+  padding: 20px;
+  overflow-y: auto;
+}
+
+.sidebar .title {
+  font-weight: bold;
+  margin-bottom: 10px;
+}
+
+.sidebar .item {
+  cursor: pointer;
+  padding: 10px;
+  border-radius: 4px;
+  transition: background-color 0.3s ease;
+}
+
+.sidebar .item:hover {
+  background-color: #1f1f1f;
+}
+
+.sidebar .add-new {
+  margin-top: 20px;
+  text-align: center;
+}
+
+.sidebar .add-new button {
+  background-color: #007bff;
+  color: white;
+  border: none;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.sidebar .add-new button:hover {
+  background-color: #0056b3;
+}
+
+.main-content {
+  flex-grow: 1;
+  padding: 20px;
+  background-color: #f0f0f0;
+}
+
+.main-content .greeting {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area label {
+  display: inline-block;
+  background-color: #007bff;
+  color: white;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .upload-area label:hover {
+  background-color: #0056b3;
+}
+
+.main-content .document-list {
+  list-style-type: none;
+  padding: 0;
+}
+
+.main-content .document-list li {
+  background-color: white;
+  border: 1px solid #ddd;
+  padding: 10px;
+  border-radius: 4px;
+  margin-bottom: 10px;
+  transition: box-shadow 0.3s ease;
+}
+
+.main-content .document-list li:hover {
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.main-content .document-list li .filename {
+  font-weight: bold;
+}
+
+.main-content .document-list li .actions {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.main-content .document-list li .actions .delete-button {
+  background-color: #ff4d4d;
+  color: white;
+  border: none;
+  padding: 5px 10px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .document-list li .actions .delete-button:hover {
+  background-color: #d42f2f;
+}
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.chat-view {
+  display: flex;
+  height: 100vh;
+  background-color: grey;
+}
+
+.sidebar {
+  width: 250px;
+  background-color: #08002E;
+  color: white;
+  padding: 20px;
+  overflow-y: auto;
+}
+
+.sidebar .title {
+  font-weight: bold;
+  margin-bottom: 10px;
+}
+
+.sidebar .item {
+  cursor: pointer;
+  padding: 10px;
+  border-radius: 4px;
+  transition: background-color 0.3s ease;
+}
+
+.sidebar .item:hover {
+  background-color: #1f1f1f;
+}
+
+.sidebar .add-new {
+  margin-top: 20px;
+  text-align: center;
+}
+
+.sidebar .add-new button {
+  background-color: #007bff;
+  color: white;
+  border: none;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.sidebar .add-new button:hover {
+  background-color: #0056b3;
+}
+
+.main-content {
+  flex-grow: 1;
+  padding: 20px;
+  background-color: #f0f0f0;
+}
+
+.main-content .greeting {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area {
+  margin-bottom: 20px;
+}
+
+.main-content .upload-area label {
+  display: inline-block;
+  background-color: #007bff;
+  color: white;
+  padding: 10px 20px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .upload-area label:hover {
+  background-color: #0056b3;
+}
+
+.main-content .document-list {
+  list-style-type: none;
+  padding: 0;
+}
+
+.main-content .document-list li {
+  background-color: white;
+  border: 1px solid #ddd;
+  padding: 10px;
+  border-radius: 4px;
+  margin-bottom: 10px;
+  transition: box-shadow 0.3s ease;
+}
+
+.main-content .document-list li:hover {
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.main-content .document-list li .filename {
+  font-weight: bold;
+}
+
+.main-content .document-list li .actions {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.main-content .document-list li .actions .delete-button {
+  background-color: #ff4d4d;
+  color: white;
+  border: none;
+  padding: 5px 10px;
+  border-radius: 4px;
+  cursor: pointer;
+}
+
+.main-content .document-list li .actions .delete-button:hover {
+  background-color: #d42f2f;
+}
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+<template>
+  <div class="chat-view">
+    <Sidebar :fixedRequirements="fixedRequirements" :addNewRequirement="addNewRequirement" @requirementSelected="handleRequirementSelected"></Sidebar>
+    <MainContent :documents="documents" :selectedRequirement="selectedRequirement" @documentUploaded="handleDocumentUploaded"></MainContent>
+  </div>
+</template>
+
+<script>
+import Sidebar from './Sidebar.vue';
+import MainContent from './MainContent.vue';
+
+export default {
+  components: {
+    Sidebar,
+    MainContent,
+  },
+  data() {
+    return {
+      fixedRequirements: [
+        // Fixed requirement items
+      ],
+      documents: [],
+      selectedRequirement: null,
+    };
+  },
+  methods: {
+    addNewRequirement() {
+      // Logic for adding a new requirement
+    },
+    handleRequirementSelected(requirement) {
+      this.selectedRequirement = requirement;
+    },
+    handleDocumentUploaded(document) {
+      this.documents.push(document);
+    },
+  },
+};
+</script>
+
+<style scoped>
+.chat-view {
+  display: flex;
+  height: 100vh;
+}
+
+/* Styles for Sidebar and MainContent will be added based on the design */
+</style>
+</template>