新增及修改页面
parent
eb7b60e605
commit
06883d2e86
|
@ -4,14 +4,15 @@
|
|||
<el-tabs v-model="trialsTab" @tab-click="clickTab">
|
||||
<el-tab-pane v-for="item of trialsRouter.children.find(v => {return v.name == 'TrialsPanel'}).children" :key="`tab${item.path}`" :disabled="TotalNeedSignTrialDocCount !== 0" :label="$t(item.LanguageMark)" :name="item.path">
|
||||
<el-tabs v-if="!item.tabHiddn" v-model="trialsTabChild" @tab-click="clickTab">
|
||||
<el-tab-pane
|
||||
v-for="item1 of item.children"
|
||||
v-if="TrialConfig && isShow(item1.path)"
|
||||
:key="`tab1${item1.path}`"
|
||||
:disabled="TotalNeedSignTrialDocCount !== 0 || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))"
|
||||
:label="$t(item1.LanguageMark)"
|
||||
:name="item1.path"
|
||||
/>
|
||||
<template v-for="item1 of item.children">
|
||||
<el-tab-pane
|
||||
v-if="TrialConfig && isShow(item1.path)"
|
||||
:key="`tab1${item1.path}`"
|
||||
:disabled="TotalNeedSignTrialDocCount !== 0 || (TrialStatusStr === 'Initializing' && (item1.path === '/trials/trials-panel/setting/personnel-manage' || item1.path === '/trials/trials-panel/setting/qc-question' || item1.path === '/trials/trials-panel/setting/reading-unit' || item1.path === '/trials/trials-panel/setting/medical-audit' || item1.path === '/trials/trials-panel/setting/email-manage'))"
|
||||
:label="$t(item1.LanguageMark)"
|
||||
:name="item1.path"
|
||||
/>
|
||||
</template>
|
||||
</el-tabs>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -120,7 +120,10 @@
|
|||
<el-table-column
|
||||
label="Action"
|
||||
width="150"
|
||||
v-if="hasPermi(['system:hospital:edit', 'system:hospital:del'])"
|
||||
v-if="
|
||||
hasPermi(['system:hospital:edit']) ||
|
||||
hasPermi(['system:hospital:del'])
|
||||
"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<div style="display: flex;justify-content: center">
|
||||
<div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;padding-right:40px;">
|
||||
<div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;">
|
||||
<div class="trial-myinfo-head" style="font-size: 30px;line-height: 120px;">
|
||||
<!-- 首次登录修改密码 -->
|
||||
{{ $t('recompose:title:init') }}
|
||||
</div>
|
||||
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="120px">
|
||||
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="180px">
|
||||
<!-- 邮箱 -->
|
||||
<el-form-item :label="$t('recompose:form:email')" prop="Email">
|
||||
<el-input v-model="password.Email" disabled />
|
||||
|
@ -18,15 +18,6 @@
|
|||
<el-form-item :label="$t('recompose:form:userName')" prop="NewUserName">
|
||||
<el-input v-model="password.NewUserName" />
|
||||
</el-form-item>
|
||||
<!-- 校验码 -->
|
||||
<el-form-item :label="$t('trials:researchForm:form:checkCode')" prop="NewUserName" style="position: relative">
|
||||
<el-input v-model="password.NewUserName" :disabled="password.NewUserName"/>
|
||||
<span style="position: absolute;right: -30px">
|
||||
<el-tooltip :content="$t('passwordReset:form:passwordCentent')" placement="top">
|
||||
<i class="el-icon-question" />
|
||||
</el-tooltip>
|
||||
</span>
|
||||
</el-form-item>
|
||||
<!-- 新密码 -->
|
||||
<el-form-item class="my_new_pwd" :label="$t('recompose:form:newPassword')" prop="NewPassWord">
|
||||
<el-input v-model="password.NewPassWord" type="password" show-password auto-complete="new-password" />
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" label="Action" min-width="200">
|
||||
<template slot-scope="scope" min-width="130">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small" type="text" @click="handleEdit(scope.$index,scope.row)">Edit</el-button>
|
||||
<el-button size="small" type="text" @click="handleDelete(scope.$index,scope.row)">Delete</el-button>
|
||||
</template>
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
</el-form-item>
|
||||
<!-- 邮箱 -->
|
||||
<el-form-item :label="$t('passwordReset:form:email')" prop="EmailOrPhone">
|
||||
<el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
|
||||
<!-- <el-col :span="18">
|
||||
<!-- <el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" /> -->
|
||||
<el-col :span="18">
|
||||
<el-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
|
||||
</el-col>
|
||||
<el-col :span="6" style="text-align:right;">
|
||||
|
@ -29,8 +29,8 @@
|
|||
style="width:80%;"
|
||||
:disabled="sendDisabled"
|
||||
@click="handleSendCode"
|
||||
>{{ sendTitle }}</el-button> -->
|
||||
<!-- </el-col> -->
|
||||
>{{ sendTitle }}</el-button>
|
||||
</el-col>
|
||||
</el-form-item>
|
||||
<!-- 验证码 -->
|
||||
<el-form-item :label="$t('trials:researchForm:form:checkCode')" required>
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
<div class="login-body">
|
||||
<div class="login-l">
|
||||
<div class="login-logo">
|
||||
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="">
|
||||
<img v-else src="@/assets/zzlogo3.png" alt="">
|
||||
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="" />
|
||||
<img v-else src="@/assets/zzlogo3.png" alt="" />
|
||||
</div>
|
||||
<div class="login-image">
|
||||
<img src="@/assets/login-bg.png">
|
||||
<img src="@/assets/login-bg.png" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="login-r">
|
||||
<div class="title-container">
|
||||
<!-- IRC Management System -->
|
||||
<div class="title">{{ $t('login:title:system') }}</div>
|
||||
<div class="title">{{ $t("login:title:system") }}</div>
|
||||
</div>
|
||||
<el-form
|
||||
ref="loginForm"
|
||||
|
@ -26,11 +26,14 @@
|
|||
auto-complete="on"
|
||||
label-position="left"
|
||||
>
|
||||
|
||||
<el-form-item
|
||||
prop="username"
|
||||
:rules="[
|
||||
{ required: true, message: this.$t('login:formRule:userName'), trigger: 'blur' }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t('login:formRule:userName'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<span class="svg-container">
|
||||
|
@ -51,7 +54,11 @@
|
|||
<el-form-item
|
||||
prop="password"
|
||||
:rules="[
|
||||
{ required: true, message: this.$t('login:formRule:password'), trigger: 'blur' }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t('login:formRule:password'),
|
||||
trigger: 'blur',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<span class="svg-container">
|
||||
|
@ -70,23 +77,29 @@
|
|||
@keyup.enter.native="handleLogin"
|
||||
/>
|
||||
<span class="show-pwd" @click="showPwd">
|
||||
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
|
||||
<svg-icon
|
||||
:icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
|
||||
/>
|
||||
</span>
|
||||
</el-form-item>
|
||||
<!-- Login -->
|
||||
<el-button
|
||||
:loading="loading"
|
||||
type="primary"
|
||||
style="width:100%;margin-bottom:10px;"
|
||||
style="width: 100%; margin-bottom: 10px"
|
||||
size="medium"
|
||||
@click.native.prevent="handleLogin"
|
||||
>
|
||||
{{ $t('login:button:login') }}
|
||||
{{ $t("login:button:login") }}
|
||||
</el-button>
|
||||
<div style="text-align: right;">
|
||||
<div style="text-align: right">
|
||||
<!-- Forget password? -->
|
||||
<el-button type="text" size="medium" @click.native.prevent="handleResetPwd">
|
||||
{{ $t('login:button:forgetPassword') }}
|
||||
<el-button
|
||||
type="text"
|
||||
size="medium"
|
||||
@click.native.prevent="handleResetPwd"
|
||||
>
|
||||
{{ $t("login:button:forgetPassword") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
|
@ -96,41 +109,50 @@
|
|||
<span>Copyright © 2023 上海展影医疗科技有限公司 版权所有</span>
|
||||
<span> | </span>
|
||||
<a target="_blank" href="https://beian.miit.gov.cn/">
|
||||
<span>
|
||||
沪ICP备2021037850-2
|
||||
</span>
|
||||
<span> 沪ICP备2021037850-2 </span>
|
||||
</a>
|
||||
<span> | </span>
|
||||
<a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=31011002005859">
|
||||
<img src="@/assets/filing.png">
|
||||
<a
|
||||
target="_blank"
|
||||
href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=31011002005859"
|
||||
>
|
||||
<img src="@/assets/filing.png" />
|
||||
<span>沪公网安备 31011002005859号</span>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
<Vcode :show="isShow" slider-text="拖到滑块完成验证" :imgs="[Img1]" @success="onSuccess" />
|
||||
<Vcode
|
||||
:show="isShow"
|
||||
slider-text="拖到滑块完成验证"
|
||||
:imgs="[Img1]"
|
||||
@success="onSuccess"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters, mapMutations } from 'vuex'
|
||||
import TopLang from './topLang'
|
||||
import { mapGetters, mapMutations } from "vuex";
|
||||
import TopLang from "./topLang";
|
||||
// import NoticeMarquee from '../trials/trials-layout/components/noticeMarquee'
|
||||
import Vcode from 'vue-puzzle-vcode'
|
||||
import Img1 from '@/assets/pic-1.png'
|
||||
import Vcode from "vue-puzzle-vcode";
|
||||
import Img1 from "@/assets/pic-1.png";
|
||||
export default {
|
||||
name: 'Login',
|
||||
name: "Login",
|
||||
components: { TopLang, Vcode },
|
||||
data() {
|
||||
return {
|
||||
VUE_APP_OSS_CONFIG_REGION: process.env.VUE_APP_OSS_CONFIG_REGION,
|
||||
loginForm: {
|
||||
username: '',
|
||||
password: ''
|
||||
username: "",
|
||||
password: "",
|
||||
},
|
||||
loginRules: {
|
||||
username: [
|
||||
{ required: true, message: this.$t('login:formRule:userName'), trigger: 'blur' },
|
||||
{ max: 20, message: `${this.$t('common:ruleMessage:maxLength')} 20` }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("login:formRule:userName"),
|
||||
trigger: "blur",
|
||||
},
|
||||
{ max: 20, message: `${this.$t("common:ruleMessage:maxLength")} 20` },
|
||||
],
|
||||
password: [
|
||||
// {
|
||||
|
@ -138,119 +160,123 @@ export default {
|
|||
// trigger: "blur",
|
||||
// validator: this.$validatePassword
|
||||
// },
|
||||
{ required: true, message: this.$t('login:formRule:password'), trigger: 'blur' },
|
||||
{ max: 20, message: `${this.$t('common:ruleMessage:maxLength')} 20` }
|
||||
]
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("login:formRule:password"),
|
||||
trigger: "blur",
|
||||
},
|
||||
{ max: 20, message: `${this.$t("common:ruleMessage:maxLength")} 20` },
|
||||
],
|
||||
},
|
||||
loading: false,
|
||||
passwordType: 'password',
|
||||
passwordType: "password",
|
||||
loginType: null,
|
||||
location: null,
|
||||
isShow: false,
|
||||
Img1
|
||||
}
|
||||
Img1,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'asyncRoutes',
|
||||
'routes',
|
||||
'language'
|
||||
])
|
||||
...mapGetters(["asyncRoutes", "routes", "language"]),
|
||||
},
|
||||
mounted() {
|
||||
this.loginType = this.$route.query.loginType
|
||||
this.location = this.$route.query.location
|
||||
zzSessionStorage.setItem('loginType', this.loginType)
|
||||
localStorage.setItem('location', this.location)
|
||||
if (process.env.VUE_APP_OSS_CONFIG_REGION === 'oss-us-west-1') {
|
||||
this.$i18n.locale = 'en'
|
||||
this.setLanguage('en')
|
||||
this.$updateDictionary()
|
||||
this.loginType = this.$route.query.loginType;
|
||||
this.location = this.$route.query.location;
|
||||
zzSessionStorage.setItem("loginType", this.loginType);
|
||||
localStorage.setItem("location", this.location);
|
||||
if (process.env.VUE_APP_OSS_CONFIG_REGION === "oss-us-west-1") {
|
||||
this.$i18n.locale = "en";
|
||||
this.setLanguage("en");
|
||||
this.$updateDictionary();
|
||||
} else {
|
||||
if (this.location === 'USA') {
|
||||
this.$i18n.locale = 'en'
|
||||
this.setLanguage('en')
|
||||
this.$updateDictionary()
|
||||
if (this.location === "USA") {
|
||||
this.$i18n.locale = "en";
|
||||
this.setLanguage("en");
|
||||
this.$updateDictionary();
|
||||
} else {
|
||||
this.$i18n.locale = 'zh'
|
||||
this.setLanguage('zh')
|
||||
this.$updateDictionary()
|
||||
this.$i18n.locale = "zh";
|
||||
this.setLanguage("zh");
|
||||
this.$updateDictionary();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations({ setLanguage: 'lang/setLanguage' }),
|
||||
...mapMutations({ setLanguage: "lang/setLanguage" }),
|
||||
showPwd() {
|
||||
if (this.passwordType === 'password') {
|
||||
this.passwordType = ''
|
||||
if (this.passwordType === "password") {
|
||||
this.passwordType = "";
|
||||
} else {
|
||||
this.passwordType = 'password'
|
||||
this.passwordType = "password";
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
this.$refs.password.focus()
|
||||
})
|
||||
this.$refs.password.focus();
|
||||
});
|
||||
},
|
||||
handleLogin() {
|
||||
this.loginType = this.$route.query.loginType
|
||||
this.$refs.loginForm.validate(valid => {
|
||||
this.loginType = this.$route.query.loginType;
|
||||
this.$refs.loginForm.validate((valid) => {
|
||||
if (valid) {
|
||||
// this.isShow = true
|
||||
this.loginIn()
|
||||
this.loginIn();
|
||||
} else {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
loginIn() {
|
||||
this.loading = true
|
||||
this.$store.dispatch('user/login', this.loginForm).then((res) => {
|
||||
if (!res) {
|
||||
// 当前用户为首次登录,请先修改密码之后再次登录
|
||||
this.$message.success(this.$t('login:message:login1'))
|
||||
setTimeout(() => {
|
||||
this.$router.push({ path: `/recompose?userName=${this.loginForm.username}` })
|
||||
}, 500)
|
||||
return
|
||||
}
|
||||
this.$store.dispatch('permission/generateRoutes').then(res => {
|
||||
this.loading = false
|
||||
if (res && res.length > 0) {
|
||||
this.$store.dispatch('global/getNoticeList')
|
||||
this.$router.addRoutes(res)
|
||||
if (this.loginType === 'DevOps') {
|
||||
this.$router.replace({ path: res[0].path })
|
||||
return
|
||||
}
|
||||
if (this.hasPermi(['role:radmin'])) {
|
||||
this.$router.replace({ path: res[0].path })
|
||||
return
|
||||
}
|
||||
if (this.hasPermi(['role:pm', 'role:crc', 'role:crc'])) {
|
||||
this.$router.replace({ path: '/trials/trials-inspection' })
|
||||
}else if(this.hasPermi(['role:oa'])){
|
||||
this.$router.replace({ path: '/system' })
|
||||
} else {
|
||||
this.$router.replace({ path: '/trials' })
|
||||
}
|
||||
} else {
|
||||
// 此账户暂未配置菜单权限,请联系管理员处理后再登录。
|
||||
this.$message.warning(this.$t('login:message:login2'))
|
||||
this.loading = true;
|
||||
this.$store
|
||||
.dispatch("user/login", this.loginForm)
|
||||
.then((res) => {
|
||||
if (!res) {
|
||||
// 当前用户为首次登录,请先修改密码之后再次登录
|
||||
this.$message.success(this.$t("login:message:login1"));
|
||||
setTimeout(() => {
|
||||
this.$router.push({
|
||||
path: `/recompose?userName=${this.loginForm.username}`,
|
||||
});
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
this.$store.dispatch("permission/generateRoutes").then((res) => {
|
||||
this.loading = false;
|
||||
if (res && res.length > 0) {
|
||||
this.$store.dispatch("global/getNoticeList");
|
||||
this.$router.addRoutes(res);
|
||||
if (this.loginType === "DevOps") {
|
||||
this.$router.replace({ path: res[0].path });
|
||||
return;
|
||||
}
|
||||
if (this.hasPermi(["role:radmin"])) {
|
||||
this.$router.replace({ path: res[0].path });
|
||||
return;
|
||||
}
|
||||
if (this.hasPermi(["role:pm"])) {
|
||||
this.$router.replace({ path: "/trials/trials-inspection" });
|
||||
} else if (this.hasPermi(["role:oa"])) {
|
||||
this.$router.replace({ path: "/system" });
|
||||
} else {
|
||||
this.$router.replace({ path: "/trials" });
|
||||
}
|
||||
} else {
|
||||
// 此账户暂未配置菜单权限,请联系管理员处理后再登录。
|
||||
this.$message.warning(this.$t("login:message:login2"));
|
||||
}
|
||||
});
|
||||
})
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false
|
||||
})
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
onSuccess() {
|
||||
this.isShow = false
|
||||
this.loginIn()
|
||||
this.isShow = false;
|
||||
this.loginIn();
|
||||
},
|
||||
handleResetPwd() {
|
||||
this.$router.push({ name: 'Resetpassword' })
|
||||
}
|
||||
}
|
||||
}
|
||||
this.$router.push({ name: "Resetpassword" });
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
@ -300,9 +326,9 @@ $cursor: #fff;
|
|||
</style>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
$bg:#2d3a4b;
|
||||
$dark_gray:#889aa4;
|
||||
$light_gray:#606266;
|
||||
$bg: #2d3a4b;
|
||||
$dark_gray: #889aa4;
|
||||
$light_gray: #606266;
|
||||
.login-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
|
@ -321,7 +347,7 @@ $light_gray:#606266;
|
|||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%,-50%);
|
||||
transform: translate(-50%, -50%);
|
||||
// margin-top: -230px;
|
||||
// margin-left: -400px;
|
||||
width: 1200px;
|
||||
|
@ -335,25 +361,24 @@ $light_gray:#606266;
|
|||
float: left;
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
.login-logo{
|
||||
.login-logo {
|
||||
position: absolute;
|
||||
top:35px;
|
||||
top: 35px;
|
||||
left: 50px;
|
||||
img{
|
||||
img {
|
||||
height: 40px;
|
||||
}
|
||||
}
|
||||
.login-image{
|
||||
.login-image {
|
||||
position: absolute;
|
||||
top:10px;
|
||||
top: 10px;
|
||||
left: 0px;
|
||||
// transform: translateY(-50%);
|
||||
height: 100%;
|
||||
img {
|
||||
height: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
.login-r {
|
||||
position: relative;
|
||||
|
@ -366,12 +391,11 @@ $light_gray:#606266;
|
|||
top: 50%;
|
||||
// transform: translateY(-50%);
|
||||
left: 50%;
|
||||
transform:translate(-50%,-50%);
|
||||
transform: translate(-50%, -50%);
|
||||
width: 80%;
|
||||
padding: 10px;
|
||||
margin: 0 auto;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
.title-container {
|
||||
// margin-bottom: 50px;
|
||||
|
@ -415,7 +439,7 @@ $light_gray:#606266;
|
|||
}
|
||||
}
|
||||
}
|
||||
.login-footer{
|
||||
.login-footer {
|
||||
position: absolute;
|
||||
bottom: 50px;
|
||||
left: 0px;
|
||||
|
@ -428,21 +452,20 @@ $light_gray:#606266;
|
|||
align-items: center;
|
||||
// color: rgb(180, 190, 199);
|
||||
color: #909399;
|
||||
a{
|
||||
display:inline-block;
|
||||
text-decoration:none;
|
||||
height:20px;
|
||||
line-height:20px;
|
||||
a {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
span{
|
||||
span {
|
||||
margin: 0 2px;
|
||||
|
||||
}
|
||||
img{
|
||||
height:20px;
|
||||
line-height:20px;
|
||||
img {
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
// p{
|
||||
// display: inline-block;
|
||||
|
@ -453,5 +476,4 @@ $light_gray:#606266;
|
|||
// }
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="title"
|
||||
width="500px"
|
||||
custom-class="base-dialog-wrapper"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="editVisitForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
size="small"
|
||||
label-width="100px"
|
||||
>
|
||||
<div class="base-dialog-body">
|
||||
<!--AE Title-->
|
||||
<el-form-item label="AE Title" prop="calledAE">
|
||||
<el-input v-model="form.calledAE" />
|
||||
</el-form-item>
|
||||
<!--IP-->
|
||||
<el-form-item label="IP" prop="ip">
|
||||
<el-input v-model="form.ip" />
|
||||
</el-form-item>
|
||||
<!--Port-->
|
||||
<el-form-item label="Port" prop="port">
|
||||
<el-input v-model="form.port" type="number" />
|
||||
</el-form-item>
|
||||
<!--Modality-->
|
||||
<el-form-item label="Modality" prop="modality">
|
||||
<el-input v-model="form.modality" />
|
||||
</el-form-item>
|
||||
<!--Description-->
|
||||
<el-form-item label="Description" prop="description">
|
||||
<el-input v-model="form.description" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="base-dialog-footer"
|
||||
style="text-align: right; margin-top: 10px"
|
||||
>
|
||||
<el-form-item style="text-align: right">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:disabled="btnLoading"
|
||||
@click="handleCancel"
|
||||
>
|
||||
{{ $t("common:button:cancel") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ $t("common:button:save") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "editDicom",
|
||||
props: {
|
||||
visible: {
|
||||
require: true,
|
||||
default: false,
|
||||
},
|
||||
title: {
|
||||
require: true,
|
||||
default: "",
|
||||
},
|
||||
dicom: {
|
||||
type: Object,
|
||||
default: {},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {},
|
||||
rules: {
|
||||
calledAE: [
|
||||
{ required: true, message: "请输入AE Title", trigger: "blur" },
|
||||
],
|
||||
ip: [{ required: true, message: "请输入IP", trigger: "blur" }],
|
||||
port: [{ required: true, message: "请输入pORT", trigger: "blur" }],
|
||||
},
|
||||
btnLoading: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
handleCancel() {},
|
||||
handleSave() {},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -1,11 +1,165 @@
|
|||
<template>
|
||||
<div class="dicomAE"></div>
|
||||
<div class="dicomAE">
|
||||
<div ref="leftContainer" class="left">
|
||||
<el-form :inline="true">
|
||||
<!--AE Title-->
|
||||
<el-form-item label="AE Title" prop="CalledAE">
|
||||
<el-input v-model="searchData.CalledAE" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!--IP-->
|
||||
<el-form-item label="IP" prop="IP">
|
||||
<el-input v-model="searchData.IP" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!--Port-->
|
||||
<el-form-item label="Port" prop="Port">
|
||||
<el-input v-model="searchData.Port" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" size="mini" @click="getList"
|
||||
>搜索</el-button
|
||||
>
|
||||
<el-button type="primary" size="mini" @click="reset">重置</el-button>
|
||||
<el-button type="primary" size="mini" @click="openDialog('add')"
|
||||
>新增</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
v-adaptive="{ bottomOffset: 45 }"
|
||||
height="100"
|
||||
:data="list"
|
||||
class="table"
|
||||
>
|
||||
<!--AE Title-->
|
||||
<el-table-column
|
||||
label="AE Title"
|
||||
prop="calledAE"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--IP-->
|
||||
<el-table-column
|
||||
label="IP"
|
||||
prop="ip"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--Port-->
|
||||
<el-table-column
|
||||
label="Port"
|
||||
prop="port"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--Modality-->
|
||||
<el-table-column
|
||||
label="Modality"
|
||||
prop="modality"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--Description-->
|
||||
<el-table-column
|
||||
label="Description"
|
||||
prop="description"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
fixed="right"
|
||||
prop="UserTypeShortName"
|
||||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit-outline"
|
||||
@click="openDialog('edit', scope.row)"
|
||||
>编辑</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="pagination" style="text-align: right; margin-top: 5px">
|
||||
<pagination
|
||||
:total="total"
|
||||
:page.sync="searchData.PageIndex"
|
||||
:limit.sync="searchData.PageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Pagination from "@/components/Pagination";
|
||||
export default {
|
||||
name:"dicomAE"
|
||||
}
|
||||
name: "dicomAE",
|
||||
components: { Pagination },
|
||||
data() {
|
||||
return {
|
||||
// 查询
|
||||
searchData: {
|
||||
CalledAE: null,
|
||||
IP: null,
|
||||
Port: null,
|
||||
PageIndex: 1,
|
||||
PageSize: 10,
|
||||
},
|
||||
total: 0,
|
||||
// 列表
|
||||
loading: false,
|
||||
list: [],
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
// 获取列表
|
||||
getList() {},
|
||||
// 重置
|
||||
reset() {},
|
||||
// 打开弹框
|
||||
openDialog(key, item) {},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.dicomAE {
|
||||
height: 100%;
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
.left {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 0;
|
||||
flex-grow: 4;
|
||||
// border-right: 1px solid #ccc;
|
||||
.filter-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 5px;
|
||||
}
|
||||
.data-table {
|
||||
flex: 1;
|
||||
padding: 5px 0px;
|
||||
}
|
||||
.pagination-container {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
.right {
|
||||
width: 0;
|
||||
flex-grow: 6;
|
||||
overflow-y: auto;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
.selected-row {
|
||||
background-color: cadetblue;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -249,11 +249,9 @@
|
|||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
v-if="
|
||||
hasPermi([
|
||||
'system:notice:edit',
|
||||
'system:notice:publish',
|
||||
'system:notice:back',
|
||||
])
|
||||
hasPermi(['system:notice:edit']) ||
|
||||
hasPermi(['system:notice:publish']) ||
|
||||
hasPermi(['system:notice:back'])
|
||||
"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<div class="trials-navbar" style="position: relative">
|
||||
<div class="leftMenu">
|
||||
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="">
|
||||
<img v-else src="@/assets/zzlogo3.png" alt="">
|
||||
<img v-if="language === 'zh'" src="@/assets/zzlogo2.png" alt="" />
|
||||
<img v-else src="@/assets/zzlogo3.png" alt="" />
|
||||
<span>
|
||||
<!-- 中心影像系统(EICS) -->
|
||||
{{ $t('trials:trials:title:eics') }}
|
||||
{{ $t("trials:trials:title:eics") }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="center-menu">
|
||||
|
@ -21,25 +21,41 @@
|
|||
>
|
||||
<!-- <el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir'])" index="1">
|
||||
<i class="el-icon-odometer" /> -->
|
||||
<!-- 工作台 -->
|
||||
<!-- <span slot="title">{{ $t('trials:menuTitle:workbench') }}</span>
|
||||
<!-- 工作台 -->
|
||||
<!-- <span slot="title">{{ $t('trials:menuTitle:workbench') }}</span>
|
||||
</el-menu-item> -->
|
||||
<el-menu-item v-if="hasPermi(['role:pm', 'role:crc'])" index="1">
|
||||
<el-menu-item v-if="hasPermi(['role:pm'])" index="1">
|
||||
<i class="el-icon-odometer" />
|
||||
<!-- 检查 -->
|
||||
<span slot="title">{{ $t('trials:menuTitle:inspection') }}</span>
|
||||
<span slot="title">{{ $t("trials:menuTitle:inspection") }}</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item v-if="!hasPermi(['role:zys'])" index="2" :disabled="TotalNeedSignSystemDocCount !== 0">
|
||||
<el-menu-item
|
||||
v-if="!hasPermi(['role:zys'])"
|
||||
index="2"
|
||||
:disabled="TotalNeedSignSystemDocCount !== 0"
|
||||
>
|
||||
<i class="el-icon-box" />
|
||||
<!-- 我的项目 -->
|
||||
<span slot="title">
|
||||
{{ $t('trials:tab:trials') }}
|
||||
{{ $t("trials:tab:trials") }}
|
||||
</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir', 'role:zys'])" index="3">
|
||||
<el-menu-item
|
||||
v-if="
|
||||
!hasPermi([
|
||||
'role:air',
|
||||
'role:rpm',
|
||||
'role:radmin',
|
||||
'role:rcrc',
|
||||
'role:rir',
|
||||
'role:zys',
|
||||
])
|
||||
"
|
||||
index="3"
|
||||
>
|
||||
<i class="el-icon-chat-dot-square" />
|
||||
<!-- 通知消息 -->
|
||||
<span slot="title">{{ $t('trials:tab:notice') }}</span>
|
||||
<span slot="title">{{ $t("trials:tab:notice") }}</span>
|
||||
</el-menu-item>
|
||||
|
||||
<el-submenu index="4" class="my_info">
|
||||
|
@ -49,109 +65,123 @@
|
|||
<span v="userTypeShortName">({{ userTypeShortName }})</span>
|
||||
</span>
|
||||
<!-- 账户信息 -->
|
||||
<el-menu-item v-if="!hasPermi(['role:air'])" index="4-2">{{ $t('trials:trials-myinfo:title:accountInfo') }}</el-menu-item>
|
||||
<el-menu-item v-if="!hasPermi(['role:air'])" index="4-2">{{
|
||||
$t("trials:trials-myinfo:title:accountInfo")
|
||||
}}</el-menu-item>
|
||||
<!-- 退出 -->
|
||||
<el-menu-item index="4-3">{{ $t('trials:trials-myinfo:button:loginout') }}</el-menu-item>
|
||||
<el-menu-item index="4-3">{{
|
||||
$t("trials:trials-myinfo:button:loginout")
|
||||
}}</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-menu>
|
||||
<!-- <TopLang />-->
|
||||
<!-- <TopLang />-->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { loginOut } from '@/api/user'
|
||||
import { mapGetters, mapMutations } from 'vuex'
|
||||
import TopLang from './topLang'
|
||||
import NoticeMarquee from './noticeMarquee'
|
||||
import { loginOut } from "@/api/user";
|
||||
import { mapGetters, mapMutations } from "vuex";
|
||||
import TopLang from "./topLang";
|
||||
import NoticeMarquee from "./noticeMarquee";
|
||||
export default {
|
||||
components: { TopLang, NoticeMarquee },
|
||||
data() {
|
||||
return {
|
||||
activeIndex: '2',
|
||||
activeIndex: "2",
|
||||
isReviewer: false,
|
||||
userTypeShortName: zzSessionStorage.getItem('userTypeShortName'),
|
||||
notice: ''
|
||||
}
|
||||
userTypeShortName: zzSessionStorage.getItem("userTypeShortName"),
|
||||
notice: "",
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['sidebar', 'name', 'userName', 'device', 'TotalNeedSignSystemDocCount', 'language'])
|
||||
...mapGetters([
|
||||
"sidebar",
|
||||
"name",
|
||||
"userName",
|
||||
"device",
|
||||
"TotalNeedSignSystemDocCount",
|
||||
"language",
|
||||
]),
|
||||
},
|
||||
watch: {
|
||||
$route(v) {
|
||||
this.changeRoute(v)
|
||||
}
|
||||
this.changeRoute(v);
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer'))
|
||||
this.changeRoute(this.$route)
|
||||
this.isReviewer = JSON.parse(zzSessionStorage.getItem("IsReviewer"));
|
||||
this.changeRoute(this.$route);
|
||||
},
|
||||
methods: {
|
||||
...mapMutations({ setLanguage: 'lang/setLanguage' }),
|
||||
...mapMutations({ setLanguage: "lang/setLanguage" }),
|
||||
changeRoute(v) {
|
||||
if (v.path === '/trials/trials-inspection') {
|
||||
this.activeIndex = '1'
|
||||
if (v.path === "/trials/trials-inspection") {
|
||||
this.activeIndex = "1";
|
||||
}
|
||||
if (v.path === '/trials/trials-list' || ~v.path.indexOf('/trials/trials-panel')) {
|
||||
this.activeIndex = '2'
|
||||
if (
|
||||
v.path === "/trials/trials-list" ||
|
||||
~v.path.indexOf("/trials/trials-panel")
|
||||
) {
|
||||
this.activeIndex = "2";
|
||||
}
|
||||
if (v.path === '/trials/trials-notice') {
|
||||
this.activeIndex = '3'
|
||||
if (v.path === "/trials/trials-notice") {
|
||||
this.activeIndex = "3";
|
||||
}
|
||||
if (v.path === '/trials/trials-myinfo') {
|
||||
this.activeIndex = '4-2'
|
||||
if (v.path === "/trials/trials-myinfo") {
|
||||
this.activeIndex = "4-2";
|
||||
}
|
||||
},
|
||||
handleSelect(key, keyPath) {
|
||||
switch (key) {
|
||||
case '4-2':
|
||||
this.go('/trials/trials-myinfo')
|
||||
break
|
||||
case '4-3':
|
||||
this.logout()
|
||||
break
|
||||
case '1':
|
||||
this.go('/trials/trials-inspection')
|
||||
break
|
||||
case '2':
|
||||
if (~this.$route.path.indexOf('/trials/trials-panel')) {
|
||||
return
|
||||
case "4-2":
|
||||
this.go("/trials/trials-myinfo");
|
||||
break;
|
||||
case "4-3":
|
||||
this.logout();
|
||||
break;
|
||||
case "1":
|
||||
this.go("/trials/trials-inspection");
|
||||
break;
|
||||
case "2":
|
||||
if (~this.$route.path.indexOf("/trials/trials-panel")) {
|
||||
return;
|
||||
}
|
||||
var lastWorkbench = zzSessionStorage.getItem('lastWorkbench')
|
||||
var lastWorkbench = zzSessionStorage.getItem("lastWorkbench");
|
||||
if (lastWorkbench) {
|
||||
this.go(lastWorkbench)
|
||||
this.go(lastWorkbench);
|
||||
} else {
|
||||
this.go('/trials/trials-list')
|
||||
this.go("/trials/trials-list");
|
||||
}
|
||||
break
|
||||
case '3':
|
||||
this.go('/trials/trials-notice')
|
||||
break
|
||||
break;
|
||||
case "3":
|
||||
this.go("/trials/trials-notice");
|
||||
break;
|
||||
}
|
||||
},
|
||||
toggleSideBar() {
|
||||
this.$store.dispatch('app/toggleSideBar')
|
||||
this.$store.dispatch("app/toggleSideBar");
|
||||
},
|
||||
async logout() {
|
||||
await loginOut()
|
||||
await this.$store.dispatch('user/logout')
|
||||
this.$router.push(`/login`)
|
||||
this.$i18n.locale = 'zh'
|
||||
this.setLanguage('zh')
|
||||
this.$updateDictionary()
|
||||
await loginOut();
|
||||
await this.$store.dispatch("user/logout");
|
||||
this.$router.push(`/login`);
|
||||
this.$i18n.locale = "zh";
|
||||
this.setLanguage("zh");
|
||||
this.$updateDictionary();
|
||||
},
|
||||
go(value) {
|
||||
this.$router.push({ path: value })
|
||||
this.$router.push({ path: value });
|
||||
},
|
||||
account() {
|
||||
this.$router.push({ name: 'Account' })
|
||||
}
|
||||
}
|
||||
}
|
||||
this.$router.push({ name: "Account" });
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.trials-navbar{
|
||||
.trials-navbar {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
@ -159,24 +189,25 @@ export default {
|
|||
overflow: hidden;
|
||||
background: #fff;
|
||||
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
|
||||
.el-breadcrumb__item{
|
||||
.el-breadcrumb__item {
|
||||
font-size: 16px;
|
||||
}
|
||||
.leftMenu{
|
||||
.leftMenu {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 20px;
|
||||
img{
|
||||
img {
|
||||
height: 28px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
span{
|
||||
span {
|
||||
font-size: 20px;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
}
|
||||
.right-menu, .center-menu {
|
||||
.right-menu,
|
||||
.center-menu {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
|
@ -226,7 +257,7 @@ export default {
|
|||
}
|
||||
</style>
|
||||
<style>
|
||||
.el-menu--horizontal>.my_info.el-submenu .el-submenu__icon-arrow {
|
||||
margin-top: 0;
|
||||
}
|
||||
.el-menu--horizontal > .my_info.el-submenu .el-submenu__icon-arrow {
|
||||
margin-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -0,0 +1,260 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:close-on-click-modal="false"
|
||||
:fullscreen="true"
|
||||
custom-class="upload-dialog"
|
||||
:before-close="beforeCloseStudyDig"
|
||||
>
|
||||
<span slot="title"
|
||||
>{{ $t("trials:hirVisit:button:editStudy") }}({{
|
||||
$t("trials:globalReview:title:subject")
|
||||
}}T0001132,{{ $t("trials:studyList:table:visit") }}:ZhangSan)
|
||||
</span>
|
||||
<!--当前检查--->
|
||||
<div class="topTable">
|
||||
<div class="title">
|
||||
<span>{{ $t("trials:hirVisit:titleMessage:currentStudy") }}</span>
|
||||
<div class="btnBox">
|
||||
<el-button type="primary" @click="submit">
|
||||
{{ $t("trials:seletctedReviews:button:confirm") }}
|
||||
</el-button>
|
||||
<el-button @click="preview">
|
||||
{{ $t("trials:readingPeriod:verify:title:preview") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<!--当前检查列表 @selection-change="handleSelectChange"--->
|
||||
<el-table
|
||||
ref="addTrialsList"
|
||||
v-loading="topLoading"
|
||||
:data="topList"
|
||||
stripe
|
||||
height="30vh"
|
||||
>
|
||||
<!-- <el-table-column type="selection" align="center" width="45" /> -->
|
||||
<!--检查编号-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:studyId')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--检查类型-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:modality')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--序列数量-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:seriesCount')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--检查日期-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:studyDate')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--所属访视-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:hirVisit:table:ownershipVisit')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--操作-->
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
width="300"
|
||||
class-name="actionBox"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 查看 -->
|
||||
<el-button type="text" @click.stop="detail(scope.row, 'top')">{{
|
||||
$t("trials:enrolledReviews:button:view")
|
||||
}}</el-button>
|
||||
<!-- 移除 -->
|
||||
<el-button type="text" @click.stop="remove(scope.row)">{{
|
||||
$t("common:button:remove")
|
||||
}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<!--可选检查-->
|
||||
<div class="bottomTable">
|
||||
<p>{{ $t("trials:hirVisit:titleMessage:optionalStudy") }}</p>
|
||||
<div class="form">
|
||||
<el-form :inline="true" class="base-search-form">
|
||||
<!-- 检查编号 -->
|
||||
<el-form-item :label="$t('trials:uploadMonitor:table:studyId')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
|
||||
</el-form-item>
|
||||
<!-- 检查日期 -->
|
||||
<el-form-item :label="$t('trials:uploadedDicoms:table:studyDate')">
|
||||
<el-date-picker
|
||||
v-model="searchData.date"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-search"
|
||||
@click="handleSearch"
|
||||
>
|
||||
{{ $t("common:button:search") }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-button icon="el-icon-refresh" @click="addTrials">
|
||||
{{ $t("trials:readingReport:button:refresh") }}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
ref="addTrialsList"
|
||||
v-loading="bottomLoading"
|
||||
v-adaptive="{ bottomOffset: 60 }"
|
||||
:data="bottomList"
|
||||
stripe
|
||||
height="100"
|
||||
@selection-change="handleSelectChange"
|
||||
>
|
||||
<el-table-column type="selection" align="center" width="45" />
|
||||
<!--检查编号-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:studyId')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--检查类型-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:modality')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--序列数量-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:seriesCount')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--检查日期-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:audit:table:studyDate')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--所属访视-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:hirVisit:table:ownershipVisit')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--操作-->
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
width="300"
|
||||
class-name="actionBox"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 查看 -->
|
||||
<el-button type="text" @click.stop="detail(scope.row, 'bottom')">{{
|
||||
$t("trials:enrolledReviews:button:view")
|
||||
}}</el-button>
|
||||
<!-- 添加 -->
|
||||
<el-button type="text" @click.stop="add(scope.row)">{{
|
||||
$t("common:button:add")
|
||||
}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "editStudyList",
|
||||
props: {
|
||||
visible: {
|
||||
require: true,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 可选检查查询
|
||||
searchData: {},
|
||||
// 可选检查列表
|
||||
bottomList: [{ IsUrgent: 2 }],
|
||||
bottomLoading: false,
|
||||
// 当前检查列表
|
||||
topList: [{ IsUrgent: 1 }],
|
||||
topLoading: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
// 关闭弹框
|
||||
beforeCloseStudyDig() {
|
||||
this.$emit("update:visible", false);
|
||||
},
|
||||
// 预览
|
||||
preview() {},
|
||||
// 确认
|
||||
submit() {},
|
||||
// 查看
|
||||
detail(item, key) {},
|
||||
// 当前检查移除
|
||||
remove(item) {},
|
||||
// 可选检查查询
|
||||
handleSearch() {},
|
||||
// 可选检查重置
|
||||
handleReset() {},
|
||||
// 可选检查表格选择
|
||||
handleSelectChange() {},
|
||||
// 可选检查添加
|
||||
add(item) {},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.topTable {
|
||||
.title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
.bottomTable {
|
||||
.form {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,281 @@
|
|||
<template>
|
||||
<BaseContainer>
|
||||
<!-- 搜索框 -->
|
||||
<template slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- 受试者编号 -->
|
||||
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- 患者姓名 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- 患者性别 -->
|
||||
<el-form-item :label="$t('trials:subject:table:gender')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d.sex"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 访视名称 -->
|
||||
<el-form-item :label="$t('trials:globalReview:table:visitName')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of visitOptions"
|
||||
:key="item.SiteId"
|
||||
:label="item.TrialSiteCode"
|
||||
:value="item.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 状态 -->
|
||||
<el-form-item :label="$t('trials:trials-list:table:status')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of siteOptions"
|
||||
:key="item.SiteId"
|
||||
:label="item.TrialSiteCode"
|
||||
:value="item.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t("common:button:search") }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<!-- 访视列表 -->
|
||||
<template slot="main-container">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
v-adaptive="{ bottomOffset: 60 }"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortByColumn"
|
||||
>
|
||||
<el-table-column width="40">
|
||||
<template>
|
||||
<i
|
||||
class="el-icon-warning-outline"
|
||||
:title="$t('trials:hirVisit:tipMessage:tipOne')"
|
||||
style="color: red"
|
||||
></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 受试者编号 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadMonitor:table:subjectId')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 患者编号 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadMonitor:table:subjectId')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 患者姓名 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 性别 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:subject:table:gender')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 访视名称 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadMonitor:table:visitName')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 数据收集 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:crcUpload:table:dataCollected')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 最早拍片日期 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:trials-panel:table:EarliestScanDate')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 最晚拍片日期 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:linkedRP:table:latestScanDate')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 状态 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:trials-list:table:status')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 提交时间 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:crcUpload:table:submitTime')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!--操作-->
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
min-width="100"
|
||||
fixed="right"
|
||||
v-if="
|
||||
hasPermi(['trials:trials-panel:hirVisit:edit']) ||
|
||||
hasPermi(['trials:trials-panel:hirVisit:submit']) ||
|
||||
hasPermi(['trials:trials-panel:hirVisit:remove']) ||
|
||||
hasPermi(['trials:trials-panel:hirVisit:result']) ||
|
||||
hasPermi(['trials:trials-panel:hirVisit:downlaod'])
|
||||
"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!--修改检查-->
|
||||
<el-button
|
||||
type="text"
|
||||
v-hasPermi="['trials:trials-panel:hirVisit:edit']"
|
||||
@click="editStudy(scope.row)"
|
||||
>{{ $t("trials:hirVisit:button:editStudy") }}</el-button
|
||||
>
|
||||
<!--提交-->
|
||||
<el-button
|
||||
type="text"
|
||||
v-hasPermi="['trials:trials-panel:hirVisit:submit']"
|
||||
@click="submit(scope.row)"
|
||||
>{{ $t("common:button:submit") }}</el-button
|
||||
>
|
||||
<!--删除-->
|
||||
<el-button
|
||||
type="text"
|
||||
v-hasPermi="['trials:trials-panel:hirVisit:remove']"
|
||||
@click="remove(scope.row)"
|
||||
>{{ $t("common:button:delete") }}</el-button
|
||||
>
|
||||
<!--评估结果-->
|
||||
<el-button
|
||||
type="text"
|
||||
v-hasPermi="['trials:trials-panel:hirVisit:result']"
|
||||
@click="result(scope.row)"
|
||||
>{{ $t("trials:adReview:title:result") }}</el-button
|
||||
>
|
||||
<!--下载影像-->
|
||||
<el-button
|
||||
type="text"
|
||||
v-hasPermi="['trials:trials-panel:hirVisit:download']"
|
||||
@click="downloadImage(scope.row)"
|
||||
>{{ $t("trials:reading:button:uploadImages") }}</el-button
|
||||
>
|
||||
<!--下载医疗报告-->
|
||||
<el-button type="text" @click="downloadReport(scope.row)">{{
|
||||
$t("trials:reading:button:uploadReport")
|
||||
}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页组件 -->
|
||||
<pagination
|
||||
class="page"
|
||||
:total="total"
|
||||
:page.sync="searchData.PageIndex"
|
||||
:limit.sync="searchData.PageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</template>
|
||||
<!--修改检查-->
|
||||
<editStudyList :visible.sync="editStudyVisible" />
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import editStudyList from "./components/edit-study-list.vue";
|
||||
export default {
|
||||
name: "hirVisit",
|
||||
components: { BaseContainer, Pagination, editStudyList },
|
||||
data() {
|
||||
return {
|
||||
// 查询
|
||||
searchData: {},
|
||||
visitOptions: [],
|
||||
// 列表
|
||||
list: [
|
||||
{
|
||||
StudyCode: 1,
|
||||
},
|
||||
],
|
||||
loading: false,
|
||||
total: 0,
|
||||
// 修改检查
|
||||
editStudyVisible: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
// 查询
|
||||
handleSearch() {},
|
||||
// 重置
|
||||
handleSearch() {},
|
||||
// 排序
|
||||
handleSortByColumn() {},
|
||||
// 获取列表
|
||||
getList() {},
|
||||
// 修改检查
|
||||
editStudy(item) {
|
||||
this.editStudyVisible = true;
|
||||
},
|
||||
// 提交
|
||||
submit() {},
|
||||
// 删除
|
||||
remove() {},
|
||||
// 评估结果
|
||||
result() {},
|
||||
// 下载影像
|
||||
downloadImage() {},
|
||||
// 下载报告
|
||||
downloadReport() {},
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -0,0 +1,230 @@
|
|||
<template>
|
||||
<BaseContainer>
|
||||
<!-- 搜索框 -->
|
||||
<template slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- 受试者编号 -->
|
||||
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- 患者编号 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- 患者姓名 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- 访视名称 -->
|
||||
<el-form-item :label="$t('trials:globalReview:table:visitName')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of visitOptions"
|
||||
:key="item.SiteId"
|
||||
:label="item.TrialSiteCode"
|
||||
:value="item.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 任务状态 -->
|
||||
<el-form-item :label="$t('trials:readTask:table:taskState')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of visitOptions"
|
||||
:key="item.SiteId"
|
||||
:label="item.TrialSiteCode"
|
||||
:value="item.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 阅片状态 -->
|
||||
<el-form-item :label="$t('trials:readTask:table:readingTaskState')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of visitOptions"
|
||||
:key="item.SiteId"
|
||||
:label="item.TrialSiteCode"
|
||||
:value="item.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 阅片完成时间 -->
|
||||
<el-form-item :label="$t('trials:reviewTrack:table:signTime')">
|
||||
<el-date-picker
|
||||
v-model="searchData.date"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t("common:button:search") }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<!-- 阅片管理列表 -->
|
||||
<template slot="main-container">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
v-adaptive="{ bottomOffset: 60 }"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortByColumn"
|
||||
>
|
||||
<!-- 受试者编号 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadMonitor:table:subjectId')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 患者编号 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadMonitor:table:subjectId')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 患者姓名 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 访视名称 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadMonitor:table:visitName')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 任务创建时间 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:reviewTrack:table:createTime')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 任务状态 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:readTask:table:taskState')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 阅片人 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:reviewAssign:searchForm:reader')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 阅片标准 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:processCfg:form:criterion')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 建议完成时间 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:consistencyAnalysis:table:suggesteFinishedTime')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!--操作-->
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
min-width="100"
|
||||
fixed="right"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!--阅片结果-->
|
||||
<el-button type="text" @click="readResult(scope.row)">{{
|
||||
$t("trials:hirVisit:button:editStudy")
|
||||
}}</el-button>
|
||||
<!--下载报告-->
|
||||
<el-button type="text" @click="downloadReport(scope.row)">{{
|
||||
$t("common:button:submit")
|
||||
}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页组件 -->
|
||||
<pagination
|
||||
class="page"
|
||||
:total="total"
|
||||
:page.sync="searchData.PageIndex"
|
||||
:limit.sync="searchData.PageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</template>
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
import Pagination from "@/components/Pagination";
|
||||
export default {
|
||||
name: "readManagenent",
|
||||
components: { BaseContainer, Pagination },
|
||||
data() {
|
||||
return {
|
||||
// 查询
|
||||
searchData: {},
|
||||
visitOptions: [],
|
||||
// 列表
|
||||
list: [
|
||||
{
|
||||
StudyCode: 1,
|
||||
},
|
||||
],
|
||||
loading: false,
|
||||
total: 0,
|
||||
// 修改检查
|
||||
editStudyVisible: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
// 查询
|
||||
handleSearch() {},
|
||||
// 重置
|
||||
handleSearch() {},
|
||||
// 排序
|
||||
handleSortByColumn() {},
|
||||
// 获取列表
|
||||
getList() {},
|
||||
// 下载报告
|
||||
downloadReport() {},
|
||||
// 阅片结果
|
||||
readResult() {},
|
||||
},
|
||||
};
|
||||
</script>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,208 +1,158 @@
|
|||
<template>
|
||||
<BaseContainer v-loading="loading" style="height:100%;background-color: #fff;">
|
||||
<el-tabs v-if="TrialReadingCriterionId" v-model="TrialReadingCriterionId" type="border-card">
|
||||
<el-tab-pane v-for="item of trialCriterionList" :key="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" :name="item.TrialReadingCriterionId">
|
||||
<div v-if="isReadingTaskViewInOrder && TrialReadingCriterionId === item.TrialReadingCriterionId">
|
||||
<div slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- 受试者编号 -->
|
||||
<el-form-item :label="$t('trials:pendingReadingTasks:table:subjectCode')">
|
||||
<el-input
|
||||
v-model="searchData.SubjectCode"
|
||||
style="width:130px;"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t('common:button:search') }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||
{{ $t('common:button:reset') }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="main-container">
|
||||
<el-table
|
||||
v-adaptive="{bottomOffset:75}"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortChange"
|
||||
>
|
||||
<el-table-column type="index" width="40" align="left" />
|
||||
<!-- 受试者编号 -->
|
||||
<el-table-column
|
||||
prop="SubjectCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:pendingReadingTasks:table:subjectCode')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 剩余阅片量 -->
|
||||
<el-table-column
|
||||
prop="UnReadCanReadTaskCount"
|
||||
min-width="100"
|
||||
:label="$t('trials:pendingReadingTasks:table:remainingReadingVolume')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- <!– 未读任务数量 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="UnReadTaskCount"-->
|
||||
<!-- min-width="100"-->
|
||||
<!-- label="未读任务数量"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- />-->
|
||||
<!-- <!– 可读任务量 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="UnReadCanReadTaskCount"-->
|
||||
<!-- min-width="100"-->
|
||||
<!-- label="可读任务量"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- />-->
|
||||
<!-- <!– 已签名任务量 –>-->
|
||||
<!-- <el-table-column-->
|
||||
<!-- prop="HaveReadTaskCount"-->
|
||||
<!-- min-width="100"-->
|
||||
<!-- label="已签名任务量"-->
|
||||
<!-- show-overflow-tooltip-->
|
||||
<!-- />-->
|
||||
<!-- 建议完成时间 -->
|
||||
<el-table-column
|
||||
prop="SuggesteFinishedTime"
|
||||
min-width="100"
|
||||
:label="$t('trials:pendingReadingTasks:table:suggestedCompletionTime')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.SuggesteFinishedTime? scope.row.SuggesteFinishedTime.split(':')[0] + ':00:00':'' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 当前领取人 -->
|
||||
<el-table-column
|
||||
prop="ClaimUserName"
|
||||
min-width="100"
|
||||
:label="$t('trials:pendingReadingTasks:table:recipient')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
width="250"
|
||||
fixed="right"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 阅片 -->
|
||||
<el-button
|
||||
:disabled="scope.row.ExistReadingApply || (scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)"
|
||||
circle
|
||||
:title="scope.row.ExistReadingApply ? $t('trials:pendingReadingTasks:button:ExistReadingApply') : $t('trials:pendingReadingTasks:button:review')"
|
||||
icon="el-icon-edit-outline"
|
||||
@click="handleReadImage(scope.row)"
|
||||
/>
|
||||
<!-- 释放 -->
|
||||
<el-button
|
||||
:disabled="!scope.row.ClaimUserId || (scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)"
|
||||
circle
|
||||
:title="$t('trials:pendingReadingTasks:button:release')"
|
||||
icon="el-icon-s-release"
|
||||
@click="handleReleaseTasks(scope.row)"
|
||||
/>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="isReadingTaskViewInOrder === false && TrialReadingCriterionId === item.TrialReadingCriterionId">
|
||||
<el-descriptions :column="2" border style="width:800px">
|
||||
<!-- 剩余任务量 -->
|
||||
<el-descriptions-item :label="$t('trials:pendingReadingTasks:table:remainingTaskVolume')" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadTaskCount }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<!-- 剩余裁判量 -->
|
||||
<!-- <el-descriptions-item :label="$t('trials:pendingReadingTasks:table:amountOfJudgesRemaining')" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadJudgeTaskCount }}</el-tag>
|
||||
</el-descriptions-item> -->
|
||||
<!-- 已完成任务量 -->
|
||||
<el-descriptions-item :label="$t('trials:pendingReadingTasks:table:amountOfCompletedTasks')" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small">{{ randomReadInfo.FinishTaskCount }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<!-- 已完成裁判量 -->
|
||||
<!-- <el-descriptions-item :label="$t('trials:pendingReadingTasks:table:numberOfJudgesCompleted')" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small">{{ randomReadInfo.FinishJudgeTaskCount }}</el-tag>
|
||||
</el-descriptions-item> -->
|
||||
<el-descriptions-item>
|
||||
<!-- 开始随机阅片 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:disabled="randomReadInfo.UnReadTaskCount ===0"
|
||||
@click="handleOutOfOrderReading"
|
||||
>
|
||||
{{ $t('trials:pendingReadingTasks:button:beginRandomReview') }}
|
||||
</el-button>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<!-- <template v-else-if="!isReadingTaskViewInOrder && isRender">
|
||||
<el-tabs v-model="TrialReadingCriterionId" type="border-card">
|
||||
<el-tab-pane v-for="i of trialCriterionList" :key="i.TrialReadingCriterionName" :label="i.TrialReadingCriterionName" :name="i.TrialReadingCriterionId">
|
||||
<el-descriptions :column="2" border style="width:800px">
|
||||
<el-descriptions-item label="剩余任务量" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadTaskCount }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="剩余裁判量" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small" type="danger">{{ randomReadInfo.UnReadJudgeTaskCount }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="已完成任务量" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small">{{ randomReadInfo.FinishTaskCount }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="已完成裁判量" :label-style="{'width':'200px'}">
|
||||
<el-tag size="small">{{ randomReadInfo.FinishJudgeTaskCount }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
size="small"
|
||||
:disabled="randomReadInfo.UnReadTaskCount+randomReadInfo.UnReadJudgeTaskCount ===0"
|
||||
@click="handleOutOfOrderReading"
|
||||
>
|
||||
开始随机阅片
|
||||
</el-button>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template> -->
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<BaseContainer
|
||||
v-loading="loading"
|
||||
style="height: 100%; background-color: #fff"
|
||||
>
|
||||
<div slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- 患者编号 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
||||
<el-input
|
||||
v-model="searchData.SubjectCode"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 患者姓名 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
||||
<el-input
|
||||
v-model="searchData.SubjectCode"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t("common:button:search") }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="main-container">
|
||||
<el-table
|
||||
v-adaptive="{ bottomOffset: 75 }"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortChange"
|
||||
>
|
||||
<el-table-column type="index" width="40" align="left" />
|
||||
<!-- 患者编号 -->
|
||||
<el-table-column
|
||||
prop="SubjectCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:uploadDicomList:table:pId')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 患者姓名 -->
|
||||
<el-table-column
|
||||
prop="SubjectCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 剩余阅片量 -->
|
||||
<el-table-column
|
||||
prop="UnReadCanReadTaskCount"
|
||||
min-width="100"
|
||||
:label="$t('trials:pendingReadingTasks:table:remainingReadingVolume')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 建议完成时间 -->
|
||||
<el-table-column
|
||||
prop="SuggesteFinishedTime"
|
||||
min-width="100"
|
||||
:label="
|
||||
$t('trials:pendingReadingTasks:table:suggestedCompletionTime')
|
||||
"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{
|
||||
scope.row.SuggesteFinishedTime
|
||||
? scope.row.SuggesteFinishedTime.split(":")[0] + ":00:00"
|
||||
: ""
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--操作-->
|
||||
<el-table-column
|
||||
:label="$t('common:action:action')"
|
||||
width="250"
|
||||
fixed="right"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 阅片 -->
|
||||
<el-button
|
||||
:disabled="
|
||||
scope.row.ExistReadingApply ||
|
||||
(scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)
|
||||
"
|
||||
circle
|
||||
:title="
|
||||
scope.row.ExistReadingApply
|
||||
? $t('trials:pendingReadingTasks:button:ExistReadingApply')
|
||||
: $t('trials:pendingReadingTasks:button:review')
|
||||
"
|
||||
icon="el-icon-edit-outline"
|
||||
@click="handleReadImage(scope.row)"
|
||||
/>
|
||||
<!-- 释放 -->
|
||||
<el-button
|
||||
:disabled="
|
||||
!scope.row.ClaimUserId ||
|
||||
(scope.row.ClaimUserId && scope.row.ClaimUserId !== userId)
|
||||
"
|
||||
circle
|
||||
:title="$t('trials:pendingReadingTasks:button:release')"
|
||||
icon="el-icon-s-release"
|
||||
@click="handleReleaseTasks(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination
|
||||
class="page"
|
||||
:total="total"
|
||||
:page.sync="searchData.PageIndex"
|
||||
:limit.sync="searchData.PageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
import { getIRUnReadSubjectTaskList, verifyReadingRestTime } from '@/api/trials'
|
||||
import { getTrialCriterionList } from '@/api/trials/reading'
|
||||
import { claimOrCancelSubject } from '@/api/reading'
|
||||
import BaseContainer from '@/components/BaseContainer'
|
||||
import Pagination from '@/components/Pagination'
|
||||
import { getToken } from '@/utils/auth'
|
||||
import {
|
||||
getIRUnReadSubjectTaskList,
|
||||
verifyReadingRestTime,
|
||||
} from "@/api/trials";
|
||||
import { getTrialCriterionList } from "@/api/trials/reading";
|
||||
import { claimOrCancelSubject } from "@/api/reading";
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import { getToken } from "@/utils/auth";
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
SubjectCode: '',
|
||||
SubjectCode: "",
|
||||
PageIndex: 1,
|
||||
PageSize: 20
|
||||
}
|
||||
}
|
||||
PageSize: 20,
|
||||
};
|
||||
};
|
||||
export default {
|
||||
name: 'ReadingTaskList',
|
||||
name: "ReadingTaskList",
|
||||
components: { BaseContainer, Pagination },
|
||||
data() {
|
||||
return {
|
||||
|
@ -210,147 +160,175 @@ export default {
|
|||
list: [],
|
||||
total: 0,
|
||||
loading: false,
|
||||
trialId: '',
|
||||
trialId: "",
|
||||
isReadingTaskViewInOrder: null,
|
||||
randomReadInfo: {},
|
||||
isRender: false,
|
||||
trialCriterionList: [],
|
||||
TrialReadingCriterionId: '',
|
||||
TrialReadingCriterionId: "",
|
||||
isTableShow: true,
|
||||
readingTool: null,
|
||||
criterionType: null,
|
||||
openWindow: null,
|
||||
userId: zzSessionStorage.getItem('userId')
|
||||
}
|
||||
userId: zzSessionStorage.getItem("userId"),
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
TrialReadingCriterionId(v) {
|
||||
if (!v) return
|
||||
this.getList()
|
||||
}
|
||||
if (!v) return;
|
||||
this.getList();
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
window.addEventListener('message', this.receiveMsg)
|
||||
this.trialId = this.$route.query.trialId
|
||||
window.addEventListener("message", this.receiveMsg);
|
||||
this.trialId = this.$route.query.trialId;
|
||||
// this.getList()
|
||||
this.getTrialCriterionList()
|
||||
this.getTrialCriterionList();
|
||||
},
|
||||
beforeDestroy() {
|
||||
window.removeEventListener('message', this.receiveMsg)
|
||||
window.removeEventListener("message", this.receiveMsg);
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close()
|
||||
this.openWindow.close();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getTrialCriterionList() {
|
||||
getTrialCriterionList(this.trialId).then(res => {
|
||||
this.trialCriterionList = res.Result
|
||||
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
|
||||
}).catch(() => {})
|
||||
getTrialCriterionList(this.trialId)
|
||||
.then((res) => {
|
||||
this.trialCriterionList = res.Result;
|
||||
this.TrialReadingCriterionId =
|
||||
this.trialCriterionList[0].TrialReadingCriterionId;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
getList() {
|
||||
this.loading = true
|
||||
this.searchData.TrialId = this.trialId
|
||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
|
||||
this.isRender = false
|
||||
getIRUnReadSubjectTaskList(this.searchData).then(res => {
|
||||
this.isReadingTaskViewInOrder = res.OtherInfo.IsReadingTaskViewInOrder
|
||||
this.readingTool = res.OtherInfo.ReadingTool
|
||||
this.criterionType = res.OtherInfo.CriterionType
|
||||
if (res.OtherInfo.IsReadingTaskViewInOrder) {
|
||||
this.list = res.Result.CurrentPageData
|
||||
this.total = res.Result.TotalCount
|
||||
} else {
|
||||
this.randomReadInfo = res.OtherInfo.RandomReadInfo
|
||||
}
|
||||
this.isRender = true
|
||||
this.loading = false
|
||||
}).catch(() => {
|
||||
this.isRender = true
|
||||
this.loading = false
|
||||
})
|
||||
this.loading = true;
|
||||
this.searchData.TrialId = this.trialId;
|
||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
|
||||
this.isRender = false;
|
||||
getIRUnReadSubjectTaskList(this.searchData)
|
||||
.then((res) => {
|
||||
this.isReadingTaskViewInOrder =
|
||||
res.OtherInfo.IsReadingTaskViewInOrder;
|
||||
this.readingTool = res.OtherInfo.ReadingTool;
|
||||
this.criterionType = res.OtherInfo.CriterionType;
|
||||
if (res.OtherInfo.IsReadingTaskViewInOrder) {
|
||||
this.list = res.Result.CurrentPageData;
|
||||
this.total = res.Result.TotalCount;
|
||||
} else {
|
||||
this.randomReadInfo = res.OtherInfo.RandomReadInfo;
|
||||
}
|
||||
this.isRender = true;
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.isRender = true;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 释放
|
||||
handleReleaseTasks(row) {
|
||||
this.loading = true
|
||||
this.loading = true;
|
||||
var params = {
|
||||
isInOrder: true,
|
||||
subejctId: row.SubjectId,
|
||||
isClaim: false,
|
||||
trialReadingCriterionId: this.TrialReadingCriterionId
|
||||
}
|
||||
claimOrCancelSubject(params).then(res => {
|
||||
// '释放成功!'
|
||||
this.$message.success(this.$t('trials:pendingReadingTasks:message:released'))
|
||||
this.loading = false
|
||||
this.getList()
|
||||
}).catch(() => { this.loading = false })
|
||||
trialReadingCriterionId: this.TrialReadingCriterionId,
|
||||
};
|
||||
claimOrCancelSubject(params)
|
||||
.then((res) => {
|
||||
// '释放成功!'
|
||||
this.$message.success(
|
||||
this.$t("trials:pendingReadingTasks:message:released")
|
||||
);
|
||||
this.loading = false;
|
||||
this.getList();
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleSearch() {
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
handleReset() {
|
||||
this.searchData = searchDataDefault()
|
||||
this.getList()
|
||||
this.searchData = searchDataDefault();
|
||||
this.getList();
|
||||
},
|
||||
handleReadImage(row) {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close()
|
||||
this.openWindow.close();
|
||||
}
|
||||
this.loading = true
|
||||
verifyReadingRestTime().then(_ => {
|
||||
this.loading = false
|
||||
this.loading = true;
|
||||
verifyReadingRestTime()
|
||||
.then((_) => {
|
||||
this.loading = false;
|
||||
|
||||
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
|
||||
var token = getToken()
|
||||
var path = ''
|
||||
var criterionName = this.trialCriterionList.find(i => i.TrialReadingCriterionId === this.TrialReadingCriterionId).TrialReadingCriterionName
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
}
|
||||
var routeData = this.$router.resolve({ path })
|
||||
window.localStorage.setItem(
|
||||
"TrialReadingCriterionId",
|
||||
this.TrialReadingCriterionId
|
||||
);
|
||||
var token = getToken();
|
||||
var path = "";
|
||||
var criterionName = this.trialCriterionList.find(
|
||||
(i) => i.TrialReadingCriterionId === this.TrialReadingCriterionId
|
||||
).TrialReadingCriterionName;
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&subjectCode=${row.SubjectCode}&subjectId=${row.SubjectId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&criterionName=${criterionName}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
}
|
||||
var routeData = this.$router.resolve({ path });
|
||||
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
}).catch(() => { this.loading = false })
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleOutOfOrderReading() {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close()
|
||||
this.openWindow.close();
|
||||
}
|
||||
this.loading = true
|
||||
verifyReadingRestTime().then(_ => {
|
||||
this.loading = false
|
||||
window.localStorage.setItem('TrialReadingCriterionId', this.TrialReadingCriterionId)
|
||||
var token = getToken()
|
||||
var path = ''
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`
|
||||
}
|
||||
var routeData = this.$router.resolve({ path })
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
}).catch(() => { this.loading = false })
|
||||
this.loading = true;
|
||||
verifyReadingRestTime()
|
||||
.then((_) => {
|
||||
this.loading = false;
|
||||
window.localStorage.setItem(
|
||||
"TrialReadingCriterionId",
|
||||
this.TrialReadingCriterionId
|
||||
);
|
||||
var token = getToken();
|
||||
var path = "";
|
||||
if (this.readingTool === 0) {
|
||||
path = `/readingDicoms?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
} else {
|
||||
path = `/noneDicomReading?TrialReadingCriterionId=${this.TrialReadingCriterionId}&trialId=${this.trialId}&isReadingTaskViewInOrder=${this.isReadingTaskViewInOrder}&criterionType=${this.criterionType}&readingTool=${this.readingTool}&TokenKey=${token}`;
|
||||
}
|
||||
var routeData = this.$router.resolve({ path });
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
receiveMsg(event) {
|
||||
if (event.data === 'refreshTaskList') {
|
||||
this.getList()
|
||||
if (event.data === "refreshTaskList") {
|
||||
this.getList();
|
||||
}
|
||||
},
|
||||
// 排序
|
||||
handleSortChange(column) {
|
||||
if (column.order === 'ascending') {
|
||||
this.searchData.Asc = true
|
||||
if (column.order === "ascending") {
|
||||
this.searchData.Asc = true;
|
||||
} else {
|
||||
this.searchData.Asc = false
|
||||
this.searchData.Asc = false;
|
||||
}
|
||||
this.searchData.SortField = column.prop
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
}
|
||||
this.searchData.SortField = column.prop;
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -1,282 +1,426 @@
|
|||
<template>
|
||||
<BaseContainer>
|
||||
<el-tabs v-model="TrialReadingCriterionId" type="border-card">
|
||||
<el-tab-pane v-for="item of trialCriterionList" :key="item.TrialReadingCriterionId" :label="item.TrialReadingCriterionName" :name="item.TrialReadingCriterionId">
|
||||
<div v-if="TrialReadingCriterionId === item.TrialReadingCriterionId">
|
||||
<div slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- 中心编号 -->
|
||||
<el-form-item :label="$t('trials:rereadTask:table:siteCode')">
|
||||
<el-select v-model="searchData.SiteId" clearable filterable style="width:120px;">
|
||||
<el-option
|
||||
v-for="(i,index) of siteOptions"
|
||||
:key="index"
|
||||
:label="i.TrialSiteCode"
|
||||
:value="i.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 受试者编号 -->
|
||||
<el-form-item :label="$t('trials:rereadTask:table:subjectCode')">
|
||||
<el-input v-model="searchData.SubjectCode" style="width:100px;" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item style="margin-bottom:10px" label="访视/阅片期名称">
|
||||
<div slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- 中心编号 -->
|
||||
<el-form-item :label="$t('trials:rereadTask:table:siteCode')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width: 120px"
|
||||
>
|
||||
<el-option
|
||||
v-for="(i, index) of siteOptions"
|
||||
:key="index"
|
||||
:label="i.TrialSiteCode"
|
||||
:value="i.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 受试者编号 -->
|
||||
<el-form-item :label="$t('trials:rereadTask:table:subjectCode')">
|
||||
<el-input v-model="searchData.SubjectCode" style="width: 100px" />
|
||||
</el-form-item>
|
||||
<!-- <el-form-item style="margin-bottom:10px" label="访视/阅片期名称">
|
||||
<el-input
|
||||
v-model="searchData.TaskName"
|
||||
style="width:100px;"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item> -->
|
||||
<!-- 任务编号 -->
|
||||
<el-form-item :label="$t('trials:rereadTask:table:taskCode')">
|
||||
<el-input
|
||||
v-model="searchData.TaskCode"
|
||||
style="width:130px;"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- 任务编号 -->
|
||||
<el-form-item :label="$t('trials:rereadTask:table:taskCode')">
|
||||
<el-input
|
||||
v-model="searchData.TaskCode"
|
||||
style="width: 130px"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t('common:button:search') }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||
{{ $t('common:button:reset') }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="main-container">
|
||||
<el-table
|
||||
v-adaptive="{bottomOffset:75}"
|
||||
v-loading="loading"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortChange"
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t("common:button:search") }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="main-container">
|
||||
<el-table
|
||||
v-adaptive="{ bottomOffset: 75 }"
|
||||
v-loading="loading"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortChange"
|
||||
>
|
||||
<el-table-column type="index" width="40" align="left" />
|
||||
<!-- 是否加急 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.IsUrgent"
|
||||
:label="$t('trials:rereadTask:table:isUrgent')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.IsUrgent"
|
||||
type="danger"
|
||||
>{{
|
||||
$fd("YesOrNo", scope.row.OriginalReReadingTask.IsUrgent)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-table-column type="index" width="40" align="left" />
|
||||
<!-- 是否加急 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.IsUrgent"
|
||||
:label="$t('trials:rereadTask:table:isUrgent')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.IsUrgent" type="danger">{{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}</el-tag>
|
||||
<el-tag v-else type="primary">{{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 任务编号 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TaskCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:taskCode')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 中心编号 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TrialSiteCode"
|
||||
:label="$t('trials:rereadTask:table:siteCode')"
|
||||
min-width="100"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 受试者编号 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.SubjectCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:subjectCode')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-tag v-else type="primary">{{
|
||||
$fd("YesOrNo", scope.row.OriginalReReadingTask.IsUrgent)
|
||||
}}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 任务编号 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TaskCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:taskCode')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 中心编号 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TrialSiteCode"
|
||||
:label="$t('trials:rereadTask:table:siteCode')"
|
||||
min-width="100"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 受试者编号 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.SubjectCode"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:subjectCode')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
|
||||
<!-- 任务名称 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TaskName"
|
||||
min-width="120"
|
||||
:label="$t('trials:rereadTask:table:taskName')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 阅片标准 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TrialReadingCriterionName"
|
||||
:label="$t('trials:rereadTask:table:criterionName')"
|
||||
min-width="100"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 任务状态 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TaskState"
|
||||
:label="$t('trials:rereadTask:table:taskState')"
|
||||
min-width="100"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 0" type="primary">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 1" type="info">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 3" type="danger">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 4" type="warning">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.TaskState === 5" type="danger">{{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 任务类型 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.ReadingCategory"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:readingCategory')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 1" type="primary">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 2" type="info">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 4" type="danger">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
|
||||
<el-tag v-if="scope.row.OriginalReReadingTask.ReadingCategory === 5" type="warning">{{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 完成阅片时间 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.SignTime"
|
||||
min-width="120"
|
||||
:label="$t('trials:rereadTask:table:signTime')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 重阅申请类型 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingType"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingType')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.RequestReReadingType">
|
||||
<el-tag v-if="scope.row.RequestReReadingType === 2" type="danger">{{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}</el-tag>
|
||||
<el-tag v-else type="primary">{{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 申请时间 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingTime"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingTime')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 申请退回原因 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingReason"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingReason')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
|
||||
<!-- 审批结果 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingResultEnum"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingResultEnum')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.RequestReReadingResultEnum || scope.row.RequestReReadingResultEnum === 0">
|
||||
<el-tooltip v-if="scope.row.RequestReReadingResultEnum === 2" class="item" effect="dark" placement="top">
|
||||
<div slot="content">
|
||||
{{ scope.row.RequestReReadingRejectReason }}
|
||||
</div>
|
||||
<el-tag type="danger">{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}</el-tag>
|
||||
</el-tooltip>
|
||||
<el-tag v-if="scope.row.RequestReReadingResultEnum === 1" type="primary">{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}</el-tag>
|
||||
<el-tag v-if="scope.row.RequestReReadingResultEnum === 0" type="warning">{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 新任务编号 -->
|
||||
<el-table-column
|
||||
prop="ReReadingNewTaskCode"
|
||||
:label="$t('trials:rereadTask:table:reReadingNewTaskCode')"
|
||||
min-width="120"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
|
||||
<el-dialog
|
||||
v-if="ConfirmReReadingVisible"
|
||||
title="驳回"
|
||||
:visible.sync="ConfirmReReadingVisible"
|
||||
width="600px"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
custom-class="base-dialog-wrapper"
|
||||
<!-- 任务名称 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TaskName"
|
||||
min-width="120"
|
||||
:label="$t('trials:rereadTask:table:taskName')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 阅片标准 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TrialReadingCriterionName"
|
||||
:label="$t('trials:rereadTask:table:criterionName')"
|
||||
min-width="100"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!-- 任务状态 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.TaskState"
|
||||
:label="$t('trials:rereadTask:table:taskState')"
|
||||
min-width="100"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.TaskState === 0"
|
||||
type="primary"
|
||||
>{{
|
||||
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
|
||||
}}</el-tag
|
||||
>
|
||||
<div style="padding:10px;border: 1px solid #e0e0e0;max-height:650px;overflow-y: auto;">
|
||||
<el-form
|
||||
ref="reasonForm"
|
||||
:rules="rules"
|
||||
:model="ConfirmReReadingForm"
|
||||
class="demo-ruleForm"
|
||||
size="small"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="驳回原因" prop="RequestReReadingRejectReason">
|
||||
<el-input
|
||||
v-model="ConfirmReReadingForm.RequestReReadingRejectReason"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4}"
|
||||
:placeholder="$t('common:ruleMessage:specify')"
|
||||
maxlength="500"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<!-- 取消 -->
|
||||
<el-button :disabled="btnLoading" size="small" type="primary" @click="ConfirmReReadingVisible = false;ConfirmReReadingForm = { RequestReReadingRejectReason: null }">
|
||||
{{ $t('common:button:cancel') }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button :loading="btnLoading" size="small" type="primary" @click="handleConfirmReReading(rowData, 2)">
|
||||
{{ $t('common:button:save') }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.TaskState === 1"
|
||||
type="info"
|
||||
>{{
|
||||
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.TaskState === 3"
|
||||
type="danger"
|
||||
>{{
|
||||
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.TaskState === 4"
|
||||
type="warning"
|
||||
>{{
|
||||
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.TaskState === 5"
|
||||
type="danger"
|
||||
>{{
|
||||
$fd("TaskState", scope.row.OriginalReReadingTask.TaskState)
|
||||
}}</el-tag
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 任务类型 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.ReadingCategory"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:readingCategory')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 1"
|
||||
type="primary"
|
||||
>{{
|
||||
$fd(
|
||||
"ReadingCategory",
|
||||
scope.row.OriginalReReadingTask.ReadingCategory
|
||||
)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 2"
|
||||
type="info"
|
||||
>{{
|
||||
$fd(
|
||||
"ReadingCategory",
|
||||
scope.row.OriginalReReadingTask.ReadingCategory
|
||||
)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 4"
|
||||
type="danger"
|
||||
>{{
|
||||
$fd(
|
||||
"ReadingCategory",
|
||||
scope.row.OriginalReReadingTask.ReadingCategory
|
||||
)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.OriginalReReadingTask.ReadingCategory === 5"
|
||||
type="warning"
|
||||
>{{
|
||||
$fd(
|
||||
"ReadingCategory",
|
||||
scope.row.OriginalReReadingTask.ReadingCategory
|
||||
)
|
||||
}}</el-tag
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 完成阅片时间 -->
|
||||
<el-table-column
|
||||
prop="OriginalReReadingTask.SignTime"
|
||||
min-width="120"
|
||||
:label="$t('trials:rereadTask:table:signTime')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 重阅申请类型 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingType"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingType')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.RequestReReadingType">
|
||||
<el-tag
|
||||
v-if="scope.row.RequestReReadingType === 2"
|
||||
type="danger"
|
||||
>{{
|
||||
$fd("RequestReReadingType", scope.row.RequestReReadingType)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag v-else type="primary">{{
|
||||
$fd("RequestReReadingType", scope.row.RequestReReadingType)
|
||||
}}</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 申请时间 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingTime"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingTime')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 申请退回原因 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingReason"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingReason')"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
|
||||
<!-- 审批结果 -->
|
||||
<el-table-column
|
||||
prop="RequestReReadingResultEnum"
|
||||
min-width="100"
|
||||
:label="$t('trials:rereadTask:table:requestReReadingResultEnum')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<div
|
||||
v-if="
|
||||
scope.row.RequestReReadingResultEnum ||
|
||||
scope.row.RequestReReadingResultEnum === 0
|
||||
"
|
||||
>
|
||||
<el-tooltip
|
||||
v-if="scope.row.RequestReReadingResultEnum === 2"
|
||||
class="item"
|
||||
effect="dark"
|
||||
placement="top"
|
||||
>
|
||||
<div slot="content">
|
||||
{{ scope.row.RequestReReadingRejectReason }}
|
||||
</div>
|
||||
<el-tag type="danger">{{
|
||||
$fd(
|
||||
"RequestReReadingResult",
|
||||
scope.row.RequestReReadingResultEnum
|
||||
)
|
||||
}}</el-tag>
|
||||
</el-tooltip>
|
||||
<el-tag
|
||||
v-if="scope.row.RequestReReadingResultEnum === 1"
|
||||
type="primary"
|
||||
>{{
|
||||
$fd(
|
||||
"RequestReReadingResult",
|
||||
scope.row.RequestReReadingResultEnum
|
||||
)
|
||||
}}</el-tag
|
||||
>
|
||||
<el-tag
|
||||
v-if="scope.row.RequestReReadingResultEnum === 0"
|
||||
type="warning"
|
||||
>{{
|
||||
$fd(
|
||||
"RequestReReadingResult",
|
||||
scope.row.RequestReReadingResultEnum
|
||||
)
|
||||
}}</el-tag
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 新任务编号 -->
|
||||
<el-table-column
|
||||
prop="ReReadingNewTaskCode"
|
||||
:label="$t('trials:rereadTask:table:reReadingNewTaskCode')"
|
||||
min-width="120"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination
|
||||
class="page"
|
||||
:total="total"
|
||||
:page.sync="searchData.PageIndex"
|
||||
:limit.sync="searchData.PageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
<el-dialog
|
||||
v-if="ConfirmReReadingVisible"
|
||||
title="驳回"
|
||||
:visible.sync="ConfirmReReadingVisible"
|
||||
width="600px"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
custom-class="base-dialog-wrapper"
|
||||
>
|
||||
<div
|
||||
style="
|
||||
padding: 10px;
|
||||
border: 1px solid #e0e0e0;
|
||||
max-height: 650px;
|
||||
overflow-y: auto;
|
||||
"
|
||||
>
|
||||
<el-form
|
||||
ref="reasonForm"
|
||||
:rules="rules"
|
||||
:model="ConfirmReReadingForm"
|
||||
class="demo-ruleForm"
|
||||
size="small"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="驳回原因" prop="RequestReReadingRejectReason">
|
||||
<el-input
|
||||
v-model="ConfirmReReadingForm.RequestReReadingRejectReason"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
||||
:placeholder="$t('common:ruleMessage:specify')"
|
||||
maxlength="500"
|
||||
show-word-limit
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<!-- 取消 -->
|
||||
<el-button
|
||||
:disabled="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="
|
||||
ConfirmReReadingVisible = false;
|
||||
ConfirmReReadingForm = { RequestReReadingRejectReason: null };
|
||||
"
|
||||
>
|
||||
{{ $t("common:button:cancel") }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
:loading="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleConfirmReReading(rowData, 2)"
|
||||
>
|
||||
{{ $t("common:button:save") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
import { getIRReReadingTaskList, getTrialSiteSelect } from '@/api/trials'
|
||||
import { confirmReReading, getTrialCriterionList } from '@/api/trials/reading'
|
||||
import BaseContainer from '@/components/BaseContainer'
|
||||
import Pagination from '@/components/Pagination'
|
||||
import { changeURLStatic } from '@/utils/history.js'
|
||||
import { getIRReReadingTaskList, getTrialSiteSelect } from "@/api/trials";
|
||||
import { confirmReReading, getTrialCriterionList } from "@/api/trials/reading";
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import { changeURLStatic } from "@/utils/history.js";
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
SubjectCode: '',
|
||||
TaskCode: '',
|
||||
SubjectCode: "",
|
||||
TaskCode: "",
|
||||
PageIndex: 1,
|
||||
PageSize: 20
|
||||
}
|
||||
}
|
||||
PageSize: 20,
|
||||
};
|
||||
};
|
||||
export default {
|
||||
name: 'RereadTask',
|
||||
name: "RereadTask",
|
||||
components: { BaseContainer, Pagination },
|
||||
data() {
|
||||
return {
|
||||
|
@ -285,146 +429,166 @@ export default {
|
|||
siteOptions: [],
|
||||
total: 0,
|
||||
loading: false,
|
||||
trialId: '',
|
||||
trialId: "",
|
||||
ConfirmReReadingForm: {
|
||||
RequestReReadingRejectReason: null
|
||||
RequestReReadingRejectReason: null,
|
||||
},
|
||||
rules: {
|
||||
RequestReReadingRejectReason: [{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }]
|
||||
RequestReReadingRejectReason: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:specify"),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
ConfirmReReadingVisible: false,
|
||||
trialCriterionList: [],
|
||||
TrialReadingCriterionId: '0'
|
||||
}
|
||||
TrialReadingCriterionId: "0",
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
TrialReadingCriterionId(v) {
|
||||
if (v) {
|
||||
this.getList()
|
||||
this.getList();
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
if (this.$route.query.SiteId) {
|
||||
this.searchData.SiteId = this.$route.query.SiteId
|
||||
this.searchData.SubjectCode = this.$route.query.SubjectCode
|
||||
this.searchData.TaskName = this.$route.query.TaskName
|
||||
changeURLStatic('SiteId', '')
|
||||
changeURLStatic('SubjectCode', '')
|
||||
changeURLStatic('TaskName', '')
|
||||
this.searchData.SiteId = this.$route.query.SiteId;
|
||||
this.searchData.SubjectCode = this.$route.query.SubjectCode;
|
||||
this.searchData.TaskName = this.$route.query.TaskName;
|
||||
changeURLStatic("SiteId", "");
|
||||
changeURLStatic("SubjectCode", "");
|
||||
changeURLStatic("TaskName", "");
|
||||
}
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.getSite()
|
||||
this.trialId = this.$route.query.trialId;
|
||||
this.getSite();
|
||||
// this.getList()
|
||||
this.getTrialCriterionList()
|
||||
this.getTrialCriterionList();
|
||||
},
|
||||
methods: {
|
||||
getTrialCriterionList() {
|
||||
getTrialCriterionList(this.trialId).then(res => {
|
||||
this.trialCriterionList = res.Result
|
||||
this.TrialReadingCriterionId = this.trialCriterionList[0].TrialReadingCriterionId
|
||||
}).catch(() => {})
|
||||
getTrialCriterionList(this.trialId)
|
||||
.then((res) => {
|
||||
this.trialCriterionList = res.Result;
|
||||
this.TrialReadingCriterionId =
|
||||
this.trialCriterionList[0].TrialReadingCriterionId;
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
getSite() {
|
||||
getTrialSiteSelect(this.trialId).then(res => {
|
||||
this.siteOptions = res.Result
|
||||
})
|
||||
getTrialSiteSelect(this.trialId).then((res) => {
|
||||
this.siteOptions = res.Result;
|
||||
});
|
||||
},
|
||||
getList() {
|
||||
this.loading = true
|
||||
this.searchData.TrialId = this.trialId
|
||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId
|
||||
getIRReReadingTaskList(this.searchData).then(res => {
|
||||
this.list = res.Result.CurrentPageData
|
||||
this.total = res.Result.TotalCount
|
||||
this.loading = false
|
||||
}).catch(() => { this.loading = false })
|
||||
this.loading = true;
|
||||
this.searchData.TrialId = this.trialId;
|
||||
this.searchData.TrialReadingCriterionId = this.TrialReadingCriterionId;
|
||||
getIRReReadingTaskList(this.searchData)
|
||||
.then((res) => {
|
||||
this.list = res.Result.CurrentPageData;
|
||||
this.total = res.Result.TotalCount;
|
||||
this.loading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
handleSearch() {
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
handleReset() {
|
||||
this.searchData = searchDataDefault()
|
||||
this.getList()
|
||||
this.searchData = searchDataDefault();
|
||||
this.getList();
|
||||
},
|
||||
handleConfirmReReading(row, type, open) {
|
||||
if (open) {
|
||||
this.rowData = { ...row }
|
||||
this.ConfirmReReadingVisible = true
|
||||
this.rowData = { ...row };
|
||||
this.ConfirmReReadingVisible = true;
|
||||
this.ConfirmReReadingForm = {
|
||||
RequestReReadingRejectReason: null
|
||||
}
|
||||
return
|
||||
RequestReReadingRejectReason: null,
|
||||
};
|
||||
return;
|
||||
}
|
||||
if (type === 2) {
|
||||
this.$refs.reasonForm.validate((valid) => {
|
||||
if (!valid) return
|
||||
if (!valid) return;
|
||||
var params = {
|
||||
ConfirmReReadingList: [
|
||||
{
|
||||
Id: row.Id,
|
||||
OriginalReReadingTaskId: row.OriginalReReadingTaskId,
|
||||
RootReReadingTaskId: row.RootReReadingTaskId,
|
||||
NewReReadingTaskId: row.NewReReadingTaskId
|
||||
}
|
||||
NewReReadingTaskId: row.NewReReadingTaskId,
|
||||
},
|
||||
],
|
||||
RequestReReadingRejectReason: this.ConfirmReReadingForm.RequestReReadingRejectReason,
|
||||
RequestReReadingRejectReason:
|
||||
this.ConfirmReReadingForm.RequestReReadingRejectReason,
|
||||
TrialId: this.$route.query.trialId,
|
||||
RequestReReadingResultEnum: type
|
||||
}
|
||||
this.loading = true
|
||||
this.btnLoading = true
|
||||
confirmReReading(params).then(() => {
|
||||
this.loading = false
|
||||
this.btnLoading = false
|
||||
this.$message.success(`${type === 1 ? '同意' : '拒绝'}申请成功`)
|
||||
this.getList()
|
||||
this.ConfirmReReadingVisible = false
|
||||
}).catch(() => {
|
||||
this.loading = false
|
||||
this.btnLoading = false
|
||||
})
|
||||
})
|
||||
return
|
||||
RequestReReadingResultEnum: type,
|
||||
};
|
||||
this.loading = true;
|
||||
this.btnLoading = true;
|
||||
confirmReReading(params)
|
||||
.then(() => {
|
||||
this.loading = false;
|
||||
this.btnLoading = false;
|
||||
this.$message.success(`${type === 1 ? "同意" : "拒绝"}申请成功`);
|
||||
this.getList();
|
||||
this.ConfirmReReadingVisible = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
this.btnLoading = false;
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.$confirm(`确定${type === 1 ? '同意' : '拒绝'}该重阅申请?`).then(() => {
|
||||
var params = {
|
||||
ConfirmReReadingList: [
|
||||
{
|
||||
Id: row.Id,
|
||||
OriginalReReadingTaskId: row.OriginalReReadingTaskId,
|
||||
RootReReadingTaskId: row.RootReReadingTaskId,
|
||||
NewReReadingTaskId: row.NewReReadingTaskId
|
||||
}
|
||||
],
|
||||
TrialId: this.$route.query.trialId,
|
||||
RequestReReadingResultEnum: type
|
||||
this.$confirm(`确定${type === 1 ? "同意" : "拒绝"}该重阅申请?`).then(
|
||||
() => {
|
||||
var params = {
|
||||
ConfirmReReadingList: [
|
||||
{
|
||||
Id: row.Id,
|
||||
OriginalReReadingTaskId: row.OriginalReReadingTaskId,
|
||||
RootReReadingTaskId: row.RootReReadingTaskId,
|
||||
NewReReadingTaskId: row.NewReReadingTaskId,
|
||||
},
|
||||
],
|
||||
TrialId: this.$route.query.trialId,
|
||||
RequestReReadingResultEnum: type,
|
||||
};
|
||||
this.loading = true;
|
||||
this.btnLoading = true;
|
||||
confirmReReading(params)
|
||||
.then(() => {
|
||||
this.loading = false;
|
||||
this.btnLoading = false;
|
||||
this.$message.success(`${type === 1 ? "同意" : "拒绝"}申请成功`);
|
||||
this.getList();
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
this.btnLoading = false;
|
||||
});
|
||||
}
|
||||
this.loading = true
|
||||
this.btnLoading = true
|
||||
confirmReReading(params).then(() => {
|
||||
this.loading = false
|
||||
this.btnLoading = false
|
||||
this.$message.success(`${type === 1 ? '同意' : '拒绝'}申请成功`)
|
||||
this.getList()
|
||||
}).catch(() => {
|
||||
this.loading = false
|
||||
this.btnLoading = false
|
||||
})
|
||||
})
|
||||
);
|
||||
},
|
||||
// 排序
|
||||
handleSortChange(column) {
|
||||
if (column.order === 'ascending') {
|
||||
this.searchData.Asc = true
|
||||
if (column.order === "ascending") {
|
||||
this.searchData.Asc = true;
|
||||
} else {
|
||||
this.searchData.Asc = false
|
||||
this.searchData.Asc = false;
|
||||
}
|
||||
this.searchData.SortField = column.prop
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
}
|
||||
this.searchData.SortField = column.prop;
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="`${$t('trials:study:button:editVisit')}(1 | 2 | 3)`"
|
||||
width="500px"
|
||||
custom-class="base-dialog-wrapper"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="editVisitForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
size="small"
|
||||
label-width="100px"
|
||||
>
|
||||
<div class="base-dialog-body">
|
||||
<!--患者姓名-->
|
||||
<el-form-item
|
||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||
prop="reason"
|
||||
>
|
||||
<el-input v-model="form.reason" disabled />
|
||||
</el-form-item>
|
||||
<!--访视-->
|
||||
<el-form-item
|
||||
:label="$t('trials:auditRecord:table:visit')"
|
||||
prop="visit"
|
||||
>
|
||||
<el-select v-model="form.visit" clearable>
|
||||
<el-option
|
||||
v-for="item of $d.sex"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="base-dialog-footer"
|
||||
style="text-align: right; margin-top: 10px"
|
||||
>
|
||||
<el-form-item style="text-align: right">
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:disabled="btnLoading"
|
||||
@click="handleCancel"
|
||||
>
|
||||
{{ $t("common:button:cancel") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ $t("common:button:save") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: "editVisitDialog",
|
||||
props: {
|
||||
visible: {
|
||||
require: true,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
visit: null,
|
||||
},
|
||||
rules: {
|
||||
visit: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("trials:study:formRlue:selectVisit"),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
btnLoading: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
// 取消
|
||||
handleCancel() {
|
||||
this.$emit("update:visible", false);
|
||||
},
|
||||
// 保存
|
||||
async handleSave() {
|
||||
try {
|
||||
let validate = await this.$refs.editVisitForm.validate();
|
||||
if (!validate) return;
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
|
@ -3,28 +3,16 @@
|
|||
<!-- 搜索框 -->
|
||||
<template slot="search-container">
|
||||
<el-form :inline="true">
|
||||
<!-- Site -->
|
||||
<el-form-item :label="$t('trials:studyList:table:siteId')">
|
||||
<el-select
|
||||
v-model="searchData.SiteId"
|
||||
clearable
|
||||
filterable
|
||||
style="width:150px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of siteOptions"
|
||||
:key="item.SiteId"
|
||||
:label="item.TrialSiteCode"
|
||||
:value="item.SiteId"
|
||||
/>
|
||||
</el-select>
|
||||
<!-- 受试者编号 -->
|
||||
<el-form-item :label="$t('trials:subject:table:subjectId')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- Subject -->
|
||||
<el-form-item :label="$t('trials:studyList:table:subject')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width:140px" />
|
||||
<!-- 患者姓名 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- Visit -->
|
||||
<el-form-item :label="$t('trials:studyList:table:visit')">
|
||||
<!-- 性别 -->
|
||||
<el-form-item :label="$t('trials:subject:table:gender')">
|
||||
<el-select
|
||||
v-model="searchData.VisitPlanArray"
|
||||
clearable
|
||||
|
@ -33,253 +21,231 @@
|
|||
collapse-tags
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) of visitPlanOptions"
|
||||
:key="index"
|
||||
:label="item.VisitName"
|
||||
:value="item.VisitNum"
|
||||
v-for="item of $d.sex"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
<span style="float: left">{{ item.VisitName }}</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 申请号 -->
|
||||
<el-form-item :label="$t('trials:study:form:accessionNumber')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 140px" />
|
||||
</el-form-item>
|
||||
<!-- 检查设备 -->
|
||||
<el-form-item :label="$t('trials:studyList:table:modality')">
|
||||
<el-select
|
||||
v-model="searchData.VisitPlanArray"
|
||||
clearable
|
||||
filterable
|
||||
multiple
|
||||
collapse-tags
|
||||
>
|
||||
<el-option
|
||||
key="Other"
|
||||
label="Out of Plan"
|
||||
value="1.11"
|
||||
/>
|
||||
v-for="item of $d.sex"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 检查类型 -->
|
||||
<el-form-item :label="$t('trials:seletctedReviews:form:modality')">
|
||||
<el-select
|
||||
v-model="searchData.VisitPlanArray"
|
||||
clearable
|
||||
filterable
|
||||
multiple
|
||||
collapse-tags
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d.sex"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 检查日期 -->
|
||||
<el-form-item :label="$t('trials:audit:table:studyDate')">
|
||||
<el-date-picker
|
||||
v-model="searchData.date"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<!-- 状态 -->
|
||||
<el-form-item :label="$t('trials:seletctedReviews:table:status')">
|
||||
<el-select
|
||||
v-model="searchData.VisitPlanArray"
|
||||
clearable
|
||||
filterable
|
||||
multiple
|
||||
collapse-tags
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d.sex"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
{{ $t('common:button:search') }}
|
||||
{{ $t("common:button:search") }}
|
||||
</el-button>
|
||||
<!-- 重置 -->
|
||||
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
|
||||
{{ $t('common:button:reset') }}
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="el-icon-refresh-left"
|
||||
@click="handleReset"
|
||||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</template>
|
||||
|
||||
<!-- 检查列表 -->
|
||||
<template slot="main-container">
|
||||
<el-table
|
||||
v-loading="loading"
|
||||
v-adaptive="{bottomOffset:60}"
|
||||
v-adaptive="{ bottomOffset: 60 }"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortByColumn"
|
||||
>
|
||||
<el-table-column type="index" width="40" />
|
||||
<!-- Study ID -->
|
||||
<!-- 受试者编号 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:studyList:table:studyId')"
|
||||
:label="$t('trials:subject:table:subjectId')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- Image Type -->
|
||||
<!-- 患者编号 -->
|
||||
<el-table-column
|
||||
prop="IsDicom"
|
||||
:label="$t('trials:studyList:table:imageType')"
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadDicomList:table:pId')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.IsDicom" type="primary">DICOM</el-tag>
|
||||
<el-tag v-else type="danger">Non-DICOM</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="StudyTime"
|
||||
sortable="custom"
|
||||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot="header">
|
||||
<el-tooltip placement="top">
|
||||
<!-- Modality,Body Part Examined,Count,Study Date -->
|
||||
<!-- Study Info -->
|
||||
<div slot="content">
|
||||
{{ `${$t('trials:studyList:table:modality')}, ${$t('trials:studyList:table:bodyPart')}, ${$t('trials:studyList:table:studyDate')}, ${$t('trials:studyList:table:count')}` }}
|
||||
</div>
|
||||
<span>{{ $t('trials:studyList:table:studyInfo') }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<div style="display: flex;align-items: center">
|
||||
<div v-if="scope.row.Modalities">{{ scope.row.Modalities }}({{ scope.row.Count }}), </div>
|
||||
<div v-else style="color:#f44336;">N/A, </div>
|
||||
<div v-if="scope.row.Bodypart" style="margin:0 3px;">{{ getBodyPart(scope.row.Bodypart) }}, </div>
|
||||
<div v-else style="color:#f44336;margin:0 3px;">N/A, </div>
|
||||
<div v-if="scope.row.StudyTime">{{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }} </div>
|
||||
<div v-else style="color:#f44336;">N/A </div>
|
||||
<div>
|
||||
<!-- <el-popover v-if="scope.row.Count && scope.row.IsDicom" trigger="click" placement="bottom">
|
||||
<el-table v-loading="seriesLoading" :data="seriesList" height="200" size="small" class="seriesListOfStudy">
|
||||
<el-table-column
|
||||
prop="SeriesNumber"
|
||||
:label="$t('trials:studyList:table:seriesNum')"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column prop="Modality" :label="$t('trials:studyList:table:modality')" width="120" />
|
||||
|
||||
<el-table-column
|
||||
prop="Description"
|
||||
:label="$t('trials:studyList:table:description')"
|
||||
width="150"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
prop="SliceThickness"
|
||||
:label="$t('trials:studyList:table:sliceThickness')"
|
||||
width="120"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="InstanceCount"
|
||||
:label="$t('trials:studyList:table:instanceCount')"
|
||||
width="120"
|
||||
/>
|
||||
|
||||
<el-table-column :label="$t('common:action:action')" width="80">
|
||||
<template slot-scope="series">
|
||||
<router-link
|
||||
style="color: #428bca; padding: 2px 5px"
|
||||
tag="a"
|
||||
:to="{
|
||||
path: `/showdicom?studyId=${scope.row.Id}&studyCode=${scope.row.StudyCode}&modality=${scope.row.Modalities}&description=${scope.row.Description}&series=${JSON.stringify(series.row)}&type=Series&TokenKey=${tokenKey}`,
|
||||
}"
|
||||
target="_blank"
|
||||
>
|
||||
{{ $t('trials:studyList:button:view') }}
|
||||
</router-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div slot="reference" class="name-wrapper">
|
||||
<span style="color:#428bca;cursor:pointer;" @click="handleGetseriesList(scope.row)">
|
||||
{{ `${scope.row.Count}` }}
|
||||
</span>
|
||||
</div>
|
||||
</el-popover>
|
||||
<el-button
|
||||
v-else-if="scope.row.Count && !scope.row.IsDicom"
|
||||
type="text"
|
||||
@click.native.prevent="handlePreviewNonDicom(scope.row)"
|
||||
>
|
||||
{{ scope.row.Count }}
|
||||
</el-button> -->
|
||||
<!-- <span>({{ scope.row.Count }})</span> -->
|
||||
<!-- <span v-else style="color:#f44336;">N/A</span> -->
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
min-width="100"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot="header">
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">
|
||||
{{ `${$t('trials:studyList:table:visitName')}, ${$t('trials:studyList:table:visitNum')}` }}<br>
|
||||
</div>
|
||||
<span>{{ $t('trials:studyList:table:visit') }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.VisitName">{{ scope.row.VisitName }}, </span>
|
||||
<span v-else style="color:#f44336;">N/A, </span>
|
||||
<span>{{ scope.row.VisitNum }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="SubjectCode"
|
||||
:label="$t('trials:studyList:table:subject')"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 患者姓名 -->
|
||||
<el-table-column
|
||||
min-width="100"
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot="header">
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">
|
||||
{{ `${$t('trials:studyList:table:siteId')}, ${$t('trials:studyList:table:siteName')}` }}
|
||||
</div>
|
||||
<span>{{ $t('trials:studyList:table:site') }}</span>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.TrialSiteCode">{{ scope.row.TrialSiteCode }}, </span>
|
||||
<span v-else style="color:#f44336;">N/A, </span>
|
||||
<span v-if="scope.row.TrialSiteAliasName">{{ scope.row.TrialSiteAliasName }}</span>
|
||||
<span v-else style="color:#f44336;">N/A</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- 性别 -->
|
||||
<el-table-column
|
||||
prop="Uploader"
|
||||
:label="$t('trials:studyList:table:uploader')"
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:subject:table:gender')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- 申请号 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:study:form:accessionNumber')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- 检查设备 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:studyList:table:modality')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- 检查类型 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:audit:table:modality')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- 检查日期 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:audit:table:studyDate')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<!-- 访视 -->
|
||||
<el-table-column
|
||||
prop="StudyCode"
|
||||
:label="$t('trials:auditRecord:table:visit')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="UploadTime"
|
||||
:label="$t('trials:studyList:table:uploadTime')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="120"
|
||||
/>
|
||||
|
||||
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
|
||||
:label="$t('common:action:action')"
|
||||
min-width="100"
|
||||
fixed="right"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<!-- 查看 -->
|
||||
<el-button
|
||||
:disabled="!scope.row.Count"
|
||||
circle
|
||||
:title="$t('trials:studyList:button:view')"
|
||||
icon="el-icon-view"
|
||||
type="text"
|
||||
@click="handleViewStudy(scope.row)"
|
||||
/>
|
||||
<!-- 分享检查 -->
|
||||
<el-button
|
||||
v-hasPermi="['trials:trials-panel:study:share']"
|
||||
:disabled="!(scope.row.Count > 0 && scope.row.IsDicom)"
|
||||
circle
|
||||
:title="$t('trials:studyList:action:share')"
|
||||
icon="el-icon-share"
|
||||
@click="handleShareImage(scope.row)"
|
||||
/>
|
||||
>{{ $t("trials:studyList:button:view") }}</el-button
|
||||
>
|
||||
<!-- 修改访视 -->
|
||||
<el-button type="text" @click="editVisitFn(scope.row)">{{
|
||||
$t("trials:study:button:editVisit")
|
||||
}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页组件 -->
|
||||
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
|
||||
<pagination
|
||||
class="page"
|
||||
:total="total"
|
||||
:page.sync="searchData.PageIndex"
|
||||
:limit.sync="searchData.PageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<base-model :config="share_model">
|
||||
<template slot="dialog-body">
|
||||
<div>
|
||||
<i style="color:#428bca;" class="el-icon-success" />
|
||||
<i style="color: #428bca" class="el-icon-success" />
|
||||
<span>成功创建分享链接</span>
|
||||
</div>
|
||||
<div style="margin:10px 0;">
|
||||
链接:<el-input v-model="shareLink" readonly style="width:420px;" />
|
||||
<div style="margin: 10px 0">
|
||||
链接:<el-input v-model="shareLink" readonly style="width: 420px" />
|
||||
</div>
|
||||
<div style="margin-bottom:20px;">
|
||||
提取码: <el-input v-model="extractionCode" style="width:100px;" readonly />
|
||||
<div style="margin-bottom: 20px">
|
||||
提取码:
|
||||
<el-input v-model="extractionCode" style="width: 100px" readonly />
|
||||
</div>
|
||||
<div>
|
||||
<el-button type="primary" round @click="copyCode">复制链接及提取码</el-button>
|
||||
<el-button type="primary" round @click="copyCode"
|
||||
>复制链接及提取码</el-button
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
</base-model>
|
||||
|
@ -293,11 +259,17 @@
|
|||
append-to-body
|
||||
custom-class="base-dialog-wrapper"
|
||||
>
|
||||
<div class="base-modal-body" style="border:2px solid #ccc;padding: 10px">
|
||||
<NonDicomPreview v-if="previewNonDicomVisible" :none-dicom-id="rowData.Id" />
|
||||
<div
|
||||
class="base-modal-body"
|
||||
style="border: 2px solid #ccc; padding: 10px"
|
||||
>
|
||||
<NonDicomPreview
|
||||
v-if="previewNonDicomVisible"
|
||||
:none-dicom-id="rowData.Id"
|
||||
/>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<editVisit :visible.sync="editVisitVisible" />
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
|
@ -306,29 +278,35 @@ import {
|
|||
getTrialSiteSelect,
|
||||
getSeriesList,
|
||||
getTrialVisitStageSelect,
|
||||
getNoneDicomStudyFileList
|
||||
|
||||
} from '@/api/trials'
|
||||
import { createImageShare } from '@/api/share'
|
||||
import BaseContainer from '@/components/BaseContainer'
|
||||
import Pagination from '@/components/Pagination'
|
||||
import BaseModel from '@/components/BaseModel'
|
||||
import NonDicomPreview from './components/nonDicomPreview'
|
||||
import moment from 'moment'
|
||||
import { getToken } from '@/utils/auth'
|
||||
getNoneDicomStudyFileList,
|
||||
} from "@/api/trials";
|
||||
import { createImageShare } from "@/api/share";
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import BaseModel from "@/components/BaseModel";
|
||||
import NonDicomPreview from "./components/nonDicomPreview";
|
||||
import editVisit from "./components/edit-visit";
|
||||
import moment from "moment";
|
||||
import { getToken } from "@/utils/auth";
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
SubjectInfo: '',
|
||||
SubjectInfo: "",
|
||||
VisitPlanArray: [],
|
||||
Status: '',
|
||||
SiteId: '',
|
||||
Status: "",
|
||||
SiteId: "",
|
||||
PageIndex: 1,
|
||||
PageSize: 20
|
||||
}
|
||||
}
|
||||
PageSize: 20,
|
||||
};
|
||||
};
|
||||
export default {
|
||||
name: 'StudyList',
|
||||
components: { BaseContainer, Pagination, BaseModel, NonDicomPreview },
|
||||
name: "StudyList",
|
||||
components: {
|
||||
BaseContainer,
|
||||
Pagination,
|
||||
BaseModel,
|
||||
NonDicomPreview,
|
||||
editVisit,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
searchData: searchDataDefault(),
|
||||
|
@ -340,191 +318,213 @@ export default {
|
|||
seriesList: [],
|
||||
nonDicomfilesList: [],
|
||||
rowData: {},
|
||||
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
|
||||
share_model: { visible: false, title: '影像分享', showClose: true, width: '500px' },
|
||||
shareLink: '',
|
||||
extractionCode: '',
|
||||
userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
|
||||
share_model: {
|
||||
visible: false,
|
||||
title: "影像分享",
|
||||
showClose: true,
|
||||
width: "500px",
|
||||
},
|
||||
shareLink: "",
|
||||
extractionCode: "",
|
||||
moment,
|
||||
filesLoading: '',
|
||||
seriesLoading: '',
|
||||
filesLoading: "",
|
||||
seriesLoading: "",
|
||||
previewNonDicomVisible: false,
|
||||
trialId: this.$route.query.trialId,
|
||||
tokenKey: getToken(),
|
||||
openWindow: null
|
||||
}
|
||||
openWindow: null,
|
||||
|
||||
editVisitVisible: false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getSite()
|
||||
this.getVisitPlanOptions()
|
||||
this.getList()
|
||||
this.getSite();
|
||||
this.getVisitPlanOptions();
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
// 修改访视
|
||||
editVisitFn() {
|
||||
this.editVisitVisible = true;
|
||||
},
|
||||
// 获取检查列表数据
|
||||
getList() {
|
||||
this.loading = true
|
||||
this.searchData.TrialId = this.trialId
|
||||
this.loading = true;
|
||||
this.searchData.TrialId = this.trialId;
|
||||
getDicomAndNoneDicomStudyList(this.searchData)
|
||||
.then((res) => {
|
||||
this.loading = false
|
||||
this.list = res.Result.CurrentPageData
|
||||
this.total = res.Result.TotalCount
|
||||
this.loading = false;
|
||||
this.list = res.Result.CurrentPageData;
|
||||
this.total = res.Result.TotalCount;
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false
|
||||
})
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
// 获取某个Dicom检查下的序列信息
|
||||
handleGetseriesList(row) {
|
||||
this.seriesLoading = true
|
||||
this.seriesList = []
|
||||
getSeriesList(row.Id).then((res) => {
|
||||
this.seriesLoading = false
|
||||
this.seriesList = res.Result
|
||||
}).catch(() => {
|
||||
this.seriesLoading = false
|
||||
})
|
||||
this.seriesLoading = true;
|
||||
this.seriesList = [];
|
||||
getSeriesList(row.Id)
|
||||
.then((res) => {
|
||||
this.seriesLoading = false;
|
||||
this.seriesList = res.Result;
|
||||
})
|
||||
.catch(() => {
|
||||
this.seriesLoading = false;
|
||||
});
|
||||
},
|
||||
// 获取某个非Dicom检查下的文件
|
||||
handleGetFilesList(id) {
|
||||
this.filesLoading = true
|
||||
getNoneDicomStudyFileList(id).then(res => {
|
||||
this.nonDicomfilesList = res.Result
|
||||
this.filesLoading = false
|
||||
}).catch(() => { this.filesLoading = false })
|
||||
this.filesLoading = true;
|
||||
getNoneDicomStudyFileList(id)
|
||||
.then((res) => {
|
||||
this.nonDicomfilesList = res.Result;
|
||||
this.filesLoading = false;
|
||||
})
|
||||
.catch(() => {
|
||||
this.filesLoading = false;
|
||||
});
|
||||
},
|
||||
// 预览当前检查下的影像
|
||||
handleViewStudy(row) {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close()
|
||||
this.openWindow.close();
|
||||
}
|
||||
if (row.IsDicom) {
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showdicom?studyId=${row.Id}&TokenKey=${this.tokenKey}&type=Study`
|
||||
})
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
path: `/showdicom?studyId=${row.Id}&TokenKey=${this.tokenKey}&type=Study`,
|
||||
});
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
} else {
|
||||
// this.rowData = { ...row }
|
||||
// this.previewNonDicomVisible = true
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`
|
||||
})
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`,
|
||||
});
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
}
|
||||
},
|
||||
handlePreviewNonDicom(row) {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close()
|
||||
this.openWindow.close();
|
||||
}
|
||||
const routeData = this.$router.resolve({
|
||||
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`
|
||||
})
|
||||
this.openWindow = window.open(routeData.href, '_blank')
|
||||
path: `/showNoneDicoms?subjectVisitId=${row.SubjectVisitId}&studyId=${row.Id}&TokenKey=${this.tokenKey}`,
|
||||
});
|
||||
this.openWindow = window.open(routeData.href, "_blank");
|
||||
},
|
||||
// 预览
|
||||
handlePreview(row) {
|
||||
if (this.openWindow) {
|
||||
this.openWindow.close()
|
||||
this.openWindow.close();
|
||||
}
|
||||
this.openWindow = window.open(row.FullFilePath, '_blank')
|
||||
this.openWindow = window.open(row.FullFilePath, "_blank");
|
||||
},
|
||||
// 格式化状态码
|
||||
studyStatusFormatter(StudyStatus) {
|
||||
if (StudyStatus === 5) return 'Uploaded'
|
||||
else if (StudyStatus === 1) return 'Uploading'
|
||||
else if (StudyStatus === 7) return 'QA Requested'
|
||||
else if (StudyStatus === 10) return 'In QA'
|
||||
else if (StudyStatus === 25) return 'QA-Passed'
|
||||
else if (StudyStatus === 26) return 'QA-Failed'
|
||||
else if (StudyStatus === 28) return 'Anonymizing'
|
||||
else if (StudyStatus === 30) return 'Anonymized'
|
||||
else if (StudyStatus === 32) return 'Anonymizing Failed'
|
||||
else if (StudyStatus === 34) return 'Forwarding'
|
||||
else if (StudyStatus === 36) return 'Forwarded'
|
||||
else if (StudyStatus === 38) return 'Forwarding Failed'
|
||||
else return ''
|
||||
if (StudyStatus === 5) return "Uploaded";
|
||||
else if (StudyStatus === 1) return "Uploading";
|
||||
else if (StudyStatus === 7) return "QA Requested";
|
||||
else if (StudyStatus === 10) return "In QA";
|
||||
else if (StudyStatus === 25) return "QA-Passed";
|
||||
else if (StudyStatus === 26) return "QA-Failed";
|
||||
else if (StudyStatus === 28) return "Anonymizing";
|
||||
else if (StudyStatus === 30) return "Anonymized";
|
||||
else if (StudyStatus === 32) return "Anonymizing Failed";
|
||||
else if (StudyStatus === 34) return "Forwarding";
|
||||
else if (StudyStatus === 36) return "Forwarded";
|
||||
else if (StudyStatus === 38) return "Forwarding Failed";
|
||||
else return "";
|
||||
},
|
||||
// 获取site下拉框数据
|
||||
getSite() {
|
||||
getTrialSiteSelect(this.trialId).then((res) => {
|
||||
this.siteOptions = res.Result
|
||||
})
|
||||
this.siteOptions = res.Result;
|
||||
});
|
||||
},
|
||||
// 获取visit下拉框数据
|
||||
getVisitPlanOptions() {
|
||||
getTrialVisitStageSelect(this.trialId)
|
||||
.then((res) => {
|
||||
this.visitPlanOptions = res.Result
|
||||
})
|
||||
getTrialVisitStageSelect(this.trialId).then((res) => {
|
||||
this.visitPlanOptions = res.Result;
|
||||
});
|
||||
},
|
||||
// 分享影像链接
|
||||
handleShareImage(row) {
|
||||
this.shareLink = ''
|
||||
this.extractionCode = ''
|
||||
this.shareLink = "";
|
||||
this.extractionCode = "";
|
||||
const params = {
|
||||
TrialId: row.TrialId,
|
||||
SiteId: row.SiteId,
|
||||
SubjectId: row.SubjectId,
|
||||
StudyId: row.Id
|
||||
}
|
||||
this.loading = true
|
||||
createImageShare(params).then((res) => {
|
||||
this.loading = false
|
||||
if (res.IsSuccess) {
|
||||
// this.shareLink = `${window.location.origin}${window.location.pathname}#/imagesShare?id=${res.Result.ResourceId}`
|
||||
this.shareLink = `${window.location.origin}/imagesShare?id=${res.Result.ResourceId}`
|
||||
this.extractionCode = res.Result.Password
|
||||
this.share_model.visible = true
|
||||
}
|
||||
}).catch(() => { this.loading = false })
|
||||
StudyId: row.Id,
|
||||
};
|
||||
this.loading = true;
|
||||
createImageShare(params)
|
||||
.then((res) => {
|
||||
this.loading = false;
|
||||
if (res.IsSuccess) {
|
||||
// this.shareLink = `${window.location.origin}${window.location.pathname}#/imagesShare?id=${res.Result.ResourceId}`
|
||||
this.shareLink = `${window.location.origin}/imagesShare?id=${res.Result.ResourceId}`;
|
||||
this.extractionCode = res.Result.Password;
|
||||
this.share_model.visible = true;
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
getBodyPart(bodyPart) {
|
||||
if (!bodyPart) return ''
|
||||
var separator = ','
|
||||
if (bodyPart.indexOf('|') > -1) {
|
||||
separator = '|'
|
||||
} else if (bodyPart.indexOf(',') > -1) {
|
||||
separator = ','
|
||||
} else if (bodyPart.indexOf(',') > -1) {
|
||||
separator = ','
|
||||
if (!bodyPart) return "";
|
||||
var separator = ",";
|
||||
if (bodyPart.indexOf("|") > -1) {
|
||||
separator = "|";
|
||||
} else if (bodyPart.indexOf(",") > -1) {
|
||||
separator = ",";
|
||||
} else if (bodyPart.indexOf(",") > -1) {
|
||||
separator = ",";
|
||||
}
|
||||
var arr = bodyPart.split(separator)
|
||||
var newArr = arr.map(i => {
|
||||
return this.$fd('Bodypart', i.trim())
|
||||
})
|
||||
return newArr.join(' | ')
|
||||
var arr = bodyPart.split(separator);
|
||||
var newArr = arr.map((i) => {
|
||||
return this.$fd("Bodypart", i.trim());
|
||||
});
|
||||
return newArr.join(" | ");
|
||||
},
|
||||
// 复制
|
||||
copyCode() {
|
||||
this.$copyText(`链接: ${this.shareLink} 提取码: ${this.extractionCode}`).then(
|
||||
res => {
|
||||
this.$message.success('复制成功')
|
||||
}
|
||||
).catch(() => { this.$alert('复制失败') })
|
||||
this.$copyText(`链接: ${this.shareLink} 提取码: ${this.extractionCode}`)
|
||||
.then((res) => {
|
||||
this.$message.success("复制成功");
|
||||
})
|
||||
.catch(() => {
|
||||
this.$alert("复制失败");
|
||||
});
|
||||
},
|
||||
onCopyError() {
|
||||
this.$alert('复制失败')
|
||||
this.$alert("复制失败");
|
||||
},
|
||||
// 查询
|
||||
handleSearch() {
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
// 重置
|
||||
handleReset() {
|
||||
this.searchData = searchDataDefault()
|
||||
this.getList()
|
||||
this.searchData = searchDataDefault();
|
||||
this.getList();
|
||||
},
|
||||
// 排序
|
||||
handleSortByColumn(column) {
|
||||
if (column.order === 'ascending') {
|
||||
this.searchData.Asc = true
|
||||
if (column.order === "ascending") {
|
||||
this.searchData.Asc = true;
|
||||
} else {
|
||||
this.searchData.Asc = false
|
||||
this.searchData.Asc = false;
|
||||
}
|
||||
this.searchData.SortField = column.prop
|
||||
this.searchData.PageIndex = 1
|
||||
this.getList()
|
||||
}
|
||||
}
|
||||
}
|
||||
this.searchData.SortField = column.prop;
|
||||
this.searchData.PageIndex = 1;
|
||||
this.getList();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
:before-close="beforeCloseStudyDig"
|
||||
>
|
||||
<span slot="title"
|
||||
>{{ $t("trials:inspection:button:addTrials") }}({{
|
||||
>{{ $t("trials:subject:title:addSubject") }}({{
|
||||
$t("trials:uploadDicomList:table:patientInfo")
|
||||
}}:T0001132,ZhangSan)</span
|
||||
>
|
||||
|
@ -15,7 +15,7 @@
|
|||
<el-form
|
||||
:inline="true"
|
||||
:model="submitMessage"
|
||||
class="demo-form-inline"
|
||||
class="demo-form-inline topForm"
|
||||
:rules="rules"
|
||||
>
|
||||
<!--受试者编号-->
|
||||
|
@ -25,24 +25,27 @@
|
|||
>
|
||||
<el-input v-model="submitMessage.subjectId"></el-input>
|
||||
</el-form-item>
|
||||
<el-button type="primary" @click="addTrials">
|
||||
{{ $t("trials:addRP:button:confirmAddPR") }}
|
||||
</el-button>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="search">
|
||||
<p>{{ $t("trials:inspection:message:checkAddTrials") }}</p>
|
||||
<p>{{ $t("trials:subject:messge:selectPatient") }}</p>
|
||||
<div class="form">
|
||||
<el-form :inline="true" class="base-search-form">
|
||||
<!-- 研究方案编号 -->
|
||||
<el-form-item :label="$t('trials:trials-list:table:researchNumber')">
|
||||
<!-- 患者编号 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
|
||||
</el-form-item>
|
||||
<!-- 研究名称 -->
|
||||
<el-form-item :label="$t('trials:trials-list:table:researchName')">
|
||||
<!-- 患者姓名 -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
|
||||
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
|
||||
</el-form-item>
|
||||
<!-- 申办方 -->
|
||||
<!-- DICOM AE -->
|
||||
<el-form-item
|
||||
class="my_multiple"
|
||||
:label="$t('trials:trials-list:table:sponsor')"
|
||||
:label="$t('trials:inspection:table:DICOMAE')"
|
||||
>
|
||||
<el-select
|
||||
v-model="searchData.VisitPlanArray"
|
||||
|
@ -59,6 +62,17 @@
|
|||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 检查日期 -->
|
||||
<el-form-item :label="$t('trials:uploadedDicoms:table:studyDate')">
|
||||
<el-date-picker
|
||||
v-model="searchData.date"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button
|
||||
|
@ -78,9 +92,6 @@
|
|||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-button type="primary" @click="addTrials">
|
||||
{{ $t("trials:addRP:button:confirmAddPR") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<!--可加入项目列表-->
|
||||
|
@ -95,53 +106,61 @@
|
|||
@selection-change="handleSelectChange"
|
||||
>
|
||||
<el-table-column type="selection" align="center" width="45" />
|
||||
<!--项目类型-->
|
||||
<!--患者编号-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:trials-list:form:trialType')"
|
||||
:label="$t('trials:uploadDicomList:table:pId')"
|
||||
show-overflow-tooltip
|
||||
min-width="140"
|
||||
></el-table-column>
|
||||
<!--研究方案号-->
|
||||
<!--患者姓名-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:trials-list:table:researchNumber')"
|
||||
:label="$t('trials:uploadDicomList:table:patientName')"
|
||||
show-overflow-tooltip
|
||||
min-width="140"
|
||||
></el-table-column>
|
||||
<!--研究名称-->
|
||||
<!--出生日期-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:trials-list:table:researchName')"
|
||||
:label="$t('trials:inspection:table:birthdate')"
|
||||
show-overflow-tooltip
|
||||
min-width="140"
|
||||
></el-table-column>
|
||||
<!--申办方-->
|
||||
<!--性别-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:trials-list:table:sponsor')"
|
||||
:label="$t('trials:subject:table:gender')"
|
||||
show-overflow-tooltip
|
||||
min-width="140"
|
||||
></el-table-column>
|
||||
<!--状态-->
|
||||
<!--检查时间-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:trials-list:table:status')"
|
||||
:label="$t('trials:audit:table:studyDate')"
|
||||
show-overflow-tooltip
|
||||
min-width="140"
|
||||
></el-table-column>
|
||||
<!--创建日期-->
|
||||
<!--DiCOM AE-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:trials-list:table:createDate')"
|
||||
:label="$t('trials:inspection:table:DICOMAE')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--检查数-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:studyList:table:count')"
|
||||
show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<!--最新接收时间-->
|
||||
<el-table-column
|
||||
align="center"
|
||||
prop="IsUrgent"
|
||||
:label="$t('trials:inspection:table:latestReceiveTime')"
|
||||
show-overflow-tooltip
|
||||
min-width="140"
|
||||
></el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
@ -193,7 +212,7 @@ export default {
|
|||
beforeCloseStudyDig() {
|
||||
this.$emit("update:visible", false);
|
||||
},
|
||||
// 加入项目
|
||||
// 确认添加
|
||||
addTrials() {
|
||||
this.$emit("update:visible", false);
|
||||
this.$emit("handleOpenDialog", {}, "confirm");
|
||||
|
@ -215,6 +234,12 @@ export default {
|
|||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.topForm {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.search {
|
||||
display: flex;
|
||||
|
|
|
@ -70,7 +70,7 @@
|
|||
v-hasPermi="['trials:trials-panel:subject:new']"
|
||||
type="primary"
|
||||
icon="el-icon-plus"
|
||||
@click="handleAdd"
|
||||
@click="handleOpenDialog({}, 'addSubject')"
|
||||
>
|
||||
{{ $t("common:button:new") }}
|
||||
</el-button>
|
||||
|
@ -269,7 +269,12 @@
|
|||
/>
|
||||
</el-dialog>
|
||||
<!--添加受试者-->
|
||||
<addSubject :visible.sync="addSubjectVsible" />
|
||||
<addSubject
|
||||
:visible.sync="addSubjectTrialsVisible"
|
||||
@handleOpenDialog="handleOpenDialog"
|
||||
/>
|
||||
<!--确认访视-->
|
||||
<confirmVisitList :visible.sync="confirmTrialsVisible" />
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
|
@ -286,6 +291,7 @@ import SubjectStatusForm from "./components/SubjectStatusForm";
|
|||
import MessageTable from "./components/MessageTable";
|
||||
import moment from "moment";
|
||||
import addSubject from "./components/add-subject.vue";
|
||||
import confirmVisitList from "../../../trials-inspection/components/confirm-visit-list.vue";
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
Code: "",
|
||||
|
@ -305,6 +311,7 @@ export default {
|
|||
SubjectStatusForm,
|
||||
MessageTable,
|
||||
addSubject,
|
||||
confirmVisitList,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
@ -325,7 +332,10 @@ export default {
|
|||
trialId: "",
|
||||
hasCrcRoute: false,
|
||||
hasQCRoute: false,
|
||||
addSubjectVsible: false,
|
||||
// 添加受试者
|
||||
addSubjectTrialsVisible: false,
|
||||
// 确认访视
|
||||
confirmTrialsVisible: false,
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
|
@ -377,11 +387,9 @@ export default {
|
|||
});
|
||||
},
|
||||
// 新增
|
||||
handleAdd() {
|
||||
this.addSubjectVsible = true;
|
||||
// this.rowData = {};
|
||||
// this.editDialog.title = this.$t("trials:subject:dialogTitle:new");
|
||||
// this.editDialog.visible = true;
|
||||
// 打开弹框
|
||||
handleOpenDialog(item, key) {
|
||||
this[`${key}TrialsVisible`] = true;
|
||||
},
|
||||
// 编辑
|
||||
handleEdit(row) {
|
||||
|
|
Loading…
Reference in New Issue