zzc 1 week ago
parent
commit
45cb6e55a1
  1. 117
      acupuncture-前台/src/App.vue
  2. 15
      acupuncture-前台/src/api/medicalFile.js
  3. 1
      acupuncture-前台/src/store/getters.js
  4. 134
      acupuncture-前台/src/store/modules/user.js
  5. 259
      acupuncture-前台/src/views/medicalFile/index.vue
  6. 2
      acupuncture-前台/src/views/patientFile/index.vue
  7. BIN
      acupuncture-前台/南宁针灸前台ssl-4.zip
  8. BIN
      acupuncture-前台/针灸前台clientssl-2.zip
  9. 8
      acupuncture-后台/src/api/medicalFile.js
  10. 52
      acupuncture-后台/src/api/monitor/cache.js
  11. 8
      acupuncture-后台/src/api/report.js
  12. 2
      acupuncture-后台/src/views/followFile/work.vue
  13. 523
      acupuncture-后台/src/views/medicalFile/index.vue
  14. 103
      acupuncture-后台/src/views/monitor/cache/list.vue
  15. 5
      acupuncture-后台/src/views/monitor/online/index.vue
  16. 25
      acupuncture-后台/src/views/monitor/server/index.vue
  17. 28
      acupuncture-后台/src/views/patientFile/index.vue
  18. 399
      acupuncture-后台/src/views/report/manage.vue
  19. 309
      acupuncture-后台/src/views/report/type.vue
  20. 256
      acupuncture-后台/src/views/system/dict/data.vue
  21. 2
      acupuncture-后台/src/views/system/dict/index.vue
  22. 30
      acupuncture-后台/src/views/system/menu/index.vue
  23. 218
      acupuncture-后台/src/views/system/notice/index.vue
  24. 334
      acupuncture-后台/src/views/system/role/index.vue
  25. BIN
      acupuncture-后台/南宁针灸后台ssl-4.zip

117
acupuncture-前台/src/App.vue

@ -2,15 +2,130 @@
<div id="app"> <div id="app">
<router-view /> <router-view />
<theme-picker /> <theme-picker />
<el-dialog
:close-on-click-modal="false"
:close-on-press-escape="false"
title="修改密码"
:visible.sync="passShow"
width="620px"
append-to-body
class="popup"
:show-close="false"
>
<el-form ref="form" :model="user" :rules="rules" label-width="80px">
<el-form-item label="旧密码" prop="oldPassword">
<el-input
v-model="user.oldPassword"
placeholder="请输入旧密码"
type="password"
show-password
/>
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input
v-model="user.newPassword"
placeholder="请输入新密码"
type="password"
show-password
/>
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input
v-model="user.confirmPassword"
placeholder="请确认新密码"
type="password"
show-password
/>
</el-form-item>
<el-form-item label=" " style="margin-bottom: 0px">
<template slot-scope="scope">
<el-button type="primary" @click="submit" size="mini"
> </el-button
>
</template>
</el-form-item>
</el-form>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { updateUserPwd } from "@/api/system/user";
import ThemePicker from "@/components/ThemePicker"; import ThemePicker from "@/components/ThemePicker";
import { mapState, mapMutations } from "vuex";
export default { export default {
name: "App", name: "App",
components: { ThemePicker }, components: { ThemePicker },
data() {
const equalToPassword = (rule, value, callback) => {
if (this.user.newPassword !== value) {
callback(new Error("两次输入的密码不一致"));
} else {
callback();
}
};
return {
passShow: false,
user: {
oldPassword: undefined,
newPassword: undefined,
confirmPassword: undefined,
},
rules: {
oldPassword: [
{ required: true, message: "旧密码不能为空", trigger: "blur" },
],
newPassword: [
{ required: true, message: "密码不能为空", trigger: "blur" },
{
pattern: /^(?=.*\d)(?=.*[a-zA-Z])(?=.*[^\da-zA-Z\s]).{8,20}$/,
message: "必须包含数字、字母、特殊字符, 长度为8到20位",
trigger: "blur",
},
],
confirmPassword: [
{ required: true, message: "确认密码不能为空", trigger: "blur" },
{ required: true, validator: equalToPassword, trigger: "blur" },
],
},
userInfo: {},
};
},
computed: {
...mapState({
forceUpdPwdFlag: (state) => state.user.forceUpdPwdFlag,
}),
},
watch: {
// storeforceUpdPwdFlag
forceUpdPwdFlag(new1, old) {
if (new1) {
this.passShow = true;
}
},
},
created() {},
methods: {
submit() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
const res = await updateUserPwd(
this.user.oldPassword,
this.user.newPassword
);
const { code, msg } = res;
if (code === 200) {
this.passShow = false;
this.$message.success("修改成功");
// const res = await getInfo();
} else {
this.$message.warning(msg);
}
}
});
},
},
metaInfo() { metaInfo() {
return { return {
title: title:

15
acupuncture-前台/src/api/medicalFile.js

@ -32,6 +32,21 @@ export function treatmentDel(data) {
data: data, data: data,
}); });
} }
// 查询上报管理
export function managerMy(data) {
return request({
url: "/report/queryManagerMy",
method: "post",
data: data,
});
}
export function reportList(data) {
return request({
url: "/report/list",
method: "post",
data: data,
});
}
// 档案详情 // 档案详情
export function queryRecord(data) { export function queryRecord(data) {
return request({ return request({

1
acupuncture-前台/src/store/getters.js

@ -15,5 +15,6 @@ const getters = {
topbarRouters:state => state.permission.topbarRouters, topbarRouters:state => state.permission.topbarRouters,
defaultRoutes:state => state.permission.defaultRoutes, defaultRoutes:state => state.permission.defaultRoutes,
sidebarRouters:state => state.permission.sidebarRouters, sidebarRouters:state => state.permission.sidebarRouters,
forceUpdPwdFlag: state => state.user.forceUpdPwdFlag,
} }
export default getters export default getters

134
acupuncture-前台/src/store/modules/user.js

@ -1,107 +1,121 @@
import { login, logout, getInfo } from '@/api/login' import { login, logout, getInfo } from "@/api/login";
import { getToken, setToken, removeToken } from '@/utils/auth' import { getToken, setToken, removeToken } from "@/utils/auth";
import { isHttp, isEmpty } from "@/utils/validate" import { isHttp, isEmpty } from "@/utils/validate";
import defAva from '@/assets/images/profile.jpg' import defAva from "@/assets/images/profile.jpg";
const user = { const user = {
state: { state: {
token: getToken(), token: getToken(),
id: '', id: "",
name: '', name: "",
avatar: '', avatar: "",
roles: [], roles: [],
permissions: [] permissions: [],
forceUpdPwdFlag: 0,
}, },
mutations: { mutations: {
SET_TOKEN: (state, token) => { SET_TOKEN: (state, token) => {
state.token = token state.token = token;
}, },
SET_ID: (state, id) => { SET_ID: (state, id) => {
state.id = id state.id = id;
}, },
SET_NAME: (state, name) => { SET_NAME: (state, name) => {
state.name = name state.name = name;
}, },
SET_AVATAR: (state, avatar) => { SET_AVATAR: (state, avatar) => {
state.avatar = avatar state.avatar = avatar;
}, },
SET_ROLES: (state, roles) => { SET_ROLES: (state, roles) => {
state.roles = roles state.roles = roles;
}, },
SET_PERMISSIONS: (state, permissions) => { SET_PERMISSIONS: (state, permissions) => {
state.permissions = permissions state.permissions = permissions;
} },
SET_PWDFLAG: (state, data) => {
state.forceUpdPwdFlag = data;
},
}, },
actions: { actions: {
// 登录 // 登录
Login({ commit }, userInfo) { Login({ commit }, userInfo) {
const username = userInfo.username.trim() const username = userInfo.username.trim();
const password = userInfo.password const password = userInfo.password;
const code = userInfo.code const code = userInfo.code;
const uuid = userInfo.uuid const uuid = userInfo.uuid;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login(username, password, code, uuid).then(res => { login(username, password, code, uuid)
setToken(res.token) .then((res) => {
commit('SET_TOKEN', res.token) setToken(res.token);
resolve() commit("SET_TOKEN", res.token);
}).catch(error => { resolve();
reject(error)
})
}) })
.catch((error) => {
reject(error);
});
});
}, },
// 获取用户信息 // 获取用户信息
GetInfo({ commit, state }) { GetInfo({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getInfo().then(res => { getInfo()
const user = res.user .then((res) => {
localStorage.setItem("user", JSON.stringify(user)) const user = res.user;
let avatar = user.avatar || "" commit("SET_PWDFLAG", res.forceUpdPwdFlag);
localStorage.setItem("user", JSON.stringify(user));
let avatar = user.avatar || "";
if (!isHttp(avatar)) { if (!isHttp(avatar)) {
avatar = (isEmpty(avatar)) ? defAva : process.env.VUE_APP_BASE_API + avatar avatar = isEmpty(avatar)
? defAva
: process.env.VUE_APP_BASE_API + avatar;
} }
if (res.roles && res.roles.length > 0) { // 验证返回的roles是否是一个非空数组 if (res.roles && res.roles.length > 0) {
commit('SET_ROLES', res.roles) // 验证返回的roles是否是一个非空数组
commit('SET_PERMISSIONS', res.permissions) commit("SET_ROLES", res.roles);
commit("SET_PERMISSIONS", res.permissions);
} else { } else {
commit('SET_ROLES', ['ROLE_DEFAULT']) commit("SET_ROLES", ["ROLE_DEFAULT"]);
} }
commit('SET_ID', user.userId) commit("SET_ID", user.userId);
commit('SET_NAME', user.userName) commit("SET_NAME", user.userName);
commit('SET_AVATAR', avatar) commit("SET_AVATAR", avatar);
resolve(res) resolve(res);
}).catch(error => {
reject(error)
})
}) })
.catch((error) => {
reject(error);
});
});
}, },
// 退出系统 // 退出系统
LogOut({ commit, state }) { LogOut({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout(state.token).then(() => { logout(state.token)
commit('SET_TOKEN', '') .then(() => {
commit('SET_ROLES', []) commit("SET_TOKEN", "");
commit('SET_PERMISSIONS', []) commit("SET_ROLES", []);
removeToken() commit("SET_PERMISSIONS", []);
resolve() removeToken();
}).catch(error => { resolve();
reject(error)
})
}) })
.catch((error) => {
reject(error);
});
});
}, },
// 前端 登出 // 前端 登出
FedLogOut({ commit }) { FedLogOut({ commit }) {
return new Promise(resolve => { return new Promise((resolve) => {
commit('SET_TOKEN', '') commit("SET_TOKEN", "");
removeToken() removeToken();
resolve() resolve();
}) });
} },
} },
} };
export default user export default user;

259
acupuncture-前台/src/views/medicalFile/index.vue

@ -6,7 +6,6 @@
size="small" size="small"
:inline="true" :inline="true"
v-show="showSearch" v-show="showSearch"
label-width="80px"
> >
<el-form-item label="" prop="noticeTitle"> <el-form-item label="" prop="noticeTitle">
<el-input <el-input
@ -48,14 +47,6 @@
<el-option label="女" :value="1" /> <el-option label="女" :value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item label="手机号码" prop="phone">
<el-input v-model="queryParams.param.phone" placeholder="请输入" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="证件号码" prop="idCard">
<el-input v-model="queryParams.param.idCard" placeholder="请输入" clearable
@keyup.enter.native="handleQuery" />
</el-form-item> -->
<el-form-item label="年龄范围" prop="createBy"> <el-form-item label="年龄范围" prop="createBy">
<div class="form-item-age"> <div class="form-item-age">
<el-input <el-input
@ -93,6 +84,49 @@
<el-option label="驳回" :value="3" /> <el-option label="驳回" :value="3" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="诊疗日期" prop="time">
<el-date-picker
v-model="time"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<!-- <el-form-item label="上报标题" prop="managementId">
<el-select
v-model="queryParams.param.managementId"
placeholder="请选择"
filterable
clearable
>
<el-option
v-for="item in managerList"
:key="item.id"
:label="item.reportTitle"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item> -->
<el-form-item label="填报类型" prop="reportTypeId">
<el-select
v-model="queryParams.param.reportTypeId"
placeholder="请选择"
filterable
clearable
>
<el-option
v-for="item in reporTypeList"
:key="item.id"
:label="item.typeName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
type="primary" type="primary"
@ -116,7 +150,7 @@
icon="el-icon-plus" icon="el-icon-plus"
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
>新增</el-button >新增病历直报</el-button
> >
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
@ -318,6 +352,18 @@
show-overflow-tooltip show-overflow-tooltip
min-width="180" min-width="180"
/> />
<el-table-column
label="诊疗日期"
align="center"
show-overflow-tooltip
min-width="140"
>
<template slot-scope="scope">
<span>
{{ parseTime(scope.row.visitTime, "{y}-{m}-{d}") }}
</span>
</template>
</el-table-column>
<el-table-column <el-table-column
label="门诊时间/住院时间" label="门诊时间/住院时间"
align="center" align="center"
@ -343,7 +389,14 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="上报标题"
align="center"
prop="reportTitle"
show-overflow-tooltip
min-width="150"
>
</el-table-column>
<el-table-column <el-table-column
label="建档人" label="建档人"
align="center" align="center"
@ -471,9 +524,20 @@
ref="form" ref="form"
:model="form" :model="form"
:rules="rules" :rules="rules"
label-width="140px" label-width="100px"
class="formStep" class="formStep"
> >
<el-form-item label="上报标题" prop="managementId">
<el-select v-model="form.managementId" placeholder="请选择">
<el-option
v-for="item in managerList"
:key="item.id"
:label="item.reportTitle"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名" prop="name"> <el-form-item label="姓名" prop="name">
<el-input v-model="form.name" placeholder="请输入" /> <el-input v-model="form.name" placeholder="请输入" />
</el-form-item> </el-form-item>
@ -578,18 +642,6 @@
<el-form-item label="责任医生" prop=""> <el-form-item label="责任医生" prop="">
<el-input v-model="form.doctor" placeholder="请输入" /> <el-input v-model="form.doctor" placeholder="请输入" />
</el-form-item> </el-form-item>
<!-- <el-form-item label="随访队列" prop="queueIdList">
<el-select v-model="form.queueIdList" multiple placeholder="请选择">
<el-option
v-for="item in followupList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item> -->
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -644,6 +696,8 @@ import {
saveAidRecord, saveAidRecord,
queueAdd, queueAdd,
exportTreatmentPg, exportTreatmentPg,
managerMy,
reportList,
} from "@/api/medicalFile"; } from "@/api/medicalFile";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import { followupQuery } from "@/api/followupFile"; import { followupQuery } from "@/api/followupFile";
@ -652,8 +706,9 @@ export default {
dicts: ["sys_normal_disable", "sys_user_sex"], dicts: ["sys_normal_disable", "sys_user_sex"],
data() { data() {
return { return {
time: [],
reportPath: "", reportPath: "",
managerList: [], //
timestamp: "", timestamp: "",
qzUrl: process.env.VUE_APP_API_QZURL, // qzUrl: process.env.VUE_APP_API_QZURL, //
userInfo: {}, userInfo: {},
@ -830,52 +885,6 @@ export default {
importform: {}, importform: {},
form: {}, form: {},
detailsForm: {
JBXX_ZYZD: [], //
JBXX_ZYZD_QT: "", //_
PG_RTCF_TZ: "", //
PG_RTCF_QZTZ: "", //
PG_RTCF_JRL: "", //
PG_RTCF_TBW: "", //TBW
PG_RTCF_DBZ: "", //
PG_RTCF_GZ: "", //GZ
G_RTCF_ZF: "", //
PG_RTCF_PBF: "", //
PG_RTCF_GGJ: "", //
PG_RTCF_BMI: "", //BMI
PG_RTCF_WHR: "", //WHR
PG_RTCF_NZZFSP: "", //
PG_RTCF_STGCFBFB: "", //
PG_RTCF_TXLX: "", //
PG_RTCF_STNL: "", //
PG_RTCF_JKPF: "", //
PG_TZBS_ZYTZ: "", //
PG_TZBS_JJTZ: [], //
PG_TT_TAPS_DF: "", //TAPS
PG_TT_TRACE_DF: "", //TRACE
PG_TT_SRS22_DF: "", //SRS-22
"PG_SM_PHQ-9_DF": "", // PHQ-9
PG_SM_EPSW_DF: "", //Epworth
PG_SM_PSQI_DF: "", //PSQI
"PG_JL_HAMD-24_DF": "", //HAMD-24
PG_JL_SAS_DF: "", //SAS
ZLFA_ZLLX: "", //
ZLFA_XWXLGY: "", //
ZLFA_YDGY: "", //
ZLFA_ZJ_LF: "", //-
ZLFA_ZJ_XW: "", //-
ZLFA_YW: "", //
ZLFA_SHXG: "", //
ZLFA_XLTS: "", //
ZLFA_LCYYZL: "", //
ZLFA_ZJ_LF_SMZ: "", // --
ZLFA_ZJ_XW_SMZ: "", // --
ZLFA_YW_SMZ: "", // -
ZLFA_ZJ_LF_QT: "", // --
ZLFA_ZJ_XW_QT: "", // --
ZLFA_YW_QT: "", // -
}, //
// //
rules: { rules: {
name: [ name: [
@ -970,6 +979,7 @@ export default {
}, },
], ],
}, },
reporTypeList: [],
}; };
}, },
created() { created() {
@ -992,10 +1002,29 @@ export default {
this.open = true; this.open = true;
} }
this.getList(); this.getList();
this.getManagerMy();
this.getReportType();
this.userInfo = JSON.parse(localStorage.getItem("user")); this.userInfo = JSON.parse(localStorage.getItem("user"));
// this.getFollowupQuery(); // this.getFollowupQuery();
}, },
methods: { methods: {
//
getReportType() {
reportList({
pageNum: -1,
param: {},
}).then((res) => {
this.reporTypeList = res.data.list;
});
},
getManagerMy() {
managerMy({
pageNum: -1,
param: {},
}).then((res) => {
this.managerList = res.data.list;
});
},
// 访 // 访
getFollowupQuery() { getFollowupQuery() {
followupQuery({ followupQuery({
@ -1049,8 +1078,8 @@ export default {
getList() { getList() {
this.loading = true; this.loading = true;
treatmentQuery(this.queryParams).then((res) => { treatmentQuery(this.queryParams).then((res) => {
this.listDat = res.data.list; this.listDat = res.data.list || [];
this.total = res.data.total; this.total = res.data.total || 0;
this.loading = false; this.loading = false;
}); });
}, },
@ -1077,12 +1106,21 @@ export default {
doctor: "", doctor: "",
status: 0, status: 0,
queueIdList: [], queueIdList: [],
managementId: "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
// time + 00:00:00 + 23:59:59
if (this.time?.length > 0) {
this.queryParams.param.startTime = this.time[0] + " 00:00:00";
this.queryParams.param.endTime = this.time[1] + " 23:59:59";
} else {
this.queryParams.param.startTime = "";
this.queryParams.param.endTime = "";
}
this.getList(); this.getList();
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
@ -1098,7 +1136,10 @@ export default {
endAge: "", endAge: "",
doctor: "", doctor: "",
status: "", status: "",
managementId: "",
reportTypeId: "",
}; };
this.time = [];
this.handleQuery(); this.handleQuery();
}, },
// //
@ -1170,78 +1211,6 @@ export default {
row row
)}`, )}`,
}); });
// this.getDetailsForm() //
// this.form = JSON.parse(JSON.stringify(row));
// queryRecord({
// treatmentId: row.id
// }).then((res) => {
// let arrList = ["JBXX_ZYZD", "PG_RTCF_TXLX", "PG_TZBS_JJTZ"];
// let recordValDict = res.data.recordValDict;
// for (let key in recordValDict) {
// if (arrList.includes(key)) {
// recordValDict[key] = recordValDict[key][0].answer;
// } else {
// recordValDict[key] = recordValDict[key][0].answer.join(",");
// }
// }
// this.detailsForm = {
// ...this.detailsForm,
// ...recordValDict
// };
// console.log(" this.detailsForm", this.detailsForm);
// this.drawer = true;
// this.title = "";
// });
},
getDetailsForm() {
this.detailsForm = {
JBXX_ZYZD: [], //
JBXX_ZYZD_QT: "", //_
PG_RTCF_TZ: "", //
PG_RTCF_QZTZ: "", //
PG_RTCF_JRL: "", //
PG_RTCF_TBW: "", //TBW
PG_RTCF_DBZ: "", //
PG_RTCF_GZ: "", //GZ
G_RTCF_ZF: "", //
PG_RTCF_PBF: "", //
PG_RTCF_GGJ: "", //
PG_RTCF_BMI: "", //BMI
PG_RTCF_WHR: "", //WHR
PG_RTCF_NZZFSP: "", //
PG_RTCF_STGCFBFB: "", //
PG_RTCF_TXLX: "", //
PG_RTCF_STNL: "", //
PG_RTCF_JKPF: "", //
PG_TZBS_ZYTZ: "", //
PG_TZBS_JJTZ: [], //
PG_TT_TAPS_DF: "", //TAPS
PG_TT_TRACE_DF: "", //TRACE
PG_TT_SRS22_DF: "", //SRS-22
"PG_SM_PHQ-9_DF": "", // PHQ-9
PG_SM_EPSW_DF: "", //Epworth
PG_SM_PSQI_DF: "", //PSQI
"PG_JL_HAMD-24_DF": "", //HAMD-24
PG_JL_SAS_DF: "", //SAS
ZLFA_ZLLX: "", //
ZLFA_XWXLGY: "", //
ZLFA_YDGY: "", //
ZLFA_ZJ_LF: "", //-
ZLFA_ZJ_XW: "", //-
ZLFA_YW: "", //
ZLFA_SHXG: "", //
ZLFA_XLTS: "", //
ZLFA_LCYYZL: "", //
ZLFA_ZJ_LF_SMZ: "", // --
ZLFA_ZJ_XW_SMZ: "", // --
ZLFA_YW_SMZ: "", // -
ZLFA_ZJ_LF_QT: "", // --
ZLFA_ZJ_XW_QT: "", // --
ZLFA_YW_QT: "", // -
};
}, },
/** 诊疗档案 */ /** 诊疗档案 */
submitForm: function () { submitForm: function () {

2
acupuncture-前台/src/views/patientFile/index.vue

@ -321,7 +321,7 @@
type="text" type="text"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleArchivesAdd(scope.row)" @click="handleArchivesAdd(scope.row)"
>新增诊疗档案 >新增病历直报
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>

BIN
acupuncture-前台/南宁针灸前台ssl-添加不良反应、并发症1.zip → acupuncture-前台/南宁针灸前台ssl-4.zip

Binary file not shown.

BIN
acupuncture-前台/针灸前台clientssl-2.zip

Binary file not shown.

8
acupuncture-后台/src/api/medicalFile.js

@ -64,3 +64,11 @@ export function exportTreatmentPg(data) {
data: data, data: data,
}); });
} }
// 审核
export function treatmentAudit(data) {
return request({
url: "/admin/treatment/aduit",
method: "post",
data: data,
});
}

52
acupuncture-后台/src/api/monitor/cache.js

@ -1,57 +1,65 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询缓存详细 // 查询缓存详细
export function getCache() { export function getCache() {
return request({ return request({
url: '/monitor/cache', url: "/monitor/cache",
method: 'get' method: "get",
}) });
} }
// 查询缓存名称列表 // 查询缓存名称列表
export function listCacheName() { export function listCacheName() {
return request({ return request({
url: '/monitor/cache/getNames', url: "/monitor/cache/getNames",
method: 'get' method: "get",
}) });
} }
// 查询缓存键名列表 // 查询缓存键名列表
export function listCacheKey(cacheName) { export function listCacheKey(cacheName) {
return request({ return request({
url: '/monitor/cache/getKeys/' + cacheName, url: "/monitor/cache/getKeys/" + cacheName,
method: 'get' method: "get",
}) });
} }
// 查询缓存内容 // 查询缓存内容
export function getCacheValue(cacheName, cacheKey) { export function getCacheValue(cacheName, cacheKey) {
return request({ return request({
url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, url: "/monitor/cache/getValue/" + cacheName + "/" + cacheKey,
method: 'get' method: "get",
}) });
} }
// 清理指定名称缓存 // 清理指定名称缓存
export function clearCacheName(cacheName) { export function clearCacheName(cacheName) {
return request({ return request({
url: '/monitor/cache/clearCacheName/' + cacheName, url: "/monitor/cache/clearCacheName/" + cacheName,
method: 'delete' method: "delete",
}) });
} }
// 清理指定键名缓存 // 清理指定键名缓存
export function clearCacheKey(cacheKey) { export function clearCacheKey(cacheKey) {
return request({ return request({
url: '/monitor/cache/clearCacheKey/' + cacheKey, url: "/monitor/cache/clearCacheKey/" + cacheKey,
method: 'delete' method: "delete",
}) });
} }
// 清理全部缓存 // 清理全部缓存
export function clearCacheAll() { export function clearCacheAll() {
return request({ return request({
url: '/monitor/cache/clearCacheAll', url: "/monitor/cache/clearCacheAll",
method: 'delete' method: "delete",
}) });
}
// 新增修改
export function cacheAdd(query) {
return request({
url: "/monitor/cache/add",
method: "get",
params: query,
});
} }

8
acupuncture-后台/src/api/report.js

@ -62,3 +62,11 @@ export function managerDel(data) {
data: data, data: data,
}); });
} }
// 下载上报汇总表
export function reportDown(data) {
return request({
url: "/admin/treatment/adminExportTreatmentPgZip",
method: "post",
data: data,
});
}

2
acupuncture-后台/src/views/followFile/work.vue

@ -530,7 +530,7 @@ export default {
created() { created() {
let { name, phone } = this.$route.query; let { name, phone } = this.$route.query;
this.queryParams.param.keywords = name || ""; this.queryParams.param.keywords = name || "";
this.queryParams.param.phone = phone || ""; this.queryParams.param.phone = phone !== 'null' ? phone : "";
this.getList(); this.getList();
this.getTenantsList(); // this.getTenantsList(); //
}, },

523
acupuncture-后台/src/views/medicalFile/index.vue

@ -6,7 +6,6 @@
size="small" size="small"
:inline="true" :inline="true"
v-show="showSearch" v-show="showSearch"
label-width="80px"
> >
<el-form-item label="" prop="noticeTitle"> <el-form-item label="" prop="noticeTitle">
<el-input <el-input
@ -93,7 +92,23 @@
<el-option label="驳回" :value="3" /> <el-option label="驳回" :value="3" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="建档组织" prop="tenantId"> <el-form-item label="上报标题" prop="managementId">
<el-select
v-model="queryParams.param.managementId"
placeholder="请选择"
filterable
clearable
>
<el-option
v-for="item in managerList"
:key="item.id"
:label="item.reportTitle"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="上报单位" prop="tenantId">
<el-select <el-select
v-model="queryParams.param.tenantId" v-model="queryParams.param.tenantId"
placeholder="请选择" placeholder="请选择"
@ -108,6 +123,17 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="门诊/住院时间" prop="time">
<el-date-picker
v-model="time"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button
type="primary" type="primary"
@ -359,9 +385,16 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="建档人" label="上报标题"
align="center"
prop="reportTitle"
show-overflow-tooltip
min-width="150"
>
</el-table-column>
<el-table-column
label="上报人"
align="center" align="center"
prop="createBy" prop="createBy"
show-overflow-tooltip show-overflow-tooltip
@ -369,7 +402,7 @@
/> />
<el-table-column <el-table-column
prop="tenantName" prop="tenantName"
label="建档组织" label="上报单位"
align="center" align="center"
show-overflow-tooltip show-overflow-tooltip
min-width="150" min-width="150"
@ -400,7 +433,7 @@
label="操作" label="操作"
align="center" align="center"
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
width="300" width="250"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!-- <el-button <!-- <el-button
@ -456,7 +489,7 @@
提交审核 提交审核
</el-button> --> </el-button> -->
<!-- 审核 --> <!-- 审核 -->
<!-- <el-button <el-button
:disabled="scope.row.status != 1" :disabled="scope.row.status != 1"
size="mini" size="mini"
type="text" type="text"
@ -475,7 +508,7 @@
v-hasPermi="['medicalFile:index:reject']" v-hasPermi="['medicalFile:index:reject']"
> >
驳回 驳回
</el-button> --> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -661,7 +694,9 @@ import {
saveAidRecord, saveAidRecord,
queueAdd, queueAdd,
exportTreatmentPg, exportTreatmentPg,
treatmentAudit,
} from "@/api/medicalFile"; } from "@/api/medicalFile";
import { managerQuery } from "@/api/report";
import { tenantsList } from "@/api/member"; import { tenantsList } from "@/api/member";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import { followupQuery } from "@/api/followupFile"; import { followupQuery } from "@/api/followupFile";
@ -670,6 +705,8 @@ export default {
dicts: ["sys_normal_disable", "sys_user_sex"], dicts: ["sys_normal_disable", "sys_user_sex"],
data() { data() {
return { return {
time: [],
managerList: [], //
tenantsListData: [], tenantsListData: [],
qzUrl: process.env.VUE_APP_API_QZURL, // qzUrl: process.env.VUE_APP_API_QZURL, //
// //
@ -755,16 +792,6 @@ export default {
fileList: [], fileList: [],
followupList: [], followupList: [],
queueOpen: false, queueOpen: false,
//
medicalHistory: [
"肥胖症",
"失眠病",
"中风病",
"面瘫病",
"项痹病",
"腰痛病",
"痉挛性斜颈",
],
idCardType: [ idCardType: [
{ {
label: "身份证", label: "身份证",
@ -794,392 +821,6 @@ export default {
3: "台湾居民来往大陆通行证", 3: "台湾居民来往大陆通行证",
4: "其他", 4: "其他",
}, },
//
systemType: [
"隐形肥胖型",
"脂肪过多型",
"肥胖型",
"肌肉不足型",
"健康匀称型",
"超重肌肉型",
"消瘦型",
"低脂肪型",
"运动员型",
],
//
habitus: [
"平和质",
"气虚质",
" 阳虚质",
"阴虚质",
"痰湿质",
" 湿热质",
"血瘀质",
"气郁质",
"特禀质",
],
//
healType: [
{
title: "肥胖症",
list: [
{
title: "行为心理干预",
valueCode: "ZLFA_XWXLGY",
list: [
{
title:
"行为技能训练:辅导有效的应对压力技巧,避免因情绪波动导致过度进食,训练正念饮食,提高对饥饿和饱足感的感知能力",
value: "行为技能训练",
type: "but",
},
{
title:
"目标设定与追踪:与患者共同设立短期和长期减重目标,定期进行进度评估,强化正面反馈,提高自我管理能力",
value: "目标设定与追踪",
type: "but",
},
],
},
{
title: "运动干预",
valueCode: "ZLFA_YDGY",
list: [
{
title:
"有氧运动:如快走、慢跑、游泳等,建议每周至少进行150分钟中等强度的有氧运动",
value: "有氧运动",
type: "but",
},
{
title:
"抗阻运动:如举重、俯卧撑等,建议每周进行2-3次抗阻运动",
value: "抗阻运动",
type: "but",
},
],
},
{
title: "临床营养治疗",
valueCode: "ZLFA_LCYYZL",
list: [
{
title:
"限能量饮食:在限制能量摄入(日常饮食能量减去30%)的基础上,营养素比例符合平衡膳食的要求",
value: "限能量饮食",
type: "but",
},
{
title: "高蛋白饮食:每日蛋白质摄入量超过20%,但一般不高于35%",
value: "高蛋白饮食",
type: "but",
},
{
title: "低碳水化合物饮食:碳水化合物供能比一般在20%-40%",
value: "低碳水化合物饮食",
type: "but",
},
{
title:
"断食:如5+2模式,1周中5天相对正常进食,其他2天摄取平常的1/4能量",
value: "断食",
type: "but",
},
],
},
{
title: "针灸疗法",
list: [
{
title: "疗法",
valueCode: "ZLFA_ZJ_LF",
list: [
{
title: "毫针/电针疗法",
type: "but",
},
{
title: "温针疗法",
type: "but",
},
{
title: "耳穴贴压疗法",
type: "but",
},
{
title: "穴位埋针法",
type: "but",
},
{
title: "穴位埋线法",
type: "but",
},
],
},
{
title: "穴位",
valueCode: "ZLFA_ZJ_XW",
list: [
{
title: "神门:安神定志,改善睡眠质量",
value: "神门",
type: "but",
},
{
title: "三阴交:调理脾胃,养血安神",
value: "三阴交",
type: "but",
},
{
title: "百会:调节大脑功能,促进睡眠",
value: "百会",
type: "but",
},
{
title: "安眠:直接作用于睡眠中枢,帮助入睡",
value: "安眠",
type: "but",
},
],
},
],
},
{
title: "药物治疗",
valueCode: "ZLFA_YW",
list: [
{
title: "奥利司他:通过抑制胃肠道脂肪酶,减少脂肪吸收",
value: "奥利司他",
type: "but",
},
{
title: "利拉鲁肽:GLP-1受体激动剂,延缓胃排空,增加饱腹感",
value: "利拉鲁肽",
type: "but",
},
{
title: "贝那鲁肽:GLP-1受体激动剂,作用机制与利拉鲁肽类似",
value: "贝那鲁肽",
type: "but",
},
{
title:
"司美格鲁肽:GLP-1受体激动剂,每周一次给药,减重效果显著",
value: "司美格鲁肽",
type: "but",
},
{
title: "替尔泊肽:GLP-1受体激动剂,适用于肥胖症治疗",
value: "替尔泊肽",
type: "but",
},
],
},
],
},
{
title: "失眠症",
list: [
{
title: "生活习惯",
valueCode: "ZLFA_SHXG",
list: [
{
title:
"科学膳食:避免午后摄入咖啡、茶、酒精等刺激性饮品,以及睡前过度进食",
value: "科学膳食",
type: "but",
},
{
title:
"充足日照:增加日间自然光照,减少夜间人工光源,特别是电子产品的使用",
value: "充足日照",
type: "but",
},
{
title:
"合理运动:推荐瑜伽、太极拳、八段锦等传统运动,有助于改善睡眠质量",
value: "合理运动",
type: "but",
},
],
},
{
title: "心理调适",
valueCode: "ZLFA_XLTS",
list: [
{
title:
"放松训练:包括渐进式肌肉放松训练、腹式呼吸、冥想等,可降低紧张与过度警觉,提高睡眠质量",
value: "放松训练",
type: "but",
},
{
title:
"音乐疗法:轻柔舒缓的音乐可以降低神经系统兴奋性,减轻焦虑情绪从而改善睡眠",
value: "音乐疗法",
type: "but",
},
{
title:
"认知调整:不灾难化和过分关注失眠,不因偶尔失眠而产生挫败感,培养失眠的耐受性",
value: "认知调整",
type: "but",
},
],
},
{
title: "针灸疗法",
list: [
{
title: "疗法",
valueCode: "ZLFA_ZJ_LF_SMZ",
list: [
{
title: "毫针/电针疗法",
type: "but",
},
{
title: "温针疗法",
type: "but",
},
{
title: "耳穴贴压疗法",
type: "but",
},
{
title: "穴位埋针法",
type: "but",
},
{
title: "穴位埋线法",
type: "but",
},
],
},
{
title: "穴位",
valueCode: "ZLFA_ZJ_XW_SMZ",
list: [
{
title: "神门:安神定志,改善睡眠质量",
value: "神门",
type: "but",
},
{
title: "三阴交:调理脾胃,养血安神",
value: "三阴交",
type: "but",
},
{
title: "百会:调节大脑功能,促进睡眠",
value: "百会",
type: "but",
},
{
title: "安眠:直接作用于睡眠中枢,帮助入睡",
value: "安眠",
type: "but",
},
],
},
],
},
{
title: "药物治疗",
valueCode: "ZLFA_YW_SMZ",
list: [
{
title:
"苯二氮䓬受体激动剂(BZRAs):艾司唑仑、阿普唑仑、劳拉西泮等",
value: "苯二氮䓬受体激动剂(BZRAs)",
type: "but",
},
{
title:
"非苯二氮䓬类药物(non-BZDs):唑吡坦、扎来普隆、右佐匹克隆、佐匹克隆",
value: "非苯二氮䓬类药物(non-BZDs)",
type: "but",
},
{
title: "褪黑素和褪黑素受体激动剂:调节生物钟,改善睡眠",
value: "褪黑素和褪黑素受体激动剂",
type: "but",
},
{
title:
"抗抑郁药物:具有镇静作用的抗抑郁药物,如曲唑酮、米氮平等,可用于失眠伴抑郁症状的患者",
value: "抗抑郁药物",
type: "but",
},
{
title:
"其他药物:选择性食欲素受体拮抗剂苏沃雷生,可用于改善睡眠质量",
value: "其他药物",
type: "but",
},
],
},
],
},
{
title: "其他",
list: [
{
title: "针灸疗法",
list: [
{
title: "疗法",
valueCode: "ZLFA_ZJ_LF_QT",
list: [
{
title: "毫针/电针疗法",
type: "but",
},
{
title: "温针疗法",
type: "but",
},
{
title: "耳穴贴压疗法",
type: "but",
},
{
title: "穴位埋针法",
type: "but",
},
{
title: "穴位埋线法",
type: "but",
},
],
},
{
title: "穴位",
valueCode: "ZLFA_ZJ_XW_QT",
list: [
{
title: "填写",
type: "input",
},
],
},
],
},
{
title: "药物治疗",
valueCode: "ZLFA_YW_QT",
list: [
{
title: "填写",
type: "input",
},
],
},
],
},
],
status: { status: {
0: "保存", 0: "保存",
1: "待审核", 1: "待审核",
@ -1213,6 +854,9 @@ export default {
doctor: "", doctor: "",
status: "", status: "",
tenantId: "", tenantId: "",
managementId: "",
startTime: "",
endTime: "",
}, },
}, },
formDisabled: false, formDisabled: false,
@ -1367,13 +1011,24 @@ export default {
}; };
}, },
created() { created() {
let { name, phone } = this.$route.query; let { name, phone, managementId } = this.$route.query;
this.queryParams.param.keywords = name || ""; this.queryParams.param.keywords = name;
this.queryParams.param.phone = phone || ""; this.queryParams.param.phone = phone !== "null" ? phone : "";
this.queryParams.param.managementId = managementId;
this.getList(); this.getList();
this.getTenantsList(); // this.getTenantsList(); //
this.getManagerList(); //
}, },
methods: { methods: {
/** 上报管理列表 */
getManagerList() {
managerQuery({
pageNum: -1,
param: {},
}).then((res) => {
this.managerList = res.data.list;
});
},
// //
getTenantsList() { getTenantsList() {
tenantsList({ tenantsList({
@ -1470,6 +1125,14 @@ export default {
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
// time + 00:00:00 + 23:59:59
if (this.time?.length > 0) {
this.queryParams.param.startTime = this.time[0] + " 00:00:00";
this.queryParams.param.endTime = this.time[1] + " 23:59:59";
} else {
this.queryParams.param.startTime = "";
this.queryParams.param.endTime = "";
}
this.getList(); this.getList();
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
@ -1485,7 +1148,10 @@ export default {
endAge: "", endAge: "",
doctor: "", doctor: "",
status: "", status: "",
tenantId: "",
managementId: "",
}; };
this.time = [];
this.handleQuery(); this.handleQuery();
}, },
// //
@ -1514,15 +1180,17 @@ export default {
}, },
/** 提交审核 */ /** 提交审核 */
handleExamine(row, _status) { handleExamine(row, _status) {
let form = JSON.parse(JSON.stringify(row)); let params = {
form = { tenantId: row.tenantId, // id
...JSON.parse(JSON.stringify(row)), treatmentId: row.id, // id
status: _status, // 0 1 2 3
}; };
form.status = _status; let title = this.status[_status];
title = title == "待审核" ? "提交" : title;
this.$modal this.$modal
.confirm(`是否确认提交当前选择的数据(${row.name})?`) .confirm(`是否确认${title}当前选择的数据(${row.name})?`)
.then(function () { .then(function () {
return treatmentUpd(form); return treatmentAudit(params);
}) })
.then(() => { .then(() => {
this.getList(); this.getList();
@ -1636,35 +1304,6 @@ export default {
} }
}); });
}, },
//
submitDetailsForm: function () {
this.$refs["detailsForm"].validate((valid) => {
if (valid) {
let codeAndAnswerList = [];
for (let key in this.detailsForm) {
let data = {
questionCode: key,
answer: "",
};
if (typeof this.detailsForm[key] === "string") {
data.answer = this.detailsForm[key].split(",");
} else {
data.answer = this.detailsForm[key];
}
codeAndAnswerList.push(data);
}
saveAidRecord({
treatmentId: this.form.id,
codeAndAnswerList,
}).then((response) => {
this.$modal.msgSuccess("保存成功");
this.drawer = false;
this.getList();
});
}
});
},
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const idList = row.id ? [row.id] : this.ids; const idList = row.id ? [row.id] : this.ids;

103
acupuncture-后台/src/views/monitor/cache/list.vue

@ -11,6 +11,12 @@
icon="el-icon-refresh-right" icon="el-icon-refresh-right"
@click="refreshCacheNames()" @click="refreshCacheNames()"
></el-button> ></el-button>
<el-button
style="float: right; padding: 3px 0"
type="text"
icon="el-icon-plus"
@click="handelAdd()"
></el-button>
</div> </div>
<el-table <el-table
v-loading="loading" v-loading="loading"
@ -47,6 +53,12 @@
class-name="small-padding fixed-width" class-name="small-padding fixed-width"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpd(scope.row)"
></el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@ -148,33 +160,106 @@
</el-card> </el-card>
</el-col> </el-col>
</el-row> </el-row>
<el-dialog
:title="title"
:visible.sync="open"
width="620px"
append-to-body
class="popup"
>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="缓存名称" prop="cacheName">
<el-input
v-model="form.cacheName"
placeholder="请输入缓存名称"
:disabled="title == '修改缓存'"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label=" " style="margin-bottom: 0px">
<template slot-scope="scope">
<el-button type="primary" @click="submit" size="mini"
> </el-button
>
<el-button @click="open = false"> </el-button>
</template>
</el-form-item>
</el-form>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { listCacheName, listCacheKey, getCacheValue, clearCacheName, clearCacheKey, clearCacheAll } from "@/api/monitor/cache"; import {
listCacheName,
listCacheKey,
getCacheValue,
clearCacheName,
clearCacheKey,
clearCacheAll,
cacheAdd,
} from "@/api/monitor/cache";
export default { export default {
name: "CacheList", name: "CacheList",
data() { data() {
return { return {
form: {
cacheName: "",
remark: "",
},
rules: {
cacheName: [
{ required: true, message: "缓存名称不能为空", trigger: "blur" },
],
},
open: false,
cacheNames: [], cacheNames: [],
cacheKeys: [], cacheKeys: [],
cacheForm: {}, cacheForm: {},
loading: true, loading: true,
subLoading: false, subLoading: false,
nowCacheName: "", nowCacheName: "",
tableHeight: window.innerHeight - 200 tableHeight: window.innerHeight - 200,
}; };
}, },
created() { created() {
this.getCacheNames(); this.getCacheNames();
}, },
methods: { methods: {
handleUpd(row) {
this.title = "修改缓存";
this.form = {
cacheName: row.cacheName,
remark: row.remark,
};
this.open = true;
},
handelAdd() {
this.title = "新增缓存";
this.open = true;
this.form = {
cacheName: "",
remark: "",
};
},
submit() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
cacheAdd(this.form).then((response) => {
this.$modal.msgSuccess("添加成功");
this.open = false;
this.getCacheNames();
});
}
});
},
/** 查询缓存名称列表 */ /** 查询缓存名称列表 */
getCacheNames() { getCacheNames() {
this.loading = true; this.loading = true;
listCacheName().then(response => { listCacheName().then((response) => {
this.cacheNames = response.data; this.cacheNames = response.data;
this.loading = false; this.loading = false;
}); });
@ -186,7 +271,7 @@ export default {
}, },
/** 清理指定名称缓存 */ /** 清理指定名称缓存 */
handleClearCacheName(row) { handleClearCacheName(row) {
clearCacheName(row.cacheName).then(response => { clearCacheName(row.cacheName).then((response) => {
this.$modal.msgSuccess("清理缓存名称[" + row.cacheName + "]成功"); this.$modal.msgSuccess("清理缓存名称[" + row.cacheName + "]成功");
this.getCacheKeys(); this.getCacheKeys();
}); });
@ -198,7 +283,7 @@ export default {
return; return;
} }
this.subLoading = true; this.subLoading = true;
listCacheKey(cacheName).then(response => { listCacheKey(cacheName).then((response) => {
this.cacheKeys = response.data; this.cacheKeys = response.data;
this.subLoading = false; this.subLoading = false;
this.nowCacheName = cacheName; this.nowCacheName = cacheName;
@ -211,7 +296,7 @@ export default {
}, },
/** 清理指定键名缓存 */ /** 清理指定键名缓存 */
handleClearCacheKey(cacheKey) { handleClearCacheKey(cacheKey) {
clearCacheKey(cacheKey).then(response => { clearCacheKey(cacheKey).then((response) => {
this.$modal.msgSuccess("清理缓存键名[" + cacheKey + "]成功"); this.$modal.msgSuccess("清理缓存键名[" + cacheKey + "]成功");
this.getCacheKeys(); this.getCacheKeys();
}); });
@ -226,16 +311,16 @@ export default {
}, },
/** 查询缓存内容详细 */ /** 查询缓存内容详细 */
handleCacheValue(cacheKey) { handleCacheValue(cacheKey) {
getCacheValue(this.nowCacheName, cacheKey).then(response => { getCacheValue(this.nowCacheName, cacheKey).then((response) => {
this.cacheForm = response.data; this.cacheForm = response.data;
}); });
}, },
/** 清理全部缓存 */ /** 清理全部缓存 */
handleClearCacheAll() { handleClearCacheAll() {
clearCacheAll().then(response => { clearCacheAll().then((response) => {
this.$modal.msgSuccess("清理全部缓存成功"); this.$modal.msgSuccess("清理全部缓存成功");
}); });
} },
}, },
}; };
</script> </script>

5
acupuncture-后台/src/views/monitor/online/index.vue

@ -45,6 +45,11 @@
<span>{{ parseTime(scope.row.loginTime) }}</span> <span>{{ parseTime(scope.row.loginTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="最后访问时间" align="center" prop="lastVisitTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.lastVisitTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button

25
acupuncture-后台/src/views/monitor/server/index.vue

@ -171,6 +171,31 @@
</div> </div>
</el-card> </el-card>
</el-col> </el-col>
<el-col :span="24" class="card-box">
<el-card>
<div slot="header">
<span><i class="el-icon-s-data"></i> 数据库状态</span>
</div>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;">
<thead>
<tr>
<th class="el-table__cell el-table__cell is-leaf"><div class="cell">数据库类型</div></th>
<th class="el-table__cell is-leaf"><div class="cell">版本号</div></th>
<th class="el-table__cell is-leaf"><div class="cell">状态</div></th>
</tr>
</thead>
<tbody v-if="server.sysFiles">
<tr >
<td class="el-table__cell is-leaf"><div class="cell">MariaDB</div></td>
<td class="el-table__cell is-leaf"><div class="cell">10.3.23</div></td>
<td class="el-table__cell is-leaf"><div class="cell">在线</div></td>
</tr>
</tbody>
</table>
</div>
</el-card>
</el-col>
</el-row> </el-row>
</div> </div>
</template> </template>

28
acupuncture-后台/src/views/patientFile/index.vue

@ -82,14 +82,27 @@
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
@click="handleDelete">删除</el-button> @click="handleDelete">删除</el-button>
</el-col> </el-col> -->
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="el-icon-bottom" size="mini" <el-button
@click="handleDownload">下载模版</el-button> type="info"
plain
icon="el-icon-bottom"
size="mini"
@click="handleDownload"
>下载模版</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button> <el-button
</el-col> --> type="warning"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
>导入</el-button
>
</el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="warning" type="warning"
@ -454,7 +467,8 @@ export default {
Authorization: "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
deptId: localStorage.getItem("hospitalId"), deptId: localStorage.getItem("hospitalId"),
}, },
uploadFileUrl1: process.env.VUE_APP_API_QZURL + "/patient/import", // uploadFileUrl1:
process.env.VUE_APP_API_QZURL + "/admin/treatment/importTreatment", //
fileList: [], fileList: [],
// //
educationYearsValue: { educationYearsValue: {
@ -818,7 +832,7 @@ export default {
/** 下载按钮操作 */ /** 下载按钮操作 */
handleDownload() { handleDownload() {
window.open( window.open(
`${process.env.VUE_APP_API_QZURL}/profile/PatientTemplate.xlsx` `${process.env.VUE_APP_API_QZURL}profile/PatientTemplateAdmin.xlsx`
); );
// this.download1( // this.download1(
// "/patient/export", {}, // "/patient/export", {},

399
acupuncture-后台/src/views/report/manage.vue

@ -1,48 +1,158 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" <el-form
label-width="80px"> :model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="80px"
>
<el-form-item label="标题" prop="reportTitle"> <el-form-item label="标题" prop="reportTitle">
<el-input v-model="queryParams.param.reportTitle" placeholder="请输入" clearable <el-input
@keyup.enter.native="handleQuery" /> v-model="queryParams.param.reportTitle"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> <el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" <el-button
@click="handleDelete">删除</el-button> type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="listData" @selection-change="handleSelectionChange" max-height="600"> <el-table
v-loading="loading"
:data="listData"
@selection-change="handleSelectionChange"
max-height="600"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column fixed label="标题" align="center" prop="reportTitle" min-width="100" /> <el-table-column
<el-table-column fixed label="类型" align="center" prop="typeName" show-overflow-tooltip min-width="100"> fixed
label="标题"
align="center"
prop="reportTitle"
min-width="100"
/>
<el-table-column
fixed
label="类型"
align="center"
prop="typeName"
show-overflow-tooltip
min-width="100"
>
</el-table-column> </el-table-column>
<el-table-column fixed label="开始时间" align="center" prop="timeRangeStart" show-overflow-tooltip <el-table-column
min-width="100"> label="单位"
align="center"
prop="tenantIdList"
min-width="250"
show-overflow-tooltip
>
<template slot-scope="scope">
<!-- 通过id列表找到tenantsData中匹配的数据并替换为中文数据后面添加逗号 -->
<template v-for="(item, index) in scope.row.tenantIdList">
<template v-if="tenantsData.some((tenant) => tenant.id === item)">
{{ tenantsData.find((tenant) => tenant.id === item).name
}}{{ index < scope.row.tenantIdList.length - 1 ? "," : "" }}
</template>
</template>
</template>
</el-table-column>
<el-table-column
fixed
label="开始时间"
align="center"
prop="timeRangeStart"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ parseTime(scope.row.timeRangeStart, "{y}-{m}-{d}") }} {{ parseTime(scope.row.timeRangeStart, "{y}-{m}-{d}") }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed label="结束时间" align="center" prop="timeRangeEnd" show-overflow-tooltip <el-table-column
min-width="100"> fixed
label="结束时间"
align="center"
prop="timeRangeEnd"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ parseTime(scope.row.timeRangeEnd, "{y}-{m}-{d}") }} {{ parseTime(scope.row.timeRangeEnd, "{y}-{m}-{d}") }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="状态"
align="center"
prop="status"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope">
<span v-if="scope.row.status === 0"> 未开始 </span>
<span v-if="scope.row.status === 1"> 进行中 </span>
<span v-if="scope.row.status === 2"> 已结束 </span>
</template>
</el-table-column>
<!-- <el-table-column
label="开启/结束"
align="center"
prop="typeName"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
active-color="#13ce66"
inactive-color="#ff4949"
></el-switch>
</template>
</el-table-column> -->
<el-table-column label="创建人/创建时间" align="center" min-width="140"> <el-table-column label="创建人/创建时间" align="center" min-width="140">
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.createBy }}</div> <div>{{ scope.row.createBy }}</div>
@ -51,44 +161,137 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="200">
<el-table-column
fixed="right"
label="操作"
align="center"
class-name="small-padding fixed-width"
width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" <el-button
:disabled="scope.row.id == 1 || scope.row.id == 2">修改</el-button> v-if="scope.row.status === 0 || scope.row.status === 2"
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" size="mini"
:disabled="scope.row.id == 1 || scope.row.id == 2">删除</el-button> type="text"
icon="el-icon-folder-checked"
@click="handleSwitch(scope.row, 1)"
>开启</el-button
>
<el-button
v-if="scope.row.status === 1"
size="mini"
type="text"
icon="el-icon-folder-delete"
@click="handleSwitch(scope.row, 2)"
>结束</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-document"
@click="handleDetails(scope.row)"
>上报详情</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-download"
@click="handleDownload(scope.row)"
>上报汇总表</el-button
>
<el-button
:disabled="scope.row.status === 1"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button
>
<el-button
:disabled="scope.row.status === 1"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" <pagination
:limit.sync="queryParams.pageSize" @pagination="getList" /> v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog class="popup" :title="title" :visible.sync="open" width="780px" append-to-body> <el-dialog
<el-form ref="form" :model="form" :rules="rules" label-width="140px" class="formStep"> class="popup"
:title="title"
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="100px"
class="formStep"
>
<el-form-item label="标题" prop="reportTitle"> <el-form-item label="标题" prop="reportTitle">
<el-input v-model="form.reportTitle" placeholder="请输入" /> <el-input v-model="form.reportTitle" placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="上报类型" prop="reportType"> <el-form-item label="上报类型" prop="reportType">
<el-select v-model="form.reportType" placeholder="请选择"> <el-select
<el-option v-for="item in reporTypeList" :key="item.id" :label="item.typeName" :value="item.id"> v-model="form.reportType"
placeholder="请选择"
@change="handleTypeChage"
>
<el-option
v-for="item in reporTypeList"
:key="item.id"
:label="item.typeName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="单位" prop="tenantIdList">
<el-select v-model="form.tenantIdList" multiple placeholder="请选择">
<el-option
v-for="item in tenantsData"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="时间范围" prop="time"> <el-form-item label="时间范围" prop="time">
<!-- <el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="form.timeRangeStart" <el-date-picker
type="date" placeholder="选择日期"> format="yyyy-MM-dd"
</el-date-picker> --> value-format="yyyy-MM-dd"
<el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="form.time" type="daterange" v-model="form.time"
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @input="$forceUpdate()"> type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@input="$forceUpdate()"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<!-- <el-form-item label="结束时间" prop="timeRangeEnd"> <el-form-item label="状态" prop="status" v-if="!form.id">
<el-date-picker format="yyyy-MM-dd" value-format="yyyy-MM-dd" v-model="form.timeRangeEnd" type="date" <el-radio-group v-model="form.status">
placeholder="选择日期"> <el-radio :label="0">未开始</el-radio>
</el-date-picker> <el-radio :label="1">进行中</el-radio>
</el-form-item> --> <el-radio :label="2">已结束</el-radio>
</el-radio-group>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -104,20 +307,24 @@
managerAdd, managerAdd,
managerUpd, managerUpd,
managerDel, managerDel,
reportList reportList,
reportDown,
} from "@/api/report"; } from "@/api/report";
import { tenantsList } from "@/api/member";
export default { export default {
name: "Notice", name: "Notice",
data() { data() {
return { return {
reporTypeList: [], reporTypeList: [],
queryParams: { queryParams: {
pageNum: 1,
pageSize: 10,
param: { param: {
reportTitle: "", reportTitle: "",
} },
}, },
listData: [], listData: [],
title: '', title: "",
open: false, open: false,
total: 0, total: 0,
form: {}, form: {},
@ -126,21 +333,34 @@
multiple: false, multiple: false,
// //
rules: { rules: {
reportTitle: [{ reportTitle: [
{
required: true, required: true,
message: "标题不能为空", message: "标题不能为空",
trigger: "blur", trigger: "blur",
}], },
reportType: [{ ],
reportType: [
{
required: true, required: true,
message: "类型不能为空", message: "类型不能为空",
trigger: "blur", trigger: "blur",
}], },
time: [{ ],
time: [
{
required: true, required: true,
message: "时间范围不能为空", message: "时间范围不能为空",
trigger: "change", trigger: "change",
}] },
],
tenantIdList: [
{
required: true,
message: "单位不能为空",
trigger: "change",
},
],
// timeRangeStart: [{ // timeRangeStart: [{
// required: true, // required: true,
// message: "", // message: "",
@ -152,13 +372,44 @@
// trigger: "blur" // trigger: "blur"
// }], // }],
}, },
tenantsData: [],
qzUrl: process.env.VUE_APP_API_QZURL, //
}; };
}, },
created() { created() {
this.getList(); this.getList();
this.getReportType(); this.getReportType();
this.getTenantsList();
}, },
methods: { methods: {
handleDownload(row) {
reportDown({
managementId: row.id,
}).then((res) => {
if (res.data) {
window.open(this.qzUrl + res.data);
} else {
this.$modal.msgError("暂无上报汇总表");
}
});
},
//
handleDetails(row) {
this.$router.push({
path: "/medicalFile/index",
query: { managementId: row.id },
});
},
//
handleTypeChage() {
// form.reportType reporTypeList id tenantIdList
let reportType = this.form.reportType;
let tenantIdList = this.reporTypeList.find(
(item) => item.id == reportType
).tenantIdList;
this.form.tenantIdList = tenantIdList;
},
//
getReportType() { getReportType() {
reportList({ reportList({
pageNum: -1, pageNum: -1,
@ -168,6 +419,15 @@
}); });
}, },
/** 查询公告列表 */ /** 查询公告列表 */
getTenantsList() {
tenantsList({
pageNum: -1,
param: {},
}).then((res) => {
this.tenantsData = res.data.list;
});
},
/** 查询公告列表 */
getList() { getList() {
this.loading = true; this.loading = true;
managerQuery(this.queryParams).then((res) => { managerQuery(this.queryParams).then((res) => {
@ -184,11 +444,13 @@
// //
reset() { reset() {
this.form = { this.form = {
"reportTitle": "", reportTitle: "",
"reportType": "", reportType: "",
time: [], time: [],
"timeRangeStart": "", timeRangeStart: "",
"timeRangeEnd": "", timeRangeEnd: "",
tenantIdList: [],
status: 0,
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -217,24 +479,36 @@
this.title = "新增上报"; this.title = "新增上报";
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleSwitch(row, status) {
this.form = JSON.parse(JSON.stringify(row));
this.form.status = status;
managerUpd(this.form).then((response) => {
this.$modal.msgSuccess("操作成功");
this.getList();
});
},
/** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.open = true; this.open = true;
this.title = "修改上报"; this.title = "修改上报";
this.form = JSON.parse(JSON.stringify(row)) this.form = JSON.parse(JSON.stringify(row));
let timeRangeStart = this.parseTime(this.form.timeRangeStart, "{y}-{m}-{d}") let timeRangeStart = this.parseTime(
let timeRangeEnd = this.parseTime(this.form.timeRangeEnd, "{y}-{m}-{d}") this.form.timeRangeStart,
this.form.time = [] "{y}-{m}-{d}"
this.form.time[0] = timeRangeStart );
this.form.time[1] = timeRangeEnd let timeRangeEnd = this.parseTime(this.form.timeRangeEnd, "{y}-{m}-{d}");
this.form.time = [];
this.form.time[0] = timeRangeStart;
this.form.time[1] = timeRangeEnd;
}, },
/** 诊疗档案 */ /** 诊疗档案 */
submitForm: function () { submitForm: function () {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
let data = JSON.parse(JSON.stringify(this.form)) let data = JSON.parse(JSON.stringify(this.form));
let time = data.time let time = data.time;
data.timeRangeStart = data.time[0] data.timeRangeStart = data.time[0];
data.timeRangeEnd = data.time[1] data.timeRangeEnd = data.time[1];
if (data.id != undefined) { if (data.id != undefined) {
managerUpd(data).then((response) => { managerUpd(data).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
@ -319,7 +593,8 @@
margin-right: 0; margin-right: 0;
} }
.formStep1>>>.el-form-item__label {} .formStep1 >>> .el-form-item__label {
}
.form-item-zd { .form-item-zd {
width: 100%; width: 100%;

309
acupuncture-后台/src/views/report/type.vue

@ -1,30 +1,119 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" <el-form
label-width="80px"> :model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="80px"
>
<el-form-item label="类型名称" prop="typeName"> <el-form-item label="类型名称" prop="typeName">
<el-input v-model="queryParams.param.typeName" placeholder="请输入" clearable <el-input
@keyup.enter.native="handleQuery" /> v-model="queryParams.param.typeName"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-item>
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button> <el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" <el-button
@click="handleDelete">删除</el-button> type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="listData" @selection-change="handleSelectionChange" max-height="600"> <el-table
v-loading="loading"
:data="listData"
@selection-change="handleSelectionChange"
max-height="600"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column fixed label="类型名称" align="center" prop="typeName" min-width="100" /> <el-table-column
fixed
label="类型名称"
align="center"
prop="typeName"
min-width="100"
show-overflow-tooltip
/>
<el-table-column
label="单位"
align="center"
prop="tenantIdList"
min-width="250"
show-overflow-tooltip
>
<template slot-scope="scope">
<!-- 通过id列表找到tenantsData中匹配的数据并替换为中文数据后面添加逗号 -->
<template v-for="(item, index) in scope.row.tenantIdList">
<template v-if="tenantsData.some((tenant) => tenant.id === item)">
{{ tenantsData.find((tenant) => tenant.id === item).name
}}{{ index < scope.row.tenantIdList.length - 1 ? "," : "" }}
</template>
</template>
</template>
</el-table-column>
<el-table-column
label="附件"
align="center"
prop="typeName"
min-width="150"
show-overflow-tooltip
>
<template slot-scope="scope">
<el-button type="text" size="mini" @click="handleDownload(scope.row)">
<span v-if="scope.row.file">
<i class="el-icon-download"></i>
<span>{{
scope.row.file.substring(scope.row.file.lastIndexOf("/") + 1)
}}</span>
</span>
</el-button>
</template>
</el-table-column>
<el-table-column
label="备注"
align="center"
prop="remark"
min-width="150"
show-overflow-tooltip
/>
<el-table-column label="创建人/创建时间" align="center" min-width="140"> <el-table-column label="创建人/创建时间" align="center" min-width="140">
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.createBy }}</div> <div>{{ scope.row.createBy }}</div>
@ -33,25 +122,96 @@
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="200"> <el-table-column
fixed="right"
label="操作"
align="center"
class-name="small-padding fixed-width"
width="200"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" <el-button
@click="handleUpdate(scope.row)">修改</el-button> size="mini"
<el-button size="mini" type="text" icon="el-icon-delete" type="text"
@click="handleDelete(scope.row)">删除</el-button> icon="el-icon-edit"
@click="handleUpdate(scope.row)"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" <pagination
:limit.sync="queryParams.pageSize" @pagination="getList" /> v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog class="popup" :title="title" :visible.sync="open" width="780px" append-to-body> <el-dialog
<el-form ref="form" :model="form" :rules="rules" label-width="90px" class="formStep"> class="popup"
:title="title"
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="90px"
class="formStep"
>
<el-form-item label="类型名称" prop="typeName"> <el-form-item label="类型名称" prop="typeName">
<el-input v-model="form.typeName" placeholder="请输入" /> <el-input v-model="form.typeName" placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="单位" prop="tenantIdList">
<el-select v-model="form.tenantIdList" multiple placeholder="请选择">
<el-option
v-for="item in tenantsData"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="附件" prop="file">
<el-upload
:limit="1"
class="avatar-uploader wj-uploader"
:headers="headers"
:action="uploadFileUrl"
accept=".xlsx,.xls,.pdf,.doc,.docx"
:before-upload="handleBeforePdfUpload1"
:on-success="handleUploadPdfAdd1"
:on-remove="handleRemove"
: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-item label="备注" prop="remark">
<el-input
type="textarea"
v-model="form.remark"
placeholder="请输入"
/>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -62,24 +222,25 @@
</template> </template>
<script> <script>
import { import { getToken } from "@/utils/auth";
reportList, import { tenantsList } from "@/api/member";
reportAdd, import { reportList, reportAdd, reportUpd, reportDel } from "@/api/report";
reportUpd,
reportDel
} from "@/api/report";
export default { export default {
name: "Notice", name: "Notice",
data() { data() {
return { return {
uploadFileUrl: process.env.VUE_APP_API_QZURL + "/common/upload", //
headers: {
Authorization: "Bearer " + getToken(),
},
dataSourceList: [], dataSourceList: [],
queryParams: { queryParams: {
param: { param: {
name: "", name: "",
} },
}, },
listData: [], listData: [],
title: '', title: "",
open: false, open: false,
total: 0, total: 0,
form: {}, form: {},
@ -88,18 +249,77 @@
multiple: false, multiple: false,
// //
rules: { rules: {
typeName: [{ typeName: [
{
required: true, required: true,
message: "上报类型不能为空", message: "上报类型不能为空",
trigger: "blur", trigger: "blur",
}],
}, },
],
tenantIdList: [
{
required: true,
message: "单位不能为空",
trigger: "change",
},
],
file: [
{
required: true,
message: "附件不能为空",
trigger: "change",
},
],
},
tenantsData: [],
fileList: [],
qzUrl: process.env.VUE_APP_API_QZURL, //
}; };
}, },
created() { created() {
this.getList(); this.getList();
this.getTenantsList();
}, },
methods: { methods: {
handleDownload(row) {
window.open(this.qzUrl + row.file);
},
handleRemove(file, fileList) {
this.form.file = "";
this.fileList = [];
},
// - pdg
handleUploadPdfAdd1(res) {
if (res.code == 200) {
this.$message.success(res.msg || "导入成功");
this.form.file = res.fileName;
setTimeout(() => {
this.$refs["form"].validateField("file", (errorMessage) => {});
});
} else {
this.$message.error(res.msg || "导入失败");
this.fileList = [];
}
},
// -
handleBeforePdfUpload1(file) {
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
const whiteList = ["xlsx", "xls", "pdf", "doc", "docx"];
if (whiteList.indexOf(fileSuffix) === -1) {
this.$message.error("上传文件只能是xlsx/xls/pdf/doc/docx 格式!");
return false;
}
},
/** 查询公告列表 */
getTenantsList() {
tenantsList({
pageNum: -1,
param: {},
}).then((res) => {
this.tenantsData = res.data.list;
});
},
/** 查询公告列表 */ /** 查询公告列表 */
getList() { getList() {
this.loading = true; this.loading = true;
@ -116,8 +336,12 @@
}, },
// //
reset() { reset() {
this.fileList = [];
this.form = { this.form = {
"typeName": "", typeName: "",
tenantIdList: [],
remark: "",
file: "",
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -148,8 +372,19 @@
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.open = true; this.open = true;
this.title = "修改诊疗档案"; this.title = "修改上报类型";
this.form = JSON.parse(JSON.stringify(row)) this.form = JSON.parse(JSON.stringify(row));
if (row.file) {
this.fileList = [
{
//
name: row.file.substring(row.file.lastIndexOf("/") + 1),
url: row.file,
},
];
} else {
this.fileList = [];
}
}, },
/** 诊疗档案 */ /** 诊疗档案 */
submitForm: function () { submitForm: function () {
@ -194,6 +429,9 @@
<style scoped src="@/assets/styles/common.css"></style> <style scoped src="@/assets/styles/common.css"></style>
<style scoped> <style scoped>
>>> .el-upload-list__item:first-child {
margin-top: 0 !important;
}
.div-title1 { .div-title1 {
font-size: 22px; font-size: 22px;
font-weight: bold; font-weight: bold;
@ -239,7 +477,8 @@
margin-right: 0; margin-right: 0;
} }
.formStep1>>>.el-form-item__label {} .formStep1 >>> .el-form-item__label {
}
.form-item-zd { .form-item-zd {
width: 100%; width: 100%;

256
acupuncture-后台/src/views/system/dict/data.vue

@ -1,6 +1,13 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="字典名称" prop="dictType"> <el-form-item label="字典名称" prop="dictType">
<el-select v-model="queryParams.dictType"> <el-select v-model="queryParams.dictType">
<el-option <el-option
@ -20,7 +27,11 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="数据状态" clearable> <el-select
v-model="queryParams.status"
placeholder="数据状态"
clearable
>
<el-option <el-option
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
@ -30,8 +41,16 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-item>
</el-form> </el-form>
@ -44,7 +63,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dict:add']" v-hasPermi="['system:dict:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -55,7 +75,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:dict:edit']" v-hasPermi="['system:dict:edit']"
>修改</el-button> >修改</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -66,7 +87,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>删除</el-button> >删除</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -76,7 +98,8 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:dict:export']" v-hasPermi="['system:dict:export']"
>导出</el-button> >导出</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -85,34 +108,87 @@
icon="el-icon-close" icon="el-icon-close"
size="mini" size="mini"
@click="handleClose" @click="handleClose"
>关闭</el-button> >关闭</el-button
>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="dataList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典编码" align="center" prop="dictCode" /> <el-table-column label="字典编码" align="center" prop="dictCode" />
<el-table-column label="字典标签" align="center" prop="dictLabel"> <el-table-column label="字典标签" align="center" prop="dictLabel">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="(scope.row.listClass == '' || scope.row.listClass == 'default') && (scope.row.cssClass == '' || scope.row.cssClass == null)">{{ scope.row.dictLabel }}</span> <span
<el-tag v-else :type="scope.row.listClass == 'primary' ? '' : scope.row.listClass" :class="scope.row.cssClass">{{ scope.row.dictLabel }}</el-tag> v-if="
(scope.row.listClass == '' || scope.row.listClass == 'default') &&
(scope.row.cssClass == '' || scope.row.cssClass == null)
"
>{{ scope.row.dictLabel }}</span
>
<el-tag
v-else
:type="scope.row.listClass == 'primary' ? '' : scope.row.listClass"
:class="scope.row.cssClass"
>{{ scope.row.dictLabel }}</el-tag
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="字典键值" align="center" prop="dictValue" /> <el-table-column label="字典键值" align="center" prop="dictValue" />
<el-table-column label="字典排序" align="center" prop="dictSort" /> <el-table-column label="字典排序" align="center" prop="dictSort" />
<el-table-column label="数据类型" align="center" prop="dataType" />
<!-- 长度是否必填是否唯一 -->
<el-table-column label="长度" align="center" prop="dataLength" />
<el-table-column label="是否必填" align="center" width="100">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.isRequired == 0"></el-tag>
<el-tag type="success" v-if="scope.row.isRequired == 1"></el-tag>
</template>
</el-table-column>
<el-table-column label="是否唯一" align="center" width="100">
<template slot-scope="scope">
<el-tag type="info" v-if="scope.row.isSole == 0"></el-tag>
<el-tag type="success" v-if="scope.row.isSole == 1"></el-tag>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> <dict-tag
:options="dict.type.sys_normal_disable"
:value="scope.row.status"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> <el-table-column
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> label="备注"
align="center"
prop="remark"
:show-overflow-tooltip="true"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
fixed="right"
width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -120,14 +196,16 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:dict:edit']" v-hasPermi="['system:dict:edit']"
>修改</el-button> >修改</el-button
>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>删除</el-button> >删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -155,8 +233,30 @@
<el-form-item label="样式属性" prop="cssClass"> <el-form-item label="样式属性" prop="cssClass">
<el-input v-model="form.cssClass" placeholder="请输入样式属性" /> <el-input v-model="form.cssClass" placeholder="请输入样式属性" />
</el-form-item> </el-form-item>
<el-form-item label="数据类型" prop="dataType">
<el-input v-model="form.dataType" placeholder="请输入" />
</el-form-item>
<el-form-item label="长度" prop="dataLength">
<el-input v-model="form.dataLength" placeholder="请输入长度" />
</el-form-item>
<el-form-item label="是否必填" prop="isRequired">
<el-radio-group v-model="form.isRequired">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="是否唯一" prop="isSole">
<el-radio-group v-model="form.isSole">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="显示排序" prop="dictSort"> <el-form-item label="显示排序" prop="dictSort">
<el-input-number v-model="form.dictSort" controls-position="right" :min="0" /> <el-input-number
v-model="form.dictSort"
controls-position="right"
:min="0"
/>
</el-form-item> </el-form-item>
<el-form-item label="回显样式" prop="listClass"> <el-form-item label="回显样式" prop="listClass">
<el-select v-model="form.listClass"> <el-select v-model="form.listClass">
@ -174,11 +274,16 @@
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{dict.label}}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -190,12 +295,21 @@
</template> </template>
<script> <script>
import { listData, getData, delData, addData, updateData } from "@/api/system/dict/data"; import {
import { optionselect as getDictOptionselect, getType } from "@/api/system/dict/type"; listData,
getData,
delData,
addData,
updateData,
} from "@/api/system/dict/data";
import {
optionselect as getDictOptionselect,
getType,
} from "@/api/system/dict/type";
export default { export default {
name: "Data", name: "Data",
dicts: ['sys_normal_disable'], dicts: ["sys_normal_disable"],
data() { data() {
return { return {
// //
@ -222,28 +336,28 @@ export default {
listClassOptions: [ listClassOptions: [
{ {
value: "default", value: "default",
label: "默认" label: "默认",
}, },
{ {
value: "primary", value: "primary",
label: "主要" label: "主要",
}, },
{ {
value: "success", value: "success",
label: "成功" label: "成功",
}, },
{ {
value: "info", value: "info",
label: "信息" label: "信息",
}, },
{ {
value: "warning", value: "warning",
label: "警告" label: "警告",
}, },
{ {
value: "danger", value: "danger",
label: "危险" label: "危险",
} },
], ],
// //
typeOptions: [], typeOptions: [],
@ -253,22 +367,22 @@ export default {
pageSize: 10, pageSize: 10,
dictType: undefined, dictType: undefined,
dictLabel: undefined, dictLabel: undefined,
status: undefined status: undefined,
}, },
// //
form: {}, form: {},
// //
rules: { rules: {
dictLabel: [ dictLabel: [
{ required: true, message: "数据标签不能为空", trigger: "blur" } { required: true, message: "数据标签不能为空", trigger: "blur" },
], ],
dictValue: [ dictValue: [
{ required: true, message: "数据键值不能为空", trigger: "blur" } { required: true, message: "数据键值不能为空", trigger: "blur" },
], ],
dictSort: [ dictSort: [
{ required: true, message: "数据顺序不能为空", trigger: "blur" } { required: true, message: "数据顺序不能为空", trigger: "blur" },
] ],
} },
}; };
}, },
created() { created() {
@ -279,7 +393,7 @@ export default {
methods: { methods: {
/** 查询字典类型详细 */ /** 查询字典类型详细 */
getType(dictId) { getType(dictId) {
getType(dictId).then(response => { getType(dictId).then((response) => {
this.queryParams.dictType = response.data.dictType; this.queryParams.dictType = response.data.dictType;
this.defaultDictType = response.data.dictType; this.defaultDictType = response.data.dictType;
this.getList(); this.getList();
@ -287,14 +401,14 @@ export default {
}, },
/** 查询字典类型列表 */ /** 查询字典类型列表 */
getTypeList() { getTypeList() {
getDictOptionselect().then(response => { getDictOptionselect().then((response) => {
this.typeOptions = response.data; this.typeOptions = response.data;
}); });
}, },
/** 查询字典数据列表 */ /** 查询字典数据列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listData(this.queryParams).then(response => { listData(this.queryParams).then((response) => {
this.dataList = response.rows; this.dataList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
@ -312,10 +426,14 @@ export default {
dictLabel: undefined, dictLabel: undefined,
dictValue: undefined, dictValue: undefined,
cssClass: undefined, cssClass: undefined,
listClass: 'default', listClass: "default",
dictSort: 0, dictSort: 0,
status: "0", status: "0",
remark: undefined remark: undefined,
dataType: "",
dataLength: "",
isRequired: 1,
isSole: 1,
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -344,15 +462,15 @@ export default {
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.dictCode) this.ids = selection.map((item) => item.dictCode);
this.single = selection.length!=1 this.single = selection.length != 1;
this.multiple = !selection.length this.multiple = !selection.length;
}, },
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const dictCode = row.dictCode || this.ids const dictCode = row.dictCode || this.ids;
getData(dictCode).then(response => { getData(dictCode).then((response) => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改字典数据"; this.title = "修改字典数据";
@ -360,18 +478,24 @@ export default {
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function () { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.dictCode != undefined) { if (this.form.dictCode != undefined) {
updateData(this.form).then(response => { updateData(this.form).then((response) => {
this.$store.dispatch('dict/removeDict', this.queryParams.dictType); this.$store.dispatch(
"dict/removeDict",
this.queryParams.dictType
);
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
} else { } else {
addData(this.form).then(response => { addData(this.form).then((response) => {
this.$store.dispatch('dict/removeDict', this.queryParams.dictType); this.$store.dispatch(
"dict/removeDict",
this.queryParams.dictType
);
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
@ -383,20 +507,28 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const dictCodes = row.dictCode || this.ids; const dictCodes = row.dictCode || this.ids;
this.$modal.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?').then(function() { this.$modal
.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?')
.then(function () {
return delData(dictCodes); return delData(dictCodes);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
this.$store.dispatch('dict/removeDict', this.queryParams.dictType); this.$store.dispatch("dict/removeDict", this.queryParams.dictType);
}).catch(() => {}); })
.catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('system/dict/data/export', { this.download(
...this.queryParams "system/dict/data/export",
}, `data_${new Date().getTime()}.xlsx`) {
} ...this.queryParams,
} },
`data_${new Date().getTime()}.xlsx`
);
},
},
}; };
</script> </script>

2
acupuncture-后台/src/views/system/dict/index.vue

@ -168,6 +168,7 @@
</router-link> </router-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status"> <el-table-column label="状态" align="center" prop="status">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag <dict-tag
@ -235,6 +236,7 @@
<el-form-item label="字典类型" prop="dictType"> <el-form-item label="字典类型" prop="dictType">
<el-input v-model="form.dictType" placeholder="请输入字典类型" /> <el-input v-model="form.dictType" placeholder="请输入字典类型" />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio <el-radio

30
acupuncture-后台/src/views/system/menu/index.vue

@ -19,6 +19,17 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="客户端类型" prop="status">
<el-select
v-model="queryParams.clientType"
placeholder="客户端类型"
clearable
style="width: 240px"
>
<el-option label="PC端" :value="0" />
<el-option label="移动端" :value="1" />
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <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-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -70,6 +81,12 @@
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/> <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="客户端类型" align="center" width="100">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.clientType === 0">PC端</el-tag>
<el-tag type="info" v-if="scope.row.clientType === 1">移动端</el-tag>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime"> <el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
@ -278,6 +295,16 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="12">
<el-form-item label="客户端类型">
<el-radio-group v-model="form.clientType">
<el-radio :label="0">PC端</el-radio>
<el-radio :label="1">移动端</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -389,7 +416,8 @@ export default {
isFrame: "1", isFrame: "1",
isCache: "0", isCache: "0",
visible: "0", visible: "0",
status: "0" status: "0",
clientType: 0
}; };
this.resetForm("form"); this.resetForm("form");
}, },

218
acupuncture-后台/src/views/system/notice/index.vue

@ -1,6 +1,13 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="公告标题" prop="noticeTitle"> <el-form-item label="公告标题" prop="noticeTitle">
<el-input <el-input
v-model="queryParams.noticeTitle" v-model="queryParams.noticeTitle"
@ -18,7 +25,11 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="类型" prop="noticeType"> <el-form-item label="类型" prop="noticeType">
<el-select v-model="queryParams.noticeType" placeholder="公告类型" clearable> <el-select
v-model="queryParams.noticeType"
placeholder="公告类型"
clearable
>
<el-option <el-option
v-for="dict in dict.type.sys_notice_type" v-for="dict in dict.type.sys_notice_type"
:key="dict.value" :key="dict.value"
@ -28,8 +39,16 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-item>
</el-form> </el-form>
@ -42,7 +61,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:notice:add']" v-hasPermi="['system:notice:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -53,7 +73,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:notice:edit']" v-hasPermi="['system:notice:edit']"
>修改</el-button> >修改</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -64,37 +85,88 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:notice:remove']" v-hasPermi="['system:notice:remove']"
>删除</el-button> >删除</el-button
>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="noticeList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="noticeId" width="100" /> <el-table-column
label="序号"
align="center"
prop="noticeId"
width="100"
/>
<el-table-column <el-table-column
label="公告标题" label="公告标题"
align="center" align="center"
prop="noticeTitle" prop="noticeTitle"
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
/> />
<el-table-column label="公告类型" align="center" prop="noticeType" width="100">
<el-table-column
label="公告类型"
align="center"
prop="noticeType"
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType"/> <dict-tag
:options="dict.type.sys_notice_type"
:value="scope.row.noticeType"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="状态" align="center" prop="status" width="100"> <el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status"/> <dict-tag
:options="dict.type.sys_notice_status"
:value="scope.row.status"
/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建者" align="center" prop="createBy" width="100" /> <el-table-column
<el-table-column label="创建时间" align="center" prop="createTime" width="100"> label="创建者"
align="center"
prop="createBy"
width="100"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
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="createTime"
width="140"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span> <span>{{
parseTime(scope.row.updateTime, "{y}-{m}-{d} {h}:{i}")
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -102,14 +174,16 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:notice:edit']" v-hasPermi="['system:notice:edit']"
>修改</el-button> >修改</el-button
>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:notice:remove']" v-hasPermi="['system:notice:remove']"
>删除</el-button> >删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -125,13 +199,9 @@
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body> <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 ref="form" :model="form" :rules="rules" label-width="80px">
<el-row>
<el-col :span="12">
<el-form-item label="公告标题" prop="noticeTitle"> <el-form-item label="公告标题" prop="noticeTitle">
<el-input v-model="form.noticeTitle" placeholder="请输入公告标题" /> <el-input v-model="form.noticeTitle" placeholder="请输入公告标题" />
</el-form-item> </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="公告类型" prop="noticeType"> <el-form-item label="公告类型" prop="noticeType">
<el-select v-model="form.noticeType" placeholder="请选择公告类型"> <el-select v-model="form.noticeType" placeholder="请选择公告类型">
<el-option <el-option
@ -142,24 +212,35 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> <el-form-item label="通知用户" prop="userIdList">
<el-col :span="24"> <el-select
v-model="form.userIdList"
multiple
placeholder="请选择"
style="width: 100%"
>
<el-option
v-for="item in userList"
:key="item.userId"
:label="`${item.userName}-${item.nickName}`"
:value="item.userId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态"> <el-form-item label="状态">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio <el-radio
v-for="dict in dict.type.sys_notice_status" v-for="dict in dict.type.sys_notice_status"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{dict.label}}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="内容"> <el-form-item label="内容">
<editor v-model="form.noticeContent" :min-height="192" /> <editor v-model="form.noticeContent" :min-height="192" />
</el-form-item> </el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -170,11 +251,17 @@
</template> </template>
<script> <script>
import { listNotice, getNotice, delNotice, addNotice, updateNotice } from "@/api/system/notice"; import {
listNotice,
getNotice,
delNotice,
addNotice,
updateNotice,
} from "@/api/system/notice";
import { listUser } from "@/api/system/user";
export default { export default {
name: "Notice", name: "Notice",
dicts: ['sys_notice_status', 'sys_notice_type'], dicts: ["sys_notice_status", "sys_notice_type"],
data() { data() {
return { return {
// //
@ -201,29 +288,47 @@ export default {
pageSize: 10, pageSize: 10,
noticeTitle: undefined, noticeTitle: undefined,
createBy: undefined, createBy: undefined,
status: undefined status: undefined,
}, },
// //
form: {}, form: {},
// //
rules: { rules: {
noticeTitle: [ noticeTitle: [
{ required: true, message: "公告标题不能为空", trigger: "blur" } { required: true, message: "公告标题不能为空", trigger: "blur" },
], ],
noticeType: [ noticeType: [
{ required: true, message: "公告类型不能为空", trigger: "change" } { required: true, message: "公告类型不能为空", trigger: "change" },
] ],
} userIdList: [
{ required: true, message: "通知用户不能为空", trigger: "blur" },
],
},
userList: [],
}; };
}, },
created() { created() {
this.getList(); this.getList();
this.getUserList();
}, },
methods: { methods: {
/** 查询用户列表 */
getUserList() {
listUser({
pageNum: 1,
pageSize: 1000000,
}).then((response) => {
// userNameadmin
response.rows = response.rows.filter(
(item) => item.userName != "admin"
);
this.userList = response.rows;
});
},
/** 查询公告列表 */ /** 查询公告列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listNotice(this.queryParams).then(response => { listNotice(this.queryParams).then((response) => {
this.noticeList = response.rows; this.noticeList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
@ -241,7 +346,8 @@ export default {
noticeTitle: undefined, noticeTitle: undefined,
noticeType: undefined, noticeType: undefined,
noticeContent: undefined, noticeContent: undefined,
status: "0" status: "0",
userIdList: [],
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -257,9 +363,9 @@ export default {
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.noticeId) this.ids = selection.map((item) => item.noticeId);
this.single = selection.length!=1 this.single = selection.length != 1;
this.multiple = !selection.length this.multiple = !selection.length;
}, },
/** 新增按钮操作 */ /** 新增按钮操作 */
handleAdd() { handleAdd() {
@ -270,8 +376,8 @@ export default {
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const noticeId = row.noticeId || this.ids const noticeId = row.noticeId || this.ids;
getNotice(noticeId).then(response => { getNotice(noticeId).then((response) => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.title = "修改公告"; this.title = "修改公告";
@ -279,16 +385,16 @@ export default {
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function () { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.noticeId != undefined) { if (this.form.noticeId != undefined) {
updateNotice(this.form).then(response => { updateNotice(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
} else { } else {
addNotice(this.form).then(response => { addNotice(this.form).then((response) => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
@ -299,14 +405,18 @@ export default {
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const noticeIds = row.noticeId || this.ids const noticeIds = row.noticeId || this.ids;
this.$modal.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?').then(function() { this.$modal
.confirm('是否确认删除公告编号为"' + noticeIds + '"的数据项?')
.then(function () {
return delNotice(noticeIds); return delNotice(noticeIds);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
} .catch(() => {});
} },
},
}; };
</script> </script>

334
acupuncture-后台/src/views/system/role/index.vue

@ -1,6 +1,12 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
>
<el-form-item label="角色名称" prop="roleName"> <el-form-item label="角色名称" prop="roleName">
<el-input <el-input
v-model="queryParams.roleName" v-model="queryParams.roleName"
@ -34,6 +40,17 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="客户端类型" prop="status">
<el-select
v-model="queryParams.clientType"
placeholder="客户端类型"
clearable
style="width: 240px"
>
<el-option label="PC端" :value="0" />
<el-option label="移动端" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="创建时间"> <el-form-item label="创建时间">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
@ -46,8 +63,16 @@
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-item>
</el-form> </el-form>
@ -60,7 +85,8 @@
size="mini" size="mini"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:role:add']" v-hasPermi="['system:role:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -71,7 +97,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:role:edit']" v-hasPermi="['system:role:edit']"
>修改</el-button> >修改</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -82,7 +109,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:role:remove']" v-hasPermi="['system:role:remove']"
>删除</el-button> >删除</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -92,16 +120,34 @@
size="mini" size="mini"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:role:export']" v-hasPermi="['system:role:export']"
>导出</el-button> >导出</el-button
>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="roleList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="roleList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="角色编号" prop="roleId" width="120" /> <el-table-column label="角色编号" prop="roleId" width="120" />
<el-table-column label="角色名称" prop="roleName" :show-overflow-tooltip="true" width="150" /> <el-table-column
<el-table-column label="权限字符" prop="roleKey" :show-overflow-tooltip="true" width="150" /> label="角色名称"
prop="roleName"
:show-overflow-tooltip="true"
width="150"
/>
<el-table-column
label="权限字符"
prop="roleKey"
:show-overflow-tooltip="true"
width="150"
/>
<el-table-column label="显示顺序" prop="roleSort" width="100" /> <el-table-column label="显示顺序" prop="roleSort" width="100" />
<el-table-column label="状态" align="center" width="100"> <el-table-column label="状态" align="center" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
@ -113,12 +159,27 @@
></el-switch> ></el-switch>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> <el-table-column label="客户端类型" align="center" width="100">
<template slot-scope="scope">
<el-tag type="success" v-if="scope.row.clientType === 0">PC端</el-tag>
<el-tag type="info" v-if="scope.row.clientType === 1">移动端</el-tag>
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope" v-if="scope.row.roleId !== 1"> <template slot-scope="scope" v-if="scope.row.roleId !== 1">
<el-button <el-button
size="mini" size="mini"
@ -126,21 +187,37 @@
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
v-hasPermi="['system:role:edit']" v-hasPermi="['system:role:edit']"
>修改</el-button> >修改</el-button
>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:role:remove']" v-hasPermi="['system:role:remove']"
>删除</el-button> >删除</el-button
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['system:role:edit']"> >
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button> <el-dropdown
size="mini"
@command="(command) => handleCommand(command, scope.row)"
v-hasPermi="['system:role:edit']"
>
<el-button size="mini" type="text" icon="el-icon-d-arrow-right"
>更多</el-button
>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleDataScope" icon="el-icon-circle-check" <el-dropdown-item
v-hasPermi="['system:role:edit']">数据权限</el-dropdown-item> command="handleDataScope"
<el-dropdown-item command="handleAuthUser" icon="el-icon-user" icon="el-icon-circle-check"
v-hasPermi="['system:role:edit']">分配用户</el-dropdown-item> v-hasPermi="['system:role:edit']"
>数据权限</el-dropdown-item
>
<el-dropdown-item
command="handleAuthUser"
icon="el-icon-user"
v-hasPermi="['system:role:edit']"
>分配用户</el-dropdown-item
>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown>
</template> </template>
@ -163,7 +240,10 @@
</el-form-item> </el-form-item>
<el-form-item prop="roleKey"> <el-form-item prop="roleKey">
<span slot="label"> <span slot="label">
<el-tooltip content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)" placement="top"> <el-tooltip
content="控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)"
placement="top"
>
<i class="el-icon-question"></i> <i class="el-icon-question"></i>
</el-tooltip> </el-tooltip>
权限字符 权限字符
@ -171,7 +251,11 @@
<el-input v-model="form.roleKey" placeholder="请输入权限字符" /> <el-input v-model="form.roleKey" placeholder="请输入权限字符" />
</el-form-item> </el-form-item>
<el-form-item label="角色顺序" prop="roleSort"> <el-form-item label="角色顺序" prop="roleSort">
<el-input-number v-model="form.roleSort" controls-position="right" :min="0" /> <el-input-number
v-model="form.roleSort"
controls-position="right"
:min="0"
/>
</el-form-item> </el-form-item>
<el-form-item label="状态"> <el-form-item label="状态">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
@ -179,13 +263,32 @@
v-for="dict in dict.type.sys_normal_disable" v-for="dict in dict.type.sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{dict.label}}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group>
</el-form-item>
<el-form-item label="客户端类型">
<el-radio-group v-model="form.clientType">
<el-radio :label="0">PC端</el-radio>
<el-radio :label="1">移动端</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="菜单权限"> <el-form-item label="菜单权限">
<el-checkbox v-model="menuExpand" @change="handleCheckedTreeExpand($event, 'menu')">展开/折叠</el-checkbox> <el-checkbox
<el-checkbox v-model="menuNodeAll" @change="handleCheckedTreeNodeAll($event, 'menu')">全选/全不选</el-checkbox> v-model="menuExpand"
<el-checkbox v-model="form.menuCheckStrictly" @change="handleCheckedTreeConnect($event, 'menu')">父子联动</el-checkbox> @change="handleCheckedTreeExpand($event, 'menu')"
>展开/折叠</el-checkbox
>
<el-checkbox
v-model="menuNodeAll"
@change="handleCheckedTreeNodeAll($event, 'menu')"
>全选/全不选</el-checkbox
>
<el-checkbox
v-model="form.menuCheckStrictly"
@change="handleCheckedTreeConnect($event, 'menu')"
>父子联动</el-checkbox
>
<el-tree <el-tree
class="tree-border" class="tree-border"
:data="menuOptions" :data="menuOptions"
@ -198,7 +301,11 @@
></el-tree> ></el-tree>
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -208,7 +315,12 @@
</el-dialog> </el-dialog>
<!-- 分配角色数据权限对话框 --> <!-- 分配角色数据权限对话框 -->
<el-dialog :title="title" :visible.sync="openDataScope" width="500px" append-to-body> <el-dialog
:title="title"
:visible.sync="openDataScope"
width="500px"
append-to-body
>
<el-form :model="form" label-width="80px"> <el-form :model="form" label-width="80px">
<el-form-item label="角色名称"> <el-form-item label="角色名称">
<el-input v-model="form.roleName" :disabled="true" /> <el-input v-model="form.roleName" :disabled="true" />
@ -227,9 +339,21 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="数据权限" v-show="form.dataScope == 2"> <el-form-item label="数据权限" v-show="form.dataScope == 2">
<el-checkbox v-model="deptExpand" @change="handleCheckedTreeExpand($event, 'dept')">展开/折叠</el-checkbox> <el-checkbox
<el-checkbox v-model="deptNodeAll" @change="handleCheckedTreeNodeAll($event, 'dept')">全选/全不选</el-checkbox> v-model="deptExpand"
<el-checkbox v-model="form.deptCheckStrictly" @change="handleCheckedTreeConnect($event, 'dept')">父子联动</el-checkbox> @change="handleCheckedTreeExpand($event, 'dept')"
>展开/折叠</el-checkbox
>
<el-checkbox
v-model="deptNodeAll"
@change="handleCheckedTreeNodeAll($event, 'dept')"
>全选/全不选</el-checkbox
>
<el-checkbox
v-model="form.deptCheckStrictly"
@change="handleCheckedTreeConnect($event, 'dept')"
>父子联动</el-checkbox
>
<el-tree <el-tree
class="tree-border" class="tree-border"
:data="deptOptions" :data="deptOptions"
@ -252,12 +376,24 @@
</template> </template>
<script> <script>
import { listRole, getRole, delRole, addRole, updateRole, dataScope, changeRoleStatus, deptTreeSelect } from "@/api/system/role"; import {
import { treeselect as menuTreeselect, roleMenuTreeselect } from "@/api/system/menu"; listRole,
getRole,
delRole,
addRole,
updateRole,
dataScope,
changeRoleStatus,
deptTreeSelect,
} from "@/api/system/role";
import {
treeselect as menuTreeselect,
roleMenuTreeselect,
} from "@/api/system/menu";
export default { export default {
name: "Role", name: "Role",
dicts: ['sys_normal_disable'], dicts: ["sys_normal_disable"],
data() { data() {
return { return {
// //
@ -290,24 +426,24 @@ export default {
dataScopeOptions: [ dataScopeOptions: [
{ {
value: "1", value: "1",
label: "全部数据权限" label: "全部数据权限",
}, },
{ {
value: "2", value: "2",
label: "自定数据权限" label: "自定数据权限",
}, },
{ {
value: "3", value: "3",
label: "本部门数据权限" label: "本部门数据权限",
}, },
{ {
value: "4", value: "4",
label: "本部门及以下数据权限" label: "本部门及以下数据权限",
}, },
{ {
value: "5", value: "5",
label: "仅本人数据权限" label: "仅本人数据权限",
} },
], ],
// //
menuOptions: [], menuOptions: [],
@ -319,26 +455,26 @@ export default {
pageSize: 10, pageSize: 10,
roleName: undefined, roleName: undefined,
roleKey: undefined, roleKey: undefined,
status: undefined status: undefined,
}, },
// //
form: {}, form: {},
defaultProps: { defaultProps: {
children: "children", children: "children",
label: "label" label: "label",
}, },
// //
rules: { rules: {
roleName: [ roleName: [
{ required: true, message: "角色名称不能为空", trigger: "blur" } { required: true, message: "角色名称不能为空", trigger: "blur" },
], ],
roleKey: [ roleKey: [
{ required: true, message: "权限字符不能为空", trigger: "blur" } { required: true, message: "权限字符不能为空", trigger: "blur" },
], ],
roleSort: [ roleSort: [
{ required: true, message: "角色顺序不能为空", trigger: "blur" } { required: true, message: "角色顺序不能为空", trigger: "blur" },
] ],
} },
}; };
}, },
created() { created() {
@ -348,7 +484,8 @@ export default {
/** 查询角色列表 */ /** 查询角色列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listRole(this.addDateRange(this.queryParams, this.dateRange)).then(response => { listRole(this.addDateRange(this.queryParams, this.dateRange)).then(
(response) => {
this.roleList = response.rows; this.roleList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
@ -357,7 +494,7 @@ export default {
}, },
/** 查询菜单树结构 */ /** 查询菜单树结构 */
getMenuTreeselect() { getMenuTreeselect() {
menuTreeselect().then(response => { menuTreeselect().then((response) => {
this.menuOptions = response.data; this.menuOptions = response.data;
}); });
}, },
@ -381,14 +518,14 @@ export default {
}, },
/** 根据角色ID查询菜单树结构 */ /** 根据角色ID查询菜单树结构 */
getRoleMenuTreeselect(roleId) { getRoleMenuTreeselect(roleId) {
return roleMenuTreeselect(roleId).then(response => { return roleMenuTreeselect(roleId).then((response) => {
this.menuOptions = response.menus; this.menuOptions = response.menus;
return response; return response;
}); });
}, },
/** 根据角色ID查询部门树结构 */ /** 根据角色ID查询部门树结构 */
getDeptTree(roleId) { getDeptTree(roleId) {
return deptTreeSelect(roleId).then(response => { return deptTreeSelect(roleId).then((response) => {
this.deptOptions = response.depts; this.deptOptions = response.depts;
return response; return response;
}); });
@ -396,11 +533,15 @@ export default {
// //
handleStatusChange(row) { handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"; let text = row.status === "0" ? "启用" : "停用";
this.$modal.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?').then(function() { this.$modal
.confirm('确认要"' + text + '""' + row.roleName + '"角色吗?')
.then(function () {
return changeRoleStatus(row.roleId, row.status); return changeRoleStatus(row.roleId, row.status);
}).then(() => { })
.then(() => {
this.$modal.msgSuccess(text + "成功"); this.$modal.msgSuccess(text + "成功");
}).catch(function() { })
.catch(function () {
row.status = row.status === "0" ? "1" : "0"; row.status = row.status === "0" ? "1" : "0";
}); });
}, },
@ -419,11 +560,11 @@ export default {
if (this.$refs.menu != undefined) { if (this.$refs.menu != undefined) {
this.$refs.menu.setCheckedKeys([]); this.$refs.menu.setCheckedKeys([]);
} }
this.menuExpand = false, (this.menuExpand = false),
this.menuNodeAll = false, (this.menuNodeAll = false),
this.deptExpand = true, (this.deptExpand = true),
this.deptNodeAll = false, (this.deptNodeAll = false),
this.form = { (this.form = {
roleId: undefined, roleId: undefined,
roleName: undefined, roleName: undefined,
roleKey: undefined, roleKey: undefined,
@ -433,8 +574,9 @@ export default {
deptIds: [], deptIds: [],
menuCheckStrictly: true, menuCheckStrictly: true,
deptCheckStrictly: true, deptCheckStrictly: true,
remark: undefined remark: undefined,
}; clientType: 0,
});
this.resetForm("form"); this.resetForm("form");
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
@ -450,9 +592,9 @@ export default {
}, },
// //
handleSelectionChange(selection) { handleSelectionChange(selection) {
this.ids = selection.map(item => item.roleId) this.ids = selection.map((item) => item.roleId);
this.single = selection.length!=1 this.single = selection.length != 1;
this.multiple = !selection.length this.multiple = !selection.length;
}, },
// //
handleCommand(command, row) { handleCommand(command, row) {
@ -469,12 +611,12 @@ export default {
}, },
// / // /
handleCheckedTreeExpand(value, type) { handleCheckedTreeExpand(value, type) {
if (type == 'menu') { if (type == "menu") {
let treeList = this.menuOptions; let treeList = this.menuOptions;
for (let i = 0; i < treeList.length; i++) { for (let i = 0; i < treeList.length; i++) {
this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value; this.$refs.menu.store.nodesMap[treeList[i].id].expanded = value;
} }
} else if (type == 'dept') { } else if (type == "dept") {
let treeList = this.deptOptions; let treeList = this.deptOptions;
for (let i = 0; i < treeList.length; i++) { for (let i = 0; i < treeList.length; i++) {
this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value; this.$refs.dept.store.nodesMap[treeList[i].id].expanded = value;
@ -483,17 +625,17 @@ export default {
}, },
// / // /
handleCheckedTreeNodeAll(value, type) { handleCheckedTreeNodeAll(value, type) {
if (type == 'menu') { if (type == "menu") {
this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []); this.$refs.menu.setCheckedNodes(value ? this.menuOptions : []);
} else if (type == 'dept') { } else if (type == "dept") {
this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []); this.$refs.dept.setCheckedNodes(value ? this.deptOptions : []);
} }
}, },
// //
handleCheckedTreeConnect(value, type) { handleCheckedTreeConnect(value, type) {
if (type == 'menu') { if (type == "menu") {
this.form.menuCheckStrictly = value ? true : false; this.form.menuCheckStrictly = value ? true : false;
} else if (type == 'dept') { } else if (type == "dept") {
this.form.deptCheckStrictly = value ? true : false; this.form.deptCheckStrictly = value ? true : false;
} }
}, },
@ -507,19 +649,19 @@ export default {
/** 修改按钮操作 */ /** 修改按钮操作 */
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const roleId = row.roleId || this.ids const roleId = row.roleId || this.ids;
const roleMenu = this.getRoleMenuTreeselect(roleId); const roleMenu = this.getRoleMenuTreeselect(roleId);
getRole(roleId).then(response => { getRole(roleId).then((response) => {
this.form = response.data; this.form = response.data;
this.open = true; this.open = true;
this.$nextTick(() => { this.$nextTick(() => {
roleMenu.then(res => { roleMenu.then((res) => {
let checkedKeys = res.checkedKeys let checkedKeys = res.checkedKeys;
checkedKeys.forEach((v) => { checkedKeys.forEach((v) => {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.menu.setChecked(v, true, false); this.$refs.menu.setChecked(v, true, false);
}) });
}) });
}); });
}); });
}); });
@ -527,7 +669,7 @@ export default {
}, },
/** 选择角色权限范围触发 */ /** 选择角色权限范围触发 */
dataScopeSelectChange(value) { dataScopeSelectChange(value) {
if(value !== '2') { if (value !== "2") {
this.$refs.dept.setCheckedKeys([]); this.$refs.dept.setCheckedKeys([]);
} }
}, },
@ -535,11 +677,11 @@ export default {
handleDataScope(row) { handleDataScope(row) {
this.reset(); this.reset();
const deptTreeSelect = this.getDeptTree(row.roleId); const deptTreeSelect = this.getDeptTree(row.roleId);
getRole(row.roleId).then(response => { getRole(row.roleId).then((response) => {
this.form = response.data; this.form = response.data;
this.openDataScope = true; this.openDataScope = true;
this.$nextTick(() => { this.$nextTick(() => {
deptTreeSelect.then(res => { deptTreeSelect.then((res) => {
this.$refs.dept.setCheckedKeys(res.checkedKeys); this.$refs.dept.setCheckedKeys(res.checkedKeys);
}); });
}); });
@ -553,18 +695,18 @@ export default {
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function () { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.roleId != undefined) { if (this.form.roleId != undefined) {
this.form.menuIds = this.getMenuAllCheckedKeys(); this.form.menuIds = this.getMenuAllCheckedKeys();
updateRole(this.form).then(response => { updateRole(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
} else { } else {
this.form.menuIds = this.getMenuAllCheckedKeys(); this.form.menuIds = this.getMenuAllCheckedKeys();
addRole(this.form).then(response => { addRole(this.form).then((response) => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
@ -577,7 +719,7 @@ export default {
submitDataScope: function () { submitDataScope: function () {
if (this.form.roleId != undefined) { if (this.form.roleId != undefined) {
this.form.deptIds = this.getDeptAllCheckedKeys(); this.form.deptIds = this.getDeptAllCheckedKeys();
dataScope(this.form).then(response => { dataScope(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.openDataScope = false; this.openDataScope = false;
this.getList(); this.getList();
@ -587,19 +729,27 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const roleIds = row.roleId || this.ids; const roleIds = row.roleId || this.ids;
this.$modal.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?').then(function() { this.$modal
.confirm('是否确认删除角色编号为"' + roleIds + '"的数据项?')
.then(function () {
return delRole(roleIds); return delRole(roleIds);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
.catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('system/role/export', { this.download(
...this.queryParams "system/role/export",
}, `role_${new Date().getTime()}.xlsx`) {
} ...this.queryParams,
} },
`role_${new Date().getTime()}.xlsx`
);
},
},
}; };
</script> </script>

BIN
acupuncture-后台/南宁后台ssl-3.zip → acupuncture-后台/南宁针灸后台ssl-4.zip

Binary file not shown.
Loading…
Cancel
Save