15 changed files with 1362 additions and 110 deletions
@ -1,37 +1,106 @@ |
|||||
<template> |
<template> |
||||
<div style="height: 100%"> |
|
||||
<el-form id="formDiagnosis" ref="form" :model="diagnosis" label-width="120px" style="margin-top: 32px"> |
|
||||
<el-form-item label="诊断:" style="width: 540px" prop="zd"> |
|
||||
<el-input v-model="diagnosis.zd" type="textarea" auto-complete="off" :rows="4" style="width: 420px" /> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="处理:" style="width: 540px" prop="cl"> |
|
||||
<el-input v-model="diagnosis.cl" type="textarea" auto-complete="off" :rows="4" style="width: 420px" /> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="治疗意见:" style="width: 540px" prop="zlyj"> |
|
||||
<el-input v-model="diagnosis.zlyj" type="textarea" auto-complete="off" :rows="4" style="width: 420px" /> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
|
<div style="height: 100%;display: flex"> |
||||
|
<div class="historyTaking"> |
||||
|
<el-form id="formDiagnosis" ref="form" :model="diagnosis" label-width="120px" style="margin-top: 32px"> |
||||
|
<el-form-item label="诊断:" style="width: 540px" prop="zd"> |
||||
|
<el-input v-model="diagnosis.zd" type="textarea" auto-complete="off" :rows="4" style="width: 420px" @focus="setCurWord('诊断')" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="处理:" style="width: 540px" prop="cl"> |
||||
|
<el-input v-model="diagnosis.cl" type="textarea" auto-complete="off" :rows="4" style="width: 420px" @focus="setCurWord('处理')" /> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="治疗意见:" style="width: 540px" prop="zlyj"> |
||||
|
<el-input v-model="diagnosis.zlyj" type="textarea" auto-complete="off" :rows="4" style="width: 420px" @focus="setCurWord('治疗意见')" /> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<div v-if="curWord" class="rightText"> |
||||
|
<div style="text-align: left;margin-bottom: 16px"> |
||||
|
常用内容模板: |
||||
|
</div> |
||||
|
<div class="wordContent"> |
||||
|
<el-tooltip v-for="(item,index) in commonList" :key="index" effect="dark" placement="top-start"> |
||||
|
<span slot="content" class="tooltips">{{ item }}</span> |
||||
|
<el-button class="wordBtn" @click="combineWord(item)">{{ item }}</el-button> |
||||
|
</el-tooltip> |
||||
|
<el-button type="primary" @click="openTextTemplate">更多</el-button> |
||||
|
</div> |
||||
|
</div> |
||||
</div> |
</div> |
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
export default { |
export default { |
||||
name: 'DiagnosisForm', |
name: 'DiagnosisForm', |
||||
props: ['diagnosis'], |
|
||||
|
props: ['diagnosis', 'commonList'], |
||||
|
data() { |
||||
|
return { |
||||
|
curWord: '' |
||||
|
} |
||||
|
}, |
||||
methods: { |
methods: { |
||||
reset() { |
reset() { |
||||
this.$nextTick(() => { |
this.$nextTick(() => { |
||||
this.$refs.form.resetFields() |
this.$refs.form.resetFields() |
||||
}) |
}) |
||||
|
}, |
||||
|
setCurWord(word) { |
||||
|
this.curWord = word |
||||
|
}, |
||||
|
combineWord(text) { |
||||
|
switch (this.curWord) { |
||||
|
case '诊断': |
||||
|
if (!this.diagnosis.zd) { |
||||
|
this.diagnosis.zd = '' |
||||
|
} |
||||
|
this.diagnosis.zd = this.diagnosis.zd + text |
||||
|
break |
||||
|
case '处理': |
||||
|
if (!this.diagnosis.cl) { |
||||
|
this.diagnosis.cl = '' |
||||
|
} |
||||
|
this.diagnosis.cl = this.diagnosis.cl + text |
||||
|
break |
||||
|
case '治疗意见': |
||||
|
if (!this.diagnosis.zlyj) { |
||||
|
this.diagnosis.zlyj = '' |
||||
|
} |
||||
|
this.diagnosis.zlyj = this.diagnosis.zlyj + text |
||||
|
break |
||||
|
} |
||||
|
}, |
||||
|
openTextTemplate() { |
||||
|
this.$emit('openDrawer', this.curWord) |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="scss"> |
|
||||
|
<style scoped lang="scss"> |
||||
#formDiagnosis{ |
#formDiagnosis{ |
||||
.el-textarea__inner{ |
.el-textarea__inner{ |
||||
font-size: 16px; |
font-size: 16px; |
||||
} |
} |
||||
} |
} |
||||
|
.wordContent{ |
||||
|
text-align: left; |
||||
|
} |
||||
|
.historyTaking{ |
||||
|
height: 100%; |
||||
|
padding: 16px 16px 0 0; |
||||
|
width: 50%; |
||||
|
overflow: hidden; |
||||
|
overflow-y: scroll; |
||||
|
} |
||||
|
.wordBtn{ |
||||
|
max-width: 200px; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
} |
||||
|
.rightText{ |
||||
|
width: 50%; |
||||
|
padding: 16px; |
||||
|
} |
||||
|
.tooltips{ |
||||
|
max-width: 200px !important; |
||||
|
} |
||||
</style> |
</style> |
||||
|
@ -0,0 +1,93 @@ |
|||||
|
<template> |
||||
|
<div class="content"> |
||||
|
<div class="leftContent"> |
||||
|
<div |
||||
|
v-for="(item,index) in historyList" |
||||
|
:key="index" |
||||
|
:class="curIndex===index?'active':''" |
||||
|
class="dateItem" |
||||
|
@click="getCurRecord(item,index)" |
||||
|
> |
||||
|
{{ item.createDate }} |
||||
|
</div> |
||||
|
</div> |
||||
|
<div class="rightBox"> |
||||
|
<history-record-form :patient-data="patientData" :history-data="curRecord" @introduceHistory="introduceHistory" /> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import AllFormPrint from '@/components/360View/medicalRecord/outPatientRecord/allFormPrint.vue' |
||||
|
import HistoryRecordForm from '@/components/360View/medicalRecord/outPatientRecord/historyRecordForm.vue' |
||||
|
|
||||
|
export default { |
||||
|
name: 'HistoryCallRecord', |
||||
|
components: { HistoryRecordForm, AllFormPrint }, |
||||
|
props: ['patientId', 'patientData'], |
||||
|
data() { |
||||
|
return { |
||||
|
historyList: [], |
||||
|
curRecord: {}, |
||||
|
curIndex: '' |
||||
|
} |
||||
|
}, |
||||
|
created() { |
||||
|
this.queryPatientHistory() |
||||
|
}, |
||||
|
methods: { |
||||
|
// 历史记录列表 |
||||
|
queryPatientHistory() { |
||||
|
this.$http.get('/mjz/getPatientMjzHistory', { |
||||
|
params: { |
||||
|
patientId: this.patientId |
||||
|
} |
||||
|
}).then(res => { |
||||
|
this.historyList = res.data.data |
||||
|
if (this.historyList.length) { |
||||
|
this.curIndex = 0 |
||||
|
this.curRecord = this.historyList[0] |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
getCurRecord(item, index) { |
||||
|
this.curIndex = index |
||||
|
this.curRecord = item |
||||
|
}, |
||||
|
// 引入 |
||||
|
introduceHistory(param) { |
||||
|
this.$emit('introduceHistory', param) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.dateItem{ |
||||
|
padding: 5px; |
||||
|
} |
||||
|
.active{ |
||||
|
background: #409EFF; |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
.content{ |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
height: 100%; |
||||
|
padding: 0 0 10px 0; |
||||
|
color: #000; |
||||
|
} |
||||
|
.leftContent{ |
||||
|
width: 20%; |
||||
|
text-align: left; |
||||
|
padding-right: 10px; |
||||
|
font-size: 16px; |
||||
|
} |
||||
|
.rightBox{ |
||||
|
flex: 1; |
||||
|
text-align: left; |
||||
|
padding: 0 0 0 20px; |
||||
|
font-size: 16px; |
||||
|
border-left: 1px solid #ccc; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,123 @@ |
|||||
|
<template> |
||||
|
<div id="allForeForm"> |
||||
|
<div class="printTitle"> |
||||
|
门急诊病历 |
||||
|
</div> |
||||
|
<div v-if="patientData" class="patientInfo"> |
||||
|
<div> |
||||
|
姓名:{{ patientData.patientName }} |
||||
|
</div> |
||||
|
<div> |
||||
|
性别:{{ patientData.patientSex }} |
||||
|
</div> |
||||
|
<div> |
||||
|
年龄:{{ patientData.patientAge }} |
||||
|
</div> |
||||
|
<div> |
||||
|
登记号:{{ patientData.patientId }} |
||||
|
</div> |
||||
|
<div v-if="historyData"> |
||||
|
日期:{{ historyData.createDate }} |
||||
|
</div> |
||||
|
</div> |
||||
|
<div v-if="historyData"> |
||||
|
<div class="labelItem"> |
||||
|
<span>主诉:</span> |
||||
|
{{ historyData.zhuSu }} |
||||
|
<span v-if="historyData.zhuSu" @click="introduceHistory(historyData.zhuSu,'主诉')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>现病史:</span> |
||||
|
{{ historyData.xbs }} |
||||
|
<span v-if="historyData.xbs" @click="introduceHistory(historyData.xbs,'现病史')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>既往病史:</span> |
||||
|
{{ historyData.jws }} |
||||
|
<span v-if="historyData.jws" @click="introduceHistory(historyData.jws,'既往病史')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>过敏史:</span> |
||||
|
{{ historyData.gms }} |
||||
|
<span v-if="historyData.gms" @click="introduceHistory(historyData.gms,'过敏史')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>周身其他病史:</span> |
||||
|
{{ historyData.zsqtbs }} |
||||
|
<span v-if="historyData.zsqtbs" @click="introduceHistory(historyData.zsqtbs,'周身其他病史')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>诊断:</span> |
||||
|
{{ historyData.zd }} |
||||
|
<span v-if="historyData.zd" @click="introduceHistory(historyData.zd,'诊断')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>处理:</span> |
||||
|
{{ historyData.cl }} |
||||
|
<span v-if="historyData.cl" @click="introduceHistory(historyData.cl,'处理')">【引入】</span> |
||||
|
</div> |
||||
|
<div class="labelItem"> |
||||
|
<span>治疗意见:</span> |
||||
|
{{ historyData.zlyj }} |
||||
|
<span v-if="historyData.zlyj" @click="introduceHistory(historyData.zlyj,'治疗意见')">【引入】</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name: 'HistoryRecordForm', |
||||
|
props: ['patientData', 'historyData'], |
||||
|
methods: { |
||||
|
introduceHistory(content, type) { |
||||
|
const param = { |
||||
|
content, |
||||
|
type |
||||
|
} |
||||
|
this.$emit('introduceHistory', param) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.title{ |
||||
|
text-align: center; |
||||
|
margin-top: 50px; |
||||
|
} |
||||
|
#allForeForm{ |
||||
|
text-align: left; |
||||
|
} |
||||
|
.fore{ |
||||
|
width: calc(100% - 10px); |
||||
|
} |
||||
|
.labelItem{ |
||||
|
font-size: 16px; |
||||
|
word-break: break-all; |
||||
|
margin: 5px 0; |
||||
|
span{ |
||||
|
display: inline-block; |
||||
|
} |
||||
|
span:nth-child(1){ |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
span:nth-child(2){ |
||||
|
color: #409EFF; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
} |
||||
|
.printTitle{ |
||||
|
font-size: 20px; |
||||
|
font-weight: bold; |
||||
|
text-align: center; |
||||
|
} |
||||
|
.patientInfo{ |
||||
|
display: flex; |
||||
|
border-bottom: 1px solid #000; |
||||
|
padding: 10px 0; |
||||
|
>div{ |
||||
|
padding-right: 20px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,5 @@ |
|||||
|
<template> |
||||
|
<div> |
||||
|
<router-view /> |
||||
|
</div> |
||||
|
</template> |
@ -0,0 +1,151 @@ |
|||||
|
<template> |
||||
|
<div class="template-add-dialog"> |
||||
|
<el-dialog |
||||
|
width="40%" |
||||
|
:visible.sync="visible" |
||||
|
:title="!dataForm.id ? '新增模板分类' : '修改模板分类'" |
||||
|
:close-on-click-modal="false" |
||||
|
:close-on-press-escape="false" |
||||
|
@close="closeDialog" |
||||
|
> |
||||
|
<el-form |
||||
|
ref="dataForm" |
||||
|
:model="dataForm" |
||||
|
:rules="dataRule" |
||||
|
label-width="auto" |
||||
|
> |
||||
|
<el-form-item prop="content" label="分类名称"> |
||||
|
<el-input |
||||
|
v-model="dataForm.content" |
||||
|
placeholder="分类名称" |
||||
|
size="small" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<!-- 排序 --> |
||||
|
<el-form-item prop="sort" label="排序"> |
||||
|
<el-input-number v-model="dataForm.sort" controls-position="right" :min="0" label="排序" /> |
||||
|
</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> |
||||
|
<!-- <el-button type="primary" @click="exportContent">引入</el-button> --> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
|
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
props: { |
||||
|
systemInfo: { |
||||
|
type: Object, |
||||
|
default: () => { |
||||
|
return {} |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
visible: false, |
||||
|
modelType: '', |
||||
|
dataForm: { |
||||
|
pid: 0, |
||||
|
// 类型 1:科室,2:个人 |
||||
|
type: '', |
||||
|
sort: 0, |
||||
|
content: '' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
computed: { |
||||
|
dataRule() { |
||||
|
return { |
||||
|
content: [ |
||||
|
{ required: true, message: '请输入内容', trigger: 'blur' } |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
init() { |
||||
|
this.visible = true |
||||
|
this.$nextTick(() => { |
||||
|
this.$refs.dataForm.resetFields() |
||||
|
if (this.dataForm.id) { |
||||
|
!this.modelType && this.getInfo() |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 获取信息 |
||||
|
getInfo() { |
||||
|
this.$http.get('/bd/template/getTemplateById', { |
||||
|
params: { |
||||
|
id: this.dataForm.id |
||||
|
} |
||||
|
}).then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} |
||||
|
this.dataForm = res.data |
||||
|
}).catch(() => {}) |
||||
|
}, |
||||
|
// 表单提交 |
||||
|
dataFormSubmitHandle() { |
||||
|
this.$refs.dataForm.validate((valid) => { |
||||
|
if (!valid) { |
||||
|
return false |
||||
|
} |
||||
|
this.dataForm.type = parseFloat(this.dataForm.type) |
||||
|
let url = '' |
||||
|
if (this.dataForm.id) { |
||||
|
url = '/bd/template/updateBdTemplate' |
||||
|
} else { |
||||
|
url = '/bd/template/addBdTemplate' |
||||
|
} |
||||
|
this.$http.post(url, { ...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(() => {}) |
||||
|
}) |
||||
|
}, |
||||
|
closeDialog() { |
||||
|
this.$emit('closeDialog') |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
.template-add-dialog{ |
||||
|
.el-form-item { |
||||
|
margin-bottom:8px |
||||
|
} |
||||
|
.el-select { |
||||
|
width: 100%; |
||||
|
} |
||||
|
.el-form-item__error { |
||||
|
top: 27% !important; |
||||
|
right: 10px !important; |
||||
|
left: auto; |
||||
|
} |
||||
|
.el-input-number { |
||||
|
width: 100%; |
||||
|
} |
||||
|
.el-input__inner { |
||||
|
text-align: left; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,149 @@ |
|||||
|
<template> |
||||
|
<div class="template-add-dialog"> |
||||
|
<el-dialog |
||||
|
width="50%" |
||||
|
:visible.sync="visible" |
||||
|
:title="!dataForm.id ? '新增' : '编辑'" |
||||
|
:close-on-click-modal="false" |
||||
|
:close-on-press-escape="false" |
||||
|
@close="closeDialog" |
||||
|
> |
||||
|
<el-form |
||||
|
ref="dataForm" |
||||
|
:model="dataForm" |
||||
|
:rules="dataRule" |
||||
|
label-width="auto" |
||||
|
> |
||||
|
<el-form-item prop="contentValue" label="模板内容" style="margin-top:20px;"> |
||||
|
<el-input |
||||
|
v-model="dataForm.contentValue" |
||||
|
type="textarea" |
||||
|
:autosize="{ minRows: 18}" |
||||
|
placeholder="请输入内容" |
||||
|
/> |
||||
|
</el-form-item> |
||||
|
<!-- 排序 --> |
||||
|
<el-form-item prop="sort" label="排序"> |
||||
|
<el-input-number v-model="dataForm.sort" controls-position="right" :min="0" label="排序" /> |
||||
|
</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> |
||||
|
<!-- <el-button type="primary" @click="exportContent">引入</el-button> --> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
</div> |
||||
|
|
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
props: { |
||||
|
systemInfo: { |
||||
|
type: Object, |
||||
|
default: () => { |
||||
|
return {} |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
visible: false, |
||||
|
type: '', |
||||
|
dataForm: { |
||||
|
treeId: '', |
||||
|
contentValue: '', |
||||
|
sort: '' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
computed: { |
||||
|
dataRule() { |
||||
|
return { |
||||
|
contentValue: [ |
||||
|
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
||||
|
] |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
init() { |
||||
|
this.visible = true |
||||
|
this.$nextTick(() => { |
||||
|
this.$refs.dataForm.resetFields() |
||||
|
if (this.dataForm.id) { |
||||
|
this.getInfo() |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 获取信息 |
||||
|
getInfo() { |
||||
|
this.$http.get('/bd/template/getInfoById', { |
||||
|
params: { |
||||
|
id: this.dataForm.id |
||||
|
} |
||||
|
}).then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} |
||||
|
this.dataForm = res.data |
||||
|
}).catch(() => {}) |
||||
|
}, |
||||
|
// 表单提交 |
||||
|
dataFormSubmitHandle() { |
||||
|
this.$refs.dataForm.validate((valid) => { |
||||
|
if (!valid) { |
||||
|
return false |
||||
|
} |
||||
|
let url = '' |
||||
|
if (this.dataForm.id) { |
||||
|
url = '/bd/template/updateBdTemplateValue' |
||||
|
} else { |
||||
|
url = '/bd/template/addBdTemplateValue' |
||||
|
} |
||||
|
this.updateTemplate({ ...this.dataForm }, url) |
||||
|
}) |
||||
|
}, |
||||
|
// 新增/修改 |
||||
|
updateTemplate(dataForm, url) { |
||||
|
this.$http.post(url, { ...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(() => {}) |
||||
|
}, |
||||
|
closeDialog() { |
||||
|
this.$emit('closeDialog') |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss"> |
||||
|
.template-add-dialog{ |
||||
|
.el-form-item { |
||||
|
margin-bottom:8px |
||||
|
} |
||||
|
.el-select { |
||||
|
width: 100%; |
||||
|
} |
||||
|
.el-form-item__error { |
||||
|
top: 27% !important; |
||||
|
right: 10px !important; |
||||
|
left: auto; |
||||
|
} |
||||
|
.el-input__inner { |
||||
|
text-align: left; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,64 @@ |
|||||
|
<template> |
||||
|
<div class="template-management-father"> |
||||
|
<div class="template-management"> |
||||
|
<el-tabs v-model="mainActiveName"> |
||||
|
<el-tab-pane label="科室" name="1" class="tab-p"> |
||||
|
<tabFun v-if="mainActiveName==='1'" ref="tabFunRef1" main-active-name="1" :page-title="pageTitle" @yinruTemplateClick="yinruTemplateClick" /> |
||||
|
</el-tab-pane> |
||||
|
<el-tab-pane label="个人" name="2" class="tab-p"> |
||||
|
<tabFun v-if="mainActiveName==='2'" ref="tabFunRef2" main-active-name="2" :page-title="pageTitle" @yinruTemplateClick="yinruTemplateClick" /> |
||||
|
</el-tab-pane> |
||||
|
</el-tabs> |
||||
|
</div> |
||||
|
</div> |
||||
|
|
||||
|
</template> |
||||
|
<script> |
||||
|
import tabFun from './tab-fun.vue' |
||||
|
export default { |
||||
|
components: { |
||||
|
tabFun |
||||
|
}, |
||||
|
props: { |
||||
|
pageTitle: { |
||||
|
type: String, |
||||
|
default: '模板管理' |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
mainActiveName: '1' |
||||
|
} |
||||
|
}, |
||||
|
created() { |
||||
|
}, |
||||
|
methods: { |
||||
|
// 引入内容 |
||||
|
yinruTemplateClick(item) { |
||||
|
this.$emit('yinruTemplateClick', item) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
.template-management-father { |
||||
|
height: calc(100vh - 50px - 32px); |
||||
|
width: 100%; |
||||
|
} |
||||
|
.template-management { |
||||
|
background: #fff; |
||||
|
padding: 12px; |
||||
|
width: 100%; |
||||
|
height: calc(100vh - 60px); |
||||
|
} |
||||
|
</style> |
||||
|
<style lang="scss" > |
||||
|
.template-management { |
||||
|
.el-tabs__nav-wrap::after { |
||||
|
height: 1px !important; |
||||
|
} |
||||
|
.el-tabs__header { |
||||
|
margin-bottom: 6px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,378 @@ |
|||||
|
<template> |
||||
|
<div class="tab-fun"> |
||||
|
<div class="leftlist"> |
||||
|
<div class="leftlist-ul" :class="pageTitle=='模板管理' ? 'leftlistMb' : 'leftlistDa'"> |
||||
|
<el-tree |
||||
|
ref="templateTree" |
||||
|
:data="fenleiList" |
||||
|
:props="defaultProps" |
||||
|
node-key="id" |
||||
|
accordion |
||||
|
highlight-current |
||||
|
default-expand-all |
||||
|
:expand-on-click-node="false" |
||||
|
> |
||||
|
<span slot-scope="{ node, data }" class="custom-tree-node treeItem" @click="leftListClick(data)"> |
||||
|
<el-tooltip show-overflow-tip class="item" effect="dark" placement="top-start"> |
||||
|
<div slot="content" class="tooltips">{{ node.label }}</div> |
||||
|
<span class="treeContent">{{ node.label }}</span> |
||||
|
</el-tooltip> |
||||
|
<span v-show="pageTitle=='模板管理'"> |
||||
|
<el-button |
||||
|
class="operateBtn" |
||||
|
type="text" |
||||
|
size="mini" |
||||
|
icon="el-icon-edit" |
||||
|
@click="() => addEditFenlei(data)" |
||||
|
/> |
||||
|
<el-button |
||||
|
class="operateBtn" |
||||
|
type="text" |
||||
|
size="mini" |
||||
|
icon="el-icon-plus" |
||||
|
@click="() => addEditFenlei(data,'新增子节点')" |
||||
|
/> |
||||
|
<el-button |
||||
|
class="operateBtn" |
||||
|
type="text" |
||||
|
size="mini" |
||||
|
icon="el-icon-delete" |
||||
|
@click="() => deleteFenleiClick(data,'分类')" |
||||
|
/> |
||||
|
</span> |
||||
|
</span> |
||||
|
</el-tree> |
||||
|
</div> |
||||
|
<el-button v-show="pageTitle=='模板管理'" type="primary" icon="el-icon-plus" class="plus-fenlei" circle @click="addEditFenlei" /> |
||||
|
</div> |
||||
|
<div class="rightlist"> |
||||
|
<div v-if="contentList.length" class="rightlist-ul" :class="pageTitle=='模板管理' ? 'rightlistMb' : 'rightlistDa'"> |
||||
|
<div v-for="(item,index) in contentList" :key="index" class="flex rightli" @dblclick="yinruTemplateClick(item)"> |
||||
|
<div class="rightContentli"> |
||||
|
<span>{{ item.contentValue }}</span> |
||||
|
</div> |
||||
|
<span v-if="pageTitle=='模板管理'" class="buttonli"> |
||||
|
<span |
||||
|
style="color: #1890ff; padding-right: 8px" |
||||
|
class="cursor" |
||||
|
@click="setOften(item)" |
||||
|
> |
||||
|
<el-icon :class="[item.usual?'el-icon-star-on':'el-icon-star-off',item.usual?'active':'']" /> |
||||
|
</span> |
||||
|
<span |
||||
|
style="color: #1890ff; padding-right: 8px" |
||||
|
class="cursor" |
||||
|
@click="addEditContent(item)" |
||||
|
>编辑</span> |
||||
|
<span |
||||
|
style="color: #ff4d4f;" |
||||
|
class="cursor" |
||||
|
@click="deleteFenleiClick(item)" |
||||
|
>删除</span> |
||||
|
</span> |
||||
|
<span v-else class="buttonli"> |
||||
|
<span |
||||
|
style="color: #1890ff; padding-right: 8px" |
||||
|
class="cursor" |
||||
|
@click="yinruTemplateClick(item)" |
||||
|
>引入</span> |
||||
|
</span> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div v-else class="nodata"> |
||||
|
<img src="@/assets/img/nodata.png" alt=""> |
||||
|
</div> |
||||
|
<el-button v-show="pageTitle=='模板管理'" type="primary" icon="el-icon-plus" class="plus" circle @click="addEditContent()" /> |
||||
|
</div> |
||||
|
<add-or-update |
||||
|
v-if="addContentVisible" |
||||
|
ref="addContentRef" |
||||
|
@refreshDataList="getContent" |
||||
|
@closeDialog="addContentVisible=false" |
||||
|
/> |
||||
|
<addFenlei |
||||
|
v-if="addfenleiVisible" |
||||
|
ref="addfenleiRef" |
||||
|
@refreshDataList="getfenleiList" |
||||
|
@closeDialog="addfenleiVisible=false" |
||||
|
/> |
||||
|
</div> |
||||
|
|
||||
|
</template> |
||||
|
<script> |
||||
|
import addOrUpdate from './add-or-update.vue' |
||||
|
import mixinViewModule from '@/mixins/view-module' |
||||
|
import addFenlei from './add-fenlei.vue' |
||||
|
export default { |
||||
|
components: { |
||||
|
addOrUpdate, |
||||
|
addFenlei |
||||
|
}, |
||||
|
mixins: [mixinViewModule], |
||||
|
props: { |
||||
|
mainActiveName: { |
||||
|
type: String, |
||||
|
default: '' |
||||
|
}, |
||||
|
pageTitle: { |
||||
|
type: String, |
||||
|
default: '' |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
addContentVisible: false, |
||||
|
addfenleiVisible: false, |
||||
|
fenleiList: [], |
||||
|
currentFenleiList: {}, |
||||
|
contentList: [], |
||||
|
currentContentList: {}, |
||||
|
defaultProps: { |
||||
|
children: 'childList', |
||||
|
label: 'content' |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.getfenleiList() |
||||
|
}, |
||||
|
methods: { |
||||
|
// 获取分类列表 |
||||
|
async getfenleiList() { |
||||
|
const { data: res } = await this.$http.get('/bd/template/getListByType', { |
||||
|
params: { |
||||
|
type: this.mainActiveName |
||||
|
} |
||||
|
}) |
||||
|
if (res.code === 0) { |
||||
|
this.fenleiList = res.data |
||||
|
res.data && res.data.length > 0 ? this.currentFenleiList = res.data[0] : '' |
||||
|
this.$nextTick(() => { |
||||
|
this.$refs.templateTree.setCurrentKey(this.currentFenleiList.id) |
||||
|
}) |
||||
|
res.data && res.data.length > 0 ? this.getContent() : '' |
||||
|
} else { |
||||
|
this.$message.error(res.msg) |
||||
|
} |
||||
|
}, |
||||
|
// 获取内容 |
||||
|
async getContent() { |
||||
|
const { data: res } = await this.$http.get('/bd/template/getInfoByTreeId', { |
||||
|
params: { |
||||
|
treeId: this.currentFenleiList.id |
||||
|
} |
||||
|
}) |
||||
|
if (res.code === 0) { |
||||
|
this.contentList = res.data |
||||
|
} else { |
||||
|
this.$message.error(res.msg) |
||||
|
} |
||||
|
}, |
||||
|
// 点击tab |
||||
|
handleClick(item) { |
||||
|
this.getfenleiList() |
||||
|
}, |
||||
|
// 点击左侧列表 |
||||
|
leftListClick(formItem) { |
||||
|
this.currentFenleiList = formItem |
||||
|
this.getContent() |
||||
|
}, |
||||
|
// 新增/编辑分类 |
||||
|
addEditFenlei(item, other) { |
||||
|
this.addfenleiVisible = true |
||||
|
this.$nextTick(() => { |
||||
|
// 类型 1:科室,2:个人 |
||||
|
this.$refs.addfenleiRef.dataForm.type = this.mainActiveName |
||||
|
this.$refs.addfenleiRef.modelType = other |
||||
|
item && !other ? this.$refs.addfenleiRef.dataForm.id = item.id : '' |
||||
|
item && other ? this.$refs.addfenleiRef.dataForm.pid = item.id : '' |
||||
|
this.$refs.addfenleiRef.init() |
||||
|
}) |
||||
|
}, |
||||
|
// 设为常用 |
||||
|
setOften(item) { |
||||
|
const usual = !item.usual |
||||
|
this.$http.post('/bd/template/updateBdTemplateValue', { id: item.id, usual, sort: item.sort }).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.getContent() |
||||
|
} |
||||
|
}) |
||||
|
}).catch(() => {}) |
||||
|
}, |
||||
|
// 新增内容 |
||||
|
addEditContent(item) { |
||||
|
this.addContentVisible = true |
||||
|
this.$nextTick(() => { |
||||
|
this.$refs.addContentRef.dataForm.treeId = this.currentFenleiList.id // 新增所需的树id |
||||
|
item ? this.$refs.addContentRef.dataForm.id = item.id : '' // 修改 |
||||
|
this.$refs.addContentRef.init() // 打开弹窗 |
||||
|
}) |
||||
|
}, |
||||
|
// 删除分类 |
||||
|
deleteFenleiClick(item, flag) { |
||||
|
const text = flag === '分类' ? '删除此分类将同时删除分类级下的所有内容,您确定要删除此模板分类吗?' : '您确定要删除此内容吗?' |
||||
|
const url = flag === '分类' ? '/bd/template/deleteBdTemplate' : '/bd/template/deleteBdTemplateValue' |
||||
|
this.$confirmFun(text).then(async() => { |
||||
|
const { data: res } = await this.$http.get(url, { |
||||
|
params: { |
||||
|
id: item.id |
||||
|
} |
||||
|
}) |
||||
|
if (res.code === 0) { |
||||
|
this.$message({ |
||||
|
message: this.$t('prompt.success'), |
||||
|
type: 'success', |
||||
|
duration: 500, |
||||
|
onClose: () => { |
||||
|
flag === '分类' ? (this.getfenleiList(), this.getContent()) : this.getContent() |
||||
|
} |
||||
|
}) |
||||
|
} else { |
||||
|
this.$message.error(res.msg) |
||||
|
} |
||||
|
}) |
||||
|
}, |
||||
|
// 引入内容 |
||||
|
yinruTemplateClick(item) { |
||||
|
this.$emit('yinruTemplateClick', item) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
<style lang="scss" scoped> |
||||
|
.nodata{ |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
justify-content: center; |
||||
|
} |
||||
|
::v-deep .el-icon-caret-right:before { |
||||
|
color: #262626; |
||||
|
} |
||||
|
.treeContent{ |
||||
|
width: 100px; |
||||
|
overflow: hidden; |
||||
|
text-overflow: ellipsis; |
||||
|
} |
||||
|
::v-deep .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{ |
||||
|
background-color: #409EFF; |
||||
|
color: #FFFFFF; |
||||
|
button{ |
||||
|
color: #FFFFFF; |
||||
|
} |
||||
|
} |
||||
|
.treeItem{ |
||||
|
width: 100%; |
||||
|
padding-right: 10px; |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
.operateBtn{ |
||||
|
font-size: 16px; |
||||
|
color: #333; |
||||
|
} |
||||
|
} |
||||
|
.tooltips{ |
||||
|
max-width: 200px; |
||||
|
} |
||||
|
.tab-fun { |
||||
|
display: flex; |
||||
|
height: calc(100vh - 125px); |
||||
|
.flex{ |
||||
|
display: flex; |
||||
|
} |
||||
|
.active{ |
||||
|
font-size: 18px !important; |
||||
|
} |
||||
|
.leftlist { |
||||
|
width: 240px; |
||||
|
min-width: 200px; |
||||
|
border-right: 1px solid #ccc; |
||||
|
position: relative; |
||||
|
} |
||||
|
.leftlist-ul { |
||||
|
overflow-y: auto; |
||||
|
} |
||||
|
.leftlistMb{ |
||||
|
height: calc(100vh - 160px); |
||||
|
|
||||
|
} |
||||
|
.leftlistDa { |
||||
|
height: calc(100vh - 110px); |
||||
|
} |
||||
|
.plus-fenlei { |
||||
|
position: absolute; |
||||
|
right: 10px; |
||||
|
bottom: 0; |
||||
|
} |
||||
|
.rightlist { |
||||
|
flex: 1; |
||||
|
position: relative; |
||||
|
} |
||||
|
.rightlist-ul { |
||||
|
overflow-y: auto; |
||||
|
} |
||||
|
.rightlistMb{ |
||||
|
height: calc(100vh - 160px); |
||||
|
|
||||
|
} |
||||
|
.rightlistDa { |
||||
|
height: calc(100vh - 110px); |
||||
|
} |
||||
|
.plus { |
||||
|
position: absolute; |
||||
|
right: 0px; |
||||
|
bottom: 0; |
||||
|
} |
||||
|
.li { |
||||
|
padding: 6px 12px; |
||||
|
text-align: center; |
||||
|
cursor: pointer; |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
align-items: center; |
||||
|
border-bottom: 1px solid #ccc; |
||||
|
} |
||||
|
.currentLi { |
||||
|
background: #1890ff; |
||||
|
color: #fff; |
||||
|
padding: 6px 12px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
.rightli { |
||||
|
padding: 6px 10px; |
||||
|
text-align: left; |
||||
|
border-bottom: 1px solid #ebeef5; |
||||
|
white-space: normal; |
||||
|
word-break: break-all; |
||||
|
} |
||||
|
.buttonli { |
||||
|
display: inline-block; |
||||
|
text-align: center; |
||||
|
padding-left:20px; |
||||
|
} |
||||
|
.rightContentli { |
||||
|
flex: 1; |
||||
|
} |
||||
|
.rightContentli-title { |
||||
|
font-weight: 700; |
||||
|
font-size: 18px; |
||||
|
} |
||||
|
.rightli:hover { |
||||
|
background: #f5f7fa; |
||||
|
} |
||||
|
.cursor { |
||||
|
cursor: pointer; |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue