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

uat_us
caiyiling 2024-07-30 16:59:02 +08:00
commit d1f90a2525
8 changed files with 295 additions and 121 deletions

View File

@ -1,109 +1,115 @@
<template>
<!--MFA-->
<el-dialog
v-if="visible"
:visible.sync="visible"
v-dialogDrag
width="540px"
:close-on-click-modal="false"
append-to-body
@close="cancel"
>
<div slot="title">
{{ title }}
</div>
<!-- 项目详情 -->
<div class="trialsBox">
<!--FEEDBACK-->
<div v-if="visible" @click.stop="()=>false">
<el-dialog
:visible.sync="visible"
v-dialogDrag
width="540px"
:close-on-click-modal="false"
@close="cancel"
>
<div slot="title">
{{ title }}
</div>
<!-- 项目详情 -->
<div class="trialsBox">
<el-form
label-position="right"
:model="form"
:inline="true"
class="trialsForm"
>
<el-form-item :label="$t('feedBack:trials:code')">
<span>2024-06-28 15:00</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:name')">
<span>2024-06-28 15:00</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:siteCode')">
<span>2024-06-28 15:00</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:visit')">
<span>2024-06-28 15:00</span>
</el-form-item>
</el-form>
</div>
<el-form
ref="mfaForm"
label-position="right"
:model="form"
:inline="true"
class="trialsForm"
:rules="rules"
label-width="100px"
>
<el-form-item :label="$t('feedBack:trials:code')">
<!-- 影像异常tip -->
<p class="tip">
<i
class="el-icon-warning-outline"
style="color: #f56c6c; font-size: 24px"
></i>
<span> 影像异常导致无法阅片</span>
</p>
<!-- 问题反馈 -->
<el-form-item :label="$t('feedBack:form:feedBack')" prop="feedBack">
<el-select v-model="form.value" style="width: 100%">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<span>影像异常导致无法阅片</span>
</el-form-item>
<!-- 问题描述 -->
<el-form-item
:label="$t('feedBack:form:description')"
prop="description"
>
<el-input v-model="form.Code" type="textarea" :rows="4" />
</el-form-item>
<!-- 截图 -->
<el-form-item :label="$t('feedBack:form:screenshot')" prop="screenshot">
<uploadImage
:path.sync="form.HospitalLogoPath"
:disabled="disabled"
/>
</el-form-item>
<!-- 反馈时间 -->
<el-form-item :label="$t('feedBack:form:time')" prop="screenshot">
<span>2024-06-28 15:00</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:name')">
<span>2024-06-28 15:00</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:siteCode')">
<span>2024-06-28 15:00</span>
</el-form-item>
<el-form-item :label="$t('feedBack:trials:visit')">
<span>2024-06-28 15:00</span>
<!-- 状态 -->
<el-form-item :label="$t('feedBack:form:status')" prop="screenshot">
<el-switch
v-model="form.status"
active-color="#13ce66"
inactive-color="#ff4949"
:active-value="true"
:inactive-value="false"
:active-text="$fd('FeedBackStatus', true)"
:inactive-text="$fd('FeedBackStatus', false)"
>
</el-switch>
</el-form-item>
</el-form>
</div>
<el-form
ref="mfaForm"
label-position="right"
:model="form"
:rules="rules"
label-width="100px"
>
<!-- 影像异常tip -->
<p class="tip">
<i
class="el-icon-warning-outline"
style="color: #f56c6c; font-size: 24px"
></i>
<span> 影像异常导致无法阅片</span>
</p>
<!-- 问题反馈 -->
<el-form-item :label="$t('feedBack:form:feedBack')" prop="feedBack">
<el-select v-model="form.value" style="width: 100%">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<span>影像异常导致无法阅片</span>
</el-form-item>
<!-- 问题描述 -->
<el-form-item :label="$t('feedBack:form:description')" prop="description">
<el-input v-model="form.Code" type="textarea" :rows="4" />
</el-form-item>
<!-- 截图 -->
<el-form-item :label="$t('feedBack:form:screenshot')" prop="screenshot">
<uploadImage :path.sync="form.HospitalLogoPath" :disabled="disabled" />
</el-form-item>
<!-- 反馈时间 -->
<el-form-item :label="$t('feedBack:form:time')" prop="screenshot">
<span>2024-06-28 15:00</span>
</el-form-item>
<!-- 状态 -->
<el-form-item :label="$t('feedBack:form:status')" prop="screenshot">
<el-switch
v-model="form.status"
active-color="#13ce66"
inactive-color="#ff4949"
:active-value="true"
:inactive-value="false"
:active-text="$fd('FeedBackStatus', true)"
:inactive-text="$fd('FeedBackStatus', false)"
<div slot="footer">
<!-- 取消 -->
<el-button size="small" @click.stop="cancel">
{{ $t("feedBack:button:cancel") }}
</el-button>
<!-- 保存 -->
<el-button
type="primary"
size="small"
@click.stop="save"
:loading="loading"
>
</el-switch>
</el-form-item>
</el-form>
<div slot="footer">
<!-- 取消 -->
<el-button size="small" @click.stop="cancel">
{{ $t("feedBack:button:cancel") }}
</el-button>
<!-- 保存 -->
<el-button
type="primary"
size="small"
@click.stop="save"
:loading="loading"
>
{{ $t("feedBack:button:save") }}
</el-button>
</div>
</el-dialog>
{{ $t("feedBack:button:save") }}
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import uploadImage from "./uploadImage.vue";

View File

@ -0,0 +1,23 @@
import Vue from "vue";
import FEEDBACKCOMP from "./index.vue";
const FBConstructor = Vue.extend(FEEDBACKCOMP);
const FBT = options => {
// const { cancelBack } = options;
// if (!UserId) throw `UserId is requred.but ${UserId}`
const id = `FB${new Date().getTime()}`;
const instance = new FBConstructor();
instance.id = id;
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open();
instance.vm.$on("success", (Id) => {
});
instance.vm.$on("closed", () => {
document.body.removeChild(instance.vm.$el);
instance.vm.$destroy();
});
return instance.vm;
}
export default FBT;

View File

@ -0,0 +1,7 @@
import FEEDBACKCOMP from "./index.vue";
import FBT from "./fun";
export default Vue => {
Vue.component(FEEDBACKCOMP.name, FEEDBACKCOMP);
Vue.prototype.$FBT = FBT;
};

View File

@ -0,0 +1,48 @@
<template>
<div v-if="visible" @click.stop="()=>false">
<el-dialog
:visible.sync="visible"
v-dialogDrag
width="1200px"
:close-on-click-modal="false"
@close="cancel"
>
<div slot="title">
{{ title }}
</div>
<feedBackTable />
</el-dialog>
</div>
</template>
<script>
import feedBackTable from "@/views/feedBack/index.vue";
export default {
name: "FBT",
components: { feedBackTable },
data() {
return {
title: null,
visible: false,
};
},
computed: {
disabled() {
return false;
},
},
methods: {
open(data) {
this.visible = true;
},
cancel() {
this.visible = false;
this.$emit("closed");
},
},
};
</script>
<style lang="scss" scoped>
::v-deep .el-dialog__body {
padding-bottom: 0;
}
</style>

View File

@ -62,6 +62,8 @@ import MFA from '@/components/MFA/index'
Vue.use(MFA)
import FB from '@/components/feedBack/index'
Vue.use(FB)
import FBT from '@/components/feedBackTable/index'
Vue.use(FBT)
import adaptive from '@/directive/adaptive/index'
// 表格自适应指令
Vue.use(adaptive)

View File

@ -3,16 +3,39 @@
<div ref="leftContainer" class="left">
<el-form :inline="true">
<!--项目编号/实验名称-->
<el-form-item :label="$t('feedBack:search:trials')">
<el-input v-model="searchData.a" clearable></el-input>
<el-form-item :label="$t('feedBack:search:trials')" v-if="level > 8">
<el-input
v-model="searchData.a"
clearable
style="width: 150px"
></el-input>
</el-form-item>
<!--中心-->
<el-form-item :label="$t('feedBack:search:site')" v-if="level > 7">
<el-input
v-model="searchData.a"
clearable
style="width: 150px"
></el-input>
</el-form-item>
<!--受试者访视-->
<el-form-item :label="$t('feedBack:search:subjectVisit')">
<el-input v-model="searchData.a" clearable></el-input>
<el-form-item
:label="$t('feedBack:search:subjectVisit')"
v-if="level > 7"
>
<el-input
v-model="searchData.a"
clearable
style="width: 150px"
></el-input>
</el-form-item>
<!--角色-->
<el-form-item :label="$t('feedBack:search:role')">
<el-select v-model="searchData.NoticeTypeEnum" clearable size="small">
<el-form-item :label="$t('feedBack:search:role')" v-if="level > 7">
<el-select
v-model="searchData.NoticeTypeEnum"
clearable
style="width: 150px"
>
<el-option
v-for="item of $d.NoteType"
:key="item.value"
@ -22,12 +45,20 @@
</el-select>
</el-form-item>
<!--反馈人-->
<el-form-item :label="$t('feedBack:search:user')">
<el-input v-model="searchData.a" clearable></el-input>
<el-form-item :label="$t('feedBack:search:user')" v-if="level > 7">
<el-input
v-model="searchData.a"
clearable
style="width: 150px"
></el-input>
</el-form-item>
<!--问题类型-->
<el-form-item :label="$t('feedBack:search:questionType')">
<el-select v-model="searchData.NoticeTypeEnum" clearable size="small">
<el-select
v-model="searchData.NoticeTypeEnum"
clearable
style="width: 150px"
>
<el-option
v-for="item of $d.NoteType"
:key="item.value"
@ -38,11 +69,19 @@
</el-form-item>
<!--问题描述-->
<el-form-item :label="$t('feedBack:search:description')">
<el-input v-model="searchData.a" clearable></el-input>
<el-input
v-model="searchData.a"
clearable
style="width: 150px"
></el-input>
</el-form-item>
<!--状态-->
<el-form-item :label="$t('feedBack:search:status')">
<el-select v-model="searchData.NoticeTypeEnum" clearable size="small">
<el-form-item :label="$t('feedBack:search:status')" v-if="level > 7">
<el-select
v-model="searchData.NoticeTypeEnum"
clearable
style="width: 150px"
>
<el-option
v-for="item of $d.NoteType"
:key="item.value"
@ -51,7 +90,7 @@
/>
</el-select>
</el-form-item>
<!--最新接受日期-->
<!--反馈日期-->
<el-form-item :label="$t('feedBack:search:time')">
<el-date-picker
v-model="datetimerange"
@ -61,6 +100,7 @@
:end-placeholder="$t('feedBack:search:endTime')"
value-format="yyyy-MM-dd HH:mm:ss"
@change="handleDatetimeChange"
style="width: 250px"
/>
</el-form-item>
<el-form-item>
@ -80,7 +120,12 @@
>
{{ $t("common:button:reset") }}
</el-button>
<el-button type="primary" size="mini" @click="report">
<el-button
type="primary"
size="mini"
@click="report"
v-if="level > 7"
>
{{ $t("common:button:export") }}
</el-button>
</el-form-item>
@ -89,6 +134,7 @@
size="mini"
@click="resolve"
style="float: right"
v-if="level > 7"
>
{{ $t("feedBack:button:resolve") }}
</el-button>
@ -103,13 +149,20 @@
@sort-change="handleSortByColumn"
:default-sort="{ prop: 'StudyTime', order: 'descending' }"
>
<el-table-column type="selection" align="center" width="45" />
<el-table-column
type="selection"
align="center"
width="45"
v-if="level > 7"
/>
<el-table-column type="index" width="50" />
<el-table-column
:label="$t('feedBack:form:trialCode')"
prop="NoticeLevelEnum"
min-width="120"
show-overflow-tooltip
sortable="custom"
v-if="level > 8"
/>
<el-table-column
:label="$t('feedBack:form:study')"
@ -117,6 +170,7 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 8"
/>
<el-table-column
:label="$t('feedBack:form:siteCode')"
@ -124,6 +178,7 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 7"
/>
<el-table-column
:label="$t('feedBack:form:subjectVisit')"
@ -131,6 +186,7 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 7"
/>
<el-table-column
:label="$t('feedBack:form:role')"
@ -138,6 +194,7 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 7"
/>
<el-table-column
:label="$t('feedBack:form:user')"
@ -145,6 +202,7 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 7"
/>
<el-table-column
:label="$t('feedBack:form:questionType')"
@ -173,6 +231,7 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 7"
/>
<el-table-column
:label="$t('feedBack:form:uploadTime')"
@ -180,16 +239,17 @@
min-width="100"
show-overflow-tooltip
sortable="custom"
v-if="level > 7"
/>
<el-table-column
:label="$t('common:action:action')"
fixed="right"
prop="UserTypeShortName"
min-width="200"
width="80"
show-overflow-tooltip
>
<template slot-scope="scope">
<el-button size="mini" type="text" @click="handleEdit(scope.row)">
<el-button size="mini" type="text" @click="getDetail(scope.row)">
{{ $t("common:button:view") }}
</el-button>
</template>
@ -207,11 +267,6 @@
</div>
</template>
<script>
import {
getSystemNoticeList,
addOrUpdateSystemNotice,
} from "@/api/system/notice";
import { getUserTypeRoleList } from "@/api/admin";
import Pagination from "@/components/Pagination";
const searchDataDefault = () => {
return {
@ -248,6 +303,20 @@ export default {
tableSelectData: [],
};
},
computed: {
level() {
if (this.hasPermi(["role:dev", "role:admin"])) {
return 9;
}
if (this.hasPermi(["role:pm"])) {
return 8;
}
if (this.hasPermi(["role:ir", "role:crc"])) {
return 7;
}
return 0;
},
},
mounted() {},
methods: {
getList() {},
@ -287,6 +356,10 @@ export default {
this.searchData.PageIndex = 1;
this.getList();
},
//
getDetail() {
this.$FB();
},
},
};
</script>

View File

@ -6,14 +6,17 @@
'feedBack-out': show === false,
}"
@click.stop="open"
v-if="isShow"
>
<i class="el-icon-chat-dot-square icon"></i>
<transition name="fade">
<div class="checkBox" v-show="visible" @click.stop="false">
<div class="checkBox" v-show="visible" @click.stop="()=>false">
<span @click.stop="openFeedBack">{{
$t("triials:feedBack:botton:opinion")
}}</span>
<span>{{ $t("triials:feedBack:botton:mine") }}</span>
<span @click.stop="openFeedBackTable">{{
$t("triials:feedBack:botton:mine")
}}</span>
</div>
</transition>
</div>
@ -37,6 +40,14 @@ export default {
}
});
},
computed: {
isShow() {
if (this.hasPermi(["role:ir", "role:crc"])) {
return true;
}
return false;
},
},
methods: {
open() {
if (this.show) {
@ -53,6 +64,10 @@ export default {
},
});
},
//
openFeedBackTable() {
this.$FBT();
},
},
};
</script>

View File

@ -6,7 +6,7 @@
</div>
<trialsMain />
</div>
<!-- <feedBack /> -->
<feedBack />
</div>
</template>