mirror of
				https://github.com/MHSanaei/3x-ui.git
				synced 2025-10-30 11:52:51 +00:00 
			
		
		
		
	 bea19a263d
			
		
	
	
		bea19a263d
		
			
		
	
	
	
	
		
			
			* refactor: use vue inline styles in entire application * refactor: setting row in dashboard page * refactor: use blob for download file in text modal * refactor: move all html templates in `web/html` folder * refactor: `DeviceUtils` -> `MediaQueryMixin` The transition to mixins has been made, as they can update themselves. * chore: pretty right buttons in `outbounds` tab in xray settings * refactor: add translations for system status * refactor: adjust gutter spacing in setting list item * refactor: use native `a-input-password` for password field * chore: return old system status with new translations * chore: add missing translation
		
			
				
	
	
		
			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}}
 |