隐私政策修改
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);
let MFAINSTANCELIST = [];
const AGR = options => {
const { Id, callBack, cancelBack } = options;
const { Id, IsEn_Us, callBack, cancelBack } = options;
if (!Id) throw `Id is requred.but ${Id}`
const id = `AGR${new Date().getTime()}`;
const instance = new MFAConstructor();
@ -13,7 +13,7 @@ const AGR = options => {
instance.vm = instance.$mount();
if (instance.vm.visible) return;
document.body.appendChild(instance.vm.$el);
instance.vm.open({ Id });
instance.vm.open({ Id, IsEn_Us });
instance.vm.$on("success", (Id) => {
if (callBack) callBack(Id)
});

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -297,7 +297,8 @@ export default {
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)))
this.$AGR({
Id: find.Id
Id: find.Id,
IsEn_Us: this.$i18n.locale !== 'zh'
})
},
getAgreementList() {

View File

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