Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is running Details

uat_us
caiyiling 2024-06-07 10:11:03 +08:00
commit 7d2f95cba5
4 changed files with 560 additions and 330 deletions

View File

@ -3667,3 +3667,11 @@ export function getDicomSeriesInfo(param) {
data: param data: param
}) })
} }
export function getTrialSiteSelectList(params) {
return request({
url: `/trialMaintenance/getTrialSiteSelectList`,
method: 'get',
params
})
}

View File

@ -8,7 +8,7 @@
</el-form-item> </el-form-item>
<!-- 中心名称 --> <!-- 中心名称 -->
<el-form-item :label="$t('trials:sitesList:table:siteName')"> <el-form-item :label="$t('trials:sitesList:table:siteName')">
<el-input v-model="listQuery.Site" class="mr" clearable /> <el-input v-model="listQuery.TrialSiteName" class="mr" clearable />
</el-form-item> </el-form-item>
<!-- 中心别名 --> <!-- 中心别名 -->
<!-- <el-form-item :label="$t('trials:sitesList:table:siteAliasName')"> <!-- <el-form-item :label="$t('trials:sitesList:table:siteAliasName')">
@ -27,35 +27,48 @@
<!-- 状态 --> <!-- 状态 -->
<el-form-item :label="$t('trials:sitesList:table:status')"> <el-form-item :label="$t('trials:sitesList:table:status')">
<el-select v-model="listQuery.IsDeleted" clearable class="mr"> <el-select v-model="listQuery.IsDeleted" clearable class="mr">
<el-option v-for="item of $d.IsSiteDisable" :key="item.label" :label="item.label" :value="item.value" /> <el-option
v-for="item of $d.IsSiteDisable"
:key="item.label"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<!-- 查询 --> <!-- 查询 -->
<el-button type="primary" icon="el-icon-search" @click="handleSearch"> <el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }} {{ $t("common:button:search") }}
</el-button> </el-button>
<!-- 重置 --> <!-- 重置 -->
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset"> <el-button
{{ $t('common:button:reset') }} type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button> </el-button>
<!-- 中心调研 --> <!-- 中心调研 -->
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:questionnaire-record']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:questionnaire-record',
]"
type="primary" type="primary"
icon="el-icon-info" icon="el-icon-info"
@click="handleResearchList" @click="handleResearchList"
> >
{{ $t('trials:sitesList:button:siteResearch') }} {{ $t("trials:sitesList:button:siteResearch") }}
</el-button> </el-button>
<!-- 添加中心 --> <!-- 添加中心 -->
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:add-site']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:add-site',
]"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
@click="handleAdd" @click="handleAdd"
> >
{{ $t('trials:sitesList:dialogTitle:assignSite') }} {{ $t("trials:sitesList:dialogTitle:assignSite") }}
</el-button> </el-button>
<el-button <el-button
type="primary" type="primary"
@ -63,7 +76,7 @@
:disabled="list.length === 0" :disabled="list.length === 0"
@click="handleResearchListExport" @click="handleResearchListExport"
> >
{{ $t('common:button:export') }} {{ $t("common:button:export") }}
</el-button> </el-button>
<!-- 下载模板 --> <!-- 下载模板 -->
<el-button <el-button
@ -71,15 +84,17 @@
icon="el-icon-download" icon="el-icon-download"
@click="handleDownload" @click="handleDownload"
> >
{{ $t('common:button:downloadTpl') }} {{ $t("common:button:downloadTpl") }}
</el-button> </el-button>
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:add-site']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:add-site',
]"
type="primary" type="primary"
icon="el-icon-upload2" icon="el-icon-upload2"
@click="handleUpload" @click="handleUpload"
> >
{{ $t('common:button:upload') }} {{ $t("common:button:upload") }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -100,18 +115,19 @@
width="120" width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="!!scope.row.TrialSiteCode">{{ scope.row.TrialSiteCode }}</span> <span v-if="!!scope.row.TrialSiteCode">{{
scope.row.TrialSiteCode
}}</span>
<i <i
v-else v-else
class="el-icon-warning" class="el-icon-warning"
style="color: #f44336;font-size: 14px;" style="color: #f44336; font-size: 14px"
/> />
</template> </template>
</el-table-column> </el-table-column>
<!-- 中心名称 --> <!-- 中心名称 -->
<el-table-column <el-table-column
prop="Site" prop="TrialSiteName"
:label="$t('trials:sitesList:table:siteName')" :label="$t('trials:sitesList:table:siteName')"
show-overflow-tooltip show-overflow-tooltip
sortable="custom" sortable="custom"
@ -125,22 +141,6 @@
sortable="custom" sortable="custom"
min-width="120" min-width="120"
/> />
<!-- 城市 -->
<!-- <el-table-column
prop="City"
:label="$t('trials:sitesList:table:city')"
sortable="custom"
show-overflow-tooltip
width="100"
/> -->
<!-- 国家 -->
<!-- <el-table-column
prop="Country"
:label="$t('trials:sitesList:table:country')"
show-overflow-tooltip
sortable="custom"
width="120"
/> -->
<!-- 参与者 --> <!-- 参与者 -->
<el-table-column <el-table-column
prop="UserNameList" prop="UserNameList"
@ -149,8 +149,17 @@
min-width="100" min-width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button v-if="scope.row.UserCount > 0" size="small" type="text" @click="getCrcList(scope.row)"> <el-button
{{ scope.row.UserNameList.length>0 ? scope.row.UserNameList.join(', ') :'' }} v-if="scope.row.UserCount > 0"
size="small"
type="text"
@click="getCrcList(scope.row)"
>
{{
scope.row.UserNameList.length > 0
? scope.row.UserNameList.join(", ")
: ""
}}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -179,8 +188,12 @@
min-width="100" min-width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsDeleted" type="danger">{{ $fd('IsSiteDisable', scope.row.IsDeleted) }}</el-tag> <el-tag v-if="scope.row.IsDeleted" type="danger">{{
<el-tag v-else>{{ $fd('IsSiteDisable', scope.row.IsDeleted) }}</el-tag> $fd("IsSiteDisable", scope.row.IsDeleted)
}}</el-tag>
<el-tag v-else>{{
$fd("IsSiteDisable", scope.row.IsDeleted)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 授权时间 --> <!-- 授权时间 -->
@ -191,46 +204,18 @@
sortable sortable
min-width="150" min-width="150"
/> />
<!-- 禁用时间 -->
<!-- <el-table-column
prop="DeletedTime"
:label="$t('trials:sitesList:table:timeDeleted')"
show-overflow-tooltip
sortable
width="210"
/> -->
<!-- <el-table-column
prop="CreateTime"
:label="$t('trials:internalStaff:table:CreateTime')"
show-overflow-tooltip
sortable
width="210"
/> -->
<el-table-column <el-table-column
v-if="hasPermi(['trials:trials-panel:setting:personnel-manage:edit-site','trials:trials-panel:setting:personnel-manage:remove-site'])" v-if="
hasPermi([
'trials:trials-panel:setting:personnel-manage:edit-site',
'trials:trials-panel:setting:personnel-manage:remove-site',
])
"
:label="$t('common:action:action')" :label="$t('common:action:action')"
min-width="120" min-width="120"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<!-- Assign -->
<!-- <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:assign-staff']"
circle
:title="$t('trials:sitesList:action:assign')"
icon="el-icon-user"
:disabled="scope.row.IsDeleted"
@click="handleAssignCRC(scope.row)"
/>
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:assign-staff']"
circle
:title="$t('common:button:edit')"
icon="el-icon-minus"
:disabled="scope.row.UserCount === 0"
@click="getCrcList(scope.row)"
/> -->
<el-button
circle circle
:title="$t('trials:sitesList:action:assign')" :title="$t('trials:sitesList:action:assign')"
icon="el-icon-user" icon="el-icon-user"
@ -240,7 +225,9 @@
<!-- Edit --> <!-- Edit -->
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:edit-site']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:edit-site',
]"
circle circle
:title="$t('common:button:edit')" :title="$t('common:button:edit')"
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
@ -250,16 +237,14 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination" style="text-align: right"> <div class="pagination" style="text-align: right">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" /> <pagination
:total="total"
:page.sync="listQuery.PageIndex"
:limit.sync="listQuery.PageSize"
@pagination="getList"
/>
</div> </div>
<!-- 给项目分配site -->
<base-model v-if="site_model.visible" :config="site_model">
<template slot="dialog-body">
<SiteForm @closeDialog="closeSiteDialog" />
</template>
</base-model>
<!-- 给site分配crc --> <!-- 给site分配crc -->
<base-model v-if="crc_model.visible" :config="crc_model"> <base-model v-if="crc_model.visible" :config="crc_model">
<template slot="dialog-body"> <template slot="dialog-body">
@ -270,59 +255,96 @@
<!-- 修改site信息 --> <!-- 修改site信息 -->
<base-model v-if="edit_model.visible" :config="edit_model"> <base-model v-if="edit_model.visible" :config="edit_model">
<template slot="dialog-body"> <template slot="dialog-body">
<el-form ref="editForm" :model="form" label-width="100px" :rules="rules"> <el-form
ref="editForm"
:model="form"
label-width="100px"
:rules="rules"
>
<!-- 中心编号 --> <!-- 中心编号 -->
<el-form-item :label="$t('trials:sitesList:table:siteId')" prop="TrialSiteCode"> <el-form-item
:label="$t('trials:sitesList:table:siteId')"
prop="TrialSiteCode"
>
<el-input v-model="form.TrialSiteCode" /> <el-input v-model="form.TrialSiteCode" />
</el-form-item> </el-form-item>
<!-- 中心名称 --> <!-- 中心名称 -->
<el-form-item :label="$t('trials:sitesList:table:siteName')"> <el-form-item
<el-input v-model="form.Site" disabled /> :label="$t('trials:sitesList:table:siteName')"
prop="TrialSiteName"
>
<el-autocomplete
clearable
class="inline-input"
style="width: 100%"
v-model="form.TrialSiteName"
:fetch-suggestions="querySearch"
@select="handleSelect"
placeholder=""
></el-autocomplete>
</el-form-item> </el-form-item>
<!-- 中心别称 --> <!-- 中心别称 -->
<el-form-item :label="$t('trials:sitesList:table:siteAliasName')" prop="TrialSiteAliasName"> <el-form-item
:label="$t('trials:sitesList:table:siteAliasName')"
prop="TrialSiteAliasName"
>
<el-input v-model="form.TrialSiteAliasName" /> <el-input v-model="form.TrialSiteAliasName" />
</el-form-item> </el-form-item>
<!-- 城市 -->
<el-form-item :label="$t('trials:sitesList:table:city')">
<el-input v-model="form.City" disabled />
</el-form-item>
<!-- 国家 -->
<el-form-item :label="$t('trials:sitesList:table:country')">
<el-input v-model="form.Country" disabled />
</el-form-item>
<!-- 状态 --> <!-- 状态 -->
<el-form-item :label="$t('trials:sitesList:table:status')"> <el-form-item :label="$t('trials:sitesList:table:status')">
<el-switch v-model="form.IsDeleted" :active-value="false" :inactive-value="true" /> <el-switch v-model="form.IsDeleted" />
</el-form-item> </el-form-item>
</el-form> </el-form>
</template> </template>
<template slot="dialog-footer"> <template slot="dialog-footer">
<el-button type="primary" size="small" :disabled="saveBtnLoading" @click="edit_model.visible = false"> <el-button
{{ $t('common:button:cancel') }} type="primary"
size="small"
:disabled="saveBtnLoading"
@click="edit_model.visible = false"
>
{{ $t("common:button:cancel") }}
</el-button> </el-button>
<el-button type="primary" size="small" :loading="saveBtnLoading" @click="handleUpdateSiteID"> <el-button
{{ $t('common:button:save') }} type="primary"
size="small"
:loading="saveBtnLoading"
@click="handleUpdateSiteID"
>
{{ $t("common:button:save") }}
</el-button> </el-button>
</template> </template>
</base-model> </base-model>
<!-- 修改参与者人员状态 --> <!-- 修改参与者人员状态 -->
<base-model v-if="status_model.visible" :config="status_model"> <base-model v-if="status_model.visible" :config="status_model">
<template slot="dialog-body"> <template slot="dialog-body">
<span>{{ $t('trials:internalStaff:table:status') }}:</span> <span>{{ $t("trials:internalStaff:table:status") }}:</span>
<el-radio-group v-model="staffStatus"> <el-radio-group v-model="staffStatus">
<el-radio v-for="item of $d.IsUserExitTrial" :key="item.label" :label="item.value">{{ item.label }}</el-radio> <el-radio
v-for="item of $d.IsUserExitTrial"
:key="item.label"
:label="item.value"
>{{ item.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</template> </template>
<template slot="dialog-footer"> <template slot="dialog-footer">
<el-button :disabled="btnLoading" size="small" type="primary" @click="status_model.visible = false"> <el-button
{{ $t('common:button:cancel') }} :disabled="btnLoading"
size="small"
type="primary"
@click="status_model.visible = false"
>
{{ $t("common:button:cancel") }}
</el-button> </el-button>
<el-button size="small" type="primary" :loading="btnLoading" @click="saveStatus"> <el-button
{{ $t('common:button:save') }} size="small"
type="primary"
:loading="btnLoading"
@click="saveStatus"
>
{{ $t("common:button:save") }}
</el-button> </el-button>
</template> </template>
</base-model> </base-model>
@ -330,18 +352,25 @@
<!-- site下的crc/cra --> <!-- site下的crc/cra -->
<base-model v-if="siteOfcrc_model.visible" :config="siteOfcrc_model"> <base-model v-if="siteOfcrc_model.visible" :config="siteOfcrc_model">
<template slot="dialog-body"> <template slot="dialog-body">
<div style="text-align:right;"> <div style="text-align: right">
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:assign-staff']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]"
type="primary" type="primary"
icon="el-icon-plus" icon="el-icon-plus"
size="small" size="small"
@click="crc_model.visible = true" @click="crc_model.visible = true"
> >
{{ $t('common:button:add') }} {{ $t("common:button:add") }}
</el-button> </el-button>
</div> </div>
<el-table v-loading="userListLoading" :data="userList" height="400" size="small"> <el-table
v-loading="userListLoading"
:data="userList"
height="400"
size="small"
>
<!-- 姓名 --> <!-- 姓名 -->
<el-table-column <el-table-column
prop="UserRealName" prop="UserRealName"
@ -391,8 +420,12 @@
width="100" width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsDeleted" type="danger">{{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}</el-tag> <el-tag v-if="scope.row.IsDeleted" type="danger">{{
<el-tag v-else>{{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}</el-tag> $fd("IsUserExitTrial", scope.row.IsDeleted)
}}</el-tag>
<el-tag v-else>{{
$fd("IsUserExitTrial", scope.row.IsDeleted)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -410,13 +443,17 @@
width="210" width="210"
/> />
<el-table-column <el-table-column
v-hasPermi="['trials:trials-panel:setting:personnel-manage:assign-staff']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]"
:label="$t('common:action:action')" :label="$t('common:action:action')"
width="100" width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
v-hasPermi="['trials:trials-panel:setting:personnel-manage:assign-staff']" v-hasPermi="[
'trials:trials-panel:setting:personnel-manage:assign-staff',
]"
circle circle
:title="$t('trials:internalStaff:action:status')" :title="$t('trials:internalStaff:action:status')"
icon="el-icon-edit-outline" icon="el-icon-edit-outline"
@ -424,57 +461,96 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</template> </template>
</base-model> </base-model>
<!-- 导入 --> <!-- 导入 -->
<base-model v-if="upload_model.visible" :config="upload_model"> <base-model v-if="upload_model.visible" :config="upload_model">
<template slot="dialog-body"> <template slot="dialog-body">
<UploadExcel @closeDialog="upload_model.visible = false" @getList="getList" /> <UploadExcel
@closeDialog="upload_model.visible = false"
@getList="getList"
/>
</template> </template>
</base-model> </base-model>
</div> </div>
</template> </template>
<script> <script>
import { getSiteCRCSimpleList, deleteTrialSite, deleteSiteCRC, editTrialSite, getTrialSiteCRCList, trialSiteUserListExport } from '@/api/trials' import {
import { DownloadCommonDoc } from '@/api/dictionary' getSiteCRCSimpleList,
import Pagination from '@/components/Pagination' deleteTrialSite,
import SiteForm from './siteForm' deleteSiteCRC,
import CRCForm from './crcForm' editTrialSite,
import BaseModel from '@/components/BaseModel' getTrialSiteCRCList,
import UploadExcel from './uploadExcel' trialSiteUserListExport,
import moment from 'moment' addTrialSites,
getTrialSiteSelectList,
} from "@/api/trials";
import { DownloadCommonDoc } from "@/api/dictionary";
import Pagination from "@/components/Pagination";
import CRCForm from "./crcForm";
import BaseModel from "@/components/BaseModel";
import UploadExcel from "./uploadExcel";
import moment from "moment";
const getListQueryDefault = () => { const getListQueryDefault = () => {
return { return {
UserKeyInfo: '', UserKeyInfo: "",
TrialSiteCode: '', TrialSiteCode: "",
TrialSiteAliasName: '', TrialSiteAliasName: "",
TrialSiteName: null,
IsDeleted: null, IsDeleted: null,
SortField: 'TrialSiteCode', SortField: "TrialSiteCode",
Asc: true, Asc: true,
PageIndex: 1, PageIndex: 1,
PageSize: 20 PageSize: 20,
} };
} };
export default { export default {
name: 'Participant', name: "Participant",
components: { Pagination, SiteForm, CRCForm, BaseModel, UploadExcel }, components: { Pagination, CRCForm, BaseModel, UploadExcel },
data() { data() {
return { return {
list: [], list: [],
listQuery: getListQueryDefault(), listQuery: getListQueryDefault(),
listLoading: false, listLoading: false,
total: 0, total: 0,
currentSiteId: '', currentSiteId: "",
site_model: { visible: false, title: this.$t('trials:sitesList:dialogTitle:assignSite'), width: '60%' }, site_model: {
crc_model: { visible: false, title: this.$t('trials:sitesList:dialogTitle:assignStaff').replace('xxx', this.$route.query.trialCode), width: '60%' }, visible: false,
edit_model: { visible: false, title: this.$t('trials:sitesList:dialogTitle:editSite'), width: '600px' }, title: this.$t("trials:sitesList:dialogTitle:assignSite"),
status_model: { visible: false, title: this.$t('trials:sitesList:dialogTitle:editStaffStauts'), width: '500px' }, width: "60%",
siteOfcrc_model: { visible: false, title: '', width: '70%' }, },
form: { TrialSiteCode: '', Site: '', City: '', Country: '', IsDeleted: false }, crc_model: {
upload_model: { visible: false, title: this.$t('common:button:upload'), width: '500px' }, visible: false,
title: this.$t("trials:sitesList:dialogTitle:assignStaff").replace(
"xxx",
this.$route.query.trialCode
),
width: "60%",
},
edit_model: {
visible: false,
title: this.$t("trials:sitesList:dialogTitle:editSite"),
width: "600px",
model_type: "add",
},
status_model: {
visible: false,
title: this.$t("trials:sitesList:dialogTitle:editStaffStauts"),
width: "500px",
},
siteOfcrc_model: { visible: false, title: "", width: "70%" },
form: {
TrialSiteCode: "",
TrialSiteName: "",
TrialSiteAliasName: "",
IsDeleted: true,
},
upload_model: {
visible: false,
title: this.$t("common:button:upload"),
width: "500px",
},
saveBtnLoading: false, saveBtnLoading: false,
staffStatus: null, staffStatus: null,
currentRow: {}, currentRow: {},
@ -484,190 +560,327 @@ export default {
moment, moment,
rules: { rules: {
TrialSiteCode: [ TrialSiteCode: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' }, {
{ max: 100, message: `${this.$t('common:ruleMessage:maxLength')} 100`, trigger: 'blur' } required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
},
{
max: 100,
message: `${this.$t("common:ruleMessage:maxLength")} 100`,
trigger: "blur",
},
],
TrialSiteName: [
{
required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: ["blur", "change"],
},
{
max: 500,
message: `${this.$t("common:ruleMessage:maxLength")} 500`,
trigger: "blur",
},
], ],
TrialSiteAliasName: [ TrialSiteAliasName: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: 'blur' } {
] required: true,
message: this.$t("common:ruleMessage:specify"),
trigger: "blur",
}, },
trialId: '' {
} max: 500,
message: `${this.$t("common:ruleMessage:maxLength")} 500`,
trigger: "blur",
},
],
},
trialId: "",
TrialSiteSelectList: [],
};
}, },
mounted() { mounted() {
this.trialId = this.$route.query.trialId this.trialId = this.$route.query.trialId;
this.getList() this.getList();
this.getTrialSiteSelectList();
}, },
methods: { methods: {
handleSelect(item) {
this.form.TrialSiteName = item.SiteName;
this.form.TrialSiteAliasName = item.AliasName
? item.AliasName
: this.form.TrialSiteAliasName;
this.form.SiteId = item.SiteId;
},
querySearch(queryString, cb) {
var TrialSiteSelectList = this.TrialSiteSelectList;
var results = queryString
? TrialSiteSelectList.filter(this.createFilter(queryString))
: TrialSiteSelectList;
// callback
cb(results);
},
createFilter(queryString) {
return (TrialSiteSelectList) => {
return (
TrialSiteSelectList.SiteName.toLowerCase().indexOf(
queryString.toLowerCase()
) === 0 ||
TrialSiteSelectList.AliasName.toLowerCase().indexOf(
queryString.toLowerCase()
) === 0
);
};
},
// site
async getTrialSiteSelectList() {
try {
let res = await getTrialSiteSelectList();
if (res.IsSuccess) {
this.TrialSiteSelectList = res.Result.map((item) => {
return {
value: item.SiteName + " " + item.AliasName,
...item,
};
});
}
} catch (err) {
console.log(err);
}
},
// site // site
getList() { getList() {
this.listLoading = true this.listLoading = true;
this.listQuery.TrialId = this.trialId this.listQuery.TrialId = this.trialId;
getSiteCRCSimpleList(this.listQuery).then(res => { getSiteCRCSimpleList(this.listQuery)
this.listLoading = false .then((res) => {
this.list = res.Result.CurrentPageData this.listLoading = false;
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData;
}).catch(() => { this.listLoading = false }) this.total = res.Result.TotalCount;
})
.catch(() => {
this.listLoading = false;
});
}, },
// site // site
handleAdd() { handleAdd() {
this.site_model.visible = true this.edit_model.title = this.$t(
"trials:sitesList:dialogTitle:assignSite"
);
this.edit_model.model_type = "add";
Object.keys(this.form).forEach((key) => {
this.form[key] = "";
if (key === "IsDeleted") {
this.form[key] = true;
}
});
this.edit_model.visible = true;
}, },
// siteCRC // siteCRC
handleAssignCRC(row) { handleAssignCRC(row) {
if (!row.TrialSiteCode) { if (!row.TrialSiteCode) {
this.$alert(this.$t('trials:sitesList:message:setSiteId')) this.$alert(this.$t("trials:sitesList:message:setSiteId"));
return return;
} }
this.currentSiteId = row.TrialSiteId this.currentSiteId = row.TrialSiteId;
var title = this.$t('trials:sitesList:dialogTitle:assignStaff') var title = this.$t("trials:sitesList:dialogTitle:assignStaff");
console.log(title) console.log(title);
this.crc_model.title = title.replace('xxx', this.$route.query.trialCode) this.crc_model.title = title.replace("xxx", this.$route.query.trialCode);
this.crc_model.visible = true this.crc_model.visible = true;
}, },
// site // site
handleEdit(row) { handleEdit(row) {
if (Object.keys(row).length) { if (Object.keys(row).length) {
this.form = { ...row } this.form = { ...row };
} }
this.edit_model.visible = true this.edit_model.title = this.$t("trials:sitesList:dialogTitle:editSite");
this.edit_model.model_type = "edit";
this.edit_model.visible = true;
}, },
// site // site
handleUpdateSiteID() { handleUpdateSiteID() {
this.$refs['editForm'].validate(valid => { this.$refs["editForm"].validate((valid) => {
if (!valid) return if (!valid) return;
this.saveBtnLoading = true this.saveBtnLoading = true;
const param = { const param = {
trialId: this.trialId, trialId: this.trialId,
id: this.form.Id, id: this.form.Id,
SiteId: this.form.SiteId,
TrialSiteName: this.form.TrialSiteName,
trialSiteCode: this.form.TrialSiteCode, trialSiteCode: this.form.TrialSiteCode,
trialSiteAliasName: this.form.TrialSiteAliasName, trialSiteAliasName: this.form.TrialSiteAliasName,
isDeleted: this.form.IsDeleted isDeleted: this.form.IsDeleted,
} };
editTrialSite(param).then(res => { if (this.edit_model.model_type === "add") {
this.saveBtnLoading = false addTrialSites([param])
.then((res) => {
this.saveBtnLoading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
this.edit_model.visible = false this.edit_model.visible = false;
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(
this.getList() this.$t("common:message:savedSuccessfully")
);
this.getList();
this.getTrialSiteSelectList();
} }
}).catch(() => { this.saveBtnLoading = false })
}) })
.catch(() => {
this.saveBtnLoading = false;
});
} else {
editTrialSite(param)
.then((res) => {
this.saveBtnLoading = false;
if (res.IsSuccess) {
this.edit_model.visible = false;
this.$message.success(
this.$t("common:message:savedSuccessfully")
);
this.getList();
this.getTrialSiteSelectList();
}
})
.catch(() => {
this.saveBtnLoading = false;
});
}
});
}, },
// site // site
handleDelete(row) { handleDelete(row) {
this.$confirm(this.$t('trials:sitesList:message:removeSite'), { this.$confirm(this.$t("trials:sitesList:message:removeSite"), {
type: 'warning', type: "warning",
distinguishCancelAndClose: true distinguishCancelAndClose: true,
}) }).then(() => {
.then(() => { deleteTrialSite(row.Id, this.trialId).then((res) => {
deleteTrialSite(row.Id, this.trialId)
.then(res => {
if (res.IsSuccess) { if (res.IsSuccess) {
this.list.splice(this.list.findIndex(item => item.Id === row.Id), 1) this.list.splice(
this.$message.success(this.$t('trials:sitesList:message:removedSuccessfully')) this.list.findIndex((item) => item.Id === row.Id),
1
);
this.$message.success(
this.$t("trials:sitesList:message:removedSuccessfully")
);
} }
}) });
}) });
}, },
handleStatus(row) { handleStatus(row) {
const { IsDeleted } = { ...row } const { IsDeleted } = { ...row };
this.currentRow = { ...row } this.currentRow = { ...row };
this.staffStatus = IsDeleted this.staffStatus = IsDeleted;
this.status_model.visible = true this.status_model.visible = true;
}, },
// siteCRC // siteCRC
saveStatus() { saveStatus() {
this.btnLoading = true this.btnLoading = true;
deleteSiteCRC(this.currentRow.Id, this.trialId, this.staffStatus) deleteSiteCRC(this.currentRow.Id, this.trialId, this.staffStatus)
.then(res => { .then((res) => {
this.btnLoading = false this.btnLoading = false;
if (res.IsSuccess) { if (res.IsSuccess) {
this.status_model.visible = false this.status_model.visible = false;
this.getTrialSiteCRCList() this.getTrialSiteCRCList();
this.getList() this.getList();
this.$message.success(this.$t('common:message:savedSuccessfully')) this.$message.success(this.$t("common:message:savedSuccessfully"));
} }
}).catch(() => {
this.btnLoading = false
}) })
.catch(() => {
this.btnLoading = false;
});
}, },
// sitecrc // sitecrc
getCrcList(row) { getCrcList(row) {
this.currentRow = { ...row } this.currentRow = { ...row };
this.currentSiteId = row.TrialSiteId this.currentSiteId = row.TrialSiteId;
var title = this.$t('trials:sitesList:dialogTitle:staff') var title = this.$t("trials:sitesList:dialogTitle:staff");
this.siteOfcrc_model.title = title.replace('xxx', row.TrialSiteCode) this.siteOfcrc_model.title = title.replace("xxx", row.TrialSiteCode);
this.siteOfcrc_model.visible = true this.siteOfcrc_model.visible = true;
this.getTrialSiteCRCList() this.getTrialSiteCRCList();
}, },
getTrialSiteCRCList() { getTrialSiteCRCList() {
this.userListLoading = true this.userListLoading = true;
getTrialSiteCRCList(this.trialId, this.currentRow.TrialSiteId).then(res => { getTrialSiteCRCList(this.trialId, this.currentRow.TrialSiteId)
this.userListLoading = false .then((res) => {
this.userList = res.Result this.userListLoading = false;
}).catch(() => { this.userListLoading = false }) this.userList = res.Result;
})
.catch(() => {
this.userListLoading = false;
});
}, },
// //
handleResearchListExport() { handleResearchListExport() {
this.listQuery.TrialId = this.trialId this.listQuery.TrialId = this.trialId;
this.listLoading = true this.listLoading = true;
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
const { SortField, Asc, PageIndex, PageSize, ...param } = { ...this.listQuery } const { SortField, Asc, PageIndex, PageSize, ...param } = {
trialSiteUserListExport({ ...param }).then(data => { ...this.listQuery,
this.listLoading = false };
}).catch(() => { this.listLoading = false }) trialSiteUserListExport({ ...param })
.then((data) => {
this.listLoading = false;
})
.catch(() => {
this.listLoading = false;
});
}, },
handleResearchList() { handleResearchList() {
this.$router.push({ path: `/trials/trials-panel/attachments/site-research?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}` }) this.$router.push({
path: `/trials/trials-panel/attachments/site-research?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}`,
});
}, },
handleUpload() { handleUpload() {
this.upload_model.visible = true this.upload_model.visible = true;
}, },
handleDownload() { handleDownload() {
this.loading = true this.loading = true;
DownloadCommonDoc('TrialSiteSurveyImportUser_Template').then(data => { DownloadCommonDoc("TrialSiteSurveyImportUser_Template")
this.loading = false .then((data) => {
}).catch(() => { this.loading = false }) this.loading = false;
})
.catch(() => {
this.loading = false;
});
}, },
// site // site
handleSortByColumn(column) { handleSortByColumn(column) {
if (column.order === 'ascending') { if (column.order === "ascending") {
this.listQuery.Asc = true this.listQuery.Asc = true;
} else { } else {
this.listQuery.Asc = false this.listQuery.Asc = false;
} }
this.listQuery.SortField = column.prop this.listQuery.SortField = column.prop;
this.listQuery.PageIndex = 1 this.listQuery.PageIndex = 1;
this.getList() this.getList();
}, },
// //
handleSearch() { handleSearch() {
this.listQuery.PageIndex = 1 this.listQuery.PageIndex = 1;
this.getList() this.getList();
}, },
// //
handleReset() { handleReset() {
this.listQuery = getListQueryDefault() this.listQuery = getListQueryDefault();
this.getList() this.getList();
}, },
// crc // crc
closeDialog(isReresh) { closeDialog(isReresh) {
this.crc_model.visible = false this.crc_model.visible = false;
if (isReresh) { if (isReresh) {
this.listQuery = getListQueryDefault() this.listQuery = getListQueryDefault();
this.getList() this.getList();
this.getTrialSiteCRCList() this.getTrialSiteCRCList();
} }
}, },
// site // site
closeSiteDialog() { closeSiteDialog() {
this.site_model.visible = false this.site_model.visible = false;
this.listQuery = getListQueryDefault() this.listQuery = getListQueryDefault();
this.getList() this.getList();
} },
} },
} };
</script> </script>
<style lang="scss"> <style lang="scss">
.assign-site { .assign-site {

View File

@ -215,38 +215,6 @@
:disabled="form.IsTrialBasicLogicConfirmed && !isEdit" :disabled="form.IsTrialBasicLogicConfirmed && !isEdit"
/> />
</el-form-item> </el-form-item>
<!-- 临床信息传输 -->
<!-- <el-form-item
:label="$t('trials:logincCfg:form:clinicalInforTransfer')"
prop="ClinicalInformationTransmissionEnum"
>
<el-radio-group
v-model="form.ClinicalInformationTransmissionEnum"
:disabled="form.IsTrialBasicLogicConfirmed && !isEdit"
>
<el-radio
v-for="item of $d.ClinicalInformationTransmissionEnum"
:key="item.id"
:label="item.value"
>
{{ item.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if="form.ClinicalInformationTransmissionEnum === 1"
label="临床数据配置"
prop="ClinicalDataSetNamesStr"
>
<el-input
v-model="form.ClinicalDataSetNamesStr"
type="textarea"
:autosize="{ minRows: 1, maxRows: 3}"
style="width:80%;"
disabled
/>
<el-button icon="el-icon-plus" circle :disabled="form.IsTrialBasicLogicConfirmed && !isEdit" @click="handleSetCD" />
</el-form-item> -->
<el-form-item> <el-form-item>
<!-- 保存 --> <!-- 保存 -->
<el-button <el-button
@ -643,10 +611,27 @@
:close-on-click-modal="false" :close-on-click-modal="false"
:title="$t('trials:logincCfg:form:modality')" :title="$t('trials:logincCfg:form:modality')"
custom-class="base-dialog-wrapper" custom-class="base-dialog-wrapper"
width="400px" width="800px"
> >
<div class="base-dialog-body"> <div class="base-dialog-body" style="height: 400px; text-align: center">
<el-table <el-transfer
filterable
:filter-method="filterMethod"
filter-placeholder=""
v-model="selectedList"
:data="$d.Modality"
:titles="[
$t('trials:logincCfg:transfer:notCheck'),
$t('trials:logincCfg:transfer:check'),
]"
:props="{
key: 'value',
label: 'value',
}"
:render-content="renderFunc"
>
</el-transfer>
<!-- <el-table
ref="multipleTable" ref="multipleTable"
:data="$d.Modality" :data="$d.Modality"
stripe stripe
@ -665,7 +650,7 @@
prop="value" prop="value"
:label="$t('trials:logincCfg:form:modality')" :label="$t('trials:logincCfg:form:modality')"
/> />
</el-table> </el-table> -->
</div> </div>
<div <div
class="base-dialog-footer" class="base-dialog-footer"
@ -908,6 +893,15 @@ export default {
], ],
}, },
errMessage: null, errMessage: null,
renderFunc(h, option) {
return (
<span>
{option.value} <span style="color:#ddd">-</span>{" "}
{option.raw.Description}
</span>
);
},
}; };
}, },
created() { created() {
@ -917,7 +911,7 @@ export default {
handleConfirmModality() { handleConfirmModality() {
this.form.ModalityList = Object.assign( this.form.ModalityList = Object.assign(
[], [],
this.selectedList.map((v) => v.value) this.selectedList.map((v) => v)
); );
this.form.ModalityListStr = this.form.ModalityList.toString().replaceAll( this.form.ModalityListStr = this.form.ModalityList.toString().replaceAll(
",", ",",
@ -937,16 +931,17 @@ export default {
this.$refs.multipleTable.clearSelection(); this.$refs.multipleTable.clearSelection();
} }
}, },
filterMethod(query, item) {
return item.value.toLowerCase().indexOf(query.toLowerCase()) > -1;
},
handleSetModality() { handleSetModality() {
this.modalityListVisible = true; this.modalityListVisible = true;
this.$nextTick(() => {
var a = this.$d.Modality.filter((v) => { var a = this.$d.Modality.filter((v) => {
return !!this.form.ModalityList.find((v1) => { return !!this.form.ModalityList.find((v1) => {
return v1 === v.value; return v1 === v.value;
}); });
}); });
this.toggleSelection(a); this.selectedList = a.map((item) => item.value);
});
}, },
handleBodyPartSelectionChange(val) { handleBodyPartSelectionChange(val) {
this.selectedBodyParts = val; this.selectedBodyParts = val;
@ -1424,4 +1419,18 @@ export default {
top: 100%; top: 100%;
left: 0; left: 0;
} }
::v-deep .el-transfer-panel__body {
height: calc(100% - 50px);
.el-transfer-panel__list.is-filterable {
height: calc(100% - 55px);
}
}
::v-deep .el-transfer {
height: 100%;
text-align: left;
}
::v-deep .el-transfer-panel {
height: 100%;
width: calc(50% - 100px);
}
</style> </style>