☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》

☀️苏州程序大白一文教你学会微信小程序开发☀️《❤️记得收藏❤️》

  • 目录
  • 🏳️‍🌈开讲啦!!!!🏳️‍🌈苏州程序大白🏳️‍🌈
  • 🌟博主介绍
  • 🌠前言
    • 🌠讲讲专享小程序有什么优势?
  • 🌠小程序文件分析
  • 🌠事件绑定
  • 🔥图片问题
  • 🔥轮播图swiper
  • 💧自定义组件
  • 💧生命周期
    • 🌐页面生命周期
    • 🌐项目制作
    • 🌐缓冲事件
    • 🌐`es7 async`语法
  • 🌐触底事件
    • ❄️下拉刷新页面
    • ❄️css省略号
    • ❄️预览大图
    • ❄️购物车模拟
    • ❄️获取地址信息
    • ❄️结算功能
  • 🌗登录获取用户信息
  • 🌟作者相关的文章、资源分享🌟
  • 🏳️‍🌈关注苏州程序大白,持续更新技术分享。谢谢大家支持🏳️‍🌈

目录

🏳️‍🌈开讲啦!!!!🏳️‍🌈苏州程序大白🏳️‍🌈

在这里插入图片描述

🌟博主介绍

💂 个人主页:苏州程序大白

🤟作者介绍:中国DBA联盟(ACDU)成员,CSDN全国各地程序猿(媛)聚集地管理员。目前从事工业自动化软件开发工作。擅长C#、Java、机器视觉、底层算法等语言。2019年成立柒月软件工作室。

💬如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和C#、Halcon、python+opencv、VUE、各大公司面试等一些订阅专栏哦

💅 有任何问题欢迎私信,看到会及时回复

👤 微信号:stbsl6,微信公众号:苏州程序大白

🎯 想加入技术交流群的可以加我好友,群里会分享学习资料

🌠前言

🌠讲讲专享小程序有什么优势?

  • 1、方便快捷:与其他购物平台的APP、网站相比,小程序有一个很大的优势——方便快捷。例如在使用其他购物平台的APP时,不仅需要下载、安装,而且还需要注册、登陆,操作步骤繁琐。即使不使用APP,直接登录购物平台的网站,也需要经过注册、登录的环节。但微信小程序不同,由于小程序是依附在微信上面使用的,因此无需下载和安装,此外,在登陆时,用户还可以选择在利用微信账号来登录小程序,一键登陆,操作简单、快捷。

  • 2、入口众多:小程序商城本身作为小程序的一个种类,具有很多开放入口,比如:附近的小程序、小程序码、微信搜一搜、群分享、好友分享、公众号关联、推送等五十多个的入口。这些入口有助于企业更好的获取流量,从而进行转化、变现。

  • 3、微信助力:相信大家都知道,小程序商城是基于微信运行的,这本身就是一个很大的优势。如果是运营一个购物商城的网站或是APP,首先要做到的就是有用户基数,而一个新平台,获取流量的难度是非常大的。但微信小程序,背靠微信,坐拥10亿用户,在这些用户中,一定会有很多有相关需求的用户。再加上附近的小程序、搜索发现小程序、公众号关联等,小程序可以非常轻松的获取到大量流量。

  • 4、场景营销:上述提到,小程序拥有很多的入口,其中包括线上入口和线下入口,而小程序商城主要作为购物使用,所以,线下的入口很重要。小程序商城很多的使用频率都是线下,再加上其拥有的营销属性,使得很多的商家解决了很多业务上的难题,更是大大节省了人力、物力、财力等成本,很大的提升了店铺的业务效率。

  • 5、开发成本低:企业进行微信小程序开发,既可以解决开发成本问题,又可以缩短开发周期,并且还可以利用微信已存在的营销趋势,用户可以通过扫描二维码进入。

🌠小程序文件分析

  • 1、WXML WXSS JavaScript JSON

  • 2、page首页log日志。

  • 3、顶部标题的颜色必须为blockwhite

tabBar

表示地址的tab栏【官网地址】

注意事项

  • 在使用bool类型 充当类型属性时,在属性值的位置前面不能加空格。

  • 列表循环` wx:for=”数组或者对象”。

  • 只有一层循环时可以将一下省略。

  • 列表循环wx:for-item="循环项的名称"wx:for-index=’index’`。

  • wx:key=”唯一的值”

  • 条件渲染wx:if wx:elif wx:else

  • hidden 是添加样式使用。

  • 对象循环 wx:for="{{对象/数组}}" wx:for-item="对象的值" wx:for-index="循环项目的属性"

<!--pages/demo/demo.wxml-->
<view>轮播图</view>
<!-- image width 700px height 277px x/1 = 277/700   x=277/700
-->
<swiper class="swiper" autoplay interval="1000" circular indicator-dots><swiper-item> <image mode="widthFix" src="https://m.360buyimg.com/mobilecms/s700x280_jfs/t1/175759/5/697/309624/605fa953Eaddcc402/30b0ea12dc5cc42c.jpg!cr_1125x445_0_171!q70.jpg.dpg" alt=""/></swiper-item><swiper-item> <image mode="widthFix" src="https://m.360buyimg.com/mobilecms/s700x280_jfs/t1/143564/28/18582/124317/60667523E2a4840dd/301bbb3de0243db8.jpg!q70.jpg.dpg" alt=""/></swiper-item><swiper-item> <image mode="widthFix" src="https://m.360buyimg.com/mobilecms/s700x280_jfs/t1/155887/8/16711/104572/60534627Eb979dc75/cc416de39d2e83b0.jpg!cr_1125x445_0_171!q70.jpg.dpg" alt=""/></swiper-item>
</swiper>
<!-- 单选框 -->
<radio-group bindchange="bindChange"><radio name="sex" value="male"></radio><radio name="sex" value="female"></radio><view wx:if="{{gerder == 'male'}}">-您选择的按钮为男</view><view wx:elif="{{gerder == 'female'}}">-您选择的按钮为女</view><view wx:else="{{gerder == ''}}">-您选择的按钮为</view>
</radio-group>
<!-- 复选框 -->
<view><checkbox-group bindchange="bandelItemchange"><checkbox wx:for="{{fruit}}" wx:key="id" value="{{item.value}}">{{item.name}}</checkbox><view>选中的是:{{checkList}}</view>
</checkbox-group>
</view>
<!-- 组件 -->
<Tabs></Tabs>
<rich-text class="" nodes="{{html}}"></rich-text><view>input标签</view>
<input type="text" bindinput="handleInput"/>
<view class="btn"><button size="mini" bindtap="handeltap" data-opertation="1">+</button>
<button size="mini" bindtap="handeltap" data-opertation="{{-1}}">-</button>
</view>
<image mode="widthFix" src="https://cdn.jsdelivr.net/gh/Rr210/image@master/hexo/4/wallhaven-oxxw29.webp"></image>
<view>{{num}}</view>
<view>----------------------------</view>
<text>测试页面</text>
<view>'text'相当于web中的span元素,view相当于web中的div标签块级元素</view>
<view>测试wx:for标签</view>
<view>---------------------</view>
<view>列表循环</view>
<view wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="username">属性:{{item.id}}索引: {{index}}名称:{{item.name}}年龄:{{item.age}}年龄:{{item.msg.con}}
</view>
<view>对象循环</view>
<view wx:for="{{msg}}" wx:for-item="value" wx:for-index="key" wx:key="id">{{value}}{{key}}
</view>
<view>---------------------</view>
<view>测试 wx:if</view>
<view wx:if="{{false}}">1</view>
<view wx:elif="{{false}}">2</view>
<view wx:elif="{{true}}">3</view>
<view>---------------------</view>
<view>测试 hidden</view>
<view hidden="{{true}}">1</view>
<view hidden>1</view>

🌠事件绑定

1、nput标签绑定input事件 使用bindinput属性

2、通过事件源对象来获取input输入的值 e.detail.value

3、与data同级 并且可以将input中输入的值与data中定义的属性绑定,使用this.setData({属性:e.detail.value})

4、加入一个点击事件 bindtap属性,无法直接传参 通过自定义属性的方法来传参。

  • 在自定义属性时要注意 如果传递的参数为数字,应该加{{}}使得传递的参数为number不加为string

  • 注意input输入后的值为字符型,需要将输入的值转换。

🔥图片问题

1、比例尺的关系 1px =750rpx*设置的尺寸大小/page的宽度

2、text 才能实现长按复制selectable decode解码和复制。

3、image中属性mode aspectFit是长边能显示出来 aspecFill使得短边显示出来 widthFix按照比例缩放。

4、图片支持懒加载lazy-load 布尔值

🔥轮播图swiper

1、轮播项swiper-item标签里面放入图片swiper 存在默认高度 150px

2、高度无法实现由内容撑开。

3、图片使用mode=“widthFix”

4、indicator-dots 显示面板指示点 indicator-color`` indicator-active-color

5、autoplay自动轮播 5秒一次。

6、interval可以切换时间间隔。

7、circular 是否循环轮播。

8、给图片加100%宽度 ,swipter的高度自适应 100vw * 图片的宽度 / 高度

在这里插入图片描述

在这里插入图片描述
navigator 导航

1、url 表示要跳转的页面路径。

2、相当于块级元素

3、target 跳转小程序,默认当前小程序 可选值 self/minProgram

4、open-type 跳转方式。

在这里插入图片描述
rich-text 富文本标签

1、nodes 接受字符串。

2、对象数组。

button标签

1、size属性 default/ mini

2、open-type

icon图标

1、type类型

2、size 大小 默认23。

3、color 改变颜色。

radio/checkbox

  • radio-ground 绑定change事件 bindchange

  • checkbox-ground绑定事件change

💧自定义组件

1、在使用自定义组件时 要注意 在使用函数方法时要写到methods中。

2、并且将被使用的组件写到需要渲染页面的json文件中。

3、父组件向子组件 传递数据 通过自定义属性来传递properties要接受的数据名称· type/value·类型和值。

4、子向父传递 this.triggerEvent('名称',传递的参数) 传递的时候要注意 传递的参数是什么形式,相对应。

5、子传父,在子中定义一个要传递的事件方法和参数,在父中对事件方法进行绑定,然后在父中使用方法。

6、数据在谁上,谁有权修改。

    handleitemtap(e){// 将点击的事件加入自定义属性// console.log(e);const {index} = e.currentTarget.datasetlet {tabs} = this.data// console.log(index);// 对以上的导航数据使用foreach进行遍历tabs.forEach((v,i)=>i===index?v.isActive=true:v.isActive=false)this.setData({tabs})}
-------------------
<view class="nav"><view bindtap="handleitemtap" wx:for="{{tabs}}" wx:key="id" class="title_item {{item.isActive?'active':''}}" data-index="{{index}}">{{item.name}}</view>
</view>

slot标签其实就是一个占位符,等到父组件调用子组件的时候,在传递标签。

💧生命周期

// app.js
App({// 表示在应用第一次启用时就执行onLaunch(e){console.log(e);console.log('launch');// 不能触发// wx.navigateTo({//   url: 'url',// })},// 应用被用户看到时执行onShow(e){// 对数据的重置console.log('onshow');},// 应用被隐藏的时候所执行的onHide(e){// 清除定时器console.log('onHide');},// 应用发生错误时执行onError(err){console.log('onError'); // console.log(err);},// 应用找不到页面时触发onPageNotFound(e){// 无法跳转到tabbar页面,如果页面不存在可以重定向到第二个页面console.log('onPageNotFound');wx.navigateTo({url: '/pages/demo/demo',})}
})

在这里插入图片描述

🌐页面生命周期

在这里插入图片描述

🌐项目制作

promise封装函数

export const request=(params)=>{return new Promise((resolve,reject)=>{wx.request({...params,success:(result)=>{resolve(result)},fail:(err)=>{reject(err)}});})
}request({url:"https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata"}).then(result=>{this.setData({swiper_list: result.data.message})})

🌐缓冲事件

1、设置一个缓冲事件,获取本地的存储中的数据进行判断。

2、·{time:Date.now(),data:[...]}

3、web: localStorage.setItem("key","value") localStorage.getItem("key")

4、优化接口的路径 使用prominse中的paramsurl解构出来。

🌐es7 async语法

  • 解决回溯的最终方案。

  • async。

🌐触底事件

1、onReachBottom 页面触底事件。

2、页面上拉触底事件的处理函数。触底事件,当页面触底之后,在进行请求,并且将请求到的数据在追加到原来的数组中,并且在触底后还要进行判断如果总数据的页数>=当前的页数,要返回wxwx.showToast({title: ‘title’,}),否则继续请求。

// pages/goods_list/goods_list.js
import { request } from "../../request/index.js";
Page({/*** 页面的初始数据*/data: {// 将这些数据导入到子文件中tabs: [{id: 0,value: '综合',isActive: true},{id: 1,value: '销量',isActive: false},{id: 2,value: '价格',isActive: false}],first_list:[],},// 设置请求后返回的总页面的数量totalpages:1,handleChage(e){// console.log(e);// 将子传递给父亲的索引值解构出来const {id} = e.detail// 将父亲data的数据进行解构let {tabs} = this.data// 将data中的数据进行遍历 如果此时的索引值等于数据中的id值则将数据中的isActive的值改为true// 这里的v表示的是遍历的数据,i表示的是索引号tabs.forEach((v,i) =>i===id?v.isActive=true:v.isActive=false);// 将这里修改的数据加到源数据中this.setData({tabs})},// 页面触底事件pageParams:{query:'',cid:'',pagenum:1,pagesize:10},// 对接口数据进行请求async getgoodList(e){const res = await request({url:'/goods/search',data: this.pageParams})console.log(res);// 先获取页面的总数据,计算出页码信息const goodspages = Math.ceil(res.data.message.total / this.pageParams.pagesize)console.log(goodspages)this.totalpages = goodspagesthis.setData({// 这一步是将请求到的数据在使用数组拼接的方式拼接起来,这里用到了数组解构的方法first_list:[...this.data.first_list,...res.data.message.goods],})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {// console.log(options);this.pageParams.cid = options.cat_idthis.getgoodList()},/*** 页面上拉触底事件的处理函数。触底事件,当页面触底之后,在进行请求,并且将请求到的数据在追加到原来的数组中,并且在触底后还要进行判断如果总数据的页数>=当前的页数,要返回wxwx.showToast({title: 'title',}),否则继续请求*/onReachBottom: function () {this.pageParams.pagenum++;// 进行页面触底的判断if(this.totalpages<=this.pageParams.pagenum){wx.showToast({title: '页面加载完成',})}else{this.getgoodList()}},/*** 生命周期函数--监听页面初次渲染完成*/onReady: function () {},/*** 生命周期函数--监听页面显示*/onShow: function () {},/*** 生命周期函数--监听页面隐藏*/onHide: function () {},/*** 生命周期函数--监听页面卸载*/onUnload: function () {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh: function () {},/*** 用户点击右上角分享*/onShareAppMessage: function () {}
})

❄️下拉刷新页面

  • 重置数据。

  • 重置页码。

  • 然后在请求方法的最后加上 关闭下拉刷新的方法。

  • 显示加载中提示,在页面请求之前显示 complete方法

  • 在页面请求加载之前首先先显示加载按钮在页面加载结束后隐藏 调用wx.request方法中的第三个函数方法complete

// 如果在执行异步操作时,对隐藏加载按钮进行处理,不做处理页面还未加载完成就结束了
let ajaxtimes = 0;
export const request=(params)=>{ajaxtimes++;// 在页面请求加载之前首先先显示加载按钮在页面加载结束后隐藏 调用wx.request方法中的第三个函数方法completewx.showLoading({title: '加载中',})// 将接口的公共部分解构出来,在进行拼接const baseUrl = 'https://api-hmugo-web.itheima.net/api/public/v1'return new Promise((resolve,reject)=>{wx.request({...params,url:baseUrl+params.url,success:(result)=>{resolve(result)},fail:(err)=>{reject(err)},//   请求完成或者失败都会执行complete:()=>{ajaxtimes--;//   如果ajaxtimes的值不等于0,不执行隐藏函数if(ajaxtimes===0){wx.hideLoading()} }});    })
}

❄️css省略号

display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;

❄️预览大图

1、点击轮播图位置得图片实现大图得预览效果。

2、为轮播图添加一个点击事件。

3、使用事件 previewImage

4、给小程序添加大图预览效果 使用 wx.previewImage方法来实现,首先是在轮播图的遍历图片的位置添加一个函数方法,然后在方法内使用pre方法,并且将获取到的图片从列表中选出后生成一个新的列表使用map方法,由于是异步函数,所以必须将列表单独拿出来,给swiper加上一个自定义id值,当用户点击某一张图片时将该图片放大,获取该点击事件得图片id值,使用解构得方法。

❄️购物车模拟

1、对加入购物车事件进行处理,点击加入购物车 先对本地缓冲中得cart缓冲进行判断如果存在则使得该商品得总数num+1,否则将当前商品得数量设置为1,使用findIndex方法,如果不满足条件则返回-1。

handleshopAdd(e) {let cart = wx.getStorageSync('cart') || []let index = cart.findIndex(v =>v.data.message.goods_id === this.infoData.data.message.goods_id)if (index === -1) {this.infoData.num = 1cart.push(this.infoData)} else {cart[index].num++;// console.log(cart[index].num);}// console.log(index);wx.setStorageSync('cart', cart)wx.showToast({title: '加入购物车成功',icon: 'success',// 防抖操作mask: true})
}

❄️获取地址信息

data: {address: false},// 点击获取地址按钮事件handleButtonAddress(e){// console.log(e);// 将获取到得地址信息存入到缓冲中wx.chooseAddress({success: (result) => {// console.log(result);// 设置一个缓冲信息wx.setStorageSync('address', result);}}) },// 在onshow事件内进行判断如果缓冲中存在数据则将地址呈现到页面中onShow: function(){// 先判断缓冲中是否存在信息,如果存在将数据存入到 data中并呈现到页面中// 先获取缓冲中得数据let address = wx.getStorageSync('address');if(address){this.setData({address})// 将数据呈现到页面中console.log(this.data.address);}else{console.log('缓冲中得数据不存在');}
}

❄️结算功能

使用遍历中的every方法

//Page Object
Page({data: {address: false,cart_list: [],Allchecked: false,totalPrice:0,totalNum:0},// 点击获取地址按钮事件handleButtonAddress(e) {// console.log(e);// 将获取到得地址信息存入到缓冲中wx.chooseAddress({success: (result) => {console.log(result);// 设置一个缓冲信息wx.setStorageSync('address', result);}})},// 在onshow事件内进行判断如果缓冲中存在数据则将地址呈现到页面中onShow: function () {// 先判断缓冲中是否存在信息,如果存在将数据存入到 data中并呈现到页面中// 先获取缓冲中得数据let address = wx.getStorageSync('address');// 获取缓存中的购物车信息const cart_list = wx.getStorageSync('cart') || []// 使用遍历方法every // const Allchecked = cart_list.length ? cart_list.every(v => v.checked) : false// 购物车结算,将用户选中的商品的数量相加,为总数量;单个商品的价格和数量相乘相加得到商品的总价格this.setCart(cart_list)if (address) {this.setData({address})// 将数据呈现到页面中// console.log(this.data.address);}},// 给checkbox添加一个改变属性handleItemChecked(e){// console.log(e);// 获取选中改变商品的id,解构出来const {id} = e.currentTarget.dataset// 找到缓冲中的相应的商品,同时进行判断如果修改checed属性值const {cart_list} = this.data// 使用findIndex方法对缓冲中的数组进行遍历const index = cart_list.findIndex(v=>v.data.message.goods_id==id)// 找出用户改变商品选中状态的索引值,修改该索引值下商品的checked的值cart_list[index].checked = !cart_list[index].checked// console.log(index);this.setCart(cart_list)},// 封装一个计算商品总数和商品总价格的函数方法setCart(cart_list){let totalPrice = 0;let totalNum = 0;let Allchecked = true// 使用forEach方法对缓冲中的数组进行遍历cart_list.forEach(v=>{if(v.checked){totalPrice += v.data.message.goods_price*v.numtotalNum += v.num}else{Allchecked= false}})// 并且当用户的列表为空时不进行遍历Allchecked=cart_list.length !=0?Allchecked:false// console.log(cart_list);// console.log(Allchecked);this.setData({cart_list,Allchecked,totalPrice,totalNum})},

🌗登录获取用户信息

使用getgetUserProfile

getUserProfile(e) {// console.log(e);// 判断缓冲中是否存在用户idwx.getUserProfile({desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写success: (res) => {this.setData({userInfo: res.userInfo,hasUserInfo: true})wx.setStorageSync('userinfo', res.userInfo);const userinfo = wx.getStorageSync('userinfo');if (userinfo) {wx.switchTab({url: '/pages/user/user'})}}})
}

🌟作者相关的文章、资源分享🌟

🌟让天下没有学不会的技术🌟

学习C#不再是难问题

🌳《C#入门到高级教程》🌳

有关C#实战项目

👉C#RS232C通讯源码👈

👉C#委托数据传输👈

👉C# Modbus TCP 源代码👈

👉C# 仓库管理系统源码👈

👉C# 欧姆龙通讯Demo👈

👉C# 欧姆龙通讯Demo👈

👉2021C#与Halcon视觉通用的框架👈

✨有关C#项目欢迎各位查看个人主页✨

🌟机器视觉、深度学习🌟

🌌《Halcon入门到精通》🌌

🌌《深度学习资料与教程》🌌

有关机器视觉、深度学习实战

👉2021年C#+HALCON视觉软件👈

👉2021年C#+HALCON实现模板匹配👈

👉C#集成Halcon的深度学习软件👈

👉C#集成Halcon的深度学习软件,带[MNIST例子]数据集👈

👉C#支持等比例缩放拖动的halcon WPF开源窗体控件👈

👉2021年Labview联合HALCON👈

👉2021年Labview联合Visionpro👈

👉基于Halcon及VS的动车组制动闸片厚度自动识别模块👈

✨有关机器视觉、深度学习实战欢迎各位查看个人主页✨

🌟Java、数据库教程与项目🌟

🍏《JAVA入门到高级教程》🍏

🍏《数据库入门到高级教程》🍏

有关Java、数据库项目实战

👉Java经典怀旧小霸王网页游戏机源码增强版👈

👉Java物业管理系统+小程序源码👈

👉JAVA酒店客房预定管理系统的设计与实现SQLserver👈

👉JAVA图书管理系统的研究与开发MYSQL👈

✨有关Java、数据库教程与项目实战欢迎各位查看个人主页✨

🌟分享Python知识讲解、分享🌟

🥝《Python知识、项目专栏》🥝

🥝《Python 检测抖音关注账号是否封号程》🥝

🥝《手把手教你Python+Qt5安装与使用》🥝

🥝《用一万字给小白全面讲解python编程基础问答》🥝

🥝《Python 绘制Android CPU和内存增长曲线》🥝

有关Python项目实战

👉Python基于Django图书管理系统👈

👉Python管理系统👈

👉2021年9个常用的python爬虫源码👈

👉python二维码生成器👈

✨有关Python教程与项目实战欢迎各位查看个人主页✨

🌟分享各大公司面试题、面试流程🌟

🍏《2021年金九银十最新的VUE面试题☀️《❤️记得收藏❤️》》🍏

🍏《只要你认真看完一万字☀️Linux操作系统基础知识☀️分分钟钟都吊打面试官《❤️记得收藏❤️》》🍏

🍏《❤️用一万字给小白全面讲解python编程基础问答❤️《😀记得收藏不然看着看着就不见了😀》》🍏

✨有关各大公司面试题、面试流程欢迎各位查看个人主页✨

在这里插入图片描述

🏳️‍🌈关注苏州程序大白,持续更新技术分享。谢谢大家支持🏳️‍🌈

在这里插入图片描述

❤️关注苏州程序大白公众号❤️


👇 👇👇

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

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

相关文章

老徐讲解小程序与微信第三方平台及微信官方的关系。

小程序服务器关系分析 小程序是微信官方根据前后端完全分离的思想创建的一套自己的前端框架。 后端部分&#xff0c;则一部分交给微信官方提供授权和鉴别身份的官方接口&#xff0c;而主要的业务逻辑接口则交给第三方开发平台完成。 也就是微信提供了单独的一个微信小程序服务…

微信小程序扫码报工案例分享

使用微信小程序结合PC端ERP完成工序扫码报工扫码出入库&#xff0c;可以实现生产管理全流程自动化作业&#xff0c;使生产效率比之前手工操作有了质的飞跃。 本案例背景介绍 这是一家生产二极管的电子生产企业&#xff0c;车间自动化生产设备多&#xff0c;生产连续性强。产品…

小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

本系列教程是针对粉丝的变现教程&#xff0c;还不是粉丝的可以关注我并且到社区&#xff1a;https://bbs.csdn.net/topics/603436232 进行打卡&#xff0c;不是老粉的也可以获取最终的技术变现学习&#xff0c;最终还有详细的变现教程等你来。 前言 《 程序员变现指南之 微信…

llama.cpp Mac版本llama

骆驼.cpp 路线图/宣言/ ggml 纯C/C中LLaMA模型的推理 热点话题&#xff1a; 简单的网络聊天示例&#xff1a;#1998k-quants 现在支持 64 的超级块大小 super-block size of 64:&#xff1a;#2001新路线图&#xff1a; https: //github.com/users/ggerganov/projects/7Azure …

解决老板们的一大难题---如何监管微信聊天

如今&#xff0c;企业越来越希望能够监管员工微信。但是&#xff0c;到底应该监管员工微信的哪些内容呢&#xff1f; 员工在微信上进行的聊天记录、红包转账、删除联系人和聊天记录、消息中涉及敏感词汇、以及客户名片和重要客户名片的发送等行为&#xff0c;老板们都想要掌握…

万达酒店及度假村旗下“万达颐华”品牌第一家直营酒店正式开业

无锡2021年6月28日 /美通社/ -- 无锡万达颐华酒店&#xff0c;位于中国江苏省无锡市中山路218号&#xff0c;是万达酒店及度假村旗下“万达颐华”品牌的第一家直营酒店。无锡万达颐华酒店的前身&#xff0c;是无锡上世纪90年代最著名的高星级酒店 -- 无锡锦江大酒店。随着城市发…

滴滴与万达酒店签署战略合作 将推出会员权益互享

【TechWeb】8月7日消息&#xff0c;滴滴出行与万达酒店及度假村签署战略合作&#xff0c;此次合作将由礼橙专车、滴滴豪华车联合万达酒店&#xff0c;打通出行与酒店领域的资源和服务。在出行服务升级、会员权益互享、品牌联合营销等方面展开深度合作。 以往商旅用户安排行程时…

COMFORT 酒店丨万达酒店及度假村与腾讯微信签署战略合作协议 微信支付分功能酒旅行业率先落地万达酒店

近日&#xff0c;万达酒店及度假村与腾讯微信在北京万达文华酒店签署战略合作协议&#xff0c;双方以微信支付分功能在酒店旅游行业率先落地万达酒店为起点&#xff0c;将在共建“智慧酒店”、探索酒店行业创新场景等方面展开深度合作&#xff0c;致力为宾客提供高品质、“有温…

万达酒店及度假村旗下三大酒店品牌 荣膺迈点年度MBI国内高端酒店十大影响力品牌

中国,北京,2020年7月3日 —— 近日,迈点网、迈点研究院联合数百家全国主流媒体举办的“2019-2020旅游住宿业MBI颁奖盛典暨高峰论坛”在上海隆重召开。万达酒店及度假村旗下万达瑞华、万达文华、万达嘉华三大酒店品牌荣膺“年度旅游住宿业影响力品牌金航奖——MBI(迈点品牌指数)…

为什么说苏宁必买万达百货

在吃下万达百货之后&#xff0c;苏宁易购在全场景智慧零售的探索仍然挑战重重。后者收购前者的逻辑是什么?前者具备哪些可挖掘潜力?后者前者具有哪些想象空间?这都是本次收购行为的主要看点。 不买不行 苏宁易购收购万达百货的背后&#xff0c;或许可以从财报上看出些端倪。…

【报告分享】 2020中国男士美妆市场洞察报告-巨量算数(附下载)

摘要:随着中国新生代男性审美意识的提高&#xff0c;男性护肤意识增强&#xff0c;男士护理成为中国化妆品市场增势明显的品类之一。同时&#xff0c;2020年大批新锐男士护理品牌受到资本市场青睐&#xff0c;并在短视频平台获得爆发式关注&#xff0c;给整个男士美妆市场注入新…

【报告分享】 2020年中国本土及国际美妆护肤品牌及营销现状研究报告-艾瑞咨询(附下载)

摘要:通过定量问卷调研、定性消费者“一对一”深访、定性行业专家“一对一”访谈以及桌面研究四种研究方法&#xff0c;对国内美妆护肤市场的发展和现状进行梳理&#xff0c;并对中国美妆护肤消费者进行洞察研究&#xff0c;旨在了解国内美妆护肤市场营销现状、消费需求特征以及…

【报告分享】 美妆行业营销报告-从“她经济”到“TA经济“-WEIQ(附下载)

摘要:随着社会的发展和进步&#xff0c;女性在社会中的地位得到显著提高&#xff0c;在消费市场的角色也发生改变&#xff0c;渐渐从“奉献型消费”变成“悦己型消费”&#xff0c;“她经济”已然崛起。90后、00后女生年订单量占比过半&#xff0c;成新一代消费者中的主力军&am…

市场营销学数据分析【香奈儿包包在京东上的比价分析】

为了分析香奈儿成功的因素以及香奈儿在市场上的具体销售情况&#xff0c;博主自己写了一个程序用于爬取京东商城香奈儿包包的销售数量&#xff08;包括商品名称&#xff0c;价格&#xff0c;商品成交量&#xff0c;以及商品的店铺名称&#xff09;&#xff0c;然后对商品进行一…

2023年1月至4月天猫平台美妆品类销售数据分析

如今&#xff0c;随着人们消费观念的突破&#xff0c;越来越多的人用美妆来诠释个性表达&#xff0c;美丽经济获得更多关注&#xff0c;化妆品消费理念逐渐增强&#xff0c;因此&#xff0c;美妆市场也形成了较大的规模。 根据鲸参谋电商数据显示&#xff0c;2023年1月至4月&am…

2021年美妆行业发展趋势洞察

2021年美妆行业发展趋势洞察 目录&#xff1a; 美妆行业概况&#xff1b; 美妆人群消费趋势&#xff1b; 美妆营销模式及案例分析&#xff1b; 有赞美妆数据洞察&#xff1b; 美妆行业思考和建议。 Part 1&#xff1a;美妆行业概况 1.1 化妆品行业市场规模 2019年&#xff0…

免费 GPT-4 神器来了,这下我彻底不用写代码了!

前两天在网上看到了一款基于 GPT-4 的新一代辅助编程神器&#xff1a;Cursor&#xff0c;官网介绍说是与 OpenAI 合作的并且基于 GPT-4 模型&#xff08;存疑&#xff09;。 简单概况一下&#xff1a;代码真的不用我们自己写了&#xff0c;一行指令&#xff0c;它就能帮我们把代…

有了chatGPT搞IT的是否要下岗了!看chatGPT怎样写代码!

能给我写一个贪吃蛇游戏代码吗&#xff1f; 当然可以&#xff01;以下是一个简单的贪吃蛇游戏的 Python 代码示例&#xff1a; import pygame import random 游戏窗口大小 WINDOW_WIDTH 800 WINDOW_HEIGHT 600 蛇身和食物大小 CELL_SIZE 20 颜色定义 BLACK (0, 0, …

程序员圈“内卷”这么严重,如何才能更进一步,进入大厂

前言 有没有发现无论是在很多行业都会出现几百人争抢一个岗位的事情发生&#xff0c;公务员不说&#xff0c;像是中石化这些国企的岗位也是争的头破血流。 那it行业呢&#xff1f; 程序员不都是想着进大厂&#xff0c;无论是应届生还是已经工作了好多年的程序员。 一、为什…

自考学历,面试大厂(京东、美团、字节、阿里、腾讯、滴滴)被拒!努力找工作七个月,终于拿到offer,涨薪20%!

他鼓励大家&#xff1a;大环境不好&#xff0c;找工作的朋友一定要沉住气&#xff0c;多一些自我总结和耐心&#xff0c;好运一定会降临。 网友点赞&#xff1a;七个月心态都没崩&#xff0c;每天沉稳找工作&#xff0c;楼主棒棒的&#xff01; 有人对楼主的心态表示佩服&…