微信小程序接入腾讯云IM即时通讯(发送消息开发步骤)

微信小程序接入腾讯云IM即时通讯(聊天窗口)

1.效果图
这里写图片描述

  • 2.功能点
    1.布局要分左右两边布局,如果是自己为发送消息方,都在右边,对方发送的消息在左边。
    2.腾讯云返回的是时间戳,需要转换一下时间,腾讯云是没有返回头像的,需要单独获取并且设置自己跟对方的头像。
    3.发送的消息分为自定义消息普通文本消息,带房源图片 跟价格和小区名称的是自定义的消息,从房源详情进入聊天就自动发送,普通文本消息则在底部栏发送。
    4.获取聊天的历史记录,下拉上翻历史记录,这里没有做本地缓存,是做了每次进入都拉取一次聊天的历史记录的操作。

WXML代码

<scroll-view class='chat' id="chat" style="height:{{height}}px;" scroll-y style='padding-bottom:49px;' ><block  wx:for="{{myMessages}}" wx:key="{{index}}"><view class='chat-time' wx:if="{{item.time != ''}}">{{item.msgTime}}</view><view class="chat-item flex-wrap {{item.isSelfSend ? 'house' : ''}}" wx:if='{{item.type != ""}}' bindtap='linkDetail'  data-id="{{item.id}}" data-type="{{item.type}}"><view class='avatar'><image style="width:40px;height:40px;border-radius:50%;" mode= "scaleToFill" src="{{item.avatar}}"></image></view><view class='content ' style="width:520rpx;"><image class='img' style="width:100%;height:120px;" mode= "scaleToFill"  src="{{item.img == '' ? houseDefault : item.img}}"></image><view class='info'><view class='info-name'>{{item.name}}</view><view class='info-title'>{{item.msgContent}}</view><view class='flex-wrap'><view class='flex-item3'><view class='info-price'>{{item.price}}</view></view><view class='flex-item'><view class='info-type'>{{item.type}}</view></view></view></view></view></view><view class="chat-item flex-wrap {{item.isSelfSend ? 's' : ''}}" wx:if='{{item.type == ""}}'><view class='avatar'><image style="width:40px;height:40px;border-radius:50%;" mode= "scaleToFill" src="{{item.avatar}}"></image></view><view class='content '>{{item.msgContent}}</view></view></block>
</scroll-view><view class='footer-h'></view>
<view class='chat-footer flex-wrap'><view class='flex-item ' bindtap='send1'> <text class="iconfont icon-yuyin" style='vertical-align: 0;padding-right:0; '></text></view><view class='flex-item5'><input class='input'  bindinput="bindKeyInput" value="{{inputValue}}" placeholder="对ta发送消息"/></view><view class='flex-item2 send' bindtap='bindConfirm'>发送</view>
</view>

WXSS代码

.flex-wrap.s ,.house{flex-direction:row-reverse;}
.h49{width: 100%;height: 49px;
}
.chat-item.flex-wrap.s{margin: 20px 10px 20px 0px;}
.chat-item.flex-wrap{line-height: 20px;height: auto;margin: 20px 0px 20px 10px;}
.chat-footer{position: fixed;bottom: 0;left: 0;width: 100%;height: 49px;background: #ffffff;
}
.send{width: 100%;height: 49px;line-height: 49px;text-align: center;background: #69BEFF;color: #ffffff;font-size: 16px;
}
.icon-yuyin::before{font-size: 70rpx;color: #7F8389;display: block;height: 49px;line-height: 49px;text-align: center;
}
.input{height: 49px;line-height: 49px;font-size: 13px;
}
.avatar{width: 40px;height: 40px;background: #69BEFF;border-radius:50%;text-align: center;line-height: 40px;color: #ffffff;
}
.chat-item.flex-wrap .content{background: #ffffff;margin-left: 10px;padding:12px;border-radius:10px; width: auto;max-width: 480rpx;font-size: 15px;text-align: justify;
}
.chat-item.flex-wrap.house{margin-right: 10px;
}.chat-item.flex-wrap.s .content{margin-right: 10px;background: #69BEFF;color: #ffffff;
}
.chat-item.flex-wrap.house .content{margin-right: 10px;padding: 0;width: 520rpx;}
.content .img{border-top-left-radius: 10px;border-top-right-radius: 10px;
}
.chat-time{width: 80px;height: 21px;line-height: 21px;background: #CECECE;color: #ffffff;font-size: 12px;margin: 20px auto 0px;text-align: center;border-radius:5px;}
.content .info{padding:0 20rpx 20rpx;
}
.info-price{color: #E93D26;font-size: 14px;
}
.info-title{color: #999999;font-size: 12px;
}
.info-type{width: 50px;height: 18px;line-height: 18px;color: #ffffff;font-size: 12px;background: #CECECE;text-align: center;border-radius: 2px;}
.footer-h{height: 49px;width: 100%;
}

js代码


var webim = require('../../utils/webim.js');
var webimhandler = require('../../utils/webim_handler.js');
const app = getApp()
Page({/*** 页面的初始数据*/data: {noData: app.data.imageUrl + '/no-msg.png',houseDefault: app.data.imageUrl + '/msg-default.png',inputValue:'',//发送的文字消息内容myMessages: [],//消息selToID:0,scrollTop: 0,houseId:'',//房源idtype:'',//房源类型height:'',complete:0,//默认为有历史记录可以拉取is_lock:true//发送消息锁},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {var that = this;that.setData({height: wx.getSystemInfoSync().windowHeight})if(options){if(options.id){//设置会话列表传参过来的为好友idthat.setData({selToID: options.id})wx.setNavigationBarTitle({title: options.name})}else if (!options.dockingname){//非经纪人角色,私聊账号为推荐经纪人账号that.setData({selToID: app.data.userInfo.agent_member_id.toString(),houseId: options.houseid,type:options.type})wx.setNavigationBarTitle({title: '置业顾问' + app.data.userInfo.agent_name})//拉取所需要自定义的消息数据发送that.createhousemsg();}else{that.setData({selToID: options.agent_member_id ,houseId: options.houseid,type: options.type})wx.setNavigationBarTitle({title: '盘方顾问' + options.dockingname})//拉取所需要自定义的消息数据发送that.createhousemsg();}}},onShow:function () {var that = this;    wx.setStorageSync('msgKey', '')wx.setStorageSync('lastMsgTime', '')webimhandler.init({accountMode: app.data.Config.accountMode, accountType: app.data.Config.accountType, sdkAppID: app.data.Config.sdkappid, selType: webim.SESSION_TYPE.C2C//私聊, agent_member_id: app.data.userInfo.id, id: that.data.selToID  , name: app.data.userInfo.agent_name, icon: app.data.userInfo.agent_pic,that: that});if (webim.checkLogin()) {webimhandler.getC2CHistoryMsgs();} else {webimhandler.sdkLogin(that,app, this.data.selToID,()=> {//获取聊天历史记录webimhandler.getC2CHistoryMsgs();});}},//创建自定义房源消息体createhousemsg:function(){var that = this;var param = {app_token: app.data.userInfo.app_token,id: that.data.houseId,type: that.data.type}app.request('get', 'createhousemsg', that, param,(data) => {//这里的data.array.MsgContent为获取到需要发送的消息体字段webimhandler.sendCustomMsg(data.array.MsgContent, (data)=>{var myMessages = that.setDatas(data)that.setData({myMessages: myMessages,})setTimeout(function () {that.pageScrollToBottom()}, 100)})}, () => {setTimeout(function () {login.login(app)}, 500)}, () => {wx.navigateBack({delta: 1})return;})},//获取普通文本消息bindKeyInput:function(e){var that = this;that.setData({inputValue:e.detail.value})},// 发送普通文本消息bindConfirm: function(e) {var that = this;if(that.data.is_lock){that.setData({is_lock:false})if (that.data.inputValue.length == 0) {wx.showToast({title: '消息不能为空!',icon:'none'})that.setData({is_lock: true})return;}var content = that.data.inputValue;if (!content.replace(/^\s*|\s*$/g, '')) return;webimhandler.onSendMsg(content)}},// 清除输入框clearInput:function(e){this.setData({inputValue:''})},/*** 下拉上翻历史记录*/onPullDownRefresh: function () {if (this.data.complete == 0){wx.showLoading({title: '加载历史记录中...',})var that = this;webimhandler.getPrePageC2CHistoryMsgs()wx.stopPullDownRefresh();}else{wx.showToast({title: '没有更多历史记录了',icon:'none'})}},// 滚动最底部pageScrollToBottom: function () {wx.createSelectorQuery().select('#chat').boundingClientRect(function (rect) {// 使页面滚动到底部wx.pageScrollTo({scrollTop: rect.bottom})}).exec()},// 跳转房源详情linkDetail:function(e){switch (e.currentTarget.dataset.type){case '新房':wx.navigateTo({url: '../newHouseDetail/newHouseDetail?id=' + e.currentTarget.dataset.id,})break;case '二手房':wx.navigateTo({url: '../useroomDetail/useroomDetail?id=' + e.currentTarget.dataset.id,})break;case '租房':wx.navigateTo({url: '../rentroomDetail/rentroomDetail?id=' + e.currentTarget.dataset.id,})break;case '小区':wx.navigateTo({url: '../unitDetail/unitDetail?id=' + e.currentTarget.dataset.id,})break;}},setDatas: function (data){var that = this;var myMessages = data.map((item, index) => {switch (item.type) {case 1:item.type = '二手房'break;case 2:item.type = '租房'break;case 3:item.type = '小区'break;case 4:item.type = '新房'break;}if (item.img == '') {item.img = that.data.houseDefault}return item;})return myMessages;}})

发送自定义消息

//发送消息(自定义消息)
function sendCustomMsg(msgs,callback) {var data = msgs.Data;//数据var desc = msgs.Desc;//描述var ext = msgs.Ext;//拓展字段var msgLen = webim.Tool.getStrBytes(data);if (msgs.length < 1) {alert("发送的消息不能为空!");return;}var maxLen, errInfo;if (selType == webim.SESSION_TYPE.C2C) {maxLen = webim.MSG_MAX_LENGTH.C2C;errInfo = "消息长度超出限制(最多" + Math.round(maxLen / 3) + "汉字)";} else {maxLen = webim.MSG_MAX_LENGTH.GROUP;errInfo = "消息长度超出限制(最多" + Math.round(maxLen / 3) + "汉字)";}if (msgLen > maxLen) {alert(errInfo);return;}if (!selSess) {selSess = new webim.Session(selType, id, name, icon, Math.round(new Date().getTime() / 1000));}var msg = new webim.Msg(selSess, true, -1, -1, -1, id, 0, name);var custom_obj = new webim.Msg.Elem.Custom(data, desc, ext);msg.addCustom(custom_obj);msg.sending = 1;// //调用发送消息接口webim.sendMsg(msg, function (resp) {if (selType == webim.SESSION_TYPE.C2C) {// 处理消息handlderMsg(msg,false);// 获取头像getMyAvatar(id, agent_member_id,function(){callback(currentMsgsArray)});}that.msginformagent(id, msgs)webim.Log.info("发消息成功");}, function (err) {webim.Log.info("发消息失败");});
}// 解析消息(普通文本消息,自定义消息)
function convertMsg(msg, prepend) {var that = this;var elems, elem, type, content, isSelfSend, ifromAccount;elems = msg.getElems();isSelfSend = msg.getIsSend(); //消息是否为自己发的 true是自己发送,ifromAccount = msg.fromAccountfor (var i in elems) {var currentMsg = {}; elem = elems[i];type = elem.getType();content = elem.getContent();switch (type) {case webim.MSG_ELEMENT_TYPE.TEXT://文本消息var msgContent = convertTextMsgToHtml(content);var msgTime = msg.getTime();//得到当前消息发送的时间//解析时间convertTime(msgTime, function (data) {currentMsg.id = ifromAccount;//房源标题                currentMsg.msgContent = msgContent;//当前消息的内容currentMsg.img = '';currentMsg.msgTime = data;currentMsg.name = ''currentMsg.price = '';currentMsg.isSelfSend = isSelfSend;currentMsg.ifromAccount = ifromAccount;currentMsg.type = '';if (prepend){historyMsgsArray.push(currentMsg)}else{currentMsgsArray.push(currentMsg);}})break;case webim.MSG_ELEMENT_TYPE.CUSTOM://自定义消息var msgContent = convertCustomMsgToHtml(content);var msgTime = msg.getTime();//得到当前消息发送的时间if (msgContent.data == ''){}else{msgContent = JSON.parse(msgContent.data)}convertTime(msgTime, function (data) {currentMsg.id = msgContent.id//房源标题currentMsg.img = msgContent.img//房源图片currentMsg.msgTime = data;//消息时间                currentMsg.name = msgContent.name //楼盘名称currentMsg.price = msgContent.price //价格currentMsg.type = msgContent.type //类型(1二手房,2租房,3小区,4新房)currentMsg.isSelfSend = isSelfSend;//默认右边currentMsg.ifromAccount = ifromAccount;if (prepend){historyMsgsArray.push(currentMsg)}else{currentMsgsArray.push(currentMsg);}})break;}}}// 解析自定义消息
function convertCustomMsgToHtml(content) {var data = content.getData();var desc = content.getDesc();var ext = content.getExt();var content = {data:data,desc: desc,ext: ext}return content;
}

发送普通文本消息

//发送消息(普通消息)
function onSendMsg(msg) {//获取消息内容var msgtosend = msg;var msgLen = webim.Tool.getStrBytes(msg);// 创建会话对象if (!selSess) {selSess = new webim.Session(selType, id, name, icon, Math.round(new Date().getTime() / 1000));}var isSend = true;//是否为自己发送var seq = -1;//消息序列,-1表示sdk自动生成,用于去重var random = Math.round(Math.random() * 4294967296);//消息随机数,用于去重var msgTime = Math.round(new Date().getTime() / 1000);//消息时间戳var subType = webim.C2C_MSG_SUB_TYPE.COMMON;//消息子类型c2c消息时,参考c2c消息子类型对象:webim.C2C_MSG_SUB_TYPE //loginInfo.identifier消息发送者账号,loginInfo.identifierNick消息发送者昵称var msg = new webim.Msg(selSess, isSend, seq, random, msgTime, id, subType, name );//解析文本和表情var expr = /\[[^[\]]{1,3}\]/mg;var emotions = msgtosend.match(expr);if (!emotions || emotions.length < 1) {var text_obj = new webim.Msg.Elem.Text(msgtosend);msg.addText(text_obj);} else {//有表情}webim.sendMsg(msg, function (resp) {if (selType == webim.SESSION_TYPE.C2C) {//私聊时,在聊天窗口手动添加一条发的消息handlderMsg(msg,false);// 设置双方头像getMyAvatar(id, agent_member_id, function () {that.clearInput();var myMessages = that.setDatas(currentMsgsArray);that.setData({myMessages: myMessages,is_lock: true})// setTimeout(function () {that.pageScrollToBottom()// }, 100)});that.msginformagent(id, msgtosend)          webim.Log.info("发消息成功");}}, function (err) {webim.Log.error("发消息失败:" + err.ErrorInfo);});
}//解析文本消息元素
function convertTextMsgToHtml(content) {return content.getText();
}

统一处理文本消息,自定义消息

// 解析消息(普通文本消息,自定义消息)
function convertMsg(msg, prepend) {var that = this;var elems, elem, type, content, isSelfSend, ifromAccount;elems = msg.getElems();isSelfSend = msg.getIsSend(); //消息是否为自己发的 true是自己发送,ifromAccount = msg.fromAccountfor (var i in elems) {var currentMsg = {}; elem = elems[i];type = elem.getType();content = elem.getContent();switch (type) {case webim.MSG_ELEMENT_TYPE.TEXT://文本消息var msgContent = convertTextMsgToHtml(content);var msgTime = msg.getTime();//得到当前消息发送的时间//解析时间convertTime(msgTime, function (data) {currentMsg.id = ifromAccount;//房源标题                currentMsg.msgContent = msgContent;//当前消息的内容currentMsg.img = '';currentMsg.msgTime = data;currentMsg.name = ''currentMsg.price = '';currentMsg.isSelfSend = isSelfSend;currentMsg.ifromAccount = ifromAccount;currentMsg.type = '';if (prepend){historyMsgsArray.push(currentMsg)}else{currentMsgsArray.push(currentMsg);}})break;case webim.MSG_ELEMENT_TYPE.CUSTOM://自定义消息var msgContent = convertCustomMsgToHtml(content);var msgTime = msg.getTime();//得到当前消息发送的时间if (msgContent.data == ''){}else{msgContent = JSON.parse(msgContent.data)}convertTime(msgTime, function (data) {currentMsg.id = msgContent.id//房源标题currentMsg.img = msgContent.img//房源图片currentMsg.msgTime = data;//消息时间                currentMsg.name = msgContent.name //楼盘名称currentMsg.price = msgContent.price //价格currentMsg.type = msgContent.type //类型(1二手房,2租房,3小区,4新房)currentMsg.isSelfSend = isSelfSend;//默认右边currentMsg.ifromAccount = ifromAccount;if (prepend){historyMsgsArray.push(currentMsg)}else{currentMsgsArray.push(currentMsg);}})break;}}}

发送消息成功之后,就需要监听新消息,更新消息的未读数了

//监听新消息(私聊(包括普通消息、全员推送消息),普通群(非直播聊天室)消息)事件
//newMsgList 为新消息数组,结构为[Msg]
function onMsgNotify(newMsgList) {var newMsg;//获取所有聊天会话for (var j in newMsgList) {//遍历新消息newMsg = newMsgList[j];if (newMsg.getSession().id() == id) {//为当前聊天对象的消息selSess = newMsg.getSession();handlderMsg(newMsg, false);currentMsgsArray = currentMsgsArray.map((item, index) => {if (!item.isSelfSend) {item.avatar = myAvatar} else {item.avatar = friendAvatar}return item;})var myMessages = that.setDatas(currentMsgsArray);that.setData({myMessages: myMessages,})setTimeout(function () {if (that.data.is_chat){that.pageScrollToBottom()}}, 100)}}getUnread()}//更新消息未读数
function getUnread(){var sess= {};var sessMap = webim.MsgStore.sessMap();if (that.data.contactList) {// 更新消息的未读数for (var i in sessMap) {sess = sessMap[i];var contactList = that.data.contactList.map((item, index) => {if (item.To_Account == sess.id()) {item.UnreadMsgCount = sess.unread()}return item;})that.setData({contactList: contactList})// 获取最新的会话消息webim.getRecentContactList({'Count': 10 //最近的会话数 ,最大为 100}, function (resp) {var MsgShow = resp.SessionItem.filter((item, index) => {if (item.To_Account == sess.id()) return item;})var contactList = that.data.contactList.map((item, index) => {if (item.To_Account == sess.id()) {// 获取最新消息if (MsgShow[0].MsgShow == '[其他]'){MsgShow[0].MsgShow = '[房源信息]'}item.MsgShow = MsgShow[0].MsgShow}return item;})that.setData({contactList: contactList})})}}
}

发送消息就到这里了,历史记录下章讲

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62168.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp小程序接入腾讯IM聊天

腾讯IM中创建项目 拿到AppID 与 密钥 下载demo 将debug 文件夹拖到自己项目中 在第一个js文件中填入自己项目的APPID 与密钥 下载&#xff08;tim-wx-sdk 上传文件 的依赖 看项目所需 import TIM from tim-wx-sdk; import TIMUploadPlugin from tim-upload-plugin; let optio…

用最通俗易懂的语言告诉你什么是信息熵

图和公式都挂了&#xff0c;想看原文的小伙伴去公众号后台回复”信息熵”即可 假设有个考试作弊团伙&#xff0c;需要连续不断地向外传递4选1单选题的答案。直接传递ABCD的ascii码的话&#xff0c;每个答案需要8个bit的二进制编码&#xff0c;从传输的角度&#xff0c;这显然有…

外景黑纱婚纱照高级感十足

婚纱照不止有自然小清新(&#xff06;还可以暗黑高级 看腻了千篇一律的白色婚纱礼服 炎追求个性、与众不同的仙女们不妨尝试一下黑色婚纱&#x1f5a4; 黑纱不一定只有酷和暗黑 也有法式赫本风的复古优雅 满满的氛围感和高级感 &#x1f3ac; 女生的拖尾黑裙神秘又优雅 …

福州一般拍一套婚纱照要多少钱

随着婚纱摄影行业发展以来&#xff0c;近几年选择婚纱照旅拍的准新人越来越多了。相信每一位新人对于这些都是第一次没有经验的&#xff0c;所以也不太清楚行情&#xff0c;不知道选择怎么样的套餐&#xff0c;那小编就来科普一下现在旅拍的行情&#xff0c;让你们在选择婚纱照…

晒一下我和老婆的婚纱照!

两人一起的 老婆单人的 老婆就是大名鼎鼎的晴天有雨啊&#xff01; 我单人的

冬天拍婚纱照注意事项 拍出养眼婚纱照

寒冷的冬天来了&#xff0c;对于北方人就要迎接雪花了&#xff0c;在寒冷的冬季进行婚纱摄影&#xff0c;会美丽但是也会“冻人”哦!下面 南京婚纱摄影工作室给大家介绍冬天拍婚纱照注意事项&#xff0c;准新人们可以参考一下哦! 冬天拍婚纱照注意事项 拍出养眼婚纱照 婚纱照 冬…

国内唯美花海 新娘绝美婚纱照

每位新郎都希望有一位仙女般的妻子&#xff0c;新娘也都希望自己是花丛中的花仙子。一组浪漫唯美的花海婚纱照无疑是诠释新人们花仙子梦的最好渠道。下面 青岛摄影工作室 就来给大家盘点一下国内那些唯美的花海。 1、云南罗平油菜花 云南省的罗平。从每年的二月份开始就进入了油…

W ndoWS十p啥意思,婚纱照相册10P是什么意思?入册多少张最合适?

原标题&#xff1a;婚纱照相册10P是什么意思&#xff1f;入册多少张最合适&#xff1f; 在预定婚纱照时&#xff0c;都会谈及相册P数&#xff0c;尺寸大小等等一些相册信息&#xff0c;一般相册的页数有7、10、12、15、20p还有30p的,而我们常见就为10P&#xff0c;那么&#xf…

婚纱照效果 取景很重要

新人们都希望可以有绝美的婚纱照&#xff0c;却又为自身没有绝对的优势而感到沮丧。其实漂亮的婚纱照通过选择适合景点选取一样可以拍出来。 婚纱照应该在选景的时候注意哪些问题&#xff0c;很多人渴望拥有类似杨幂结婚时一样的明星婚纱照&#xff0c;首先在选景的时候&#…

简约复古婚纱照拍摄攻略

当下拍婚纱照也要紧跟时尚潮流&#xff0c;当下拍婚纱照流行什么呢&#xff1f;简约、复古是当下婚纱照拍摄关键词。将时尚复古元素相结合也是当下最受年轻人亲睐的婚纱照拍摄形式&#xff0c;那么如何拍摄简约复古婚纱照呢&#xff1f;下面就跟无锡婚纱摄影一起来看看简约复古…

Photoshop透明婚纱照抠图处理

透明婚纱照抠图处理教程&#xff1a;先需要用钢笔等工具把人物部分抠出来包括婚纱部分。然后把抠出的人物图层复制一层&#xff0c;在通道选区婚纱部分较为清晰的通道并调出选区&#xff0c;回到图层面板后把选区反选按删除高光部分以外的图像&#xff0c;得到的图像就是我们抠…

九宫格摆法_九宫格婚纱照摆法图片与技巧

婚纱照挂法已不再是单一的排版&#xff0c;九宫格婚纱照开始逐渐流行在新人之中。下面来看看九宫格婚纱照摆法图片&#xff0c;以及九宫格婚纱照摆法的技巧。 一、九宫格婚纱照摆法 九宫格最常见的挂法就是方方正正的33的形式&#xff0c;当然除了九宫格的挂法之外&#xff0c;…

福州黑白风格的婚纱照拍摄介绍

新人们有没有想过在老一辈的婚纱照都是黑白的色彩但是一样能够拍摄出非常好的效果&#xff0c;新人们有没有想要试一试黑白风格的婚纱照呢&#xff0c;今天就让福州婚纱摄影价格最实惠的婚纱摄影工作室来和您说说吧&#xff01; 光源的选择   拍摄黑白风格的婚纱照&#xff…

java+springboot影楼婚纱照预约系统ssm

为了扩大影楼的生意&#xff0c;提高影楼的宣传形象&#xff0c;方便客户在线预约套系等&#xff0c;我们设计一款关于影楼的网站。设计婚纱照预约系统的目的是为实现客户与影楼预约&#xff0c;明细化工作人员分配、提高工作效率&#xff0c;节约时间及其他杂项成本。本系统基…

婚纱照选场地

婚纱照 内场1风格&#xff1a;复古风 内场2风格 :花场 内场3风格&#xff1a;酷酷的玩游戏机的 外场&#xff1a;马场&#xff08;马厩、吉普车、铁罐子、草堆&#xff09;

响应式织梦模板婚纱照摄影类网站

模板介绍&#xff1a; 织梦内核开发的模板&#xff0c;该模板属于企业通用类、婚纱摄影、艺术摄影类企业都可使用&#xff0c; 这款模板使用范围极广&#xff0c;不仅仅局限于一类型的企业&#xff0c;你只需要把图片和产品内容&#xff1b; 换成你的&#xff0c;颜色都可以修改…

PS调出春夏外景婚纱照

效果图 先来看看原图和夏季的效果图 先看看原图 教程终于来咯 原图暗部太深&#xff0c;需要将暗部提亮。可以把暗部选区选出来。为了精确选择暗部选区&#xff0c;我利用计算命令如上图所示。最后得到暗部的选区。 上图得到了暗部选区&#xff0c;添加曲线调整图层提亮如图&am…

突变!微软将结束对Office Android应用的支持

整理 | 祝涛 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 早在6月底&#xff0c;就有报道称&#xff0c;微软可能计划将Chromebook上的Office用户转移到网络上。直到近日&#xff0c;微软正式宣布&#xff0c;将于9月18日起停止支持Chrome OS系统上的安卓版Of…

Python代码在Pycharm中不起作用,但在Jupiter Notebook中执行良好

代码 import requests from apscheduler.schedulers.background import BackgroundScheduler from datetime import datetimecontent {} content[day1] "早上好/:sun/:sun,\n人生最怕的就是试试、等等 、看看&#xff0c;最大的失败不是跌倒&#xff0c;而是从来不敢奔…