Ver código fonte

添加FSG的模板

DIR\baoyu.zhang 2 meses atrás
pai
commit
6aff80b6ce

+ 196 - 0
src/assets/templates/FSG/PersonalSettingsDialog.vue

@@ -0,0 +1,196 @@
+<template>
+  <div class="fixed inset-0 bg-black/50 flex items-center justify-center">
+    <div class="bg-white rounded-lg w-full max-w-md p-6 relative">
+      <!-- Header -->
+      <div class="flex justify-between items-center mb-6">
+        <h2 class="text-lg font-medium">个人设置</h2>
+        <button
+            @click="onClose"
+            class="text-gray-400 hover:text-gray-600 transition-colors"
+            aria-label="关闭"
+        >
+          <X class="w-5 h-5" />
+        </button>
+      </div>
+
+      <!-- Avatar -->
+      <div class="flex justify-center mb-6">
+        <div class="w-20 h-20 rounded-full bg-gray-300 overflow-hidden">
+          <img
+              alt="用户头像"
+              class="w-full h-full object-cover"
+          />
+        </div>
+      </div>
+
+      <!-- Form -->
+      <form @submit.prevent="onSubmit">
+        <div class="space-y-4">
+          <!-- Username -->
+          <div>
+            <label class="block mb-1">
+              <span class="text-red-500">*</span>
+              用户姓名
+            </label>
+            <input
+                v-model="form.username"
+                type="text"
+                class="w-full px-3 py-2 border rounded-md"
+                placeholder="请输入"
+                required
+            />
+          </div>
+
+          <!-- Password -->
+          <div>
+            <label class="block mb-1">
+              <span class="text-red-500">*</span>
+              用户密码
+            </label>
+            <input
+                v-model="form.password"
+                type="password"
+                class="w-full px-3 py-2 border rounded-md"
+                placeholder="请输入"
+                required
+            />
+          </div>
+
+          <!-- Confirm Password -->
+          <div>
+            <label class="block mb-1">
+              <span class="text-red-500">*</span>
+              二次确认
+            </label>
+            <input
+                v-model="form.confirmPassword"
+                type="password"
+                class="w-full px-3 py-2 border rounded-md"
+                placeholder="请输入"
+                required
+            />
+          </div>
+
+          <!-- Employee Type -->
+          <div>
+            <label class="block mb-1">
+              <span class="text-red-500">*</span>
+              雇员类型
+            </label>
+            <div class="flex gap-4">
+              <label class="flex items-center">
+                <input
+                    v-model="form.employeeType"
+                    type="radio"
+                    value="fulltime"
+                    class="mr-2"
+                />
+                全职
+              </label>
+              <label class="flex items-center">
+                <input
+                    v-model="form.employeeType"
+                    type="radio"
+                    value="contract"
+                    class="mr-2"
+                />
+                合同工
+              </label>
+              <label class="flex items-center">
+                <input
+                    v-model="form.employeeType"
+                    type="radio"
+                    value="intern"
+                    class="mr-2"
+                />
+                实习
+              </label>
+            </div>
+          </div>
+
+          <!-- Birth Date -->
+          <div>
+            <label class="block mb-1">
+              <span class="text-red-500">*</span>
+              出生日期
+            </label>
+            <div class="relative">
+              <input
+                  v-model="form.birthDate"
+                  type="date"
+                  class="w-full px-3 py-2 border rounded-md"
+                  required
+              />
+              <small class="text-red-500 text-xs">必选项不可为空</small>
+            </div>
+          </div>
+
+          <!-- Normal Mode Toggle -->
+          <div class="flex items-center justify-between">
+            <span>普通模式</span>
+            <label class="relative inline-flex items-center cursor-pointer">
+              <input
+                  v-model="form.normalMode"
+                  type="checkbox"
+                  class="sr-only peer"
+              />
+              <div class="w-11 h-6 bg-gray-200 peer-focus:outline-none rounded-full peer
+                         peer-checked:after:translate-x-full peer-checked:after:border-white
+                         after:content-[''] after:absolute after:top-[2px] after:left-[2px]
+                         after:bg-white after:border-gray-300 after:border after:rounded-full
+                         after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-500">
+              </div>
+            </label>
+          </div>
+        </div>
+
+        <!-- Action Buttons -->
+        <div class="flex gap-4 mt-6">
+          <button
+              type="button"
+              @click="onClose"
+              class="flex-1 px-4 py-2 border rounded-md hover:bg-gray-50"
+          >
+            取消
+          </button>
+          <button
+              type="submit"
+              class="flex-1 px-4 py-2 bg-blue-500 text-white rounded-md hover:bg-blue-600"
+          >
+            保存
+          </button>
+        </div>
+      </form>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { X } from 'lucide-vue-next'
+
+const form = ref({
+  username: '',
+  password: '',
+  confirmPassword: '',
+  employeeType: 'fulltime',
+  birthDate: '',
+  normalMode: false
+})
+
+const onSubmit = () => {
+  // Handle form submission
+  console.log('Form submitted:', form.value)
+}
+
+const onClose = () => {
+  // Emit close event to parent
+  emit('close')
+}
+
+defineEmits(['close'])
+</script>
+
+<style scoped>
+/* Add any additional custom styles here */
+</style>

+ 77 - 0
src/assets/templates/FSG/UnsavedChangesDialog.vue

@@ -0,0 +1,77 @@
+<template>
+  <div v-if="isOpen" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center">
+    <div class="bg-white rounded-lg p-6 max-w-md w-full mx-4 relative">
+      <!-- Close button -->
+      <button
+          @click="close"
+          class="absolute right-4 top-4 text-gray-500 hover:text-gray-700"
+      >
+        <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
+          <path d="M18 6L6 18M6 6l12 12" />
+        </svg>
+      </button>
+
+      <!-- Warning icon and title -->
+      <div class="flex items-center gap-3 mb-4">
+        <div class="w-8 h-8 rounded-full bg-amber-100 flex items-center justify-center">
+          <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5 text-amber-500" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
+            <path d="M12 9v4m0 4h.01M12 3c-1.857 0-3.637.74-4.95 2.05a7 7 0 1 0 9.9 0C15.638 3.74 13.857 3 12 3Z" />
+          </svg>
+        </div>
+        <h3 class="text-lg font-medium">信息未保存</h3>
+      </div>
+
+      <!-- Message -->
+      <p class="text-gray-600 mb-6">
+        您的表单内容还未保存,直接离开当前页面可能会丢失已填入的信息哦。
+      </p>
+
+      <!-- Buttons -->
+      <div class="flex gap-4 justify-end">
+        <button
+            @click="close"
+            class="px-4 py-2 border border-gray-300 rounded-md hover:bg-gray-50 text-gray-700"
+        >
+          确认离开
+        </button>
+        <button
+            @click="continueEditing"
+            class="px-4 py-2 bg-blue-500 text-white rounded-md hover:bg-blue-600"
+        >
+          继续填写
+        </button>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { ref } from 'vue'
+
+const isOpen = ref(true)
+
+const close = () => {
+  isOpen.value = false
+}
+
+const continueEditing = () => {
+  isOpen.value = false
+  // Add any additional logic for continuing the edit
+}
+</script>
+
+<style scoped>
+/* Optional: Add animation */
+.fixed {
+  animation: fadeIn 0.2s ease-out;
+}
+
+@keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+  to {
+    opacity: 1;
+  }
+}
+</style>

+ 221 - 0
src/assets/templates/FSG/dashboard.vue

@@ -0,0 +1,221 @@
+<template>
+  <div class="min-h-screen bg-gray-50">
+    <!-- Top Navigation -->
+    <header class="bg-white border-b">
+      <div class="flex items-center justify-between px-4 py-2">
+        <div class="flex items-center space-x-2">
+          <div class="text-blue-600">
+            <div class="w-8 h-8">
+              <div class="w-full h-full" />
+            </div>
+          </div>
+          <span class="text-xl font-medium">ProductName</span>
+        </div>
+
+        <div class="flex-1 max-w-xl mx-4">
+          <div class="relative">
+            <Search class="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400" size={20} />
+            <input
+                type="text"
+                placeholder="输入内容查询"
+                class="w-full pl-10 pr-4 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
+            />
+          </div>
+        </div>
+
+        <div class="flex items-center space-x-4">
+          <MessageCircle class="w-6 h-6 text-blue-500" />
+          <Bell class="w-6 h-6 text-blue-500" />
+          <Settings class="w-6 h-6 text-gray-400" />
+          <div class="w-8 h-8 rounded-full bg-gray-200"></div>
+        </div>
+      </div>
+    </header>
+
+    <div class="flex">
+      <!-- Sidebar -->
+      <aside class="w-64 min-h-screen bg-white border-r">
+        <nav class="p-4">
+          <div class="mb-4 text-gray-500">菜单类别标题</div>
+          <ul class="space-y-2">
+            <li>
+              <a href="#" class="flex items-center px-4 py-2 text-blue-600 bg-blue-50 rounded-lg">
+                <LayoutGrid class="w-5 h-5 mr-3" />
+                首页
+              </a>
+            </li>
+            <li v-for="i in 8" :key="i">
+              <a href="#" class="flex items-center px-4 py-2 text-gray-600 hover:bg-gray-50 rounded-lg">
+                <Box class="w-5 h-5 mr-3" />
+                系统模块{{ i }}
+              </a>
+            </li>
+          </ul>
+        </nav>
+      </aside>
+
+      <!-- Main Content -->
+      <main class="flex-1 p-6">
+        <!-- Breadcrumb -->
+        <div class="flex items-center text-gray-500 mb-6">
+          <span>首页</span>>
+          <span>xxx工作台</span>
+        </div>
+
+        <!-- Metric Cards -->
+        <div class="grid grid-cols-4 gap-6 mb-6">
+          <div v-for="(metric, index) in metrics" :key="index"
+               class="bg-white rounded-lg p-6 flex items-center space-x-4 shadow-sm">
+            <div :class="[
+              'w-12 h-12 rounded-lg flex items-center justify-center',
+              metric.bgColor
+            ]">
+              <FileText :class="metric.iconColor" size={24} />
+            </div>
+            <div>
+              <div class="text-3xl font-semibold">
+                {{ metric.value }}<span class="text-gray-400 text-lg">/{{ metric.total }}</span>
+              </div>
+              <div class="text-gray-500">{{ metric.label }}</div>
+            </div>
+          </div>
+        </div>
+
+        <!-- Tasks and Projects -->
+        <div class="grid grid-cols-2 gap-6 mb-6">
+          <!-- Special Tasks -->
+          <div class="bg-white rounded-lg p-6 shadow-sm">
+            <div class="flex items-center justify-between mb-4">
+              <h2 class="text-lg font-medium">特办事项</h2>
+              <div class="flex space-x-4">
+                <button class="px-3 py-1 text-blue-600 bg-blue-50 rounded-md">全部</button>
+                <button class="px-3 py-1 text-blue-600">今天</button>
+                <button class="px-3 py-1 text-gray-500">本周</button>
+                <button class="px-3 py-1 text-gray-500">本月</button>
+              </div>
+            </div>
+            <div class="space-y-4">
+              <div v-for="(task, index) in tasks" :key="index" class="flex items-start">
+                <input type="checkbox" :checked="task.completed" class="mt-1 mr-3" />
+                <div>
+                  <div class="text-gray-900">{{ task.title }}</div>
+                  <div class="text-gray-500 text-sm">{{ task.project }}</div>
+                </div>
+              </div>
+            </div>
+          </div>
+
+          <!-- Project Progress -->
+          <div class="bg-white rounded-lg p-6 shadow-sm">
+            <div class="flex items-center justify-between mb-4">
+              <h2 class="text-lg font-medium">项目进程</h2>
+            </div>
+            <table class="w-full">
+              <thead>
+              <tr class="text-gray-500">
+                <th class="pb-4 text-left font-normal">项目名称</th>
+                <th class="pb-4 text-left font-normal">负责人</th>
+                <th class="pb-4 text-left font-normal">截止日期</th>
+                <th class="pb-4 text-left font-normal">当前状态</th>
+              </tr>
+              </thead>
+              <tbody class="text-sm">
+              <tr v-for="(project, index) in projects" :key="index" class="border-t">
+                <td class="py-4">{{ project.name }}</td>
+                <td class="py-4">{{ project.owner }}</td>
+                <td class="py-4">{{ project.deadline }}</td>
+                <td class="py-4">
+                    <span :class="[
+                      'px-2 py-1 rounded text-sm',
+                      project.statusColor
+                    ]">
+                      {{ project.status }}
+                    </span>
+                </td>
+              </tr>
+              </tbody>
+            </table>
+          </div>
+        </div>
+
+        <!-- Bottom Section -->
+        <div class="grid grid-cols-2 gap-6">
+          <!-- Quick Functions -->
+          <div class="bg-white rounded-lg p-6 shadow-sm">
+            <div class="flex items-center justify-between mb-4">
+              <h2 class="text-lg font-medium">快捷功能</h2>
+              <MoreHorizontal class="text-gray-400" />
+            </div>
+            <div class="space-y-3">
+              <div v-for="(func, index) in quickFunctions" :key="index"
+                   class="text-gray-700 hover:text-blue-600 cursor-pointer">
+                {{ func }}
+              </div>
+            </div>
+          </div>
+
+          <!-- Contract Statistics -->
+          <div class="bg-white rounded-lg p-6 shadow-sm">
+            <div class="flex items-center justify-between mb-4">
+              <h2 class="text-lg font-medium">合同类型统计</h2>
+              <div class="flex items-center space-x-4">
+                <div class="flex items-center">
+                  <div class="w-3 h-3 bg-blue-500 rounded-sm mr-2"></div>
+                  <span class="text-sm text-gray-500">A合同</span>
+                </div>
+                <div class="flex items-center">
+                  <div class="w-3 h-3 bg-green-500 rounded-sm mr-2"></div>
+                  <span class="text-sm text-gray-500">B合同</span>
+                </div>
+              </div>
+            </div>
+            <div class="h-64">
+              <!-- Chart would go here - using a placeholder -->
+              <div class="w-full h-full bg-gray-50 rounded flex items-center justify-center">
+                Bar Chart Placeholder
+              </div>
+            </div>
+          </div>
+        </div>
+      </main>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {
+  Search, MessageCircle, Bell, Settings,
+  Home, ChevronRight, FileText, Box,
+  LayoutGrid, MoreHorizontal
+} from 'lucide-vue-next'
+
+const metrics = [
+  { label: '合同审核', value: 21, total: 35, bgColor: 'bg-blue-50', iconColor: 'text-blue-500' },
+  { label: '合同签署', value: 28, total: 40, bgColor: 'bg-yellow-50', iconColor: 'text-yellow-500' },
+  { label: '合同登记', value: 40, total: 65, bgColor: 'bg-green-50', iconColor: 'text-green-500' },
+  { label: '合同履约', value: 12, total: 15, bgColor: 'bg-red-50', iconColor: 'text-red-500' }
+]
+
+const tasks = [
+  { title: '联系xxxx客户,商讨具体合同事宜', project: 'xxxx公司公积金管理', completed: true },
+  { title: '完成合同模版创建并上传系统', project: 'xxxxx公司人员xxxx合同管理', completed: true },
+  { title: '审核xxxxxxx合同', project: 'xxxx公司人员xxx合同签订', completed: false },
+  { title: '签署xxxx合同,邮件发送xxxxx客户', project: 'xxxxxxxxx公司人员资源管理', completed: true }
+]
+
+const projects = [
+  { name: 'xxxx公司公积金管理', owner: '任小东', deadline: '2023/07/25', status: '已延期', statusColor: 'bg-red-50 text-red-600' },
+  { name: 'xxxxx公司人员xxxx合同管理', owner: '胡晓东', deadline: '2024/01/09', status: '进行中', statusColor: 'bg-blue-50 text-blue-600' },
+  { name: 'xxxx公司人员xxx合同签订', owner: '李兵', deadline: '2025/01/08', status: '进行中', statusColor: 'bg-blue-50 text-blue-600' },
+  { name: 'xxxxxxxxx公司人员资源管理', owner: '王天一', deadline: '2023/09/03', status: '已完成', statusColor: 'bg-green-50 text-green-600' }
+]
+
+const quickFunctions = [
+  '人力资源主合同(标准版)',
+  '人事代理服务协议(标准版)',
+  '人事代理服务协议',
+  '人事代理服务协议',
+  '人事代理服务协议(企业版)',
+  '人事代理服务协议(定制版)'
+]
+</script>

+ 121 - 0
src/assets/templates/FSG/login.vue

@@ -0,0 +1,121 @@
+<template>
+  <div class="min-h-screen bg-gradient-to-br from-blue-50 to-blue-100/50">
+    <div class="container mx-auto px-4">
+      <!-- Header -->
+      <header class="flex justify-between items-center py-6">
+        <div class="text-2xl font-bold text-white">
+          <h1>FSG</h1>
+          <div class="text-sm">上海外服</div>
+        </div>
+        <button class="flex items-center text-blue-600 hover:text-blue-700">
+          <Globe class="w-4 h-4 mr-1" />
+          中文
+        </button>
+      </header>
+
+      <!-- Login Form -->
+      <div class="max-w-md mx-auto mt-12 bg-white rounded-lg shadow-lg p-8">
+        <h2 class="text-3xl font-bold text-center mb-2 text-blue-600">
+          "Hello,欢迎回来"
+        </h2>
+        <p class="text-center text-gray-600 mb-8">请登录外包管理系统</p>
+
+        <form @submit.prevent="handleSubmit">
+          <div class="space-y-6">
+            <div>
+              <label class="block text-sm font-medium text-gray-700 mb-1">租户名称</label>
+              <input
+                  v-model="form.tenant"
+                  type="text"
+                  placeholder="请输入"
+                  class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
+              />
+            </div>
+
+            <div>
+              <label class="block text-sm font-medium text-gray-700 mb-1">用户名</label>
+              <input
+                  v-model="form.username"
+                  type="text"
+                  placeholder="输入文字中"
+                  class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
+              />
+            </div>
+
+            <div>
+              <label class="block text-sm font-medium text-gray-700 mb-1">密码</label>
+              <input
+                  v-model="form.password"
+                  type="password"
+                  placeholder="请输入"
+                  class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
+              />
+            </div>
+
+            <div class="flex items-center justify-between">
+              <label class="flex items-center">
+                <input
+                    v-model="form.remember"
+                    type="checkbox"
+                    class="w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"
+                />
+                <span class="ml-2 text-sm text-gray-600">记住我</span>
+              </label>
+              <a href="#" class="text-sm text-blue-600 hover:text-blue-700">忘记密码?</a>
+            </div>
+
+            <button
+                type="submit"
+                class="w-full bg-blue-600 text-white py-2 px-4 rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
+            >
+              登录
+            </button>
+          </div>
+        </form>
+
+        <div class="mt-6">
+          <div class="relative">
+            <div class="absolute inset-0 flex items-center">
+              <div class="w-full border-t border-gray-300"></div>
+            </div>
+            <div class="relative flex justify-center text-sm">
+              <span class="px-2 bg-white text-gray-500">其他登录方式</span>
+            </div>
+          </div>
+
+          <button
+              class="mt-4 w-full border border-blue-600 text-blue-600 py-2 px-4 rounded-md hover:bg-blue-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2"
+          >
+            使用AD域免密自动登录
+          </button>
+        </div>
+      </div>
+
+      <!-- Footer -->
+      <footer class="text-center mt-8 pb-6 text-gray-600 text-sm">
+        © 2023 上海外服. All Rights Reserved.
+      </footer>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import { Globe } from 'lucide-vue-next'
+
+const form = ref({
+  tenant: '',
+  username: '',
+  password: '',
+  remember: false
+})
+
+const handleSubmit = () => {
+  // Handle login logic here
+  console.log('Form submitted:', form.value)
+}
+</script>
+
+<style>
+/* Add any additional custom styles here if needed */
+</style>

+ 231 - 0
src/assets/templates/FSG/organization.vue

@@ -0,0 +1,231 @@
+<template>
+  <div class="org-chart-container">
+    <!-- Left Sidebar -->
+    <div class="sidebar">
+      <div class="logo-section">
+        <span class="product-name">ProductName</span>
+      </div>
+
+      <div class="menu-section">
+        <div class="menu-title">菜单类别标题</div>
+        <div class="menu-item">
+          <div class="menu-item-content active">
+            <i class="i-lucide-layout-grid"></i>
+            <span>组织架构</span>
+          </div>
+          <div class="submenu">
+            <div class="submenu-item">系统模块1</div>
+            <div class="submenu-item">xxx部门组织架构</div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <!-- Main Content -->
+    <div class="main-content">
+      <div class="breadcrumb">
+        <i class="i-lucide-folder text-gray-500"></i>
+        <span>组织架构</span>
+        <span>/</span>
+        <span class="text-blue-500">xxx部门组织架构</span>
+      </div>
+
+      <div class="department-section">
+        <div class="department-header">
+          <h2>技术部门</h2>
+          <button class="close-btn">
+            <i class="i-lucide-x"></i>
+          </button>
+        </div>
+
+        <div class="department-content">
+          <!-- Department Columns -->
+          <div v-for="dept in departments" :key="dept.name" class="department-column">
+            <div class="department-head">
+              <div class="avatar">
+                <img :src="dept.avatar" :alt="dept.name" />
+              </div>
+              <div class="head-info">
+                <div class="name">{{ dept.name }}</div>
+                <div class="title">{{ dept.title }}</div>
+              </div>
+            </div>
+
+            <div class="staff-list">
+              <div v-for="(staff, index) in dept.staff" :key="index" class="staff-item">
+                <i class="i-lucide-chevron-down text-gray-400"></i>
+                <span>{{ staff.name }}-{{ staff.title }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+const departments = [
+  {
+    name: '张三',
+    title: '信息架构部门主任',
+    avatar: '/placeholder.svg?height=48&width=48',
+    staff: [
+      { name: '职员A', title: '职位' },
+      { name: '职员B', title: '职位' },
+      { name: '职员C', title: '职位' },
+      { name: '职员D', title: '职位' },
+      { name: '职员E', title: '职位' },
+      { name: '职员F', title: '职位' },
+      { name: '职员G', title: '职位' },
+      { name: '职员H', title: '职位' },
+      { name: '职员I', title: '职位' },
+      { name: '职员J', title: '职位' }
+    ]
+  },
+  {
+    name: '李四',
+    title: '信息架构部门主任',
+    avatar: '/placeholder.svg?height=48&width=48',
+    staff: [
+      { name: '职员A', title: '职位' },
+      { name: '职员B', title: '职位' },
+      { name: '职员C', title: '职位' },
+      { name: '职员D', title: '职位' },
+      { name: '职员E', title: '职位' },
+      { name: '职员F', title: '职位' },
+      { name: '职员G', title: '职位' },
+      { name: '职员H', title: '职位' },
+      { name: '职员I', title: '职位' },
+      { name: '职员J', title: '职位' }
+    ]
+  },
+  {
+    name: '王五',
+    title: '信息架构部门主任',
+    avatar: '/placeholder.svg?height=48&width=48',
+    staff: [
+      { name: '职员A', title: '职位' },
+      { name: '职员B', title: '职位' },
+      { name: '职员C', title: '职位' },
+      { name: '职员D', title: '职位' },
+      { name: '职员E', title: '职位' },
+      { name: '职员F', title: '职位' },
+      { name: '职员G', title: '职位' },
+      { name: '职员H', title: '职位' },
+      { name: '职员I', title: '职位' },
+      { name: '职员J', title: '职位' }
+    ]
+  }
+]
+</script>
+
+<style scoped>
+.org-chart-container {
+  @apply flex min-h-screen bg-white;
+}
+
+.sidebar {
+  @apply w-64 bg-[#1D4B94] text-white flex flex-col;
+}
+
+.logo-section {
+  @apply flex items-center gap-2 p-4 border-b border-white/10;
+}
+
+.product-name {
+  @apply text-lg font-semibold;
+}
+
+.menu-section {
+  @apply p-4;
+}
+
+.menu-title {
+  @apply text-sm text-gray-300 mb-4;
+}
+
+.menu-item {
+  @apply space-y-2;
+}
+
+.menu-item-content {
+  @apply flex items-center gap-2 p-2 rounded hover:bg-white/10 cursor-pointer;
+}
+
+.menu-item-content.active {
+  @apply bg-white/10;
+}
+
+.submenu {
+  @apply ml-8 space-y-2;
+}
+
+.submenu-item {
+  @apply text-sm py-1 px-2 hover:bg-white/10 rounded cursor-pointer;
+}
+
+.main-content {
+  @apply flex-1 p-6;
+}
+
+.breadcrumb {
+  @apply flex items-center gap-2 text-sm text-gray-600 mb-6;
+}
+
+.department-section {
+  @apply bg-white rounded-lg shadow;
+}
+
+.department-header {
+  @apply flex justify-between items-center p-4 border-b;
+}
+
+.department-header h2 {
+  @apply text-xl font-semibold;
+}
+
+.close-btn {
+  @apply p-2 hover:bg-gray-100 rounded;
+}
+
+.department-content {
+  @apply grid grid-cols-3 gap-6 p-6;
+}
+
+.department-column {
+  @apply border rounded-lg p-4;
+}
+
+.department-head {
+  @apply flex items-center gap-4 p-4 bg-[#E8F0FF] rounded-lg mb-4;
+}
+
+.avatar {
+  @apply w-12 h-12 rounded-full overflow-hidden;
+}
+
+.avatar img {
+  @apply w-full h-full object-cover;
+}
+
+.head-info {
+  @apply flex flex-col;
+}
+
+.name {
+  @apply font-semibold;
+}
+
+.title {
+  @apply text-sm text-gray-600;
+}
+
+.staff-list {
+  @apply space-y-2;
+}
+
+.staff-item {
+  @apply flex items-center gap-2 p-2 hover:bg-gray-50 rounded cursor-pointer text-sm text-gray-600;
+}
+</style>

+ 184 - 0
src/assets/templates/FSG/userList.vue

@@ -0,0 +1,184 @@
+<template>
+  <div class="min-h-screen bg-white">
+    <!-- Top Navigation -->
+    <header class="bg-[#0052CC] text-white px-4 py-2 flex items-center justify-between">
+      <div class="flex items-center space-x-2">
+        <div class="w-8 h-8">
+        </div>
+        <span class="text-lg font-medium">ProductName</span>
+      </div>
+
+      <div class="flex-1 max-w-2xl mx-8">
+        <div class="relative">
+          <input
+              type="search"
+              placeholder="输入内容查询"
+              class="w-full px-4 py-1.5 bg-white/10 rounded text-white placeholder-white/70 outline-none"
+          />
+          <SearchIcon class="absolute right-3 top-2 h-5 w-5 text-white/70"/>
+        </div>
+      </div>
+
+      <div class="flex items-center space-x-4">
+        <MessageCircleIcon class="h-5 w-5"/>
+        <BellIcon class="h-5 w-5"/>
+        <SettingsIcon class="h-5 w-5"/>
+        <div class="w-8 h-8 rounded-full bg-white/20"></div>
+      </div>
+    </header>
+
+    <div class="flex">
+      <!-- Sidebar -->
+      <aside class="w-48 min-h-[calc(100vh-56px)] border-r">
+        <nav class="p-2 space-y-1">
+          <template v-for="i in 8" :key="i">
+            <div class="flex items-center space-x-2 px-3 py-2 rounded hover:bg-gray-100 cursor-pointer">
+              <HomeIcon class="h-5 w-5 text-gray-600"/>
+              <span class="text-gray-700">系统模块{{ i }}</span>
+            </div>
+          </template>
+        </nav>
+      </aside>
+
+      <!-- Main Content -->
+      <main class="flex-1 p-6">
+        <!-- Breadcrumb -->
+        <div class="flex items-center space-x-2 text-sm mb-6">
+          <HomeIcon class="h-4 w-4 text-gray-500"/>
+          <span class="text-gray-500">首页</span>
+          <span class="text-gray-500">/</span>
+          <span class="text-blue-600">查询表格</span>
+        </div>
+
+        <!-- Search Form -->
+        <div class="bg-white p-6 rounded border mb-6">
+          <h2 class="text-lg font-medium mb-4">查询表格</h2>
+          <div class="grid grid-cols-3 gap-4 mb-4">
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">雇员姓名</label>
+              <input type="text" placeholder="请输入" class="w-full px-3 py-2 border rounded"/>
+            </div>
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">证件类型</label>
+              <select class="w-full px-3 py-2 border rounded">
+                <option>请选择</option>
+              </select>
+            </div>
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">证件号</label>
+              <input type="text" placeholder="请输入" class="w-full px-3 py-2 border rounded"/>
+            </div>
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">手机号</label>
+              <input type="text" placeholder="请输入" class="w-full px-3 py-2 border rounded"/>
+            </div>
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">出生日期</label>
+              <input type="date" class="w-full px-3 py-2 border rounded"/>
+            </div>
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">创建日期</label>
+              <input type="date" class="w-full px-3 py-2 border rounded"/>
+            </div>
+          </div>
+          <div class="flex items-center justify-between">
+            <div class="space-x-2">
+              <button class="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700">
+                主按钮
+              </button>
+              <button class="px-4 py-2 border border-gray-300 rounded hover:bg-gray-50">
+                次按钮
+              </button>
+            </div>
+            <button class="text-blue-600 hover:text-blue-700">更多</button>
+          </div>
+        </div>
+
+        <!-- Table -->
+        <div class="bg-white border rounded">
+          <div class="p-4 border-b flex items-center justify-between">
+            <div class="space-x-2">
+              <button class="px-4 py-1.5 bg-blue-600 text-white rounded text-sm">主按钮</button>
+              <button class="px-4 py-1.5 border rounded text-sm">次按钮</button>
+            </div>
+            <button class="px-4 py-1.5 border rounded text-sm">导出</button>
+          </div>
+
+          <table class="w-full">
+            <thead class="bg-gray-50">
+            <tr>
+              <th class="px-4 py-3 text-left">
+                <input type="checkbox" class="rounded"/>
+              </th>
+              <th class="px-4 py-3 text-left">标题</th>
+              <th class="px-4 py-3 text-left">标题</th>
+              <th class="px-4 py-3 text-left">标题</th>
+              <th class="px-4 py-3 text-left">标题</th>
+              <th class="px-4 py-3 text-left">标题</th>
+              <th class="px-4 py-3 text-left">操作</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr v-for="i in 10" :key="i" class="border-t">
+              <td class="px-4 py-3">
+                <input type="checkbox" class="rounded"/>
+              </td>
+              <td class="px-4 py-3">表格内容</td>
+              <td class="px-4 py-3">
+                <div class="flex items-center space-x-2">
+                  <div class="w-8 h-8 rounded-full bg-gray-200"></div>
+                  <span>用户名</span>
+                </div>
+              </td>
+              <td class="px-4 py-3">表格内容</td>
+              <td class="px-4 py-3 text-blue-600">标签文字</td>
+              <td class="px-4 py-3">
+                  <span class="inline-flex items-center">
+                    <span class="w-2 h-2 rounded-full bg-green-500 mr-2"></span>
+                    通知事项
+                  </span>
+              </td>
+              <td class="px-4 py-3 text-blue-600">
+                <button class="hover:text-blue-700">操作</button>
+              </td>
+            </tr>
+            </tbody>
+          </table>
+
+          <!-- Pagination -->
+          <div class="flex items-center justify-center space-x-2 py-4">
+            <button class="p-1 rounded hover:bg-gray-100">
+              <ChevronLeftIcon class="h-5 w-5 text-gray-600"/>
+            </button>
+            <button class="px-3 py-1 rounded hover:bg-gray-100">1</button>
+            <button class="px-3 py-1 bg-blue-50 text-blue-600 rounded">2</button>
+            <button class="px-3 py-1 rounded hover:bg-gray-100">3</button>
+            <button class="px-3 py-1 rounded hover:bg-gray-100">4</button>
+            <button class="px-3 py-1 rounded hover:bg-gray-100">5</button>
+            <span>...</span>
+            <button class="px-3 py-1 rounded hover:bg-gray-100">80</button>
+            <button class="p-1 rounded hover:bg-gray-100">
+              <ChevronRightIcon class="h-5 w-5 text-gray-600"/>
+            </button>
+          </div>
+        </div>
+      </main>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import {
+  SearchIcon,
+  MessageCircleIcon,
+  BellIcon,
+  SettingsIcon,
+  HomeIcon,
+  ChevronLeftIcon,
+  ChevronRightIcon
+} from 'lucide-vue-next'
+</script>
+
+<style>
+/* Add any custom styles here if needed */
+</style>

+ 197 - 0
src/assets/templates/FSG/userProfile.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="min-h-screen bg-gray-50">
+    <!-- Header -->
+    <header class="bg-[#0A2B6F] text-white px-4 py-2 flex items-center justify-between">
+      <div class="flex items-center space-x-2">
+        <div class="text-2xl">⬡</div>
+        <span class="text-lg font-medium">ProductName</span>
+      </div>
+
+      <div class="flex-1 max-w-xl mx-4">
+        <div class="relative">
+          <input
+              type="search"
+              placeholder="输入内容查询"
+              class="w-full px-4 py-1.5 bg-[#1a3d87] rounded text-white placeholder-gray-300"
+          >
+          <search-icon class="absolute right-3 top-2 h-5 w-5 text-gray-300" />
+        </div>
+      </div>
+
+      <div class="flex items-center space-x-4">
+        <message-circle-icon class="h-5 w-5" />
+        <bell-icon class="h-5 w-5" />
+        <settings-icon class="h-5 w-5" />
+        <div class="w-8 h-8 rounded-full bg-gray-300"></div>
+      </div>
+    </header>
+
+    <div class="flex">
+      <!-- Sidebar -->
+      <aside class="w-48 bg-white h-[calc(100vh-56px)] border-r">
+        <nav class="p-4">
+          <div class="text-gray-500 mb-4">菜单类别标题</div>
+          <div class="space-y-2">
+            <a v-for="i in 5" :key="i"
+               class="flex items-center space-x-2 p-2 rounded hover:bg-blue-50 text-gray-600">
+              <layout-icon class="h-5 w-5" />
+              <span>系统模块{{ i }}</span>
+            </a>
+          </div>
+        </nav>
+      </aside>
+
+      <!-- Main Content -->
+      <main class="flex-1 p-6">
+        <div class="text-sm text-gray-500 mb-6">
+          <home-icon class="inline h-4 w-4 mr-1" />
+          一级页面 / 仪表盘 / xxx业务工作台
+        </div>
+
+        <!-- Basic Info Form -->
+        <div class="bg-white rounded-lg p-6">
+          <h2 class="text-lg font-medium mb-6">基本信息</h2>
+
+          <div class="grid grid-cols-3 gap-6">
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                会员姓名
+                <span class="text-red-500">*</span>
+              </label>
+              <input
+                  type="text"
+                  v-model="form.name"
+                  class="w-full border rounded px-3 py-2"
+              >
+            </div>
+
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                性别
+                <span class="text-red-500">*</span>
+              </label>
+              <select v-model="form.gender" class="w-full border rounded px-3 py-2">
+                <option value="女">女</option>
+                <option value="男">男</option>
+              </select>
+            </div>
+
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                出生日期
+                <span class="text-red-500">*</span>
+              </label>
+              <input
+                  type="date"
+                  v-model="form.birthDate"
+                  class="w-full border rounded px-3 py-2"
+              >
+            </div>
+
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                证件类型
+                <span class="text-red-500">*</span>
+              </label>
+              <select v-model="form.idType" class="w-full border rounded px-3 py-2">
+                <option value="身份证">身份证</option>
+              </select>
+            </div>
+
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                证件号码
+                <span class="text-red-500">*</span>
+              </label>
+              <input
+                  type="text"
+                  v-model="form.idNumber"
+                  class="w-full border rounded px-3 py-2"
+              >
+            </div>
+          </div>
+
+          <!-- Contact Info -->
+          <h2 class="text-lg font-medium mb-6 mt-8">通讯信息</h2>
+
+          <div class="grid grid-cols-3 gap-6">
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                手机号
+                <span class="text-red-500">*</span>
+              </label>
+              <input
+                  type="tel"
+                  v-model="form.phone"
+                  class="w-full border rounded px-3 py-2"
+              >
+            </div>
+
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                电子邮箱
+                <span class="text-red-500">*</span>
+              </label>
+              <input
+                  type="email"
+                  v-model="form.email"
+                  class="w-full border rounded px-3 py-2"
+              >
+            </div>
+
+            <div class="space-y-1">
+              <label class="text-sm text-gray-600">
+                紧急联系人
+                <span class="text-red-500">*</span>
+              </label>
+              <select v-model="form.emergency" class="w-full border rounded px-3 py-2">
+                <option value="父亲">父亲</option>
+                <option value="母亲">母亲</option>
+              </select>
+            </div>
+          </div>
+
+          <!-- File Upload Section -->
+          <h2 class="text-lg font-medium mb-6 mt-8">其他补充资料</h2>
+
+          <div class="grid grid-cols-4 gap-6">
+            <div v-for="field in ['个人简历', '个人证件照', '身份证扫描件', '护照扫描件']"
+                 :key="field"
+                 class="border-2 border-dashed rounded-lg p-4 text-center">
+              <upload-cloud-icon class="h-8 w-8 mx-auto text-gray-400 mb-2" />
+              <div class="text-sm text-gray-600">{{ field }}</div>
+            </div>
+          </div>
+        </div>
+      </main>
+    </div>
+  </div>
+</template>
+
+<script setup>
+import { ref } from 'vue'
+import {
+  Search as SearchIcon,
+  MessageCircle as MessageCircleIcon,
+  Bell as BellIcon,
+  Settings as SettingsIcon,
+  Layout as LayoutIcon,
+  Home as HomeIcon,
+  UploadCloud as UploadCloudIcon
+} from 'lucide-vue-next'
+
+const form = ref({
+  name: '张三',
+  gender: '女',
+  birthDate: '2023/06/13',
+  idType: '身份证',
+  idNumber: '370803198905282724',
+  phone: '13966667777',
+  email: 'zhangsan@163.com',
+  emergency: '父亲'
+})
+</script>
+
+<style>
+/* Add any custom styles here if needed */
+</style>

+ 0 - 0
src/assets/templates/chat_with_document.vue → src/assets/templates/genlitex/chat_with_document.vue


+ 0 - 0
src/assets/templates/dashboard.vue → src/assets/templates/genlitex/dashboard.vue


+ 0 - 0
src/assets/templates/generate_user_stories.vue → src/assets/templates/genlitex/generate_user_stories.vue


+ 0 - 0
src/assets/templates/login.vue → src/assets/templates/genlitex/login.vue


+ 8 - 4
template_desc.txt

@@ -1,4 +1,8 @@
-src/assets/templates/generate_user_stories.vue 生成用户故事界面的模板
-src/assets/templates/login.vue 登录界面的模板
-src/assets/templates/dashboard.vue 首页(门户网站)页面的模板
-src/assets/templates/chat_with_document.vue 基于上传文档聊天界面的模板
+src/assets/templates/FSG/login.vue 登录界面的模板
+src/assets/templates/FSG/organization.vue 组织架构界面的模板
+src/assets/templates/FSG/userList.vue 展示用户列表信息界面的模板
+src/assets/templates/FSG/userProfile.vue 用户详细信息
+src/assets/templates/FSG/PersonalSettingsDialog.vue 用户的个人设置弹框界面的模板
+src/assets/templates/FSG/UnsavedChangesDialog.vue 修改未保存弹框界面的模板
+src/assets/templates/FSG/dashboard.vue 首页(门户网站)页面的模板
+

+ 8 - 0
template_desc_FSG.txt

@@ -0,0 +1,8 @@
+src/assets/templates/FSG/login.vue 登录界面的模板
+src/assets/templates/FSG/organization.vue 组织架构界面的模板
+src/assets/templates/FSG/userList.vue 展示用户列表信息界面的模板
+src/assets/templates/FSG/userProfile.vue 用户详细信息
+src/assets/templates/FSG/PersonalSettingsDialog.vue 用户的个人设置弹框界面的模板
+src/assets/templates/FSG/UnsavedChangesDialog.vue 修改未保存弹框界面的模板
+src/assets/templates/FSG/dashboard.vue 首页(门户网站)页面的模板
+

+ 4 - 0
template_desc_genlitex.txt

@@ -0,0 +1,4 @@
+src/assets/templates/genlitex/generate_user_stories.vue 生成用户故事界面的模板
+src/assets/templates/genlitex/login.vue 登录界面的模板
+src/assets/templates/genlitex/dashboard.vue 首页(门户网站)页面的模板
+src/assets/templates/genlitex/chat_with_document.vue 基于上传文档聊天界面的模板