ZaiZai 1 year ago
parent
commit
02bdcde8b8

+ 0 - 3
package.json

@@ -14,14 +14,11 @@
     },
     "dependencies": {
         "axios": "^1.4.0",
-        "crypto-js": "^4.1.1",
         "dayjs": "^1.11.9",
         "echarts": "^5.4.3",
         "element-plus": "2.3.8",
-        "js-base64": "^3.7.5",
         "js-cookie": "^3.0.5",
         "js-fast-way": "^0.2.4",
-        "js-md5": "^0.7.3",
         "pinia": "^2.1.4",
         "vue": "^3.3.4",
         "vue-router": "^4.2.4"

+ 27 - 0
src/api/modules/data.js

@@ -0,0 +1,27 @@
+import { httpApi } from '../request/httpApi'
+
+export default {
+    //查询项目列表接口
+    async getProjectList() {
+        return httpApi({
+            url: '/api/index/project/list',
+            method: 'get',
+            params: {},
+        }, false)
+    },
+    //查询传感器数据列表
+    async getSensorsList(form) {
+        return httpApi({
+            url: '/api/index/sensors/data/list',
+            method: 'POST',
+            data: form,
+        }, false)
+    },
+    async getGroupList(form) {
+        return httpApi({
+            url: '/api/index/sensors/group/list',
+            method: 'POST',
+            data: form,
+        }, false)
+    },
+}

+ 0 - 68
src/api/modules/division.js

@@ -1,68 +0,0 @@
-import { httpApi } from '../request/httpApi'
-
-export default {
-
-    //获取关联的合同段树
-    async getContractInfoTree(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/contractInfo/tree2',
-            method: 'get',
-            params: form,
-        }, msg)
-    },
-    //获取关联的工程用途部位树
-    async getengineerInfoTree(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/contractInfo/tree',
-            method: 'get',
-            params: form,
-        }, msg)
-    },
-    async getengineerInfoTree1(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/contractInfo/trial/relation/tree',
-            method: 'get',
-            params: form,
-        }, msg)
-    },
-    //未识别合同段划分节点 手动关联
-    async setImportRelation(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/wbsTreeContract/import-relation',
-            method: 'post',
-            data: form,
-        }, msg)
-    },
-    //标记/取消隐蔽工程节点
-    async concealedWorksNnode(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/wbsTreeContract/concealed-works-node',
-            method: 'get',
-            params: form,
-        }, msg)
-    },
-    //项目级懒加载节点树形结构-表单类型划分树
-    async tabTypeLazyTree(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/wbsPrivate/tab-Type-lazy-tree',
-            method: 'get',
-            params: form,
-        }, msg)
-    },
-    //添加合同段节点树
-    async addWbsContractInfo(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/wbsPrivate/add-wbs-contract-info',
-            method: 'post',
-            params: form,
-        }, msg)
-    },
-    //删除合同段节点
-    async removeWbsTreeContract(form, msg = true) {
-        return httpApi({
-            url: '/api/blade-manager/wbsTreeContract/remove',
-            method: 'post',
-            params: form,
-        }, msg)
-    },
-}

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

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

+ 1 - 1
src/api/request/httpApi.js

@@ -21,7 +21,7 @@ const getResData = async (response, error = false) => {
         const resData = getObjValue(data)
         const httpData = {
             response, res: data, data: resData?.data,
-            code: resData?.code, msg: resData?.msg, status: response?.status,
+            code: resData?.code, msg: resData?.message, status: response?.status,
             disposition: headers['content-disposition'],
             message: getMsgVal(response), error: error,
         }

+ 0 - 7
src/api/request/index.js

@@ -1,6 +1,5 @@
 import axios from 'axios'
 import router from '~src/router/index'
-import { getToken } from '~src/api/util/auth'
 import { toSerialize } from 'js-fast-way'
 
 //默认超时时间
@@ -15,12 +14,6 @@ axios.defaults.withCredentials = true
 //http request拦截
 axios.interceptors.request.use(config => {
     const meta = (config['meta'] || {})
-    const isToken = meta['isToken'] === false
-    //让每个请求携带token
-    const token = getToken()
-    if (token && !isToken) {
-        config.headers['Blade-Auth'] = 'bearer ' + token
-    }
     //headers中配置text请求
     if (config['text'] === true) {
         config.headers['Content-Type'] = 'text/plain'

+ 3 - 16
src/api/util/auth.js

@@ -1,26 +1,13 @@
 import Cookies from 'js-cookie'
-import config from '~src/config/index'
 
 export const getToken = () => {
-    return Cookies.get(config.tokenKey)
+    return Cookies.get('data-access-token')
 }
 
 export const setToken = (token) => {
-    return Cookies.set(config['tokenKey'], token)
-}
-
-export const getRefreshToken = () => {
-    return Cookies.get(config['refreshTokenKey'])
-}
-
-export const setRefreshToken = (token) => {
-    return Cookies.set(config['refreshTokenKey'], token)
+    return Cookies.set('data-access-token', token, { expires: 1 })
 }
 
 export const removeToken = () => {
-    return Cookies.remove(config['tokenKey'])
-}
-
-export const removeRefreshToken = () => {
-    return Cookies.remove(config['refreshTokenKey'])
+    return Cookies.remove('data-access-token')
 }

+ 0 - 3
src/config/index.js

@@ -4,8 +4,5 @@ import config from './index.json'
 export default {
     title: '数据可视化展示平台',
     key: 'data_visual',
-    tokenTime: 1740,
-    tokenKey: 'data-access-token',
-    refreshTokenKey: 'data-refresh-token',
     ...config,
 }

+ 42 - 7
src/layout/index.vue

@@ -4,9 +4,8 @@
             <div class="layout_header">
                 <div class="header_left">
                     <div class="header_info">
-                        <el-select v-model="projectId">
-                            <el-option label="项目名称1" value="1" />
-                            <el-option label="项目名称2" value="2" />
+                        <el-select v-model="projectId" @change="projectIdChange">
+                            <el-option v-for="item in projectData" :key="item.projId" :label="item.projName" :value="item.projId" />
                         </el-select>
                     </div>
                 </div>
@@ -16,10 +15,10 @@
                 <div class="header_right">
                     <div class="header_actions">
                         <el-dropdown>
-                            <span>用户名</span>
+                            <span>{{ userName }}</span>
                             <template #dropdown>
                                 <el-dropdown-menu>
-                                    <el-dropdown-item>退出登录</el-dropdown-item>
+                                    <el-dropdown-item @click="logOut">退出登录</el-dropdown-item>
                                 </el-dropdown-menu>
                             </template>
                         </el-dropdown>
@@ -34,9 +33,45 @@
 </template>
 
 <script setup>
-import { ref } from 'vue'
+import { onMounted, ref } from 'vue'
+import { useAppStore } from '~src/store'
+import { getArrValue } from 'js-fast-way'
+import mainApi from '~api/data'
+import { useRouter } from 'vue-router'
 
-const projectId = ref('1')
+const router = useRouter()
+const useApp = useAppStore()
+
+const userName = ref(useApp.userName)
+
+//渲染完成
+onMounted(() => {
+    getProjectList()
+})
+
+//获取项目列表
+const projectData = ref([])
+const projectId = ref(null)
+const getProjectList = async () => {
+    const { data } = await mainApi.getProjectList()
+    const res = getArrValue(data)
+    projectData.value = res
+    if (res.length > 0) {
+        projectId.value = res[0].projId
+        useApp.setProjectId(res[0].projId)
+    }
+}
+
+//项目切换
+const projectIdChange = (val) => {
+    useApp.setProjectId(val)
+}
+
+//退出登录
+const logOut = () => {
+    window.$message?.info('退出成功')
+    router.push({ name: 'login' })
+}
 </script>
 
 <style lang="scss">

+ 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)
-    }
-}

+ 2 - 5
src/router/index.js

@@ -10,17 +10,14 @@ const router = vueRouter.createRouter({
 
 //路由拦截
 router.beforeResolve(async (to) => {
-    /*const token = getToken()
+    const token = getToken()
     if (to.path === '/login') {
         return true
-    } else if (to.path === '/auth') {
-        return true
     } else if (!token) {
         return '/login'
     } else {
         return true
-    }*/
-    return true
+    }
 })
 
 router.afterEach((to) => {

+ 14 - 45
src/store/index.js

@@ -1,67 +1,36 @@
 import { defineStore } from 'pinia'
 import pinia from '~src/store/init'
-import appConfig from '~src/config/index'
 import { clearStoreAll, getStoreValue, setStoreValue } from '~src/utils/storage'
-import { removeRefreshToken, removeToken, setRefreshToken, setToken } from '~src/api/util/auth'
+import { removeToken } from '~src/api/util/auth'
 
 export const useAppStore = defineStore('main', {
     state: () => ({
-        //系统信息
-        title: getStoreValue('title') || appConfig.title,
-        //用户信息
-        token: getStoreValue('token') || '',
-        refreshToken: getStoreValue('refreshToken') || '',
-        tenantId: getStoreValue('tenantId') || '',
-        userInfo: getStoreValue('userInfo') || {},
-        //其他
+        userName: getStoreValue('userName') || '',
+        projectId: getStoreValue('projectId') || '',
         isEchartSize: '',
     }),
     getters: {
-        //系统信息
-        getTitle: state => state.title,
-        //用户信息
-        getToken: state => state.token,
-        getRefreshToken: state => state.refreshToken,
-        getTenantId: state => state.tenantId,
-        getUserInfo: state => state.userInfo,
+        getUserName: state => state.userName,
+        getProjectId: state => state.projectId,
     },
     actions: {
-        //系统信息
-        setTitle(value) {
-            this.title = value
-            setStoreValue('title', value)
+        setUserName(value) {
+            this.userName = value
+            setStoreValue('userName', value)
         },
-        //用户信息
-        setTokenVal(value) {
-            this.token = value
-            setToken(value)
-            setStoreValue('token', value)
-        },
-        setRefreshTokenVal(value) {
-            this.refreshToken = value
-            setRefreshToken(value)
-            setStoreValue('refreshToken', value)
-        },
-        setTenantId(value) {
-            this.tenantId = value
-            setStoreValue('tenantId', value)
-        },
-        setUserInfo(value) {
-            this.userInfo = value
-            setStoreValue('userInfo', value)
+        setProjectId(value) {
+            this.projectId = value
+            setStoreValue('projectId', value)
         },
         //清除缓存和token
         clearStoreData() {
             //清除状态
-            this.title = null
-            this.token = null
-            this.refreshToken = null
-            this.tenantId = null
-            this.userInfo = null
+            this.userName = null
+            this.projectId = ''
+            this.isEchartSize = ''
             //清除缓存
             clearStoreAll()
             removeToken()
-            removeRefreshToken()
         },
     },
 })

+ 0 - 19
src/utils/tools.js

@@ -1,22 +1,3 @@
-import { clog } from 'js-fast-way'
-import config from '~src/config/index'
-
-import { useAppStore } from '~src/store'
-
-const store = useAppStore()
-
-//控制台打印
-export const HcLog = (name, tips, data) => {
-    const title = store.barMenuName ?? ''
-    if (config.isLog === 'auto') {
-        if (import.meta.env.DEV) {
-            clog(title, name, tips, data)
-        }
-    } else if (config.isLog === true) {
-        clog(title, name, tips, data)
-    }
-}
-
 //获取当前域名
 export const getTopUrl = () => {
     return window.location.href.split('/#/')[0]

+ 33 - 6
src/views/home/components/index.vue

@@ -19,9 +19,8 @@
         </div>
         <div class="search-form">
             <div class="form-type">
-                <el-select v-model="typeId">
-                    <el-option label="类型名称1" value="1" />
-                    <el-option label="类型名称2" value="2" />
+                <el-select v-model="typeId" @change="groupListChange">
+                    <el-option v-for="item in groupList" :key="item.sensorId" :label="item.sensorName" :value="item.sensorId" />
                 </el-select>
             </div>
             <div class="form-date">
@@ -83,20 +82,48 @@
 </template>
 
 <script setup>
-import { ref } from 'vue'
+import { onMounted, ref } from 'vue'
 import baseEcharts from './echarts.vue'
+import { useAppStore } from '~src/store'
+import { getArrValue } from 'js-fast-way'
+import mainApi from '~api/data'
+
+const useApp = useAppStore()
 
 //选项卡
 const tab_key = ref('1')
 const tabTap = (val) => {
     tab_key.value = val
+    getGroupList()
 }
 
+onMounted(() => {
+    getGroupList()
+})
+
+//获取分组列表
+const groupList = ref([])
+const getGroupList = async () => {
+    const { data } = await mainApi.getGroupList({
+        type: tab_key.value,
+    })
+    const res = getArrValue(data)
+    groupList.value = res
+    if (res.length > 0) {
+        typeId.value = res[0].sensorId
+    }
+}
+
+//分组切换
+const typeId = ref(null)
+const groupListChange = () => {
+
+}
+
+
 //类型
-const typeId = ref('1')
 const dateTime = ref(null)
 const change_type = ref('echarts')
-
 const tableData = [
     { key1: '2016-05-03', key2: 'Grove St, Los Angeles', key3: 'No. 189', key4: '189', key5: '--' },
     { key1: '2016-05-03', key2: 'Grove St, Los Angeles', key3: 'No. 189', key4: '189', key5: '--' },

+ 16 - 5
src/views/login/index.vue

@@ -39,7 +39,12 @@
 <script setup>
 import { ref } from 'vue'
 import { useRouter } from 'vue-router'
+import { useAppStore } from '~src/store'
+import { setToken } from '~src/api/util/auth'
+import { getRandom } from 'js-fast-way'
 import mainApi from '~api/user'
+
+const useApp = useAppStore()
 const router = useRouter()
 
 //图片资源
@@ -63,11 +68,17 @@ const loginClick = async () => {
     } else if (!password) {
         window.$message.warning('请输入密码')
     } else {
-        const { data } = await mainApi.login(formModel.value)
-        console.log(data)
-        /*router.push({
-            name: 'home-index',
-        })*/
+        const { error, code, msg } = await mainApi.login(formModel.value)
+        if (!error && code === 200) {
+            setToken(getRandom(24))
+            useApp.setUserName(username)
+            window?.$message?.success('登录成功')
+            setTimeout(() => {
+                router.push({ name: 'home-index' })
+            }, 2000)
+        } else {
+            window?.$message?.error(msg)
+        }
     }
 }
 </script>

+ 4 - 4
uno.config.js

@@ -1,6 +1,6 @@
-import {defineConfig, presetUno, presetIcons, presetAttributify} from 'unocss'
+import { defineConfig, presetAttributify, presetIcons, presetUno } from 'unocss'
 import { presetScrollbar } from 'unocss-preset-scrollbar'
-import { presetExtra } from 'unocss-preset-extra';
+import { presetExtra } from 'unocss-preset-extra'
 
 export default defineConfig({
   presets: [
@@ -9,12 +9,12 @@ export default defineConfig({
       //autoInstall: true, //自动安装图标库
     }),
     presetAttributify({
-      prefix: 'un-',      //属性冲突的自定义前缀
+      prefix: 'un-', //属性冲突的自定义前缀
       prefixedOnly: true, //强制使用前缀
     }),
     //滚动条
     presetScrollbar(),
     //其它扩展,主要用动画,集成了 animate.css
     presetExtra(),
-  ]
+  ],
 })

+ 0 - 15
yarn.lock

@@ -1045,11 +1045,6 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
     shebang-command "^2.0.0"
     which "^2.0.1"
 
-crypto-js@^4.1.1:
-  version "4.1.1"
-  resolved "http://47.110.251.215:9000/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
-  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
-
 css-tree@^2.3.1:
   version "2.3.1"
   resolved "http://47.110.251.215:9000/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20"
@@ -1688,11 +1683,6 @@ jiti@^1.18.2:
   resolved "http://47.110.251.215:9000/jiti/-/jiti-1.19.1.tgz#fa99e4b76a23053e0e7cde098efe1704a14c16f1"
   integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==
 
-js-base64@^3.7.5:
-  version "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-cookie@^3.0.5:
   version "3.0.5"
   resolved "http://47.110.251.215:9000/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc"
@@ -1703,11 +1693,6 @@ js-fast-way@^0.2.4:
   resolved "http://47.110.251.215:9000/js-fast-way/-/js-fast-way-0.2.4.tgz#3be409949f7dc02a9c1e5f33cb13844f32c3aa5a"
   integrity sha512-hxK779cCMBttfSJ1ocJbyg3vPxX2trlpRf373kIQJ1Zrpa2o/nuZeb3D2P59/WYQxHIQ8e3B/8/9aNEu+aXW5g==
 
-js-md5@^0.7.3:
-  version "0.7.3"
-  resolved "http://47.110.251.215:9000/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2"
-  integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==
-
 js-yaml@^4.1.0:
   version "4.1.0"
   resolved "http://47.110.251.215:9000/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"