YY 2 years ago
parent
commit
3a47b3e867

+ 6 - 0
.env.development

@@ -0,0 +1,6 @@
+VITE_BASE_URL = "/studio"
+VITE_OUT_DIR = "studio"
+VITE_REQUEST_BASE = ''
+VITE_APP_HOST="http://basic.waityou24.cn"
+VITE_APP_PAGE_SIZE=20
+VITE_APP_ROUTER="studio"

+ 6 - 0
.env.production

@@ -0,0 +1,6 @@
+VITE_BASE_URL = "/studio"
+VITE_OUT_DIR = "studio"
+VITE_REQUEST_BASE = ''
+VITE_APP_HOST="http://basic.waityou24.cn"
+VITE_APP_PAGE_SIZE=20
+VITE_APP_ROUTER="studio"

+ 11 - 15
.eslintrc.cjs

@@ -1,23 +1,19 @@
 /* eslint-env node */
-require('@rushstack/eslint-patch/modern-module-resolution')
+require('@rushstack/eslint-patch/modern-module-resolution');
 
 module.exports = {
   root: true,
-  extends: [
-    'plugin:vue/vue3-essential',
-    'eslint:recommended',
-    '@vue/eslint-config-typescript',
-    '@vue/eslint-config-prettier'
-  ],
+  extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/eslint-config-typescript', '@vue/eslint-config-prettier'],
   parserOptions: {
-    ecmaVersion: 'latest'
+    ecmaVersion: 'latest',
   },
   rules: {
+    'vue/multi-word-component-names': 0,
     'max-len': [
       'warn',
       {
-        code: 10000
-      }
+        code: 10000,
+      },
     ],
     'prettier/prettier': [
       'warn',
@@ -25,8 +21,8 @@ module.exports = {
         singleQuote: true,
         bracketSpacing: true,
         jsxBracketSameLine: true,
-        printWidth: 160
-      }
-    ]
-  }
-}
+        printWidth: 160,
+      },
+    ],
+  },
+};

+ 1 - 1
src/components/c-upload.vue

@@ -100,4 +100,4 @@ const onRemove = (file: { id: any; uri: string }, fileList: any) => {
 // #endregion
 </script>
 
-<style lang="less" scoped></style>
+<style lang="scss" scoped></style>

+ 0 - 41
src/layout/Home.vue

@@ -1,41 +0,0 @@
-<template>
-  <div id="home">
-    <el-container>
-      <el-header>
-        <HomeHead></HomeHead>
-      </el-header>
-      <el-container>
-        <el-aside class="one">
-          <HomeLeft></HomeLeft>
-        </el-aside>
-        <el-main class="two">
-          <el-scrollbar>
-            <router-view></router-view>
-          </el-scrollbar>
-        </el-main>
-      </el-container>
-    </el-container>
-  </div>
-</template>
-<script setup lang="ts">
-import HomeLeft from '@/layout/homeParts/left-1.vue';
-import HomeHead from '@/layout/homeParts/header-1.vue';
-</script>
-
-<style scoped lang="scss">
-.el-header {
-  padding: 0;
-  background-color: $red;
-  border-bottom: 2px solid $white;
-}
-.one {
-  width: 200px;
-  border-right: 2px solid $white;
-}
-.two {
-  height: 92vh;
-  .router-view {
-    height: 92vh;
-  }
-}
-</style>

+ 0 - 69
src/layout/homeParts/header-1.vue

@@ -1,69 +0,0 @@
-<template>
-  <el-col :span="24" class="main">
-    <el-row class="head">
-      <el-col :span="8" class="left">
-        <el-image :src="data.imgUrl" class="image"></el-image>
-        <span>{{ data.name }}-管理中心</span>
-      </el-col>
-      <el-col :span="16" class="right">
-        <span>{{ data.user.name || '游客' }}</span>
-        <el-button type="danger" @click="logout()">退出登录</el-button>
-      </el-col>
-    </el-row>
-  </el-col>
-</template>
-
-<script setup lang="ts">
-import { reactive } from 'vue';
-const data = reactive({
-  name: '基础动态研究管理平台',
-  user: { name: '王泓璎' },
-  imgUrl: new URL('@/assets/image/logo.png', import.meta.url).href,
-});
-const logout = () => {};
-</script>
-
-<style scoped>
-.head {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  padding: 0 10px 0 5px;
-}
-.left {
-  line-height: 60px;
-}
-.left span {
-  display: inline-block;
-  margin: 0 10px;
-  font-size: 24px;
-  color: var(--vt-c-white);
-  font-weight: bold;
-  font-family: cursive;
-}
-.left .image {
-  background: var(--vt-c-white);
-  height: 32px;
-  width: 32px;
-  border-radius: 90px;
-  top: 5px;
-}
-.right {
-  text-align: right;
-  /* line-height: 60px; */
-  word-break: keep-all;
-  white-space: nowrap;
-}
-.right i {
-  position: relative;
-  top: 5px;
-  margin: 0px 15px;
-  font-size: 30px;
-  color: var(--vt-c-white);
-}
-.right span {
-  color: var(--vt-c-white);
-  font-size: 16px;
-  padding: 0 15px 0 0px;
-}
-</style>

+ 0 - 98
src/layout/homeParts/left-1.vue

@@ -1,98 +0,0 @@
-<template>
-  <div class="main">
-    <el-menu :collapse="false" unique-opened router background-color="#66363c">
-      <template v-for="item in items">
-        <!-- 二级菜单 -->
-        <template v-if="item.type === '0'">
-          <el-sub-menu :index="item._id || item.index" :key="item._id">
-            <template v-slot:title>
-              <span>{{ item.name }}</span>
-            </template>
-            <template v-for="subItem in item.children">
-              <!-- 三级菜单 -->
-              <el-sub-menu
-                v-if="subItem.children && subItem.children.length > 0 && subItem.children.every((f:any) => f.type === '0' || f.type === '1')"
-                :index="subItem._id"
-                :key="subItem._id"
-              >
-                <template v-slot:title>
-                  <span>{{ subItem.name }}</span>
-                </template>
-                <el-menu-item v-for="(threeItem, i) in subItem.children" :key="i" :index="threeItem.path">
-                  <template v-slot:title>
-                    <span>{{ threeItem.name }}</span>
-                  </template>
-                </el-menu-item>
-              </el-sub-menu>
-              <el-menu-item v-else :index="subItem.path" :key="subItem.path">
-                <template v-slot:title>
-                  <span>{{ subItem.name }}</span>
-                </template>
-              </el-menu-item>
-            </template>
-          </el-sub-menu>
-        </template>
-        <!-- 一级菜单 -->
-        <template v-else>
-          <el-menu-item :index="item.path" :key="item.path">
-            <span>{{ item.name }}</span>
-          </el-menu-item>
-        </template>
-      </template>
-    </el-menu>
-  </div>
-</template>
-
-<script setup lang="ts">
-import { ref } from 'vue';
-import type { Ref } from 'vue';
-import { system } from '@/layout/menu';
-
-// 请求列表
-let items: Ref<any[]> = ref([]);
-items.value = system;
-</script>
-
-<style scoped>
-.el-menu {
-  height: 92.5vh;
-  overflow-y: auto;
-}
-.el-menu-item {
-  color: var(--vt-c-white);
-  font-size: 16px;
-  font-weight: 500;
-}
-.el-menu-item span {
-  overflow-y: auto;
-  overflow-x: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-:deep().el-sub-menu__title {
-  color: var(--vt-c-white);
-  font-size: 16px;
-  font-weight: 500;
-}
-:deep().el-sub-menu__title span {
-  overflow-y: auto;
-  overflow-x: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-.el-menu-item.is-active {
-  color: var(--vt-c-black) !important;
-  background-color: var(--vt-c-white) !important;
-}
-.el-menu-item:hover {
-  color: var(--vt-c-black) !important;
-  background-color: var(--vt-c-white) !important;
-}
-.el-menu::-webkit-scrollbar {
-  width: 2px;
-}
-.el-menu::-webkit-scrollbar-thumb {
-  border-radius: 10px;
-  background: rgb(255, 255, 255);
-}
-</style>

+ 0 - 8
src/layout/menu.ts

@@ -1,8 +0,0 @@
-export const system = [
-  {
-    icon: 'el-icon-s-home',
-    path: '/',
-    name: '系统首页',
-    index: '1'
-  }
-]

+ 33 - 8
src/router/index.ts

@@ -1,19 +1,44 @@
-import { createRouter, createWebHistory } from 'vue-router'
+import { createRouter, createWebHistory } from 'vue-router';
+// 公共
+import common from './module/common';
+// 管理员
+import admin from './module/admin';
+// 个人用户
+import users from './module/users';
+// 企业用户
+import unit from './module/unit';
 const router = createRouter({
   history: createWebHistory(import.meta.env.BASE_URL),
   routes: [
+    // 公共
+    ...common,
+    // {
+    //   path: '/homeIndex',
+    //   meta: { title: '基础研究动态管理平台', is_filter: true },
+    //   component: () => import('@common/src/components/studio-one-green/home.vue'),
+    //   children: [
+    //     {
+    //       path: '/homeIndex',
+    //       meta: { title: '基础研究动态管理平台', is_filter: true },
+    //       component: () => import('@/views/home/index.vue'),
+    //     },
+    //     ...admin,
+    //     ...users,
+    //     ...unit,
+    //   ],
+    // },
     {
       path: '/',
-      component: () => import('@/layout/Home.vue'),
+      component: () => import('@common/src/components/studio-one-green/home.vue'),
       children: [
         {
           path: '/',
           name: 'index',
           meta: { title: '系统首页' },
-          component: () => import('@/views/index.vue')
+          component: () => import('@/views/home/index.vue'),
         },
-      ]
-    }
-  ]
-})
-export default router
+      ],
+    },
+  ],
+});
+export default router;

+ 126 - 0
src/router/module/admin.ts

@@ -0,0 +1,126 @@
+export default [
+  // 用户管理
+  {
+    path: '/center/users/company',
+    meta: { title: '依托单位', is_filter: true },
+    component: () => import('@/views/center/users/company/index.vue'),
+  },
+  {
+    path: '/center/users/company/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/center/users/company/info.vue'),
+  },
+  {
+    path: '/center/users/scientist',
+    meta: { title: '科学家', is_filter: true },
+    component: () => import('@/views/center/users/scientist/index.vue'),
+  },
+  {
+    path: '/center/users/scientist/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/center/users/scientist/info.vue'),
+  },
+  // 科学家工作室
+  {
+    path: '/center/studio/info',
+    meta: { title: '信息列表', is_filter: true },
+    component: () => import('@/views/center/studio/info/index.vue'),
+  },
+  {
+    path: '/center/studio/info/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/center/studio/info/info.vue'),
+  },
+  {
+    path: '/center/studio/info/export',
+    meta: { title: '导出PDF', is_filter: true },
+    component: () => import('@/views/center/studio/info/export.vue'),
+  },
+  {
+    path: '/center/studio/year',
+    meta: { title: '年度报告', is_filter: true },
+    component: () => import('@/views/center/studio/year/index.vue'),
+  },
+  {
+    path: '/center/studio/flair',
+    meta: { title: '保留资质', is_filter: true },
+    component: () => import('@/views/center/studio/flair/index.vue'),
+  },
+  // 技术供求
+  {
+    path: '/center/supplydemand/support',
+    meta: { title: '技术支持', is_filter: true },
+    component: () => import('@/views/center/supplydemand/support/index.vue'),
+  },
+  {
+    path: '/center/supplydemand/support/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/center/supplydemand/support/info.vue'),
+  },
+  {
+    path: '/center/supplydemand/demand',
+    meta: { title: '技术需求', is_filter: true },
+    component: () => import('@/views/center/supplydemand/demand/index.vue'),
+  },
+  {
+    path: '/center/supplydemand/demand/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/center/supplydemand/demand/info.vue'),
+  },
+  // 其他内容
+  {
+    path: '/center/other/achieve',
+    meta: { title: '成果展示', is_filter: true },
+    component: () => import('@/views/center/other/achieve/index.vue'),
+  },
+  {
+    path: '/center/other/achieve/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/center/other/achieve/info.vue'),
+  },
+  {
+    path: '/center/other/notice',
+    meta: { title: '通知公告', is_filter: true },
+    component: () => import('@/views/center/other/notice/index.vue'),
+  },
+  {
+    path: '/center/other/notice/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/center/other/notice/add.vue'),
+  },
+  {
+    path: '/center/other/download',
+    meta: { title: '相关下载', is_filter: true },
+    component: () => import('@/views/center/other/download/index.vue'),
+  },
+  {
+    path: '/center/other/download/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/center/other/download/add.vue'),
+  },
+  {
+    path: '/center/other/contact',
+    meta: { title: '联系处室', is_filter: true },
+    component: () => import('@/views/center/other/contact/index.vue'),
+  },
+  {
+    path: '/center/other/message',
+    meta: { title: '系统消息', is_filter: true },
+    component: () => import('@/views/center/other/message/index.vue'),
+  },
+  {
+    path: '/center/other/message',
+    meta: { title: '系统消息', is_filter: true },
+    component: () => import('@/views/center/other/message/index.vue'),
+  },
+  {
+    path: '/center/other/message/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/center/other/message/add.vue'),
+  },
+  {
+    path: '/userInfo/center',
+    meta: { title: '个人中心', is_filter: true },
+    component: () => import('@/views/userInfo/center/index.vue'),
+  },
+];

+ 1 - 0
src/router/module/common.ts

@@ -0,0 +1 @@
+export default [];

+ 94 - 0
src/router/module/unit.ts

@@ -0,0 +1,94 @@
+export default [
+  // 个人中心
+  {
+    path: '/unit/center',
+    meta: { title: '个人中心', is_filter: true },
+    component: () => import('@/views/unit/center/index.vue'),
+  },
+  {
+    path: '/unit/builddesire',
+    meta: { title: '发布工作室建设意愿', is_filter: true },
+    component: () => import('@/views/unit/builddesire/index.vue'),
+  },
+  {
+    path: '/unit/builddesire/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/unit/builddesire/add.vue'),
+  },
+  // 科学家工作室申报
+  {
+    path: '/unit/studio',
+    meta: { title: '科学家工作室', is_filter: true },
+    component: () => import('@/views/unit/studio/index.vue'),
+  },
+  {
+    path: '/unit/studio/add',
+    meta: { title: '申报进度', is_filter: true },
+    component: () => import('@/views/unit/studio/add.vue'),
+  },
+  {
+    path: '/unit/scientist',
+    meta: { title: '入驻科学家', is_filter: true },
+    component: () => import('@/views/unit/scientist/index.vue'),
+  },
+  {
+    path: '/unit/scientist/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/unit/scientist/add.vue'),
+  },
+  {
+    path: '/unit/achieve',
+    meta: { title: '发布合作成果', is_filter: true },
+    component: () => import('@/views/unit/achieve/index.vue'),
+  },
+  {
+    path: '/unit/achieve/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/unit/achieve/add.vue'),
+  },
+  {
+    path: '/unit/achieve/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/unit/achieve/info.vue'),
+  },
+  {
+    path: '/unit/yearreport',
+    meta: { title: '年度报告', is_filter: true },
+    component: () => import('@/views/unit/yearreport/index.vue'),
+  },
+  {
+    path: '/unit/yearreport/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/unit/yearreport/add.vue'),
+  },
+  {
+    path: '/unit/applyflair',
+    meta: { title: '保留资质', is_filter: true },
+    component: () => import('@/views/unit/applyflair/index.vue'),
+  },
+  {
+    path: '/unit/applyflair/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/unit/applyflair/add.vue'),
+  },
+  {
+    path: '/unit/contactoffice',
+    meta: { title: '联系处室', is_filter: true },
+    component: () => import('@/views/unit/contactoffice/index.vue'),
+  },
+  {
+    path: '/unit/demand',
+    meta: { title: '发布技术需求', is_filter: true },
+    component: () => import('@/views/unit/demand/index.vue'),
+  },
+  {
+    path: '/unit/demand/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/unit/demand/add.vue'),
+  },
+  {
+    path: '/unit/demand/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/unit/demand/info.vue'),
+  },
+];

+ 33 - 0
src/router/module/users.ts

@@ -0,0 +1,33 @@
+export default [
+  // 个人中心
+  {
+    path: '/user/center',
+    meta: { title: '个人中心', is_filter: true },
+    component: () => import('@/views/user/center/index.vue'),
+  },
+  {
+    path: '/user/scientist/studio',
+    meta: { title: '入驻科学家工作室', is_filter: true },
+    component: () => import('@/views/user/scientist/studio/index.vue'),
+  },
+  {
+    path: '/user/scientist/studio/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/user/scientist/studio/info.vue'),
+  },
+  {
+    path: '/user/support',
+    meta: { title: '发布技术支持', is_filter: true },
+    component: () => import('@/views/user/support/index.vue'),
+  },
+  {
+    path: '/user/support/add',
+    meta: { title: '信息管理', is_filter: true },
+    component: () => import('@/views/user/support/add.vue'),
+  },
+  {
+    path: '/user/support/info',
+    meta: { title: '详细信息', is_filter: true },
+    component: () => import('@/views/user/support/info.vue'),
+  },
+];

+ 13 - 0
src/views/home/index.vue

@@ -0,0 +1,13 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main"> test </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script setup lang="ts">
+import type { Ref } from 'vue';
+import { ref, toRefs } from 'vue';
+</script>
+<style scoped></style>

+ 1 - 1
tsconfig.json

@@ -7,7 +7,7 @@
       "@/*": ["./src/*"]
     },
     "isolatedModules": false,
-    "suppressImplicitAnyIndexErrors": true
+    "suppressImplicitAnyIndexErrors": true,
   },
 
   "references": [

+ 14 - 12
vite.config.ts

@@ -1,24 +1,26 @@
-import { fileURLToPath, URL } from 'node:url'
-
-import { defineConfig } from 'vite'
-import vue from '@vitejs/plugin-vue'
+import { fileURLToPath, URL } from 'node:url';
 
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+const path = require('path');
+const common = path.resolve(__dirname, '../common');
 // https://vitejs.dev/config/
 export default defineConfig({
   plugins: [vue()],
   server: {
-    port: 20001
+    port: 20001,
   },
   resolve: {
     alias: {
-      '@': fileURLToPath(new URL('./src', import.meta.url))
-    }
+      '@': fileURLToPath(new URL('./src', import.meta.url)),
+      '@common': common,
+    },
   },
   css: {
     preprocessorOptions: {
       scss: {
-        additionalData: `@import "@/assets/style/mixin.scss";` // 此处全局的scss文件
-      }
-    }
-  }
-})
+        additionalData: `@import "@/assets/style/mixin.scss";`, // 此处全局的scss文件
+      },
+    },
+  },
+});