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,12 +1,11 @@
<template> <template>
<!--MFA--> <!--FEEDBACK-->
<div v-if="visible" @click.stop="()=>false">
<el-dialog <el-dialog
v-if="visible"
: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">
@ -63,12 +62,18 @@
<span>影像异常导致无法阅片</span> <span>影像异常导致无法阅片</span>
</el-form-item> </el-form-item>
<!-- 问题描述 --> <!-- 问题描述 -->
<el-form-item :label="$t('feedBack:form:description')" prop="description"> <el-form-item
:label="$t('feedBack:form:description')"
prop="description"
>
<el-input v-model="form.Code" type="textarea" :rows="4" /> <el-input v-model="form.Code" type="textarea" :rows="4" />
</el-form-item> </el-form-item>
<!-- 截图 --> <!-- 截图 -->
<el-form-item :label="$t('feedBack:form:screenshot')" prop="screenshot"> <el-form-item :label="$t('feedBack:form:screenshot')" prop="screenshot">
<uploadImage :path.sync="form.HospitalLogoPath" :disabled="disabled" /> <uploadImage
:path.sync="form.HospitalLogoPath"
:disabled="disabled"
/>
</el-form-item> </el-form-item>
<!-- 反馈时间 --> <!-- 反馈时间 -->
<el-form-item :label="$t('feedBack:form:time')" prop="screenshot"> <el-form-item :label="$t('feedBack:form:time')" prop="screenshot">
@ -104,6 +109,7 @@
</el-button> </el-button>
</div> </div>
</el-dialog> </el-dialog>
</div>
</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>