3x-ui/web/html/common/text_modal.html

57 lines
1.8 KiB
HTML
Raw Normal View History

2023-02-09 22:18:06 +03:00
{{define "textModal"}}
<a-modal id="text-modal" v-model="txtModal.visible" :title="txtModal.title"
:closable="true"
:class="themeSwitcher.currentTheme">
<template slot="footer">
<a-button v-if="!ObjectUtil.isEmpty(txtModal.fileName)" icon="download"
:href="'data:application/text;charset=utf-8,' + encodeURIComponent(txtModal.content)"
:download="txtModal.fileName">[[ txtModal.fileName ]]
</a-button>
<a-button type="primary" id="copy-btn">{{ i18n "copy" }}</a-button>
</template>
2024-02-22 22:20:38 +03:00
<a-input style="overflow-y: auto;" type="textarea" v-model="txtModal.content"
:autosize="{ minRows: 10, maxRows: 20}"></a-input>
2023-02-09 22:18:06 +03:00
</a-modal>
<script>
const txtModal = {
title: '',
content: '',
fileName: '',
qrcode: null,
clipboard: null,
visible: false,
2023-05-08 17:44:22 +03:00
show: function (title = '', content = '', fileName = '') {
2023-02-09 22:18:06 +03:00
this.title = title;
this.content = content;
this.fileName = fileName;
this.visible = true;
textModalApp.$nextTick(() => {
if (this.clipboard === null) {
this.clipboard = new ClipboardJS('#copy-btn', {
2023-02-09 22:18:06 +03:00
text: () => this.content,
});
2023-12-08 22:08:44 +03:00
this.clipboard.on('success', () => {
app.$message.success('{{ i18n "copied" }}')
this.close();
});
2023-02-09 22:18:06 +03:00
}
});
},
close: function () {
this.visible = false;
},
};
const textModalApp = new Vue({
2023-03-17 19:07:49 +03:00
delimiters: ['[[', ']]'],
2023-02-09 22:18:06 +03:00
el: '#text-modal',
data: {
txtModal: txtModal,
},
});
</script>
2024-02-22 22:20:38 +03:00
{{end}}