4 Commits

Author SHA1 Message Date
f7cc822441 Merge pull request 'feature/lishaohua' (#2) from feature/lishaohua into main
Reviewed-on: #2
2025-12-22 01:43:16 +08:00
kongbeiwu
e07ad476dd Merge branch 'main' of https://git.nianxx.cn/duanshuwen/zn-ai into feature/lishaohua
# Conflicts:
#	package-lock.json
#	src/renderer/router/index.ts
2025-12-22 01:41:31 +08:00
kongbeiwu
f134659a67 feat: 知识库开发 2025-12-22 01:24:59 +08:00
kongbeiwu
021b09768a feat: 修改内容 2025-12-22 00:03:31 +08:00
9 changed files with 840 additions and 116 deletions

776
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,7 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^24.0.8", "@types/node": "^24.0.8",
"@typescript-eslint/parser": "^5.62.0", "@typescript-eslint/parser": "^5.62.0",
"@vitejs/plugin-vue": "^5.2.4", "@vitejs/plugin-vue": "^6.0.3",
"electron": "38.2.2", "electron": "38.2.2",
"openapi-ts-request": "^1.10.1", "openapi-ts-request": "^1.10.1",
"tailwindcss": "^4.1.11", "tailwindcss": "^4.1.11",
@@ -56,6 +56,7 @@
"bytenode": "^1.5.7", "bytenode": "^1.5.7",
"crypto": "^1.0.1", "crypto": "^1.0.1",
"dexie": "^4.2.1", "dexie": "^4.2.1",
"dotenv": "^17.2.3",
"dotenv-cli": "^11.0.0", "dotenv-cli": "^11.0.0",
"electron-log": "^5.4.3", "electron-log": "^5.4.3",
"electron-squirrel-startup": "^1.0.1", "electron-squirrel-startup": "^1.0.1",

View File

@@ -1,18 +1,26 @@
<!--
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-21 23:02:06
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 00:34:30
* @FilePath: /project/zn-ai/src/renderer/components/TaskList/Card.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template> <template>
<div v-for="item in task" :key="item.id" <div v-for="item in task" :key="item.id"
class="border border-solid border-[#E5E8EE] rounded-[12px] p-[12px] mb-[12px] task"> class="border border-solid border-[#E5E8EE] rounded-[12px] p-[12px] mb-[12px] task">
<div class="flex items-center pb-[12px]" style="border-bottom: 1px dashed #E5E8EE;"> <div class="flex items-center pb-[12px]" style="border-bottom: 1px dashed #E5E8EE;">
<img class="w-[24px] h-[24px] rounded-[8px]] mr-[4px]" src="@assets/images/task/xc.png" /> <img class="w-[24px] h-[24px] rounded-[8px]] mr-[4px]" src="@assets/images/task/xc.png" />
<div class="text-[16px] text-[#171717] font-bold mr-[8px]">{{ item.name }}</div> <div class="text-[16px] text-[#171717] font-bold mr-[8px]">{{ item.name }}</div>
<div class="pl-[8px] pr-[8px] bg-[#FFC0C5] text-[12px] text-[#681219] font-bold rounded-[100px]">{{ <div class="pl-[8px] pr-[8px] text-[12px] rounded-[100px]" :class="item.statusColor">{{
item.statusText }}</div> item.statusText }}</div>
</div> </div>
<div class="flex items-center mt-[12px]"> <div class="flex items-center mt-[12px]">
<component :is="item.desIcon" :color="item.color" class="w-[15px] mr-[4px]" /> <component :is="item.desIcon" :color="item.color" class="w-[15px] mr-[4px]" />
<div class="text-[#FB3748] text-[14px]">{{ item.des }}</div> <div class="text-[14px]" :class="`text-[${item.color}]`" :style="{ color: item.color }">{{ item.des }}</div>
</div> </div>
<div v-if="item.button" class="mt-[24px]"> <div class="mt-[24px]">
<button class="w-[100%] h-[40px] bg-[#2B7FFF] text-white text-[14px] font-bold rounded-[12px]">登录</button> <button class="w-[100%] h-[40px] bg-[#2B7FFF] text-white text-[14px] rounded-[12px]">{{ item.statusColor !== 'error' ? '查看' : '处理' }}</button>
</div> </div>
</div> </div>
</template> </template>
@@ -28,6 +36,18 @@ import { task } from '@constant/task'
z-index: 1; z-index: 1;
transition: all .2s linear; transition: all .2s linear;
} }
.task .success {
background-color: #E0FAEC;
color: #1FC16B;
}
.task .error {
background-color: #FFEBEC;
color: #FB3748;
}
.task .warning {
background-color: #FFF3EB;
color: #FA7319;
}
.task:hover { .task:hover {
z-index: 2; z-index: 2;

View File

@@ -1,4 +1,12 @@
import { RiHomeLine, RiFileListLine, RiHotelLine, RiChatQuoteLine, RiBarChartBoxAiLine, RiMoreLine, RiSettingsLine } from '@remixicon/vue' /*
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-21 23:02:06
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 00:42:49
* @FilePath: /project/zn-ai/src/renderer/constant/menus.ts
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { RiHomeLine, RiFileEditLine, RiFileListLine, RiHotelLine, RiChatQuoteLine, RiBarChartBoxAiLine, RiMoreLine, RiSettingsLine } from '@remixicon/vue'
// 菜单列表申明 // 菜单列表申明
export interface MenuItem { export interface MenuItem {
@@ -18,6 +26,14 @@ export const menus: MenuItem[] = [
color: '#525866', color: '#525866',
activeColor: '#2B7FFF', activeColor: '#2B7FFF',
url: '/home', url: '/home',
},
{
id: 8,
name: '知识库',
icon: RiFileEditLine,
color: '#525866',
activeColor: '#2B7FFF',
url: '/knowledge',
}, },
{ {
id: 2, id: 2,

View File

@@ -1,3 +1,11 @@
/*
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-21 23:02:06
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 00:30:49
* @FilePath: /project/zn-ai/src/renderer/constant/task.ts
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { RiErrorWarningFill } from '@remixicon/vue' import { RiErrorWarningFill } from '@remixicon/vue'
// 菜单列表申明 // 菜单列表申明
@@ -9,6 +17,7 @@ export interface MenuItem {
color: string color: string
des: string, des: string,
statusText: string, statusText: string,
statusColor: string,
button: Boolean, button: Boolean,
type: number type: number
} }
@@ -16,45 +25,49 @@ export interface MenuItem {
export const task: MenuItem[] = [ export const task: MenuItem[] = [
{ {
id: 1, id: 1,
name: '登录过期', name: '每日销售数据',
icon: '@assets/images/task/xc.png', icon: '@assets/images/task/xc.png',
desIcon: RiErrorWarningFill, desIcon: RiErrorWarningFill,
color: '#FB3748', color: '#FA7319',
des: '登录已过期', des: '任务执行中,请勿关闭浏览器',
statusText: '过期', statusText: '任务执行中',
statusColor: 'warning',
button: true, button: true,
type: 1, type: 1,
}, },
{ {
id: 2, id: 2,
name: '登录失败', name: '每日销售数据',
icon: '@assets/images/task/xc.png', icon: '@assets/images/task/xc.png',
desIcon: RiErrorWarningFill, desIcon: RiErrorWarningFill,
color: '#FB3748', color: '#FB3748',
des: '请重新登录', des: '登录已过期',
statusText: '失败', statusText: '任务执行失败',
statusColor: 'error',
button: true, button: true,
type: 1, type: 1,
}, },
{ {
id: 3, id: 3,
name: '评价回复异常', name: '每日销售数据',
icon: '@assets/images/task/xc.png', icon: '@assets/images/task/xc.png',
desIcon: RiErrorWarningFill, desIcon: RiErrorWarningFill,
color: '#FB3748', color: '#1FC16B',
des: 'xxxxx接口报错', des: '任务执行成功',
statusText: '失败', statusText: '任务执行成功',
statusColor: 'success',
button: false, button: false,
type: 2, type: 2,
}, },
{ {
id: 4, id: 4,
name: '库存同步异常', name: '每日销售数据',
icon: '@assets/images/task/xc.png', icon: '@assets/images/task/xc.png',
desIcon: RiErrorWarningFill, desIcon: RiErrorWarningFill,
color: '#FB3748', color: '#FB3748',
des: 'xxxxx接口报错', des: '登录已过期',
statusText: '同步失败', statusText: '任务执行失败',
statusColor: 'error',
button: false, button: false,
type: 2, type: 2,
}, },

View File

@@ -1,3 +1,11 @@
/*
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-22 01:28:13
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 01:31:48
* @FilePath: /project/zn-ai/src/renderer/router/index.ts
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { createRouter, createMemoryHistory } from "vue-router"; import { createRouter, createMemoryHistory } from "vue-router";
const routes = [ const routes = [

View File

@@ -0,0 +1,18 @@
<!--
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-22 01:11:57
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 01:20:51
* @FilePath: /project/zn-ai/src/renderer/views/knowledge/components/EventManagement/index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div>事件管理11</div>
</template>
<script setup lang="ts">
</script>
<style lang="less" scoped>
</style>

View File

@@ -0,0 +1,18 @@
<!--
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-22 01:11:57
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 01:24:19
* @FilePath: /project/zn-ai/src/renderer/views/knowledge/components/EventManagement/index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div>房型管理22</div>
</template>
<script setup lang="ts">
</script>
<style lang="less" scoped>
</style>

View File

@@ -0,0 +1,46 @@
<!--
* @Author: kongbeiwu lishaohua-520@qq.com
* @Date: 2025-12-21 23:02:06
* @LastEditors: kongbeiwu lishaohua-520@qq.com
* @LastEditTime: 2025-12-22 01:24:00
* @FilePath: /project/zn-ai/src/renderer/views/knowledge/index.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<div class="bg-white box-border w-full h-full rounded-[16px] p-[20px]">
<TitleSection title="知识库管理" desc="内容管理" />
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="事件管理" name="first">
<EventManager />
</el-tab-pane>
<el-tab-pane label="房型管理" name="second">
<RoomTypeManager />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup lang="ts" name="Knowledge">
import TitleSection from '@renderer/components/TitleSection/index.vue'
import EventManager from './components/EventManager/index.vue'
import RoomTypeManager from './components/RoomTypeManager/index.vue'
import { ref } from 'vue';
import type { TabsPaneContext } from 'element-plus';
const activeName = ref('first');
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
};
</script>
<style scoped>
:deep(.el-tabs__item) {
color: #99A0AE;
}
:deep(.el-tabs__item.is-active) {
color: #2B7FFF;
}
:deep(.el-tabs__active-bar) {
background-color: #2B7FFF;
}
</style>