页面新增与修改

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:trials:title:back': `Return`,
'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:pendingReadingTasks': `Pending`,
'trials:pendingReadingTasks:table:subjectCode': `Subject ID`,

View File

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

View File

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

View File

@ -1,11 +1,11 @@
<template>
<div style="display: flex;justify-content: center">
<div style="width: 640px;text-align: center;border: 1px solid #e6e6e6;margin-top:40px;padding:10px;">
<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;">
<!-- 首次登录修改密码 -->
{{ $t('recompose:title:init') }}
</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-input v-model="password.Email" disabled />
@ -18,6 +18,15 @@
<el-form-item :label="$t('recompose:form:userName')" prop="NewUserName">
<el-input v-model="password.NewUserName" />
</el-form-item>
<!-- 校验码 -->
<el-form-item :label="$t('trials:researchForm:form:checkCode')" prop="NewUserName" style="position: relative">
<el-input v-model="password.NewUserName" :disabled="password.NewUserName"/>
<span style="position: absolute;right: -30px">
<el-tooltip :content="$t('passwordReset:form:passwordCentent')" placement="top">
<i class="el-icon-question" />
</el-tooltip>
</span>
</el-form-item>
<!-- 新密码 -->
<el-form-item class="my_new_pwd" :label="$t('recompose:form:newPassword')" prop="NewPassWord">
<el-input v-model="password.NewPassWord" type="password" show-password auto-complete="new-password" />
@ -185,7 +194,7 @@ input {
background-color:transparent;
caret-color: #fff;
}
>>>.is-error.my_new_pwd{
::v-deep .is-error.my_new_pwd{
margin-bottom: 40px;
}
</style>

View File

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

View File

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

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>
<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-form-item>
</el-col>

View File

@ -3,7 +3,12 @@
<div ref="leftContainer" class="left">
<el-form :inline="true">
<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
v-for="item of $d.NoteLevel"
:key="item.value"
@ -13,7 +18,12 @@
</el-select>
</el-form-item>
<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
v-for="item of $d.NoteType"
:key="item.value"
@ -23,7 +33,12 @@
</el-select>
</el-form-item>
<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
v-for="item of dict.type.NoticeApplicableTrial"
:key="item.value"
@ -33,7 +48,13 @@
</el-select>
</el-form-item>
<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
v-for="item of roleList"
:key="item.Id"
@ -43,7 +64,12 @@
</el-select>
</el-form-item>
<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
v-for="item of dict.type.NoticeMode"
:key="item.value"
@ -53,107 +79,237 @@
</el-select>
</el-form-item>
<el-form-item>
<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"></el-button>
<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>
<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 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">
{{ $fd('NoteLevel', scope.row.NoticeLevelEnum) }}
{{ $fd("NoteLevel", scope.row.NoticeLevelEnum) }}
</template>
</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">
{{ $fd('NoteType', scope.row.NoticeTypeEnum) }}
{{ $fd("NoteType", scope.row.NoticeTypeEnum) }}
</template>
</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">
{{ scope.row.NoticeContent }}
</template>
</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">
<el-tag :type="scope.row.ActualNoticeStateEnum === 0 ? 'info' : scope.row.ActualNoticeStateEnum === 1 ? 'success' : 'danger'">
{{ $fd('NoticeState', scope.row.ActualNoticeStateEnum) }}
<el-tag
:type="
scope.row.ActualNoticeStateEnum === 0
? 'info'
: scope.row.ActualNoticeStateEnum === 1
? 'success'
: 'danger'
"
>
{{ $fd("NoticeState", scope.row.ActualNoticeStateEnum) }}
</el-tag>
</template>
</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">
{{ $fd('NoticeApplicableTrial', scope.row.ApplicableProjectEnum) }}
{{ $fd("NoticeApplicableTrial", scope.row.ApplicableProjectEnum) }}
</template>
</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">
{{ $fd('NoticeUserTypeList', scope.row.UserTypeShortName) }}
{{ $fd("NoticeUserTypeList", scope.row.UserTypeShortName) }}
</template>
</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">
{{ 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>
</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">
{{ scope.row.StartDate }}-{{ scope.row.EndDate }}
</template>
</el-table-column>
<el-table-column label="发布人" 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>
<el-table-column
label="发布人"
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">
{{ scope.row.StartDate ? scope.row.StartDate: scope.row.CreateTime }}
{{
scope.row.StartDate ? scope.row.StartDate : scope.row.CreateTime
}}
</template>
</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">
<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>
</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">
<el-button
size="mini"
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
>编辑</el-button>
v-hasPermi="['system:notice:edit']"
>编辑</el-button
>
<el-button
v-if="scope.row.NoticeStateEnum === 0"
size="mini"
type="text"
icon="el-icon-s-promotion"
@click="handlePush(scope.row)"
>发布</el-button>
v-hasPermi="['system:notice:publish']"
>发布</el-button
>
<el-button
v-if="scope.row.NoticeStateEnum === 1"
size="mini"
type="text"
icon="el-icon-s-release"
@click="handleGet(scope.row)"
>撤回</el-button>
v-hasPermi="['system:notice:back']"
>撤回</el-button
>
</template>
</el-table-column>
</el-table>
<div class="pagination" style="text-align: right;margin-top:5px;">
<pagination :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<div class="pagination" style="text-align: right; margin-top: 5px">
<pagination
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</div>
</div>
<notice-form ref="NoticeForm" :role-list="roleList" @getList="getList" />
</div>
</template>
<script>
import { getSystemNoticeList, addOrUpdateSystemNotice } from '@/api/system/notice'
import { getUserTypeRoleList } from '@/api/admin'
import NoticeForm from './components/from'
import Pagination from '@/components/Pagination'
import {
getSystemNoticeList,
addOrUpdateSystemNotice,
} from "@/api/system/notice";
import { getUserTypeRoleList } from "@/api/admin";
import NoticeForm from "./components/from";
import Pagination from "@/components/Pagination";
const searchDataDefault = () => {
return {
Asc: true,
SortField: '',
SortField: "",
NoticeContent: null,
FileName: null,
NoticeTypeEnum: null,
@ -162,12 +318,18 @@ const searchDataDefault = () => {
NoticeModeEnum: null,
NoticeStateEnum: null,
PageIndex: 1,
PageSize: 20
}
}
PageSize: 20,
};
};
export default {
components: { NoticeForm, Pagination },
dicts: ['NoticeApplicableTrial', 'NoteLevel', 'NoteType', 'NoticeState', 'NoticeMode'],
dicts: [
"NoticeApplicableTrial",
"NoteLevel",
"NoteType",
"NoticeState",
"NoticeMode",
],
data() {
return {
list: [],
@ -175,8 +337,8 @@ export default {
loading: false,
treeData: [],
defaultProps: {
label: 'MenuName',
children: 'Children'
label: "MenuName",
children: "Children",
},
userList: [],
roleList: [],
@ -187,99 +349,110 @@ export default {
expandedKeys: [],
treeLoading: false,
funcListLoading: false,
funcList: []
}
funcList: [],
};
},
mounted() {
this.getUserTypeRoleList()
this.getList()
this.getUserTypeRoleList();
this.getList();
},
methods: {
handlePush(row) {
this.loading = true
var params = { ...row }
params.NoticeUserTypeIdList = params.NoticeUserTypeList.map(v => v.Id)
params.NoticeStateEnum = 1
addOrUpdateSystemNotice(params).then(res => {
this.loading = false
this.$message.success('发布成功')
this.getList()
}).catch(() => { this.loading = false })
this.loading = true;
var params = { ...row };
params.NoticeUserTypeIdList = params.NoticeUserTypeList.map((v) => v.Id);
params.NoticeStateEnum = 1;
addOrUpdateSystemNotice(params)
.then((res) => {
this.loading = false;
this.$message.success("发布成功");
this.getList();
})
.catch(() => {
this.loading = false;
});
},
handleGet(row) {
this.loading = true
var params = { ...row }
params.NoticeUserTypeIdList = params.NoticeUserTypeList.map(v => v.Id)
params.NoticeStateEnum = 0
addOrUpdateSystemNotice(params).then(res => {
this.loading = false
this.$message.success('撤回成功')
this.getList()
}).catch(() => { this.loading = false })
this.loading = true;
var params = { ...row };
params.NoticeUserTypeIdList = params.NoticeUserTypeList.map((v) => v.Id);
params.NoticeStateEnum = 0;
addOrUpdateSystemNotice(params)
.then((res) => {
this.loading = false;
this.$message.success("撤回成功");
this.getList();
})
.catch(() => {
this.loading = false;
});
},
handleEdit(row) {
this.$nextTick(() => {
this.$refs['NoticeForm'].openDialog('编辑', row)
})
this.$refs["NoticeForm"].openDialog("编辑", row);
});
},
handleAdd() {
this.$nextTick(() => {
this.$refs['NoticeForm'].openDialog('新增', {})
})
this.$refs["NoticeForm"].openDialog("新增", {});
});
},
getUserTypeRoleList() {
getUserTypeRoleList({}).then((res) => {
this.roleList = res.Result
}).catch(() => {
})
getUserTypeRoleList({})
.then((res) => {
this.roleList = res.Result;
})
.catch(() => {});
},
getList() {
this.loading = true
getSystemNoticeList(this.searchData).then((res) => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => {
this.loading = false
})
}
}
}
this.loading = true;
getSystemNoticeList(this.searchData)
.then((res) => {
this.loading = false;
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
})
.catch(() => {
this.loading = false;
});
},
},
};
</script>
<style lang="scss">
.role {
height: 100%;
box-sizing: border-box;
.role {
height: 100%;
box-sizing: border-box;
display: flex;
padding: 10px;
border-radius: 5px;
.left {
display: flex;
padding: 10px;
border-radius: 5px;
.left {
flex-direction: column;
width: 0;
flex-grow: 4;
// border-right: 1px solid #ccc;
.filter-container {
display: flex;
flex-direction: column;
width: 0;
flex-grow: 4;
// border-right: 1px solid #ccc;
.filter-container {
display: flex;
align-items: center;
margin: 5px;
}
.data-table {
flex: 1;
padding: 5px 0px;
}
.pagination-container {
text-align: right;
}
align-items: center;
margin: 5px;
}
.right {
width: 0;
flex-grow: 6;
overflow-y: auto;
border-right: 1px solid #ccc;
.data-table {
flex: 1;
padding: 5px 0px;
}
.selected-row{
background-color: cadetblue;
.pagination-container {
text-align: right;
}
}
.right {
width: 0;
flex-grow: 6;
overflow-y: auto;
border-right: 1px solid #ccc;
}
.selected-row {
background-color: cadetblue;
}
}
</style>

View File

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

View File

@ -40,20 +40,25 @@
<el-form-item v-if="type==1" label="Disable:">
<el-switch v-model="user.Status" :active-value="0" :inactive-value="1" />
</el-form-item>
<el-form-item label="IsTestUser:">
<!-- <el-form-item label="IsTestUser:">
<el-switch v-model="user.IsTestUser" />
</el-form-item>
</el-form-item> -->
<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-option
v-for="(userType,key) of userTypeOptions"
v-if="userType.UserTypeEnum !== 20"
:key="key"
:label="userType.UserType"
:value="userType.Id"
/>
<template v-for="(userType,key) of userTypeOptions">
<el-option
v-if="userType.UserTypeEnum !== 20"
:key="key"
:label="userType.UserType"
:value="userType.Id"
/>
</template>
</el-select>
</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 class="Affiliation" shadow="never" style="margin-top:10px;" size="small">
@ -121,7 +126,8 @@ export default {
OrganizationName: '',
DepartmentName: '',
PositionName: '',
IsTestUser: false
IsTestUser: false,
verifyCode:''
},
userFormRules: {
UserName: [
@ -233,7 +239,7 @@ export default {
}
</script>
<style scoped>
/deep/ .is-error.my_new_pwd{
::v-deep .is-error.my_new_pwd{
margin-bottom: 40px;
}
</style>

View File

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

View File

@ -71,17 +71,17 @@ export const columns = [
label: 'Internal Or External:',
hidden: true,
slot: 'isZhiZhunSlot',
minWidth: 140,
sortable: 'custom',
showOverflowTooltip: true },
{
prop: 'IsTestUser',
label: 'Is Test User',
hidden: true,
slot: 'isTestUserSlot',
minWidth: 120,
minWidth: 160,
sortable: 'custom',
showOverflowTooltip: true },
// {
// prop: 'IsTestUser',
// label: 'Is Test User',
// hidden: true,
// slot: 'isTestUserSlot',
// minWidth: 120,
// sortable: 'custom',
// showOverflowTooltip: true },
{
prop: 'Status',
label: 'Status',
@ -92,10 +92,10 @@ export const columns = [
showOverflowTooltip: true },
{ type: 'operate',
label: 'Action',
minWidth: 200,
minWidth: 100,
operates: [
{ 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 => '',
placeholder: ''
},
{
type: 'Select',
label: 'Is Test User:',
prop: 'IsTestUser',
width: '100px',
options: [
{ label: 'Yes', value: true },
{ label: 'No', value: false }
],
props: { label: 'label', value: 'value' },
change: scope => '',
placeholder: ''
},
// {
// type: 'Select',
// label: 'Is Test User:',
// prop: 'IsTestUser',
// width: '100px',
// options: [
// { label: 'Yes', value: true },
// { label: 'No', value: false }
// ],
// props: { label: 'label', value: 'value' },
// change: scope => '',
// placeholder: ''
// },
{
type: 'Select',
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"
@select="handleSelect"
>
<el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir'])" index="1">
<i class="el-icon-odometer" />
<!-- <el-menu-item v-if="!hasPermi(['role:air', 'role:rpm', 'role:radmin', 'role:rcrc', 'role:rir'])" index="1">
<i class="el-icon-odometer" /> -->
<!-- 工作台 -->
<span slot="title">{{ $t('trials:menuTitle:workbench') }}</span>
<!-- <span slot="title">{{ $t('trials:menuTitle:workbench') }}</span>
</el-menu-item> -->
<el-menu-item v-if="hasPermi(['role:pm', 'role:crc'])" index="1">
<i class="el-icon-odometer" />
<!-- 检查 -->
<span slot="title">{{ $t('trials:menuTitle:inspection') }}</span>
</el-menu-item>
<el-menu-item v-if="!hasPermi(['role:zys'])" index="2" :disabled="TotalNeedSignSystemDocCount !== 0">
<i class="el-icon-box" />
@ -78,15 +83,13 @@ export default {
}
},
created() {
console.log(!this.hasPermi(['role:air']))
this.isReviewer = JSON.parse(zzSessionStorage.getItem('IsReviewer'))
this.changeRoute(this.$route)
console.log(this.TotalNeedSignSystemDocCount)
},
methods: {
...mapMutations({ setLanguage: 'lang/setLanguage' }),
changeRoute(v) {
if (v.path === '/trials/trials-workbench') {
if (v.path === '/trials/trials-inspection') {
this.activeIndex = '1'
}
if (v.path === '/trials/trials-list' || ~v.path.indexOf('/trials/trials-panel')) {
@ -108,7 +111,7 @@ export default {
this.logout()
break
case '1':
this.go('/trials/trials-workbench')
this.go('/trials/trials-inspection')
break
case '2':
if (~this.$route.path.indexOf('/trials/trials-panel')) {

View File

@ -11,109 +11,81 @@
:inline="true"
>
<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-form-item>
<!-- 项目类型 -->
<el-form-item :label="$t('trials:trials-list:form:trialType')" prop="TrialType">
<el-radio-group v-model="trialForm.TrialType " :disabled="trialForm.Id!== ''">
<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>
<el-form-item
:label="$t('trials:trials-list:form:trialType')"
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-form-item>
</el-row>
<el-row>
<!-- 试验名称 -->
<el-form-item :label="$t('trials:trials-list:form:experimentName')" prop="ExperimentName">
<el-input v-model="trialForm.ExperimentName" type="textarea" :autosize="{ minRows: 1, maxRows: 4}" />
<!-- 研究名称 -->
<el-form-item
: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 :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-form-item>
</el-row>
<el-row>
<!-- 主研单位 -->
<el-form-item :label="$t('trials:trials-list:form:researchUnit')" prop="MainResearchUnit">
<el-input v-model="trialForm.MainResearchUnit" />
</el-form-item>
<!-- 负责人PI -->
<el-form-item :label="$t('trials:trials-list:form:pi')" prop="HeadPI">
<!-- 研究者 -->
<el-form-item
:label="$t('trials:trials-list:form:investigator')"
prop="HeadPI"
>
<el-input v-model="trialForm.HeadPI" />
</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
v-if="trialForm.IsDeclaration"
:label="$t('trials:trials-list:form:declarationType')"
prop="DeclarationTypeEnumList"
:rules="[
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
]"
:label="$t('trials:trials-list:form:sponsor')"
prop="SponsorName"
>
<el-select
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-input v-model="trialForm.SponsorName" maxlength="200" />
</el-form-item>
</el-row>
<el-row>
<!-- Phase -->
<el-form-item :label="$t('trials:trials-list:form:phase')" prop="PhaseId">
<!-- CRO -->
<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-option
v-for="item in phase"
:key="item.Id"
:label="item.Value"
:value="item.Id"
/> -->
<el-option
v-for="item of $d.Trial_Phase"
:key="item.id"
@ -122,66 +94,15 @@
/>
</el-select>
</el-form-item>
</el-row>
<el-row>
<!-- 适应症类型 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 :label="$t('trials:trials-list:form:indication')">
<el-input v-model="trialForm.IndicationTypeId" />
</el-form-item>
</el-row>
<el-row>
<!-- Modality -->
<!-- 检查技术 -->
<el-form-item :label="$t('trials:trials-list:form:modality')">
<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
v-for="item of $d.Modality"
:key="item.id"
@ -190,205 +111,284 @@
/>
</el-select>
</el-form-item>
<!-- Sites -->
<el-form-item :label="$t('trials:trials-list:form:siteCount')">
<el-input-number v-model="trialForm.PlanSiteCount" controls-position="right" :min="0" />
<!-- 阅片标准 -->
<el-form-item
: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-row>
<el-row>
<!-- Expected Patients Num -->
<el-form-item :label="$t('trials:trials-list:form:patientsNum')">
<el-input-number
v-model="trialForm.ExpectedPatients"
controls-position="right"
:min="0"
@change="handleExpectedPatientsChange"
<!-- 联系人 -->
<el-form-item :label="$t('trials:researchForm:form:contactor')">
<el-input v-model="trialForm.IndicationTypeId" />
</el-form-item>
<!-- 电话 -->
<el-form-item :label="$t('trials:trials-myinfo:form:phone')">
<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-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 -->
<el-form-item :label="$t('trials:trials-list:form:timePointsPerPatient')">
<!-- <el-form-item :label="$t('trials:trials-list:form:timePointsPerPatient')">
<el-input-number
v-model="trialForm.TimePointsPerPatient"
controls-position="right"
:min="0"
@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-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-button type="primary" :disabled="btnLoading" @click="handleCancel">
{{ $t('trials:trials-list:form:cancel') }}
{{ $t("trials:trials-list:form:cancel") }}
</el-button>
<el-button type="primary" :loading="btnLoading" @click="handleSave">
{{ $t('trials:trials-list:form:save') }}
{{ $t("trials:trials-list:form:save") }}
</el-button>
</el-form-item>
</el-row>
</el-form>
</template>
<script>
import store from '@/store'
import { mapGetters, mapState } from 'vuex'
import { getTrialInfo, addOrUpdateTrial } from '@/api/trials'
import { getBasicDataSelects } from '@/api/dictionary/dictionary'
import store from "@/store";
import { mapGetters, mapState } from "vuex";
import { getTrialInfo, addOrUpdateTrial } from "@/api/trials";
import { getBasicDataSelects } from "@/api/dictionary/dictionary";
export default {
name: 'TrialForm',
name: "TrialForm",
props: {
trialId: {
type: String,
default: ''
}
default: "",
},
},
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 {
trialForm: {
Id: '',
TrialCode: '',
visitNumberAuthorized: 1000,
Id: "",
TrialCode: "",
TrialType: null,
SponsorId: '',
// CriterionIds: [],
CROId: '',
ReviewModeId: '',
SponsorId: "",
CROId: "",
ReviewModeId: "",
ReviewTypeIds: [],
// 0
Expedited: '',
Expedited: "",
ModalityIds: [],
Note: '',
ExpectedPatients: '',
TimePointsPerPatient: '',
ProjectCycle: '',
// TotalReviewers: 0,
DeclarationTypeId: '',
IndicationTypeId: '',
PhaseId: '',
AttendedReviewerType: '',
Note: "",
ExpectedPatients: "",
TimePointsPerPatient: "",
ProjectCycle: "",
DeclarationTypeId: "",
IndicationTypeId: "",
PhaseId: "",
AttendedReviewerType: "",
IsLocked: false,
ResearchProgramNo: '',
ExperimentName: '',
MainResearchUnit: '',
HeadPI: '',
ResearchProgramNo: "",
ExperimentName: "",
MainResearchUnit: "",
HeadPI: "",
PlanSiteCount: null,
PlanVisitCount: null,
IndicationEnum: null,
Indication: null,
AttendedReviewerTypeEnumList: [],
DeclarationTypeEnumList: [],
DeclarationTypeOther: null,
AttendedReviewerTypeOther: null,
IsDeclaration: null
IsDeclaration: null,
},
indicationGrouping: null,
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: [
{ 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: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
],
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: [
{ 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: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' },
{ validator: comfirmIndication, trigger: 'blur' }
ProjectCycle: [
{ max: 50, message: `${this.$t("common:ruleMessage:maxLength")} 50` },
],
ProjectCycle: [{ max: 50, message: `${this.$t('common:ruleMessage:maxLength')} 50` }],
ReviewModeId: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
{
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
],
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: [
{ 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: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur', 'change'] }
{
required: true,
message: this.$t("common:ruleMessage:select"),
trigger: ["blur", "change"],
},
],
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,
isLock: false,
@ -397,132 +397,161 @@ export default {
declarationNum: null,
indicationNum: null,
phaseNum: null,
dictionaryList: {}
}
dictionaryList: {},
};
},
computed: {
...mapGetters(['sponsorList', 'croList']),
...mapState('user', ['isTestUser'])
...mapGetters(["sponsorList", "croList"]),
...mapState("user", ["isTestUser"]),
},
mounted() {
this.initPage()
this.initPage();
},
methods: {
initForm() {
this.loading = true
getTrialInfo(this.trialId).then(res => {
this.loading = false
if (res.IsSuccess) {
for (var item in this.trialForm) {
res.Result[item] === '00000000-0000-0000-0000-000000000000' ? '' : 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
this.loading = true;
getTrialInfo(this.trialId)
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
for (var item in this.trialForm) {
res.Result[item] === "00000000-0000-0000-0000-000000000000"
? ""
: 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() {
this.$refs.trialForm.validate(valid => {
this.$refs.trialForm.validate((valid) => {
if (valid) {
this.btnLoading = true
this.btnLoading = true;
if (!this.trialForm.IsDeclaration) {
this.declarationNum = 'N'
this.declarationNum = "N";
}
if (!this.trialForm.Id) {
this.trialForm.TrialCode = `${this.declarationNum}${this.indicationNum}${this.phaseNum}`
console.log(this.trialForm.TrialCode)
this.trialForm.TrialCode = `${this.declarationNum}${this.indicationNum}${this.phaseNum}`;
console.log(this.trialForm.TrialCode);
}
var params = JSON.parse(JSON.stringify(this.trialForm))
addOrUpdateTrial(params).then(res => {
this.btnLoading = false
if (!this.trialForm.Id) {
this.trialForm.Id = res.Result
this.$message.success(this.$t('trials:trials-list:message:addedSuccessfully'))
} else {
this.$message.success(this.$t('trials:trials-list:message:updatedSuccessfully'))
}
var params = JSON.parse(JSON.stringify(this.trialForm));
addOrUpdateTrial(params)
.then((res) => {
this.btnLoading = false;
if (!this.trialForm.Id) {
this.trialForm.Id = res.Result;
this.$message.success(
this.$t("trials:trials-list:message:addedSuccessfully")
);
} else {
this.$message.success(
this.$t("trials:trials-list:message:updatedSuccessfully")
);
}
this.$emit('getList')
this.$emit('closeDialog')
}).catch(() => {
this.btnLoading = false
})
this.$emit("getList");
this.$emit("closeDialog");
})
.catch(() => {
this.btnLoading = false;
});
}
})
});
},
handleCancel() {
this.$emit('closeDialog')
this.$emit("closeDialog");
// this.$refs['trialForm'].resetFields()
},
handleDeclarationTypeChange(val) {
if (val.length === 1) {
// 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) {
const ids = [...this.trialForm.TrialCode]
ids[2] = this.declarationNum
this.trialForm.TrialCode = ids.join('')
const ids = [...this.trialForm.TrialCode];
ids[2] = this.declarationNum;
this.trialForm.TrialCode = ids.join("");
}
} else {
this.declarationNum = 'X'
this.declarationNum = "X";
if (this.trialForm.Id) {
const ids = [...this.trialForm.TrialCode]
ids[2] = this.declarationNum
this.trialForm.TrialCode = ids.join('')
const ids = [...this.trialForm.TrialCode];
ids[2] = this.declarationNum;
this.trialForm.TrialCode = ids.join("");
}
}
},
handleIndicationTypeChange(val) {
this.indicationGrouping = null
this.indicationGrouping = null;
if (val) {
// 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) {
const ids = [...this.trialForm.TrialCode]
ids[3] = this.indicationNum
this.trialForm.TrialCode = ids.join('')
const ids = [...this.trialForm.TrialCode];
ids[3] = this.indicationNum;
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) {
if (val) {
// const phase = this.dictionaryList['Trial_Phase']
// 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) {
const ids = [...this.trialForm.TrialCode]
ids[4] = this.phaseNum
this.trialForm.TrialCode = ids.join('')
const ids = [...this.trialForm.TrialCode];
ids[4] = this.phaseNum;
this.trialForm.TrialCode = ids.join("");
}
}
},
handleExpectedPatientsChange(val) {
this.trialForm.PlanVisitCount = val * this.trialForm.TimePointsPerPatient
this.trialForm.PlanVisitCount = val * this.trialForm.TimePointsPerPatient;
},
handleTpPerPatientChange(val) {
this.trialForm.PlanVisitCount = val * this.trialForm.ExpectedPatients
this.trialForm.PlanVisitCount = val * this.trialForm.ExpectedPatients;
},
async initPage() {
this.loading = true
await this.getDicData()
await store.dispatch('global/getSponsorList')
await store.dispatch('global/getCROList')
this.loading = true;
await this.getDicData();
await store.dispatch("global/getSponsorList");
await store.dispatch("global/getCROList");
if (this.trialId) {
this.trialForm.Id = this.trialId
this.initForm()
this.trialForm.Id = this.trialId;
this.initForm();
}
this.loading = false
this.loading = false;
},
getDicData() {
getBasicDataSelects(['DeclarationType', 'IndicationType', 'Modality', 'ReviewMode', 'ReviewType', 'Trial_Phase']).then(res => {
this.dictionaryList = { ...res.Result }
})
}
}
}
getBasicDataSelects([
"DeclarationType",
"IndicationType",
"Modality",
"ReviewMode",
"ReviewType",
"Trial_Phase",
]).then((res) => {
this.dictionaryList = { ...res.Result };
});
},
},
};
</script>
<style>
.trial-Form .el-input,
@ -532,7 +561,7 @@ export default {
.trial-Form .el-textarea {
width: 340px;
}
.trial-Form .el-col .el-input{
.trial-Form .el-col .el-input {
width: 165px;
margin-right: 10px;
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

@ -5,75 +5,23 @@
:model="form"
:rules="rules"
size="small"
label-width="200px"
label-width="100px"
>
<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-input v-model="form.Code" :disabled="form.StudyCount > 0 || isEdit" />
<span v-show="otherInfo.IsNoticeSubjectCodeRule" style="color:#F56C6C;font-size:12px;">{{ otherInfo.SubjectCodeRule }}</span>
<el-input v-model="form.Code" />
</el-form-item>
<!-- 受试者第二编号 -->
<el-form-item v-if="otherInfo.IsSubjectSecondCodeView" :label="$t('trials:subject:table:medicalNo')" prop="MedicalNo">
<el-input v-model="form.MedicalNo" :disabled="form.StudyCount > 0 || isEdit" />
<!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="form.Code" disabled />
</el-form-item>
<!-- 访视基准日期 -->
<el-form-item
v-show="otherInfo.IsHaveFirstGiveMedicineDate"
: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 :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="form.Code" disabled />
</el-form-item>
</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-button
@ -82,126 +30,126 @@
type="primary"
@click="handleCancel"
>
{{ $t('common:button:cancel') }}
{{ $t("common:button:cancel") }}
</el-button>
<!-- 保存 -->
<el-button size="small" type="primary" :loading="btnLoading" @click="handleSave">
{{ $t('common:button:save') }}
<el-button
size="small"
type="primary"
:loading="btnLoading"
@click="handleSave"
>
{{ $t("common:button:save") }}
</el-button>
</el-form-item>
</div>
</el-form>
</template>
<script>
import { getTrialSiteSelect, addOrUpdateSubject } from '@/api/trials'
import { getTrialSiteSelect, addOrUpdateSubject } from "@/api/trials";
export default {
name: 'SubjectForm',
name: "SubjectForm",
props: {
data: {
type: Object,
default() { return {} }
default() {
return {};
},
},
otherInfo: {
type: Object,
default() { return {} }
}
default() {
return {};
},
},
},
data() {
return {
form: {
Id: '',
Code: '',
ShortName: '',
Height: '',
Weight: '',
Age: '',
Sex: '',
BirthDate: '',
SiteId: '',
MedicalNo: '',
Id: "",
Code: "",
ShortName: "",
Height: "",
Weight: "",
Age: "",
Sex: "",
BirthDate: "",
SiteId: "",
MedicalNo: "",
Status: 1,
FirstGiveMedicineTime: '',
OutEnrollmentTime: '',
VisitOverTime: '',
Reason: '',
StudyCount: '',
SignDate: '',
IsUrgent: false
FirstGiveMedicineTime: "",
OutEnrollmentTime: "",
VisitOverTime: "",
Reason: "",
StudyCount: "",
SignDate: "",
IsUrgent: false,
},
isHaveSubjectAge: false,
rules: {
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,
siteOptions: [],
loading: false,
trialId: ''
}
trialId: "",
};
},
computed: {
isEdit() {
return (!!this.form.Id) && this.hasPermi(['role:crc'])
}
return !!this.form.Id && this.hasPermi(["role:crc"]);
},
},
mounted() {
this.trialId = this.$route.query.trialId
this.initForm()
this.trialId = this.$route.query.trialId;
this.initForm();
},
methods: {
async initForm() {
this.loading = true
const res = await getTrialSiteSelect(this.trialId)
this.loading = false
this.siteOptions = res.Result
this.loading = true;
const res = await getTrialSiteSelect(this.trialId);
this.loading = false;
this.siteOptions = res.Result;
if (Object.keys(this.data).length > 0) {
for (const k in this.form) {
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() {
this.$refs.subjectForm.validate(valid => {
if (!valid) return
this.btnLoading = true
addOrUpdateSubject(this.form).then(res => {
this.btnLoading = false
this.$emit('getList')
this.$emit('close')
this.$message.success(this.$t('common:message:savedSuccessfully'))
})
.catch(() => {
this.btnLoading = false
this.$refs.subjectForm.validate((valid) => {
if (!valid) return;
this.btnLoading = true;
addOrUpdateSubject(this.form)
.then((res) => {
this.btnLoading = false;
this.$emit("getList");
this.$emit("close");
this.$message.success(this.$t("common:message:savedSuccessfully"));
})
})
.catch(() => {
this.btnLoading = false;
});
});
},
handleCancel() {
this.$emit('close')
this.$emit("close");
},
getSite() {
getTrialSiteSelect(this.trialId).then(res => { this.siteList = res.Result })
}
}
}
getTrialSiteSelect(this.trialId).then((res) => {
this.siteList = res.Result;
});
},
},
};
</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">
<el-form :inline="true">
<!-- Site -->
<el-form-item :label="$t('trials:subject:table:site')">
<el-select v-model="searchData.SiteId" clearable filterable style="width:130px;">
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:crcQuestion:table:subjectId')">
<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
v-for="(item,index) of siteOptions"
:key="index"
:label="item.TrialSiteCode"
:value="item.SiteId"
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</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-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-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-select>
</el-form-item>
<el-form-item>
<!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
<!--导出-->
<el-button type="primary" icon="el-icon-download" @click="handleExport">
{{ $t('common:button:export') }}
<el-button
type="primary"
icon="el-icon-download"
@click="handleExport"
>
{{ $t("common:button:export") }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
<span style="margin-left: auto">
<el-button
v-if="visitPlanConfirmed"
v-hasPermi="['trials:trials-panel:subject:new']"
type="primary"
icon="el-icon-plus"
@click="handleAdd"
>
{{ $t('common:button:new') }}
{{ $t("common:button:new") }}
</el-button>
</span>
</template>
@ -57,142 +82,99 @@
<el-table
ref="subjectList"
v-loading="loading"
v-adaptive="{bottomOffset:60}"
v-adaptive="{ bottomOffset: 60 }"
:data="list"
stripe
height="100"
@sort-change="handleSortByColumn"
>
<el-table-column type="index" width="40" />
<!-- Site -->
<el-table-column
prop="TrialSiteCode"
:label="$t('trials:subject:table:site')"
sortable="custom"
show-overflow-tooltip
width="120"
/>
<!-- Code -->
<!-- 受试者编号 -->
<el-table-column
prop="Code"
:label="$t('trials:subject:table:subjectId')"
show-overflow-tooltip
sortable="custom"
width="130"
/>
<!-- 第二编号 -->
<!-- 患者编号 -->
<el-table-column
v-if="otherInfo.IsSubjectSecondCodeView"
prop="MedicalNo"
:label="$t('trials:subject:table:medicalNo')"
prop="Code"
:label="$t('trials:uploadDicomList:table:pId')"
show-overflow-tooltip
sortable="custom"
width="150"
/>
<!-- 访视基准日期 -->
<!-- 患者姓名 -->
<el-table-column
prop="FirstGiveMedicineTime"
:label="$t('trials:subject:table:firstGiveMedicineTime')"
sortable="custom"
prop="Code"
:label="$t('trials:uploadDicomList:table:patientName')"
show-overflow-tooltip
width="150"
>
<template slot-scope="scope">
{{ scope.row.FirstGiveMedicineTime?moment(scope.row.FirstGiveMedicineTime).format('YYYY-MM-DD'):'' }}
</template>
</el-table-column>
sortable="custom"
/>
<!-- 性别 -->
<el-table-column
prop="Code"
: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 -->
<el-table-column
prop="Status"
:label="$t('trials:subject:table:status')"
show-overflow-tooltip
sortable="custom"
width="120"
>
<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 === 2" type="danger">{{ $fd('Subject_Visit_Status', scope.row.Status) }}</el-tag>
<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 === 2" type="danger">{{
$fd("Subject_Visit_Status", scope.row.Status)
}}</el-tag>
</template>
</el-table-column>
<!-- 总访视量 -->
<!-- 创建日期 -->
<el-table-column
prop="TotalVisitCount"
:label="$t('trials:subject:table:totalVisitCount')"
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')"
prop="Code"
:label="$t('trials:trials-list:table:createDate')"
show-overflow-tooltip
sortable="custom"
min-width="140"
/>
<!-- 计划外访视量 -->
<el-table-column
prop="OutPlanVisitCount"
:label="$t('trials:subject:table:outPlanVisitCount')"
show-overflow-tooltip
sortable="custom"
width="160"
/>
<!-- 当前提交访视量 -->
<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'])"
v-if="
hasPermi([
'trials:trials-panel:subject:edit',
'trials:trials-panel:subject:status',
'trials:trials-panel:subject:delete',
])
"
:label="$t('common:action:action')"
width="200"
fixed="right"
@ -220,23 +202,21 @@
circle
:title="$t('trials:subject:action:delete')"
icon="el-icon-delete"
:disabled="scope.row.StudyCount>0"
:disabled="scope.row.StudyCount > 0"
@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>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
<!-- 新增/编辑 -->
@ -248,7 +228,12 @@
width="700px"
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>
<!-- 修改受试者状态 -->
@ -260,48 +245,72 @@
width="700px"
custom-class="base-dialog-wrapper"
>
<SubjectStatusForm :data="rowData" @closeDialog="closeStatusDialog" @getList="getList" />
<SubjectStatusForm
:data="rowData"
@closeDialog="closeStatusDialog"
@getList="getList"
/>
</el-dialog>
<!-- 修改受试者状态 -->
<el-dialog
v-if="MessageVisible"
:visible.sync="MessageVisible"
: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"
custom-class="base-dialog-wrapper"
>
<MessageTable :data="rowData" @closeDialog="closeStatusDialog" @getList="getList" />
<MessageTable
:data="rowData"
@closeDialog="closeStatusDialog"
@getList="getList"
/>
</el-dialog>
<!--添加受试者-->
<addSubject :visible.sync="addSubjectVsible" />
</BaseContainer>
</template>
<script>
import { getTrialSiteSelect, getSubjectList, deleteSubject } from '@/api/trials'
import { getSubjectList_Export } from '@/api/export'
import BaseContainer from '@/components/BaseContainer'
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 {
getTrialSiteSelect,
getSubjectList,
deleteSubject,
} from "@/api/trials";
import { getSubjectList_Export } from "@/api/export";
import BaseContainer from "@/components/BaseContainer";
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 = () => {
return {
Code: '',
Status: '',
SiteId: '',
ShortName: '',
Code: "",
Status: "",
SiteId: "",
ShortName: "",
PageIndex: 1,
PageSize: 20
}
}
PageSize: 20,
};
};
export default {
name: 'SubjectList',
components: { BaseContainer, Pagination, SubjectsForm, SubjectStatusForm, MessageTable },
name: "SubjectList",
components: {
BaseContainer,
Pagination,
SubjectsForm,
SubjectStatusForm,
MessageTable,
addSubject,
},
data() {
return {
moment,
MessageVisible: false,
model_cfg: { visible: false, showClose: true, width: '700px', title: '' },
model_cfg: { visible: false, showClose: true, width: "700px", title: "" },
searchData: searchDataDefault(),
loading: false,
list: [],
@ -309,152 +318,179 @@ export default {
siteOptions: [],
visitPlanConfirmed: false,
rowData: {},
userTypeEnumInt: zzSessionStorage.getItem('userTypeEnumInt') * 1,
userTypeEnumInt: zzSessionStorage.getItem("userTypeEnumInt") * 1,
otherInfo: {},
editDialog: { title: '', visible: false },
editDialog: { title: "", visible: false },
statusVisible: false,
trialId: '',
trialId: "",
hasCrcRoute: false,
hasQCRoute: false
}
hasQCRoute: false,
addSubjectVsible: false,
};
},
watch: {
list() {
this.$nextTick(() => {
this.$refs.subjectList.doLayout()
})
}
this.$refs.subjectList.doLayout();
});
},
},
mounted() {
const trialsRouter = this.$store.getters.routes.find(r => { return r.name === 'Trials' })
const trialsPanelRouter = trialsRouter.children.find(r => { return r.name === 'TrialsPanel' }).children
this.hasCrcRoute = this.hasRoute('crc-upload', trialsPanelRouter)
this.hasQCRoute = this.hasRoute('qc-check', trialsPanelRouter)
this.trialId = this.$route.query.trialId
this.getSite()
this.getList()
const trialsRouter = this.$store.getters.routes.find((r) => {
return r.name === "Trials";
});
const trialsPanelRouter = trialsRouter.children.find((r) => {
return r.name === "TrialsPanel";
}).children;
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: {
handleMessage(row) {
this.rowData = { ...row }
this.MessageVisible = true
this.rowData = { ...row };
this.MessageVisible = true;
},
handleExport() {
getSubjectList_Export(this.searchData).then(res => {
}).catch(() => { this.loading = false })
getSubjectList_Export(this.searchData)
.then((res) => {})
.catch(() => {
this.loading = false;
});
},
//
getList() {
this.loading = true
this.searchData.TrialId = this.$route.query.trialId
getSubjectList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.otherInfo = res.OtherInfo
this.visitPlanConfirmed = res.OtherInfo.VisitPlanConfirmed
}).catch(() => { this.loading = false })
this.loading = true;
this.searchData.TrialId = this.$route.query.trialId;
getSubjectList(this.searchData)
.then((res) => {
this.loading = false;
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
this.otherInfo = res.OtherInfo;
this.visitPlanConfirmed = res.OtherInfo.VisitPlanConfirmed;
})
.catch(() => {
this.loading = false;
});
},
//
handleAdd() {
this.rowData = {}
this.editDialog.title = this.$t('trials:subject:dialogTitle:new')
this.editDialog.visible = true
this.addSubjectVsible = true;
// this.rowData = {};
// this.editDialog.title = this.$t("trials:subject:dialogTitle:new");
// this.editDialog.visible = true;
},
//
handleEdit(row) {
this.rowData = row
this.editDialog.title = this.$t('trials:subject:dialogTitle:edit')
this.editDialog.visible = true
this.rowData = row;
this.editDialog.title = this.$t("trials:subject:dialogTitle:edit");
this.editDialog.visible = true;
},
//
closeEditDialog() {
this.editDialog.visible = false
this.editDialog.visible = false;
},
//
handleDelete(row) {
this.$confirm(this.$t('trials:subject:message:delete'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
this.loading = true
deleteSubject(this.trialId, row.Id)
.then(res => {
this.loading = false
if (res.IsSuccess) {
// this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.getList()
this.$message.success(this.$t('common:message:deletedSuccessfully'))
}
}).catch(() => { this.loading = false })
})
this.$confirm(this.$t("trials:subject:message:delete"), {
type: "warning",
distinguishCancelAndClose: true,
}).then(() => {
this.loading = true;
deleteSubject(this.trialId, row.Id)
.then((res) => {
this.loading = false;
if (res.IsSuccess) {
// this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1)
this.getList();
this.$message.success(
this.$t("common:message:deletedSuccessfully")
);
}
})
.catch(() => {
this.loading = false;
});
});
},
//
handleAudit(row) {
const routeData = this.$router.resolve({
path: '/audit',
query: { Id: row.TrialId, Code: this.$route.query.trialCode, SubName: row.Name, SubId: row.Id, Type: 2 }
})
window.open(routeData.href, '_blank')
path: "/audit",
query: {
Id: row.TrialId,
Code: this.$route.query.trialCode,
SubName: row.Name,
SubId: row.Id,
Type: 2,
},
});
window.open(routeData.href, "_blank");
},
//
handleSearch() {
this.searchData.PageIndex = 1
this.getList()
this.searchData.PageIndex = 1;
this.getList();
},
//
handleReset() {
this.searchData = searchDataDefault()
this.getList()
this.searchData = searchDataDefault();
this.getList();
},
//
handleSortByColumn(column) {
if (column.order === 'ascending') {
this.searchData.Asc = true
if (column.order === "ascending") {
this.searchData.Asc = true;
} else {
this.searchData.Asc = false
this.searchData.Asc = false;
}
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
this.searchData.SortField = column.prop;
this.searchData.PageIndex = 1;
this.getList();
},
// site
getSite() {
getTrialSiteSelect(this.trialId).then(res => {
this.siteOptions = res.Result
})
getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result;
});
},
//
handleEditStatus(row) {
this.rowData = { ...row }
this.statusVisible = true
this.rowData = { ...row };
this.statusVisible = true;
},
//
closeStatusDialog() {
this.statusVisible = false
this.statusVisible = false;
},
handleTotalVisitCount(subjectCode) {
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) {
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) {
for (let i = 0; i < routeList.length; i++) {
if (routeList[i].name === name) {
return true
return true;
}
if (routeList[i].children) {
const flag = this.hasRoute(name, routeList[i].children)
const flag = this.hasRoute(name, routeList[i].children);
if (flag) {
return flag
return flag;
}
}
}
return false
}
}
}
return false;
},
},
};
</script>

View File

@ -835,7 +835,7 @@
>
<div class="base-dialog-body">
<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-table
v-loading="listLoading"
@ -846,6 +846,7 @@
<el-table-column
v-for="ite of item.QuestionList"
:prop="ite.Id"
:key="ite.Id"
:label="ite.QuestionName"
show-overflow-tooltip
width="120"
@ -882,7 +883,7 @@
:reading-id="selected.ReadingId"
:clinical-form-id="selected.ClinicalFormId"
:open-type="'look'"
@close=""
@close="false"
/>
</div>
</div>
@ -942,6 +943,7 @@
<el-table-column
v-for="item of QuestionList"
:prop="item.Id"
:key="item.Id"
:label="item.QuestionName"
show-overflow-tooltip
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:8000/api', // 国内测试环境
// 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',
changeOrigin: true,
secure: false,