feat(mock): 开发环境下启用 mock 数据
- 在 package.json 中添加 mockjs 依赖 - 新增 chatModes.json 文件,定义聊天模式配置 - 修改 main.js,引入 mock 模块 - 新增 mock 目录,实现模拟数据接口 - 更新 store/chat.js,调整聊天模式数据 - 在 vite.config.js 中添加 mock 环境变量
This commit is contained in:
parent
80defc98d8
commit
5269716d84
|
@ -48,10 +48,11 @@
|
|||
"vue-router": "^4.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"@types/node": "^20.11.19",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"@vue/compiler-sfc": "^3.4.21",
|
||||
"autoprefixer": "^10.4.17",
|
||||
"mockjs": "^1.1.0",
|
||||
"postcss": "^8.4.35",
|
||||
"postcss-import": "^16.0.1",
|
||||
"postcss-preset-env": "^9.3.0",
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"training": {
|
||||
"name": "寿险代理人AI陪练",
|
||||
"icon": "👨💼",
|
||||
"token": "app-88ae2GN49aUyNO6qGg7tbTfX",
|
||||
"background": "# 客户信息\n### **基础背景与性格设定** \n**姓名**:刘勇 \n**年龄**:34 岁 \n**职业**:腾讯员工 \n**家庭**:妻子为全职太太,女儿 9 岁,双方父母健在 \n**性格**:冷静、理性、务实,偏好客观数据和逻辑分析,对保险持观望态度,防备心较强 \n**近期状态**: \n- 体检显示中度脂肪肝,担心投保问题 \n- 已为全家配置百万医疗险,妻子有重疾险,但认为保障不足 (保费 50W)\n- 对理财型保险收益不认可,但对补充重疾险有潜在需求 ",
|
||||
"chatBackground": "通过尚先生介绍,你和他的老同学在他的家里首次面谈。他的家中布置简洁,茶几上摆放着一套茶具。"
|
||||
},
|
||||
"quote_objection": {
|
||||
"name": "报价中异议",
|
||||
"icon": "💬",
|
||||
"token": "app-ur2Altw2LHR6niX8Q1S7Cn41",
|
||||
"background": "# 客户信息\n### **基础背景与性格设定** \n**姓名**: 王大牛\n**年龄**: 40岁\n**职业**: 私营企业主\n**车牌号**: 闽C12345\n**车辆信息**:拥有一辆行驶4年的大众途观L,购买价格约25万,主要用于商务出行及家庭使用。\n**投保信息**:在其他保司购买交强险及商业险(三者险、车损险),还有1个月到期。有过一次轻微追尾事故,已通过保司处理。王先生对成本控制非常敏感,但也能意识到保险的重要性。他希望得到保障全面、价格合理的产品和优质的服务。",
|
||||
"chatBackground": "现在你将扮演坐席专员,与系统扮演的客户针对报价中的各类异议开展对练,着重训练处理\"报价中异议\"的能力。按照\"保全保足\"原则给出险种推荐方案。"
|
||||
},
|
||||
"post_quote_objection": {
|
||||
"name": "报价后异议",
|
||||
"icon": "💰",
|
||||
"token": "app-Yiccl0JoXs2QF2lkHxO6f822",
|
||||
"background": "# 客户信息\n### **基础背景与性格设定** \n**姓名**: 张灵女士\n**年龄**: 32岁\n**职业**: 公司行政主管\n**车牌号**: 粤B56789\n**车辆信息**:拥有一辆行驶4年多的本田思域,1.5T,CVT燃动版,购买价格约15万,用于日常通勤及周末短途出行。\n**投保信息**:在其他保司购买交强险及商业险(三者险、车损险、不计免赔险、车上人员责任险),还有2个月到期。无事故记录,仅有两次违章停车记录。张女士注重性价比和服务质量,希望保险的保障全面、价格合理、服务贴心。",
|
||||
"chatBackground": "现在你将扮演坐席专员,与系统扮演的客户针对报价后的各类异议开展对练,着重训练处理\"报价后异议\"的能力。按照\"保全保足\"原则给出险种推荐方案。"
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
import { sseRequest } from '@/utils/request'
|
||||
import { sseRequest, httpRequest } from '@/utils/request'
|
||||
|
||||
export function sendMessage(data, token) {
|
||||
return sseRequest({
|
||||
|
@ -8,4 +8,11 @@ export function sendMessage(data, token) {
|
|||
'Authorization': `Bearer ${token}`
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
export function getChatModes() {
|
||||
return httpRequest({
|
||||
url: '/api/v1/chat-modes',
|
||||
method: 'POST',
|
||||
})
|
||||
}
|
||||
|
|
|
@ -13,6 +13,11 @@ import { setTheme } from '@/styles/theme'; // Import setTheme
|
|||
import ElementPlus from 'element-plus'
|
||||
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
||||
|
||||
// 在开发环境下引入mock
|
||||
// if (import.meta.env.VITE_APP_MOCK === 'true') {
|
||||
import('@/mock')
|
||||
// }
|
||||
|
||||
const pinia = createPinia();
|
||||
pinia.use(piniaPluginPersistedstate)
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
import Mock from 'mockjs'
|
||||
|
||||
// 设置延迟时间
|
||||
Mock.setup({
|
||||
timeout: '200-600'
|
||||
})
|
||||
|
||||
// 自动导入所有mock文件
|
||||
const modules = import.meta.glob('./modules/*.js', { eager: true })
|
||||
|
||||
// 注册所有mock模块
|
||||
Object.values(modules).forEach(module => {
|
||||
if (module.default) {
|
||||
module.default(Mock)
|
||||
}
|
||||
})
|
||||
|
||||
export default Mock
|
|
@ -0,0 +1,8 @@
|
|||
export default function (Mock) {
|
||||
// 获取聊天模式配置
|
||||
Mock.mock(/\/api\/chat\/modes/, 'get', {
|
||||
'code': 200,
|
||||
'message': 'success',
|
||||
'data': '/data/chatModes.json'
|
||||
})
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
export default function (Mock) {
|
||||
// 用户列表
|
||||
Mock.mock(/\/api\/users/, 'get', {
|
||||
'code': 200,
|
||||
'message': 'success',
|
||||
'data|10': [{
|
||||
'id|+1': 1,
|
||||
'name': '@cname',
|
||||
'age|18-60': 1,
|
||||
'gender|1': ['男', '女'],
|
||||
'email': '@email',
|
||||
'phone': /^1[3-9]\d{9}$/,
|
||||
'address': '@county(true)',
|
||||
'createTime': '@datetime'
|
||||
}]
|
||||
})
|
||||
|
||||
// 用户详情
|
||||
Mock.mock(/\/api\/users\/\d+/, 'get', {
|
||||
'code': 200,
|
||||
'message': 'success',
|
||||
'data': {
|
||||
'id|+1': 1,
|
||||
'name': '@cname',
|
||||
'age|18-60': 1,
|
||||
'gender|1': ['男', '女'],
|
||||
'email': '@email',
|
||||
'phone': /^1[3-9]\d{9}$/,
|
||||
'address': '@county(true)',
|
||||
'createTime': '@datetime'
|
||||
}
|
||||
})
|
||||
|
||||
// 创建用户
|
||||
Mock.mock(/\/api\/users/, 'post', {
|
||||
'code': 200,
|
||||
'message': 'success',
|
||||
'data': {
|
||||
'id': '@id',
|
||||
'createTime': '@datetime'
|
||||
}
|
||||
})
|
||||
|
||||
// 更新用户
|
||||
Mock.mock(/\/api\/users\/\d+/, 'put', {
|
||||
'code': 200,
|
||||
'message': 'success'
|
||||
})
|
||||
|
||||
// 删除用户
|
||||
Mock.mock(/\/api\/users\/\d+/, 'delete', {
|
||||
'code': 200,
|
||||
'message': 'success'
|
||||
})
|
||||
}
|
|
@ -8,7 +8,7 @@ const chatModes = {
|
|||
token: 'app-88ae2GN49aUyNO6qGg7tbTfX',
|
||||
background: `# 客户信息
|
||||
### **基础背景与性格设定**
|
||||
**姓名**:张伟
|
||||
**姓名**:刘勇
|
||||
**年龄**:34 岁
|
||||
**职业**:腾讯员工
|
||||
**家庭**:妻子为全职太太,女儿 9 岁,双方父母健在
|
||||
|
@ -17,7 +17,7 @@ const chatModes = {
|
|||
- 体检显示中度脂肪肝,担心投保问题
|
||||
- 已为全家配置百万医疗险,妻子有重疾险,但认为保障不足 (保费 50W)
|
||||
- 对理财型保险收益不认可,但对补充重疾险有潜在需求 `,
|
||||
chatBackground: '通过顾先生介绍,你和他的老同学在他的家里首次面谈。他的家中布置简洁,茶几上摆放着一套茶具。',
|
||||
chatBackground: '通过尚先生介绍,你和他的老同学在他的家里首次面谈。他的家中布置简洁,茶几上摆放着一套茶具。',
|
||||
},
|
||||
quote_objection: {
|
||||
name: '报价中异议',
|
||||
|
@ -25,7 +25,7 @@ const chatModes = {
|
|||
token: 'app-ur2Altw2LHR6niX8Q1S7Cn41',
|
||||
background: `# 客户信息
|
||||
### **基础背景与性格设定**
|
||||
**姓名**: 王力
|
||||
**姓名**: 王大牛
|
||||
**年龄**: 40岁
|
||||
**职业**: 私营企业主
|
||||
**车牌号**: 闽C12345
|
||||
|
@ -39,7 +39,7 @@ const chatModes = {
|
|||
token: 'app-Yiccl0JoXs2QF2lkHxO6f822',
|
||||
background: `# 客户信息
|
||||
### **基础背景与性格设定**
|
||||
**姓名**: 张琳女士
|
||||
**姓名**: 张灵女士
|
||||
**年龄**: 32岁
|
||||
**职业**: 公司行政主管
|
||||
**车牌号**: 粤B56789
|
||||
|
|
|
@ -127,4 +127,46 @@ export const sseRequest = (config) => {
|
|||
})
|
||||
}
|
||||
|
||||
// 常规HTTP请求方法
|
||||
export const httpRequest = (config) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const {
|
||||
url,
|
||||
method = 'GET',
|
||||
params = {},
|
||||
data = {},
|
||||
headers = {},
|
||||
...restConfig
|
||||
} = config
|
||||
|
||||
// 构建请求配置
|
||||
const requestConfig = {
|
||||
url,
|
||||
method,
|
||||
params,
|
||||
data,
|
||||
headers: {
|
||||
...headers,
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
...restConfig
|
||||
}
|
||||
|
||||
// 发送请求
|
||||
service(requestConfig)
|
||||
.then(response => {
|
||||
resolve(response)
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('HTTP request failed:', error)
|
||||
reject(error)
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('HTTP request setup failed:', error)
|
||||
reject(error)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export default service
|
|
@ -18,6 +18,9 @@ export default defineConfig(({ command, mode }) => {
|
|||
processEnv[key] = JSON.stringify(env[key])
|
||||
})
|
||||
|
||||
// 始终启用mock
|
||||
const isMockEnabled = true
|
||||
|
||||
return {
|
||||
plugins: [
|
||||
vue(),
|
||||
|
@ -91,7 +94,9 @@ export default defineConfig(({ command, mode }) => {
|
|||
}
|
||||
},
|
||||
define: {
|
||||
'process.env': processEnv
|
||||
'process.env': processEnv,
|
||||
// 注入mock环境变量
|
||||
'import.meta.env.VITE_APP_MOCK': JSON.stringify(isMockEnabled)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
12
yarn.lock
12
yarn.lock
|
@ -1411,6 +1411,11 @@ combined-stream@^1.0.8:
|
|||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
commander@*:
|
||||
version "13.1.0"
|
||||
resolved "https://registry.npmmirror.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46"
|
||||
integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==
|
||||
|
||||
computeds@^0.0.1:
|
||||
version "0.0.1"
|
||||
resolved "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e"
|
||||
|
@ -2142,6 +2147,13 @@ mlly@^1.7.4:
|
|||
pkg-types "^1.3.0"
|
||||
ufo "^1.5.4"
|
||||
|
||||
mockjs@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz#e6a0c378e91906dbaff20911cc0273b3c7d75b06"
|
||||
integrity sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==
|
||||
dependencies:
|
||||
commander "*"
|
||||
|
||||
mrmime@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc"
|
||||
|
|
Loading…
Reference in New Issue