diff --git a/package.json b/package.json index d57a936..cf19eda 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "axios": "0.27.2", "echarts": "5.4.0", "element-plus": "2.2.27", - "file-saver": "2.0.5", + "file-saver": "2.0.5", "fuse.js": "6.6.2", "js-cookie": "3.0.1", "jsencrypt": "3.3.1", diff --git a/src/api/commercialbank.js b/src/api/commercialbank.js index b95b155..e810904 100644 --- a/src/api/commercialbank.js +++ b/src/api/commercialbank.js @@ -1,4 +1,12 @@ import request from '@/utils/request' +// 下拉用户筛选 +export const getBankUserList=(query)=> { + return request({ + url: '/api/stu/businessBank/getBusinessBankNameAndId', + method: 'get', + params:query + }) + } // 资产总额 export const getAssetTotal=(ID)=> { return request({ @@ -31,7 +39,73 @@ export const getBankIndex=(data)=> { params:data }) } + // 兑换数字人民币 + // 兑换数字人民币展示 +export const getExchange=(data)=> { + return request({ + url: 'api/stu/businessBank/getConversionOfWwnFundsList', + method: 'get', + params:data + }) + } + // 自有资产兑换数字 +export const getExchange2=(data)=> { + return request({ + url: '/api/stu/businessBank/digitalRMBRecharge', + method: 'get', + params:data + }) + } + // 下拉充值银行用户 +export const getBankUser=(data)=> { + return request({ + url: '/api/stu/businessBank/getBusinessBankAssetInfoByIdAndBankName', + method: 'get', + params:data + }) + } + // 缴存准备金接口 +export const getDeposit=(data)=> { + return request({ + url: '/api/stu/businessBank/paidReserve', + method: 'get', + params:data + }) + } + // 发起兑换申请 +export const getExchange3=(data)=> { + return request({ + url: '/api/stu/businessBank/exchangeApplication', + method: 'get', + params:data + }) + } + // // 个人业务 + // 个人用户开通钱包展示 +export const getPersonalWallet=(data)=> { + return request({ + url: '/api/stu/businessBank/getPersonWalletList', + method: 'get', + params:data + }) + } + // 用户开通钱包验证 +export const getPersonalWalletverify=(data)=> { + return request({ + url: '/api/stu/businessBank/openPersonWalletVerify', + method: 'get', + params:data + }) + } + // 用户数字货币兑换业务 +export const getPersonalExchange=(data)=> { + return request({ + url: '/api/stu/businessBank/getPersonExchangeBusinessList', + method: 'get', + params:data + }) + } // 新增消费红包 export const addRedPacket=(data)=> { return request({ @@ -40,6 +114,14 @@ export const addRedPacket=(data)=> { data:data, }) } + // 个人用户购买商品服务业务查看 +export const getGoods=(data)=> { + return request({ + url: '/api/stu/businessBank/getPersonalUserOrEnterpriseUserBuyRecord', + method: 'get', + params:data + }) + } // 企业下拉 export const getEnterpriseList=(query)=> { return request({ @@ -55,4 +137,13 @@ export const getRedPacket=(data)=> { method: 'get', params:data }) - } \ No newline at end of file + } + // 对公业务 + // 企业用户商品经营业务 +export const getCommodityManagement=(data)=>{ + return request({ + url: '/api/stu/businessBank/getPersonalUserOrEnterpriseUserBuyRecord', + method: 'get', + params:data + }) +} \ No newline at end of file diff --git a/src/api/enterpriseUser.js b/src/api/enterpriseUser.js index 6282e9c..190702e 100644 --- a/src/api/enterpriseUser.js +++ b/src/api/enterpriseUser.js @@ -6,6 +6,14 @@ export const getconsumerRedPacket=(data)=> { url: '/api/stu/businessBank/getStuBusinessBankRedPacketInfo', method: 'get', params:data + }) + } + // 下拉企业数据 +export const getEnterpriseUserList=(query)=> { + return request({ + url: 'api/stu/enterprise/getBusinessNameAndId', + method: 'get', + params:query }) } // 发放消费红包 @@ -15,4 +23,12 @@ export const getconsumerRedPacketList=(status)=> { method: 'put', params:status }) + } + // 领取详情 +export const getconsumerRedPacketDetail=(id)=> { + return request({ + url: '/api/stu/businessBank/getBusinessBankAndEnterpriseUserReceiveDetails', + method: 'get', + params:id + }) } \ No newline at end of file diff --git a/src/api/user.js b/src/api/user.js index b128dec..84afc6d 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -55,7 +55,23 @@ export const getRedPacket = (query) => { method: 'get', params:query }) - } +} +// 领取消费红包 +export const getRedPacketReceive = (query) => { + return request({ + url: 'api/stu/person/personReceiveRedPacket', + method: 'put', + params:query + }) +} +// 返回领取红包金额 +export const getRedPacketAmount = (query) => { + return request({ + url: 'api/stu/person/getRedPacketMoney', + method: 'get', + params:query + }) +} // 购买数字商品数据 export const getDigitalGoods = (query) => { return request({ @@ -63,4 +79,4 @@ export const getDigitalGoods = (query) => { method: 'get', params:query }) - } \ No newline at end of file + } \ No newline at end of file diff --git a/src/assets/images/Merkle根.png b/src/assets/images/Merkle根.png new file mode 100644 index 0000000..173bfe3 Binary files /dev/null and b/src/assets/images/Merkle根.png differ diff --git a/src/assets/images/XXX学校人民币数字货币交易总览.jpg b/src/assets/images/XXX学校人民币数字货币交易总览.jpg new file mode 100644 index 0000000..fdcd4e3 Binary files /dev/null and b/src/assets/images/XXX学校人民币数字货币交易总览.jpg differ diff --git a/src/assets/images/交易区块.png b/src/assets/images/交易区块.png new file mode 100644 index 0000000..42d604d Binary files /dev/null and b/src/assets/images/交易区块.png differ diff --git a/src/assets/images/交易广播-区块哈希详情.png b/src/assets/images/交易广播-区块哈希详情.png new file mode 100644 index 0000000..4f4085b Binary files /dev/null and b/src/assets/images/交易广播-区块哈希详情.png differ diff --git a/src/assets/images/交易广播.png b/src/assets/images/交易广播.png new file mode 100644 index 0000000..e0d577b Binary files /dev/null and b/src/assets/images/交易广播.png differ diff --git a/src/assets/images/交易节点.png b/src/assets/images/交易节点.png new file mode 100644 index 0000000..ec0e4e3 Binary files /dev/null and b/src/assets/images/交易节点.png differ diff --git a/src/assets/images/央行可视化监控中心.png b/src/assets/images/央行可视化监控中心.png new file mode 100644 index 0000000..490830e Binary files /dev/null and b/src/assets/images/央行可视化监控中心.png differ diff --git a/src/assets/images/微信图片_20231013193134.png b/src/assets/images/微信图片_20231013193134.png new file mode 100644 index 0000000..6bb2190 Binary files /dev/null and b/src/assets/images/微信图片_20231013193134.png differ diff --git a/src/assets/styles/element-ui.scss b/src/assets/styles/element-ui.scss index 0421d46..f69519e 100644 --- a/src/assets/styles/element-ui.scss +++ b/src/assets/styles/element-ui.scss @@ -96,7 +96,6 @@ } .el-table { - --el-table-row-hover-bg-color: transparent !important; } diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue index 3471370..cbd392d 100644 --- a/src/layout/components/AppMain.vue +++ b/src/layout/components/AppMain.vue @@ -56,6 +56,7 @@ const tagsViewStore = useTagsViewStore() ::-webkit-scrollbar { width: 6px; height: 6px; + display: none; } ::-webkit-scrollbar-track { diff --git a/src/layout/index.vue b/src/layout/index.vue index 202c8f7..d96b42a 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -68,6 +68,7 @@ function setLayout() { @import "@/assets/styles/variables.module.scss"; .app-wrapper { + @include clearfix; position: relative; height: 100%; diff --git a/src/router/index.js b/src/router/index.js index 3d57f05..a8a930c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -31,7 +31,7 @@ export const constantRoutes = [ component: Layout, hidden: true, children: [ - { + { path: '/redirect/:path(.*)', component: () => import('@/views/redirect/index.vue') } @@ -77,7 +77,7 @@ export const constantRoutes = [ redirect: 'noredirect', children: [ { - path: 'profile', + path: 'profile', component: () => import('@/views/system/user/profile/index'), name: 'Profile', meta: { title: '个人中心', icon: 'user' } @@ -85,7 +85,6 @@ export const constantRoutes = [ ] } ] - // 动态路由,基于用户权限动态去加载 export const dynamicRoutes = [ { @@ -102,7 +101,6 @@ export const dynamicRoutes = [ ] }, // 中央银行 - { path: '/central', component: Layout, @@ -240,8 +238,6 @@ export const dynamicRoutes = [ }, ] }, - - { path: '/study', hidden: false, @@ -257,6 +253,61 @@ export const dynamicRoutes = [ // 企业用户注册 ] }, + // 央行可视化 + { + path: '/visual', + component: Layout, + hidden: true, + name: 'Visual', + children: [ + { + path: 'index', + component: () => import('@/views/visual/index.vue'), + name: 'index', + meta: { title: '央行可视化', icon: 'visual' } + }, + // 交易总览 + { + path: 'transaction', + hidden: true, + component: () => import('@/views/visual/transaction/transaction.vue'), + name: 'transaction', + meta: { title: '交易总览',activeMenu: '/visual/index' } + }, + // 交易节点 + { + path: 'transaction-node', + hidden: true, + component: () => import('@/views/visual/transaction-node/transaction-node.vue'), + name: 'transaction-node', + meta: { title: '交易节点',activeMenu: '/visual/index' } + }, + // 交易区块 + { + path: 'transaction-block', + hidden: true, + component: () => import('@/views/visual/transaction-block/transaction-block.vue'), + name: 'transaction-block', + meta: { title: '交易区块',activeMenu: '/visual/index' } + }, + // 交易广播 + { + path: 'transaction-broadcast', + hidden: true, + component: () => import('@/views/visual/transaction-broadcast/transaction-broadcast.vue'), + name: 'transaction-broadcast', + meta: { title: '交易广播',activeMenu: '/visual/index' } + }, + + { + path: 'merkle', + hidden: true, + component: () => import('@/views/visual/merkle/merkle.vue'), + name: 'merkle', + meta: { title: 'Merkle',activeMenu: '/visual/index' } + }, + ] + }, diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 4fa6cd6..f046b0b 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -1,5 +1,5 @@ -import { login, logout, getInfo } from '@/api/login' -import { getToken, setToken, removeToken } from '@/utils/auth' +import { login, logout, getInfo, } from '@/api/login' +import { getToken, setToken, removeToken ,setUserId,getUserId} from '@/utils/auth' import defAva from '@/assets/images/profile.jpg' const useUserStore = defineStore( @@ -7,6 +7,7 @@ const useUserStore = defineStore( { state: () => ({ token: getToken(), + userId: getUserId(), name: '', avatar: '', roles: [], @@ -22,7 +23,9 @@ const useUserStore = defineStore( login(username, password, TOKEN).then(res => { setToken(res.data.accessToken) + setUserId(res.data.userId) this.token = res.data.accessToken + this.userId = res.data.userId resolve() }).catch(error => { reject(error,"2131223123") diff --git a/src/utils/auth.js b/src/utils/auth.js index 88d7b6c..7f21640 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -1,7 +1,7 @@ import Cookies from 'js-cookie' const TokenKey = 'Admin-Token' - +const userId = 'userId' export function getToken() { return Cookies.get(TokenKey) } @@ -13,3 +13,12 @@ export function setToken(token) { export function removeToken() { return Cookies.remove(TokenKey) } +export function getUserId() { + return Cookies.get(userId) +} +export function setUserId(id) { + return Cookies.set(userId, id) +} +export function removeUserId() { + return Cookies.remove(userId) +} \ No newline at end of file diff --git a/src/utils/index.js b/src/utils/index.js index 28044a5..d73cebd 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -24,7 +24,6 @@ export function formatDate(cellValue) { var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds } - /** * @param {number} time * @param {string} option diff --git a/src/utils/request.js b/src/utils/request.js index d160833..e9c71f1 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -6,17 +6,15 @@ import { tansParams, blobValidate } from '@/utils/ruoyi' import cache from '@/plugins/cache' import { saveAs } from 'file-saver' import useUserStore from '@/store/modules/user' - let downloadLoadingInstance; // 是否显示重新登录 export let isRelogin = { show: false }; - axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 - baseURL: import.meta.env.VITE_APP_BASE_API, - // baseURL: 'http://192.168.2.17:8800/', + // baseURL: import.meta.env.VITE_APP_BASE_API, + baseURL: 'http://192.168.2.15:8800/', // 超时 timeout: 10000 }) @@ -42,6 +40,12 @@ service.interceptors.request.use(config => { data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, time: new Date().getTime() } + const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小 + const limitSize = 5 * 1024 * 1024; // 限制存放数据5M + if (requestSize >= limitSize) { + console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。') + return config; + } const sessionObj = cache.session.getJSON('sessionObj') if (sessionObj === undefined || sessionObj === null || sessionObj === '') { cache.session.setJSON('sessionObj', requestObj) @@ -76,17 +80,16 @@ service.interceptors.response.use(res => { return res.data } if (code === 401) { - console.log('登录状态已过期,您可以继续留在该页面,或者重新登录'); if (!isRelogin.show) { isRelogin.show = true; - // ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { - // isRelogin.show = false; - useUserStore().fedLogOut().then(() => { - location.href = '/login'; + ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => { + isRelogin.show = false; + useUserStore().logOut().then(() => { + location.href = '/index'; }) - // }).catch(() => { - // isRelogin.show = false; - // }); + }).catch(() => { + isRelogin.show = false; + }); } return Promise.reject('无效的会话,或者会话已过期,请重新登录。') } else if (code === 500) { @@ -103,19 +106,23 @@ service.interceptors.response.use(res => { } }, error => { - console.log( error.response.status) let { message } = error; - if (error.response.status === 401) { - useUserStore().fedLogOut().then(() => { - location.href = '/login'; - }) - }else if (message == "Network Error") { + console.log(error,"error"); + if (message == "Network Error") { message = "后端接口连接异常"; } else if (message.includes("timeout")) { message = "系统接口请求超时"; } else if (message.includes("Request failed with status code")) { + if(message.includes("code 401")){ + useUserStore().fedLogOut().then(() => { + location.href = '/login'; + }) + }else if(message.includes("code 400")){ + // ElNotification.error({ title: error.response.data }) + ElMessage({ message: error.response.data.msg, type: 'error' }) + } message = "系统接口" + message.substr(message.length - 3) + "异常"; - }else + }else ElMessage({ message: message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } diff --git a/src/views/business-bank/convertibility/convertibility.vue b/src/views/business-bank/convertibility/convertibility.vue index 530a354..4a4a029 100644 --- a/src/views/business-bank/convertibility/convertibility.vue +++ b/src/views/business-bank/convertibility/convertibility.vue @@ -1,69 +1,125 @@