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