You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
shop-admin/src/store/modules/chat/chat.js

186 lines
5.3 KiB

/*
* @Author: ch
* @Date: 2022-06-07 15:41:05
* @LastEditors: ch
* @LastEditTime: 2022-06-14 14:59:41
* @Description: file content
*/
import * as api from '@/api/chat';
import dayjs from 'dayjs';
const state = {
curCustomerService: {},
sessionData: [],
customerServiceList: [],
messageType: { 1: 'text', 2: 'audio', 3: 'image', 4: 'video', 5: 'revoke', 6: 'custom', 7: 'notify' },
opts: {
customerServiceType: [
{
label: '售前',
value: 1,
},
{
label: '售后',
value: 2,
},
{
label: '发货',
value: 3,
},
],
},
};
const getters = {
parseTime: () => {
return (timestamp) => {
dayjs(new Date(timestamp)).format('MM-DD HH:mm:ss');
};
},
parseText: () => {
return ({ payload, type }) => {
if (type === 2) {
payload = '[语音]';
} else if (type === 3) {
payload = '[图片]';
} else if (type === 4) {
payload = '[视频]';
} else if (type === 5) {
payload = '[撤回消息]';
} else if (type === 6 || type === 1) {
if (payload.customType === 'transferWaiterSession') {
let str = `${payload.fromNickname}将会话转移给了${payload.toNickname}`;
if (payload.reason) {
str += `,并留言:${payload.reason}`;
}
payload = str;
} else {
try {
// payload = JSON.parse(payload.value);
if ('text' in payload) {
payload = payload.text;
} else if ('linkJump' in payload) {
payload = '[超链接]';
} else if ('orderNo' in payload) {
payload = '[订单信息]';
} else if ('productImageUrl' in payload) {
payload = '[商品信息]';
} else {
payload = '[未知数据]';
}
} catch (e) {
payload = '[解析异常]';
}
}
} else if (type === 7) {
payload = payload.text;
} else {
payload = '[未知类型]';
}
return payload;
};
},
parseImage: () => {
return (payload) => {
try {
// payload = JSON.parse(payload);
if ('url' in payload) {
payload = payload.url;
} else {
payload = '[未知图片]';
}
} catch (e) {
payload = '[解析异常]';
}
return payload;
};
},
parseVideo: () => {
return (payload) => {
try {
// payload = JSON.parse(payload);
if ('url' in payload) {
payload = payload.url;
} else {
payload = '[未知视频]';
}
} catch (e) {
payload = '[解析异常]';
}
return payload;
};
},
parseContent: () => {
return (payload) => {
if (payload.customType === 'transferWaiterSession') {
payload.type = 'transferWaiterSession';
} else {
try {
// payload = JSON.parse(payload);
if ('linkJump' in payload) {
payload.type = 'link';
} else if ('orderNo' in payload) {
payload.type = 'order';
} else if ('productImageUrl' in payload) {
payload.type = 'product';
} else {
payload = '[未知消息]';
}
} catch (e) {
payload = '[解析异常]';
}
}
return payload;
};
},
};
const mutations = {
SET_CUR_SERVICE(state, data) {
state.curCustomerService = data || {};
},
SET_SESSION_DATA(state, data) {
state.sessionData = data;
},
SET_SERVICE_LIST(state, data) {
state.customerServiceList = data;
},
};
const actions = {
queryCurCustomerService: ({ commit }) => {
api.getCustomerService().then((res) => {
commit('SET_CUR_SERVICE', res);
});
},
/**
* 查询可转移客服列表
*/
queryCustomerService: ({ commit }) => {
api.customerServiceList({
length: 100,
pageIndex: 1,
}).then((res) => {
commit('SET_SERVICE_LIST', res.records);
});
},
/**
* 提交转移会话
*/
submitTransferSession: ({}, data) => {
return api
.transferCustomerService({
storeId: 1,
...data,
})
.then((res) => {
console.log(res, 'resresres');
});
},
};
export default {
state,
getters,
mutations,
actions,
};