隐私政策修改
continuous-integration/drone/push Build is passing Details

main
wangxiaoshuang 2025-10-24 11:23:19 +08:00
parent 5d09bd2159
commit 0e029369a3
8 changed files with 106 additions and 81 deletions

View File

@ -4,7 +4,7 @@ import AGRCOMP from "./index.vue";
const MFAConstructor = Vue.extend(AGRCOMP); const MFAConstructor = Vue.extend(AGRCOMP);
let MFAINSTANCELIST = []; let MFAINSTANCELIST = [];
const AGR = options => { const AGR = options => {
const { Id, callBack, cancelBack } = options; const { Id, IsEn_Us, callBack, cancelBack } = options;
if (!Id) throw `Id is requred.but ${Id}` if (!Id) throw `Id is requred.but ${Id}`
const id = `AGR${new Date().getTime()}`; const id = `AGR${new Date().getTime()}`;
const instance = new MFAConstructor(); const instance = new MFAConstructor();
@ -13,7 +13,7 @@ const AGR = options => {
instance.vm = instance.$mount(); instance.vm = instance.$mount();
if (instance.vm.visible) return; if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el); document.body.appendChild(instance.vm.$el);
instance.vm.open({ Id }); instance.vm.open({ Id, IsEn_Us });
instance.vm.$on("success", (Id) => { instance.vm.$on("success", (Id) => {
if (callBack) callBack(Id) if (callBack) callBack(Id)
}); });

View File

@ -2,10 +2,11 @@
<!--AGR--> <!--AGR-->
<el-dialog v-if="visible" :visible.sync="visible" width="60%" :close-on-click-modal="false" append-to-body center <el-dialog v-if="visible" :visible.sync="visible" width="60%" :close-on-click-modal="false" append-to-body center
:show-close="true" @close="cancel"> :show-close="true" @close="cancel">
<div slot="title"> <!-- <div slot="title">
{{ agreement.FileName }} {{ agreement.FileName }}
</div> </div> -->
<div v-html="agreement.FileContent"></div> <div v-html="agreement.FileEnContent" class="content" v-if="IsEn_Us"></div>
<div v-html="agreement.FileContent" class="content" v-else></div>
</el-dialog> </el-dialog>
</template> </template>
<script> <script>
@ -17,7 +18,8 @@ export default {
data() { data() {
return { return {
visible: false, visible: false,
agreement: {} agreement: {},
IsEn_Us: false
} }
}, },
mounted() { mounted() {
@ -38,7 +40,8 @@ export default {
} }
}, },
open(data) { open(data) {
let { Id } = data; let { Id, IsEn_Us } = data;
this.IsEn_Us = IsEn_Us
this.getAgreement(Id) this.getAgreement(Id)
this.visible = true this.visible = true
}, },
@ -54,4 +57,9 @@ export default {
::v-deep .el-dialog__body { ::v-deep .el-dialog__body {
height: 500px; height: 500px;
} }
.content {
height: 100%;
overflow-y: auto;
}
</style> </style>

View File

@ -8,7 +8,6 @@
<CommonTemplate v-if="activeTab === '4' && item.value == activeTab" /> <CommonTemplate v-if="activeTab === '4' && item.value == activeTab" />
<SignatureTemplate v-if="activeTab === '5' && item.value == activeTab" /> <SignatureTemplate v-if="activeTab === '5' && item.value == activeTab" />
<ToolsTemplate v-if="activeTab === '0' && item.value == activeTab" /> <ToolsTemplate v-if="activeTab === '0' && item.value == activeTab" />
<AgreementTemplate v-if="activeTab === '6' && item.value == activeTab" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<!-- 预览 --> <!-- 预览 -->
@ -29,7 +28,6 @@ import EmailTemplate from './components/EmailTemplate'
import CommonTemplate from './components/CommonTemplate' import CommonTemplate from './components/CommonTemplate'
import SignatureTemplate from './components/SignatureTemplate' import SignatureTemplate from './components/SignatureTemplate'
import ToolsTemplate from './components/ToolsTemplate' import ToolsTemplate from './components/ToolsTemplate'
import AgreementTemplate from './components/AgreementTemplate'
import VueOfficeDocx from '@vue-office/docx' import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css' import '@vue-office/docx/lib/index.css'
import VueOfficeExcel from '@vue-office/excel' import VueOfficeExcel from '@vue-office/excel'
@ -46,8 +44,7 @@ export default {
VueOfficeDocx, VueOfficeDocx,
VueOfficeExcel, VueOfficeExcel,
PreviewFile, PreviewFile,
ToolsTemplate, ToolsTemplate
AgreementTemplate
}, },
data() { data() {
return { return {

View File

@ -2,34 +2,59 @@
<el-form ref="sysAgreementFrom" v-loading="loading" :model="form" label-width="140px" size="small" :rules="rules" <el-form ref="sysAgreementFrom" v-loading="loading" :model="form" label-width="140px" size="small" :rules="rules"
class="upload-temporary-file"> class="upload-temporary-file">
<div class="base-dialog-body"> <div class="base-dialog-body">
<el-form-item :label="$t('dictionary:agreement:table:UserAgreementTypeEnum')" prop="UserAgreementTypeEnum"> <el-row>
<el-select v-model="form.UserAgreementTypeEnum" style="width: 50%" size="small" filterable> <el-col :span="12">
<el-option v-for="item of $d.UserAgreementType" :key="item.id" :label="item.label" :value="item.value" /> <el-form-item :label="$t('dictionary:agreement:table:UserAgreementTypeEnum')" prop="UserAgreementTypeEnum"
</el-select> style="width: 48%">
</el-form-item> <el-select v-model="form.UserAgreementTypeEnum" style="width: 100%" size="small" filterable>
<el-form-item :label="$t('dictionary:agreement:table:FileName')" prop="FileName"> <el-option v-for="item of $d.UserAgreementType" :key="item.id" :label="item.label" :value="item.value" />
<el-input v-model="form.FileName" clearable style="width: 50%" /> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="$t('dictionary:agreement:table:FileVersion')" prop="FileVersion"> </el-col>
<el-input v-model="form.FileVersion" clearable style="width: 50%" /> <el-col :span="12">
</el-form-item> <el-form-item :label="$t('dictionary:agreement:table:FileName')" prop="FileName" style="width: 48%">
<el-form-item :label="$t('dictionary:agreement:table:UpdateDate')" prop="UpdateDate"> <el-input v-model="form.FileName" clearable style="width: 100%" />
<el-date-picker v-model="form.UpdateDate" type="datetime" </el-form-item>
:placeholder="$t('trials:seletctedReviews:table:selectionTime')" value-format="yyyy-MM-dd HH:mm:ss" </el-col>
format="yyyy-MM-dd HH:mm:ss" clearable style="width: 50%;"> </el-row>
</el-date-picker> <el-row>
</el-form-item> <el-col :span="12">
<el-form-item :label="$t('dictionary:agreement:table:EffectiveDate')" prop="EffectiveDate"> <el-form-item :label="$t('dictionary:agreement:table:FileVersion')" prop="FileVersion" style="width: 48%">
<el-date-picker v-model="form.EffectiveDate" type="datetime" <el-input v-model="form.FileVersion" clearable style="width: 100%" />
:placeholder="$t('trials:seletctedReviews:table:selectionTime')" value-format="yyyy-MM-dd HH:mm:ss" </el-form-item>
format="yyyy-MM-dd HH:mm:ss" clearable style="width: 50%;"> </el-col>
</el-date-picker> <el-col :span="12">
</el-form-item> <el-form-item :label="$t('dictionary:agreement:table:UpdateDate')" prop="UpdateDate" style="width: 48%">
<el-date-picker v-model="form.UpdateDate" type="datetime"
:placeholder="$t('trials:seletctedReviews:table:selectionTime')" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" clearable style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item :label="$t('dictionary:agreement:table:EffectiveDate')" prop="EffectiveDate" style="width: 48%">
<el-date-picker v-model="form.EffectiveDate" type="datetime"
:placeholder="$t('trials:seletctedReviews:table:selectionTime')" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" clearable style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item :label="$t('dictionary:agreement:table:FileContent')" prop="FileContent"> <el-form-item :label="$t('dictionary:agreement:table:FileContent')" prop="FileContent">
<div class="html_temp"> <div class="html_temp">
<prism-editor class="my-editor" v-model="form.FileContent" :highlight="highlighter" :line-numbers="true" <prism-editor class="my-editor" v-model="form.FileContent" :highlight="highlighter" :line-numbers="true"
style="width: 50%;max-height: 300px;"></prism-editor> style="width: 50%;max-height: 350px;"></prism-editor>
<div v-html="form.FileContent" style="width: 45%;"></div> <div v-html="form.FileContent" style="width: 45%;" class="content"></div>
</div>
</el-form-item>
<el-form-item :label="$t('dictionary:agreement:table:FileContentEn')" prop="FileEnContent">
<div class="html_temp">
<prism-editor class="my-editor" v-model="form.FileEnContent" :highlight="highlighter" :line-numbers="true"
style="width: 50%;max-height: 350px;"></prism-editor>
<div v-html="form.FileEnContent" style="width: 45%;" class="content"></div>
</div> </div>
</el-form-item> </el-form-item>
@ -71,7 +96,8 @@ export default {
UserAgreementTypeEnum: '', UserAgreementTypeEnum: '',
FileName: '', FileName: '',
FileVersion: null, FileVersion: null,
FileContent: '', FileContent: '\n\n\n\n',
FileEnContent: `\n\n\n\n`,
UpdateDate: '', UpdateDate: '',
EffectiveDate: '', EffectiveDate: '',
}, },
@ -88,6 +114,9 @@ export default {
FileContent: [ FileContent: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] }, { required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] },
], ],
FileEnContent: [
{ required: true, message: this.$t('common:ruleMessage:specify'), trigger: ['blur'] },
],
UpdateDate: [ UpdateDate: [
{ required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] }, { required: true, message: this.$t('common:ruleMessage:select'), trigger: ['blur'] },
], ],
@ -136,15 +165,20 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
.html_temp { .html_temp {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
min-height: 300px; width: 100%;
.my-editor { .my-editor {
border: 1px solid #333; border: 1px solid #333;
} }
} }
.content {
max-height: 350px;
overflow-y: auto;
}
</style> </style>

View File

@ -155,7 +155,7 @@ const searchDataDefault = () => {
} }
} }
export default { export default {
name: 'AgreementTemplate', name: 'Agreement',
components: { BaseContainer, Pagination, TemplateForm }, components: { BaseContainer, Pagination, TemplateForm },
data() { data() {
return { return {
@ -196,7 +196,8 @@ export default {
}, },
view(row) { view(row) {
this.$AGR({ this.$AGR({
Id: row.Id Id: row.Id,
IsEn_Us: this.isEN
}) })
}, },
changeTimeList(key) { changeTimeList(key) {

View File

@ -6,68 +6,45 @@
<qc-questions v-if="activeTab == 'qc'" /> <qc-questions v-if="activeTab == 'qc'" />
</el-tab-pane> </el-tab-pane>
<!-- 阅片标准配置 --> <!-- 阅片标准配置 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:criterionsConfig')" name="criterions">
:label="$t('dictionary:template:tab:criterionsConfig')"
name="criterions"
>
<criterions-tmp v-if="activeTab == 'criterions'" /> <criterions-tmp v-if="activeTab == 'criterions'" />
</el-tab-pane> </el-tab-pane>
<!-- 临床数据配置 --> <!-- 临床数据配置 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:clinicalDataConfig')" name="clinicalData">
:label="$t('dictionary:template:tab:clinicalDataConfig')"
name="clinicalData"
>
<clinical-data v-if="activeTab == 'clinicalData'" /> <clinical-data v-if="activeTab == 'clinicalData'" />
</el-tab-pane> </el-tab-pane>
<!-- 医学审核问题配置 --> <!-- 医学审核问题配置 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:medicalConfig')" name="medicalAudit">
:label="$t('dictionary:template:tab:medicalConfig')"
name="medicalAudit"
>
<medical-audit v-if="activeTab == 'medicalAudit'" /> <medical-audit v-if="activeTab == 'medicalAudit'" />
</el-tab-pane> </el-tab-pane>
<!-- DICOM字段匿名化配置 --> <!-- DICOM字段匿名化配置 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:dicomTagConfig')" name="anonymization">
:label="$t('dictionary:template:tab:dicomTagConfig')"
name="anonymization"
>
<Anonymization v-if="activeTab == 'anonymization'" /> <Anonymization v-if="activeTab == 'anonymization'" />
</el-tab-pane> </el-tab-pane>
<!-- DICOM字段新增配置 --> <!-- DICOM字段新增配置 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:dicomTagAddConfig')" name="increasefields">
:label="$t('dictionary:template:tab:dicomTagAddConfig')"
name="increasefields"
>
<IncreaseFields v-if="activeTab == 'increasefields'" /> <IncreaseFields v-if="activeTab == 'increasefields'" />
</el-tab-pane> </el-tab-pane>
<!-- 邮件管理 --> <!-- 邮件管理 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:emailConfig')" name="email">
:label="$t('dictionary:template:tab:emailConfig')"
name="email"
>
<Email v-if="activeTab == 'email'" /> <Email v-if="activeTab == 'email'" />
</el-tab-pane> </el-tab-pane>
<!-- 签名管理 --> <!-- 签名管理 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:signConfig')" name="sign">
:label="$t('dictionary:template:tab:signConfig')"
name="sign"
>
<Sign v-if="activeTab == 'sign'" /> <Sign v-if="activeTab == 'sign'" />
</el-tab-pane> </el-tab-pane>
<!-- 浏览器推荐 --> <!-- 浏览器推荐 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:browserConfig')" name="browser">
:label="$t('dictionary:template:tab:browserConfig')"
name="browser"
>
<Browser v-if="activeTab == 'browser'" /> <Browser v-if="activeTab == 'browser'" />
</el-tab-pane> </el-tab-pane>
<!-- 文件记录 --> <!-- 文件记录 -->
<el-tab-pane <el-tab-pane :label="$t('dictionary:template:tab:fileConfig')" name="file">
:label="$t('dictionary:template:tab:fileConfig')"
name="file"
>
<File v-if="activeTab == 'file'" /> <File v-if="activeTab == 'file'" />
</el-tab-pane> </el-tab-pane>
<!-- 用户协议 -->
<el-tab-pane :label="$t('dictionary:template:tab:agreement')" name="agreement">
<Agreement v-if="activeTab == 'agreement'" />
</el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
@ -82,6 +59,7 @@ import Email from './email/index.vue'
import Sign from './sign/index.vue' import Sign from './sign/index.vue'
import Browser from './browser/index.vue' import Browser from './browser/index.vue'
import File from './file/index.vue' import File from './file/index.vue'
import Agreement from './agreement/index.vue'
export default { export default {
name: 'Questions', name: 'Questions',
components: { components: {
@ -95,6 +73,7 @@ export default {
MedicalAudit, MedicalAudit,
Browser, Browser,
File, File,
Agreement
}, },
data() { data() {
return { return {
@ -122,16 +101,18 @@ export default {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.el-tabs__header { .el-tabs__header {
height: 40px; height: 40px;
margin-bottom: 5px; margin-bottom: 5px;
} }
.el-tabs__content { .el-tabs__content {
flex: 1; flex: 1;
.el-tab-pane { .el-tab-pane {
height: 100%; height: 100%;
} }
} }
} }
</style> </style>

View File

@ -297,7 +297,8 @@ export default {
let find = this.Agreement.find(item => item.IsCurrentVersion && item.UserAgreementTypeEnum === type) let find = this.Agreement.find(item => item.IsCurrentVersion && item.UserAgreementTypeEnum === type)
if (!find) return this.$confirm(this.$t('login:message:noAgreement').replace('xxx', this.$fd('UserAgreementType', type))) if (!find) return this.$confirm(this.$t('login:message:noAgreement').replace('xxx', this.$fd('UserAgreementType', type)))
this.$AGR({ this.$AGR({
Id: find.Id Id: find.Id,
IsEn_Us: this.$i18n.locale !== 'zh'
}) })
}, },
getAgreementList() { getAgreementList() {

View File

@ -70,6 +70,7 @@ export default {
'FileVersion', 'FileVersion',
'UserAgreementId', 'UserAgreementId',
], ],
IsEn_Us: false
} }
}, },
computed: { computed: {
@ -82,6 +83,7 @@ export default {
let obj = JSON.parse(this.JsonObj) let obj = JSON.parse(this.JsonObj)
let curData = [] let curData = []
Object.keys(obj).forEach((key) => { Object.keys(obj).forEach((key) => {
if (key === 'IsEn_Us') this.IsEn_Us = obj[key]
if (this.curKeys.includes(key)) { if (this.curKeys.includes(key)) {
let o = { let o = {
key: this.$t(`system:loginLog:form:${key}`), key: this.$t(`system:loginLog:form:${key}`),
@ -103,7 +105,8 @@ export default {
methods: { methods: {
view(row) { view(row) {
this.$AGR({ this.$AGR({
Id: row.value Id: row.value,
IsEn_Us: this.IsEn_Us
}) })
}, },
} }