23 Commits

Author SHA1 Message Date
wangxiaoshuang dba4466ac2 国际化修改
continuous-integration/drone/push Build is passing
2025-01-24 16:27:39 +08:00
wangxiaoshuang 9187bbe64f 阅片人简历预览水印
continuous-integration/drone/push Build is passing
2025-01-24 13:27:47 +08:00
caiyiling a0f593a22f Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-01-24 10:05:07 +08:00
caiyiling 89f7aee973 管理后台按钮调整及医学审核文本超长处理 2025-01-24 10:04:25 +08:00
wangxiaoshuang ced57cbfe4 logo显示有误
continuous-integration/drone/push Build is running
2025-01-24 10:01:17 +08:00
wangxiaoshuang 99d099496e 1
continuous-integration/drone/push Build is passing
2025-01-23 18:41:10 +08:00
caiyiling d3afa7b676 中心列表添加快捷跳转入口
continuous-integration/drone/push Build is passing
2025-01-23 18:18:29 +08:00
wangxiaoshuang c08d701143 重复新增角色弹框未清空
continuous-integration/drone/push Build is passing
2025-01-23 14:13:01 +08:00
caiyiling a2d06ba72f 多帧关键序列更改
continuous-integration/drone/push Build is passing
2025-01-23 10:21:51 +08:00
caiyiling 148aa4908b Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-01-23 09:32:37 +08:00
caiyiling 53738c2da4 1 2025-01-23 09:32:15 +08:00
wangxiaoshuang 3513c08adf Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-01-23 09:22:28 +08:00
wangxiaoshuang 9eb3f2f322 1 2025-01-23 09:22:24 +08:00
caiyiling b16e351779 Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-01-23 09:11:21 +08:00
caiyiling b176ab0716 关键序列渲染更改 2025-01-23 09:10:40 +08:00
wangxiaoshuang c7eb323eaa 通用培训课件添加国际化
continuous-integration/drone/push Build is passing
2025-01-22 17:29:20 +08:00
wangxiaoshuang 7b3fe42654 部分问题修复
continuous-integration/drone/push Build is passing
2025-01-22 15:27:20 +08:00
wangxiaoshuang 21c96300ad 1
continuous-integration/drone/push Build is passing
2025-01-22 10:21:32 +08:00
caiyiling 8f46819b9a Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web into main
continuous-integration/drone/push Build is passing
2025-01-22 09:48:44 +08:00
caiyiling 6e66dd8bbe 导表配置更改 2025-01-22 09:48:28 +08:00
wangxiaoshuang b209c6566b 添加外部人员弹框按钮样式修改
continuous-integration/drone/push Build is running
2025-01-22 09:48:25 +08:00
wangxiaoshuang f8bd826c9c Merge branch 'main' of https://gitea.frp.extimaging.com/XCKJ/irc_web
continuous-integration/drone/push Build is passing
2025-01-21 17:12:45 +08:00
wangxiaoshuang e3f6f9107d 角色可切换选项不足时不显示切换角色按钮 2025-01-21 17:12:33 +08:00
39 changed files with 374 additions and 133 deletions
+3 -3
View File
@@ -209,9 +209,9 @@ export default {
[],
this.arr.filter(
(v) =>
~v.Code.indexOf(this.key) ||
~v.Value.indexOf(this.key) ||
~v.ValueCN.indexOf(this.key)
~v.Code.toLowerCase().indexOf(this.key.toLowerCase()) ||
~v.Value.toLowerCase().indexOf(this.key.toLowerCase()) ||
~v.ValueCN.toLowerCase().indexOf(this.key.toLowerCase())
)
)
} else {
+6
View File
@@ -13,6 +13,7 @@
v-model="searchData[item.prop]"
:placeholder="item.placeholder"
size="mini"
clearable
:style="{ width: item.width }"
:readonly="item.readonly"
/>
@@ -22,6 +23,7 @@
v-model="searchData[item.prop]"
:placeholder="item.placeholder"
size="mini"
clearable
:style="{ width: item.width }"
@change="item.change && item.change(that, searchData[item.prop])"
>
@@ -37,6 +39,7 @@
v-model="searchData[item.prop]"
:placeholder="item.placeholder"
size="mini"
clearable
:style="{ width: item.width }"
@change="item.change && item.change(that, searchData[item.prop])"
>
@@ -96,6 +99,7 @@
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
:picker-options="item.pickerOption"
clearable
/>
<!-- 时间 -->
<el-time-select
@@ -104,6 +108,7 @@
:placeholder="item.placeholder"
type=""
:style="{ width: item.width }"
clearable
/>
<!-- 日期时间 -->
<el-date-picker
@@ -114,6 +119,7 @@
value-format="yyyy-MM-dd HH:mm:ss"
:disabled="item.disable && item.disable(searchData[item.prop])"
:style="{ width: item.width }"
clearable
/>
<!-- 日期时间段 -->
<el-date-picker
+6
View File
@@ -887,6 +887,12 @@ const actions = {
const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${i}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${index}`
imageIds.push(imageId)
})
} else if (study.IsCriticalSequence && instance.KeyFramesList.length === 0) {
// 兼容保存标记数据未存NumberOfFrames的情况,按序列展示
for (let i = 0; i < instance.NumberOfFrames; i++) {
const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${i}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${index}`
imageIds.push(imageId)
}
} else {
for (let i = 0; i < instance.NumberOfFrames; i++) {
const imageId = `wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${instance.Path}?frame=${i}&instanceId=${instance.Id}&visitTaskId=${obj.visitTaskId}&idx=${studyIndex}|${seriesIndex}|${index}`
@@ -3,13 +3,16 @@
ref="sysAttachmentFrom"
v-loading="loading"
:model="form"
label-width="170px"
label-width="190px"
size="small"
:rules="rules"
class="upload-temporary-file"
>
<div class="base-dialog-body">
<el-form-item label="文件类型: " prop="FileTypeId">
<el-form-item
:label="$t('dictionary:signature:form:FileTypeId')"
prop="FileTypeId"
>
<el-select
v-model="form.FileTypeId"
style="width: 100%"
@@ -25,7 +28,7 @@
</el-select>
</el-form-item>
<el-form-item label="文件: ">
<el-form-item :label="$t('dictionary:signature:form:File')">
<div class="upload-container">
<el-upload
class="upload-demo"
@@ -46,16 +49,16 @@
type="primary"
:disabled="form.FileTypeId === ''"
:loading="btnLoading"
>Select</el-button
>{{ $t('common:button:check') }}</el-button
>
<span slot="tip" style="margin-left: 10px" class="el-upload__tip">
(must be in pdf format)
({{ $t('trials:signature:label:mustBepdf') }})
</span>
</el-upload>
</div>
</el-form-item>
<el-form-item
label="需要签署的用户类型: "
:label="$t('dictionary:signature:form:NeedConfirmedUserTypeIdList')"
prop="NeedConfirmedUserTypeIdList"
>
<el-select
@@ -71,7 +74,10 @@
/>
</el-select>
</el-form-item>
<el-form-item label="是否仅内部签署: " prop="DocUserSignType">
<el-form-item
:label="$t('dictionary:signature:form:DocUserSignType')"
prop="DocUserSignType"
>
<el-switch
v-model="form.DocUserSignType"
:active-value="1"
@@ -80,7 +86,7 @@
</el-switch>
</el-form-item>
<el-form-item
label="查看最短时间(分钟): "
:label="$t('dictionary:signature:form:SignViewMinimumMinutes')"
prop="SignViewMinimumMinutes"
>
<el-input-number
@@ -105,7 +111,7 @@
:disabled="form.FileTypeId === '' || form.Name === ''"
:loading="saveBtnLoading"
@click="handleSave"
>Save</el-button
>{{ $t('common:button:save') }}</el-button
>
</el-form-item>
</div>
@@ -138,13 +144,25 @@ export default {
},
rules: {
FileTypeId: [
{ required: true, message: 'Please select', trigger: ['blur'] },
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur'],
},
],
SignViewMinimumMinutes: [
{ required: true, message: 'Please specify', trigger: ['change'] },
{
required: true,
message: this.$t('common:ruleMessage:specify'),
trigger: ['change'],
},
],
NeedConfirmedUserTypeIdList: [
{ required: true, message: 'Please select', trigger: ['blur'] },
{
required: true,
message: this.$t('common:ruleMessage:select'),
trigger: ['blur'],
},
],
},
fileList: [],
@@ -211,7 +229,7 @@ export default {
this.fileList = []
return true
} else {
this.$alert('must be in pdf format')
this.$alert(this.$t('trials:signature:label:mustBepdf'))
return false
}
@@ -236,7 +254,7 @@ export default {
this.$refs.sysAttachmentFrom.validate((valid) => {
if (!valid) return
if (!this.form.Name) {
this.$alert('Please select file.')
this.$alert(this.$t('trials:signature:message:selectFile'))
return
}
this.saveBtnLoading = true
@@ -245,7 +263,7 @@ export default {
this.saveBtnLoading = false
this.$emit('closeDialog')
this.$emit('getList')
this.$message.success('Uploaded successfully')
this.$message.success(this.$t('common:message:updatedSuccessfully'))
})
.catch(() => {
this.saveBtnLoading = false
@@ -263,7 +281,7 @@ export default {
}
},
handleExceed(files, fileList) {
this.$message.warning(`Upload is currently limited to 1 file`)
this.$message.warning(this.$t('upload:rule:maxFile1'))
},
checkFileSuffix(fileName) {
var typeArr = ['pdf']
@@ -34,7 +34,7 @@
<el-button
type="primary"
icon="el-icon-plus"
style="margin-left: auto"
style="margin-left: auto; margin-bottom: 10px"
size="small"
@click="handleAdd"
>
@@ -69,6 +69,7 @@
:label="$t('dictionary:signature:table:SignViewMinimumMinutes')"
show-overflow-tooltip
sortable="custom"
min-width="110"
/>
<el-table-column
prop="NeedConfirmedUserTypes"
@@ -103,6 +104,7 @@
:label="$t('dictionary:signature:table:DocUserSignType')"
show-overflow-tooltip
sortable="custom"
min-width="90"
>
<template slot-scope="scope">
{{ $fd('ReadingYesOrNo', Number(scope.row.DocUserSignType)) }}
@@ -115,7 +117,7 @@
sortable="custom"
/>
<el-table-column :label="$t('common:action:action')">
<el-table-column :label="$t('common:action:action')" min-width="100">
<template slot-scope="scope">
<el-button type="text" @click="handlePreview(scope.row)">
{{ $t('common:button:preview') }}
@@ -10,12 +10,16 @@
<el-input v-model="searchData.Version" style="width: 100px" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">{{
$t("dictionary:browser:button:reset")
}}</el-button>
<el-button type="primary" @click="handleSearch">{{
$t("dictionary:browser:button:search")
}}</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left: auto">
@@ -16,8 +16,16 @@
<el-input v-model="searchData.TagDescriptionCN" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
@@ -27,8 +27,16 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">重置</el-button>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
@@ -8,9 +8,16 @@
<el-input v-model="searchData.QuestionName" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">重置</el-button>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<div>
@@ -57,8 +57,16 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">重置</el-button>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
@@ -16,8 +16,16 @@
<el-input v-model="searchData.TagDescriptionCN" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
@@ -38,8 +38,16 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">重置</el-button>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
@@ -26,8 +26,16 @@
<el-input v-model="searchData.Type" clearable style="width:120px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto">
@@ -123,8 +123,16 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button type="primary" @click="handleReset">重置</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left: auto">
+11 -3
View File
@@ -3,15 +3,23 @@
<!-- 搜索框 -->
<div class="search">
<el-form :inline="true" size="mini" class="base-search-form">
<el-form-item label="编号:">
<el-form-item label="Code:">
<el-input v-model="searchData.Code" style="width:100px;" />
</el-form-item>
<el-form-item label="模板:">
<el-input v-model="searchData.Name" style="width:100px;" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleReset">Reset</el-button>
<el-button type="primary" @click="handleSearch">Search</el-button>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
</el-form>
<span style="margin-left:auto;">
+3 -1
View File
@@ -334,7 +334,7 @@ export default {
},
mounted() {
let lang = zzSessionStorage.getItem('lang') || 'zh'
zzSessionStorage.clear()
// zzSessionStorage.clear()
this.loginType = this.$route.query.loginType
this.location = this.$route.query.location
zzSessionStorage.setItem('loginType', this.loginType)
@@ -421,6 +421,8 @@ export default {
)
return
} else if (res.IsMFA) {
zzSessionStorage.removeItem('userId')
zzSessionStorage.removeItem('identityUserId')
this.$MFA({
UserId: res.BasicInfo.IdentityUserId,
EMail: res.BasicInfo.EMail,
@@ -437,7 +437,7 @@ export default {
},
handlePreview3(row) {
return this.$preview({
path: row.FilePath,
path: row.Path || row.FilePath,
type: 'pdf',
title: row.FileName,
})
@@ -447,7 +447,7 @@ export default {
},
handlePreview2(row, r2) {
return this.$preview({
path: row.fullPath,
path: row.Path || row.fullPath,
type: 'pdf',
title: row.FileName,
})
@@ -537,7 +537,7 @@ export default {
handlePreview(row) {
console.log(row)
return this.$preview({
path: row.FullPath,
path: row.Path || row.FullPath,
type: 'pdf',
title: row.FileName,
})
@@ -333,7 +333,7 @@ export default {
},
preview(row) {
this.$preview({
path: row.FullPath,
path: row.Path || row.FullPath,
type: 'pdf',
title: row.FileName,
})
@@ -292,7 +292,7 @@ export default {
},
preview(row) {
this.$preview({
path: row.FullPath,
path: row.Path || row.FullPath,
type: 'pdf',
title: row.FileName,
})
@@ -1015,7 +1015,7 @@ export default {
}
},
preview(row) {
let path = row.FullPath || row.FilePath
let path = row.Path || row.FullPath || row.FilePath
this.$preview({
path: path,
type: 'pdf',
@@ -46,7 +46,7 @@
</el-radio-group>
</el-form-item> -->
<el-form-item :label="$t('system:userlist:table:Email')" prop="EMail">
<el-input v-model="user.EMail" :disabled="user.UserCode" />
<el-input v-model="user.EMail" :disabled="!!user.UserCode" />
</el-form-item>
<el-form-item :label="$t('system:userlist:table:Phone')" prop="Phone">
<el-input v-model="user.Phone" />
@@ -165,6 +165,7 @@ export default {
this.$emit('update:visible', false)
},
openAdd() {
this.form.roles = []
this.addVisible = true
},
async save() {
+7 -5
View File
@@ -392,15 +392,17 @@ export default {
},
],
searchHandle: [
{
label: this.$t('common:button:reset'),
type: 'primary',
emitKey: 'reset',
},
{
label: this.$t('common:button:search'),
type: 'primary',
emitKey: 'search',
icon: 'el-icon-search'
},
{
label: this.$t('common:button:reset'),
type: 'primary',
emitKey: 'reset',
icon: 'el-icon-refresh-left'
},
{
label: this.$t('common:button:new'),
@@ -71,6 +71,8 @@ export default {
<style lang="scss" scoped>
.notice-marquee_wrapper{
width: 100%;
display: flex;
align-items: center;
/deep/ .el-dialog__header{
padding: 10px;
}
@@ -146,7 +146,11 @@ export default {
return this.$store.state.user.roles
},
hasRole() {
return this.roles && this.roles.length > 1
return (
this.roles &&
this.roles.length > 1 &&
this.roles.filter((item) => !item.IsUserRoleDisabled).length > 1
)
},
},
watch: {
+69 -31
View File
@@ -17,7 +17,7 @@
<el-form-item :label="$t('trials:notice:table:notificationContent')">
<el-input
v-model="searchData.NoticeContent"
style="width:100px;"
style="width: 100px"
clearable
/>
</el-form-item>
@@ -36,7 +36,11 @@
<el-button type="primary" icon="el-icon-search" @click="handleSearch">
{{ $t('common:button:search') }}
</el-button>
<el-button type="primary" icon="el-icon-refresh-left" @click="handleReset">
<el-button
type="primary"
icon="el-icon-refresh-left"
@click="handleReset"
>
{{ $t('common:button:reset') }}
</el-button>
</el-form-item>
@@ -44,7 +48,7 @@
</template>
<template slot="main-container">
<el-table
v-adaptive="{bottomOffset:60}"
v-adaptive="{ bottomOffset: 60 }"
v-loading="loading"
:data="list"
stripe
@@ -79,7 +83,15 @@
sortable="custom"
>
<template slot-scope="scope">
<el-tag :type="scope.row.ActualNoticeStateEnum === 0 ? 'info' : scope.row.ActualNoticeStateEnum === 1 ? 'success' : 'error'">
<el-tag
:type="
scope.row.ActualNoticeStateEnum === 0
? 'info'
: scope.row.ActualNoticeStateEnum === 1
? 'success'
: 'error'
"
>
{{ $fd('NoticeState', scope.row.ActualNoticeStateEnum) }}
</el-tag>
</template>
@@ -113,7 +125,12 @@
sortable="custom"
>
<template slot-scope="scope">
<a :href="OSSclientConfig.basePath + scope.row.Path" target="_blank" style="color:#428bca">{{ scope.row.FileName }}</a>
<a
:href="OSSclientConfig.basePath + scope.row.Path"
target="_blank"
style="color: #428bca"
>{{ scope.row.FileName }}</a
>
</template>
</el-table-column>
<el-table-column
@@ -124,11 +141,19 @@
sortable="custom"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.IsRead">{{ $fd('YesOrNo', scope.row.IsRead) }}</el-tag>
<el-tag v-else type="danger">{{ $fd('YesOrNo', scope.row.IsRead) }}</el-tag>
<el-tag v-if="scope.row.IsRead">{{
$fd('YesOrNo', scope.row.IsRead)
}}</el-tag>
<el-tag v-else type="danger">{{
$fd('YesOrNo', scope.row.IsRead)
}}</el-tag>
</template>
</el-table-column>
<el-table-column :label="$t('common:action:action')" min-width="100" fixed="right">
<el-table-column
:label="$t('common:action:action')"
min-width="100"
fixed="right"
>
<template slot-scope="scope">
<el-button
circle
@@ -136,12 +161,17 @@
icon="el-icon-info"
@click="showDetail(scope.row)"
/>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination class="page" :total="total" :page.sync="searchData.PageIndex" :limit.sync="searchData.PageSize" @pagination="getList" />
<pagination
class="page"
:total="total"
:page.sync="searchData.PageIndex"
:limit.sync="searchData.PageSize"
@pagination="getList"
/>
</template>
</BaseContainer>
</template>
@@ -157,9 +187,10 @@ const searchDataDefault = () => {
ApplicableProjectEnum: null,
NoticeModeEnum: null,
NoticeStateEnum: null,
Asc: true,
Asc: false,
SortField: 'PublishedTime',
PageIndex: 1,
PageSize: 20
PageSize: 20,
}
}
export default {
@@ -171,7 +202,7 @@ export default {
searchData: searchDataDefault(),
list: [],
total: 0,
loading: false
loading: false,
}
},
mounted() {
@@ -180,17 +211,21 @@ export default {
methods: {
getList() {
this.loading = true
getUserSystemNoticeList(this.searchData).then(res => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
}).catch(() => { this.loading = false })
getUserSystemNoticeList(this.searchData)
.then((res) => {
this.loading = false
this.list = res.Result.CurrentPageData
this.total = res.Result.TotalCount
})
.catch(() => {
this.loading = false
})
},
showDetail(row) {
var currentNoticeType = this.$fd('NoteType', row.NoticeTypeEnum)
if (row.IsRead || row.ActualNoticeStateEnum !== 1) {
this.$alert(row.NoticeContent, currentNoticeType, {
showConfirmButton: false
showConfirmButton: false,
})
} else {
const h = this.$createElement
@@ -200,18 +235,22 @@ export default {
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
instance.confirmButtonLoading = true
setSystemNoticeHaveRead(row.Id).then(async res => {
if (res.IsSuccess) {
await this.$store.dispatch('global/getNoticeList')
this.getList()
}
instance.confirmButtonLoading = false
done()
}).catch(() => { instance.confirmButtonLoading = false })
setSystemNoticeHaveRead(row.Id)
.then(async (res) => {
if (res.IsSuccess) {
await this.$store.dispatch('global/getNoticeList')
this.getList()
}
instance.confirmButtonLoading = false
done()
})
.catch(() => {
instance.confirmButtonLoading = false
})
} else {
done()
}
}
},
})
}
},
@@ -237,10 +276,9 @@ export default {
this.searchData.SortField = column.prop
this.searchData.PageIndex = 1
this.getList()
}
}
},
},
}
</script>
<style lang="scss" scoped>
</style>
@@ -332,13 +332,12 @@
<template slot="dialog-body">
<div style="width: 100%; display: flex">
<div class="shareLink">
<div>
<!-- <div>
<i style="color: #428bca" class="el-icon-success" />
<!-- 成功创建调查表链接 -->
<span>{{
$t('trials:researchRecord:message:createLinkSuccessfully')
}}</span>
</div>
</div> -->
<div style="margin: 10px 0">
<!-- 链接 -->
{{ $t('trials:researchRecord:label:link') }}
@@ -30,7 +30,7 @@
style="margin:0 10px;"
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]"
>
<el-button type="text" @click="previewImage(file.ImagePath)">
<el-button type="text" @click="previewImage(file.ImagePath)" style="width: 400px;white-space: normal; word-wrap: break-word;text-align: left;">
{{ file.FileName }}
</el-button>
<img
@@ -31,7 +31,7 @@
style="margin:0 10px;"
:images="[`${OSSclientConfig.basePath}${file.ImagePath}`]"
>
<el-button type="text" @click="previewImage(file.ImagePath)">
<el-button type="text" @click="previewImage(file.ImagePath)" style="width: 400px;white-space: normal; word-wrap: break-word;text-align: left;">
{{ file.FileName }}
</el-button>
<img
@@ -22,12 +22,15 @@
<el-table-column
v-for="item in exportInfo.DicList"
:key="item.Code"
:label="$i18n.locale === 'zh' ? item.ValueCN : item.Value">
:label="$i18n.locale === 'zh' ? item.ValueCN : item.Value"
>
<template v-slot="scope">
<el-checkbox
@change="() => changeState(scope, item.Code)"
:checked="getCheckState(scope, item.Code)"
:disabled="getDisabledState(scope.row, item)"
v-show="!scope.row.IsGroup || !scope.row.HasChildren"
>
</el-checkbox>
</template>
@@ -43,6 +46,7 @@
v-model="scope.row.CDISCCode"
size="mini"
:disabled="scope.row.HasChildren || scope.row.IsTableQuestion"
v-show="!scope.row.IsGroup || !scope.row.HasChildren"
>
</el-input>
</template>
@@ -91,29 +95,7 @@ export default {
async submit() {
this.loading = true
try {
let params= {
questionList: [],
tableQuestionList: []
}
params.questionList = this.exportInfo.QuestionList.map(i => {
return {
questionId: i.QuestionId,
tableQuestionId: i.TableQuestionId,
exportResult: i.ExportResult,
CDISCCode: i.CDISCCode
}
})
this.exportInfo.QuestionList.forEach(i => {
let childlist = i.Children.map(k => {
return {
questionId: i.QuestionId,
tableQuestionId: k.TableQuestionId,
exportResult: k.ExportResult,
CDISCCode: k.CDISCCode
}
})
params.tableQuestionList = params.tableQuestionList.concat(childlist)
})
let params = this.filterQuestions(this.exportInfo.QuestionList)
let res = await setTrialQuestionExportResult(params)
if (res.IsSuccess) {
this.$message.success(this.$t('common:message:savedSuccessfully'))
@@ -124,6 +106,36 @@ export default {
console.log(e)
}
},
filterQuestions(arr) {
let params= {
questionList: [],
tableQuestionList: []
}
for (let i of arr) {
if (!i.IsGroup && !i.IsTableQuestion) {
params.questionList.push({
questionId: i.QuestionId,
tableQuestionId: i.TableQuestionId,
exportResult: i.ExportResult,
CDISCCode: i.CDISCCode
})
}
if (i.TableQuestionId) {
params.tableQuestionList.push({
questionId: i.QuestionId,
tableQuestionId: i.TableQuestionId,
exportResult: i.ExportResult,
CDISCCode: i.CDISCCode
})
}
if (i.Children && i.Children.length > 0) {
const childResults = this.filterQuestions(i.Children)
params.questionList = params.questionList.concat(childResults.questionList)
params.tableQuestionList = params.tableQuestionList.concat(childResults.tableQuestionList)
}
}
return params;
},
//
getCheckState(item, code) {
return item.row.ExportResult.indexOf(code) > -1
@@ -24,6 +24,7 @@
<el-button
size="mini"
type="primary"
style="margin-right: 10px"
icon="el-icon-refresh-left"
@click="handleReset"
>
@@ -491,6 +492,7 @@ export default {
.participant-container {
height: 100%;
.el-header {
padding-right: 5px;
.filter-container {
display: flex;
align-items: center;
@@ -771,6 +771,7 @@
<el-button
v-if="scope.row.FileName && scope.row.ClinicalUploadType"
circle
:title="$t('common:button:download')"
icon="el-icon-download"
@click="handleDownloadTpl(scope.row)"
>
@@ -778,6 +779,7 @@
<el-button
v-if="scope.row.FileName && !scope.row.ClinicalUploadType"
circle
:title="$t('common:button:preview')"
icon="el-icon-view"
@click="handlePreviewTpl(scope.row)"
>
@@ -785,6 +787,7 @@
<el-button
v-if="scope.row.ClinicalUploadType === 2"
circle
:title="$t('common:button:preview')"
icon="el-icon-view"
@click="handlePreview(scope.row)"
>
+50 -3
View File
@@ -83,7 +83,18 @@
:label="$t('trials:site:table:subjects')"
show-overflow-tooltip
sortable="custom"
/>
>
<template slot-scope="scope">
<el-button
v-if="scope.row.SubjectCount > 0 && hasSubjectRoute"
type="text"
@click="jumpToSubjectList(scope.row.TrialSiteId)"
>
{{ scope.row.SubjectCount }}
</el-button>
<span v-else> {{ scope.row.SubjectCount }}</span>
</template>
</el-table-column>
<!-- Visits -->
<el-table-column
prop="VisitCount"
@@ -91,7 +102,18 @@
:label="$t('trials:site:table:visits')"
show-overflow-tooltip
sortable="custom"
/>
>
<template slot-scope="scope">
<el-button
v-if="scope.row.VisitCount > 0 && hasVisitRoute"
type="text"
@click="jumpToVisitList(scope.row.TrialSiteId)"
>
{{ scope.row.VisitCount }}
</el-button>
<span v-else> {{ scope.row.VisitCount }}</span>
</template>
</el-table-column>
<!-- Staff -->
<el-table-column
prop="UserCount"
@@ -220,11 +242,16 @@ export default {
userListLoading: '',
userList: [],
trialId: '',
hasSubjectRoute: false,
hasVisitRoute: false
}
},
mounted() {
this.trialId = this.$route.query.trialId
const trialsRouter = this.$store.getters.routes.find(r => { return r.name === 'Trials' })
const trialsPanelRouter = trialsRouter.children.find(r => { return r.name === 'TrialsPanel' }).children
this.hasSubjectRoute = this.hasRoute('subject-list', trialsPanelRouter)
this.hasVisitRoute = this.hasRoute('crc-upload', trialsPanelRouter)
this.getList()
},
methods: {
@@ -273,6 +300,26 @@ export default {
this.searchData.PageIndex = 1
this.getList()
},
jumpToSubjectList(trialSiteId) {
this.$router.push({ path: `/trials/trials-panel/subject/subject-list?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&trialSiteId=${trialSiteId}` })
},
jumpToVisitList(trialSiteId) {
this.$router.push({ path: `/trials/trials-panel/visit/crc-upload?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&trialSiteId=${trialSiteId}` })
},
hasRoute(name, routeList) {
for (let i = 0; i < routeList.length; i++) {
if (routeList[i].name === name) {
return true
}
if (routeList[i].children) {
const flag = this.hasRoute(name, routeList[i].children)
if (flag) {
return flag
}
}
}
return false
}
},
}
</script>
@@ -291,6 +291,7 @@ import SubjectsForm from './components/SubjectsForm'
import SubjectStatusForm from './components/SubjectStatusForm'
import MessageTable from './components/MessageTable'
import moment from 'moment'
import { changeURLStatic } from '@/utils/history.js'
const searchDataDefault = () => {
return {
Code: '',
@@ -339,6 +340,10 @@ export default {
this.hasCrcRoute = this.hasRoute('crc-upload', trialsPanelRouter)
this.hasQCRoute = this.hasRoute('qc-check', trialsPanelRouter)
this.trialId = this.$route.query.trialId
if (this.$route.query.trialSiteId) {
this.searchData.TrialSiteId = this.$route.query.trialSiteId
changeURLStatic('trialSiteId', '')
}
this.getSite()
this.getList()
},
@@ -441,7 +446,7 @@ export default {
//
closeStatusDialog() {
this.statusVisible = false
},
},
handleTotalVisitCount(subjectCode) {
if (this.hasCrcRoute) {
this.$router.push({ path: `/trials/trials-panel/visit/crc-upload?trialId=${this.$route.query.trialId}&trialCode=${this.$route.query.trialCode}&researchProgramNo=${this.$route.query.researchProgramNo}&subjectCode=${subjectCode}` })
@@ -1680,8 +1680,13 @@ export default {
this.getSite()
if (this.$route.query.subjectCode) {
this.searchData.SubjectInfo = this.$route.query.subjectCode
changeURLStatic('subjectCode', '')
}
if (this.$route.query.trialSiteId) {
this.searchData.TrialSiteId = this.$route.query.trialSiteId
changeURLStatic('trialSiteId', '')
}
changeURLStatic('subjectCode', '')
this.TrialCode = this.$route.query.trialCode
this.getList()
this.getVisitPlanOptions()
@@ -121,7 +121,19 @@
:label="$t('trials:audit:table:bodyPart')"
>
<template slot-scope="scope">
{{ getBodyPart(scope.row.BodyPartForEdit) }}
<el-tooltip
class="item"
effect="dark"
:content="$t('trials:audit:message:noBodyPartForEdit')"
placement="bottom"
v-if="!scope.row.BodyPartForEdit"
>
<i
class="el-icon-warning"
style="color: #f44336; font-size: 16px"
/>
</el-tooltip>
<span v-else>{{ getBodyPart(scope.row.BodyPartForEdit) }}</span>
</template>
</el-table-column>
<!-- 序列数量 -->
@@ -59,7 +59,7 @@
/>
<el-table-column
:label="$t('trials:sysDocBeSigned:table:uploadTime')"
prop="UpdateTime"
prop="CreateTime"
show-overflow-tooltip
sortable="custom"
/>
@@ -168,7 +168,7 @@ const searchDataDefault = () => {
pageIndex: 1,
pageSize: 20,
asc: false,
sortField: 'UpdateTime',
sortField: 'CreateTime',
}
}
export default {
@@ -38,7 +38,7 @@
/>
<el-table-column
:label="$t('trials:sysDocBeSigned:table:uploadTime')"
prop="UpdateTime"
prop="CreateTime"
show-overflow-tooltip
sortable="custom"
/>
@@ -130,7 +130,7 @@ const searchDataDefault = () => {
pageIndex: 1,
pageSize: 20,
asc: false,
sortField: 'UpdateTime'
sortField: 'CreateTime'
}
}
export default {
+2 -2
View File
@@ -233,14 +233,14 @@
<div class="my_select_box" :class="{selected: selected === 'NeedSignedTrialDoc'}" tab-data="NeedSignedTrialDoc" @click="selected = 'NeedSignedTrialDoc'" v-if="!hasPermi(['role:zys'])">
<div class="my_select_box_content">
<span class="el-icon-receiving" style="padding: 4px;margin: 4px;color: #6698ff"></span>
<span class="my_select_box_content_text">{{ $t('trials:workbench:title:trialDocSigned') }}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.TrialSignedDocCount }}</span>
<span class="my_select_box_content_text" :title="$t('trials:workbench:title:trialDocSigned')">{{ $t('trials:workbench:title:trialDocSigned') }}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.TrialSignedDocCount }}</span>
</div>
</div>
<!-- 系统已签署文件 -->
<div class="my_select_box" :class="{selected: selected === 'NeedSignedSysDoc'}" tab-data="NeedSignedSysDoc" @click="$nextTick(() => selected = 'NeedSignedSysDoc')" v-if="!hasPermi(['role:zys'])">
<div class="my_select_box_content">
<span class="el-icon-data-line" style="padding: 4px;margin: 4px;color: #6698ff"></span>
<span class="my_select_box_content_text">{{ $t('trials:workbench:title:sysDocSigned') }}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.SysSignedDocCount }}</span>
<span class="my_select_box_content_text" :title="$t('trials:workbench:title:sysDocSigned')">{{ $t('trials:workbench:title:sysDocSigned') }}</span><span style="margin:0 0.25rem">·</span><span>{{ tabList.SysSignedDocCount }}</span>
</div>
</div>
</div>