Commit d7c26631 authored by miaojiale's avatar miaojiale

Merge branch 'dev' into dev_Miaojiale

parents 2ddf1c34 6fe83cdb
......@@ -4,6 +4,14 @@ import request from "@/utils/request";
* 随访
*
* */
//随访查询 列表
export function getFollowSearch(params = {}) {
return request({
url: "/disease-data/follow/search",
method: "get",
params,
});
}
//随访调查 列表
export function getFollowSurvey(params = {}) {
return request({
......
import request from "@/utils/request";
/**
* 审核标签
*
* */
// 获取审核意见标签
export function getSysCheckNote(params = {}) {
return request({
url: "/disease-data/sysCheckNote",
method: "get",
params,
});
}
//保存意见标签
export function postSysCheckNote(data = {}) {
return request({
url: "/disease-data/sysCheckNote",
method: "post",
data
});
}
// //修改意见标签
// export function putSysCheckNote(data = {}) {
// return request({
// url: "/disease-data/sysCheckNote",
// method: "put",
// data
// });
// }
// //删除意见标签
// export function delSysCheckNote(id) {
// return request({
// url: `/disease-data/sysCheckNote/${id}`,
// method: "delete",
// });
// }
\ No newline at end of file
......@@ -69,6 +69,15 @@ export function getPatientDetail(params = {}) {
})
}
/* 随访患者数据详情 */
export function getFollowDetail(params = {}) {
return request({
url: "/disease-data/data/patient/follow/info",
method: "get",
params,
})
}
/* 获取表单填报记录list*/
export function getRecordList(params = {}) {
return request({
......@@ -191,3 +200,12 @@ export function getApScoreDetailList(params = {}) {
params,
})
}
// 获取随访计划右侧列表
export function getFollowList(params = {}) {
return request({
url: "/disease-data/data/patient/log/list",
method: "get",
params,
})
}
......@@ -196,6 +196,13 @@ export function getRefuteMessage(params) {
return request({
url: `/disease-data/sys/message/remind/${params}`,
method: "get",
params,
// params,
})
}
// 设置已读消息
export function setReadMessege(id) {
return request({
url: `/disease-data/sys/message/read`,
method: "put",
})
}
src/assets/img/DataCenter/qrcode.png

77.5 KB | W: | H:

src/assets/img/DataCenter/qrcode.png

63.5 KB | W: | H:

src/assets/img/DataCenter/qrcode.png
src/assets/img/DataCenter/qrcode.png
src/assets/img/DataCenter/qrcode.png
src/assets/img/DataCenter/qrcode.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -62,12 +62,20 @@
<el-input
v-if="item.type === 'input'"
v-model="form[item.prop]"
:class="item.prop == 'other_sickness' ? 'needlong' : ''"
:class="
item.prop == 'other_sickness'
? 'needlong'
: item.readonly
? 'read-input'
: ''
"
:readonly="item.readonly"
:disabled="item.disabled"
:placeholder="
item.placeholder ||
` ${item.label ? '请输入' + item.label : ''}`
item.disabled || item.readonly
? ''
: item.placeholder ||
` ${item.label ? '请输入' + item.label : ''}`
"
:clearable="item.notClearable ? false : true"
:maxlength="
......@@ -87,12 +95,12 @@
@click="openToothBit"
>{{ item.append || "牙位" }}</el-button
>
<template v-else-if="item.append" slot="append">{{
item.append
}}</template>
<template v-if="item.prepend" slot="prepend">{{
item.prepend
}}</template>
<template v-else-if="item.append" slot="append">
{{ item.append }}
</template>
<template v-if="item.prepend" slot="prepend">
{{ item.prepend }}
</template>
</el-input>
<!-- 密码框 -->
......@@ -115,12 +123,12 @@
"
@blur="handleBlur"
>
<template v-if="item.append" slot="append">{{
item.append
}}</template>
<template v-if="item.prepend" slot="prepend">{{
item.prepend
}}</template>
<template v-if="item.append" slot="append">
{{ item.append }}
</template>
<template v-if="item.prepend" slot="prepend">
{{ item.prepend }}
</template>
</el-input>
<!-- 文本域 -->
......@@ -172,7 +180,7 @@
<!-- 单选框 -->
<el-radio-group
v-if="item.type === 'radio'"
v-if="item.type === 'radio' && !item.disabled"
v-model="form[item.prop]"
:disabled="item.disabled"
@change="handleChange"
......@@ -184,6 +192,23 @@
>{{ opt.label }}</el-radio
>
</el-radio-group>
<!-- 单选框只读 -->
<div
v-for="(opt, optIndex) in item.dicData"
v-else-if="item.type === 'radio' && item.disabled"
:key="optIndex"
>
<el-radio
v-show="opt.value == form[item.prop]"
v-model="form[item.prop]"
:class="
item.class ? item.class : item.disabled ? 'read-radio' : ''
"
:label="opt.value"
@change="item.func ? item.func($event) : {}"
>{{ opt.label }}</el-radio
>
</div>
<!-- 多选框 -->
<template v-if="item.type === 'checkbox'">
......@@ -259,6 +284,7 @@
:value-format="item.valueFormat"
:format="item.format"
:disabled="item.disabled"
:class="item.disabled ? 'read-time' : ''"
style="width: 100%"
clearable
@change="handleChange"
......@@ -275,14 +301,25 @@
:value-format="item.valueFormat"
:format="item.format"
:disabled="item.disabled"
:class="item.disabled ? 'read-time' : ''"
clearable
@change="handleChange"
></el-time-picker>
<!-- 日期 -->
<div v-else-if="item.type === 'date'" class="flex">
<div
v-else-if="item.type === 'date'"
class="flex"
:class="item.disabled ? 'read-time' : ''"
>
<el-date-picker
v-model="form[item.prop]"
:placeholder="item.placeholder ? item.placeholder : '请选择'"
:placeholder="
item.placeholder
? item.placeholder
: item.disabled
? ''
: '请选择'
"
:value-format="item.valueFormat"
:format="item.format"
:disabled="item.disabled"
......@@ -355,9 +392,16 @@
v-else-if="item.type === 'datetime'"
v-model="form[item.prop]"
type="datetime"
:placeholder="item.placeholder ? item.placeholder : '请选择'"
:placeholder="
item.placeholder
? item.placeholder
: item.disabled
? ''
: '请选择'
"
clearable
:disabled="item.disabled"
:class="item.disabled ? 'read-time' : ''"
:picker-options="pickerOptions"
:value-format="item.valueFormat"
:format="item.format"
......@@ -489,9 +533,13 @@ export default {
this.checkboxReset()
//! 处理医联体名称,新增直接请求,其他等union_id后再请求
if (this.item.prop == "union_id") {
console.log("倒了")
this.unionList = []
// this.getMedicalunionList()
if (this.$route.path == "/screening/add") {
if (
this.$route.path == "/screening/add" ||
this.$route.path == "/screening/index"
) {
this.getMedicalunionList()
} else {
this.$watch(
......@@ -720,10 +768,30 @@ export default {
Object.keys(dyMap).forEach((key) => {
// !获取显隐目标
let targetItem = columns.find((_) => _.prop === key)
if (!targetItem) {
// !没有在表单子组件中找到,查找大表单id
targetItem = group.find((_) => _.prop === key)
}
//没有找到再细化查找
if (!targetItem) {
group.forEach((_) => {
if (_.column) {
_.column.find((item) => {
if (item.prop === key) {
targetItem = item
return
} else {
if (item.children && item.children.column) {
targetItem = item.children.column.find(
(e) => e.prop === key
)
}
}
})
}
})
}
if (!targetItem) return
let display = false
......
......@@ -25,7 +25,7 @@
{{ screeningAdvise[form[item.prop]] }}
</span>
<span v-else-if="item.prop == 'union_id'">
{{ unionName }}
{{ handleUnionName(form[item.prop]) }}
</span>
<span v-else style="margin: 0 5px">{{
form[item.prop] | getItemText(item.dicData, item.type)
......@@ -63,6 +63,22 @@ export default {
},
}
},
computed: {
unionLists() {
let arr
if (sessionStorage.getItem("unionList")) {
arr = JSON.parse(sessionStorage.getItem("unionList"))
} else {
arr = []
}
return arr
},
},
methods: {
handleUnionName(v) {
return this.unionLists.filter((e) => e.id == v)[0].unionName
},
},
filters: {
getItemText(val, list, type) {
// 单选改为字符串
......@@ -86,8 +102,9 @@ export default {
},
watch: {
unionList(v) {
console.log("获取到了医联体列表", this.form[this.item.prop])
if (v.length > 0 && this.form[this.item.prop]) {
// console.log("获取到了医联体列表", this.form[this.item.prop])
console.log("获取到了医联体列表", this.form[this.item.prop])
this.unionName = v.filter(
(e) => e.id == this.form[this.item.prop]
)[0].unionName
......
......@@ -313,8 +313,8 @@ export default {
},
// 绑定部分值(此时表单已渲染)
initfields(obj) {
console.log("通用表单",obj)
for (let k in obj) {
console.log("通用表单",k,obj)
// if (this.form.hasOwnProperty(k)) {
this.form[k] = obj[k]
// }
......
......@@ -34,14 +34,13 @@
v-model="form[item.prop]"
:readonly="item.readonly"
:disabled="item.disabled"
clearable=""
:placeholder="item.placeholder"
@focus="item.focusFunc ? item.focusFunc($event) : {}"
@change="item.func ? item.func($event) : {}"
>
<span v-if="item.unit" :slot="item.slot ? item.slot : 'append'">
{{
item.unit
}}
{{ item.unit }}
</span>
</el-input>
......@@ -146,7 +145,8 @@
:class="item.class"
:label="opt.value"
@change="item.func ? item.func($event) : {}"
>{{ opt.label }}</el-radio>
>{{ opt.label }}</el-radio
>
<!-- 级联 -->
<el-cascader
......@@ -159,7 +159,9 @@
></el-cascader>
<!-- 文字 -->
<span v-else-if="item.type === 'text'">{{ item.text ? item.text : form[item.prop] }}</span>
<span v-else-if="item.type === 'text'">{{
item.text ? item.text : form[item.prop]
}}</span>
<!-- 数字输入框 -->
<el-input-number
......@@ -191,7 +193,8 @@
:icon="btn.icon"
:style="btn.style"
@click="btn.func(form)"
>{{ btn.btnText }}</el-button>
>{{ btn.btnText }}</el-button
>
<div
v-if="btn.btnType == 'tobeModified'"
:key="index"
......@@ -199,8 +202,13 @@
:style="{ backgroundColor: modifiedFlag ? '#4E68FF' : '#fff' }"
@click="changeModified"
>
<i :style="{ color: modifiedFlag ? '#fff' : '#d9d9d9' }" class="el-icon-check"></i>
<span :style="{ color: modifiedFlag ? '#fff' : '#000' }">待修改({{ btn.tobeModified }}</span>
<i
:style="{ color: modifiedFlag ? '#fff' : '#d9d9d9' }"
class="el-icon-check"
></i>
<span :style="{ color: modifiedFlag ? '#fff' : '#000' }"
>待修改({{ btn.tobeModified }}</span
>
</div>
</template>
</div>
......@@ -215,7 +223,8 @@
:icon="btn.icon"
:style="btn.style"
@click="btn.func"
>{{ btn.btnText }}</el-button>
>{{ btn.btnText }}</el-button
>
</el-col>
</el-form>
</template>
......@@ -230,7 +239,7 @@ export default {
inlineFlag: { type: Boolean, default: false },
forms: { type: Array }, // 表单组,
lists: { type: Array }, // 按钮组
formEdit:{type: Object}
formEdit: { type: Object },
},
data() {
const form = {}
......@@ -257,7 +266,7 @@ export default {
methods: {
// 查询
handleSearch() {
console.log("this.form",this.form)
console.log("this.form", this.form)
this.$emit("handleSearch", this.form)
},
......@@ -324,10 +333,10 @@ export default {
},
},
watch: {
formEdit(val){
formEdit(val) {
this.initforms(val)
}
}
},
},
}
</script>
......
const mixin = {
data() {
return {
total: 0,
pageIndex: 1,
pageSize: 10,
pageSizes: [10, 20, 50, 100]
}
data() {
return {
total: 0,
pageIndex: 1,
pageSize: 10,
pageSizes: [10, 20, 50, 100],
}
},
methods: {
// 跳转页码
handleCurrentChange(val) {
this.pageIndex = val
this.handleSearch()
},
methods: {
// 跳转页码
handleCurrentChange(val) {
this.pageIndex = val
this.handleSearch()
},
// 切换页面显示条数
handleSizeChange(val) {
this.pageSize = val
this.handleSearch()
}
}
// 切换页面显示条数
handleSizeChange(val) {
this.pageIndex = 1
this.pageSize = val
this.handleSearch()
},
},
}
export default mixin
......@@ -23,7 +23,10 @@
<!-- :http-request="handleUpload" -->
<template v-if="drag">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__text">
将文件拖到此处,或
<em>点击上传</em>
</div>
</template>
<template v-else-if="listType === 'picture-card'">
<i class="el-icon-plus"></i>
......@@ -42,8 +45,7 @@
style="display: none"
:src="imgUrl"
:preview-src-list="previewList"
>
</el-image>
></el-image>
</el-row>
</template>
......@@ -116,7 +118,7 @@ export default {
return this.value.map((_) => {
return (
_.url ||
`https://ds.cixincloud.com/geca-api/disease-data/file/info/${_.bucket_name}/${_.prefix}-${_.uuid_name}`
`/geca-api/disease-data/file/info/${_.bucket_name}/${_.prefix}-${_.uuid_name}`
)
})
},
......@@ -129,7 +131,7 @@ export default {
this.fileList = newValue.map((_) => {
return {
name: _.file_name,
url: `https://ds.cixincloud.com/geca-api/disease-data/file/info/${_.bucket_name}/${_.prefix}-${_.uuid_name}`,
url: `/geca-api/disease-data/file/info/${_.bucket_name}/${_.prefix}-${_.uuid_name}`,
}
})
},
......@@ -200,7 +202,7 @@ export default {
let responseUrl
if (file.response) {
const _ = file.response.data
responseUrl = `https://ds.cixincloud.com/geca-api/disease-data/file/info/${_.bucket_name}/${_.prefix}-${_.uuid_name}`
responseUrl = `/geca-api/disease-data/file/info/${_.bucket_name}/${_.prefix}-${_.uuid_name}`
}
try {
if (name.match(/\.(png|jpg|jpeg)/)) {
......
......@@ -86,6 +86,7 @@
<script>
import { loginRSA } from "@/config/settings"
import { getAccessToken } from "@/utils/accessToken"
import { mapGetters } from "vuex"
import { encrypt, decrypt } from "@/utils/encryption"
export default {
data() {
......@@ -135,11 +136,15 @@ export default {
},
],
},
allianceToken: getAccessToken(),
currentRoute: this.$route.path,
userInfo: {},
}
},
computed: {
...mapGetters({
allianceToken: ["user/accessToken"],
}),
},
watch: {
$route: {
handler(v) {
......@@ -147,11 +152,13 @@ export default {
},
deep: true,
},
allianceToken(v) {},
},
mounted() {
// if (localStorage.getItem('allianceToken')) {
// this.$router.push('/datacenter/home')
// }
// this.allianceToken = getAccessToken()
this.userInfo = JSON.parse(localStorage.getItem("userInfo"))
},
methods: {
......
......@@ -63,7 +63,7 @@ module.exports = {
//消息框消失时间
messageDuration: 3000,
//最长请求时间
requestTimeout: 15000,
requestTimeout: 150000,
//操作正常code
successCode: 1,
//登录失效code
......
......@@ -10,7 +10,7 @@
</vab-keel> -->
<transition mode="out-in" name="fade-transform">
<keep-alive v-if="routerView" :include="cachedRoutes" :max="10">
<router-view :key="key" style="min-height: 88vh" />
<router-view :key="key" style="min-height: 84vh" />
</keep-alive>
</transition>
</section>
......
......@@ -39,7 +39,7 @@
<el-popover
placement="top-start"
width="300"
:trigger="messageCount == 0 ? 'none' : 'hover'"
trigger="hover"
popper-class="message-pop"
>
<div class="messageBox">
......@@ -55,7 +55,7 @@
<div
class="main-text ml-8"
style="cursor: pointer"
@click="goSearch(item.bizType)"
@click="goSearch(item.bizType, item.id)"
>
{{ item.content }}
</div>
......@@ -63,7 +63,17 @@
<div v-show="loading" v-loading="loading" class="loading"></div>
</div>
<template slot="reference">
<el-badge :value="messageCount" :class-name="'badge'">
<el-badge
v-if="messageCount != 0"
:value="messageCount"
:class-name="'badge'"
>
<div class="user">
<img src="~@/assets/img/DataCenter/message.png" alt />
消息
</div>
</el-badge>
<el-badge v-else :class-name="'badge'">
<div class="user">
<img src="~@/assets/img/DataCenter/message.png" alt />
消息
......@@ -71,6 +81,7 @@
</el-badge>
</template>
</el-popover>
<div class="user" @click="$router.push('/home')">
<img src="~@/assets/img/DataCenter/backhome.png" alt />
<span>返回首页</span>
......@@ -81,7 +92,7 @@
<script>
import { mapGetters } from "vuex"
import { getMessage } from "@/api/user"
import { getMessage, setReadMessege } from "@/api/user"
import Message from "@/mixins/getMessage"
import {
Avatar,
......@@ -147,10 +158,13 @@ export default {
}),
},
watch: {
curSelectedIndex(v) {
this.messageList = []
this.pageNum = 1
this.getMessage()
curSelectedIndex: {
handler(v) {
this.messageList = []
this.pageNum = 1
this.getMessage()
},
immediate: true,
},
getMessageFlag(v) {
if (v) {
......@@ -164,9 +178,11 @@ export default {
// this.getMessage()
},
mounted() {
document
.querySelector(".messageBox")
.addEventListener("scroll", this.scrolling)
if (document.querySelector(".messageBox")) {
document
.querySelector(".messageBox")
.addEventListener("scroll", this.scrolling)
}
},
methods: {
scrolling() {
......@@ -184,7 +200,14 @@ export default {
this.getMessage()
}
},
goSearch(val) {
goSearch(val, id) {
// 消息已读
this.messageList = []
setReadMessege().then((res) => {
if (res.code == 1) {
this.getMessage()
}
})
if (val == "screen") {
this.$router.push("/screening/index?checkStatus=2")
}
......@@ -198,8 +221,9 @@ export default {
}).then((res) => {
if (res.code == 1) {
this.$store.commit("user/setGetMessageFlag", false)
this.messageCount = res.data.total
this.messageList = [...this.messageList, ...res.data.records]
// this.messageCount = res.data.page.total
this.messageCount = res.data.unReadNum
this.messageList = [...this.messageList, ...res.data.page.records]
// console.log(res.data.total)
} else {
this.messageCount = 0
......
......@@ -322,15 +322,18 @@ export default {
},
},
watch: {
curSelectedIndex(v) {
this.getRefuteMessage()
curSelectedIndex: {
handler(v) {
this.getRefuteMessage()
},
immediate: false,
},
},
created() {
this.selectedIndex = sessionStorage.getItem("selectedIndex") || ""
this.curSelectedIndex = String(this.selectedIndex) ? this.selectedIndex : ""
if (this.curSelectedIndex) {
this.getRefuteMessage()
// this.getRefuteMessage()
}
},
mounted() {
......@@ -344,9 +347,9 @@ export default {
: ""
}
// console.log(this.curSelectedIndex)
if (this.curSelectedIndex) {
this.getRefuteMessage()
}
// if (this.curSelectedIndex) {
// this.getRefuteMessage()
// }
this.$nextTick(() => {
window.addEventListener(
"storage",
......@@ -501,7 +504,6 @@ export default {
margin-left: $base-left-menu-width;
background: #f6f8f9;
transition: $base-transition;
::v-deep {
.nav-bar-container {
position: relative;
......
......@@ -32,7 +32,6 @@ const actions = {
newDictSet.push(v.type)
}
})
console.log('执行getDictData', commit, state)
commit("setDictSet", latestDict)
newDictSet = Object.keys(dictMap).length === 0 ? latestDictSet : newDictSet
// 存在新增加的字典
......
......@@ -272,7 +272,7 @@ html {
border-top: 1px solid $base-border-color;
.el-form {
padding-right: 30px;
// padding-right: 30px;
}
}
......
......@@ -153,7 +153,7 @@ export function getInfoByIdCard(idCard, type = "birthDate") {
d.getFullYear() -
birthdays.getFullYear() -
(d.getMonth() < birthdays.getMonth() ||
(d.getMonth() == birthdays.getMonth() && d.getDate() < birthdays.getDate())
(d.getMonth() == birthdays.getMonth() && d.getDate() < birthdays.getDate())
? 1
: 0)
......@@ -182,12 +182,12 @@ export function paramObj(url) {
}
return JSON.parse(
'{"' +
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"')
.replace(/\+/g, " ") +
'"}'
decodeURIComponent(search)
.replace(/"/g, '\\"')
.replace(/&/g, '","')
.replace(/=/g, '":"')
.replace(/\+/g, " ") +
'"}'
)
}
......@@ -489,7 +489,6 @@ export function formatDicList(list, value, connector = ",") {
}
})
}
// console.log("字典", list, value, result)
return result
}
/**
......@@ -523,7 +522,7 @@ export function changeTime(time) {
let seconds = Math.floor(time % 60) //秒
return `${day ? day + "" : ""} ${hours ? hours + "小时" : ""}${
minutes ? minutes + "" : ""
}${seconds}秒`
}${seconds}秒`
}
export default { formatDicList, excelExport }
import * as PDFJS from "pdfjs-dist/build/pdf"
export async function loadPDF({ el, fileSrc, scale }, call) {
PDFJS.GlobalWorkerOptions.workerSrc = require("./pdf.worker.entry.js")
let loadingTask = await PDFJS.getDocument({
url: fileSrc,
withCredentials: true, // 允许携带cookie
})
loadingTask.promise.then((pdf) => {
// 开始加载任务
document.getElementById("pdfEle").innerHTML = ""
const renderPage = (num) => {
let pdfCol = document.querySelector(el)
// 遍历每一页PDF
pdf.getPage(num).then(async (page) => {
let viewPort = page.getViewport({ scale: scale }) // 获取PDF尺寸
let div = document.createElement("div") // 用于存放canvas
div.id = `canvasBox_${num}`
div.className = "canvas-box"
div.style.position = "relative"
div.style.width = viewPort.width + "px"
div.style.margin = "0 auto"
let canvas = document.createElement("canvas") // 创建canvas
let context = canvas.getContext("2d")
// 将canvas的宽和高设置为与PDF视图一样大小
canvas.height = viewPort.height
canvas.width = viewPort.width
// setTimeout(() => {
// // 画页码
// context.font = "14px orbitron";
// context.fillStyle = "#333";
// context.save();
// context.beginPath();
// context.line = 2;
// context.textAlign = "center";
// context.textBaseline = "middle";
// // context.fillText(`${i}`, viewPort.width / 2, viewPort.height - 30);
// context.restore();
// context.closePath();
// }, 500);
let renderContext = {
canvasContext: context,
viewport: viewPort,
}
// 该函数返回一个当PDF页面成功渲染到界面上时解析的`promise`,我们可以使用成功回调来渲染文本图层。
await page.render(renderContext) // 初始化文本图层
canvas.className = "canvas"
canvas.id = `canvas_${num}`
call({
div: div,
pdfCol: pdfCol,
canvas: canvas,
context: context,
scale: scale,
index: num,
allPage: pdf.numPages,
})
div.appendChild(canvas) // 将canvas放进对应的div中
pdfCol.appendChild(div) // 将每一个div放到外面的大盒子中
num++
if (num <= pdf.numPages) {
// console.log(num, pdf.numPages);
renderPage(num)
}
})
}
renderPage(1)
})
}
/* Copyright 2020 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(typeof window !== "undefined"
? window
: {}
).pdfjsWorker = require("./pdf.worker.js");
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -15,7 +15,7 @@ export default {
locate: [
{
name: "安徽",
value: [117.29, 32.0581, 50],
value: [117.29, 32.0581, 0],
},
],
}
......@@ -123,7 +123,7 @@ export default {
},
},
animation: false,
data: [{ name: "安徽省", value: 50 }],
data: [{ name: "安徽省", value: 0 }],
},
],
}
......
......@@ -7,15 +7,14 @@
:close-on-click-modal="true"
:close-on-press-escape="false"
:show-close="true"
width="70%"
:destroy-on-close="true"
top="10vh"
top="2vh"
>
<div class="innerBody">
<div class="title">{{ curPdf.articleTitle }}</div>
<div class="refuteList">
<!-- <pdf :src="pdfSrc"></pdf> -->
<pdf-view ref="pdfView" :pdf-src="pdfSrc"></pdf-view>
<pdf-view ref="pdfView" :pdfUrl="pdfSrc"></pdf-view>
</div>
</div>
</el-dialog>
......@@ -49,23 +48,29 @@ export default {
</script>
<style lang="scss" scoped>
.innerBody {
padding: 0 60px 40px;
padding: 0 50px 0px;
// width: 790px;
// height: 882px;
.title {
font-size: 24px;
font-family: AlibabaPuHuiTiM;
color: #333333;
text-align: center;
margin-bottom: 30px;
margin-bottom: 0px;
}
.refuteList {
height: 600px;
// height: 600px;
overflow: auto;
}
}
</style>
<style lang="scss">
.pdfDialog .el-dialog__header {
// display: none;
padding: 0px !important;
.pdfDialog {
width: 750px;
max-height: 858px;
.el-dialog__header {
// display: none;
padding: 0px !important;
}
}
</style>
<template>
<div id="editor">
<div v-loading="loadingPdf" class="pdfEle_wrap">
<div id="pdfEle"></div>
<div class="pdf">
<div v-loading="!loadedRatio" class="show">
<pdf
ref="pdf"
:src="pdfUrl"
:page="pageNum"
:rotate="pageRotate"
@password="password"
@progress="loadedRatio = $event"
@page-loaded="pageLoaded($event)"
@num-pages="pageTotalNum = $event"
@error="pdfError($event)"
@link-clicked="page = $event"
>
</pdf>
</div>
<!-- 页码 -->
<div class="pdf-render-pager">
<div class="prev-next" @click="goPrevPdf">
<i class="el-icon-arrow-left"></i>
<div class="pdf_footer">
<div class="info">
<div>当前页数/总页数:{{ pageNum }}/{{ pageTotalNum }}</div>
<div>进度:{{ loadedRatio }}</div>
<div>页面加载成功: {{ curPageNum }}</div>
</div>
<input
v-model="curPage"
type="text"
title="输入页码后按enter即可跳至目标页"
style="border: 1px solid #ccc; position: relative; z-index: 9999"
@keyup.enter="handleChangePage"
/>
<div class="middle">/</div>
<div class="totalPage">{{ totalPage }}</div>
<div class="prev-next" @click="goNextPdf">
<i class="el-icon-arrow-right"></i>
<div class="operate">
<!-- <div class="btn" @click.stop="clock">顺时针</div>
<div class="btn" @click.stop="counterClock">逆时针</div> -->
<div class="btn" @click.stop="prePage">上一页</div>
<div class="btn" @click.stop="nextPage">下一页</div>
<div class="btn" @click="scaleD">放大</div>
<div class="btn" @click="scaleX">缩小</div>
<!-- <div class="btn" @click="pdfPrint()">打印所有指定页</div>
<div class="btn" @click="pdfPrintAll()">打印所有</div> -->
<!-- <div class="btn" @click="logContent()">获取页面信息</div> -->
<!-- <div class="btn" @click="fileDownload(pdfUrl, 'pdf文件')">下载</div> -->
</div>
</div>
</div>
</template>
<script>
import { loadPDF } from "@/utils/loadPdf.js"
/* eslint-disable */
import pdf from "vue-pdf"
export default {
name: "vue_pdf_preview",
props: {
pdfSrc: String,
// 当前pdf路径
pdfUrl: {
type: String,
default: "",
},
},
components: {
pdf,
},
data() {
return {
totalPage: 1,
curPage: 1,
loadingPdf: false,
canvasH: 0,
scrollEle: "", //元素画布
clickFlag: true, //左右跳转
timeout: null,
// 总页数
pageTotalNum: 1,
// 当前页数
pageNum: 1,
// 加载进度
loadedRatio: 0,
// 页面加载完成
curPageNum: 0,
// 放大系数 默认百分百
scale: 100,
// 旋转角度 ‘90’的倍数才有效
pageRotate: 0,
// 单击内部链接时触发 (目前我没有遇到使用场景)
page: 0,
}
},
watch: {},
computed: {},
created() {},
mounted() {},
methods: {
loadPDF() {
document.getElementById("pdfEle").innerHTML = ""
this.canvasH = 0 //高度初始化为0 以此控制分页不显示
this.curPage = 1 //页码重置为1
this.loadingPdf = true
if (process.env.NODE_ENV == "development") {
loadPDF(
// 特约讲师合作协议
{ el: "#pdfEle", fileSrc: "/ppt的pdf.pdf", scale: 1 },
this.callBackPdf
)
//下载PDF
fileDownload(data, fileName) {
let blob = new Blob([data], {
//type类型后端返回来的数据中会有,根据自己实际进行修改
type: "application/pdf;charset-UTF-8",
})
let filename = fileName || "pdf.pdf"
if (typeof window.navigator.msSaveBlob !== "undefined") {
window.navigator.msSaveBlob(blob, filename)
} else {
loadPDF(
{ el: "#pdfEle", fileSrc: this.pdfSrc, scale: 1 },
this.callBackPdf
)
var blobURL = window.URL.createObjectURL(blob)
// 创建隐藏<a>标签进行下载
var tempLink = document.createElement("a")
tempLink.style.display = "none"
tempLink.href = blobURL
tempLink.setAttribute("download", filename)
if (typeof tempLink.download === "undefined") {
tempLink.setAttribute("target", "_blank")
}
document.body.appendChild(tempLink)
tempLink.click()
document.body.removeChild(tempLink)
window.URL.revokeObjectURL(blobURL)
}
},
// 加载完成的回调 分页加载
callBackPdf(item) {
const { index, allPage } = item
if (index !== allPage) {
//放大
scaleD() {
this.scale += 5
this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%"
},
//缩小
scaleX() {
// scale 是百分百展示 不建议缩放
if (this.scale == 85) {
return
}
// console.log(allPage);
this.totalPage = item.allPage
this.scrollEle = document.querySelector(".pdfEle_wrap")
// this.canvasH = item.canvas.height;
setTimeout(() => {
this.canvasH = item.div.offsetHeight
}, 100)
this.scrollEle.addEventListener("scroll", (e) => {
if (this.timeout != null) {
clearTimeout(this.timeout)
}
this.timeout = setTimeout(() => {
if (Math.floor(this.scrollEle.scrollTop / this.canvasH) == 0) {
this.curPage = 1
}
if (
Math.floor(this.scrollEle.scrollTop / this.canvasH) > 0 &&
Math.floor(this.scrollEle.scrollTop / this.canvasH) + 1 !=
this.curPage
) {
this.curPage =
Math.floor(this.scrollEle.scrollTop / this.canvasH) + 1
}
}, 100)
// this.curPage = Math.floor(this.scrollEle.scrollTop / this.canvasH) <= 0? 1: Math.floor(this.scrollEle.scrollTop / this.canvasH);
})
this.loadingPdf = false
this.scale += -5
console.log(parseInt(this.scale) + "%")
this.$refs.pdf.$el.style.width = parseInt(this.scale) + "%"
},
goPrevPdf() {
// 限制一下多次点击
if (!this.clickFlag) {
return false
}
this.clickFlag = false
if (this.curPage > 1) {
// --this.curPage;
this.scrollPdfPage(parseInt(this.curPage) - 1)
--this.curPage
}
setTimeout(() => {
this.clickFlag = true
}, 500)
// 切换上一页
prePage() {
var p = this.pageNum
p = p > 1 ? p - 1 : this.pageTotalNum
this.pageNum = p
document.querySelector(".pdf .show").scrollTop = 0
},
goNextPdf() {
// 限制一下多次点击
if (!this.clickFlag) {
return false
}
this.clickFlag = false
if (this.curPage < this.totalPage) {
// ++this.curPage;
this.scrollPdfPage(parseInt(this.curPage) + 1)
++this.curPage
}
setTimeout(() => {
this.clickFlag = true
}, 500)
// 切换下一页
nextPage() {
var p = this.pageNum
p = p < this.pageTotalNum ? p + 1 : 1
this.pageNum = p
document.querySelector(".pdf .show").scrollTop = 0
},
handleChangePage(e) {
if (!/^\d+$/.test(e.target.value)) {
this.curPage = 1
} else {
// this.curPage = parseInt(e.target.value) > 0 ? parseInt(e.target.value) : 1;
if (parseInt(e.target.value) <= 0) {
this.curPage = 1
} else if (parseInt(e.target.value) > this.totalPage) {
this.curPage = this.totalPage
} else {
this.curPage = parseInt(e.target.value)
}
}
this.scrollPdfPage(this.curPage)
// 顺时针选中角度
clock() {
this.pageRotate += 90
},
// 逆时针旋转角度
counterClock() {
this.pageRotate -= 90
},
// pdf滚动
scrollPdfPage(page) {
console.log(this.scrollEle)
this.scrollEle.scrollTo({
top: this.canvasH * (page - 1),
behavior: "smooth",
// pdf 有密码 则需要输入秘密
password(updatePassword, reason) {
updatePassword(prompt('password is "test"'))
console.log("...reason...")
console.log(reason)
console.log("...reason...")
},
// 页面加载成功 当前页数
pageLoaded(e) {
this.$emit("current", e)
this.curPageNum = e
},
// 异常监听
pdfError(error) {
console.error(error)
},
// 打印所有
pdfPrintAll() {
this.$refs.pdf.print()
},
// 打印 第一页和第二页
pdfPrint() {
// 第一个参数 文档打印的分辨率
// 第二个参数 文档打印的页数
this.$refs.pdf.print(100, [1, 2])
},
// 获取当前页面pdf的文字信息内容
logContent() {
this.$refs.pdf.pdf.forEachPage(function (page) {
return page.getTextContent().then(function (content) {
let text = content.items.map((item) => item.str)
let allStr = content.items.reduce(
(initVal, item) => (initVal += item.str),
""
)
console.log(allStr) // 内容字符串
console.log(text) // 内容数组
})
})
},
},
}
</script>
<style lang="scss" scoped>
#editor {
height: 600px;
}
.pdf-render-pager {
width: 100%;
color: #333;
font-size: 12px;
height: 50px;
padding: 0 15px;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
// box-shadow: 0 -1px 0px 0 rgba(149, 149, 149, 0.25);
bottom: 0px;
left: 0;
z-index: 9999;
input {
width: 26px;
border: none;
border-bottom: 1px solid #e4e4e4;
text-align: center;
font-size: 14px;
.pdf {
padding: 20px;
.show {
overflow: auto;
margin: auto;
max-width: 790px;
max-height: 660px;
}
}
.pdfEle_wrap {
width: 100%;
height: 600px;
padding: 20px 0;
min-height: 50px;
overflow-y: scroll;
overflow-x: hidden;
// text-align:center;
position: relative;
transition: all 0.3s;
background: #e4e4e4;
#pdfEle {
height: 600px;
.pdf_footer {
position: sticky;
bottom: 0;
left: 0;
right: 0;
padding: 10px 0;
background-color: rgba(255, 255, 255, 0.5);
.info {
display: flex;
flex-wrap: wrap;
div {
width: 30%;
}
}
.operate {
margin: 10px 0 0;
display: flex;
flex-wrap: wrap;
div {
// width: 80px;
text-align: center;
font-size: 15px;
}
.btn {
cursor: pointer;
margin: 5px 10px;
width: 120px;
border-radius: 10px;
padding: 5px;
color: #fff;
background-color: #4e68ff;
}
}
}
}
.prev-next {
cursor: pointer;
width: 20px;
height: 20px;
font-size: 18px;
display: flex;
justify-content: center;
align-items: center;
}
.middle {
margin: 0 8px;
}
</style>
......@@ -17,6 +17,7 @@
<li
v-for="(item, index) in noticeList"
:key="index"
title="点击查看pdf文件"
@click="setPdf(item)"
>
<div class="left">
......@@ -49,13 +50,18 @@
:name="e.title"
>
<ul class="tabslist" style="height: 380px" :loading="listLoading">
<li v-for="(item, index) in exampleList" :key="index">
<li
v-for="(item, index) in exampleList"
:key="index"
title="点击查看pdf文件"
@click="setPdf(item)"
>
<div class="left">
<div class="circle"></div>
{{ item.title }}
{{ item.articleTitle }}
</div>
<div class="right">
{{ item.date }}
{{ item.createTime }}
</div>
</li>
</ul>
......@@ -283,6 +289,7 @@ export default {
},
created() {
this.getArticleList("1")
this.getArticleList("6")
},
mounted() {
this.getRankTotal()
......@@ -322,6 +329,7 @@ export default {
size: 10,
current: 1,
moduleType: moduleType,
status: 1,
}
articleList(params)
.then((res) => {
......@@ -329,6 +337,9 @@ export default {
if (["1", "2", "3"].includes(moduleType)) {
this.noticeList = [...res.data.records]
}
if (["6"].includes(moduleType)) {
this.exampleList = [...res.data.records]
}
}
})
.catch((e) => {
......@@ -382,7 +393,7 @@ export default {
overflow: hidden;
display: flex;
flex-direction: column;
justify-content: space-between;
// justify-content: space-between;
// &:hover {
// overflow: overlay;
// }
......@@ -477,7 +488,7 @@ export default {
// color: #4e68ff;
.rangeList {
li {
margin-bottom: 14px;
margin-bottom: 15px;
display: flex;
justify-content: space-between;
div:nth-child(1) {
......@@ -517,7 +528,7 @@ export default {
flex-wrap: wrap;
li {
width: 40%;
margin-bottom: 14px;
margin-bottom: 15px;
display: flex;
justify-content: space-between;
......
......@@ -56,7 +56,7 @@ export default {
formTabsList: [],
jsonList: [],
formList: {},
asideShow: true,
asideShow: false,
screenList: [
{
time: "2020-12-12 11:11:11",
......
......@@ -148,7 +148,15 @@ export default {
{
label: "风险评估",
minWidth: 120,
value: "checkNums",
value: "riskRank",
formatter: (row) => {
let riskRank = {
low: "低危",
medium: "中危",
high: "高危",
}
return row.riskRank ? riskRank[row.riskRank] : "--"
},
},
{
label: "审核状态",
......@@ -190,6 +198,9 @@ export default {
return this.auditStatus == "1" ? checkColumns : unCkeckColumns
},
},
created() {
console.log(this.dictMap)
},
mounted() {
if (
sessionStorage.getItem("audit-status") ||
......@@ -203,7 +214,6 @@ export default {
},
methods: {
handleClick() {
console.log("type:" + this.type, "auditStatus" + this.auditStatus)
if (this.auditStatus == 1) {
this.columns[this.columns.length - 1].operations[0].label =
"修改审核意见"
......@@ -213,12 +223,12 @@ export default {
this.handleSearch()
},
auditHandle(data, i) {
console.log(data, i)
if (this.type == "1") {
this.$router.push({
path: "/followaudit",
query: {
id: data["unionId"],
unionId: data["unionId"],
unionName: data["unionName"],
},
})
} else {
......@@ -268,7 +278,7 @@ export default {
if (this.type == "0") {
res = await getScreeningCheck(params) //待审核
} else {
res = await getFollowCheck(params) //审核
res = await getFollowCheck(params) //审核
}
break
}
......
......@@ -98,18 +98,21 @@ export default {
},
watch: {},
mounted() {
this.getPatientPage()
this.handleSearch()
},
methods: {
setSelectedIndex(i) {
console.log(this.selectedIndex)
this.selectedIndex = i
this.getPatientPage()
this.pageIndex = 1
this.handleSearch()
sessionStorage.setItem("homeSelectedIndex", this.selectedIndex)
},
getPatientPage() {
handleSearch() {
this.listLoading = true
let data = {
size: this.pageSize,
current: this.pageIndex,
patientFrom: this.selectedIndex == "0" ? null : this.selectedIndex,
}
getPatientPage(data).then((res) => {
......
<template>
<!-- 随访审核详情 -->
<div class="follow-form">
<!-- <ConfigForms form-type="2" formClass="follow-form"></ConfigForms> -->
<read-form ref="form" :options="followupForm" :formEdit="formEdit"></read-form>
<el-container v-loading="fromLoading">
<el-aside width="auto">
<div class="follow-tab">
<p class="tab-title">筛查病例数据</p>
<el-tabs
v-model="activeTab"
tab-position="right"
style="height: 200px"
>
<el-tab-pane
v-for="(item, index) in formDataList"
:key="index"
:label="'第' + Number(index + 1) + '次随访数据'"
:name="String(index)"
></el-tab-pane>
</el-tabs>
</div>
</el-aside>
<el-main class="transition-box">
<el-empty v-if="!isEmpty && noData" description="暂无数据"></el-empty>
<template v-if="isEmpty && !noData">
<div ref="my-form" class="my-form">
<template v-for="(item, index) in jsonList">
<custom-form
:key="index"
ref="customForm"
class="mb-20"
:options="item"
:form-edit="formList"
></custom-form
></template>
</div>
</template>
</el-main>
<el-aside width="auto" class="transition-box">
<div class="follow-list">
<ul class="list">
<li v-for="(item, index) in screenList" :key="index">
<div class="time">{{ item.time }}</div>
<div class="time">{{ item.code }}</div>
<div class="time">{{ item.name }}</div>
</li>
</ul>
</div>
</el-aside>
</el-container>
</div>
</template>
<script>
import ConfigForms from "@/views/screening/components/ConfigForms.vue"
import ReadForm from "@/components/FormComponents/ReadForm/index"
// import ConfigForms from "@/views/screening/components/ConfigForms.vue"
import { mapGetters } from "vuex"
import CustomForm from "@/components/FormComponents/CustomForm/index"
// import ReadForm from "@/components/FormComponents/ReadForm/index"
import { getCurrentFormByType } from "@/api/coop-group.js"
import { getFormDetail } from "@/api/field"
export default {
name: "followReview",
name: "FollowReview",
components: {
ConfigForms,
ReadForm
// ConfigForms,
CustomForm,
// ReadForm,
},
provide() {
return {
showIndex: true,
}
},
props: {
form: {
type: Object,
tabActive: {
type: String,
},
formDataList: Array,
noData: Boolean,
},
data() {
return {
followupForm:{
column: [],
labelPosition: 'left',
labelSuffix: '',
labelWidth: 180,
gutter: 0,
menuBtn: true,
submitBtn: true,
submitText: '提交',
emptyBtn: true,
emptyText: '清空',
nextTabBtn: true,
nextTabText: '下一页',
menuPosition: 'center',
group: [
{
label: '第二次随访调查',
prop: '1669858313508_15761',
arrow: true,
collapse: true,
display: true,
labelWidth: 8,
column: [
{
type: 'date',
display: true,
importantField: true,
styles: {},
prop: 'first_follow_time',
label: '随访时间',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd',
dicType: '',
fieldType: 'date',
tableName: '随访计划',
tableCode: 'gas_follow',
tableId: '1597491580053323777',
notFilter: false,
cType: '',
subfield: false,
span: 24,
autoRequired: 0,
personalRequired: 0,
width: 12
},
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'follow_contents', //待改
label: '存活情况',
fieldType: 'text',
tableName: '随访计划',
tableCode: 'gas_follow',
tableId: '1597491580053323777',
notFilter: false,
cType: '',
subfield: false,
autoRequired: 0,
personalRequired: 0,
span: 24,
width: 12
}
]
},
{
label: '是否接受胃镜检查',
prop: '1669860991131_8643',
arrow: true,
collapse: true,
display: true,
labelWidth: 8,
showIndex:true,
column: [{
type: 'radio',
display: true,
importantField: true,
styles: {},
label: '是否接受检查',
prop: 'is_accept',
dicData: [{
label: '',
value: '1',
id: '1595347527757000705',
parentId: ''
}, {
label: '',
value: '0',
id: '1595347502595371010',
parentId: ''
}],
dynamicshSet: [{
value: '1',
target: '1669861007378_67152'
}],
dicType: 'd-sf',
props: {
label: 'label',
value: 'value'
},
fieldType: 'tinyint',
fieldLength: '2',
tableName: '胃镜检查',
tableCode: 'gastroscope',
tableId: '1597468524048121858',
notFilter: false,
cType: '',
subfield: false,
autoRequired: 0,
personalRequired: 0,
span: 24,
lg: 24
}]
},
{
label: '胃镜检查结果',
prop: '1669861007378_67152',
arrow: true,
collapse: true,
display: true,
labelWidth: 8,
showIndex:true,
column: [
{
type: 'datetime',
display: true,
importantField: true,
styles: {},
color:"#4B65FF",
label: '检查时间',
prop: 'check_time',
dicData: [{
label: '',
value: '1',
id: '1595347527757000705',
parentId: ''
}, {
label: '',
value: '0',
id: '1595347502595371010',
parentId: ''
}],
dynamicshSet: [],
dicOption: 'static',
dicType: '',
props: {
label: 'label',
value: 'value'
},
fieldType: 'datetime',
fieldLength: '',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
tableName: '胃镜检查',
tableCode: 'gastroscope',
tableId: '1597468524048121858',
notFilter: false,
cType: '',
subfield: false,
autoRequired: 0,
personalRequired: 0,
span: 24,
width: 12
},
{
type: 'radio',
display: true,
importantField: true,
styles: {},
prop: 'check_type',
label: '胃镜检查方式',
fieldType: 'int',
fieldLength: '11',
autoRequired: 0,
personalRequired: 0,
dicData: [
{
label: '胃镜普通白光检查',
value: '1',
id: '1597475602204557314',
parentId: ''
}, {
label: '胃镜普通白光检查+LCI检查',
value: '2',
id: '1597475677853024258',
parentId: ''
}, {
label: '磁控胶囊胃镜检查',
value: '3',
id: '1597475763517489154',
parentId: ''
}
],
dynamicshSet: [],
dicType: 'gas_check_type',
props: {
label: 'label',
value: 'value'
},
tableName: '胃镜检查',
tableCode: 'gastroscope',
tableId: '1597468524048121858',
notFilter: false,
cType: '',
subfield: false,
span: 24
},
{
type: 'radio',
display: true,
importantField: true,
styles: {},
autoRequired: 0,
personalRequired: 0,
dicData: [{
label: '未见异常',
value: '1',
id: '1597476184780800001',
parentId: ''
}, {
label: '异常',
value: '2',
id: '1597476229722767361',
parentId: ''
}],
dynamicshSet: [{
value: '2',
target: 'detail_check_type'
}, {
value: '2',
target: 'diagnosis'
}],
dicType: 'check_result',
props: {
label: 'label',
value: 'value'
},
prop: 'check_result',
label: '检查结果',
fieldType: 'tinyint',
fieldLength: '2',
tableName: '胃镜检查',
tableCode: 'gastroscope',
tableId: '1597468524048121858',
notFilter: false,
cType: '',
subfield: false,
span: 24
},
{
type: 'checkbox',
display: true,
importantField: true,
styles: {},
autoRequired: 0,
personalRequired: 0,
dicData: [{
label: 'NBI',
value: '1',
id: '1597476883899973634',
parentId: ''
}, {
label: 'FICE',
value: '2',
id: '1597476919312482306',
parentId: ''
}, {
label: 'I-SC',
value: '3',
id: '1597476961561706498',
parentId: ''
}, {
label: 'BLI',
value: '4',
id: '1597476996303126529',
parentId: ''
}, {
label: '放大内镜',
value: '5',
id: '1597477029488459778',
parentId: ''
}, {
label: '激光共聚焦显微内镜',
value: '6',
id: '1597477062287917057',
parentId: ''
}, {
label: '荧光内镜',
value: '7',
id: '1597477097977249793',
parentId: ''
}, {
label: '化学染色',
value: '8',
id: '1597477133691748353',
parentId: ''
}],
dynamicshSet: [],
dicType: 'gas_detail_check_type',
props: {
label: 'label',
value: 'value'
},
prop: 'detail_check_type',
label: '胃镜精查方式',
fieldType: 'varchar',
fieldLength: '255',
tableName: '胃镜检查',
tableCode: 'gastroscope',
tableId: '1597468524048121858',
notFilter: false,
cType: '',
subfield: false,
span: 24
},
{
type: 'radio',
display: true,
importantField: true,
styles: {},
autoRequired: 0,
personalRequired: 0,
dicData: [{
label: '未见异常',
value: '1',
id: '1597476184780800001',
parentId: ''
}, {
label: '异常',
value: '2',
id: '1597476229722767361',
parentId: ''
}],
dynamicshSet: [{
value: '2',
target: 'esophagus_level'
}, {
value: '2',
target: 'esophagus_position'
}, {
value: '2',
target: 'early_esophagus_cancer'
}, {
value: '2',
target: 'period_esophagus_cancer'
}, {
value: '2',
target: 'is_barret_esophagus'
}, {
value: '2',
target: 'is_back_esophagus'
}, {
value: '2',
target: 'inogm_level'
}, {
value: '2',
target: 'inogm_position'
}, {
value: '2',
target: 'early_gastric_cancer'
}, {
value: '2',
target: 'period_gastric_cancer'
}, {
value: '2',
target: 'atrophic_gastriti'
}, {
value: '2',
target: 'gastric_ulcer'
}, {
value: '2',
target: 'gastric_polyp_type'
}, {
value: '2',
target: 'gastric_polyp'
}, {
value: '2',
target: 'non_atrophic_gastriti'
}, {
value: '2',
target: 'is_duodenal_ulcer'
}, {
value: '2',
target: 'other_pathology'
}],
dicType: 'check_result',
props: {
label: 'label',
value: 'value'
},
prop: 'diagnosis',
label: '最后诊断',
fieldType: 'tinyint',
fieldLength: '4',
tableName: '胃镜检查',
tableCode: 'gastroscope',
tableId: '1597468524048121858',
notFilter: false,
cType: '',
subfield: false,
span: 24
},
]
},
{
label: '实验室检查',
prop: '1669863751318_50013',
arrow: true,
collapse: true,
display: true,
labelWidth: 8,
showIndex:true,
column: [
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'G_17',
label: '胃泌素17',
fieldType: 'varchar',
fieldLength: '255',
tableName: '实验室检查',
tableCode: 'gas_exam',
tableId: '1597466741234040833',
notFilter: false,
cType: '',
subfield: false,
autoRequired: 0,
personalRequired: 0,
span: 24,
width: 12,
unit:"pmol/L",
color:"#5972FF"
},
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'PG_I',
label: '胃蛋白酶原I(PG I)',
fieldType: 'varchar',
fieldLength: '255',
tableName: '实验室检查',
tableCode: 'gas_exam',
tableId: '1597466741234040833',
notFilter: false,
cType: '',
subfield: false,
span: 24,
width: 12
},
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'PG_II',
label: '胃蛋白酶原II(PG II)',
fieldType: 'varchar',
fieldLength: '255',
tableName: '实验室检查',
tableCode: 'gas_exam',
tableId: '1597466741234040833',
notFilter: false,
cType: '',
subfield: false,
span: 24,
width: 12
},
{
type: 'radio',
display: true,
importantField: true,
styles: {},
prop: 'IgG',
label: 'Hp抗体(IgG)检测',
fieldType: 'varchar',
fieldLength: '255',
autoRequired: 0,
personalRequired: 0,
dicData: [{
label: '阴性',
value: '1',
id: '1598150963816923138',
parentId: ''
}, {
label: '阳性',
value: '2',
id: '1598150992287858689',
parentId: ''
}],
dynamicshSet: [],
dicType: 'hp_antibody',
props: {
label: 'label',
value: 'value'
},
tableName: '实验室检查',
tableCode: 'gas_exam',
tableId: '1597466741234040833',
notFilter: false,
cType: '',
subfield: false,
span: 24
},
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'img_path',
label: '图片资料',
fieldType: 'varchar',
fieldLength: '255',
tableName: '实验室检查',
tableCode: 'gas_exam',
tableId: '1597466741234040833',
notFilter: false,
cType: '',
subfield: false,
span: 24,
width: 12
}
]
},
{
label: '风险评估',
prop: '1669864316349_49130',
arrow: true,
collapse: true,
display: true,
labelWidth: 8,
showIndex:true,
column: [
{
type: 'input',
display: true,
importantField: true,
styles: {},
autoRequired: 0,
personalRequired: 0,
prop: 'risk_score',
label: '风险评分',
fieldType: 'varchar',
fieldLength: '255',
tableName: '风险评估',
tableCode: 'gas_risk_assessment',
tableId: '1598151898370768898',
notFilter: false,
cType: '',
subfield: false,
span: 24,
width: 12
},
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'risk_rank',
label: '风险等级',
fieldType: 'varchar',
fieldLength: '20',
tableName: '风险评估',
tableCode: 'gas_risk_assessment',
tableId: '1598151898370768898',
notFilter: false,
cType: '',
subfield: false,
span: 24,
width: 12
},
]
},
{
label: '第一次随访计划',
prop: '1669858313508_15760',
arrow: true,
collapse: true,
display: true,
labelWidth: 8,
column: [
{
type: 'radio',
display: true,
importantField: true,
styles: {},
prop: 'is_continue_follow',
label: '是否随访',
dicData: [{
label: '',
value: '1',
id: '1595347527757000705',
parentId: ''
}, {
label: '',
value: '0',
id: '1595347502595371010',
parentId: ''
}],
dynamicshSet: [],
dicType: 'd-sf',
props: {
label: 'label',
value: 'value'
},
fieldType: 'tinyint',
fieldLength: '2',
tableName: '随访计划',
tableCode: 'gas_follow',
tableId: '1597491580053323777',
notFilter: false,
cType: '',
subfield: false,
value: '1',
span: 24,
autoRequired: 0,
personalRequired: 0
},
{
type: 'date',
display: true,
importantField: true,
styles: {},
prop: 'first_follow_time',
label: '随访时间',
format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd',
dicType: '',
fieldType: 'date',
tableName: '随访计划',
tableCode: 'gas_follow',
tableId: '1597491580053323777',
notFilter: false,
cType: '',
subfield: false,
span: 12,
autoRequired: 0,
personalRequired: 0,
width: 12
},
{
type: 'input',
display: true,
importantField: true,
styles: {},
prop: 'follow_contents',
label: '随访内容',
fieldType: 'text',
tableName: '随访计划',
tableCode: 'gas_follow',
tableId: '1597491580053323777',
notFilter: false,
cType: '',
subfield: false,
autoRequired: 0,
personalRequired: 0,
span: 12,
width: 12
}
]
},
]
},
formEdit:{
}
fromLoading: false,
formTabs: [],
formTabsList: [],
jsonList: [],
formList: {},
// formEdit:{
// },
activeTab: "0",
screenList: [
{
time: "2020-12-12 11:11:11",
code: "UK102",
name: "修改第一次随访计划",
},
],
}
},
watch:{
form(val){
this.formEdit = val
console.log("form",val)
}
computed: {
...mapGetters({
group: ["user/group"],
}),
isEmpty() {
return this.jsonList.length
},
//当前随访数据
formEdit: {
get() {
return this.formDataList[this.activeTab]
},
set() {},
},
},
watch: {
tabActive(val) {
this.activeTab = val
},
},
created() {
this.getCurrentFormByType()
},
mounted(){
mounted() {
this.formEdit = this.formDataList[this.activeTab]
},
methods: {
getCurrentFormByType(type = 2) {
this.fromLoading = true
getCurrentFormByType({
type,
groupId: this.group.groupId,
})
.then((res) => {
if (res.code === 1) {
const formTabs = []
this.formTabsList = res.data.map((item, index) => {
if (index === 0) {
// formTabs.push({
// silent: false,
// ...item,
// label: item.tabName,
// })
} else {
formTabs.push({
id: item.id,
formId: item.formId,
silent: true,
label: item.tabName,
})
}
return {
...item,
silent: false,
label: item.tabName,
}
})
this.formTabs = formTabs
}
})
.finally(() => {
this.jsonList = []
let i = 0
this.initForm(i)
})
},
initForm(i) {
let formId = this.formTabs[i].formId
this.formloading = true
getFormDetail(formId)
.then((res) => {
if (res.code === 1 && res.data) {
const formJson = res.data.formJson
const obj = eval("(" + formJson + ")")
obj.disabled = true
obj.closeBtn = true
obj.detail = true
this.jsonList.push(obj)
if (i == this.formTabs.length - 1) {
// console.log(this.jsonList)
this.fromLoading = false
}
}
})
.finally(() => {
// console.log(this.formTabs)
if (i < this.formTabs.length - 1) {
i++
this.initForm(i)
}
// console.log(this.jsonList)
if (this.jsonList.length == this.formTabs.length) {
this.$nextTick(() => {
// this.getPatientDetail()
})
}
})
},
},
methods: {},
}
</script>
......@@ -727,33 +217,68 @@ export default {
background: #4e68ff;
color: #fff;
}
.el-main {
padding: 0px 20px;
}
.el-aside {
padding-bottom: 20px;
}
}
.follow-form {
.follow-tab {
::v-deep {
.el-collapse-item__header {
// border-width: 0px 0px 0px;
border: none !important;
border-radius: 4px;
border: 1px solid #cccccc;
height: 100%;
.el-tabs__header {
margin-left: 0px;
}
.el-tabs__nav-wrap.is-right::after {
width: 0px;
}
.el-tabs__active-bar.is-right {
width: 3px;
height: 52px !important;
}
.row24 {
border-top: 1px solid #cccccc;
.el-tabs--right {
height: auto !important;
}
.custom-form-item {
border-width: 1px 0px 0px;
.tab-title {
padding: 16px;
background: #fafafa;
color: #333333;
border-bottom: 1px solid #cccccc;
}
.el-collapse-item {
margin-bottom: 20px;
border-radius: 4px;
overflow: hidden;
border: 1px solid #cccccc;
.el-tabs__item {
padding: 16px;
width: 180px;
background: #fafafa;
height: auto;
line-height: inherit;
border-bottom: 1px solid #cccccc;
transition: all 1s;
}
.el-collapse-item__wrap {
border: none;
.el-tabs__item.is-active {
background: transparent;
}
// .row24.el-col-lg-12:nth-child(2n) {
// border-width: 0px 0px 0px 1px;
// }
.el-form-item {
padding: 0px;
}
}
.follow-list {
border-radius: 4px;
border: 1px solid #cccccc;
height: 100%;
background: #fafafa;
li {
padding: 16px;
border-bottom: 1px solid #ccc;
// cursor: pointer;
.time {
font-size: 14px;
margin-bottom: 8px;
font-family: AlibabaPuHuiTiR;
text-align: left;
&:first-child {
color: #4e68ff;
}
}
}
}
......
<template>
<div>
<el-dialog
center
:visible.sync="dialogVisible"
width="40%"
show-close
@closed="cancelSubmit"
>
<el-dialog center :visible.sync="dialogVisible" width="40%" show-close @closed="cancelSubmit">
<slot name="content"></slot>
<slot name="footer"></slot>
</el-dialog>
......
......@@ -13,8 +13,10 @@
</div>
</div>
<div class="table-content p-24">
<!-- <component :is="curComponent" :formEdit="formEdit"></component> -->
<follow-review :form="formEdit"></follow-review>
<follow-review
:form-data-list="followNum"
:tab-active="tabActive"
></follow-review>
</div>
<div class="choose-handle p-24">
<span v-if="!editStatus">请选择审核结果:</span>
......@@ -31,7 +33,7 @@
<span v-if="editStatus" class="op">驳回修改建议:胃镜图片不合规</span>
</div>
</div>
<public-dialog ref="editDialog" @onSubmit="onSubmit" @onCancel="onCancel">
<public-dialog ref="editDialog" @onCancel="onCancel">
<!-- 修改审核结果 优先触发提示 -->
<template v-if="!confirmStatus" slot="content">
<div class="title">温馨提示</div>
......@@ -52,7 +54,7 @@
</div>
</template>
</public-dialog>
<public-dialog ref="publicDialog" @onSubmit="onSubmit" @onCancel="onCancel">
<public-dialog ref="publicDialog" @onCancel="onCancel">
<!-- 审核结果回显 -->
<template v-if="!confirmStatus" slot="content">
<div class="title">
......@@ -73,7 +75,7 @@
prop="reson"
>
<el-input
v-model="form.reson"
v-model="form.reason"
type="textarea"
:placeholder="
curBtn == 2 ? '请填写不合格原因' : '请填写驳回修改建议'
......@@ -81,6 +83,19 @@
></el-input>
</el-form-item>
</el-form>
<!-- 标签 -->
<div v-loading="tagLoading" class="tag-form">
<el-tag
v-for="(item, index) in tagList"
:key="index"
size="medium"
:class="item.isSelect ? '' : 'unselect-tag'"
@click="seleckTag(item, index)"
>
<span>{{ item.note }}</span>
</el-tag>
<p class="handle-row" @click="showNote = true">编辑标签</p>
</div>
</div>
</div>
<div class="btn">
......@@ -106,7 +121,16 @@
该病例审核{{ curBtn == 2 ? "不合格原因" : "驳回修改建议" }}提交成功!
</div>
<div class="btn">
<el-button type="primary" @click="nextExample">下一例</el-button>
<el-button
type="primary"
:loading="auditLoading"
@click="nextExample"
>
<span v-if="tabActive < formEdit.length - 1"
>确认并进入下一列审核</span
>
<span v-else>确 定</span>
</el-button>
</div>
</template>
</public-dialog>
......@@ -115,7 +139,8 @@
<script>
import publicDialog from "./components/publicDialog.vue"
import followReview from "./components/followReview.vue"
import { getFollowUnCheckDetail } from "@/api/followup"
import { getFollowUnCheckDetail, putFollowCheck } from "@/api/followup"
import { getSysCheckNote, postSysCheckNote } from "@/api/note"
export default {
components: { publicDialog, followReview },
data() {
......@@ -123,6 +148,13 @@ export default {
medicalCombination: "无锡市人民医院医联体",
mcCount: 7,
editStatus: false, //进入的状态是第一次审核还是修改审核,false为第一次,true为修改
followNum: [
//随访次数数据
{ followId: 123, formRecordId: 123 },
{ followId: 123, formRecordId: 123 },
{ followId: 123, formRecordId: 123 },
{ followId: 123, formRecordId: 123 },
], //第几次随访数据
formEdit: {
name: "djksh",
contact_phone: "12345678",
......@@ -132,75 +164,86 @@ export default {
}, //填报数据
form: {},
rules: {
reson: [{ required: true, message: "请填写", trigger: "blur" }],
reason: [{ required: true, message: "请填写", trigger: "blur" }],
},
btnGroup: [
{
text: "合格",
value: 1,
value: 3,
},
{
text: "不合格",
value: 2,
value: 4,
},
{
text: "驳回修改",
value: 3,
value: 2,
},
],
loading: false,
curBtn: 0,
curBtn: 0, //点击的按钮
curComponent: "followReview",
confirmStatus: false,
tagList: [
// {
// note: "不合格原因",
// isSelect: false,
// },
// {
// note: "不合格原因不合格原因",
// },
// {
// note: "不合格原因",
// },
// {
// note: "不合格原因",
// },
// {
// note: "不合格原因",
// },
],
newNote: "",
minHeight: "170px",
showNote: false,
}
},
watch: {},
created() {
this.getDetail()
},
computed: {
unionId() {
return this.$route.query.id
},
},
watch: {
// tagList(){
// this.$nextTick(() => {
// this.minHeight = this.$refs.publicContent.offsetHeight + "px"
// })
// }
},
created() {
// this.getDetail()
},
methods: {
showDialog(val) {
this.curBtn = val
showDialog(val, index) {
console.log("显示框", val)
this.curBtn = index + 1
if (!this.editStatus) {
if (this.curBtn == 1) {
// 走接口,保存合格
this.confirmStatus = true
} else if (this.curBtn == 2) {
this.rules.reson[0].message = "请输入不合格原因"
this.rules.reason[0].message = "请输入不合格原因"
//获取审核标签
this.getSysCheckNote()
} else {
this.rules.reson[0].message = "请输入驳回修改建议"
d
this.rules.reason[0].message = "请输入驳回修改建议"
}
this.$refs.publicDialog.dialogVisible = true
} else {
this.$refs.editDialog.dialogVisible = true
}
},
onSubmit() {
this.loading = true
// 切换文本
if (this.curBtn != 1) {
this.$refs.form.validate((valid) => {
if (valid) {
// alert("submit!")
// 保存成功,回显,调用接口
// 回调
this.confirmStatus = true
} else {
console.log("error submit!!")
return false
}
})
}
this.loading = false
// this.$refs.publicDialog.dialogVisible = true
},
onCancel() {
this.confirmStatus = false
if (this.curBtn != 1) {
......@@ -208,6 +251,7 @@ export default {
}
this.$refs.editDialog.dialogVisible = false
this.$refs.publicDialog.dialogVisible = false
// this.$refs.noteDialog.dialogVisible = false
if (this.$refs.form) {
this.$refs.form.clearValidate()
}
......@@ -218,13 +262,17 @@ export default {
// 走接口,保存合格
this.confirmStatus = true
} else if (this.curBtn == 2) {
this.rules.reson[0].message = "请输入不合格原因"
this.rules.reason[0].message = "请输入不合格原因"
} else {
this.rules.reson[0].message = "请输入驳回修改建议"
this.rules.reason[0].message = "请输入驳回修改建议"
}
this.$refs.publicDialog.dialogVisible = true
},
nextExample() {
if (Number(this.tabActive) < this.formEdit.length - 1) {
this.tabActive = String(Number(this.tabActive) + 1)
}
console.log("tab激活", this.tabActive)
this.onCancel()
},
async getDetail() {
......@@ -235,6 +283,85 @@ export default {
}
this.loading = false
},
//审核
async handleCheck() {
this.auditLoading = true
let params = {
id: this.formEdit[this.tabActive],
checkStatus: this.btnGroup[this.curBtn].value,
checkNote: this.form.reason,
patientId: this.unionId,
}
console.log("审核值", params)
// let res = await putFollowCheck(params)
// if(res.code==1){
// // this.formEdit=res.data //调试注释
// }
this.auditLoading = false
},
// 获取审核标签
async getSysCheckNote() {
this.tagLoading = true
let res = await getSysCheckNote()
if (res.code == 1) {
this.tagList = res.data
}
this.tagLoading = false
},
//选择标签
seleckTag(item, index) {
this.tagList[index]["isSelect"] = true
this.form.reason = this.form.reason + item.note + ""
this.$forceUpdate()
},
//标签保存
async saveTag() {
let params = this.tagList.map((e) => e.note)
let res = await postSysCheckNote(params)
if (res.code == 1) {
this.$message.success("保存标签成功")
this.getSysCheckNote()
// this.$refs.noteDialog.dialogVisible = false
}
},
//标签添加
addTag() {
this.tagList.push({
note: "",
})
this.$forceUpdate()
},
//标签删除
delTag(item, index) {
this.$confirm("确定要删除该标签吗?", "警告", {
type: "warning",
})
.then(() => {
this.tagList = this.tagList.filter((e, i) => i != index)
})
.catch(() => {})
},
//标签对话框关闭
handleNoteDialog(i) {
this.showNote = false
this.getSysCheckNote()
},
// //标签保存对话框操作
// noteSave(){
// this.$refs.noteDialog.dialogVisible = false
// this.getSysCheckNote()
// },
// //添加、编辑标签
// async handleTag(item){
// if(!item.note) return
// else{
// let params = {
// note:item.note
// }
// item.id ? params['id']=item.id : ''
// let res = item.id ? await putSysCheckNote(params) : await postSysCheckNote(params)
// }
// }
},
}
</script>
......@@ -298,7 +425,7 @@ export default {
line-height: 26px;
}
.content {
margin: 58px;
margin: 28px 23px;
.pass {
font-size: 18px;
font-family: AlibabaPuHuiTiM;
......@@ -309,7 +436,7 @@ export default {
.btn {
margin-top: 20px;
.el-button {
width: 100px;
// width: 100px;
height: 32px;
}
}
......@@ -317,7 +444,7 @@ export default {
width: 100%;
text-align: left;
}
.reson {
.reason {
margin-top: 20px;
}
.showTips {
......@@ -333,4 +460,56 @@ export default {
padding-top: 20px;
padding-bottom: 20px;
}
.tag-form {
text-align: initial;
::v-deep {
.el-tag {
margin: 0px 12px 12px 0px;
cursor: pointer;
border-color: #4e68ff;
span {
display: inline-block;
}
}
.unselect-tag {
color: #353a45;
border-color: #edf0ff;
}
}
.handle-row {
color: #4e68ff;
text-decoration: underline;
text-align: right;
cursor: pointer;
}
}
.note-dialog {
::v-deep {
.tag-input {
.el-input__inner {
background-color: rgba(78, 104, 255, 0.06);
border-radius: 2px;
}
}
.handle-text {
line-height: 36px;
cursor: pointer;
}
}
}
.left-back {
position: absolute;
padding: 7px 5px;
top: 10px;
font-size: 22px;
text-align: left;
cursor: pointer;
}
::v-deep {
.el-dialog__headerbtn {
font-weight: bold;
font-size: 22px;
}
}
</style>
<template>
<!-- 随访调查录入 -->
<div>
<div style="positon: relative">
<div class="goback" v-if="formType == 1">
<el-button icon="el-icon-back" @click="backInfoce">返 回</el-button>
</div>
<ConfigForms
form-type="2"
formClass="follow-form"
:disabled="false"
:patientId="patientId"
v-if="refreshFlag"
:form-type="formType"
form-class="follow-form"
:disabled="disabled"
:tab-disabled="tabDisabled"
:get-data="getData"
:contrast="formType == 1 ? false : true"
:patient-id="patientId"
:screenList="screenList"
@refreshData="refreshData"
></ConfigForms>
</div>
</template>
<script>
import ConfigForms from "@/views/screening/components/ConfigForms.vue"
import { getFollowList } from "@/api/patient"
export default {
name: "FollowupEntry",
components: {
ConfigForms,
},
data() {
return { patientId: "" }
return {
disabled: false,
tabDisabled: true,
refreshFlag: true,
screenList: [
// {
// create_time: "2020-12-12 11:11:11",
// create_user_name: "",
// title: "修改第一次随访计划",
// },
],
}
},
created() {
this.patientId = this.$route.query.patientId
provide() {
return {
tabFollowId: () => this.followId,
}
},
computed: {
patientId() {
return this.$route.query.patientId
},
model() {
return this.$route.query.model
},
followId() {
return this.$route.query.followId
},
formType() {
return this.$route.query.formType
},
getData() {
return Boolean(this.$route.query.getData - 0)
},
},
mounted() {
if (this.model == "view") {
this.disabled = true
this.tabDisabled = false
} else {
this.disabled = false
this.tabDisabled = true
}
this.$nextTick(() => {
if (this.formType == 2) {
this.getFollowList()
}
})
},
methods: {
refreshData(data) {
// this.refreshFlag = false
// this.$nextTick(() => {
// this.refreshFlag = true
// })
},
backInfoce() {
this.$router.push({ path: "/followupquery", query: {} })
},
getFollowList() {
getFollowList({
patientId: this.patientId,
}).then((res) => {
// console.log(res)
if (res.code == 1) {
this.screenList = res.data || []
}
})
},
},
methods: {},
}
</script>
<style lang="scss"></style>
<style lang="scss" scoped>
.goback {
position: absolute;
right: 24px;
top: 24px;
z-index: 99;
}
</style>
<template>
<!-- 随访查询 -->
<div class="screeningSearch">
<div class="top">
<form-components :forms="formList"></form-components>
<form-components
ref="form"
:forms="formList"
:form-edit="formEdit"
@handleSearch="onSearch"
></form-components>
</div>
<div class="bot">
<customs-table
<el-table-self
ref="table"
:table-data="tableData"
:columns="columns"
......@@ -24,14 +30,19 @@
import FormComponents from "@/components/FormComponents"
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin"
import searchMixin from "../searchMixin"
import { getCurrentFormByType } from "@/api/coop-group.js"
import { getFollowSearch } from "@/api/followup"
import { getDictDetail } from "@/api/dict.js"
export default {
components: {
FormComponents,
CustomsTable,
// CustomsTable,
},
mixins: [paginationMixin],
mixins: [paginationMixin, searchMixin],
data() {
return {
followId: "",
listLoading: false,
keyword: "",
modifiedFlag: false,
......@@ -39,51 +50,85 @@ export default {
{
label: "医联体",
minWidth: 120,
value: "groupName",
value: "unionName",
formatter: (row) => {
return row.unionName ? row.unionName : "--"
},
},
{
label: "姓名",
minWidth: 120,
formatter: (row) => {
return row.name ? row.name : "--"
},
value: "name",
},
{
label: "性别",
minWidth: 120,
minWidth: 80,
value: "sex",
formatter: (row) => {
return this.$handle.formatDicList(
this.dictMap["d-sex"],
row.sex + ""
)
},
},
{
label: "身份证",
minWidth: 120,
value: "idCard",
formatter: (row) => {
return row.idCard ? row.idCard : "--"
},
},
{
label: "年龄",
minWidth: 120,
value: "age",
formatter: (row) => {
return row.age ? row.age : "--"
},
},
{
label: "筛查时间",
minWidth: 120,
value: "screenTime",
minWidth: 180,
value: "screeningTime",
formatter: (row) => {
return row.screeningTime ? row.screeningTime : "--"
},
},
{
label: "风险评估结果",
minWidth: 120,
value: "result",
value: "riskRank",
formatter: (row) => {
let riskRank = {
low: "低危",
medium: "中危",
high: "高危",
}
return row.riskRank ? riskRank[row.riskRank] : "--"
},
},
{
label: "上次随访时间",
value: "followTime",
minWidth: 120,
value: "targetFieldCode",
formatter: (row) => {
return row.followTime ? row.followTime : "--"
},
},
{
label: "筛查审核状态",
minWidth: 180,
value: "createTime",
label: "随访进度",
value: "followBatch",
minWidth: 120,
formatter: (row) => {
return this.$handle.formatDicList(
this.dictMap["follow_type"],
String(row.followBatch)
)
},
},
{
label: "操作",
......@@ -92,6 +137,7 @@ export default {
operType: "button",
operations: [
{
isIndex: true,
func: this.rowOpration,
formatter(row) {
return {
......@@ -100,86 +146,43 @@ export default {
}
},
},
// {
// isIndex: true,
// func: this.handleEdit,
// formatter(row) {
// if (row.checkStatus != 3 && row.checkStatus != 4) {
// return {
// label: "修改",
// type: "text",
// }
// } else {
// return {
// label: "",
// type: "text",
// style: {
// display: "none",
// },
// }
// }
// },
// },
],
},
],
tableData: [
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第十个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第一个",
},
{
groupName: "第十个",
},
{
groupName: "第一个",
},
{
groupName: "第er一个",
},
],
tableData: [],
formList: [
{
type: "select",
type: "daterange",
label: "筛查时间",
prop: "screeningTime",
prop: "ScreeningTime",
placeholder: "请选择时间",
rules: [],
opts: [],
valueFormat: "yyyy-MM-dd",
},
{
type: "select",
label: "随访审核状态",
prop: "screeningStatus",
prop: "checkStatus",
trans: "checkStatus",
placeholder: "请选择随访状态",
rules: [],
opts: [],
......@@ -187,7 +190,8 @@ export default {
{
type: "select",
label: "随访进度",
prop: "screeningProgress",
prop: "followBatch",
trans: "follow_type",
placeholder: "请选择随访进度",
rules: [],
opts: [],
......@@ -195,16 +199,31 @@ export default {
{
type: "select",
label: "计划随访时间",
prop: "planScreeningTime",
prop: "nextFollowTime",
trans: "next_follow_time",
placeholder: "请选择计划随访时间",
rules: [],
opts: [],
},
{
type: "input",
label: "关键词",
prop: "keyWord",
placeholder: "请输入医联体/姓名/身份证",
label: "姓名",
prop: "name",
placeholder: "请输入姓名",
rules: [],
},
{
type: "input",
label: "身份证",
prop: "idCard",
placeholder: "请输入身份证",
rules: [],
},
{
type: "input",
label: "医联体",
prop: "unionName",
placeholder: "请输入医联体",
rules: [],
},
{
......@@ -222,21 +241,54 @@ export default {
},
btnText: "查询",
func: () => {
this.onSearch()
this.onClickSearch()
},
},
{
btnType: "tobeModified",
tobeModified: 20,
},
// {
// btnType: "tobeModified",
// tobeModified: 20,
// },
],
},
],
formEdit: {},
}
},
watch: {},
watch: {
pageSize(val) {
sessionStorage.setItem("followQuery-pageSize", val)
},
//当前页
pageIndex(val) {
sessionStorage.setItem("followQuery-pageIndex", val)
},
followId(v) {
if (v) {
this.listLoading = true
this.$nextTick(() => {
setTimeout(() => {
this.listLoading = false
let query = { ...this.$route.query }
this.$router.replace({ query: {} })
this.$router.push({
path: "/followupentry",
query: query,
})
}, 500)
})
}
},
},
created() {
this.initSearchForm()
},
mounted() {
this.total = 20
this.followId = this.$route.query.followId
// this.formEdit = sessionStorage.getItem('followQuery-form') ? JSON.parse(sessionStorage.getItem('followQuery-form')) : {}
this.pageSize = Number(sessionStorage.getItem("followQuery-pageSize")) || 10
this.pageIndex =
Number(sessionStorage.getItem("followQuery-pageIndex")) || 1
this.getCurrentFormByType(2)
},
methods: {
changeModified() {
......@@ -250,11 +302,112 @@ export default {
handleSizeChange(v) {
console.log(v)
},
onSearch() {
console.log(123456)
handleEdit(data, i, index) {
this.$router.push({
path: "/followupentry",
query: {
patientId: data.patientId,
followId: data.id,
model: "edit",
getData: 1,
},
})
},
rowOpration(data, i, index) {
console.log(data)
if (data.followBatch == 0) {
// 筛查
this.$router.push({
path: "/followupentry",
query: {
patientId: data.patientId,
followId: data.id,
model: "view",
getData: 1,
formType: 1, // 去筛查的表单还是随访的表单
},
})
} else {
this.$router.push({
path: "/followupentry",
query: {
patientId: data.patientId,
followId: data.id,
model: "view",
getData: 1,
formType: 2,
},
})
}
},
onSearch(form) {
console.log(form)
sessionStorage.setItem("followQuery-form", JSON.stringify(form))
this.formEdit = form
// this.handleSearch()
},
onClickSearch() {
this.pageIndex = 1
this.handleSearch()
},
async handleSearch() {
this.listLoading = true
console.log(this.$refs.form.form)
let params = {
pageSize: this.pageSize,
pageNum: this.pageIndex,
formId: this.formId,
...this.$refs.form.form,
patientFrom: sessionStorage.getItem("selectedIndex"), //筛查场景
}
if (this.formEdit) {
params = { ...Object.assign(this.formEdit, params) }
}
for (let key in params) {
if (params[key] !== "" && params[key] !== null) {
if (key.includes("Time") && params[key]) {
params["start" + key] = params[key][0]
params["end" + key] = params[key][1]
delete params.ScreeningTime
} else {
params[key] = params[key]
}
}
}
let res = await getFollowSearch(params)
if (res.code == 1) {
//分页内容
const d = res.data
this.total = d.total
this.tableData = d["records"]
}
this.listLoading = false
},
//查询表单枚举值字典
initSearchForm() {
this.formList.forEach((item, index) => {
if (item.trans) {
if (!item["opts"]) {
item["opts"] = []
} else {
item["opts"] = this.dictMap[item.trans]
}
}
})
this.$forceUpdate()
},
rowOpration(row, index) {
console.log(row, index)
//获取随访表单类型
getCurrentFormByType(type) {
getCurrentFormByType({
type,
groupId: this.$store.state.user.group.groupId || "",
}).then((res) => {
if (res.code === 1) {
this.formId = res.data[0].id
this.handleSearch()
}
})
},
},
}
......
......@@ -28,15 +28,18 @@
<script>
import FormComponents from "@/components/FormComponents"
import paginationMixin from "@/components/TabComponents/mixin"
import searchMixin from "../searchMixin"
import { getCurrentFormByType } from "@/api/coop-group.js"
import { getFollowSurvey } from "@/api/followup"
import { mapGetters } from "vuex"
export default {
components: {
FormComponents,
},
mixins: [paginationMixin],
mixins: [paginationMixin, searchMixin],
data() {
return {
formId: "", //随访表单类型
listLoading: false,
keyword: "",
modifiedFlag: false,
......@@ -97,10 +100,12 @@ export default {
minWidth: 120,
value: "riskRank",
formatter: (row) => {
return this.$handle.formatDicList(
this.dictMap["risk_level"],
String(row.riskRank)
)
let riskRank = {
low: "低危",
medium: "中危",
high: "高危",
}
return row.riskRank ? riskRank[row.riskRank] : "--"
},
},
{
......@@ -253,13 +258,13 @@ export default {
},
computed: {
...mapGetters({
selectedIndex: "table/selectedIndex",
// selectedIndex: "table/selectedIndex",
refreshFlag: "table/refreshFlag",
}),
},
watch: {},
created() {
// this.initColumn()
this.initSearchForm()
},
mounted() {
this.handleSearch() //调试注释
......@@ -283,7 +288,13 @@ export default {
console.log("跳转", data, i)
sessionStorage.setItem("formEdit", JSON.stringify(data))
this.$router.push({
path: `/followupentry?patientId=${data.patientId}`,
path: `/followupentry`,
query: {
patientId: data.patientId,
getData: 0,
formType: "2",
model: "add",
},
})
},
async handleSearch() {
......@@ -305,13 +316,19 @@ export default {
}
this.listLoading = false
},
// initColumn(){
// this.columns.forEach((item,index) => {
// if(item.trans){
// this.initDict(item.trans,index)
// }
// })
// },
//查询表单枚举值字典
initSearchForm() {
this.formList.forEach((item, index) => {
if (item.trans) {
if (!item["opts"]) {
item["opts"] = []
} else {
item["opts"] = this.dictMap[item.trans]
}
}
})
this.$forceUpdate()
},
// async initDict(type,index){
// let params={
// type:type
......@@ -339,7 +356,19 @@ export default {
// }
// }
// })
// }
// },
//获取随访表单类型
getCurrentFormByType(type) {
getCurrentFormByType({
type,
groupId: this.$store.state.user.group.groupId || "",
}).then((res) => {
if (res.code === 1) {
this.formId = res.data[0].id
this.handleSearch()
}
})
},
},
}
</script>
......
......@@ -184,10 +184,10 @@ export default {
},
],
tableData: [
{
name: "1",
1: 2,
},
// {
// name: "1",
// 1: 2,
// },
],
}
},
......@@ -246,6 +246,9 @@ export default {
type: "success",
message: "删除成功!",
})
if (this.tableData.length == 1 && this.pageIndex != 1) {
this.pageIndex--
}
this.handleSearch()
}
})
......@@ -271,6 +274,7 @@ export default {
<style lang="scss" scoped>
.container {
padding: 24px;
padding-bottom: 0px;
height: 100%;
display: flex;
flex-direction: column;
......
......@@ -3,12 +3,19 @@
id="publicContent"
:class="[
activeName == 'index0' && formClass ? formClass : '',
$route.path === '/screening/draft' ? 'p_padding' : '',
$route.path === '/screening/draft'
? 'p_padding'
: $route.path === '/screening/add'
? 'add_padding'
: '',
]"
>
<div v-if="formTabs && formTabs.length > 0" style="position: relative">
<div
v-if="formTabs && formTabs.length > 0"
style="position: relative; display: flex"
>
<el-button
v-if="!disabled"
v-if="formType == 1 ? (!disabled ? true : false) : true"
class="draftButton"
:loading="loading"
:disabled="!infoCompelete"
......@@ -40,15 +47,16 @@
:patient-standby-id="patientStandbyId"
:newform-record-id="newformRecordId"
:form="form"
:formType="formType"
:form-type="formType"
:get-data="getData"
:disabled="disabled"
:operation="operation"
:isDraft="isDraft"
:is-draft="isDraft"
:active-name="activeName"
contrast
:contrast="contrast"
:form-initial="formInitial"
:survival-flag="survivalFlag"
:followId="followId"
:follow-id="followId"
@setFormJson="setFormJson"
@handleConfirm="handleConfirm"
@onPrev="onPrev"
......@@ -59,8 +67,24 @@
</transition>
</el-tab-pane>
</el-tabs>
<!-- <div
class="bottom_line"
:style="{ width: contrast ? 'calc(100% - 200px)' : '100%' }"
></div> -->
<el-aside v-if="contrast" :width="'220px'">
<div class="side-content">
<ul class="list">
<li v-for="(item, index) in screenList" :key="index">
<div class="time">{{ item.create_time }}</div>
<div class="time">{{ item.create_user_name }}</div>
<div class="time">{{ item.title }}</div>
</li>
</ul>
</div>
</el-aside>
</div>
<el-empty v-else description="暂无数据"></el-empty>
<!-- 筛查提交弹窗 -->
<public-dialog ref="showDialog" :show-close="true">
<!-- 保存草稿 -->
<template v-if="dialogType == 'draft'" slot="content">
......@@ -100,6 +124,35 @@
</div>
</template>
</public-dialog>
<!-- 随访提交弹窗 -->
<public-dialog ref="followDialog" :show-close="true">
<!-- 保存提交 -->
<template slot="content">
<div class="title center">提交成功!</div>
<div class="content center">
<div class="img">
<img src="~@/assets/img/DataCenter/submit.png" alt />
</div>
<div class="showTips">您可以在【随访查询】页面查询到该数据</div>
</div>
<div class="btn">
<el-button
type="primary"
:loading="loading"
class="textBtn"
@click="viewJumpFollow"
>查看</el-button
>
<el-button
v-if="formType != 2"
type="primary"
:loading="loading"
@click="continueSubmit"
>继续添加</el-button
>
</div>
</template>
</public-dialog>
</div>
</template>
......@@ -107,7 +160,8 @@
import mixin from "./mixin"
import CustomForm from "@/components/FormComponents/CustomForm/index"
import publicDialog from "../../audit-detail/components/publicDialog.vue"
import { getPatientDetail } from "@/api/patient.js"
import { getPatientDetail, getFollowDetail } from "@/api/patient.js"
import { getMedicalunionList } from "@/api/medicalunion-management"
export default {
name: "ConfigForms",
......@@ -115,12 +169,21 @@ export default {
mixins: [mixin],
props: {
disabled: Boolean,
screenList: Array,
tabDisabled: { type: Boolean, default: true },
formType: String,
patientId: String,
formClass: String,
operation: String,
isDraft: String,
getData: { type: Boolean, default: true },
contrast: { type: Boolean, default: false },
},
inject: {
tabFollowId: {
type: String,
default: "",
},
},
data() {
return {
......@@ -133,6 +196,9 @@ export default {
}
},
computed: {
getTabFollowId() {
return this.tabFollowId()
},
survivalFlag() {
if (this.activeName == "index0" && this.formClass) {
return true
......@@ -188,27 +254,35 @@ export default {
if (val == "index3") {
// 第四步风险评估
this.$nextTick(() => {
getPatientDetail({
formId: this.formId, // 每个大表单的id
patientId: this.patientId || this.patientStandbyId,
// formRecordId: this.newformRecordId,
})
.then((res) => {
const data = res.data.data
this.formInitial = data
if (this.formType == 2) {
// 随访回显
getFollowDetail({
formId: this.formId, // 每个大表单的id
followId: this.followId || this.getTabFollowId,
// formRecordId: this.newformRecordId,
})
.finally(() => {
this.loading = false
.then((res) => {
const data = res.data.data
this.formInitial = data
})
.finally(() => {
this.loading = false
})
} else {
// 筛查回显
getPatientDetail({
formId: this.formId, // 每个大表单的id
patientId: this.patientId || this.patientStandbyId,
// formRecordId: this.newformRecordId,
})
this.$nextTick(() => {
console.log("走了")
//!
// this.formInitial = {
// risk_rank: "中危",
// risk_score: "5分",
// screening_advise: "立刻住院",
// }
})
.then((res) => {
const data = res.data.data
this.formInitial = data
})
.finally(() => {
this.loading = false
})
}
})
}
},
......@@ -216,19 +290,27 @@ export default {
created() {
// 字典formType 1 筛查表单 2随访表单
// console.log('回显2',this.formEdit)
this.getMedicalunionList()
this.getCurrentFormByType(this.formType)
console.log(this.$route.path)
this.infoCompelete = this.$route.path == "/followupentry" ? true : false
},
methods: {
// 获取医联体列表
getMedicalunionList() {
getMedicalunionList().then((res) => {
if (res.code == 1) {
let unionList = [...res.data]
sessionStorage.setItem("unionList", JSON.stringify(unionList))
} else {
sessionStorage.removeItem("unionList")
}
})
},
handleConfirm(data, done, cb) {
console.log("提交", this.formType)
if (this.formType == "2") {
this.addFollowPatient(data, done, cb)
this.$emit("addMethods", {
activeName: this.activeName,
form: data.data,
})
} else {
this.addPatient(data, done, cb)
this.$emit("addMethods", {
......@@ -260,9 +342,14 @@ export default {
formTab.temporarySave()
// console.log(formTab)
} else if (type == 3) {
//提交
// 筛查提交
this.dialogType = "submit"
this.$refs.showDialog.dialogVisible = true
if (this.formType == 2) {
this.$refs.followDialog.dialogVisible = true
} else {
this.$refs.showDialog.dialogVisible = true
}
this.loading = false
} else {
// 返回
......@@ -279,7 +366,6 @@ export default {
}
// 清空红字:不符合筛查条件
this.$refs.showDialog.dialogVisible = false
//判断路径
if (this.$route.path != "/screening/add") {
this.$router.push("/screening/add")
}
......@@ -300,6 +386,28 @@ export default {
this.$refs.showDialog.dialogVisible = false
// alert("跳转")
},
viewJumpFollow() {
// this.activeName = "index0"
this.$router.push({
path: "/followupquery",
query: {
patientId: this.patientId,
followId: this.followId || this.tabFollowId,
model: "view",
getData: 1,
},
})
this.$refs.followDialog.dialogVisible = false
// this.$emit(
// "refreshData",
// JSON.stringify({
// patientId: this.patientId,
// followId: this.followId || this.tabFollowId,
// model: "view",
// getData: 1,
// })
// )
},
},
provide() {
return {
......@@ -310,12 +418,43 @@ export default {
</script>
<style lang="scss" scoped>
.el-aside {
padding: 88px 0 10px;
border-left: 0px;
.side-content {
width: 100%;
height: calc(100vh - 300px);
overflow: overlay;
border-left: 1px solid #ccc;
border-right: 0;
border-radius: 4px;
.list {
width: 93%;
border-right: 1px solid #ccc;
border-top: 1px solid #ccc;
li {
padding: 20px 30px;
border-bottom: 1px solid #ccc;
cursor: pointer;
.time {
font-size: 14px;
margin-bottom: 8px;
font-family: AlibabaPuHuiTiR;
text-align: left;
&:first-child {
color: #4e68ff;
}
}
}
}
}
}
#publicContent {
position: relative;
padding: 32px 24px 32px;
padding: 10px 24px 0px;
.draftButton {
position: absolute;
top: 0px;
top: 12px;
right: 40px;
z-index: 999;
border-radius: 4px;
......@@ -330,7 +469,10 @@ export default {
}
}
#publicContent.p_padding {
padding: 10px 24px 32px;
padding: 10px 24px 0px;
}
#publicContent.add_padding {
padding: 20px 24px 0px;
}
::v-deep .el-dialog__body {
.title {
......@@ -418,21 +560,54 @@ export default {
// border-width: 0px 0px 0px 1px;
// }
.el-form-item {
height: 100%;
padding: 0px;
.el-form-item__label {
min-width: 120px;
height: 100%;
text-align: left;
background: #fafafa;
font-size: 14px;
color: #333333;
border-right: 1px solid #cccccc;
// width: 100px !important;
white-space: nowrap;
white-space: wrap;
padding: 18px 10px;
margin-right: 20px;
text-align: center;
// text-align: center;
display: flex;
align-items: center;
// justify-content: center;
}
}
.el-form-item {
padding: 0px;
}
}
//只读表单
::v-deep {
.read-input,
.read-time {
.el-input__inner {
border: none;
padding: 0px 30px 0px 15px;
cursor: text;
}
.el-input.is-disabled .el-input__icon,
.el-input__prefix {
display: none;
}
.el-input__icon {
}
}
.read-radio {
cursor: text;
.is-checked {
display: none;
}
.el-radio__input.is-checked + .el-radio__label {
color: #606266;
}
.el-radio__label {
padding-left: 15px;
}
}
}
......@@ -444,4 +619,11 @@ export default {
border: 1px solid #4e68ff;
color: #4e68ff;
}
// .bottom_line {
// // width: 100%;
// position: absolute;
// bottom: 0px;
// height: 3px;
// box-shadow: 0px 3px 4px rgb(0 21 41 / 8%);
// }
</style>
......@@ -48,8 +48,10 @@
:style="{
height:
$route.path == '/screening/index'
? 'calc(100vh - 310px)'
: 'calc(100vh - 270px)',
? 'calc(100vh - 245px)'
: $route.path == '/screening/draft'
? 'calc(100vh - 249px)'
: 'calc(100vh - 203px)',
}"
:class="externalScroll ? 'no-scroll' : ''"
>
......@@ -70,18 +72,14 @@
</div>
</template>
</el-main>
<el-aside
v-if="contrast"
:width="sideWidth"
class="transition-box"
:class="{ hidden: !asideShow }"
>
<div class="side-content"></div>
</el-aside>
</el-container>
</template>
<script>
import { getPatientDetail, getRecordList } from "@/api/patient.js"
import {
getPatientDetail,
getRecordList,
getFollowDetail,
} from "@/api/patient.js"
import { getFormDetail } from "@/api/field"
import CustomForm from "@/components/FormComponents/CustomForm/index"
import ReadForm from "@/components/FormComponents/ReadForm/index"
......@@ -93,7 +91,8 @@ export default {
activeName: String,
externalScroll: Boolean, //外部滚动
disabled: Boolean,
contrast: Boolean, //同屏对照
getData: Boolean,
// contrast: Boolean, //同屏对照
form: Object,
formType: String,
patientId: String,
......@@ -118,6 +117,12 @@ export default {
},
}
},
inject: {
tabFollowId: {
type: Function,
default: () => {},
},
},
data() {
return {
btnType: "",
......@@ -157,9 +162,12 @@ export default {
return !(Object.keys(this.widgetFormPreview) || this.widgetFormPreview)
.length
},
sideWidth() {
return this.asideShow ? "200px" : "0px"
getTabFollowId() {
return this.tabFollowId()
},
// sideWidth() {
// return this.asideShow ? "200px" : "0px"
// },
pageLoading() {
return this.loading || this.formloading
},
......@@ -190,6 +198,9 @@ export default {
data[key] = data[key] + ""
}
}
data.follow_contents = data.follow_contents
? JSON.parse(data.follow_contents.replace(/"\"/g, ""))
: []
this.formData.formEdit = data
}
this.initForm() //! 随防筛查通用的设置form
......@@ -203,8 +214,9 @@ export default {
{ immediate: true }
)
} else {
console.log(206, this.getData)
// 监听form.silent 获取当前tab页数据
if (this.formType != 2) {
if (this.getData) {
this.$watch(
"form.silent",
() => {
......@@ -236,6 +248,7 @@ export default {
this.$refs.form.clearAge()
},
initData() {
console.log("初始化", this.formData)
this.formData.formRecordId = null
this.formCacheList = []
this.getPatientDetail()
......@@ -292,8 +305,9 @@ export default {
if (this.isDraft) {
params.statusMap.is_draft = this.isDraft
}
// 处理followId 针对随访查询的列表数据的查询和修改操作
if (this.$route.path == "/followupentry" && this.activeName != "index0") {
params.followId = this.followId
params.followId = this.followId || this.getTabFollowId
}
this.$emit("handleConfirm", params, done, (res) => {
// 多次填写的表单新增时,获取最新数据
......@@ -378,17 +392,31 @@ export default {
})
if (!this.patientId || this.form.silent) return
this.loading = true
getPatientDetail({
patientId: this.patientId,
formId: this.form.formId,
formRecordId: this.formData.formRecordId,
})
.then((res) => {
this.formatData(res)
if (this.formType == 2) {
getFollowDetail({
followId: this.followId || this.getTabFollowId,
formId: this.form.formId,
formRecordId: this.formData.formRecordId,
})
.finally(() => {
this.loading = false
.then((res) => {
this.formatData(res)
})
.finally(() => {
this.loading = false
})
} else {
getPatientDetail({
patientId: this.patientId,
formId: this.form.formId,
formRecordId: this.formData.formRecordId,
})
.then((res) => {
this.formatData(res)
})
.finally(() => {
this.loading = false
})
}
},
formatData(res, cache) {
const d = res.data || {}
......@@ -401,11 +429,14 @@ export default {
if (form["YZZKJC"] && typeof form["YZZKJC"] === "string") {
form["YZZKJC"] = JSON.parse(form["YZZKJC"])
}
console.log(form)
console.log("form形成", form, this.formData)
if (!cache) {
this.formData.formEdit = form
}
this.formData.formRecordId = d.formRecordId
if (!this.formData.formRecordId) {
this.newformRecordId = ""
}
this.formData.percent = d.percent || {}
const index = this.formCacheList.findIndex(
(_) => _.formRecordId === d.formRecordId
......@@ -416,7 +447,17 @@ export default {
this.formCacheList.push(this.deepClone(this.formData))
}
},
// 表单数据转化
formatString(form) {
for (const key in form) {
Object.prototype.toString.call(form[key]) == "[object Number]"
? (form[key] = String(form[key]))
: ""
}
this.formData.formEdit = form
},
getRecordList(formRecordId) {
console.log("获取表单id", formRecordId)
if (!this.patientId) return
getRecordList({
patientId: this.patientId,
......@@ -445,6 +486,7 @@ export default {
.el-main {
position: relative;
padding: 0;
// box-shadow: 0px 5px 4px red;
.arrow {
position: absolute;
......@@ -456,7 +498,7 @@ export default {
}
.header {
height: 5px;
box-shadow: 0 5px 4px rgb(0 21 41 / 8%);
box-shadow: 0px 3px 4px rgb(0 21 41 / 8%);
padding-right: 20px;
position: relative;
font-size: 15px;
......@@ -504,12 +546,4 @@ export default {
float: left;
width: 150px;
}
.transition-box {
transition: all 0.2s;
&.hidden {
opacity: 0;
height: 0px;
}
}
</style>
......@@ -13,6 +13,7 @@ export default {
newformRecordId: null, //记录Id
formTabs: [],
formId: "",
followId: "",
formTabsList: [],
isUpdated: false,
}
......@@ -27,7 +28,7 @@ export default {
nextTab() {
let i = this.activeName.split("index")[1] - 0
i++
if (i == 6) {
if (i == this.formTabs.length) {
this.onSubmit(3)
return
} else {
......
......@@ -25,7 +25,7 @@
</div>
<div v-if="isDetail">
<div>
<div style="margin-left: 24px">
<el-button icon="el-icon-back" @click="backInfoce">返 回</el-button>
</div>
<ConfigForms
......@@ -59,9 +59,9 @@ export default {
tabDisabled: true,
searchList: [
{
type: "date",
type: "daterange",
label: "筛查时间",
prop: "createDate",
prop: "CreateDate",
placeholder: "请选择时间",
valueFormat: "yyyy-MM-dd",
},
......@@ -293,17 +293,20 @@ export default {
this.handleSearch(form)
},
handleSearch(form) {
this.$router.push({
query: {},
})
this.listLoading = true
const params = Object.assign(this.cacheForm, form)
const data = {}
for (let key in params) {
if (params[key] !== "" && params[key] !== null) {
// if (key.includes("Time") && params[key]) {
// data["start" + key] = params[key][0]
// data["end" + key] = params[key][1]
// } else {
data[key] = params[key]
// }
if (key.includes("Date") && params[key]) {
data["start" + key] = params[key][0]
data["end" + key] = params[key][1]
} else {
data[key] = params[key]
}
}
}
data.current = this.pageIndex
......@@ -385,4 +388,9 @@ export default {
}
</script>
<style lang="scss" scoped></style>
<style lang="scss" scoped>
.container {
padding: 20px;
padding-bottom: 0px;
}
</style>
import { mapGetters } from "vuex"
export default {
data() {
return {}
},
computed: {
...mapGetters({
selectedIndex: ["table/selectedIndex"],
}),
},
methods: {},
mounted() {},
watch: {
selectedIndex(v) {
if (v) {
this.handleSearch()
}
},
},
}
......@@ -176,12 +176,12 @@ export default {
},
watch: {},
mounted() {
this.getMedicalunionList()
this.handleSearch()
console.log(cityList)
},
methods: {
// 获取list
getMedicalunionList() {
handleSearch() {
this.listLoading = true
medicalunionList({
size: this.pageSize,
......@@ -227,7 +227,7 @@ export default {
this.$message.success("添加成功")
this.addVisible = false
this.page = 1
this.getMedicalunionList()
this.handleSearch()
}
})
} else {
......@@ -259,7 +259,7 @@ export default {
.then((res) => {
if (res.code == 1) {
this.$message.success("删除成功")
this.getMedicalunionList()
this.handleSearch()
}
})
.catch(() => {})
......
<template>
<div id="medicalunion-management">
<div class="top-btn">
<el-button type="primary" class="btn" @click="addMedical">添加</el-button>
</div>
<div class="bot-table">
<customs-table
ref="table"
:table-data="tableData"
:columns="columns"
:header-class="'newHeader'"
:list-loading="listLoading"
:current-page="pageIndex"
:total-count="total"
:page-sizes="pageSizes"
:page-size="pageSize"
@pageSizeChange="handleSizeChange"
@currentPageChange="handleCurrentChange"
/>
</div>
<el-dialog
:visible.sync="addVisible"
width="520px"
:show-close="true"
@closed="resetForm"
>
<div class="title">{{ readOnly ? "查看" : "添加" }}</div>
<el-form
ref="form"
:model="form"
:label-position="'right'"
label-width="110px"
label-suffix=":"
:disabled="readOnly"
>
<el-form-item
v-for="(item, index) in formList"
:key="index"
:label="item.label"
:prop="item.prop"
:rules="[{ required: true, message: item.label + '不能为空' }]"
>
<!-- <template v-if="!readOnly"> -->
<template>
<!-- 输入框 -->
<el-input
v-if="item.type == 'input'"
v-model="form[item.prop]"
autocomplete="off"
:placeholder="'请填写' + item.label"
></el-input>
<!-- 下拉选 -->
<el-select
v-else-if="item.type == 'select'"
v-model="form[item.prop]"
:placeholder="'请选择' + item.label"
style="width: 100%"
>
<el-option
v-for="e in item.selectGroup"
:key="e.value"
:label="e.label"
:value="e.value"
></el-option>
</el-select>
<!-- 上传 -->
<el-upload-self
v-else-if="item.type === 'upload'"
v-model="form[item.prop]"
:btn-type="'text'"
v-bind="item"
:list-type="item.listType"
:accept="item.accept"
:limit="item.limit"
:disabled="readOnly"
></el-upload-self>
<!-- switch -->
<!-- switch切换 启用 -->
<el-switch
v-else-if="item.type === 'switch'"
v-model="form[item.prop]"
:active-value="1"
:inactive-value="0"
>
</el-switch>
</template>
<!-- <template v-else>
<span>{{ form[item.prop] || "--" }}</span>
</template> -->
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button class="f-btn" type="primary" @click="submitForm('6')"
>保存</el-button
>
</span>
</el-dialog>
<!-- 删除提示框 -->
<el-dialog title="提示" :visible.sync="deleteVisible" width="30%">
<span>确定删除吗?</span>
<span slot="footer" class="dialog-footers">
<el-button @click="deleteVisible = false">取 消</el-button>
<el-button type="primary" @click="confirmDelete">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import CustomsTable from "@/components/CustomsTable"
import paginationMixin from "@/components/TabComponents/mixin"
import ElUploadSelf from "@/components/UploadForOperation"
import mixin from "./mixin"
import { articleList } from "@/api/operation-management"
export default {
components: {
CustomsTable,
ElUploadSelf,
},
mixins: [paginationMixin, mixin],
data() {
return {
addVisible: false,
listLoading: false,
deleteVisible: false,
columns: [
{
label: "标题",
minWidth: 120,
value: "articleTitle",
},
{
label: "文件",
minWidth: 120,
type: "file",
value: "filePath",
},
{
label: "上传时间",
minWidth: 120,
value: "uploadTime",
},
{
label: "最新修改时间",
minWidth: 120,
value: "updateTime",
},
{
label: "上传人姓名",
minWidth: 120,
value: "uploadUserName",
},
{
label: "启用状态",
minWidth: 120,
type: "switch",
value: "status",
func: this.openChage,
},
{
label: "操作",
width: 220,
fixed: "right",
operType: "button",
operations: [
{
func: this.viewMedical,
formatter(row) {
return {
label: "查看",
type: "text",
}
},
},
{
func: this.editMedical,
formatter(row) {
return {
label: "编辑",
type: "text",
}
},
},
{
func: this.deleteFunc,
style: {
color: "#FA6400",
},
formatter(row) {
return {
label: "删除",
type: "text",
}
},
},
],
},
],
tableData: [
// {
// title: "第一个",
// isOpen: true,
// },
],
formList: [
{
type: "input",
label: "标题",
prop: "articleTitle",
},
{
type: "upload",
label: "PDF",
prop: "filePath",
accept: "application/pdf",
},
{
type: "switch",
label: "启用状态",
prop: "status",
},
],
}
},
watch: {},
mounted() {
this.getArticleList()
},
methods: {
// 获取新闻会议
getArticleList() {
this.listLoading = true
let params = {
size: this.pageSize,
current: this.pageIndex,
moduleType: "6",
}
articleList(params)
.then((res) => {
if (res.code == 1) {
this.tableData = [...res.data.records]
this.total = res.data.total
this.listLoading = false
}
})
.catch((e) => {
this.listLoading = false
})
},
},
}
</script>
<style lang="scss" scoped>
#medicalunion-management {
padding: 20px 0;
.top-btn {
.btn {
width: 80px;
height: 32px;
background: #4e68ff;
border-radius: 4px;
}
}
.bot-table {
margin-top: 20px;
}
.title {
text-align: center;
height: 26px;
font-size: 22px;
font-family: AlibabaPuHuiTiM;
color: rgba(0, 0, 0, 0.8);
line-height: 26px;
margin-bottom: 30px;
}
}
::v-deep .el-dialog__body {
padding: 0 40px;
border-top: none;
}
::v-deep .el-dialog__footer {
border-top: none;
text-align: center;
.f-btn {
width: 100px;
height: 32px;
background: #4e68ff;
}
}
</style>
......@@ -18,6 +18,7 @@ import NoticeAnnouncement from "@/views/systems/operation-management/components/
import AcademicTrend from "@/views/systems/operation-management/components/AcademicTrend.vue"
import HealthPopularization from "@/views/systems/operation-management/components/HealthPopularization.vue"
import scientificResearch from "@/views/systems/operation-management/components/scientificResearch.vue"
import TypicalCase from "./components/TypicalCase.vue"
export default {
components: {
NewsMeeting,
......@@ -25,6 +26,7 @@ export default {
AcademicTrend,
HealthPopularization,
scientificResearch,
TypicalCase,
},
data() {
return {
......@@ -50,6 +52,10 @@ export default {
name: "科学研究",
component: "scientificResearch",
},
{
name: "典型案例",
component: "TypicalCase",
},
],
}
},
......
......@@ -1143,6 +1143,11 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
"@types/json-schema@^7.0.8":
version "7.0.11"
resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
"@types/liftoff@^2.5.0":
version "2.5.0"
resolved "https://registry.yarnpkg.com/@types/liftoff/-/liftoff-2.5.0.tgz#aa5f030ae0952d1b86225f3e9f27f6d5b69714aa"
......@@ -1757,7 +1762,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4:
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
......@@ -2162,6 +2167,11 @@ babel-plugin-polyfill-regenerator@^0.1.2:
dependencies:
"@babel/helper-define-polyfill-provider" "^0.1.5"
babel-plugin-syntax-dynamic-import@^6.18.0:
version "6.18.0"
resolved "https://registry.npmmirror.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
integrity sha512-MioUE+LfjCEz65Wf7Z/Rm4XCP5k2c+TbMd2Z2JKc7U9uwjBhAfNPE48KC4GTGKhppMeYVepwDBNO/nGY6NYHBA==
babel-runtime@6.x, babel-runtime@^6.9.2:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
......@@ -6521,6 +6531,15 @@ loader-utils@^0.2.16:
json5 "^0.5.0"
object-assign "^4.0.1"
loader-utils@^1.0.0:
version "1.4.2"
resolved "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3"
integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
json5 "^1.0.1"
loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
......@@ -7977,10 +7996,10 @@ pbkdf2@^3.0.3:
safe-buffer "^5.0.1"
sha.js "^2.4.8"
pdfjs-dist@2.5.207:
version "2.5.207"
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-2.5.207.tgz#b5e8c19627be64269cd3fb6df3eaaf45ddffe7b6"
integrity sha512-xGDUhnCYPfHy+unMXCLCJtlpZaaZ17Ew3WIL0tnSgKFUZXHAPD49GO9xScyszSsQMoutNDgRb+rfBXIaX/lJbw==
pdfjs-dist@2.6.347:
version "2.6.347"
resolved "https://registry.npmmirror.com/pdfjs-dist/-/pdfjs-dist-2.6.347.tgz#f257ed66e83be900cd0fd28524a2187fb9e25cd5"
integrity sha512-QC+h7hG2su9v/nU1wEI3SnpPIrqJODL7GTDFvR74ANKGq1AFJW16PH8VWnhpiTi9YcLSFV9xLeWSgq+ckHLdVQ==
performance-now@^2.1.0:
version "2.1.0"
......@@ -8785,6 +8804,14 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
raw-loader@^4.0.2:
version "4.0.2"
resolved "https://registry.npmmirror.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6"
integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==
dependencies:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
raw-loader@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
......@@ -9232,6 +9259,14 @@ sax@~1.2.4:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
schema-utils@^0.4.0:
version "0.4.7"
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187"
integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==
dependencies:
ajv "^6.1.0"
ajv-keywords "^3.1.0"
schema-utils@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
......@@ -9250,6 +9285,15 @@ schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6
ajv "^6.12.4"
ajv-keywords "^3.5.2"
schema-utils@^3.0.0:
version "3.1.1"
resolved "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"
integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==
dependencies:
"@types/json-schema" "^7.0.8"
ajv "^6.12.5"
ajv-keywords "^3.5.2"
screenfull@^5.0.2:
version "5.1.0"
resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8"
......@@ -10840,6 +10884,23 @@ vue-observe-visibility@^0.4.4:
resolved "https://registry.yarnpkg.com/vue-observe-visibility/-/vue-observe-visibility-0.4.6.tgz#878cb8ebcf3078e40807af29774e97105ebd519e"
integrity sha512-xo0CEVdkjSjhJoDdLSvoZoQrw/H2BlzB5jrCBKGZNXN2zdZgMuZ9BKrxXDjNP2AxlcCoKc8OahI3F3r3JGLv2Q==
vue-pdf@^4.3.0:
version "4.3.0"
resolved "https://registry.npmmirror.com/vue-pdf/-/vue-pdf-4.3.0.tgz#d5f790ee7967e7b7aa9089b97b11ab168e19dbd0"
integrity sha512-zd3lJj6CbtrawgaaDDciTDjkJMUKiLWtbEmBg5CvFn9Noe9oAO/GNy/fc5c59qGuFCJ14ibIV1baw4S07e5bSQ==
dependencies:
babel-plugin-syntax-dynamic-import "^6.18.0"
loader-utils "^1.4.0"
pdfjs-dist "2.6.347"
raw-loader "^4.0.2"
vue-resize-sensor "^2.0.0"
worker-loader "^2.0.0"
vue-resize-sensor@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/vue-resize-sensor/-/vue-resize-sensor-2.0.0.tgz#3a587fd6802e1688709cf2c5aadae7a0075952bf"
integrity sha512-W+y2EAI/BxS4Vlcca9scQv8ifeBFck56DRtSwWJ2H4Cw1GLNUYxiZxUHHkuzuI5JPW/cYtL1bPO5xPyEXx4LmQ==
vue-resize@^0.4.5:
version "0.4.5"
resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-0.4.5.tgz#4777a23042e3c05620d9cbda01c0b3cc5e32dcea"
......@@ -11143,6 +11204,14 @@ worker-farm@^1.7.0:
dependencies:
errno "~0.1.7"
worker-loader@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/worker-loader/-/worker-loader-2.0.0.tgz#45fda3ef76aca815771a89107399ee4119b430ac"
integrity sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==
dependencies:
loader-utils "^1.0.0"
schema-utils "^0.4.0"
wrap-ansi@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment