mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 13:10:26 +08:00 
			
		
		
		
	反向代理源站实现使用域名分组
This commit is contained in:
		@@ -54,22 +54,30 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
	primaryOriginMaps := []maps.Map{}
 | 
						primaryOriginMaps := []maps.Map{}
 | 
				
			||||||
	backupOriginMaps := []maps.Map{}
 | 
						backupOriginMaps := []maps.Map{}
 | 
				
			||||||
	for _, originConfig := range reverseProxy.PrimaryOrigins {
 | 
						for _, originConfig := range reverseProxy.PrimaryOrigins {
 | 
				
			||||||
 | 
							if len(originConfig.Domains) == 0 {
 | 
				
			||||||
 | 
								originConfig.Domains = []string{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		m := maps.Map{
 | 
							m := maps.Map{
 | 
				
			||||||
			"id":     originConfig.Id,
 | 
								"id":      originConfig.Id,
 | 
				
			||||||
			"weight": originConfig.Weight,
 | 
								"weight":  originConfig.Weight,
 | 
				
			||||||
			"addr":   originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
								"addr":    originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
				
			||||||
			"name":   originConfig.Name,
 | 
								"name":    originConfig.Name,
 | 
				
			||||||
			"isOn":   originConfig.IsOn,
 | 
								"isOn":    originConfig.IsOn,
 | 
				
			||||||
 | 
								"domains": originConfig.Domains,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		primaryOriginMaps = append(primaryOriginMaps, m)
 | 
							primaryOriginMaps = append(primaryOriginMaps, m)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, originConfig := range reverseProxy.BackupOrigins {
 | 
						for _, originConfig := range reverseProxy.BackupOrigins {
 | 
				
			||||||
 | 
							if len(originConfig.Domains) == 0 {
 | 
				
			||||||
 | 
								originConfig.Domains = []string{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		m := maps.Map{
 | 
							m := maps.Map{
 | 
				
			||||||
			"id":     originConfig.Id,
 | 
								"id":      originConfig.Id,
 | 
				
			||||||
			"weight": originConfig.Weight,
 | 
								"weight":  originConfig.Weight,
 | 
				
			||||||
			"addr":   originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
								"addr":    originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
				
			||||||
			"name":   originConfig.Name,
 | 
								"name":    originConfig.Name,
 | 
				
			||||||
			"isOn":   originConfig.IsOn,
 | 
								"isOn":    originConfig.IsOn,
 | 
				
			||||||
 | 
								"domains": originConfig.Domains,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		backupOriginMaps = append(backupOriginMaps, m)
 | 
							backupOriginMaps = append(backupOriginMaps, m)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,6 +56,8 @@ func (this *AddPopupAction) RunPost(params struct {
 | 
				
			|||||||
	MaxIdleConns int32
 | 
						MaxIdleConns int32
 | 
				
			||||||
	IdleTimeout  int
 | 
						IdleTimeout  int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DomainsJSON []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Description string
 | 
						Description string
 | 
				
			||||||
	IsOn        bool
 | 
						IsOn        bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,6 +123,15 @@ func (this *AddPopupAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var domains = []string{}
 | 
				
			||||||
 | 
						if len(params.DomainsJSON) > 0 {
 | 
				
			||||||
 | 
							err = json.Unmarshal(params.DomainsJSON, &domains)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	createResp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{
 | 
						createResp, err := this.RPC().OriginRPC().CreateOrigin(this.AdminContext(), &pb.CreateOriginRequest{
 | 
				
			||||||
		Name: params.Name,
 | 
							Name: params.Name,
 | 
				
			||||||
		Addr: &pb.NetworkAddress{
 | 
							Addr: &pb.NetworkAddress{
 | 
				
			||||||
@@ -136,6 +147,7 @@ func (this *AddPopupAction) RunPost(params struct {
 | 
				
			|||||||
		IdleTimeoutJSON: idleTimeoutJSON,
 | 
							IdleTimeoutJSON: idleTimeoutJSON,
 | 
				
			||||||
		MaxConns:        params.MaxConns,
 | 
							MaxConns:        params.MaxConns,
 | 
				
			||||||
		MaxIdleConns:    params.MaxIdleConns,
 | 
							MaxIdleConns:    params.MaxIdleConns,
 | 
				
			||||||
 | 
							Domains:         domains,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,6 +76,10 @@ func (this *UpdatePopupAction) RunGet(params struct {
 | 
				
			|||||||
		idleTimeout = types.Int(config.IdleTimeout.Count)
 | 
							idleTimeout = types.Int(config.IdleTimeout.Count)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(config.Domains) == 0 {
 | 
				
			||||||
 | 
							config.Domains = []string{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Data["origin"] = maps.Map{
 | 
						this.Data["origin"] = maps.Map{
 | 
				
			||||||
		"id":           config.Id,
 | 
							"id":           config.Id,
 | 
				
			||||||
		"protocol":     config.Addr.Protocol,
 | 
							"protocol":     config.Addr.Protocol,
 | 
				
			||||||
@@ -89,6 +93,7 @@ func (this *UpdatePopupAction) RunGet(params struct {
 | 
				
			|||||||
		"idleTimeout":  idleTimeout,
 | 
							"idleTimeout":  idleTimeout,
 | 
				
			||||||
		"maxConns":     config.MaxConns,
 | 
							"maxConns":     config.MaxConns,
 | 
				
			||||||
		"maxIdleConns": config.MaxIdleConns,
 | 
							"maxIdleConns": config.MaxIdleConns,
 | 
				
			||||||
 | 
							"domains":      config.Domains,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	this.Show()
 | 
						this.Show()
 | 
				
			||||||
@@ -110,6 +115,8 @@ func (this *UpdatePopupAction) RunPost(params struct {
 | 
				
			|||||||
	MaxIdleConns int32
 | 
						MaxIdleConns int32
 | 
				
			||||||
	IdleTimeout  int
 | 
						IdleTimeout  int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DomainsJSON []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Description string
 | 
						Description string
 | 
				
			||||||
	IsOn        bool
 | 
						IsOn        bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -175,6 +182,15 @@ func (this *UpdatePopupAction) RunPost(params struct {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var domains = []string{}
 | 
				
			||||||
 | 
						if len(params.DomainsJSON) > 0 {
 | 
				
			||||||
 | 
							err = json.Unmarshal(params.DomainsJSON, &domains)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								this.ErrorPage(err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{
 | 
						_, err = this.RPC().OriginRPC().UpdateOrigin(this.AdminContext(), &pb.UpdateOriginRequest{
 | 
				
			||||||
		OriginId: params.OriginId,
 | 
							OriginId: params.OriginId,
 | 
				
			||||||
		Name:     params.Name,
 | 
							Name:     params.Name,
 | 
				
			||||||
@@ -191,6 +207,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
 | 
				
			|||||||
		IdleTimeoutJSON: idleTimeoutJSON,
 | 
							IdleTimeoutJSON: idleTimeoutJSON,
 | 
				
			||||||
		MaxConns:        params.MaxConns,
 | 
							MaxConns:        params.MaxConns,
 | 
				
			||||||
		MaxIdleConns:    params.MaxIdleConns,
 | 
							MaxIdleConns:    params.MaxIdleConns,
 | 
				
			||||||
 | 
							Domains:         domains,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		this.ErrorPage(err)
 | 
							this.ErrorPage(err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,22 +53,30 @@ func (this *IndexAction) RunGet(params struct {
 | 
				
			|||||||
	primaryOriginMaps := []maps.Map{}
 | 
						primaryOriginMaps := []maps.Map{}
 | 
				
			||||||
	backupOriginMaps := []maps.Map{}
 | 
						backupOriginMaps := []maps.Map{}
 | 
				
			||||||
	for _, originConfig := range reverseProxy.PrimaryOrigins {
 | 
						for _, originConfig := range reverseProxy.PrimaryOrigins {
 | 
				
			||||||
 | 
							if len(originConfig.Domains) == 0 {
 | 
				
			||||||
 | 
								originConfig.Domains = []string{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		m := maps.Map{
 | 
							m := maps.Map{
 | 
				
			||||||
			"id":     originConfig.Id,
 | 
								"id":      originConfig.Id,
 | 
				
			||||||
			"weight": originConfig.Weight,
 | 
								"weight":  originConfig.Weight,
 | 
				
			||||||
			"addr":   originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
								"addr":    originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
				
			||||||
			"name":   originConfig.Name,
 | 
								"name":    originConfig.Name,
 | 
				
			||||||
			"isOn":   originConfig.IsOn,
 | 
								"isOn":    originConfig.IsOn,
 | 
				
			||||||
 | 
								"domains": originConfig.Domains,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		primaryOriginMaps = append(primaryOriginMaps, m)
 | 
							primaryOriginMaps = append(primaryOriginMaps, m)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for _, originConfig := range reverseProxy.BackupOrigins {
 | 
						for _, originConfig := range reverseProxy.BackupOrigins {
 | 
				
			||||||
 | 
							if len(originConfig.Domains) == 0 {
 | 
				
			||||||
 | 
								originConfig.Domains = []string{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		m := maps.Map{
 | 
							m := maps.Map{
 | 
				
			||||||
			"id":     originConfig.Id,
 | 
								"id":      originConfig.Id,
 | 
				
			||||||
			"weight": originConfig.Weight,
 | 
								"weight":  originConfig.Weight,
 | 
				
			||||||
			"addr":   originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
								"addr":    originConfig.Addr.Protocol.String() + "://" + originConfig.Addr.Host + ":" + originConfig.Addr.PortRange,
 | 
				
			||||||
			"name":   originConfig.Name,
 | 
								"name":    originConfig.Name,
 | 
				
			||||||
			"isOn":   originConfig.IsOn,
 | 
								"isOn":    originConfig.IsOn,
 | 
				
			||||||
 | 
								"domains": originConfig.Domains,
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		backupOriginMaps = append(backupOriginMaps, m)
 | 
							backupOriginMaps = append(backupOriginMaps, m)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										90
									
								
								web/public/js/components/server/domains-box.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								web/public/js/components/server/domains-box.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					// 域名列表
 | 
				
			||||||
 | 
					Vue.component("domains-box", {
 | 
				
			||||||
 | 
						props: ["v-domains"],
 | 
				
			||||||
 | 
						data: function () {
 | 
				
			||||||
 | 
							let domains = this.vDomains
 | 
				
			||||||
 | 
							if (domains == null) {
 | 
				
			||||||
 | 
								domains = []
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return {
 | 
				
			||||||
 | 
								domains: domains,
 | 
				
			||||||
 | 
								isAdding: false,
 | 
				
			||||||
 | 
								addingDomain: ""
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						methods: {
 | 
				
			||||||
 | 
							add: function () {
 | 
				
			||||||
 | 
								this.isAdding = true
 | 
				
			||||||
 | 
								let that = this
 | 
				
			||||||
 | 
								setTimeout(function () {
 | 
				
			||||||
 | 
									that.$refs.addingDomain.focus()
 | 
				
			||||||
 | 
								}, 100)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							confirm: function () {
 | 
				
			||||||
 | 
								let that = this
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// 删除其中的空格
 | 
				
			||||||
 | 
								this.addingDomain = this.addingDomain.replace(/\s/g, "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if (this.addingDomain.length == 0) {
 | 
				
			||||||
 | 
									teaweb.warn("请输入要添加的域名", function () {
 | 
				
			||||||
 | 
										that.$refs.addingDomain.focus()
 | 
				
			||||||
 | 
									})
 | 
				
			||||||
 | 
									return
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// 基本校验
 | 
				
			||||||
 | 
								if (this.addingDomain[0] == "~") {
 | 
				
			||||||
 | 
									let expr = this.addingDomain.substring(1)
 | 
				
			||||||
 | 
									try {
 | 
				
			||||||
 | 
										new RegExp(expr)
 | 
				
			||||||
 | 
									} catch (e) {
 | 
				
			||||||
 | 
										teaweb.warn("正则表达式错误:" + e.message, function () {
 | 
				
			||||||
 | 
											that.$refs.addingDomain.focus()
 | 
				
			||||||
 | 
										})
 | 
				
			||||||
 | 
										return
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								this.domains.push(this.addingDomain)
 | 
				
			||||||
 | 
								this.cancel()
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							remove: function (index) {
 | 
				
			||||||
 | 
								this.domains.$remove(index)
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							cancel: function () {
 | 
				
			||||||
 | 
								this.isAdding = false
 | 
				
			||||||
 | 
								this.addingDomain = ""
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						template: `<div>
 | 
				
			||||||
 | 
						<input type="hidden" name="domainsJSON" :value="JSON.stringify(domains)"/>
 | 
				
			||||||
 | 
						<div v-if="domains.length > 0">
 | 
				
			||||||
 | 
							<span class="ui label small basic" v-for="(domain, index) in domains">
 | 
				
			||||||
 | 
								<span v-if="domain.length > 0 && domain[0] == '~'" class="grey" style="font-style: normal">[正则]</span>
 | 
				
			||||||
 | 
								<span v-if="domain.length > 0 && domain[0] == '.'" class="grey" style="font-style: normal">[后缀]</span>
 | 
				
			||||||
 | 
								<span v-if="domain.length > 0 && domain[0] == '*'" class="grey" style="font-style: normal">[泛域名]</span>
 | 
				
			||||||
 | 
								{{domain}}
 | 
				
			||||||
 | 
								  <a href="" title="删除" @click.prevent="remove(index)"><i class="icon remove small"></i></a>
 | 
				
			||||||
 | 
							</span>
 | 
				
			||||||
 | 
							<div class="ui divider"></div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div v-if="isAdding">
 | 
				
			||||||
 | 
							<div class="ui fields">
 | 
				
			||||||
 | 
								<div class="ui field">
 | 
				
			||||||
 | 
									<input type="text" v-model="addingDomain" @keyup.enter="confirm()" @keypress.enter.prevent="1" ref="addingDomain" placeholder="*.xxx.com" size="30"/>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
								<div class="ui field">
 | 
				
			||||||
 | 
									<button class="ui button tiny" type="button" @click.prevent="confirm">确定</button>
 | 
				
			||||||
 | 
									  <a href="" title="取消" @click.prevent="cancel"><i class="icon remove small"></i></a>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							<p class="comment">支持普通域名(<code-label>example.com</code-label>)、泛域名(<code-label>*.example.com</code-label>)、域名后缀(以点号开头,如<code-label>.example.com</code-label>)和正则表达式(以波浪号开头,如<code-label>~.*.example.com</code-label>)。</p>
 | 
				
			||||||
 | 
							<div class="ui divider"></div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
						<div style="margin-top: 0.5em" v-if="!isAdding">
 | 
				
			||||||
 | 
							<button class="ui button tiny" type="button" @click.prevent="add">+</button>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div>`
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
@@ -9,7 +9,7 @@ Vue.component("origin-list-box", {
 | 
				
			|||||||
	methods: {
 | 
						methods: {
 | 
				
			||||||
		createPrimaryOrigin: function () {
 | 
							createPrimaryOrigin: function () {
 | 
				
			||||||
			teaweb.popup("/servers/server/settings/origins/addPopup?originType=primary&" + this.vParams, {
 | 
								teaweb.popup("/servers/server/settings/origins/addPopup?originType=primary&" + this.vParams, {
 | 
				
			||||||
				height: "24em",
 | 
									height: "27em",
 | 
				
			||||||
				callback: function (resp) {
 | 
									callback: function (resp) {
 | 
				
			||||||
					teaweb.success("保存成功", function () {
 | 
										teaweb.success("保存成功", function () {
 | 
				
			||||||
						window.location.reload()
 | 
											window.location.reload()
 | 
				
			||||||
@@ -19,7 +19,7 @@ Vue.component("origin-list-box", {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		createBackupOrigin: function () {
 | 
							createBackupOrigin: function () {
 | 
				
			||||||
			teaweb.popup("/servers/server/settings/origins/addPopup?originType=backup&" + this.vParams, {
 | 
								teaweb.popup("/servers/server/settings/origins/addPopup?originType=backup&" + this.vParams, {
 | 
				
			||||||
				height: "24em",
 | 
									height: "27em",
 | 
				
			||||||
				callback: function (resp) {
 | 
									callback: function (resp) {
 | 
				
			||||||
					teaweb.success("保存成功", function () {
 | 
										teaweb.success("保存成功", function () {
 | 
				
			||||||
						window.location.reload()
 | 
											window.location.reload()
 | 
				
			||||||
@@ -29,7 +29,7 @@ Vue.component("origin-list-box", {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		updateOrigin: function (originId, originType) {
 | 
							updateOrigin: function (originId, originType) {
 | 
				
			||||||
			teaweb.popup("/servers/server/settings/origins/updatePopup?originType=" + originType + "&" + this.vParams + "&originId=" + originId, {
 | 
								teaweb.popup("/servers/server/settings/origins/updatePopup?originType=" + originType + "&" + this.vParams + "&originId=" + originId, {
 | 
				
			||||||
				height: "24em",
 | 
									height: "27em",
 | 
				
			||||||
				callback: function (resp) {
 | 
									callback: function (resp) {
 | 
				
			||||||
					teaweb.success("保存成功", function () {
 | 
										teaweb.success("保存成功", function () {
 | 
				
			||||||
						window.location.reload()
 | 
											window.location.reload()
 | 
				
			||||||
@@ -89,6 +89,9 @@ Vue.component("origin-list-table", {
 | 
				
			|||||||
			<div v-if="origin.name.length > 0" style="margin-top: 0.5em">
 | 
								<div v-if="origin.name.length > 0" style="margin-top: 0.5em">
 | 
				
			||||||
				<tiny-basic-label>{{origin.name}}</tiny-basic-label>
 | 
									<tiny-basic-label>{{origin.name}}</tiny-basic-label>
 | 
				
			||||||
			</div>
 | 
								</div>
 | 
				
			||||||
 | 
								<div v-if="origin.domains != null && origin.domains.length > 0">
 | 
				
			||||||
 | 
									<grey-label v-for="domain in origin.domains">{{domain}}</grey-label>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
		</td>
 | 
							</td>
 | 
				
			||||||
		<td :class="{disabled:!origin.isOn}">{{origin.weight}}</td>
 | 
							<td :class="{disabled:!origin.isOn}">{{origin.weight}}</td>
 | 
				
			||||||
		<td>
 | 
							<td>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,17 +35,24 @@
 | 
				
			|||||||
                    源站服务器地址,通常是一个IP(或域名)加端口<span v-if="serverType == 'httpProxy'">,不需要加 http:// 或 https://</span>。</p>
 | 
					                    源站服务器地址,通常是一个IP(或域名)加端口<span v-if="serverType == 'httpProxy'">,不需要加 http:// 或 https://</span>。</p>
 | 
				
			||||||
			</td>
 | 
								</td>
 | 
				
			||||||
		</tr>
 | 
							</tr>
 | 
				
			||||||
		<tr>
 | 
					        <tr v-if="isHTTP">
 | 
				
			||||||
			<td>权重</td>
 | 
					            <td>专属域名</td>
 | 
				
			||||||
			<td>
 | 
					            <td>
 | 
				
			||||||
				<input type="text" name="weight" maxlength="4" value="10"  style="width:5em"/>
 | 
					                <domains-box></domains-box>
 | 
				
			||||||
				<p class="comment">数字越大,代表分配的请求比例越多。</p>
 | 
					                <p class="comment">需要指定域名生效的时候才需要添加。</p>
 | 
				
			||||||
			</td>
 | 
					            </td>
 | 
				
			||||||
		</tr>
 | 
					        </tr>
 | 
				
			||||||
		<tr>
 | 
							<tr>
 | 
				
			||||||
			<td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
								<td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
				
			||||||
		</tr>
 | 
							</tr>
 | 
				
			||||||
		<tbody v-show="moreOptionsVisible">
 | 
							<tbody v-show="moreOptionsVisible">
 | 
				
			||||||
 | 
					            <tr>
 | 
				
			||||||
 | 
					                <td>权重</td>
 | 
				
			||||||
 | 
					                <td>
 | 
				
			||||||
 | 
					                    <input type="text" name="weight" maxlength="4" value="10"  style="width:5em"/>
 | 
				
			||||||
 | 
					                    <p class="comment">数字越大,代表分配的请求比例越多。</p>
 | 
				
			||||||
 | 
					                </td>
 | 
				
			||||||
 | 
					            </tr>
 | 
				
			||||||
			<tr>
 | 
								<tr>
 | 
				
			||||||
				<td>名称</td>
 | 
									<td>名称</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,17 +36,24 @@
 | 
				
			|||||||
				<p class="comment"><span class="red" v-if="addrError.length > 0">{{addrError}}</span>源站服务器地址,通常是一个IP(或域名)加端口<span v-if="serverType == 'httpProxy'">,不需要加 http:// 或 https://</span>。</p>
 | 
									<p class="comment"><span class="red" v-if="addrError.length > 0">{{addrError}}</span>源站服务器地址,通常是一个IP(或域名)加端口<span v-if="serverType == 'httpProxy'">,不需要加 http:// 或 https://</span>。</p>
 | 
				
			||||||
			</td>
 | 
								</td>
 | 
				
			||||||
		</tr>
 | 
							</tr>
 | 
				
			||||||
		<tr>
 | 
					        <tr v-if="isHTTP">
 | 
				
			||||||
			<td>权重</td>
 | 
					            <td>专属域名</td>
 | 
				
			||||||
			<td>
 | 
					            <td>
 | 
				
			||||||
				<input type="text" name="weight" maxlength="4" v-model="origin.weight"  style="width:5em"/>
 | 
					                <domains-box :v-domains="origin.domains"></domains-box>
 | 
				
			||||||
				<p class="comment">数字越大,代表分配的请求比例越多。</p>
 | 
					                <p class="comment">需要指定域名生效的时候才需要添加。</p>
 | 
				
			||||||
			</td>
 | 
					            </td>
 | 
				
			||||||
		</tr>
 | 
					        </tr>
 | 
				
			||||||
		<tr>
 | 
							<tr>
 | 
				
			||||||
			<td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
								<td colspan="2"><more-options-indicator></more-options-indicator></td>
 | 
				
			||||||
		</tr>
 | 
							</tr>
 | 
				
			||||||
		<tbody v-show="moreOptionsVisible">
 | 
							<tbody v-show="moreOptionsVisible">
 | 
				
			||||||
 | 
					            <tr>
 | 
				
			||||||
 | 
					                <td>权重</td>
 | 
				
			||||||
 | 
					                <td>
 | 
				
			||||||
 | 
					                    <input type="text" name="weight" maxlength="4" v-model="origin.weight"  style="width:5em"/>
 | 
				
			||||||
 | 
					                    <p class="comment">数字越大,代表分配的请求比例越多。</p>
 | 
				
			||||||
 | 
					                </td>
 | 
				
			||||||
 | 
					            </tr>
 | 
				
			||||||
			<tr>
 | 
								<tr>
 | 
				
			||||||
				<td>名称</td>
 | 
									<td>名称</td>
 | 
				
			||||||
				<td>
 | 
									<td>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user