mirror of
				https://github.com/MHSanaei/3x-ui.git
				synced 2025-11-04 06:12:52 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{{define "modals/outModal"}}
 | 
						|
<a-modal id="out-modal" v-model="outModal.visible" :title="outModal.title" @ok="outModal.ok"
 | 
						|
         :confirm-loading="outModal.confirmLoading" :closable="true" :mask-closable="false"
 | 
						|
         :ok-button-props="{ props: { disabled: !outModal.isValid } }" style="overflow: hidden;"
 | 
						|
         :ok-text="outModal.okText" cancel-text='{{ i18n "close" }}' :class="themeSwitcher.currentTheme">
 | 
						|
         {{template "form/outbound"}}
 | 
						|
</a-modal>
 | 
						|
<script>
 | 
						|
 | 
						|
    const outModal = {
 | 
						|
        title: '',
 | 
						|
        visible: false,
 | 
						|
        confirmLoading: false,
 | 
						|
        okText: '{{ i18n "sure" }}',
 | 
						|
        isEdit: false,
 | 
						|
        confirm: null,
 | 
						|
        outbound: new Outbound(),
 | 
						|
        jsonMode: false,
 | 
						|
        link: '',
 | 
						|
        cm: null,
 | 
						|
        duplicateTag: false,
 | 
						|
        isValid: true,
 | 
						|
        activeKey: '1',
 | 
						|
        tags: [],
 | 
						|
        ok() {
 | 
						|
            ObjectUtil.execute(outModal.confirm, outModal.outbound.toJson());
 | 
						|
        },
 | 
						|
        show({ title='', okText='{{ i18n "sure" }}', outbound, confirm=(outbound)=>{}, isEdit=false, tags=[]  }) {
 | 
						|
            this.title = title;
 | 
						|
            this.okText = okText;
 | 
						|
            this.confirm = confirm;
 | 
						|
            this.jsonMode = false;
 | 
						|
            this.link = '';
 | 
						|
            this.activeKey = '1';
 | 
						|
            this.visible = true;
 | 
						|
            this.outbound = isEdit ? Outbound.fromJson(outbound) : new Outbound();
 | 
						|
            this.isEdit = isEdit;
 | 
						|
            this.tags = tags;
 | 
						|
            this.check()
 | 
						|
        },
 | 
						|
        close() {
 | 
						|
            outModal.visible = false;
 | 
						|
            outModal.loading(false);
 | 
						|
        },
 | 
						|
        loading(loading=true) {
 | 
						|
            outModal.confirmLoading = loading;
 | 
						|
        },
 | 
						|
        check(){
 | 
						|
            if(outModal.outbound.tag == '' || outModal.tags.includes(outModal.outbound.tag)){
 | 
						|
                this.duplicateTag = true;
 | 
						|
                this.isValid = false;
 | 
						|
            } else {
 | 
						|
                this.duplicateTag = false;
 | 
						|
                this.isValid = true;
 | 
						|
            }
 | 
						|
        },
 | 
						|
        toggleJson(jsonTab) {
 | 
						|
            textAreaObj = document.getElementById('outboundJson');
 | 
						|
            if(jsonTab){
 | 
						|
                if(this.cm != null) {
 | 
						|
                        this.cm.toTextArea();
 | 
						|
                        this.cm=null;
 | 
						|
                }
 | 
						|
                textAreaObj.value = JSON.stringify(this.outbound.toJson(), null, 2);
 | 
						|
                this.cm = CodeMirror.fromTextArea(textAreaObj, app.cmOptions);
 | 
						|
                this.cm.on('change',editor => {
 | 
						|
                    value = editor.getValue();
 | 
						|
                    if(this.isJsonString(value)){
 | 
						|
                        this.outbound = Outbound.fromJson(JSON.parse(value));
 | 
						|
                        this.check();
 | 
						|
                    }
 | 
						|
                });
 | 
						|
                this.activeKey = '2';
 | 
						|
            } else {
 | 
						|
                if(this.cm != null) {
 | 
						|
                        this.cm.toTextArea();
 | 
						|
                        this.cm=null;
 | 
						|
                }
 | 
						|
                this.activeKey = '1';
 | 
						|
            }
 | 
						|
        },
 | 
						|
        isJsonString(str) {
 | 
						|
            try {
 | 
						|
                JSON.parse(str);
 | 
						|
            } catch (e) {
 | 
						|
                return false;
 | 
						|
            }
 | 
						|
            return true;
 | 
						|
        },
 | 
						|
    };
 | 
						|
 | 
						|
    new Vue({
 | 
						|
        delimiters: ['[[', ']]'],
 | 
						|
        el: '#out-modal',
 | 
						|
        data: {
 | 
						|
            outModal: outModal,
 | 
						|
            get outbound() {
 | 
						|
                return outModal.outbound;
 | 
						|
            },
 | 
						|
        },
 | 
						|
        methods: {
 | 
						|
            streamNetworkChange() {
 | 
						|
                if (this.outModal.outbound.protocol == Protocols.VLESS && !outModal.outbound.canEnableTlsFlow()) {
 | 
						|
                    delete this.outModal.outbound.settings.flow;
 | 
						|
                }
 | 
						|
            },
 | 
						|
            canEnableTls() {
 | 
						|
                return this.outModal.outbound.canEnableTls();
 | 
						|
            },
 | 
						|
            convertLink(){
 | 
						|
                newOutbound = Outbound.fromLink(outModal.link);
 | 
						|
                if(newOutbound){
 | 
						|
                    this.outModal.outbound = newOutbound;
 | 
						|
                    this.outModal.toggleJson(true);
 | 
						|
                    this.outModal.check();
 | 
						|
                    this.$message.success('Link imported successfully...');      
 | 
						|
                    outModal.link = '';
 | 
						|
                } else {
 | 
						|
                    this.$message.error('Wrong Link!');
 | 
						|
                    outModal.link = '';
 | 
						|
                }
 | 
						|
            },
 | 
						|
        },
 | 
						|
    });
 | 
						|
 | 
						|
</script>
 | 
						|
{{end}}
 |