页面新增与修改

main
wangxiaoshuang 2024-03-22 08:58:20 +08:00
parent 57181f272f
commit eb7b60e605
28 changed files with 3053 additions and 1574 deletions

View File

@ -1598,7 +1598,7 @@ Enroll: Enrolled Confirmation`,
'trials:tab:trials': `My Trials`, 'trials:tab:trials': `My Trials`,
'trials:trials:title:back': `Return`, 'trials:trials:title:back': `Return`,
'trials:trials:title:backTrialList': `Return to trial list`, 'trials:trials:title:backTrialList': `Return to trial list`,
'trials:trials:title:eics': `SIR Imaging System`, 'trials:trials:title:eics': `HIR Imaging System`,
'trials:tab:reading': `Reads`, 'trials:tab:reading': `Reads`,
'trials:tab:pendingReadingTasks': `Pending`, 'trials:tab:pendingReadingTasks': `Pending`,
'trials:pendingReadingTasks:table:subjectCode': `Subject ID`, 'trials:pendingReadingTasks:table:subjectCode': `Subject ID`,

View File

@ -1523,7 +1523,7 @@ export default {
'trials:notice:table:appendix': `附件`, 'trials:notice:table:appendix': `附件`,
'trials:notice:table:isRead': `是否已读`, 'trials:notice:table:isRead': `是否已读`,
'trials:notice:action:detail': `详情`, 'trials:notice:action:detail': `详情`,
'login:title:system': `研究单位阅片系统`, 'login:title:system': `院内影像评估系统`,
'login:form:userName': `用户名`, 'login:form:userName': `用户名`,
'login:form:password': `密码`, 'login:form:password': `密码`,
'login:button:login': `登录`, 'login:button:login': `登录`,
@ -1587,7 +1587,7 @@ export default {
'trials:tab:trials': `我的项目`, 'trials:tab:trials': `我的项目`,
'trials:trials:title:back': `返回`, 'trials:trials:title:back': `返回`,
'trials:trials:title:backTrialList': `返回项目列表`, 'trials:trials:title:backTrialList': `返回项目列表`,
'trials:trials:title:eics': `研究单位阅片系统`, 'trials:trials:title:eics': `院内影像评估系统`,
'trials:tab:reading': `阅片`, 'trials:tab:reading': `阅片`,
'trials:tab:pendingReadingTasks': `待阅`, 'trials:tab:pendingReadingTasks': `待阅`,
'trials:pendingReadingTasks:table:subjectCode': `受试者编号`, 'trials:pendingReadingTasks:table:subjectCode': `受试者编号`,

View File

@ -1,35 +1,44 @@
<template> <template>
<box-content> <box-content :style="style">
<div class="search"> <div class="search">
<el-form :inline="true" size="small" class="base-search-form"> <el-form :inline="true" size="small" class="base-search-form">
<el-form-item label="Hospital:"> <el-form-item label="Hospital:">
<el-input v-model="searchData.HospitalName" style="width:100px;" /> <el-input v-model="searchData.HospitalName" style="width: 100px" />
</el-form-item> </el-form-item>
<el-form-item label="Province:"> <el-form-item label="Province:">
<el-input v-model="searchData.Province" style="width:100px;" /> <el-input v-model="searchData.Province" style="width: 100px" />
</el-form-item> </el-form-item>
<el-form-item label="City:"> <el-form-item label="City:">
<el-input v-model="searchData.City" style="width:100px;" /> <el-input v-model="searchData.City" style="width: 100px" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">Search</el-button> <el-button type="primary" icon="el-icon-search" @click="handleSearch"
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">Reset</el-button> >Search</el-button
>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>Reset</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto;"> <span style="margin-left: auto">
<el-button <el-button
size="small" size="small"
type="primary" type="primary"
style="margin-left:auto;" style="margin-left: auto"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleAddHospital" @click="handleAddHospital"
>New</el-button> v-hasPermi="['system:hospital:add']"
>New</el-button
>
</span> </span>
</div> </div>
<!-- hospital列表 --> <!-- hospital列表 -->
<el-table <el-table
v-loading="loading" v-loading="loading"
v-adaptive="{bottomOffset:60}" v-adaptive="{ bottomOffset: 60 }"
:data="list" :data="list"
stripe stripe
height="100" height="100"
@ -108,26 +117,38 @@
sortable="custom" sortable="custom"
/> />
<el-table-column label="Action" width="150"> <el-table-column
label="Action"
width="150"
v-if="hasPermi(['system:hospital:edit', 'system:hospital:del'])"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
circle circle
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
title="编辑" title="编辑"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
v-hasPermi="['system:hospital:edit']"
/> />
<el-button <el-button
circle circle
icon="el-icon-delete" icon="el-icon-delete"
title="删除" title="删除"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
v-hasPermi="['system:hospital:del']"
/> />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </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"
/>
<el-dialog <el-dialog
v-if="editDialog.visible" v-if="editDialog.visible"
@ -137,120 +158,135 @@
width="600px" width="600px"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
> >
<hospital-form v-if="editDialog.visible" :data="rowData" @close="close" @getList="getList" /> <hospital-form
v-if="editDialog.visible"
:data="rowData"
@close="close"
@getList="getList"
/>
</el-dialog> </el-dialog>
</box-content> </box-content>
</template> </template>
<script> <script>
import { getHospitalPageList, deleteHospital } from "@/api/dictionary";
import { getHospitalPageList, deleteHospital } from '@/api/dictionary' import BoxContent from "@/components/BoxContent";
import BoxContent from '@/components/BoxContent' import Pagination from "@/components/Pagination";
import Pagination from '@/components/Pagination' import HospitalForm from "./HospitalForm";
import HospitalForm from './HospitalForm'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
HospitalName: '', HospitalName: "",
Province: '', Province: "",
City: '', City: "",
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
Asc: true, Asc: true,
SortField: '' SortField: "",
} };
} };
export default { export default {
name: 'Hospitals', name: "Hospitals",
components: { BoxContent, Pagination, HospitalForm }, components: { BoxContent, Pagination, HospitalForm },
data() { data() {
return { return {
searchData: searchDataDefault(), searchData: searchDataDefault(),
editDialog: { visible: false, title: '' }, editDialog: { visible: false, title: "" },
list: [], list: [],
total: 0, total: 0,
loading: false, loading: false,
rowData: {} rowData: {},
} style: "",
};
}, },
mounted() { mounted() {
this.getList() this.getList();
},
created() {
//
if (this.$route.path === "/system/hospital") {
this.style = "padding-top:10px";
}
}, },
methods: { methods: {
// //
getList() { getList() {
this.loading = true this.loading = true;
getHospitalPageList(this.searchData).then(res => { getHospitalPageList(this.searchData)
this.loading = false .then((res) => {
this.list = res.Result.CurrentPageData this.loading = false;
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData;
}).catch(() => { this.total = res.Result.TotalCount;
this.loading = false })
}) .catch(() => {
this.loading = false;
});
}, },
// //
handleAddHospital() { handleAddHospital() {
this.rowData = {} this.rowData = {};
this.editDialog.title = 'Add' this.editDialog.title = "Add";
this.editDialog.visible = true this.editDialog.visible = true;
}, },
// //
handleEdit(row) { handleEdit(row) {
this.rowData = row this.rowData = row;
this.editDialog.title = 'Edit' this.editDialog.title = "Edit";
this.editDialog.visible = true this.editDialog.visible = true;
}, },
// //
handleDelete(row) { handleDelete(row) {
this.$confirm('Sure to delete?', { this.$confirm("Sure to delete?", {
type: 'warning', type: "warning",
distinguishCancelAndClose: true, distinguishCancelAndClose: true,
confirmButtonText: 'Ok', confirmButtonText: "Ok",
cancelButtonText: 'Cancel' cancelButtonText: "Cancel",
}) }).then(() => {
.then(() => { this.loading = true;
this.loading = true deleteHospital(row.Id)
deleteHospital(row.Id) .then((res) => {
.then(res => { if (res.IsSuccess) {
if (res.IsSuccess) { this.list.splice(
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1) this.list.findIndex((item) => item.Id === row.Id),
this.$message.success('Deleted successfully!') 1
} );
this.loading = false this.$message.success("Deleted successfully!");
}).catch(() => { }
this.loading = false this.loading = false;
}) })
}) .catch(() => {
this.loading = false;
});
});
}, },
// //
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
// //
handleReset() { handleReset() {
this.searchData = searchDataDefault() this.searchData = searchDataDefault();
this.getList() this.getList();
}, },
// //
handleSortByColumn(column) { handleSortByColumn(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.searchData.Asc = true this.searchData.Asc = true;
} else { } else {
this.searchData.Asc = false this.searchData.Asc = false;
} }
this.searchData.SortField = column.prop this.searchData.SortField = column.prop;
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
// //
close() { close() {
this.editDialog.visible = false this.editDialog.visible = false;
} },
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.hospitals{ .hospitals {
height: 100%; height: 100%;
} }
</style> </style>

View File

@ -1,11 +1,11 @@
<template> <template>
<div style="display: flex;justify-content: center"> <div style="display: flex;justify-content: center">
<div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;"> <div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;padding-right:40px;">
<div class="trial-myinfo-head" style="font-size: 30px;line-height: 120px;"> <div class="trial-myinfo-head" style="font-size: 30px;line-height: 120px;">
<!-- 首次登录修改密码 --> <!-- 首次登录修改密码 -->
{{ $t('recompose:title:init') }} {{ $t('recompose:title:init') }}
</div> </div>
<el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="180px"> <el-form ref="passwordForm" v-loading="loading" label-position="right" :model="password" :rules="passwordFormRules" label-width="120px">
<!-- 邮箱 --> <!-- 邮箱 -->
<el-form-item :label="$t('recompose:form:email')" prop="Email"> <el-form-item :label="$t('recompose:form:email')" prop="Email">
<el-input v-model="password.Email" disabled /> <el-input v-model="password.Email" disabled />
@ -18,6 +18,15 @@
<el-form-item :label="$t('recompose:form:userName')" prop="NewUserName"> <el-form-item :label="$t('recompose:form:userName')" prop="NewUserName">
<el-input v-model="password.NewUserName" /> <el-input v-model="password.NewUserName" />
</el-form-item> </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-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" /> <el-input v-model="password.NewPassWord" type="password" show-password auto-complete="new-password" />
@ -185,7 +194,7 @@ input {
background-color:transparent; background-color:transparent;
caret-color: #fff; caret-color: #fff;
} }
>>>.is-error.my_new_pwd{ ::v-deep .is-error.my_new_pwd{
margin-bottom: 40px; margin-bottom: 40px;
} }
</style> </style>

View File

@ -12,9 +12,14 @@
class="demo-ruleForm" class="demo-ruleForm"
size="small" size="small"
> >
<!-- 用户类型 -->
<el-form-item v-if="form.UserId" :label="$t('passwordReset:form:userType')">
<el-input v-model="form.UserType" disabled />
</el-form-item>
<!-- 邮箱 --> <!-- 邮箱 -->
<el-form-item :label="$t('passwordReset:form:email')" prop="EmailOrPhone"> <el-form-item :label="$t('passwordReset:form:email')" prop="EmailOrPhone">
<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-input v-model="form.EmailOrPhone" autocomplete="off" @change="handleEmailChange" />
</el-col> </el-col>
<el-col :span="6" style="text-align:right;"> <el-col :span="6" style="text-align:right;">
@ -24,11 +29,11 @@
style="width:80%;" style="width:80%;"
:disabled="sendDisabled" :disabled="sendDisabled"
@click="handleSendCode" @click="handleSendCode"
>{{ sendTitle }}</el-button> >{{ sendTitle }}</el-button> -->
</el-col> <!-- </el-col> -->
</el-form-item> </el-form-item>
<!-- 验证码 --> <!-- 验证码 -->
<el-form-item :label="$t('trials:researchForm:form:verifyCode')" required> <el-form-item :label="$t('trials:researchForm:form:checkCode')" required>
<el-col :span="18"> <el-col :span="18">
<el-form-item prop="VerificationCode"> <el-form-item prop="VerificationCode">
<el-input v-model="form.VerificationCode" autocomplete="off" /> <el-input v-model="form.VerificationCode" autocomplete="off" />
@ -67,10 +72,6 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 用户类型 -->
<el-form-item v-if="form.UserId" :label="$t('passwordReset:form:userType')">
<el-input v-model="form.UserType" disabled />
</el-form-item>
<!-- 新密码 --> <!-- 新密码 -->
<el-form-item class="my_new_pwd" :label="$t('passwordReset:form:password')" prop="NewPwd" style="position: relative"> <el-form-item class="my_new_pwd" :label="$t('passwordReset:form:password')" prop="NewPwd" style="position: relative">
<el-input v-model="form.NewPwd" show-password autocomplete="off" /> <el-input v-model="form.NewPwd" show-password autocomplete="off" />
@ -268,7 +269,7 @@ export default {
/*>>>.is-error{*/ /*>>>.is-error{*/
/* margin-bottom: 40px;*/ /* margin-bottom: 40px;*/
/*}*/ /*}*/
>>>.is-error.my_new_pwd{ ::v-deep .is-error.my_new_pwd{
margin-bottom: 40px; margin-bottom: 40px;
} }
</style> </style>

View File

@ -225,8 +225,10 @@ export default {
this.$router.replace({ path: res[0].path }) this.$router.replace({ path: res[0].path })
return return
} }
if (this.hasPermi(['role:air', 'role:rpm', 'role:rcrc', 'role:rir'])) { if (this.hasPermi(['role:pm', 'role:crc', 'role:crc'])) {
this.$router.replace({ path: '/trials/trials-list' }) this.$router.replace({ path: '/trials/trials-inspection' })
}else if(this.hasPermi(['role:oa'])){
this.$router.replace({ path: '/system' })
} else { } else {
this.$router.replace({ path: '/trials' }) this.$router.replace({ path: '/trials' })
} }

View File

@ -0,0 +1,11 @@
<template>
<div class="dicomAE"></div>
</template>
<script>
export default {
name:"dicomAE"
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -156,7 +156,7 @@
是否外链 是否外链
</span> </span>
<el-radio-group v-model="form.IsExternalLink"> <el-radio-group v-model="form.IsExternalLink">
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{item.label}}</el-radio> <el-radio v-for="item of $d.YesOrNo" :label="item.value" :key="item.id">{{item.label}}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -3,7 +3,12 @@
<div ref="leftContainer" class="left"> <div ref="leftContainer" class="left">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="通知级别: " prop="NoticeLevelEnum"> <el-form-item label="通知级别: " prop="NoticeLevelEnum">
<el-select v-model="searchData.NoticeLevelEnum" placeholder="通知级别" clearable size="small"> <el-select
v-model="searchData.NoticeLevelEnum"
placeholder="通知级别"
clearable
size="small"
>
<el-option <el-option
v-for="item of $d.NoteLevel" v-for="item of $d.NoteLevel"
:key="item.value" :key="item.value"
@ -13,7 +18,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="通知类型: " prop="NoticeTypeEnum"> <el-form-item label="通知类型: " prop="NoticeTypeEnum">
<el-select v-model="searchData.NoticeTypeEnum" placeholder="通知类型" clearable size="small"> <el-select
v-model="searchData.NoticeTypeEnum"
placeholder="通知类型"
clearable
size="small"
>
<el-option <el-option
v-for="item of $d.NoteType" v-for="item of $d.NoteType"
:key="item.value" :key="item.value"
@ -23,7 +33,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="适用项目: " prop="ApplicableProjectEnum"> <el-form-item label="适用项目: " prop="ApplicableProjectEnum">
<el-select v-model="searchData.ApplicableProjectEnum" placeholder="适用项目" clearable size="small"> <el-select
v-model="searchData.ApplicableProjectEnum"
placeholder="适用项目"
clearable
size="small"
>
<el-option <el-option
v-for="item of dict.type.NoticeApplicableTrial" v-for="item of dict.type.NoticeApplicableTrial"
:key="item.value" :key="item.value"
@ -33,7 +48,13 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="使用角色: " prop="NoticeUserTypeIdList"> <el-form-item label="使用角色: " prop="NoticeUserTypeIdList">
<el-select v-model="searchData.NoticeUserTypeIdList" multiple placeholder="使用角色" clearable size="small"> <el-select
v-model="searchData.NoticeUserTypeIdList"
multiple
placeholder="使用角色"
clearable
size="small"
>
<el-option <el-option
v-for="item of roleList" v-for="item of roleList"
:key="item.Id" :key="item.Id"
@ -43,7 +64,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="提醒方式: " prop="NoticeModeEnum"> <el-form-item label="提醒方式: " prop="NoticeModeEnum">
<el-select v-model="searchData.NoticeModeEnum" placeholder="提醒方式" clearable size="small"> <el-select
v-model="searchData.NoticeModeEnum"
placeholder="提醒方式"
clearable
size="small"
>
<el-option <el-option
v-for="item of dict.type.NoticeMode" v-for="item of dict.type.NoticeMode"
:key="item.value" :key="item.value"
@ -53,107 +79,237 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="getList"></el-button> <el-button
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd"></el-button> type="primary"
icon="el-icon-search"
size="mini"
@click="getList"
>搜索</el-button
>
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:notice:add']"
>新增</el-button
>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" v-adaptive="{bottomOffset:45}" height="100" :data="list" class="table"> <el-table
v-loading="loading"
v-adaptive="{ bottomOffset: 45 }"
height="100"
:data="list"
class="table"
>
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column label="通知级别" prop="NoticeLevelEnum" min-width="120" show-overflow-tooltip> <el-table-column
label="通知级别"
prop="NoticeLevelEnum"
min-width="120"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('NoteLevel', scope.row.NoticeLevelEnum) }} {{ $fd("NoteLevel", scope.row.NoticeLevelEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="通知类型" prop="NoticeTypeEnum" min-width="100" show-overflow-tooltip> <el-table-column
label="通知类型"
prop="NoticeTypeEnum"
min-width="100"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('NoteType', scope.row.NoticeTypeEnum) }} {{ $fd("NoteType", scope.row.NoticeTypeEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="通知内容" prop="NoticeContent" min-width="100" show-overflow-tooltip> <el-table-column
label="通知内容"
prop="NoticeContent"
min-width="100"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.NoticeContent }} {{ scope.row.NoticeContent }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="通知状态" prop="NoticeStateEnum" min-width="100" show-overflow-tooltip> <el-table-column
label="通知状态"
prop="NoticeStateEnum"
min-width="100"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag :type="scope.row.ActualNoticeStateEnum === 0 ? 'info' : scope.row.ActualNoticeStateEnum === 1 ? 'success' : 'danger'"> <el-tag
{{ $fd('NoticeState', scope.row.ActualNoticeStateEnum) }} :type="
scope.row.ActualNoticeStateEnum === 0
? 'info'
: scope.row.ActualNoticeStateEnum === 1
? 'success'
: 'danger'
"
>
{{ $fd("NoticeState", scope.row.ActualNoticeStateEnum) }}
</el-tag> </el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="适用项目" prop="ApplicableProjectEnum" min-width="100" show-overflow-tooltip> <el-table-column
label="适用项目"
prop="ApplicableProjectEnum"
min-width="100"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('NoticeApplicableTrial', scope.row.ApplicableProjectEnum) }} {{ $fd("NoticeApplicableTrial", scope.row.ApplicableProjectEnum) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="适用角色" prop="NoticeUserTypeList" min-width="80" show-overflow-tooltip> <el-table-column
label="适用角色"
prop="NoticeUserTypeList"
min-width="80"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ $fd('NoticeUserTypeList', scope.row.UserTypeShortName) }} {{ $fd("NoticeUserTypeList", scope.row.UserTypeShortName) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="提示方式" prop="NoticeModeEnum" min-width="100" show-overflow-tooltip> <el-table-column
label="提示方式"
prop="NoticeModeEnum"
min-width="100"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ dict.type.NoticeMode.find(v => {return v.raw.Code * 1 === scope.row.NoticeModeEnum}) ? dict.type.NoticeMode.find(v => {return v.raw.Code * 1 === scope.row.NoticeModeEnum}).label : '' }} {{
dict.type.NoticeMode.find((v) => {
return v.raw.Code * 1 === scope.row.NoticeModeEnum;
})
? dict.type.NoticeMode.find((v) => {
return v.raw.Code * 1 === scope.row.NoticeModeEnum;
}).label
: ""
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="保留时长" prop="StartDate" min-width="240" show-overflow-tooltip> <el-table-column
label="保留时长"
prop="StartDate"
min-width="240"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.StartDate }}-{{ scope.row.EndDate }} {{ scope.row.StartDate }}-{{ scope.row.EndDate }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="发布人" prop="PublishUserName" min-width="100" show-overflow-tooltip /> <el-table-column
<el-table-column label="发布时间" prop="PublishedTime" min-width="160" show-overflow-tooltip /> label="发布人"
<el-table-column label="更新时间" prop="UpdateTime" min-width="160" show-overflow-tooltip> prop="PublishUserName"
min-width="100"
show-overflow-tooltip
/>
<el-table-column
label="发布时间"
prop="PublishedTime"
min-width="160"
show-overflow-tooltip
/>
<el-table-column
label="更新时间"
prop="UpdateTime"
min-width="160"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.StartDate ? scope.row.StartDate: scope.row.CreateTime }} {{
scope.row.StartDate ? scope.row.StartDate : scope.row.CreateTime
}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="附件" fixed="right" prop="FileName" min-width="120" show-overflow-tooltip> <el-table-column
label="附件"
fixed="right"
prop="FileName"
min-width="120"
show-overflow-tooltip
>
<template slot-scope="scope"> <template slot-scope="scope">
<a :href="OSSclientConfig.basePath + scope.row.FullFilePath" target="_blank" style="color:#428bca">{{ scope.row.FileName }}</a> <a
:href="OSSclientConfig.basePath + scope.row.FullFilePath"
target="_blank"
style="color: #428bca"
>{{ scope.row.FileName }}</a
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" fixed="right" prop="UserTypeShortName" min-width="200" show-overflow-tooltip> <el-table-column
label="操作"
fixed="right"
prop="UserTypeShortName"
min-width="200"
show-overflow-tooltip
v-if="
hasPermi([
'system:notice:edit',
'system:notice:publish',
'system:notice:back',
])
"
>
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
@click="handleEdit(scope.row)" @click="handleEdit(scope.row)"
>编辑</el-button> v-hasPermi="['system:notice:edit']"
>编辑</el-button
>
<el-button <el-button
v-if="scope.row.NoticeStateEnum === 0" v-if="scope.row.NoticeStateEnum === 0"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-s-promotion" icon="el-icon-s-promotion"
@click="handlePush(scope.row)" @click="handlePush(scope.row)"
>发布</el-button> v-hasPermi="['system:notice:publish']"
>发布</el-button
>
<el-button <el-button
v-if="scope.row.NoticeStateEnum === 1" v-if="scope.row.NoticeStateEnum === 1"
size="mini" size="mini"
type="text" type="text"
icon="el-icon-s-release" icon="el-icon-s-release"
@click="handleGet(scope.row)" @click="handleGet(scope.row)"
>撤回</el-button> v-hasPermi="['system:notice:back']"
>撤回</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination" style="text-align: right;margin-top:5px;"> <div class="pagination" style="text-align: right; margin-top: 5px">
<pagination :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" /> <pagination
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</div> </div>
</div> </div>
<notice-form ref="NoticeForm" :role-list="roleList" @getList="getList" /> <notice-form ref="NoticeForm" :role-list="roleList" @getList="getList" />
</div> </div>
</template> </template>
<script> <script>
import { getSystemNoticeList, addOrUpdateSystemNotice } from '@/api/system/notice' import {
import { getUserTypeRoleList } from '@/api/admin' getSystemNoticeList,
import NoticeForm from './components/from' addOrUpdateSystemNotice,
import Pagination from '@/components/Pagination' } from "@/api/system/notice";
import { getUserTypeRoleList } from "@/api/admin";
import NoticeForm from "./components/from";
import Pagination from "@/components/Pagination";
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
Asc: true, Asc: true,
SortField: '', SortField: "",
NoticeContent: null, NoticeContent: null,
FileName: null, FileName: null,
NoticeTypeEnum: null, NoticeTypeEnum: null,
@ -162,12 +318,18 @@ const searchDataDefault = () => {
NoticeModeEnum: null, NoticeModeEnum: null,
NoticeStateEnum: null, NoticeStateEnum: null,
PageIndex: 1, PageIndex: 1,
PageSize: 20 PageSize: 20,
} };
} };
export default { export default {
components: { NoticeForm, Pagination }, components: { NoticeForm, Pagination },
dicts: ['NoticeApplicableTrial', 'NoteLevel', 'NoteType', 'NoticeState', 'NoticeMode'], dicts: [
"NoticeApplicableTrial",
"NoteLevel",
"NoteType",
"NoticeState",
"NoticeMode",
],
data() { data() {
return { return {
list: [], list: [],
@ -175,8 +337,8 @@ export default {
loading: false, loading: false,
treeData: [], treeData: [],
defaultProps: { defaultProps: {
label: 'MenuName', label: "MenuName",
children: 'Children' children: "Children",
}, },
userList: [], userList: [],
roleList: [], roleList: [],
@ -187,99 +349,110 @@ export default {
expandedKeys: [], expandedKeys: [],
treeLoading: false, treeLoading: false,
funcListLoading: false, funcListLoading: false,
funcList: [] funcList: [],
} };
}, },
mounted() { mounted() {
this.getUserTypeRoleList() this.getUserTypeRoleList();
this.getList() this.getList();
}, },
methods: { methods: {
handlePush(row) { handlePush(row) {
this.loading = true this.loading = true;
var params = { ...row } var params = { ...row };
params.NoticeUserTypeIdList = params.NoticeUserTypeList.map(v => v.Id) params.NoticeUserTypeIdList = params.NoticeUserTypeList.map((v) => v.Id);
params.NoticeStateEnum = 1 params.NoticeStateEnum = 1;
addOrUpdateSystemNotice(params).then(res => { addOrUpdateSystemNotice(params)
this.loading = false .then((res) => {
this.$message.success('发布成功') this.loading = false;
this.getList() this.$message.success("发布成功");
}).catch(() => { this.loading = false }) this.getList();
})
.catch(() => {
this.loading = false;
});
}, },
handleGet(row) { handleGet(row) {
this.loading = true this.loading = true;
var params = { ...row } var params = { ...row };
params.NoticeUserTypeIdList = params.NoticeUserTypeList.map(v => v.Id) params.NoticeUserTypeIdList = params.NoticeUserTypeList.map((v) => v.Id);
params.NoticeStateEnum = 0 params.NoticeStateEnum = 0;
addOrUpdateSystemNotice(params).then(res => { addOrUpdateSystemNotice(params)
this.loading = false .then((res) => {
this.$message.success('撤回成功') this.loading = false;
this.getList() this.$message.success("撤回成功");
}).catch(() => { this.loading = false }) this.getList();
})
.catch(() => {
this.loading = false;
});
}, },
handleEdit(row) { handleEdit(row) {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['NoticeForm'].openDialog('编辑', row) this.$refs["NoticeForm"].openDialog("编辑", row);
}) });
}, },
handleAdd() { handleAdd() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['NoticeForm'].openDialog('新增', {}) this.$refs["NoticeForm"].openDialog("新增", {});
}) });
}, },
getUserTypeRoleList() { getUserTypeRoleList() {
getUserTypeRoleList({}).then((res) => { getUserTypeRoleList({})
this.roleList = res.Result .then((res) => {
}).catch(() => { this.roleList = res.Result;
}) })
.catch(() => {});
}, },
getList() { getList() {
this.loading = true this.loading = true;
getSystemNoticeList(this.searchData).then((res) => { getSystemNoticeList(this.searchData)
this.loading = false .then((res) => {
this.list = res.Result.CurrentPageData this.loading = false;
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData;
}).catch(() => { this.total = res.Result.TotalCount;
this.loading = false })
}) .catch(() => {
} this.loading = false;
} });
} },
},
};
</script> </script>
<style lang="scss"> <style lang="scss">
.role { .role {
height: 100%; height: 100%;
box-sizing: border-box; box-sizing: border-box;
display: flex;
padding: 10px;
border-radius: 5px;
.left {
display: flex; display: flex;
padding: 10px; flex-direction: column;
border-radius: 5px; width: 0;
.left { flex-grow: 4;
// border-right: 1px solid #ccc;
.filter-container {
display: flex; display: flex;
flex-direction: column; align-items: center;
width: 0; margin: 5px;
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 { .data-table {
width: 0; flex: 1;
flex-grow: 6; padding: 5px 0px;
overflow-y: auto;
border-right: 1px solid #ccc;
} }
.selected-row{ .pagination-container {
background-color: cadetblue; text-align: right;
} }
} }
.right {
width: 0;
flex-grow: 6;
overflow-y: auto;
border-right: 1px solid #ccc;
}
.selected-row {
background-color: cadetblue;
}
}
</style> </style>

View File

@ -211,7 +211,6 @@ export default {
this.btnLoading = true this.btnLoading = true
this.model_cfg.showClose = false this.model_cfg.showClose = false
this.form.MenuIds = this.getMenuAllCheckedKeys() this.form.MenuIds = this.getMenuAllCheckedKeys()
console.log(this.form.MenuIds)
addOrUpdateUserType(this.form).then(res => { addOrUpdateUserType(this.form).then(res => {
this.btnLoading = false this.btnLoading = false
this.$refs['roleForm'].resetFields() this.$refs['roleForm'].resetFields()

View File

@ -40,20 +40,25 @@
<el-form-item v-if="type==1" label="Disable:"> <el-form-item v-if="type==1" label="Disable:">
<el-switch v-model="user.Status" :active-value="0" :inactive-value="1" /> <el-switch v-model="user.Status" :active-value="0" :inactive-value="1" />
</el-form-item> </el-form-item>
<el-form-item label="IsTestUser:"> <!-- <el-form-item label="IsTestUser:">
<el-switch v-model="user.IsTestUser" /> <el-switch v-model="user.IsTestUser" />
</el-form-item> </el-form-item> -->
<el-form-item label="User Type: " prop="UserTypeId"> <el-form-item label="User Type: " prop="UserTypeId">
<el-select ref="userType" v-model="user.UserTypeId" size="small" placeholder="Please select" style="width:100%;" :disabled="user.CanEditUserType === false"> <el-select ref="userType" v-model="user.UserTypeId" size="small" placeholder="Please select" style="width:100%;" :disabled="user.CanEditUserType === false">
<el-option <template v-for="(userType,key) of userTypeOptions">
v-for="(userType,key) of userTypeOptions" <el-option
v-if="userType.UserTypeEnum !== 20" v-if="userType.UserTypeEnum !== 20"
:key="key" :key="key"
:label="userType.UserType" :label="userType.UserType"
:value="userType.Id" :value="userType.Id"
/> />
</template>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="Check Code: " prop="verifyCode">
<el-input v-model="user.checkCode" />
<span style="color:red">请输入校验码用于用户首次登录重置密码时的校验</span>
</el-form-item>
</el-card> </el-card>
<el-card class="Affiliation" shadow="never" style="margin-top:10px;" size="small"> <el-card class="Affiliation" shadow="never" style="margin-top:10px;" size="small">
@ -121,7 +126,8 @@ export default {
OrganizationName: '', OrganizationName: '',
DepartmentName: '', DepartmentName: '',
PositionName: '', PositionName: '',
IsTestUser: false IsTestUser: false,
verifyCode:''
}, },
userFormRules: { userFormRules: {
UserName: [ UserName: [
@ -233,7 +239,7 @@ export default {
} }
</script> </script>
<style scoped> <style scoped>
/deep/ .is-error.my_new_pwd{ ::v-deep .is-error.my_new_pwd{
margin-bottom: 40px; margin-bottom: 40px;
} }
</style> </style>

View File

@ -10,10 +10,11 @@
@search="handleSearch" @search="handleSearch"
@reset="handleReset" @reset="handleReset"
/> />
<!--style="margin-left:auto;height: 28px;position: absolute;bottom: 0;right: 10px"-->
<el-button <el-button
type="primary" type="primary"
size="mini" size="mini"
style="margin-left:auto;height: 28px;position: absolute;bottom: 0;right: 10px" style="margin-left:auto;height: 28px;"
@click="handleAddUser" @click="handleAddUser"
>New</el-button> >New</el-button>
</div> </div>

View File

@ -71,17 +71,17 @@ export const columns = [
label: 'Internal Or External:', label: 'Internal Or External:',
hidden: true, hidden: true,
slot: 'isZhiZhunSlot', slot: 'isZhiZhunSlot',
minWidth: 140, minWidth: 160,
sortable: 'custom',
showOverflowTooltip: true },
{
prop: 'IsTestUser',
label: 'Is Test User',
hidden: true,
slot: 'isTestUserSlot',
minWidth: 120,
sortable: 'custom', sortable: 'custom',
showOverflowTooltip: true }, showOverflowTooltip: true },
// {
// prop: 'IsTestUser',
// label: 'Is Test User',
// hidden: true,
// slot: 'isTestUserSlot',
// minWidth: 120,
// sortable: 'custom',
// showOverflowTooltip: true },
{ {
prop: 'Status', prop: 'Status',
label: 'Status', label: 'Status',
@ -92,10 +92,10 @@ export const columns = [
showOverflowTooltip: true }, showOverflowTooltip: true },
{ type: 'operate', { type: 'operate',
label: 'Action', label: 'Action',
minWidth: 200, minWidth: 100,
operates: [ operates: [
{ name: 'Edit', type: 'primary', emitKey: 'editCb' }, { name: 'Edit', type: 'primary', emitKey: 'editCb' },
{ name: 'Delete', type: 'danger', emitKey: 'deleteCb' } // { name: 'Delete', type: 'danger', emitKey: 'deleteCb' }
] } ] }
] ]
@ -142,19 +142,19 @@ export const searchForm = [
change: scope => '', change: scope => '',
placeholder: '' placeholder: ''
}, },
{ // {
type: 'Select', // type: 'Select',
label: 'Is Test User:', // label: 'Is Test User:',
prop: 'IsTestUser', // prop: 'IsTestUser',
width: '100px', // width: '100px',
options: [ // options: [
{ label: 'Yes', value: true }, // { label: 'Yes', value: true },
{ label: 'No', value: false } // { label: 'No', value: false }
], // ],
props: { label: 'label', value: 'value' }, // props: { label: 'label', value: 'value' },
change: scope => '', // change: scope => '',
placeholder: '' // placeholder: ''
}, // },
{ {
type: 'Select', type: 'Select',
label: 'Status:', label: 'Status:',

View File

@ -0,0 +1,243 @@
<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:inspection:button:addTrials") }}{{
$t("trials:uploadDicomList:table:patientInfo")
}}T0001132ZhangSan</span
>
<div class="top">
<el-form
:inline="true"
:model="submitMessage"
class="demo-form-inline"
:rules="rules"
>
<!--受试者编号-->
<el-form-item
:label="$t('trials:crcQuestion:table:subjectId')"
prop="subjectId"
>
<el-input v-model="submitMessage.subjectId"></el-input>
</el-form-item>
</el-form>
</div>
<div class="search">
<p>{{ $t("trials:inspection:message:checkAddTrials") }}</p>
<div class="form">
<el-form :inline="true" class="base-search-form">
<!-- 研究方案编号 -->
<el-form-item :label="$t('trials:trials-list:table:researchNumber')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 研究名称 -->
<el-form-item :label="$t('trials:trials-list:table:researchName')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 申办方 -->
<el-form-item
class="my_multiple"
:label="$t('trials:trials-list:table:sponsor')"
>
<el-select
v-model="searchData.VisitPlanArray"
clearable
multiple
style="width: 140px"
>
<el-option
v-for="(item, index) of sponsorList"
:key="index"
:label="item.VisitName"
:value="item.VisitNum"
>
</el-option>
</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>
<el-button type="primary" @click="addTrials">
{{ $t("trials:addRP:button:confirmAddPR") }}
</el-button>
</div>
</div>
<!--可加入项目列表-->
<!--:header-cell-style="{ background: '#f9f9f9' }"-->
<el-table
ref="addTrialsList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
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:trials-list:form:trialType')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究方案号-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchNumber')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究名称-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchName')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--申办方-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:sponsor')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--状态-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:status')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--创建日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:createDate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import Pagination from "@/components/Pagination";
export default {
name: "addTrialsList",
components: { Pagination },
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
//
searchData: {},
sponsorList: [],
//
total: 0,
loading: false,
list: [{ key: 1, IsUrgent: "123" }],
//
submitMessage: {},
rules: {
subjectId: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
},
};
},
methods: {
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
addTrials() {
this.$emit("update:visible", false);
this.$emit("handleOpenDialog", {}, "confirm");
},
//
getList() {},
//
handleSearch() {},
//
handleReset() {},
//
handleSelectChange() {},
},
};
</script>
<style lang="scss" scoped>
.top {
padding-top: 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.search {
display: flex;
align-items: center;
flex-wrap: wrap;
p {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
&::after {
display: block;
content: "";
flex: 1;
height: 1px;
border-top: 1px solid #ddd;
}
}
.form {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
}
</style>

View File

@ -0,0 +1,216 @@
<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:inspection:message:confirmVisit") }}{{
$t("trials:trials-list:table:researchNumber")
}}T0001132ZhangSan</span
>
<div class="top">
<el-form :inline="true" :model="submitMessage" class="demo-form-inline">
<!--受试者编号-->
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
<el-input v-model="submitMessage.subjectId" disabled></el-input>
</el-form-item>
<!--患者编号-->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="submitMessage.subjectId" disabled></el-input>
</el-form-item>
<!--患者姓名-->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="submitMessage.subjectId" disabled></el-input>
</el-form-item>
</el-form>
</div>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- 检查日期 -->
<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>
<div class="buttonBox">
<!--确认-->
<el-button type="primary" @click="confirm">
{{ $t("trials:seletctedReviews:timeline:confirmation") }}
</el-button>
<!--确认提交-->
<el-button type="primary" @click="confirmSubmit">
{{ $t("trials:inspection:button:confirmAndSubmit") }}
</el-button>
</div>
</div>
<!--访视列表-->
<el-table
ref="confirmVisitList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
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:inspection:table:studyDescription')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--检查类型-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--序列数-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:seriesCount')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--检查日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--操作-->
<el-table-column
:label="$t('common:action:action')"
width="300"
class-name="actionBox"
>
<template slot-scope="scope">
<!--切换访视-->
<el-select v-model="scope.row.visit" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<!-- 详情 -->
<el-button
circle
icon="el-icon-info"
:title="$t('trials:trials-list:action:panel')"
@click.stop="detail(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import Pagination from "@/components/Pagination";
export default {
name: "confirmVisitList",
components: { Pagination },
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
//
searchData: {},
//
total: 0,
loading: false,
list: [{ key: 1, IsUrgent: "123" }],
//
submitMessage: {},
options: [],
};
},
methods: {
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
confirm() {},
//
confirmSubmit() {},
//
getList() {},
//
handleSearch() {},
//
handleReset() {},
//
handleSelectChange() {},
//
detail() {},
},
};
</script>
<style lang="scss" scoped>
.top {
padding-top: 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.search {
display: flex;
align-items: center;
justify-content: space-between;
}
.actionBox {
display: flex;
align-items: center;
justify-content: space-between;
::v-deep .el-select {
width: 80%;
}
}
</style>

View File

@ -0,0 +1,151 @@
<template>
<el-dialog
:visible.sync="visible"
:close-on-click-modal="false"
:fullscreen="true"
custom-class="upload-dialog"
:before-close="beforeCloseStudyDig"
>
<div class="top">
<p>
<span
>{{
$t("trials:uploadDicomList:table:patientInfo")
}}T0001132ZhangSan</span
>|<span>
{{
$t("trials:inspection:research-trials-list:table:joinTrialsNumber")
}}2</span
>
</p>
<el-button type="primary" @click="addTrials">
{{ $t("trials:inspection:button:addTrials") }}
</el-button>
</div>
<!--参与项目列表-->
<el-table
ref="researchTrialsList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
>
<!--项目编号-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-list:table:trialId')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究方案号-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchNumber')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--试验名称-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-list:table:experimentName')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--申办方-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-list:table:sponsor')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--状态-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-list:table:status')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--创建日期-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-list:table:createDate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--最新接收时间-->
<el-table-column :label="$t('common:action:action')" width="250">
<template slot-scope="scope">
<!-- 详情 -->
<el-button
circle
icon="el-icon-info"
:title="$t('trials:trials-list:action:panel')"
@click.stop="detail(scope.row)"
/>
<!-- 移除项目 -->
<el-button
circle
icon="el-icon-delete"
:title="$t('common:button:remove')"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import Pagination from "@/components/Pagination";
export default {
name: "researchTrialsList",
components: { Pagination },
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
//
searchData: {},
//
total: 0,
loading: false,
list: [{ key: 1, VisitName: "123" }],
};
},
methods: {
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
addTrials() {
this.$emit("update:visible", false);
this.$emit("handleOpenDialog", {}, "add");
},
//
getList() {},
//
detail(item) {},
},
};
</script>
<style lang="scss" scoped>
.top {
padding-top: 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>

View File

@ -0,0 +1,159 @@
<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:inspection:message:viewStudy") }}{{
$t("trials:uploadDicomList:table:patientInfo")
}}T0001132ZhangSan</span
>
<div class="search">
<el-form :inline="true" class="base-search-form">
<!-- 检查类型 -->
<el-form-item :label="$t('trials:audit:table:modality')">
<el-select
v-model="searchData.VisitPlanArray"
clearable
multiple
style="width: 140px"
>
<el-option
v-for="(item, index) of modalityList"
:key="index"
:label="item.VisitName"
:value="item.VisitNum"
>
</el-option>
</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>
</div>
<!--检查列表-->
<el-table
ref="viewStudyList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
>
<!--检查描述-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:inspection:table:studyDescription')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--检查类型-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:modality')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--序列数-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:seriesCount')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--检查日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:audit:table:studyDate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--操作-->
<el-table-column :label="$t('common:action:action')" width="250">
<template slot-scope="scope">
<!-- 影像 -->
<el-button type="text" @click.stop="image(scope.row)">{{
$t("trials:inspection:button:image")
}}</el-button>
<!-- 报告 -->
<el-button type="text" @click.stop="report(scope.row)">{{
$t("trials:inspection:button:report")
}}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import Pagination from "@/components/Pagination";
export default {
name: "viewStudyList",
components: { Pagination },
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
//
searchData: {},
modalityList: [],
//
total: 0,
loading: false,
list: [{ key: 1, IsUrgent: "123" }],
//
submitMessage: {},
options: [],
};
},
methods: {
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
getList() {},
//
handleSearch() {},
//
handleReset() {},
//
image() {},
//
report() {},
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@ -0,0 +1,255 @@
<template>
<BaseContainer>
<!-- 搜索框 -->
<template slot="search-container">
<el-form :inline="true" class="base-search-form">
<!-- 患者ID/患者姓名 -->
<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: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:inspection:table:DICOMAE')"
>
<el-select
v-model="searchData.VisitPlanArray"
clearable
multiple
style="width: 140px"
>
<el-option
v-for="(item, index) of dicomAeList"
:key="index"
:label="item.VisitName"
:value="item.VisitNum"
>
<span style="float: left">{{ item.VisitName }}</span>
</el-option>
<el-option key="Other" label="Out of Plan" value="1.11" />
</el-select>
</el-form-item>
<!-- 研究名称 -->
<el-form-item :label="$t('trials:trials-list:table:researchName')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</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
ref="inspectionList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
align="left"
width="45"
:selectable="handleSelectTable"
/>
<!--患者ID-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:uploadDicomList:table:pId')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--患者姓名-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--出生日期-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:inspection:table:birthdate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--性别-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:trials-myinfo:form:gender')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--DICOM AE-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:inspection:table:DICOMAE')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!-- 研究名称 -->
<el-table-column
prop="VisitNum"
:label="$t('trials:trials-list:table:researchName')"
show-overflow-tooltip
min-width="160"
sortable="custom"
>
<template slot-scope="scope">
<el-button
type="text"
@click="handleOpenDialog(scope.row, 'research')"
>
<span>{{ scope.row.VisitName }}</span>
</el-button>
<!-- <span v-else>{{ scope.row.VisitName }}</span> -->
</template>
</el-table-column>
<!-- 检查数 -->
<el-table-column
prop="VisitNum"
:label="$t('trials:studyList:table:count')"
show-overflow-tooltip
min-width="160"
sortable="custom"
>
<template slot-scope="scope">
<el-button
v-if="scope.row.key === 1"
type="text"
@click="handleOpenDialog(scope.row, 'study')"
>
<span>{{ scope.row.VisitName }}</span>
</el-button>
<span v-else>{{ scope.row.VisitName }}</span>
</template>
</el-table-column>
<!--访视数-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:selftConsistencyAnalysis:table:visitNum')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--最新接收时间-->
<el-table-column
prop="IsUrgent"
:label="$t('trials:inspection:table:latestReceiveTime')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--操作-->
<el-table-column :label="$t('common:action:action')" width="250">
<template slot-scope="scope">
<el-button
type="text"
@click.stop="handleOpenDialog(scope.row, 'add')"
>{{ $t("trials:inspection:button:addTrials") }}</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
<!--研究项目列表-->
<researchTrialsList
:visible.sync="researchTrialsVisible"
@handleOpenDialog="handleOpenDialog"
/>
<!--可加入项目列表-->
<addTrialsList
:visible.sync="addTrialsVisible"
@handleOpenDialog="handleOpenDialog"
/>
<!--确认访视列表-->
<confirmVisitList :visible.sync="confirmTrialsVisible" />
<!--查看检查列表-->
<viewStudyList :visible.sync="studyTrialsVisible" />
</BaseContainer>
</template>
<script>
import BaseContainer from "@/components/BaseContainer";
import Pagination from "@/components/Pagination";
import researchTrialsList from "./components/research-trials-list";
import addTrialsList from "./components/add-trials-list";
import confirmVisitList from "./components/confirm-visit-list";
import viewStudyList from "./components/view-study-list";
export default {
name: "inspection",
components: {
BaseContainer,
Pagination,
researchTrialsList,
addTrialsList,
confirmVisitList,
viewStudyList,
},
data() {
return {
//
searchData: {},
dicomAeList: [],
//
total: 0,
loading: false,
list: [{ key: 1, VisitName: "123" }],
//
researchTrialsVisible: false,
//
addTrialsVisible: false,
// 访
confirmTrialsVisible: false,
//
studyTrialsVisible: false,
};
},
methods: {
//
getList() {},
//
handleSearch() {},
//
handleReset() {},
//
handleSelectionChange() {},
//
handleSelectTable() {},
//
handleSortByColumn() {},
//
handleOpenDialog(item, key) {
this[`${key}TrialsVisible`] = true;
},
},
};
</script>
<style lang="scss" scoped>
</style>

View File

@ -19,10 +19,15 @@
size="mini" size="mini"
@select="handleSelect" @select="handleSelect"
> >
<el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir'])" index="1"> <!-- <el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir'])" index="1">
<i class="el-icon-odometer" /> <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">
<i class="el-icon-odometer" />
<!-- 检查 -->
<span slot="title">{{ $t('trials:menuTitle:inspection') }}</span>
</el-menu-item> </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" /> <i class="el-icon-box" />
@ -78,15 +83,13 @@ export default {
} }
}, },
created() { created() {
console.log(!this.hasPermi(['role:air']))
this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer')) this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer'))
this.changeRoute(this.$route) this.changeRoute(this.$route)
console.log(this.TotalNeedSignSystemDocCount)
}, },
methods: { methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }), ...mapMutations({ setLanguage: 'lang/setLanguage' }),
changeRoute(v) { changeRoute(v) {
if (v.path === '/trials/trials-workbench') { if (v.path === '/trials/trials-inspection') {
this.activeIndex = '1' this.activeIndex = '1'
} }
if (v.path === '/trials/trials-list' || ~v.path.indexOf('/trials/trials-panel')) { if (v.path === '/trials/trials-list' || ~v.path.indexOf('/trials/trials-panel')) {
@ -108,7 +111,7 @@ export default {
this.logout() this.logout()
break break
case '1': case '1':
this.go('/trials/trials-workbench') this.go('/trials/trials-inspection')
break break
case '2': case '2':
if (~this.$route.path.indexOf('/trials/trials-panel')) { if (~this.$route.path.indexOf('/trials/trials-panel')) {

View File

@ -11,109 +11,81 @@
:inline="true" :inline="true"
> >
<el-row> <el-row>
<!-- 项目编号 --> <!-- 项目码 -->
<el-form-item v-if="trialForm.Id!== ''" :label="$t('trials:trials-list:form:trialId')"> <el-form-item
v-if="trialForm.Id !== ''"
:label="$t('trials:trials-list:form:trialCode')"
>
<el-input v-model="trialForm.TrialCode" disabled /> <el-input v-model="trialForm.TrialCode" disabled />
</el-form-item> </el-form-item>
<!-- 项目类型 --> <!-- 项目类型 -->
<el-form-item :label="$t('trials:trials-list:form:trialType')" prop="TrialType"> <el-form-item
<el-radio-group v-model="trialForm.TrialType " :disabled="trialForm.Id!== ''"> :label="$t('trials:trials-list:form:trialType')"
<el-radio v-for="item of $d.TrialType" :disabled="isTestUser && (item.value === 1 || item.value === 2)" :key="item.id" :label="item.value">{{ item.label }}</el-radio> prop="TrialType"
>
<el-radio-group
v-model="trialForm.TrialType"
:disabled="trialForm.Id !== ''"
>
<el-radio
v-for="item of $d.TrialType"
:key="item.id"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<!-- 试验名称 --> <!-- 研究名称 -->
<el-form-item :label="$t('trials:trials-list:form:experimentName')" prop="ExperimentName"> <el-form-item
<el-input v-model="trialForm.ExperimentName" type="textarea" :autosize="{ minRows: 1, maxRows: 4}" /> :label="$t('trials:trials-list:table:researchName')"
prop="ExperimentName"
>
<el-input
v-model="trialForm.ExperimentName"
type="textarea"
:autosize="{ minRows: 1, maxRows: 4 }"
/>
</el-form-item> </el-form-item>
<!-- 研究方案号 --> <!-- 研究方案号 -->
<el-form-item :label="$t('trials:trials-list:form:researchNumber')" prop="ResearchProgramNo"> <el-form-item
:label="$t('trials:trials-list:form:researchNumber')"
prop="ResearchProgramNo"
>
<el-input v-model="trialForm.ResearchProgramNo" /> <el-input v-model="trialForm.ResearchProgramNo" />
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<!-- 主研单位 --> <!-- 研究者 -->
<el-form-item :label="$t('trials:trials-list:form:researchUnit')" prop="MainResearchUnit"> <el-form-item
<el-input v-model="trialForm.MainResearchUnit" /> :label="$t('trials:trials-list:form:investigator')"
</el-form-item> prop="HeadPI"
<!-- 负责人PI --> >
<el-form-item :label="$t('trials:trials-list:form:pi')" prop="HeadPI">
<el-input v-model="trialForm.HeadPI" /> <el-input v-model="trialForm.HeadPI" />
</el-form-item> </el-form-item>
</el-row>
<el-row>
<!-- 申办方 --> <!-- 申办方 -->
<el-form-item :label="$t('trials:trials-list:form:sponsor')">
<el-select v-model="trialForm.SponsorId">
<el-option
v-for="(item) in sponsorList"
:key="item.Id"
:label="item.SponsorName"
:value="item.Id"
/>
</el-select>
</el-form-item>
<!-- CRO -->
<el-form-item :label="$t('trials:trials-list:form:cro')">
<el-select v-model="trialForm.CROId">
<el-option
v-for="(item) of croList"
:key="item.Id"
:label="item.CROName"
:value="item.Id"
/>
</el-select>
</el-form-item>
</el-row>
<el-row>
<!-- 是否申报项目 -->
<el-form-item :label="$t('trials:trials-list:form:isDeclaration')" prop="IsDeclaration">
<el-radio-group
v-model="trialForm.IsDeclaration"
>
<el-radio
v-for="item of $d.YesOrNo"
:key="`IsDeclaration${item.value}`"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<!-- DeclarationType -->
<el-form-item <el-form-item
v-if="trialForm.IsDeclaration" :label="$t('trials:trials-list:form:sponsor')"
:label="$t('trials:trials-list:form:declarationType')" prop="SponsorName"
prop="DeclarationTypeEnumList"
:rules="[
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
]"
> >
<el-select <el-input v-model="trialForm.SponsorName" maxlength="200" />
v-model="trialForm.DeclarationTypeEnumList"
size="small"
multiple
clearable
@change="handleDeclarationTypeChange"
style="width: 100%"
>
<el-option v-for="item of $d.DeclarationType" :key="item.value" :value="item.value" :label="item.label" />
</el-select>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<!-- Phase --> <!-- CRO -->
<el-form-item :label="$t('trials:trials-list:form:phase')" prop="PhaseId"> <el-form-item :label="$t('trials:trials-list:form:cro')" prop="croName">
<el-input v-model="trialForm.croName" maxlength="200" />
</el-form-item>
<!-- 药物/器械名称 -->
<el-form-item :label="$t('trials:trials-list:message:D/Dname')">
<el-input v-model="trialForm.croName" />
</el-form-item>
</el-row>
<el-row>
<!-- 临床分期 -->
<el-form-item :label="$t('trials:trials-list:form:phase')" prop="PhaseId">
<el-select v-model="trialForm.PhaseId" @change="handlePhaseChange"> <el-select v-model="trialForm.PhaseId" @change="handlePhaseChange">
<!-- <el-option
v-for="item in phase"
:key="item.Id"
:label="item.Value"
:value="item.Id"
/> -->
<el-option <el-option
v-for="item of $d.Trial_Phase" v-for="item of $d.Trial_Phase"
:key="item.id" :key="item.id"
@ -122,66 +94,15 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-row> <!-- 适应症 -->
<el-row> <el-form-item :label="$t('trials:trials-list:form:indication')">
<el-input v-model="trialForm.IndicationTypeId" />
<!-- 适应症类型 IndicationType -->
<el-form-item :label="$t('trials:trials-list:form:indicationType')" prop="IndicationTypeId">
<el-select v-model="trialForm.IndicationTypeId" @change="handleIndicationTypeChange">
<!-- <el-option
v-for="item of dictionaryList.IndicationType"
:key="item.Id"
:label="item.Value"
:value="item.Id"
/> -->
<el-option
v-for="item of $d.IndicationType"
:key="item.id"
:label="item.label"
:value="item.id"
/>
</el-select>
</el-form-item>
<!-- Indication -->
<el-form-item :label="$t('trials:trials-list:form:indication')" prop="IndicationEnum">
<!-- <el-input v-model="trialForm.Indication" />-->
<el-select :disabled="!trialForm.IndicationTypeId" v-if="![37, 38, 39].includes(trialForm.IndicationEnum)" v-model="trialForm.IndicationEnum">
<el-option
v-for="item of $d.Indication"
v-show="indicationGrouping === item.raw.ChildGroup"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-row v-if="[37, 38, 39].includes(trialForm.IndicationEnum)">
<el-col :span="12">
<el-select :disabled="!trialForm.IndicationTypeId" v-model="trialForm.IndicationEnum" style="width: 100%;margin-right: 10px;">
<el-option
v-for="item of $d.Indication"
v-show="indicationGrouping === item.raw.ChildGroup"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="12">
<el-input :disabled="!trialForm.IndicationTypeId" v-model="trialForm.Indication" />
</el-col>
</el-row>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<!-- Modality --> <!-- 检查技术 -->
<el-form-item :label="$t('trials:trials-list:form:modality')"> <el-form-item :label="$t('trials:trials-list:form:modality')">
<el-select v-model="trialForm.ModalityIds" multiple> <el-select v-model="trialForm.ModalityIds" multiple>
<!-- <el-option
v-for="item of dictionaryList.Modality"
:key="item.Id"
:label="item.Value"
:value="item.Id"
/> -->
<el-option <el-option
v-for="item of $d.Modality" v-for="item of $d.Modality"
:key="item.id" :key="item.id"
@ -190,205 +111,284 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- Sites --> <!-- 阅片标准 -->
<el-form-item :label="$t('trials:trials-list:form:siteCount')"> <el-form-item
<el-input-number v-model="trialForm.PlanSiteCount" controls-position="right" :min="0" /> :label="$t('trials:trials-list:form:criterion')"
prop="CriterionId"
>
<el-select v-model="trialForm.CriterionId">
<el-option
v-for="item of $d.CriterionType"
:key="item.id"
:label="item.label"
:value="item.id"
/>
</el-select>
</el-form-item> </el-form-item>
</el-row> </el-row>
<el-row> <el-row>
<!-- Expected Patients Num --> <!-- 联系人 -->
<el-form-item :label="$t('trials:trials-list:form:patientsNum')"> <el-form-item :label="$t('trials:researchForm:form:contactor')">
<el-input-number <el-input v-model="trialForm.IndicationTypeId" />
v-model="trialForm.ExpectedPatients" </el-form-item>
controls-position="right" <!-- 电话 -->
:min="0" <el-form-item :label="$t('trials:trials-myinfo:form:phone')">
@change="handleExpectedPatientsChange" <el-input v-model="trialForm.phone" type="number" />
</el-form-item>
</el-row>
<el-row>
<!-- 授权时长 -->
<el-form-item
:label="$t('trials:trials-list:table:durationAuthorized')"
prop="durationAuthorized"
>
<el-input v-model="trialForm.durationAuthorized" type="number" />
</el-form-item>
<!-- 授权访视量 -->
<el-form-item
:label="$t('trials:trials-list:table:visitNumberAuthorized')"
prop="visitNumberAuthorized"
>
<el-input
v-model="trialForm.visitNumberAuthorized"
type="number"
disabled
/> />
</el-form-item> </el-form-item>
</el-row>
<el-row>
<!--项目授权码-->
<el-form-item :label="$t('trials:trials-list:form:authorizationCode')">
<el-input v-model="trialForm.authorizationCode" />
</el-form-item>
</el-row>
<el-row>
<!-- Timepoints Per Patient --> <!-- Timepoints Per Patient -->
<el-form-item :label="$t('trials:trials-list:form:timePointsPerPatient')"> <!-- <el-form-item :label="$t('trials:trials-list:form:timePointsPerPatient')">
<el-input-number <el-input-number
v-model="trialForm.TimePointsPerPatient" v-model="trialForm.TimePointsPerPatient"
controls-position="right" controls-position="right"
:min="0" :min="0"
@change="handleTpPerPatientChange" @change="handleTpPerPatientChange"
/> />
</el-form-item>
</el-row>
<el-row>
<!-- Visits -->
<el-form-item :label="$t('trials:trials-list:form:visitCount')">
<el-input-number v-model="trialForm.PlanVisitCount" controls-position="right" :min="0" />
</el-form-item>
</el-row>
<el-row>
<!-- Expedited -->
<el-form-item :label="$t('trials:trials-list:form:expedited')" prop="Expedited">
<el-select v-model="trialForm.Expedited">
<el-option
v-for="item in expeditedOption"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- Turnaround Time -->
<el-form-item :label="$t('trials:trials-list:form:projectCycle')" prop="ProjectCycle">
<el-input v-model="trialForm.ProjectCycle" />
</el-form-item>
</el-row>
<el-row>
<!-- Total Reviewers -->
<!-- <el-form-item :label="$t('trials:trials-list:form:totalReviewers')">
<el-input-number v-model="trialForm.TotalReviewers" controls-position="right" :min="0" />
</el-form-item> -->
<!-- Type of Reviewers -->
<!-- <el-form-item :label="$t('trials:trials-list:form:typeofReviewers')">
<el-select
v-model="trialForm.AttendedReviewerTypeEnumList"
size="small"
multiple
clearable
>
<el-option v-for="item of $d.AttendedReviewerType" :key="item.value" :value="item.value" :label="item.label" />
</el-select>
</el-form-item> --> </el-form-item> -->
</el-row> </el-row>
<el-row style="margin-left:190px"> <el-row> </el-row>
<el-row> </el-row>
<el-row style="margin-left: 190px">
<el-form-item label=""> <el-form-item label="">
<el-button type="primary" :disabled="btnLoading" @click="handleCancel"> <el-button type="primary" :disabled="btnLoading" @click="handleCancel">
{{ $t('trials:trials-list:form:cancel') }} {{ $t("trials:trials-list:form:cancel") }}
</el-button> </el-button>
<el-button type="primary" :loading="btnLoading" @click="handleSave"> <el-button type="primary" :loading="btnLoading" @click="handleSave">
{{ $t('trials:trials-list:form:save') }} {{ $t("trials:trials-list:form:save") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-row> </el-row>
</el-form> </el-form>
</template> </template>
<script> <script>
import store from '@/store' import store from "@/store";
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from "vuex";
import { getTrialInfo, addOrUpdateTrial } from '@/api/trials' import { getTrialInfo, addOrUpdateTrial } from "@/api/trials";
import { getBasicDataSelects } from '@/api/dictionary/dictionary' import { getBasicDataSelects } from "@/api/dictionary/dictionary";
export default { export default {
name: 'TrialForm', name: "TrialForm",
props: { props: {
trialId: { trialId: {
type: String, type: String,
default: '' default: "",
} },
}, },
data() { data() {
const comfirmIndication = (rule, value, callback) => {
if ([37, 38, 39].includes(value)) {
if (!this.trialForm.Indication) {
return callback(new Error(this.$t('common:ruleMessage:specify')))
}
}
callback()
}
// const comfirmDeclarationType = (rule, value, callback) => {
// console.log(value)
// if (value.includes(-1)) {
// if (!this.trialForm.DeclarationTypeOther) {
// return callback(new Error(this.$t('common:ruleMessage:specify')))
// }
// }
// callback()
// }
// const comfirmAttendedReviewerType = (rule, value, callback) => {
// if (value.includes(2)) {
// if (!this.trialForm.AttendedReviewerTypeOther) {
// return callback(new Error(this.$t('common:ruleMessage:specify')))
// }
// }
// callback()
// }
return { return {
trialForm: { trialForm: {
Id: '', visitNumberAuthorized: 1000,
TrialCode: '', Id: "",
TrialCode: "",
TrialType: null, TrialType: null,
SponsorId: '', SponsorId: "",
// CriterionIds: [], CROId: "",
CROId: '', ReviewModeId: "",
ReviewModeId: '',
ReviewTypeIds: [], ReviewTypeIds: [],
// 0 // 0
Expedited: '', Expedited: "",
ModalityIds: [], ModalityIds: [],
Note: '', Note: "",
ExpectedPatients: '', ExpectedPatients: "",
TimePointsPerPatient: '', TimePointsPerPatient: "",
ProjectCycle: '', ProjectCycle: "",
// TotalReviewers: 0, DeclarationTypeId: "",
DeclarationTypeId: '', IndicationTypeId: "",
IndicationTypeId: '', PhaseId: "",
PhaseId: '', AttendedReviewerType: "",
AttendedReviewerType: '',
IsLocked: false, IsLocked: false,
ResearchProgramNo: '', ResearchProgramNo: "",
ExperimentName: '', ExperimentName: "",
MainResearchUnit: '', MainResearchUnit: "",
HeadPI: '', HeadPI: "",
PlanSiteCount: null, PlanSiteCount: null,
PlanVisitCount: null, PlanVisitCount: null,
IndicationEnum: null,
Indication: null, Indication: null,
AttendedReviewerTypeEnumList: [], AttendedReviewerTypeEnumList: [],
DeclarationTypeEnumList: [], DeclarationTypeEnumList: [],
DeclarationTypeOther: null, DeclarationTypeOther: null,
AttendedReviewerTypeOther: null, AttendedReviewerTypeOther: null,
IsDeclaration: null IsDeclaration: null,
}, },
indicationGrouping: null, indicationGrouping: null,
trialFormRules: { trialFormRules: {
//
durationAuthorized: [
{
required: true,
message: this.$t(
"trials:trials-list:formRule:enterDurationAuthorized"
),
trigger: "blur",
},
],
// 访
visitNumberAuthorized: [
{
required: true,
message: this.$t(
"trials:trials-list:formRule:enterDurationAuthorized"
),
trigger: "blur",
},
],
//
CriterionId: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
// /
croName: [
{
max: 200,
message: `${this.$t("common:ruleMessage:maxLength")} 200`,
trigger: "blur",
},
{
pattern: "^[\u4e00-\u9fa5a-zA-Z]+$",
message: this.$t("trisals:trials-list:formRule:onlyEN"),
trigger: "blur",
},
],
//
SponsorName: [
{
max: 200,
message: `${this.$t("common:ruleMessage:maxLength")} 200`,
trigger: "blur",
},
{
pattern: "^[\u4e00-\u9fa5a-zA-Z]+$",
message: this.$t("trisals:trials-list:formRule:onlyEN"),
trigger: "blur",
},
],
Code: [ Code: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
{ max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50` } required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
{ max: 50, message: `${this.$t("common:ruleMessage:maxLength")} 50` },
], ],
TrialType: [ TrialType: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' } {
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
], ],
ResearchProgramNo: [ ResearchProgramNo: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
{ max: 100, message: `${this.$t('common:ruleMessage:maxLength')} 100` } required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
{
max: 100,
message: `${this.$t("common:ruleMessage:maxLength")} 100`,
},
], ],
ExperimentName: [ ExperimentName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
{ max: 100, message: `${this.$t('common:ruleMessage:maxLength')} 100` } required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
{
max: 100,
message: `${this.$t("common:ruleMessage:maxLength")} 100`,
},
], ],
IndicationEnum: [ ProjectCycle: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, { max: 50, message: `${this.$t("common:ruleMessage:maxLength")} 50` },
{ validator: comfirmIndication, trigger: 'blur' }
], ],
ProjectCycle: [{ max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50` }],
ReviewModeId: [ ReviewModeId: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] } {
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
], ],
Expedited: [ Expedited: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] } {
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
],
Note: [
{
max: 500,
message: `${this.$t("common:ruleMessage:maxLength")} 500`,
},
], ],
Note: [{ max: 500, message: `${this.$t('common:ruleMessage:maxLength')} 500` }],
ModalityIds: [ ModalityIds: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] } {
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
],
PhaseId: [
{
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
],
IndicationTypeId: [
{
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
], ],
PhaseId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }],
IndicationTypeId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }],
IsDeclaration: [ IsDeclaration: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] } {
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
], ],
ReviewTypeIds: [ ReviewTypeIds: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] } {
] required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
],
}, },
btnLoading: false, btnLoading: false,
isLock: false, isLock: false,
@ -397,132 +397,161 @@ export default {
declarationNum: null, declarationNum: null,
indicationNum: null, indicationNum: null,
phaseNum: null, phaseNum: null,
dictionaryList: {} dictionaryList: {},
} };
}, },
computed: { computed: {
...mapGetters(['sponsorList', 'croList']), ...mapGetters(["sponsorList", "croList"]),
...mapState('user', ['isTestUser']) ...mapState("user", ["isTestUser"]),
}, },
mounted() { mounted() {
this.initPage() this.initPage();
}, },
methods: { methods: {
initForm() { initForm() {
this.loading = true this.loading = true;
getTrialInfo(this.trialId).then(res => { getTrialInfo(this.trialId)
this.loading = false .then((res) => {
if (res.IsSuccess) { this.loading = false;
for (var item in this.trialForm) { if (res.IsSuccess) {
res.Result[item] === '00000000-0000-0000-0000-000000000000' ? '' : this.$set(this.trialForm, item, res.Result[item]) for (var item in this.trialForm) {
if (item === 'IndicationTypeId') { res.Result[item] === "00000000-0000-0000-0000-000000000000"
this.indicationGrouping = this.$d.IndicationType.filter(v => v.id === res.Result[item])[0].raw.ChildGroup ? ""
: this.$set(this.trialForm, item, res.Result[item]);
if (item === "IndicationTypeId") {
this.indicationGrouping = this.$d.IndicationType.filter(
(v) => v.id === res.Result[item]
)[0].raw.ChildGroup;
}
} }
} }
} })
}).catch(() => { this.loading = false }) .catch(() => {
this.loading = false;
});
}, },
handleSave() { handleSave() {
this.$refs.trialForm.validate(valid => { this.$refs.trialForm.validate((valid) => {
if (valid) { if (valid) {
this.btnLoading = true this.btnLoading = true;
if (!this.trialForm.IsDeclaration) { if (!this.trialForm.IsDeclaration) {
this.declarationNum = 'N' this.declarationNum = "N";
} }
if (!this.trialForm.Id) { if (!this.trialForm.Id) {
this.trialForm.TrialCode = `${this.declarationNum}${this.indicationNum}${this.phaseNum}` this.trialForm.TrialCode = `${this.declarationNum}${this.indicationNum}${this.phaseNum}`;
console.log(this.trialForm.TrialCode) console.log(this.trialForm.TrialCode);
} }
var params = JSON.parse(JSON.stringify(this.trialForm)) var params = JSON.parse(JSON.stringify(this.trialForm));
addOrUpdateTrial(params).then(res => { addOrUpdateTrial(params)
this.btnLoading = false .then((res) => {
if (!this.trialForm.Id) { this.btnLoading = false;
this.trialForm.Id = res.Result if (!this.trialForm.Id) {
this.$message.success(this.$t('trials:trials-list:message:addedSuccessfully')) this.trialForm.Id = res.Result;
} else { this.$message.success(
this.$message.success(this.$t('trials:trials-list:message:updatedSuccessfully')) this.$t("trials:trials-list:message:addedSuccessfully")
} );
} else {
this.$message.success(
this.$t("trials:trials-list:message:updatedSuccessfully")
);
}
this.$emit('getList') this.$emit("getList");
this.$emit('closeDialog') this.$emit("closeDialog");
}).catch(() => { })
this.btnLoading = false .catch(() => {
}) this.btnLoading = false;
});
} }
}) });
}, },
handleCancel() { handleCancel() {
this.$emit('closeDialog') this.$emit("closeDialog");
// this.$refs['trialForm'].resetFields() // this.$refs['trialForm'].resetFields()
}, },
handleDeclarationTypeChange(val) { handleDeclarationTypeChange(val) {
if (val.length === 1) { if (val.length === 1) {
// this.declarationNum = this.dictionaryList.DeclarationType.filter(item => item.Idd === val)[0].ShowOrder // this.declarationNum = this.dictionaryList.DeclarationType.filter(item => item.Idd === val)[0].ShowOrder
this.declarationNum = this.$d.DeclarationType.filter(item => item.value === val[0])[0].raw.ShowOrder this.declarationNum = this.$d.DeclarationType.filter(
(item) => item.value === val[0]
)[0].raw.ShowOrder;
if (this.trialForm.Id) { if (this.trialForm.Id) {
const ids = [...this.trialForm.TrialCode] const ids = [...this.trialForm.TrialCode];
ids[2] = this.declarationNum ids[2] = this.declarationNum;
this.trialForm.TrialCode = ids.join('') this.trialForm.TrialCode = ids.join("");
} }
} else { } else {
this.declarationNum = 'X' this.declarationNum = "X";
if (this.trialForm.Id) { if (this.trialForm.Id) {
const ids = [...this.trialForm.TrialCode] const ids = [...this.trialForm.TrialCode];
ids[2] = this.declarationNum ids[2] = this.declarationNum;
this.trialForm.TrialCode = ids.join('') this.trialForm.TrialCode = ids.join("");
} }
} }
}, },
handleIndicationTypeChange(val) { handleIndicationTypeChange(val) {
this.indicationGrouping = null this.indicationGrouping = null;
if (val) { if (val) {
// this.indicationNum = this.dictionaryList.IndicationType.filter(item => item.Id === val)[0].ShowOrder // this.indicationNum = this.dictionaryList.IndicationType.filter(item => item.Id === val)[0].ShowOrder
this.indicationNum = this.$d.IndicationType.filter(item => item.id === val)[0].raw.ShowOrder this.indicationNum = this.$d.IndicationType.filter(
(item) => item.id === val
)[0].raw.ShowOrder;
if (this.trialForm.Id) { if (this.trialForm.Id) {
const ids = [...this.trialForm.TrialCode] const ids = [...this.trialForm.TrialCode];
ids[3] = this.indicationNum ids[3] = this.indicationNum;
this.trialForm.TrialCode = ids.join('') this.trialForm.TrialCode = ids.join("");
} }
this.indicationGrouping = this.$d.IndicationType.filter(item => item.id === val)[0].raw.ChildGroup this.indicationGrouping = this.$d.IndicationType.filter(
(item) => item.id === val
)[0].raw.ChildGroup;
} }
this.trialForm.Indication = null this.trialForm.Indication = null;
}, },
handlePhaseChange(val) { handlePhaseChange(val) {
if (val) { if (val) {
// const phase = this.dictionaryList['Trial_Phase'] // const phase = this.dictionaryList['Trial_Phase']
// this.phaseNum = phase.filter(item => item.Id === val)[0].ShowOrder // this.phaseNum = phase.filter(item => item.Id === val)[0].ShowOrder
this.phaseNum = this.$d.Trial_Phase.filter(item => item.id === val)[0].raw.ShowOrder this.phaseNum = this.$d.Trial_Phase.filter(
(item) => item.id === val
)[0].raw.ShowOrder;
if (this.trialForm.Id) { if (this.trialForm.Id) {
const ids = [...this.trialForm.TrialCode] const ids = [...this.trialForm.TrialCode];
ids[4] = this.phaseNum ids[4] = this.phaseNum;
this.trialForm.TrialCode = ids.join('') this.trialForm.TrialCode = ids.join("");
} }
} }
}, },
handleExpectedPatientsChange(val) { handleExpectedPatientsChange(val) {
this.trialForm.PlanVisitCount = val * this.trialForm.TimePointsPerPatient this.trialForm.PlanVisitCount = val * this.trialForm.TimePointsPerPatient;
}, },
handleTpPerPatientChange(val) { handleTpPerPatientChange(val) {
this.trialForm.PlanVisitCount = val * this.trialForm.ExpectedPatients this.trialForm.PlanVisitCount = val * this.trialForm.ExpectedPatients;
}, },
async initPage() { async initPage() {
this.loading = true this.loading = true;
await this.getDicData() await this.getDicData();
await store.dispatch('global/getSponsorList') await store.dispatch("global/getSponsorList");
await store.dispatch('global/getCROList') await store.dispatch("global/getCROList");
if (this.trialId) { if (this.trialId) {
this.trialForm.Id = this.trialId this.trialForm.Id = this.trialId;
this.initForm() this.initForm();
} }
this.loading = false this.loading = false;
}, },
getDicData() { getDicData() {
getBasicDataSelects(['DeclarationType', 'IndicationType', 'Modality', 'ReviewMode', 'ReviewType', 'Trial_Phase']).then(res => { getBasicDataSelects([
this.dictionaryList = { ...res.Result } "DeclarationType",
}) "IndicationType",
} "Modality",
} "ReviewMode",
} "ReviewType",
"Trial_Phase",
]).then((res) => {
this.dictionaryList = { ...res.Result };
});
},
},
};
</script> </script>
<style> <style>
.trial-Form .el-input, .trial-Form .el-input,
@ -532,7 +561,7 @@ export default {
.trial-Form .el-textarea { .trial-Form .el-textarea {
width: 340px; width: 340px;
} }
.trial-Form .el-col .el-input{ .trial-Form .el-col .el-input {
width: 165px; width: 165px;
margin-right: 10px; margin-right: 10px;
} }

File diff suppressed because it is too large Load Diff

View File

@ -37,37 +37,42 @@
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<!-- 查询 --> <!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }} {{ $t("common:button:search") }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
</el-button>
<!-- 添加平台用户 -->
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:add-internal-staff']"
type="primary" type="primary"
style="margin-left:10px" icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
<!-- 添加用户 -->
<el-button
v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:add-internal-staff',
]"
type="primary"
style="margin-left: 10px"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleAdd('Add')" @click="handleAdd('Add')"
> >
{{ $t('trials:staff:button:addInternalStaff') }} {{ $t("trials:staff:button:addStaff") }}
</el-button> </el-button>
<!-- 添加新用户 --> <!-- 添加新用户 -->
<el-button <!-- <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:add-external-staff']" v-hasPermi="['trials:trials-panel:setting:personnel-manage:add-external-staff']"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleAdd('External')" @click="handleAdd('External')"
> >
{{ $t('trials:staff:button:addExternalStaff') }} {{ $t('trials:staff:button:addExternalStaff') }}
</el-button> </el-button> -->
<!-- 导出 --> <!-- 导出 -->
<el-button <el-button
type="primary" type="primary"
@ -75,7 +80,7 @@
:disabled="list.length === 0" :disabled="list.length === 0"
@click="handleExport" @click="handleExport"
> >
{{ $t('common:button:export') }} {{ $t("common:button:export") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -84,6 +89,7 @@
<!-- 项目参与人员列表 --> <!-- 项目参与人员列表 -->
<el-table <el-table
ref="settingList" ref="settingList"
v-adaptive="{ bottomOffset: 60 }"
v-loading="listLoading" v-loading="listLoading"
:data="list" :data="list"
stripe stripe
@ -147,8 +153,12 @@
min-width="40" min-width="40"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsDeleted" type="danger">{{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}</el-tag> <el-tag v-if="scope.row.IsDeleted" type="danger">{{
<el-tag v-else>{{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}</el-tag> $fd("IsUserExitTrial", scope.row.IsDeleted)
}}</el-tag>
<el-tag v-else>{{
$fd("IsUserExitTrial", scope.row.IsDeleted)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 加入日期 --> <!-- 加入日期 -->
@ -160,7 +170,11 @@
width="160" width="160"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.JoinTime?moment(scope.row.JoinTime).format('YYYY-MM-DD'):'' }} {{
scope.row.JoinTime
? moment(scope.row.JoinTime).format("YYYY-MM-DD")
: ""
}}
</template> </template>
</el-table-column> </el-table-column>
<!-- 退出日期 --> <!-- 退出日期 -->
@ -172,7 +186,11 @@
width="160" width="160"
> >
<template slot-scope="scope"> <template slot-scope="scope">
{{ scope.row.RemoveTime? moment(scope.row.RemoveTime).format('YYYY-MM-DD'):'' }} {{
scope.row.RemoveTime
? moment(scope.row.RemoveTime).format("YYYY-MM-DD")
: ""
}}
</template> </template>
</el-table-column> </el-table-column>
<!-- 授权时间 --> <!-- 授权时间 -->
@ -203,7 +221,7 @@
circle circle
:title="$t('trials:staff:action:status')" :title="$t('trials:staff:action:status')"
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
:disabled="scope.row.UserTypeEnum*1===3" :disabled="scope.row.UserTypeEnum * 1 === 3"
@click="handleStatus(scope.row)" @click="handleStatus(scope.row)"
/> />
</template> </template>
@ -211,34 +229,60 @@
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<div class="pagination" style="text-align:right"> <div class="pagination" style="text-align: right">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" /> <pagination
:total="total"
:page.sync="listQuery.PageIndex"
:limit.sync="listQuery.PageSize"
@pagination="getList"
/>
</div> </div>
<!-- 分配参与人员模态框 --> <!-- 分配参与人员模态框 -->
<base-model v-if="staff_model.visible" :config="staff_model"> <base-model v-if="staff_model.visible" :config="staff_model">
<template slot="dialog-body"> <template slot="dialog-body">
<StaffForm v-if="isAdd == 'Add'" @closeDialog="closeDialog" /> <StaffForm v-if="isAdd == 'Add'" @closeDialog="closeDialog" />
<StaffExternalForm v-else @closeDialog="closeDialog" @getList="getList" /> <StaffExternalForm
v-else
@closeDialog="closeDialog"
@getList="getList"
/>
</template> </template>
</base-model> </base-model>
<!-- 修改参与者人员状态 --> <!-- 修改参与者人员状态 -->
<base-model v-if="status_model.visible" :config="status_model"> <base-model v-if="status_model.visible" :config="status_model">
<template slot="dialog-body"> <template slot="dialog-body">
<el-form ref="statusForm" :model="statusForm" label-width="110px" size="small" :rules="statusRules"> <el-form
ref="statusForm"
:model="statusForm"
label-width="110px"
size="small"
:rules="statusRules"
>
<!-- Status --> <!-- Status -->
<el-form-item :label="$t('trials:staff:table:status')" prop="isDeleted"> <el-form-item
<el-radio-group v-model="statusForm.isDeleted" @change="handleIsDeletedChanged"> :label="$t('trials:staff:table:status')"
prop="isDeleted"
>
<el-radio-group
v-model="statusForm.isDeleted"
@change="handleIsDeletedChanged"
>
<el-radio <el-radio
v-for="item of $d.IsUserExitTrial" v-for="item of $d.IsUserExitTrial"
:key="`statusForm.isDeleted${item.value}`" :key="`statusForm.isDeleted${item.value}`"
:label="item.value" :label="item.value"
>{{ item.label }}</el-radio> >{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<!-- 退出日期 --> <!-- 退出日期 -->
<el-form-item v-if="statusForm.isDeleted" :label="$t('trials:staff:table:exitTime')" prop="removeTime"> <el-form-item
v-if="statusForm.isDeleted"
:label="$t('trials:staff:table:exitTime')"
prop="removeTime"
>
<el-date-picker <el-date-picker
v-model="statusForm.removeTime" v-model="statusForm.removeTime"
type="date" type="date"
@ -248,7 +292,11 @@
/> />
</el-form-item> </el-form-item>
<!-- 加入日期 --> <!-- 加入日期 -->
<el-form-item v-else :label="$t('trials:staff:table:joinTime')" prop="joinTime"> <el-form-item
v-else
:label="$t('trials:staff:table:joinTime')"
prop="joinTime"
>
<el-date-picker <el-date-picker
v-model="statusForm.joinTime" v-model="statusForm.joinTime"
type="date" type="date"
@ -258,39 +306,53 @@
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<template slot="dialog-footer"> <template slot="dialog-footer">
<el-button :disabled="btnLoading" size="small" type="primary" @click="status_model.visible = false"> <el-button
{{ $t('common:button:cancel') }} :disabled="btnLoading"
size="small"
type="primary"
@click="status_model.visible = false"
>
{{ $t("common:button:cancel") }}
</el-button> </el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="saveStatus"> <el-button
{{ $t('common:button:save') }} size="small"
type="primary"
:loading="btnLoading"
@click="saveStatus"
>
{{ $t("common:button:save") }}
</el-button> </el-button>
</template> </template>
</base-model> </base-model>
</div> </div>
</template> </template>
<script> <script>
import { getMaintenanceList, getTrialUserTypeList, updateTrialUser, trialUserListExport } from '@/api/trials' import {
import Pagination from '@/components/Pagination' getMaintenanceList,
import StaffForm from './staffForm' getTrialUserTypeList,
import StaffExternalForm from './staffExternalForm' updateTrialUser,
import BaseModel from '@/components/BaseModel' trialUserListExport,
import moment from 'moment' } from "@/api/trials";
import Pagination from "@/components/Pagination";
import StaffForm from "./staffForm";
import StaffExternalForm from "./staffExternalForm";
import BaseModel from "@/components/BaseModel";
import moment from "moment";
const getListQueryDefault = () => { const getListQueryDefault = () => {
return { return {
UserRealName: '', UserRealName: "",
UserName: '', UserName: "",
UserTypeId: '', UserTypeId: "",
OrganizationName: '', OrganizationName: "",
IsDeleted: null, IsDeleted: null,
PageIndex: 1, PageIndex: 1,
PageSize: 20 PageSize: 20,
} };
} };
export default { export default {
name: 'Staff', name: "Staff",
components: { Pagination, StaffForm, BaseModel, StaffExternalForm }, components: { Pagination, StaffForm, BaseModel, StaffExternalForm },
data() { data() {
return { return {
@ -298,157 +360,190 @@ export default {
listQuery: getListQueryDefault(), listQuery: getListQueryDefault(),
listLoading: false, listLoading: false,
total: 0, total: 0,
staff_model: { visible: false, title: this.$t('trials:staff:dialogTitle:add'), width: '1200px' }, staff_model: {
status_model: { visible: false, title: this.$t('trials:staff:dialogTitle:status'), width: '500px' }, visible: false,
title: this.$t("trials:staff:dialogTitle:add"),
width: "1200px",
},
status_model: {
visible: false,
title: this.$t("trials:staff:dialogTitle:status"),
width: "500px",
},
userTypeOptions: [], userTypeOptions: [],
isAdd: 'Add', isAdd: "Add",
staffStatus: null, staffStatus: null,
btnLoading: false, btnLoading: false,
currentRow: {}, currentRow: {},
trialId: '', trialId: "",
moment, moment,
statusForm: { isDeleted: false, removeTime: '', joinTime: '' }, statusForm: { isDeleted: false, removeTime: "", joinTime: "" },
statusRules: { statusRules: {
removeTime: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] }], removeTime: [
joinTime: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] }] {
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur"],
},
],
joinTime: [
{
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur"],
},
],
}, },
pickerOption: { pickerOption: {
disabledDate: time => { disabledDate: (time) => {
return time.getTime() > Date.now() return time.getTime() > Date.now();
} },
} },
} };
}, },
mounted() { mounted() {
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId;
this.getUserType() this.getUserType();
this.getList() this.getList();
}, },
methods: { methods: {
// //
getList() { getList() {
this.listLoading = true this.listLoading = true;
this.listQuery.TrialId = this.trialId this.listQuery.TrialId = this.trialId;
getMaintenanceList(this.listQuery).then(res => { getMaintenanceList(this.listQuery)
this.listLoading = false .then((res) => {
this.list = res.Result.CurrentPageData this.listLoading = false;
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData;
}).catch(() => { this.listLoading = false }) this.total = res.Result.TotalCount;
})
.catch(() => {
this.listLoading = false;
});
}, },
// //
handleAdd(type) { handleAdd(type) {
if (type === 'Add') { if (type === "Add") {
this.staff_model.title = this.$t('trials:staff:button:addInternalStaff') this.staff_model.title = this.$t("trials:staff:button:addStaff");
} else { } else {
this.staff_model.title = this.$t('trials:staff:button:addExternalStaff') this.staff_model.title = this.$t(
"trials:staff:button:addExternalStaff"
);
} }
this.staff_model.visible = true this.staff_model.visible = true;
this.isAdd = type this.isAdd = type;
}, },
handleStatus(row) { handleStatus(row) {
const { IsDeleted, RemoveTime, JoinTime } = { ...row } const { IsDeleted, RemoveTime, JoinTime } = { ...row };
this.currentRow = { ...row } this.currentRow = { ...row };
this.statusForm.isDeleted = IsDeleted this.statusForm.isDeleted = IsDeleted;
this.statusForm.removeTime = RemoveTime this.statusForm.removeTime = RemoveTime;
this.statusForm.joinTime = JoinTime this.statusForm.joinTime = JoinTime;
this.status_model.visible = true this.status_model.visible = true;
}, },
// //
saveStatus() { saveStatus() {
this.$refs.statusForm.validate(valid => { this.$refs.statusForm.validate((valid) => {
if (!valid) return if (!valid) return;
this.btnLoading = true this.btnLoading = true;
const param = { const param = {
id: this.currentRow.Id, id: this.currentRow.Id,
trialId: this.trialId, trialId: this.trialId,
isDeleted: this.statusForm.isDeleted, isDeleted: this.statusForm.isDeleted,
removeTime: this.statusForm.removeTime, removeTime: this.statusForm.removeTime,
joinTime: this.statusForm.joinTime joinTime: this.statusForm.joinTime,
} };
updateTrialUser(param) updateTrialUser(param)
.then(res => { .then((res) => {
this.btnLoading = false this.btnLoading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
this.status_model.visible = false this.status_model.visible = false;
this.getList() this.getList();
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(
this.$t("common:message:savedSuccessfully")
);
} }
}).catch(() => {
this.btnLoading = false
}) })
}) .catch(() => {
this.btnLoading = false;
});
});
}, },
handleIsDeletedChanged(val) { handleIsDeletedChanged(val) {
if (val) { if (val) {
this.statusForm.joinTime = '' this.statusForm.joinTime = "";
} else { } else {
this.statusForm.removeTime = '' this.statusForm.removeTime = "";
} }
}, },
// //
handleSearch() { handleSearch() {
this.listQuery.PageIndex = 1 this.listQuery.PageIndex = 1;
this.getList() this.getList();
}, },
// //
handleReset() { handleReset() {
this.listQuery = getListQueryDefault() this.listQuery = getListQueryDefault();
this.getList() this.getList();
}, },
// //
handleSortByColumn(column) { handleSortByColumn(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.listQuery.Asc = true this.listQuery.Asc = true;
} else { } else {
this.listQuery.Asc = false this.listQuery.Asc = false;
} }
this.listQuery.SortField = column.prop this.listQuery.SortField = column.prop;
this.listQuery.PageIndex = 1 this.listQuery.PageIndex = 1;
this.getList() this.getList();
}, },
// //
closeDialog() { closeDialog() {
this.staff_model.visible = false this.staff_model.visible = false;
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(this.$t("common:message:savedSuccessfully"));
this.getList() this.getList();
}, },
// //
handleExport() { handleExport() {
this.listLoading = true this.listLoading = true;
this.listQuery.TrialId = this.trialId this.listQuery.TrialId = this.trialId;
trialUserListExport({ ...this.listQuery }).then((data) => { trialUserListExport({ ...this.listQuery })
this.listLoading = false .then((data) => {
}).catch(() => { this.listLoading = false }) this.listLoading = false;
})
.catch(() => {
this.listLoading = false;
});
}, },
// //
getUserType() { getUserType() {
getTrialUserTypeList().then(res => { getTrialUserTypeList().then((res) => {
this.userTypeOptions = res.Result this.userTypeOptions = res.Result;
}) });
} },
} },
} };
</script> </script>
<style lang="scss"> <style lang="scss">
.participant-list{ .participant-list {
.filter-box{ .filter-box {
display: flex; display: flex;
padding: 5px; padding: 5px;
.base-search-form{ .base-search-form {
.el-form-item{ .el-form-item {
margin-bottom: 0px; margin-bottom: 0px;
} }
} }
.mr{ .mr {
margin-right: 5px; margin-right: 5px;
width: 120px; width: 120px;
} }
} }
.el-dialog__header{ .el-dialog__header {
padding:10px; padding: 10px;
} }
.el-dialog__body{ .el-dialog__body {
padding:10px; padding: 10px;
} }
} }
</style> </style>

View File

@ -1,51 +1,52 @@
<template> <template>
<div class="personnel-container"> <div class="personnel-container">
<el-collapse v-model="activeNames" class="personnel-manage"> <el-collapse v-model="activeNames" class="personnel-manage">
<!-- Staff --> <!-- 人员 -->
<el-collapse-item :title="$t('trials:staff:title:staff')" name="Staff"> <Staff ref="staffList" />
<!-- <el-collapse-item :title="$t('trials:staff:title:staff')" name="Staff">
<Staff ref="staffList" /> <Staff ref="staffList" />
</el-collapse-item> </el-collapse-item> -->
<!-- Sites --> <!-- Sites -->
<el-collapse-item :title="$t('trials:siteAndStaff:title:site')" name="Sites"> <!-- <el-collapse-item :title="$t('trials:siteAndStaff:title:site')" name="Sites">
<Site ref="siteList" @refreshPage="refreshPage" /> <Site ref="siteList" @refreshPage="refreshPage" />
</el-collapse-item> </el-collapse-item> -->
</el-collapse> </el-collapse>
</div> </div>
</template> </template>
<script> <script>
import Staff from './components/staff' import Staff from "./components/staff";
import Site from './components/site' // import Site from "./components/site";
export default { export default {
name: 'PersonnelManage', name: "PersonnelManage",
components: { Staff, Site }, components: {
Staff, //Site
},
data() { data() {
return { return {
activeNames: ['Staff', 'Sites'] // activeNames: ["Staff", "Sites"],
} };
}, },
methods: { methods: {
refreshPage() { refreshPage() {
this.$refs['staffList'].handleReset() this.$refs["staffList"].handleReset();
this.$refs['siteList'].handleReset() // this.$refs["siteList"].handleReset();
} },
} },
} };
</script> </script>
<style lang="scss"> <style lang="scss">
.personnel-container{ .personnel-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
background: #fff; background: #fff;
.personnel-manage{ .personnel-manage {
width: 100%; width: 100%;
flex: 1; flex: 1;
.el-collapse-item__header{ .el-collapse-item__header {
background:#e5ecef; background: #e5ecef;
padding-left:10px; padding-left: 10px;
} }
} }
} }
</style> </style>

View File

@ -5,75 +5,23 @@
:model="form" :model="form"
:rules="rules" :rules="rules"
size="small" size="small"
label-width="200px" label-width="100px"
> >
<div class="base-dialog-body"> <div class="base-dialog-body">
<!-- Site -->
<el-form-item :label="$t('trials:subject:table:site')" prop="SiteId">
<el-select
v-model="form.SiteId"
clearable
filterable
style="width:100%"
:disabled="form.StudyCount>0 || isEdit"
>
<el-option
v-for="item of siteOptions"
:key="item.Id"
:label="item.TrialSiteCode"
:value="item.SiteId"
/>
</el-select>
</el-form-item>
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-form-item :label="$t('trials:subject:table:subjectId')" prop="Code"> <el-form-item :label="$t('trials:subject:table:subjectId')" prop="Code">
<el-input v-model="form.Code" :disabled="form.StudyCount > 0 || isEdit" /> <el-input v-model="form.Code" />
<span v-show="otherInfo.IsNoticeSubjectCodeRule" style="color:#F56C6C;font-size:12px;">{{ otherInfo.SubjectCodeRule }}</span>
</el-form-item> </el-form-item>
<!-- 受试者第二编号 --> <!-- 患者编号 -->
<el-form-item v-if="otherInfo.IsSubjectSecondCodeView" :label="$t('trials:subject:table:medicalNo')" prop="MedicalNo"> <el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="form.MedicalNo" :disabled="form.StudyCount > 0 || isEdit" /> <el-input v-model="form.Code" disabled />
</el-form-item> </el-form-item>
<!-- 访视基准日期 --> <!-- 患者姓名 -->
<el-form-item <el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
v-show="otherInfo.IsHaveFirstGiveMedicineDate" <el-input v-model="form.Code" disabled />
:label="$t('trials:subject:table:firstGiveMedicineTime')"
>
<el-date-picker
v-model="form.FirstGiveMedicineTime"
type="date"
:picker-options="pickerOption"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
/>
<div>
<span style="color:#F56C6C;font-size:12px;">{{ otherInfo.VisitBaseDataDes }}</span>
</div>
</el-form-item>
<!-- Age -->
<el-form-item
v-if="otherInfo.IsHaveSubjectAge"
:label="$t('trials:subject:table:age')"
prop="Age"
>
<el-input-number v-model="form.Age" controls-position="right" :min="0" />
</el-form-item>
<!-- Gender -->
<el-form-item v-if="otherInfo.IsSubjectSexView" :label="$t('trials:subject:table:gender')">
<el-radio-group v-model="form.Sex">
<el-radio label="F">F</el-radio>
<el-radio label="M">M</el-radio>
<el-radio label="O">O</el-radio>
</el-radio-group>
</el-form-item>
<!-- 是否加急 -->
<el-form-item v-if="otherInfo.IsSubjectExpeditedView" :label="$t('trials:subject:table:isUrgent')">
<el-radio-group v-model="form.IsUrgent">
<el-radio v-for="item of $d.YesOrNo" :label="item.value">{{ item.label }}</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
</div> </div>
<div class="base-dialog-footer" style="text-align:right;margin-top:10px;"> <div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
<el-form-item> <el-form-item>
<!-- 取消 --> <!-- 取消 -->
<el-button <el-button
@ -82,126 +30,126 @@
type="primary" type="primary"
@click="handleCancel" @click="handleCancel"
> >
{{ $t('common:button:cancel') }} {{ $t("common:button:cancel") }}
</el-button> </el-button>
<!-- 保存 --> <!-- 保存 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave"> <el-button
{{ $t('common:button:save') }} size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>
{{ $t("common:button:save") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
</template> </template>
<script> <script>
import { getTrialSiteSelect, addOrUpdateSubject } from '@/api/trials' import { getTrialSiteSelect, addOrUpdateSubject } from "@/api/trials";
export default { export default {
name: 'SubjectForm', name: "SubjectForm",
props: { props: {
data: { data: {
type: Object, type: Object,
default() { return {} } default() {
return {};
},
}, },
otherInfo: { otherInfo: {
type: Object, type: Object,
default() { return {} } default() {
} return {};
},
},
}, },
data() { data() {
return { return {
form: { form: {
Id: '', Id: "",
Code: '', Code: "",
ShortName: '', ShortName: "",
Height: '', Height: "",
Weight: '', Weight: "",
Age: '', Age: "",
Sex: '', Sex: "",
BirthDate: '', BirthDate: "",
SiteId: '', SiteId: "",
MedicalNo: '', MedicalNo: "",
Status: 1, Status: 1,
FirstGiveMedicineTime: '', FirstGiveMedicineTime: "",
OutEnrollmentTime: '', OutEnrollmentTime: "",
VisitOverTime: '', VisitOverTime: "",
Reason: '', Reason: "",
StudyCount: '', StudyCount: "",
SignDate: '', SignDate: "",
IsUrgent: false IsUrgent: false,
}, },
isHaveSubjectAge: false,
rules: { rules: {
Code: [ Code: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
{ max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50` } required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
{ max: 50, message: `${this.$t("common:ruleMessage:maxLength")} 50` },
], ],
// ShortName: [{ required: true, message: 'Please specify', trigger: 'blur' },
// { max: 50, message: 'The maximum length is 50' }],
Age: [{ required: this.otherInfo.IsHaveSubjectAge || false, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }],
// Sex: [
// { required: true, message: 'Please specify', trigger: 'blur' }
// ],
SiteId: [{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }],
Reason: [{ max: 500, message: `${this.$t('common:ruleMessage:maxLength')} 500` }]
},
pickerOption: {
disabledDate: time => {
return time.getTime() > Date.now()
}
}, },
btnLoading: false, btnLoading: false,
siteOptions: [], siteOptions: [],
loading: false, loading: false,
trialId: '' trialId: "",
} };
}, },
computed: { computed: {
isEdit() { isEdit() {
return (!!this.form.Id) && this.hasPermi(['role:crc']) return !!this.form.Id && this.hasPermi(["role:crc"]);
} },
}, },
mounted() { mounted() {
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId;
this.initForm() this.initForm();
}, },
methods: { methods: {
async initForm() { async initForm() {
this.loading = true this.loading = true;
const res = await getTrialSiteSelect(this.trialId) const res = await getTrialSiteSelect(this.trialId);
this.loading = false this.loading = false;
this.siteOptions = res.Result this.siteOptions = res.Result;
if (Object.keys(this.data).length > 0) { if (Object.keys(this.data).length > 0) {
for (const k in this.form) { for (const k in this.form) {
if (this.data.hasOwnProperty(k)) { if (this.data.hasOwnProperty(k)) {
this.form[k] = this.data[k] this.form[k] = this.data[k];
} }
} }
} }
this.form.TrialId = this.trialId this.form.TrialId = this.trialId;
}, },
handleSave() { handleSave() {
this.$refs.subjectForm.validate(valid => { this.$refs.subjectForm.validate((valid) => {
if (!valid) return if (!valid) return;
this.btnLoading = true this.btnLoading = true;
addOrUpdateSubject(this.form).then(res => { addOrUpdateSubject(this.form)
this.btnLoading = false .then((res) => {
this.$emit('getList') this.btnLoading = false;
this.$emit('close') this.$emit("getList");
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$emit("close");
}) this.$message.success(this.$t("common:message:savedSuccessfully"));
.catch(() => {
this.btnLoading = false
}) })
}) .catch(() => {
this.btnLoading = false;
});
});
}, },
handleCancel() { handleCancel() {
this.$emit('close') this.$emit("close");
}, },
getSite() { getSite() {
getTrialSiteSelect(this.trialId).then(res => { this.siteList = res.Result }) getTrialSiteSelect(this.trialId).then((res) => {
} this.siteList = res.Result;
} });
} },
},
};
</script> </script>

View File

@ -0,0 +1,243 @@
<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:inspection:button:addTrials") }}{{
$t("trials:uploadDicomList:table:patientInfo")
}}T0001132ZhangSan</span
>
<div class="top">
<el-form
:inline="true"
:model="submitMessage"
class="demo-form-inline"
:rules="rules"
>
<!--受试者编号-->
<el-form-item
:label="$t('trials:crcQuestion:table:subjectId')"
prop="subjectId"
>
<el-input v-model="submitMessage.subjectId"></el-input>
</el-form-item>
</el-form>
</div>
<div class="search">
<p>{{ $t("trials:inspection:message:checkAddTrials") }}</p>
<div class="form">
<el-form :inline="true" class="base-search-form">
<!-- 研究方案编号 -->
<el-form-item :label="$t('trials:trials-list:table:researchNumber')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 研究名称 -->
<el-form-item :label="$t('trials:trials-list:table:researchName')">
<el-input v-model="searchData.SubjectInfo" style="width: 100px" />
</el-form-item>
<!-- 申办方 -->
<el-form-item
class="my_multiple"
:label="$t('trials:trials-list:table:sponsor')"
>
<el-select
v-model="searchData.VisitPlanArray"
clearable
multiple
style="width: 140px"
>
<el-option
v-for="(item, index) of sponsorList"
:key="index"
:label="item.VisitName"
:value="item.VisitNum"
>
</el-option>
</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>
<el-button type="primary" @click="addTrials">
{{ $t("trials:addRP:button:confirmAddPR") }}
</el-button>
</div>
</div>
<!--可加入项目列表-->
<!--:header-cell-style="{ background: '#f9f9f9' }"-->
<el-table
ref="addTrialsList"
v-loading="loading"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
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:trials-list:form:trialType')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究方案号-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchNumber')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--研究名称-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:researchName')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--申办方-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:sponsor')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--状态-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:status')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--创建日期-->
<el-table-column
align="center"
prop="IsUrgent"
:label="$t('trials:trials-list:table:createDate')"
show-overflow-tooltip
min-width="140"
></el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</el-dialog>
</template>
<script>
import Pagination from "@/components/Pagination";
export default {
name: "addSubject",
components: { Pagination },
props: {
visible: {
require: true,
default: false,
},
},
data() {
return {
//
searchData: {},
sponsorList: [],
//
total: 0,
loading: false,
list: [{ key: 1, IsUrgent: "123" }],
//
submitMessage: {},
rules: {
subjectId: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
},
};
},
methods: {
//
beforeCloseStudyDig() {
this.$emit("update:visible", false);
},
//
addTrials() {
this.$emit("update:visible", false);
this.$emit("handleOpenDialog", {}, "confirm");
},
//
getList() {},
//
handleSearch() {},
//
handleReset() {},
//
handleSelectChange() {},
},
};
</script>
<style lang="scss" scoped>
.top {
padding-top: 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.search {
display: flex;
align-items: center;
flex-wrap: wrap;
p {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
&::after {
display: block;
content: "";
flex: 1;
height: 1px;
border-top: 1px solid #ddd;
}
}
.form {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
}
}
</style>

View File

@ -3,51 +3,76 @@
<!-- 搜索框 --> <!-- 搜索框 -->
<template slot="search-container"> <template slot="search-container">
<el-form :inline="true"> <el-form :inline="true">
<!-- Site --> <!-- 受试者编号 -->
<el-form-item :label="$t('trials:subject:table:site')"> <el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:130px;"> <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.Code" style="width: 130px" />
</el-form-item>
<!-- 患者姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="searchData.Code" style="width: 130px" />
</el-form-item>
<!-- 性别 -->
<el-form-item :label="$t('trials:trials-myinfo:form:gender')">
<el-select
v-model="searchData.SiteId"
clearable
filterable
style="width: 130px"
>
<el-option <el-option
v-for="(item,index) of siteOptions" v-for="item of $d.sex"
:key="index" :key="item.id"
:label="item.TrialSiteCode" :label="item.label"
:value="item.SiteId" :value="item.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- Subject ID --> <!-- 状态 -->
<el-form-item :label="$t('trials:subject:table:subjectId')">
<el-input v-model="searchData.Code" style="width:130px;" />
</el-form-item>
<!-- Status -->
<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-select v-model="searchData.Status" clearable style="width: 130px">
<el-option v-for="item of $d.Subject_Visit_Status" :key="item.value" :value="item.value" :label="item.label" /> <el-option
v-for="item of $d.Subject_Visit_Status"
:key="item.value"
:value="item.value"
:label="item.label"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<!-- 查询 --> <!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }} {{ $t("common:button:search") }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset"> <el-button
{{ $t('common:button:reset') }} type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button> </el-button>
<!--导出--> <!--导出-->
<el-button type="primary" icon="el-icon-download" @click="handleExport"> <el-button
{{ $t('common:button:export') }} type="primary"
icon="el-icon-download"
@click="handleExport"
>
{{ $t("common:button:export") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<span style="margin-left:auto;"> <span style="margin-left: auto">
<el-button <el-button
v-if="visitPlanConfirmed"
v-hasPermi="['trials:trials-panel:subject:new']" v-hasPermi="['trials:trials-panel:subject:new']"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleAdd" @click="handleAdd"
> >
{{ $t('common:button:new') }} {{ $t("common:button:new") }}
</el-button> </el-button>
</span> </span>
</template> </template>
@ -57,142 +82,99 @@
<el-table <el-table
ref="subjectList" ref="subjectList"
v-loading="loading" v-loading="loading"
v-adaptive="{bottomOffset:60}" v-adaptive="{ bottomOffset: 60 }"
:data="list" :data="list"
stripe stripe
height="100" height="100"
@sort-change="handleSortByColumn" @sort-change="handleSortByColumn"
> >
<el-table-column type="index" width="40" /> <!-- 受试者编号 -->
<!-- Site -->
<el-table-column
prop="TrialSiteCode"
:label="$t('trials:subject:table:site')"
sortable="custom"
show-overflow-tooltip
width="120"
/>
<!-- Code -->
<el-table-column <el-table-column
prop="Code" prop="Code"
:label="$t('trials:subject:table:subjectId')" :label="$t('trials:subject:table:subjectId')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
width="130"
/> />
<!-- 第二编号 --> <!-- 患者编号 -->
<el-table-column <el-table-column
v-if="otherInfo.IsSubjectSecondCodeView" prop="Code"
prop="MedicalNo" :label="$t('trials:uploadDicomList:table:pId')"
:label="$t('trials:subject:table:medicalNo')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
width="150"
/> />
<!-- 访视基准日期 --> <!-- 患者姓名 -->
<el-table-column <el-table-column
prop="FirstGiveMedicineTime" prop="Code"
:label="$t('trials:subject:table:firstGiveMedicineTime')" :label="$t('trials:uploadDicomList:table:patientName')"
sortable="custom"
show-overflow-tooltip show-overflow-tooltip
width="150" sortable="custom"
> />
<template slot-scope="scope"> <!-- 性别 -->
{{ scope.row.FirstGiveMedicineTime?moment(scope.row.FirstGiveMedicineTime).format('YYYY-MM-DD'):'' }} <el-table-column
</template> prop="Code"
</el-table-column> :label="$t('trials:trials-myinfo:form:gender')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 出生日期 -->
<el-table-column
prop="Code"
:label="$t('trials:inspection:table:birthdate')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 年龄 -->
<el-table-column
prop="Code"
:label="$t('trials:subject:table:age')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 总访视量 -->
<el-table-column
prop="Code"
:label="$t('trials:subject:table:totalVisitCount')"
show-overflow-tooltip
sortable="custom"
/>
<!-- 最新检查访视 -->
<el-table-column
prop="Code"
:label="$t('trials:subject:table:latestStudiesVisitName')"
show-overflow-tooltip
sortable="custom"
/>
<!-- Status --> <!-- Status -->
<el-table-column <el-table-column
prop="Status" prop="Status"
:label="$t('trials:subject:table:status')" :label="$t('trials:subject:table:status')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.Status === 1" type="primary">{{ $fd('Subject_Visit_Status', scope.row.Status) }}</el-tag> <el-tag v-if="scope.row.Status === 1" type="primary">{{
<el-tag v-if="scope.row.Status === 2" type="danger">{{ $fd('Subject_Visit_Status', scope.row.Status) }}</el-tag> $fd("Subject_Visit_Status", scope.row.Status)
}}</el-tag>
<el-tag v-if="scope.row.Status === 2" type="danger">{{
$fd("Subject_Visit_Status", scope.row.Status)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 总访视量 --> <!-- 创建日期 -->
<el-table-column <el-table-column
prop="TotalVisitCount" prop="Code"
:label="$t('trials:subject:table:totalVisitCount')" :label="$t('trials:trials-list:table:createDate')"
show-overflow-tooltip
min-width="120"
>
<template slot-scope="scope">
<el-button
v-if="scope.row.TotalVisitCount > 0 && (hasCrcRoute || hasQCRoute)"
type="text"
@click="handleTotalVisitCount(scope.row.Code)"
>
{{ scope.row.TotalVisitCount }}
</el-button>
<span v-else> {{ scope.row.TotalVisitCount }}</span>
</template>
</el-table-column>
<!-- 计划访视量 -->
<el-table-column
prop="InPlanVisitCount"
:label="$t('trials:subject:table:inPlanVisitCount')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
min-width="140"
/> />
<!-- 计划外访视量 -->
<el-table-column <el-table-column
prop="OutPlanVisitCount" v-if="
:label="$t('trials:subject:table:outPlanVisitCount')" hasPermi([
show-overflow-tooltip 'trials:trials-panel:subject:edit',
sortable="custom" 'trials:trials-panel:subject:status',
width="160" 'trials:trials-panel:subject:delete',
/> ])
<!-- 当前提交访视量 --> "
<el-table-column
prop="TotalVisitSubmmitCount"
:label="$t('trials:subject:table:totalVisitSubmmitCount')"
show-overflow-tooltip
min-width="130"
/>
<!-- 是否漏传 -->
<el-table-column
prop="IsMissingImages"
:label="$t('trials:subject:table:isMissingImages')"
show-overflow-tooltip
sortable="custom"
min-width="140"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsMissingImages" type="danger">{{ $fd('YesOrNo', scope.row.IsMissingImages) }}</el-tag>
<el-tag v-else type="primary">{{ $fd('YesOrNo', scope.row.IsMissingImages) }}</el-tag>
</template>
</el-table-column>
<!-- 漏提交访视量 -->
<el-table-column
prop="MissingSubmmitCount"
:label="$t('trials:subject:table:missingSubmmitCount')"
show-overflow-tooltip
min-width="120"
/>
<!-- 失访访视量 -->
<el-table-column
prop="LostVisitCount"
:label="$t('trials:subject:table:lostVisitCount')"
show-overflow-tooltip
min-width="120"
/>
<!-- 最新提交访视名称 -->
<el-table-column
prop="LatestVisitName"
:label="$t('trials:subject:table:latestVisitName')"
show-overflow-tooltip
sortable="custom"
min-width="160"
/>
<el-table-column
v-if="hasPermi(['trials:trials-panel:subject:edit', 'trials:trials-panel:subject:status', 'trials:trials-panel:subject:delete'])"
:label="$t('common:action:action')" :label="$t('common:action:action')"
width="200" width="200"
fixed="right" fixed="right"
@ -220,23 +202,21 @@
circle circle
:title="$t('trials:subject:action:delete')" :title="$t('trials:subject:action:delete')"
icon="el-icon-delete" icon="el-icon-delete"
:disabled="scope.row.StudyCount>0" :disabled="scope.row.StudyCount > 0"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
/> />
<!-- 删除 -->
<el-button
v-hasPermi="['trials:trials-panel:subject:report']"
icon="el-icon-message"
circle
:title="$t('trials:subject:title:report')"
@click="handleMessage(scope.row)"
/>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </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> </template>
<!-- 新增/编辑 --> <!-- 新增/编辑 -->
@ -248,7 +228,12 @@
width="700px" width="700px"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
> >
<SubjectsForm :data="rowData" :other-info="otherInfo" @close="closeEditDialog" @getList="getList" /> <SubjectsForm
:data="rowData"
:other-info="otherInfo"
@close="closeEditDialog"
@getList="getList"
/>
</el-dialog> </el-dialog>
<!-- 修改受试者状态 --> <!-- 修改受试者状态 -->
@ -260,48 +245,72 @@
width="700px" width="700px"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
> >
<SubjectStatusForm :data="rowData" @closeDialog="closeStatusDialog" @getList="getList" /> <SubjectStatusForm
:data="rowData"
@closeDialog="closeStatusDialog"
@getList="getList"
/>
</el-dialog> </el-dialog>
<!-- 修改受试者状态 --> <!-- 修改受试者状态 -->
<el-dialog <el-dialog
v-if="MessageVisible" v-if="MessageVisible"
:visible.sync="MessageVisible" :visible.sync="MessageVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
:title="$t('trials:subject:title:sendReport').replace('xxx',rowData.Code)" :title="
$t('trials:subject:title:sendReport').replace('xxx', rowData.Code)
"
width="720px" width="720px"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
> >
<MessageTable :data="rowData" @closeDialog="closeStatusDialog" @getList="getList" /> <MessageTable
:data="rowData"
@closeDialog="closeStatusDialog"
@getList="getList"
/>
</el-dialog> </el-dialog>
<!--添加受试者-->
<addSubject :visible.sync="addSubjectVsible" />
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import { getTrialSiteSelect, getSubjectList, deleteSubject } from '@/api/trials' import {
import { getSubjectList_Export } from '@/api/export' getTrialSiteSelect,
import BaseContainer from '@/components/BaseContainer' getSubjectList,
import Pagination from '@/components/Pagination' deleteSubject,
import SubjectsForm from './components/SubjectsForm' } from "@/api/trials";
import SubjectStatusForm from './components/SubjectStatusForm' import { getSubjectList_Export } from "@/api/export";
import MessageTable from './components/MessageTable' import BaseContainer from "@/components/BaseContainer";
import moment from 'moment' import Pagination from "@/components/Pagination";
import SubjectsForm from "./components/SubjectsForm";
import SubjectStatusForm from "./components/SubjectStatusForm";
import MessageTable from "./components/MessageTable";
import moment from "moment";
import addSubject from "./components/add-subject.vue";
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
Code: '', Code: "",
Status: '', Status: "",
SiteId: '', SiteId: "",
ShortName: '', ShortName: "",
PageIndex: 1, PageIndex: 1,
PageSize: 20 PageSize: 20,
} };
} };
export default { export default {
name: 'SubjectList', name: "SubjectList",
components: { BaseContainer, Pagination, SubjectsForm, SubjectStatusForm, MessageTable }, components: {
BaseContainer,
Pagination,
SubjectsForm,
SubjectStatusForm,
MessageTable,
addSubject,
},
data() { data() {
return { return {
moment, moment,
MessageVisible: false, MessageVisible: false,
model_cfg: { visible: false, showClose: true, width: '700px', title: '' }, model_cfg: { visible: false, showClose: true, width: "700px", title: "" },
searchData: searchDataDefault(), searchData: searchDataDefault(),
loading: false, loading: false,
list: [], list: [],
@ -309,152 +318,179 @@ export default {
siteOptions: [], siteOptions: [],
visitPlanConfirmed: false, visitPlanConfirmed: false,
rowData: {}, rowData: {},
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1, userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
otherInfo: {}, otherInfo: {},
editDialog: { title: '', visible: false }, editDialog: { title: "", visible: false },
statusVisible: false, statusVisible: false,
trialId: '', trialId: "",
hasCrcRoute: false, hasCrcRoute: false,
hasQCRoute: false hasQCRoute: false,
} addSubjectVsible: false,
};
}, },
watch: { watch: {
list() { list() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.subjectList.doLayout() this.$refs.subjectList.doLayout();
}) });
} },
}, },
mounted() { mounted() {
const trialsRouter = this.$store.getters.routes.find(r => { return r.name === 'Trials' }) const trialsRouter = this.$store.getters.routes.find((r) => {
const trialsPanelRouter = trialsRouter.children.find(r => { return r.name === 'TrialsPanel' }).children return r.name === "Trials";
this.hasCrcRoute = this.hasRoute('crc-upload', trialsPanelRouter) });
this.hasQCRoute = this.hasRoute('qc-check', trialsPanelRouter) const trialsPanelRouter = trialsRouter.children.find((r) => {
this.trialId = this.$route.query.trialId return r.name === "TrialsPanel";
this.getSite() }).children;
this.getList() this.hasCrcRoute = this.hasRoute("crc-upload", trialsPanelRouter);
this.hasQCRoute = this.hasRoute("qc-check", trialsPanelRouter);
this.trialId = this.$route.query.trialId;
this.getSite();
this.getList();
}, },
methods: { methods: {
handleMessage(row) { handleMessage(row) {
this.rowData = { ...row } this.rowData = { ...row };
this.MessageVisible = true this.MessageVisible = true;
}, },
handleExport() { handleExport() {
getSubjectList_Export(this.searchData).then(res => { getSubjectList_Export(this.searchData)
}).catch(() => { this.loading = false }) .then((res) => {})
.catch(() => {
this.loading = false;
});
}, },
// //
getList() { getList() {
this.loading = true this.loading = true;
this.searchData.TrialId = this.$route.query.trialId this.searchData.TrialId = this.$route.query.trialId;
getSubjectList(this.searchData).then(res => { getSubjectList(this.searchData)
this.loading = false .then((res) => {
this.list = res.Result.CurrentPageData this.loading = false;
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData;
this.otherInfo = res.OtherInfo this.total = res.Result.TotalCount;
this.visitPlanConfirmed = res.OtherInfo.VisitPlanConfirmed this.otherInfo = res.OtherInfo;
}).catch(() => { this.loading = false }) this.visitPlanConfirmed = res.OtherInfo.VisitPlanConfirmed;
})
.catch(() => {
this.loading = false;
});
}, },
// //
handleAdd() { handleAdd() {
this.rowData = {} this.addSubjectVsible = true;
this.editDialog.title = this.$t('trials:subject:dialogTitle:new') // this.rowData = {};
this.editDialog.visible = true // this.editDialog.title = this.$t("trials:subject:dialogTitle:new");
// this.editDialog.visible = true;
}, },
// //
handleEdit(row) { handleEdit(row) {
this.rowData = row this.rowData = row;
this.editDialog.title = this.$t('trials:subject:dialogTitle:edit') this.editDialog.title = this.$t("trials:subject:dialogTitle:edit");
this.editDialog.visible = true this.editDialog.visible = true;
}, },
// //
closeEditDialog() { closeEditDialog() {
this.editDialog.visible = false this.editDialog.visible = false;
}, },
// //
handleDelete(row) { handleDelete(row) {
this.$confirm(this.$t('trials:subject:message:delete'), { this.$confirm(this.$t("trials:subject:message:delete"), {
type: 'warning', type: "warning",
distinguishCancelAndClose: true distinguishCancelAndClose: true,
}) }).then(() => {
.then(() => { this.loading = true;
this.loading = true deleteSubject(this.trialId, row.Id)
deleteSubject(this.trialId, row.Id) .then((res) => {
.then(res => { this.loading = false;
this.loading = false if (res.IsSuccess) {
if (res.IsSuccess) { // this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
// this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1) this.getList();
this.getList() this.$message.success(
this.$message.success(this.$t('common:message:deletedSuccessfully')) this.$t("common:message:deletedSuccessfully")
} );
}).catch(() => { this.loading = false }) }
}) })
.catch(() => {
this.loading = false;
});
});
}, },
// //
handleAudit(row) { handleAudit(row) {
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({
path: '/audit', path: "/audit",
query: { Id: row.TrialId, Code: this.$route.query.trialCode, SubName: row.Name, SubId: row.Id, Type: 2 } query: {
}) Id: row.TrialId,
window.open(routeData.href, '_blank') Code: this.$route.query.trialCode,
SubName: row.Name,
SubId: row.Id,
Type: 2,
},
});
window.open(routeData.href, "_blank");
}, },
// //
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
// //
handleReset() { handleReset() {
this.searchData = searchDataDefault() this.searchData = searchDataDefault();
this.getList() this.getList();
}, },
// //
handleSortByColumn(column) { handleSortByColumn(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.searchData.Asc = true this.searchData.Asc = true;
} else { } else {
this.searchData.Asc = false this.searchData.Asc = false;
} }
this.searchData.SortField = column.prop this.searchData.SortField = column.prop;
this.searchData.PageIndex = 1 this.searchData.PageIndex = 1;
this.getList() this.getList();
}, },
// site // site
getSite() { getSite() {
getTrialSiteSelect(this.trialId).then(res => { getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result this.siteOptions = res.Result;
}) });
}, },
// //
handleEditStatus(row) { handleEditStatus(row) {
this.rowData = { ...row } this.rowData = { ...row };
this.statusVisible = true this.statusVisible = true;
}, },
// //
closeStatusDialog() { closeStatusDialog() {
this.statusVisible = false this.statusVisible = false;
}, },
handleTotalVisitCount(subjectCode) { handleTotalVisitCount(subjectCode) {
if (this.hasCrcRoute) { if (this.hasCrcRoute) {
this.$router.push({ path: `/trials/trials-panel/visit/crc-upload?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&subjectCode=${subjectCode}` }) this.$router.push({
path: `/trials/trials-panel/visit/crc-upload?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&subjectCode=${subjectCode}`,
});
} else if (this.hasQCRoute) { } else if (this.hasQCRoute) {
this.$router.push({ path: `/trials/trials-panel/visit/qc-check?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&subjectCode=${subjectCode}` }) this.$router.push({
path: `/trials/trials-panel/visit/qc-check?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&subjectCode=${subjectCode}`,
});
} }
}, },
hasRoute(name, routeList) { hasRoute(name, routeList) {
for (let i = 0; i < routeList.length; i++) { for (let i = 0; i < routeList.length; i++) {
if (routeList[i].name === name) { if (routeList[i].name === name) {
return true return true;
} }
if (routeList[i].children) { if (routeList[i].children) {
const flag = this.hasRoute(name, routeList[i].children) const flag = this.hasRoute(name, routeList[i].children);
if (flag) { if (flag) {
return flag return flag;
} }
} }
} }
return false return false;
} },
} },
} };
</script> </script>

View File

@ -835,7 +835,7 @@
> >
<div class="base-dialog-body"> <div class="base-dialog-body">
<div v-if="!IsHaveTableQuestion"> <div v-if="!IsHaveTableQuestion">
<div v-for="item of beConfirmList"> <div v-for="item of beConfirmList" :key="item.ClinicalDataSetName">
<el-divider content-position="left">{{ item.ClinicalDataSetName }}</el-divider> <el-divider content-position="left">{{ item.ClinicalDataSetName }}</el-divider>
<el-table <el-table
v-loading="listLoading" v-loading="listLoading"
@ -846,6 +846,7 @@
<el-table-column <el-table-column
v-for="ite of item.QuestionList" v-for="ite of item.QuestionList"
:prop="ite.Id" :prop="ite.Id"
:key="ite.Id"
:label="ite.QuestionName" :label="ite.QuestionName"
show-overflow-tooltip show-overflow-tooltip
width="120" width="120"
@ -882,7 +883,7 @@
:reading-id="selected.ReadingId" :reading-id="selected.ReadingId"
:clinical-form-id="selected.ClinicalFormId" :clinical-form-id="selected.ClinicalFormId"
:open-type="'look'" :open-type="'look'"
@close="" @close="false"
/> />
</div> </div>
</div> </div>
@ -942,6 +943,7 @@
<el-table-column <el-table-column
v-for="item of QuestionList" v-for="item of QuestionList"
:prop="item.Id" :prop="item.Id"
:key="item.Id"
:label="item.QuestionName" :label="item.QuestionName"
show-overflow-tooltip show-overflow-tooltip
width="120" width="120"

View File

@ -60,7 +60,7 @@ module.exports = {
// target: 'http://123.56.181.144:8060/api', // 国内测试环境1 // target: 'http://123.56.181.144:8060/api', // 国内测试环境1
// target: 'http://123.56.181.144:8000/api', // 国内测试环境 // target: 'http://123.56.181.144:8000/api', // 国内测试环境
// target: 'http://123.56.94.154:8079', // 国内测试环境2 // target: 'http://123.56.94.154:8079', // 国内测试环境2
target: 'http://123.56.94.154:30010', // 国内测试环境2 target: 'http://123.56.94.154:30020', // 国内测试环境2
// target: 'http://123.56.181.144:7000', // target: 'http://123.56.181.144:7000',
changeOrigin: true, changeOrigin: true,
secure: false, secure: false,