## 安装依赖说明
- 切换源，使用http://192.168.30.37:7001/ 此为临时源，如果源有问题请联系楼呈祥
- 全局安装lerna 最新版本，旧版本针对本地依赖引用有问题
- titanOne3.5-core中执行yarn
- 在titanOne3.5-core 目录中执行lerna bootstrap
- titanOne-design-pro-vue 中执行yarn serve


## 菜单和桌面数据配置说明
菜单数据配置在router下的menus.js文件中，桌面数据配置在router下的desktops.js文件中，结构同之前。

## 文件结构说明

## 项目依赖说明
###    "core-js": "^3.8.3",
- 它是JavaScript标准库的polyfill
- 它尽可能的进行模块化，让你能选择你需要的功能
- 它可以不污染全局空间
- 它和babel高度集成，可以对core-js的引入进行最大程度的优化
###    "element-ui": "^2.15.13",
elementui 库，TODO: 未来替换为公司库
###    "js-cookie": "^3.0.1",
设置cookie，使用方式如下
- 设置cookie
```
Cookies.set('name', 'value', { expires: 7, path: '' }); //7天过期

Cookies.set('name', { foo: 'bar' }); //设置一个json
```

- 读取cookie
```
Cookies.get('name'); //获取cookie

Cookies.get(); //读取所有的cookie
```

- 删除cookie
```
Cookies.remove('name'); //删除cookie时必须是同一个路径。
```
###    "nprogress": "^0.2.0",
主要用于页面跳转时展示的顶部进度条
###    "vue": "^2.6.14",≠
###    "vue-router": "^3.5.3",
###    "vuedraggable": "^2.24.3",
###    "vuex": "^3.6.2",
###    "vue-i18n": "8.22.2",


## 集成ecas|egate login 
1. 引入titanOne login
```
yarn add @erayt/titanOne3.0-web-login@^3.0.0 --dev
```
2. 引入 titanOne login的依赖包
```
    "@erayt/titanOne3.0-web-login": "^3.0.0",
    "@erayt/eui3.5-customize-themes":"^1.0.9",
    "@erayt/titanOne-dll":"^3.2.33",
    "@erayt/eui2-themes":"3.2.32"
```
login跳转为静态页面跳转，依赖不需要在dependency中

3. 引入@erayt/loginSub
```
yarn add @erayt/loginSub --dev
```
这个包主要是为了配置dev环境，登录页需要配置的配置内容

引入后，我们需要将对应的配置内容注入到vue.config.js中

```
 devServer: {
    
    port: 9527,
    ...loginConfig.devServerConfig
  },
```

其他依赖配置
```
  ...
 chainWebpack: (config) => {
    // 添加login 模块
    loginConfig.chainConfig(config);

    // 配置sourcemap
    const needSourcemap = isDev? 'source-map': false

    config.devtool(needSourcemap);

  ...
```
再次启动yarn serve

## 引入ecas相关api
比如消息盒子，比如自定义存储，ecas权限功能，webnet，通讯加密等

因为相关功能都是以Eui相关api开发的，所以若需要使用上述某一功能，则需要引入Eui底层相关包，

### 引入titanOne-combination

这个包是底层api的封装工具包，主要为一些基础函数做封装

```
yarn add @erayt/titanOne-combination
```


### 引入Observer
如果要实现ipc通讯，那么需要引入observer包
```
yarn add @erayt/titanOne-observer

```


## 多语言配置
文件路径为 src/lang/locale/ 

需要分别配置en 或者zh里面的index.js 文件

### 框架语言包
若使用框架组件，那么需要引入框架语言包，@erayt/language

### 路径说明
|- lang // 多语言文件夹
|--- index.js  // 添加了集成框架语言包代码
|--- locale
|----- en
|------- index.js  // 英文翻译文件
|------- message.js // 错误提示的英文文件
|----- zh
|------- index.js // 中文翻译文件
|------- message.js //  错误提示英文文件

### 如何使用框架多语言包
在lang/index.js文件中需要调整如下代码
```
// 如果需要使用框架的多语言文件，则需要引入@erayt/language包
import lang, {mergeToolTip} from '@erayt/language'

Vue.use(VueI18n);

const messages = {
  en: {
    ...lang.en,
    ...customEN,
  },
  zh: {
    ...lang.zh,
    ...customZH
  }
}
// 引入框架的错误码后，需要调用mergeToolTip进行合并数据，此数据会加入到Eui.Messager.messages中
mergeToolTip({
  en_US: toolTipEn,
  zh_CN: toolTipZh
})

```
还需要调用mergeToolTip 函数，因为框架在后台错误码处理时有特殊的规则，所以错误码需要写在message.js中，如果不引入框架的请求，则全部写在index.js中即可。

### 在Vue中如何使用
多语言使用规则，参照 Vue-i18n的使用规则

- 语法： $t('属性名')
```
  <p>{{ $t('message.hello') }}</p>

  // 输出 ：<p>您好！</p>
```


- 可变参数
```
// zh 语言文件中这样配置
{
  name: '名字 ：{0} {1}'
}
```
使用时只要传入参数即可,参数可以是对象也可以是数组
```
// array
$t('name', ['Jack', 'Job'])
// object
$t('name', {'0':'Jack', '1': 'Job'])
```

vue-i18n 还提供了金额格式化：$n,日期格式化 $d ,等功能，这里就不说明了，

- 默认语言设置
如果en语言包中不存在的内容，使用zh中的值
```
const i18n = new VueI18n({
  locale: 'en',
  fallbackLocale: 'zh',
  messages
})
```
- 切换语言
```
// 不使用框架
this.$i18n.local = zh |en

// 使用框架，则只需使用框架的切换语言按钮即可
```

### 框架错误码解析


## 多主题


### 动态换肤

### 多套主题包
本地存放多套主题，两者有不同的命名空间，如写两套主题，一套叫 custom-theme ，一套叫 custom-eui-theme ，custom-theme 主题都在一个 .custom-theme的命名空间下，我们动态的在 body 上 add .custom-theme ; remove .custom-theme。



## 升级vue-cli 修改部分

vue-cli 内置了css-loader, style-loader, scss-loader, 所以配置文件中不再需要配置

项目中有使用css-module的变量导出，供组件使用css变量，所以需要将 element-variables.scss中的导出变量移到element-variables.module.scss

同时，在main.js中，需要引入element-variables.scss文件

## 网络库使用
- @erayt/networkManager


## service 插件化开发

## 低代码开发说明

项目中默认安装低代码的组件的依赖包，vue-dynamic

- route.config.js，引用相应路由
```
import VueDynamic from 'vue-dynamic'
export default [
  {
    path: '/dynamic',
    component: VueDynamic.Viewer
  }
];
```

- menu.json中配置菜单，在对应attributes属性中设置path,pageName和projectName

```
"attributes": {
  "client": {
    "loadMode": "component",
      "path": "/dynamic",  // 路由
      "extraParams":{ 
        "pageName":"dataImport",  // 对应页面英文名称
        "projectName":"sds"       // 对应项目名称
      }
    }
  }
```

- main.js中注册插件

```
import rxd from 'vue-dynamic';
import 'vue-dynamic/dist/Dynamic.css';
rxd.titan.init();
```
- vue.config.js中配置低代码服务地址

```
  '/phoenix': {
        target: 'http://192.168.193.94:8011',
      },
```

- 安装低代码样式包 vue-dynamic-theme
```
main.js中引入
import "vue-dynamic-theme"
```

- 注册多语言

1. lang/index.js中引入低代码多语言包

```
import Vuedynamic from 'vue-dynamic'
const messages = {
  en_US: {
    ...其它多语言文件,
    ...Vuedynamic.lang.en // 低代码英文
  },
  zh_CN: {
    ...其它多语言文件,
    ...Vuedynamic.lang.zh // 低代码中文
  }
}

export default messages;
```
2.main.js引入多语言
```
import { messages } from "./lang";
service.registerApplication("myproject", {
  routeConfig,
  getters,
  modules,
  i18n: messages, // 注册多语言
});
```
