diff --git a/app.example.ini b/app.example.ini index 95a3dcc1..f78f3399 100644 --- a/app.example.ini +++ b/app.example.ini @@ -14,3 +14,9 @@ NginxConfigDir = [nginx_log] AccessLogPath = /var/log/nginx/access.log ErrorLogPath = /var/log/nginx/error.log + +[openai] +Model = +BaseUrl = +Proxy = +Token = diff --git a/frontend/components.d.ts b/frontend/components.d.ts index c592fc84..df534f58 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -16,6 +16,7 @@ declare module '@vue/runtime-core' { ACol: typeof import('ant-design-vue/es')['Col'] ACollapse: typeof import('ant-design-vue/es')['Collapse'] ACollapsePanel: typeof import('ant-design-vue/es')['CollapsePanel'] + AComment: typeof import('ant-design-vue/es')['Comment'] AConfigProvider: typeof import('ant-design-vue/es')['ConfigProvider'] ADivider: typeof import('ant-design-vue/es')['Divider'] ADrawer: typeof import('ant-design-vue/es')['Drawer'] @@ -55,9 +56,11 @@ declare module '@vue/runtime-core' { ATabs: typeof import('ant-design-vue/es')['Tabs'] ATag: typeof import('ant-design-vue/es')['Tag'] ATextarea: typeof import('ant-design-vue/es')['Textarea'] + ATooltip: typeof import('ant-design-vue/es')['Tooltip'] BreadcrumbBreadcrumb: typeof import('./src/components/Breadcrumb/Breadcrumb.vue')['default'] ChartAreaChart: typeof import('./src/components/Chart/AreaChart.vue')['default'] ChartRadialBarChart: typeof import('./src/components/Chart/RadialBarChart.vue')['default'] + ChatGPTChatGPT: typeof import('./src/components/ChatGPT/ChatGPT.vue')['default'] CodeEditorCodeEditor: typeof import('./src/components/CodeEditor/CodeEditor.vue')['default'] FooterToolbarFooterToolBar: typeof import('./src/components/FooterToolbar/FooterToolBar.vue')['default'] LogoLogo: typeof import('./src/components/Logo/Logo.vue')['default'] diff --git a/frontend/package.json b/frontend/package.json index c6a999b7..3c6cad15 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,6 +20,7 @@ "apexcharts": "^3.36.3", "axios": "^1.2.2", "dayjs": "^1.11.7", + "highlight.js": "^11.7.0", "marked": "^4.2.5", "nprogress": "^0.2.0", "pinia": "^2.0.28", diff --git a/frontend/src/api/openai.ts b/frontend/src/api/openai.ts new file mode 100644 index 00000000..ea3e24ea --- /dev/null +++ b/frontend/src/api/openai.ts @@ -0,0 +1,9 @@ +import http from '@/lib/http' + +const openai = { + store_record(data: any) { + return http.post('/chat_gpt_record', data) + } +} + +export default openai diff --git a/frontend/src/components/ChatGPT/ChatGPT.vue b/frontend/src/components/ChatGPT/ChatGPT.vue new file mode 100644 index 00000000..da133226 --- /dev/null +++ b/frontend/src/components/ChatGPT/ChatGPT.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/frontend/src/views/domain/DomainEdit.vue b/frontend/src/views/domain/DomainEdit.vue index 564a7ddb..87ceb2d6 100644 --- a/frontend/src/views/domain/DomainEdit.vue +++ b/frontend/src/views/domain/DomainEdit.vue @@ -10,6 +10,7 @@ import domain from '@/api/domain' import ngx from '@/api/ngx' import {message} from 'ant-design-vue' import config from '@/api/config' +import ChatGPT from '@/components/ChatGPT/ChatGPT.vue' const {$gettext, interpolate} = useGettext() @@ -52,6 +53,7 @@ const advance_mode = computed({ advance_mode_ref.value = v } }) +const history_chatgpt_record = ref([]) function handle_response(r: any) { @@ -64,6 +66,7 @@ function handle_response(r: any) { configText.value = r.config enabled.value = r.enabled auto_cert.value = r.auto_cert + history_chatgpt_record.value = r.chatgpt_messages Object.assign(ngx_config, r.tokenized) Object.assign(cert_info_map, r.cert_info) } @@ -73,6 +76,8 @@ function init() { domain.get(name.value).then((r: any) => { handle_response(r) }).catch(handle_parse_error) + } else { + history_chatgpt_record.value = [] } } @@ -159,65 +164,71 @@ function on_change_enabled(checked: boolean) { }