列表排序调整
continuous-integration/drone/push Build is passing Details

uat_us
wangxiaoshuang 2024-11-21 17:19:41 +08:00
parent 0b09bcb702
commit d82e009206
6 changed files with 340 additions and 177 deletions

View File

@ -156,6 +156,7 @@
prop="SiteName" prop="SiteName"
:label="$t('trials:researchRecord:table:siteName')" :label="$t('trials:researchRecord:table:siteName')"
min-width="100" min-width="100"
sortable="custom"
show-overflow-tooltip show-overflow-tooltip
/> />
<!-- 联系人 --> <!-- 联系人 -->
@ -163,6 +164,7 @@
prop="UserName" prop="UserName"
:label="$t('trials:researchRecord:table:contactor')" :label="$t('trials:researchRecord:table:contactor')"
min-width="100" min-width="100"
sortable="custom"
show-overflow-tooltip show-overflow-tooltip
/> />
<!-- 联系电话 --> <!-- 联系电话 -->
@ -210,6 +212,7 @@
prop="State" prop="State"
:label="$t('trials:researchRecord:table:status')" :label="$t('trials:researchRecord:table:status')"
min-width="150" min-width="150"
sortable="custom"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">
@ -232,6 +235,7 @@
prop="IsDeleted" prop="IsDeleted"
:label="$t('trials:researchRecord:table:isDeleted')" :label="$t('trials:researchRecord:table:isDeleted')"
min-width="100" min-width="100"
sortable="custom"
show-overflow-tooltip show-overflow-tooltip
> >
<template slot-scope="scope"> <template slot-scope="scope">

View File

@ -103,6 +103,7 @@
:label="$t('trials:reviewAssign:table:visit')" :label="$t('trials:reviewAssign:table:visit')"
width="140" width="140"
show-overflow-tooltip show-overflow-tooltip
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span @click="openAllocation('task', 1, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.VisitTaskTypeCount}}</span> <span @click="openAllocation('task', 1, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.VisitTaskTypeCount}}</span>
@ -115,6 +116,7 @@
width="140" width="140"
show-overflow-tooltip show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsGlobalReading" v-if="OtherInfo && OtherInfo.IsGlobalReading"
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span @click="openAllocation('task', 2, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.GlobalTaskTypeCount}}</span> <span @click="openAllocation('task', 2, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.GlobalTaskTypeCount}}</span>
@ -127,6 +129,7 @@
width="140" width="140"
show-overflow-tooltip show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsArbitrationReading && ReadingType === 2" v-if="OtherInfo && OtherInfo.IsArbitrationReading && ReadingType === 2"
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span @click="openAllocation('referee', 4, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.JudgeTaskTypeCount}}</span> <span @click="openAllocation('referee', 4, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.JudgeTaskTypeCount}}</span>
@ -139,6 +142,7 @@
width="140" width="140"
show-overflow-tooltip show-overflow-tooltip
v-if="OtherInfo && OtherInfo.IsOncologyReading" v-if="OtherInfo && OtherInfo.IsOncologyReading"
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span @click="openAllocation('task', 5, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.OncologyTaskTypeCount}}</span> <span @click="openAllocation('task', 5, scope.row.SubjectCode)" style="color:#428bca;cursor: pointer">{{scope.row.OncologyTaskTypeCount}}</span>

View File

@ -203,7 +203,7 @@
<!-- width="160"--> <!-- width="160"-->
<!-- />--> <!-- />-->
<!-- 附件 --> <!-- 附件 -->
<!-- <el-table-column <el-table-column
v-if="$i18n.locale === 'zh' && isDistinguishCriteria" v-if="$i18n.locale === 'zh' && isDistinguishCriteria"
prop="AttachNameCN" prop="AttachNameCN"
:label="$t('trials:emailManageCfg:title:fileName')" :label="$t('trials:emailManageCfg:title:fileName')"
@ -220,7 +220,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
v-else v-if="$i18n.locale === 'en' && isDistinguishCriteria"
prop="AttachName" prop="AttachName"
:label="$t('trials:emailManageCfg:title:fileName')" :label="$t('trials:emailManageCfg:title:fileName')"
show-overflow-tooltip show-overflow-tooltip
@ -234,7 +234,7 @@
>{{ scope.row.AttachName }}</span >{{ scope.row.AttachName }}</span
> >
</template> </template>
</el-table-column> --> </el-table-column>
<!-- 是否需要回执 --> <!-- 是否需要回执 -->
<!-- <el-table-column <!-- <el-table-column
prop="IsReturnRequired" prop="IsReturnRequired"

View File

@ -333,6 +333,7 @@
:label="$t('trials:consistencyCheck:table:requestBackState')" :label="$t('trials:consistencyCheck:table:requestBackState')"
show-overflow-tooltip show-overflow-tooltip
min-width="120" min-width="120"
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.RequestBackState * 1 === 0">{{ <span v-if="scope.row.RequestBackState * 1 === 0">{{

View File

@ -90,14 +90,14 @@
</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 <el-button
type="primary" type="primary"
icon="el-icon-refresh-left" icon="el-icon-refresh-left"
@click="handleReset" @click="handleReset"
> >
{{ $t("common:button:reset") }} {{ $t('common:button:reset') }}
</el-button> </el-button>
<!--导出--> <!--导出-->
<el-button <el-button
@ -105,7 +105,7 @@
icon="el-icon-download" icon="el-icon-download"
@click="handleExport" @click="handleExport"
> >
{{ $t("common:button:export") }} {{ $t('common:button:export') }}
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -174,19 +174,19 @@
<div v-if="otherInfo.QCProcessEnum === 1"> <div v-if="otherInfo.QCProcessEnum === 1">
<!-- {{ scope.row.CurrentQCEnum === 1?'审核':'--' }} --> <!-- {{ scope.row.CurrentQCEnum === 1?'审核':'--' }} -->
<el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{ <el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{
$fd("CurrentQCType", 0) $fd('CurrentQCType', 0)
}}</el-tag> }}</el-tag>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<div v-else-if="otherInfo.QCProcessEnum === 2"> <div v-else-if="otherInfo.QCProcessEnum === 2">
<!-- {{ scope.row.CurrentQCEnum === 1?'初审':scope.row.CurrentQCEnum === 2?'复审':'--' }} --> <!-- {{ scope.row.CurrentQCEnum === 1?'初审':scope.row.CurrentQCEnum === 2?'复审':'--' }} -->
<el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{ <el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{
$fd("CurrentQCType", scope.row.CurrentQCEnum) $fd('CurrentQCType', scope.row.CurrentQCEnum)
}}</el-tag> }}</el-tag>
<el-tag <el-tag
v-else-if="scope.row.CurrentQCEnum === 2" v-else-if="scope.row.CurrentQCEnum === 2"
type="warning" type="warning"
>{{ $fd("CurrentQCType", scope.row.CurrentQCEnum) }}</el-tag >{{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}</el-tag
> >
<span v-else>--</span> <span v-else>--</span>
</div> </div>
@ -214,12 +214,13 @@
:label="$t('trials:crcQuestion:table:isOverTime')" :label="$t('trials:crcQuestion:table:isOverTime')"
show-overflow-tooltip show-overflow-tooltip
width="140" width="140"
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsOverTime" type="danger">{{ <el-tag v-if="scope.row.IsOverTime" type="danger">{{
$fd("YesOrNo", scope.row.IsOverTime) $fd('YesOrNo', scope.row.IsOverTime)
}}</el-tag> }}</el-tag>
<el-tag v-else>{{ $fd("YesOrNo", scope.row.IsOverTime) }}</el-tag> <el-tag v-else>{{ $fd('YesOrNo', scope.row.IsOverTime) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 最新回复时间 --> <!-- 最新回复时间 -->
@ -240,10 +241,10 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsClosed">{{ <el-tag v-if="scope.row.IsClosed">{{
$fd("YesOrNo", scope.row.IsClosed) $fd('YesOrNo', scope.row.IsClosed)
}}</el-tag> }}</el-tag>
<el-tag v-else type="danger">{{ <el-tag v-else type="danger">{{
$fd("YesOrNo", scope.row.IsClosed) $fd('YesOrNo', scope.row.IsClosed)
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -266,13 +267,13 @@
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.ReuploadEnum === 0">--</span> <span v-if="scope.row.ReuploadEnum === 0">--</span>
<el-tag v-else-if="scope.row.ReuploadEnum === 1" type="danger">{{ <el-tag v-else-if="scope.row.ReuploadEnum === 1" type="danger">{{
$fd("ReuploadEnum", scope.row.ReuploadEnum) $fd('ReuploadEnum', scope.row.ReuploadEnum)
}}</el-tag> }}</el-tag>
<el-tag v-else-if="scope.row.ReuploadEnum === 2" type="warning">{{ <el-tag v-else-if="scope.row.ReuploadEnum === 2" type="warning">{{
$fd("ReuploadEnum", scope.row.ReuploadEnum) $fd('ReuploadEnum', scope.row.ReuploadEnum)
}}</el-tag> }}</el-tag>
<el-tag v-else-if="scope.row.ReuploadEnum === 3" type="primary">{{ <el-tag v-else-if="scope.row.ReuploadEnum === 3" type="primary">{{
$fd("ReuploadEnum", scope.row.ReuploadEnum) $fd('ReuploadEnum', scope.row.ReuploadEnum)
}}</el-tag> }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -349,24 +350,24 @@ import {
getTrialVisitStageSelect, getTrialVisitStageSelect,
getQCChallengeDialogList, getQCChallengeDialogList,
getNextCRCChallenge, getNextCRCChallenge,
} from "@/api/trials"; } from '@/api/trials'
import { getQCChallengeList_Export } from "@/api/export"; import { getQCChallengeList_Export } from '@/api/export'
import ChatForm from "./components/chatForm"; import ChatForm from './components/chatForm'
import BaseContainer from "@/components/BaseContainer"; import BaseContainer from '@/components/BaseContainer'
import Pagination from "@/components/Pagination"; import Pagination from '@/components/Pagination'
const searchDataDefault = () => { const searchDataDefault = () => {
return { return {
IsOverTime: null, IsOverTime: null,
SubjectCode: "", SubjectCode: '',
TrialSiteId: "", TrialSiteId: '',
VisitPlanArray: [], VisitPlanArray: [],
IsClosed: null, IsClosed: null,
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
}; }
}; }
export default { export default {
name: "CrcQusetion", name: 'CrcQusetion',
components: { BaseContainer, Pagination, ChatForm }, components: { BaseContainer, Pagination, ChatForm },
data() { data() {
return { return {
@ -380,143 +381,143 @@ export default {
visitPlanOptions: [], visitPlanOptions: [],
otherInfo: {}, otherInfo: {},
trialId: this.$route.query.trialId, trialId: this.$route.query.trialId,
}; }
}, },
mounted() { mounted() {
this.getList(); this.getList()
this.getSite(); this.getSite()
this.getVisitPlanOptions(); this.getVisitPlanOptions()
}, },
watch: { watch: {
chatVisible() { chatVisible() {
if (!this.chatVisible) { if (!this.chatVisible) {
this.$store.state.trials.checkTaskId = null; this.$store.state.trials.checkTaskId = null
} }
}, },
}, },
methods: { methods: {
beforeClose() { beforeClose() {
this.chatVisible = false; this.chatVisible = false
this.$store.state.trials.checkTaskId = null; this.$store.state.trials.checkTaskId = null
}, },
handleExport() { handleExport() {
getQCChallengeList_Export(this.searchData) getQCChallengeList_Export(this.searchData)
.then((res) => {}) .then((res) => {})
.catch(() => { .catch(() => {
this.loading = false; this.loading = false
}); })
}, },
// //
getList() { getList() {
this.loading = true; this.loading = true
this.searchData.TrialId = this.trialId; this.searchData.TrialId = this.trialId
getCRCChallengeList(this.searchData) getCRCChallengeList(this.searchData)
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
this.list = res.Result.CurrentPageData; this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount; this.total = res.Result.TotalCount
this.otherInfo = res.OtherInfo; this.otherInfo = res.OtherInfo
}) })
.catch(() => { .catch(() => {
this.loading = false; this.loading = false
}); })
}, },
// //
handleReplay(row) { handleReplay(row) {
this.loading = true; this.loading = true
getQCChallengeDialogList(row.Id) getQCChallengeDialogList(row.Id)
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
if (res.IsSuccess) { if (res.IsSuccess) {
if (res.Result.length > 0) { if (res.Result.length > 0) {
Object.assign(row, res.Result[0]); Object.assign(row, res.Result[0])
} }
this.currentQCRow = { ...row }; this.currentQCRow = { ...row }
this.$store.state.trials.checkTaskId = row.SubjectVisitId; this.$store.state.trials.checkTaskId = row.SubjectVisitId
this.chatVisible = true; this.chatVisible = true
} }
}) })
.catch(() => { .catch(() => {
this.loading = false; this.loading = false
}); })
}, },
async getNextTask(qcChallengeId) { async getNextTask(qcChallengeId) {
try { try {
const params = { const params = {
trialId: this.trialId, trialId: this.trialId,
qcChallengeId: qcChallengeId, qcChallengeId: qcChallengeId,
}; }
const res = await getNextCRCChallenge(params); const res = await getNextCRCChallenge(params)
if (res.IsSuccess) { if (res.IsSuccess) {
const res2 = await getQCChallengeDialogList(res.Result.Id); const res2 = await getQCChallengeDialogList(res.Result.Id)
if (res2.IsSuccess) { if (res2.IsSuccess) {
Object.assign(res.Result, res2.Result[0]); Object.assign(res.Result, res2.Result[0])
this.chatVisible = false; this.chatVisible = false
this.currentQCRow = res.Result; this.currentQCRow = res.Result
this.$nextTick(() => { this.$nextTick(() => {
this.chatVisible = true; this.chatVisible = true
}); })
} }
} }
} catch (e) { } catch (e) {
this.chatVisible = false; this.chatVisible = false
console.log(e); console.log(e)
} }
}, },
getDialogList() { getDialogList() {
this.loading = true; this.loading = true
getQCChallengeDialogList(this.currentQCRow.Id) getQCChallengeDialogList(this.currentQCRow.Id)
.then((res) => { .then((res) => {
this.loading = false; this.loading = false
if (res.IsSuccess && res.Result.length > 0) { if (res.IsSuccess && res.Result.length > 0) {
var i = this.list.findIndex( var i = this.list.findIndex(
(item) => item.Id === this.currentQCRow.Id (item) => item.Id === this.currentQCRow.Id
); )
if (i > -1) { if (i > -1) {
this.currentQCRow = Object.assign(this.list[i], res.Result[0]); this.currentQCRow = Object.assign(this.list[i], res.Result[0])
this.$refs["chatForm"].addMessage( this.$refs['chatForm'].addMessage(
res.Result[0].DialogList[res.Result[0].DialogList.length - 1] res.Result[0].DialogList[res.Result[0].DialogList.length - 1]
); )
} }
} }
}) })
.catch(() => { .catch(() => {
this.loading = false; this.loading = false
}); })
}, },
// //
handleReset() { handleReset() {
this.searchData = searchDataDefault(); this.searchData = searchDataDefault()
this.getList(); this.getList()
}, },
// //
handleSearch() { handleSearch() {
this.searchData.PageIndex = 1; this.searchData.PageIndex = 1
this.getList(); this.getList()
}, },
// //
handleSortByColumn(column) { handleSortByColumn(column) {
if (column.order === "ascending") { if (column.order === 'ascending') {
this.searchData.Asc = true; this.searchData.Asc = true
} else { } else {
this.searchData.Asc = false; this.searchData.Asc = false
} }
this.searchData.SortField = column.prop; this.searchData.SortField = column.prop
this.searchData.PageIndex = 1; this.searchData.PageIndex = 1
this.getList(); this.getList()
}, },
// site // site
getSite() { getSite() {
getTrialSiteSelect(this.trialId).then((res) => { getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result; this.siteOptions = res.Result
}); })
}, },
// 访 // 访
getVisitPlanOptions() { getVisitPlanOptions() {
getTrialVisitStageSelect(this.trialId).then((res) => { getTrialVisitStageSelect(this.trialId).then((res) => {
this.visitPlanOptions = res.Result; this.visitPlanOptions = res.Result
}); })
}, },
}, },
}; }
</script> </script>

View File

@ -5,7 +5,12 @@
<el-form :inline="true"> <el-form :inline="true">
<!-- 中心编号 --> <!-- 中心编号 -->
<el-form-item :label="$t('trials:qcQuality:table:siteId')"> <el-form-item :label="$t('trials:qcQuality:table:siteId')">
<el-select v-model="searchData.TrialSiteId" clearable filterable style="width:120px;"> <el-select
v-model="searchData.TrialSiteId"
clearable
filterable
style="width: 120px"
>
<el-option <el-option
v-for="item of siteOptions" v-for="item of siteOptions"
:key="item.Id" :key="item.Id"
@ -16,13 +21,16 @@
</el-form-item> </el-form-item>
<!-- 受试者编号 --> <!-- 受试者编号 -->
<el-form-item :label="$t('trials:qcQuality:table:subjectId')"> <el-form-item :label="$t('trials:qcQuality:table:subjectId')">
<el-input v-model="searchData.SubjectCode" style="width:100px;" /> <el-input v-model="searchData.SubjectCode" style="width: 100px" />
</el-form-item> </el-form-item>
<!-- 访视名称 --> <!-- 访视名称 -->
<el-form-item class="my_multiple" :label="$t('trials:qcQuality:table:visitName')"> <el-form-item
class="my_multiple"
:label="$t('trials:qcQuality:table:visitName')"
>
<el-select <el-select
v-model="searchData.VisitPlanArray" v-model="searchData.VisitPlanArray"
style="width:140px" style="width: 140px"
clearable clearable
multiple multiple
> >
@ -34,24 +42,32 @@
> >
<span style="float: left">{{ item.VisitName }}</span> <span style="float: left">{{ item.VisitName }}</span>
</el-option> </el-option>
<el-option <el-option key="Other" label="Out of Plan" value="1.11" />
key="Other"
label="Out of Plan"
value="1.11"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 发起人 --> <!-- 发起人 -->
<el-form-item :label="$t('trials:qcQuality:table:organizer')"> <el-form-item :label="$t('trials:qcQuality:table:organizer')">
<el-select v-model="searchData.CreateUserId" clearable filterable style="width:150px;"> <el-select
v-model="searchData.CreateUserId"
clearable
filterable
style="width: 150px"
>
<el-option <el-option
v-for="(item,index) of creatorOptions" v-for="(item, index) of creatorOptions"
:key="index" :key="index"
:label="item.Creator" :label="item.Creator"
:value="item.CreateUserId" :value="item.CreateUserId"
> >
<span style="float: left">{{ item.Creator }}</span> <span style="float: left">{{ item.Creator }}</span>
<span style="float: right; color: #8492a6; font-size: 13px;margin-left:5px;"> <span
style="
float: right;
color: #8492a6;
font-size: 13px;
margin-left: 5px;
"
>
{{ item.CreatorRealName }} {{ item.CreatorRealName }}
</span> </span>
</el-option> </el-option>
@ -60,20 +76,47 @@
<!-- 是否超限 --> <!-- 是否超限 -->
<el-form-item :label="$t('trials:qcQuality:table:isOverTime')"> <el-form-item :label="$t('trials:qcQuality:table:isOverTime')">
<el-select v-model="searchData.IsOverTime" clearable style="width:120px"> <el-select
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id"/> v-model="searchData.IsOverTime"
clearable
style="width: 120px"
>
<el-option
v-for="item of $d.YesOrNo"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 是否关闭 --> <!-- 是否关闭 -->
<el-form-item :label="$t('trials:qcQuality:table:isClosed')"> <el-form-item :label="$t('trials:qcQuality:table:isClosed')">
<el-select v-model="searchData.IsClosed" clearable style="width:120px"> <el-select
<el-option v-for="item of $d.YesOrNo" :value="item.value" :label="item.label" :key="item.id"/> v-model="searchData.IsClosed"
clearable
style="width: 120px"
>
<el-option
v-for="item of $d.YesOrNo"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 是否重传 --> <!-- 是否重传 -->
<el-form-item :label="$t('trials:qcQuality:table:ReuploadEnum')"> <el-form-item :label="$t('trials:qcQuality:table:ReuploadEnum')">
<el-select v-model="searchData.ReuploadEnum" clearable style="width:120px"> <el-select
<el-option v-for="item of $d.ReuploadEnum" :value="item.value" :label="item.label" :key="item.id"/> v-model="searchData.ReuploadEnum"
clearable
style="width: 120px"
>
<el-option
v-for="item of $d.ReuploadEnum"
:value="item.value"
:label="item.label"
:key="item.id"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 查询 --> <!-- 查询 -->
@ -81,7 +124,11 @@
{{ $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
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }} {{ $t('common:button:reset') }}
</el-button> </el-button>
<!--导出--> <!--导出-->
@ -96,7 +143,7 @@
<el-table <el-table
ref="qcQsTable" ref="qcQsTable"
v-loading="loading" v-loading="loading"
v-adaptive="{bottomOffset:60}" v-adaptive="{ bottomOffset: 60 }"
:data="list" :data="list"
stripe stripe
height="100" height="100"
@ -112,13 +159,12 @@
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
type="text" type="text"
:style="{color:scope.row.IsClosed?'':'red'}" :style="{ color: scope.row.IsClosed ? '' : 'red' }"
@click="handleReply(scope.row,scope.$index)" @click="handleReply(scope.row, scope.$index)"
> >
{{ scope.row.ChallengeCode }} {{ scope.row.ChallengeCode }}
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<!-- 中心编号 --> <!-- 中心编号 -->
<el-table-column <el-table-column
@ -154,12 +200,20 @@
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="otherInfo.QCProcessEnum === 1"> <div v-if="otherInfo.QCProcessEnum === 1">
<!-- {{ scope.row.CurrentQCEnum === 1?'审核':'--' }} --> <!-- {{ scope.row.CurrentQCEnum === 1?'审核':'--' }} -->
<el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{ $fd('CurrentQCType', 0) }}</el-tag> <el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{
$fd('CurrentQCType', 0)
}}</el-tag>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
<div v-else-if="otherInfo.QCProcessEnum === 2"> <div v-else-if="otherInfo.QCProcessEnum === 2">
<el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}</el-tag> <el-tag v-if="scope.row.CurrentQCEnum === 1" type="primary">{{
<el-tag v-else-if="scope.row.CurrentQCEnum === 2" type="warning">{{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}</el-tag> $fd('CurrentQCType', scope.row.CurrentQCEnum)
}}</el-tag>
<el-tag
v-else-if="scope.row.CurrentQCEnum === 2"
type="warning"
>{{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}</el-tag
>
<span v-else>--</span> <span v-else>--</span>
</div> </div>
</template> </template>
@ -218,6 +272,7 @@
:label="$t('trials:qcQuality:table:qsDuration')" :label="$t('trials:qcQuality:table:qsDuration')"
show-overflow-tooltip show-overflow-tooltip
width="120" width="120"
sortable="custom"
/> />
<!-- 是否超限 --> <!-- 是否超限 -->
<el-table-column <el-table-column
@ -225,9 +280,12 @@
:label="$t('trials:qcQuality:table:isOverTime')" :label="$t('trials:qcQuality:table:isOverTime')"
show-overflow-tooltip show-overflow-tooltip
width="100" width="100"
sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsOverTime" type="danger">{{ $fd('YesOrNo', scope.row.IsOverTime) }}</el-tag> <el-tag v-if="scope.row.IsOverTime" type="danger">{{
$fd('YesOrNo', scope.row.IsOverTime)
}}</el-tag>
<el-tag v-else>{{ $fd('YesOrNo', scope.row.IsOverTime) }}</el-tag> <el-tag v-else>{{ $fd('YesOrNo', scope.row.IsOverTime) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -240,7 +298,9 @@
sortable="custom" sortable="custom"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.IsClosed" type="danger">{{ $fd('YesOrNo', scope.row.IsClosed) }}</el-tag> <el-tag v-if="scope.row.IsClosed" type="danger">{{
$fd('YesOrNo', scope.row.IsClosed)
}}</el-tag>
<el-tag v-else>{{ $fd('YesOrNo', scope.row.IsClosed) }}</el-tag> <el-tag v-else>{{ $fd('YesOrNo', scope.row.IsClosed) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
@ -262,9 +322,15 @@
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.ReuploadEnum === 0">--</span> <span v-if="scope.row.ReuploadEnum === 0">--</span>
<el-tag v-else-if="scope.row.ReuploadEnum === 1" type="danger">{{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}</el-tag> <el-tag v-else-if="scope.row.ReuploadEnum === 1" type="danger">{{
<el-tag v-else-if="scope.row.ReuploadEnum === 2" type="warning">{{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}</el-tag> $fd('ReuploadEnum', scope.row.ReuploadEnum)
<el-tag v-else-if="scope.row.ReuploadEnum === 3" type="primary">{{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}</el-tag> }}</el-tag>
<el-tag v-else-if="scope.row.ReuploadEnum === 2" type="warning">{{
$fd('ReuploadEnum', scope.row.ReuploadEnum)
}}</el-tag>
<el-tag v-else-if="scope.row.ReuploadEnum === 3" type="primary">{{
$fd('ReuploadEnum', scope.row.ReuploadEnum)
}}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<!-- 重传完成时间 --> <!-- 重传完成时间 -->
@ -276,7 +342,12 @@
sortable="custom" sortable="custom"
/> />
<el-table-column <el-table-column
v-if="hasPermi(['trials:trials-panel:visit:qc-question:send', 'trials:trials-panel:visit:qc-question:close'])" v-if="
hasPermi([
'trials:trials-panel:visit:qc-question:send',
'trials:trials-panel:visit:qc-question:close',
])
"
:label="$t('common:action:action')" :label="$t('common:action:action')"
min-width="150" min-width="150"
fixed="right" fixed="right"
@ -297,7 +368,10 @@
icon="el-icon-error" icon="el-icon-error"
circle circle
:title="$t('trials:qcQuality:action:close')" :title="$t('trials:qcQuality:action:close')"
:disabled="scope.row.IsClosed || currentUserId !== scope.row.CurrentActionUserId" :disabled="
scope.row.IsClosed ||
currentUserId !== scope.row.CurrentActionUserId
"
@click="handleCloseQC(scope.row)" @click="handleCloseQC(scope.row)"
/> />
</template> </template>
@ -305,7 +379,13 @@
</el-table> </el-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" /> <pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template> </template>
<!-- 回复质疑 --> <!-- 回复质疑 -->
@ -314,10 +394,19 @@
:visible.sync="chatVisible" :visible.sync="chatVisible"
:close-on-click-modal="false" :close-on-click-modal="false"
width="800px" width="800px"
:title="$t('trials:qcQuality:dialogTitle:reply') + `(${currentQCRow.SubjectCode} ${currentQCRow.VisitName})`" :title="
$t('trials:qcQuality:dialogTitle:reply') +
`(${currentQCRow.SubjectCode} ${currentQCRow.VisitName})`
"
@getList="getList" @getList="getList"
> >
<chat-form :data="currentQCRow" user-type="qc" :sign-text="otherInfo.ImageQCSignText" @close="chatVisible = false" @getDialogList="getDialogList" /> <chat-form
:data="currentQCRow"
user-type="qc"
:sign-text="otherInfo.ImageQCSignText"
@close="chatVisible = false"
@getDialogList="getDialogList"
/>
</el-dialog> </el-dialog>
<!-- 关闭质疑 --> <!-- 关闭质疑 -->
<el-dialog <el-dialog
@ -329,7 +418,14 @@
width="600px" width="600px"
:title="$t('trials:qcQuality:dialogTitle:closeQuestion')" :title="$t('trials:qcQuality:dialogTitle:closeQuestion')"
> >
<div style="padding:10px;border: 1px solid #e0e0e0;max-height:650px;overflow-y: auto;"> <div
style="
padding: 10px;
border: 1px solid #e0e0e0;
max-height: 650px;
overflow-y: auto;
"
>
<el-form <el-form
ref="closeQuestionForm" ref="closeQuestionForm"
:model="closeQuestionForm" :model="closeQuestionForm"
@ -341,12 +437,16 @@
:label="$t('trials:qcQuality:label:closeReason')" :label="$t('trials:qcQuality:label:closeReason')"
prop="Type" prop="Type"
:rules="[ :rules="[
{ required: true, message: $t('common:ruleMessage:select')}, { required: true, message: $t('common:ruleMessage:select') },
]" ]"
> >
<el-radio-group v-model="closeQuestionForm.Type"> <el-radio-group v-model="closeQuestionForm.Type">
<el-radio :label="1">{{ $t('trials:qcQuality:radio:reason1') }}</el-radio> <el-radio :label="1">{{
<el-radio :label="2">{{ $t('trials:qcQuality:radio:reason2') }}</el-radio> $t('trials:qcQuality:radio:reason1')
}}</el-radio>
<el-radio :label="2">{{
$t('trials:qcQuality:radio:reason2')
}}</el-radio>
<!-- <el-radio :label="3">{{ $t('trials:qcQuality:radio:reason3') }}</el-radio>--> <!-- <el-radio :label="3">{{ $t('trials:qcQuality:radio:reason3') }}</el-radio>-->
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
@ -356,23 +456,33 @@
:label="$t('trials:consistencyCheck:label:closereason')" :label="$t('trials:consistencyCheck:label:closereason')"
prop="Remake" prop="Remake"
:rules="[ :rules="[
{ required: true, message: $t('common:ruleMessage:specify')}, { required: true, message: $t('common:ruleMessage:specify') },
]" ]"
> >
<el-input <el-input
v-model="closeQuestionForm.Remake" v-model="closeQuestionForm.Remake"
type="textarea" type="textarea"
:autosize="{ minRows: 2, maxRows: 4}" :autosize="{ minRows: 2, maxRows: 4 }"
:placeholder="$t('common:ruleMessage:specify')" :placeholder="$t('common:ruleMessage:specify')"
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button :disabled="closeBtnLoading" size="small" type="primary" @click="closeQuestionVisible = false"> <el-button
:disabled="closeBtnLoading"
size="small"
type="primary"
@click="closeQuestionVisible = false"
>
{{ $t('common:button:cancel') }} {{ $t('common:button:cancel') }}
</el-button> </el-button>
<el-button :loading="closeBtnLoading" size="small" type="primary" @click="handleCloseQuestion"> <el-button
:loading="closeBtnLoading"
size="small"
type="primary"
@click="handleCloseQuestion"
>
{{ $t('common:button:save') }} {{ $t('common:button:save') }}
</el-button> </el-button>
</div> </div>
@ -380,7 +490,14 @@
</BaseContainer> </BaseContainer>
</template> </template>
<script> <script>
import { getQCChallengeList, getTrialSiteSelect, getTrialVisitStageSelect, getQCChallengeCreatorList, closeQCChallenge, getQCChallengeDialogList } from '@/api/trials' import {
getQCChallengeList,
getTrialSiteSelect,
getTrialVisitStageSelect,
getQCChallengeCreatorList,
closeQCChallenge,
getQCChallengeDialogList,
} from '@/api/trials'
import { getQCChallengeList_Export } from '@/api/export' import { getQCChallengeList_Export } from '@/api/export'
import BaseContainer from '@/components/BaseContainer' import BaseContainer from '@/components/BaseContainer'
import ChatForm from '@/views/trials/trials-panel/visit/qc-check/components/chatForm' import ChatForm from '@/views/trials/trials-panel/visit/qc-check/components/chatForm'
@ -397,7 +514,7 @@ const searchDataDefault = () => {
IsClosed: null, IsClosed: null,
PageIndex: 1, PageIndex: 1,
PageSize: 20, PageSize: 20,
ReuploadEnum: null ReuploadEnum: null,
} }
} }
export default { export default {
@ -418,19 +535,31 @@ export default {
creatorOptions: [], creatorOptions: [],
otherInfo: {}, otherInfo: {},
closeQuestionVisible: false, closeQuestionVisible: false,
closeQuestionForm: { Id: '', SubjectVisitId: '', Type: null, Reason: '', Remake: '' }, closeQuestionForm: {
Id: '',
SubjectVisitId: '',
Type: null,
Reason: '',
Remake: '',
},
closeBtnLoading: false, closeBtnLoading: false,
trialId: this.$route.query.trialId, trialId: this.$route.query.trialId,
/* eslint-disable */ /* eslint-disable */
currentUserId: zzSessionStorage.getItem('userId') currentUserId: zzSessionStorage.getItem('userId'),
} }
}, },
mounted() { mounted() {
if (this.$route.query.challengeState && this.$route.query.challengeState * 1 === 1) { if (
this.$route.query.challengeState &&
this.$route.query.challengeState * 1 === 1
) {
// ChallengeState:1 // ChallengeState:1
this.searchData.IsClosed = true this.searchData.IsClosed = true
} }
if (this.$route.query.challengeState && this.$route.query.challengeState * 1 === 2) { if (
this.$route.query.challengeState &&
this.$route.query.challengeState * 1 === 2
) {
// ChallengeState:2 // ChallengeState:2
this.searchData.IsClosed = false this.searchData.IsClosed = false
} }
@ -449,40 +578,57 @@ export default {
getList() { getList() {
this.loading = true this.loading = true
this.searchData.TrialId = this.trialId this.searchData.TrialId = this.trialId
getQCChallengeList(this.searchData).then(res => { getQCChallengeList(this.searchData)
this.loading = false .then((res) => {
this.list = res.Result.CurrentPageData this.loading = false
this.total = res.Result.TotalCount this.list = res.Result.CurrentPageData
this.otherInfo = res.OtherInfo this.total = res.Result.TotalCount
}).catch(() => { this.loading = false }) this.otherInfo = res.OtherInfo
})
.catch(() => {
this.loading = false
})
}, },
handleExport() { handleExport() {
getQCChallengeList_Export(this.searchData).then(res => { getQCChallengeList_Export(this.searchData)
}).catch(() => {}) .then((res) => {})
.catch(() => {})
}, },
// //
handleReply(row) { handleReply(row) {
this.loading = true this.loading = true
getQCChallengeDialogList(row.Id).then(res => { getQCChallengeDialogList(row.Id)
this.loading = false .then((res) => {
if (res.IsSuccess) { this.loading = false
if (res.Result.length > 0) { Object.assign(row, res.Result[0]) } if (res.IsSuccess) {
this.currentQCRow = { ...row } if (res.Result.length > 0) {
this.chatVisible = true Object.assign(row, res.Result[0])
} }
}).catch(() => { this.loading = false }) this.currentQCRow = { ...row }
this.chatVisible = true
}
})
.catch(() => {
this.loading = false
})
}, },
getDialogList() { getDialogList() {
this.loading = true this.loading = true
getQCChallengeDialogList(this.currentQCRow.Id).then(res => { getQCChallengeDialogList(this.currentQCRow.Id)
this.loading = false .then((res) => {
if (res.IsSuccess && res.Result.length > 0) { this.loading = false
var i = this.list.findIndex(item => item.Id === this.currentQCRow.Id) if (res.IsSuccess && res.Result.length > 0) {
if (i > -1) { var i = this.list.findIndex(
this.currentQCRow = Object.assign(this.list[i], res.Result[0]) (item) => item.Id === this.currentQCRow.Id
)
if (i > -1) {
this.currentQCRow = Object.assign(this.list[i], res.Result[0])
}
} }
} })
}).catch(() => { this.loading = false }) .catch(() => {
this.loading = false
})
}, },
// //
handleCloseQC(row) { handleCloseQC(row) {
@ -501,28 +647,37 @@ export default {
this.closeBtnLoading = true this.closeBtnLoading = true
if (this.closeQuestionForm.Type === 1) { if (this.closeQuestionForm.Type === 1) {
// //
this.closeQuestionForm.Reason = this.$t('trials:qcQuality:message:problemSolved') this.closeQuestionForm.Reason = this.$t(
'trials:qcQuality:message:problemSolved'
)
} else if (this.closeQuestionForm.Type === 2) { } else if (this.closeQuestionForm.Type === 2) {
// //
this.closeQuestionForm.Reason = `${this.$t('trials:qcQuality:message:problemNotSolved')}<br/><br/>${this.$t('trials:consistencyCheck:label:closereason')}:${this.closeQuestionForm.Remake}` this.closeQuestionForm.Reason = `${this.$t(
'trials:qcQuality:message:problemNotSolved'
)}<br/><br/>${this.$t('trials:consistencyCheck:label:closereason')}:${
this.closeQuestionForm.Remake
}`
} }
var params = { var params = {
TrialId: this.trialId, TrialId: this.trialId,
QcChallengeId: this.closeQuestionForm.Id, QcChallengeId: this.closeQuestionForm.Id,
SubjectVisitId: this.closeQuestionForm.SubjectVisitId, SubjectVisitId: this.closeQuestionForm.SubjectVisitId,
CloseEnum: this.closeQuestionForm.Type, CloseEnum: this.closeQuestionForm.Type,
CloseReason: this.closeQuestionForm.Reason CloseReason: this.closeQuestionForm.Reason,
} }
closeQCChallenge(params) closeQCChallenge(params)
.then(res => { .then((res) => {
this.closeBtnLoading = false this.closeBtnLoading = false
if (res.IsSuccess) { if (res.IsSuccess) {
this.getList() this.getList()
// ! // !
this.$message.success(this.$t('trials:qcQuality:message:closedSuccessfully')) this.$message.success(
this.$t('trials:qcQuality:message:closedSuccessfully')
)
this.closeQuestionVisible = false this.closeQuestionVisible = false
} }
}).catch(() => { })
.catch(() => {
this.closeBtnLoading = false this.closeBtnLoading = false
}) })
}) })
@ -553,24 +708,22 @@ export default {
}, },
// site // site
getSite() { getSite() {
getTrialSiteSelect(this.trialId).then(res => { getTrialSiteSelect(this.trialId).then((res) => {
this.siteOptions = res.Result this.siteOptions = res.Result
}) })
}, },
// 访 // 访
getVisitPlanOptions() { getVisitPlanOptions() {
getTrialVisitStageSelect(this.trialId) getTrialVisitStageSelect(this.trialId).then((res) => {
.then((res) => { this.visitPlanOptions = res.Result
this.visitPlanOptions = res.Result })
})
}, },
// //
getCreatorOptions() { getCreatorOptions() {
getQCChallengeCreatorList(this.trialId) getQCChallengeCreatorList(this.trialId).then((res) => {
.then((res) => { this.creatorOptions = res.Result
this.creatorOptions = res.Result })
}) },
} },
}
} }
</script> </script>