Welcome to mirror list, hosted at ThFree Co, Russian Federation.

qrcode_modal.html « common « html « web - github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 771f3241a4995828b2e1c27db4864650e52b47c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
{{define "qrcodeModal"}}
<a-modal id="qrcode-modal" v-model="qrModal.visible" :title="qrModal.title"
         :closable="true" width="300px" :ok-text="qrModal.okText"
         cancel-text='{{ i18n "close" }}' :ok-button-props="{attrs:{id:'qr-modal-ok-btn'}}">
    <a-tag color="green" style="margin-bottom: 10px;display: block;text-align: center;" >click on QR Code to Copy</a-tag>
    <canvas v-if="qrModal.inbound.protocol != Protocols.VMESS && qrModal.inbound.protocol != Protocols.VLESS && qrModal.inbound.protocol != Protocols.TROJAN" id="qrCode" style="width: 100%; height: 100%;"></canvas>

    <template v-if="qrModal.inbound.protocol === Protocols.VMESS" v-for="(vmess, index) in qrModal.inbound.settings.vmesses">
        <a-tag color="red" style="margin-bottom: 10px;display: block;text-align: center;" v-text="vmess.email"></a-tag>
        <canvas @click="copyTextToClipboard(`qrCode-vmess-${vmess.id}`,index)" :id="`qrCode-vmess-${vmess.id}`" style="width: 100%; height: 100%;"></canvas>
        <a-divider style="height: 2px; background-color: #7e7e7e" />
    </template>

    <template v-if="qrModal.inbound.protocol === Protocols.VLESS" v-for="(vless, index) in qrModal.inbound.settings.vlesses">
        <a-tag color="red" style="margin-bottom: 10px;display: block;text-align: center;" v-text="vless.email"></a-tag>
        <canvas @click="copyTextToClipboard(`qrCode-vless-${vless.id}`,index)" :id="`qrCode-vless-${vless.id}`" style="width: 100%; height: 100%;"></canvas>
        <a-divider style="height: 2px; background-color: #7e7e7e" />
    </template>
    
    <template v-if="qrModal.inbound.protocol === Protocols.TROJAN" v-for="(trojan, index) in qrModal.inbound.settings.trojans">
        <a-tag color="red" style="margin-bottom: 10px;display: block;text-align: center;" v-text="trojan.email"></a-tag>
        <canvas @click="copyTextToClipboard(`qrCode-trojan-${trojan.password}`,index)" :id="`qrCode-trojan-${trojan.password}`" style="width: 100%; height: 100%;"></canvas>
        <a-divider style="height: 2px; background-color: #7e7e7e" />
    </template>
</a-modal>

<script>

    const qrModal = {
        title: '',
        content: '',
        inbound: new Inbound(),
        dbInbound: new DBInbound(),
        okText: '',
        copyText: '',
        qrcode: null,
        clipboard: null,
        visible: false,
        show: function (title='', content='', dbInbound=new DBInbound(),okText='{{ i18n "copy" }}', copyText='') {
            this.title = title;
            this.content = content;
            this.dbInbound = dbInbound;
            this.inbound = dbInbound.toInbound();
            this.okText = okText;
            if (ObjectUtil.isEmpty(copyText)) {
                this.copyText = content;
            } else {
                this.copyText = copyText;
            }
            this.visible = true;
            qrModalApp.$nextTick(() => {
                if (this.clipboard === null) {
                    this.clipboard = new ClipboardJS('#qr-modal-ok-btn', {
                        text: () => this.copyText,
                    });
                    this.clipboard.on('success', () => app.$message.success('{{ i18n "copied" }}'));
                }
                if (this.qrcode === null) {
                    this.qrcode = new QRious({
                        element: document.querySelector('#qrCode'),
                        size: 260,
                        value: content,
                    });
                } else {
                    this.qrcode.value = content;
                }
            });
        },
        close: function () {
            this.visible = false;
        },
    };

    const qrModalApp = new Vue({
        el: '#qrcode-modal',
        data: {
            qrModal: qrModal,
        },
        methods: {
            setQrCode(elmentId,index) {
                content = qrModal.inbound.genLink(qrModal.dbInbound.address,qrModal.dbInbound.remark,index)

                new QRious({
                        element: document.querySelector('#'+elmentId),
                        size: 260,
                        value: content,
                    });
            },
            copyTextToClipboard(elmentId,index) {
                link = qrModal.inbound.genLink(qrModal.dbInbound.address,qrModal.dbInbound.remark,index)
                this.qrModal.copyText = link

                this.qrModal.clipboard = new ClipboardJS('#' + elmentId, {
                        text: () => link,
                    });
                this.qrModal.clipboard.on('success', () => { 
                    app.$message.success('{{ i18n "copied" }}')
                    this.qrModal.clipboard.destroy();
                });


            }
        },
        updated()  {
            switch (qrModal.inbound.protocol) {
                    case Protocols.VMESS: 
                        vmesses = qrModal.inbound.settings.vmesses
                        for (const index in vmesses) {
                            this.setQrCode("qrCode-vmess-" + vmesses[index].id ,index)
                        }
                    break;
                    case Protocols.VLESS: 
                        vlesses = qrModal.inbound.settings.vlesses

                        for (const index in vlesses) {
                            this.setQrCode("qrCode-vless-" + vlesses[index].id ,index)
                        }
                    break;
                    case Protocols.TROJAN: 
                        trojans = qrModal.inbound.settings.trojans

                        for (const index in trojans) {
                            this.setQrCode("qrCode-trojan-" + trojans[index].password ,index)
                        }
                    break;
                    default: return null;
            }

        }
    });

</script>
{{end}}