Browse Source

密码密文传输+知识库

x-emr
bianyaqi 2 years ago
parent
commit
e62acbbcf7
  1. 4
      public/index.html
  2. 10
      src/components/360View/index.vue
  3. 323
      src/components/360View/knowledge/electronInfo.vue
  4. 42
      src/components/360View/knowledge/index.vue
  5. 15
      src/components/360View/shrink.vue
  6. 6
      src/page-subspecialty/views/main-navbar-update-password.vue
  7. 3
      src/page-subspecialty/views/modules/optometryManagement/seeDoctor/historyRecord.vue
  8. 1
      src/page-subspecialty/views/modules/template/manage/tab-fun.vue

4
public/index.html

@ -39,8 +39,8 @@
<% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
<script>
//http://121.36.16.195:9002/huimu-admin/swagger-ui/index.html
// window.SITE_CONFIG['apiURL'] = 'http://47.110.224.240:8036/xiangan-crf';
window.SITE_CONFIG['apiURL'] = 'http://192.168.0.168:8036/xiangan-crf';
window.SITE_CONFIG['apiURL'] = 'http://47.110.224.240:8036/xiangan-crf';
// window.SITE_CONFIG['apiURL'] = 'http://192.168.0.168:8036/xiangan-crf';
// window.SITE_CONFIG['apiURL'] = 'http://192.168.4.174:8036/xiangan-crf';
</script>
<% } %>

10
src/components/360View/index.vue

@ -216,7 +216,7 @@
</div>
</div>
<shrink ref="shrinks" :arrow-type="1" @display="handleDisplay" @changeType="changeType" />
<drawer ref="drawers" :info-hidden="infoHidden" :cur-type="dataType" :display.sync="display" :width="drawerWidth" :mask="true" @display="closeDrawer">
<drawer ref="drawers" :info-hidden="infoHidden" :cur-type="dataType" :display.sync="display" width="650px" :mask="true" @display="closeDrawer">
<!-- 关键指标-->
<key-indicators
v-if="dataType === 1"
@ -233,6 +233,8 @@
<collection v-if="dataType === 3" :patient-id="patientBaseData.patientId" :jz-number="jzNumber" :platform="isSearch || $route.query.isSearch" />
<!-- 常用业务-->
<business v-if="dataType === 4" :patient-id="patientBaseData.patientId" :platform="isSearch || $route.query.isSearch" :patient-name="patientBaseData.patientName" />
<!-- 知识库-->
<knowledge-base v-if="dataType === 5" />
</drawer>
</div>
</template>
@ -253,8 +255,9 @@ import pacsList from '@/components/360View/pacs/patientList'
import medicalRecord from '@/components/360View/medicalRecord' //
import opticalFile from '@/components/360View/opticalFile' //
import eventBus from '@/page-subspecialty/utils/eventBus'
import KnowledgeBase from '@/components/360View/knowledge/index.vue'
export default {
components: { timeLine, drawer, keyIndicators, shrink, business, collection, imgRecord, overView, medicalRecord, dataInfo, routine, special, followUpRecord, opticalFile, pacsList },
components: { KnowledgeBase, timeLine, drawer, keyIndicators, shrink, business, collection, imgRecord, overView, medicalRecord, dataInfo, routine, special, followUpRecord, opticalFile, pacsList },
mixins: [],
props: {
patientId: {
@ -402,9 +405,6 @@ export default {
this.display = false
}
},
changeWidth() {
this.drawerWidth = (this.drawerWidth === '500px') ? '800px' : '500px'
},
backList() {
if (this.$route.query.patientId && !this.$route.query.doctorId) {
this.$router.go(-1)

323
src/components/360View/knowledge/electronInfo.vue

@ -0,0 +1,323 @@
<template>
<div class="electroInfo">
<!-- 文件上传 -->
<el-upload
class="upload-demo"
drag
:action="uploadUrl"
multiple
:headers="headers"
:show-file-list="false"
:data="uploadData"
:on-success="successFile"
:before-upload="beforeUpload"
>
<i class="el-icon-upload" />
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div slot="tip" class="el-upload__tip">只能上传PDF文件</div>
</el-upload>
<!-- 节点 -->
<div class="collect_context">
<el-button v-if="!collectData.length" size="mini" @click="dialogFormVisible = true">新增节点</el-button>
<el-tree
v-else
accordion
:data="collectData"
node-key="id"
highlight-current
:props="defaultProps"
:default-expanded-keys="defaultExpandIds"
@node-expand="handleNodeExpand"
>
<span slot-scope="{ node, data }" class="custom-tree-node" @click="levelClick(data)">
<span class="treeDefault">
<span>{{ node.label }}</span>
</span>
<span>
<el-dropdown v-if="!data.patientId" trigger="click" @command="(command)=>addNode(command,node,data)">
<span :class="{'active':curNode.id===data.id}">
<i class="el-icon-plus" />
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="same">新增同级节点</el-dropdown-item>
<el-dropdown-item command="child">新增子级节点</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown trigger="click" style="margin-left: 10px" @command="(command)=>handleNode(command,node,data)">
<span :class="{'active':curNode.id===data.id}">···</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="rename">编辑</el-dropdown-item>
<el-dropdown-item command="delete">删除</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</span>
</span>
</el-tree>
<el-dialog :modal-append-to-body="false" width="30%" title="节点名称" :visible.sync="dialogFormVisible">
<el-input ref="renameRef" v-model="editName" />
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false"> </el-button>
<el-button type="primary" :disabled="disabled" @click="confirmNode()"> </el-button>
</div>
</el-dialog>
</div>
<!-- 文件列表 -->
<el-table center :data="tableData">
<el-table-column label="文件名" prop="fileName">
<template slot-scope="scope">
<span v-if="scope.row.fileName">{{ scope.row.fileName.split('-')[0] }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<div>
<span style="color: #ff0000;cursor: pointer" @click="deleteFile(scope.row)">删除</span>
<span style="color: #1890ff;cursor: pointer;margin-left: 8px" @click="goDetail(scope.row)">预览</span>
</div>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
name: 'ElectronInfo',
data() {
return {
uploadUrl: window.SITE_CONFIG['apiURL'] + '/bd/knowledgeTree/uploadFiles',
uploadData: {
treeId: ''
},
headers: {
token: window.sessionStorage.getItem('xa-token')
},
collectData: [],
tableData: [],
dialogFormVisible: false,
defaultProps: {
children: 'childList',
label: 'content'
},
addParam: {
},
curNode: '',
editName: '',
changeType: '',
disabled: false, //
defaultExpandIds: []
}
},
watch: {
dialogFormVisible(newValue) {
if (newValue) {
this.$nextTick(() => {
this.$refs.renameRef.focus()
})
}
},
collectData(val) {
if (!val.length) {
this.disabled = false
this.addParam.id = ''
this.addParam.pid = 0
this.editName = ''
}
}
},
mounted() {
this.getTree()
},
methods: {
getTree() {
this.$http.get('/bd/knowledgeTree/getTree').then(res => {
this.collectData = res.data.data
})
},
//
deleteFile(scopeRow) {
this.$confirmFun('你确定要删除吗?')
.then(() => {
this.$http.get('/bd/knowledgeTree/deleteFile', {
params: {
id: scopeRow.id
}
}).then(() => {
this.$message({
message: '删除成功!',
type: 'success'
})
this.queryCurKnowledge(this.curNode.id)
})
}).catch(() => {})
},
//
goDetail(scopeRow) {
window.open(scopeRow.fileUrl, '_blank')
},
//
beforeUpload(file) {
const extension = file.name.split('.').slice(-1)[0] === 'pdf'
const isLt100M = file.size / 1024 / 1024 > 100
if (!extension) {
this.$message.warning('上传文件只能是pdf格式!')
}
if (isLt100M) {
this.$message.warning('上传文件大小不能超过 100MB!')
}
return extension && !isLt100M
},
//
successFile(data) {
if (data.code === 500) {
this.$message.error(data.msg)
}
if (data.code === 0) {
this.$message.success('上传成功!')
this.queryCurKnowledge(this.curNode.id)
}
},
levelClick(data) {
this.curNode = data
this.remark = data.remark || ''
this.uploadData.treeId = data.id
this.queryCurKnowledge(data.id)
},
//
queryCurKnowledge(treeId) {
this.$http.get('/bd/knowledgeTree/getFileListByTreeId', {
params: {
treeId
}
}).then(res => {
this.tableData = res.data.data
})
},
//
addNode(command, node, data) {
this.changeType = '新增'
this.editMessage = '添加成功!'
this.disabled = false
switch (command) {
//
case 'same':
this.dialogFormVisible = true
this.addParam.pid = data.pid
this.editName = node.name
break
//
case 'child':
this.dialogFormVisible = true
this.addParam.pid = data.id
this.editName = node.name
break
//
default:
this.addParam.id = ''
this.addParam.pid = 0
this.editName = ''
break
}
},
//
handleNode(command, node, data) {
switch (command) {
case 'rename':
this.disabled = false
this.editNode(node, data)
break
case 'delete':
this.deleteNode(data)
break
}
},
//
editNode(node, data) {
this.dialogFormVisible = true
this.editName = node.label
this.editMessage = '重命名成功!'
this.changeType = '修改'
this.addParam.id = data.id
},
//
deleteNode(data) {
this.$confirmFun('你确定要删除吗?')
.then(() => {
this.$http.get('/bd/knowledgeTree/deleteTree', {
params: {
id: data.id
}
}).then(() => {
this.$message({
message: '删除成功!',
type: 'success'
})
this.getTree()
})
}).catch(() => {})
},
// /
async confirmNode() {
const params = {
doctorId: this.doctorId,
content: this.editName,
...this.addParam
}
this.disabled = true
let url = ''
if (this.changeType === '修改') {
url = 'bd/knowledgeTree/updateTree'
} else {
url = '/bd/knowledgeTree/addTree'
}
await this.$http.post(url, params)
this.$message({
message: this.editMessage,
type: 'success'
})
this.dialogFormVisible = false
await this.getTree()
},
//
handleNodeExpand() {
if (this.defaultExpandIds.indexOf(this.curNode.id) === -1) {
this.defaultExpandIds.push(this.curNode.id)
}
}
}
}
</script>
<style lang="scss" scoped>
.el-upload__tip{
margin-bottom: 16px;
}
.collect_context{
margin: 10px 0;
font-size: 16px;
color: #000;
}
::v-deep .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{
background-color: #409EFF;
color: #FFFFFF;
span{
color: #FFFFFF;
}
}
.electroInfo{
overflow: hidden;
}
.treeDefault{
display: inline-block;
min-width: 200px;
max-width:500px;
font-size: 16px;
text-overflow: ellipsis;
overflow: hidden;
padding-right: 10px;
}
::v-deep .custom-tree-node{
display: flex;
align-items: center;
}
</style>

42
src/components/360View/knowledge/index.vue

@ -0,0 +1,42 @@
<template>
<div class="content">
<el-tabs v-model="activeName">
<el-tab-pane label="疾病标签" name="first">疾病标签</el-tab-pane>
<el-tab-pane label="电子资料" name="second">
<electron-info v-if="activeName==='second'" />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import ElectronInfo from '@/components/360View/knowledge/electronInfo.vue'
export default {
name: 'KnowledgeBase',
components: { ElectronInfo },
data() {
return {
activeName: 'second'
}
}
}
</script>
<style lang="scss" scoped>
.content{
width: 650px;
padding: 12px 8px;
}
::v-deep .el-tabs{
height: 100%;
}
::v-deep .el-tabs__content{
padding: 10px 0 0 0;
overflow: hidden;
overflow-y: scroll;
}
::v-deep .el-tabs__header{
margin: 0;
}
</style>

15
src/components/360View/shrink.vue

@ -8,10 +8,12 @@
<img class="imgOne" :src="require('@/assets/img/unselBg.png')" alt="" @click="handleType(2)">
<img class="imgTwo" :src="require('@/assets/img/unselBg.png')" alt="" @click="handleType(3)">
<img class="imgThree" :src="require('@/assets/img/unselBg.png')" alt="" @click="handleType(4)">
<img class="imgFour" :src="require('@/assets/img/unselBg.png')" alt="" @click="handleType(5)">
<span class="dataBase dataOne" :class="[active === 'imgCur' ? 'fontColor' : '']" @click="handleType(1)">关键指标</span>
<span class="dataBase dataTwo" :class="[active === 'imgOne' ? 'fontColor' : '']" @click="handleType(2)">数据集</span>
<span class="dataBase dataThree" :class="[active === 'imgTwo' ? 'fontColor' : '']" @click="handleType(3)">病历收集</span>
<span class="dataBase dataFour" :class="[active === 'imgThree' ? 'fontColor' : '']" @click="handleType(4)">常用业务</span>
<span class="dataBase dataFive" :class="[active === 'imgFour' ? 'fontColor' : '']" @click="handleType(5)">知识库</span>
</div>
</template>
@ -65,6 +67,9 @@ export default {
break
case 4:
this.active = 'imgThree'
break
case 5:
this.active = 'imgFour'
}
}
},
@ -89,6 +94,8 @@ export default {
this.active = 'imgTwo'
} else if (type === 4) {
this.active = 'imgThree'
} else if (type === 5) {
this.active = 'imgFour'
}
}
}
@ -145,6 +152,9 @@ export default {
.dataFour{
top: 455px;
}
.dataFive{
top: 582px;
}
.imgCur{
position: absolute;
left: 0;
@ -165,5 +175,10 @@ export default {
left: 0;
top: 411px;
}
.imgFour{
position: absolute;
left: 0;
top: 535px;
}
}
</style>

6
src/page-subspecialty/views/main-navbar-update-password.vue

@ -77,7 +77,11 @@ export default {
if (!valid) {
return false
}
this.$http.put('/sys/user/password', this.dataForm).then(({ data: res }) => {
const param = { ...this.dataForm }
param.password = this.$md5(param.password)
param.newPassword = this.$md5(param.newPassword)
param.confirmPassword = this.$md5(param.confirmPassword)
this.$http.put('/sys/user/password', param).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}

3
src/page-subspecialty/views/modules/optometryManagement/seeDoctor/historyRecord.vue

@ -94,13 +94,12 @@ export default {
if (!extension) {
this.loading = false
this.$message.warning('上传文件只能是pdf格式!')
return
}
if (isLt100M) {
this.loading = false
this.$message.warning('上传文件大小不能超过 100MB!')
return
}
return extension && !isLt100M
},
successFile() {
this.$message.success('上传成功!')

1
src/page-subspecialty/views/modules/template/manage/tab-fun.vue

@ -9,7 +9,6 @@
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)">

Loading…
Cancel
Save