Browse Source

患者档案

newMaster
1747191978@qq.com 5 months ago
parent
commit
78919c176e
  1. 4
      acupuncture-ui/.env.development
  2. 4
      acupuncture-ui/.env.production
  3. 4
      acupuncture-ui/.env.staging
  4. 4
      acupuncture-ui/README.md
  5. 6
      acupuncture-ui/package.json
  6. 57
      acupuncture-ui/src/App.vue
  7. 50
      acupuncture-ui/src/api/login.js
  8. 10
      acupuncture-ui/src/api/patientFile.js
  9. 2
      acupuncture-ui/src/api/system/user.js
  10. 2
      acupuncture-ui/src/assets/styles/ruoyi.scss
  11. 6
      acupuncture-ui/src/components/RuoYi/Doc/index.vue
  12. 6
      acupuncture-ui/src/components/RuoYi/Git/index.vue
  13. 4
      acupuncture-ui/src/directive/dialog/drag.js
  14. 2
      acupuncture-ui/src/directive/dialog/dragHeight.js
  15. 2
      acupuncture-ui/src/directive/dialog/dragWidth.js
  16. 2
      acupuncture-ui/src/directive/module/clipboard.js
  17. 2
      acupuncture-ui/src/directive/permission/hasPermi.js
  18. 2
      acupuncture-ui/src/directive/permission/hasRole.js
  19. 12
      acupuncture-ui/src/layout/components/Navbar.vue
  20. 4
      acupuncture-ui/src/main.js
  21. 2
      acupuncture-ui/src/plugins/download.js
  22. 2
      acupuncture-ui/src/utils/dict/Dict.js
  23. 2
      acupuncture-ui/src/utils/dict/DictMeta.js
  24. 2
      acupuncture-ui/src/utils/dict/DictOptions.js
  25. 2
      acupuncture-ui/src/utils/index.js
  26. 2
      acupuncture-ui/src/utils/request.js
  27. 2
      acupuncture-ui/src/utils/ruoyi.js
  28. 81
      acupuncture-ui/src/views/index.vue
  29. 112
      acupuncture-ui/src/views/login.vue
  30. 2
      acupuncture-ui/src/views/monitor/job/index.vue
  31. 594
      acupuncture-ui/src/views/patientFile/index.vue
  32. 131
      acupuncture-ui/src/views/register.vue
  33. 2
      acupuncture-ui/src/views/system/user/index.vue
  34. 2
      acupuncture-ui/src/views/tool/gen/genInfoForm.vue
  35. 2
      acupuncture-ui/src/views/tool/gen/index.vue
  36. 153
      acupuncture-ui/vue.config.js

4
acupuncture-ui/.env.development

@ -1,10 +1,10 @@
# 页面标题
VUE_APP_TITLE = 若依管理系统
VUE_APP_TITLE = 针灸管理系统
# 开发环境配置
ENV = 'development'
# 若依管理系统/开发环境
# 针灸管理系统/开发环境
VUE_APP_BASE_API = '/dev-api'
# 路由懒加载

4
acupuncture-ui/.env.production

@ -1,8 +1,8 @@
# 页面标题
VUE_APP_TITLE = 若依管理系统
VUE_APP_TITLE = 针灸管理系统
# 生产环境配置
ENV = 'production'
# 若依管理系统/生产环境
# 针灸管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'

4
acupuncture-ui/.env.staging

@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 若依管理系统
VUE_APP_TITLE = 针灸管理系统
BABEL_ENV = production
@ -8,5 +8,5 @@ NODE_ENV = production
# 测试环境配置
ENV = 'staging'
# 若依管理系统/测试环境
# 针灸管理系统/测试环境
VUE_APP_BASE_API = '/stage-api'

4
acupuncture-ui/README.md

@ -2,10 +2,10 @@
```bash
# 克隆项目
git clone https://gitee.com/y_project/acupuncture-Vue
git clone https://gitee.com/y_project/RuoYi-Vue
# 进入项目目录
cd acupuncture-ui
cd ruoyi-ui
# 安装依赖
npm install

6
acupuncture-ui/package.json

@ -1,7 +1,7 @@
{
"name": "acupuncture",
"name": "ruoyi",
"version": "3.8.9",
"description": "若依管理系统",
"description": "针灸管理系统",
"author": "若依",
"license": "MIT",
"scripts": {
@ -33,7 +33,7 @@
],
"repository": {
"type": "git",
"url": "https://gitee.com/y_project/acupuncture-Vue.git"
"url": "https://gitee.com/y_project/RuoYi-Vue.git"
},
"dependencies": {
"@riophae/vue-treeselect": "0.4.0",

57
acupuncture-ui/src/App.vue

@ -13,12 +13,16 @@ export default {
components: { ThemePicker },
metaInfo() {
return {
title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title,
titleTemplate: title => {
return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE
}
}
}
title:
this.$store.state.settings.dynamicTitle &&
this.$store.state.settings.title,
titleTemplate: (title) => {
return title
? `${title} - ${process.env.VUE_APP_TITLE}`
: process.env.VUE_APP_TITLE;
},
};
},
};
</script>
<style scoped>
@ -26,3 +30,44 @@ export default {
display: none;
}
</style>
<style>
.wj-uploader .el-icon-upload:before {
font-size: 100px;
}
.wj-uploader .el-upload {
display: flex;
align-content: center;
justify-content: center;
flex-wrap: wrap;
}
.wj-uploader .el-upload__text {
line-height: 20px;
width: 100% !important;
}
.avatar-uploader {
height: 180px;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9 !important;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
width: 100% !important;
height: 180px !important;
line-height: 150px;
}
.el-upload-dragger,
.el-upload {
width: 100% !important;
}
.el-upload-list__item {
transition: none !important;
}
.el-upload-list__item:first-child {
margin-top: 0;
}
.el-input__inner {
padding: 0 15px !important;
}
</style>

50
acupuncture-ui/src/api/login.js

@ -1,4 +1,4 @@
import request from '@/utils/request'
import request from "@/utils/request";
// 登录方法
export function login(username, password, code, uuid) {
@ -6,55 +6,55 @@ export function login(username, password, code, uuid) {
username,
password,
code,
uuid
}
uuid,
};
return request({
url: '/login',
url: "/web/login",
headers: {
isToken: false,
repeatSubmit: false
repeatSubmit: false,
},
method: 'post',
data: data
})
method: "post",
data: data,
});
}
// 注册方法
export function register(data) {
return request({
url: '/register',
url: "/register",
headers: {
isToken: false
isToken: false,
},
method: 'post',
data: data
})
method: "post",
data: data,
});
}
// 获取用户详细信息
export function getInfo() {
return request({
url: '/getInfo',
method: 'get'
})
url: "/getInfo",
method: "get",
});
}
// 退出方法
export function logout() {
return request({
url: '/logout',
method: 'post'
})
url: "/logout",
method: "post",
});
}
// 获取验证码
export function getCodeImg() {
return request({
url: '/captchaImage',
url: "/captchaImage",
headers: {
isToken: false
isToken: false,
},
method: 'get',
timeout: 20000
})
}
method: "get",
timeout: 20000,
});
}

10
acupuncture-ui/src/api/patientFile.js

@ -0,0 +1,10 @@
import request from "@/utils/request";
// 注册方法
export function queryPatient(data) {
return request({
url: "/patient/list",
method: "post",
data: data,
});
}

2
acupuncture-ui/src/api/system/user.js

@ -1,5 +1,5 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/acupuncture";
import { parseStrEmpty } from "@/utils/ruoyi";
// 查询用户列表
export function listUser(query) {

2
acupuncture-ui/src/assets/styles/ruoyi.scss

@ -1,6 +1,6 @@
/**
* 通用css样式布局处理
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
/** 基础通用 **/

6
acupuncture-ui/src/components/RuoYi/Doc/index.vue

@ -6,10 +6,10 @@
<script>
export default {
name: 'acupunctureDoc',
name: 'RuoYiDoc',
data() {
return {
url: 'http://doc.acupuncture.vip/acupuncture-vue'
url: 'http://doc.ruoyi.vip/ruoyi-vue'
}
},
methods: {
@ -18,4 +18,4 @@ export default {
}
}
}
</script>
</script>

6
acupuncture-ui/src/components/RuoYi/Git/index.vue

@ -6,10 +6,10 @@
<script>
export default {
name: 'acupunctureGit',
name: 'RuoYiGit',
data() {
return {
url: 'https://gitee.com/y_project/acupuncture-Vue'
url: 'https://gitee.com/y_project/RuoYi-Vue'
}
},
methods: {
@ -18,4 +18,4 @@ export default {
}
}
}
</script>
</script>

4
acupuncture-ui/src/directive/dialog/drag.js

@ -1,6 +1,6 @@
/**
* v-dialogDrag 弹窗拖拽
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
export default {
@ -61,4 +61,4 @@ export default {
};
}
}
};
};

2
acupuncture-ui/src/directive/dialog/dragHeight.js

@ -1,6 +1,6 @@
/**
* v-dialogDragWidth 可拖动弹窗高度右下角
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
export default {

2
acupuncture-ui/src/directive/dialog/dragWidth.js

@ -1,6 +1,6 @@
/**
* v-dialogDragWidth 可拖动弹窗宽度右侧边
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
export default {

2
acupuncture-ui/src/directive/module/clipboard.js

@ -1,6 +1,6 @@
/**
* v-clipboard 文字复制剪贴
* Copyright (c) 2021 acupuncture
* Copyright (c) 2021 ruoyi
*/
import Clipboard from 'clipboard'

2
acupuncture-ui/src/directive/permission/hasPermi.js

@ -1,6 +1,6 @@
/**
* v-hasPermi 操作权限处理
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
import store from '@/store'

2
acupuncture-ui/src/directive/permission/hasRole.js

@ -1,6 +1,6 @@
/**
* v-hasRole 角色权限处理
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
import store from '@/store'

12
acupuncture-ui/src/layout/components/Navbar.vue

@ -10,11 +10,11 @@
<search id="header-search" class="right-menu-item" />
<el-tooltip content="源码地址" effect="dark" placement="bottom">
<ruo-yi-git id="acupuncture-git" class="right-menu-item hover-effect" />
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
</el-tooltip>
<el-tooltip content="文档地址" effect="dark" placement="bottom">
<ruo-yi-doc id="acupuncture-doc" class="right-menu-item hover-effect" />
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
</el-tooltip>
<screenfull id="screenfull" class="right-menu-item hover-effect" />
@ -54,8 +54,8 @@ import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch'
import acupunctureGit from '@/components/acupuncture/Git'
import acupunctureDoc from '@/components/acupuncture/Doc'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
export default {
components: {
@ -65,8 +65,8 @@ export default {
Screenfull,
SizeSelect,
Search,
acupunctureGit,
acupunctureDoc
RuoYiGit,
RuoYiDoc
},
computed: {
...mapGetters([

4
acupuncture-ui/src/main.js

@ -6,7 +6,7 @@ import Element from 'element-ui'
import './assets/styles/element-variables.scss'
import '@/assets/styles/index.scss' // global css
import '@/assets/styles/acupuncture.scss' // acupuncture css
import '@/assets/styles/ruoyi.scss' // ruoyi css
import App from './App'
import store from './store'
import router from './router'
@ -18,7 +18,7 @@ import './assets/icons' // icon
import './permission' // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/acupuncture";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi";
// 分页组件
import Pagination from "@/components/Pagination";
// 自定义表格工具组件

2
acupuncture-ui/src/plugins/download.js

@ -3,7 +3,7 @@ import {Loading, Message} from 'element-ui'
import { saveAs } from 'file-saver'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { blobValidate } from "@/utils/acupuncture";
import { blobValidate } from "@/utils/ruoyi";
const baseURL = process.env.VUE_APP_BASE_API
let downloadLoadingInstance;

2
acupuncture-ui/src/utils/dict/Dict.js

@ -1,5 +1,5 @@
import Vue from 'vue'
import { mergeRecursive } from "@/utils/acupuncture";
import { mergeRecursive } from "@/utils/ruoyi";
import DictMeta from './DictMeta'
import DictData from './DictData'

2
acupuncture-ui/src/utils/dict/DictMeta.js

@ -1,4 +1,4 @@
import { mergeRecursive } from "@/utils/acupuncture";
import { mergeRecursive } from "@/utils/ruoyi";
import DictOptions from './DictOptions'
/**

2
acupuncture-ui/src/utils/dict/DictOptions.js

@ -1,4 +1,4 @@
import { mergeRecursive } from "@/utils/acupuncture";
import { mergeRecursive } from "@/utils/ruoyi";
import dictConverter from './DictConverter'
export const options = {

2
acupuncture-ui/src/utils/index.js

@ -1,4 +1,4 @@
import { parseTime } from './acupuncture'
import { parseTime } from './ruoyi'
/**
* 表格时间格式化

2
acupuncture-ui/src/utils/request.js

@ -3,7 +3,7 @@ import { Notification, MessageBox, Message, Loading } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { tansParams, blobValidate } from "@/utils/acupuncture";
import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache'
import { saveAs } from 'file-saver'

2
acupuncture-ui/src/utils/ruoyi.js

@ -2,7 +2,7 @@
/**
* 通用js方法封装处理
* Copyright (c) 2019 acupuncture
* Copyright (c) 2019 ruoyi
*/
// 日期格式化

81
acupuncture-ui/src/views/index.vue

@ -3,7 +3,18 @@
<el-row :gutter="20">
<el-col :sm="24" :lg="24">
<blockquote class="text-warning" style="font-size: 14px">
阿里云服务器折扣区<el-link href="http://aly.acupuncture.vip" type="primary" target="_blank">点我进入</el-link> &nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区<el-link href="http://txy.acupuncture.vip" type="primary" target="_blank">点我进入</el-link>
阿里云服务器折扣区<el-link
href="http://aly.ruoyi.vip"
type="primary"
target="_blank"
>点我进入</el-link
>
&nbsp;&nbsp;&nbsp; 腾讯云服务器秒杀区<el-link
href="http://txy.ruoyi.vip"
type="primary"
target="_blank"
>点我进入</el-link
>
</blockquote>
<hr />
</el-col>
@ -12,7 +23,7 @@
<el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>若依后台管理框架</h2>
<p>
一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了若依管理系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能
一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了针灸管理系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能
</p>
<p>
<b>当前版本:</b> <span>v{{ version }}</span>
@ -26,14 +37,14 @@
size="mini"
icon="el-icon-cloudy"
plain
@click="goTarget('https://gitee.com/y_project/acupuncture-Vue')"
@click="goTarget('https://gitee.com/y_project/RuoYi-Vue')"
>访问码云</el-button
>
<el-button
size="mini"
icon="el-icon-s-home"
plain
@click="goTarget('http://acupuncture.vip')"
@click="goTarget('http://ruoyi.vip')"
>访问主页</el-button
>
</p>
@ -83,19 +94,26 @@
<div class="body">
<p>
<i class="el-icon-s-promotion"></i> 官网<el-link
href="http://www.acupuncture.vip"
href="http://www.ruoyi.vip"
target="_blank"
>http://www.acupuncture.vip</el-link
>http://www.ruoyi.vip</el-link
>
</p>
<p>
<i class="el-icon-user-solid"></i> QQ群<s> 满937441 </s> <s> 满887144332 </s>
<s> 满180251782 </s> <s> 满104180207 </s> <s> 满186866453 </s> <s> 满201396349 </s>
<s> 满101456076 </s> <s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s>
<s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s> <s> 满108482800 </s>
<s> 满101046199 </s> <s> 满136919097 </s> <s> 满143961921 </s> <s> 满174951577 </s>
<s> 满161281055 </s> <s> 满138988063 </s> <s> 满151450850 </s> <s> 满224622315 </s>
<s> 满287842588 </s> <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=HKz42pk2zQ1WUMbbRo50-N7tY4IDKKrj&authKey=ukBg3edmUbnmoo40xZCo6R1tYdTglYJ1nBFRW9gTHuZwLI1r8wgFT6cWUrAldwcr&noverify=0&group_code=187944233" target="_blank">187944233</a>
<i class="el-icon-user-solid"></i> QQ群<s> 满937441 </s>
<s> 满887144332 </s> <s> 满180251782 </s> <s> 满104180207 </s>
<s> 满186866453 </s> <s> 满201396349 </s> <s> 满101456076 </s>
<s> 满101539465 </s> <s> 满264312783 </s> <s> 满167385320 </s>
<s> 满104748341 </s> <s> 满160110482 </s> <s> 满170801498 </s>
<s> 满108482800 </s> <s> 满101046199 </s> <s> 满136919097 </s>
<s> 满143961921 </s> <s> 满174951577 </s> <s> 满161281055 </s>
<s> 满138988063 </s> <s> 满151450850 </s> <s> 满224622315 </s>
<s> 满287842588 </s>
<a
href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=HKz42pk2zQ1WUMbbRo50-N7tY4IDKKrj&authKey=ukBg3edmUbnmoo40xZCo6R1tYdTglYJ1nBFRW9gTHuZwLI1r8wgFT6cWUrAldwcr&noverify=0&group_code=187944233"
target="_blank"
>187944233</a
>
</p>
<p>
<i class="el-icon-chat-dot-round"></i> 微信<a
@ -303,7 +321,9 @@
<li>修复table中更多按钮切换主题色未生效修复问题</li>
<li>修复某些特性的环境生成代码变乱码TXT文件问题</li>
<li>修复代码生成图片/文件/单选时选择必填无法校验问题</li>
<li>修复某些特性的情况用户编辑对话框中角色和部门无法修改问题</li>
<li>
修复某些特性的情况用户编辑对话框中角色和部门无法修改问题
</li>
<li>其他细节优化</li>
</ol>
</el-collapse-item>
@ -364,7 +384,9 @@
<li>新增获取不带后缀文件名称方法</li>
<li>新增获取配置文件中的属性值方法</li>
<li>新增内容编码/解码方便插件集成使用</li>
<li>字典类型必须以字母开头且只能为小写字母数字下滑线</li>
<li>
字典类型必须以字母开头且只能为小写字母数字下滑线
</li>
<li>优化设置分页参数默认值</li>
<li>优化对空字符串参数处理的过滤</li>
<li>优化显示顺序orderNum类型为整型</li>
@ -568,8 +590,12 @@
<li>BLOB下载时清除URL对象引用</li>
<li>代码生成导入表按创建时间排序</li>
<li>修复代码生成页面数据编辑保存之后总是跳转第一页的问题</li>
<li>修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题</li>
<li>多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复</li>
<li>
修复带safari浏览器无法格式化utc日期格式yyyy-MM-dd'T'HH:mm:ss.SSS问题
</li>
<li>
多图上传组件移除多余的api地址&验证失败导致图片删除问题&无法删除相应图片修复
</li>
<li>其他细节优化</li>
</ol>
</el-collapse-item>
@ -614,7 +640,9 @@
</el-collapse-item>
<el-collapse-item title="v3.5.0 - 2021-05-25">
<ol>
<li>新增菜单导航显示风格TopNavfalse为左侧导航菜单true为顶部导航菜单</li>
<li>
新增菜单导航显示风格TopNavfalse为左侧导航菜单true为顶部导航菜单
</li>
<li>布局设置支持保存&重置配置</li>
<li>修复树表数据显示不全&加载慢问题</li>
<li>新增IE浏览器版本过低提示页面</li>
@ -633,7 +661,9 @@
<li>升级druid到最新版本v1.2.6</li>
<li>升级mybatis到最新版3.5.6 阻止远程代码执行漏洞</li>
<li>升级oshi到最新版本v5.6.0</li>
<li>velocity剔除commons-collections版本防止3.2.1版本的反序列化漏洞</li>
<li>
velocity剔除commons-collections版本防止3.2.1版本的反序列化漏洞
</li>
<li>数据监控页默认账户密码防止越权访问</li>
<li>修复firefox下表单构建拖拽会新打卡一个选项卡</li>
<li>修正后端导入表权限标识</li>
@ -1010,11 +1040,7 @@
<span>捐赠支持</span>
</div>
<div class="body">
<img
src="@/assets/images/pay.png"
alt="donate"
width="100%"
/>
<img src="@/assets/images/pay.png" alt="donate" width="100%" />
<span style="display: inline-block; height: 30px; line-height: 30px"
>你可以请作者喝杯咖啡表示鼓励</span
>
@ -1031,14 +1057,14 @@ export default {
data() {
return {
//
version: "3.8.9"
version: "3.8.9",
};
},
methods: {
goTarget(href) {
window.open(href, "_blank");
}
}
},
},
};
</script>
@ -1105,4 +1131,3 @@ export default {
}
}
</style>

112
acupuncture-ui/src/views/login.vue

@ -1,7 +1,12 @@
<template>
<div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">若依后台管理系统</h3>
<el-form
ref="loginForm"
:model="loginForm"
:rules="loginRules"
class="login-form"
>
<h3 class="title">针灸后台管理系统</h3>
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
@ -9,7 +14,11 @@
auto-complete="off"
placeholder="账号"
>
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
<svg-icon
slot="prefix"
icon-class="user"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item prop="password">
@ -20,7 +29,11 @@
placeholder="密码"
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
<svg-icon
slot="prefix"
icon-class="password"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item prop="code" v-if="captchaEnabled">
@ -31,32 +44,42 @@
style="width: 63%"
@keyup.enter.native="handleLogin"
>
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
<svg-icon
slot="prefix"
icon-class="validCode"
class="el-input__icon input-icon"
/>
</el-input>
<div class="login-code">
<img :src="codeUrl" @click="getCode" class="login-code-img"/>
<img :src="codeUrl" @click="getCode" class="login-code-img" />
</div>
</el-form-item>
<el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
<el-form-item style="width:100%;">
<el-checkbox
v-model="loginForm.rememberMe"
style="margin: 0px 0px 25px 0px"
>记住密码</el-checkbox
>
<el-form-item style="width: 100%">
<el-button
:loading="loading"
size="medium"
type="primary"
style="width:100%;"
style="width: 100%"
@click.native.prevent="handleLogin"
>
<span v-if="!loading"> </span>
<span v-else> 中...</span>
</el-button>
<div style="float: right;" v-if="register">
<router-link class="link-type" :to="'/register'">立即注册</router-link>
<div style="float: right" v-if="register">
<router-link class="link-type" :to="'/register'"
>立即注册</router-link
>
</div>
</el-form-item>
</el-form>
<!-- 底部 -->
<div class="el-login-footer">
<span>Copyright © 2018-2025 acupuncture.vip All Rights Reserved.</span>
<span>Copyright © 2018-2025 ruoyi.vip All Rights Reserved.</span>
</div>
</div>
</template>
@ -64,7 +87,7 @@
<script>
import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'
import { encrypt, decrypt } from "@/utils/jsencrypt";
export default {
name: "Login",
@ -76,32 +99,32 @@ export default {
password: "admin123",
rememberMe: false,
code: "",
uuid: ""
uuid: "",
},
loginRules: {
username: [
{ required: true, trigger: "blur", message: "请输入您的账号" }
{ required: true, trigger: "blur", message: "请输入您的账号" },
],
password: [
{ required: true, trigger: "blur", message: "请输入您的密码" }
{ required: true, trigger: "blur", message: "请输入您的密码" },
],
code: [{ required: true, trigger: "change", message: "请输入验证码" }]
code: [{ required: true, trigger: "change", message: "请输入验证码" }],
},
loading: false,
//
captchaEnabled: true,
//
register: false,
redirect: undefined
redirect: undefined,
};
},
watch: {
$route: {
handler: function(route) {
handler: function (route) {
this.redirect = route.query && route.query.redirect;
},
immediate: true
}
immediate: true,
},
},
created() {
this.getCode();
@ -109,8 +132,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.loginForm.uuid = res.uuid;
@ -120,38 +144,46 @@ export default {
getCookie() {
const username = Cookies.get("username");
const password = Cookies.get("password");
const rememberMe = Cookies.get('rememberMe')
const rememberMe = Cookies.get("rememberMe");
this.loginForm = {
username: username === undefined ? this.loginForm.username : username,
password: password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
password:
password === undefined ? this.loginForm.password : decrypt(password),
rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
};
},
handleLogin() {
this.$refs.loginForm.validate(valid => {
this.$refs.loginForm.validate((valid) => {
if (valid) {
this.loading = true;
if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
Cookies.set("password", encrypt(this.loginForm.password), {
expires: 30,
});
Cookies.set("rememberMe", this.loginForm.rememberMe, {
expires: 30,
});
} else {
Cookies.remove("username");
Cookies.remove("password");
Cookies.remove('rememberMe');
Cookies.remove("rememberMe");
}
this.$store.dispatch("Login", this.loginForm).then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
}).catch(() => {
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}
});
this.$store
.dispatch("Login", this.loginForm)
.then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(() => {});
})
.catch(() => {
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}
});
}
});
}
}
},
},
};
</script>

2
acupuncture-ui/src/views/monitor/job/index.vue

@ -179,7 +179,7 @@
<el-tooltip placement="top">
<div slot="content">
Bean调用示例ryTask.ryParams('ry')
<br />Class类调用示例com.acupuncture.quartz.task.RyTask.ryParams('ry')
<br />Class类调用示例com.ruoyi.quartz.task.RyTask.ryParams('ry')
<br />参数说明支持字符串布尔类型长整型浮点型整型
</div>
<i class="el-icon-question"></i>

594
acupuncture-ui/src/views/patientFile/index.vue

@ -0,0 +1,594 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="" prop="noticeTitle">
<el-input
v-model="queryParams.noticeTitle"
placeholder="支持姓名、全拼、简拼、手机号吗、证件号码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="年龄范围" prop="createBy">
<div class="form-item-age">
<el-input
v-model="queryParams.createBy"
placeholder="最小年龄"
clearable
@keyup.enter.native="handleQuery"
/>
<span></span>
<el-input
v-model="queryParams.createBy"
placeholder="最大年龄"
clearable
@keyup.enter.native="handleQuery"
/>
</div>
</el-form-item>
<el-form-item label="建档组织" prop="noticeType">
<el-select
v-model="queryParams.noticeType"
placeholder="公告类型"
clearable
>
<el-option label="dict.label" value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="数据来源" prop="noticeType">
<el-select
v-model="queryParams.noticeType"
placeholder="请选择"
clearable
>
<el-option label="筛查" :value="0" />
<el-option label="录入" :value="1" />
<el-option label="HIS" :value="2" />
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['patientFile:add']"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['patientFile:remove']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-bottom"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['patientFile:download']"
>下载模版</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['patientFile:import']"
>导入</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['patientFile:export']"
>导出</el-button
>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="listDat"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" width="100" />
<el-table-column
label="性别"
align="center"
prop="gender"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope">
</template>
</el-table-column>
<el-table-column
label="出生日期"
align="center"
prop="birthDate"
show-overflow-tooltip
/>
<el-table-column
label="民族"
align="center"
prop="ethnicity"
show-overflow-tooltip
/>
<el-table-column
label="受教育年限"
align="center"
prop="educationYears"
show-overflow-tooltip
/>
<el-table-column
label="手机号码"
align="center"
prop="phone"
show-overflow-tooltip
/>
<el-table-column
label="证件类型"
align="center"
prop="idCardType"
show-overflow-tooltip
/>
<el-table-column
label="证件号码"
align="center"
prop="idCard"
show-overflow-tooltip
/>
<el-table-column label="建档日期" align="center" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
label="建档人"
align="center"
prop="createBy"
show-overflow-tooltip
/>
<el-table-column
label="建档组织(医院名称)"
align="center"
prop="organization"
show-overflow-tooltip
/>
<el-table-column
label="来源"
align="center"
prop="source"
show-overflow-tooltip
/>
<el-table-column
fixed="right"
label="操作"
align="center"
class-name="small-padding fixed-width"
width="150"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['patientFile:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['patientFile:remove']"
>删除</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-tickets"
@click="handleDelete(scope.row)"
v-hasPermi="['patientFile:details']"
>详情</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-notebook-2"
@click="handleDelete(scope.row)"
v-hasPermi="['patientFile:archives']"
>诊疗档案</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入" />
</el-form-item>
<el-form-item label="性别" prop="gender">
<el-radio-group v-model="form.gender">
<el-radio :label="0"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="form.phone" placeholder="请输入" />
</el-form-item>
<el-form-item label="出生年月" prop="birthDate">
<el-input v-model="form.birthDate" placeholder="请输入" />
</el-form-item>
<el-form-item label="民族" prop="ethnicity">
<el-input v-model="form.ethnicity" placeholder="请输入" />
</el-form-item>
<el-form-item label="证件类型" prop="idCardType">
<el-select v-model="form.idCardType" placeholder="请选择">
<el-option label="身份证" :value="0"> </el-option>
<el-option label="身份证" :value="1"> </el-option>
<el-option label="身份证" :value="2"> </el-option>
<el-option label="身份证" :value="3"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="证件号码" prop="idCard">
<el-input v-model="form.idCard" placeholder="请输入" />
</el-form-item>
<el-form-item label="现病史" prop="currentIllnessHistory">
<el-checkbox-group v-model="form.currentIllnessHistory">
<el-checkbox v-for="(item, index) in medicalHistory" :label="item">
<!-- <el-input
v-if="item == '其他'"
:disabled="!form.checkList.includes('其他')"
v-model="form.noticeTitle"
placeholder="请输入"
/> -->
</el-checkbox>
</el-checkbox-group>
<el-input v-model="form.qt" placeholder="其他" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 导入患者信息 -->
<el-dialog
title="导入患者档案"
:visible.sync="importOpen"
width="640px"
append-to-body
>
<el-form ref="form" :model="importform">
<el-form-item prop="accessUrl">
<el-upload
:limit="1"
class="avatar-uploader wj-uploader"
:headers="headers"
:action="uploadFileUrl1"
accept=".zip"
:before-upload="handleBeforePdfUpload1"
:on-success="handleUploadPdfAdd1"
:file-list="fileList"
:show-file-list="true"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { getToken } from "@/utils/auth";
import {
listNotice,
getNotice,
delNotice,
addNotice,
updateNotice,
} from "@/api/system/notice";
import { queryPatient } from "@/api/patientFile";
export default {
name: "Notice",
dicts: ["sys_notice_status", "sys_notice_type"],
data() {
return {
headers: {
Authorization: "Bearer " + getToken(),
deptId: localStorage.getItem("hospitalId"),
},
uploadFileUrl1: process.env.VUE_APP_BASE_API + "/pms/importTjbgZip", //
fileList: [],
medicalHistory: [
"高血压",
"脑血管病",
"恶性肿瘤",
"冠心病",
"精神疾病",
"胃和十二指肠溃疡",
"肥胖症",
"骨质疏松症",
"遗传性、先天性疾病",
"糖尿病",
"慢性肺系疾病",
"高脂血症",
"肝脏疾病(脂肪肝、乙型肝炎、肝硬化等)",
"过敏性疾病",
"关节炎",
"痛风",
"肾炎、肾病",
"高脂血症",
],
loading: false, //
ids: [], //
single: true, //
multiple: true, //
showSearch: true, //
total: 0, //
listDat: [{}], //
title: "", //
open: false, //
importOpen: true, //
//
queryParams: {
pageNum: 1,
pageSize: 10,
param: {
keywords: "", //
startAge: "", //
endAge: "", //
tenantId: "", //
createBy: "", //
sourceId: "", //
},
},
importform: {},
//
form: {
name: "",
gender: 0,
birthDate: "",
ethnicity: "",
educationYears: "",
phone: "",
idCardType: "",
idCard: "",
currentIllnessHistory: [],
},
//
rules: {
noticeTitle: [
{ required: true, message: "公告标题不能为空", trigger: "blur" },
],
noticeType: [
{ required: true, message: "公告类型不能为空", trigger: "change" },
],
},
};
},
created() {
// this.getList();
},
methods: {
// - pdg
handleUploadPdfAdd1(res) {
if (res.code == 200) {
this.physicaOpen = false;
this.getList();
this.$modal.msgSuccess("导入成功");
} else {
this.$message.error(res.msg || "导入失败");
this.fileList = [];
}
},
// -
handleBeforeUpload1(file) {
const isLt2M = file.size / 1024 / 1024 < 100;
//
if (!isLt2M) {
this.$message.error("上传文件大小不能超过 100MB!");
}
return isLt2M;
},
// -
handleBeforePdfUpload1(file) {
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
const whiteList = ["zip"];
if (whiteList.indexOf(fileSuffix) === -1) {
this.$message.error("上传文件只能是 zip");
return false;
}
},
/** 查询公告列表 */
getList() {
this.loading = true;
queryPatient(this.queryParams).then((response) => {
this.listDat = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
name: "",
gender: 0,
birthDate: "",
ethnicity: "",
educationYears: "",
phone: "",
idCardType: "",
idCard: "",
currentIllnessHistory: [],
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.noticeId);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加公告";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const noticeId = row.noticeId || this.ids;
getNotice(noticeId).then((response) => {
this.form = response.data;
this.open = true;
this.title = "修改公告";
});
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.noticeId != undefined) {
updateNotice(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addNotice(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const noticeIds = row.noticeId || this.ids;
this.$modal
.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?')
.then(function () {
return delNotice(noticeIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
this.download(
"system/user/export",
{
...this.queryParams,
},
`user_${new Date().getTime()}.xlsx`
);
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "用户导入";
this.upload.open = true;
},
},
};
</script>
<style scoped>
.form-item-age {
display: flex;
align-items: center;
}
.form-item-age span {
margin: 0 10px;
}
.form-item-age >>> .el-input {
width: 90px;
}
</style>

131
acupuncture-ui/src/views/register.vue

@ -1,10 +1,24 @@
<template>
<div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">若依后台管理系统</h3>
<el-form
ref="registerForm"
:model="registerForm"
:rules="registerRules"
class="register-form"
>
<h3 class="title">针灸后台管理系统</h3>
<el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
<el-input
v-model="registerForm.username"
type="text"
auto-complete="off"
placeholder="账号"
>
<svg-icon
slot="prefix"
icon-class="user"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item prop="password">
@ -15,7 +29,11 @@
placeholder="密码"
@keyup.enter.native="handleRegister"
>
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
<svg-icon
slot="prefix"
icon-class="password"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item prop="confirmPassword">
@ -26,7 +44,11 @@
placeholder="确认密码"
@keyup.enter.native="handleRegister"
>
<svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
<svg-icon
slot="prefix"
icon-class="password"
class="el-input__icon input-icon"
/>
</el-input>
</el-form-item>
<el-form-item prop="code" v-if="captchaEnabled">
@ -37,31 +59,37 @@
style="width: 63%"
@keyup.enter.native="handleRegister"
>
<svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
<svg-icon
slot="prefix"
icon-class="validCode"
class="el-input__icon input-icon"
/>
</el-input>
<div class="register-code">
<img :src="codeUrl" @click="getCode" class="register-code-img"/>
<img :src="codeUrl" @click="getCode" class="register-code-img" />
</div>
</el-form-item>
<el-form-item style="width:100%;">
<el-form-item style="width: 100%">
<el-button
:loading="loading"
size="medium"
type="primary"
style="width:100%;"
style="width: 100%"
@click.native.prevent="handleRegister"
>
<span v-if="!loading"> </span>
<span v-else> 中...</span>
</el-button>
<div style="float: right;">
<router-link class="link-type" :to="'/login'">使用已有账户登录</router-link>
<div style="float: right">
<router-link class="link-type" :to="'/login'"
>使用已有账户登录</router-link
>
</div>
</el-form-item>
</el-form>
<!-- 底部 -->
<div class="el-register-footer">
<span>Copyright © 2018-2025 acupuncture.vip All Rights Reserved.</span>
<span>Copyright © 2018-2025 ruoyi.vip All Rights Reserved.</span>
</div>
</div>
</template>
@ -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("<font color='red'>恭喜你,您的账号 " + username + " 注册成功!</font>", '系统提示', {
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(
"<font color='red'>恭喜你,您的账号 " +
username +
" 注册成功!</font>",
"系统提示",
{
dangerouslyUseHTMLString: true,
type: "success",
}
)
.then(() => {
this.$router.push("/login");
})
.catch(() => {});
})
.catch(() => {
this.loading = false;
if (this.captchaEnabled) {
this.getCode();
}
});
}
});
}
}
},
},
};
</script>

2
acupuncture-ui/src/views/system/user/index.vue

@ -550,4 +550,4 @@ export default {
}
}
};
</script>
</script>

2
acupuncture-ui/src/views/tool/gen/genInfoForm.vue

@ -24,7 +24,7 @@
<el-form-item prop="packageName">
<span slot="label">
生成包路径
<el-tooltip content="生成在哪个java包下,例如 com.acupuncture.system" placement="top">
<el-tooltip content="生成在哪个java包下,例如 com.ruoyi.system" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>

2
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");
}
},
/** 同步数据库操作 */

153
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");
});
},
};

Loading…
Cancel
Save