This commit is contained in:
陈浩 2025-03-12 09:20:05 +08:00
parent ed4c8efc82
commit af386d4529
450 changed files with 35769 additions and 400 deletions

View File

@ -88,7 +88,7 @@ export function getIMDetail () {
//获取图片logo //获取图片logo
export function getBaseSite(){ export function getBaseSite(){
return request ({ return request ({
url:`${commonUrl}/common/common/site`, url:`${commonUrl}/common/common/logo`,
method: Method.GET, method: Method.GET,
needToken: false needToken: false
}) })

View File

@ -24,7 +24,7 @@ export function indexData(params) {
// 获取自动发券 // 获取自动发券
export function getAutoCoup(){ export function getAutoCoup(){
return request({ return request({
url: "/buyer/promotion/coupon/activity", url: "/buyer/promotion/coupon/getCoupons",
method: Method.GET, method: Method.GET,
needToken: true, needToken: true,
}); });

View File

@ -107,7 +107,7 @@ export function isCollection (type, goodsId) {
// 查看是否收藏店铺 // 查看是否收藏店铺
export function isStoreCollection (type, goodsId) { export function isStoreCollection (type, goodsId) {
return request({ return request({
url: `/buyer/member/storeCollection/isCollection/${type}/${goodsId}`, url: `/buyer/member/collection/isCollection/${type}/${goodsId}`,
method: Method.GET, method: Method.GET,
needToken: true needToken: true
}); });

View File

@ -24,13 +24,15 @@ export default {
if (userInfo.success) { if (userInfo.success) {
//Id,IM //Id,IM
if(goodsId && skuId){ if(goodsId && skuId){
console.log( this.IMLink,'传递参数');
console.log(this.IMLink + "&token=" + accessToken + "&goodsId=" + goodsId + "&skuId=" + skuId + "&id=" + id || this.storeMsg.storeId
);
window.open( window.open(
this.IMLink + "?token=" + accessToken + "&id=" + id || this.storeMsg.storeId + "&goodsId=" + goodsId + "&skuId=" + skuId this.IMLink + "&token=" + accessToken + "&goodsId=" + goodsId + "&skuId=" + skuId + "&id=" + id || this.storeMsg.storeId
); );
}else{ }else{
window.open( window.open(
this.IMLink + "?token=" + accessToken + "&id=" + id || this.storeMsg.storeId this.IMLink + "&token=" + accessToken + "&id=" + id || this.storeMsg.storeId
); );
} }
} else { } else {
@ -42,7 +44,9 @@ export default {
async getIMDetailMethods() { async getIMDetailMethods() {
let res = await getIMDetail(); let res = await getIMDetail();
if (res.success) { if (res.success) {
console.log("IM信息", res);
this.IMLink = res.result; this.IMLink = res.result;
} }
}, },
}, },

View File

@ -20,7 +20,7 @@
<Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#666'" /> <Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#666'" />
{{ storeCollected? "已收藏店铺": "收藏店铺" }} {{ storeCollected? "已收藏店铺": "收藏店铺" }}
</span> </span>
<span class="ml_10" @click="IMService(goodsMsg.data.storeId,goodsMsg.data.goodsId,goodsMsg.data.id)">联系客服</span> <span class="ml_10" @click="IMService(goodsMsg.data.storeId || null,goodsMsg.data.goodsId,goodsMsg.data.id)">联系客服</span>
</div> </div>
</div> </div>
</div> </div>
@ -91,7 +91,6 @@ export default {
getGoodsDetail (val) { getGoodsDetail (val) {
this.isLoading = true; this.isLoading = true;
const params = val || this.$route.query; const params = val || this.$route.query;
// id // id
let distributionId = let distributionId =
params && params.distributionId params && params.distributionId

View File

@ -7,7 +7,7 @@ export const ServeGetTalkList = (data) => {
// 获取聊天联系人列表服务接口 // 获取聊天联系人列表服务接口
export const ServeuserContact = (data) => { export const ServeuserContact = (data) => {
return get("/im/friend/mutual", data); return get("/im/friend/following",data);
}; };
// 获取聊天列表服务接口 // 获取聊天列表服务接口
@ -38,7 +38,6 @@ export const ServeClearTalkUnreadNum = (data) => {
// 获取聊天记录服务接口 // 获取聊天记录服务接口
export const ServeTalkRecords = (data) => { export const ServeTalkRecords = (data) => {
console.log(data,'----');
return get("/im/message", data); return get("/im/message", data);
}; };

View File

@ -1,45 +1,67 @@
import { post, get } from '@/utils/request' import { post, get, del } from "@/utils/request";
// 获取好友列表服务接口 // 获取好友列表服务接口
export const ServeGetContacts = data => { export const ServeGetContacts = (data) => {
return get('/contacts/list', data) return get("/contacts/list", data);
} };
// 解除好友关系服务接口 // 解除好友关系服务接口
export const ServeDeleteContact = data => { export const ServeDeleteContact = (data) => {
return post('/contacts/delete', data) return post("/contacts/delete", data);
} };
// 修改好友备注服务接口 // 修改好友备注服务接口
export const ServeEditContactRemark = data => { export const ServeEditContactRemark = (data) => {
return post('/contacts/edit-remark', data) return post("/contacts/edit-remark", data);
} };
// 搜索联系人 // // 搜索联系人
export const ServeSearchContact = data => { // export const ServeSearchContact = data => {
return get('/contacts/search', data) // return get('/contacts/search', data)
} // }
// 搜索联系人手机号关注
export const ServeSearchContact = (data) => {
return post("/im/friend/follow-by-mobile", data);
};
// 搜索联系人userid关注
export const ServeSearchuserid = (data) => {
return post("/im/friend/follow/" + data);
};
// 搜索联系人取消关注
export const ServeDelete = (data) => {
return del("/im/friend/unfollow/" + data);
};
// 搜索手机号用户2.27
export const Sersearch = (data) => {
return get("/im/friend/search", data);
};
// 搜索userid用户2.27
export const Sersearchtel = (data) => {
return get(`/im/friend/user/${data}`);
};
// 好友申请服务接口 // 好友申请服务接口
export const ServeCreateContact = data => { export const ServeCreateContact = (data) => {
return post('/contacts/apply/create', data) return post("/contacts/apply/create", data);
} };
// 查询好友申请服务接口 // 查询好友申请服务接口
export const ServeGetContactApplyRecords = data => { export const ServeGetContactApplyRecords = (data) => {
return get('/contacts/apply/records', data) return get("/contacts/apply/records", data);
} };
// 处理好友申请服务接口 // 处理好友申请服务接口
export const ServeApplyAccept = data => { export const ServeApplyAccept = (data) => {
return post('/contacts/apply/accept', data) return post("/contacts/apply/accept", data);
} };
export const ServeApplyDecline = data => { export const ServeApplyDecline = (data) => {
return post('/contacts/apply/decline', data) return post("/contacts/apply/decline", data);
} };
// 查询好友申请未读数量服务接口 // 查询好友申请未读数量服务接口
export const ServeFindFriendApplyNum = () => { export const ServeFindFriendApplyNum = () => {
return get('/contacts/apply-unread-num') return get("/contacts/apply-unread-num");
} };

View File

@ -10,9 +10,14 @@ export const ServeGroupDetail = data => {
return get('/group/detail', data) return get('/group/detail', data)
} }
// // 创建群聊服务接口
// export const ServeCreateGroup = data => {
// return post('/group/create', data)
// }
// 创建群聊服务接口 // 创建群聊服务接口
export const ServeCreateGroup = data => { export const ServeCreateGroup = data => {
return post('/group/create', data) return post('/im/group', data)
} }
// 修改群信息 // 修改群信息

View File

@ -1,6 +1,7 @@
import { get } from "@/utils/request"; import { get } from "@/utils/request";
import config from "@/config/config"; import config from "@/config/config";
// 获取用户相关设置信息 // 获取用户相关设置信息
export const ServeGetUserSetting = () => { export const ServeGetUserSetting = () => {
return get(`${config.BASE_BUYER}/buyer/passport/member`); return get(`${config.BASE_BUYER}/buyer/passport/member`);

View File

@ -124,6 +124,7 @@ export default {
if(this.toUser.storeFlag){ if(this.toUser.storeFlag){
ServeGetGoodsDetail(this.goodsParams).then(res => { ServeGetGoodsDetail(this.goodsParams).then(res => {
if (res.success) { if (res.success) {
this.goodsDetail = res.result.data this.goodsDetail = res.result.data
} }
}) })
@ -132,7 +133,7 @@ export default {
getFootPrint() { getFootPrint() {
if (this.toUser.storeFlag) { if (this.toUser.storeFlag) {
this.footPrintParams.memberId = this.id this.footPrintParams.memberId = this.id
this.footPrintParams.storeId = this.toUser.userId this.footPrintParams.storeId = this.toUser.userId || this.toUser.friendId
ServeGetFootPrint(this.footPrintParams).then(res => { ServeGetFootPrint(this.footPrintParams).then(res => {
res.result.records=res.result.records.filter((item)=>{ res.result.records=res.result.records.filter((item)=>{
return item!=null return item!=null
@ -161,7 +162,7 @@ export default {
} }
}) })
} else { } else {
this.footPrintParams.memberId = this.toUser.userId this.footPrintParams.memberId = this.toUser.userId || this.toUser.friendId
this.footPrintParams.storeId = this.id this.footPrintParams.storeId = this.id
ServeStoreGetFootPrint(this.footPrintParams).then(res => { ServeStoreGetFootPrint(this.footPrintParams).then(res => {
res.result.records=res.result.records.filter((item)=>{ res.result.records=res.result.records.filter((item)=>{

View File

@ -6,16 +6,22 @@
v-show="params.is_robot == 0" v-show="params.is_robot == 0"
:class="{ 'red-color': params.talk_type == 1 }" :class="{ 'red-color': params.talk_type == 1 }"
> >
{{ params.talk_type == 1 ? '好友' : '群组' }} {{ params.talk_type == 1 ? "好友" : "群组" }}
</span> </span>
<span class="nickname">{{ params.nickname }}</span> <span class="nickname">{{ params.nickname }}</span>
<span v-show="params.talk_type == 2" class="num">({{ groupNum }})</span> <span v-show="params.talk_type == 2" class="num">({{ groupNum }})</span>
<el-button type="danger" @click="userGz">{{
userobj.isMutual ? "取消关注" : "关注"
}}</el-button>
</div> </div>
<div v-show="params.talk_type == 1 && params.is_robot == 0" class="module center-module"> <div
v-show="params.talk_type == 1 && params.is_robot == 0"
class="module center-module"
>
<p class="online"> <p class="online">
<span v-show="isOnline" class="online-status"></span> <span v-show="isOnline" class="online-status"></span>
<span>{{ isOnline ? '在线' : '离线' }}</span> <span>{{ isOnline ? "在线" : "离线" }}</span>
</p> </p>
<p class="keyboard-status" v-show="isKeyboard">对方正在输入 ...</p> <p class="keyboard-status" v-show="isKeyboard">对方正在输入 ...</p>
</div> </div>
@ -40,7 +46,9 @@
</el-header> </el-header>
</template> </template>
<script> <script>
import { ServeSearchuserid, ServeDelete } from "@/api/contacts";
export default { export default {
inject: ['callGrandfatherMethod','loadChatListMethod'],
props: { props: {
data: { data: {
type: Object, type: Object,
@ -49,10 +57,14 @@ export default {
talk_type: 0, talk_type: 0,
receiver_id: 0, receiver_id: 0,
params: 0, params: 0,
nickname: '', nickname: "",
} };
}, },
}, },
userobj: {
type: Object,
default: false,
},
online: { online: {
type: Boolean, type: Boolean,
default: false, default: false,
@ -68,46 +80,79 @@ export default {
talk_type: 0, talk_type: 0,
receiver_id: 0, receiver_id: 0,
params: 0, params: 0,
nickname: '', nickname: "",
}, },
isOnline: false, isOnline: false,
isKeyboard: false, isKeyboard: false,
groupNum: 0, groupNum: 0,
} };
}, },
created() { created() {
this.setParamsData(this.data) this.setParamsData(this.data);
this.setOnlineStatus(this.online) this.setOnlineStatus(this.online);
}, },
watch: { watch: {
data(value) { data(value) {
this.setParamsData(value) this.setParamsData(value);
}, },
online(value) { online(value) {
this.setOnlineStatus(value) this.setOnlineStatus(value);
}, },
keyboard(value) { keyboard(value) {
this.isKeyboard = value this.isKeyboard = value;
setTimeout(() => { setTimeout(() => {
this.isKeyboard = false this.isKeyboard = false;
}, 2000) }, 2000);
}, },
}, },
methods: { methods: {
setOnlineStatus(value) { setOnlineStatus(value) {
this.isOnline = value this.isOnline = value;
}, },
setParamsData(object) { setParamsData(object) {
Object.assign(this.params, object) Object.assign(this.params, object);
}, },
setGroupNum(value) { setGroupNum(value) {
this.groupNum = value this.groupNum = value;
}, },
triggerEvent(event_name) { triggerEvent(event_name) {
this.$emit('event', event_name) this.$emit("event", event_name);
},
}, },
userGz() {
//
if (!this.userobj.isMutual) {
ServeSearchuserid(
this.userobj.userId,
)
.then((res) => {
if (res.code == 200) {
this.callGrandfatherMethod();
this.loadChatListMethod()
} else {
this.error = true;
} }
})
.finally(() => {
this.loading = false;
});
} else {
//
ServeDelete(this.userobj.userId|| this.userobj.friendId)
.then((res) => {
if (res.code == 200) {
this.callGrandfatherMethod();
this.loadChatListMethod()
} else {
this.error = true;
}
})
.finally(() => {
this.loading = false;
});
}
},
},
};
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
#panel-header { #panel-header {
@ -185,7 +230,7 @@ export default {
border-radius: 50%; border-radius: 50%;
-webkit-animation: antStatusProcessing 1.2s ease-in-out infinite; -webkit-animation: antStatusProcessing 1.2s ease-in-out infinite;
animation: antStatusProcessing 1.2s ease-in-out infinite; animation: antStatusProcessing 1.2s ease-in-out infinite;
content: ''; content: "";
} }
} }
} }
@ -275,4 +320,8 @@ export default {
opacity: 0; opacity: 0;
} }
} }
.el-button {
padding: 2px 15px;
margin-left: 10px;
}
</style> </style>

View File

@ -1,17 +1,31 @@
<template> <template>
<div class="flex"> <div class="flex">
<el-container class="ov-hidden flex-10 full-height"> <el-container class="ov-hidden flex-10 full-height">
<PanelHeader ref="panelHeader" :data="params" :online="isOnline" :keyboard="inputEvent" <PanelHeader
@event="handleHeaderEvent" /> ref="panelHeader"
:data="params"
:online="isOnline"
:keyboard="inputEvent"
:userobj="userobj"
@event="handleHeaderEvent"
/>
<!-- 主体信息 --> <!-- 主体信息 -->
<el-main class="main-box no-padding"> <el-main class="main-box no-padding">
<div id="lumenChatPanel" class="talks-container lum-scrollbar" @scroll="talkPanelScroll($event)"> <div
id="lumenChatPanel"
class="talks-container lum-scrollbar"
@scroll="talkPanelScroll($event)"
>
<!-- 数据加载状态栏 --> <!-- 数据加载状态栏 -->
<div class="loading-toolbar"> <div class="loading-toolbar">
<span v-if="loadRecord.status == 0" class="color-blue"> <!-- <span v-if="loadRecord.status == 0" class="color-blue">
<i class="el-icon-loading" /> 正在加载数据中... <i class="el-icon-loading" /> 正在加载数据中...
</span> </span> -->
<span v-if="loadRecord.status == 1" class="pointer color-blue" @click="loadChatRecords"> <span
v-if="loadRecord.status == 1"
class="pointer color-blue"
@click="loadChatRecords"
>
<i class="el-icon-bottom" /> 查看更多消息... <i class="el-icon-bottom" /> 查看更多消息...
</span> </span>
<span v-if="loadRecord.status == 2"> 没有更多消息了... </span> <span v-if="loadRecord.status == 2"> 没有更多消息了... </span>
@ -34,13 +48,20 @@
</div> </div>
<!-- 其它对话消息 --> <!-- 其它对话消息 -->
<div v-else class="message-box record-box" :class="{ <div
v-else
class="message-box record-box"
:class="{
'direction-rt': item.float == 'right', 'direction-rt': item.float == 'right',
'checkbox-border': multiSelect.isOpen === true, 'checkbox-border': multiSelect.isOpen === true,
}"> }"
>
<aside v-show="multiSelect.isOpen" class="checkbox-column"> <aside v-show="multiSelect.isOpen" class="checkbox-column">
<i class="el-icon-success" :class="{ selected: verifyMultiSelect(item.id) }" <i
@click="triggerMultiSelect(item.id)" /> class="el-icon-success"
:class="{ selected: verifyMultiSelect(item.id) }"
@click="triggerMultiSelect(item.id)"
/>
</aside> </aside>
<aside class="avatar-column"> <aside class="avatar-column">
<div class="avatar-box" v-if="item.float == 'right'"> <div class="avatar-box" v-if="item.float == 'right'">
@ -58,79 +79,152 @@
{{ item.float == "right" ? name : toUser.name }} | {{ item.float == "right" ? name : toUser.name }} |
{{ unixToDate(item.createTime, "MM月dd日 hh:mm") }} {{ unixToDate(item.createTime, "MM月dd日 hh:mm") }}
</span> </span>
<div class="flex flex-a-c"> <div class="flex flex-a-c">
<i @click="againSendMessage(item)" v-if="item.webSocketStatus" class="el-icon-refresh-left again main-color"></i> <i
@click="againSendMessage(item)"
v-if="item.webSocketStatus"
class="el-icon-refresh-left again main-color"
></i>
<!-- 文本消息 --> <!-- 文本消息 -->
<div v-if="item.messageType == 'MESSAGE'" style="background-color: #d0e9ff;color: black;" <div v-if="item.float == 'right'">
class="text-message" :class="{ {{ item.isRead ? "已读" : "未读" }}
</div>
<div
v-if="item.messageType == 'MESSAGE'"
style="background-color: #d0e9ff; color: black"
class="text-message"
:class="{
left: item.float == 'left', left: item.float == 'left',
right: item.float == 'right', right: item.float == 'right',
}"> }"
>
<div class="arrow"></div> <div class="arrow"></div>
<pre v-if="!emojistwo.includes(item.text)" v-html="item.text" />
<pre v-if="emojistwo.includes(item.text)" v-html="textReplaceEmoji(item.text)" /> <pre
v-if="!emojistwo.includes(item.text)"
v-html="item.text"
/>
<pre
v-if="emojistwo.includes(item.text)"
v-html="textReplaceEmoji(item.text)"
/>
</div>
<div v-if="item.float == 'left'">
{{ item.isRead ? "已读" : "未读" }}
</div>
</div>
<div v-if="item.webSocketStatus" class="tips">
网络异常发送失败请重新发送
</div> </div>
</div> <div
<div v-if="item.webSocketStatus" class="tips">网络异常发送失败请重新发送</div> v-if="item.messageType == 'GOODS' && item.text != null"
class="goodsStyle"
<div v-if="item.messageType == 'GOODS' && item.text != null" class="goodsStyle " :class="{ :class="{
left: item.float == 'left', left: item.float == 'left',
right: item.float == 'right', right: item.float == 'right',
}"> }"
<div class="base" @click="linkToGoods(item.text.goodsId, item.text.id)"> >
<div
class="base"
@click="linkToGoods(item.text.goodsId, item.text.id)"
>
<div> <div>
<img :src="item.text.thumbnail" class="image" /> <img :src="item.text.thumbnail" class="image" />
</div> </div>
<div> <div>
<div class="goods_name"> <div class="goods_name">
<el-tooltip class="item" effect="dark" :content="item.text.goodsName" placement="top-start"> <el-tooltip
class="item"
effect="dark"
:content="item.text.goodsName"
placement="top-start"
>
<a> {{ item.text.goodsName }} </a> <a> {{ item.text.goodsName }} </a>
</el-tooltip> </el-tooltip>
</div> </div>
<div class="price"> <div class="price">
<span>{{ item.text.price | unitPrice('¥') }}</span> <span>{{ item.text.price | unitPrice("¥") }}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div v-if="item.messageType == 'ORDER' && item.text != null" class="oderStyle" :class="{ <div
v-if="item.messageType == 'ORDER' && item.text != null"
class="oderStyle"
:class="{
left: item.float == 'left', left: item.float == 'left',
right: item.float == 'right', right: item.float == 'right',
}" @click="linkToOrders(item.text.sn)"> }"
@click="linkToOrders(item.text.sn)"
>
<div class="oedersn"> <div class="oedersn">
<el-tooltip class="item" effect="dark" :content="item.text.sn" placement="top-start"> <el-tooltip
class="item"
effect="dark"
:content="item.text.sn"
placement="top-start"
>
<a> 订单号:{{ item.text.sn }} </a> <a> 订单号:{{ item.text.sn }} </a>
</el-tooltip> </el-tooltip>
</div> </div>
<div class="goods-shared-box"> <div class="goods-shared-box">
<div
<div class="goods-item" v-for="(order,orderIndex) in item.text.orderItems" :key="orderIndex"> class="goods-item"
<img :src="order.image" style="height: 100px;width: 100px;" /> v-for="(order, orderIndex) in item.text.orderItems"
:key="orderIndex"
>
<img
:src="order.image"
style="height: 100px; width: 100px"
/>
<div> <div>
<span class="orderGoodsName">{{ order.name }}</span> <span class="orderGoodsName">{{ order.name }}</span>
<div class="goods-item-price"> <div class="goods-item-price">
<span>{{ order.goodsPrice | unitPrice('¥') }}</span> <span>{{
order.goodsPrice | unitPrice("¥")
}}</span>
</div> </div>
</div> </div>
</div> </div>
<div class="shared-goods"> <div class="shared-goods">
<div class="orderGoodsTime">{{ item.text.paymentTime }}</div> <div class="orderGoodsTime">
{{ item.text.paymentTime }}
</div>
<span class="orderFlowPrice"> <span class="orderFlowPrice">
订单金额<span>{{ item.text.flowPrice | unitPrice('¥') }}</span> 订单金额<span>{{
item.text.flowPrice | unitPrice("¥")
}}</span>
</span> </span>
<div class="order-status"> <div class="order-status">
<el-tag <el-tag
size="mini" size="mini"
:type="item.text.orderStatus == 'CANCELLED' || item.text.orderStatus == 'UNPAID' || item.text.orderStatus == ' TAKE' ? 'info' : 'danger'">{{ :type="
item.text.orderStatus == 'CANCELLED' ? '已取消' : item.text.orderStatus == 'UNPAID' ? '未付款' : item.text.orderStatus == 'CANCELLED' ||
item.text.orderStatus == item.text.orderStatus == 'UNPAID' ||
'PAID' ? '已付款' : item.text.orderStatus == 'UNDELIVERED' ? '待发货' : item.text.orderStatus == item.text.orderStatus == ' TAKE'
'DELIVERED' ? 'info'
? '已发货' : item.text.orderStatus == ' COMPLETED' ? '已完成' : item.text.orderStatus == ' TAKE' ? : 'danger'
'待校验' : '' "
}}</el-tag> >{{
item.text.orderStatus == "CANCELLED"
? "已取消"
: item.text.orderStatus == "UNPAID"
? "未付款"
: item.text.orderStatus == "PAID"
? "已付款"
: item.text.orderStatus == "UNDELIVERED"
? "待发货"
: item.text.orderStatus == "DELIVERED"
? "已发货"
: item.text.orderStatus == " COMPLETED"
? "已完成"
: item.text.orderStatus == " TAKE"
? "待校验"
: ""
}}</el-tag
>
</div> </div>
</div> </div>
</div> </div>
@ -140,22 +234,32 @@
</div> </div>
<!-- 消息时间 --> <!-- 消息时间 -->
<div v-show="compareTime(idx, item.createTime)" class="datetime no-select" <div
v-text="sendTime(unixToDate(item.createTime, 'yyyy-MM-dd hh:mm'))" /> v-show="compareTime(idx, item.createTime)"
class="datetime no-select"
v-text="sendTime(unixToDate(item.createTime, 'yyyy-MM-dd hh:mm'))"
/>
</div> </div>
</div> </div>
<!-- 置底按钮 --> <!-- 置底按钮 -->
<transition name="el-fade-in-linear"> <transition name="el-fade-in-linear">
<div v-show="tipsBoard" class="tips-board pointer" @click="talkPanelScrollBottom"> <div
v-show="tipsBoard"
class="tips-board pointer"
@click="talkPanelScrollBottom"
>
<!-- <SvgMentionDown class="svg" /> --> <!-- <SvgMentionDown class="svg" /> -->
<span>回到底部</span> <span>回到底部</span>
</div> </div>
</transition> </transition>
<!-- 新消息气泡 --> <!-- 新消息气泡 -->
<div v-show="tipsBoard && unreadMessage.num" class="talk-bubble pointer no-select" <div
@click="talkPanelScrollBottom"> v-show="tipsBoard && unreadMessage.num"
class="talk-bubble pointer no-select"
@click="talkPanelScrollBottom"
>
<i class="el-icon-chat-dot-round" /> <i class="el-icon-chat-dot-round" />
<span>新消息({{ unreadMessage.num }})</span> <span>新消息({{ unreadMessage.num }})</span>
<span> <span>
@ -168,29 +272,36 @@
<!-- 页脚信息 --> <!-- 页脚信息 -->
<el-footer class="footer-box" height="180"> <el-footer class="footer-box" height="180">
<template v-if="multiSelect.isOpen === false"> <template v-if="multiSelect.isOpen === false">
<MeEditor @send="submitSendMessage" @keyboard-event="onKeyboardEvent" /> <MeEditor
@send="submitSendMessage"
@keyboard-event="onKeyboardEvent"
/>
</template> </template>
<template v-else> <template v-else>
<PanelToolbar v-model="multiSelect.items.length" @event="handleMultiMode" /> <PanelToolbar
v-model="multiSelect.items.length"
@event="handleMultiMode"
/>
</template> </template>
</el-footer> </el-footer>
<el-aside width="200px"> <el-aside width="200px"> </el-aside>
</el-aside>
</el-container> </el-container>
<!-- 消息管理器 --> <!-- 消息管理器 -->
<transition name="el-fade-in-linear"> <transition name="el-fade-in-linear">
<TalkSearchRecord v-if="findChatRecord" :params="{ <TalkSearchRecord
v-if="findChatRecord"
:params="{
talk_type: params.talk_type, talk_type: params.talk_type,
receiver_id: params.receiver_id, receiver_id: params.receiver_id,
title: params.nickname, title: params.nickname,
}" @close="findChatRecord = false" /> }"
@close="findChatRecord = false"
/>
</transition> </transition>
<!-- {{ toUser }}123 -->
<!-- 链接信息 --> <!-- 链接信息 -->
<OtherLink :toUser="toUser" :id="id" :goodsParams="goodsParams" class="flex-4" /> <!-- <OtherLink :toUser="toUser" :id="id" :goodsParams="goodsParams" class="flex-4" /> -->
</div> </div>
</template> </template>
<script> <script>
@ -205,7 +316,7 @@ import PanelToolbar from "./PanelToolbar";
import SocketInstance from "@/im-server/socket-instance"; import SocketInstance from "@/im-server/socket-instance";
import { SvgMentionDown } from "@/core/icons"; import { SvgMentionDown } from "@/core/icons";
import { formatTime, parseTime, copyTextToClipboard } from "@/utils/functions"; import { formatTime, parseTime, copyTextToClipboard } from "@/utils/functions";
import { unitPrice } from '@/plugins/filters'; import { unitPrice } from "@/plugins/filters";
import { import {
ServeTalkRecords, ServeTalkRecords,
@ -238,6 +349,10 @@ export default {
}; };
}, },
}, },
userobj: {
type: Object,
default: null,
},
goodsParams: { goodsParams: {
type: Object, type: Object,
default: null, default: null,
@ -313,7 +428,6 @@ export default {
mode: 0, mode: 0,
}; };
this.loadChatRecords(); this.loadChatRecords();
}, },
}, },
mounted() { mounted() {
@ -409,8 +523,7 @@ export default {
// //
againSendMessage(val) { againSendMessage(val) {
this.submitSendMessage(val.text);
this.submitSendMessage(val.text)
}, },
// //
@ -426,6 +539,7 @@ export default {
// if (record.messageType == 'MESSAGE"') { // if (record.messageType == 'MESSAGE"') {
// record.text = this.textReplaceEmoji(record.content) // record.text = this.textReplaceEmoji(record.content)
// } // }
console.log(record, "发送的消息");
SocketInstance.emit("event_talk", record); SocketInstance.emit("event_talk", record);
this.$store.commit("UPDATE_TALK_ITEM", { this.$store.commit("UPDATE_TALK_ITEM", {
@ -436,6 +550,7 @@ export default {
/** /**
* 插入数据 * 插入数据
*/ */
const insterChat = { const insterChat = {
createTime: this.formateDateAndTimeToString(new Date()), createTime: this.formateDateAndTimeToString(new Date()),
fromUser: this.id, fromUser: this.id,
@ -444,6 +559,7 @@ export default {
messageType: "MESSAGE", messageType: "MESSAGE",
text: content, text: content,
float: "right", float: "right",
// id:this.params.id,
}; };
// console.log("",'') // console.log("",'')
// //
@ -496,17 +612,17 @@ export default {
}); });
}, },
// //
loadChatRecords() { loadChatRecords() {
if (this.loadRecord.pageNumber === 0 || this.params.clickFlag) { if (this.loadRecord.pageNumber === 0 || this.params.clickFlag) {
this.loadRecord.pageNumber = 1 this.loadRecord.pageNumber = 1;
this.params.clickFlag = false this.params.clickFlag = false;
} else { } else {
this.loadRecord.pageNumber = this.loadRecord.pageNumber + 1 this.loadRecord.pageNumber = this.loadRecord.pageNumber + 1;
} }
const user_id = this.id; const user_id = this.id;
console.log(this.params.talkId, "====");
if (this.params.talkId == undefined) return;
const data = { const data = {
pageNumber: this.loadRecord.pageNumber, pageNumber: this.loadRecord.pageNumber,
pageSize: this.loadChatRecords.pageSize, pageSize: this.loadChatRecords.pageSize,
@ -514,8 +630,8 @@ export default {
}; };
this.loadRecord.status = 0; this.loadRecord.status = 0;
let el = document.getElementById('lumenChatPanel') let el = document.getElementById("lumenChatPanel");
let scrollHeight = el.scrollHeight let scrollHeight = el.scrollHeight;
ServeTalkRecords(data).then((res) => { ServeTalkRecords(data).then((res) => {
// //
// console.log("", res); // console.log("", res);
@ -525,14 +641,14 @@ export default {
if (item.toUser > 0) { if (item.toUser > 0) {
item.float = item.fromUser == user_id ? "right" : "left"; item.float = item.fromUser == user_id ? "right" : "left";
} }
if (item.messageType == 'GOODS') { if (item.messageType == "GOODS") {
item.text = JSON.parse(item.text) item.text = JSON.parse(item.text);
} }
// if (item.messageType == 'MESSAGE"') { // if (item.messageType == 'MESSAGE"') {
// item.text = this.textReplaceEmoji(item.text) // item.text = this.textReplaceEmoji(item.text)
// } // }
if (item.messageType == 'ORDER') { if (item.messageType == "ORDER") {
item.text = JSON.parse(item.text) item.text = JSON.parse(item.text);
} }
return { ...item, [key]: key }; return { ...item, [key]: key };
}); });
@ -543,11 +659,11 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
// if (data.record_id == 0 || !data.record_id) { // if (data.record_id == 0 || !data.record_id) {
if (data.record_id == 0 || data.pageNumber == 1) { if (data.record_id == 0 || data.pageNumber == 1) {
el.scrollTop = el.scrollHeight el.scrollTop = el.scrollHeight;
} else { } else {
el.scrollTop = el.scrollHeight - scrollHeight el.scrollTop = el.scrollHeight - scrollHeight;
} }
}) });
}); });
}, },
@ -938,7 +1054,7 @@ export default {
.orderSn { .orderSn {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap white-space: nowrap;
} }
.orderGoodsName { .orderGoodsName {
@ -948,7 +1064,6 @@ export default {
// white-space: nowrap; // white-space: nowrap;
font-size: 14px; font-size: 14px;
} }
.orderGoodsTime { .orderGoodsTime {
@ -1031,7 +1146,6 @@ export default {
} }
} }
// .base { // .base {
// margin-top: 5px; // margin-top: 5px;
// height: 120px; // height: 120px;
@ -1286,7 +1400,6 @@ export default {
.goods-shared-box { .goods-shared-box {
cursor: pointer; cursor: pointer;
> .goods-item { > .goods-item {
margin: 10px 0; margin: 10px 0;
display: flex; display: flex;
border-bottom: 1px solid #ededed; border-bottom: 1px solid #ededed;

View File

@ -0,0 +1,173 @@
<template>
<div>
<div class="lum-dialog-mask" v-show="isShow">
<el-container class="lum-dialog-box" v-outside="close">
<el-header class="header" height="50px">
<p>群聊</p>
<p class="tools">
<i class="el-icon-close" @click="close" />
</p>
</el-header>
<el-main class="main">
<div class="form-ap">
<div :style="{}">群名称:</div>
<div>
<el-input
v-model="cname"
id="serach-mobile"
class="input"
placeholder="请输入群名称"
clearable
@keyup.enter.native="onSubmit"
@input="error = false"
/>
</div>
</div>
<div class="form-ap">
<div>请选择</div>
<div>
<div v-for="item in userContact" :key="item.id" class="main_omn">
<div>
<input
type="checkbox"
:id="item.friendId"
:value="item.id"
@change="handleCheckboxChange(item.friendId)"
/>
<label for="option1">{{ item.nickname }}</label
><br />
</div>
</div>
</div>
</div>
<el-button
type="primary"
size="small"
:loading="loading"
@click="onSubmit"
>建群
</el-button>
</el-main>
</el-container>
</div>
</div>
</template>
<script>
// import { ServeSearchContact } from '@/api/contacts'
import { ServeuserContact } from "@/api/chat";
import { ServeCreateGroup } from "@/api/group";
import Checkbox from "../../../../manager/src/components/tree-table/Checkbox/Checkbox.vue";
export default {
components: { Checkbox },
name: "Groupchats",
data() {
return {
loading: false,
isShow: false,
mobile: "",
error: false,
userContact: [], //
selectedIds: [], // id
cname: "", //
};
},
mounted() {
this.getcon();
},
methods: {
//
open() {
this.mobile = "";
this.isShow = true;
this.$nextTick(() => {
document.getElementById("serach-mobile").focus();
});
},
handleCheckboxChange(id) {
//
const index = this.selectedIds.indexOf(id);
if (index === -1) {
// selectedIds
this.selectedIds.push(id);
} else {
// selectedIds
this.selectedIds.splice(index, 1);
}
console.log("当前选中的 id", this.selectedIds);
},
//
getcon() {
ServeuserContact().then((res) => {
if (res.code == 200) {
this.userContact = res.result;
}
});
},
//
close() {
this.isShow = false;
},
onSubmit() {
if (this.cname == "" || this.selectedIds.length == 0) {
this.$message("请输入群名称和选择用户");
return false;
}
this.loading = true;
ServeCreateGroup({
groupName: this.cname,
memberIds: this.selectedIds,
})
.then((res) => {
if (res.code == 200) {
// this.$user(res.data.id);
// this.close();
this.$message("创建成功");
this.cname=""
this.selectedIds=[]
} else {
this.error = true;
}
})
.finally(() => {
this.loading = false;
});
},
},
};
</script>
<style lang="less" scoped>
.lum-dialog-box {
width: 450px;
max-width: 450px;
height: 250px;
.main {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
button {
margin-top: 20px;
width: 100px;
}
.main_omn {
display: flex;
}
.main_name {
display: flex;
align-items: center;
}
.form-ap {
width: 80%;
display: flex;
// justify-content: space-around;
& > div:first-child {
width: 40%;
display: flex;
align-items: center;
}
}
}
}
</style>

View File

@ -22,6 +22,20 @@
<p v-show="error" class="error"> <p v-show="error" class="error">
无法找到该用户请检查搜索内容并重试 无法找到该用户请检查搜索内容并重试
</p> </p>
<!-- <div v-if="conobj.nickname != undefined" class="user">
<div class="user_a">
<div class="avatar-box">
<face :text="conobj.avatar" v-if="conobj.avatar"></face>
<face-null :text="conobj.name" v-else></face-null>
</div>
<div class="backolo">
{{ conobj.nickname }}
</div>
</div>
<div class="user_b" @click="concernclick">
{{ conobj.isMutual ? "已关注" : "关注" }}
</div>
</div> -->
<el-button <el-button
type="primary" type="primary"
size="small" size="small"
@ -35,56 +49,81 @@
</div> </div>
</template> </template>
<script> <script>
import { ServeSearchContact } from '@/api/contacts' import { Sersearch,ServeSearchContact } from "@/api/contacts";
export default { export default {
name: 'UserSearch', name: "UserSearch",
data() { data() {
return { return {
loading: false, loading: false,
isShow: false, isShow: false,
mobile: '', mobile: "",
error: false, error: false,
} conobj: {},
gnl:false
};
}, },
methods: { methods: {
// //
open() { open() {
this.mobile = '' this.mobile = "";
this.isShow = true this.isShow = true;
this.$nextTick(() => { this.$nextTick(() => {
document.getElementById('serach-mobile').focus() document.getElementById("serach-mobile").focus();
}) });
}, },
// //
close() { close() {
this.isShow = false this.isShow = false;
}, },
// //
// concernclick() {
// let { mobile,conobj } = this;
// if (conobj.nickname == undefined) return false;
// ServeSearchContact({
// mobile,
// })
// .then((res) => {
// if (res.code == 200) {
// this.onSubmit()
// // this.conobj = res.result[0];
// // this.$user(res.data.id);
// // this.close();
// } else {
// this.error = true;
// }
// })
// .finally(() => {
// this.loading = false;
// });
// },
//
onSubmit() { onSubmit() {
let { mobile } = this let { mobile } = this;
// this.conobj={}
if (mobile == "") return false;
if (mobile == '') return false this.loading = true;
Sersearch({
this.loading = true keyword: mobile,
ServeSearchContact({
mobile,
}) })
.then(res => { .then((res) => {
if (res.code == 200) { if (res.code == 200) {
this.$user(res.data.id) this.conobj = res.result[0];
this.close() this.$user(res.result[0].id);
// this.close();
} else { } else {
this.error = true this.error = true;
} }
}) })
.finally(() => { .finally(() => {
this.loading = false this.loading = false;
}) });
}, },
}, },
} };
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.lum-dialog-box { .lum-dialog-box {
@ -116,4 +155,70 @@ export default {
} }
} }
} }
.avatar-box {
height: 35px;
width: 35px;
flex-shrink: 0;
background-color: #508afe;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
color: white;
user-select: none;
transition: ease 1s;
position: relative;
overflow: hidden;
img {
width: 100%;
height: 100%;
background-color: white;
border-radius: 3px;
}
.top-mask {
width: 100%;
height: 100%;
background-color: rgba(22, 25, 29, 0.6);
position: absolute;
top: 0;
left: 0;
color: white;
display: none;
align-items: center;
justify-content: center;
font-weight: bold;
}
&:hover .top-mask {
display: flex;
}
}
.user {
display: flex;
width: 82%;
margin-top: 10px;
background-color: #eff0f1;
padding: 8px;
border-radius: 10px;
.user_a {
width: 45%;
display: flex;
justify-content: space-around;
.backolo {
display: flex;
align-items: center;
}
}
.user_b {
width: 52%;
display: flex;
align-items: center;
justify-content: end;
cursor: pointer;
color: red;
}
}
</style> </style>

View File

@ -67,12 +67,8 @@
</div> </div>
</div> </div>
</el-main> </el-main>
<el-footer <el-footer class="no-padding footer" height="50px">
v-show="detail.friend_status !== 0" <!-- <el-button
class="no-padding footer"
height="50px"
>
<el-button
v-if="detail.friend_status == 1 && detail.friend_apply == 0" v-if="detail.friend_status == 1 && detail.friend_apply == 0"
type="primary" type="primary"
size="small" size="small"
@ -85,15 +81,21 @@
type="primary" type="primary"
size="small" size="small"
>已发送好友申请请耐心等待... >已发送好友申请请耐心等待...
</el-button> </el-button> -->
<el-button <el-button
v-else-if="detail.friend_status == 2" type="primary"
size="small"
icon="el-icon-circle-plus-outline"
@click="concernclick"
>{{ detail.isMutual == 1 ? "取消关注" : "关注" }}
</el-button>
<!-- <el-button
type="primary" type="primary"
size="small" size="small"
icon="el-icon-s-promotion" icon="el-icon-s-promotion"
@click="sendMessage(detail)" @click="sendMessage(detail)"
>发消息 >发消息
</el-button> </el-button> -->
</el-footer> </el-footer>
<!-- 添加好友申请表单 --> <!-- 添加好友申请表单 -->
@ -123,14 +125,19 @@
</template> </template>
<script> <script>
// import { ServeSearchUser } from "@/api/user"; // import { ServeSearchUser } from "@/api/user";
import { ServeCreateContact, ServeEditContactRemark } from "@/api/contacts"; import {
ServeCreateContact,
ServeEditContactRemark,
ServeSearchContact,
ServeDelete,
} from "@/api/contacts";
import { toTalk } from "@/utils/talk"; import { toTalk } from "@/utils/talk";
import { Sersearchtel } from "@/api/contacts";
export default { export default {
name: "UserCardDetail", name: "UserCardDetail",
props: { props: {
user_id: { user_id: {
type: Number, type: String,
default: 0, default: 0,
}, },
}, },
@ -175,10 +182,43 @@ export default {
contacts: false, contacts: false,
}; };
}, },
created() { created() {},
// this.loadUserDetail(); mounted() {
this.loadUserDetail();
}, },
methods: { methods: {
//
concernclick() {
if (!this.detail.isMutual) {
//
ServeSearchContact({
mobile: this.detail.mobile,
})
.then((res) => {
if (res.code == 200) {
this.close();
} else {
this.error = true;
}
})
.finally(() => {
this.loading = false;
});
} else {
//
ServeDelete(this.detail.id)
.then((res) => {
if (res.code == 200) {
this.close();
} else {
this.error = true;
}
})
.finally(() => {
this.loading = false;
});
}
},
close() { close() {
if (this.contacts) return false; if (this.contacts) return false;
@ -192,7 +232,19 @@ export default {
}, },
// //
// loadUserDetail() { loadUserDetail() {
Sersearchtel(this.user_id)
.then((res) => {
if (res.code == 200) {
this.detail.user_id = res.result.id;
Object.assign(this.detail, res.result);
} else {
this.error = true;
}
})
.finally(() => {
this.loading = false;
});
// ServeSearchUser({ // ServeSearchUser({
// user_id: this.user_id, // user_id: this.user_id,
// }).then((res) => { // }).then((res) => {
@ -201,7 +253,7 @@ export default {
// Object.assign(this.detail, res.data); // Object.assign(this.detail, res.data);
// } // }
// }); // });
// }, },
// //
sendApply() { sendApply() {

BIN
im/src/icons/admin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B

View File

@ -110,7 +110,7 @@ class Talk extends Base {
handle () { handle () {
let store = this.getStoreInstance(); let store = this.getStoreInstance();
// console.log("触发handle");
// 判断当前是否在聊天页面 // 判断当前是否在聊天页面
if (!this.isTalkPage()) { if (!this.isTalkPage()) {
store.commit("INCR_UNREAD_NUM"); store.commit("INCR_UNREAD_NUM");
@ -118,10 +118,11 @@ class Talk extends Base {
// 判断消息是否来自于我自己,否则会提示消息通知 // 判断消息是否来自于我自己,否则会提示消息通知
return !this.isCurrSender() && this.showMessageNocice(); return !this.isCurrSender() && this.showMessageNocice();
} }
console.log("触发handle");
// console.log("this.receiver_id", this.receiver_id); // console.log("this.receiver_id", this.receiver_id);
// console.log("this.sender_id", this.sender_id); // console.log("this.sender_id", this.sender_id);
let isTrue = this.isTalk(1, this.receiver_id, this.sender_id); let isTrue = this.isTalk(1, this.receiver_id, this.sender_id);
// console.log("判断当前是否正在和好友对话", isTrue); console.log("判断当前是否正在和好友对话", isTrue);
// 判断当前是否正在和好友对话 // 判断当前是否正在和好友对话
if (isTrue) { if (isTrue) {
this.insertTalkRecord(); this.insertTalkRecord();

View File

@ -4,10 +4,8 @@ import store from "@/store";
import { ServeGetTalkList, ServeGetStoreTalkList } from "@/api/chat"; import { ServeGetTalkList, ServeGetStoreTalkList } from "@/api/chat";
import { formatTalkItem } from "@/utils/talk"; import { formatTalkItem } from "@/utils/talk";
export default { export default {
created() { created() {
// 判断用户是否登录 // 判断用户是否登录
}, },
methods: { methods: {
// 页面初始化设置 // 页面初始化设置
@ -18,7 +16,6 @@ export default {
// 加载用户相关设置信息,更新本地缓存 // 加载用户相关设置信息,更新本地缓存
loadUserSetting() { loadUserSetting() {
//标识没有值,获取用户信息 //标识没有值,获取用户信息
if (this.$route.query.id) { if (this.$route.query.id) {
ServeGetUserSetting().then(async ({ code, result }) => { ServeGetUserSetting().then(async ({ code, result }) => {
// 如果result有值说明用户创建成功 // 如果result有值说明用户创建成功
@ -28,18 +25,35 @@ export default {
face: result.face, face: result.face,
name: result.nickName, name: result.nickName,
}); });
console.log(result.nickName)
/** /**
* 用户像商家进行聊天商家进行刷新好友列表 * 用户像商家进行聊天商家进行刷新好友列表
*/ */
// 判断如果是有id说明是 用户像商家进行聊天。 // 判断如果是有id说明是 用户像商家进行聊天。
if (this.$route.query.id) { if (this.$route.query.id) {
await this.createTalk(this.$route.query.id); let fn = this.createTalk;
fn
? await fn(this.$route.query.id)
: await this.$children[0].$children[0].createTalk(
this.$route.query.id
);
} }
this.state = 1;
this.aIndexclick(3);
if (this.$route.query.goodsId && this.$route.query.skuId) { if (this.$route.query.goodsId && this.$route.query.skuId) {
this.goodsParams.goodsId = this.$route.query.goodsId this.goodsParams
this.goodsParams.skuId = this.$route.query.skuId ? (this.goodsParams.goodsId = this.$route.query.goodsId)
: (this.$children[0].$children[0].goodsParams.goodsId =
this.$route.query.goodsId);
// this.goodsParams.goodsId = this.$route.query.goodsId;
this.goodsParams
? (this.goodsParams.skuId = this.$route.query.skuId)
: (this.$children[0].$children[0].goodsParams.skuId =
this.$route.query.skuId);
// this.goodsParams.skuId = this.$route.query.skuId;
} }
} else if (code === 200 && !result) { } else if (code === 200 && !result) {
setTimeout(() => { setTimeout(() => {
this.loadUserSetting(); this.loadUserSetting();
@ -48,28 +62,31 @@ export default {
}); });
} else { } else {
//标识有值代表是店铺 //标识有值代表是店铺
ServeGetStoreSetting().then(async ({ code, result }) => { // ServeGetStoreSetting().then(async ({ code, result }) => {
if (result) { // if (result) {
store.commit("UPDATE_USER_INFO", { // store.commit("UPDATE_USER_INFO", {
id: result.id, // id: result.id,
face: result.storeLogo, // face: result.storeLogo,
name: result.storeName, // name: result.storeName,
}); // });
//获取店铺聊天列表 // //获取店铺聊天列表
await this.loadStoreChatList() // debugger
}else if (code === 200 && !result) { this.state = 0;
setTimeout(() => { this.aIndexclick(0,4);
this.loadUserSetting(); this.loadStoreChatList();
}, 2000);
}
}) // } else if (code === 200 && !result) {
// setTimeout(() => {
// this.loadUserSetting();
// }, 2000);
// }
// });
} }
}, },
// 获取用户对话列表 // 获取用户对话列表
loadChatListInJs() { loadChatListInJs() {
ServeGetTalkList() ServeGetTalkList()
.then(({ code, result }) => { .then(({ code, result }) => {
if (code !== 200) return false; if (code !== 200) return false;
@ -83,15 +100,15 @@ export default {
} }
}) })
.finally(() => { .finally(() => {
this.loadStatus = 1;
}); });
}, },
//获取商家聊天记录 //获取商家聊天记录
loadStoreChatList() { loadStoreChatList() {
this.loadStatus = this.talkNum == 0 ? 0 : 1; this.loadStatus = this.talkNum == 0 ? 0 : 1;
ServeGetStoreTalkList().then(({ code, result }) => { ServeGetStoreTalkList()
.then(({ code, result }) => {
if (code !== 200) return false; if (code !== 200) return false;
this.$store.commit("SET_UNREAD_NUM", 0); this.$store.commit("SET_UNREAD_NUM", 0);
this.$store.commit("SET_TALK_ITEMS", { this.$store.commit("SET_TALK_ITEMS", {
@ -101,7 +118,6 @@ export default {
// 判断 // 判断
if (this.$route.query.id) { if (this.$route.query.id) {
let takeData, takeIndex; let takeData, takeIndex;
console.log(result)
result.forEach((take, index) => { result.forEach((take, index) => {
if (take.id == this.$route.query.id) { if (take.id == this.$route.query.id) {
takeData = take; takeData = take;
@ -112,12 +128,12 @@ export default {
this.clickTab(this.$route.query.id, takeData, takeIndex) this.clickTab(this.$route.query.id, takeData, takeIndex)
); );
} }
}).finally(() => { })
.finally(() => {
this.loadStatus = 1; this.loadStatus = 1;
}); });
}, },
reload() { reload() {
this.$root.$children[0].refreshView(); this.$root.$children[0].refreshView();
}, },

View File

@ -43,7 +43,7 @@ export default {
*/ */
state.index_name = (resource.talk_type || 1) + "_" + resource.receiver_id; state.index_name = (resource.talk_type || 1) + "_" + resource.receiver_id;
console.log(state.index_name,'名字'); // console.log(state.index_name,'名字');
}, },
// 数组头部压入对话记录1494593861786271744 1494593778193793024 // 数组头部压入对话记录1494593861786271744 1494593778193793024
@ -56,7 +56,6 @@ export default {
} else { } else {
state.records.push(...records); state.records.push(...records);
} }
// console.log("最后的数据",state.records) // console.log("最后的数据",state.records)
}, },

View File

@ -89,10 +89,10 @@ const Talk = {
// console.log("state", state); // console.log("state", state);
// console.log("resource", resource); // console.log("resource", resource);
// console.log("%c 更新对话结束", "color:green",state.items); // console.log("%c 更新对话结束", "color:green",state.items);
let enableGetTalkList = true let enableGetTalkList = true
state.items.forEach(item => { state.items.forEach(item => {
if (item.userId == resource.index_name.split("_")[1]) { if (item.userId == resource.index_name.split("_")[1]) {
debugger
item.unread++; item.unread++;
item.msg_text = resource.msg_text; item.msg_text = resource.msg_text;
item.lastTalkTime = resource.updated_at; item.lastTalkTime = resource.updated_at;
@ -101,6 +101,7 @@ const Talk = {
enableGetTalkList = false enableGetTalkList = false
} }
}) })
// 循环如果当前用户不在对话记录列表中 就重新请求对话列表接口 // 循环如果当前用户不在对话记录列表中 就重新请求对话列表接口
enableGetTalkList ? this.commit('getTalkList') : '' enableGetTalkList ? this.commit('getTalkList') : ''
}, },

View File

@ -14,14 +14,13 @@ const request = axios.create({
timeout: 20000, timeout: 20000,
}); });
let isRefreshing = false let isRefreshing = false;
/** /**
* 异常拦截处理器 * 异常拦截处理器
* *
* @param {*} error * @param {*} error
*/ */
const errorHandler = (error) => { const errorHandler = (error) => {
console.log(error);
// 判断是否是响应错误信息 // 判断是否是响应错误信息
if (error.response) { if (error.response) {
if (error.response.status == 401) { if (error.response.status == 401) {
@ -29,7 +28,6 @@ const errorHandler = (error) => {
location.reload(); location.reload();
} else if (error.response.status == 403) { } else if (error.response.status == 403) {
if (!isRefreshing) { if (!isRefreshing) {
/** /**
* 403提示将重新从商家移动端进入当前页面 * 403提示将重新从商家移动端进入当前页面
*/ */
@ -41,7 +39,7 @@ const errorHandler = (error) => {
type: "warning", type: "warning",
}) })
.then(() => { .then(() => {
isRefreshing = true isRefreshing = true;
window.close(); window.close();
Notification({ Notification({
title: "登录失效提示", title: "登录失效提示",
@ -49,10 +47,9 @@ const errorHandler = (error) => {
type: "error", type: "error",
position: "top-right", position: "top-right",
}); });
}) })
.catch(() => { .catch(() => {
isRefreshing = true isRefreshing = true;
Notification({ Notification({
title: "登录失效提示", title: "登录失效提示",
message: "请手动关闭当前页面", message: "请手动关闭当前页面",
@ -60,22 +57,82 @@ const errorHandler = (error) => {
position: "top-right", position: "top-right",
}); });
}); });
isRefreshing = false isRefreshing = false;
} }
} else if (error.response.status == 400) { } else if (error.response.status == 400) {
if (error.response.data.code === 20003) {
if (!isRefreshing) {
console.log(
error.response.data.code,
);
MessageBox("当前登录已失效,请关闭重新进入。", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnPressEscape: false,
closeOnClickModal: false,
type: "warning",
})
.then(() => {
isRefreshing = true;
window.close();
Notification({ Notification({
message: error.response.data.message, title: "登录失效提示",
position: "top-right", message: "请手动关闭当前页面",
type: "error", type: "error",
position: "top-right",
}); });
})
.catch(() => {
isRefreshing = true;
Notification({
title: "登录失效提示",
message: "请手动关闭当前页面",
type: "error",
position: "top-right",
});
});
isRefreshing = false;
}
} else {
// location.reload();
// handleRefreshToken().then(async ({ code, result }) => {
// // 如果result有值说明用户创建成功
// if (result) {
// store.commit("UPDATE_USER_INFO", {
// id: result.id,
// face: result.face,
// name: result.nickName,
// });
// location.reload();
// }
// });
}
// Notification({
// message: error.response.data.message,
// position: "top-right",
// type: "error",
// });
} }
} }
return Promise.reject(error); return Promise.reject(error);
// return Promise.reject();
}; };
// const handleRefreshToken = () => {
// let token = localStorage.getItem("LILI-TOKEN");
// get(
// `${config.BASE_BUYER}/buyer/passport/member/refresh/${token}`,
// { needToken: false },
// {}
// );
// };
// 请求拦截器 // 请求拦截器
request.interceptors.request.use((config) => { request.interceptors.request.use((config) => {
const token = getToken(); const token = getToken();
if (token) { if (token) {

View File

@ -16,6 +16,8 @@
<span v-if="name">{{ name }}</span> <span v-if="name">{{ name }}</span>
<span v-else>用户名称</span> <span v-else>用户名称</span>
</p> </p>
<div class="addcre" @click="triggerSubMenu">添加好友</div>
<div class="addcre" @click="Groupchats">群聊</div>
</el-header> </el-header>
<el-header height="60px" class="header"> <el-header height="60px" class="header">
<div class="from-search"> <div class="from-search">
@ -80,15 +82,7 @@
<p v-show="loadStatus === 0" class="empty-data"> <p v-show="loadStatus === 0" class="empty-data">
<i class="el-icon-loading" /> 数据加载中... <i class="el-icon-loading" /> 数据加载中...
</p> </p>
<p v-show="loadStatus === 1" class="main-menu">
<p
v-show="loadStatus === 1 && talkNum === 0"
class="empty-data"
>
暂无聊天消息
</p>
<p v-show="loadStatus === 1 && talkNum > 0" class="main-menu">
<span <span
class="title" class="title"
:style="{ color: aIndex == 0 ? 'red' : '' }" :style="{ color: aIndex == 0 ? 'red' : '' }"
@ -99,13 +93,16 @@
class="title" class="title"
:style="{ color: aIndex == 1 ? 'red' : '' }" :style="{ color: aIndex == 1 ? 'red' : '' }"
@click="aIndexclick(1)" @click="aIndexclick(1)"
>联系人</span >关注</span
> >
<!-- <el-tag size="mini" type="danger" v-if="myUnreadNum" <!-- <el-tag size="mini" type="danger" v-if="myUnreadNum"
>未读{{ myUnreadNum }}</el-tag >未读{{ myUnreadNum }}</el-tag
> --> > -->
</p> </p>
<!-- <p v-show="loadStatus === 1 && aIndex === 0" class="empty-data">
暂无聊天消息
</p> -->
<!-- 对话列表 --> <!-- 对话列表 -->
<template v-if="aIndex === 0"> <template v-if="aIndex === 0">
<div <div
@ -126,6 +123,13 @@
<i class="el-icon-top" /> <i class="el-icon-top" />
</div> </div>
</div> </div>
<!-- <div
class="ximng"
:style="{ position: 'absolute', left: '5%', top: '8.5%',zIndex:9999999,width:'10%',textAlign:'center',background:url(adminpng) }"
@click.stop="guzki(item)"
>
X
</div> -->
<div class="card-box"> <div class="card-box">
<div class="title"> <div class="title">
<div class="card-name"> <div class="card-name">
@ -209,7 +213,7 @@
@click="clickTab(item.friendId, item, index, 1)" @click="clickTab(item.friendId, item, index, 1)"
> >
<div class="avatar-box"> <div class="avatar-box">
<face :text="item.face" v-if="item.face"></face> <face :text="item.avatar" v-if="item.avatar"></face>
<face-null :text="item.name" v-else></face-null> <face-null :text="item.name" v-else></face-null>
<div <div
v-show="item.is_top == 0" v-show="item.is_top == 0"
@ -219,6 +223,7 @@
<i class="el-icon-top" /> <i class="el-icon-top" />
</div> </div>
</div> </div>
<div class="card-box"> <div class="card-box">
<div class="title"> <div class="title">
<div class="card-name"> <div class="card-name">
@ -308,6 +313,7 @@
class="full-height flex-8" class="full-height flex-8"
:params="params" :params="params"
:goodsParams="goodsParams" :goodsParams="goodsParams"
:userobj="userobj"
:is-online="isFriendOnline" :is-online="isFriendOnline"
@change-talk="changeTalk" @change-talk="changeTalk"
@close-talk="closeTalk" @close-talk="closeTalk"
@ -321,6 +327,7 @@
class="full-height flex-8" class="full-height flex-8"
:params="params" :params="params"
:goodsParams="goodsParams" :goodsParams="goodsParams"
:userobj="userobj"
:is-online="isFriendOnline" :is-online="isFriendOnline"
@change-talk="changeTalk" @change-talk="changeTalk"
@close-talk="closeTalk" @close-talk="closeTalk"
@ -334,6 +341,7 @@
<!-- 用户查询组件 --> <!-- 用户查询组件 -->
<UserSearch ref="searchUsers" /> <UserSearch ref="searchUsers" />
<Groupchats ref="Groupchats" :userContact="{ fn: userContact }" />
</div> </div>
</template> </template>
<script> <script>
@ -342,6 +350,7 @@ import MainLayout from "@/views/layout/MainLayout";
import WelcomeModule from "@/components/layout/WelcomeModule"; import WelcomeModule from "@/components/layout/WelcomeModule";
import TalkPanel from "@/components/chat/panel/TalkPanel"; import TalkPanel from "@/components/chat/panel/TalkPanel";
import UserSearch from "@/components/user/UserSearch"; import UserSearch from "@/components/user/UserSearch";
import Groupchats from "@/components/user/Groupchats";
import OtherLink from "@/components/chat/panel/OtherLink.vue"; import OtherLink from "@/components/chat/panel/OtherLink.vue";
import { import {
ServeGetTalkList, ServeGetTalkList,
@ -352,6 +361,7 @@ import {
ServeuserContact, ServeuserContact,
} from "@/api/chat"; } from "@/api/chat";
import { ServeDeleteContact, ServeEditContactRemark } from "@/api/contacts"; import { ServeDeleteContact, ServeEditContactRemark } from "@/api/contacts";
// import admin from "@/icons/admin.png";
import { beautifyTime } from "@/utils/functions"; import { beautifyTime } from "@/utils/functions";
import { formatTalkItem, findTalkIndex, getCacheIndexName } from "@/utils/talk"; import { formatTalkItem, findTalkIndex, getCacheIndexName } from "@/utils/talk";
import { setToken } from "@/utils/auth"; import { setToken } from "@/utils/auth";
@ -366,9 +376,11 @@ export default {
UserSearch, UserSearch,
OtherLink, OtherLink,
WelcomeModule, WelcomeModule,
Groupchats,
}, },
data() { data() {
return { return {
// adminpng:admin,
aIndex: 0, //0 1 aIndex: 0, //0 1
bIndex: 0, //0 bIndex: 0, //0
userobj: {}, userobj: {},
@ -402,6 +414,8 @@ export default {
interval: null, interval: null,
userTalkItem: [], userTalkItem: [],
userContact: [], userContact: [],
count: 0,
state: 0, // 0 1
}; };
}, },
computed: { computed: {
@ -435,13 +449,18 @@ export default {
return index >= 0 && this.talks[index].is_online == 1; return index >= 0 && this.talks[index].is_online == 1;
}, },
}, },
provide() {
return {
callGrandfatherMethod: this.aIndexclick("undefined"),
loadChatListMethod: this.loadChatList,
};
},
watch: { watch: {
talkItems(val) { talkItems(val) {
val ? this.$set(this, "userTalkItem", val) : ""; val ? this.$set(this, "userTalkItem", val) : "";
}, },
// //
input(val, oldVal) { input(val, oldVal) {
console.log(val, oldVal);
if (val) { if (val) {
let str = ["", ...val, ""].join(".*"); let str = ["", ...val, ""].join(".*");
let reg = new RegExp(str); let reg = new RegExp(str);
@ -454,7 +473,6 @@ export default {
}, },
unreadNum(value) { unreadNum(value) {
clearInterval(this.interval); clearInterval(this.interval);
// console.log("%c ", "color:#32ccbc");
this.$store.commit("SET_UNREAD_NUM", value); this.$store.commit("SET_UNREAD_NUM", value);
if (value > 0) { if (value > 0) {
@ -484,19 +502,30 @@ export default {
beforeCreate() { beforeCreate() {
setToken(this.$route.query.token); setToken(this.$route.query.token);
}, },
async created() { // async created() {
// await this.initialize();
// await this.loadUserSetting();
// /**
// * id
// *
// * id
// */
// },
async mounted() {
await this.initialize(); await this.initialize();
await this.loadUserSetting(); await this.loadUserSetting();
/**
* 如果说有id 说明是用户点击 联系客服 进入的该页面
* 所以创建会话 并请求用户列表
* 如果没有id说明当前商家登录 直接请求用户列表
*/
},
mounted() {
this.scrollEvent(); this.scrollEvent();
this.getcon(); setTimeout(() => {
//
if (this.state == 1) {
this.aIndexclick(0);
}
//
if (this.state == 0) {
this.aIndexclick(0);
}
}, 1000);
}, },
destroyed() { destroyed() {
document.title = title; document.title = title;
@ -504,8 +533,26 @@ export default {
this.clearTalk(); this.clearTalk();
}, },
methods: { methods: {
aIndexclick(index) { async aIndexclick(index) {
if (index == "undefined") {
this.aIndex = 0;
} else {
this.aIndex = index; this.aIndex = index;
}
//
if (this.state == 1) {
if (index == 0 || index == 1 || index == 3) {
await this.getcon();
await this.loadChatList();
}
}
//
if (this.state == 0) {
if (index == 0 || index == 1 || index == 4) {
await this.getcon();
await this.loadStoreChatList();
}
}
this.bIndex = 0; this.bIndex = 0;
}, },
// //
@ -514,13 +561,16 @@ export default {
// //
async createTalk(id) { async createTalk(id) {
await ServeCreateTalkList(id); await ServeCreateTalkList(id);
await this.loadChatList();
}, },
// header // header
closeSubMenu() { closeSubMenu() {
this.subMenu = false; this.subMenu = false;
}, },
//
guzki(obj) {
console.log(obj, "关注成功");
},
//
getcon() { getcon() {
ServeuserContact().then((res) => { ServeuserContact().then((res) => {
if (res.code == 200) { if (res.code == 200) {
@ -554,6 +604,16 @@ export default {
this.$refs.searchUsers.open(); this.$refs.searchUsers.open();
} }
}, },
//
Groupchats(type) {
// this.closeSubMenu();
// if (type == 1) {
// this.launchGroupShow = true;
// } else {
this.$refs.Groupchats.open();
// }
},
// //
scrollEvent() { scrollEvent() {
@ -565,7 +625,6 @@ export default {
// //
loadChatList() { loadChatList() {
this.loadStatus = this.talkNum == 0 ? 0 : 1; this.loadStatus = this.talkNum == 0 ? 0 : 1;
ServeGetTalkList() ServeGetTalkList()
.then(({ code, result }) => { .then(({ code, result }) => {
if (code !== 200) return false; if (code !== 200) return false;
@ -573,11 +632,9 @@ export default {
this.$store.commit("SET_TALK_ITEMS", { this.$store.commit("SET_TALK_ITEMS", {
items: result.map((item) => formatTalkItem(item)), items: result.map((item) => formatTalkItem(item)),
}); });
// //
if (this.$route.query.id) { if (this.$route.query.id) {
let takeData, takeIndex; let takeData, takeIndex;
console.log("用户result", result);
this.talkItems.forEach((take, index) => { this.talkItems.forEach((take, index) => {
if (take.userId == this.$route.query.id) { if (take.userId == this.$route.query.id) {
takeData = take; takeData = take;
@ -599,6 +656,7 @@ export default {
if (!id) return; if (!id) return;
this.activeIndex = index; this.activeIndex = index;
var item = []; var item = [];
if (con == 1) { if (con == 1) {
this.bIndex = 1; this.bIndex = 1;
item = item =
@ -611,25 +669,24 @@ export default {
return item.userId == id; return item.userId == id;
}) || {}; }) || {};
} }
// console.log(item,'');
this.userobj = item; this.userobj = item;
// //
this.$store.state.user.toUser = val; this.$store.state.user.toUser = val;
let nickname = item.name;
this.params = { this.params = {
talk_type: 1, talk_type: 1,
receiver_id: item.userId, receiver_id: con == 1 ? item.friendId : item.userId,
nickname, nickname: con == 1 ? item.nickname : item.name,
is_robot: item.is_robot, is_robot: item.is_robot,
talkId: item.id, //id talkId: con == 1 ? item.talkId : item.id, //id
// talkId: item.id,
// talkId:this.$store.state.user.id,
clickFlag: true, clickFlag: true,
}; };
// //
this.$store.commit("UPDATE_DIALOGUE_MESSAGE", { this.$store.commit("UPDATE_DIALOGUE_MESSAGE", {
talk_type: 1, talk_type: 1,
receiver_id: item.userId, receiver_id: con == 1 ? item.friendId : item.userId,
is_robot: item.is_robot, is_robot: item.is_robot,
}); });
@ -867,6 +924,11 @@ export default {
.user-status { .user-status {
margin-left: 10px; margin-left: 10px;
} }
.addcre {
width: 50%;
text-align: right;
cursor: pointer;
}
.aside-box { .aside-box {
position: relative; position: relative;
border-right: 1px solid rgb(245, 245, 245); border-right: 1px solid rgb(245, 245, 245);
@ -1029,7 +1091,8 @@ export default {
align-items: center; align-items: center;
border-left: 3px solid transparent; border-left: 3px solid transparent;
transition: 0.2s ease-in; transition: 0.2s ease-in;
.ximng {
}
.avatar-box { .avatar-box {
height: 35px; height: 35px;
width: 35px; width: 35px;

View File

@ -31,6 +31,11 @@ const vueConfig = {
runtimeCompiler: false, runtimeCompiler: false,
devServer: { devServer: {
port: 8000, port: 8000,
client:{
overlay:{
runtimeErrors:false //编译出现错误或警告,是否全屏显示
}
}
// proxy: { // proxy: {
// //配置跨域 // //配置跨域
// '/api': { // '/api': {

View File

@ -64,6 +64,17 @@ service.interceptors.response.use(
} }
break; break;
case 20004: case 20004:
// 未登录 清除已登录状态
Cookies.set("userInfoManager", "");
setStore("accessToken", "");
if (router.history.current.name != "login") {
if (data.message !== null) {
Message.error(data.message);
} else {
Message.error("未知错误,请重新登录");
}
router.push("/login");
}
case 401: case 401:
// 未登录 清除已登录状态 // 未登录 清除已登录状态
Cookies.set("userInfoManager", ""); Cookies.set("userInfoManager", "");

View File

@ -41,7 +41,7 @@
</Input> </Input>
</FormItem> </FormItem>
<FormItem label="发货人手机号" prop="salesConsignorMobile"> <FormItem label="发货人手机号" prop="salesConsignorMobile">
<Input v-model="addressGoods.salesConsignorMobile" maxlength="11" clearable style="width: 20%"> <Input v-model.trim="addressGoods.salesConsignorMobile" maxlength="11" clearable style="width: 20%">
</Input> </Input>
</FormItem> </FormItem>
<FormItem label="地址" prop="salesConsignorAddressId"> <FormItem label="地址" prop="salesConsignorAddressId">
@ -70,7 +70,7 @@
<Input v-model="addressForm.salesConsigneeName" maxlength="11" clearable style="width: 20%" /> <Input v-model="addressForm.salesConsigneeName" maxlength="11" clearable style="width: 20%" />
</FormItem> </FormItem>
<FormItem label="收货人电话" prop="salesConsigneeMobile"> <FormItem label="收货人电话" prop="salesConsigneeMobile">
<Input v-model="addressForm.salesConsigneeMobile" maxlength="11" style="width: 20%" /> <Input v-model.trim="addressForm.salesConsigneeMobile" maxlength="11" style="width: 20%" />
</FormItem> </FormItem>
<FormItem label="售后地址"> <FormItem label="售后地址">
<span>{{ addressForm.salesConsigneeAddressPath }}</span> <span>{{ addressForm.salesConsigneeAddressPath }}</span>
@ -267,10 +267,10 @@ export default {
addressGoodsValidate: { addressGoodsValidate: {
salesConsignorName: [ salesConsignorName: [
{ required: true, message: "请输入发货人姓名", trigger: "blur" }, { required: true, message: "请输入发货人姓名", trigger: "blur" ,maxlength:11},
], ],
salesConsignorMobile: [ salesConsignorMobile: [
{ required: true, message: "手机号不能为空", trigger: "blur" }, { required: true, message: "手机号不能为空", trigger: "blur",maxlength:11 },
{ {
pattern: RegExp.mobile, pattern: RegExp.mobile,
trigger: "blur", trigger: "blur",

3
txim/.browserslistrc Normal file
View File

@ -0,0 +1,3 @@
> 1%
last 2 versions
not dead

23
txim/.gitignore vendored Normal file
View File

@ -0,0 +1,23 @@
.DS_Store
node_modules
/dist
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

19
txim/README.md Normal file
View File

@ -0,0 +1,19 @@
# txim
## Project setup
```
npm install
```
### Compiles and hot-reloads for development
```
npm run serve
```
### Compiles and minifies for production
```
npm run build
```
### Customize configuration
See [Configuration Reference](https://cli.vuejs.org/config/).

5
txim/babel.config.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

30
txim/package.json Normal file
View File

@ -0,0 +1,30 @@
{
"name": "txim",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"@tencentcloud/chat-uikit-vue": "^2.4.3",
"axios": "^1.8.2",
"core-js": "^3.8.3",
"element-ui": "^2.15.14",
"js-base64": "^3.7.7",
"qs": "^6.14.0",
"vue": "^2.7.9",
"vue-class-component": "^7.2.3",
"vue-property-decorator": "^9.1.2",
"vue-router": "^4.5.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-typescript": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"sass": "^1.32.7",
"sass-loader": "^12.0.0",
"typescript": "~4.5.5",
"vue-template-compiler": "^2.7.9"
}
}

BIN
txim/public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

17
txim/public/index.html Normal file
View File

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

68
txim/src/App.vue Normal file
View File

@ -0,0 +1,68 @@
<template>
<div id="app">
<!-- 消息 -->
<TUIKit
v-if="flag"
:SDKAppID="info.SDKAppID"
:userID="info.userID"
:userSig="info.userSing"
/>
<!-- 视频电话 -->
<!-- <TUICallKit
class="callkit-container"
:allowedMinimized="true"
:allowedFullScreen="false"
/> -->
</div>
</template>
<script lang="ts" setup>
import { TUIKit } from "./TUIKit";
import { TUICallKit } from "@tencentcloud/call-uikit-vue2";
import { reactive, ref, onMounted, onUpdated,onBeforeMount } from "vue";
import axios from "axios";
//
// const info = reactive({
// userSing:'eJwtzEELgjAYxvHvsnPou82pCV2CIsEoUW9exK14WelwS4Lou2fq8fk98P*QMiu8UQ0kIcwDspk3StU5vOHMTlm3upW6MQYlSWgIAIxHIlwe9TY4qMmFEGy6FnX4-FsUUMaBxnyt4H3KZuD62n-Yanvu9TUXrxiPwaEqtC5pl6dD2ehT7Tdin46Xdke*P1PQMZc_',
// SDKAppID:1600023756,
// userID:'test'
// })
const flag = ref(false)
const info = reactive({
userSing: "",
SDKAppID: Number("1"),
userID: "",
});
const getIMDetail = async () => {
const urlParams = new URLSearchParams(window.location.search);
const token = urlParams.get("token");
if (token) {
try {
const { data } = await axios.get(
"http://192.168.1.200:8888/buyer/passport/member/im-info",
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
accesstoken: token,
},
}
);
info.userSing = data.result.userSig;
info.SDKAppID = data.result.sdkAppId;
info.userID = data.result.userID;
flag.value = true;
} catch (error) {
alert("没有登陆");
window.close();
}
} else {
alert("没有登陆");
window.close();
}
};
getIMDetail()
</script>
<style lang="scss"></style>

View File

@ -0,0 +1,208 @@
## [2.4.0] (2025-01-16)
### Fix
- 修复 sendMessage 时携带的默认信息,支持用户自定义配置。
## [2.3.8] (2025-01-10)
### Features
- 支持文本消息 url 高亮跳转
## Fix
- 修复自定义大表情失效问题
- 修复 login 时好友列表数据未重置问题
## [2.3.6] (2024-12-06)
### Fix
- 修复 marked 依赖丢失 ts 类型声明
## [2.3.5] (2024-12-06)
### Features
- 支持消息 markdown 展示
- 支持消息流式输出效果
## Fix
- 修复 Toast 失效问题
## [2.3.3] (2024-10-28)
### Features
- 支持群组禁言后发送消息错误提示国际化
## Fix
- 修复集成 CallKit 点击通话按钮偶现无响应问题
## [2.3.2] (2024-10-28)
## Fix
- 修复群聊中群管理入口偶现的丢失问题
## [2.3.1] (2024-10-25)
## Fix
- 修复 H5 安全区遮挡问题
- 修复 H5 键盘遮挡输入框问题
- 修复撤回消息中撤回人为空问题
- 修复 TUIContact 修改好友备注后列表显示未更新问题
## [2.2.9] (2024-10-17)
## Fix
- 修复 Callkit 融合被叫超时无应答英文词条翻译错误问题
## [2.2.8] (2024-09-24)
### Features
- 支持繁体中文语言
- 支持新增自定义语言类型
## Fix
- 修复 MessageInput 内容中间回车发送消息引入换行问题
## [2.2.7] (2024-09-13)
### Features
- 优化 C2C 会话音视频通话信令上屏(对齐微信体验)
## [2.2.6] (2024-09-06)
### Features
- Work 类型群组支持普通群成员修改群名称、群公告信息
## [2.2.3] (2024-07-05)
### Features
- 支持会话草稿
- 支持富文本复制
- 支持文本部分复制
- 语音消息使用红点提示是否播放
## Fix
- 修复邀请加入群聊选人组件未过滤已有群成员问题
- 修复 TUISearch 搜索文本消息出现 [系统消息] 前缀问题
- 修复消息引用语音但展示为"聊天记录"的问题
- 修复 Callkit 在 H5 环境下布局只有半屏的问题
## [2.2.0] (2024-06-17)
### Features
- 支持消息多选、消息逐条转发、消息合并转发
- 支持表情包自定义
- 支持中英文 github readme
- 被引用消息撤回时隐藏原始消息内容并提醒已撤回
## [2.1.4] (2024-05-20)
### Fix
- 修复头像组件因加载图片失败导致的循环加载问题
## [2.1.3] (2024-05-17)
### Features
- 点击空白区域时收起小表情面板和工具栏
- callkit 提供音视频通话中途加人能力
- 更新 roomkit 引用方式
### Fix
- 修复视频一定概率无法播放的问题
- 修复消息引用的视觉左侧未对齐的问题
## [2.1.1] (2024-04-26)
### Features
- 支持语音转文字
- 文本消息转翻译兼容小表情上屏,兼容提及所有人
### Fix
- 优化已读回执详情列表超长昵称的显示效果
- 解决转发消息已读回执失效的问题
- 解决加没有群申请时额外请求用户信息的问题
## [2.1.0] (2024-04-12)
### Features
- 新增消息翻译功能
## [2.0.9] (2024-03-29)
### Features
- ScrollButton 支持未读新消息提示
- 群未决申请展示优化
- 兼容支持 H5 IOS longPress 事件
### Update
- 下线本地审核相关入口
### Fix
- 修复 nick 过长样式溢出问题
## [2.0.8] (2024-03-15)
### Fix
- 修复已知问题,提升稳定性
## [2.0.7] (2024-03-15)
### Fix
- TUIConversation network 断网显示优化
- 修复消息列表滚动到顶部后"回到底部"按钮消失的问题
- 修复一定概率下消息列表为空的问题
## [2.0.6] (2024-03-01)
### Features
- 升级 universal api 引入方式
## [2.0.5] (2024-02-04)
### Features
- 新增表情回复功能(需购买旗舰版)
- 聊天界面更新黄脸小表情
- 添加音频播放动画
### Fix
- 语音场景优化 修复了语音播放相关的体验问题
## [2.0.4] (2024-01-19)
### Features
- 支持文本消息复制
## [2.0.3] (2024-01-12)
### Features
- TUIContact 关系链支持用户在线状态。
- TUIContact 中获取客服列表的时机调整为 Engine 设置商业化能力位之后。
### Fix
- 修复已知问题,提升稳定性
## [2.0.2] (2024-01-05)
### Fix
- 修复 IOS13 消息无法发送问题
- 修复已知问题,提升稳定性
## [2.0.0] (2023-12-21)
### Features
- 全面支持 Vue2 & Vue3包括以下主体功能
- TUIChat: 负责消息界面展示,包括多类型消息收发,消息引用/删除/撤回/转发、查询消息已读回执详情等功能。
- TUIConversation: 负责会话列表的展示和编辑,包括会话置顶、会话消息免打扰、会话删除等功能.
- TUISearch: 负责消息云端搜索,包括全局搜索与会话内搜索,支持文本、图片、文件等多类型消息混合搜索,支持搜索时间范围选择与搜索结果定位,免费试用请点击 https://cloud.tencent.com/document/product/269/92648#ae4e3f5c-94db-4df3-8a49-65d23ce417b8 开通。
- TUIGroup: 负责群聊的创建以及群资料、群成员、群组权限、群公告、群禁言的管理。
- TUIContact: 负责联系人与群组展示,添加好友,移入黑名单,好友备注,信息展示等功能。
- 同时,我们还提供了功能丰富的插件系统:
- TUICustomerService: 在线客服插件,支持灵活的路由排队、客服接待、智能机器人功能,配合功能丰富的管理端与数据分析能力,支持客服多终端办公,免费试用请点击 https://cloud.tencent.com/document/product/269/92648#ae4e3f5c-94db-4df3-8a49-65d23ce417b8 开通。
- TUICallKit: 音视频通话 UI 组件,支持两人或多人进行音视频通话,覆盖游戏社交、在线客服、视频客服、在线问诊、保险咨询等场景,免费试用请点击 https://cloud.tencent.com/document/product/269/79861#step1 开通。

94
txim/src/TUIKit/README.md Normal file
View File

@ -0,0 +1,94 @@
<h1 align="center">chat-uikit-vue</h1>
<p align="center">
Globally interconnected In-App Chat, user profile and relationship chains and online/offline push.
</p>
<p align="center">
<span>English / </span>
<a href="https://github.com/TencentCloud/chat-uikit-vue/blob/main/.github/README_ZH.md">简体中文</a>
</p>
![image](https://github.com/TencentCloud/chat-uikit-vue/assets/57951148/7bd24604-1e5e-4541-8992-245dccbbc810)
![image](https://github.com/TencentCloud/chat-uikit-vue/assets/57951148/40ae2f49-39ae-432d-8d1b-5b46414bc3b4)
## About chat-uikit-vue
[chat-uikit-vue](https://www.npmjs.com/package/@tencentcloud/chat-uikit-vue) is a Vue UI component library based on Tencent Cloud Chat SDK. It provides universally used UI components that include Conversation, Chat, and Group components. Leveraging these meticulously crafted UI components, you can quickly construct an elegant, reliable, and scalable Chat application.
> In respect for the copyright of the emoji design, the Chat Demo/TUIKit project does not include the cutouts of large emoji elements. Please replace them with your own designed or copyrighted emoji packs before the official launch for commercial use. The default small yellow face emoji pack is copyrighted by Tencent Cloud and can be authorized for a fee. If you wish to obtain authorization, please [submit a ticket](https://console.tencentcloud.com/workorder/category?level1_id=29&level2_id=40&source=14&data_title=Chat&step=1) to contact us.
## Core Capabilities
- UIKit: Build a fully-featured chat app in just ten minutes using UIKit components
- Various Message Types: Support multiple message types, such as text, images, audio, and video messages
- Notifications: Timely notify users of app messages and drive higher conversion rates
- Group Management: Create groups, manage group members, and customize profiles
- Conversation Management: View information about unread messages, recent, pinned, or deleted chats
## Demo
👉🏻 [Free Demo](https://web.sdk.qcloud.com/im/demo/intl/index.html?scene=social)
## Send Your First Message
### Vue3
- [Integration TUIKit](https://trtc.io/document/58644?platform=web&product=chat)
- [Quick Run Demo](https://github.com/TencentCloud/chat-uikit-vue/blob/main/Vue3/Demo/README.md)
### Vue2
- [Integration TUIKit](https://trtc.io/document/58644?platform=web&product=chat)
- [Quick Run Demo](https://github.com/TencentCloud/chat-uikit-vue/blob/main/Vue2/Demo/README.md)
## TUILogin
``` javascript
import { TUILogin } from '@tencentcloud/tui-core';
```
The options parameter is of the Object type. It contains the following attribute values:
| Name | Type | Description |
| --- | --- | --- |
| SDKAppID | number | Required, SDKAppID of the chat app |
| userID | string | Required, user ID|
| userSig |string | Required, the password with which the user logs in to the Chat console. It is essentially the ciphertext generated by encrypting information such as the UserID.For the detailed generation method, see [Generating UserSig](https://trtc.io/document/34385) |
| TIMPush | any | Optional, TIMPush plugin instance when uniapp build app packages |
| pushConfig | object | Optional, TIMPush plugin's config |
| useUploadPlugin | boolean | Optional, whether to use the upload plugin, the default is false |
| proxyServer | string | Optional, WebSocket server proxy address |
| fileUploadProxy | string | Optional, image, video, file upload proxy address |
| fileDownloadProxy | string | Optional, image, video, file download proxy address|
| framework | string \| undefined | Required, UI framework type, optional values: vue2、vue3、undefined |
``` javascript
// Login
TUILogin.login(options);
```
``` javascript
// Logout
TUILogin.logout();
```
``` javascript
// Set the SDK log level.
// 0: Common level. You are advised to use this level during access as it covers more logs.
// 1: Release level. You are advised to use this level for key information in a production environment.
TUILogin.setLogLevel(0);
```
``` javascript
// Get Chat SDK instance
const { chat } = TUILogin.getContext();
```
## Documentation
- [Home page](https://trtc.io/document/50061?platform=web&product=chat)
- [@tencentcloud/chat-uikit-vue npm](https://www.npmjs.com/package/@tencentcloud/chat-uikit-vue)
- [Chat SDK](https://trtc.io/document/34309?platform=web&product=chat)
## Contact Us
Join a Tencent Cloud Chat developer group for Reliable technical support & Product details & Constant exchange of ideas.
- Telegram group (EN): [join](https://t.me/+1doS9AUBmndhNGNl)
- WhatsApp group (EN): [join](https://chat.whatsapp.com/Gfbxk7rQBqc8Rz4pzzP27A)
- Telegram group (ZH): [join](https://t.me/tencent_imsdk)
- WhatsApp group (ZH): [join](https://chat.whatsapp.com/IVa11ZkVmKTEwSWsAzSyik)

View File

@ -0,0 +1,51 @@
import * as Vue from 'vue';
import { TUIGlobal } from '@tencentcloud/universal-api';
let vueVersion: number;
let framework = 'vue2';
let createVNode = (
arg1: any,
arg2: any,
): { component: any; props: any; data: any } => {
return {} as { component: any; props: any; data: any };
};
let render = (arg1: any, arg2: any) => {
return;
};
try {
if (
(Vue as any)?.default?.version
&& (Vue as any)?.default?.version?.startsWith('2.7.')
) {
// >= Vue 2.7.0
vueVersion = 2.7;
TUIGlobal.Vue = (Vue as any)?.getCurrentInstance()?.appContext?.app;
} else if (
(Vue as any)?.default?.version
&& (Vue as any)?.default?.version?.startsWith('2.')
) {
// < Vue 2.7.0
vueVersion = 2;
TUIGlobal.Vue = (Vue as any).default;
} else {
// >= Vue 3.0.0
vueVersion = 3;
framework = 'vue3';
createVNode = (Vue as any)?.createVNode;
render = (Vue as any)?.render;
TUIGlobal.Vue = (Vue as any)?.getCurrentInstance()?.appContext?.app;
// exportedAPIOrigin = Vue;
}
} catch (error: any) {
// >= Vue 3.0.0
vueVersion = 3;
framework = 'vue3';
createVNode = (Vue as any)?.createVNode;
render = (Vue as any)?.render;
TUIGlobal.Vue = (Vue as any)?.getCurrentInstance()?.appContext?.app;
}
console.warn(`[adapter-vue]: vue version is ${vueVersion}`);
export { vueVersion, framework, render, createVNode };
export * from 'vue';

View File

@ -0,0 +1,7 @@
<svg width="56" height="57" viewBox="0 0 56 57" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 4">
<circle id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;&#229;&#164;&#135;&#228;&#187;&#189; 27" cx="28" cy="28.8535" r="26" stroke="#444444" stroke-width="4"/>
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;&#229;&#164;&#135;&#228;&#187;&#189; 8" x="15" y="27.8535" width="26" height="4" rx="1" fill="#444444"/>
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;&#229;&#164;&#135;&#228;&#187;&#189; 8_2" x="26" y="42.8535" width="26" height="4" rx="1" transform="rotate(-90 26 42.8535)" fill="#444444"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 666 B

View File

@ -0,0 +1,12 @@
<svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.80492">
<rect x="0.25" y="7.25" width="13.5" height="0.5" rx="0.25" stroke="#232832"
style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"
stroke-width="0.5" />
<rect x="6.75" y="14.25" width="13.5" height="0.5" rx="0.25"
transform="rotate(-90 6.75 14.25)" stroke="#232832"
style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"
stroke-width="0.5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 626 B

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>画板</title>
<g id="画板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="at" fill-rule="nonzero">
<g id="编组-11">
<circle id="蒙版" fill="#006EFF" cx="9" cy="9" r="9"></circle>
<path d="M9.66185229,2.28113733 C6.35797576,1.9652543 3.31197412,4.08255376 2.47142946,7.27925624 C1.63088481,10.4759587 3.24414254,13.8075738 6.27970227,15.1439012 C7.13080638,15.5270729 8.05149341,15.7333128 8.98542228,15.75 C10.4722047,15.75 11.9176115,15.2625575 13.0981167,14.3627071 C13.3947741,14.1374908 13.4522747,13.7156728 13.2266384,13.4198867 C13.1178721,13.276076 12.9558003,13.1816064 12.776601,13.1575656 C12.5974017,13.1335248 12.415994,13.1819143 12.2728721,13.2919325 C10.3435542,14.7428224 7.68158841,14.7434418 5.75158944,13.29345 C3.82159048,11.8434583 3.09194171,9.29474777 3.96409619,7.04962006 C4.83625067,4.80449236 7.09854886,3.40780813 9.50627338,3.62802361 C12.3207581,3.95233736 14.4329906,6.34319268 14.3968623,9.16372615 L14.3968623,9.62166747 C14.3952895,9.9342631 14.2661407,10.232791 14.0390751,10.4486938 C13.8120095,10.6645966 13.5065396,10.7793212 13.1928169,10.7665208 C12.550363,10.6962989 12.071833,10.14342 12.0970003,9.50044771 L12.0970003,6.59117338 C12.0970003,6.21924101 11.7941523,5.91773024 11.4205703,5.91773024 C11.0787978,5.91484427 10.78856,6.16623611 10.7441403,6.50362577 C10.1146233,5.91340542 9.28194317,5.58565993 8.41722108,5.58774312 C6.79570933,5.59984582 5.40245718,6.73673734 5.07217831,8.31729266 C4.74189943,9.89784798 5.56412488,11.4936147 7.04624976,12.1485503 C8.52837464,12.8034859 10.2686288,12.3400523 11.2244056,11.0358981 C11.622024,11.6482852 12.275384,12.0499682 13.0034289,12.1296342 C13.7314737,12.2093002 14.4568676,11.9584868 14.9785921,11.4466984 C15.4798496,10.9719157 15.7593539,10.3104139 15.7497223,9.62166747 L15.7497223,9.16372615 C15.7810534,5.6593071 13.1575247,2.69329944 9.66185229,2.28113733 Z M8.43074968,11.0965079 C7.27638137,11.0965079 6.34058097,10.1648397 6.34058097,9.01556866 C6.34058097,7.86629763 7.27638137,6.93462938 8.43074968,6.93462938 C9.58511798,6.93462938 10.5209184,7.86629763 10.5209184,9.01556866 C10.5172055,10.1633051 9.58357657,11.0928115 8.43074968,11.0965079 L8.43074968,11.0965079 Z" id="形状" fill="#FFFFFF"></path>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 56 57" class="design-iconfont">
<g fill="none" fill-rule="evenodd">
<path stroke="#444" stroke-width="4" d="M28 2A26 26 0 1 0 28 54A26 26 0 1 0 28 2Z" transform="translate(0 .853448)"/>
<path d="M3.22061856,17.5880403 C3.66244636,17.5880403 4.02061856,17.9462125 4.02061856,18.3880403 L4.02061856,18.6926914 C4.02061856,24.8806658 8.93625507,29.8970101 15,29.8970101 C20.967495,29.8970101 25.8230402,25.0386509 25.975681,18.9864559 L25.9793814,18.6926914 L25.9793814,18.3880403 C25.9793814,17.9462125 26.3375536,17.5880403 26.7793814,17.5880403 L29.2,17.5880403 C29.6418278,17.5880403 30,17.9462125 30,18.3880403 L30,18.6926914 C30,27.1466845 23.2842712,34 15,34 C6.82193736,34 0.172455987,27.3212841 0.00330065692,19.0170447 L0,18.6926914 L0,18.3880403 C-1.65130603e-16,17.9462125 0.3581722,17.5880403 0.8,17.5880403 L3.22061856,17.5880403 Z M15.1965847,0 C19.4037284,0 22.8142432,3.57961711 22.8142432,7.9953621 L22.8142432,18.3119584 C22.7872128,22.7074732 19.3846075,26.2557375 15.1965847,26.2557375 L14.8034153,26.2557375 C10.5962716,26.2557375 7.18575682,22.6760398 7.18575682,18.2603754 L7.18575682,7.94377912 C7.21278722,3.54818373 10.6153925,0 14.8034153,0 L15.1965847,0 Z M15.1965847,4.10298992 L14.8034153,4.10298992 C12.9144516,4.10298992 11.325224,5.69669854 11.2126654,7.73818076 L11.2063754,7.94377912 L11.2063754,18.2603754 C11.2063754,20.365303 12.7386643,22.0414789 14.614709,22.1474289 L14.8034153,22.1527476 L15.1965847,22.1527476 C17.0855164,22.1527476 18.6747739,20.5589954 18.7873345,18.5175525 L18.7936246,18.3119584 L18.7936246,7.9953621 C18.7936246,5.89038947 17.2613666,4.21425569 15.385294,4.10830842 L15.1965847,4.10298992 Z" transform="translate(13 12)" fill="#444" fill-rule="nonzero"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48px" height="48px" viewBox="0 0 48 48" version="1.1">
<title>ic_back_white</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="02.-查看信息-示例好友" transform="translate(-32.000000, -200.000000)">
<g id="编组-6" transform="translate(0.000000, 176.000000)">
<g id="ic_back_white" transform="translate(32.000000, 24.000000)">
<g id="ic_back_black" fill="#444444" fill-rule="nonzero">
<path d="M9.51231071,24 L23.5198286,38.7290411 C23.785378,39.0082689 23.7753168,39.4496082 23.4973187,39.7164448 L21.6255915,41.5130226 C21.3466827,41.7807332 20.9035602,41.7716553 20.6358496,41.4927466 C20.6351032,41.491969 20.6343586,41.4911896 20.6336157,41.4904085 L4.45876399,24.4823948 C4.2017544,24.2121467 4.2017544,23.7878533 4.45876399,23.5176052 L20.6336157,6.50959152 C20.900035,6.22944906 21.3431109,6.21832422 21.6232533,6.48474351 C21.6240344,6.48548634 21.6248138,6.48623097 21.6255915,6.48697741 L23.4973187,8.28355524 C23.7753168,8.55039175 23.785378,8.99173114 23.5198286,9.27095893 L9.51231071,24 L9.51231071,24 Z" id="Path-2"></path>
</g>
<rect id="矩形" x="0" y="0" width="48" height="48"></rect>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,6 @@
<svg width="33" height="23" viewBox="0 0 33 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M0.5 4.33337C0.5 2.12424 2.29086 0.333374 4.5 0.333374H19.1667C21.3758 0.333374 23.1667 2.12424 23.1667 4.33337V18.3334C23.1667 20.5425 21.3758 22.3334 19.1667 22.3334H4.5C2.29086 22.3334 0.5 20.5425 0.5 18.3334V4.33337ZM4.5 5.45837C4.5 4.90609 4.94771 4.45837 5.5 4.45837H7.5C8.05228 4.45837 8.5 4.90609 8.5 5.45837V7.58337C8.5 8.13566 8.05228 8.58337 7.5 8.58337H5.5C4.94771 8.58337 4.5 8.13566 4.5 7.58337V5.45837ZM33 4.85879C33 3.68986 31.7222 2.97013 30.7225 3.576L25.5742 6.69633L25.3333 6.8423V7.12393V15.43V15.7017L25.5613 15.8495L30.684 19.1709C31.6819 19.8179 33 19.1016 33 17.9122V4.85879ZM31.2408 4.43119C31.5741 4.22923 32 4.46914 32 4.85879V17.9122C32 18.3087 31.5606 18.5475 31.228 18.3318L26.3333 15.1583V7.40555L31.2408 4.43119Z"
fill="#333333" />
</svg>

After

Width:  |  Height:  |  Size: 941 B

View File

@ -0,0 +1,6 @@
<svg width="32" height="12" viewBox="0 0 32 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M8.6347 11.9983C9.72788 11.9992 10.6193 11.1223 10.6362 10.0292L10.673 7.64717C11.6292 7.36896 13.5482 6.92739 16.0961 6.92739C18.6443 6.92739 20.5804 7.36912 21.5479 7.64767L21.5621 9.97475C21.5689 11.0721 22.4585 11.9591 23.5559 11.9625L29.9833 11.9825C31.0878 11.9859 31.986 11.0933 31.9895 9.98883L32 6.68064C32 4.65824 30.7746 2.85759 28.9507 2.2C26.1675 1.1964 21.6615 0 16 0C10.3386 0 5.83262 1.1964 3.04934 2.2C2.38985 2.43778 1.80885 2.82489 1.33541 3.31805C0.499655 4.18858 0.000161509 5.38952 0 6.68064L0.00557949 9.99594C0.00743508 11.0985 0.90127 11.9916 2.00385 11.9926L8.6347 11.9983Z"
fill="#333333" />
</svg>

After

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
<title>清除</title>
<g id="页面-2备份" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="创建群聊" transform="translate(-1243.000000, -413.000000)">
<g id="Group-1364" transform="translate(650.000000, 343.000000)">
<g id="Group-1363" transform="translate(290.000000, 46.000000)">
<g id="Group-1358" transform="translate(0.000000, 24.000000)">
<g id="清除" transform="translate(303.000000, 0.000000)">
<path d="M0,0 L16,0 L16,16 L0,16 L0,0 Z" id="矩形"></path>
<path d="M1,8 C1,11.8659999 4.13400006,15 8,15 C11.8659999,15 15,11.8659999 15,8 C15,4.13400006 11.8659999,1 8,1 L8,1 C4.13400006,1 1,4.13400006 1,8 Z" fill="#999999"></path>
<g id="编组" transform="translate(8.000000, 8.000000) rotate(-315.000000) translate(-8.000000, -8.000000) translate(4.000000, 4.000000)" fill="#FFFFFF">
<rect id="矩形备份" transform="translate(4.000000, 4.000000) rotate(-90.000000) translate(-4.000000, -4.000000) " x="1.8189894e-12" y="3.5" width="8" height="1" rx="0.5"></rect>
<rect id="矩形备份" transform="translate(4.000000, 4.000000) rotate(-360.000000) translate(-4.000000, -4.000000) " x="0" y="3.5" width="8" height="1" rx="0.5"></rect>
</g>
<rect id="矩形" x="0" y="0" width="16" height="16"></rect>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,3 @@
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.50001 13C2.91038 13 0 10.0896 0 6.50001C0 2.91038 2.91038 0 6.50001 0C10.0896 0 13 2.91038 13 6.50001C13 10.0896 10.0896 13 6.50001 13ZM5.05051 9.05234C5.31489 9.31679 5.74359 9.31685 6.00805 9.05247C6.00809 9.05242 6.00813 9.05238 6.00817 9.05234L10.1129 4.94758C10.3774 4.68313 10.3774 4.25437 10.1129 3.98992C9.84847 3.72546 9.41971 3.72546 9.15526 3.98992L5.50008 7.58659L3.86425 5.95076C3.5998 5.68631 3.17104 5.68631 2.90659 5.95076C2.64213 6.21521 2.64213 6.64398 2.90659 6.90843L5.05051 9.05235L5.05051 9.05234Z" fill="#999"/>
</svg>

After

Width:  |  Height:  |  Size: 650 B

View File

@ -0,0 +1,3 @@
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.92904 6L11.815 1.11198C12.0617 0.86524 12.0617 0.458461 11.815 0.211725L11.7884 0.185051C11.5417 -0.0616838 11.1351 -0.0616838 10.8885 0.185051L6.0025 5.07974L1.11651 0.185051C0.869879 -0.0616838 0.463269 -0.0616838 0.216637 0.185051L0.189974 0.211725C-0.0633245 0.458461 -0.0633245 0.86524 0.189974 1.11198L5.07596 6L0.189974 10.888C-0.0566588 11.1348 -0.0566588 11.5415 0.189974 11.7883L0.216637 11.8149C0.463269 12.0617 0.869879 12.0617 1.11651 11.8149L6.0025 6.92692L10.8885 11.8149C11.1351 12.0617 11.5417 12.0617 11.7884 11.8149L11.815 11.7883C12.0617 11.5415 12.0617 11.1348 11.815 10.888L6.92904 6Z" fill="#8F959E" style="fill:#8F959E;fill:color(display-p3 0.5608 0.5843 0.6196);fill-opacity:1;"/>
</svg>

After

Width:  |  Height:  |  Size: 821 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,7 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="path-1-inside-1_2075_534" fill="white">
<rect y="6.10352e-05" width="16" height="16" rx="0.5"/>
</mask>
<rect y="6.10352e-05" width="16" height="16" rx="0.5" fill="white" stroke="#444444" stroke-width="4" mask="url(#path-1-inside-1_2075_534)"/>
<path d="M7.276 3.43201H8.872L12.148 12H10.648L9.868 9.85201H6.28L5.5 12H4L7.276 3.43201ZM6.7 8.70001H9.448L8.104 4.94401H8.056L6.7 8.70001Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 517 B

View File

@ -0,0 +1,8 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="path-1-inside-1_1_4" fill="white">
<rect y="6.10352e-05" width="16" height="16" rx="0.5"/>
</mask>
<rect y="6.10352e-05" width="16" height="16" rx="0.5" fill="white" stroke="#444444" stroke-width="4" mask="url(#path-1-inside-1_1_4)"/>
<path d="M4.51199 5.81608V6.39208H5.74399C6.10399 7.62408 6.74399 8.69608 7.67199 9.60808C6.80799 10.3921 5.70399 10.9601 4.35999 11.3201L4.66399 11.8241C6.02399 11.4321 7.15999 10.8161 8.07199 9.97608C8.93599 10.7201 10.024 11.3361 11.352 11.8321L11.664 11.3521C10.384 10.8801 9.31999 10.2881 8.47199 9.56808C9.25599 8.72008 9.84799 7.65608 10.24 6.39208H11.488V5.81608H8.43199C8.17599 5.26408 7.90399 4.79208 7.59999 4.40808L7.02399 4.61608C7.34399 4.99208 7.60799 5.39208 7.82399 5.81608H4.51199ZM6.31199 6.39208H9.63999C9.30399 7.49608 8.78399 8.43208 8.07199 9.20808C7.23999 8.40808 6.65599 7.47208 6.31199 6.39208Z" fill="#444444"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.31199 5.61608H7.48751C7.31129 5.31249 7.10719 5.02243 6.87168 4.74571L6.68467 4.52597L7.66745 4.17108L7.7568 4.28394C8.0517 4.65645 8.31433 5.10396 8.55891 5.61608H11.688V6.59208H10.3863C10.0114 7.74389 9.46813 8.73403 8.75997 9.54663C9.55979 10.1899 10.5494 10.7279 11.7332 11.1644L11.9682 11.2511L11.4323 12.0756L11.282 12.0194C10.0044 11.5423 8.9389 10.9527 8.07627 10.2412C7.1617 11.0446 6.04107 11.6353 4.71938 12.0163L4.57197 12.0587L4.05139 11.1957L4.30824 11.1269C5.54648 10.7952 6.56828 10.2862 7.38032 9.59789C6.54448 8.73191 5.95109 7.72929 5.59553 6.59208H4.31199V5.61608ZM5.74399 6.39208C6.08545 7.56066 6.67884 8.58529 7.53097 9.46597C7.57721 9.51377 7.62422 9.56114 7.67199 9.60808C7.62257 9.65292 7.57237 9.69705 7.52139 9.74048C6.72554 10.4184 5.73841 10.9245 4.56 11.2645C4.49393 11.2835 4.42726 11.3021 4.35999 11.3201L4.66399 11.8241C6.02399 11.4321 7.15999 10.8161 8.07199 9.97608C8.93599 10.7201 10.024 11.3361 11.352 11.8321L11.664 11.3521C11.5996 11.3283 11.5357 11.3043 11.4724 11.2799C10.3526 10.8491 9.40393 10.3229 8.6263 9.69577C8.57409 9.65366 8.52265 9.6111 8.47199 9.56808C8.51719 9.51918 8.56176 9.46957 8.60569 9.41924C9.32359 8.59671 9.87059 7.5832 10.24 6.39208H11.488V5.81608H8.43199C8.17599 5.26408 7.90399 4.79208 7.59999 4.40808L7.02399 4.61608C7.07008 4.67024 7.115 4.72489 7.15879 4.78004C7.3708 5.04705 7.55614 5.32573 7.71752 5.61608C7.75424 5.68215 7.78972 5.74881 7.82399 5.81608H4.51199V6.39208H5.74399ZM6.31199 6.39208C6.3334 6.45931 6.35574 6.52597 6.37901 6.59208C6.70795 7.52643 7.223 8.34973 7.92962 9.06741C7.97624 9.11476 8.0237 9.16165 8.07199 9.20808C8.07199 9.20808 8.07198 9.20809 8.07199 9.20808C8.11712 9.1589 8.16148 9.10906 8.20507 9.05858C8.80725 8.36128 9.26261 7.54091 9.5765 6.59208C9.59834 6.52604 9.61951 6.45937 9.63999 6.39208H6.31199ZM6.59144 6.59208C6.90978 7.46685 7.39807 8.23985 8.06267 8.91746C8.62858 8.25932 9.06168 7.48673 9.36556 6.59208H6.59144Z" fill="#444444"/>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,5 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<path fill="#444444"
style="fill:#444444;fill:color(display-p3 0.2667 0.2667 0.2667);fill-opacity:1;"
d="M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"></path>
</svg>

After

Width:  |  Height:  |  Size: 634 B

View File

@ -0,0 +1,5 @@
<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg">
<path fill="#444444"
style="fill:#444444;fill:color(display-p3 0.2667 0.2667 0.2667);fill-opacity:1;"
d="M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688zm-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"></path>
</svg>

After

Width:  |  Height:  |  Size: 611 B

View File

@ -0,0 +1,25 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9&#229;&#164;&#135;&#228;&#187;&#189;">
<path id="&#231;&#155;&#180;&#231;&#186;&#191;" d="M2.15682 4.76268H14.0347"
stroke="#FF584C"
style="stroke:#FF584C;stroke:color(display-p3 1.0000 0.3451 0.2980);stroke-opacity:1;"
stroke-linecap="round" />
<path id="&#231;&#155;&#180;&#231;&#186;&#191;&#229;&#164;&#135;&#228;&#187;&#189;"
d="M5.23978 2.15307H11.1684" stroke="#FF584C"
style="stroke:#FF584C;stroke:color(display-p3 1.0000 0.3451 0.2980);stroke-opacity:1;"
stroke-linecap="round" />
<path id="&#231;&#155;&#180;&#231;&#186;&#191;&#229;&#164;&#135;&#228;&#187;&#189; 2"
d="M6.90014 7.32796V10.9714" stroke="#FF584C"
style="stroke:#FF584C;stroke:color(display-p3 1.0000 0.3451 0.2980);stroke-opacity:1;"
stroke-linecap="round" />
<path id="&#231;&#155;&#180;&#231;&#186;&#191;&#229;&#164;&#135;&#228;&#187;&#189; 3"
d="M9.58605 7.32796V10.9714" stroke="#FF584C"
style="stroke:#FF584C;stroke:color(display-p3 1.0000 0.3451 0.2980);stroke-opacity:1;"
stroke-linecap="round" />
<path id="&#231;&#159;&#169;&#229;&#189;&#162;"
d="M4.14331 4.8316H12.1596V12.9091C12.1596 13.5367 11.6508 14.0454 11.0232 14.0454H5.27968C4.65208 14.0454 4.14331 13.5367 4.14331 12.9091V4.8316Z"
stroke="#FF584C"
style="stroke:#FF584C;stroke:color(display-p3 1.0000 0.3451 0.2980);stroke-opacity:1;" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1 @@
<svg t="1660053550964" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3181" width="200" height="200"><path d="M95.658667 461.354667a71.637333 71.637333 0 0 0 0 101.290666l365.696 365.696a71.637333 71.637333 0 0 0 101.290666 0l365.696-365.696a71.637333 71.637333 0 1 0-101.248-101.290666L512 776.448l-315.093333-315.093333a71.594667 71.594667 0 0 0-101.248 0z" p-id="3182" fill="#bfbfbf"></path><path d="M95.658667 95.658667a71.637333 71.637333 0 0 0 0 101.248l365.696 365.738666a71.594667 71.594667 0 0 0 101.290666 0l365.696-365.738666a71.637333 71.637333 0 0 0-101.248-101.248L512 410.709333 196.906667 95.658667a71.637333 71.637333 0 0 0-101.248 0z" p-id="3183" fill="#bfbfbf"></path></svg>

After

Width:  |  Height:  |  Size: 739 B

View File

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 5L7.21955 10L3 5" stroke="#979797"/>
</svg>

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,6 @@
<svg width="11" height="17" viewBox="0 0 11 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M9.13023 14.4401C9.3928 14.4401 9.64461 14.5444 9.83027 14.73C10.0159 14.9157 10.1202 15.1675 10.1202 15.4301C10.1202 15.6926 10.0159 15.9445 9.83027 16.1301C9.64461 16.3158 9.3928 16.4201 9.13023 16.4201H1.87023C1.60767 16.4201 1.35586 16.3158 1.1702 16.1301C0.984536 15.9445 0.880234 15.6926 0.880234 15.4301C0.880234 15.1675 0.984536 14.9157 1.1702 14.73C1.35586 14.5444 1.60767 14.4401 1.87023 14.4401H9.13023ZM5.50023 0.580078C5.7628 0.580078 6.01461 0.684381 6.20027 0.870042C6.38593 1.0557 6.49023 1.30751 6.49023 1.57008V8.59446L8.40027 6.51084C8.57111 6.32101 8.8087 6.20455 9.06339 6.18578C9.31808 6.16702 9.57018 6.2474 9.767 6.41014C9.96381 6.57287 10.0901 6.80537 10.1196 7.05905C10.149 7.31274 10.0792 7.56798 9.92487 7.77144L9.86019 7.84932L6.23019 11.8093C6.05448 12.001 5.81039 12.1159 5.55068 12.1291C5.29096 12.1423 5.03648 12.0528 4.84221 11.8799L4.77027 11.8093L1.14027 7.84932C0.968705 7.66225 0.875545 7.41643 0.880038 7.16264C0.884531 6.90885 0.986334 6.66648 1.16442 6.4856C1.3425 6.30472 1.58325 6.19916 1.83694 6.19071C2.09063 6.18226 2.33788 6.27158 2.52759 6.44022L2.60019 6.51084L4.51023 8.59578V1.57008C4.51023 1.30751 4.61454 1.0557 4.8002 0.870042C4.98586 0.684381 5.23767 0.580078 5.50023 0.580078Z"
fill="#444444" />
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,7 @@
<svg width="12" height="13" viewBox="0 0 12 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M10.7968 3.14412C11.0484 2.85173 11.0171 2.40956 10.7268 2.156L9.03106 0.673353C8.89195 0.551204 8.71028 0.489692 8.52606 0.502365C8.34184 0.515037 8.17018 0.600854 8.04888 0.740917L6.9613 2.0021L9.7101 4.40436L10.7968 3.14412ZM6.31117 2.75281L0.00859902 10.0525C-0.0156524 10.0806 0.0169938 11.3428 0.0375142 12.0428C0.0450803 12.2964 0.251683 12.498 0.503888 12.4979C1.26781 12.4979 2.73222 12.4829 2.75647 12.4548L9.05905 5.15695L6.31117 2.75281ZM4.19757 12.5007L5.22919 11.3634L11.4404 11.3747C11.7484 11.3772 11.9975 11.6278 12 11.9377C11.9975 12.2476 11.7484 12.4982 11.4404 12.5007H4.19757Z"
fill="#8F959E"
style="fill:#8F959E;fill:color(display-p3 0.5608 0.5843 0.6196);fill-opacity:1;" />
</svg>

After

Width:  |  Height:  |  Size: 882 B

View File

@ -0,0 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9&#229;&#164;&#135;&#228;&#187;&#189; 4" opacity="0.795169">
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;" x="1.5" y="14.5" width="13" height="13" rx="1.75" transform="rotate(-90 1.5 14.5)" stroke="#D5E0F2" style="stroke:#D5E0F2;"/>
<path id="&#230;&#152;&#159;&#229;&#189;&#162;" fill-rule="evenodd" clip-rule="evenodd" d="M8.09307 10.0489C8.0348 10.0183 7.9652 10.0183 7.90693 10.0489L6.00755 11.0475C5.86083 11.1246 5.68934 11 5.71736 10.8367L6.08011 8.72167C6.09124 8.65679 6.06973 8.59059 6.02259 8.54464L4.48596 7.0468C4.36726 6.93109 4.43276 6.7295 4.59681 6.70566L6.72038 6.39709C6.78552 6.38762 6.84183 6.34671 6.87096 6.28768L7.82065 4.3634C7.89402 4.21475 8.10598 4.21475 8.17935 4.3634L9.12904 6.28768C9.15817 6.34671 9.21448 6.38762 9.27962 6.39709L11.4032 6.70566C11.5672 6.7295 11.6327 6.93109 11.514 7.0468L9.97741 8.54464C9.93027 8.59059 9.90876 8.65679 9.91989 8.72167L10.2826 10.8367C10.3107 11 10.1392 11.1246 9.99245 11.0475L8.09307 10.0489Z" stroke="#D5E0F2" style="stroke:#D5E0F2;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,7 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9&#229;&#164;&#135;&#228;&#187;&#189; 4" opacity="0.795169">
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;" x="1.5" y="14.5" width="13" height="13" rx="1.75" transform="rotate(-90 1.5 14.5)" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"/>
<path id="&#230;&#152;&#159;&#229;&#189;&#162;" fill-rule="evenodd" clip-rule="evenodd" d="M8.09307 10.0489C8.0348 10.0183 7.9652 10.0183 7.90693 10.0489L6.00755 11.0475C5.86083 11.1246 5.68934 11 5.71736 10.8367L6.08011 8.72167C6.09124 8.65679 6.06973 8.59059 6.02259 8.54464L4.48596 7.0468C4.36726 6.93109 4.43276 6.7295 4.59681 6.70566L6.72038 6.39709C6.78552 6.38762 6.84183 6.34671 6.87096 6.28768L7.82065 4.3634C7.89402 4.21475 8.10598 4.21475 8.17935 4.3634L9.12904 6.28768C9.15817 6.34671 9.21448 6.38762 9.27962 6.39709L11.4032 6.70566C11.5672 6.7295 11.6327 6.93109 11.514 7.0468L9.97741 8.54464C9.93027 8.59059 9.90876 8.65679 9.91989 8.72167L10.2826 10.8367C10.3107 11 10.1392 11.1246 9.99245 11.0475L8.09307 10.0489Z" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,7 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.795169">
<circle cx="8" cy="8" r="7.5" stroke="#D5E0F2" style="stroke:#D5E0F2;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 5C5.55228 5 6 5.44772 6 6C6 6.55228 5.55228 7 5 7C4.44772 7 4 6.55228 4 6C4 5.44772 4.44772 5 5 5Z" fill="#D5E0F2" style="fill:#D5E0F2;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 5C11.5523 5 12 5.44772 12 6C12 6.55228 11.5523 7 11 7C10.4477 7 10 6.55228 10 6C10 5.44772 10.4477 5 11 5Z" fill="#D5E0F2" style="fill:#D5E0F2;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 619 B

View File

@ -0,0 +1,8 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.795169">
<circle cx="8" cy="8" r="7.5" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 5C5.55228 5 6 5.44772 6 6C6 6.55228 5.55228 7 5 7C4.44772 7 4 6.55228 4 6C4 5.44772 4.44772 5 5 5Z" fill="#232832" style="fill:#232832;fill:color(display-p3 0.1360 0.1574 0.1949);fill-opacity:1;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 5C11.5523 5 12 5.44772 12 6C12 6.55228 11.5523 7 11 7C10.4477 7 10 6.55228 10 6C10 5.44772 10.4477 5 11 5Z" fill="#232832" style="fill:#232832;fill:color(display-p3 0.1360 0.1574 0.1949);fill-opacity:1;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 804 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -0,0 +1,12 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9&#229;&#164;&#135;&#228;&#187;&#189; 2"
opacity="0.795169">
<path id="&#231;&#159;&#169;&#229;&#189;&#162;"
d="M0.5 2.25C0.5 1.2835 1.2835 0.5 2.25 0.5H6.54211C6.62301 0.5 6.70271 0.519631 6.77435 0.557208L8.63621 1.53374C8.85115 1.64647 9.09023 1.70536 9.33293 1.70536H13.75C14.7165 1.70536 15.5 2.48886 15.5 3.45536V11.75C15.5 12.7165 14.7165 13.5 13.75 13.5H2.25C1.2835 13.5 0.5 12.7165 0.5 11.75V2.25Z"
stroke="#D5E0F2"
style="stroke:#D5E0F2;" />
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;_2" x="0.5" y="3.5" width="15" height="10"
rx="1.75" stroke="#D5E0F2"
style="fill-opacity:1;stroke:#D5E0F2;" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 854 B

View File

@ -0,0 +1,13 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9&#229;&#164;&#135;&#228;&#187;&#189; 2"
opacity="0.795169">
<path id="&#231;&#159;&#169;&#229;&#189;&#162;"
d="M0.5 2.25C0.5 1.2835 1.2835 0.5 2.25 0.5H6.54211C6.62301 0.5 6.70271 0.519631 6.77435 0.557208L8.63621 1.53374C8.85115 1.64647 9.09023 1.70536 9.33293 1.70536H13.75C14.7165 1.70536 15.5 2.48886 15.5 3.45536V11.75C15.5 12.7165 14.7165 13.5 13.75 13.5H2.25C1.2835 13.5 0.5 12.7165 0.5 11.75V2.25Z"
stroke="#232832"
style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;" />
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;_2" x="0.5" y="3.5" width="15" height="10"
rx="1.75" stroke="#232832"
style="fill-opacity:1;stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 984 B

View File

@ -0,0 +1,6 @@
<svg width="80" height="80" viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;">
<circle id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;" cx="40" cy="40" r="38" stroke="#444444" stroke-width="4"/>
<path id="&#232;&#183;&#175;&#229;&#190;&#132;" d="M22.0393 54.5694C25.1584 49.9724 29.3723 46.8567 34.5689 45.3912L34.5713 45.3906C37.381 44.6019 39.8194 44.5066 41.2294 44.5448L43.1752 44.5974V46.544V53.6663L57.7786 38.3558L43.2517 23.0584V30.4668V32.3974L41.3223 32.4655C34.455 32.7081 29.5325 34.9563 26.3318 38.9079C25.0376 40.5119 24.0004 42.4338 23.2662 44.6457L22.0393 54.5694ZM22.0393 54.5694C21.9839 53.499 21.9695 52.0473 22.1147 50.3923C22.2993 48.3257 22.6869 46.3923 23.2661 44.6461L22.0393 54.5694Z" stroke="#444444" stroke-width="4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 832 B

View File

@ -0,0 +1,8 @@
<svg width="80" height="80" viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;">
<path id="&#232;&#183;&#175;&#229;&#190;&#132;" d="M21.7586 47.8445C24.2492 44.3734 27.5657 42.0119 31.6213 40.8833L31.6233 40.8827C33.8865 40.2558 35.8501 40.18 36.9868 40.2104L38.6862 40.2558V41.9558V47.2029L50.0059 35.4911L38.7474 23.7914V29.2632V30.9495L37.0622 31.0082C31.5917 31.1989 27.6967 32.965 25.1719 36.041C24.1502 37.2907 23.3303 38.7892 22.7494 40.5163L21.7586 47.8445ZM21.7586 47.8445C21.733 47.0661 21.7407 46.0942 21.837 45.0106C21.9836 43.392 22.291 41.8801 22.7493 40.5166L21.7586 47.8445Z" stroke="#444444" stroke-width="3.49206"/>
<path id="&#231;&#159;&#169;&#229;&#189;&#162;" fill-rule="evenodd" clip-rule="evenodd" d="M43.5636 47.6924C43.5636 47.1401 44.0113 46.6924 44.5636 46.6924H59C59.5522 46.6924 60 47.1401 60 47.6924V49.7949C60 50.3472 59.5522 50.7949 59 50.7949H44.5636C44.0113 50.7949 43.5636 50.3472 43.5636 49.7949V47.6924Z" fill="#444444"/>
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;_2" x="20.1455" y="54.8975" width="39.8545" height="4.10256" rx="1" fill="#444444"/>
<circle id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;" cx="40" cy="40" r="38" stroke="#444444" stroke-width="4"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,7 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg class="icon" width="32px" height="32.00px" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<path fill="#444444"
d="M384 512L731.733333 202.666667c17.066667-14.933333 19.2-42.666667 4.266667-59.733334-14.933333-17.066667-42.666667-19.2-59.733333-4.266666l-384 341.333333c-10.666667 8.533333-14.933333 19.2-14.933334 32s4.266667 23.466667 14.933334 32l384 341.333333c8.533333 6.4 19.2 10.666667 27.733333 10.666667 12.8 0 23.466667-4.266667 32-14.933333 14.933333-17.066667 14.933333-44.8-4.266667-59.733334L384 512z" />
</svg>

After

Width:  |  Height:  |  Size: 701 B

View File

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="43px" height="42px" viewBox="0 0 43 42" version="1.1">
<title>编组 3</title>
<defs>
<path d="M52.1440033,262.168279 C53.7071313,260.607213 56.2397907,260.608885 57.8008563,262.172013 L57.8008563,262.172013 L71.61,275.999572 L301,276 C308.731986,276 315,282.268014 315,290 L315,449 C315,456.731986 308.731986,463 301,463 L29,463 C21.2680135,463 15,456.731986 15,449 L15,290 C15,282.268014 21.2680135,276 29,276 L38.33,275.999572 L52.1402692,262.172013 L52.1402692,262.172013 Z" id="path-1"></path>
<filter x="-6.7%" y="-7.9%" width="113.3%" height="119.8%" filterUnits="objectBoundingBox" id="filter-2">
<feOffset dx="0" dy="4" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="6" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"></feComposite>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="信息页-发起聊天" transform="translate(-47.000000, -311.000000)">
<rect fill="#000000" x="0" y="0" width="750" height="1624"></rect>
<rect id="矩形" fill="#FFFFFF" x="0" y="0" width="750" height="1624"></rect>
<rect id="矩形" fill-opacity="0.1" fill="#FFFFFF" x="0" y="284" width="750" height="144"></rect>
<g id="编组-5" transform="translate(32.000000, 298.000000)">
<g id="位图" transform="translate(0.000000, 8.000000)">
<rect id="矩形" fill="#006EFF" x="0" y="0" width="96" height="96" rx="8"></rect>
<path d="M42.4156863,59.7575758 C42.5411765,59.6363636 42.7921569,59.6363636 42.917647,59.7575758 C42.917647,59.7575758 44.172549,60.8484849 47.0588235,60.8484849 C47.6862744,60.8484849 48.1882353,60.8484849 48.8156863,60.7272727 C52.9568628,60.2424242 53.9607843,58.5454545 53.9607843,58.5454545 C54.0862745,58.4242424 54.3372549,58.3030303 54.4627451,58.4242424 C54.5882353,58.5454545 54.7137255,58.6666666 54.7137255,58.9090909 C53.8352941,61.3333333 51.5764706,63.1515151 48.9411764,63.5151515 L48.0627451,63.5151515 C45.6784314,63.5151515 43.4196078,62.3030302 42.1647058,60.3636364 C42.2901961,60 42.2901961,59.8787878 42.4156863,59.7575758 L42.4156863,59.7575758 Z M47.5607843,21.3333333 C58.6039216,21.3333333 67.7647059,28.8484848 70.1490196,38.7878788 L70.2745098,38.7878788 C72.7843137,38.7878788 74.6666667,40.7272727 74.6666667,43.0303031 L74.6666667,51.5151515 C74.6666667,53.3333333 73.5372549,54.7878788 71.9058823,55.3939394 C70.1490196,64.969697 61.4901961,71.2727273 50.6980392,72.1212121 C50.1960784,73.5757576 48.8156863,74.6666667 47.0588235,74.6666667 C44.9254902,74.6666667 43.2941176,73.0909091 43.2941176,71.030303 C43.2941176,68.969697 45.0509803,67.3939394 47.0588235,67.3939394 C48.6901961,67.3939394 50.0705882,68.3636363 50.572549,69.6969697 C59.8588235,68.9696969 67.3882353,63.8787878 69.2705882,55.6363636 C68.1411764,55.3939394 67.1372549,54.7878788 66.5098039,53.8181818 C64.8784314,58.5454545 61.4901961,62.5454545 57.0980392,64.8484849 L56.972549,64.9696969 L56.5960784,64.9696969 C56.4915032,64.8686868 56.474074,64.8518518 56.4711692,64.7789001 L56.4705882,64.7272727 C56.4705882,64.6060606 56.4705882,64.6060606 56.5960784,64.4848485 C60.9882353,60.6060606 61.2392157,56.8484849 60.7372549,51.2727273 C60.3607843,46.4242424 57.3490196,41.8181818 55.9686275,39.7575758 L55.8431372,39.8787879 C55.717647,39.7575757 55.5921569,39.6363636 55.4666667,39.6363636 C55.2156863,39.6363636 55.0901961,39.7575758 54.9647058,40 C54.8392156,41.4545455 54.462745,42.4242424 54.2117647,42.9090909 C53.2078431,44.9696969 51.5764706,46.3030303 49.1921569,46.6666667 C45.427451,47.2727273 41.6627451,48.1212121 38.0235294,48.7272727 C35.6392156,49.0909091 33.6313725,51.6363636 34.1333333,54.3030303 C34.9926684,59.9947299 38.974432,64.1784384 40.2044901,65.1519921 L40.2153333,65.1603333 L40.2039215,65.1515151 C40.1568627,65.1212121 40.0941176,65.0909091 40.0313725,65.0909091 C39.9058824,65.0909091 39.9058823,65.2121212 39.7803922,65.2121212 C39.6549019,65.3333333 39.5294118,65.5757576 39.5294117,65.5757576 C34.6352941,63.5151515 30.745098,59.5151516 28.8627451,54.6666667 C28.1098039,55.6363636 26.8549019,56.2424243 25.6,56.2424242 C23.2156862,56.2424242 21.3333333,54.3030303 21.3333333,52 L21.3333333,43.6363636 C21.3333333,41.5757576 22.8392157,39.8787879 24.8470588,39.5151515 C26.8549019,29.2121212 36.2666666,21.3333333 47.5607843,21.3333333 Z M47.5607843,25.0909091 C38.0235294,25.0909091 29.9921569,31.8787879 28.4862745,40.7272727 C28.6117647,40.8484849 28.8627451,40.969697 28.9882352,41.2121212 C31.8745097,33.939394 39.1529411,28.7272727 47.6862745,28.7272727 C56.2196078,28.7272727 63.4980392,33.939394 66.3843137,41.3333333 L66.7607843,40.6060606 C65.0039216,31.7575757 57.0980392,25.0909091 47.5607843,25.0909091 Z" id="形状" fill="#FFFFFF" fill-rule="nonzero"></path>
</g>
</g>
<g id="形状结合">
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
<path stroke="#E0E0E0" stroke-width="2" d="M54.8888733,262.000133 C55.625226,261.979907 56.3673182,262.22911 56.9545645,262.748115 L56.9545645,262.748115 L71.1955708,276.999572 L301,277 C304.589851,277 307.839851,278.455075 310.192388,280.807612 C312.544925,283.160149 314,286.410149 314,290 L314,290 L314,449 C314,452.589851 312.544925,455.839851 310.192388,458.192388 C307.839851,460.544925 304.589851,462 301,462 L301,462 L29,462 C25.4101491,462 22.1601491,460.544925 19.8076118,458.192388 C17.4550746,455.839851 16,452.589851 16,449 L16,449 L16,290 C16,286.410149 17.4550746,283.160149 19.8076118,280.807612 C22.1601491,278.455075 25.4101491,277 29.0000458,277 L29.0000458,277 L38.7445991,276.999553 L52.8469102,262.879585 C53.4135391,262.313702 54.1483154,262.020475 54.8888733,262.000133 Z" stroke-linejoin="square" fill="#FFFFFF" fill-rule="evenodd"></path>
</g>
<g id="编组-3" transform="translate(47.000000, 305.000000)" stroke="#666666" stroke-width="4">
<g id="编组-24" transform="translate(6.142857, 11.000000)">
<path d="M18.7142857,22 C21.4757095,22 23.9757095,23.1192881 25.7853535,24.9289322 C27.5949976,26.7385763 28.7142857,29.2385763 28.7142857,32 L28.7142857,32 L2,32 L2.0057986,31.6562146 C2.09061716,29.145562 3.10093106,26.8695956 4.70635331,25.1587023 L4.92893219,24.9289322 C6.73857625,23.1192881 9.23857625,22 12,22 L12,22 Z" id="矩形"></path>
<ellipse id="椭圆形" cx="15.3571429" cy="9" rx="7.21428571" ry="7"></ellipse>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -0,0 +1,6 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M9.30533 7.99984L15.7557 1.54943C16.0813 1.22383 16.0813 0.687032 15.7557 0.361432L15.7205 0.326232C15.3949 0.000631131 14.8581 0.000631131 14.5325 0.326232L8.08212 6.78544L1.63172 0.326232C1.30612 0.000631131 0.769316 0.000631131 0.443715 0.326232L0.408515 0.361432C0.0741147 0.687032 0.0741147 1.22383 0.408515 1.54943L6.85892 7.99984L0.408515 14.4502C0.0829148 14.7759 0.0829148 15.3126 0.408515 15.6383L0.443715 15.6735C0.769316 15.9991 1.30612 15.9991 1.63172 15.6735L8.08212 9.22304L14.5325 15.6735C14.8581 15.9991 15.3949 15.9991 15.7205 15.6735L15.7557 15.6383C16.0813 15.3126 16.0813 14.7759 15.7557 14.4502L9.30533 7.99984Z"
fill="#8F959E" />
</svg>

After

Width:  |  Height:  |  Size: 777 B

View File

@ -0,0 +1,12 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9" opacity="0.795169">
<circle id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;" cx="5.5" cy="4.5" r="1" stroke="#D5E0F2" style="stroke:#D5E0F2;"/>
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;" x="0.5" y="0.5" width="15" height="13" rx="1.75" stroke="#D5E0F2" style="stroke:#D5E0F2;"/>
<g id="&#232;&#183;&#175;&#229;&#190;&#132; 2">
<mask id="path-3-inside-1_2613_41437" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 11L5.42403 8.9433C5.50934 8.87092 5.63487 8.87221 5.71867 8.94633L7.88124 10.8592C7.97058 10.9382 8.10606 10.9338 8.19006 10.8491L13 6"/>
</mask>
<path d="M2.35303 10.2375C1.93191 10.5948 1.88017 11.2258 2.23748 11.647C2.59479 12.0681 3.22584 12.1198 3.64697 11.7625L2.35303 10.2375ZM13.71 6.70423C14.0989 6.31213 14.0963 5.67897 13.7042 5.29003C13.3121 4.90109 12.679 4.90366 12.29 5.29577L13.71 6.70423ZM7.88124 10.8592L7.2187 11.6082L7.88124 10.8592ZM8.19006 10.8491L8.90003 11.5534L8.19006 10.8491ZM5.42403 8.9433L6.071 9.70582L5.42403 8.9433ZM5.71867 8.94633L6.38121 8.19731L5.71867 8.94633ZM3.64697 11.7625L6.071 9.70582L4.77706 8.18078L2.35303 10.2375L3.64697 11.7625ZM5.05613 9.69536L7.2187 11.6082L8.54378 10.1102L6.38121 8.19731L5.05613 9.69536ZM8.90003 11.5534L13.71 6.70423L12.29 5.29577L7.48009 10.1449L8.90003 11.5534ZM7.2187 11.6082C7.7051 12.0385 8.44272 12.0144 8.90003 11.5534L7.48009 10.1449C7.76941 9.85322 8.23606 9.83799 8.54378 10.1102L7.2187 11.6082ZM6.071 9.70582C5.77716 9.95513 5.34477 9.95068 5.05613 9.69536L6.38121 8.19731C5.92497 7.79374 5.24152 7.78671 4.77706 8.18078L6.071 9.70582Z" fill="#D5E0F2" style="fill:#D5E0F2;" mask="url(#path-3-inside-1_2613_41437)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,13 @@
<svg width="16" height="14" viewBox="0 0 16 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 9" opacity="0.795169">
<circle id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;" cx="5.5" cy="4.5" r="1" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"/>
<rect id="&#231;&#159;&#169;&#229;&#189;&#162;" x="0.5" y="0.5" width="15" height="13" rx="1.75" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;"/>
<g id="&#232;&#183;&#175;&#229;&#190;&#132; 2">
<mask id="path-3-inside-1_2613_41437" fill="white">
<path fill-rule="evenodd" clip-rule="evenodd" d="M3 11L5.42403 8.9433C5.50934 8.87092 5.63487 8.87221 5.71867 8.94633L7.88124 10.8592C7.97058 10.9382 8.10606 10.9338 8.19006 10.8491L13 6"/>
</mask>
<path d="M2.35303 10.2375C1.93191 10.5948 1.88017 11.2258 2.23748 11.647C2.59479 12.0681 3.22584 12.1198 3.64697 11.7625L2.35303 10.2375ZM13.71 6.70423C14.0989 6.31213 14.0963 5.67897 13.7042 5.29003C13.3121 4.90109 12.679 4.90366 12.29 5.29577L13.71 6.70423ZM7.88124 10.8592L7.2187 11.6082L7.88124 10.8592ZM8.19006 10.8491L8.90003 11.5534L8.19006 10.8491ZM5.42403 8.9433L6.071 9.70582L5.42403 8.9433ZM5.71867 8.94633L6.38121 8.19731L5.71867 8.94633ZM3.64697 11.7625L6.071 9.70582L4.77706 8.18078L2.35303 10.2375L3.64697 11.7625ZM5.05613 9.69536L7.2187 11.6082L8.54378 10.1102L6.38121 8.19731L5.05613 9.69536ZM8.90003 11.5534L13.71 6.70423L12.29 5.29577L7.48009 10.1449L8.90003 11.5534ZM7.2187 11.6082C7.7051 12.0385 8.44272 12.0144 8.90003 11.5534L7.48009 10.1449C7.76941 9.85322 8.23606 9.83799 8.54378 10.1102L7.2187 11.6082ZM6.071 9.70582C5.77716 9.95513 5.34477 9.95068 5.05613 9.69536L6.38121 8.19731C5.92497 7.79374 5.24152 7.78671 4.77706 8.18078L6.071 9.70582Z" fill="#232832" style="fill:#232832;fill:color(display-p3 0.1360 0.1574 0.1949);fill-opacity:1;" mask="url(#path-3-inside-1_2613_41437)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,3 @@
<svg width="15" height="14" viewBox="0 0 15 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 14C11.366 14 14.5 10.866 14.5 7C14.5 3.13401 11.366 0 7.5 0C3.63401 0 0.5 3.13401 0.5 7C0.5 10.866 3.63401 14 7.5 14ZM9.98528 3.47487L11.0459 4.53553L8.57107 7.01041L11.0459 9.48528L9.98528 10.5459L7.51041 8.07107L5.03553 10.5459L3.97487 9.48528L6.44975 7.01041L3.97487 4.53553L5.03553 3.47487L7.51041 5.94975L9.98528 3.47487Z" fill="#B2B2B2" style="fill:#B2B2B2;fill:color(display-p3 0.6980 0.6980 0.6980);fill-opacity:1;"/>
</svg>

After

Width:  |  Height:  |  Size: 583 B

View File

@ -0,0 +1,6 @@
<svg width="8" height="14" viewBox="0 0 8 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M2.1614 7.00004L7.64211 12.2881L6.5614 13.3308L1.0807 8.04275L0 7.00004L1.0807 5.95733L6.5614 0.669312L7.64211 1.71202L2.1614 7.00004Z"
fill="#444444"
style="fill:#444444;fill:color(display-p3 0.2667 0.2667 0.2667);fill-opacity:1;" />
</svg>

After

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -0,0 +1,6 @@
<svg width="36" height="4" viewBox="0 0 36 4" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M19.499 0.5L36 0.5V3.5H19.499H16.499H0V0.5L16.499 0.5H19.499Z" fill="#BBBBBB"
style="fill:#BBBBBB;fill:color(display-p3 0.7333 0.7333 0.7333);fill-opacity:1;" />
</svg>

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 B

View File

@ -0,0 +1 @@
<svg width="62" height="78" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#prefix__clip0_1_7)"><path fill-rule="evenodd" clip-rule="evenodd" d="M28 39.5c0-6.638-2.558-12.755-7-17l5-5.5c5.936 5.662 9 13.637 9 22.5 0 8.604-3.364 16.373-9 22L21 56c4.225-4.22 7-10.048 7-16.5zm18.025 38.502L41 73c8.457-8.442 13.25-20.631 13.25-33.54C54.25 26.147 48.925 13.493 40 5l5.084-5C55.503 9.91 62 23.924 62 39.46c0 15.062-6.108 28.694-15.975 38.542zM7.75 47.23c4.28 0 7.75-3.479 7.75-7.77 0-4.29-3.47-7.77-7.75-7.77-4.28 0-7.75 3.48-7.75 7.77 0 4.291 3.47 7.77 7.75 7.77z" fill="#444"/></g><defs><clipPath id="prefix__clip0_1_7"><path fill="#fff" d="M0 0h62v78H0z"/></clipPath></defs></svg>

After

Width:  |  Height:  |  Size: 697 B

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40px" height="40px" viewBox="0 0 40 40" version="1.1">
<title>编组 14</title>
<defs>
<path d="M467,0 C474.731986,-2.71135202e-14 481,6.2680135 481,14 L481,247 C481,254.731986 474.731986,261 467,261 L353.036,261 L340.862492,273.204941 C339.302377,274.769018 336.769719,274.77223 335.205642,273.212116 C335.203247,273.209727 335.200856,273.207335 335.198467,273.204941 L323.024,261 L14,261 C6.2680135,261 2.72325209e-15,254.731986 0,247 L0,14 C8.29461588e-16,6.2680135 6.2680135,3.19669972e-15 14,0 L467,0 Z" id="path-1"></path>
<filter x="-10.1%" y="-14.0%" width="120.2%" height="135.4%" filterUnits="objectBoundingBox" id="filter-2">
<feOffset dx="0" dy="10" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="14.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="消息状态" transform="translate(-541.000000, -196.000000)">
<g id="编组-11" transform="translate(499.000000, 163.000000)">
<g id="形状结合">
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
</g>
<g id="编组-19" transform="translate(8.000000, 1.000000)" fill-rule="nonzero">
<g id="编组-17" transform="translate(34.000000, 32.000000)">
<g id="编组-14" transform="translate(0.000000, 0.249660)">
<rect id="矩形" stroke="#444444" stroke-width="4" x="6" y="11.7115453" width="20.4869565" height="24.5849258" rx="1"></rect>
<path d="M36,2.01560374 L36,28.7262543 C36,29.0023967 35.7761424,29.2262543 35.5,29.2262543 L32.4652074,29.2262543 C32.1890657,29.2262525 31.9652084,29.002396 31.9652057,28.7262543 L31.9651258,6.04681123 L31.9651258,6.04681123 L12.2913043,6.04719144 C12.015162,6.04720643 11.7913,5.82335314 11.7912947,5.54721076 C11.7912947,5.54720754 11.7912947,5.54720432 11.7913043,5.5472011 L11.7913043,2.51560374 C11.7913043,2.23946137 12.015162,2.01560374 12.2913043,2.01560374 L36,2.01560374 L36,2.01560374 Z" id="路径-3" fill="#444444"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40px" height="40px" viewBox="0 0 40 40" version="1.1">
<title>矩形</title>
<defs>
<path d="M467,0 C474.731986,-2.71135202e-14 481,6.2680135 481,14 L481,247 C481,254.731986 474.731986,261 467,261 L353.036,261 L340.862492,273.204941 C339.302377,274.769018 336.769719,274.77223 335.205642,273.212116 C335.203247,273.209727 335.200856,273.207335 335.198467,273.204941 L323.024,261 L14,261 C6.2680135,261 2.72325209e-15,254.731986 0,247 L0,14 C8.29461588e-16,6.2680135 6.2680135,3.19669972e-15 14,0 L467,0 Z" id="path-1"></path>
<filter x="-10.1%" y="-14.0%" width="120.2%" height="135.4%" filterUnits="objectBoundingBox" id="filter-2">
<feOffset dx="0" dy="10" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="14.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="消息状态" transform="translate(-779.000000, -326.000000)">
<g id="编组-11" transform="translate(499.000000, 163.000000)">
<g id="形状结合">
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
</g>
<g id="编组-13备份" transform="translate(246.000000, 131.583780)">
<g id="编组-17" transform="translate(34.000000, 31.416220)">
<g id="编组-18" transform="translate(4.000000, 2.847939)">
<path d="M27,8.04349833 L27,34.26099 L5,34.26099 L5,8.04349833 L27,8.04349833 Z" id="路径-5" stroke="#444444" stroke-width="4"></path>
<rect id="矩形" fill="#444444" x="9.14285714" y="0" width="14" height="4.02899889"></rect>
<rect id="矩形" fill="#444444" x="0" y="6.04349833" width="32" height="4.02899889"></rect>
<path d="M14,15.1087458 L14,27.1957425 L10,27.1957425 L10,15.1087458 L14,15.1087458 Z M22,15.1087458 L22,27.1957425 L18,27.1957425 L18,15.1087458 L22,15.1087458 Z" id="形状结合" fill="#444444"></path>
</g>
</g>
</g>
<g id="编组-19" transform="translate(8.000000, 1.000000)"></g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40px" height="40px" viewBox="0 0 40 40" version="1.1">
<title>编组</title>
<defs>
<path d="M467,0 C474.731986,-2.71135202e-14 481,6.2680135 481,14 L481,247 C481,254.731986 474.731986,261 467,261 L353.036,261 L340.862492,273.204941 C339.302377,274.769018 336.769719,274.77223 335.205642,273.212116 C335.203247,273.209727 335.200856,273.207335 335.198467,273.204941 L323.024,261 L14,261 C6.2680135,261 2.72325209e-15,254.731986 0,247 L0,14 C8.29461588e-16,6.2680135 6.2680135,3.19669972e-15 14,0 L467,0 Z" id="path-1"></path>
<filter x="-10.1%" y="-14.0%" width="120.2%" height="135.4%" filterUnits="objectBoundingBox" id="filter-2">
<feOffset dx="0" dy="10" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="14.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="消息状态" transform="translate(-660.000000, -196.000000)">
<g id="编组-11" transform="translate(499.000000, 163.000000)">
<g id="形状结合">
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
</g>
<g id="编组-19" transform="translate(8.000000, 1.000000)" fill-rule="nonzero" stroke="#444444" stroke-width="4">
<g id="编组-13" transform="translate(119.000000, 0.000000)">
<g id="编组-17" transform="translate(34.000000, 32.000000)">
<g id="编组" transform="translate(0.000000, 0.249660)">
<path d="M23.1265517,6.28055724 L35.7271185,19.5748426 L23.0577232,32.8831329 L23.0577232,25.1147287 C22.2832234,25.0144246 21.6206186,24.9731478 21.1119625,24.9593482 C19.8469875,24.9250298 17.622079,25.0087745 15.0567889,25.7301995 C10.5501298,27.0035633 6.83444935,29.6335962 4.00998374,33.593477 C3.98525766,32.7188606 3.9976824,31.6416134 4.10230378,30.4471653 C4.26498285,28.6221312 4.60551504,26.8911737 5.12965716,25.3080362 C5.77312173,23.3656805 6.68732788,21.6451437 7.85433875,20.1962611 C11.1297915,16.1439451 16.3122766,14.2888953 23.1265517,14.4503809 L23.1265517,14.4503809 L23.1265517,6.28055724 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 40 41" class="design-iconfont">
<g fill="none" fill-rule="evenodd">
<path d="M34,2 L34,28.6209709 L20.7153357,28.6209709 L17.9993455,31.4022694 L15.2847485,28.6219998 L2,28.6219998 L2,2 L34,2 Z" transform="translate(2 3.273066)" fill-rule="nonzero" stroke="#444" stroke-width="4"/>
<path fill="#444" d="M11 16.12483H15V20.15603749H11z" transform="translate(0 .24966)"/>
<path fill="#444" d="M18 16.12483H22V20.15603749H18z" transform="translate(0 .24966)"/>
<path fill="#444" d="M25 16.12483H29V20.15603749H25z" transform="translate(0 .24966)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 631 B

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40px" height="40px" viewBox="0 0 40 40" version="1.1">
<title>矩形</title>
<defs>
<path d="M467,0 C474.731986,-2.71135202e-14 481,6.2680135 481,14 L481,247 C481,254.731986 474.731986,261 467,261 L353.036,261 L340.862492,273.204941 C339.302377,274.769018 336.769719,274.77223 335.205642,273.212116 C335.203247,273.209727 335.200856,273.207335 335.198467,273.204941 L323.024,261 L14,261 C6.2680135,261 2.72325209e-15,254.731986 0,247 L0,14 C8.29461588e-16,6.2680135 6.2680135,3.19669972e-15 14,0 L467,0 Z" id="path-1"></path>
<filter x="-10.1%" y="-14.0%" width="120.2%" height="135.4%" filterUnits="objectBoundingBox" id="filter-2">
<feOffset dx="0" dy="10" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="14.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
</filter>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="消息状态" transform="translate(-660.000000, -327.000000)">
<g id="编组-11" transform="translate(499.000000, 163.000000)">
<g id="形状结合">
<use fill="black" fill-opacity="1" filter="url(#filter-2)" xlink:href="#path-1"></use>
<use fill="#FFFFFF" fill-rule="evenodd" xlink:href="#path-1"></use>
</g>
<g id="编组-19" transform="translate(8.000000, 1.000000)" fill="#444444" fill-rule="nonzero">
<g id="编组-13" transform="translate(119.000000, 131.000000)">
<g id="编组-21" transform="translate(34.000000, 32.000000)">
<path d="M9.94902685,18.825399 C9.94902685,19.1015414 9.72516923,19.325399 9.44902685,19.325399 C9.31552791,19.325399 9.18757266,19.2720125 9.09366105,19.1771306 L2.13687841,12.1484693 C1.94403281,11.9536312 1.94403281,11.6398441 2.13687841,11.445006 L9.09366105,4.41634471 C9.28791708,4.2200816 9.60449539,4.21845454 9.8007585,4.41271056 C9.89564042,4.50662217 9.94902685,4.63457741 9.94902685,4.76807636 L9.94824421,9.73507632 L22.6994692,9.73558854 C31.0812313,9.73558854 38,15.6504194 38,23.1330579 C38,30.5145797 31.2669616,36.3703807 23.0384554,36.5272976 L22.6994692,36.5305273 L10.4390092,36.5305273 C9.88672441,36.5305273 9.43900916,36.082812 9.43900916,35.5305273 L9.43900916,33.408229 C9.43900916,32.8559443 9.88672441,32.408229 10.4390092,32.408229 L22.6994692,32.408229 C28.9648068,32.408229 33.9198585,28.1721729 33.9198585,23.1330579 C33.9198585,18.1779281 29.1285988,13.9993117 23.0116273,13.861401 L22.6994692,13.8578868 L9.94824421,13.8570763 L9.94902685,18.825399 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,5 @@
<svg width="37" height="37" viewBox="0 0 37 37" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;">
<path id="&#229;&#189;&#162;&#231;&#138;&#182;&#231;&#187;&#147;&#229;&#144;&#136;" fill-rule="evenodd" clip-rule="evenodd" d="M10.5826 0.46165C10.2025 0.0807196 9.58916 0.0688692 9.19464 0.434835L5.63779 3.73431L4.20962 2.56125C3.79371 2.21963 3.18202 2.26848 2.8256 2.67178L1.19197 4.52024C0.816905 4.94463 0.868823 5.59552 1.30642 5.95509L5.1484 9.11198C5.5349 9.42956 6.09662 9.41269 6.46335 9.07247L12.304 3.65419C12.7194 3.26888 12.732 2.61581 12.3318 2.21475L10.5826 0.46165ZM9.16745 14.027C9.56196 13.661 10.1753 13.6728 10.5554 14.0538L12.3046 15.8069C12.7048 16.2079 12.6922 16.861 12.2768 17.2463L6.43616 22.6646C6.06942 23.0048 5.5077 23.0217 5.1212 22.7041L1.27923 19.5472C0.841626 19.1876 0.789707 18.5368 1.16478 18.1124L2.7984 16.2639C3.15483 15.8606 3.76652 15.8118 4.18243 16.1534L5.61059 17.3264L9.16745 14.027ZM14.1637 16.0705C14.1637 15.7944 14.3876 15.5705 14.6637 15.5705H36.4728C36.7489 15.5705 36.9728 15.7944 36.9728 16.0705V19.4692C36.9728 19.7453 36.7489 19.9692 36.4728 19.9692H14.6637C14.3876 19.9692 14.1637 19.7453 14.1637 19.4692V16.0705ZM10.5554 27.6271C10.1753 27.2461 9.56196 27.2343 9.16745 27.6002L5.61059 30.8997L4.18243 29.7267C3.76652 29.385 3.15483 29.4339 2.7984 29.8372L1.16478 31.6857C0.789707 32.11 0.841626 32.7609 1.27923 33.1205L5.1212 36.2774C5.5077 36.595 6.06942 36.5781 6.43616 36.2379L12.2768 30.8196C12.6922 30.4343 12.7048 29.7812 12.3046 29.3802L10.5554 27.6271ZM14.6637 29.1438C14.3876 29.1438 14.1637 29.3677 14.1637 29.6438V33.0424C14.1637 33.3186 14.3876 33.5424 14.6637 33.5424H36.4728C36.7489 33.5424 36.9728 33.3186 36.9728 33.0424V29.6438C36.9728 29.3677 36.7489 29.1438 36.4728 29.1438H14.6637ZM14.6909 1.97839C14.4148 1.97839 14.1909 2.20225 14.1909 2.47839V5.87703C14.1909 6.15318 14.4148 6.37703 14.6909 6.37703H36.5C36.7761 6.37703 37 6.15318 37 5.87703V2.47839C37 2.20225 36.7761 1.97839 36.5 1.97839H14.6909Z" fill="#444444"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="design-iconfont">
<g fill="none" fill-rule="evenodd">
<path d="M4.13744611,6.61713753 L20.551,23 L0,23 L0,21 L3,21 L3,11 C3,9.40883362 3.41291862,7.91410954 4.13744611,6.61713753 Z M21.481,21 L24,21 L24,23 L23.485,23 L21.481,21 Z M12,2 C16.9705627,2 21,6.02943725 21,11 L21,20.52 L5.36684476,4.91705738 C7.01203082,3.12402075 9.37475086,2 12,2 Z" fill="#CCC" transform="translate(4 3)"/>
<path fill="#CCC" fill-rule="nonzero" d="M13 0L13 4 11 4 11 0z" transform="translate(4 3)"/>
<path stroke="#CCC" d="M8.5 24.5H15.5V25.5H8.5z" transform="translate(4 3)"/>
<path stroke="#CCC" stroke-width="2" transform="matrix(-1 0 0 1 31.089472 3)" d="M25.4499982 0.1546001L1.63947409 23.8855564"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 786 B

View File

@ -0,0 +1,7 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd"
d="M21.5 0L21.499 18.5H40V21.5H21.499L21.5 40H18.5L18.499 21.5H0V18.5H18.499L18.5 0H21.5Z"
fill="#BBBBBB"
style="fill:#BBBBBB;fill:color(display-p3 0.7333 0.7333 0.7333);fill-opacity:1;" />
</svg>

After

Width:  |  Height:  |  Size: 371 B

View File

@ -0,0 +1,6 @@
<svg width="44" height="44" viewBox="0 0 44 44" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132;">
<circle id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;" cx="22" cy="22" r="22" fill="#147AFF"/>
<path id="&#232;&#183;&#175;&#229;&#190;&#132;" d="M29.8629 13.8987C30.2582 13.5129 30.8913 13.5206 31.277 13.9159L33.035 15.7172C33.4207 16.1124 33.4131 16.7454 33.0179 17.1312L19.0302 30.7857C18.6448 31.162 18.0305 31.1653 17.641 30.7933L10.9897 24.4405C10.5904 24.0591 10.5758 23.4262 10.9571 23.0268L12.6958 21.2055C13.0772 20.8061 13.7102 20.7914 14.1096 21.1727L18.3055 25.1785L29.8629 13.8987Z" fill="white"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 679 B

View File

@ -0,0 +1,14 @@
<svg width="9" height="14" viewBox="0 0 9 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2200_23553)">
<path
d="M6.48068 6.83073L0.999983 12.1188L2.08069 13.1615L7.56139 7.87344L8.64209 6.83073L7.56139 5.78802L2.08069 0.5L0.999983 1.54271L6.48068 6.83073Z"
fill="#444444"
style="fill:#444444;fill:color(display-p3 0.2667 0.2667 0.2667);fill-opacity:1;" />
</g>
<defs>
<clipPath id="clip0_2200_23553">
<rect width="8" height="13" fill="white" style="fill:white;fill:white;fill-opacity:1;"
transform="matrix(-1 0 0 1 8.64209 0.5)" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 692 B

View File

@ -0,0 +1,3 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5 3L10 7.78045L5 12" stroke="#979797"/>
</svg>

After

Width:  |  Height:  |  Size: 152 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<path fill="#444444"
d="M672 418H144c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32z m-44 402H188V494h440v326zM819.3 328.5c-78.8-100.7-196-153.6-314.6-154.2l-0.2-64c0-6.5-7.6-10.1-12.6-6.1l-128 101c-4 3.1-3.9 9.1 0 12.3L492 318.6c5.1 4 12.7 0.4 12.6-6.1v-63.9c12.9 0.1 25.9 0.9 38.8 2.5 42.1 5.2 82.1 18.2 119 38.7 38.1 21.2 71.2 49.7 98.4 84.3 27.1 34.7 46.7 73.7 58.1 115.8 11 40.7 14 82.7 8.9 124.8-0.7 5.4-1.4 10.8-2.4 16.1h74.9c14.8-103.6-11.3-213-81-302.3z" />
</svg>

After

Width:  |  Height:  |  Size: 792 B

View File

@ -0,0 +1,7 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg">
<path fill="#444444"
d="M480.5 251.2c13-1.6 25.9-2.4 38.8-2.5v63.9c0 6.5 7.5 10.1 12.6 6.1L660 217.6c4-3.2 4-9.2 0-12.3l-128-101c-5.1-4-12.6-0.4-12.6 6.1l-0.2 64c-118.6 0.5-235.8 53.4-314.6 154.2-69.6 89.2-95.7 198.6-81.1 302.4h74.9c-0.9-5.3-1.7-10.7-2.4-16.1-5.1-42.1-2.1-84.1 8.9-124.8 11.4-42.2 31-81.1 58.1-115.8 27.2-34.7 60.3-63.2 98.4-84.3 37-20.6 76.9-33.6 119.1-38.8zM880 418H352c-17.7 0-32 14.3-32 32v414c0 17.7 14.3 32 32 32h528c17.7 0 32-14.3 32-32V450c0-17.7-14.3-32-32-32z m-44 402H396V494h440v326z" />
</svg>

After

Width:  |  Height:  |  Size: 792 B

View File

@ -0,0 +1,52 @@
<svg width="88" height="75" viewBox="0 0 88 75" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0324 36.6614L35.4424 35.001L50.4526 36.6614C50.4526 36.6614 61.6001 37.9124 65.8807 45.5045C68.7348 50.5664 73.4912 61.1246 76.3444 67.5996C77.481 70.1789 75.5849 73.0524 72.7663 73.0524H4.77873C2.30474 73.0524 0.447615 70.7916 0.9281 68.3647L4.43639 50.6447C4.43639 50.6447 5.43423 45.2709 8.58023 41.2975C11.7262 37.3241 19.0324 36.6614 19.0324 36.6614Z" fill="url(#paint0_linear_2509_4462)" style=""/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.4653 35.914V25.3516H41.7997V35.914C41.7997 38.7814 39.0391 41.1059 35.6325 41.1059C32.2259 41.1059 29.4653 38.7814 29.4653 35.914Z" fill="#FEDFC7" style="fill:#FEDFC7;fill:color(display-p3 0.9961 0.8745 0.7804);fill-opacity:1;"/>
<mask id="mask0_2509_4462" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="29" y="23" width="13" height="17">
<path fill-rule="evenodd" clip-rule="evenodd" d="M29.4653 33.8515V23.2891H41.7997V33.8515C41.7997 36.7189 39.0391 39.0434 35.6325 39.0434C32.2259 39.0434 29.4653 36.7189 29.4653 33.8515Z" fill="white" style="fill:white;fill:white;fill-opacity:1;"/>
</mask>
<g mask="url(#mask0_2509_4462)">
<ellipse cx="36.872" cy="28.4332" rx="7.40667" ry="5.82872" fill="#FAB691" style="fill:#FAB691;fill:color(display-p3 0.9803 0.7141 0.5692);fill-opacity:1;"/>
</g>
<ellipse cx="2.55302" cy="2.69371" rx="2.55302" ry="2.69371" transform="matrix(-1 0 0 1 48.8064 17.5176)" fill="url(#paint1_linear_2509_4462)" style=""/>
<ellipse cx="2.55302" cy="2.69371" rx="2.55302" ry="2.69371" transform="matrix(-1 0 0 1 48.8064 17.5176)" fill="url(#paint2_linear_2509_4462)" style=""/>
<ellipse cx="2.32093" cy="2.69371" rx="2.32093" ry="2.69371" transform="matrix(-1 0 0 1 29.3105 17.5176)" fill="url(#paint3_linear_2509_4462)" style=""/>
<ellipse cx="2.32093" cy="2.69371" rx="2.32093" ry="2.69371" transform="matrix(-1 0 0 1 29.3105 17.5176)" fill="url(#paint4_linear_2509_4462)" style=""/>
<path d="M42.029 5.47949H31.4459C29.2411 5.47949 27.4538 7.20216 27.4538 9.32719V23.8464C27.4538 28.7882 31.6103 32.7944 36.7375 32.7944C41.8648 32.7944 46.0212 28.7882 46.0212 23.8464V9.32654C46.0209 7.2017 44.2336 5.4794 42.029 5.47949Z" fill="#FEDFC7" style="fill:#FEDFC7;fill:color(display-p3 0.9961 0.8745 0.7804);fill-opacity:1;"/>
<path d="M47.8779 19.3691C47.8779 19.3691 46.9071 19.4131 46.5907 20.8378" stroke="#FDB99E" style="stroke:#FDB99E;stroke:color(display-p3 0.9922 0.7255 0.6196);stroke-opacity:1;" stroke-width="0.326414" stroke-linecap="round"/>
<path d="M25.7024 19.3691C25.7024 19.3691 26.6733 19.4131 26.9897 20.8378" stroke="#FDB99E" style="stroke:#FDB99E;stroke:color(display-p3 0.9922 0.7255 0.6196);stroke-opacity:1;" stroke-width="0.326414" stroke-linecap="round"/>
<path d="M49.3373 10.9928C49.68 8.25295 48.4022 6.54056 47.1459 6.88305C46.3236 2.49922 43.6055 1.17497 42.3492 1.06082C42.3492 1.17496 42.4863 1.67724 43.0345 2.77319C42.0066 1.74573 36.5247 -0.994149 31.0428 0.375792C25.5608 1.74573 24.533 4.8281 25.5609 7.56798C23.1625 7.56798 26.2461 17.8425 27.274 20.5824C27.9592 19.8975 27.4097 13.6994 27.7523 11.6445C33.5768 14.0419 43.1702 13.0144 45.5685 11.987C45.5685 13.3569 45.3401 18.2659 45.9111 20.8916C46.4822 18.9509 48.8838 14.6201 49.3373 10.9928Z" fill="#D9D9D9" style="fill:#D9D9D9;fill:color(display-p3 0.8510 0.8510 0.8510);fill-opacity:1;"/>
<path d="M49.3373 10.9928C49.68 8.25295 48.4022 6.54056 47.1459 6.88305C46.3236 2.49922 43.6055 1.17497 42.3492 1.06082C42.3492 1.17496 42.4863 1.67724 43.0345 2.77319C42.0066 1.74573 36.5247 -0.994149 31.0428 0.375792C25.5608 1.74573 24.533 4.8281 25.5609 7.56798C23.1625 7.56798 26.2461 17.8425 27.274 20.5824C27.9592 19.8975 27.4097 13.6994 27.7523 11.6445C33.5768 14.0419 43.1702 13.0144 45.5685 11.987C45.5685 13.3569 45.3401 18.2659 45.9111 20.8916C46.4822 18.9509 48.8838 14.6201 49.3373 10.9928Z" fill="url(#paint5_linear_2509_4462)" style=""/>
<path d="M50.9863 23.5074C51.3359 28.4883 47.5797 32.808 42.596 33.1552C37.6124 33.5024 33.2893 29.7455 32.9398 24.7647C32.5902 19.7838 36.3463 15.4641 41.33 15.1169C46.3137 14.7697 50.6367 18.5265 50.9863 23.5074Z" fill="#F8F8F8" stroke="#91BFFF" style="fill:#F8F8F8;fill:color(display-p3 0.9725 0.9725 0.9725);fill-opacity:1;stroke:#91BFFF;stroke:color(display-p3 0.5667 0.7492 1.0000);stroke-opacity:1;" stroke-width="1.47201"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.4159 29.3082L60.2204 38.4678C61.3743 39.3631 61.5388 41.0436 60.5804 42.1456C59.6221 43.2477 57.9344 43.3187 56.8868 42.3011L46.17 31.8909L48.4159 29.3082Z" fill="#90BFFF" style="fill:#90BFFF;fill:color(display-p3 0.5647 0.7490 1.0000);fill-opacity:1;"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M78.9297 72.6402C75.5063 73.9444 71.6515 72.4448 70.0094 69.1701L56.2831 41.7965L55.8309 42.2766C55.1445 43.0053 53.9303 42.7503 53.5952 41.8069L53.2897 41.8711C52.2475 42.09 51.2679 41.2948 51.2679 40.2299L50.6719 40.385C49.6992 40.6381 48.7617 39.8706 48.8178 38.867C47.3895 38.867 46.4368 37.3935 47.0229 36.0911L48.3905 33.0522C48.543 32.7133 48.7495 32.4014 49.0019 32.1287L50.3751 30.6449C51.2109 29.7419 52.3856 29.2285 53.6161 29.2285H56.5173C57.362 29.2285 58.1473 29.6631 58.5959 30.3788L63.0473 37.4796L81.9971 61.5573C84.9746 65.3406 83.4286 70.9262 78.9297 72.6402Z" fill="#FEDFC7" style="fill:#FEDFC7;fill:color(display-p3 0.9961 0.8745 0.7804);fill-opacity:1;"/>
<path d="M52.1278 33.0801L51.0467 34.0849C49.6822 35.3531 48.8459 37.089 48.7043 38.9465V38.9465" stroke="#F6B997" style="stroke:#F6B997;stroke:color(display-p3 0.9647 0.7255 0.5922);stroke-opacity:1;" stroke-width="0.490671" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M54.084 35.5244L53.8408 35.6962C52.2892 36.7921 51.3035 38.5197 51.1497 40.4131V40.4131" stroke="#F6B997" style="stroke:#F6B997;stroke:color(display-p3 0.9647 0.7255 0.5922);stroke-opacity:1;" stroke-width="0.490671" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M56.0402 37.4795L55.7883 37.6882C54.5438 38.719 53.7558 40.1989 53.5952 41.8069V41.8069" stroke="#F6B997" style="stroke:#F6B997;stroke:color(display-p3 0.9647 0.7255 0.5922);stroke-opacity:1;" stroke-width="0.490671" stroke-linecap="round" stroke-linejoin="round"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.9712 38.5423L59.3749 38.8928C60.4657 39.8399 60.4214 41.5464 59.283 42.4355L59.0719 42.6003C58.0981 43.3608 56.6781 43.0987 56.0401 42.0407L56.1418 41.7726C56.4194 41.0412 56.8225 40.3637 57.3328 39.7706C57.7399 39.2975 58.237 38.91 58.7951 38.6305L58.9712 38.5423Z" fill="#91BFFF" style="fill:#91BFFF;fill:color(display-p3 0.5667 0.7492 1.0000);fill-opacity:1;"/>
<defs>
<linearGradient id="paint0_linear_2509_4462" x1="39.3606" y1="35.001" x2="39.3606" y2="73.0524" gradientUnits="userSpaceOnUse">
<stop stop-color="#B9D8FF" style="stop-color:#B9D8FF;stop-color:color(display-p3 0.7255 0.8471 1.0000);stop-opacity:1;"/>
<stop offset="1" stop-color="#B9D8FF" stop-opacity="0.31" style="stop-color:#B9D8FF;stop-color:color(display-p3 0.7255 0.8471 1.0000);stop-opacity:0.31;"/>
</linearGradient>
<linearGradient id="paint1_linear_2509_4462" x1="0" y1="5.38742" x2="5.10603" y2="5.38742" gradientUnits="userSpaceOnUse">
<stop stop-color="#FEDFC7" style="stop-color:#FEDFC7;stop-color:color(display-p3 0.9961 0.8745 0.7804);stop-opacity:1;"/>
<stop offset="0.4456" stop-color="#FEC5A6" style="stop-color:#FEC5A6;stop-color:color(display-p3 0.9961 0.7725 0.6510);stop-opacity:1;"/>
</linearGradient>
<linearGradient id="paint2_linear_2509_4462" x1="5.91369" y1="-1.22972" x2="-1.55757" y2="-2.76772" gradientUnits="userSpaceOnUse">
<stop stop-color="#FEDFC7" style="stop-color:#FEDFC7;stop-color:color(display-p3 0.9961 0.8745 0.7804);stop-opacity:1;"/>
<stop offset="1" stop-color="#FEC5A6" style="stop-color:#FEC5A6;stop-color:color(display-p3 0.9961 0.7725 0.6510);stop-opacity:1;"/>
</linearGradient>
<linearGradient id="paint3_linear_2509_4462" x1="0" y1="5.38742" x2="4.64185" y2="5.38742" gradientUnits="userSpaceOnUse">
<stop stop-color="#FEDFC7" style="stop-color:#FEDFC7;stop-color:color(display-p3 0.9961 0.8745 0.7804);stop-opacity:1;"/>
<stop offset="0.4456" stop-color="#FEC5A6" style="stop-color:#FEC5A6;stop-color:color(display-p3 0.9961 0.7725 0.6510);stop-opacity:1;"/>
</linearGradient>
<linearGradient id="paint4_linear_2509_4462" x1="5.37609" y1="-1.22972" x2="-1.46424" y2="-2.50983" gradientUnits="userSpaceOnUse">
<stop stop-color="#FEDFC7" style="stop-color:#FEDFC7;stop-color:color(display-p3 0.9961 0.8745 0.7804);stop-opacity:1;"/>
<stop offset="1" stop-color="#FEC5A6" style="stop-color:#FEC5A6;stop-color:color(display-p3 0.9961 0.7725 0.6510);stop-opacity:1;"/>
</linearGradient>
<linearGradient id="paint5_linear_2509_4462" x1="28.4809" y1="1.87559" x2="28.4809" y2="16.2776" gradientUnits="userSpaceOnUse">
<stop stop-color="#757575" style="stop-color:#757575;stop-color:color(display-p3 0.4583 0.4583 0.4583);stop-opacity:1;"/>
<stop offset="1" stop-color="#626262" style="stop-color:#626262;stop-color:color(display-p3 0.3833 0.3833 0.3833);stop-opacity:1;"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@ -0,0 +1,7 @@
<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.5 4.5C0.5 2.29086 2.29086 0.5 4.5 0.5L20.5 0.5C22.7091 0.5 24.5 2.29086 24.5 4.5V20.5C24.5 22.7091 22.7091 24.5 20.5 24.5H4.5C2.29086 24.5 0.5 22.7091 0.5 20.5V4.5Z" fill="#F4F5F9" style="fill:#F4F5F9;fill:color(display-p3 0.9569 0.9608 0.9765);fill-opacity:1;"/>
<g opacity="0.80492">
<rect x="5.75" y="12.25" width="13.5" height="0.5" rx="0.25" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;" stroke-width="0.5"/>
<rect x="12.25" y="19.25" width="13.5" height="0.5" rx="0.25" transform="rotate(-90 12.25 19.25)" stroke="#232832" style="stroke:#232832;stroke:color(display-p3 0.1360 0.1574 0.1949);stroke-opacity:1;" stroke-width="0.5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 855 B

View File

@ -0,0 +1,5 @@
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.5">
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.13523 8.8285C7.32854 9.49429 6.29431 9.89425 5.16667 9.89425C2.58933 9.89425 0.5 7.80491 0.5 5.22758C0.5 2.65025 2.58933 0.560913 5.16667 0.560913C7.744 0.560913 9.83333 2.65025 9.83333 5.22758C9.83333 6.38924 9.40889 7.45176 8.70662 8.26852L11.2138 10.7757C11.344 10.9059 11.344 11.1169 11.2138 11.2471L11.1195 11.3414C10.9894 11.4716 10.7783 11.4716 10.6481 11.3414L8.13523 8.8285ZM9.03333 5.22759C9.03333 7.36309 7.30217 9.09425 5.16666 9.09425C3.03116 9.09425 1.3 7.36309 1.3 5.22759C1.3 3.09208 3.03116 1.36092 5.16666 1.36092C7.30217 1.36092 9.03333 3.09208 9.03333 5.22759Z" fill="black" style="fill:black;fill:black;fill-opacity:1;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 821 B

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16px" height="16px" viewBox="0 0 16 16" version="1.1">
<title>编组 14</title>
<defs>
<filter x="-10.6%" y="-5.4%" width="121.2%" height="110.9%" filterUnits="objectBoundingBox" id="filter-1">
<feOffset dx="0" dy="7" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
<feGaussianBlur stdDeviation="10" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
<feMerge>
<feMergeNode in="shadowMatrixOuter1"></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
</filter>
</defs>
<g id="new" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="自定义消息" transform="translate(-458.000000, -318.000000)">
<g id="编组-32" filter="url(#filter-1)" transform="translate(44.000000, 60.000000)">
<g id="编组-24" transform="translate(30.000000, 250.000000)">
<g id="编组-14" transform="translate(384.000000, 8.000000)">
<circle id="椭圆形" fill="#006EFF" fill-rule="nonzero" cx="8" cy="8" r="8"></circle>
<polyline id="路径-4" stroke="#FFFFFF" stroke-width="2" transform="translate(8.042641, 6.242641) rotate(-315.000000) translate(-8.042641, -6.242641) " points="6.04264069 10.2426407 10.0426407 10.2426407 10.0426407 2.24264069"></polyline>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,8 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#231;&#188;&#150;&#231;&#187;&#132; 14" opacity="0.802743">
<path id="&#229;&#189;&#162;&#231;&#138;&#182;&#231;&#187;&#147;&#229;&#144;&#136;"
fill-rule="evenodd" clip-rule="evenodd"
d="M6 10.5C6 11.3284 5.32843 12 4.5 12C3.67157 12 3 11.3284 3 10.5C3 9.67157 3.67157 9 4.5 9C5.32843 9 6 9.67157 6 10.5ZM12 10.5C12 11.3284 11.3284 12 10.5 12C9.67157 12 9 11.3284 9 10.5C9 9.67157 9.67157 9 10.5 9C11.3284 9 12 9.67157 12 10.5ZM16.5 12C17.3284 12 18 11.3284 18 10.5C18 9.67157 17.3284 9 16.5 9C15.6716 9 15 9.67157 15 10.5C15 11.3284 15.6716 12 16.5 12Z"
fill="#232832" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 740 B

Some files were not shown because too many files have changed in this diff Show More