1
0

routing.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. {{define "settings/xray/routing"}}
  2. <a-space direction="vertical" size="middle" class="routing-modern">
  3. <a-button type="primary" icon="plus" @click="addRule">{{ i18n
  4. "pages.xray.rules.add" }}</a-button>
  5. <a-table-sortable :columns="isMobile ? rulesMobileColumns : rulesColumns"
  6. :row-key="r => r.key"
  7. :data-source="routingRuleData"
  8. :scroll="{}"
  9. :pagination="false"
  10. :indent-size="0"
  11. class="routing-table"
  12. v-on:onSort="replaceRule">
  13. <template slot="action" slot-scope="text, rule, index">
  14. <div class="routing-action-cell">
  15. <a-table-sort-trigger :item-index="index"></a-table-sort-trigger>
  16. <span class="routing-index">[[ index+1 ]]</span>
  17. <a-dropdown :trigger="['click']">
  18. <a-button shape="circle" size="small" class="routing-action-btn"
  19. @click="e => e.preventDefault()">
  20. <a-icon type="more"></a-icon>
  21. </a-button>
  22. <a-menu slot="overlay" :theme="themeSwitcher.currentTheme">
  23. <a-menu-item @click="editRule(index)">
  24. <a-icon type="edit"></a-icon>
  25. <span>{{ i18n "edit" }}</span>
  26. </a-menu-item>
  27. <a-menu-item @click="deleteRule(index)">
  28. <span :style="{ color: '#FF4D4F' }">
  29. <a-icon type="delete"></a-icon>
  30. <span>{{ i18n "delete" }}</span>
  31. </span>
  32. </a-menu-item>
  33. </a-menu>
  34. </a-dropdown>
  35. </div>
  36. </template>
  37. <template slot="source" slot-scope="text, rule">
  38. <div class="criterion-flow">
  39. <a-tooltip v-if="rule.sourceIP"
  40. :title="'Source IP: ' + joinCsv(rule.sourceIP)"
  41. :overlay-class-name="themeSwitcher.currentTheme"
  42. :trigger="['hover', 'click']">
  43. <span class="criterion-row">
  44. <span class="criterion-label">IP</span>
  45. <span class="criterion-value">[[ csv(rule.sourceIP)[0] ]]</span>
  46. <span v-if="csv(rule.sourceIP).length > 1" class="criterion-more">+[[ csv(rule.sourceIP).length - 1 ]]</span>
  47. </span>
  48. </a-tooltip>
  49. <a-tooltip v-if="rule.sourcePort"
  50. :title="'Source Port: ' + joinCsv(rule.sourcePort)"
  51. :overlay-class-name="themeSwitcher.currentTheme"
  52. :trigger="['hover', 'click']">
  53. <span class="criterion-row">
  54. <span class="criterion-label">Port</span>
  55. <span class="criterion-value">[[ csv(rule.sourcePort)[0] ]]</span>
  56. <span v-if="csv(rule.sourcePort).length > 1" class="criterion-more">+[[ csv(rule.sourcePort).length - 1 ]]</span>
  57. </span>
  58. </a-tooltip>
  59. <a-tooltip v-if="rule.vlessRoute"
  60. :title="'VLESS Route: ' + joinCsv(rule.vlessRoute)"
  61. :overlay-class-name="themeSwitcher.currentTheme"
  62. :trigger="['hover', 'click']">
  63. <span class="criterion-row">
  64. <span class="criterion-label">VLESS</span>
  65. <span class="criterion-value">[[ csv(rule.vlessRoute)[0] ]]</span>
  66. <span v-if="csv(rule.vlessRoute).length > 1" class="criterion-more">+[[ csv(rule.vlessRoute).length - 1 ]]</span>
  67. </span>
  68. </a-tooltip>
  69. <span class="routing-criteria-empty"
  70. v-if="!rule.sourceIP && !rule.sourcePort && !rule.vlessRoute">—</span>
  71. </div>
  72. </template>
  73. <template slot="network" slot-scope="text, rule">
  74. <div class="criterion-flow">
  75. <a-tooltip v-if="rule.network"
  76. :title="'L4: ' + joinCsv(rule.network)"
  77. :overlay-class-name="themeSwitcher.currentTheme"
  78. :trigger="['hover', 'click']">
  79. <span class="criterion-row">
  80. <span class="criterion-label">L4</span>
  81. <span class="criterion-value">[[ csv(rule.network)[0] ]]</span>
  82. <span v-if="csv(rule.network).length > 1" class="criterion-more">+[[ csv(rule.network).length - 1 ]]</span>
  83. </span>
  84. </a-tooltip>
  85. <a-tooltip v-if="rule.protocol"
  86. :title="'Protocol: ' + joinCsv(rule.protocol)"
  87. :overlay-class-name="themeSwitcher.currentTheme"
  88. :trigger="['hover', 'click']">
  89. <span class="criterion-row">
  90. <span class="criterion-label">Protocol</span>
  91. <span class="criterion-value">[[ csv(rule.protocol)[0] ]]</span>
  92. <span v-if="csv(rule.protocol).length > 1" class="criterion-more">+[[ csv(rule.protocol).length - 1 ]]</span>
  93. </span>
  94. </a-tooltip>
  95. <a-tooltip v-if="rule.attrs"
  96. :title="'Attrs: ' + joinCsv(rule.attrs)"
  97. :overlay-class-name="themeSwitcher.currentTheme"
  98. :trigger="['hover', 'click']">
  99. <span class="criterion-row">
  100. <span class="criterion-label">Attrs</span>
  101. <span class="criterion-value">[[ csv(rule.attrs)[0] ]]</span>
  102. <span v-if="csv(rule.attrs).length > 1" class="criterion-more">+[[ csv(rule.attrs).length - 1 ]]</span>
  103. </span>
  104. </a-tooltip>
  105. <span class="routing-criteria-empty"
  106. v-if="!rule.network && !rule.protocol && !rule.attrs">—</span>
  107. </div>
  108. </template>
  109. <template slot="destination" slot-scope="text, rule">
  110. <div class="criterion-flow">
  111. <a-tooltip v-if="rule.ip"
  112. :title="'Destination IP: ' + joinCsv(rule.ip)"
  113. :overlay-class-name="themeSwitcher.currentTheme"
  114. :trigger="['hover', 'click']">
  115. <span class="criterion-row">
  116. <span class="criterion-label">IP</span>
  117. <span class="criterion-value">[[ csv(rule.ip)[0] ]]</span>
  118. <span v-if="csv(rule.ip).length > 1" class="criterion-more">+[[ csv(rule.ip).length - 1 ]]</span>
  119. </span>
  120. </a-tooltip>
  121. <a-tooltip v-if="rule.domain"
  122. :title="'Domain: ' + joinCsv(rule.domain)"
  123. :overlay-class-name="themeSwitcher.currentTheme"
  124. :trigger="['hover', 'click']">
  125. <span class="criterion-row">
  126. <span class="criterion-label">Domain</span>
  127. <span class="criterion-value">[[ csv(rule.domain)[0] ]]</span>
  128. <span v-if="csv(rule.domain).length > 1" class="criterion-more">+[[ csv(rule.domain).length - 1 ]]</span>
  129. </span>
  130. </a-tooltip>
  131. <a-tooltip v-if="rule.port"
  132. :title="'Destination Port: ' + joinCsv(rule.port)"
  133. :overlay-class-name="themeSwitcher.currentTheme"
  134. :trigger="['hover', 'click']">
  135. <span class="criterion-row">
  136. <span class="criterion-label">Port</span>
  137. <span class="criterion-value">[[ csv(rule.port)[0] ]]</span>
  138. <span v-if="csv(rule.port).length > 1" class="criterion-more">+[[ csv(rule.port).length - 1 ]]</span>
  139. </span>
  140. </a-tooltip>
  141. <span class="routing-criteria-empty"
  142. v-if="!rule.ip && !rule.domain && !rule.port">—</span>
  143. </div>
  144. </template>
  145. <template slot="inbound" slot-scope="text, rule">
  146. <div class="criterion-flow">
  147. <a-tooltip v-if="rule.inboundTag"
  148. :title="'Inbound Tag: ' + joinCsv(rule.inboundTag)"
  149. :overlay-class-name="themeSwitcher.currentTheme"
  150. :trigger="['hover', 'click']">
  151. <span class="criterion-row">
  152. <span class="criterion-label">Tag</span>
  153. <span class="criterion-value">[[ csv(rule.inboundTag)[0] ]]</span>
  154. <span v-if="csv(rule.inboundTag).length > 1" class="criterion-more">+[[ csv(rule.inboundTag).length - 1 ]]</span>
  155. </span>
  156. </a-tooltip>
  157. <a-tooltip v-if="rule.user"
  158. :title="'Client: ' + joinCsv(rule.user)"
  159. :overlay-class-name="themeSwitcher.currentTheme"
  160. :trigger="['hover', 'click']">
  161. <span class="criterion-row">
  162. <span class="criterion-label">User</span>
  163. <span class="criterion-value">[[ csv(rule.user)[0] ]]</span>
  164. <span v-if="csv(rule.user).length > 1" class="criterion-more">+[[ csv(rule.user).length - 1 ]]</span>
  165. </span>
  166. </a-tooltip>
  167. <span class="routing-criteria-empty"
  168. v-if="!rule.inboundTag && !rule.user">—</span>
  169. </div>
  170. </template>
  171. <template slot="target" slot-scope="text, rule">
  172. <div class="routing-target-cell">
  173. <div class="routing-target-row" v-if="rule.outboundTag">
  174. <a-icon type="export" class="routing-target-icon"></a-icon>
  175. <span class="outbound-pill tone-emerald">[[ rule.outboundTag ]]</span>
  176. </div>
  177. <div class="routing-target-row" v-if="rule.balancerTag">
  178. <a-icon type="cluster" class="routing-target-icon"></a-icon>
  179. <span class="outbound-pill tone-violet">[[ rule.balancerTag ]]</span>
  180. </div>
  181. <span class="routing-criteria-empty"
  182. v-if="!rule.outboundTag && !rule.balancerTag">—</span>
  183. </div>
  184. </template>
  185. </a-table-sortable>
  186. </a-space>
  187. {{end}}