- 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了若依管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
+ 一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适自己的。于是利用空闲休息时间开始自己写一套后台系统。如此有了针灸管理系统,她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA等等,当然,您也可以对她进行深度定制,以做出更强系统。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。
官网:http://www.acupuncture.viphttp://www.ruoyi.vip
- QQ群: 满937441 满887144332
- 满180251782 满104180207 满186866453 满201396349
- 满101456076 满101539465 满264312783 满167385320
- 满104748341 满160110482 满170801498 满108482800
- 满101046199 满136919097 满143961921 满174951577
- 满161281055 满138988063 满151450850 满224622315
- 满287842588 187944233
+ QQ群: 满937441
+ 满887144332 满180251782 满104180207
+ 满186866453 满201396349 满101456076
+ 满101539465 满264312783 满167385320
+ 满104748341 满160110482 满170801498
+ 满108482800 满101046199 满136919097
+ 满143961921 满174951577 满161281055
+ 满138988063 满151450850 满224622315
+ 满287842588
+ 187944233
微信:修复table中更多按钮切换主题色未生效修复问题
修复某些特性的环境生成代码变乱码TXT文件问题
修复代码生成图片/文件/单选时选择必填无法校验问题
- 修复某些特性的情况用户编辑对话框中角色和部门无法修改问题
+
+ 修复某些特性的情况用户编辑对话框中角色和部门无法修改问题
+
其他细节优化
@@ -364,7 +384,9 @@
新增获取不带后缀文件名称方法
新增获取配置文件中的属性值方法
新增内容编码/解码方便插件集成使用
- 字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)
+
+ 字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)
+
优化设置分页参数默认值
优化对空字符串参数处理的过滤
优化显示顺序orderNum类型为整型
@@ -568,8 +590,12 @@
BLOB下载时清除URL对象引用
代码生成导入表按创建时间排序
修复代码生成页面数据编辑保存之后总是跳转第一页的问题
- 修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题
- 多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复
+
+ 修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题
+
+
+ 多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复
+
其他细节优化
@@ -614,7 +640,9 @@
- - 新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)
+ -
+ 新增菜单导航显示风格TopNav(false为左侧导航菜单,true为顶部导航菜单)
+
- 布局设置支持保存&重置配置
- 修复树表数据显示不全&加载慢问题
- 新增IE浏览器版本过低提示页面
@@ -633,7 +661,9 @@
- 升级druid到最新版本v1.2.6
- 升级mybatis到最新版3.5.6 阻止远程代码执行漏洞
- 升级oshi到最新版本v5.6.0
- - velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞
+ -
+ velocity剔除commons-collections版本,防止3.2.1版本的反序列化漏洞
+
- 数据监控页默认账户密码防止越权访问
- 修复firefox下表单构建拖拽会新打卡一个选项卡
- 修正后端导入表权限标识
@@ -1010,11 +1040,7 @@
捐赠支持
-

+
你可以请作者喝杯咖啡表示鼓励
@@ -1031,14 +1057,14 @@ export default {
data() {
return {
// 版本号
- version: "3.8.9"
+ version: "3.8.9",
};
},
methods: {
goTarget(href) {
window.open(href, "_blank");
- }
- }
+ },
+ },
};
@@ -1105,4 +1131,3 @@ export default {
}
}
-
diff --git a/acupuncture-ui/src/views/login.vue b/acupuncture-ui/src/views/login.vue
index efb63de7..5f898936 100644
--- a/acupuncture-ui/src/views/login.vue
+++ b/acupuncture-ui/src/views/login.vue
@@ -1,7 +1,12 @@
-
- 若依后台管理系统
+
+ 针灸后台管理系统
-
+
@@ -20,7 +29,11 @@
placeholder="密码"
@keyup.enter.native="handleLogin"
>
-
+
@@ -31,32 +44,42 @@
style="width: 63%"
@keyup.enter.native="handleLogin"
>
-
+
-
![]()
+
- 记住密码
-
+ 记住密码
+
登 录
登 录 中...
-
@@ -64,7 +87,7 @@
diff --git a/acupuncture-ui/src/views/monitor/job/index.vue b/acupuncture-ui/src/views/monitor/job/index.vue
index d9e43757..892c7275 100644
--- a/acupuncture-ui/src/views/monitor/job/index.vue
+++ b/acupuncture-ui/src/views/monitor/job/index.vue
@@ -179,7 +179,7 @@
Bean调用示例:ryTask.ryParams('ry')
-
Class类调用示例:com.acupuncture.quartz.task.RyTask.ryParams('ry')
+
Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
参数说明:支持字符串,布尔类型,长整型,浮点型,整型
diff --git a/acupuncture-ui/src/views/patientFile/index.vue b/acupuncture-ui/src/views/patientFile/index.vue
new file mode 100644
index 00000000..320e6595
--- /dev/null
+++ b/acupuncture-ui/src/views/patientFile/index.vue
@@ -0,0 +1,594 @@
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ 新增
+
+
+ 删除
+
+
+ 下载模版
+
+
+ 导入
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}
+
+
+
+
+
+
+
+
+ 修改
+ 删除
+ 详情
+ 诊疗档案
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 男
+ 女
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 将文件拖到此处,或
+ 点击上传
+
+
+
+
+
+
+
+
+
+
diff --git a/acupuncture-ui/src/views/register.vue b/acupuncture-ui/src/views/register.vue
index f2d24bcf..62b634c1 100644
--- a/acupuncture-ui/src/views/register.vue
+++ b/acupuncture-ui/src/views/register.vue
@@ -1,10 +1,24 @@
-
- 若依后台管理系统
+
+ 针灸后台管理系统
-
-
+
+
@@ -15,7 +29,11 @@
placeholder="密码"
@keyup.enter.native="handleRegister"
>
-
+
@@ -26,7 +44,11 @@
placeholder="确认密码"
@keyup.enter.native="handleRegister"
>
-
+
@@ -37,31 +59,37 @@
style="width: 63%"
@keyup.enter.native="handleRegister"
>
-
+
-
![]()
+
-
+
注 册
注 册 中...
-
@@ -86,26 +114,40 @@ export default {
password: "",
confirmPassword: "",
code: "",
- uuid: ""
+ uuid: "",
},
registerRules: {
username: [
{ required: true, trigger: "blur", message: "请输入您的账号" },
- { min: 2, max: 20, message: '用户账号长度必须介于 2 和 20 之间', trigger: 'blur' }
+ {
+ min: 2,
+ max: 20,
+ message: "用户账号长度必须介于 2 和 20 之间",
+ trigger: "blur",
+ },
],
password: [
{ required: true, trigger: "blur", message: "请输入您的密码" },
- { min: 5, max: 20, message: "用户密码长度必须介于 5 和 20 之间", trigger: "blur" },
- { pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
+ {
+ min: 5,
+ max: 20,
+ message: "用户密码长度必须介于 5 和 20 之间",
+ trigger: "blur",
+ },
+ {
+ pattern: /^[^<>"'|\\]+$/,
+ message: "不能包含非法字符:< > \" ' \\\ |",
+ trigger: "blur",
+ },
],
confirmPassword: [
{ required: true, trigger: "blur", message: "请再次输入您的密码" },
- { required: true, validator: equalToPassword, trigger: "blur" }
+ { required: true, validator: equalToPassword, trigger: "blur" },
],
- code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+ code: [{ required: true, trigger: "change", message: "请输入验证码" }],
},
loading: false,
- captchaEnabled: true
+ captchaEnabled: true,
};
},
created() {
@@ -113,8 +155,9 @@ export default {
},
methods: {
getCode() {
- getCodeImg().then(res => {
- this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
+ getCodeImg().then((res) => {
+ this.captchaEnabled =
+ res.captchaEnabled === undefined ? true : res.captchaEnabled;
if (this.captchaEnabled) {
this.codeUrl = "data:image/gif;base64," + res.img;
this.registerForm.uuid = res.uuid;
@@ -122,27 +165,37 @@ export default {
});
},
handleRegister() {
- this.$refs.registerForm.validate(valid => {
+ this.$refs.registerForm.validate((valid) => {
if (valid) {
this.loading = true;
- register(this.registerForm).then(res => {
- const username = this.registerForm.username;
- this.$alert("恭喜你,您的账号 " + username + " 注册成功!", '系统提示', {
- dangerouslyUseHTMLString: true,
- type: 'success'
- }).then(() => {
- this.$router.push("/login");
- }).catch(() => {});
- }).catch(() => {
- this.loading = false;
- if (this.captchaEnabled) {
- this.getCode();
- }
- })
+ register(this.registerForm)
+ .then((res) => {
+ const username = this.registerForm.username;
+ this.$alert(
+ "恭喜你,您的账号 " +
+ username +
+ " 注册成功!",
+ "系统提示",
+ {
+ dangerouslyUseHTMLString: true,
+ type: "success",
+ }
+ )
+ .then(() => {
+ this.$router.push("/login");
+ })
+ .catch(() => {});
+ })
+ .catch(() => {
+ this.loading = false;
+ if (this.captchaEnabled) {
+ this.getCode();
+ }
+ });
}
});
- }
- }
+ },
+ },
};
diff --git a/acupuncture-ui/src/views/system/user/index.vue b/acupuncture-ui/src/views/system/user/index.vue
index 1dbc2d14..dbaede04 100644
--- a/acupuncture-ui/src/views/system/user/index.vue
+++ b/acupuncture-ui/src/views/system/user/index.vue
@@ -550,4 +550,4 @@ export default {
}
}
};
-
\ No newline at end of file
+
diff --git a/acupuncture-ui/src/views/tool/gen/genInfoForm.vue b/acupuncture-ui/src/views/tool/gen/genInfoForm.vue
index d4cd72af..98daf6d5 100644
--- a/acupuncture-ui/src/views/tool/gen/genInfoForm.vue
+++ b/acupuncture-ui/src/views/tool/gen/genInfoForm.vue
@@ -24,7 +24,7 @@
生成包路径
-
+
diff --git a/acupuncture-ui/src/views/tool/gen/index.vue b/acupuncture-ui/src/views/tool/gen/index.vue
index f8528e21..9237c302 100644
--- a/acupuncture-ui/src/views/tool/gen/index.vue
+++ b/acupuncture-ui/src/views/tool/gen/index.vue
@@ -280,7 +280,7 @@ export default {
this.$modal.msgSuccess("成功生成到自定义路径:" + row.genPath);
});
} else {
- this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "acupuncture.zip");
+ this.$download.zip("/tool/gen/batchGenCode?tables=" + tableNames, "ruoyi.zip");
}
},
/** 同步数据库操作 */
diff --git a/acupuncture-ui/vue.config.js b/acupuncture-ui/vue.config.js
index 1eb35617..f1aa0f3f 100644
--- a/acupuncture-ui/vue.config.js
+++ b/acupuncture-ui/vue.config.js
@@ -1,15 +1,15 @@
-'use strict'
-const path = require('path')
+"use strict";
+const path = require("path");
function resolve(dir) {
- return path.join(__dirname, dir)
+ return path.join(__dirname, dir);
}
-const CompressionPlugin = require('compression-webpack-plugin')
+const CompressionPlugin = require("compression-webpack-plugin");
-const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || "针灸管理系统"; // 网页标题
-const port = process.env.port || process.env.npm_config_port || 80 // 端口
+const port = process.env.port || process.env.npm_config_port || 80; // 端口
// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
@@ -17,115 +17,114 @@ const port = process.env.port || process.env.npm_config_port || 80 // 端口
module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
- // 例如 https://www.acupuncture.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.acupuncture.vip/admin/,则设置 baseUrl 为 /admin/。
+ // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
- outputDir: 'dist',
+ outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
- assetsDir: 'static',
+ assetsDir: "static",
// 是否开启eslint保存检测,有效值:ture | false | 'error'
- lintOnSave: process.env.NODE_ENV === 'development',
+ lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
- transpileDependencies: ['quill'],
+ transpileDependencies: ["quill"],
// webpack-dev-server 相关配置
devServer: {
- host: '0.0.0.0',
+ host: "0.0.0.0",
port: port,
open: true,
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
- target: `http://localhost:8080`,
+ target: `https://test.tall.wiki/acupuncture`,
changeOrigin: true,
pathRewrite: {
- ['^' + process.env.VUE_APP_BASE_API]: ''
- }
- }
+ ["^" + process.env.VUE_APP_BASE_API]: "",
+ },
+ },
},
- disableHostCheck: true
+ disableHostCheck: true,
},
css: {
loaderOptions: {
sass: {
- sassOptions: { outputStyle: "expanded" }
- }
- }
+ sassOptions: { outputStyle: "expanded" },
+ },
+ },
},
configureWebpack: {
name: name,
resolve: {
alias: {
- '@': resolve('src')
- }
+ "@": resolve("src"),
+ },
},
plugins: [
- // http://doc.acupuncture.vip/acupuncture-vue/other/faq.html#使用gzip解压缩静态文件
+ // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({
- cache: false, // 不启用文件缓存
- test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式
- filename: '[path][base].gz[query]', // 压缩后的文件名
- algorithm: 'gzip', // 使用gzip压缩
- minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩
- deleteOriginalAssets: false // 压缩后删除原文件
- })
+ cache: false, // 不启用文件缓存
+ test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式
+ filename: "[path][base].gz[query]", // 压缩后的文件名
+ algorithm: "gzip", // 使用gzip压缩
+ minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩
+ deleteOriginalAssets: false, // 压缩后删除原文件
+ }),
],
},
chainWebpack(config) {
- config.plugins.delete('preload') // TODO: need test
- config.plugins.delete('prefetch') // TODO: need test
+ config.plugins.delete("preload"); // TODO: need test
+ config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader
+ config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module
- .rule('svg')
- .exclude.add(resolve('src/assets/icons'))
- .end()
- config.module
- .rule('icons')
+ .rule("icons")
.test(/\.svg$/)
- .include.add(resolve('src/assets/icons'))
+ .include.add(resolve("src/assets/icons"))
.end()
- .use('svg-sprite-loader')
- .loader('svg-sprite-loader')
+ .use("svg-sprite-loader")
+ .loader("svg-sprite-loader")
.options({
- symbolId: 'icon-[name]'
+ symbolId: "icon-[name]",
})
- .end()
+ .end();
- config.when(process.env.NODE_ENV !== 'development', config => {
- config
- .plugin('ScriptExtHtmlWebpackPlugin')
- .after('html')
- .use('script-ext-html-webpack-plugin', [{
+ config.when(process.env.NODE_ENV !== "development", (config) => {
+ config
+ .plugin("ScriptExtHtmlWebpackPlugin")
+ .after("html")
+ .use("script-ext-html-webpack-plugin", [
+ {
// `runtime` must same as runtimeChunk name. default is `runtime`
- inline: /runtime\..*\.js$/
- }])
- .end()
+ inline: /runtime\..*\.js$/,
+ },
+ ])
+ .end();
- config.optimization.splitChunks({
- chunks: 'all',
- cacheGroups: {
- libs: {
- name: 'chunk-libs',
- test: /[\\/]node_modules[\\/]/,
- priority: 10,
- chunks: 'initial' // only package third parties that are initially dependent
- },
- elementUI: {
- name: 'chunk-elementUI', // split elementUI into a single package
- test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
- priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app
- },
- commons: {
- name: 'chunk-commons',
- test: resolve('src/components'), // can customize your rules
- minChunks: 3, // minimum common number
- priority: 5,
- reuseExistingChunk: true
- }
- }
- })
- config.optimization.runtimeChunk('single')
- })
- }
-}
+ config.optimization.splitChunks({
+ chunks: "all",
+ cacheGroups: {
+ libs: {
+ name: "chunk-libs",
+ test: /[\\/]node_modules[\\/]/,
+ priority: 10,
+ chunks: "initial", // only package third parties that are initially dependent
+ },
+ elementUI: {
+ name: "chunk-elementUI", // split elementUI into a single package
+ test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
+ priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+ },
+ commons: {
+ name: "chunk-commons",
+ test: resolve("src/components"), // can customize your rules
+ minChunks: 3, // minimum common number
+ priority: 5,
+ reuseExistingChunk: true,
+ },
+ },
+ });
+ config.optimization.runtimeChunk("single");
+ });
+ },
+};