From 884870d9b72ab7a00615b24bdac175a9df6a887c Mon Sep 17 00:00:00 2001 From: "@zuopngfei" Date: Thu, 23 Oct 2025 18:28:19 +0800 Subject: [PATCH] dwew --- components.d.ts | 3 + index.html | 2 +- package.json | 1 - src/api/group/index.ts | 4 +- src/api/keyword copy/index.ts | 49 +++ src/api/keyword copy/userKeyWord.ts | 49 +++ src/api/keyword/index.ts | 12 +- src/components/KeyWords/index.vue | 3 +- src/components/MaterialPublic/index.vue | 113 +----- src/components/UserMessage/index.vue | 208 +++-------- src/components/WxUserCard/index.vue | 193 +++++++++++ src/components/wxChatRecord/index.vue | 442 ++++++++++++++++++++++++ src/views/chat/index.vue | 8 +- src/views/customerService/index.vue | 2 +- src/views/miniProgram/index.vue | 159 ++++++++- 15 files changed, 966 insertions(+), 282 deletions(-) create mode 100644 src/api/keyword copy/index.ts create mode 100644 src/api/keyword copy/userKeyWord.ts create mode 100644 src/components/WxUserCard/index.vue create mode 100644 src/components/wxChatRecord/index.vue diff --git a/components.d.ts b/components.d.ts index 369448a..8c52919 100644 --- a/components.d.ts +++ b/components.d.ts @@ -8,6 +8,7 @@ export {} declare module 'vue' { export interface GlobalComponents { ChatRecord: typeof import('./src/components/ChatRecord/index.vue')['default'] + copy: typeof import('./src/components/UserCard copy/index.vue')['default'] ElAside: typeof import('element-plus/es')['ElAside'] ElButton: typeof import('element-plus/es')['ElButton'] ElCard: typeof import('element-plus/es')['ElCard'] @@ -66,6 +67,8 @@ declare module 'vue' { UserKeyWord: typeof import('./src/components/KeyWords/userKeyWord.vue')['default'] UserMessage: typeof import('./src/components/UserMessage/index.vue')['default'] Welcome: typeof import('./src/components/Welcome/index.vue')['default'] + WxChatRecord: typeof import('./src/components/wxChatRecord/index.vue')['default'] + WxUserCard: typeof import('./src/components/WxUserCard/index.vue')['default'] } export interface ComponentCustomProperties { vInfiniteScroll: typeof import('element-plus/es')['ElInfiniteScroll'] diff --git a/index.html b/index.html index 3915359..9f032a8 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ 小程序聊天 - +
diff --git a/package.json b/package.json index 95d25b2..4da96a1 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,6 @@ "lint:style": "stylelint src/**/*.{css,scss,vue} --cache --fix" }, "dependencies": { - "@amap/amap-jsapi-loader": "^1.0.1", "@element-plus/icons-vue": "^2.1.0", "axios": "^1.4.0", "bigdecimal": "^0.6.1", diff --git a/src/api/group/index.ts b/src/api/group/index.ts index 1d55130..24ba4b8 100644 --- a/src/api/group/index.ts +++ b/src/api/group/index.ts @@ -123,7 +123,7 @@ export const deleteAgent = (data: any) => { export const keyWordArr = (data: any) => { return request({ - url: `api/group/keywords`, + url: `admin/app/keywords`, method: 'get', params: data }) @@ -131,7 +131,7 @@ export const keyWordArr = (data: any) => { export const deleteKeyword = (id) => { return request({ - url: `api/group/keyword/${id}`, + url: `admin/app/keyword/${id}`, method: 'delete' }) } diff --git a/src/api/keyword copy/index.ts b/src/api/keyword copy/index.ts new file mode 100644 index 0000000..bcf236b --- /dev/null +++ b/src/api/keyword copy/index.ts @@ -0,0 +1,49 @@ +// 用户管理 +import request from '@/utils/request' + + + +// 意图管理 + +export const keywords = (data: any) => { + return request({ + url: `api/group/keywords`, + method: 'get', + params: data + }) +} + +export const addKeywords = (data: any) => { + return request({ + url: `api/group/keyword`, + method: 'post', + data + }) +} +export const addKeywordsMaterial = (data: any, id) => { + return request({ + url: `api/group/keyword/material/${id}`, + method: 'post', + data + }) +} +export const keywordsMaterials = (data: any) => { + return request({ + url: `api/group/keyword/materials`, + method: 'get', + params: data + }) +} +export const upKeyword = (data: any, id) => { + return request({ + url: `api/group/keyword/${id}`, + method: 'put', + data + }) +} +export const deleteKeyword = (id) => { + return request({ + url: `api/group/keyword/${id}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/keyword copy/userKeyWord.ts b/src/api/keyword copy/userKeyWord.ts new file mode 100644 index 0000000..195db31 --- /dev/null +++ b/src/api/keyword copy/userKeyWord.ts @@ -0,0 +1,49 @@ +// 用户管理 +import request from '@/utils/request' + + + +// 意图管理 + +export const keywords = (data: any) => { + return request({ + url: `api/contact/keywords`, + method: 'get', + params: data + }) +} + +export const addKeywords = (data: any) => { + return request({ + url: `api/contact/keyword`, + method: 'post', + data + }) +} +export const addKeywordsMaterial = (data: any, id) => { + return request({ + url: `api/contact/keyword/material/${id}`, + method: 'post', + data + }) +} +export const keywordsMaterials = (data: any) => { + return request({ + url: `api/contact/keyword/materials`, + method: 'get', + params: data + }) +} +export const upKeyword = (data: any, id) => { + return request({ + url: `api/contact/keyword/${id}`, + method: 'put', + data + }) +} +export const deleteKeyword = (id) => { + return request({ + url: `api/contact/keyword/${id}`, + method: 'delete' + }) +} \ No newline at end of file diff --git a/src/api/keyword/index.ts b/src/api/keyword/index.ts index bcf236b..8a7be0e 100644 --- a/src/api/keyword/index.ts +++ b/src/api/keyword/index.ts @@ -7,7 +7,7 @@ import request from '@/utils/request' export const keywords = (data: any) => { return request({ - url: `api/group/keywords`, + url: `admin/app/keywords`, method: 'get', params: data }) @@ -15,35 +15,35 @@ export const keywords = (data: any) => { export const addKeywords = (data: any) => { return request({ - url: `api/group/keyword`, + url: `admin/app/keyword`, method: 'post', data }) } export const addKeywordsMaterial = (data: any, id) => { return request({ - url: `api/group/keyword/material/${id}`, + url: `admin/app/keyword/material/${id}`, method: 'post', data }) } export const keywordsMaterials = (data: any) => { return request({ - url: `api/group/keyword/materials`, + url: `admin/app/keyword/materials`, method: 'get', params: data }) } export const upKeyword = (data: any, id) => { return request({ - url: `api/group/keyword/${id}`, + url: `admin/app/keyword/${id}`, method: 'put', data }) } export const deleteKeyword = (id) => { return request({ - url: `api/group/keyword/${id}`, + url: `admin/app/keyword/${id}`, method: 'delete' }) } \ No newline at end of file diff --git a/src/components/KeyWords/index.vue b/src/components/KeyWords/index.vue index 7f34f41..45c0af3 100644 --- a/src/components/KeyWords/index.vue +++ b/src/components/KeyWords/index.vue @@ -210,8 +210,7 @@ const save = async () => { } else { const resKeys = await addKeywords({ "keyword": ruleForm.value.keyword, - "robot_id": userRobotStore.robotInfo.id, - "room_id": props.groupInfo.room_id + "app_id": props.groupInfo.app_id, }) key_id = resKeys.id } diff --git a/src/components/MaterialPublic/index.vue b/src/components/MaterialPublic/index.vue index bd94f6f..3fa46a8 100644 --- a/src/components/MaterialPublic/index.vue +++ b/src/components/MaterialPublic/index.vue @@ -340,7 +340,6 @@ import { addMaterial, updataMaterial, deletaMaterial } from '@/api/material' import { userList } from '@/api/user' import { minis, voices } from '@/api/selfMiniVoice' import Upload from '@/components/Upload/index.vue' -import AMapLoader from '@amap/amap-jsapi-loader' import robotStore from '@/store/modules/robotStore' import { uploadProps } from 'element-plus' import V3Emoji from "vue3-emoji"; @@ -604,117 +603,7 @@ onMounted(async () => { getCards() } if (ruleForm.value.type == '6') { - AMapLoader.load({ - key: '6c581ef31373ac8659ca4db49c6f1032', - version: '2.0', - // 需要用到的插件 - plugins: ["AMap.Geocoder", "AMap.AutoComplete", 'AMap.Geolocation', 'AMap.PlaceSearch', 'AMap.Marker'], - }) - .then((AMap) => { - map = new AMap.Map('mapContainer', { - viewMode: '2D', - zoom: 13, - - // mapStyle: 'amap://styles/grey', //设置地图的显示样式 - center: ['121.475164', '31.228816'], - }) - - if (marker) { - map.remove(marker); - } - if (isEdit) { - map.setFitView(); - marker = new AMap.Marker({ - map: map, - // icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png", - position: [ruleForm.value.content.longitude, ruleForm.value.content.latitude], - // offset: new AMap.Pixel(-13, -30) - }); - map.setFitView(); - map.add(marker); - } - // AMap.plugin('AMap.AutoComplete', function () { - // var autoOptions = { - // city: '010', - // input: 'tipinput', //下面设置的input的id - // outPutDirAuto: true, - // } - // var AutoComplete = new AMap.AutoComplete(autoOptions); - // AutoComplete.search(function (status, result) { - // // 搜索成功时,result即是对应的匹配数据 - // }) - // }) - - - // 搜索提示插件 - AutoComplete = new AMap.AutoComplete(autoOptions); - var placeSearch = new AMap.PlaceSearch({ - map: map - }); //构造地点查询类 - AutoComplete.on("select", select);//注册监听,当选中某条记录时会触发 - - function select(e) { - placeSearch.setCity(e.poi.adcode); - placeSearch.search(e.poi.name); //关键字查询查询 - - ruleForm.value.content.address = e.poi.name - ruleForm.value.content.detailed_address = e.poi.district + e.poi.address - ruleForm.value.content.longitude = e.poi.location.lng - ruleForm.value.content.latitude = e.poi.location.lat - } - //为地图注册click事件获取鼠标点击出的经纬度坐标 - map.on('click', function (e) { - - - map.value = e.lnglat.getLng() + ',' + e.lnglat.getLat() - // '点击位置:', e.lnglat; - // 获取经纬度 - ruleForm.value.content.longitude = e.lnglat.lng; - ruleForm.value.content.latitude = e.lnglat.lat; - // 清除点 - if (marker) { - map.remove(marker); - } - // 标记点 - // setMapMarker(); - marker = new AMap.Marker({ - map: map, - // icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png", - position: [ruleForm.value.content.longitude, ruleForm.value.content.latitude], - // offset: new AMap.Pixel(-13, -30) - }); - - // regeoCode(); - - geocoder = new AMap.Geocoder({ - // city: "010", //城市设为北京,默认:“全国” - radius: 1000 //范围,默认:500 - }); - let lnglat = [e.lnglat.lng, e.lnglat.lat]; - geocoder.getAddress(lnglat, function (status, result) { - if (status === 'complete' && result.regeocode) { - let address = result.regeocode.formattedAddress; - - ruleForm.value.content.address = result.regeocode.addressComponent.province + result.regeocode.addressComponent.district - ruleForm.value.content.detailed_address = result.regeocode.addressComponent.township + result.regeocode.addressComponent.street + result.regeocode.addressComponent.streetNumber + result.regeocode.addressComponent.neighborhood - // '解析的地址',address; - let obj = { - ParkLongitude: e.lnglat.lng + '', - ParkLatitude: e.lnglat.lat + '', - address: address - } - // emit("clickChild", obj); - } else { - // log.error('根据经纬度查询地址失败') - } - }); - }); - - // isTrue.value=true - - }) - .catch((e) => { - }) + } }) onUnmounted(() => { diff --git a/src/components/UserMessage/index.vue b/src/components/UserMessage/index.vue index f654d4f..0b18051 100644 --- a/src/components/UserMessage/index.vue +++ b/src/components/UserMessage/index.vue @@ -359,18 +359,13 @@ - + --> @@ -486,7 +481,6 @@ import { sendMessages } from '@/api/message' import { minis, voices } from '@/api/selfMiniVoice' import { userList } from '@/api/user' import { materialList } from '@/api/material' -import AMapLoader from '@amap/amap-jsapi-loader' import { groupMemberList, groupList } from '@/api/group' import MaterialLibrary from '@/views/materialLibrary/index.vue' import V3Emoji from "vue3-emoji"; @@ -495,43 +489,46 @@ const materialTypes = ref([{ label: '文本', value: 1, url: 'send_text_message' -}, { +}, +{ label: '图片', value: 2, url: 'send_picture_message' -}, { - label: '语音', - value: 3, - url: 'send_voice_message' -}, { - label: '视频', - value: 4, - url: 'send_video_message' -}, { - label: '小程序', - value: 5, - url: 'send_mini_program_message' -}, { - label: '位置', - value: 6, - url: 'send_location_message' -}, { - label: '链接', - value: 7, - url: 'send_link_message' -}, { - label: 'GIF图片', - value: 8, - url: 'send_gif_message' -}, { - label: '名片', - value: 9, - url: 'send_card_message' -}, { - label: '文件', - value: 10, - url: 'send_file_message' -}]) +}, +//{ +// label: '语音', +// value: 3, +// url: 'send_voice_message' +// }, { +// label: '视频', +// value: 4, +// url: 'send_video_message' +// }, { +// label: '小程序', +// value: 5, +// url: 'send_mini_program_message' +// }, { +// label: '位置', +// value: 6, +// url: 'send_location_message' +// }, { +// label: '链接', +// value: 7, +// url: 'send_link_message' +// }, { +// label: 'GIF图片', +// value: 8, +// url: 'send_gif_message' +// }, { +// label: '名片', +// value: 9, +// url: 'send_card_message' +// }, { +// label: '文件', +// value: 10, +// url: 'send_file_message' +// } +]) let sendUrl = 'send_text_message' const robotHost = computed(() => { return userRobotStore.robotInfo.server_ip @@ -977,23 +974,23 @@ let marker = null let geocoder = null onMounted(() => { - if (props.sendGroup == 'sendGroup' ) { - if (!props.allUserIds) { - materialTypes.value.push({ - label: '@消息', - value: 11, - url: 'send_group_at_message' - }) - } + // if (props.sendGroup == 'sendGroup' ) { + // if (!props.allUserIds) { + // materialTypes.value.push({ + // label: '@消息', + // value: 11, + // url: 'send_group_at_message' + // }) + // } - } else { - if (props.isKeyWords) { - materialTypes.value.push({ - label: '转人工', - value: 11 - }) - } - } + // } else { + // if (props.isKeyWords) { + // materialTypes.value.push({ + // label: '转人工', + // value: 11 + // }) + // } + // } if(props.editData){ ruleForm.value = props.editData @@ -1004,98 +1001,7 @@ onMounted(() => { } } - AMapLoader.load({ - key: '6c581ef31373ac8659ca4db49c6f1032', - version: '2.0', - // 需要用到的插件 - plugins: ["AMap.Geocoder", "AMap.AutoComplete", 'AMap.Geolocation', 'AMap.PlaceSearch'], - }) - .then((AMap) => { - map = new AMap.Map('container', { - viewMode: '2D', - zoom: 13, - - // mapStyle: 'amap://styles/grey', //设置地图的显示样式 - center: ['121.475164', '31.228816'], - }) - - // AMap.plugin('AMap.AutoComplete', function () { - // var autoOptions = { - // city: '010', - // input: 'tipinput', //下面设置的input的id - // outPutDirAuto: true, - // } - // var AutoComplete = new AMap.AutoComplete(autoOptions); - // AutoComplete.search(function (status, result) { - // // 搜索成功时,result即是对应的匹配数据 - // }) - // }) - - - // 搜索提示插件 - AutoComplete = new AMap.AutoComplete(autoOptions); - var placeSearch = new AMap.PlaceSearch({ - map: map - }); //构造地点查询类 - AutoComplete.on("select", select);//注册监听,当选中某条记录时会触发 - - function select(e) { - placeSearch.setCity(e.poi.adcode); - placeSearch.search(e.poi.name); //关键字查询查询 - ruleForm.value.content.address = e.poi.name - ruleForm.value.content.detailed_address = e.poi.district + e.poi.address - ruleForm.value.content.longitude = e.poi.location.lng - ruleForm.value.content.latitude = e.poi.location.lat - } - //为地图注册click事件获取鼠标点击出的经纬度坐标 - map.on('click', function (e) { - map.value = e.lnglat.getLng() + ',' + e.lnglat.getLat() - ruleForm.value.content.longitude = e.lnglat.lng; - ruleForm.value.content.latitude = e.lnglat.lat; - // 清除点 - if (marker) { - map.remove(marker); - } - // 标记点 - // setMapMarker(); - marker = new AMap.Marker({ - map: map, - // icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png", - position: [ruleForm.value.content.longitude, ruleForm.value.content.latitude], - // offset: new AMap.Pixel(-13, -30) - }); - - // regeoCode(); - - geocoder = new AMap.Geocoder({ - // city: "010", //城市设为北京,默认:“全国” - radius: 1000 //范围,默认:500 - }); - let lnglat = [e.lnglat.lng, e.lnglat.lat]; - geocoder.getAddress(lnglat, function (status, result) { - if (status === 'complete' && result.regeocode) { - let address = result.regeocode.formattedAddress; - - ruleForm.value.content.address = result.regeocode.addressComponent.province + result.regeocode.addressComponent.district - ruleForm.value.content.detailed_address = result.regeocode.addressComponent.township + result.regeocode.addressComponent.street + result.regeocode.addressComponent.streetNumber + result.regeocode.addressComponent.neighborhood - // '解析的地址',address; - let obj = { - ParkLongitude: e.lnglat.lng + '', - ParkLatitude: e.lnglat.lat + '', - address: address - } - // emit("clickChild", obj); - } else { - // log.error('根据经纬度查询地址失败') - } - }); - }); - - // isTrue.value=true - - }) - .catch((e) => { - }) + }) onUnmounted(() => { map && map.destroy(); diff --git a/src/components/WxUserCard/index.vue b/src/components/WxUserCard/index.vue new file mode 100644 index 0000000..dc81040 --- /dev/null +++ b/src/components/WxUserCard/index.vue @@ -0,0 +1,193 @@ + + + \ No newline at end of file diff --git a/src/components/wxChatRecord/index.vue b/src/components/wxChatRecord/index.vue new file mode 100644 index 0000000..297fbd5 --- /dev/null +++ b/src/components/wxChatRecord/index.vue @@ -0,0 +1,442 @@ + + + + + \ No newline at end of file diff --git a/src/views/chat/index.vue b/src/views/chat/index.vue index 7ef468b..f81a0d9 100644 --- a/src/views/chat/index.vue +++ b/src/views/chat/index.vue @@ -1,14 +1,14 @@