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"
|
"vue-router": "^4.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vitejs/plugin-vue": "^5.0.4",
|
|
||||||
"@types/node": "^20.11.19",
|
"@types/node": "^20.11.19",
|
||||||
|
"@vitejs/plugin-vue": "^5.0.4",
|
||||||
"@vue/compiler-sfc": "^3.4.21",
|
"@vue/compiler-sfc": "^3.4.21",
|
||||||
"autoprefixer": "^10.4.17",
|
"autoprefixer": "^10.4.17",
|
||||||
|
"mockjs": "^1.1.0",
|
||||||
"postcss": "^8.4.35",
|
"postcss": "^8.4.35",
|
||||||
"postcss-import": "^16.0.1",
|
"postcss-import": "^16.0.1",
|
||||||
"postcss-preset-env": "^9.3.0",
|
"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) {
|
export function sendMessage(data, token) {
|
||||||
return sseRequest({
|
return sseRequest({
|
||||||
|
@ -8,4 +8,11 @@ export function sendMessage(data, token) {
|
||||||
'Authorization': `Bearer ${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 ElementPlus from 'element-plus'
|
||||||
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
||||||
|
|
||||||
|
// 在开发环境下引入mock
|
||||||
|
// if (import.meta.env.VITE_APP_MOCK === 'true') {
|
||||||
|
import('@/mock')
|
||||||
|
// }
|
||||||
|
|
||||||
const pinia = createPinia();
|
const pinia = createPinia();
|
||||||
pinia.use(piniaPluginPersistedstate)
|
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',
|
token: 'app-88ae2GN49aUyNO6qGg7tbTfX',
|
||||||
background: `# 客户信息
|
background: `# 客户信息
|
||||||
### **基础背景与性格设定**
|
### **基础背景与性格设定**
|
||||||
**姓名**:张伟
|
**姓名**:刘勇
|
||||||
**年龄**:34 岁
|
**年龄**:34 岁
|
||||||
**职业**:腾讯员工
|
**职业**:腾讯员工
|
||||||
**家庭**:妻子为全职太太,女儿 9 岁,双方父母健在
|
**家庭**:妻子为全职太太,女儿 9 岁,双方父母健在
|
||||||
|
@ -17,7 +17,7 @@ const chatModes = {
|
||||||
- 体检显示中度脂肪肝,担心投保问题
|
- 体检显示中度脂肪肝,担心投保问题
|
||||||
- 已为全家配置百万医疗险,妻子有重疾险,但认为保障不足 (保费 50W)
|
- 已为全家配置百万医疗险,妻子有重疾险,但认为保障不足 (保费 50W)
|
||||||
- 对理财型保险收益不认可,但对补充重疾险有潜在需求 `,
|
- 对理财型保险收益不认可,但对补充重疾险有潜在需求 `,
|
||||||
chatBackground: '通过顾先生介绍,你和他的老同学在他的家里首次面谈。他的家中布置简洁,茶几上摆放着一套茶具。',
|
chatBackground: '通过尚先生介绍,你和他的老同学在他的家里首次面谈。他的家中布置简洁,茶几上摆放着一套茶具。',
|
||||||
},
|
},
|
||||||
quote_objection: {
|
quote_objection: {
|
||||||
name: '报价中异议',
|
name: '报价中异议',
|
||||||
|
@ -25,7 +25,7 @@ const chatModes = {
|
||||||
token: 'app-ur2Altw2LHR6niX8Q1S7Cn41',
|
token: 'app-ur2Altw2LHR6niX8Q1S7Cn41',
|
||||||
background: `# 客户信息
|
background: `# 客户信息
|
||||||
### **基础背景与性格设定**
|
### **基础背景与性格设定**
|
||||||
**姓名**: 王力
|
**姓名**: 王大牛
|
||||||
**年龄**: 40岁
|
**年龄**: 40岁
|
||||||
**职业**: 私营企业主
|
**职业**: 私营企业主
|
||||||
**车牌号**: 闽C12345
|
**车牌号**: 闽C12345
|
||||||
|
@ -39,7 +39,7 @@ const chatModes = {
|
||||||
token: 'app-Yiccl0JoXs2QF2lkHxO6f822',
|
token: 'app-Yiccl0JoXs2QF2lkHxO6f822',
|
||||||
background: `# 客户信息
|
background: `# 客户信息
|
||||||
### **基础背景与性格设定**
|
### **基础背景与性格设定**
|
||||||
**姓名**: 张琳女士
|
**姓名**: 张灵女士
|
||||||
**年龄**: 32岁
|
**年龄**: 32岁
|
||||||
**职业**: 公司行政主管
|
**职业**: 公司行政主管
|
||||||
**车牌号**: 粤B56789
|
**车牌号**: 粤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
|
export default service
|
|
@ -18,6 +18,9 @@ export default defineConfig(({ command, mode }) => {
|
||||||
processEnv[key] = JSON.stringify(env[key])
|
processEnv[key] = JSON.stringify(env[key])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// 始终启用mock
|
||||||
|
const isMockEnabled = true
|
||||||
|
|
||||||
return {
|
return {
|
||||||
plugins: [
|
plugins: [
|
||||||
vue(),
|
vue(),
|
||||||
|
@ -91,7 +94,9 @@ export default defineConfig(({ command, mode }) => {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
define: {
|
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:
|
dependencies:
|
||||||
delayed-stream "~1.0.0"
|
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:
|
computeds@^0.0.1:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz#215b08a4ba3e08a11ff6eee5d6d8d7166a97ce2e"
|
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"
|
pkg-types "^1.3.0"
|
||||||
ufo "^1.5.4"
|
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:
|
mrmime@^2.0.0:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc"
|
resolved "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz#bc3e87f7987853a54c9850eeb1f1078cd44adddc"
|
||||||
|
|
Loading…
Reference in New Issue