40 changed files with 38 additions and 4697 deletions
@ -1,69 +0,0 @@ |
|||
<template> |
|||
<!-- 预警列表 --> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__role"> |
|||
<head-template head-left="预警列表" /> |
|||
<el-table |
|||
:data="dataList" |
|||
:height="tableHeight" |
|||
style="width: 100%;" |
|||
> |
|||
<el-table-column prop="patientName" label="患者姓名" header-align="center" align="center" /> |
|||
<el-table-column prop="examTime" label="检查日期" header-align="center" align="center" /> |
|||
<el-table-column prop="warnType" label="指标名称" header-align="center" align="center" /> |
|||
<el-table-column prop="" label="本次数值" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<span>OD:{{ scope.row.od }}、</span> |
|||
<span>OS:{{ scope.row.os }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="详情" header-align="center" width="500"> |
|||
<template slot-scope="scope"> |
|||
<p v-for="(item,index) in scope.row.result" :key="index" v-html="item" /> |
|||
</template> |
|||
</el-table-column> |
|||
<!-- <el-table-column label="操作" fixed="right" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<el-button |
|||
type="text" |
|||
size="small" |
|||
@click="addOrUpdateHandle(scope.row.id,scope.row)" |
|||
>{{ $t('update') }}</el-button> |
|||
<el-button |
|||
type="text" |
|||
size="small" |
|||
style="color:red" |
|||
@click="deleteHandle([scope.row.id])" |
|||
>{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> --> |
|||
</el-table> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import tableAutoHeight from '@/mixins/tableAutoHeight' |
|||
import headTemplate from '@/components/head' |
|||
export default { |
|||
components: { |
|||
headTemplate |
|||
}, |
|||
mixins: [mixinViewModule, tableAutoHeight], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/target/earlyWarning', |
|||
deleteURL: '/sys/role', |
|||
deleteIsBatch: true |
|||
}, |
|||
dataForm: { |
|||
name: '' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
</style> |
@ -1,188 +0,0 @@ |
|||
<template> |
|||
<el-dialog |
|||
class="alert-setting" |
|||
:visible.sync="visible" |
|||
width="30%" |
|||
:title="dataForm.id ? '修改预警条件':'新增预警条件'" |
|||
> |
|||
<el-form ref="dataForm" :model="dataForm" :rules="dataRule"> |
|||
<el-form-item label="指标名称:" label-width="100px" prop="name"> |
|||
<el-select v-model="dataForm.name " placeholder="请选择指标名称" clearable> |
|||
<el-option v-for="(item,index) in targetNameList " :key="index" :value="item.name" :label="item.name" @click.native="selectOptionHandle(item)" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- flag=1,较上次上升/下降,flag=0,值大于/小于 --> |
|||
<template v-if="ISFlag"> |
|||
<el-form-item label="值大于:" prop="greaterThan" label-width="100px"> |
|||
<el-input v-model="dataForm.greaterThan" placeholder="请填写值" /> |
|||
<span class="company">{{ dataForm.targetUnit }}</span> |
|||
</el-form-item> |
|||
<el-form-item label="值小于:" label-width="100px" prop="lessThan"> |
|||
<el-input v-model="dataForm.lessThan" placeholder="请填写值" /> |
|||
<span class="company">{{ dataForm.targetUnit }}</span> |
|||
</el-form-item> |
|||
</template> |
|||
<template v-else> |
|||
<el-form-item label="较上次下降:" label-width="100px" prop="lowerThan"> |
|||
<el-input v-model="dataForm.lowerThan" placeholder="请填写值" /> |
|||
</el-form-item> |
|||
<el-form-item label="较上次上升:" label-width="100px" prop="upThan"> |
|||
<el-input v-model="dataForm.upThan" up="请填写值" /> |
|||
</el-form-item> |
|||
</template> |
|||
<el-form-item label="启用" label-width="90px"> |
|||
<el-switch v-model="dataForm.status" :active-value="1" :inactive-value="0" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
export default { |
|||
props: { |
|||
targetNameList: { |
|||
type: Array, |
|||
default: () => [] |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
dataForm: { |
|||
greaterThan: '', // 值大于 |
|||
lessThan: '', // 值小于 |
|||
id: '', |
|||
status: 1, // 1:开启 0:关闭 |
|||
lowerThan: '', // 较上次下降 |
|||
upThan: '', // 较上次上升 |
|||
name: '', // 指标名称 |
|||
targetUnit: '' // 指标单位 |
|||
}, |
|||
ISFlag: true // 大于小于为true |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: '请选择指标名称', trigger: 'change' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
// 选择指标发生变化时 |
|||
selectOptionHandle(item) { |
|||
console.log(item) |
|||
// flag=1,较上次上升/下降,flag=0,值大于/小于 |
|||
this.ISFlag = item.flag === 0 |
|||
this.dataForm.targetUnit = item.targetUnit |
|||
}, |
|||
// 状态切换 |
|||
// switchHandle(e) { |
|||
// // 1:开启 0:关闭 |
|||
// console.log(e) |
|||
// this.dataForm.status = e ? 1 : 0 |
|||
// }, |
|||
// 初始化 |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm.resetFields() // 重置表单 |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/sys/target/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
this.ISFlag = res.data.flag === 0 |
|||
}).catch(() => { }) |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
console.log(this.dataForm) |
|||
this.$refs.dataForm.validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
// if (this.ISFlag && !this.dataForm.greaterThan && !this.dataForm.lessThan) { |
|||
// return this.$message.error('值必须填写一个') |
|||
// } else if (!this.ISFlag) { |
|||
// if (!this.dataForm.lowerThan && !this.dataForm.upThan) { |
|||
// return this.$message.error('值必须填写一个') |
|||
// } else if (this.dataForm.lowerThan && this.dataForm.upThan) { |
|||
// return this.$message.error('值只能填写一个') |
|||
// } |
|||
// } |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/target', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }) |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss"> |
|||
.alert-setting { |
|||
.company { |
|||
display: inline-block; |
|||
width: 60px; |
|||
padding-left: 5px; |
|||
} |
|||
.el-form-item__content { |
|||
display: flex; |
|||
} |
|||
.el-dialog__header { |
|||
margin-bottom:12px |
|||
} |
|||
.el-dialog__body { |
|||
padding-right: 30px; |
|||
} |
|||
.formItemOne .el-form-item__content { |
|||
display: flex; |
|||
} |
|||
.el-date-editor.el-input, .el-date-editor.el-input__inner{ |
|||
width: 100%; |
|||
} |
|||
.el-select{ |
|||
display: block; |
|||
width: 100%; |
|||
padding-right: 50px; |
|||
} |
|||
.el-input-number { |
|||
display: block; |
|||
width: 100%; |
|||
} |
|||
.el-switch { |
|||
line-height: 40px; |
|||
display: block; |
|||
} |
|||
} |
|||
</style> |
@ -1,104 +0,0 @@ |
|||
<template> |
|||
<div class="charge-management"> |
|||
<!-- 模板列表 --> |
|||
<head-template head-left="预警设置"> |
|||
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle()">新增</el-button> |
|||
</head-template> |
|||
<!-- 模板内容 --> |
|||
<el-table ref="multipleTable" :data="dataList" tooltip-effect="dark" style="width: 100%" :height="tableHeight"> |
|||
<el-table-column label="状态"> |
|||
<template slot-scope="scope"> |
|||
<!-- 1:开启 0:关闭 --> |
|||
<el-switch :value="scope.row.status == 1 ? true : false" @change="switchHandle(scope.row,$event)" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="指标名称"> |
|||
<template slot-scope="scope"> |
|||
<span>{{ scope.row.name }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="content" label="条件" /> |
|||
<el-table-column prop="operation" label="操作"> |
|||
<template slot-scope="scope"> |
|||
<span style="color: #1890ff; padding-right: 8px" class="details" @click="addOrUpdateHandle(scope.row.id,'')">修改</span> |
|||
<span style="color: #ff4d4f" class="delete" @click="deleteHandle(scope.row.id)">删除</span> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :target-name-list="targetNameList" @refreshDataList="getDataList" /> |
|||
<!-- <el-pagination background layout="prev, pager, next" :total="total" @current-change="pageCurrentChangeHandle" /> --> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import headTemplate from '@/components/head' |
|||
import addOrUpdate from './add-or-update.vue' |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import tableAutoHeight from '@/mixins/tableAutoHeight' |
|||
export default { |
|||
components: { |
|||
headTemplate, |
|||
addOrUpdate |
|||
}, |
|||
mixins: [mixinViewModule, tableAutoHeight], |
|||
data() { |
|||
return { |
|||
targetNameList: [], |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/target/targetList', |
|||
deleteURL: '/sys/target' |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
this.getTargetName() |
|||
}, |
|||
methods: { |
|||
// 获取指标名称 |
|||
async getTargetName() { |
|||
const { data: res } = await this.$http.get('/sys/target/selectTarget') |
|||
if (res.code === 0) { |
|||
this.targetNameList = res.data |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
}, |
|||
// 修改预警状态 |
|||
async switchHandle(scopeRow, e) { |
|||
console.log(scopeRow, e) |
|||
// 1:开启 0:关闭 |
|||
const { data: res } = await this.$http.post('/sys/target/switchStatus', { |
|||
id: scopeRow.id, |
|||
status: e === false ? 0 : 1 |
|||
}) |
|||
if (res.code === 0) { |
|||
this.getDataListInitial() |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.charge-management { |
|||
background: #fff; |
|||
padding: 20px; |
|||
min-height: calc(calc(100vh - 50px - 30px) - 2px); |
|||
.defaultButton { |
|||
display: inline-block; |
|||
border: 1px solid #1E79FF; |
|||
color: #1E79FF; |
|||
font-size: 12px; |
|||
padding: 0 10px; |
|||
border-radius: 16px; |
|||
margin-left: 10px; |
|||
} |
|||
.details, |
|||
.delete { |
|||
cursor: pointer; |
|||
} |
|||
.el-icon-more { |
|||
margin-left: 6px; |
|||
} |
|||
} |
|||
</style> |
@ -1,5 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view /> |
|||
</div> |
|||
</template> |
@ -1,5 +0,0 @@ |
|||
<template> |
|||
<div> |
|||
<router-view /> |
|||
</div> |
|||
</template> |
@ -1,113 +0,0 @@ |
|||
<template> |
|||
<el-dialog class="add-edit-centre" :visible.sync="visible" :title="!dataForm.id ? '新增宣教' : '修改宣教'" @close="closeDialog"> |
|||
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="auto" @keyup.enter.native="dataFormSubmitHandle()"> |
|||
<el-form-item prop="node" label="状态节点"> |
|||
<el-input v-model="dataForm.node" placeholder="请输入状态节点" /> |
|||
</el-form-item> |
|||
<el-form-item prop="url" label="url"> |
|||
<el-input v-model="dataForm.url" placeholder="请输入URL" /> |
|||
</el-form-item> |
|||
<el-form-item prop="title" label="名称"> |
|||
<el-input v-model="dataForm.title" placeholder="请输入名称" /> |
|||
</el-form-item> |
|||
<el-form-item prop="remark" label="备注"> |
|||
<el-input v-model="dataForm.remark" placeholder="请输入备注" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
export default { |
|||
props: { |
|||
}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
dataForm: { |
|||
id: '', |
|||
url: '', |
|||
node: '', |
|||
title: '', |
|||
remark: '' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
return { |
|||
node: [ |
|||
{ required: true, message: '请输入状态节点', trigger: 'blur' } |
|||
], |
|||
url: [ |
|||
{ required: true, message: '请输入URL', trigger: 'blur' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm.resetFields() |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/preach/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
}).catch(() => {}) |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs.dataForm.validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/preach', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }), |
|||
|
|||
closeDialog() { |
|||
this.$emit('closeDialog') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss"> |
|||
.add-edit-centre{ |
|||
.el-dialog__header { |
|||
margin-bottom:12px |
|||
} |
|||
.el-select { |
|||
display: block; |
|||
} |
|||
} |
|||
</style> |
@ -1,96 +0,0 @@ |
|||
<template> |
|||
<!-- 通知机制 --> |
|||
<el-card shadow="never" class="aui-card--fill propaganda"> |
|||
<div class="mod-sys__role"> |
|||
<head-template head-left="通知机制"> |
|||
<el-button size="small" @click="enterHandle">平台入口</el-button> |
|||
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle()">新增</el-button> |
|||
</head-template> |
|||
<el-table |
|||
v-loading="dataListLoading" |
|||
:data="dataList" |
|||
:height="tableHeight" |
|||
style="width: 100%;" |
|||
@selection-change="dataListSelectionChangeHandle" |
|||
@sort-change="dataListSortChangeHandle" |
|||
> |
|||
<!-- <el-table-column type="selection" header-align="center" align="center" width="50" /> --> |
|||
<el-table-column prop="node" label="状态节点" header-align="center" align="center" /> |
|||
<el-table-column prop="title" label="名称" header-align="center" align="center" /> |
|||
<el-table-column prop="url" label="URL" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<span class="url-span" @click="URLEnterHandle(scope.row)"> {{ scope.row.url }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="updateDate" label="修改时间" header-align="center" align="center" /> |
|||
<el-table-column prop="remark" label="备注" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.remark ? scope.row.remark : '-' }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="operation" label="操作" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<span style="color: #1890ff; padding-right: 8px" class="button-span" @click="addOrUpdateHandle(scope.row.id,scope.row)">编辑</span> |
|||
<span style="color: #ff4d4f;" class="button-span" @click="deleteHandle(scope.row.id)">删除</span> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination background layout="prev, pager, next" :total="total" @current-change="pageCurrentChangeHandle" /> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-propaganda v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" @closeDialog="addOrUpdateVisible=false" /> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import addPropaganda from './add-propaganda.vue' |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import tableAutoHeight from '@/mixins/tableAutoHeight' |
|||
import headTemplate from '@/components/head' |
|||
export default { |
|||
components: { |
|||
addPropaganda, |
|||
headTemplate |
|||
}, |
|||
mixins: [mixinViewModule, tableAutoHeight], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/preach', |
|||
deleteURL: '/preach', |
|||
deleteIsBatch: true, |
|||
getDataListIsPage: false |
|||
}, |
|||
dataForm: { |
|||
name: '' |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
// URL入口 |
|||
enterHandle() { |
|||
window.open('https://mp.weixin.qq.com/') |
|||
}, |
|||
// 链接跳转 |
|||
URLEnterHandle(scopeRow) { |
|||
window.open(scopeRow.url) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.propaganda { |
|||
.url-span { |
|||
white-space: nowrap; // 段落不换行 |
|||
text-overflow: ellipsis; |
|||
overflow: hidden; |
|||
} |
|||
.url-span:hover { |
|||
color: #1e79ff; |
|||
cursor: pointer; |
|||
} |
|||
.button-span { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
</style> |
@ -1,158 +0,0 @@ |
|||
<template> |
|||
<!-- 宣教统计 --> |
|||
<div class="statistics"> |
|||
<template v-if="isShowPatient"> |
|||
<div class="statistics-head"> |
|||
<el-form :inline="true" :model="dataForm" class="demo-form-inline" @keyup.enter.native="getDataListInitial()"> |
|||
<el-form-item label="患者ID:"> |
|||
<el-input v-model="dataForm.patientId" size="small" clearable placeholder="患者ID" @clear="getDataListInitial()" /> |
|||
</el-form-item> |
|||
<el-form-item label="患者姓名:"> |
|||
<el-input v-model="dataForm.patientName" placeholder="患者姓名" size="small" clearable @clear="getDataListInitial()" /> |
|||
</el-form-item> |
|||
<el-form-item label="阅读进度:"> |
|||
<el-select v-model="dataForm.readProgress" clearable placeholder="请选择阅读进度" @change="getDataListInitial()"> |
|||
<el-option v-for="(item,index) in readProgressList" :key="index" :label="item.name" :value="item.value" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item prop="dateRange" label="日期" class="form-item-date"> |
|||
<el-date-picker |
|||
v-model="dataForm.searchDate" |
|||
class="right-pick-btn" |
|||
clearable |
|||
type="date" |
|||
size="small" |
|||
value-format="yyyy-MM-dd" |
|||
placeholder="按日期查询" |
|||
@change="getDataListInitial()" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item style="flex:1"> |
|||
<el-button type="primary" icon="el-icon-search" size="small" @click="getDataListInitial()">查询</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</div> |
|||
<div class="statistics-content"> |
|||
<el-table |
|||
ref="multipleTable" |
|||
:data="dataList" |
|||
:height="tableHeight" |
|||
tooltip-effect="dark" |
|||
style="width: 100%" |
|||
> |
|||
<el-table-column prop="patientId" label="患者ID " header-align="center" align="center" /> |
|||
<el-table-column prop="patientName" label="患者姓名" header-align="center" align="center" /> |
|||
<el-table-column prop="articleName" label="文章名称" header-align="center" align="center" /> |
|||
<el-table-column label="阅读进度"> |
|||
<template slot-scope="scope"> |
|||
<el-progress :percentage="Number(scope.row.rate)" /> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination background layout="total,prev, pager, next" :total="total" :current-page.sync="page" @current-change="pageCurrentChangeHandle" /> |
|||
</div></template> |
|||
<router-view v-else /> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import tableAutoHeight from '@/mixins/tableAutoHeight' |
|||
import { dateFilterTwo } from '@/filters/index.js' |
|||
export default { |
|||
components: { |
|||
}, |
|||
mixins: [mixinViewModule, tableAutoHeight], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/propagation/page', |
|||
getDataListIsPage: true, |
|||
createdIsNeed: false |
|||
}, |
|||
nextVisitTime: [], |
|||
isShowPatient: true, |
|||
detailViewVisible: false, |
|||
dataForm: { |
|||
patientId: '', |
|||
patientName: '', |
|||
readProgress: '', |
|||
searchDate: '' |
|||
}, |
|||
doctorNameList: [], |
|||
currentTableList: [], |
|||
patientIdNumber: '', |
|||
detailId: '', |
|||
readProgressList: [{ |
|||
value: 0, |
|||
name: '未开始' |
|||
}, { |
|||
value: 1, |
|||
name: '阅读中' |
|||
}, { |
|||
value: 2, |
|||
name: '已完成' |
|||
}] |
|||
} |
|||
}, |
|||
created() { |
|||
this.dataForm.searchDate = dateFilterTwo(this.$moment().format('L')) |
|||
this.getDataList() |
|||
}, |
|||
methods: { |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.statistics { |
|||
.statistics-head, |
|||
.statistics-content { |
|||
background: #fff; |
|||
.head { |
|||
padding-bottom: 10px; |
|||
} |
|||
} |
|||
.statistics-content { |
|||
padding: 16px; |
|||
margin-bottom: 45px; |
|||
} |
|||
.statistics-head { |
|||
margin-bottom: 16px; |
|||
padding: 10px 16px; |
|||
} |
|||
.operation-delete, |
|||
.operation-details { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
</style> |
|||
<style lang="scss"> |
|||
.statistics { |
|||
.statistics-head { |
|||
.el-form { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
} |
|||
.el-form-item { |
|||
display: flex; |
|||
} |
|||
.el-form-item__label { |
|||
min-width: 75px; |
|||
} |
|||
.el-form-item { |
|||
margin-bottom: 0; |
|||
width: 25%; |
|||
} |
|||
.el-form-item__content, |
|||
.el-select, |
|||
.el-range-editor--small.el-input__inner { |
|||
width: 100%; |
|||
} |
|||
.form-item-date .el-form-item__content { |
|||
min-width: 180px; |
|||
} |
|||
} |
|||
.el-select { |
|||
width: 100%; |
|||
} |
|||
} |
|||
</style> |
@ -1,197 +0,0 @@ |
|||
<template> |
|||
<el-dialog |
|||
:visible.sync="visible" |
|||
:title="dataForm.title||(!dataForm.id ? $t('add') : $t('update'))" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
> |
|||
<el-form |
|||
ref="dataForm1" |
|||
class="wsInfo" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
label-width="auto" |
|||
@submit.native.prevent |
|||
@keyup.enter.native="initBaseInfo()" |
|||
> |
|||
<!-- webservice地址 --> |
|||
<el-form-item prop="webServiceUrl" :label="'webservice地址'"> |
|||
<el-input v-model="dataForm.webServiceUrl" :placeholder="'输入webservice地址配置'" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-form ref="dataForm2" class="baseInfo" :model="dataForm" :rules="dataRule" label-width="auto" @keyup.enter.native="dataFormSubmitHandle()"> |
|||
<!-- 分中心名称 --> |
|||
<el-form-item prop="name" :label="'分中心名称'"> |
|||
<el-input v-model="dataForm.name" :placeholder="'分中心名称'" /> |
|||
</el-form-item> |
|||
<!-- 分中心地址 --> |
|||
<el-form-item prop="regionList" :label="'分中心地址'"> |
|||
<region-tree v-model="dataForm.regionList" /> |
|||
</el-form-item> |
|||
<!-- 详细地址 --> |
|||
<el-form-item prop="address" :label="'详细地址'"> |
|||
<el-input v-model="dataForm.address" :placeholder="'详细地址'" /> |
|||
</el-form-item> |
|||
<!-- 组织机构代码 --> |
|||
<el-form-item prop="organizationCode" :label="'组织机构代码'"> |
|||
<el-input v-model="dataForm.organizationCode" :placeholder="'组织机构代码'" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
import regionTree from '@/components/region-tree' |
|||
export default { |
|||
components: { |
|||
regionTree |
|||
}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
deptList: [], |
|||
deptListVisible: false, |
|||
dataForm: { |
|||
id: '', |
|||
webServiceUrl: '', |
|||
name: '', |
|||
regionList: [], // [130000, 130100, 130104], |
|||
provinceId: 0, |
|||
cityId: 0, |
|||
areaId: 0, |
|||
address: '', |
|||
organizationCode: '' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
var validateTree = (rule, value, callback) => { |
|||
if (this.dataForm.regionList.length === 0) { |
|||
return callback(new Error('请选择地区')) |
|||
} |
|||
callback() |
|||
} |
|||
return { |
|||
webServiceUrl: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
name: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
regionList: [ |
|||
{ required: true, validator: validateTree, trigger: 'change' } |
|||
], |
|||
address: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
organizationCode: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
'dataForm.regionList': { |
|||
handler(newValue, oldValue) { |
|||
if (newValue && newValue.length > 0) { |
|||
this.dataForm.provinceId = newValue[0] || '' |
|||
this.dataForm.cityId = newValue[1] || '' |
|||
this.dataForm.areaId = newValue[2] || '' |
|||
} |
|||
}, |
|||
deep: true |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm1.resetFields() |
|||
this.$refs.dataForm2.resetFields() |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}, |
|||
initBaseInfo() {}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/sys/dept/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
this.dataForm.regionList = [ |
|||
this.dataForm.provinceId || null, |
|||
this.dataForm.cityId || null, |
|||
this.dataForm.areaId || null |
|||
] |
|||
}).catch(() => {}) |
|||
}, |
|||
// 上级部门树, 选中 |
|||
deptListTreeCurrentChangeHandle(data) { |
|||
this.dataForm.pid = data.id |
|||
this.dataForm.parentName = data.name |
|||
this.deptListVisible = false |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs.dataForm1.validate((valid1) => { |
|||
if (!valid1) { |
|||
return false |
|||
} |
|||
this.$refs.dataForm2.validate((valid2) => { |
|||
if (!valid2) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/dept', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }) |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.mod-sys__dept { |
|||
.dept-list { |
|||
.el-input__inner, |
|||
.el-input__suffix { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.wsInfo{ |
|||
padding:0 20px; |
|||
} |
|||
|
|||
.baseInfo{ |
|||
padding: 20px; |
|||
// background: rgba(205,205,205,0.18000000715255737); |
|||
border-radius: 4px; |
|||
// border: 1px solid #C2C2C2 !important; |
|||
} |
|||
</style> |
@ -1,83 +0,0 @@ |
|||
<template> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__dept"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:dept:save')" type="primary" @click="addOrUpdateHandle(null,null,'添加分中心')">{{ $t('add') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table v-loading="dataListLoading" :data="dataList" row-key="id" border style="width: 100%;"> |
|||
<!-- 名称 --> |
|||
<el-table-column prop="name" :label="$t('dept.name')" header-align="center" min-width="150" /> |
|||
<!-- 地址 --> |
|||
<el-table-column prop="address" :label="'地址'" header-align="center" width="300" :show-overflow-tooltip="true" /> |
|||
<!-- 管理员 --> |
|||
<el-table-column prop="deptAdminUser" :label="'管理员'" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.deptAdminUser|filterList }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- 课题数量 --> |
|||
<el-table-column prop="projectCount" :label="'课题数量'" sortable="custom" header-align="center" align="center" width="120"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.projectCount +'个' }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- 研究员数量 --> |
|||
<el-table-column prop="researcherCount" :label="'研究员数量'" sortable="custom" header-align="center" align="center" width="120"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.researcherCount +'人' }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- 创建时间 --> |
|||
<el-table-column :label="$t('handle')" header-align="center" align="center" width="150"> |
|||
<template slot-scope="scope"> |
|||
<el-button |
|||
v-if="$hasPermission('sys:dept:update')" |
|||
type="text" |
|||
size="small" |
|||
@click="addOrUpdateHandle(scope.row.id,null,'修改分中心信息')" |
|||
>{{ $t('update') }}</el-button> |
|||
<el-button |
|||
v-if="$hasPermission('sys:dept:delete')" |
|||
type="text" |
|||
size="small" |
|||
style="color:red" |
|||
@click="deleteHandle(scope.row.id)" |
|||
>{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" /> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import AddOrUpdate from './depart-add-or-update' |
|||
export default { |
|||
components: { |
|||
AddOrUpdate |
|||
}, |
|||
filters: { |
|||
filterList(arr) { |
|||
const result = [] |
|||
arr.forEach(item => { |
|||
result.push(item.userName) |
|||
}) |
|||
return result.join(',') |
|||
} |
|||
}, |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/dept/list', |
|||
deleteURL: '/sys/dept' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,72 +0,0 @@ |
|||
<template> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__log-error"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<el-form-item> |
|||
<el-button type="info" @click="exportHandle()">{{ $t('export') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table v-loading="dataListLoading" :data="dataList" border style="width: 100%;" @sort-change="dataListSortChangeHandle"> |
|||
<el-table-column prop="requestUri" :label="$t('logError.requestUri')" header-align="center" align="center" /> |
|||
<el-table-column prop="requestMethod" :label="$t('logError.requestMethod')" header-align="center" align="center" width="90" /> |
|||
<el-table-column prop="requestParams" :label="$t('logError.requestParams')" header-align="center" align="center" width="150" :show-overflow-tooltip="true" /> |
|||
<el-table-column prop="ip" :label="$t('logError.ip')" header-align="center" align="center" width="125" /> |
|||
<el-table-column prop="userAgent" :label="$t('logError.userAgent')" header-align="center" align="center" width="150" :show-overflow-tooltip="true" /> |
|||
<el-table-column prop="createDate" :label="$t('logError.createDate')" sortable="custom" header-align="center" align="center" width="180" /> |
|||
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|||
<template slot-scope="scope"> |
|||
<el-button type="text" size="small" @click="infoHandle(scope.row.errorInfo)">{{ $t('logError.errorInfo') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
:current-page="page" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="limit" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
@size-change="pageSizeChangeHandle" |
|||
@current-change="pageCurrentChangeHandle" |
|||
/> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
export default { |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/log/error/page', |
|||
getDataListIsPage: true, |
|||
exportURL: '/sys/log/error/export' |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
// 异常信息 |
|||
infoHandle(info) { |
|||
this.$alert(info, this.$t('logError.errorInfo'), { |
|||
customClass: 'mod-sys__log-error-view-info' |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.mod-sys__log-error { |
|||
&-view-info { |
|||
width: 80%; |
|||
height: calc(100% - 100px); |
|||
|
|||
.el-message-box__content{ |
|||
overflow: auto; |
|||
height: calc(100% - 90px); |
|||
} |
|||
} |
|||
} |
|||
|
|||
</style> |
@ -1,71 +0,0 @@ |
|||
<template> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__log-login"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<el-form-item> |
|||
<el-input v-model="dataForm.creatorName" :placeholder="$t('logLogin.creatorName')" clearable /> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-select v-model="dataForm.status" :placeholder="$t('logLogin.status')" clearable> |
|||
<el-option :label="$t('logLogin.status0')" :value="0" /> |
|||
<el-option :label="$t('logLogin.status1')" :value="1" /> |
|||
<el-option :label="$t('logLogin.status2')" :value="2" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button @click="getDataList()">{{ $t('query') }}</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="info" @click="exportHandle()">{{ $t('export') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table v-loading="dataListLoading" :data="dataList" border style="width: 100%;" @sort-change="dataListSortChangeHandle"> |
|||
<el-table-column prop="creatorName" :label="$t('logLogin.creatorName')" header-align="center" align="center" /> |
|||
<el-table-column prop="operation" :label="$t('logLogin.operation')" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.operation === 0 ? $t('logLogin.operation0') : $t('logLogin.operation1') }} |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="status" :label="$t('logLogin.status')" sortable="custom" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.status === 0" size="small" type="danger">{{ $t('logLogin.status0') }}</el-tag> |
|||
<el-tag v-else-if="scope.row.status === 1" size="small" type="success">{{ $t('logLogin.status1') }}</el-tag> |
|||
<el-tag v-else size="small" type="warning">{{ $t('logLogin.status2') }}</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="ip" :label="$t('logLogin.ip')" header-align="center" align="center" /> |
|||
<el-table-column prop="userAgent" :label="$t('logLogin.userAgent')" header-align="center" align="center" width="150" :show-overflow-tooltip="true" /> |
|||
<el-table-column prop="createDate" :label="$t('logLogin.createDate')" sortable="custom" header-align="center" align="center" width="180" /> |
|||
</el-table> |
|||
<el-pagination |
|||
:current-page="page" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="limit" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
@size-change="pageSizeChangeHandle" |
|||
@current-change="pageCurrentChangeHandle" |
|||
/> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
export default { |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/log/login/page', |
|||
getDataListIsPage: true, |
|||
exportURL: '/sys/log/login/export' |
|||
}, |
|||
dataForm: { |
|||
creatorName: '', |
|||
status: '' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,144 +0,0 @@ |
|||
<template> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__log-operation"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<!-- 用户名 --> |
|||
<el-form-item> |
|||
<el-input v-model="dataForm.username" :placeholder="'用户名'" clearable style="width:120px;" /> |
|||
</el-form-item> |
|||
<!-- 用户操作 --> |
|||
<el-form-item> |
|||
<el-input v-model="dataForm.action" :placeholder="'用户操作'" clearable style="width:250px;" /> |
|||
</el-form-item> |
|||
<!-- 请求方式 --> |
|||
<el-form-item> |
|||
<el-select v-model="dataForm.method" :placeholder="'请求方式'" clearable style="width:120px;"> |
|||
<el-option label="GET" value="GET" /> |
|||
<el-option label="POST" value="POST" /> |
|||
<el-option label="PUT" value="PUT" /> |
|||
<el-option label="DELETE" value="DELETE" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- 状态 --> |
|||
<el-form-item> |
|||
<el-select v-model="dataForm.status" :placeholder="$t('logOperation.status')" clearable style="width:120px;"> |
|||
<el-option :label="$t('logOperation.status0')" :value="0" /> |
|||
<el-option :label="$t('logOperation.status1')" :value="1" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- IP地址 --> |
|||
<el-form-item> |
|||
<el-input v-model="dataForm.ip" :placeholder="'IP地址'" clearable style="width:160px;" /> |
|||
</el-form-item> |
|||
<!-- 课题ID --> |
|||
<el-form-item> |
|||
<el-input v-model="tempProjectId" :placeholder="'课题ID'" clearable style="width:160px;" /> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button @click="getDataList()">{{ $t('query') }}</el-button> |
|||
</el-form-item> |
|||
<!-- <el-form-item><el-button type="info" @click="exportHandle()">{{ $t('export') }}</el-button></el-form-item> --> |
|||
</el-form> |
|||
<el-table v-loading="dataListLoading" :data="dataList" border style="width: 100%;" @sort-change="dataListSortChangeHandle"> |
|||
<!-- 展开 --> |
|||
<el-table-column type="expand"> |
|||
<template slot-scope="scope"> |
|||
<el-form label-width="90px" class="expand-form"> |
|||
<el-form-item :label="$t('logOperation.creatorName')"> |
|||
<span>{{ scope.row.creatorName }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.operation')"> |
|||
<span>{{ scope.row.operation }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.requestUri')"> |
|||
<span>{{ scope.row.requestUri }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.requestMethod')"> |
|||
<span>{{ scope.row.requestMethod }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.requestParams')"> |
|||
<span>{{ scope.row.requestParams }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.requestTime')"> |
|||
<span>{{ `${scope.row.requestTime}ms` }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.status')"> |
|||
<el-tag v-if="scope.row.status === 0" size="small" type="danger">{{ $t('logOperation.status0') }}</el-tag> |
|||
<el-tag v-else size="small" type="success">{{ $t('logOperation.status1') }}</el-tag> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.ip')"> |
|||
<span>{{ scope.row.ip }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.userAgent')"> |
|||
<span>{{ scope.row.userAgent }}</span> |
|||
</el-form-item> |
|||
<el-form-item :label="$t('logOperation.createDate')"> |
|||
<span>{{ scope.row.createDate }}</span> |
|||
</el-form-item> |
|||
</el-form> |
|||
</template> |
|||
</el-table-column> |
|||
|
|||
<el-table-column prop="creatorName" :label="$t('logOperation.creatorName')" header-align="center" align="center" width="120" /> |
|||
<el-table-column prop="operation" :label="$t('logOperation.operation')" /> |
|||
<el-table-column prop="requestUri" :label="$t('logOperation.requestUri')" /> |
|||
<el-table-column prop="requestMethod" :label="$t('logOperation.requestMethod')" header-align="center" align="center" width="80" /> |
|||
<!-- <el-table-column prop="requestParams" :label="$t('logOperation.requestParams')" width="150" :show-overflow-tooltip="true" /> --> |
|||
<el-table-column prop="requestTime" :label="'耗时'" sortable="custom" header-align="center" width="80"> |
|||
<template slot-scope="scope"> |
|||
{{ `${scope.row.requestTime}ms` }} |
|||
</template> |
|||
</el-table-column> |
|||
<!--<el-table-column prop="status" :label="$t('logOperation.status')" sortable="custom" > |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.status === 0" size="small" type="danger">{{ $t('logOperation.status0') }}</el-tag> |
|||
<el-tag v-else size="small" type="success">{{ $t('logOperation.status1') }}</el-tag> |
|||
</template> |
|||
</el-table-column>--> |
|||
<el-table-column prop="ip" :label="$t('logOperation.ip')" width="125" header-align="center" /> |
|||
<!-- <el-table-column prop="userAgent" :label="$t('logOperation.userAgent')" width="150" :show-overflow-tooltip="true" /> --> |
|||
<el-table-column prop="createDate" :label="$t('logOperation.createDate')" header-align="center" sortable="custom" width="160" /> |
|||
</el-table> |
|||
<!-- 分页 --> |
|||
<el-pagination |
|||
:current-page="page" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="limit" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
@size-change="pageSizeChangeHandle" |
|||
@current-change="pageCurrentChangeHandle" |
|||
/> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
export default { |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/log/operation/page', |
|||
getDataListIsPage: true |
|||
// exportURL: '/sys/log/operation/export' |
|||
}, |
|||
tempProjectId: '', |
|||
dataForm: { |
|||
status: '', |
|||
username: '', |
|||
action: '', |
|||
method: '', |
|||
ip: '', |
|||
projectId: null |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
tempProjectId(val) { |
|||
this.dataForm.projectId = !val ? null : val |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,237 +0,0 @@ |
|||
<template> |
|||
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false"> |
|||
<el-form |
|||
ref="dataForm" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
label-width="auto" |
|||
@submit.native.prevent |
|||
@keyup.enter.native="dataFormSubmitHandle()" |
|||
> |
|||
<!-- 类型 --> |
|||
<el-form-item prop="type" :label="$t('menu.type')"> |
|||
<el-radio-group v-model="dataForm.type" :disabled="!!dataForm.id"> |
|||
<el-radio-button :label="0">{{ $t('menu.type0') }}</el-radio-button> |
|||
<el-radio-button :label="1">{{ $t('menu.type1') }}</el-radio-button> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
<!-- 名称 --> |
|||
<el-form-item prop="name" :label="$t('menu.name')"> |
|||
<el-input v-model="dataForm.name" :placeholder="$t('menu.name')" /> |
|||
</el-form-item> |
|||
<!-- 上级菜单 --> |
|||
<el-form-item prop="parentName" :label="$t('menu.parentName')" class="menu-list"> |
|||
<el-popover ref="menuListPopover" v-model="menuListVisible" placement="bottom-start" trigger="click"> |
|||
<el-tree |
|||
ref="menuListTree" |
|||
:data="menuList" |
|||
:props="{ label: 'name', children: 'children' }" |
|||
node-key="id" |
|||
:highlight-current="true" |
|||
:expand-on-click-node="false" |
|||
accordion |
|||
@current-change="menuListTreeCurrentChangeHandle" |
|||
/> |
|||
</el-popover> |
|||
<el-input v-model="dataForm.parentName" v-popover:menuListPopover :readonly="true" :placeholder="$t('menu.parentName')"> |
|||
<i v-if="dataForm.pid !== '0'" slot="suffix" class="el-icon-circle-close el-input__icon" @click.stop="deptListTreeSetDefaultHandle()" /> |
|||
</el-input> |
|||
</el-form-item> |
|||
<!-- 排序 --> |
|||
<el-form-item prop="sort" :label="$t('menu.sort')"> |
|||
<el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="$t('menu.sort')" /> |
|||
</el-form-item> |
|||
<!-- 授权标识 --> |
|||
<el-form-item prop="permissions" :label="$t('menu.permissions')"> |
|||
<el-input v-model="dataForm.permissions" :placeholder="$t('menu.permissionsTips')" /> |
|||
</el-form-item> |
|||
<!-- 路由 --> |
|||
<el-form-item v-if="dataForm.type === 0" prop="url" :label="$t('menu.url')"> |
|||
<el-input v-model="dataForm.url" :placeholder="$t('menu.url')" /> |
|||
</el-form-item> |
|||
<!-- 图标 --> |
|||
<el-form-item v-if="dataForm.type === 0" prop="icon" :label="$t('menu.icon')" class="icon-list"> |
|||
<el-popover ref="iconListPopover" v-model="iconListVisible" placement="bottom-start" trigger="click" popper-class="mod-sys__menu-icon-popover"> |
|||
<div class="mod-sys__menu-icon-inner"> |
|||
<div class="mod-sys__menu-icon-list"> |
|||
<el-button |
|||
v-for="(item, index) in iconList" |
|||
:key="index" |
|||
:class="{ 'is-active': dataForm.icon === item }" |
|||
@click="iconListCurrentChangeHandle(item)" |
|||
> |
|||
<svg class="icon-svg" aria-hidden="true"><use :xlink:href="`#${item}`" /></svg> |
|||
</el-button> |
|||
</div> |
|||
</div> |
|||
</el-popover> |
|||
<el-input v-model="dataForm.icon" v-popover:iconListPopover :readonly="true" :placeholder="$t('menu.icon')" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
import { getIconList } from '@/utils' |
|||
export default { |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
menuList: [], |
|||
menuListVisible: false, |
|||
iconList: [], |
|||
iconListVisible: false, |
|||
dataForm: { |
|||
id: '', |
|||
menuType: 0, |
|||
type: 0, |
|||
name: '', |
|||
pid: '0', |
|||
parentName: '', |
|||
url: '', |
|||
permissions: '', |
|||
sort: 0, |
|||
icon: '' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
parentName: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'change' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
'dataForm.type'(val) { |
|||
this.$refs['dataForm'].clearValidate() |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs['dataForm'].resetFields() |
|||
this.iconList = getIconList() |
|||
this.dataForm.parentName = this.$t('menu.parentNameDefault') |
|||
this.getMenuList().then(() => { |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}) |
|||
}, |
|||
// 获取菜单列表 |
|||
getMenuList() { |
|||
return this.$http.get('/sys/menu/getMenuList?menuType=0&withButton=2').then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.menuList = res.data |
|||
}).catch(() => {}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/sys/menu/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
if (this.dataForm.pid === '0') { |
|||
return this.deptListTreeSetDefaultHandle() |
|||
} |
|||
this.$refs.menuListTree.setCurrentKey(this.dataForm.pid) |
|||
}).catch(() => {}) |
|||
}, |
|||
// 上级菜单树, 设置默认值 |
|||
deptListTreeSetDefaultHandle() { |
|||
this.dataForm.pid = '0' |
|||
this.dataForm.parentName = this.$t('menu.parentNameDefault') |
|||
}, |
|||
// 上级菜单树, 选中 |
|||
menuListTreeCurrentChangeHandle(data) { |
|||
this.dataForm.pid = data.id |
|||
this.dataForm.parentName = data.name |
|||
this.menuListVisible = false |
|||
}, |
|||
// 图标, 选中 |
|||
iconListCurrentChangeHandle(icon) { |
|||
this.dataForm.icon = icon |
|||
this.iconListVisible = false |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs['dataForm'].validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/menu', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { 'leading': true, 'trailing': false }) |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.mod-sys__menu { |
|||
.menu-list, |
|||
.icon-list { |
|||
.el-input__inner, |
|||
.el-input__suffix { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
&-icon-popover { |
|||
width: 458px; |
|||
overflow: hidden; |
|||
} |
|||
&-icon-inner { |
|||
width: 478px; |
|||
max-height: 258px; |
|||
overflow-x: hidden; |
|||
overflow-y: auto; |
|||
} |
|||
&-icon-list { |
|||
width: 458px; |
|||
padding: 0; |
|||
margin: -8px 0 0 -8px; |
|||
> .el-button { |
|||
padding: 8px; |
|||
margin: 8px 0 0 8px; |
|||
> span { |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
width: 18px; |
|||
height: 18px; |
|||
font-size: 18px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,70 +0,0 @@ |
|||
<template> |
|||
<!-- 系统菜单 --> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__menu"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:menu:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table |
|||
v-loading="dataListLoading" |
|||
:data="dataList" |
|||
row-key="id" |
|||
border |
|||
style="width: 100%;" |
|||
> |
|||
<el-table-column prop="name" :label="$t('menu.name')" header-align="center" min-width="150" /> |
|||
<el-table-column prop="icon" :label="$t('menu.icon')" header-align="center" align="center" width="100"> |
|||
<template slot-scope="scope"> |
|||
<!-- <svg class="icon-svg" aria-hidden="true"><use :xlink:href="`#${scope.row.icon}`" /></svg> --> |
|||
<svg-icon :icon-class="`${scope.row.icon}`" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="type" :label="$t('menu.type')" header-align="center" align="center" width="100"> |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.type === 0" size="small">{{ $t('menu.type0') }}</el-tag> |
|||
<el-tag v-else size="small" type="info">{{ $t('menu.type1') }}</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="sort" :label="$t('menu.sort')" header-align="center" align="center" width="100" /> |
|||
<el-table-column prop="url" :label="$t('menu.url')" header-align="center" align="center" min-width="150" :show-overflow-tooltip="true" /> |
|||
<el-table-column prop="permissions" :label="$t('menu.permissions')" header-align="center" align="left" min-width="250" :show-overflow-tooltip="true" /> |
|||
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|||
<template slot-scope="scope"> |
|||
<el-button v-if="$hasPermission('sys:menu:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button> |
|||
<el-button v-if="$hasPermission('sys:menu:delete')" type="text" size="small" style="color:red" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" /> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import AddOrUpdate from './menu-dept-add-or-update' |
|||
export default { |
|||
components: { |
|||
AddOrUpdate |
|||
}, |
|||
|
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/menu/getMenuList?menuType=0', |
|||
deleteURL: '/sys/menu' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style scoped> |
|||
.svg-icon { |
|||
width: 1.5em; |
|||
height: 1.5em; |
|||
} |
|||
</style> |
@ -1,237 +0,0 @@ |
|||
<template> |
|||
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false"> |
|||
<el-form |
|||
ref="dataForm" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
label-width="auto" |
|||
@submit.native.prevent |
|||
@keyup.enter.native="dataFormSubmitHandle()" |
|||
> |
|||
<!-- 类型 --> |
|||
<el-form-item prop="type" :label="$t('menu.type')"> |
|||
<el-radio-group v-model="dataForm.type" :disabled="!!dataForm.id"> |
|||
<el-radio-button :label="0">{{ $t('menu.type0') }}</el-radio-button> |
|||
<el-radio-button :label="1">{{ $t('menu.type1') }}</el-radio-button> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
<!-- 名称 --> |
|||
<el-form-item prop="name" :label="$t('menu.name')"> |
|||
<el-input v-model="dataForm.name" :placeholder="$t('menu.name')" /> |
|||
</el-form-item> |
|||
<!-- 上级菜单 --> |
|||
<el-form-item prop="parentName" :label="$t('menu.parentName')" class="menu-list"> |
|||
<el-popover ref="menuListPopover" v-model="menuListVisible" placement="bottom-start" trigger="click"> |
|||
<el-tree |
|||
ref="menuListTree" |
|||
:data="menuList" |
|||
:props="{ label: 'name', children: 'children' }" |
|||
node-key="id" |
|||
:highlight-current="true" |
|||
:expand-on-click-node="false" |
|||
accordion |
|||
@current-change="menuListTreeCurrentChangeHandle" |
|||
/> |
|||
</el-popover> |
|||
<el-input v-model="dataForm.parentName" v-popover:menuListPopover :readonly="true" :placeholder="$t('menu.parentName')"> |
|||
<i v-if="dataForm.pid !== '0'" slot="suffix" class="el-icon-circle-close el-input__icon" @click.stop="deptListTreeSetDefaultHandle()" /> |
|||
</el-input> |
|||
</el-form-item> |
|||
<!-- 排序 --> |
|||
<el-form-item prop="sort" :label="$t('menu.sort')"> |
|||
<el-input-number v-model="dataForm.sort" controls-position="right" :min="0" :label="$t('menu.sort')" /> |
|||
</el-form-item> |
|||
<!-- 授权标识 --> |
|||
<el-form-item prop="permissions" :label="$t('menu.permissions')"> |
|||
<el-input v-model="dataForm.permissions" :placeholder="$t('menu.permissionsTips')" /> |
|||
</el-form-item> |
|||
<!-- 路由 --> |
|||
<el-form-item v-if="dataForm.type === 0" prop="url" :label="$t('menu.url')"> |
|||
<el-input v-model="dataForm.url" :placeholder="$t('menu.url')" /> |
|||
</el-form-item> |
|||
<!-- 图标 --> |
|||
<el-form-item v-if="dataForm.type === 0" prop="icon" :label="$t('menu.icon')" class="icon-list"> |
|||
<el-popover ref="iconListPopover" v-model="iconListVisible" placement="bottom-start" trigger="click" popper-class="mod-sys__menu-icon-popover"> |
|||
<div class="mod-sys__menu-icon-inner"> |
|||
<div class="mod-sys__menu-icon-list"> |
|||
<el-button |
|||
v-for="(item, index) in iconList" |
|||
:key="index" |
|||
:class="{ 'is-active': dataForm.icon === item }" |
|||
@click="iconListCurrentChangeHandle(item)" |
|||
> |
|||
<svg class="icon-svg" aria-hidden="true"><use :xlink:href="`#${item}`" /></svg> |
|||
</el-button> |
|||
</div> |
|||
</div> |
|||
</el-popover> |
|||
<el-input v-model="dataForm.icon" v-popover:iconListPopover :readonly="true" :placeholder="$t('menu.icon')" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
import { getIconList } from '@/utils' |
|||
export default { |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
menuList: [], |
|||
menuListVisible: false, |
|||
iconList: [], |
|||
iconListVisible: false, |
|||
dataForm: { |
|||
id: '', |
|||
menuType: 1, // 菜单类型 0:中心 1:课题 |
|||
type: 0, |
|||
name: '', |
|||
pid: '0', |
|||
parentName: '', |
|||
url: '', |
|||
permissions: '', |
|||
sort: 0, |
|||
icon: '' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
parentName: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'change' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
'dataForm.type'(val) { |
|||
this.$refs['dataForm'].clearValidate() |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs['dataForm'].resetFields() |
|||
this.iconList = getIconList() |
|||
this.dataForm.parentName = this.$t('menu.parentNameDefault') |
|||
this.getMenuList().then(() => { |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}) |
|||
}, |
|||
// 获取菜单列表 |
|||
getMenuList() { |
|||
return this.$http.get('/sys/menu/getMenuList?menuType=1&withButton=2').then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.menuList = res.data |
|||
}).catch(() => {}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/sys/menu/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
if (this.dataForm.pid === '0') { |
|||
return this.deptListTreeSetDefaultHandle() |
|||
} |
|||
this.$refs.menuListTree.setCurrentKey(this.dataForm.pid) |
|||
}).catch(() => {}) |
|||
}, |
|||
// 上级菜单树, 设置默认值 |
|||
deptListTreeSetDefaultHandle() { |
|||
this.dataForm.pid = '0' |
|||
this.dataForm.parentName = this.$t('menu.parentNameDefault') |
|||
}, |
|||
// 上级菜单树, 选中 |
|||
menuListTreeCurrentChangeHandle(data) { |
|||
this.dataForm.pid = data.id |
|||
this.dataForm.parentName = data.name |
|||
this.menuListVisible = false |
|||
}, |
|||
// 图标, 选中 |
|||
iconListCurrentChangeHandle(icon) { |
|||
this.dataForm.icon = icon |
|||
this.iconListVisible = false |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs['dataForm'].validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/menu', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { 'leading': true, 'trailing': false }) |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.mod-sys__menu { |
|||
.menu-list, |
|||
.icon-list { |
|||
.el-input__inner, |
|||
.el-input__suffix { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
&-icon-popover { |
|||
width: 458px; |
|||
overflow: hidden; |
|||
} |
|||
&-icon-inner { |
|||
width: 478px; |
|||
max-height: 258px; |
|||
overflow-x: hidden; |
|||
overflow-y: auto; |
|||
} |
|||
&-icon-list { |
|||
width: 458px; |
|||
padding: 0; |
|||
margin: -8px 0 0 -8px; |
|||
> .el-button { |
|||
padding: 8px; |
|||
margin: 8px 0 0 8px; |
|||
> span { |
|||
display: inline-block; |
|||
vertical-align: middle; |
|||
width: 18px; |
|||
height: 18px; |
|||
font-size: 18px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,69 +0,0 @@ |
|||
<template> |
|||
<!-- 项目(课题)菜单 --> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__menu"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:menu:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table |
|||
v-loading="dataListLoading" |
|||
:data="dataList" |
|||
row-key="id" |
|||
border |
|||
style="width: 100%;" |
|||
> |
|||
<el-table-column prop="name" :label="$t('menu.name')" header-align="center" min-width="150" /> |
|||
<el-table-column prop="icon" :label="$t('menu.icon')" header-align="center" align="center" width="100"> |
|||
<template slot-scope="scope"> |
|||
<svg-icon :icon-class="`${scope.row.icon}`" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="type" :label="$t('menu.type')" header-align="center" align="center" width="100"> |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.type === 0" size="small">{{ $t('menu.type0') }}</el-tag> |
|||
<el-tag v-else size="small" type="info">{{ $t('menu.type1') }}</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="sort" :label="$t('menu.sort')" header-align="center" align="center" width="100" /> |
|||
<el-table-column prop="url" :label="$t('menu.url')" header-align="center" align="center" min-width="150" :show-overflow-tooltip="true" /> |
|||
<el-table-column prop="permissions" :label="$t('menu.permissions')" header-align="center" align="left" min-width="250" :show-overflow-tooltip="true" /> |
|||
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|||
<template slot-scope="scope"> |
|||
<el-button v-if="$hasPermission('sys:menu:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button> |
|||
<el-button v-if="$hasPermission('sys:menu:delete')" type="text" size="small" style="color:red" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" /> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import AddOrUpdate from './menu-project-add-or-update' |
|||
export default { |
|||
components: { |
|||
AddOrUpdate |
|||
}, |
|||
|
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/menu/getMenuList?menuType=1', |
|||
deleteURL: '/sys/menu' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style scoped> |
|||
.svg-icon { |
|||
width: 1.5em; |
|||
height: 1.5em; |
|||
} |
|||
</style> |
@ -1,168 +0,0 @@ |
|||
<template> |
|||
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false"> |
|||
<el-form |
|||
ref="dataForm" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
label-width="auto" |
|||
@submit.native.prevent |
|||
@keyup.enter.native="dataFormSubmitHandle()" |
|||
> |
|||
<!-- 角色类型 --> |
|||
<el-form-item prop="roleType" :label="$t('role.type')"> |
|||
<el-radio-group v-model="dataForm.roleType" style="margin-bottom: 30px;" @change="radioChangeHandle()"> |
|||
<el-radio-button label="1">系统角色</el-radio-button> |
|||
<el-radio-button label="2">课题角色</el-radio-button> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
<el-form-item prop="name" :label="$t('role.name')"> |
|||
<el-input v-model="dataForm.name" :placeholder="$t('role.name')" /> |
|||
</el-form-item> |
|||
<el-form-item prop="remark" :label="$t('role.remark')"> |
|||
<el-input v-model="dataForm.remark" :placeholder="$t('role.remark')" /> |
|||
</el-form-item> |
|||
<el-form-item prop="menuList" :label="$t('role.menuList')"> |
|||
<el-tree |
|||
ref="menuListTree" |
|||
:data="menuList" |
|||
:props="{ label: 'name', children: 'children' }" |
|||
node-key="id" |
|||
accordion |
|||
show-checkbox |
|||
/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
// 角色类型=>菜单类型 |
|||
const typeMap = { |
|||
// 系统角色1 =》部门菜单0 |
|||
1: 0, |
|||
// 课题角色2 =》课题菜单1 |
|||
2: 1 |
|||
} |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
menuList: [], |
|||
// deptList: [], |
|||
tempMenuIdList: [], |
|||
dataForm: { |
|||
id: '', |
|||
name: '', |
|||
menuIdList: [], |
|||
deptId: '', |
|||
// deptIdList: [], |
|||
remark: '', |
|||
roleType: 1 |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
var validateTree = (rule, value, callback) => { |
|||
if (this.$refs.menuListTree.getCheckedKeys().length === 0) { return callback(new Error('请勾选菜单授权项')) } |
|||
callback() |
|||
} |
|||
return { |
|||
name: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
menuList: [ |
|||
{ required: true, validator: validateTree, trigger: 'change' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm.resetFields() |
|||
this.$refs.menuListTree.setCheckedKeys([]) |
|||
this.dataForm.roleType = this.dataForm.params.roleType || 1 |
|||
|
|||
Promise.all([ |
|||
this.getMenuList() |
|||
// ,this.getDeptList() |
|||
]).then(() => { |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}) |
|||
}, |
|||
// 获取菜单列表 |
|||
getMenuList() { |
|||
return this.$http.get(`/sys/menu/select?menuType=${typeMap[this.dataForm.roleType]}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.menuList = res.data |
|||
}).catch(() => {}) |
|||
}, |
|||
async radioChangeHandle() { |
|||
await this.getMenuList() |
|||
this.dataForm.menuIdList.forEach(item => this.$refs.menuListTree.setChecked(item, true)) |
|||
}, |
|||
// // 获取部门列表 |
|||
// getDeptList() { |
|||
// return this.$http.get('/sys/dept/list').then(({ data: res }) => { |
|||
// if (res.code !== 0) { |
|||
// return this.$message.error(res.msg) |
|||
// } |
|||
// this.deptList = res.data |
|||
// }).catch(() => {}) |
|||
// }, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/sys/role/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
this.dataForm.menuIdList.forEach(item => this.$refs.menuListTree.setChecked(item, true)) |
|||
}).catch(() => {}) |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs.dataForm.validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.dataForm.menuIdList = [ |
|||
...this.$refs.menuListTree.getHalfCheckedKeys(), |
|||
...this.$refs.menuListTree.getCheckedKeys() |
|||
] |
|||
this.dataForm.deptId = this.$store.state.user.deptId // 默认本中心部门的id |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/role', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }) |
|||
} |
|||
} |
|||
</script> |
@ -1,109 +0,0 @@ |
|||
<template> |
|||
<!-- 角色管理 --> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__role"> |
|||
<el-form :inline="true" :model="dataForm" @submit.native.prevent @keyup.enter.native="getDataList()"> |
|||
<el-form-item> |
|||
<el-input v-model="dataForm.name" :placeholder="$t('role.name')" clearable /> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button @click="getDataList()">{{ $t('query') }}</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:role:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:role:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
<el-table |
|||
v-loading="dataListLoading" |
|||
:data="dataList" |
|||
border |
|||
style="width: 100%;" |
|||
@selection-change="dataListSelectionChangeHandle" |
|||
@sort-change="dataListSortChangeHandle" |
|||
> |
|||
<el-table-column type="selection" header-align="center" align="center" width="50" :selectable="selectable" /> |
|||
<el-table-column prop="name" :label="$t('role.name')" header-align="center" align="center" /> |
|||
<el-table-column prop="remark" :label="$t('role.remark')" header-align="center" align="center" /> |
|||
|
|||
<el-table-column prop="roleType" :label="$t('role.type')" sortable="custom" header-align="center" align="center" width="200"> |
|||
<template slot-scope="scope"> |
|||
<!-- 系统角色 --> |
|||
<el-tag v-if="scope.row.roleType === 1" size="small" type="primary">系统角色</el-tag> |
|||
<!-- 课题角色 --> |
|||
<el-tag v-else size="small" type="success">课题角色</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="createDate" :label="$t('role.createDate')" sortable="custom" header-align="center" align="center" width="180" /> |
|||
|
|||
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|||
<template v-if="opPermission_systemRole(scope.row.isSystemRole)" slot-scope="scope"> |
|||
<el-button |
|||
v-if="$hasPermission('sys:role:update')" |
|||
type="text" |
|||
size="small" |
|||
@click="addOrUpdateHandle(scope.row.id,...scope.row)" |
|||
>{{ $t('update') }}</el-button> |
|||
<el-button |
|||
v-if="$hasPermission('sys:role:delete')" |
|||
type="text" |
|||
size="small" |
|||
style="color:red" |
|||
@click="deleteHandle(scope.row.id)" |
|||
>{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
:current-page="page" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="limit" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
@size-change="pageSizeChangeHandle" |
|||
@current-change="pageCurrentChangeHandle" |
|||
/> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" /> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import AddOrUpdate from './role-add-or-update' |
|||
export default { |
|||
components: { |
|||
AddOrUpdate |
|||
}, |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/role/page', |
|||
getDataListIsPage: true, |
|||
deleteURL: '/sys/role', |
|||
deleteIsBatch: true |
|||
}, |
|||
dataForm: { |
|||
name: '' |
|||
}, |
|||
order: 'asc', |
|||
orderField: 'role_type' |
|||
} |
|||
}, |
|||
methods: { |
|||
opPermission_systemRole(isSystemRole) { |
|||
if (isSystemRole === 1) { |
|||
return this.$store.state.user.superAdmin === 1 |
|||
} |
|||
return true |
|||
}, |
|||
selectable(row, index) { |
|||
return this.opPermission_systemRole(row.isSystemRole) |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,229 +0,0 @@ |
|||
<template> |
|||
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false" :top="'3vh'"> |
|||
<el-form |
|||
ref="dataForm" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
label-width="auto" |
|||
@submit.native.prevent |
|||
@keyup.enter.native="dataFormSubmitHandle()" |
|||
> |
|||
<!-- 用户名 --> |
|||
<el-form-item prop="username" :label="$t('user.username')"> |
|||
<el-input v-model="dataForm.username" :placeholder="$t('user.username')" /> |
|||
</el-form-item> |
|||
<!-- 所属机构 --> |
|||
<el-form-item prop="deptId" :label="$t('user.deptName')"> |
|||
<dept-select v-model="dataForm.deptId" :placeholder="$t('dept.title')" /> |
|||
</el-form-item> |
|||
<!-- 密码 --> |
|||
<el-form-item prop="password" :label="$t('user.password')" :class="{ 'is-required': !dataForm.id }"> |
|||
<el-input v-model="dataForm.password" type="password" :placeholder="$t('user.password')" /> |
|||
</el-form-item> |
|||
<el-form-item prop="confirmPassword" :label="$t('user.confirmPassword')" :class="{ 'is-required': !dataForm.id }"> |
|||
<el-input v-model="dataForm.confirmPassword" type="password" :placeholder="$t('user.confirmPassword')" /> |
|||
</el-form-item> |
|||
<!-- 工号 --> |
|||
<el-form-item prop="jobNumber" :label="'工号'"> |
|||
<el-input v-model="dataForm.jobNumber" :placeholder="'工号'" /> |
|||
</el-form-item> |
|||
<!-- 真实姓名 --> |
|||
<el-form-item prop="realName" :label="$t('user.realName')"> |
|||
<el-input v-model="dataForm.realName" :placeholder="$t('user.realName')" /> |
|||
</el-form-item> |
|||
<!-- 性别 --> |
|||
<el-form-item prop="gender" :label="$t('user.gender')"> |
|||
<ren-radio-group v-model="dataForm.gender" dict-type="gender" /> |
|||
</el-form-item> |
|||
<!-- 手机号 --> |
|||
<el-form-item prop="mobile" :label="$t('user.mobile')"> |
|||
<el-input v-model="dataForm.mobile" :placeholder="$t('user.mobile')" /> |
|||
</el-form-item> |
|||
<!-- 配置角色 --> |
|||
<el-form-item prop="" :label="'配置角色'" class="role-list"> |
|||
<el-select v-model="dataForm.sysRoleId" :placeholder="$t('user.roleIdList')"> |
|||
<el-option v-for="role in roleList" :key="role.id" :label="role.name" :value="role.id" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- 状态 --> |
|||
<el-form-item prop="status" :label="$t('user.status')" size="mini"> |
|||
<el-radio-group v-model="dataForm.status"> |
|||
<el-radio :label="0">{{ $t('user.status0') }}</el-radio> |
|||
<el-radio :label="1">{{ $t('user.status1') }}</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
import { isMobile } from '@/utils/validate' |
|||
import deptSelect from '@/components/dept-select' |
|||
export default { |
|||
components: { deptSelect }, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
roleList: [], |
|||
roleIdListDefault: [], |
|||
dataForm: { |
|||
id: '', |
|||
username: '', |
|||
jobNumber: '', |
|||
deptId: '', |
|||
deptName: '', |
|||
password: '', |
|||
confirmPassword: '', |
|||
realName: '', |
|||
gender: 0, |
|||
email: '', |
|||
mobile: '', |
|||
sysRoleId: null, |
|||
roleIdList: [], |
|||
status: 1 |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
var validatePassword = (rule, value, callback) => { |
|||
if (!this.dataForm.id && !/\S/.test(value)) { |
|||
return callback(new Error(this.$t('validate.required'))) |
|||
} |
|||
callback() |
|||
} |
|||
var validateConfirmPassword = (rule, value, callback) => { |
|||
if (!this.dataForm.id && !/\S/.test(value)) { |
|||
return callback(new Error(this.$t('validate.required'))) |
|||
} |
|||
if (this.dataForm.password !== value) { |
|||
return callback(new Error(this.$t('user.validate.confirmPassword'))) |
|||
} |
|||
callback() |
|||
} |
|||
var validateMobile = (rule, value, callback) => { |
|||
if (value && !isMobile(value)) { |
|||
return callback(new Error(this.$t('validate.format', { attr: this.$t('user.mobile') }))) |
|||
} |
|||
callback() |
|||
} |
|||
return { |
|||
username: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
jobNumber: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
deptId: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'change' } |
|||
], |
|||
password: [ |
|||
{ validator: validatePassword, trigger: 'blur' } |
|||
], |
|||
confirmPassword: [ |
|||
{ validator: validateConfirmPassword, trigger: 'blur' } |
|||
], |
|||
realName: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
mobile: [ |
|||
{ required: true, validator: validateMobile, trigger: 'blur' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
watch: { |
|||
'dataForm.deptId': { |
|||
handler(newValue, oldValue) { |
|||
if (newValue) { |
|||
this.getRoleList() |
|||
} else { |
|||
this.roleList = [] |
|||
this.roleIdListDefault = [] |
|||
} |
|||
}, |
|||
deep: true |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
// this.dataForm.deptId = this.$store.state.user.deptId |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm.resetFields() |
|||
this.roleIdListDefault = [] |
|||
if (this.dataForm.deptId) { |
|||
this.getRoleList() |
|||
} |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}, |
|||
// 获取角色列表 |
|||
getRoleList() { |
|||
this.$http.get(`/sys/role/getSysRoleListForSaveUser`, { params: { deptId: this.dataForm.deptId }}).then(({ data: res }) => { |
|||
this.roleList = res.data |
|||
}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/sys/user/${this.dataForm.id}`).then(({ data: res }) => { |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
// roleIdList: [] |
|||
} |
|||
// // 角色配置, 区分是否为默认角色 |
|||
// for (var i = 0; i < res.data.roleIdList.length; i++) { |
|||
// if (this.roleList.filter(item => item.id === res.data.roleIdList[i])[0]) { |
|||
// this.dataForm.roleIdList.push(res.data.roleIdList[i]) |
|||
// continue |
|||
// } |
|||
// this.roleIdListDefault.push(res.data.roleIdList[i]) |
|||
// } |
|||
}) |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs.dataForm.validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/user', { |
|||
...this.dataForm |
|||
// roleIdList: [ |
|||
// ...this.dataForm.roleIdList, |
|||
// ...this.roleIdListDefault |
|||
// ] |
|||
}).then(({ data: res }) => { |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }) |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.mod-sys__user { |
|||
.role-list { |
|||
.el-select { |
|||
width: 100%; |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -1,153 +0,0 @@ |
|||
<template> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-sys__user"> |
|||
<el-form |
|||
:inline="true" |
|||
:model="dataForm" |
|||
@submit.native.prevent |
|||
@keyup.enter.native="getDataList()" |
|||
> |
|||
<!-- 用户名 --> |
|||
<el-form-item> |
|||
<el-input v-model="dataForm.username" :placeholder="'用户名、姓名'" clearable /> |
|||
</el-form-item> |
|||
<!-- 性别 --> |
|||
<!-- <el-form-item> |
|||
<ren-select v-model="dataForm.gender" dict-type="gender" :placeholder="$t('user.gender')" /> |
|||
</el-form-item> --> |
|||
<el-form-item> |
|||
<el-button @click="getDataList()">{{ $t('query') }}</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:user:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button v-if="$hasPermission('sys:user:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button> |
|||
</el-form-item> |
|||
<!-- <el-form-item> |
|||
<el-button v-if="$hasPermission('sys:user:export')" type="info" @click="exportHandle()">{{ $t('export') }}</el-button> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
<el-table |
|||
v-loading="dataListLoading" |
|||
:data="dataList" |
|||
border |
|||
style="width: 100%;" |
|||
@selection-change="dataListSelectionChangeHandle" |
|||
@sort-change="dataListSortChangeHandle" |
|||
> |
|||
<el-table-column type="selection" header-align="center" align="center" width="50" :selectable="selectable" /> |
|||
<!-- 用户名 --> |
|||
<el-table-column prop="username" :label="$t('user.username')" sortable="custom" header-align="center" align="center" /> |
|||
<!-- 用户名 --> |
|||
<el-table-column prop="roleName" :label="'系统角色'" header-align="center" align="center" /> |
|||
<!-- 所属机构 --> |
|||
<!-- <el-table-column prop="deptName" :label="'所属机构'" header-align="center" align="center" /> --> |
|||
<!-- 姓名 --> |
|||
<el-table-column prop="realName" :label="'姓名'" header-align="center" align="center" /> |
|||
<!-- 性别 --> |
|||
<el-table-column prop="gender" :label="$t('user.gender')" sortable="custom" header-align="center" align="center" width="80"> |
|||
<template slot-scope="scope"> |
|||
{{ $getDictLabel("gender", scope.row.gender) }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- 手机号 --> |
|||
<!-- <el-table-column prop="mobile" :label="$t('user.mobile')" sortable="custom" header-align="center" align="center" /> --> |
|||
<!-- 状态 --> |
|||
<el-table-column prop="status" :label="$t('user.status')" sortable="custom" header-align="center" align="center" width="80"> |
|||
<template slot-scope="scope"> |
|||
<el-tag v-if="scope.row.status === 0" size="small" type="danger">{{ $t('user.status0') }}</el-tag> |
|||
<el-tag v-else size="small" type="success">{{ $t('user.status1') }}</el-tag> |
|||
</template> |
|||
</el-table-column> |
|||
<!-- 创建时间 --> |
|||
<el-table-column prop="createDate" :label="$t('user.createDate')" sortable="custom" header-align="center" align="center" /> |
|||
<!-- 参与课题 --> |
|||
<el-table-column prop="projectList" :label="'参与课题'" header-align="center" align="center" :show-overflow-tooltip="true"> |
|||
<template slot-scope="scope"> |
|||
{{ scope.row.projectList|filterList }} |
|||
</template> |
|||
</el-table-column> |
|||
<!-- 操作 --> |
|||
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|||
<template slot-scope="scope"> |
|||
<el-button |
|||
v-if="$hasPermission('sys:user:update') && opPermission(scope.row.systemAdmin)" |
|||
type="text" |
|||
size="small" |
|||
@click="addOrUpdateHandle(scope.row.id)" |
|||
>{{ $t('update') }}</el-button> |
|||
<el-button |
|||
v-if="$hasPermission('sys:user:delete') && opPermission(scope.row.systemAdmin)" |
|||
type="text" |
|||
size="small" |
|||
style="color:red" |
|||
@click="deleteHandle(scope.row.id)" |
|||
>{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
:current-page="page" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="limit" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
@size-change="pageSizeChangeHandle" |
|||
@current-change="pageCurrentChangeHandle" |
|||
/> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" /> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import AddOrUpdate from './user-add-or-update' |
|||
export default { |
|||
components: { |
|||
AddOrUpdate |
|||
}, |
|||
filters: { |
|||
filterList(arr) { |
|||
const result = [] |
|||
arr.forEach(item => { |
|||
result.push(item.name) |
|||
}) |
|||
return result.join(',') |
|||
} |
|||
}, |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/sys/user/page', |
|||
getDataListIsPage: true, |
|||
deleteURL: '/sys/user', |
|||
deleteIsBatch: true |
|||
// exportURL: '/sys/user/export' |
|||
}, |
|||
dataForm: { |
|||
username: '' |
|||
// deptId: '', |
|||
// gender: '' |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
opPermission(isSystemAdmin) { |
|||
if (this.$store.state.user.superAdmin === 1) { |
|||
return isSystemAdmin > 0 |
|||
} |
|||
if (this.$store.state.user.systemAdmin === 1) { |
|||
return isSystemAdmin === 0 |
|||
} |
|||
return true |
|||
}, |
|||
selectable(row, index) { |
|||
return this.opPermission(row.systemAdmin) |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,81 +0,0 @@ |
|||
<template> |
|||
<div class="sms-template"> |
|||
<!-- 模板列表 --> |
|||
<head-template head-left="模板列表"> |
|||
<el-button type="primary" size="small" icon="el-icon-plus">新增</el-button> |
|||
</head-template> |
|||
<!-- 模板内容 --> |
|||
<el-table ref="multipleTable" :data="dataList" tooltip-effect="dark" style="width: 100%">> |
|||
<el-table-column type="index" width="50" label="NO" header-align="center" align="center" /> |
|||
<el-table-column label="简称" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<span>{{ scope.row.abbreviation }}</span> |
|||
<span v-if="scope.row.flag=='1'" class="defaultButton">默认</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="content" label="内容" header-align="center" align="center" /> |
|||
<el-table-column prop="operation" label="操作" header-align="center" align="center"> |
|||
<template slot-scope="scope"> |
|||
<span style="color: #1890ff; padding-right: 8px" class="details">修改</span> |
|||
<span style="color: #ff4d4f" class="delete">删除</span> |
|||
<el-dropdown trigger="click"> |
|||
<i class="el-icon-more" /> |
|||
<el-dropdown-menu slot="dropdown"> |
|||
<el-dropdown-item>设置为默认</el-dropdown-item> |
|||
<el-dropdown-item>更新所有</el-dropdown-item> |
|||
</el-dropdown-menu> |
|||
</el-dropdown> |
|||
|
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination background layout="prev, pager, next" :total="total" @current-change="pageCurrentChangeHandle" /> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import headTemplate from '@/components/head' |
|||
export default { |
|||
components: { |
|||
headTemplate |
|||
}, |
|||
data() { |
|||
return { |
|||
total: 0, |
|||
dataList: [{ |
|||
abbreviation: '青光眼', |
|||
content: '测试数据', |
|||
flag: '1' |
|||
}] |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
// 分页, 当前页 |
|||
pageCurrentChangeHandle(val) { |
|||
this.currentPage = val |
|||
this.getDataList() |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.sms-template { |
|||
.defaultButton { |
|||
display: inline-block; |
|||
border: 1px solid #1E79FF; |
|||
color: #1E79FF; |
|||
font-size: 12px; |
|||
padding: 0 10px; |
|||
border-radius: 16px; |
|||
margin-left: 10px; |
|||
} |
|||
.details, |
|||
.delete { |
|||
cursor: pointer; |
|||
} |
|||
.el-icon-more { |
|||
margin-left: 6px; |
|||
} |
|||
} |
|||
</style> |
@ -1,187 +0,0 @@ |
|||
<template> |
|||
<el-dialog |
|||
class="alert-setting" |
|||
:visible.sync="visible" |
|||
width="30%" |
|||
:title="dataForm.id ? '修改预警条件':'新增预警条件'" |
|||
> |
|||
<el-form ref="dataForm" :model="dataForm" :rules="dataRule"> |
|||
<el-form-item label="指标名称:" label-width="100px" prop="name"> |
|||
<el-select v-model="dataForm.name " placeholder="请选择指标名称" clearable> |
|||
<el-option v-for="(item,index) in targetNameList " :key="index" :value="item.name" :label="item.name" @click.native="selectOptionHandle(item)" /> |
|||
</el-select> |
|||
</el-form-item> |
|||
<!-- flag=1,较上次上升/下降,flag=0,值大于/小于 --> |
|||
<template v-if="ISFlag"> |
|||
<el-form-item label="值大于:" prop="greaterThan" label-width="100px"> |
|||
<el-input v-model="dataForm.greaterThan" placeholder="请填写值" /> |
|||
<span class="company">{{ dataForm.targetUnit }}</span> |
|||
</el-form-item> |
|||
<el-form-item label="值小于:" label-width="100px" prop="lessThan"> |
|||
<el-input v-model="dataForm.lessThan" placeholder="请填写值" /> |
|||
<span class="company">{{ dataForm.targetUnit }}</span> |
|||
</el-form-item> |
|||
</template> |
|||
<template v-else> |
|||
<el-form-item label="较上次下降:" label-width="100px" prop="lowerThan"> |
|||
<el-input v-model="dataForm.lowerThan" placeholder="请填写值" /> |
|||
</el-form-item> |
|||
<el-form-item label="较上次上升:" label-width="100px" prop="upThan"> |
|||
<el-input v-model="dataForm.upThan" up="请填写值" /> |
|||
</el-form-item> |
|||
</template> |
|||
<el-form-item label="启用" label-width="90px"> |
|||
<el-switch v-model="dataForm.status" :active-value="1" :inactive-value="0" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
export default { |
|||
props: { |
|||
targetNameList: { |
|||
type: Array, |
|||
default: () => [] |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
dataForm: { |
|||
greaterThan: '', // 值大于 |
|||
lessThan: '', // 值小于 |
|||
id: '', |
|||
status: 1, // 1:开启 0:关闭 |
|||
lowerThan: '', // 较上次下降 |
|||
upThan: '', // 较上次上升 |
|||
name: '', // 指标名称 |
|||
targetUnit: '' // 指标单位 |
|||
}, |
|||
ISFlag: true // 大于小于为true |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
return { |
|||
name: [ |
|||
{ required: true, message: '请选择指标名称', trigger: 'change' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
// 选择指标发生变化时 |
|||
selectOptionHandle(item) { |
|||
// flag=1,较上次上升/下降,flag=0,值大于/小于 |
|||
this.ISFlag = item.flag === 0 |
|||
this.dataForm.targetUnit = item.targetUnit |
|||
}, |
|||
// 状态切换 |
|||
// switchHandle(e) { |
|||
// // 1:开启 0:关闭 |
|||
// console.log(e) |
|||
// this.dataForm.status = e ? 1 : 0 |
|||
// }, |
|||
// 初始化 |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm.resetFields() // 重置表单 |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/yzk/target/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
this.ISFlag = res.data.flag === 0 |
|||
}).catch(() => { }) |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
console.log(this.dataForm) |
|||
this.$refs.dataForm.validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
if (this.ISFlag && !this.dataForm.greaterThan && !this.dataForm.lessThan) { |
|||
return this.$message.error('值必须填写一个') |
|||
} else if (!this.ISFlag) { |
|||
if (!this.dataForm.lowerThan && !this.dataForm.upThan) { |
|||
return this.$message.error('值必须填写一个') |
|||
} else if (this.dataForm.lowerThan && this.dataForm.upThan) { |
|||
return this.$message.error('值只能填写一个') |
|||
} |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/yzk/target', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }) |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss"> |
|||
.alert-setting { |
|||
.company { |
|||
display: inline-block; |
|||
width: 60px; |
|||
padding-left: 5px; |
|||
} |
|||
.el-form-item__content { |
|||
display: flex; |
|||
} |
|||
.el-dialog__header { |
|||
margin-bottom:12px |
|||
} |
|||
.el-dialog__body { |
|||
padding-right: 30px; |
|||
} |
|||
.formItemOne .el-form-item__content { |
|||
display: flex; |
|||
} |
|||
.el-date-editor.el-input, .el-date-editor.el-input__inner{ |
|||
width: 100%; |
|||
} |
|||
.el-select{ |
|||
display: block; |
|||
width: 100%; |
|||
padding-right: 50px; |
|||
} |
|||
.el-input-number { |
|||
display: block; |
|||
width: 100%; |
|||
} |
|||
.el-switch { |
|||
line-height: 40px; |
|||
display: block; |
|||
} |
|||
} |
|||
</style> |
@ -1,100 +0,0 @@ |
|||
<template> |
|||
<div class="sms-template"> |
|||
<!-- 模板列表 --> |
|||
<head-template head-left="预警设置"> |
|||
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle()">新增</el-button> |
|||
</head-template> |
|||
<!-- 模板内容 --> |
|||
<el-table ref="multipleTable" :data="dataList" tooltip-effect="dark" style="width: 100%">> |
|||
<el-table-column label="状态"> |
|||
<template slot-scope="scope"> |
|||
<!-- 1:开启 0:关闭 --> |
|||
<el-switch :value="scope.row.status == 1 ? true : false" @change="switchHandle(scope.row,$event)" /> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column label="指标名称"> |
|||
<template slot-scope="scope"> |
|||
<span>{{ scope.row.name }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="content" label="条件" /> |
|||
<el-table-column prop="operation" label="操作"> |
|||
<template slot-scope="scope"> |
|||
<span style="color: #1890ff; padding-right: 8px" class="details" @click="addOrUpdateHandle(scope.row.id,'')">修改</span> |
|||
<span style="color: #ff4d4f" class="delete" @click="deleteHandle(scope.row.id)">删除</span> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" :target-name-list="targetNameList" @refreshDataList="getDataList" /> |
|||
<!-- <el-pagination background layout="prev, pager, next" :total="total" @current-change="pageCurrentChangeHandle" /> --> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import headTemplate from '@/components/head' |
|||
import addOrUpdate from './add-or-update.vue' |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
export default { |
|||
components: { |
|||
headTemplate, |
|||
addOrUpdate |
|||
}, |
|||
mixins: [mixinViewModule], |
|||
data() { |
|||
return { |
|||
targetNameList: [], |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/yzk/target/targetList', |
|||
deleteURL: '/yzk/target' |
|||
} |
|||
} |
|||
}, |
|||
created() { |
|||
this.getTargetName() |
|||
}, |
|||
methods: { |
|||
// 获取指标名称 |
|||
async getTargetName() { |
|||
const { data: res } = await this.$http.get('/yzk/target/selectTarget') |
|||
if (res.code === 0) { |
|||
this.targetNameList = res.data |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
}, |
|||
// 修改预警状态 |
|||
async switchHandle(scopeRow, e) { |
|||
console.log(scopeRow, e) |
|||
// 1:开启 0:关闭 |
|||
const { data: res } = await this.$http.post('/yzk/target/switchStatus', { |
|||
id: scopeRow.id, |
|||
status: e === false ? 0 : 1 |
|||
}) |
|||
if (res.code === 0) { |
|||
this.getDataList() |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.sms-template { |
|||
.defaultButton { |
|||
display: inline-block; |
|||
border: 1px solid #1E79FF; |
|||
color: #1E79FF; |
|||
font-size: 12px; |
|||
padding: 0 10px; |
|||
border-radius: 16px; |
|||
margin-left: 10px; |
|||
} |
|||
.details, |
|||
.delete { |
|||
cursor: pointer; |
|||
} |
|||
.el-icon-more { |
|||
margin-left: 6px; |
|||
} |
|||
} |
|||
</style> |
@ -1,174 +0,0 @@ |
|||
<template> |
|||
<div class="crf-add-dialog"> |
|||
<el-dialog |
|||
width="90%" |
|||
top="2vh" |
|||
:visible.sync="visible" |
|||
:title="dataForm.title||(!dataForm.id ? $t('add') : $t('update'))" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
@close="closeDialog" |
|||
> |
|||
<el-form |
|||
ref="dataForm" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
label-width="auto" |
|||
@keyup.enter.native="initBaseInfo()" |
|||
> |
|||
<el-form-item prop="type" :label="'CRF类型'"> |
|||
<el-radio-group v-model="dataForm.type" size="small"> |
|||
<el-radio-button label="门诊" /> |
|||
<el-radio-button label="手术" /> |
|||
<el-radio-button label="随访" /> |
|||
<el-radio-button label="其他" /> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
<el-form-item prop="name" :label="'名称'"> |
|||
<el-input |
|||
v-model="dataForm.name" |
|||
:placeholder="'请填写表单名称'" |
|||
size="small" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item prop="content" :label="'表单'" style="margin-top:20px;"> |
|||
<!-- <crf-editor ref="crf" v-model="dataForm.content" :height="height" :is-p="true" />--> |
|||
</el-form-item> |
|||
<el-form-item prop="description" :label="'描述'"> |
|||
<el-input |
|||
v-model="dataForm.description" |
|||
type="textarea" |
|||
:rows="1" |
|||
:placeholder="'相关描述'" |
|||
size="small" |
|||
/> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer"> |
|||
<el-button size="small" @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" size="small" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
<!-- <el-button type="primary" @click="exportContent">引入</el-button> --> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
|
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
// import crfEditor from '@/components/hm-crf' |
|||
const Base64 = require('js-base64').Base64 |
|||
|
|||
export default { |
|||
// components: { crfEditor }, |
|||
props: { |
|||
systemInfo: { |
|||
type: Object, |
|||
default: () => { |
|||
return {} |
|||
} |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
height: 'calc(100vh - 300px)', |
|||
dataForm: { |
|||
id: '', |
|||
type: '门诊', |
|||
name: '', |
|||
description: '', |
|||
content: '' |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule() { |
|||
var validate_content = (rule, value, callback) => { |
|||
if (this.dataForm.content === '') { |
|||
return callback(new Error('请设计表单内容')) |
|||
} |
|||
callback() |
|||
} |
|||
return { |
|||
type: [ |
|||
{ required: true, message: '请选择CRF类型', trigger: 'change' } |
|||
], |
|||
name: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
content: [ |
|||
{ required: true, validator: validate_content, trigger: 'change' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.dataForm.resetFields() |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} else { |
|||
this.dataForm = { ...this.dataForm } |
|||
} |
|||
}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo() { |
|||
this.$http.get(`/crf/template/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
if (res.data) { |
|||
this.dataForm.name = res.data.name |
|||
this.dataForm.type = res.data.type |
|||
this.dataForm.content = Base64.decode(res.data.content) |
|||
this.dataForm.description = res.data.description |
|||
this.$refs['crf'].renderContent() |
|||
} |
|||
}).catch(() => {}) |
|||
}, |
|||
// 引入内容 |
|||
exportContent() { |
|||
// 在编辑器中获取填充方法 |
|||
// console.log(document.querySelector('#myEditor_ifr').contentWindow) |
|||
this.$refs.crf.fullContent('右眼<input id="youyan" class="hminput border-1" style="width: 120px; height: 18px; text-align: center;" title="" autocomplete="off" name="youyan" type="text" placeholder="" data-hm_id="youyan" data-hm_type="text" data-hm_required="false" data-hm_bd_id="DAT1_VA.OD_VAN" data-hm_bd_eye_type="" />左眼<input id="zuoyan" class="hminput border-1 " style="width: 120px; height: 18px; text-align: center;" title="" autocomplete="off" name="zuoyan" type="text" placeholder="" data-hm_id="zuoyan" data-hm_type="text" data-hm_required="false" data-hm_bd_id="DAT1_VA.OS_VAN" data-hm_bd_eye_type="" />') |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function() { |
|||
this.$refs.dataForm.validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/crf/template', { ...this.dataForm, content: Base64.encode(this.dataForm.content) }).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { leading: true, trailing: false }), |
|||
closeDialog() { |
|||
this.$emit('closeDialog') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss"> |
|||
.crf-add-dialog { |
|||
.el-form-item { |
|||
margin-bottom:8px |
|||
} |
|||
} |
|||
</style> |
@ -1,105 +0,0 @@ |
|||
<template> |
|||
<div class="mod-sys__dept"> |
|||
<head-template head-left="表单管理"> |
|||
<el-button type="primary" size="small" icon="el-icon-plus" @click="addOrUpdateHandle(null,null,'新增表单')">新增 |
|||
</el-button> |
|||
</head-template> |
|||
<el-table v-loading="dataListLoading" :data="dataList" row-key="id" style="width: 100%;" :height="tableHeight"> |
|||
|
|||
<!-- 名称 --> |
|||
<el-table-column prop="name" :label="'表单名称'" /> |
|||
<!-- crf类型 --> |
|||
<el-table-column prop="type" :label="'表单类型'" /> |
|||
<!-- 描述 --> |
|||
<el-table-column prop="description" :label="'描述'" /> |
|||
<!-- 操作 --> |
|||
<el-table-column prop="operation" :label="$t('handle')"> |
|||
<template slot-scope="scope"> |
|||
<!-- <el-button type="text" size="small" @click="testClick1(scope.row.id,scope.row)">测试1</el-button> |
|||
<el-button type="text" size="small" @click="testClick2(scope.row.id,scope.row)">测试2</el-button> --> |
|||
<el-button type="text" size="small" @click="preview(scope.row.id,scope.row)">预览</el-button> |
|||
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id,scope.row)">编辑</el-button> |
|||
<el-button type="text" size="small" style="color:red" @click="deleteHandle([scope.row.id])">删除</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<!-- 添加分页组件 --> |
|||
<el-pagination background layout="prev, pager, next" :total="total" @current-change="pageCurrentChangeHandle" /> |
|||
|
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update |
|||
v-if="addOrUpdateVisible" |
|||
ref="addOrUpdate" |
|||
@refreshDataList="getDataList" |
|||
@closeDialog="addOrUpdateVisible=false" |
|||
/> |
|||
<!-- 弹窗, 预览 --> |
|||
<!-- <preview v-if="previewVisible" ref="preview" :body-style-show="true" />--> |
|||
<!-- 填写测试 --> |
|||
<!-- <test v-if="testVisible" ref="Test" :exam-name="test.name" :list="test.exams" /> --> |
|||
<!-- 填写测试 --> |
|||
<!-- <follow-up v-if="followUpVisible" ref="followUp" /> --> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import tableAutoHeight from '@/mixins/tableAutoHeight' |
|||
import AddOrUpdate from './add-or-update.vue' |
|||
// import Preview from '@/components/hm-crf/preview' |
|||
import headTemplate from '@/components/head' |
|||
// 测试 |
|||
// import test from '@/components/hm-crf/crf-data-test' |
|||
// import followUp from '@/components/hm-crf/followUp' |
|||
export default { |
|||
components: { |
|||
AddOrUpdate, |
|||
// Preview, |
|||
headTemplate |
|||
// test, |
|||
// followUp // 测试 |
|||
}, |
|||
mixins: [mixinViewModule, tableAutoHeight], |
|||
data() { |
|||
return { |
|||
// testVisible: false, // 测试 |
|||
// followUpVisible: false, // 测试 |
|||
previewVisible: false, |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/crf/template/page', |
|||
getDataListIsPage: true, |
|||
deleteURL: '/crf/template' |
|||
}, |
|||
dataForm: {}, |
|||
systemInfo: {} |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
preview(id, params, title) { |
|||
console.log(123) |
|||
this.previewVisible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.preview.dataForm = { id, title, ...params } |
|||
this.$refs.preview.init() |
|||
}) |
|||
}, |
|||
testClick1(id, params, title) { |
|||
this.testVisible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.Test.init() |
|||
}) |
|||
}, |
|||
testClick2(id, params, title) { |
|||
console.log(params) |
|||
this.followUpVisible = true |
|||
this.$nextTick(() => { |
|||
this.$refs.followUp.crfId = params.id |
|||
this.$refs.followUp.patientIdNumber = '342826195112180617' |
|||
this.$refs.followUp.init() |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,382 +0,0 @@ |
|||
<template> |
|||
<div class="follow-management"> |
|||
<!-- 弹框 --> |
|||
<el-dialog |
|||
:title="sureEditText=='修改' ? '修改随访方案':'新增随访方案'" |
|||
:visible.sync="dialogFormVisible" |
|||
width="60%" |
|||
@close="closeDialog" |
|||
> |
|||
<el-form ref="followRuleForm" :model="form" :rules="rules"> |
|||
<el-form-item label="名称:" label-width="120px" prop="name"> |
|||
<el-input |
|||
v-model="form.name" |
|||
autocomplete="off" |
|||
placeholder="请输入名称" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="描述:" label-width="120px" prop="description"> |
|||
<el-input |
|||
v-model="form.description" |
|||
type="textarea" |
|||
placeholder="方案描述" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="周期:" label-width="120px" class="cycle-display" prop="unit"> |
|||
<el-input-number |
|||
v-model="form.period" |
|||
controls-position="right" |
|||
:min="1" |
|||
@change="handleChangeCycle" |
|||
/> |
|||
<el-checkbox-group v-model="form.unit" label-width="120px" :max="1"> |
|||
<el-checkbox-button label="天" name="type" /> |
|||
<el-checkbox-button label="周" name="type" /> |
|||
<el-checkbox-button label="月" name="type" /> |
|||
</el-checkbox-group> |
|||
</el-form-item> |
|||
<el-form-item |
|||
label="短信提醒:" |
|||
label-width="120px" |
|||
class="sms-reminder" |
|||
> |
|||
<el-select v-model="form.smsPeriod" placeholder="请选择活动区域"> |
|||
<el-option label="提前1天" value="1" /> |
|||
<el-option label="提前2天" value="2" /> |
|||
</el-select> |
|||
<el-input |
|||
v-model="form.smsMessage" |
|||
type="textarea" |
|||
label-width="120px" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item label="设为默认:" label-width="120px"> |
|||
<el-switch v-model="form.isDefault" /> |
|||
</el-form-item> |
|||
</el-form> |
|||
<div slot="footer" class="dialog-footer"> |
|||
<el-button @click="dialogFormVisible = false">取 消</el-button> |
|||
<el-button type="primary" @click="sureEditFollowClick(sureEditText)">{{ sureEditText }}</el-button> |
|||
</div> |
|||
</el-dialog> |
|||
<!-- 头部 --> |
|||
<head-template head-left="随访方案列表"> |
|||
<el-button type="primary" size="small" icon="el-icon-plus" @click="addFollowClick">新增方案</el-button> |
|||
</head-template> |
|||
<el-table |
|||
ref="multipleTable" |
|||
:data="followList" |
|||
tooltip-effect="dark" |
|||
style="width: 100%" |
|||
> |
|||
<el-table-column prop="name" label="随访方案" /> |
|||
<el-table-column label="随访周期"> |
|||
<template slot-scope="scope"> |
|||
<span>{{ scope.row.period }}{{ scope.row.unit }}</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="description" label="描述" /> |
|||
<el-table-column label="提醒时间"> |
|||
<template slot-scope="scope"> |
|||
<span>提前{{ scope.row.smsPeriod }}天</span> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column prop="operation" label="操作"> |
|||
<template slot-scope="scope"> |
|||
<span |
|||
style="color: #1890ff; padding-right: 8px" |
|||
class="operation-details" |
|||
@click="editClick(scope.row)" |
|||
>编辑</span> |
|||
<span |
|||
style="color: #ff4d4f" |
|||
class="operation-delete" |
|||
@click="deleteClick(scope.row)" |
|||
>删除</span> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
background |
|||
layout="prev, pager, next" |
|||
:total="total" |
|||
@current-change="currentChange" |
|||
@prev-click="upPageClick" |
|||
@next-click="nextPageClick" |
|||
/> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import dialogjs from '@/mixins/dialog' |
|||
import { confirm } from '@/utils/confirm' |
|||
import headTemplate from '@/components/head' |
|||
export default { |
|||
inject: ['refresh'], |
|||
components: { |
|||
headTemplate |
|||
}, |
|||
mixins: [dialogjs], |
|||
data() { |
|||
return { |
|||
inputSearchValue: '', |
|||
projectId: '', |
|||
followList: [], |
|||
limit: 10, |
|||
currentPage: 1, |
|||
total: 0, |
|||
searchTime: '', |
|||
// 弹框表格 |
|||
form: { |
|||
name: '', |
|||
// 方案描述 |
|||
description: '', |
|||
// 周期数 |
|||
period: 1, |
|||
// 周期单位 |
|||
unit: [], |
|||
// 提前几天 |
|||
smsPeriod: '', |
|||
// 短信 |
|||
smsMessage: '', |
|||
// 默认 0:否 1:是 |
|||
isDefault: false |
|||
}, |
|||
rules: { |
|||
name: [ |
|||
{ required: true, message: '请输入名称', trigger: 'blur' } |
|||
], |
|||
description: [ |
|||
{ required: true, message: '请填写描述', trigger: 'blur' } |
|||
], |
|||
unit: [ |
|||
{ type: 'array', required: true, message: '请选择周期单位', trigger: 'change' } |
|||
] |
|||
|
|||
}, |
|||
sureEditText: '确定', |
|||
currentId: '' |
|||
} |
|||
}, |
|||
created() { |
|||
this.projectId = window.SITE_CONFIG['projectId'] |
|||
this.getFollowList() |
|||
}, |
|||
methods: { |
|||
// 点击新增方案 |
|||
addFollowClick() { |
|||
this.sureEditText = '确定' |
|||
this.dialogFormVisible = true |
|||
}, |
|||
// 新增/修改随访方案按钮 |
|||
sureEditFollowClick(sureEditText) { |
|||
this.$refs.followRuleForm.validate((valid) => { |
|||
if (valid) { |
|||
this.setAddEditFollow(sureEditText) |
|||
} else { |
|||
console.log('error submit!!') |
|||
return false |
|||
} |
|||
}) |
|||
}, |
|||
// 调取后台接口新增/修改随访方案 |
|||
async setAddEditFollow(sureEditText) { |
|||
this.dialogFormVisible = true |
|||
const { data: res } = await this.$http({ |
|||
method: sureEditText === '确定' ? 'post' : 'put', |
|||
url: '/visit', |
|||
data: { |
|||
name: this.form.name, |
|||
description: this.form.description, |
|||
period: this.form.period, |
|||
unit: this.form.unit[0], |
|||
smsPeriod: this.form.smsPeriod, |
|||
smsMessage: this.form.smsMessage, |
|||
isDefault: this.form.isDefault ? 1 : 0, |
|||
projectId: this.projectId, |
|||
id: this.currentId |
|||
} |
|||
}) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: sureEditText === '确定' ? '添加成功!' : '修改成功' |
|||
}) |
|||
this.dialogFormVisible = false |
|||
this.formFormat() |
|||
this.refresh() |
|||
this.currentId = '' |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
}, |
|||
// 改变周期 |
|||
handleChangeCycle() {}, |
|||
// 获取随访列表 |
|||
async getFollowList(e) { |
|||
const { data: res } = await this.$http.get('/visit/page', { |
|||
params: { |
|||
limit: this.limit, |
|||
page: this.currentPage, |
|||
name: this.inputSearchValue, |
|||
projectId: this.projectId |
|||
} |
|||
}) |
|||
this.followList = res.data.list |
|||
this.total = res.data.total |
|||
}, |
|||
// 移出 |
|||
deleteClick(scopeRow) { |
|||
confirm('').then(async() => { |
|||
const { data: res } = await this.$http.delete('/visit', { |
|||
params: { |
|||
id: scopeRow.id |
|||
} |
|||
}) |
|||
if (res.code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '删除成功!' |
|||
}) |
|||
this.refresh() |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
}) |
|||
}, |
|||
// 编辑 |
|||
editClick(scopeRow) { |
|||
this.sureEditText = '修改' |
|||
this.currentId = scopeRow.id |
|||
this.getVisitInfo(scopeRow) |
|||
}, |
|||
// 获取随访详情 |
|||
async getVisitInfo(scopeRow) { |
|||
const { data: res } = await this.$http.get('/visit/getInfo', { |
|||
params: { |
|||
id: scopeRow.id |
|||
} |
|||
}) |
|||
if (res.code === 0) { |
|||
this.dialogFormVisible = true |
|||
this.form = res.data |
|||
this.form.isDefault === 0 ? this.form.isDefault = false : this.form.isDefault = true |
|||
this.form.unit = [this.form.unit] |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
}, |
|||
// 关闭弹框 |
|||
closeDialog() { |
|||
this.dialogFormVisible = false |
|||
this.formFormat() |
|||
}, |
|||
// 表格内容置空 |
|||
formFormat() { |
|||
this.form = { |
|||
name: '', |
|||
// 方案描述 |
|||
description: '', |
|||
// 周期数 |
|||
period: 1, |
|||
// 周期单位 |
|||
unit: [], |
|||
// 提前几天 |
|||
smsPeriod: '', |
|||
// 短信 |
|||
smsMessage: '', |
|||
// 默认 0:否 1:是 |
|||
isDefault: false |
|||
} |
|||
}, |
|||
// 当前页改变时触发 |
|||
currentChange(e) { |
|||
this.currentPage = e |
|||
this.getFollowList() |
|||
}, |
|||
// 用户点击上一页按钮改变当前页后触发 |
|||
upPageClick(e) { |
|||
}, |
|||
// 用户点击下一页按钮改变当前页后触发 |
|||
nextPageClick(e) { |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang='scss' scoped> |
|||
.follow-management { |
|||
background-color: #fff; |
|||
padding: 16px; |
|||
.sms-reminder { |
|||
.el-select { |
|||
margin-bottom: 24px; |
|||
display: flex; |
|||
} |
|||
} |
|||
|
|||
.title { |
|||
height: 64px; |
|||
padding-left: 24px; |
|||
line-height: 64px; |
|||
font-size: 16px; |
|||
background-color: #fff; |
|||
box-shadow: inset 0px -1px 0px #f0f0f0; |
|||
border-radius: 2px 2px 0px 0px; |
|||
} |
|||
.state-circle { |
|||
display: inline-block; |
|||
width: 6px; |
|||
height: 6px; |
|||
border-radius: 50%; |
|||
margin-right: 8px; |
|||
} |
|||
.state-circle-green { |
|||
background-color: #52c41a; |
|||
} |
|||
.state-circle-red { |
|||
background-color: #ff4d4f; |
|||
} |
|||
.operation-details, |
|||
.operation-delete { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
</style> |
|||
<style lang="scss"> |
|||
.follow-management { |
|||
.cycle-display { |
|||
.el-form-item__content { |
|||
display: flex; |
|||
} |
|||
.el-input-number { |
|||
width: 100px; |
|||
margin-right: 16px; |
|||
} |
|||
} |
|||
.el-dialog__footer { |
|||
border-top: 1px solid #f0f0f0; |
|||
padding: 10px 20px; |
|||
} |
|||
} |
|||
|
|||
.input-search { |
|||
display: flex; |
|||
.el-icon-d-arrow-right { |
|||
transform: rotate(-90deg); |
|||
} |
|||
} |
|||
.el-transfer__button:first-child { |
|||
margin-bottom: 4px; |
|||
} |
|||
.el-transfer__buttons { |
|||
.el-button { |
|||
display: block; |
|||
padding: 0; |
|||
width: 24px; |
|||
height: 24px; |
|||
} |
|||
.el-button:nth-child(2) { |
|||
margin-left: 0; |
|||
} |
|||
} |
|||
|
|||
</style> |
@ -1,65 +0,0 @@ |
|||
<template> |
|||
<div class="set-management"> |
|||
<el-tabs v-model="activeName" type="card" @tab-click="handleClick"> |
|||
<!-- <el-tab-pane label="随访方案" name="followUpProtocol"> |
|||
<followup-potocol /> |
|||
</el-tab-pane> --> |
|||
<el-tab-pane label="样式模板" name="caseTemplate"> |
|||
<case-template /> |
|||
</el-tab-pane> |
|||
<!-- <el-tab-pane label="短信模板" name="SMSTemplate"> |
|||
<sms-template /> |
|||
</el-tab-pane> --> |
|||
<!-- <el-tab-pane label="预警设置" name="alertSetting"> |
|||
<alert-setting /> |
|||
</el-tab-pane> --> |
|||
</el-tabs> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
// import smsTemplate from './SMS-template' |
|||
import caseTemplate from './case-template' |
|||
// import alertSetting from './alert-setting' |
|||
export default { |
|||
components: { |
|||
// smsTemplate, |
|||
caseTemplate |
|||
// alertSetting |
|||
}, |
|||
data() { |
|||
return { |
|||
activeName: 'caseTemplate' |
|||
} |
|||
}, |
|||
created() { |
|||
}, |
|||
methods: { |
|||
handleClick() { |
|||
|
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" soped> |
|||
.set-management { |
|||
} |
|||
</style> |
|||
<style lang="scss"> |
|||
.set-management { |
|||
.el-tabs__header { |
|||
margin: 0; |
|||
} |
|||
.el-tabs__nav { |
|||
background: #fff; |
|||
} |
|||
.el-tabs__content { |
|||
padding: 16px; |
|||
background: #fff; |
|||
height: calc( 100vh - 50px - 32px - 42px); |
|||
} |
|||
.el-tabs--card>.el-tabs__header .el-tabs__nav { |
|||
border: 1px solid #f0f0f0; |
|||
} |
|||
} |
|||
</style> |
|||
|
@ -1,48 +0,0 @@ |
|||
<template> |
|||
<el-dialog |
|||
width="90%" |
|||
top="2vh" |
|||
:visible.sync="visible" |
|||
:title="'预览'" |
|||
:close-on-click-modal="false" |
|||
:close-on-press-escape="false" |
|||
append-to-body |
|||
> |
|||
123 |
|||
<template slot="footer"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="submit">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
const Base64 = require('js-base64').Base64 |
|||
|
|||
export default { |
|||
props: { |
|||
bodyStyleShow: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
// 是否为病历模板 |
|||
title: { |
|||
type: String, |
|||
default: '' |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
visible: false, |
|||
height: 'calc(100vh - 200px)' |
|||
} |
|||
}, |
|||
methods: { |
|||
init() { |
|||
this.visible = true |
|||
this.$nextTick(() => { |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
</script> |
@ -1,216 +0,0 @@ |
|||
<template> |
|||
<!-- 手术实时状态大屏 --> |
|||
<div class="statusScreen" @click="screenFull"> |
|||
<el-row class="head"> |
|||
<el-col :span="6"> <svg-icon icon-class="icon-logo-one" class="icon-logo" /></el-col> |
|||
<el-col :span="12" class="patient-status"> |
|||
<img src="../../../assets/img/tixing.png" alt=""> |
|||
<span>患者手术实时状态</span> |
|||
</el-col> |
|||
<el-col :span="6" class="right-date"> |
|||
<span>{{ date }}</span> |
|||
<span>{{ time }}</span> |
|||
</el-col> |
|||
</el-row> |
|||
<div class="content"> |
|||
<!-- 头部 --> |
|||
<el-row class="table-head"> |
|||
<el-col :span="2">NO</el-col> |
|||
<el-col :span="6">姓名</el-col> |
|||
<el-col :span="8">手术名称</el-col> |
|||
<el-col :span="8">状态</el-col> |
|||
</el-row> |
|||
<!-- 内容 --> |
|||
<el-row v-for="(item,index) in surgicalStatus" :key="index" class="table-content"> |
|||
|
|||
<el-col :span="2">{{ ((index+1 + ((dataForm.page - 1) * 6)) < 10 ? '00': ((index+1 + ((dataForm.page - 1) * 6)) >= 10 && (index+1 + ((dataForm.page - 1) * 6)) < 100 ? '0' : '')) + (index+1 + ((dataForm.page - 1) * 6)) }}</el-col> |
|||
<el-col :span="6">{{ item.patientName }}</el-col> |
|||
<el-col :span="8">{{ item.operaName }}</el-col> |
|||
<!-- status 1:进入手术区域,2:手术准备,3:等待手术,4:开始手术,5:手术结束,6:准备离开手术区域 --> |
|||
<el-col :span="8" class="col-stauts">{{ item.status === 1 ? '进入手术区域' : |
|||
(item.status === 2 ? '手术准备' : |
|||
(item.status === 3 ? '等待手术' : |
|||
(item.status === 4 ? '开始手术' : |
|||
(item.status === 5 ? '手术结束' : |
|||
(item.status === 6 ? '准备离开手术区域' : '手术结束'))))) }}</el-col> |
|||
</el-row> |
|||
|
|||
</div> |
|||
<div class="footers"> |
|||
<span>温馨提示:</span> |
|||
<span>请您耐心等待</span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import screenfull from 'screenfull' |
|||
export default { |
|||
data() { |
|||
return { |
|||
surgicalStatus: [], |
|||
time: '', |
|||
date: '', |
|||
dataForm: { |
|||
page: 1, |
|||
limit: 6, |
|||
centreCode: 'WZYSG_QG' |
|||
}, |
|||
currentPage: 1, |
|||
total: '', |
|||
pages: null, |
|||
screenTimer: null |
|||
} |
|||
}, |
|||
created() { |
|||
setInterval(() => { |
|||
this.time = this.$moment().format('LTS') |
|||
this.date = this.$moment().format('ll') |
|||
}, 1000) |
|||
this.getScreenData() |
|||
this.screenTimer = setInterval(() => { |
|||
this.pages && (this.dataForm.page < this.pages) ? this.dataForm.page++ : this.dataForm.page = 1 |
|||
// this.surgicalStatus = [] |
|||
this.getScreenData('time') |
|||
}, 8000) |
|||
}, |
|||
destroyed() { |
|||
this.dataForm.page = 1 |
|||
this.surgicalStatus = [] |
|||
clearInterval(this.screenTimer) |
|||
}, |
|||
methods: { |
|||
async getScreenData(flag) { |
|||
const { data: res } = await this.$http.get('/pda', { |
|||
params: this.dataForm |
|||
}) |
|||
if (res.code === 0) { |
|||
this.surgicalStatus = res.data.list |
|||
res.data.list.forEach(item => { |
|||
if (item.patientName.length === 2) { |
|||
item.patientName = item.patientName.substring(0, 1) + '*' // 截取name 字符串截取第一个字符, |
|||
} else if (item.patientName.length === 3) { |
|||
item.patientName = item.patientName.substring(0, 1) + '*' + item.patientName.substring(2, 3)// 截取第一个和第三个字符 |
|||
} else if (item.patientName.length > 3) { |
|||
item.patientName = item.patientName.substring(0, 1) + '*' + '*' + item.patientName.substring(3, item.patientName.length)// 截取第一个和大于第4个字符 |
|||
} |
|||
}) |
|||
this.total = res.data.total |
|||
this.pages = Math.ceil(this.total / 6) |
|||
} else { |
|||
this.$message.error(res.msg) |
|||
} |
|||
}, |
|||
// 全屏 |
|||
screenFull() { |
|||
// 这里建议打印一下screenfull看看属性名称是不是enabled |
|||
console.log(screenfull) |
|||
if (!screenfull.enabled) { |
|||
// 如果不允许进入全屏,发出不允许提示 |
|||
this.$message({ |
|||
message: '不支持全屏', |
|||
type: 'warning' |
|||
}) |
|||
return |
|||
} |
|||
screenfull.toggle(document.getElementById('full-screen')) |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.statusScreen { |
|||
display: flex; |
|||
flex-direction: column; |
|||
justify-content: space-between; |
|||
height: 100vh; |
|||
.head { |
|||
padding: 0 38px; |
|||
display: flex; |
|||
align-items: center; |
|||
height: 140px; |
|||
width: 100vw; |
|||
background: #1e4972; |
|||
color: #fff; |
|||
.icon-logo { |
|||
font-size: 250px; |
|||
} |
|||
.patient-status { |
|||
position: relative; |
|||
width: 700px; |
|||
img { |
|||
width: 100%; |
|||
height: 140px; |
|||
} |
|||
span { |
|||
width: 100%; |
|||
font-size: 48px; |
|||
position: absolute; |
|||
text-align: center; |
|||
left: 50%; |
|||
top: 50%; |
|||
transform: translate(-50%,-50%) |
|||
} |
|||
} |
|||
.right-date { |
|||
width: 33.33%; |
|||
text-align: right; |
|||
span { |
|||
color: #A1FFF9; |
|||
} |
|||
span:nth-child(1) { |
|||
font-size: 32px; |
|||
padding-right: 16px; |
|||
} |
|||
span:nth-child(2) { |
|||
font-size: 58px; |
|||
} |
|||
} |
|||
} |
|||
.content { |
|||
height: calc(100vh - 140px - 100px); |
|||
overflow: hidden; |
|||
.table-head,.table-content { |
|||
padding: 0 48px; |
|||
font-size: 48px; |
|||
} |
|||
.table-head { |
|||
height: calc(100% / 7); |
|||
color: #00417C; |
|||
background: linear-gradient(180deg, #EEF8FF 0%, #CDEDFF 100%); |
|||
} |
|||
.table-content { |
|||
height: calc(100% / 7); |
|||
.col-stauts { |
|||
color:#058B2B; |
|||
} |
|||
} |
|||
.table-content:nth-of-type(odd) { |
|||
background: #DDF2FF; |
|||
} |
|||
.table-content:nth-of-type(even) { |
|||
background: #F9FFFF; |
|||
} |
|||
.el-col { |
|||
height: 100%; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
} |
|||
} |
|||
.footers { |
|||
height: 100px; |
|||
line-height: 100px; |
|||
padding: 0 48px; |
|||
color: #fff; |
|||
font-size: 32px; |
|||
background: #1e4972; |
|||
} |
|||
} |
|||
@media screen and (min-width: 320px) { |
|||
|
|||
} |
|||
</style> |
|||
<style lang="scss"> |
|||
.statusScreen { |
|||
} |
|||
</style> |
@ -1,744 +0,0 @@ |
|||
<template> |
|||
<div class="schedule-date"> |
|||
<div class="date-head"> |
|||
<div class="date-head-left">手术日程安排</div> |
|||
<div class="date-head-right"> |
|||
<el-button-group style="margin-right:10px;"> |
|||
<el-button type="primary" icon="el-icon-arrow-left" size="small" @click="weekPre">上周</el-button> |
|||
<el-button type="primary" size="small" @click="weekNext">上周<i class="el-icon-arrow-right el-icon--right" /> |
|||
</el-button> |
|||
</el-button-group> |
|||
<span>选择日期:</span> |
|||
<el-date-picker |
|||
v-model="newDate" |
|||
class="right-pick-btn" |
|||
:clearable="false" |
|||
type="date" |
|||
size="small" |
|||
placeholder="按日期查询" |
|||
@change="pickDate" |
|||
/> |
|||
</div> |
|||
</div> |
|||
<div class="date-content"> |
|||
<el-row class="weeks"> |
|||
<el-col :span="3" class="doctor-list-text">医生列表</el-col> |
|||
<el-col |
|||
v-for="(day, index) in days" |
|||
:key="index" |
|||
:span="3" |
|||
class="date-item" |
|||
:class="{selected: index == tabIndex}" |
|||
@click="pick(day, index)" |
|||
> |
|||
<!--本月--> |
|||
<div class="date-day"> |
|||
<span class="hidden-sm-and-down">{{ day | dateFormat }}</span> |
|||
<p>{{ day | getWeekFormat }}</p> |
|||
</div> |
|||
<div class="morning-after"> |
|||
<span>上午</span> |
|||
<span>下午</span> |
|||
</div> |
|||
</el-col> |
|||
</el-row> |
|||
<el-row v-for="(item,index) in doctorList" :key="index" :gutter="10" class="content"> |
|||
<el-col :span="3"> |
|||
<div class="doctorList"> |
|||
<div class="list"> |
|||
<div class="list-img"> |
|||
<img src="@/assets/img/avatar.png" alt=""> |
|||
</div> |
|||
<p>{{ item.name }}</p> |
|||
<p>{{ item.expertise }}</p> |
|||
</div> |
|||
</div> |
|||
</el-col> |
|||
<el-col v-for="(weekInfoItem,weekInfoIndex) in item.weekInfo" :key="weekInfoIndex" :span="3"> |
|||
<div class="surplu-num"> |
|||
<!-- 上午 --> |
|||
<div |
|||
class="morning" |
|||
:class="weekInfoItem.morning.surplusNum<=0 ? 'morningAfterClass' :'' " |
|||
@mouseover.stop="mouseoverHandle(index,weekInfoIndex,'morning')" |
|||
@mouseout="mouseoutHandle" |
|||
> |
|||
<p>余</p> |
|||
<p :style="{'color':weekInfoItem.morning.surplusNum<=0 ? 'red':'#00BB61'}"> |
|||
{{ weekInfoItem.morning.surplusNum }}</p> |
|||
<div |
|||
v-show="currentIndex===index && currentWeekIndex===weekInfoIndex && plusIsShow && showMorningAfterText==='morning' && weekInfoItem.morning.surplusNum>0" |
|||
class="show-plus" |
|||
> |
|||
<i class="el-icon-plus" /> |
|||
</div> |
|||
</div> |
|||
<!-- 下午 --> |
|||
<div |
|||
class="after" |
|||
:class="weekInfoItem.after.surplusNum<=0 ? 'morningAfterClass' :'' " |
|||
@mouseover.stop="mouseoverHandle(index,weekInfoIndex,'after')" |
|||
@mouseout="mouseoutHandle" |
|||
> |
|||
<p>余</p> |
|||
<p :style="{'color':weekInfoItem.after.surplusNum<=0 ? 'red':'#00BB61'}"> |
|||
{{ weekInfoItem.after.surplusNum }}</p> |
|||
<div |
|||
v-show="currentIndex===index && currentWeekIndex===weekInfoIndex && plusIsShow && showMorningAfterText==='after' && weekInfoItem.morning.surplusNum>0" |
|||
class="show-plus" |
|||
@click="addPatientHandle" |
|||
> |
|||
<i class="el-icon-plus" /> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</el-col> |
|||
</el-row> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import moment from 'moment' |
|||
import _ from 'lodash' |
|||
/* eslint-disable */ |
|||
export default { |
|||
props: { |
|||
dateValue: { |
|||
type: String, |
|||
default: moment(new Date()).format("YYYY-MM-DD") |
|||
}, |
|||
timeValue: { |
|||
type: String, |
|||
default: "00:00" |
|||
} |
|||
}, |
|||
data() { |
|||
return { |
|||
currentYear: 1970, // 年份 |
|||
currentMonth: 1, // 月份 |
|||
currentDay: 1, // 日期 |
|||
currentWeek: 1, // 星期 |
|||
days: [], |
|||
value1: "", |
|||
tabIndex: null, |
|||
newDate: moment(new Date()).format("YYYY-MM-DD"), |
|||
tabTimeIndex: 4, |
|||
times: [ |
|||
{ time: "00:00:00~06:00:00", label: "00:00~06:00" }, |
|||
{ time: "06:00:00~12:00:00", label: "06:00~12:00" }, |
|||
{ time: "12:00:00~18:00:00", label: "12:00~18:00" }, |
|||
{ time: "18:00:00~24:00:00", label: "18:00~24:00" }, |
|||
{ time: "00:00:00~24:00:00", label: "今日全部" } |
|||
], |
|||
plusIsShow: false, |
|||
currentIndex: null, |
|||
currentWeekIndex: null, |
|||
showMorningAfterText: '', |
|||
doctorList: [{ |
|||
image: '@/assets/img/avatar.png', |
|||
name: '李浩', |
|||
expertise: '激光手术', |
|||
weekInfo: [{ |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
after: { |
|||
surplusNum: 0, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
after: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 0, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 5, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 0, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 8, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 5, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 9, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 7, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 4, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 7, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}] |
|||
}, { |
|||
image: '@/assets/img/avatar.png', |
|||
name: '李浩', |
|||
expertise: '激光手术', |
|||
weekInfo: [{ |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 0, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [0] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 0, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 0, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
after: { |
|||
surplusNum: 4, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 7, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
after: { |
|||
surplusNum: 9, // 剩余数量 |
|||
scheduled_patients: [{ |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}, { |
|||
name: '李二狗', |
|||
sex: '男', |
|||
age: '45' |
|||
}] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
after: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
after: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
}, { |
|||
date: '', |
|||
morning: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
after: { |
|||
surplusNum: 12, // 剩余数量 |
|||
scheduled_patients: [] |
|||
}, |
|||
}] |
|||
}] |
|||
}; |
|||
}, |
|||
filters: { |
|||
dateFormat(date) { |
|||
return moment(date).format("YYYY-MM-DD"); |
|||
}, |
|||
getWeekFormat(date) { |
|||
const weeksObj = { |
|||
1: "周一", |
|||
2: "周二", |
|||
3: "周三", |
|||
4: "周四", |
|||
5: "周五", |
|||
6: "周六", |
|||
7: "周日" |
|||
}; |
|||
let weekNumber = moment(date).isoWeekday(); |
|||
return weeksObj[weekNumber]; |
|||
} |
|||
}, |
|||
|
|||
mounted() { |
|||
const index = _.findIndex(this.days, function (o) { |
|||
// console.log('o: ', o.getDate()); |
|||
// console.log('new Date().getDate(): ', new Date().getDate()); |
|||
return o.getDate() === new Date().getDate(); |
|||
}); |
|||
console.log("index: ", index); |
|||
this.tabIndex = index; |
|||
}, |
|||
|
|||
created() { |
|||
this.initData(null); |
|||
}, |
|||
|
|||
methods: { |
|||
formatDate(year, month, day) { |
|||
const y = year; |
|||
let m = month; |
|||
if (m < 10) m = `0${m}`; |
|||
let d = day; |
|||
if (d < 10) d = `0${d}`; |
|||
return `${y}-${m}-${d}`; |
|||
}, |
|||
pickDate(date) { |
|||
let that = this; |
|||
that.newDate = moment(date).format("YYYY-MM-DD"); |
|||
that.$emit("dateValue", that.newDate); |
|||
console.log("this.newDate: ", that.newDate); |
|||
that.initData(that.newDate); |
|||
const index = _.findIndex(that.days, function (o) { |
|||
return o.getDate() === new Date(that.newDate).getDate(); |
|||
}); |
|||
// console.log("index: ", index); |
|||
this.tabIndex = index; |
|||
}, |
|||
initData(cur) { |
|||
let date = ""; |
|||
if (cur) { |
|||
date = new Date(cur); |
|||
} else { |
|||
date = new Date(); |
|||
} |
|||
this.currentDay = date.getDate(); // 今日日期 几号 |
|||
this.currentYear = date.getFullYear(); // 当前年份 |
|||
this.currentMonth = date.getMonth() + 1; // 当前月份 |
|||
this.currentWeek = date.getDay(); // 1...6,0 // 星期几 |
|||
if (this.currentWeek === 0) { |
|||
this.currentWeek = 7; |
|||
} |
|||
const str = this.formatDate( |
|||
this.currentYear, |
|||
this.currentMonth, |
|||
this.currentDay |
|||
); // 今日日期 年-月-日 |
|||
this.days.length = 0; |
|||
// 今天是周日,放在第一行第7个位置,前面6个 这里默认显示一周,如果需要显示一个月,则第二个循环为 i<= 35- this.currentWeek |
|||
/* eslint-disabled */ |
|||
// 今天 |
|||
for (let i = this.currentWeek - 1; i >= 0; i -= 1) { |
|||
const d = new Date(str); |
|||
d.setDate(d.getDate() - i); |
|||
// console.log(y:" + d.getDate()) |
|||
// console.log('d: ', d); |
|||
this.days.push(d); |
|||
} |
|||
// 这个星期 |
|||
for (let i = 1; i <= 7 - this.currentWeek; i += 1) { |
|||
const d = new Date(str); |
|||
d.setDate(d.getDate() + i); |
|||
this.days.push(d); |
|||
// console.log('d1: ', d); |
|||
} |
|||
}, |
|||
|
|||
// 上个星期 |
|||
weekPre() { |
|||
const d = this.days[0]; // 如果当期日期是7号或者小于7号 |
|||
d.setDate(d.getDate() - 7); |
|||
this.initData(d); |
|||
}, |
|||
|
|||
// 下个星期 |
|||
weekNext() { |
|||
const d = this.days[6]; // 如果当期日期是7号或者小于7号 |
|||
d.setDate(d.getDate() + 7); |
|||
this.initData(d); |
|||
}, |
|||
|
|||
// 上一個月 传入当前年份和月份 |
|||
pickPre(year, month) { |
|||
const d = new Date(this.formatDate(year, month, 1)); |
|||
d.setDate(0); |
|||
this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1)); |
|||
}, |
|||
|
|||
// 下一個月 传入当前年份和月份 |
|||
pickNext(year, month) { |
|||
const d = new Date(this.formatDate(year, month, 1)); |
|||
d.setDate(35); |
|||
this.initData(this.formatDate(d.getFullYear(), d.getMonth() + 1, 1)); |
|||
}, |
|||
|
|||
// 当前选择日期 |
|||
pick(date, index) { |
|||
this.newDate = moment(date).format("YYYY-MM-DD"); |
|||
this.$emit("dateValue", this.newDate); |
|||
// console.log("index: ", index); |
|||
this.tabIndex = index; |
|||
// alert( |
|||
// this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate()) |
|||
// ); |
|||
}, |
|||
pickTime(time, index) { |
|||
// console.log('time: ', time); |
|||
let timeArr = []; |
|||
timeArr.push(_.split(time.time, "~")); |
|||
// console.log("timeArr: ", timeArr); |
|||
this.$emit("timeValue", _.join(timeArr), ""); |
|||
// console.log("index: ", index); |
|||
this.tabTimeIndex = index; |
|||
// alert( |
|||
// this.formatDate(date.getFullYear(), date.getMonth() + 1, date.getDate()) |
|||
// ); |
|||
}, |
|||
// 鼠标移入 |
|||
mouseoverHandle(index, weekInfoIndex, showMorngingAfterText) { |
|||
this.currentIndex = index |
|||
this.currentWeekIndex = weekInfoIndex |
|||
this.showMorningAfterText = showMorningAfterText |
|||
this.plusIsShow = true |
|||
}, |
|||
// 鼠标移入 |
|||
mouseoutHandle() { |
|||
this.currentIndex = null |
|||
this.currentWeekIndex = null |
|||
this.showMorningAfterText = '' |
|||
this.plusIsShow = false |
|||
}, |
|||
// 新增日程安排 |
|||
addPatientHandle() { |
|||
|
|||
} |
|||
} |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.schedule-date { |
|||
font-size: 14px; |
|||
margin-top: 15px; |
|||
padding: 16px; |
|||
.date-head { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
margin-bottom: 16px; |
|||
} |
|||
.date-content { |
|||
background: #f7f9fd; |
|||
padding: 10px 0; |
|||
.weeks { |
|||
display: flex; |
|||
padding-bottom: 10px; |
|||
border-bottom: 1px solid #e2ebf9; |
|||
color: #88939d; |
|||
.doctor-list-text { |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
} |
|||
.date-day { |
|||
text-align: center; |
|||
margin-bottom: 10px; |
|||
} |
|||
.morning-after { |
|||
display: flex; |
|||
justify-content: space-around; |
|||
} |
|||
.date-item { |
|||
cursor: pointer; |
|||
padding: 5px 10px; |
|||
border-right: none; |
|||
list-style: none; |
|||
flex: 1; |
|||
text-align: center; |
|||
&:hover { |
|||
background: #dff0d8; |
|||
} |
|||
&:active { |
|||
background: #dff0d8; |
|||
} |
|||
} |
|||
} |
|||
.content { |
|||
border-bottom: 1px solid #e2ebf9; |
|||
padding: 16px 0; |
|||
display: flex; |
|||
align-items: center; |
|||
.doctorList { |
|||
text-align: center; |
|||
.list { |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
justify-content: center; |
|||
} |
|||
.list-img { |
|||
width: 64px; |
|||
height: 64px; |
|||
border-radius: 50%; |
|||
overflow: hidden; |
|||
img { |
|||
width: 64px; |
|||
height: 64px; |
|||
} |
|||
} |
|||
} |
|||
.surplu-num { |
|||
display: flex; |
|||
.morning { |
|||
margin-right: 6px; |
|||
} |
|||
.morning, |
|||
.after { |
|||
position: relative; |
|||
color: #88939d; |
|||
width: 45%; |
|||
height: 120px; |
|||
border-radius: 3px; |
|||
border-top: 2px solid #00bb61; |
|||
background: #fff; |
|||
display: flex; |
|||
flex-direction: column; |
|||
align-items: center; |
|||
justify-content: center; |
|||
cursor: pointer; |
|||
p:nth-child(2) { |
|||
font-size: 24px; |
|||
} |
|||
} |
|||
.morningAfterClass { |
|||
border-top: 2px solid #e1e1e1; |
|||
background: #fcfdfe; |
|||
} |
|||
.morning:hover, |
|||
.after:hover { |
|||
border-top: 2px solid #1b5bfb !important; |
|||
box-shadow: 0px 0px 16px rgba(8, 115, 215, 0.24); |
|||
} |
|||
.show-plus { |
|||
width: 100%; |
|||
height: 100%; |
|||
background: #fff; |
|||
position: absolute; |
|||
left: 0; |
|||
top: 0; |
|||
text-align: center; |
|||
font-size: 24px; |
|||
line-height: 120px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.time-range { |
|||
display: flex; |
|||
justify-content: space-around; |
|||
align-items: center; |
|||
padding: 10px 0; |
|||
span { |
|||
cursor: pointer; |
|||
padding-bottom: 5px; |
|||
border-bottom: 3px solid #fff; |
|||
&:hover { |
|||
border-bottom: 3px solid rgb(151, 198, 245); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.today-item { |
|||
cursor: pointer; |
|||
line-height: 45px; |
|||
} |
|||
.selected { |
|||
box-sizing: border-box; |
|||
} |
|||
.item-wrapper { |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
} |
|||
.doctor-list-text, |
|||
.prev-btn, |
|||
.next-btn { |
|||
cursor: pointer; |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
.fa-icon { |
|||
font-size: 18px; |
|||
} |
|||
} |
|||
</style> |
|||
<style lang="scss"> |
|||
.schedule-date { |
|||
} |
|||
</style> |
Loading…
Reference in new issue