ZaiZai 1 éve
szülő
commit
cae740a900

+ 4 - 4
package.json

@@ -18,9 +18,9 @@
         "dayjs": "^1.11.10",
         "echarts": "^5.4.3",
         "element-plus": "2.3.14",
-        "hc-vue3-ui": "^1.9.0",
+        "hc-vue3-ui": "^2.0.0",
         "js-base64": "^3.7.5",
-        "js-fast-way": "0.2.7",
+        "js-fast-way": "0.2.9",
         "js-md5": "^0.7.3",
         "nprogress": "^0.2.0",
         "pinia": "^2.1.6",
@@ -37,10 +37,10 @@
         "archiver": "^6.0.1",
         "eslint": "^8.48.0",
         "eslint-plugin-vue": "^9.17.0",
-        "sass": "^1.67.0",
+        "sass": "^1.68.0",
         "unocss": "^0.56.0",
         "unocss-preset-extra": "^0.5.2",
-        "unocss-preset-scrollbar": "^0.2.1",
+        "unocss-preset-scrollbar": "^0.3.0",
         "vite": "^4.4.9"
     }
 }

+ 3 - 3
src/App.vue

@@ -9,7 +9,7 @@ import { nextTick, ref, watch } from 'vue'
 import { useAppStore } from '~src/store'
 import { useOsTheme } from 'hc-vue3-ui'
 import { getObjValue, setElementMainColor } from 'js-fast-way'
-import { getStoreValue, setStoreValue } from '~uti/storage'
+import { getStore, setStore } from 'hc-vue3-ui'
 import { getVersionJson } from '~api/other'
 import split from 'split.js'
 
@@ -47,10 +47,10 @@ nextTick(() => {
 
 //获取版本更新信息
 const getVersionJsonApi = async () => {
-    const cache_version = getStoreValue('version')
+    const cache_version = getStore('version')
     const { res } = await getVersionJson()
     const version = getObjValue(res)?.value
-    setStoreValue('version', version)
+    setStore('version', version)
     if (cache_version && cache_version !== version) {
         window?.$messageBox?.alert('检测到有新版本更新,请点击更新,或手动刷新网页更新,如果不更新,将无法使用相关功能', '更新提醒', {
             showCancelButton: true,

+ 4 - 4
src/api/modules/menu.js

@@ -1,7 +1,7 @@
-import { httpApi } from '../request/httpApi'
+import { HcApi } from '../request/index'
 import website from '~src/config/index'
 
-export const getRoutes = (msg = true) => httpApi({
+export const getRoutes = (msg = true) => HcApi({
     url: '/api/blade-system/menu/routes',
     method: 'get',
     params: {
@@ -9,12 +9,12 @@ export const getRoutes = (msg = true) => httpApi({
     },
 }, msg)
 
-export const getButtons = (msg = true) => httpApi({
+export const getButtons = (msg = true) => HcApi({
     url: '/api/blade-system/menu/buttons',
     method: 'get',
 }, msg)
 
-export const getAazyList = (form, msg = true) => httpApi({
+export const getAazyList = (form, msg = true) => HcApi({
     url: '/api/blade-system/menu/lazy-list',
     method: 'get',
     params: form,

+ 8 - 8
src/api/modules/other.js

@@ -1,35 +1,35 @@
-import { httpApi } from '../request/httpApi'
+import { HcApi } from '../request/index'
 
 //用户配置保存
-export const userConfigSave = (form, msg = true) => httpApi({
+export const userConfigSave = (form, msg = true) => HcApi({
     url: '/api/blade-business/defaultConfig/saveOrUpdate',
     method: 'post',
     data: form,
 }, msg)
 
 //用户配置详情
-export const userConfigInfo = (form = {}, msg = true) => httpApi({
+export const userConfigInfo = (form = {}, msg = true) => HcApi({
     url: '/api/blade-business/defaultConfig/detail',
     method: 'get',
     params: form,
 }, msg)
 
 //获取类型
-export const getDictionary = (form, msg = true) => httpApi({
+export const getDictionary = (form, msg = true) => HcApi({
     url: '/api/blade-system/dict/dictionary',
     method: 'get',
     params: form,
 }, msg)
 
 //获取用户列表
-export const getContractUserList = (form, msg = true) => httpApi({
+export const getContractUserList = (form, msg = true) => HcApi({
     url: '/api/blade-manager/contractInfo/get-contract-userList',
     method: 'get',
     params: form,
 }, msg)
 
 //获取租户详情
-export const getTenantDetail = (id) => httpApi({
+export const getTenantDetail = (id) => HcApi({
     url: '/api/blade-system/tenant/detail',
     method: 'get',
     params: {
@@ -38,13 +38,13 @@ export const getTenantDetail = (id) => httpApi({
 }, true)
 
 //获取更新信息
-export const getVersionJson = () => httpApi({
+export const getVersionJson = () => HcApi({
     url: 'version.json?time=' + new Date().getTime(),
     method: 'get',
 }, false)
 
 //获取项目下的合同段信息
-export const getContractInfo = (form, msg = true) => httpApi({
+export const getContractInfo = (form, msg = true) => HcApi({
     url: '/api/blade-manager/contractInfo/get-contractInfo',
     method: 'get',
     params: form,

+ 23 - 23
src/api/modules/user.js

@@ -1,8 +1,8 @@
-import { httpApi } from '../request/httpApi'
+import { HcApi } from '../request/index'
 import website from '~src/config/index'
 import md5 from 'js-md5'
 
-export const userLogin = ({ tenantId, deptId, roleId, username, password, type, key, code }, msg = true) => httpApi({
+export const userLogin = ({ tenantId, deptId, roleId, username, password, type, key, code }) => HcApi({
     url: '/api/blade-auth/oauth/token',
     method: 'post',
     headers: {
@@ -20,9 +20,9 @@ export const userLogin = ({ tenantId, deptId, roleId, username, password, type,
         scope: 'all',
         type,
     },
-}, msg)
+})
 
-export const refreshToken = (refresh_token, tenantId, deptId, roleId, msg = true) => httpApi({
+export const refreshToken = (refresh_token, tenantId, deptId, roleId) => HcApi({
     url: '/api/blade-auth/oauth/token',
     method: 'post',
     headers: {
@@ -36,14 +36,14 @@ export const refreshToken = (refresh_token, tenantId, deptId, roleId, msg = true
         grant_type: 'refresh_token',
         scope: 'all',
     },
-}, msg)
+})
 
-export const logout = (msg = true) => httpApi({
+export const logout = () => HcApi({
     url: '/api/blade-auth/oauth/logout',
     method: 'get',
-}, msg)
+})
 
-export const registerGuest = (form, oauthId, msg = true) => httpApi({
+export const registerGuest = (form, oauthId) => HcApi({
     url: '/api/blade-user/register-guest',
     method: 'post',
     params: {
@@ -53,45 +53,45 @@ export const registerGuest = (form, oauthId, msg = true) => httpApi({
         password: form.password,
         oauthId,
     },
-}, msg)
+})
 
-export const getProjectAndContract = (msg = true) => httpApi({
+export const getProjectAndContract = () => HcApi({
     url: '/api/blade-business/userViewProjectContract/queryUserViewProjectAndContract',
     method: 'get',
-}, msg)
+})
 
-export const getCaptcha = (msg = true) => httpApi({
+export const getCaptcha = () => HcApi({
     url: '/api/blade-auth/oauth/captcha',
     method: 'get',
-}, msg)
+})
 
-export const getUserInfo = (msg = true) => httpApi({
+export const getUserInfo = () => HcApi({
     url: '/api/blade-auth/oauth/user-info',
     method: 'get',
-}, msg)
+})
 
-export const sendLogs = (list, msg = true) => httpApi({
+export const sendLogs = (list) => HcApi({
     url: '/api/blade-auth/oauth/logout',
     method: 'post',
     data: list,
-}, msg)
+})
 
-export const clearCache = (msg = true) => httpApi({
+export const clearCache = () => HcApi({
     url: '/api/blade-auth/oauth/clear-cache',
     method: 'get',
-}, msg)
+})
 
-export const loginByToken = (form, msg = true) => httpApi({
+export const loginByToken = (form) => HcApi({
     url: '/api/blade-user/loginByToken',
     method: 'post',
     params: form,
-}, msg)
+})
 
 //获取租户ID
-export const getTenantID = (domain, msg = true) => httpApi({
+export const getTenantID = (domain) => HcApi({
     url: '/api/blade-system/tenant/info',
     method: 'get',
     params: {
         domain,
     },
-}, msg)
+})

+ 6 - 6
src/api/modules/userInfo/index.js

@@ -1,9 +1,9 @@
-import { httpApi } from '../../request/httpApi'
+import { HcApi } from '../../request/index'
 
 export default {
     //修改密码
     async updatePassword(form, msg = true) {
-        return httpApi({
+        return HcApi({
             url: '/api/blade-user/update-password',
             method: 'post',
             params: form,
@@ -11,7 +11,7 @@ export default {
     },
     //设置默认项目
     async setDefaultProject(form, msg = true) {
-        return httpApi({
+        return HcApi({
             url: '/api/blade-business/defaultProject/save',
             method: 'post',
             data: form,
@@ -19,7 +19,7 @@ export default {
     },
     //获取默认项目
     async getDefaultProject(form, msg = true) {
-        return httpApi({
+        return HcApi({
             url: '/api/blade-business/defaultProject/queryUserDefault',
             method: 'get',
             params: form,
@@ -27,7 +27,7 @@ export default {
     },
     //更新用户信息
     async updateUserInfo(form, msg = true) {
-        return httpApi({
+        return HcApi({
             url: '/api/blade-user/update-info',
             method: 'post',
             data: form,
@@ -35,7 +35,7 @@ export default {
     },
     //获取用户信息
     async queryCurrentUserData(form, msg = true) {
-        return httpApi({
+        return HcApi({
             url: '/api/blade-business/userViewProjectContract/queryCurrentUserData',
             method: 'post',
             data: form,

+ 0 - 16
src/api/request/header.js

@@ -1,16 +0,0 @@
-import { Base64 } from 'js-base64'
-import website from '~src/config'
-import { getToken } from '~src/api/util/auth'
-
-export function getTokenHeader(text = false) {
-    let headers = {}
-    headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`
-    //让每个请求携带token
-    const token = getToken()
-    if (token) headers[website.tokenHeader] = 'bearer ' + token
-    //headers中配置text请求
-    if (text === true) {
-        headers['Content-Type'] = 'text/plain'
-    }
-    return headers
-}

+ 0 - 74
src/api/request/httpApi.js

@@ -1,74 +0,0 @@
-import request from './index'
-import { getObjValue } from 'js-fast-way'
-import { apiErrorMessage, apiWarningMessage } from '~com/message/index.js'
-
-//封装的请求
-export const httpApi = async (obj, message = true) => {
-    return new Promise((resolve) => {
-        //发起请求
-        request(obj).then(async (response) => {
-            resolve(await getResData(response, false))
-        }).catch(async (response) => {
-            if (message) {
-                const msg = getMsgVal(response)
-                if (msg) window.$message?.error(msg)
-            }
-            resolve(await getResData(response, true))
-        })
-    })
-}
-
-//处理数据
-const getResData = async (response, error = false) => {
-    return new Promise((resolve) => {
-        const { headers, data, config } = response
-        const resData = getObjValue(data)
-        const httpData = {
-            response, res: data, data: resData?.data,
-            code: resData?.code, msg: resData?.msg, status: response?.status,
-            headers: headers, disposition: getDisposition(headers),
-            message: getMsgVal(response), error: error,
-        }
-        //处理延迟响应
-        if (!error) {
-            const { startTime, endTime } = config.metadata
-            if (config.isDelay) {
-                const duration = endTime - startTime
-                if (duration < 500) {
-                    setTimeout(() => {
-                        resolve(httpData)
-                    }, 1000 - duration)
-                } else {
-                    resolve(httpData)
-                }
-            } else {
-                resolve(httpData)
-            }
-        } else {
-            resolve(httpData)
-        }
-    })
-}
-
-//获取msg消息内容
-const getMsgVal = (response) => {
-    const { code, msg, error_description } = getObjValue(response.data)
-    if (code === 404) {
-        apiErrorMessage()
-        return ''
-    } else if (code === 500 || code === 504) {
-        apiWarningMessage()
-        return ''
-    } else {
-        return msg || error_description || '未知错误'
-    }
-}
-
-//响应头中获取content-disposition
-const getDisposition = (headers) => {
-    try {
-        return headers['content-disposition']
-    } catch {
-        return ''
-    }
-}

+ 21 - 62
src/api/request/index.js

@@ -1,67 +1,26 @@
-import axios from 'axios'
-import { Base64 } from 'js-base64'
-import website from '~src/config'
+import { httpApi } from 'hc-vue3-ui'
 import router from '~src/router/index'
-import { getToken } from '~src/api/util/auth'
-import { toSerialize } from 'js-fast-way'
-import { getStoreValue } from '~src/utils/storage'
 
-//默认超时时间
-axios.defaults.timeout = 0
-//返回其他状态码
-axios.defaults.validateStatus = function (status) {
-    return status >= 200 && status <= 500
+//封装的请求
+export const HcApi = async (obj, msg = true) => {
+    return new Promise((resolve) => {
+        //发起请求
+        httpApi(obj).then((response) => {
+            //console.log(response)
+            resolve(response)
+        }).catch((response) => {
+            getResData(response, msg)
+            resolve(response)
+        })
+    })
 }
-//跨域请求,允许保存cookie
-axios.defaults.withCredentials = true
 
-//http request拦截
-axios.interceptors.request.use(config => {
-    const meta = (config['meta'] || {})
-    const isToken = meta['isToken'] === false
-    config.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`
-    //让每个请求携带token
-    const token = getToken()
-    if (token && !isToken) {
-        config.headers[website.tokenHeader] = 'bearer ' + token
+//处理数据
+const getResData = ({ code, msg }, isMsg = false) => {
+    if (code === 401) {
+        window.$message?.error('身份失效,请重新登录!')
+        router.push({ path: '/login' }).then()
+    } else if (code !== 404 && code !== 500 && code !== 504) {
+        if (isMsg) window.$message?.error(msg)
     }
-    //headers中配置text请求
-    if (config['text'] === true) {
-        config.headers['Content-Type'] = 'text/plain'
-    }
-    //headers中配置serialize为true开启序列化
-    if (config.method === 'post' && meta['isSerialize'] === true) {
-        config.data = toSerialize(config.data)
-    }
-    config.metadata = { startTime: new Date() }
-    return config
-}, error => {
-    return Promise.reject(error)
-})
-
-//http response 拦截
-axios.interceptors.response.use(res => {
-    //响应时间
-    res.config.metadata.endTime = new Date()
-    //获取状态码
-    const status = res?.data?.code || res.status
-    //如果是401则跳转到登录页面
-    if (status === 401) {
-        const isSource = getStoreValue('isSource')
-        if (!isSource) {
-            window.$message?.error('身份失效,请重新登录!')
-            router.push({ path: '/login' }).then()
-        } else {
-            router.push({ name: 'app-auth' }).then()
-        }
-    }
-    // 如果请求为非200, 自行catch逻辑处理
-    if (status !== 200) {
-        return Promise.reject(res)
-    }
-    return res
-}, error => {
-    return Promise.reject(new Error(error))
-})
-
-export default axios
+}

+ 0 - 40
src/api/util/auth.js

@@ -1,40 +0,0 @@
-import website from '~src/config/index'
-import { calcDate, delStoreData, getStoreData, setStoreData } from 'js-fast-way'
-
-export const getToken = () => {
-    getTokenTime(website.tokenKey)
-    return getStoreData(website.tokenKey)
-}
-
-export const setToken = (token) => {
-    setStoreData(website.tokenKey, token)
-}
-
-export const getRefreshToken = () => {
-    getTokenTime(website.refreshTokenKey)
-    return getStoreData(website.refreshTokenKey)
-}
-
-export const setRefreshToken = (token) => {
-    setStoreData(website.refreshTokenKey, token)
-}
-
-export const removeToken = () => {
-    delStoreData(website.tokenKey)
-}
-
-export const removeRefreshToken = () => {
-    delStoreData(website.refreshTokenKey)
-}
-
-//计算token是否过期
-const getTokenTime = (tokenKey) => {
-    const token = getStoreData(tokenKey, true)
-    if (token) {
-        const date = calcDate(token.datetime, new Date().getTime())
-        if (date.seconds > 2000) {
-            removeToken()
-            removeRefreshToken()
-        }
-    }
-}

+ 2 - 2
src/layout/modules/HelpInfoBar.vue

@@ -34,8 +34,8 @@
 import { nextTick, ref, watch } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
 import { useAppStore } from '~src/store'
-import { getStoreValue } from '~src/utils/storage'
 import { getObjValue, getToObjVal } from 'js-fast-way'
+import { getStore } from 'hc-vue3-ui'
 
 //初始变量
 const router = useRouter()
@@ -43,7 +43,7 @@ const useRoutes = useRoute()
 const useAppState = useAppStore()
 
 //相关变量
-const route = getObjValue(getStoreValue('route'))
+const route = getObjValue(getStore('route'))
 const bubbleVal = ref(useAppState.getBubble)
 const videoUrl = ref('')
 const excelUrl = ref('')

+ 8 - 8
src/layout/modules/TopMenuBar.vue

@@ -23,7 +23,7 @@
 <script setup>
 import { onMounted, ref, watch } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
-import { getStoreValue, setStoreValue } from '~src/utils/storage'
+import { getStore, setStore } from 'hc-vue3-ui'
 import { useAppStore } from '~src/store'
 
 //初始组合式
@@ -32,7 +32,7 @@ const useRoutes = useRoute()
 const store = useAppStore()
 
 //初始变量
-const barMenuData = ref(getStoreValue('bar-menu-datas') || [])
+const barMenuData = ref(getStore('bar-menu-datas') || [])
 const barRoutes = ref({ key: '', path: '', title: '', query: null })
 
 //渲染完成
@@ -60,7 +60,7 @@ const setBarMenuData = () => {
     if (index === -1) {
         barMenuData.value.push({ path, key: key, title, query })
     }
-    setStoreValue('bar-menu-datas', barMenuData.value)
+    setStore('bar-menu-datas', barMenuData.value)
 }
 
 //菜单被点击
@@ -93,12 +93,12 @@ const handleMenuSelect = ({ key }) => {
         barMenuCloseClick(barItem.value, barItemIndex.value)
     } else if (key === 'all') {
         barMenuData.value = []
-        setStoreValue('bar-menu-datas', [])
+        setStore('bar-menu-datas', [])
         router.push({ name: store.homeUrl })
     } else if (key === 'other') {
         const { key } = barRoutes.value
         barMenuData.value = barMenuData.value.filter(item => item.key === key)
-        setStoreValue('bar-menu-datas', barMenuData.value)
+        setStore('bar-menu-datas', barMenuData.value)
     }
 }
 
@@ -116,15 +116,15 @@ const barMenuCloseClick = (item, index) => {
             items = barMenuData.value[indexs]
         }
         if (indexs < 0) {
-            setStoreValue('bar-menu-datas', barMenuData.value)
+            setStore('bar-menu-datas', barMenuData.value)
             router.push({ name: store.homeUrl })
         } else {
             barRoutes.value = items
-            setStoreValue('bar-menu-datas', barMenuData.value)
+            setStore('bar-menu-datas', barMenuData.value)
             router.push({ name: items.key, query: items.query })
         }
     } else {
-        setStoreValue('bar-menu-datas', barMenuData.value)
+        setStore('bar-menu-datas', barMenuData.value)
     }
 }
 </script>

+ 2 - 2
src/layout/modules/UserInfoBar.vue

@@ -25,7 +25,7 @@ import { useAppStore } from '~src/store'
 import website from '~src/config/index'
 import avatarPng from '~src/assets/images/avatar.png'
 import { LogOut, RefreshToken } from '~sto/user'
-import { getStoreValue } from '~src/utils/storage'
+import { getStore } from 'hc-vue3-ui'
 import { calcDate, isNullES } from 'js-fast-way'
 
 //变量
@@ -48,7 +48,7 @@ onMounted(() => {
 //刷新token
 const getRefreshToken = () => {
     setInterval(() => {
-        const token = getStoreValue('token', true) || {}
+        const token = getStore('token', true) || {}
         const date = calcDate(token.datetime, new Date().getTime())
         if (isNullES(date)) return
         if (date.seconds >= website.tokenTime && !refreshLock.value) {

+ 2 - 1
src/main.js

@@ -3,6 +3,7 @@ import 'virtual:uno.css'
 import { createApp } from 'vue'
 import setupPinia from './store/init'
 import router, { setupRouter } from './router'
+import website from '~src/config'
 import App from './App.vue'
 
 //饿了么UI
@@ -41,7 +42,7 @@ async function bootstrap() {
         locale: zhCn,
     })
     // hc-vue3-ui
-    app.use(HcVue3UI)
+    app.use(HcVue3UI, website)
 
     // 组件注册全局
     setupComponents(app)

+ 0 - 80
src/plugins/crypto.js

@@ -1,80 +0,0 @@
-import CryptoJS from 'crypto-js'
-
-export default class crypto {
-    // 使用AesUtil.genAesKey()生成,需和后端配置保持一致
-    static aesKey = 'O2BEeIv399qHQNhD6aGW8R8DEj4bqHXm'
-
-    // 使用DesUtil.genDesKey()生成,需和后端配置保持一致
-    static desKey = 'jMVCBsFGDQr1USHo'
-
-    /**
-     * aes 加密方法
-     * @param data
-     * @returns {*}
-     */
-    static encrypt(data) {
-        return this.encryptAES(data, this.aesKey)
-    }
-
-    /**
-     * aes 解密方法
-     * @param data
-     * @returns {*}
-     */
-    static decrypt(data) {
-        return this.decryptAES(data, this.aesKey)
-    }
-
-    /**
-     * aes 加密方法,同java:AesUtil.encryptToBase64(text, aesKey);
-     */
-    static encryptAES(data, key) {
-        const dataBytes = CryptoJS.enc.Utf8.parse(data)
-        const keyBytes = CryptoJS.enc.Utf8.parse(key)
-        const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, {
-            iv: keyBytes,
-            mode: CryptoJS.mode.CBC,
-            padding: CryptoJS.pad.Pkcs7,
-        })
-        return CryptoJS.enc.Base64.stringify(encrypted.ciphertext)
-    }
-
-    /**
-     * aes 解密方法,同java:AesUtil.decryptFormBase64ToString(encrypt, aesKey);
-     */
-    static decryptAES(data, key) {
-        const keyBytes = CryptoJS.enc.Utf8.parse(key)
-        const decrypted = CryptoJS.AES.decrypt(data, keyBytes, {
-            iv: keyBytes,
-            mode: CryptoJS.mode.CBC,
-            padding: CryptoJS.pad.Pkcs7,
-        })
-        return CryptoJS.enc.Utf8.stringify(decrypted)
-    }
-
-    /**
-     * des 加密方法,同java:DesUtil.encryptToBase64(text, desKey)
-     */
-    static encryptDES(data, key) {
-        const keyHex = CryptoJS.enc.Utf8.parse(key)
-        const encrypted = CryptoJS.DES.encrypt(data, keyHex, {
-            mode: CryptoJS.mode.ECB,
-            padding: CryptoJS.pad.Pkcs7,
-        })
-        return encrypted.toString()
-    }
-
-    /**
-     * des 解密方法,同java:DesUtil.decryptFormBase64(encryptBase64, desKey);
-     */
-    static decryptDES(data, key) {
-        const keyHex = CryptoJS.enc.Utf8.parse(key)
-        const decrypted = CryptoJS.DES.decrypt({
-            ciphertext: CryptoJS.enc.Base64.parse(data),
-        }, keyHex, {
-            mode: CryptoJS.mode.ECB,
-            padding: CryptoJS.pad.Pkcs7,
-        })
-        return decrypted.toString(CryptoJS.enc.Utf8)
-    }
-}

+ 1 - 1
src/router/index.js

@@ -1,6 +1,6 @@
 import * as vueRouter from 'vue-router'
 import baseData from './modules/base'
-import { getToken } from '~src/api/util/auth'
+import { getToken } from 'hc-vue3-ui'
 import { getRouterData } from './routers'
 import NProgress from 'nprogress'
 import '~src/styles/app/nprogress.scss'

+ 2 - 2
src/router/routers.js

@@ -1,8 +1,8 @@
-import { getStoreValue } from '~src/utils/storage'
+import { getStore } from 'hc-vue3-ui'
 import { getArrValue } from 'js-fast-way'
 
 //获取路由菜单
 export const getRouterData = async (toName) => {
-    const routes = getArrValue(getStoreValue('routes'))
+    const routes = getArrValue(getStore('routes'))
     return routes.indexOf(toName) !== -1
 }

+ 46 - 44
src/store/index.js

@@ -3,40 +3,42 @@ import pinia from '~src/store/init'
 import appConfig from '~src/config/app'
 import logoIcon from '~src/assets/logo/icon.png'
 import logoName from '~src/assets/logo/name.png'
-import { clearStoreAll, getStoreValue, setStoreValue } from '~src/utils/storage'
-import { removeRefreshToken, removeToken, setRefreshToken, setToken } from '~src/api/util/auth'
+import {
+    clearStoreAll, getStore, removeRefreshToken, removeToken,
+    setRefreshToken, setStore, setToken,
+} from 'hc-vue3-ui'
 
 export const useAppStore = defineStore('main', {
     state: () => ({
         //系统信息
-        title: getStoreValue('title') || appConfig.title,
-        logoIcon: getStoreValue('logoIcon') || logoIcon,
-        logoName: getStoreValue('logoName') || logoName,
+        title: getStore('title') || appConfig.title,
+        logoIcon: getStore('logoIcon') || logoIcon,
+        logoName: getStore('logoName') || logoName,
         //主题信息
-        theme: getStoreValue('theme') || appConfig.theme, //用户可选择类型:auto,light, dark
-        themeVal: getStoreValue('themeVal') || '', //实际主题:light, dark
-        color: getStoreValue('color') || appConfig.color,
+        theme: getStore('theme') || appConfig.theme, //用户可选择类型:auto,light, dark
+        themeVal: getStore('themeVal') || '', //实际主题:light, dark
+        color: getStore('color') || appConfig.color,
         //用户信息
-        token: getStoreValue('token') || '',
-        refreshToken: getStoreValue('refreshToken') || '',
-        tenantId: getStoreValue('tenantId') || '',
-        userInfo: getStoreValue('userInfo') || {},
+        token: getStore('token') || '',
+        refreshToken: getStore('refreshToken') || '',
+        tenantId: getStore('tenantId') || '',
+        userInfo: getStore('userInfo') || {},
         //菜单信息
-        menus: getStoreValue('menus') || [],
-        buttons: getStoreValue('buttons') || {},
-        homeUrl: getStoreValue('homeUrl'), //首页路由
+        menus: getStore('menus') || [],
+        buttons: getStore('buttons') || {},
+        homeUrl: getStore('homeUrl'), //首页路由
         //项目合同段数据
-        projectContract: getStoreValue('projectContract') || [],
-        projectInfo: getStoreValue('projectInfo') || {},
-        contractInfo: getStoreValue('contractInfo') || {},
-        projectId: getStoreValue('projectId') || '',
-        contractId: getStoreValue('contractId') || '',
+        projectContract: getStore('projectContract') || [],
+        projectInfo: getStore('projectInfo') || {},
+        contractInfo: getStore('contractInfo') || {},
+        projectId: getStore('projectId') || '',
+        contractId: getStore('contractId') || '',
         //其他配置信息
-        bubble: getStoreValue('bubble') || false,
-        isCollapse: getStoreValue('isCollapse') || false, //菜单折叠
+        bubble: getStore('bubble') || false,
+        isCollapse: getStore('isCollapse') || false, //菜单折叠
         dragModalSortTop: [], //拖拽弹窗排序
         barMenuName: '',
-        isSource: getStoreValue('isSource') || '', //来源
+        isSource: getStore('isSource') || '', //来源
     }),
     getters: {
         //系统信息
@@ -72,100 +74,100 @@ export const useAppStore = defineStore('main', {
         //系统信息
         setTitle(value) {
             this.title = value
-            setStoreValue('title', value)
+            setStore('title', value)
         },
         setLogoIcon(value) {
             this.logoIcon = value
-            setStoreValue('logoIcon', value)
+            setStore('logoIcon', value)
         },
         setLogoName(value) {
             this.logoName = value
-            setStoreValue('logoName', value)
+            setStore('logoName', value)
         },
         //主题信息
         setTheme(value) {
             this.theme = value
-            setStoreValue('theme', value)
+            setStore('theme', value)
         },
         setThemeVal(value) {
             this.themeVal = value
-            setStoreValue('themeVal', value)
+            setStore('themeVal', value)
         },
         setColor(value) {
             this.color = value
-            setStoreValue('color', value)
+            setStore('color', value)
         },
         //用户信息
         setTokenVal(value) {
             this.token = value
             setToken(value)
-            setStoreValue('token', value)
+            setStore('token', value)
         },
         setRefreshTokenVal(value) {
             this.refreshToken = value
             setRefreshToken(value)
-            setStoreValue('refreshToken', value)
+            setStore('refreshToken', value)
         },
         setTenantId(value) {
             this.tenantId = value
-            setStoreValue('tenantId', value)
+            setStore('tenantId', value)
         },
         setUserInfo(value) {
             this.userInfo = value
-            setStoreValue('userInfo', value)
+            setStore('userInfo', value)
         },
         //菜单信息
         setMenus(value) {
             this.menus = value
-            setStoreValue('menus', value)
+            setStore('menus', value)
         },
         setButtons(value) {
             this.buttons = value
-            setStoreValue('buttons', value)
+            setStore('buttons', value)
         },
         getButtonsVal(value) {
             return this.buttons[value] || false
         },
         setHomeUrl(value) {
             this.homeUrl = value
-            setStoreValue('homeUrl', value)
+            setStore('homeUrl', value)
         },
         //项目合同段数据
         setProjectContract(value) {
             this.projectContract = value
-            setStoreValue('projectContract', value)
+            setStore('projectContract', value)
         },
         setProjectInfo(value) {
             this.projectInfo = value
-            setStoreValue('projectInfo', value)
+            setStore('projectInfo', value)
         },
         setContractInfo(value) {
             this.contractInfo = value
-            setStoreValue('contractInfo', value)
+            setStore('contractInfo', value)
         },
         setProjectId(value) {
             this.projectId = value
-            setStoreValue('projectId', value)
+            setStore('projectId', value)
         },
         setContractId(value) {
             this.contractId = value
-            setStoreValue('contractId', value)
+            setStore('contractId', value)
         },
         //其他配置信息
         setBubble(value) {
             this.bubble = value
-            setStoreValue('bubble', value)
+            setStore('bubble', value)
         },
         setCollapse(value) { //菜单折叠
             this.isCollapse = value
-            setStoreValue('isCollapse', value)
+            setStore('isCollapse', value)
         },
         setDragModalSortTop(value) {
             this.dragModalSortTop = value
         },
         setIsSource(value) {
             this.isSource = value
-            setStoreValue('isSource', value)
+            setStore('isSource', value)
         },
         //清除缓存和token
         clearStoreData() {

+ 3 - 3
src/store/modules/app.js

@@ -2,14 +2,14 @@ import pinia from '~src/store/init'
 import { useAppStore } from '~src/store'
 import { getButtons } from '~api/menu'
 import { getProjectAndContract } from '~api/user'
-import { getStoreValue } from '~src/utils/storage'
 import { ArrToOneObj, getArrValue } from 'js-fast-way'
+import { getStore } from 'hc-vue3-ui'
 
 const store = useAppStore(pinia)
 
 //项目合同段初始化
 export const initProjectContract = async () => {
-    const value = getStoreValue('projectContract')
+    const value = getStore('projectContract')
     if (!value) {
         const { error, data } = await getProjectAndContract()
         if (error) return Promise.reject('error')
@@ -23,7 +23,7 @@ export const initProjectContract = async () => {
 
 //按钮初始化
 export const initButtons = async () => {
-    const value = getStoreValue('buttons')
+    const value = getStore('buttons')
     if (!value) {
         const { error, data } = await getButtons()
         if (error) return Promise.reject('error')

+ 10 - 10
src/store/modules/user.js

@@ -4,19 +4,19 @@ import { useAppStore } from '~src/store'
 import { getRoutes } from '~api/menu'
 import themeData from '~src/config/theme'
 import tokenData from '~src/router/modules/token'
-import { setStoreValue } from '~src/utils/storage'
 import { logout, refreshToken, userLogin } from '~api/user'
 import { userConfigInfo, userConfigSave } from '~api/other'
 import { ArrToOneObj, arrIndex, getArrValue, getObjValue, isNullES } from 'js-fast-way'
-import { useOsTheme } from 'hc-vue3-ui'
+import { setStore, useOsTheme } from 'hc-vue3-ui'
 
 //初始变量
 const store = useAppStore(pinia)
 
 //登录
 export const useAppLogin = async (form) => {
-    const { error, status, res } = await userLogin(form)
-    if (!error && status === 200) {
+    const { error, code, res } = await userLogin(form)
+    console.log(error, code, res)
+    if (!error && code === 200) {
         store.setTokenVal(res['access_token'])
         store.setRefreshTokenVal(res['refresh_token'])
         store.setTenantId(res['tenant_id'])
@@ -33,9 +33,9 @@ export const useAppLogin = async (form) => {
         }
         //获取配置数据
         await initUserConfigInfo()
-        return { error, status, res }
+        return { error, code, res }
     } else {
-        return { error, status, res }
+        return { error, code, res }
     }
 }
 
@@ -106,8 +106,8 @@ export const setRouterData = async () => {
     const routes = [...tokenData, ...routesArr] //合并
     //数据缓存
     store.setMenus(resData)
-    setStoreValue('route', routesObj)
-    setStoreValue('routes', routes)
+    setStore('route', routesObj)
+    setStore('routes', routes)
     return resData
 }
 
@@ -118,8 +118,8 @@ export const RefreshToken = async () => {
         const { dept_id, role_id } = store.getUserInfo
         const refresh = store.getRefreshToken
         const tenantId = store.getTenantId
-        const { error, status, res } = await refreshToken(refresh, tenantId, dept_id, role_id)
-        if (!error && status === 200) {
+        const { error, code, res } = await refreshToken(refresh, tenantId, dept_id, role_id)
+        if (!error && code === 200) {
             store.setTokenVal(res['access_token'])
             store.setRefreshTokenVal(res['refresh_token'])
             store.setTenantId(res['tenant_id'])

+ 0 - 19
src/utils/storage.js

@@ -1,19 +0,0 @@
-import { clearStoreAll, delStoreData, getStoreData, setStoreData } from 'js-fast-way'
-import website from '~src/config/index'
-
-//获取缓存
-export const getStoreValue = (key, debug = false, session = false) => {
-    return getStoreData(website.key + '-' + key, debug, session)
-}
-
-//保存缓存
-export const setStoreValue = (key, value, session = false) => {
-    return setStoreData(website.key + '-' + key, value, session)
-}
-
-//删除缓存
-export const delStoreValue = (key, session = false) => {
-    return delStoreData(website.key + '-' + key, session)
-}
-
-export { clearStoreAll }

+ 0 - 41
src/utils/tools.js

@@ -1,44 +1,3 @@
-//删除提醒
-export const delMessage = (cbk) => {
-    window?.$messageBox?.alert('请谨慎考虑后,确认是否需要删除?', '删除提醒', {
-        showCancelButton: true,
-        confirmButtonText: '确认删除',
-        cancelButtonText: '取消',
-        type: 'warning',
-        callback: (action) => {
-            if (action === 'confirm') {
-                cbk()
-            }
-        },
-    })
-}
-
-//日期格式化
-export const dateFormat = (date, format) => {
-    format = format || 'yyyy-MM-dd hh:mm:ss'
-    if (date !== 'Invalid Date') {
-        let o = {
-            'M+': date.getMonth() + 1, //month
-            'd+': date.getDate(), //day
-            'h+': date.getHours(), //hour
-            'm+': date.getMinutes(), //minute
-            's+': date.getSeconds(), //second
-            'q+': Math.floor((date.getMonth() + 3) / 3), //quarter
-            'S': date.getMilliseconds(), //millisecond
-        }
-        if (/(y+)/.test(format)) {
-            format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
-        }
-        for (let k in o) {
-            if (new RegExp('(' + k + ')').test(format)) {
-                format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
-            }
-        }
-        return format
-    }
-    return ''
-}
-
 //获取当前域名
 export const getTopUrl = () => {
     return window.location.href.split('/#/')[0]

+ 0 - 39
src/utils/utils.js

@@ -1,39 +0,0 @@
-//处理树节点类型
-export const getTreeNodeType = (type, majorDataType) => {
-    if (type > 0 && majorDataType > 0) {
-        switch (majorDataType) {
-            case 1:
-                return '开'
-            case 2:
-                return '评'
-            case 3:
-                return '交'
-            case 4:
-                return '序'
-            default:
-                return ''
-        }
-    } else if (type > 0 && majorDataType <= 0 || type > 0 && majorDataType === null) {
-       
-        switch (type) {
-            case 1:
-                return '单'
-            case 2:
-                return '部'
-            case 3:
-                return '部'
-            case 4:
-                return '项'
-            case 5:
-                return '项'
-            case 6:
-                return '序'
-            case 102:
-                return '检'
-            default:
-                return ''
-        }
-    } else {
-        return ''
-    }
-}

+ 19 - 31
yarn.lock

@@ -447,11 +447,6 @@
     "@unocss/core" "0.56.0"
     unconfig "^0.3.10"
 
-"@unocss/core@0.31.17":
-  version "0.31.17"
-  resolved "http://47.110.251.215:9000/@unocss/core/-/core-0.31.17.tgz#e4f74f0495b8c395f6b0090dbcb371d3ce5d40c7"
-  integrity sha512-DJ3Uk2ePVXvV1qQmgoLK44aqB6f0s+naOEvouI97nzVXDZgxDQPBxIPB/L4vvE4U+gQxEiHwwE3gJ75iPqVzXw==
-
 "@unocss/core@0.56.0", "@unocss/core@^0.56.0":
   version "0.56.0"
   resolved "http://47.110.251.215:9000/@unocss/core/-/core-0.56.0.tgz#aaa51b1748a451939c56abde1441d063e58f51f8"
@@ -519,7 +514,7 @@
     "@unocss/core" "0.56.0"
     ofetch "^1.3.3"
 
-"@unocss/preset-mini@0.56.0":
+"@unocss/preset-mini@0.56.0", "@unocss/preset-mini@^0.56.0":
   version "0.56.0"
   resolved "http://47.110.251.215:9000/@unocss/preset-mini/-/preset-mini-0.56.0.tgz#82346ddb11ea3cba1c8ee7b9a3563d596d9f9d62"
   integrity sha512-uEdaiWF4RiU+RFtQjiv0R3RDRjNV+OFa3C+xVELLOIROnvb+h/D2wVxC8t8qOuVe8I6cHsGJgWfEpT3ptDhxqQ==
@@ -528,13 +523,6 @@
     "@unocss/extractor-arbitrary-variants" "0.56.0"
     "@unocss/rule-utils" "0.56.0"
 
-"@unocss/preset-mini@^0.31.13":
-  version "0.31.17"
-  resolved "http://47.110.251.215:9000/@unocss/preset-mini/-/preset-mini-0.31.17.tgz#847168f1abe55d44f3e9aa6128ad3cb516ba471b"
-  integrity sha512-gVgMTOKLt3O1ym348QIBmR5sS9W0Ozkk5xelhH6e0VXcpg0dXDPDrl4hFErMy4x6IB86yyJG6Dz5JhcwQB13Ig==
-  dependencies:
-    "@unocss/core" "0.31.17"
-
 "@unocss/preset-tagify@0.56.0":
   version "0.56.0"
   resolved "http://47.110.251.215:9000/@unocss/preset-tagify/-/preset-tagify-0.56.0.tgz#966a59916c6a8c8a04a242a9b249cf3a6094a13f"
@@ -1525,15 +1513,15 @@ has-flag@^4.0.0:
   resolved "http://47.110.251.215:9000/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-hc-vue3-ui@^1.9.0:
-  version "1.9.0"
-  resolved "http://47.110.251.215:9000/hc-vue3-ui/-/hc-vue3-ui-1.9.0.tgz#b2c76c9416fb040bc5fc58124d9f957e7192a4c0"
-  integrity sha512-YSa+tdCTgE22QGXU85TiSO4L9/YL03bheRzIYrZT1faKW///UWBzbJBmEY09gG/rK934mNaw2I+b0NgQEetyoQ==
+hc-vue3-ui@^2.0.0:
+  version "2.0.0"
+  resolved "http://47.110.251.215:9000/hc-vue3-ui/-/hc-vue3-ui-2.0.0.tgz#80928bb41af5f685d4ed5a7eb6e3be42814b8b9d"
+  integrity sha512-SjZxOxeWuIuqdd2NUnGdiXm5Rf+Wd7SQanJDhmtZ5VVYrZEBv/KjYIMVYvRCLi/m4fW14gNiNNjk34zx/8wSsA==
   dependencies:
     axios "^1.5.0"
     dayjs "^1.11.10"
     element-plus "2.3.14"
-    js-fast-way "^0.2.7"
+    js-fast-way "^0.2.9"
     js-md5 "^0.7.3"
     lottie-web "^5.12.2"
     simple-uploader.js "^0.6.0"
@@ -1670,10 +1658,10 @@ js-base64@^3.7.5:
   resolved "http://47.110.251.215:9000/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca"
   integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==
 
-js-fast-way@0.2.7, js-fast-way@^0.2.7:
-  version "0.2.7"
-  resolved "http://47.110.251.215:9000/js-fast-way/-/js-fast-way-0.2.7.tgz#dec1eee6b57fd3e4a2c79fa96c1a77fb61f863c5"
-  integrity sha512-yv9nt0/KtWSsqF7obwhduI/KLkEjEJGNwalbhg5iPcpiZx9cPc6FDcm56sZMViSkBSs3EJFuQZ1AOEpxpLDrjg==
+js-fast-way@0.2.9, js-fast-way@^0.2.9:
+  version "0.2.9"
+  resolved "http://47.110.251.215:9000/js-fast-way/-/js-fast-way-0.2.9.tgz#fd193f1a63644315331274474232d18d2c494c35"
+  integrity sha512-ORSz9K/vLBu0Xo9dXgAS9nbqi35BsooPZYj1EpkjOWEVQ8hz3dUFGwTG2r7huZyxxnWd2fXoZwSe0X77aPwhlg==
 
 js-md5@^0.7.3:
   version "0.7.3"
@@ -2195,10 +2183,10 @@ safe-buffer@~5.2.0:
   resolved "http://47.110.251.215:9000/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
 
-sass@^1.67.0:
-  version "1.67.0"
-  resolved "http://47.110.251.215:9000/sass/-/sass-1.67.0.tgz#fed84d74b9cd708db603b1380d6dc1f71bb24f6f"
-  integrity sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==
+sass@^1.68.0:
+  version "1.68.0"
+  resolved "http://47.110.251.215:9000/sass/-/sass-1.68.0.tgz#0034b0cc9a50248b7d1702ac166fd25990023669"
+  integrity sha512-Lmj9lM/fef0nQswm1J2HJcEsBUba4wgNx2fea6yJHODREoMFnwRpZydBnX/RjyXw2REIwdkbqE4hrTo4qfDBUA==
   dependencies:
     chokidar ">=3.0.0 <4.0.0"
     immutable "^4.0.0"
@@ -2409,12 +2397,12 @@ unocss-preset-extra@^0.5.2:
   resolved "http://47.110.251.215:9000/unocss-preset-extra/-/unocss-preset-extra-0.5.2.tgz#82c600f42babbd95fa7a69065db63c7d6cb911ca"
   integrity sha512-DQB2BcuE5jq3XiQahN2NeIeJIQOqgnfHoDIsJ6dPMkxgsuv8vT+xgzcJP42bgTBW+2Aym/fwDcqJOHqIAVqw9g==
 
-unocss-preset-scrollbar@^0.2.1:
-  version "0.2.1"
-  resolved "http://47.110.251.215:9000/unocss-preset-scrollbar/-/unocss-preset-scrollbar-0.2.1.tgz#6de889c2522122e2f0222f392b02bdcd8033d306"
-  integrity sha512-7ubHdOaUwr7xBn1glPpICNNsM2SZGjvWK5uRPNiQYsrZ9YFjsCGHk9x5S2R8pTkuMDQeiaSa/UQbYhjC8Fra5g==
+unocss-preset-scrollbar@^0.3.0:
+  version "0.3.0"
+  resolved "http://47.110.251.215:9000/unocss-preset-scrollbar/-/unocss-preset-scrollbar-0.3.0.tgz#261fbcd627cc9f7000ef366d7eff60082ae73fa6"
+  integrity sha512-7ul5AhttNoPwXPVFRKeze7beLF2hItg4f2drl5jcdzhv2MQgxo0CcCmT8qGe8VtBrAk/7RaGutQLTiMrGC6oNQ==
   dependencies:
-    "@unocss/preset-mini" "^0.31.13"
+    "@unocss/preset-mini" "^0.56.0"
 
 unocss@^0.56.0:
   version "0.56.0"