项目授权
parent
ab1fc82142
commit
e8849ba6a5
|
@ -3556,4 +3556,22 @@ export function getSystemConfirmedCreiterionList() {
|
|||
url: `/Patient/getSystemConfirmedCreiterionList`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获取项目授权码
|
||||
export function getTrialAuthorizationCode(params) {
|
||||
return request({
|
||||
url: `/Patient/getTrialAuthorizationCode`,
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
// 设置项目授权信息
|
||||
export function activateTrial(params) {
|
||||
return request({
|
||||
url: `/Patient/activateTrial`,
|
||||
method: 'put',
|
||||
params
|
||||
})
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:title="fileData.name"
|
||||
:fullscreen="true"
|
||||
append-to-body
|
||||
custom-class="base-dialog-wrapper"
|
||||
>
|
||||
<div class="base-modal-body" style="border: 2px solid #ccc; padding: 10px">
|
||||
<PreviewFile
|
||||
v-if="visible"
|
||||
:file-path="fileData.path"
|
||||
:file-type="fileData.name"
|
||||
/>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import PreviewFile from "@/components/PreviewFile/index";
|
||||
export default {
|
||||
name: "PreviewFileDialog",
|
||||
components: { PreviewFile },
|
||||
props: {
|
||||
fileData: {
|
||||
required: true,
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
visible: {
|
||||
required: true,
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -1,7 +1,7 @@
|
|||
// eslint-disable-next-line no-undef
|
||||
module.exports = {
|
||||
|
||||
title: 'HIRIS',
|
||||
title: 'HIRS',
|
||||
|
||||
/**
|
||||
* @type {boolean} true | false
|
||||
|
|
|
@ -61,8 +61,8 @@
|
|||
>
|
||||
<el-switch
|
||||
v-model="user.Status"
|
||||
:active-value="0"
|
||||
:inactive-value="1"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
/>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="IsTestUser:">
|
||||
|
@ -348,6 +348,7 @@ export default {
|
|||
getUserInfo() {
|
||||
getUser(this.userId).then((res) => {
|
||||
this.user = res.Result;
|
||||
this.user.Status = parseFloat(this.user.Status);
|
||||
});
|
||||
},
|
||||
OrgnizationTypeChanged(val) {
|
||||
|
|
|
@ -153,15 +153,6 @@ export default {
|
|||
sortable: "custom",
|
||||
showOverflowTooltip: true,
|
||||
},
|
||||
{
|
||||
prop: "IsTestUser",
|
||||
label: this.$t("system:userlist:table:IsTestUser"),
|
||||
hidden: true,
|
||||
slot: "isTestUserSlot",
|
||||
minWidth: 120,
|
||||
sortable: "custom",
|
||||
showOverflowTooltip: true,
|
||||
},
|
||||
{
|
||||
prop: "Status",
|
||||
label: this.$t("system:userlist:table:Status"),
|
||||
|
@ -241,25 +232,6 @@ export default {
|
|||
change: (scope) => "",
|
||||
placeholder: "",
|
||||
},
|
||||
{
|
||||
type: "Select",
|
||||
label: this.$t("system:userlist:label:IsTestUser"),
|
||||
prop: "IsTestUser",
|
||||
width: "100px",
|
||||
options: [
|
||||
{
|
||||
label: this.$t("system:userlist:label:IsTestUser:Yes"),
|
||||
value: true,
|
||||
},
|
||||
{
|
||||
label: this.$t("system:userlist:label:IsTestUser:No"),
|
||||
value: false,
|
||||
},
|
||||
],
|
||||
props: { label: "label", value: "value" },
|
||||
change: (scope) => "",
|
||||
placeholder: "",
|
||||
},
|
||||
{
|
||||
type: "Select",
|
||||
label: this.$t("system:userlist:label:Status"),
|
||||
|
|
|
@ -0,0 +1,185 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:close-on-click-modal="false"
|
||||
:title="$t('trials:trials-list:action:activateProject')"
|
||||
width="500px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form
|
||||
ref="activateProjectForm"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
size="small"
|
||||
label-width="100px"
|
||||
>
|
||||
<div class="base-dialog-body">
|
||||
<!-- 项目编号 -->
|
||||
<el-form-item :label="$t('trials:trials-list:table:trialId')">
|
||||
<span>{{ data.TrialCode }}</span>
|
||||
</el-form-item>
|
||||
<!-- 授权码 -->
|
||||
<el-form-item :label="$t('trials:trials-list:form:authorizationCode')">
|
||||
<p v-if="form.Authorization" class="AuthorizationBox">
|
||||
<span class="Authorization" :title="form.Authorization">{{
|
||||
form.Authorization
|
||||
}}</span>
|
||||
<span class="copy" @click.stop="copy">{{
|
||||
$t("trials:trials-list:action:copy")
|
||||
}}</span>
|
||||
</p>
|
||||
</el-form-item>
|
||||
<!-- 激活码 -->
|
||||
<el-form-item
|
||||
:label="$t('trials:trials-list:form:activateCode')"
|
||||
prop="Activate"
|
||||
>
|
||||
<el-input v-model="form.Activate" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div
|
||||
class="base-dialog-footer"
|
||||
style="text-align: right; margin-top: 10px"
|
||||
>
|
||||
<el-form-item>
|
||||
<!-- 取消 -->
|
||||
<el-button
|
||||
:disabled="btnLoading"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleCancel"
|
||||
>
|
||||
{{ $t("common:button:cancel") }}
|
||||
</el-button>
|
||||
<!-- 保存 -->
|
||||
<el-button
|
||||
size="small"
|
||||
type="primary"
|
||||
:loading="btnLoading"
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ $t("trials:trials-list:action:activate") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script>
|
||||
import { getTrialAuthorizationCode, activateTrial } from "@/api/trials.js";
|
||||
export default {
|
||||
name: "activateProject",
|
||||
props: {
|
||||
data: {
|
||||
required: true,
|
||||
default: () => {
|
||||
return {};
|
||||
},
|
||||
},
|
||||
visible: {
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
Authorization: null, // 授权码
|
||||
Activate: null, // 激活码
|
||||
},
|
||||
btnLoading: false,
|
||||
rules: {
|
||||
Activate: [
|
||||
{
|
||||
required: true,
|
||||
message: this.$t("common:ruleMessage:specify"),
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getTrialAuthorizationCode();
|
||||
},
|
||||
methods: {
|
||||
handleCancel() {
|
||||
this.$emit("update:visible", false);
|
||||
},
|
||||
// 激活
|
||||
async handleSave() {
|
||||
try {
|
||||
let validate = this.$refs.activateProjectForm.validate();
|
||||
if (!validate) return;
|
||||
let params = {
|
||||
TrialId: this.data.TrialId,
|
||||
ActivationCode: this.form.Activate,
|
||||
};
|
||||
this.btnLoading = true;
|
||||
let res = await activateTrial(params);
|
||||
this.btnLoading = false;
|
||||
if (res.IsSuccess) {
|
||||
this.$message.success(
|
||||
this.$t("trials:trials-list:action:activateSuccessfully")
|
||||
);
|
||||
this.$emit("getList");
|
||||
this.handleCancel();
|
||||
}
|
||||
} catch (err) {
|
||||
this.btnLoading = false;
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
// 复制
|
||||
copy() {
|
||||
this.$copyText(this.form.Authorization)
|
||||
.then((res) => {
|
||||
// 复制成功
|
||||
this.$message.success(
|
||||
this.$t("trials:researchRecord:message:copySuccessfully")
|
||||
);
|
||||
})
|
||||
.catch(() => {
|
||||
// 复制失败
|
||||
this.$alert(this.$t("trials:researchRecord:message:copyFailed"));
|
||||
});
|
||||
},
|
||||
// 获取激活码
|
||||
async getTrialAuthorizationCode() {
|
||||
let params = {
|
||||
TrialId: this.data.TrialId,
|
||||
};
|
||||
try {
|
||||
let res = await getTrialAuthorizationCode(params);
|
||||
if (res.IsSuccess) {
|
||||
this.form.Authorization = res.Result;
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
::v-deep .el-dialog__body {
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.Authorization {
|
||||
width: 70%;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.copy {
|
||||
cursor: pointer;
|
||||
color: #409eff;
|
||||
}
|
||||
.AuthorizationBox {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
|
@ -100,8 +100,16 @@
|
|||
height="100"
|
||||
@sort-change="handleSortChange"
|
||||
>
|
||||
<el-table-column type="selection" align="left" width="45" />
|
||||
<el-table-column type="index" width="40" align="left" />
|
||||
<!-- <el-table-column type="selection" align="left" width="45" /> -->
|
||||
<el-table-column width="40">
|
||||
<template slot-scope="scope">
|
||||
<i
|
||||
class="el-icon-warning-outline"
|
||||
:title="$t('trials:trials-list:tipMessage:tipOne')"
|
||||
style="color: red; font-size: 20px"
|
||||
></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="trialType"
|
||||
:label="$t('trials:trials-list:form:trialType')"
|
||||
|
@ -188,7 +196,7 @@
|
|||
<template slot-scope="scope">
|
||||
<span>{{
|
||||
scope.row.AuthorizationDate
|
||||
? scope.row.AuthorizationDate.split(" ")[0]
|
||||
? moment(scope.row.AuthorizationDate)
|
||||
: ""
|
||||
}}</span>
|
||||
</template>
|
||||
|
@ -202,6 +210,13 @@
|
|||
/>
|
||||
<el-table-column label="" min-width="150" align="left" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<!-- 激活 -->
|
||||
<el-button
|
||||
circle
|
||||
icon="el-icon-key"
|
||||
:title="$t('trials:trials-list:action:activate')"
|
||||
@click="handleActivate(scope.row)"
|
||||
/>
|
||||
<!-- 详情 -->
|
||||
<el-button
|
||||
v-hasPermi="['trials:trials-list:panel']"
|
||||
|
@ -292,7 +307,7 @@
|
|||
>
|
||||
<TrialStatusForm
|
||||
:data="currentRow"
|
||||
@closeDialog="closeStatusDialog"
|
||||
@close="closeStatusDialog"
|
||||
@getList="getList"
|
||||
/>
|
||||
</el-dialog>
|
||||
|
@ -311,16 +326,17 @@
|
|||
@closeDialog="doneDialogVisible = false"
|
||||
/>
|
||||
</el-dialog>
|
||||
<!--项目激活-->
|
||||
<activateProject
|
||||
v-if="activateVisible"
|
||||
:visible.sync="activateVisible"
|
||||
:data="currentRow"
|
||||
@getList="getList"
|
||||
/>
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
abandonTrial,
|
||||
ifTrialCanOngoing,
|
||||
getTrialToBeDoneList,
|
||||
getTrialListHir,
|
||||
} from "@/api/trials";
|
||||
import store from "@/store";
|
||||
import { abandonTrial, getTrialListHir } from "@/api/trials";
|
||||
import { mapGetters } from "vuex";
|
||||
import Excel from "exceljs";
|
||||
import BaseContainer from "@/components/BaseContainer";
|
||||
|
@ -328,6 +344,8 @@ import Pagination from "@/components/Pagination";
|
|||
import TrialForm from "./components/TrialForm";
|
||||
import TrialStatusForm from "./components/TrialStatusForm";
|
||||
import DoneList from "./components/DoneList";
|
||||
import activateProject from "./components/activate-project.vue";
|
||||
import moment from "moment";
|
||||
const searchDataDefault = () => {
|
||||
return {
|
||||
Code: "",
|
||||
|
@ -361,6 +379,7 @@ export default {
|
|||
TrialForm,
|
||||
TrialStatusForm,
|
||||
DoneList,
|
||||
activateProject,
|
||||
},
|
||||
dicts: ["ReadingStandard", "ReviewType", "ReadingType"],
|
||||
data() {
|
||||
|
@ -407,6 +426,8 @@ export default {
|
|||
}
|
||||
},
|
||||
},
|
||||
// 项目激活
|
||||
activateVisible: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
|
@ -416,6 +437,28 @@ export default {
|
|||
this.initPage();
|
||||
},
|
||||
methods: {
|
||||
// 格式化时间
|
||||
moment(data) {
|
||||
return moment(data).format("YYYY-MM-DD");
|
||||
},
|
||||
// 项目过期判断
|
||||
trialExpired(data, isBefore = false) {
|
||||
// 不足15天判断
|
||||
if (
|
||||
isBefore &&
|
||||
moment(data).isAfter(
|
||||
moment(visit.VisitMaxStudyTime)
|
||||
.add(15, "day")
|
||||
.format("YYYY-MM-DD HH:mm:ss")
|
||||
)
|
||||
) {
|
||||
}
|
||||
},
|
||||
// 打开激活弹框
|
||||
handleActivate(item) {
|
||||
this.currentRow = item;
|
||||
this.activateVisible = true;
|
||||
},
|
||||
initPage() {
|
||||
this.getList();
|
||||
// store.dispatch("global/getSponsorList");
|
||||
|
@ -496,6 +539,7 @@ export default {
|
|||
},
|
||||
closeStatusDialog() {
|
||||
this.statusVisible = false;
|
||||
this.activateVisible = false;
|
||||
},
|
||||
// 废除
|
||||
handleAbandon(row) {
|
||||
|
|
|
@ -279,11 +279,10 @@
|
|||
$t("trials:trials-panel:hirVisit:ImageData")
|
||||
}}</el-dropdown-item
|
||||
> -->
|
||||
<!--评估报告-->
|
||||
<!--评估报告disabled-->
|
||||
<el-dropdown-item
|
||||
v-hasPermi="['trials:trials-panel:hirVisit:result']"
|
||||
disabled
|
||||
command="result"
|
||||
command="showReport"
|
||||
>{{
|
||||
$t("trials:trials-panel:hirVisit:EvaluationReport")
|
||||
}}</el-dropdown-item
|
||||
|
@ -328,6 +327,11 @@
|
|||
:visible.sync="visitVisible"
|
||||
:rowData="rowData"
|
||||
/>
|
||||
<!--评估报告-->
|
||||
<PreviewFileDialog
|
||||
:visible.sync="previewFileVisible"
|
||||
:fileData="fileData"
|
||||
/>
|
||||
</BaseContainer>
|
||||
</template>
|
||||
<script>
|
||||
|
@ -335,6 +339,7 @@ import BaseContainer from "@/components/BaseContainer";
|
|||
import Pagination from "@/components/Pagination";
|
||||
import editStudyList from "./components/edit-study-list.vue";
|
||||
import visitInfo from "./components/visit-info.vue";
|
||||
import PreviewFileDialog from "@/components/PreviewFileDialog/PreviewFileDialog.vue";
|
||||
import { deleteSubjectVisit } from "@/api/trials";
|
||||
import { getPatientSubejctVisitList } from "@/api/trials/visit.js";
|
||||
import { submitVisitStudyBinding } from "@/api/inspection.js";
|
||||
|
@ -358,7 +363,13 @@ const defaultSearchData = () => {
|
|||
};
|
||||
export default {
|
||||
name: "hirVisit",
|
||||
components: { BaseContainer, Pagination, editStudyList, visitInfo },
|
||||
components: {
|
||||
BaseContainer,
|
||||
Pagination,
|
||||
editStudyList,
|
||||
visitInfo,
|
||||
PreviewFileDialog,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 查询
|
||||
|
@ -375,6 +386,9 @@ export default {
|
|||
// 访视详情
|
||||
visitVisible: false,
|
||||
rowData: {},
|
||||
// 评估报告
|
||||
previewFileVisible: false,
|
||||
fileData: {},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
|
@ -506,6 +520,15 @@ export default {
|
|||
async downloadImage(item) {
|
||||
downloadImage(item.SubjectId);
|
||||
},
|
||||
// 评估报告
|
||||
showReport(item) {
|
||||
this.fileData = item;
|
||||
// this.fileData = {
|
||||
// path: "/System/DocumentToSign/1709623358162_测试pdf111.pdf1709623358161",
|
||||
// name: "111111111111111111.pdf",
|
||||
// };
|
||||
this.previewFileVisible = true;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -13,7 +13,7 @@ function resolve(dir) {
|
|||
return path.join(__dirname, dir)
|
||||
}
|
||||
|
||||
const name = defaultSettings.title || 'HIRIS' // page title
|
||||
const name = defaultSettings.title || 'HIRS' // page title
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
module.exports = {
|
||||
|
|
Loading…
Reference in New Issue