Index.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. <template>
  2. <div class="hello">
  3. <el-tabs type="border-card">
  4. <el-tab-pane label="LDAP">
  5. <el-form ref="form" label-width="150px">
  6. <el-form-item :label="$t('ldap_open_label')">
  7. <el-switch v-model="form.ldap_open"></el-switch>
  8. </el-form-item>
  9. <div>
  10. <el-form-item label="ldap host">
  11. <el-input
  12. v-model="form.ldap_form.host"
  13. class="form-el"
  14. ></el-input>
  15. </el-form-item>
  16. <el-form-item label="ldap port">
  17. <el-input
  18. v-model="form.ldap_form.port"
  19. style="width:90px"
  20. ></el-input>
  21. </el-form-item>
  22. <el-form-item label="ldap base dn ">
  23. <el-input
  24. v-model="form.ldap_form.base_dn"
  25. class="form-el"
  26. placeholder="例如 dc=showdoc,dc=com"
  27. ></el-input>
  28. </el-form-item>
  29. <el-form-item label="ldap bind dn ">
  30. <el-input
  31. v-model="form.ldap_form.bind_dn"
  32. class="form-el"
  33. placeholder="cn=admin,dc=showdoc,dc=com"
  34. ></el-input>
  35. </el-form-item>
  36. <el-form-item label="ldap bind password ">
  37. <el-input
  38. v-model="form.ldap_form.bind_password"
  39. class="form-el"
  40. placeholder="例如 123456"
  41. ></el-input>
  42. </el-form-item>
  43. <el-form-item label="ldap version">
  44. <el-select v-model="form.ldap_form.version" class="form-el">
  45. <el-option label="3" value="3"></el-option>
  46. <el-option label="2" value="2"></el-option>
  47. </el-select>
  48. </el-form-item>
  49. <el-form-item label="ldap user filed">
  50. <el-input
  51. v-model="form.ldap_form.user_field"
  52. class="form-el"
  53. placeholder="例如 cn 或者 sAMAccountName"
  54. ></el-input>
  55. </el-form-item>
  56. </div>
  57. <br />
  58. <el-form-item>
  59. <el-button type="primary" @click="saveLdapConfig">{{
  60. $t('save')
  61. }}</el-button>
  62. <el-button>{{ $t('cancel') }}</el-button>
  63. </el-form-item>
  64. </el-form>
  65. </el-tab-pane>
  66. <el-tab-pane label="OAuth2">
  67. <el-form ref="form" label-width="150px">
  68. <el-form-item :label="$t('enable_oauth')">
  69. <el-switch v-model="form.oauth2_open"></el-switch>
  70. </el-form-item>
  71. <el-form-item label="callback url">
  72. <el-input
  73. v-model="form.oauth2_form.redirectUri"
  74. class="form-el"
  75. ></el-input>
  76. </el-form-item>
  77. <el-form-item :label="$t('callback_eg')">
  78. http://{{
  79. $t('your_showdoc_server')
  80. }}/server/?s=/api/extLogin/oauth2
  81. </el-form-item>
  82. <div>
  83. <el-form-item :label="$t('入口文字提示')">
  84. <el-input
  85. v-model="form.oauth2_form.entrance_tips"
  86. placeholder=""
  87. class="form-el"
  88. ></el-input>
  89. <el-tooltip
  90. class="item"
  91. effect="dark"
  92. :content="$t('entrance_tips_content')"
  93. placement="top"
  94. >
  95. <i class="el-icon-question"></i>
  96. </el-tooltip>
  97. </el-form-item>
  98. <el-form-item label="Client id">
  99. <el-input
  100. v-model="form.oauth2_form.client_id"
  101. class="form-el"
  102. ></el-input>
  103. </el-form-item>
  104. <el-form-item label="Client secret">
  105. <el-input
  106. v-model="form.oauth2_form.client_secret"
  107. class="form-el"
  108. ></el-input>
  109. </el-form-item>
  110. <el-form-item label="Oauth host">
  111. <el-select
  112. v-model="form.oauth2_form.protocol"
  113. style="width:100px;"
  114. >
  115. <el-option label="http://" value="http"></el-option>
  116. <el-option label="https://" value="https"></el-option>
  117. </el-select>
  118. <el-input
  119. v-model="form.oauth2_form.host"
  120. class="form-el"
  121. placeholder="eg: sso.your-site.com"
  122. ></el-input>
  123. </el-form-item>
  124. <el-form-item label="Authorize path">
  125. <el-input
  126. v-model="form.oauth2_form.authorize_path"
  127. placeholder="eg: /oauth/v2/authorize"
  128. class="form-el"
  129. ></el-input>
  130. </el-form-item>
  131. <el-form-item label="AccessToken path">
  132. <el-input
  133. v-model="form.oauth2_form.token_path"
  134. placeholder="eg: /oauth/v2/token"
  135. class="form-el"
  136. ></el-input>
  137. </el-form-item>
  138. <el-form-item label="Resource path">
  139. <el-input
  140. v-model="form.oauth2_form.resource_path"
  141. placeholder="eg: /oauth/v2/resource"
  142. class="form-el"
  143. ></el-input>
  144. </el-form-item>
  145. <el-form-item label="User info path">
  146. <el-input
  147. v-model="form.oauth2_form.userinfo_path"
  148. placeholder="eg: /oauth/v2/me"
  149. class="form-el"
  150. ></el-input>
  151. <el-tooltip
  152. class="item"
  153. effect="dark"
  154. :content="$t('userinfo_path_content')"
  155. placement="top"
  156. >
  157. <i class="el-icon-question"></i>
  158. </el-tooltip>
  159. </el-form-item>
  160. </div>
  161. <br />
  162. <el-form-item>
  163. <el-button type="primary" @click="saveOauth2Config">{{
  164. $t('save')
  165. }}</el-button>
  166. <el-button>{{ $t('cancel') }}</el-button>
  167. </el-form-item>
  168. </el-form>
  169. </el-tab-pane>
  170. <el-tab-pane label="通用接入" v-if="lang == 'zh-cn'">
  171. <div style="min-height:600px;margin-top:50px;margin-left:30px;">
  172. <p>
  173. LoginSecretKey:&nbsp;
  174. <el-input
  175. readonly
  176. v-model="login_secret_key"
  177. class="form-el"
  178. ></el-input>
  179. <el-button @click="resetLoginSecretKey">{{
  180. $t('reset')
  181. }}</el-button>
  182. </p>
  183. <p>
  184. 通用接入提供的是一种自动登录showdoc的能力,需要自己根据文档开发集成。<a
  185. href="https://www.showdoc.com.cn/p/0fb2753c5a48acc7c3fbbb00f9504e6b"
  186. target="_blank"
  187. >点击这里查看文档</a
  188. >
  189. </p>
  190. </div>
  191. </el-tab-pane>
  192. </el-tabs>
  193. </div>
  194. </template>
  195. <style scoped>
  196. .form-el {
  197. width: 400px;
  198. }
  199. </style>
  200. <script>
  201. export default {
  202. data() {
  203. return {
  204. form: {
  205. ldap_open: false,
  206. ldap_form: {
  207. host: '',
  208. port: '389',
  209. version: '3',
  210. base_dn: '',
  211. bind_dn: '',
  212. bind_password: '',
  213. user_field: ''
  214. },
  215. oauth2_open: false,
  216. oauth2_form: {
  217. redirectUri: '',
  218. entrance_tips: '',
  219. client_id: '',
  220. client_secret: '',
  221. protocol: 'https',
  222. host: '',
  223. authorize_path: '',
  224. token_path: '',
  225. resource_path: '',
  226. userinfo_path: ''
  227. }
  228. },
  229. login_secret_key: '',
  230. itemList: [],
  231. lang: ''
  232. }
  233. },
  234. methods: {
  235. saveLdapConfig() {
  236. var url = DocConfig.server + '/api/adminSetting/saveLdapConfig'
  237. this.axios.post(url, this.form).then(response => {
  238. if (response.data.error_code === 0) {
  239. this.$alert(this.$t('success'))
  240. } else {
  241. this.$alert(response.data.error_message)
  242. }
  243. })
  244. },
  245. loadLdapConfig() {
  246. var url = DocConfig.server + '/api/adminSetting/loadLdapConfig'
  247. this.axios.post(url, this.form).then(response => {
  248. if (response.data.error_code === 0) {
  249. if (response.data.data.length === 0) {
  250. return
  251. }
  252. this.form.ldap_open = response.data.data.ldap_open > 0
  253. this.form.ldap_form = response.data.data.ldap_form
  254. ? response.data.data.ldap_form
  255. : this.form.ldap_form
  256. } else {
  257. this.$alert(response.data.error_message)
  258. }
  259. })
  260. },
  261. saveOauth2Config() {
  262. var url = DocConfig.server + '/api/adminSetting/saveOauth2Config'
  263. this.axios.post(url, this.form).then(response => {
  264. if (response.data.error_code === 0) {
  265. this.$alert(this.$t('success'))
  266. } else {
  267. this.$alert(response.data.error_message)
  268. }
  269. })
  270. },
  271. loadOauth2Config() {
  272. var url = DocConfig.server + '/api/adminSetting/loadOauth2Config'
  273. this.axios.post(url, this.form).then(response => {
  274. if (response.data.error_code === 0) {
  275. if (response.data.data.length === 0) {
  276. return
  277. }
  278. this.form.oauth2_open = response.data.data.oauth2_open > 0
  279. this.form.oauth2_form = response.data.data.oauth2_form
  280. ? response.data.data.oauth2_form
  281. : this.form.oauth2_form
  282. } else {
  283. this.$alert(response.data.error_message)
  284. }
  285. })
  286. },
  287. getLoginSecretKey() {
  288. this.request('/api/adminSetting/getLoginSecretKey', {}).then(data => {
  289. this.login_secret_key = data.data.login_secret_key
  290. })
  291. },
  292. resetLoginSecretKey() {
  293. this.$confirm(this.$t('confirm') + '?', ' ', {
  294. confirmButtonText: this.$t('confirm'),
  295. cancelButtonText: this.$t('cancel'),
  296. type: 'warning'
  297. }).then(() => {
  298. this.request('/api/adminSetting/resetLoginSecretKey', {}).then(data => {
  299. this.login_secret_key = data.data.login_secret_key
  300. })
  301. })
  302. }
  303. },
  304. mounted() {
  305. this.loadLdapConfig()
  306. this.loadOauth2Config()
  307. this.getLoginSecretKey()
  308. this.lang = DocConfig.lang
  309. },
  310. beforeDestroy() {
  311. this.$message.closeAll()
  312. }
  313. }
  314. </script>