gEhviWht36rS4CbVpq!Pazg4xcywZbfVG;ImgQf12OMovsEq}f^SR=O3lR9+wXaw$xVpn6_GRR5dodUZFgRvt9=Fd
z9uKjw7vcd<%Qn80t?uOUd1Y0-*`+8I_zggrf$#3#++vl@$>nyg9`{W|%>w}+T45-?
zxtCW=SU-7U3g>3aKZuF;Q|@~l|Efz(R#~*Xs${be$K!7(?R|6GeN_}8kdLf
zlMsh6@a><~;Cq>pH4ZMTc2_8{#`4^HJC=6G{paufOP7|dcLSa?iI}yfq!FnsLChlC
z@SBc`S5wPeQLgv8?f=wNlbbzCrcA0@nFSfBTo!&;0x>w8r|D%GzCFWlH&zR`i1TM(
zB;mUbS`!ms-`aZI
z`*)vc)#Gu=!q4}SY!e^dTBJin3nyRXCZ)@NUT
z1Gm4gf3~jU=Z;Tj;1B%2KGX3w^zXPn-La18+8U<+yG`Ba&pMLH)_a%6{=4H_xE)ZZ
zU+ej^j_76lywx#%y~Q8eZ{g>ePaRsC`Sfe}`Hh)R9l73k;$4Tn`^3B5xc;A>c=yk6
s|9^er-J|$zZ_{?Y``)4d2i|F{jsO4v
literal 0
HcmV?d00001
diff --git a/bi-ui/public/logo.png b/bi-ui/public/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..76c4d92794d3362015fa22be08b378333bef2dbe
GIT binary patch
literal 24062
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
+import { onMounted, getCurrentInstance } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+// 关闭大屏加载动画
+(parent || window).postMessage("loading.hide", "*");
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bi-ui/src/EventBus.js b/bi-ui/src/EventBus.js
new file mode 100644
index 0000000..912ab47
--- /dev/null
+++ b/bi-ui/src/EventBus.js
@@ -0,0 +1,9 @@
+import mitt from 'mitt';
+
+/**
+ * 穿件全局事件总线
+ * @type {Emitter>}
+ */
+const emitter = mitt();
+
+export default emitter;
diff --git a/bi-ui/src/api/AuthApi.js b/bi-ui/src/api/AuthApi.js
new file mode 100644
index 0000000..feba7e0
--- /dev/null
+++ b/bi-ui/src/api/AuthApi.js
@@ -0,0 +1,7 @@
+import { request,params } from "@/api";
+
+
+export const doLogin = (username,password)=>request.post("/login-pwd",params({username,password}),{
+ showLoading:true,
+ token:false
+})
diff --git a/bi-ui/src/api/SSE.js b/bi-ui/src/api/SSE.js
new file mode 100644
index 0000000..6e56762
--- /dev/null
+++ b/bi-ui/src/api/SSE.js
@@ -0,0 +1,169 @@
+import { fetchEventSource } from '@microsoft/fetch-event-source'
+import { useAuthStore } from '@/store'
+
+/**
+ * @description: 创建sse连接
+ */
+class ServerSentEvents {
+ static defaultConfig = {
+ base: import.meta.env.VITE_BASE_API, // 基础地址
+ url: '/sse', // 地址
+ data: undefined, // 请求正文
+ params: undefined, // 请求参数
+ method: 'get', // 提交方式
+ auth: false, // 是否携带token
+ json: true, // 是否返回json
+ returnData: true, // json数据是否返回data属性
+ reconnect: true, //是否重连
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ onopen: () => { },
+ onmessage: () => { },
+ onerror: () => { },
+ onclose: () => { }
+ }
+
+ constructor(config) {
+ if (config) {
+ this.setConfig(config)
+ this.init()
+ }
+ }
+
+ static get(url, onmessage = () => { }, config = {}) {
+ config.onmessage = onmessage
+ config.url = url
+ return new ServerSentEvents(config)
+ }
+
+ static post(url, data, onmessage = () => { }, config = {}) {
+ config.onmessage = onmessage
+ config.url = url
+ config.method = 'post'
+ config.data = data
+ return new ServerSentEvents(config)
+ }
+
+ setConfig(config) {
+ this.config = {
+ ctrl: new AbortController(),
+ ...ServerSentEvents.defaultConfig,
+ ...config
+ }
+ }
+ init() {
+ if (this.config.auth) {
+ this.headers.Authorization = 'Bearer ' + new useAuthStore().token
+ }
+ let url = this.config.url
+ // 如果url不含协议
+ if (url.indexOf("//") == -1) {
+ url = this.config.base + url
+ }
+
+ if (this.config.params) {
+ if (url.indexOf("?") > -1) {
+ url += '&' + this.params(this.config.params)
+ } else {
+ url += '?' + this.params(this.config.params)
+ }
+ }
+
+ let body = undefined
+
+ if (this.config.data && (this.config.method === 'post' || this.config.method === 'put')) {
+ if (this.config.data.constructor == URLSearchParams) {
+ this.config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+ body = this.params(this.config.data).toString()
+ } else if (this.config.data.constructor == FormData) {
+ this.config.headers['Content-Type'] = 'multipart/form-data'
+ body = this.config.data
+ } else {
+ body = JSON.stringify(body)
+ }
+ }
+ this.config._url = url
+ this.config._body = body
+ console.debug(this.config)
+
+ this.send()
+
+ }
+
+ send() {
+ fetchEventSource(this.config._url, {
+ method: this.config.method,
+ headers: this.config.headers,
+ body: this.config._body,
+ signal: this.config.ctrl.signal,
+ onopen: this.config.onopen,
+ onmessage: (msg) => {
+ if (this.config.json) {
+ let data = JSON.parse(msg.data)
+ if (this.config.returnData) {
+ data = data.data
+ }
+ this.config.onmessage(data)
+ } else {
+ this.config.onmessage(msg)
+ }
+ },
+ onclose: () => {
+ console.info('onclose')
+ this.abort()
+ this.config.onclose()
+ if (this.config.reconnect) {
+ this.send()
+ }
+ },
+ onerror: (err) => {
+ console.error(err)
+ this.abort()
+ this.config.onerror(err)
+ }
+ })
+ }
+
+ abort() {
+ if (this.config.ctrl && !this.config.reconnect) {
+ try {
+ this.config.ctrl.abort()
+ } catch (e) {
+ console.error(e)
+ }
+ }
+
+ }
+
+ params(param) {
+ if (param == null || param == "") {
+ return new URLSearchParams();
+ }
+ if (param.constructor == Array) {
+ let param1 = new URLSearchParams();
+ for (let obj of param) {
+ param1.append(obj.name, obj.value);
+ }
+ param = param1;
+ } else if (param.constructor == Object) {
+ let param1 = new URLSearchParams();
+ for (let name in param) {
+ param1.append(name, param[name]);
+ }
+ param = param1;
+ } else {
+ if (param.constructor == HTMLFormElement) {
+ param = new FormData(param);
+ }
+ if (param.constructor == FormData || param.constructor == String) {
+ param = new URLSearchParams(param);
+ }
+ }
+
+ return param;
+ }
+
+}
+
+export default ServerSentEvents
diff --git a/bi-ui/src/api/index.js b/bi-ui/src/api/index.js
new file mode 100644
index 0000000..edc09dc
--- /dev/null
+++ b/bi-ui/src/api/index.js
@@ -0,0 +1,4 @@
+export { request, params, formData } from './request'
+export { doLogin } from './AuthApi'
+import SSE from './SSE'
+export { SSE }
\ No newline at end of file
diff --git a/bi-ui/src/api/request.js b/bi-ui/src/api/request.js
new file mode 100644
index 0000000..e288a5c
--- /dev/null
+++ b/bi-ui/src/api/request.js
@@ -0,0 +1,153 @@
+import { ElLoading, ElMessage } from 'element-plus'
+import axios from 'axios'
+import { useAuthStore } from '@/store';//导入用户仓库
+const env = import.meta.env
+
+import { useRouter,useRoute } from 'vue-router';
+
+
+console.debug('env',env,env.VITE_BASE_API)
+
+const instance = axios.create({
+ baseURL: env.VITE_BASE_API,
+ timeout: 30000,
+ showLoading: false,
+ showError: true,
+ token: true,//控制是否需要携带请求头令牌
+ returnData: true,//返回
+});
+
+let loading = null;
+
+// 添加请求拦截器
+instance.interceptors.request.use(function (config) {
+ //如果需要携带请求头令牌,则从用户仓库中获取token设置请求头x-token中
+ if (config.token) {
+ let authStore = useAuthStore();
+ if (authStore.isLogin) {
+ config.headers["Authorization"] = "Bearer "+authStore.token;
+ }
+ }
+ if (config.showLoading) {
+ loading = ElLoading.service({
+ fullscreen: true,
+ lock: true,
+ text: 'Loading',
+ background: 'rgba(0, 0, 0, 0.1)',
+ });
+ }
+
+ // 在发送请求之前做些什么
+ return config;
+}, function (error) {
+ if (loading != null) {
+ loading.close();
+ loading = null;
+ }
+ // 对请求错误做些什么
+ return Promise.reject(error);
+});
+
+// 添加响应拦截器
+instance.interceptors.response.use(function (response) {
+ // 对响应数据做点什么
+ if (loading != null) {
+ loading.close();
+ loading = null;
+ }
+
+ // console.debug(response);
+ //对错误信息进行全局提示
+ if (response.config.showError) {
+ if ("code" in response.data) {
+ // if (!response.data.ok) {
+ // ElMessage.error(response.data.message);
+ // }
+ if (response.data.code != 200) {
+ ElMessage.error(response.data.msg || response.data.message);
+ if(response.data.code == 401) {
+ let authStore = AuthStore();
+ authStore.logout();
+ useRouter().push({path:'/login', query: { to: encodeURIComponent(useRoute().fullPath) }});
+ }
+ }
+ }
+ }
+ // console.debug(response)
+ if (response.config.returnData) {
+ return response.data;
+ } else {
+ return response;
+ }
+}, function (error) {
+ if (loading != null) {
+ loading.close();
+ loading = null;
+ }
+ // 对响应错误做点什么
+ ElMessage.error("响应错误:" + error.message);
+ return Promise.reject(error);
+});
+
+/**
+* 格式化参数成URLSearchParams
+* @param {String|Array|Object|HTMLFormElement|FormData|URLSearchParams} param
+* @return {URLSearchParams}
+*/
+instance.params = function (param) {
+ if (param == null || param == "") {
+ return new URLSearchParams();
+ }
+ if (param.constructor == Array) {
+ let param1 = new URLSearchParams();
+ for (let obj of param) {
+ param1.append(obj.name, obj.value);
+ }
+ param = param1;
+ } else if (param.constructor == Object) {
+ let param1 = new URLSearchParams();
+ for (let name in param) {
+ param1.append(name, param[name]);
+ }
+ param = param1;
+ } else {
+ if (param.constructor == HTMLFormElement) {
+ param = new FormData(param);
+ }
+ if (param.constructor == FormData || param.constructor == String) {
+ param = new URLSearchParams(param);
+ }
+ }
+
+ return param;
+}
+
+instance.formData = function (param) {
+ if (param == null || param == "") {
+ return new FormData();
+ }
+ if (param.constructor == Array) {
+ let param1 = new FormData();
+ for (let obj of param) {
+ param1.append(obj.name, obj.value);
+ }
+ return param1;
+ }
+ if (param.constructor == Object) {
+ let param1 = new FormData();
+ for (let name in param) {
+ param1.append(name, param[name]);
+ }
+ return param1;
+ }
+
+ if (param.constructor == HTMLFormElement) {
+ return new FormData(param);
+ }
+ return new FormData();
+}
+
+
+export const request = instance;
+export const params = instance.params;
+export const formData = instance.formData;
\ No newline at end of file
diff --git a/bi-ui/src/assets/css/global.scss b/bi-ui/src/assets/css/global.scss
new file mode 100644
index 0000000..932bc33
--- /dev/null
+++ b/bi-ui/src/assets/css/global.scss
@@ -0,0 +1,88 @@
+@use "sass:color";
+@use "sass:map";
+/*
+全局定义变量
+*/
+$w-size: .85vw;
+
+/**
+ 说明:
+ 1. 在页面中建议使用css变量,原因有2:
+ 1.1. 主题更换/暗黑主题,可以改变父(根)标签的css变量实现
+ 1.2. 自定义组件设置css变量改变组件式样,这点在微信小程序及virtualHost下注意
+ 2. $变量对应css变量:$w-z-index -> --w-z-index
+ 3. 颜色变量说明,$colors中有main的键,对应的变量有
+ 3.1. --w-main: 颜色值
+ 3.2. --w-main-light: 颜色值 亮度 + $w-step
+ 3.3. --w-main-light-1: 颜色值 亮度 + $w-step * 2
+ 3.4. --w-main-light-2: 颜色值 亮度 + $w-step * 3
+ 3.5. --w-main-dark: 颜色值 亮度 - $w-step
+ 3.6. --w-main-dark-1: 颜色值 亮度 - $w-step * 2
+ 3.7. --w-main-dark-2: 颜色值 亮度 - $w-step * 3
+ 3.8. --w-main-h: 颜色色相
+ 3.9. --w-main-s: 颜色饱和度
+ 3.10. --w-main-l: 颜色亮度
+ 3.11. $w-step对应--w-step,亮度变化基础值
+ 4.如果需要更多的颜色:
+ 4.1. 使用css的hsl函数构造颜色: hsl(var(--w-main-h),var(--w-main-s),calc(var(--w-main-l) + 50%))
+ 4.2. 使用css的hsla函数构造透明度颜色: hsl(var(--w-main-h),var(--w-main-s),var(--w-main-l),.5)
+ 4.3. 使用css函数构造颜色,比较scss函数构造颜色在写法上显得麻烦一些,尽量使用预定义的颜色
+ 4.4. 构造颜色时,色相\饱和度\亮度\透明度都可以自由设置,但建议只修改亮度和透明度
+ */
+//颜色亮度变化值
+$w-step: 5;
+// 普通z轴基础坐标
+$w-z-index: 100;
+// 顶层z轴基础坐标
+$w-z-index-top: 1000;
+
+$colors: (
+ "main": #2781bf,
+ "text": #333,
+ "bg": #F8F8F8,
+ "primary": #3c9cff,
+ "warn": #eaa339,
+ "success": #5ac725,
+ "info": #999,
+ "error": #f56c6c,
+ "danger": #f56c6c
+);
+
+
+$dark-colors: (
+ "main": map.get($colors, "main"),
+ "text": map.get($colors, "bg"),
+ "bg": map.get($colors, "text"),
+ "primary": map.get($colors, "primary"),
+ "warn": map.get($colors, "warn"),
+ "success": map.get($colors, "success"),
+ "info": map.get($colors, "info"),
+ "error": map.get($colors, "error"),
+ "danger": map.get($colors, "danger")
+);
+
+
+
+@mixin varColor($map, $step) {
+ @each $name , $value in $map {
+ $s: color.channel($value, "saturation", $space: hsl);
+ $h: color.channel($value, "hue", $space: hsl);
+ $l: color.channel($value, "lightness", $space: hsl);
+ --w-#{$name}:#{$value};
+ --w-#{$name}-h:#{$h};
+ --w-#{$name}-s:#{$s};
+ --w-#{$name}-l:#{$l};
+ --w-#{$name}-light:#{hsl($h,$s,$l + $step)};
+ --w-#{$name}-light-1:#{hsl($h,$s,$l + ($step * 2))};
+ --w-#{$name}-light-2:#{hsl($h,$s,$l + ($step * 3))};
+ --w-#{$name}-light-3:#{hsl($h,$s,$l + ($step * 4))};
+ --w-#{$name}-light-4:#{hsl($h,$s,$l + ($step * 5))};
+ --w-#{$name}-light-5:#{hsl($h,$s,$l + ($step * 6))};
+ --w-#{$name}-dark:#{hsl($h,$s,$l - $step)};
+ --w-#{$name}-dark-1:#{hsl($h,$s,$l - ($step * 2))};
+ --w-#{$name}-dark-2:#{hsl($h,$s,$l - ($step * 3))};
+ --w-#{$name}-dark-3:#{hsl($h,$s,$l - ($step * 4))};
+ --w-#{$name}-dark-4:#{hsl($h,$s,$l - ($step * 5))};
+ --w-#{$name}-dark-5:#{hsl($h,$s,$l - ($step * 6))};
+ }
+}
\ No newline at end of file
diff --git a/bi-ui/src/assets/css/main.scss b/bi-ui/src/assets/css/main.scss
new file mode 100644
index 0000000..3afe3d3
--- /dev/null
+++ b/bi-ui/src/assets/css/main.scss
@@ -0,0 +1,189 @@
+/*
+ 入口main.js中引入的全局样式
+*/
+
+
+@font-face {
+ font-family: led;
+ src: url(../fonts/led.ttf);
+}
+
+@font-face {
+ font-family: num;
+ src: url(../fonts/num.ttf);
+}
+
+@layer {
+
+ :root,
+ .w-var {
+ --w-step: #{$w-step};
+ --w-z-index: #{$w-z-index};
+ --w-z-index-top: #{$w-z-index-top};
+ --w-size: #{$w-size};
+ @include varColor($colors, $w-step);
+ }
+
+ .dark {
+ --w-step: #{-$w-step};
+ @include varColor($dark-colors, -$w-step);
+ }
+
+ * {
+ font-family: Segoe UI, Segoe UI Midlevel, Segoe WP, Arial, sans-serif;
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+ color: inherit;
+ }
+
+ html {
+ font-size: var(--w-size);
+ color: var(--w-text);
+ background-color: var(--w-bg);
+ }
+
+
+
+ .w-abs {
+ position: absolute;
+ }
+
+
+ .w-lines {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+ .w-flex {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: row;
+ position: relative;
+ }
+
+ .w-flex-column {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+ }
+
+
+
+ /* 印章效果 */
+ .w-seal {
+ position: absolute;
+ display: flex;
+ line-height: 1;
+ justify-content: center;
+ align-items: center;
+ box-sizing: border-box;
+ width: 6em;
+ height: 6em;
+ border-radius: 10em;
+ border: .25em solid currentColor;
+ background-color: #FFF;
+ z-index: 1;
+ transform: rotate(-25deg);
+ padding: 0;
+
+ &>div {
+ border: .13em solid currentColor;
+ padding: .3em 0;
+ width: 4.3em;
+ text-align: center;
+ font-weight: bold;
+ }
+
+ &::before {
+ content: "";
+ position: absolute;
+ width: 5em;
+ height: 5em;
+ border: .15em solid currentColor;
+ border-radius: 10em;
+
+ }
+
+ &::after {
+ content: "";
+ position: absolute;
+ width: 3.5em;
+ height: 3.5em;
+ border: .15em solid currentColor;
+ border-color: currentColor #0000 currentColor #0000;
+ border-radius: 10em;
+
+ }
+ }
+
+
+ .w-loading {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ border-radius: 1em;
+ border: .2em solid currentColor;
+ border-top-color: #0000;
+ animation: w-am-loading 1s infinite;
+ }
+
+ @keyframes w-am-loading {
+ from {
+ transform: rotate(0deg);
+ }
+
+ to {
+ transform: rotate(360deg);
+ }
+ }
+
+ .w-radio,
+ .w-checkbox {
+ --btn-color-inner: var(--btn-color, currentColor);
+ --opacity: .6;
+ transition: all .3s;
+ cursor: pointer;
+
+
+ &::before {
+ content: '';
+ font-size: var(--btn-size, inherit);
+ width: 1em;
+ height: 1em;
+ opacity: var(--opacity);
+ box-sizing: border-box;
+ border: solid 1px var(--btn-color-inner);
+ margin-right: .2em;
+ border-radius: .2em;
+ background-color: var(--btn-bg-color-inner, #0000);
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB0PSIxNzA5NzA3MjQ5OTg3IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQyODUiIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiI+PHBhdGggZD0iTTg0My42OTM5NTkgMjkzLjYwOTA2MSA0MjUuMjU1ODY5IDcxMi4wNTYzNjIgMTg2LjE0NTAyNiA0NzIuOTQ3NTY2IDY2LjU3OTg4MyA1OTIuNTA0NTIyIDQyNS4yNTU4NjkgOTUxLjE2NTE1OCA5NjMuMjYwMTI2IDQxMy4xNzQyMDRaIiBwLWlkPSI0Mjg2IiBmaWxsPSIjZmZmZmZmIj48L3BhdGg+PC9zdmc+");
+ background-size: .65em .65em;
+ background-repeat: no-repeat;
+ background-position: var(--background-position-inner, center -1em);
+ transition: all .3s;
+ overflow: hidden;
+ }
+
+ &.selected {
+ --btn-color-inner: var(--selected-btn-color, var(--w-main));
+ --opacity: 1;
+ --btn-bg-color-inner: var(--selected-btn-color, var(--w-main));
+ --background-position-inner: center .1em;
+ color: var(--selected-text-color, currentColor);
+ }
+
+ }
+
+ .w-radio::before {
+ border-radius: 1em;
+ }
+
+
+}
\ No newline at end of file
diff --git a/bi-ui/src/assets/fonts/LED.ttf b/bi-ui/src/assets/fonts/LED.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..28a319ed0138d0e4a7c0ae98c0294156eea73c14
GIT binary patch
literal 9060
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
Gu=Bq@R=M8*
literal 0
HcmV?d00001
diff --git a/bi-ui/src/assets/fonts/num.ttf b/bi-ui/src/assets/fonts/num.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..3ce75339d6cc2f2544dd815c06eae9ca66301815
GIT binary patch
literal 16084
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
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/back.svg b/bi-ui/src/assets/icons/svg/back.svg
new file mode 100644
index 0000000..5d35514
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/back.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/bug.svg b/bi-ui/src/assets/icons/svg/bug.svg
new file mode 100644
index 0000000..05a150d
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/build.svg b/bi-ui/src/assets/icons/svg/build.svg
new file mode 100644
index 0000000..97c4688
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/button.svg b/bi-ui/src/assets/icons/svg/button.svg
new file mode 100644
index 0000000..904fddc
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/button.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/cascader.svg b/bi-ui/src/assets/icons/svg/cascader.svg
new file mode 100644
index 0000000..e256024
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/cascader.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/chart.svg b/bi-ui/src/assets/icons/svg/chart.svg
new file mode 100644
index 0000000..27728fb
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/checkbox.svg b/bi-ui/src/assets/icons/svg/checkbox.svg
new file mode 100644
index 0000000..013fd3a
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/checkbox.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/clipboard.svg b/bi-ui/src/assets/icons/svg/clipboard.svg
new file mode 100644
index 0000000..90923ff
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/clipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/code.svg b/bi-ui/src/assets/icons/svg/code.svg
new file mode 100644
index 0000000..5f9c5ab
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/code.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/color.svg b/bi-ui/src/assets/icons/svg/color.svg
new file mode 100644
index 0000000..44a81aa
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/color.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/component.svg b/bi-ui/src/assets/icons/svg/component.svg
new file mode 100644
index 0000000..29c3458
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/component.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/dashboard.svg b/bi-ui/src/assets/icons/svg/dashboard.svg
new file mode 100644
index 0000000..5317d37
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/dashboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/date-range.svg b/bi-ui/src/assets/icons/svg/date-range.svg
new file mode 100644
index 0000000..fda571e
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/date-range.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/date.svg b/bi-ui/src/assets/icons/svg/date.svg
new file mode 100644
index 0000000..52dc73e
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/date.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/dict.svg b/bi-ui/src/assets/icons/svg/dict.svg
new file mode 100644
index 0000000..4849377
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/dict.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/documentation.svg b/bi-ui/src/assets/icons/svg/documentation.svg
new file mode 100644
index 0000000..7043122
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/documentation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/download.svg b/bi-ui/src/assets/icons/svg/download.svg
new file mode 100644
index 0000000..87a04f9
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/drag.svg b/bi-ui/src/assets/icons/svg/drag.svg
new file mode 100644
index 0000000..4185d3c
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/drag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/druid.svg b/bi-ui/src/assets/icons/svg/druid.svg
new file mode 100644
index 0000000..a2b4b4e
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/druid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/edit.svg b/bi-ui/src/assets/icons/svg/edit.svg
new file mode 100644
index 0000000..d26101f
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/edit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/education.svg b/bi-ui/src/assets/icons/svg/education.svg
new file mode 100644
index 0000000..7bfb01d
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/education.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/email.svg b/bi-ui/src/assets/icons/svg/email.svg
new file mode 100644
index 0000000..74d25e2
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/example.svg b/bi-ui/src/assets/icons/svg/example.svg
new file mode 100644
index 0000000..46f42b5
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/example.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/excel.svg b/bi-ui/src/assets/icons/svg/excel.svg
new file mode 100644
index 0000000..74d97b8
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/excel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/exit.svg b/bi-ui/src/assets/icons/svg/exit.svg
new file mode 100644
index 0000000..158860e
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/exit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/eye-open.svg b/bi-ui/src/assets/icons/svg/eye-open.svg
new file mode 100644
index 0000000..88dcc98
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/eye-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/eye.svg b/bi-ui/src/assets/icons/svg/eye.svg
new file mode 100644
index 0000000..16ed2d8
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/form.svg b/bi-ui/src/assets/icons/svg/form.svg
new file mode 100644
index 0000000..dcbaa18
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/form.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/fullscreen-exit.svg b/bi-ui/src/assets/icons/svg/fullscreen-exit.svg
new file mode 100644
index 0000000..485c128
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/fullscreen-exit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/fullscreen.svg b/bi-ui/src/assets/icons/svg/fullscreen.svg
new file mode 100644
index 0000000..0e86b6f
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/github.svg b/bi-ui/src/assets/icons/svg/github.svg
new file mode 100644
index 0000000..db0a0d4
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/guide.svg b/bi-ui/src/assets/icons/svg/guide.svg
new file mode 100644
index 0000000..b271001
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/guide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/icon.svg b/bi-ui/src/assets/icons/svg/icon.svg
new file mode 100644
index 0000000..82be8ee
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/input.svg b/bi-ui/src/assets/icons/svg/input.svg
new file mode 100644
index 0000000..ab91381
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/input.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/international.svg b/bi-ui/src/assets/icons/svg/international.svg
new file mode 100644
index 0000000..e9b56ee
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/international.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/job.svg b/bi-ui/src/assets/icons/svg/job.svg
new file mode 100644
index 0000000..2a93a25
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/job.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/language.svg b/bi-ui/src/assets/icons/svg/language.svg
new file mode 100644
index 0000000..0082b57
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/lb.svg b/bi-ui/src/assets/icons/svg/lb.svg
new file mode 100644
index 0000000..7368bc7
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/lb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/link.svg b/bi-ui/src/assets/icons/svg/link.svg
new file mode 100644
index 0000000..48197ba
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/list.svg b/bi-ui/src/assets/icons/svg/list.svg
new file mode 100644
index 0000000..20259ed
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/lock.svg b/bi-ui/src/assets/icons/svg/lock.svg
new file mode 100644
index 0000000..74fee54
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/log.svg b/bi-ui/src/assets/icons/svg/log.svg
new file mode 100644
index 0000000..d879d33
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/log.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/logininfor.svg b/bi-ui/src/assets/icons/svg/logininfor.svg
new file mode 100644
index 0000000..267f844
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/logininfor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/message.svg b/bi-ui/src/assets/icons/svg/message.svg
new file mode 100644
index 0000000..14ca817
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/money.svg b/bi-ui/src/assets/icons/svg/money.svg
new file mode 100644
index 0000000..c1580de
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/monitor.svg b/bi-ui/src/assets/icons/svg/monitor.svg
new file mode 100644
index 0000000..bc308cb
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/monitor.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/nested.svg b/bi-ui/src/assets/icons/svg/nested.svg
new file mode 100644
index 0000000..06713a8
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/nested.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/number.svg b/bi-ui/src/assets/icons/svg/number.svg
new file mode 100644
index 0000000..ad5ce9a
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/number.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/online.svg b/bi-ui/src/assets/icons/svg/online.svg
new file mode 100644
index 0000000..330a202
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/online.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/password.svg b/bi-ui/src/assets/icons/svg/password.svg
new file mode 100644
index 0000000..557b335
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/password.svg
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/pdf.svg b/bi-ui/src/assets/icons/svg/pdf.svg
new file mode 100644
index 0000000..957aa0c
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/pdf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/people.svg b/bi-ui/src/assets/icons/svg/people.svg
new file mode 100644
index 0000000..2bd54ae
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/people.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/peoples.svg b/bi-ui/src/assets/icons/svg/peoples.svg
new file mode 100644
index 0000000..aab852e
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/peoples.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/phone.svg b/bi-ui/src/assets/icons/svg/phone.svg
new file mode 100644
index 0000000..ab8e8c4
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/post.svg b/bi-ui/src/assets/icons/svg/post.svg
new file mode 100644
index 0000000..2922c61
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/qq.svg b/bi-ui/src/assets/icons/svg/qq.svg
new file mode 100644
index 0000000..ee13d4e
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/qq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/question.svg b/bi-ui/src/assets/icons/svg/question.svg
new file mode 100644
index 0000000..cf75bd4
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/question.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/radio.svg b/bi-ui/src/assets/icons/svg/radio.svg
new file mode 100644
index 0000000..0cde345
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/radio.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/rate.svg b/bi-ui/src/assets/icons/svg/rate.svg
new file mode 100644
index 0000000..aa3b14d
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/rate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/redis-list.svg b/bi-ui/src/assets/icons/svg/redis-list.svg
new file mode 100644
index 0000000..98a15b2
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/redis-list.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/redis.svg b/bi-ui/src/assets/icons/svg/redis.svg
new file mode 100644
index 0000000..2f1d62d
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/redis.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/reload.svg b/bi-ui/src/assets/icons/svg/reload.svg
new file mode 100644
index 0000000..1be3554
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/reload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/row.svg b/bi-ui/src/assets/icons/svg/row.svg
new file mode 100644
index 0000000..0780992
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/row.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/search.svg b/bi-ui/src/assets/icons/svg/search.svg
new file mode 100644
index 0000000..84233dd
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/select.svg b/bi-ui/src/assets/icons/svg/select.svg
new file mode 100644
index 0000000..d628382
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/select.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/server.svg b/bi-ui/src/assets/icons/svg/server.svg
new file mode 100644
index 0000000..eb287e3
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/server.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/shopping.svg b/bi-ui/src/assets/icons/svg/shopping.svg
new file mode 100644
index 0000000..87513e7
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/size.svg b/bi-ui/src/assets/icons/svg/size.svg
new file mode 100644
index 0000000..ddb25b8
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/size.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/skill.svg b/bi-ui/src/assets/icons/svg/skill.svg
new file mode 100644
index 0000000..a3b7312
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/skill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/slider.svg b/bi-ui/src/assets/icons/svg/slider.svg
new file mode 100644
index 0000000..fbe4f39
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/slider.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/star.svg b/bi-ui/src/assets/icons/svg/star.svg
new file mode 100644
index 0000000..6cf86e6
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/swagger.svg b/bi-ui/src/assets/icons/svg/swagger.svg
new file mode 100644
index 0000000..05d4e7b
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/swagger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/switch.svg b/bi-ui/src/assets/icons/svg/switch.svg
new file mode 100644
index 0000000..0ba61e3
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/switch.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/sys.svg b/bi-ui/src/assets/icons/svg/sys.svg
new file mode 100644
index 0000000..7753cd7
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/sys.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/system.svg b/bi-ui/src/assets/icons/svg/system.svg
new file mode 100644
index 0000000..5992593
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/system.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/tab.svg b/bi-ui/src/assets/icons/svg/tab.svg
new file mode 100644
index 0000000..b4b48e4
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/table.svg b/bi-ui/src/assets/icons/svg/table.svg
new file mode 100644
index 0000000..0e3dc9d
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/textarea.svg b/bi-ui/src/assets/icons/svg/textarea.svg
new file mode 100644
index 0000000..2709f29
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/textarea.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/theme.svg b/bi-ui/src/assets/icons/svg/theme.svg
new file mode 100644
index 0000000..5982a2f
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/theme.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/time-range.svg b/bi-ui/src/assets/icons/svg/time-range.svg
new file mode 100644
index 0000000..13c1202
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/time-range.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/time.svg b/bi-ui/src/assets/icons/svg/time.svg
new file mode 100644
index 0000000..b376e32
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/time.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/tool.svg b/bi-ui/src/assets/icons/svg/tool.svg
new file mode 100644
index 0000000..48e0e35
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/tool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/tree-table.svg b/bi-ui/src/assets/icons/svg/tree-table.svg
new file mode 100644
index 0000000..8aafdb8
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/tree-table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/tree.svg b/bi-ui/src/assets/icons/svg/tree.svg
new file mode 100644
index 0000000..dd4b7dd
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/upload.svg b/bi-ui/src/assets/icons/svg/upload.svg
new file mode 100644
index 0000000..bae49c0
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/upload.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/user.svg b/bi-ui/src/assets/icons/svg/user.svg
new file mode 100644
index 0000000..0ba0716
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/validCode.svg b/bi-ui/src/assets/icons/svg/validCode.svg
new file mode 100644
index 0000000..b9dc3b6
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/validCode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/wechat.svg b/bi-ui/src/assets/icons/svg/wechat.svg
new file mode 100644
index 0000000..c586e55
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/wechat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/icons/svg/zip.svg b/bi-ui/src/assets/icons/svg/zip.svg
new file mode 100644
index 0000000..f806fc4
--- /dev/null
+++ b/bi-ui/src/assets/icons/svg/zip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/bi-ui/src/assets/imgs/avatar.png b/bi-ui/src/assets/imgs/avatar.png
new file mode 100644
index 0000000000000000000000000000000000000000..194a3f5619b9aa0fadb0816f9faecd948af1c54d
GIT binary patch
literal 48492
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