Preference.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. <script setup lang="ts">
  2. import {useGettext} from 'vue3-gettext'
  3. import {reactive, ref} from 'vue'
  4. import FooterToolBar from '@/components/FooterToolbar/FooterToolBar.vue'
  5. import {useSettingsStore} from '@/pinia'
  6. import {dark_mode} from '@/lib/theme'
  7. import settings from '@/api/settings'
  8. import {message} from 'ant-design-vue'
  9. const {$gettext} = useGettext()
  10. const settingsStore = useSettingsStore()
  11. const theme = ref(settingsStore.theme)
  12. const data = ref({
  13. server: {
  14. http_port: 9000,
  15. run_mode: 'debug',
  16. jwt_secret: '',
  17. start_cmd: '',
  18. email: '',
  19. http_challenge_port: 9180,
  20. github_proxy: ''
  21. },
  22. nginx_log: {
  23. access_log_path: '',
  24. error_log_path: ''
  25. },
  26. openai: {
  27. model: '',
  28. base_url: '',
  29. proxy: '',
  30. token: ''
  31. }
  32. })
  33. settings.get().then(r => {
  34. data.value = r
  35. })
  36. function save() {
  37. settingsStore.set_theme(theme.value)
  38. settingsStore.set_preference_theme(theme.value)
  39. dark_mode(theme.value === 'dark')
  40. settings.save(data.value).then(r => {
  41. data.value = r
  42. message.success($gettext('Save successfully'))
  43. }).catch(e => {
  44. message.error(e?.message ?? $gettext('Server error'))
  45. })
  46. }
  47. </script>
  48. <template>
  49. <a-card :title="$gettext('Preference')">
  50. <div class="preference-container">
  51. <a-form layout="vertical">
  52. <h4>{{ $gettext('Basic') }}</h4>
  53. <a-form-item :label="$gettext('HTTP Port')">
  54. <p>{{ data.server.http_port }}</p>
  55. </a-form-item>
  56. <a-form-item :label="$gettext('Run Mode')">
  57. <p>{{ data.server.run_mode }}</p>
  58. </a-form-item>
  59. <a-form-item :label="$gettext('Jwt Secret')">
  60. <p>{{ data.server.jwt_secret }}</p>
  61. </a-form-item>
  62. <a-form-item :label="$gettext('Terminal Start Command')">
  63. <p>{{ data.server.start_cmd }}</p>
  64. </a-form-item>
  65. <a-form-item :label="$gettext('HTTP Challenge Port')">
  66. <a-input-number v-model:value="data.server.http_challenge_port"/>
  67. </a-form-item>
  68. <a-form-item :label="$gettext('Github Proxy')">
  69. <a-input v-model:value="data.server.github_proxy"
  70. :placeholder="$gettext('Chinese user: https://ghproxy.com/')"/>
  71. </a-form-item>
  72. <a-form-item :label="$gettext('Theme')">
  73. <a-select v-model:value="theme">
  74. <a-select-option value="auto">
  75. {{ $gettext('Auto') }}
  76. </a-select-option>
  77. <a-select-option value="light">
  78. {{ $gettext('Light') }}
  79. </a-select-option>
  80. <a-select-option value="dark">
  81. {{ $gettext('Dark') }}
  82. </a-select-option>
  83. </a-select>
  84. </a-form-item>
  85. <h4>{{ $gettext('Nginx Log') }}</h4>
  86. <a-form-item :label="$gettext('Nginx Access Log Path')">
  87. <a-input v-model:value="data.nginx_log.access_log_path"/>
  88. </a-form-item>
  89. <a-form-item :label="$gettext('Nginx Error Log Path')">
  90. <a-input v-model:value="data.nginx_log.error_log_path"/>
  91. </a-form-item>
  92. <h4>{{ $gettext('OpenAI') }}</h4>
  93. <a-form-item :label="$gettext('ChatGPT Model')">
  94. <a-select v-model:value="data.openai.model">
  95. <a-select-option value="gpt-4">
  96. {{ $gettext('GPT-4') }}
  97. </a-select-option>
  98. <a-select-option value="gpt-4-32k">
  99. {{ $gettext('GPT-4-32K') }}
  100. </a-select-option>
  101. <a-select-option value="gpt-3.5-turbo">
  102. {{ $gettext('GPT-3.5-Turbo') }}
  103. </a-select-option>
  104. </a-select>
  105. </a-form-item>
  106. <a-form-item :label="$gettext('API Base Url')">
  107. <a-input v-model:value="data.openai.base_url"
  108. :placeholder="$gettext('Leave blank for the default: https://api.openai.com/')"/>
  109. </a-form-item>
  110. <a-form-item :label="$gettext('API Proxy')">
  111. <a-input v-model:value="data.openai.proxy" placeholder="http://127.0.0.1:1087"/>
  112. </a-form-item>
  113. <a-form-item :label="$gettext('API Token')">
  114. <a-input-password v-model:value="data.openai.token"/>
  115. </a-form-item>
  116. </a-form>
  117. </div>
  118. <footer-tool-bar>
  119. <a-button type="primary" @click="save">
  120. {{ $gettext('Save') }}
  121. </a-button>
  122. </footer-tool-bar>
  123. </a-card>
  124. </template>
  125. <style lang="less" scoped>
  126. .preference-container {
  127. width: 100%;
  128. max-width: 600px;
  129. margin: 0 auto;
  130. padding: 0 10px;
  131. }
  132. </style>