Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/hir-web into main
commit
7a0a8bfa5c
|
@ -2,12 +2,10 @@
|
|||
import Vue from 'vue'
|
||||
import 'normalize.css/normalize.css' // A modern alternative to CSS resets
|
||||
|
||||
import ElementUI, { MessageBox } from 'element-ui'
|
||||
import ElementUI from 'element-ui'
|
||||
import { getBasicDataAllSelect, getFrontInternationalizationList } from '@/api/dictionary/dictionary'
|
||||
// import 'element-ui/lib/theme-chalk/index.css'
|
||||
import './assets/css/theme-blue/index.css' // 浅绿色主题
|
||||
import './assets/css/iconfont/index.css' // 阿里巴巴图标库
|
||||
// import locale from 'element-ui/lib/locale/lang/en' // lang i18n
|
||||
import i18n from './lang'
|
||||
import '@/styles/index.scss' // global css
|
||||
|
||||
|
@ -23,10 +21,7 @@ import '@/permission' // permission control
|
|||
import md5 from 'js-md5'
|
||||
import VueClipboard from 'vue-clipboard2'
|
||||
Vue.use(VueClipboard)
|
||||
// import htmlToPdf from './utils/htmlToPdf'
|
||||
// Vue.use(htmlToPdf)
|
||||
import permission from './utils/permission'
|
||||
import { OSSclient } from './utils/oss'
|
||||
Vue.use(permission)
|
||||
|
||||
import Viewer from 'v-viewer'
|
||||
|
|
|
@ -10,10 +10,18 @@ import { OSSclient } from './utils/oss'
|
|||
|
||||
NProgress.configure({ showSpinner: false })
|
||||
|
||||
const whiteList = ['/activate','/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms']
|
||||
|
||||
const whiteList = ['/activate', '/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms']
|
||||
// 影像页关闭
|
||||
Vue.prototype.$openWindow = null
|
||||
Vue.prototype.$setOpenWindow = (openWindow) => {
|
||||
if (Vue.prototype.$openWindow) {
|
||||
Vue.prototype.$openWindow.close();
|
||||
}
|
||||
Vue.prototype.$openWindow = openWindow;
|
||||
}
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
NProgress.start()
|
||||
Vue.prototype.$setOpenWindow();
|
||||
// 设置页面标题
|
||||
// document.title = getPageTitle(to.meta.title)
|
||||
|
||||
|
|
|
@ -14,8 +14,8 @@ service.interceptors.request.use(
|
|||
config => {
|
||||
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
|
||||
var language = zzSessionStorage.getItem('lang')
|
||||
config.headers['Accept-Language'] = language === 'en'?'en-US,en;q=0.5':'zh-CN,zh;q=0.9'
|
||||
console.log(config.headers)
|
||||
config.headers['Accept-Language'] = language === 'en' ? 'en-US,en;q=0.5' : 'zh-CN,zh;q=0.9'
|
||||
// console.log(config.headers)
|
||||
if (store.getters.token) {
|
||||
config.headers.Authorization = `Bearer ${store.getters.token}`
|
||||
}
|
||||
|
@ -30,14 +30,14 @@ service.interceptors.response.use(
|
|||
response => {
|
||||
const res = response.data
|
||||
let fileReader = new FileReader();
|
||||
fileReader.onload = function() {
|
||||
fileReader.onload = function () {
|
||||
try {
|
||||
let jsonData = JSON.parse(fileReader.result); // 如果是普通对象数据,后台转换失败
|
||||
if (!jsonData.IsSuccess && jsonData.ErrorMessage) {
|
||||
MessageBox.confirm(jsonData.ErrorMessage, {
|
||||
MessageBox.confirm(jsonData.ErrorMessage, {
|
||||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
return Promise.reject(jsonData)
|
||||
}
|
||||
|
@ -66,19 +66,19 @@ service.interceptors.response.use(
|
|||
if (error && error.response) {
|
||||
const status = error.response.status
|
||||
switch (status) {
|
||||
case 400: message = store.state.lang.language === 'en'? 'Request error' : '请求错误'; break
|
||||
case 401: message = store.state.lang.language === 'en'? 'Not authorized or login timed out. Please log in again.' : '未授权或登陆超时,请重新登录'; break
|
||||
case 400: message = store.state.lang.language === 'en' ? 'Request error' : '请求错误'; break
|
||||
case 401: message = store.state.lang.language === 'en' ? 'Not authorized or login timed out. Please log in again.' : '未授权或登陆超时,请重新登录'; break
|
||||
case 403: message = error.response.data.ErrorMessage; break
|
||||
case 404: message = store.state.lang.language === 'en'? 'Request address error' : `请求地址出错`; break
|
||||
case 405: message = store.state.lang.language === 'en'? 'Interface parameter error or request method inconsistency' : `接口参数传递错误,或者请求方法不一致`; break
|
||||
case 408: message = store.state.lang.language === 'en'? 'Request timed out' : '请求超时'; break
|
||||
case 429: message = store.state.lang.language === 'en'? 'The application service limits the traffic. Your requests are too frequent. Please try again later.' : '应用服务限流,您的请求过于频繁,请稍后再试'; break
|
||||
case 500: message = store.state.lang.language === 'en'? 'Internal server error, and unable to complete the request. Software release might be in process. Please contact the administrator.' : '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break
|
||||
case 501: message = store.state.lang.language === 'en'? 'Service has not been implemented.' : '服务未实现'; break
|
||||
case 502: message = store.state.lang.language === 'en'? 'System is being upgraded. Please wait patiently.' : '系统正在升级,请耐心等待。'; break
|
||||
case 503: message = store.state.lang.language === 'en'? 'Service is not available' : '服务不可用'; break
|
||||
case 504: message = store.state.lang.language === 'en'? 'Gateway timed out' : '网关超时'; break
|
||||
case 505: message = store.state.lang.language === 'en'? 'HTTP version is not supported' : 'HTTP版本不受支持'; break
|
||||
case 404: message = store.state.lang.language === 'en' ? 'Request address error' : `请求地址出错`; break
|
||||
case 405: message = store.state.lang.language === 'en' ? 'Interface parameter error or request method inconsistency' : `接口参数传递错误,或者请求方法不一致`; break
|
||||
case 408: message = store.state.lang.language === 'en' ? 'Request timed out' : '请求超时'; break
|
||||
case 429: message = store.state.lang.language === 'en' ? 'The application service limits the traffic. Your requests are too frequent. Please try again later.' : '应用服务限流,您的请求过于频繁,请稍后再试'; break
|
||||
case 500: message = store.state.lang.language === 'en' ? 'Internal server error, and unable to complete the request. Software release might be in process. Please contact the administrator.' : '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break
|
||||
case 501: message = store.state.lang.language === 'en' ? 'Service has not been implemented.' : '服务未实现'; break
|
||||
case 502: message = store.state.lang.language === 'en' ? 'System is being upgraded. Please wait patiently.' : '系统正在升级,请耐心等待。'; break
|
||||
case 503: message = store.state.lang.language === 'en' ? 'Service is not available' : '服务不可用'; break
|
||||
case 504: message = store.state.lang.language === 'en' ? 'Gateway timed out' : '网关超时'; break
|
||||
case 505: message = store.state.lang.language === 'en' ? 'HTTP version is not supported' : 'HTTP版本不受支持'; break
|
||||
default: break
|
||||
}
|
||||
if (error.response.status === 401) {
|
||||
|
@ -100,7 +100,7 @@ service.interceptors.response.use(
|
|||
type: 'warning',
|
||||
showCancelButton: false,
|
||||
confirmButtonText: '确定',
|
||||
callback: action => {}
|
||||
callback: action => { }
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@
|
|||
<el-form-item
|
||||
:label="$t('trials:researchForm:form:checkCode')"
|
||||
prop="CheckCode"
|
||||
:maxlength="10"
|
||||
:maxlength="6"
|
||||
>
|
||||
<el-input v-model="password.CheckCode" type="number" />
|
||||
</el-form-item>
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
width="500px"
|
||||
custom-class="base-dialog-wrapper"
|
||||
append-to-body
|
||||
:before-close="handleCancel"
|
||||
>
|
||||
<el-form
|
||||
ref="editVisitForm"
|
||||
|
|
|
@ -3,7 +3,10 @@
|
|||
<div ref="leftContainer" class="left">
|
||||
<el-form :inline="true">
|
||||
<!--AE Title-->
|
||||
<el-form-item label="AE Title" prop="CalledAE">
|
||||
<el-form-item
|
||||
:label="$t('system:dicom:search:AETitle')"
|
||||
prop="CalledAE"
|
||||
>
|
||||
<el-input
|
||||
v-model="searchData.CalledAE"
|
||||
style="width: 140px"
|
||||
|
@ -11,11 +14,11 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
<!--IP-->
|
||||
<el-form-item label="IP" prop="IP">
|
||||
<el-form-item :label="$t('system:dicom:search:IP')" prop="IP">
|
||||
<el-input v-model="searchData.IP" style="width: 140px" clearable />
|
||||
</el-form-item>
|
||||
<!--Port-->
|
||||
<el-form-item label="Port" prop="Port">
|
||||
<el-form-item :label="$t('system:dicom:search:Port')" prop="Port">
|
||||
<el-input v-model="searchData.Port" style="width: 140px" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
|
@ -41,44 +44,43 @@
|
|||
>
|
||||
<!--AE Title-->
|
||||
<el-table-column
|
||||
label="AE Title"
|
||||
:label="$t('system:dicom:table:AETitle')"
|
||||
prop="CalledAE"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--IP-->
|
||||
<el-table-column
|
||||
label="IP"
|
||||
:label="$t('system:dicom:table:IP')"
|
||||
prop="IP"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--Port-->
|
||||
<el-table-column
|
||||
label="Port"
|
||||
:label="$t('system:dicom:table:Port')"
|
||||
prop="Port"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--Modality-->
|
||||
<el-table-column
|
||||
label="Modality"
|
||||
:label="$t('system:dicom:table:Modality')"
|
||||
prop="Modality"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!--Description-->
|
||||
<el-table-column
|
||||
label="Description"
|
||||
:label="$t('system:dicom:table:Description')"
|
||||
prop="Description"
|
||||
min-width="120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column
|
||||
label="actions"
|
||||
:label="$t('system:dicom:table:action')"
|
||||
fixed="right"
|
||||
prop="UserTypeShortName"
|
||||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
|
@ -87,7 +89,7 @@
|
|||
type="text"
|
||||
v-hasPermi="['system:dicom:edit']"
|
||||
@click="openDialog('edit', scope.row)"
|
||||
>编辑</el-button
|
||||
>{{ $t("system:dicom:table:edit") }}</el-button
|
||||
>
|
||||
<el-button
|
||||
size="mini"
|
||||
|
@ -212,7 +214,9 @@ export default {
|
|||
},
|
||||
// 测试连通性
|
||||
async test(item) {
|
||||
this.loading = true;
|
||||
let res = await testConnect(item.Id);
|
||||
this.loading = false;
|
||||
if (res.IsSuccess && res.Result) {
|
||||
this.$message.success(this.$t("system:dicomAE:connect:success"));
|
||||
} else {
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
>
|
||||
<el-select v-model="form.NoticeLevelEnum" clearable size="small">
|
||||
<el-option
|
||||
v-for="item of dict.type.NoteLevel"
|
||||
v-for="item of $d.NoteLevel"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.raw.Code * 1"
|
||||
|
@ -27,10 +27,10 @@
|
|||
>
|
||||
<el-select v-model="form.NoticeTypeEnum" clearable size="small">
|
||||
<el-option
|
||||
v-for="item of dict.type.NoteType"
|
||||
:key="item.value"
|
||||
v-for="item of $d.NoteType"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.raw.Code * 1"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -44,10 +44,10 @@
|
|||
size="small"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of dict.type.NoticeApplicableTrial"
|
||||
:key="item.value"
|
||||
v-for="item of $d.TrialType"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.raw.Code * 1"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -75,10 +75,10 @@
|
|||
>
|
||||
<el-select v-model="form.NoticeModeEnum" clearable size="small">
|
||||
<el-option
|
||||
v-for="item of dict.type.NoticeMode"
|
||||
v-for="item of $d.NoticeMode"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.raw.Code * 1"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
>
|
||||
<el-select v-model="searchData.NoticeTypeEnum" clearable size="small">
|
||||
<el-option
|
||||
v-for="item of $d.TrialType"
|
||||
v-for="item of $d.NoteType"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
|
@ -42,8 +42,8 @@
|
|||
size="small"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d.NoticeApplicableTrial"
|
||||
:key="item.value"
|
||||
v-for="item of $d.TrialType"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
|
@ -60,10 +60,10 @@
|
|||
size="small"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of $d.UserType"
|
||||
v-for="item of roleList"
|
||||
:key="item.Id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
:label="item.UserTypeShortName"
|
||||
:value="item.Id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -188,10 +188,10 @@
|
|||
>
|
||||
<template slot-scope="scope">
|
||||
{{
|
||||
$d.NoticeApplicableTrial.find((v) => {
|
||||
$d.TrialType.find((v) => {
|
||||
return v.raw.Code * 1 === scope.row.ApplicableProjectEnum;
|
||||
})
|
||||
? $d.NoticeApplicableTrial.find((v) => {
|
||||
? $d.TrialType.find((v) => {
|
||||
return v.raw.Code * 1 === scope.row.ApplicableProjectEnum;
|
||||
}).label
|
||||
: ""
|
||||
|
@ -237,7 +237,7 @@
|
|||
show-overflow-tooltip
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.StartDate }}-{{ scope.row.EndDate }}
|
||||
{{ scope.row.StartDate }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
|
@ -287,9 +287,11 @@
|
|||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
v-if="
|
||||
hasPermi(['system:notice:edit']) ||
|
||||
hasPermi(['system:notice:publish']) ||
|
||||
hasPermi(['system:notice:back'])
|
||||
hasPermi([
|
||||
'system:notice:edit',
|
||||
'system:notice:publish',
|
||||
'system:notice:back',
|
||||
])
|
||||
"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
|
@ -436,7 +438,11 @@ export default {
|
|||
getUserTypeRoleList() {
|
||||
getUserTypeRoleList({})
|
||||
.then((res) => {
|
||||
this.roleList = res.Result;
|
||||
this.roleList = res.Result.map((item) => {
|
||||
if ([4, 5, 8, 9, 12, 14].includes(item.UserTypeEnum)) {
|
||||
return item;
|
||||
}
|
||||
}).filter((item) => item);
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
|
|
|
@ -76,13 +76,12 @@
|
|||
ref="userType"
|
||||
v-model="user.UserTypeId"
|
||||
size="small"
|
||||
placeholder="Please select"
|
||||
placeholder=""
|
||||
style="width: 100%"
|
||||
:disabled="user.CanEditUserType === false"
|
||||
>
|
||||
<template v-for="(userType, key) of userTypeOptions">
|
||||
<el-option
|
||||
v-if="userType.UserTypeEnum !== 20"
|
||||
:key="key"
|
||||
:label="userType.UserType"
|
||||
:value="userType.Id"
|
||||
|
@ -368,7 +367,15 @@ export default {
|
|||
getUserTypeList() {
|
||||
getUserTypeListByUserType(0).then((res) => {
|
||||
if (res.IsSuccess) {
|
||||
this.userTypeOptions = res.Result;
|
||||
let arr = [2, 4, 5, 8, 9, 12, 14];
|
||||
if (this.hasPermi(["role:oa"])) {
|
||||
arr = [4, 5, 8, 9, 12, 14];
|
||||
}
|
||||
this.userTypeOptions = res.Result.map((item) => {
|
||||
if (arr.includes(item.UserTypeEnum)) {
|
||||
return item;
|
||||
}
|
||||
}).filter((item) => item);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
|
|
@ -108,6 +108,7 @@
|
|||
:Patient="PatientData"
|
||||
:submitMessage="submitMessage"
|
||||
:status="status"
|
||||
@close="beforeCloseStudyDig"
|
||||
/>
|
||||
<base-model v-if="addSubject_model.visible" :config="addSubject_model">
|
||||
<template slot="dialog-body">
|
||||
|
|
|
@ -456,6 +456,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
// 确认提交
|
||||
async confirmSubmit() {
|
||||
|
@ -487,6 +488,7 @@ export default {
|
|||
this.$message.success(
|
||||
this.$t("trials:crcUpload:message:submittedSuccessfully")
|
||||
);
|
||||
this.$emit("close");
|
||||
}
|
||||
} catch (err) {
|
||||
this.btnLoading2 = false;
|
||||
|
|
|
@ -38,22 +38,11 @@
|
|||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 80px;
|
||||
width: 150px;
|
||||
"
|
||||
>
|
||||
{{ $t("trials:trials-list:table:researchNumber") }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 160px;
|
||||
"
|
||||
>
|
||||
{{ $t("trials:trials-list:table:experimentName") }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: inline-block;
|
||||
|
@ -65,6 +54,17 @@
|
|||
>
|
||||
{{ $t("trials:trials-list:table:sponsor") }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 160px;
|
||||
"
|
||||
>
|
||||
{{ $t("trials:trials-list:table:experimentName") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-tooltip
|
||||
|
@ -80,11 +80,11 @@
|
|||
{{ $t("trials:trials-list:table:researchNumber") }}:
|
||||
{{ item.ResearchProgramNo }}
|
||||
<br />
|
||||
{{ $t("trials:trials-list:table:experimentName") }}:
|
||||
{{ item.ExperimentName }}
|
||||
<br />
|
||||
{{ $t("trials:trials-list:table:sponsor") }}:
|
||||
{{ item.SponsorName }}
|
||||
<br />
|
||||
{{ $t("trials:trials-list:table:experimentName") }}:
|
||||
{{ item.ExperimentName }}
|
||||
</div>
|
||||
<div
|
||||
class="options_item"
|
||||
|
@ -100,22 +100,11 @@
|
|||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 80px;
|
||||
width: 150px;
|
||||
"
|
||||
>
|
||||
{{ item.ResearchProgramNo }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 160px;
|
||||
"
|
||||
>
|
||||
{{ item.ExperimentName }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: inline-block;
|
||||
|
@ -127,6 +116,17 @@
|
|||
>
|
||||
{{ item.SponsorName }}
|
||||
</div>
|
||||
<div
|
||||
style="
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 160px;
|
||||
"
|
||||
>
|
||||
{{ item.ExperimentName }}
|
||||
</div>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
@ -233,7 +233,11 @@ export default {
|
|||
inputChange(v) {
|
||||
this.resultFilter = this.options.filter((o) => {
|
||||
var reg = new RegExp(v, "ig");
|
||||
return reg.test(o.ResearchProgramNo) || reg.test(o.ExperimentName)|| reg.test(o.SponsorName);
|
||||
return (
|
||||
reg.test(o.ResearchProgramNo) ||
|
||||
reg.test(o.ExperimentName) ||
|
||||
reg.test(o.SponsorName)
|
||||
);
|
||||
});
|
||||
},
|
||||
},
|
||||
|
|
|
@ -207,6 +207,7 @@ export default {
|
|||
methods: {
|
||||
// 关闭弹框
|
||||
beforeCloseStudyDig() {
|
||||
this.$setOpenWindow();
|
||||
this.$emit("update:visible", false);
|
||||
},
|
||||
// 获取列表
|
||||
|
@ -256,7 +257,8 @@ export default {
|
|||
const routeData = this.$router.resolve({
|
||||
path: `/showdicom?studyId=${item.SCPStudyId}&TokenKey=${token}&type=Patient`,
|
||||
});
|
||||
window.open(routeData.href, "_blank");
|
||||
let newWindow = window.open(routeData.href, "_blank");
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
// 查看报告
|
||||
report() {},
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
v-model="trialForm.CriterionTypeList"
|
||||
multiple
|
||||
clearable
|
||||
:disabled="trialForm.Id !== ''"
|
||||
:disabled="TrialStatusStr === 'Ongoing'"
|
||||
>
|
||||
<el-option
|
||||
v-for="item of CriterionTypeList"
|
||||
|
@ -330,6 +330,7 @@ export default {
|
|||
phaseNum: null,
|
||||
dictionaryList: {},
|
||||
CriterionTypeList: [], // 阅片标准列表
|
||||
TrialStatusStr: null, // 项目状态
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
|
@ -367,6 +368,7 @@ export default {
|
|||
)[0].raw.ChildGroup;
|
||||
}
|
||||
}
|
||||
this.TrialStatusStr = res.Result.TrialStatusStr;
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
</el-form-item>
|
||||
<!-- 激活码 -->
|
||||
<el-form-item label="激活码">
|
||||
<span>{{ form.code }}</span>
|
||||
<el-input v-model="form.code" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
|
||||
|
@ -122,6 +122,7 @@ export default {
|
|||
PurchaseDuration: null,
|
||||
TrialCode: null,
|
||||
TrialId: null,
|
||||
HospitalCode: null,
|
||||
},
|
||||
};
|
||||
},
|
||||
|
@ -159,6 +160,7 @@ export default {
|
|||
CriterionTypeList: this.data.CriterionTypeList,
|
||||
CreateUserId: this.data.CreateUserId,
|
||||
AuthorizationDeadLineDate: null,
|
||||
HospitalCode: this.data.HospitalCode,
|
||||
};
|
||||
let res = await getTrialActivationCode(params);
|
||||
if (res.IsSuccess) {
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
label-width="120px"
|
||||
>
|
||||
<div class="base-dialog-body">
|
||||
<p>授权申请信息</p>
|
||||
<p>{{ $t("trials:activate:ApplyMessage") }}</p>
|
||||
<!-- 单位名称 -->
|
||||
<el-form-item
|
||||
:label="$t('trials:trials-list:activate:organizationName')"
|
||||
|
@ -71,13 +71,6 @@
|
|||
prop="Activate"
|
||||
>
|
||||
<el-input v-model="form.Activate" :disabled="isActivate" />
|
||||
<span
|
||||
v-if="form.Activate"
|
||||
class="copy"
|
||||
@click.stop="getActivationCodeInfo"
|
||||
style="margin-left: 10px"
|
||||
>{{ $t("trials:reviewTrack:impactList:save") }}</span
|
||||
>
|
||||
<input
|
||||
type="file"
|
||||
id="uploadFileInp"
|
||||
|
@ -91,9 +84,16 @@
|
|||
v-if="!isActivate"
|
||||
>{{ $t("trials:activate:button:upload") }}</label
|
||||
>
|
||||
<span
|
||||
v-if="form.Activate"
|
||||
class="copy"
|
||||
@click.stop="getActivationCodeInfo"
|
||||
style="margin-left: 10px"
|
||||
>{{ $t("trials:reviewTrack:impactList:save") }}</span
|
||||
>
|
||||
</el-form-item>
|
||||
<div v-if="isActivate">
|
||||
<p>授权信息</p>
|
||||
<p>{{ $t("trials:activate:Message") }}</p>
|
||||
<!-- 单位名称 -->
|
||||
<el-form-item
|
||||
:label="$t('trials:trials-list:activate:organizationName')"
|
||||
|
@ -184,6 +184,7 @@ export default {
|
|||
HospitalName: null,
|
||||
CriterionTypeList: [],
|
||||
CreateUserId: null,
|
||||
HospitalCode: null,
|
||||
AuthorizationDeadLineDate: null,
|
||||
},
|
||||
ActivateData: {
|
||||
|
@ -193,6 +194,7 @@ export default {
|
|||
HospitalName: null,
|
||||
CriterionTypeList: [],
|
||||
CreateUserId: null,
|
||||
HospitalCode: null,
|
||||
AuthorizationDeadLineDate: null,
|
||||
},
|
||||
btnLoading: false,
|
||||
|
@ -260,6 +262,7 @@ export default {
|
|||
HospitalName: this.form.HospitalName,
|
||||
CriterionTypeList: this.form.CriterionTypeList,
|
||||
CreateUserId: this.form.CreateUserId,
|
||||
HospitalCode: this.form.HospitalCode,
|
||||
};
|
||||
try {
|
||||
let res = await getTrialAuthorizationCode(params);
|
||||
|
|
|
@ -99,6 +99,7 @@
|
|||
stripe
|
||||
height="100"
|
||||
@sort-change="handleSortChange"
|
||||
@row-click="handleDetail"
|
||||
>
|
||||
<!-- <el-table-column type="selection" align="left" width="45" /> -->
|
||||
<el-table-column width="40">
|
||||
|
@ -166,12 +167,6 @@
|
|||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!--是否授权-->
|
||||
<!-- <el-table-column
|
||||
prop="Sponsor"
|
||||
:label="$t('trials:trials-list:table:isAccredit')"
|
||||
show-overflow-tooltip
|
||||
/> -->
|
||||
<el-table-column
|
||||
prop="TrialStatusStr"
|
||||
:label="$t('trials:trials-list:table:status')"
|
||||
|
@ -201,27 +196,41 @@
|
|||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--阅片标准-->
|
||||
<el-table-column
|
||||
prop="CriterionTypeList"
|
||||
:label="$t('trials:trials-list:table:CriterionTypeList')"
|
||||
show-overflow-tooltip
|
||||
v-if="hasPermi(['role:pm', 'role:pi', 'role:sr'])"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.CriterionTypeList.map((item) =>
|
||||
$fd("CriterionType", Number(item))
|
||||
).join(",")
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--待提交访视数量-->
|
||||
<el-table-column
|
||||
prop="UnSubmitCount"
|
||||
:label="$t('trials:trials-list:table:UnSubmitCount')"
|
||||
show-overflow-tooltip
|
||||
v-if="hasPermi(['role:pm'])"
|
||||
/>
|
||||
<!--待阅片数量-->
|
||||
<el-table-column
|
||||
prop="UnReadCount"
|
||||
:label="$t('trials:trials-list:table:UnReadCount')"
|
||||
show-overflow-tooltip
|
||||
v-if="hasPermi(['role:pm', 'role:pi', 'role:sr'])"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="CreateTime"
|
||||
:label="$t('trials:trials-list:table:createDate')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
<!--授权日期-->
|
||||
<!-- <el-table-column
|
||||
prop="AuthorizationDate"
|
||||
:label="$t('trials:trials-list:table:dateAuthorized')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.AuthorizationDate
|
||||
? moment(scope.row.AuthorizationDate)
|
||||
: ""
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<!--授权时长-->
|
||||
<el-table-column
|
||||
prop="AuthorizationDuration"
|
||||
|
@ -238,7 +247,7 @@
|
|||
icon="el-icon-info"
|
||||
:disabled="scope.row.IsDeleted"
|
||||
:title="$t('trials:trials-list:action:panel')"
|
||||
@click="handleDetail(scope.row)"
|
||||
@click.stop="handleDetail(scope.row)"
|
||||
/>
|
||||
<!-- 编辑项目基本信息 -->
|
||||
<el-button
|
||||
|
@ -247,7 +256,7 @@
|
|||
icon="el-icon-edit-outline"
|
||||
:disabled="scope.row.IsDeleted"
|
||||
:title="$t('trials:trials-list:action:edit')"
|
||||
@click="handleEdit(scope.row)"
|
||||
@click.stop="handleEdit(scope.row)"
|
||||
/>
|
||||
<!-- 修改项目状态 -->
|
||||
<el-button
|
||||
|
@ -256,7 +265,7 @@
|
|||
icon="el-icon-edit"
|
||||
:disabled="scope.row.IsDeleted"
|
||||
:title="$t('trials:trials-list:action:status')"
|
||||
@click="handleStatus(scope.row)"
|
||||
@click.stop="handleStatus(scope.row)"
|
||||
/>
|
||||
<!-- 废除项目 -->
|
||||
<el-button
|
||||
|
@ -268,7 +277,7 @@
|
|||
scope.row.TrialStatusStr !== 'Initializing'
|
||||
"
|
||||
:title="$t('trials:trials-list:action:abolition')"
|
||||
@click="handleAbandon(scope.row)"
|
||||
@click.stop="handleAbandon(scope.row)"
|
||||
/>
|
||||
<!-- 激活 -->
|
||||
<el-button
|
||||
|
@ -277,7 +286,7 @@
|
|||
circle
|
||||
icon="el-icon-key"
|
||||
:title="$t('trials:trials-list:action:activate')"
|
||||
@click="handleActivate(scope.row)"
|
||||
@click.stop="handleActivate(scope.row)"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<el-input
|
||||
v-model="userForm.CheckCode"
|
||||
:placeholder="$t('trials:researchForm:form:checkCode')"
|
||||
:maxlength="10"
|
||||
:maxlength="6"
|
||||
type="number"
|
||||
/>
|
||||
<!-- 修改 -->
|
||||
|
|
|
@ -150,6 +150,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
// 预览影像
|
||||
handleViewStudy(row) {
|
||||
|
@ -159,6 +160,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
},
|
||||
};
|
||||
|
|
|
@ -376,6 +376,7 @@ export default {
|
|||
},
|
||||
// 关闭弹框
|
||||
beforeCloseStudyDig() {
|
||||
this.$setOpenWindow();
|
||||
this.$emit("update:visible", false);
|
||||
},
|
||||
// 预览
|
||||
|
@ -390,6 +391,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
// 当前检查移除
|
||||
remove(item) {
|
||||
|
|
|
@ -184,6 +184,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
// 预览影像
|
||||
handleViewStudy(row) {
|
||||
|
@ -193,6 +194,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
getBodyPart(bodyPart) {
|
||||
if (!bodyPart) return "";
|
||||
|
|
|
@ -343,6 +343,10 @@ export default {
|
|||
};
|
||||
},
|
||||
created() {
|
||||
if (zzSessionStorage.getItem("SubjectCode")) {
|
||||
this.searchData.SubjectCode = zzSessionStorage.getItem("SubjectCode");
|
||||
zzSessionStorage.removeItem("SubjectCode");
|
||||
}
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
|
|
|
@ -150,6 +150,14 @@
|
|||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 阅片标准 -->
|
||||
<el-table-column
|
||||
prop="TrialReadingCriterionName"
|
||||
:label="$t('trials:adReview:table:TrialReadingCriterionName')"
|
||||
min-width="100"
|
||||
sortable="custom"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<!-- 任务状态 -->
|
||||
<el-table-column
|
||||
prop="TaskState"
|
||||
|
|
|
@ -317,7 +317,7 @@ export default {
|
|||
loading: false,
|
||||
total: 0,
|
||||
// 修改检查
|
||||
reportBtnLoading: false,
|
||||
reportFlag: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
@ -331,16 +331,21 @@ export default {
|
|||
},
|
||||
// 评估报告
|
||||
async showReport(item) {
|
||||
if (this.reportBtnLoading) return;
|
||||
if (this.reportFlag[item.Id]) return;
|
||||
let data = {
|
||||
VisitTaskId: item.Id,
|
||||
};
|
||||
try {
|
||||
this.reportBtnLoading = true;
|
||||
if (!this.reportFlag.hasOwnProperty(item.Id)) {
|
||||
this.$set(this.reportFlag, item.Id, true);
|
||||
}
|
||||
if (!this.reportFlag[item.Id]) {
|
||||
this.reportFlag[item.Id] = true;
|
||||
}
|
||||
let res = await downLoadReadReport(data);
|
||||
this.reportBtnLoading = false;
|
||||
this.reportFlag[item.Id] = false;
|
||||
} catch (err) {
|
||||
this.reportBtnLoading = false;
|
||||
this.reportFlag[item.Id] = false;
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
:label="item.UserTypeShortName"
|
||||
:value="item.Id"
|
||||
>
|
||||
<span>{{ item.UserType }}</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -74,14 +73,14 @@
|
|||
{{ $t('trials:staff:button:addExternalStaff') }}
|
||||
</el-button> -->
|
||||
<!-- 导出 -->
|
||||
<el-button
|
||||
<!-- <el-button
|
||||
type="primary"
|
||||
icon="el-icon-download"
|
||||
:disabled="list.length === 0"
|
||||
@click="handleExport"
|
||||
>
|
||||
{{ $t("common:button:export") }}
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
|
@ -241,7 +240,11 @@
|
|||
<!-- 分配参与人员模态框 -->
|
||||
<base-model v-if="staff_model.visible" :config="staff_model">
|
||||
<template slot="dialog-body">
|
||||
<StaffForm v-if="isAdd == 'Add'" @closeDialog="closeDialog" />
|
||||
<StaffForm
|
||||
v-if="isAdd == 'Add'"
|
||||
:userTypeOptions="userTypeOptions"
|
||||
@closeDialog="closeDialog"
|
||||
/>
|
||||
<StaffExternalForm
|
||||
v-else
|
||||
@closeDialog="closeDialog"
|
||||
|
@ -335,6 +338,7 @@ import {
|
|||
updateTrialUser,
|
||||
trialUserListExport,
|
||||
} from "@/api/trials";
|
||||
import { getUserTypeListByUserType } from "@/api/admin";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import StaffForm from "./staffForm";
|
||||
import StaffExternalForm from "./staffExternalForm";
|
||||
|
@ -517,8 +521,12 @@ export default {
|
|||
},
|
||||
// 获取用户类型下拉数据
|
||||
getUserType() {
|
||||
getTrialUserTypeList().then((res) => {
|
||||
this.userTypeOptions = res.Result;
|
||||
getUserTypeListByUserType(0).then((res) => {
|
||||
this.userTypeOptions = res.Result.map((item) => {
|
||||
if ([4, 5, 8, 9, 12].includes(item.UserTypeEnum)) {
|
||||
return item;
|
||||
}
|
||||
}).filter((item) => item);
|
||||
});
|
||||
},
|
||||
},
|
||||
|
|
|
@ -9,206 +9,313 @@
|
|||
size="small"
|
||||
>
|
||||
<!-- 姓 -->
|
||||
<el-form-item :label="$t('trials:externalStaff:table:lastName')" prop="LastName">
|
||||
<el-form-item
|
||||
:label="$t('trials:externalStaff:table:lastName')"
|
||||
prop="LastName"
|
||||
>
|
||||
<el-input v-model="form.LastName" />
|
||||
</el-form-item>
|
||||
<!-- 名 -->
|
||||
<el-form-item :label="$t('trials:externalStaff:table:firstName')" prop="FirstName">
|
||||
<el-form-item
|
||||
:label="$t('trials:externalStaff:table:firstName')"
|
||||
prop="FirstName"
|
||||
>
|
||||
<el-input v-model="form.FirstName" />
|
||||
</el-form-item>
|
||||
<!-- 用户类型 -->
|
||||
<el-form-item :label="$t('trials:externalStaff:table:userType')" prop="UserTypeId">
|
||||
<el-select
|
||||
v-model="form.UserTypeId"
|
||||
style="width:100%"
|
||||
>
|
||||
<el-form-item
|
||||
:label="$t('trials:externalStaff:table:userType')"
|
||||
prop="UserTypeId"
|
||||
>
|
||||
<el-select v-model="form.UserTypeId" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item of userTypeOptions"
|
||||
:key="item.Id"
|
||||
:label="item.UserTypeShortName"
|
||||
:value="item.Id"
|
||||
>
|
||||
<span>{{ item.UserType }}</span>
|
||||
<!-- <span>{{ item.UserType }}</span> -->
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 电话号码 -->
|
||||
<el-form-item :label="$t('trials:externalStaff:table:phone')" prop="Phone">
|
||||
<el-form-item
|
||||
:label="$t('trials:externalStaff:table:phone')"
|
||||
prop="Phone"
|
||||
>
|
||||
<el-input v-model="form.Phone" />
|
||||
</el-form-item>
|
||||
<!-- 邮箱 -->
|
||||
<el-form-item :label="$t('trials:externalStaff:table:email')" prop="Email">
|
||||
<el-form-item
|
||||
:label="$t('trials:externalStaff:table:email')"
|
||||
prop="Email"
|
||||
>
|
||||
<el-input v-model="form.Email" />
|
||||
</el-form-item>
|
||||
<!-- 单位 -->
|
||||
<el-form-item :label="$t('trials:externalStaff:table:organization')" prop="OrganizationName">
|
||||
<el-form-item
|
||||
:label="$t('trials:externalStaff:table:organization')"
|
||||
prop="OrganizationName"
|
||||
>
|
||||
<el-input v-model="form.OrganizationName" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div v-if="errorMsg" style="font-size: 12px;color: #f66;">{{ errorMsg }}</div>
|
||||
<div v-if="errorMsg" style="font-size: 12px; color: #f66">
|
||||
{{ errorMsg }}
|
||||
</div>
|
||||
</template>
|
||||
<template slot="dialog-footer">
|
||||
<!-- 取消 -->
|
||||
<el-button size="small" type="primary" :disabled="btnLoading" @click="handleCancel">
|
||||
{{ $t('common:button:cancel') }}
|
||||
<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
|
||||
size="small"
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ $t("common:button:save") }}
|
||||
</el-button>
|
||||
<!-- 保存且发邮件 -->
|
||||
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave('SendEmail')">
|
||||
<!-- <el-button size="small" type="primary" :loading="btnLoading" @click="handleSave('SendEmail')">
|
||||
{{ $t('trials:externalStaff:button:saveAndSendEmail') }}
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
</template>
|
||||
</base-model>
|
||||
</template>
|
||||
<script>
|
||||
import { addOrUpdateTrialExternalUser } from '@/api/trials'
|
||||
import BaseModel from '@/components/BaseModel'
|
||||
|
||||
import BaseModel from "@/components/BaseModel";
|
||||
import { getHospital } from "@/api/hospital.js";
|
||||
import { addUser } from "@/api/admin.js";
|
||||
const formDataDefault = () => {
|
||||
return {
|
||||
Id: null,
|
||||
TrialId: null,
|
||||
LastName: null,
|
||||
FirstName: null,
|
||||
UserTypeId: '',
|
||||
UserTypeId: "",
|
||||
Phone: null,
|
||||
Email: null,
|
||||
OrganizationName: null
|
||||
}
|
||||
}
|
||||
IsSendEmail: false,
|
||||
Sex: "9",
|
||||
IsZhiZhun: "",
|
||||
OrganizationName: "",
|
||||
DepartmentName: "",
|
||||
PositionName: "",
|
||||
IsTestUser: false,
|
||||
verifyCode: "",
|
||||
checkCode: "",
|
||||
};
|
||||
};
|
||||
export default {
|
||||
name: 'StaffExternalAdd',
|
||||
name: "StaffExternalAdd",
|
||||
components: { BaseModel },
|
||||
props: {
|
||||
userTypeOptions: {
|
||||
type: Array,
|
||||
default: function() {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
default: function () {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
var checkPhone = (rule, value, callback) => {
|
||||
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
|
||||
const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/;
|
||||
if (!value) {
|
||||
callback()
|
||||
callback();
|
||||
}
|
||||
setTimeout(() => {
|
||||
if (!Number.isInteger(+value)) {
|
||||
callback(new Error(this.$t('trials:externalStaff:formRule:phone')))
|
||||
callback(new Error(this.$t("trials:externalStaff:formRule:phone")));
|
||||
} else {
|
||||
if (phoneReg.test(value)) {
|
||||
callback()
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error(this.$t('trials:externalStaff:formRule:phone')))
|
||||
callback(new Error(this.$t("trials:externalStaff:formRule:phone")));
|
||||
}
|
||||
}
|
||||
}, 100)
|
||||
}
|
||||
}, 100);
|
||||
};
|
||||
var validateEmail = (rule, value, callback) => {
|
||||
if (value === '') {
|
||||
callback(new Error(this.$t('common:ruleMessage:specify')))
|
||||
if (value === "") {
|
||||
callback(new Error(this.$t("common:ruleMessage:specify")));
|
||||
} else {
|
||||
var reg = /^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/
|
||||
var reg =
|
||||
/^[A-Za-z0-9]+([_\.][A-Za-z0-9]+)*@([A-Za-z0-9\-]+\.)+[A-Za-z]{2,6}$/;
|
||||
if (this.form.Email && reg.test(this.form.Email)) {
|
||||
this.sendDisabled = false
|
||||
callback()
|
||||
this.sendDisabled = false;
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error(this.$t('trials:externalStaff:formRule:email')))
|
||||
this.sendDisabled = true
|
||||
callback(new Error(this.$t("trials:externalStaff:formRule:email")));
|
||||
this.sendDisabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
return {
|
||||
form: {
|
||||
Id: null,
|
||||
// Id: null,
|
||||
LastName: null,
|
||||
FirstName: null,
|
||||
UserTypeId: '',
|
||||
UserTypeId: "",
|
||||
Phone: null,
|
||||
Email: null,
|
||||
TrialId: null,
|
||||
IsSendEmail: false
|
||||
IsSendEmail: false,
|
||||
Sex: "9",
|
||||
IsZhiZhun: "",
|
||||
OrganizationName: "",
|
||||
DepartmentName: "",
|
||||
PositionName: "",
|
||||
IsTestUser: false,
|
||||
verifyCode: "",
|
||||
checkCode: "",
|
||||
},
|
||||
rules: {
|
||||
LastName: [
|
||||
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
|
||||
{ min: 0, max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`, trigger: 'blur' }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:specify"),
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
min: 0,
|
||||
max: 50,
|
||||
message: `${this.$t("common:ruleMessage:maxLength")} 50`,
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
FirstName: [
|
||||
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
|
||||
{ min: 0, max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50`, trigger: 'blur' }
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:specify"),
|
||||
trigger: "blur",
|
||||
},
|
||||
{
|
||||
min: 0,
|
||||
max: 50,
|
||||
message: `${this.$t("common:ruleMessage:maxLength")} 50`,
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
UserTypeId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] }],
|
||||
Phone: [
|
||||
{ required: false, validator: checkPhone, trigger: ['blur'] }
|
||||
UserTypeId: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:select"),
|
||||
trigger: ["blur"],
|
||||
},
|
||||
],
|
||||
Phone: [{ required: false, validator: checkPhone, trigger: ["blur"] }],
|
||||
Email: [
|
||||
{ required: true, validator: validateEmail, trigger: ['blur'] }
|
||||
]
|
||||
{ required: true, validator: validateEmail, trigger: ["blur"] },
|
||||
],
|
||||
},
|
||||
btnLoading: false,
|
||||
userRoles: [],
|
||||
userTypeEnumInt: 0,
|
||||
model_cfg: { visible: false, showClose: true, width: '600px', title: '', appendToBody: true },
|
||||
trialId: '',
|
||||
errorMsg: null
|
||||
}
|
||||
model_cfg: {
|
||||
visible: false,
|
||||
showClose: true,
|
||||
width: "600px",
|
||||
title: "",
|
||||
appendToBody: true,
|
||||
},
|
||||
trialId: "",
|
||||
errorMsg: null,
|
||||
hospitalName: null,
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
model_cfg: {
|
||||
handler(newName, oldName) {
|
||||
this.errorMsg = null
|
||||
this.errorMsg = null;
|
||||
},
|
||||
deep: true
|
||||
}
|
||||
deep: true,
|
||||
},
|
||||
"form.UserTypeId": {
|
||||
handler() {
|
||||
if (this.form.UserTypeId) {
|
||||
let name = this.getUserType(this.form.UserTypeId);
|
||||
if (["PM", "PI", "SR", "OA"].includes(name)) {
|
||||
this.form.IsZhiZhun = true;
|
||||
this.form.OrganizationName = this.hospitalName;
|
||||
return (this.IsZhiZhunDisabled = true);
|
||||
}
|
||||
}
|
||||
this.form.IsZhiZhun = false;
|
||||
this.form.OrganizationName = null;
|
||||
this.IsZhiZhunDisabled = false;
|
||||
},
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
this.trialId = this.$route.query.trialId
|
||||
this.trialId = this.$route.query.trialId;
|
||||
this.getInfo();
|
||||
},
|
||||
methods: {
|
||||
// 获取医院信息
|
||||
async getInfo() {
|
||||
try {
|
||||
let res = await getHospital();
|
||||
if (res.IsSuccess) {
|
||||
this.hospitalName = res.Result.HospitalName;
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
getUserType(id) {
|
||||
let obj = this.userTypeOptions.find((item) => item.Id === id);
|
||||
return obj.UserTypeShortName;
|
||||
},
|
||||
openDialog(title, data) {
|
||||
this.model_cfg.visible = true
|
||||
this.model_cfg.title = title
|
||||
this.model_cfg.visible = true;
|
||||
this.model_cfg.title = title;
|
||||
if (Object.keys(data).length) {
|
||||
this.form = { ...data }
|
||||
this.form = { ...data };
|
||||
} else {
|
||||
this.form = formDataDefault()
|
||||
this.form = formDataDefault();
|
||||
}
|
||||
},
|
||||
handleSave(v) {
|
||||
this.$refs.anonymizationFrom.validate(valid => {
|
||||
this.$refs.anonymizationFrom.validate((valid) => {
|
||||
if (valid) {
|
||||
this.btnLoading = true
|
||||
this.form.TrialId = this.trialId
|
||||
if (v === 'SendEmail') {
|
||||
this.form.IsSendEmail = true
|
||||
this.form.BaseUrl = `${location.protocol}//${location.host}/login`
|
||||
this.form.RouteUrl = `${location.protocol}//${location.host}/email-recompose`
|
||||
this.btnLoading = true;
|
||||
this.form.TrialId = this.trialId;
|
||||
if (v === "SendEmail") {
|
||||
this.form.IsSendEmail = true;
|
||||
this.form.BaseUrl = `${location.protocol}//${location.host}/login`;
|
||||
this.form.RouteUrl = `${location.protocol}//${location.host}/email-recompose`;
|
||||
}
|
||||
addOrUpdateTrialExternalUser(this.form).then(res => {
|
||||
this.btnLoading = false
|
||||
this.$message.success(this.$t('common:message:savedSuccessfully'))
|
||||
this.model_cfg.visible = false
|
||||
this.$emit('getList')
|
||||
}).catch((res) => {
|
||||
if (res.Result) {
|
||||
this.$set(this.form, 'LastName', res.Result.LastName)
|
||||
this.$set(this.form, 'FirstName', res.Result.FirstName)
|
||||
this.$set(this.form, 'Phone', res.Result.Phone)
|
||||
this.errorMsg = res.ErrorMessage
|
||||
}
|
||||
this.btnLoading = false
|
||||
})
|
||||
addUser(this.form)
|
||||
.then((res) => {
|
||||
this.btnLoading = false;
|
||||
this.$message.success(
|
||||
this.$t("common:message:savedSuccessfully")
|
||||
);
|
||||
this.model_cfg.visible = false;
|
||||
this.$emit("getList");
|
||||
})
|
||||
.catch((res) => {
|
||||
if (res.Result) {
|
||||
// this.$set(this.form, "LastName", res.Result.LastName);
|
||||
// this.$set(this.form, "FirstName", res.Result.FirstName);
|
||||
// this.$set(this.form, "Phone", res.Result.Phone);
|
||||
this.errorMsg = res.ErrorMessage;
|
||||
}
|
||||
this.btnLoading = false;
|
||||
});
|
||||
}
|
||||
})
|
||||
});
|
||||
},
|
||||
handleCancel() {
|
||||
this.model_cfg.visible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
this.model_cfg.visible = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
clearable
|
||||
/>
|
||||
<!-- 用户名 -->
|
||||
<span>{{ $t("trials:staff:table:uid") }}:</span>
|
||||
<!-- <span>{{ $t("trials:staff:table:uid") }}:</span>
|
||||
<el-input
|
||||
v-model="listQuery.UserName"
|
||||
size="mini"
|
||||
class="mr"
|
||||
clearable
|
||||
/>
|
||||
/> -->
|
||||
<!-- 单位 -->
|
||||
<span>{{ $t("trials:staff:table:organization") }}:</span>
|
||||
<el-input
|
||||
|
@ -26,6 +26,9 @@
|
|||
class="mr"
|
||||
clearable
|
||||
/>
|
||||
<!-- 邮箱 -->
|
||||
<span>{{ $t("trials:externalStaff:table:email") }}:</span>
|
||||
<el-input v-model="listQuery.EMail" size="mini" class="mr" clearable />
|
||||
<!-- 用户类型 -->
|
||||
<span>{{ $t("trials:staff:table:userType") }}:</span>
|
||||
<el-select
|
||||
|
@ -35,10 +38,10 @@
|
|||
class="mr"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userTypeOptions"
|
||||
:key="item.Id"
|
||||
:label="item.UserTypeShortName"
|
||||
:value="item.UserTypeEnum"
|
||||
v-for="item of $d.UserType"
|
||||
:key="item.id"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
@ -60,17 +63,26 @@
|
|||
>
|
||||
{{ $t("common:button:reset") }}
|
||||
</el-button>
|
||||
|
||||
<!--添加新用户-->
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-plus"
|
||||
@click="handleAdd"
|
||||
v-hasPermi="['role:pm']"
|
||||
>
|
||||
{{ $t("common:button:add") }}
|
||||
</el-button>
|
||||
<!--确认用户选择-->
|
||||
<el-button
|
||||
type="primary"
|
||||
size="mini"
|
||||
style="margin-left: auto"
|
||||
:disabled="selectArr.length === 0"
|
||||
:loading="assignLoadStatus"
|
||||
icon="el-icon-plus"
|
||||
@click="handleAssign"
|
||||
>
|
||||
{{ $t("common:button:add") }}
|
||||
{{ $t("common:button:confirm") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-header>
|
||||
|
@ -99,13 +111,13 @@
|
|||
min-width="100"
|
||||
/>
|
||||
<!-- 用户名 -->
|
||||
<el-table-column
|
||||
<!-- <el-table-column
|
||||
prop="UserName"
|
||||
:label="$t('trials:staff:table:uid')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
min-width="100"
|
||||
/>
|
||||
/> -->
|
||||
<!-- 电话 -->
|
||||
<el-table-column
|
||||
prop="Phone"
|
||||
|
@ -149,27 +161,38 @@
|
|||
@pagination="getList"
|
||||
/>
|
||||
</div>
|
||||
<staffExternalAdd
|
||||
ref="StaffExternalAdd"
|
||||
:userTypeOptions="userTypeOptions"
|
||||
@getList="getList"
|
||||
/>
|
||||
</el-container>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
getTrialUserScreeningList,
|
||||
addTrialUsers,
|
||||
getUserTypeList,
|
||||
} from "@/api/trials";
|
||||
import { getTrialUserScreeningList, addTrialUsers } from "@/api/trials";
|
||||
import Pagination from "@/components/Pagination";
|
||||
import staffExternalAdd from "./staffExternalAdd.vue";
|
||||
const getListQueryDefault = () => {
|
||||
return {
|
||||
UserRealName: "",
|
||||
UserName: "",
|
||||
OrganizationName: "",
|
||||
EMail: null,
|
||||
UserTypeEnum: "",
|
||||
PageIndex: 1,
|
||||
PageSize: 20,
|
||||
};
|
||||
};
|
||||
export default {
|
||||
components: { Pagination },
|
||||
components: { Pagination, staffExternalAdd },
|
||||
props: {
|
||||
userTypeOptions: {
|
||||
required: true,
|
||||
default: () => {
|
||||
return [];
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list: [],
|
||||
|
@ -178,17 +201,24 @@ export default {
|
|||
selectArr: [],
|
||||
assignLoadStatus: false,
|
||||
isAdmin: JSON.parse(zzSessionStorage.getItem("IsAdmin")),
|
||||
userTypeOptions: [],
|
||||
trialId: "",
|
||||
qCProcessEnum: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.trialId = this.$route.query.trialId;
|
||||
this.getUserType();
|
||||
// this.getUserType();
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
handleAdd() {
|
||||
this.$nextTick(() => {
|
||||
this.$refs["StaffExternalAdd"].openDialog(
|
||||
this.$t("trials:externalStaff:dialogTitle:add"),
|
||||
{}
|
||||
);
|
||||
});
|
||||
},
|
||||
getList() {
|
||||
const loading = this.$loading({
|
||||
target: document.querySelector(".participant-container"),
|
||||
|
@ -263,11 +293,11 @@ export default {
|
|||
return false;
|
||||
}
|
||||
},
|
||||
getUserType() {
|
||||
getUserTypeList(2).then((res) => {
|
||||
this.userTypeOptions = res.Result;
|
||||
});
|
||||
},
|
||||
// getUserType() {
|
||||
// getUserTypeList(2).then((res) => {
|
||||
// this.userTypeOptions = res.Result;
|
||||
// });
|
||||
// },
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -38,34 +38,6 @@
|
|||
</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>
|
||||
<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:seletctedReviews:form:modality')">
|
||||
<el-select v-model="searchData.Modalities" clearable>
|
||||
<el-option
|
||||
v-for="item of $d.modalType"
|
||||
: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
|
||||
|
@ -77,18 +49,6 @@
|
|||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<!-- 状态 -->
|
||||
<!-- <el-form-item :label="$t('trials:seletctedReviews:table:status')">
|
||||
<el-select v-model="searchData.VisitPlanArray" 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> -->
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
|
@ -460,6 +420,7 @@ export default {
|
|||
});
|
||||
var newWindow = window.open(routeData.href, "_blank");
|
||||
this.$emit("setOpenWindow", newWindow);
|
||||
this.$setOpenWindow(newWindow);
|
||||
},
|
||||
// 查询
|
||||
handleSearch() {
|
||||
|
|
|
@ -107,6 +107,7 @@
|
|||
:Patient="Patient"
|
||||
:submitMessage="submitMessage"
|
||||
:status="status"
|
||||
@close="beforeCloseStudyDig"
|
||||
/>
|
||||
<base-model v-if="patient_model.visible" :config="patient_model">
|
||||
<template slot="dialog-body">
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:close-on-click-modal="false"
|
||||
:fullscreen="true"
|
||||
custom-class="upload-dialog"
|
||||
:before-close="beforeClosePitentDig"
|
||||
>
|
||||
|
@ -10,10 +9,9 @@
|
|||
<el-table
|
||||
ref="patientStudyList"
|
||||
v-loading="loading"
|
||||
v-adaptive="{ bottomOffset: 60 }"
|
||||
:data="list"
|
||||
stripe
|
||||
height="100"
|
||||
height="300px"
|
||||
>
|
||||
<el-table-column type="index" width="40" />
|
||||
<!--患者ID-->
|
||||
|
@ -49,7 +47,7 @@
|
|||
sortable="custom"
|
||||
></el-table-column>
|
||||
<!--操作-->
|
||||
<el-table-column :label="$t('common:action:action')" width="250">
|
||||
<el-table-column :label="$t('common:action:action')" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
circle
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
<el-input v-model="searchData.Code" style="width: 130px" clearable />
|
||||
</el-form-item>
|
||||
<!-- 患者编号 -->
|
||||
<!-- <el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
||||
<el-input v-model="searchData.Code" style="width: 130px" />
|
||||
</el-form-item> -->
|
||||
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
|
||||
<el-input v-model="searchData.PatientIdStr" style="width: 130px" />
|
||||
</el-form-item>
|
||||
<!-- 姓名 -->
|
||||
<el-form-item :label="$t('trials:researchStaff:table:Name')">
|
||||
<el-input
|
||||
|
@ -36,7 +36,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- 状态 -->
|
||||
<el-form-item :label="$t('trials:subject:table:status')">
|
||||
<!-- <el-form-item :label="$t('trials:subject:table:status')">
|
||||
<el-select v-model="searchData.Status" clearable style="width: 130px">
|
||||
<el-option
|
||||
v-for="item of $d.Subject_Visit_Status"
|
||||
|
@ -45,7 +45,7 @@
|
|||
:label="item.label"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form-item> -->
|
||||
<el-form-item>
|
||||
<!-- 查询 -->
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
|
||||
|
@ -162,7 +162,18 @@
|
|||
:label="$t('trials:subject:table:totalVisitCount')"
|
||||
show-overflow-tooltip
|
||||
sortable="custom"
|
||||
/>
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="scope.row.VisitCount >= 1"
|
||||
type="text"
|
||||
@click="gotoVisit(scope.row)"
|
||||
>
|
||||
<span>{{ scope.row.VisitCount }}</span>
|
||||
</el-button>
|
||||
<span v-else>{{ scope.row.VisitCount }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 最新检查访视 -->
|
||||
<el-table-column
|
||||
prop="LatestVisitName"
|
||||
|
@ -307,6 +318,7 @@ import patientStudyList from "./components/patient-study-list.vue";
|
|||
// import confirmVisitList from "../../../trials-inspection/components/confirm-visit-list.vue";
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
PatientIdStr: null,
|
||||
Code: "",
|
||||
Status: "",
|
||||
Sex: "",
|
||||
|
@ -360,6 +372,15 @@ export default {
|
|||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
// 跳转至访视页
|
||||
gotoVisit(item) {
|
||||
let query = this.$route.query;
|
||||
this.$router.push({
|
||||
path: "/trials/trials-panel/hir-visit",
|
||||
query,
|
||||
});
|
||||
zzSessionStorage.setItem("SubjectCode", item.Code);
|
||||
},
|
||||
handleExport() {
|
||||
getSubjectList_Export(this.searchData)
|
||||
.then((res) => {})
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -116,13 +116,13 @@
|
|||
<el-descriptions-item
|
||||
:label="$t('trials:trial-information:title:activationDate')"
|
||||
>
|
||||
{{ trialInfo.AuthorizationDate }}
|
||||
{{ otherInfo.ActiveTime }}
|
||||
</el-descriptions-item>
|
||||
<!--授权日期-->
|
||||
<el-descriptions-item
|
||||
:label="$t('trials:trials-list:table:dateAuthorized')"
|
||||
>
|
||||
{{ trialInfo.AuthorizationDate }}
|
||||
{{ otherInfo.AuthorizationDeadLineDate }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-button
|
||||
|
|
Loading…
Reference in New Issue