2023-12-05 20:13:36 +03:00
|
|
|
{{define "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',
|
2023-12-06 01:03:38 +03:00
|
|
|
tags: [],
|
2023-12-05 20:13:36 +03:00
|
|
|
ok() {
|
|
|
|
ObjectUtil.execute(outModal.confirm, outModal.outbound.toJson());
|
|
|
|
},
|
2023-12-06 01:03:38 +03:00
|
|
|
show({ title='', okText='{{ i18n "sure" }}', outbound, confirm=(outbound)=>{}, isEdit=false, tags=[] }) {
|
2023-12-05 20:13:36 +03:00
|
|
|
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;
|
2023-12-06 01:03:38 +03:00
|
|
|
this.tags = tags;
|
2023-12-05 20:13:36 +03:00
|
|
|
this.check()
|
|
|
|
},
|
|
|
|
close() {
|
|
|
|
outModal.visible = false;
|
|
|
|
outModal.loading(false);
|
|
|
|
},
|
2024-02-21 14:39:56 +03:00
|
|
|
loading(loading=true) {
|
2023-12-05 20:13:36 +03:00
|
|
|
outModal.confirmLoading = loading;
|
|
|
|
},
|
|
|
|
check(){
|
2023-12-06 01:03:38 +03:00
|
|
|
if(outModal.outbound.tag == '' || outModal.tags.includes(outModal.outbound.tag)){
|
2023-12-05 20:13:36 +03:00
|
|
|
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}}
|