From 738895b370ab6bb75cd4adc46ad5f779d2034eaf Mon Sep 17 00:00:00 2001 From: liyang_v Date: Sun, 22 Sep 2024 21:54:40 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/.env.development | 4 +- ruoyi-ui/.env.production | 6 +- ruoyi-ui/.env.staging | 4 +- ruoyi-ui/package.json | 4 +- ruoyi-ui/src/api/system/channel.js | 44 ++ ruoyi-ui/src/api/system/customer.js | 60 ++ ruoyi-ui/src/api/system/log.js | 44 ++ ruoyi-ui/src/api/system/merchant.js | 52 ++ ruoyi-ui/src/permission.js | 74 ++- ruoyi-ui/src/router/index.js | 212 +++--- ruoyi-ui/src/views/channel/index.vue | 534 +++++++++++++++ ruoyi-ui/src/views/customer/index.vue | 482 ++++++++++++++ ruoyi-ui/src/views/index.vue | 63 +- ruoyi-ui/src/views/log/index.vue | 297 +++++++++ ruoyi-ui/src/views/login.vue | 111 ++-- ruoyi-ui/src/views/merchant/index.vue | 913 ++++++++++++++++++++++++++ ruoyi-ui/src/views/register.vue | 129 ++-- ruoyi-ui/vue.config.js | 150 ++--- 18 files changed, 2874 insertions(+), 309 deletions(-) create mode 100644 ruoyi-ui/src/api/system/channel.js create mode 100644 ruoyi-ui/src/api/system/customer.js create mode 100644 ruoyi-ui/src/api/system/log.js create mode 100644 ruoyi-ui/src/api/system/merchant.js create mode 100644 ruoyi-ui/src/views/channel/index.vue create mode 100644 ruoyi-ui/src/views/customer/index.vue create mode 100644 ruoyi-ui/src/views/log/index.vue create mode 100644 ruoyi-ui/src/views/merchant/index.vue diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development index c24a2fbc..a31fa681 100644 --- a/ruoyi-ui/.env.development +++ b/ruoyi-ui/.env.development @@ -1,10 +1,10 @@ # 页面标题 -VUE_APP_TITLE = 租研舍管理系统 +VUE_APP_TITLE = 未信用秒租管理系统 # 开发环境配置 ENV = 'development' -# 租研舍管理系统/开发环境 +# 未信用秒租管理系统/开发环境 VUE_APP_BASE_API = '/dev-api' # 路由懒加载 diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production index 3d07720b..28d5a46c 100644 --- a/ruoyi-ui/.env.production +++ b/ruoyi-ui/.env.production @@ -1,8 +1,8 @@ # 页面标题 -VUE_APP_TITLE = 租研舍管理系统 +VUE_APP_TITLE = 未信用秒租管理系统 # 生产环境配置 ENV = 'production' -# 租研舍管理系统/生产环境 -VUE_APP_BASE_API = '/prod-api' +# 未信用秒租管理系统/生产环境 +VUE_APP_BASE_API = 'http://124.222.144.55:80/dev-api' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging index 50911178..e3095cb5 100644 --- a/ruoyi-ui/.env.staging +++ b/ruoyi-ui/.env.staging @@ -1,10 +1,10 @@ # 页面标题 -VUE_APP_TITLE = 租研舍管理系统 +VUE_APP_TITLE = 未信用秒租管理系统 NODE_ENV = production # 测试环境配置 ENV = 'staging' -# 租研舍管理系统/测试环境 +# 未信用秒租管理系统/测试环境 VUE_APP_BASE_API = '/stage-api' diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 3ed4b784..49cb60f2 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -1,8 +1,8 @@ { "name": "ruoyi", "version": "3.6.4", - "description": "租研舍管理系统", - "author": "租研舍", + "description": "未信用秒租管理系统", + "author": "未信用秒租", "license": "MIT", "scripts": { "dev": "vue-cli-service serve", diff --git a/ruoyi-ui/src/api/system/channel.js b/ruoyi-ui/src/api/system/channel.js new file mode 100644 index 00000000..e9ba50d8 --- /dev/null +++ b/ruoyi-ui/src/api/system/channel.js @@ -0,0 +1,44 @@ +import request from "@/utils/request"; + +// 查询渠道配置列表 +export function listChannel(query) { + return request({ + url: "/system/channel/list", + method: "get", + params: query, + }); +} + +// 查询渠道配置详细 +export function getChannel(id) { + return request({ + url: "/system/channel/" + id, + method: "get", + }); +} + +// 新增渠道配置 +export function addChannel(data) { + return request({ + url: "/system/channel/add", + method: "post", + data: data, + }); +} + +// 修改渠道配置 +export function updateChannel(data) { + return request({ + url: "/system/channel/edit", + method: "post", + data: data, + }); +} + +// 删除渠道配置 +export function delChannel(id) { + return request({ + url: "/system/channel/" + id, + method: "delete", + }); +} diff --git a/ruoyi-ui/src/api/system/customer.js b/ruoyi-ui/src/api/system/customer.js new file mode 100644 index 00000000..960f33e7 --- /dev/null +++ b/ruoyi-ui/src/api/system/customer.js @@ -0,0 +1,60 @@ +import request from "@/utils/request"; + +// 查询客户信息列表 +export function listCustomer(query) { + return request({ + url: "/system/customer/list", + method: "get", + params: query, + }); +} + +// 查询客户信息详细 +export function getCustomer(id) { + return request({ + url: "/system/customer/" + id, + method: "get", + }); +} + +// 新增客户信息 +export function addCustomer(data) { + return request({ + url: "/system/customer", + method: "post", + data: data, + }); +} + +// 修改客户信息 +export function updateCustomer(data) { + return request({ + url: "/system/customer", + method: "put", + data: data, + }); +} + +// 删除客户信息 +export function delCustomer(id) { + return request({ + url: "/system/customer/" + id, + method: "delete", + }); +} + +// 获取商户(机构)的列表 +export function getAllMerchantList() { + return request({ + url: "/system/customer/getAllMerchantList", + method: "get", + }); +} + +//获取渠道 +export function getMerchantChannelList() { + return request({ + url: "/system/merchant/getMerchantChannelList", + method: "get", + }); +} diff --git a/ruoyi-ui/src/api/system/log.js b/ruoyi-ui/src/api/system/log.js new file mode 100644 index 00000000..3ad4cd4a --- /dev/null +++ b/ruoyi-ui/src/api/system/log.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询客户申请记录列表 +export function listLog(query) { + return request({ + url: '/system/log/list', + method: 'get', + params: query + }) +} + +// 查询客户申请记录详细 +export function getLog(id) { + return request({ + url: '/system/log/' + id, + method: 'get' + }) +} + +// 新增客户申请记录 +export function addLog(data) { + return request({ + url: '/system/log', + method: 'post', + data: data + }) +} + +// 修改客户申请记录 +export function updateLog(data) { + return request({ + url: '/system/log', + method: 'put', + data: data + }) +} + +// 删除客户申请记录 +export function delLog(id) { + return request({ + url: '/system/log/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/system/merchant.js b/ruoyi-ui/src/api/system/merchant.js new file mode 100644 index 00000000..4a0c9b86 --- /dev/null +++ b/ruoyi-ui/src/api/system/merchant.js @@ -0,0 +1,52 @@ +import request from "@/utils/request"; + +// 查询商户列表 +export function listMerchant(query) { + return request({ + url: "/system/merchant/list", + method: "get", + params: query, + }); +} + +// 查询商户详细 +export function getMerchant(id) { + return request({ + url: "/system/merchant/" + id, + method: "get", + }); +} + +// 新增商户 +export function addMerchant(data) { + return request({ + url: "/system/merchant/add", + method: "post", + data: data, + }); +} + +// 修改商户 +export function updateMerchant(data) { + return request({ + url: "/system/merchant/edit", + method: "post", + data: data, + }); +} + +// 删除商户 +export function delMerchant(id) { + return request({ + url: "/system/merchant/" + id, + method: "delete", + }); +} + +// 获取商户(机构)的列表 +export function getAllMerchantList() { + return request({ + url: "/system/customer/getAllMerchantList", + method: "get", + }); +} diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js index 4d3df609..74007962 100644 --- a/ruoyi-ui/src/permission.js +++ b/ruoyi-ui/src/permission.js @@ -1,58 +1,62 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' -import 'nprogress/nprogress.css' -import { getToken } from '@/utils/auth' -import { isRelogin } from '@/utils/request' +import router from "./router"; +import store from "./store"; +import { Message } from "element-ui"; +import NProgress from "nprogress"; +import "nprogress/nprogress.css"; +import { getToken } from "@/utils/auth"; +import { isRelogin } from "@/utils/request"; -NProgress.configure({ showSpinner: false }) +NProgress.configure({ showSpinner: false }); -const whiteList = ['/login', '/register'] +const whiteList = ["/login", "/register"]; +// const whiteList = ["/login", "/register", "/channel", "/merchant", "/customer"]; router.beforeEach((to, from, next) => { - NProgress.start() + NProgress.start(); if (getToken()) { - to.meta.title && store.dispatch('settings/setTitle', to.meta.title) + to.meta.title && store.dispatch("settings/setTitle", to.meta.title); /* has token*/ - if (to.path === '/login') { - next({ path: '/' }) - NProgress.done() + if (to.path === "/login") { + next({ path: "/" }); + NProgress.done(); } else if (whiteList.indexOf(to.path) !== -1) { - next() + next(); } else { if (store.getters.roles.length === 0) { - isRelogin.show = true + isRelogin.show = true; // 判断当前用户是否已拉取完user_info信息 - store.dispatch('GetInfo').then(() => { - isRelogin.show = false - store.dispatch('GenerateRoutes').then(accessRoutes => { - // 根据roles权限生成可访问的路由表 - router.addRoutes(accessRoutes) // 动态添加可访问路由表 - next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 - }) - }).catch(err => { - store.dispatch('LogOut').then(() => { - Message.error(err) - next({ path: '/' }) - }) + store + .dispatch("GetInfo") + .then(() => { + isRelogin.show = false; + store.dispatch("GenerateRoutes").then((accessRoutes) => { + // 根据roles权限生成可访问的路由表 + router.addRoutes(accessRoutes); // 动态添加可访问路由表 + next({ ...to, replace: true }); // hack方法 确保addRoutes已完成 + }); }) + .catch((err) => { + store.dispatch("LogOut").then(() => { + Message.error(err); + next({ path: "/" }); + }); + }); } else { - next() + next(); } } } else { // 没有token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入 - next() + next(); } else { - next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 否则全部重定向到登录页 - NProgress.done() + next(`/login?redirect=${encodeURIComponent(to.fullPath)}`); // 否则全部重定向到登录页 + NProgress.done(); } } -}) +}); router.afterEach(() => { - NProgress.done() -}) + NProgress.done(); +}); diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 38b85b9e..8b5a22d2 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -1,10 +1,10 @@ -import Vue from 'vue' -import Router from 'vue-router' +import Vue from "vue"; +import Router from "vue-router"; -Vue.use(Router) +Vue.use(Router); /* Layout */ -import Layout from '@/layout' +import Layout from "@/layout"; /** * Note: 路由配置项 @@ -31,153 +31,185 @@ import Layout from '@/layout' // 公共路由 export const constantRoutes = [ { - path: '/redirect', + path: "/redirect", component: Layout, hidden: true, children: [ { - path: '/redirect/:path(.*)', - component: () => import('@/views/redirect') - } - ] + path: "/redirect/:path(.*)", + component: () => import("@/views/redirect"), + }, + ], }, + // { + // path: "/channel", + // name: "渠道管理", + // component: Layout, + // meta: { + // title: "渠道管理", + // }, + // component: () => import("@/views/channel/index"), + // }, + // { + // path: "/merchant", + // name: "商户管理", + // component: Layout, + // meta: { + // title: "商户管理", + // }, + // component: () => import("@/views/merchant/index"), + // }, + // { + // path: "/customer", + // name: "用户管理", + // component: Layout, + // meta: { + // title: "用户管理", + // }, + // component: () => import("@/views/customer/index"), + // }, { - path: '/login', - component: () => import('@/views/login'), - hidden: true + path: "/index", + component: () => import("@/views/index_v1"), + hidden: true, }, { - path: '/register', - component: () => import('@/views/register'), - hidden: true + path: "/login", + component: () => import("@/views/login"), + hidden: true, }, { - path: '/404', - component: () => import('@/views/error/404'), - hidden: true + path: "/register", + component: () => import("@/views/register"), + hidden: true, }, { - path: '/401', - component: () => import('@/views/error/401'), - hidden: true + path: "/404", + component: () => import("@/views/error/404"), + hidden: true, + }, + { + path: "/401", + component: () => import("@/views/error/401"), + hidden: true, }, { - path: '', + path: "", component: Layout, - redirect: 'index', - children: [ - { - path: 'index', - component: () => import('@/views/index'), - name: 'Index', - meta: { title: '首页', icon: 'dashboard', affix: true } - } - ] + redirect: "system/user", + // children: [ + // { + // path: "index", + // component: () => import("@/views/index_v1"), + // name: "Index", + // meta: { title: "首页", icon: "dashboard", affix: true }, + // }, + // ], }, { - path: '/user', + path: "/user", component: Layout, hidden: true, - redirect: 'noredirect', + redirect: "noredirect", children: [ { - path: 'profile', - component: () => import('@/views/system/user/profile/index'), - name: 'Profile', - meta: { title: '个人中心', icon: 'user' } - } - ] - } -] + path: "profile", + component: () => import("@/views/system/user/profile/index"), + name: "Profile", + meta: { title: "个人中心", icon: "user" }, + }, + ], + }, +]; // 动态路由,基于用户权限动态去加载 export const dynamicRoutes = [ { - path: '/system/user-auth', + path: "/system/user-auth", component: Layout, hidden: true, - permissions: ['system:user:edit'], + permissions: ["system:user:edit"], children: [ { - path: 'role/:userId(\\d+)', - component: () => import('@/views/system/user/authRole'), - name: 'AuthRole', - meta: { title: '分配角色', activeMenu: '/system/user' } - } - ] + path: "role/:userId(\\d+)", + component: () => import("@/views/system/user/authRole"), + name: "AuthRole", + meta: { title: "分配角色", activeMenu: "/system/user" }, + }, + ], }, { - path: '/system/role-auth', + path: "/system/role-auth", component: Layout, hidden: true, - permissions: ['system:role:edit'], + permissions: ["system:role:edit"], children: [ { - path: 'user/:roleId(\\d+)', - component: () => import('@/views/system/role/authUser'), - name: 'AuthUser', - meta: { title: '分配用户', activeMenu: '/system/role' } - } - ] + path: "user/:roleId(\\d+)", + component: () => import("@/views/system/role/authUser"), + name: "AuthUser", + meta: { title: "分配用户", activeMenu: "/system/role" }, + }, + ], }, { - path: '/system/dict-data', + path: "/system/dict-data", component: Layout, hidden: true, - permissions: ['system:dict:list'], + permissions: ["system:dict:list"], children: [ { - path: 'index/:dictId(\\d+)', - component: () => import('@/views/system/dict/data'), - name: 'Data', - meta: { title: '字典数据', activeMenu: '/system/dict' } - } - ] + path: "index/:dictId(\\d+)", + component: () => import("@/views/system/dict/data"), + name: "Data", + meta: { title: "字典数据", activeMenu: "/system/dict" }, + }, + ], }, { - path: '/monitor/job-log', + path: "/monitor/job-log", component: Layout, hidden: true, - permissions: ['monitor:job:list'], + permissions: ["monitor:job:list"], children: [ { - path: 'index/:jobId(\\d+)', - component: () => import('@/views/monitor/job/log'), - name: 'JobLog', - meta: { title: '调度日志', activeMenu: '/monitor/job' } - } - ] + path: "index/:jobId(\\d+)", + component: () => import("@/views/monitor/job/log"), + name: "JobLog", + meta: { title: "调度日志", activeMenu: "/monitor/job" }, + }, + ], }, { - path: '/tool/gen-edit', + path: "/tool/gen-edit", component: Layout, hidden: true, - permissions: ['tool:gen:edit'], + permissions: ["tool:gen:edit"], children: [ { - path: 'index/:tableId(\\d+)', - component: () => import('@/views/tool/gen/editTable'), - name: 'GenEdit', - meta: { title: '修改生成配置', activeMenu: '/tool/gen' } - } - ] - } -] + path: "index/:tableId(\\d+)", + component: () => import("@/views/tool/gen/editTable"), + name: "GenEdit", + meta: { title: "修改生成配置", activeMenu: "/tool/gen" }, + }, + ], + }, +]; // 防止连续点击多次路由报错 let routerPush = Router.prototype.push; let routerReplace = Router.prototype.replace; // push Router.prototype.push = function push(location) { - return routerPush.call(this, location).catch(err => err) -} + return routerPush.call(this, location).catch((err) => err); +}; // replace Router.prototype.replace = function push(location) { - return routerReplace.call(this, location).catch(err => err) -} + return routerReplace.call(this, location).catch((err) => err); +}; export default new Router({ - mode: 'history', // 去掉url中的# + mode: "history", // 去掉url中的# scrollBehavior: () => ({ y: 0 }), - routes: constantRoutes -}) + routes: constantRoutes, +}); diff --git a/ruoyi-ui/src/views/channel/index.vue b/ruoyi-ui/src/views/channel/index.vue new file mode 100644 index 00000000..e3996432 --- /dev/null +++ b/ruoyi-ui/src/views/channel/index.vue @@ -0,0 +1,534 @@ + + + diff --git a/ruoyi-ui/src/views/customer/index.vue b/ruoyi-ui/src/views/customer/index.vue new file mode 100644 index 00000000..e17321ed --- /dev/null +++ b/ruoyi-ui/src/views/customer/index.vue @@ -0,0 +1,482 @@ + + + diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 5763b159..a1c6cf4c 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -39,9 +39,9 @@ -

租研舍后台管理框架

+

未信用秒租后台管理框架

- 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了租研舍管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 + 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了未信用秒租管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。

当前版本: v{{ version }} @@ -118,22 +118,28 @@ >

- QQ群: 满42799195 满170157040 - 满130643120 满225920371 满201705537 满236543183 - 满213618602 满148794840 满118752664 满101038945 - 满128355254 满179219821 158753145 + QQ群: 满42799195 + 满170157040 满130643120 满225920371 + 满201705537 满236543183 满213618602 + 满148794840 满118752664 满101038945 + 满128355254 满179219821 + 158753145

微信:/ *租研舍/ *未信用秒租

支付宝:/ *租研舍/ *未信用秒租

@@ -173,7 +179,9 @@
  • 修复未登录带参数访问成功后参数丢失问题
  • 修复HeaderSearch组件跳转query参数丢失问题
  • 修复数据字典列表页重置后标签值无法输入问题
  • -
  • 修复Excels导入时无法获取到readConverterExp内容转表达式问题
  • +
  • + 修复Excels导入时无法获取到readConverterExp内容转表达式问题 +
  • 优化Xss注解匹配方式
  • 优化权限字符匹配方式
  • 优化下载zip方法新增遮罩层
  • @@ -223,7 +231,9 @@
  • 优化DictTag组件value没有匹配的值时则展示value
  • 优化去除@EnableCustomSwagger注解后会启动失败问题
  • 优化upload接口在文件过大和文件名过长的情况返回提示信息
  • -
  • 优化异步保存日志发生报错不进RemoteLogFallbackFactory问题
  • +
  • + 优化异步保存日志发生报错不进RemoteLogFallbackFactory问题 +
  • 其他细节优化
  • @@ -317,7 +327,9 @@
  • Excel注解支持color字体颜色
  • 用户头像上传限制只能为图片格式
  • 检查定时任务bean所在包名是否为白名单配置
  • -
  • 字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)
  • +
  • + 字典类型必须以字母开头,且只能为(小写字母,数字,下滑线) +
  • 升级spring-cloud-alibaba到最新版2021.0.1.0
  • 升级spring-cloud到最新版2021.0.3
  • 升级spring-boot到最新版本2.7.1
  • @@ -502,7 +514,9 @@
  • 修复多图组件验证失败被删除问题
  • 请求参数新增reasonable分页合理化属性
  • 修复代码生成页面数据编辑保存之后总是跳转第一页的问题
  • -
  • 修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题
  • +
  • + 修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题 +
  • 其他细节优化
  • @@ -563,7 +577,9 @@
      -
    1. 新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)
    2. +
    3. + 新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单) +
    4. 布局设置支持保存&重置配置
    5. 富文本编辑器支持自定义上传地址
    6. 富文本编辑组件新增readOnly属性
    7. @@ -766,7 +782,9 @@
    8. 网关白名单放入nacos配置&支持模糊匹配
    9. 修复富文本工具栏样式不对齐问题
    10. Editor组件优化,支持自定义高度&图片冲突问题
    11. -
    12. 修复富文本空格和缩进保存后不生效问题&删除重复的placeholder
    13. +
    14. + 修复富文本空格和缩进保存后不生效问题&删除重复的placeholder +
    15. 限制系统内置参数不允许删除
    16. 修正调用目标字符串最大长度
    17. 修改自定义权限实现
    18. @@ -820,7 +838,9 @@
    19. 代码生成浮点型改用BigDecimal
    20. 表单类型为Integer/Long设置整形默认值
    21. 修改用户管理复选框宽度,防止部分浏览器出现省略号
    22. -
    23. RedisCache中所有方法参数添加final,并优化list取出效率,添加其它常用redis方法
    24. +
    25. + RedisCache中所有方法参数添加final,并优化list取出效率,添加其它常用redis方法 +
    26. 修正定时任务日志权限字符
    27. 添加Jackson时区配置
    28. 代码生成相关问题修复
    29. @@ -874,14 +894,16 @@
    30. 支持一级菜单(和主页同级)在main区域显示
    31. 限制外链地址必须以http(s)😕/开头
    32. tagview & sidebar 主题颜色与element ui(全局)同步
    33. -
    34. 修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序
    35. +
    36. + 修复dict_sort不可update为0的问题&查询返回增加dict_sort升序排序 +
    37. 权限部分代码调整
    38. 其他细节优化
      -
    1. 租研舍微服务系统正式发布
    2. +
    3. 未信用秒租微服务系统正式发布
    @@ -893,11 +915,7 @@ 捐赠支持
    - donate + donate 你可以请作者喝杯咖啡表示鼓励 @@ -988,4 +1006,3 @@ export default { } } - diff --git a/ruoyi-ui/src/views/log/index.vue b/ruoyi-ui/src/views/log/index.vue new file mode 100644 index 00000000..cc4a39db --- /dev/null +++ b/ruoyi-ui/src/views/log/index.vue @@ -0,0 +1,297 @@ + + + diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue index 5d7abdf8..7fff7826 100644 --- a/ruoyi-ui/src/views/login.vue +++ b/ruoyi-ui/src/views/login.vue @@ -1,7 +1,12 @@