Skip to content

framework 前端开发手册

1. 开发前准备

安装 Node.js

版本要求 >= 18.0.0 < 21

安装 PNPM

版本要求 >= 8.0.0

2. 下载前端脚手架代码

下载前端脚手架代码,安装依赖,启动项目

bash
# 下载前端脚手架
git clone http://61.169.126.130:58000/bigdata/magus-cli/magus-cli-ui.git [你的项目名]

# 进入项目文件夹
cd [你的项目名]

# 修改远程仓库地址为自己项目地址
git remote set-url origin [你的项目仓库地址]

# 切换到 develop 分支
git checkout develop

# 安装依赖
pnpm install

# 启动开发服务器
pnpm dev

3. 项目结构

bash
[你的项目名]
├── public                  # 公共静态资源
   ├── favicon.ico         # 浏览器标签图标
├── src                     # 项目资源目录
   ├── assets              # 静态资源
   ├── components          # 公共组件
   ├── layout              # 项目布局文件
   ├── router              # 项目路由文件
   ├── store               # 状态管理
   ├── App.vue             # 根组件
   └── main.ts             # 入口文件
   └── scan-modules.ts     # 项目模块扫描 
├── .eslintrc.cjs           # eslint 配置
├── .npmrc                  # pnpm 配置
├── package.json            # package.json
├── prettier.config.cjs     # 代码格式化配置
├── tsconfig.json           # ts 配置文件
├── vite.config.ts          # vite 配置文件

4. 集成 framework-wujie

src/router/index.ts 中添加路由

ts
// router/index.ts
import { createRouter } from '@magustek/framework-core'
import { createMainRouter } from '@magustek/framework-wujie'

const router = createRouter({ base: '', routes: []})
const mainRouter = createMainRouter(router)

export {
  router,
  mainRouter
}

src/main.ts 使用

ts
// main.ts
import { createApp } from 'vue'
import { router, mainRouter } from '@/router'

const app = createApp()
app.use(router)
app.use(mainRouter)

5. 集成 Keep-Alive

在项目中可以使用 useKeepAliveTag 提供的方法来缓存子应用的页面

vue
<!-- src/layout/index.vue --> 
<template>
  <keep-alive :include="keepAliveList">
    <router-view v-slot="{ Component, route }">
      <component :is="keepAliveComponent(Component, route)" />
    </router-view>
  </keep-alive>
</template>

<script lang="ts" setup>
import { useKeepAliveTag } from "@magustek/framework-core";
const { keepAliveList, keepAliveComponent } = useKeepAliveTag();
</script>

6. 应用开发

6.1 普通应用开发(示例)

src/views/project/index.vue 中编写代码, 并使用 useAxios 发送请求查询项目列表

vue
<template>
  <div>
    <h1>项目列表</h1>
    <button @click="onClick">查询项目列表</button>
    <div v-if="isLoading">
      <div>加载中...</div>
    </div>
    <div v-else>
      <div v-for="item in data" :key="item.id">
        <div>项目名称: {{ item.name }}</div>
        <div>项目描述: {{ item.desc }}</div>
        <div>项目地址: {{ item.url }}</div>
        <div>项目状态: {{ item.status }}</div>
        <div>项目创建时间: {{ item.createTime }}</div>  
        <div>项目更新时间: {{ item.updateTime }}</div>
      </div>
    </div>
  </div>
</template>

<script lang="ts" setup>
// 查询项目列表
import { useAxios } from '@magustek/framework-core'

const { post } = useAxios()
const { data, execute, isLoading } = post('/api/project/list', {}, {}, { immediate: false })

// 按钮点击, 查询项目列表
const onClick = () => {
  execute({ page:1, psgeSize: 100})
}
</script>

6.2 流程应用开发

流程应用开发过程与普通应用开发完全相同

7. 使用 useMainRouter

在项目中可以使用 useMainRouter 提供的方法跳转到另一个子应用的页面上

ts
// src/views/home/index.vue
import { useMainRouter } from '@magustek/framework-wujie'

const { push } = useMainRouter()

// 使用 push 方法跳转到另一个子应用的页面上
push('/home/index', 'appName')

8. 使用 useCoreStore

在项目中可以使用 useCoreStore 提供的方法获取全局提供的数据

ts
import { useCoreStore } from '@magustek/framework-core'

const { 
  userInfo, // 当前用户基本信息
  dicts,    // 所有字典信息
  authCodes // 当前用户所拥有的权限码
} = useCoreStore()

console.log(userInfo, dicts, authCodes)

9. 使用 useGlobalStore

在项目中可以使用 useGlobalStore 提供的方法来存储、读取共享数据

ts
import { useGlobalStore } from '@magustek/framework-core'

const { getItem, setItem, removeItem } = useGlobalStore()

// 获取数据
const value = getItem('key')

// 设置数据
setItem('key', 'value')

// 删除数据
removeItem('key')

10. 使用 useMultiTags

在项目中可以使用 useMultiTags 提供的方法来操作标签栏

ts
import { useMultiTags } from '@magustek/framework-core'

const {
  multiTags,   // 当前所有的标签
  activeTag,   // 当前激活的标签
  lastTag,     // 上一个标签
  pushTag,     // 添加标签
  closeTag,    // 关闭标签
  updateTag,   // 更新标签
  closeAll,    // 关闭所有标签
  closeActive, // 关闭激活的标签
  closeOthers, // 关闭除激活的标签以外的标签
} = useMultiTags();