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> <template>
<!--MFA--> <!--FEEDBACK-->
<el-dialog <div v-if="visible" @click.stop="()=>false">
v-if="visible" <el-dialog
:visible.sync="visible" :visible.sync="visible"
v-dialogDrag v-dialogDrag
width="540px" width="540px"
:close-on-click-modal="false" :close-on-click-modal="false"
append-to-body @close="cancel"
@close="cancel" >
> <div slot="title">
<div slot="title"> {{ title }}
{{ title }} </div>
</div> <!-- 项目详情 -->
<!-- 项目详情 --> <div class="trialsBox">
<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 <el-form
ref="mfaForm"
label-position="right" label-position="right"
:model="form" :model="form"
:inline="true" :rules="rules"
class="trialsForm" 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> <span>2024-06-28 15:00</span>
</el-form-item> </el-form-item>
<el-form-item :label="$t('feedBack:trials:name')"> <!-- 状态 -->
<span>2024-06-28 15:00</span> <el-form-item :label="$t('feedBack:form:status')" prop="screenshot">
</el-form-item> <el-switch
<el-form-item :label="$t('feedBack:trials:siteCode')"> v-model="form.status"
<span>2024-06-28 15:00</span> active-color="#13ce66"
</el-form-item> inactive-color="#ff4949"
<el-form-item :label="$t('feedBack:trials:visit')"> :active-value="true"
<span>2024-06-28 15:00</span> :inactive-value="false"
:active-text="$fd('FeedBackStatus', true)"
:inactive-text="$fd('FeedBackStatus', false)"
>
</el-switch>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> <div slot="footer">
<el-form <!-- 取消 -->
ref="mfaForm" <el-button size="small" @click.stop="cancel">
label-position="right" {{ $t("feedBack:button:cancel") }}
:model="form" </el-button>
:rules="rules" <!-- 保存 -->
label-width="100px" <el-button
> type="primary"
<!-- 影像异常tip --> size="small"
<p class="tip"> @click.stop="save"
<i :loading="loading"
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)"
> >
</el-switch> {{ $t("feedBack:button:save") }}
</el-form-item> </el-button>
</el-form> </div>
<div slot="footer"> </el-dialog>
<!-- 取消 --> </div>
<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>
</template> </template>
<script> <script>
import uploadImage from "./uploadImage.vue"; 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) Vue.use(MFA)
import FB from '@/components/feedBack/index' import FB from '@/components/feedBack/index'
Vue.use(FB) Vue.use(FB)
import FBT from '@/components/feedBackTable/index'
Vue.use(FBT)
import adaptive from '@/directive/adaptive/index' import adaptive from '@/directive/adaptive/index'
// 表格自适应指令 // 表格自适应指令
Vue.use(adaptive) Vue.use(adaptive)

View File

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

View File

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

View File

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