部分页面接口调整、展示字段变更

main
wangxiaoshuang 2024-04-08 15:55:15 +08:00
parent 17da9c23b0
commit e6ec3d3550
12 changed files with 308 additions and 188 deletions

View File

@ -27,7 +27,7 @@ VUE_APP_PASSWORD_FOR_PERMISSION = true
VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
# 是否开启文档签署验证 true:是 false:否
VUE_APP_WORD_FOR_PERMISSION = true
VUE_APP_WORD_FOR_PERMISSION = false
# dicom文件地址
# VUE_APP_DICOM_PATH = 'http://101.132.193.237:7080'

View File

@ -3531,4 +3531,13 @@ export function getTrialInfoHir(id) {
url: `/Patient/getTrialInfo/${id}`,
method: 'get',
})
}
// 修改受试者信息
export function addOrUpdateSubjectHir(data) {
return request({
url: `/Patient/addOrUpdateSubject`,
method: 'post',
data
})
}

View File

@ -46,9 +46,37 @@
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--受试者编号-->
<el-table-column
prop="Code"
:label="$t('trials:uploadMonitor:table:subjectId')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--姓名-->
<el-table-column
prop="ShortName"
:label="$t('trials:researchStaff:table:Name')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--年龄-->
<el-table-column
prop="Age"
:label="$t('trials:subject:table:age')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--性别-->
<el-table-column
prop="Sex"
:label="$t('trials:subject:table:gender')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--申办方-->
<el-table-column
prop="SponsorName"
prop="Sponsor"
:label="$t('trials:trials-list:table:sponsor')"
show-overflow-tooltip
min-width="140"
@ -59,14 +87,28 @@
:label="$t('trials:trials-list:table:status')"
show-overflow-tooltip
min-width="140"
></el-table-column>
<!--访视数-->
<el-table-column
prop="Code"
:label="$t('trials:selftConsistencyAnalysis:table:visitNum')"
show-overflow-tooltip
min-width="140"
></el-table-column>
>
<template slot-scope="scope">
<el-tag
v-if="scope.row.TrialStatusStr === 'Initializing'"
type="info"
>{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
>
<el-tag
v-if="scope.row.TrialStatusStr === 'Ongoing'"
type="primary"
>{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
>
<el-tag
v-if="scope.row.TrialStatusStr === 'Completed'"
type="warning"
>{{ $fd("TrialStatusEnum", scope.row.TrialStatusStr) }}</el-tag
>
<el-tag v-if="scope.row.TrialStatusStr === 'Stopped'" type="danger">{{
$fd("TrialStatusEnum", scope.row.TrialStatusStr)
}}</el-tag>
</template></el-table-column
>
<!--创建日期-->
<el-table-column
prop="CreateTime"
@ -167,7 +209,7 @@ export default {
researchProgramNo: item.ResearchProgramNo,
};
this.$router.push({
path: "/trials/trials-panel/study",
path: "/trials/trials-panel/subject/subject-list",
query,
});
},

View File

@ -77,7 +77,7 @@
<el-row>
<!-- CRO -->
<el-form-item :label="$t('trials:trials-list:form:cro')" prop="Cro">
<el-input v-model="trialForm.Cro" maxlength="200" clearable />
<el-input v-model="trialForm.CRO" maxlength="200" clearable />
</el-form-item>
<!-- 药物/器械名称 -->
<el-form-item :label="$t('trials:trials-list:message:D/Dname')">
@ -235,7 +235,7 @@ export default {
ResearchProgramNo: "",
ExperimentName: "",
HeadPI: "",
Cro: "",
CRO: "",
Sponsor: "",
MedicineName: "",
PhaseId: "",

View File

@ -58,7 +58,7 @@
{{ $t("common:button:reset") }}
</el-button>
<!-- Export -->
<el-button
<!-- <el-button
v-hasPermi="['trials:trials-list:export']"
type="primary"
icon="el-icon-download"
@ -66,7 +66,7 @@
@click="handleExportTrial"
>
{{ $t("common:button:export") }}
</el-button>
</el-button> -->
</el-form-item>
</el-form>
<span style="margin-left: auto">
@ -100,11 +100,7 @@
show-overflow-tooltip
>
<template slot-scope="scope">
<template v-for="item of $d.TrialType">
<span :key="item.id" v-if="scope.row.TrialType === item.value">{{
item.label
}}</span>
</template>
<span>{{ $fd("TrialType", scope.row.TrialType) }}</span>
</template>
</el-table-column>
<el-table-column
@ -404,7 +400,6 @@ export default {
},
created() {
this.initPage();
console.log(this.$d.TrialType);
},
methods: {
initPage() {

View File

@ -265,7 +265,7 @@ export default {
Object.keys(this.searchData).forEach((key) => {
data[key] = this.searchData[key];
});
data.PatientId = this.data.PatientList[0].PatientId;
data.PatientIdList = this.data.PatientList.map((item) => item.PatientId);
data.SujectVisitId = this.data.SubjectVisitId;
if (this.dateValue[0] && this.dateValue[1]) {
data.EarliestStudyTime = this.dateValue[0].toISOString();

View File

@ -141,7 +141,11 @@
prop="SubjectSex"
:label="$t('trials:subject:table:gender')"
show-overflow-tooltip
/>
>
<template slot-scope="scope">
<span>{{ $fd("sex", Number(scope.row.SubjectSex)) }}</span>
</template>
</el-table-column>
<!-- 访视名称 -->
<el-table-column
prop="VisitName"

View File

@ -1,62 +1,76 @@
<template>
<el-container class="participant-container">
<el-header style="height:50px">
<el-header style="height: 50px">
<div class="filter-container">
<!-- 姓名 -->
<span>{{ $t('trials:staff:table:name') }}:</span>
<el-input v-model="listQuery.UserRealName" size="mini" class="mr" clearable />
<span>{{ $t("trials:staff:table:name") }}:</span>
<el-input
v-model="listQuery.UserRealName"
size="mini"
class="mr"
clearable
/>
<!-- 用户名 -->
<span>{{ $t('trials:staff:table:uid') }}:</span>
<el-input v-model="listQuery.UserName" size="mini" class="mr" clearable />
<span>{{ $t("trials:staff:table:uid") }}:</span>
<el-input
v-model="listQuery.UserName"
size="mini"
class="mr"
clearable
/>
<!-- 单位 -->
<span>{{ $t('trials:staff:table:organization') }}:</span>
<el-input v-model="listQuery.OrganizationName" size="mini" class="mr" clearable />
<span>{{ $t("trials:staff:table:organization") }}:</span>
<el-input
v-model="listQuery.OrganizationName"
size="mini"
class="mr"
clearable
/>
<!-- 用户类型 -->
<span>{{ $t('trials:staff:table:userType') }}:</span>
<el-select v-model="listQuery.UserTypeEnum" size="mini" clearable class="mr">
<template v-if="hasPermi(['role:ta'])">
<el-option
v-for="item of $d.UserType"
v-show="item.value === 4"
:key="`UserType${item.value}`"
:label="item.label"
:value="item.value"
>
{{ item.label }}
</el-option>
</template>
<template v-if="hasPermi(['role:pm'])">
<el-option
v-for="item of $d.UserType"
v-show="(!qCProcessEnum && (item.value === 11 || item.value === 12)) || (qCProcessEnum && (item.value === 11 || item.value === 7 || item.value === 12))"
:key="`UserType${item.value}`"
:label="item.label"
:value="item.value"
>
{{ item.label }}
</el-option>
</template>
<!-- <el-option
v-for="item of userTypeOptions"
<span>{{ $t("trials:staff:table:userType") }}:</span>
<el-select
v-model="listQuery.UserTypeEnum"
size="mini"
clearable
class="mr"
>
<el-option
v-for="item in userTypeOptions"
:key="item.Id"
:label="item.UserTypeShortName"
:value="item.UserTypeEnum"
:value="item.Id"
>
<span>{{ item.UserType }}</span>
</el-option> -->
</el-option>
</el-select>
<!-- 查询 -->
<el-button type="primary" size="mini" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
<el-button
type="primary"
size="mini"
icon="el-icon-search"
@click="handleSearch"
>
{{ $t("common:button:search") }}
</el-button>
<!-- 重置 -->
<el-button size="mini" type="primary" icon="el-icon-refresh-left" @click="handleReset">
{{ $t('common:button:reset') }}
<el-button
size="mini"
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t("common:button:reset") }}
</el-button>
<el-button type="primary" size="mini" style="margin-left:auto" :disabled="selectArr.length === 0" :loading="assignLoadStatus" icon="el-icon-plus" @click="handleAssign">
{{ $t('common:button:add') }}
<el-button
type="primary"
size="mini"
style="margin-left: auto"
:disabled="selectArr.length === 0"
:loading="assignLoadStatus"
icon="el-icon-plus"
@click="handleAssign"
>
{{ $t("common:button:add") }}
</el-button>
</div>
</el-header>
@ -124,28 +138,36 @@
sortable="custom"
min-width="100"
/>
</el-table>
</div>
</el-main>
<div class="pagination" style="text-align: right;margin-top:5px;">
<pagination :total="total" :page.sync="listQuery.PageIndex" :limit.sync="listQuery.PageSize" @pagination="getList" />
<div class="pagination" style="text-align: right; margin-top: 5px">
<pagination
:total="total"
:page.sync="listQuery.PageIndex"
:limit.sync="listQuery.PageSize"
@pagination="getList"
/>
</div>
</el-container>
</template>
<script>
import { getTrialUserScreeningList, addTrialUsers, getUserTypeList } from '@/api/trials'
import Pagination from '@/components/Pagination'
import {
getTrialUserScreeningList,
addTrialUsers,
getUserTypeList,
} from "@/api/trials";
import Pagination from "@/components/Pagination";
const getListQueryDefault = () => {
return {
UserRealName: '',
UserName: '',
OrganizationName: '',
UserTypeEnum: '',
UserRealName: "",
UserName: "",
OrganizationName: "",
UserTypeEnum: "",
PageIndex: 1,
PageSize: 20
}
}
PageSize: 20,
};
};
export default {
components: { Pagination },
data() {
@ -155,115 +177,121 @@ export default {
listQuery: getListQueryDefault(),
selectArr: [],
assignLoadStatus: false,
isAdmin: JSON.parse(zzSessionStorage.getItem('IsAdmin')),
isAdmin: JSON.parse(zzSessionStorage.getItem("IsAdmin")),
userTypeOptions: [],
trialId: '',
qCProcessEnum: null
}
trialId: "",
qCProcessEnum: null,
};
},
mounted() {
this.trialId = this.$route.query.trialId
this.getUserType()
this.getList()
this.trialId = this.$route.query.trialId;
this.getUserType();
this.getList();
},
methods: {
getList() {
const loading = this.$loading({
target: document.querySelector('.participant-container'),
target: document.querySelector(".participant-container"),
fullscreen: false,
lock: true
})
this.listQuery.TrialId = this.trialId
getTrialUserScreeningList(this.listQuery).then(res => {
loading.close()
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
this.qCProcessEnum = res.OtherInfo.QCProcessEnum
}).catch(() => { loading.close() })
lock: true,
});
this.listQuery.TrialId = this.trialId;
getTrialUserScreeningList(this.listQuery)
.then((res) => {
loading.close();
this.list = res.Result.CurrentPageData;
this.total = res.Result.TotalCount;
this.qCProcessEnum = res.OtherInfo.QCProcessEnum;
})
.catch(() => {
loading.close();
});
},
handleAssign() {
this.$confirm(this.$t('trials:staff:message:addStaff'), {
type: 'warning',
distinguishCancelAndClose: true
})
.then(() => {
const loading = this.$loading({
target: document.querySelector('.participant-container'),
fullscreen: false,
lock: true
this.$confirm(this.$t("trials:staff:message:addStaff"), {
type: "warning",
distinguishCancelAndClose: true,
}).then(() => {
const loading = this.$loading({
target: document.querySelector(".participant-container"),
fullscreen: false,
lock: true,
});
this.assignLoadStatus = true;
addTrialUsers(this.selectArr)
.then((res) => {
this.assignLoadStatus = false;
loading.close();
if (res.IsSuccess) {
this.$emit("closeDialog");
this.$message.success(
this.$t("common:message:addedSuccessfully")
);
}
})
this.assignLoadStatus = true
addTrialUsers(this.selectArr)
.then(res => {
this.assignLoadStatus = false
loading.close()
if (res.IsSuccess) {
this.$emit('closeDialog')
this.$message.success(this.$t('common:message:addedSuccessfully'))
}
}).catch(() => {
loading.close()
this.assignLoadStatus = false
})
})
.catch(() => {
loading.close();
this.assignLoadStatus = false;
});
});
},
handleSearch() {
this.listQuery.PageIndex = 1
this.getList()
this.listQuery.PageIndex = 1;
this.getList();
},
handleReset() {
this.listQuery = getListQueryDefault()
this.getList()
this.listQuery = getListQueryDefault();
this.getList();
},
handleSelectChange(val) {
this.selectArr = val
this.selectArr = val;
},
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();
},
handleSelectable(row) {
if (!row.IsSelect) {
return true
return true;
} else {
return false
return false;
}
},
getUserType() {
getUserTypeList(2).then(res => {
this.userTypeOptions = res.Result
})
}
}
}
getUserTypeList(2).then((res) => {
this.userTypeOptions = res.Result;
});
},
},
};
</script>
<style lang="scss" scoped>
.participant-container{
.participant-container {
height: 100%;
.el-header{
.filter-container{
.el-header {
.filter-container {
display: flex;
align-items: center;
span{
font-size:13px;
margin-right:5px;
span {
font-size: 13px;
margin-right: 5px;
}
.mr{
.mr {
margin-right: 5px;
width: 120px;
}
}
}
.el-main{
.el-main {
padding: 0px;
}
.el-footer{
.el-footer {
padding: 0 20px;
}
}

View File

@ -1,6 +1,6 @@
<template>
<div class="personnel-container">
<el-collapse v-model="activeNames" class="personnel-manage">
<el-collapse class="personnel-manage">
<!-- 人员 -->
<Staff ref="staffList" />
<!-- <el-collapse-item :title="$t('trials:staff:title:staff')" name="Staff">

View File

@ -146,7 +146,11 @@
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
>
<template slot-scope="scope">
<span>{{ $fd("sex", Number(scope.row.SubjectSex)) }}</span>
</template>
</el-table-column>
<!-- 申请号 -->
<!-- <el-table-column
prop="StudyCode"
@ -170,6 +174,7 @@
show-overflow-tooltip
sortable="custom"
min-width="100"
v-if="activeName === 'submit'"
/>
<!-- 检查日期 -->
<el-table-column
@ -194,7 +199,19 @@
show-overflow-tooltip
sortable="custom"
min-width="100"
/>
>
<template slot-scope="scope">
<el-tag v-if="scope.row.SubmitState * 1 === 0" type="warning">{{
$fd("SubmitState", scope.row.SubmitState * 1)
}}</el-tag>
<el-tag v-else-if="scope.row.SubmitState * 1 === 1" type="danger">{{
$fd("SubmitState", scope.row.SubmitState * 1)
}}</el-tag>
<el-tag v-else-if="scope.row.SubmitState * 1 === 2">{{
$fd("SubmitState", scope.row.SubmitState * 1)
}}</el-tag>
</template>
</el-table-column>
<el-table-column
:label="$t('common:action:action')"
min-width="100"

View File

@ -8,17 +8,42 @@
label-width="100px"
>
<div class="base-dialog-body">
<!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="form.PatientId" disabled />
</el-form-item>
<!-- 受试者编号 -->
<el-form-item :label="$t('trials:subject:table:subjectId')" prop="Code">
<el-input v-model="form.Code" />
</el-form-item>
<!-- 患者编号 -->
<el-form-item :label="$t('trials:uploadDicomList:table:pId')">
<el-input v-model="form.Code" disabled />
</el-form-item>
<!-- 患者姓名 -->
<!-- 姓名 -->
<el-form-item :label="$t('trials:uploadDicomList:table:patientName')">
<el-input v-model="form.Code" disabled />
<el-input v-model="form.ShortName" />
</el-form-item>
<!-- 年龄 -->
<el-form-item :label="$t('trials:subject:table:age')">
<el-input v-model="form.Age" type="number" />
</el-form-item>
<!-- 性别 -->
<el-form-item :label="$t('trials:subject:table:gender')">
<el-select v-model="form.Sex" clearable filterable style="width: 100%">
<el-option
v-for="item of $d.sex"
:key="item.id"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<!-- 出生日期 -->
<el-form-item :label="$t('trials:inspection:table:birthdate')">
<el-date-picker
v-model="form.BirthDate"
type="date"
placeholder="选择日期"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
</div>
<div class="base-dialog-footer" style="text-align: right; margin-top: 10px">
@ -46,7 +71,7 @@
</el-form>
</template>
<script>
import { getTrialSiteSelect, addOrUpdateSubject } from "@/api/trials";
import { addOrUpdateSubjectHir } from "@/api/trials";
export default {
name: "SubjectForm",
props: {
@ -67,24 +92,15 @@ export default {
data() {
return {
form: {
Id: "",
Code: "",
ShortName: "",
Height: "",
Weight: "",
Age: "",
Sex: "",
BirthDate: "",
SiteId: "",
MedicalNo: "",
Status: 1,
FirstGiveMedicineTime: "",
OutEnrollmentTime: "",
VisitOverTime: "",
Reason: "",
StudyCount: "",
SignDate: "",
IsUrgent: false,
PatientList: [],
PatientId: "",
TrialId: "",
Id: "",
Age: null,
Sex: null,
BirthDate: null,
},
rules: {
Code: [
@ -113,10 +129,6 @@ export default {
},
methods: {
async initForm() {
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)) {
@ -125,12 +137,26 @@ export default {
}
}
this.form.TrialId = this.trialId;
this.form.PatientList.forEach((item, index) => {
if (index === this.form.PatientList.length - 1) {
this.form.PatientId += `${item.PatientIdStr}`;
} else {
this.form.PatientId += `${item.PatientIdStr}, `;
}
});
},
handleSave() {
this.$refs.subjectForm.validate((valid) => {
if (!valid) return;
this.btnLoading = true;
addOrUpdateSubject(this.form)
let data = {};
Object.keys(this.form).forEach((key) => {
data[key] = this.form[key];
});
data.BirthDate = data.BirthDate.toISOString();
delete data.PatientId;
delete data.PatientList;
addOrUpdateSubjectHir(data)
.then((res) => {
this.btnLoading = false;
this.$emit("getList");
@ -145,11 +171,6 @@ export default {
handleCancel() {
this.$emit("close");
},
getSite() {
getTrialSiteSelect(this.trialId).then((res) => {
this.siteList = res.Result;
});
},
},
};
</script>

View File

@ -60,13 +60,13 @@
{{ $t("common:button:reset") }}
</el-button>
<!--导出-->
<el-button
<!-- <el-button
type="primary"
icon="el-icon-download"
@click="handleExport"
>
{{ $t("common:button:export") }}
</el-button>
</el-button> -->
</el-form-item>
</el-form>
<span style="margin-left: auto">
@ -133,7 +133,11 @@
:label="$t('trials:trials-myinfo:form:gender')"
show-overflow-tooltip
sortable="custom"
/>
>
<template slot-scope="scope">
<span>{{ $fd("sex", Number(scope.row.Sex)) }}</span>
</template>
</el-table-column>
<!-- 出生日期 -->
<el-table-column
prop="BirthDate"
@ -207,13 +211,13 @@
@click="handleEdit(scope.row)"
/>
<!-- 修改状态 -->
<el-button
<!-- <el-button
v-hasPermi="['trials:trials-panel:subject:status']"
circle
:title="$t('trials:subject:action:status')"
icon="el-icon-edit"
@click="handleEditStatus(scope.row)"
/>
/> -->
<!-- 删除 -->
<el-button
v-hasPermi="['trials:trials-panel:subject:delete']"
@ -243,7 +247,7 @@
:visible.sync="editDialog.visible"
:close-on-click-modal="false"
:title="editDialog.title"
width="700px"
width="500px"
custom-class="base-dialog-wrapper"
>
<SubjectsForm