uni全栈开发
- 同步本地存储接口
- uni.Storage 模块
- 条件编译跨端兼容
- uniCloud uni-id uni-admin
- 事件触发机制
- 自定义H5模板
- 分包
- easycom
- uniIdRouter
- Uni-id
- 服务空间
- 云函数 cloudfunctions
- 云对象importObject
- JSON 格式的文档型数据库
- DB Schema 结构
- OpenDB 预制表单
- JQL 语法
- requireNativePlugin
- uni.promisify.adaptor.js
- subPackages
- 封装$myRequest方法并挂载到全局
- 抓包
- 反编译&调试小程序请求签名
- 夜神模拟器
- wxappUnpacker
- 转发 onShareAppMessage
- 页面组件
- 前端-制作自己的iconfont
- Vue的原型链
- 生命周期函数onLoad
- uni.chooseLocation
- getCurrentPages
- 美团外卖微信小程序开发
- uniapp-美团外卖微信小程序开发
- P1 成果展示
- P2外卖小程序后端,学习给小程序写http接口
- P3 主界面配置
- P4 首页组件拆分
- P13 外卖列表布局
- 请求商家外卖数据
- 父页面引入
- 并发请求
- index页商品列表 与 数据渲染
- 页面请求 后台数据 至前台
- 用户定位-精确推荐方案
- 商品搜索请求接口
- uniapp简介
- 完成安卓打包
- uniapp实战——完成小程序打包发布
- uniapp实战——利用uni-ui实现底部导航区域
- 渗透测试-微信小程序-公众号测试经验总结
- 微信公众号H5端
- 微信小程序——Flex布局
- 微信小程序——小程序UI框架首页
- 商城首页
- 自定义tabbar样式
- 微信小程序——拖拽定位
- 微信小程序——登陆界面与逻辑
- 微信小程序——开源-商城 首页学习分析
- 微信小程序——开源-知乎日报客户端源码学习
- 微信小程序——小程序/公众号/H5支付
- PHP微信小程序联调——用户信息授权
- 微信小程序——表白墙 前台 开发整理
- 微信小程序——常用组件
- scroll-view 组件 可滚动视图
- 微信小程序——同异步数据传输
- JAVA实战——微信小程序登录后台
- 微信小程序——ColorUI快速开发首页手记
- uni-app框架介绍
- 项目目录和开发规范
- globalStyle全局外观配置
- 创建新页面和页面的配置
- 配置基本的tabbar
- tabbar的其他属性配置
- condition启动模式配置
- text组件的基本使用
- view组件的基本使用
- button按钮组件的使用
- image组件的基本使用
- 基本的数据绑定
- v-bind和v-for的使用
- 注册事件和传递参数及获取到事件对象
- 生命周期函数的学习
- 下拉刷新的学习
- 上拉加载
- 发送get请求
- 数据缓存
- 图片的上传和预览
- 两种方式导航跳转和传参
- 组件的创建使用和组件的生命周期函数
- 组件之间的通讯方式
- uni-ui组件库的基本介绍和使用
- 项目功能介绍
- 创建项目和清理结构及配置基本外观
- 完成底部tabbar的配置
- 获取轮播图的数据
- 完成首页轮播图的渲染
- 实现导航的基本结构
- 完成推荐商品结构
- 完成推荐商品数据渲染
- 改造导航区域并跳转到商品列表页面
- 封装商品列表组件并使用
- 实现上拉加载更多和下拉刷新
- 完成联系我们页面的地图和拨打电话
- 实现社区图片左侧的结构和样式
- 实现左侧数据渲染和点击高亮
- 实现右侧数据的渲染
- 完成图片的预览功能
- 实现资讯列表的结构和数据的获取
- 实现news-item组件的封装
- 实现列表跳转详情并传递id
- 完成资讯详情页面
- 点击商品列表导航至商品详情页
- 实现商品详情轮播图
- 实现详情其他部分的结构
- 完成详情页面的数据渲染
- 完成h5打包
- 动态首页
- Tabbar底部导航栏
同步本地存储接口
uni.Storage 模块
setStorageSync
将数据以键值对(key-value)的形式同步存储到本地。
适用于需要立即确保数据持久化的场景。
核心特性:
同步执行:直接阻塞代码执行,直到存储操作完成(与异步的 uni.setStorage 相对)。
简单键值对:仅支持存储字符串、数字、布尔值等简单数据类型。
跨平台支持:在 H5、小程序、App 等多端均可使用。
注意事项:
存储空间限制:
小程序:通常限制为几MB(具体依平台而定)。
H5:依赖浏览器 localStorage,通常为 5MB。
App:无明确限制,但建议合理控制。
安全性:
避免存储敏感信息(如密码、令牌),因本地存储可能被恶意读取。
性能:
同步方法会阻塞线程,频繁调用可能影响性能。
对性能敏感场景建议使用异步方法 uni.setStorage。
对比异步方法:
方法 执行方式 返回值 适用场景
uni.setStorageSync 同步 无 需要立即确保数据持久化
uni.setStorage 异步 Promise 非关键数据存储
扩展场景:
读取数据:使用 uni.getStorageSync(key)。
删除数据:使用 uni.removeStorageSync(key)。
清空所有:使用 uni.clearStorageSync()。
如果需要存储复杂对象,建议先通过 JSON.stringify() 转换为字符串,读取时再用 JSON.parse() 解析。
条件编译跨端兼容
#ifdef
#ifndef
<!-- 微信小程序, QQ小程序, app, h5使用wxs -->
<!-- #ifdef MP-WEIXIN || MP-QQ || APP-PLUS || H5 -->
<!-- #endif -->
// #ifdef H5
BASE_URL = '/dpc'; //H5下将地址修改为/dpc
// #endif
VUE3
APP-PLUS:App端,包括iOS和Android。
H5:网页端,即在浏览器中运行的H5应用。
MP-WEIXIN:微信小程序端。
MP-ALIPAY:支付宝小程序端。
MP-BAIDU:百度小程序端。
MP-TOUTIAO:字节跳动(今日头条)小程序端。
MP-QQ:QQ小程序端。
原生渲染能力 APP-NVUE
内置了一个基于weex改进的原生渲染引擎,提供了原生渲染能力
它与vue在用法上稍有不同,如果不是使用uniapp开发app的话,就不要使用nvue,
uniCloud uni-id uni-admin
事件触发机制
在组件之间传递消息或事件
uni.$emit
全局事件总线(Event Bus)机制
用于实现非父子组件之间的通信
https://doc.dcloud.net.cn/uniCloud/cf-database.html#get-collection
https://doc.dcloud.net.cn/uniCloud/cloud-obj.html
uniCloud服务空间-阿里云版-包年包月
云函数:资源使用量:1000GB
调用次数:1.5万次
出网流量:1GB
容量:2GB
读操作数:0.05万RU/天写操作数:0.03万WU/天
容量:5GB下载操作次数:0.2万次上传操作次数:0.1万次CDN流量:1GB
容量:5GB
CDN流量:1GB
1个月
自定义H5模板
创建和使用自定义H5模板,以满足调整meta信息、SEO配置和引入第三方JS的需求。通过在根目录创建template.h5.html文件
分包
easycom
Uniapp框架提供的一种组件自动注册机制,它可以自动扫描指定目录下的所有组件,并注册到全局组件中。这意味着我们无需手动在components中引入组件,也无需在每个页面中单独引入组件,只需要在组件的目录下创建一个index.vue文件,就可以自动注册组件并在全局中使用了。
uniIdRouter
前端页面访问权限路由控制
自动处理页面访问权限,确保某些页面需要登录才能访问。
底层使用navigateTo、redirectTo、reLaunch、switchTab的拦截器进行页面跳转拦截,不会拦截进入首页,web端和app端会拦截原生tabbar点击,其他端不会拦截原生tabbar点击。
Uni-id
Invalid uni-id config file
{
"passwordSecret": [
{
"type": "hmac-sha256",
"version": 1
}
],
"passwordStrength": "medium",
"tokenSecret": "",
"requestAuthSecret": "",
"tokenExpiresIn": 7200,
"tokenExpiresThreshold": 3600,
"maxTokenLength": 10,
"passwordErrorLimit": 6,
"passwordErrorRetryTime": 3600,
"autoSetInviteCode": false,
"forceInviteCode": false,
"idCardCertifyLimit": 1,
"realNameCertifyLimit": 5,
"sensitiveInfoEncryptSecret": "",
"frvNeedAlivePhoto": false,
"userRegisterDefaultRole": [],
"app": {
"tokenExpiresIn": 2592000,
"tokenExpiresThreshold": 864000,
"oauth": {
"weixin": {
"appid": "",
"appsecret": ""
},
"qq": {
"appid": "",
"appsecret": ""
},
"apple": {
"bundleId": ""
},
"huawei": {
"clientId": "",
"clientSecret": ""
}
}
},
"web": {
"tokenExpiresIn": 7200,
"tokenExpiresThreshold": 3600,
"oauth": {
"weixin-h5": {
"appid": "",
"appsecret": ""
},
"weixin-web": {
"appid": "",
"appsecret": ""
}
}
},
"mp-weixin": {
"tokenExpiresIn": 259200,
"tokenExpiresThreshold": 86400,
"oauth": {
"weixin": {
"appid": "",
"appsecret": ""
}
}
},
"mp-qq": {
"tokenExpiresIn": 259200,
"tokenExpiresThreshold": 86400,
"oauth": {
"qq": {
"appid": "",
"appsecret": ""
}
}
},
"mp-alipay": {
"tokenExpiresIn": 259200,
"tokenExpiresThreshold": 86400,
"oauth": {
"alipay": {
"appid": "",
"privateKey": "",
"keyType": "PKCS8"
}
},
"mp-harmony": {
"huawei": {
"clientId": "",
"clientSecret": ""
}
}
},
"service": {
"sms": {
"name": "",
"codeExpiresIn": 180,
"scene": {
"bind-mobile-by-sms": {
"templateId": "",
"codeExpiresIn": 240
}
}
},
"univerify": {
"appid": ""
}
}
}
服务空间
项目关联空间
云函数 cloudfunctions
传统操作数据库
云对象importObject
uniCloud.importObject
引用云对象
JSON 格式的文档型数据库
nosql 非关系型数据库
关系型 JSON 文档型
数据库 database 数据库 database
表 table 集合 collection。但行业里也经常称之为“表”。无需特意区分
行 row 记录 record / doc
字段 column / field 字段 field
使用sql语法操作 使用MongoDB语法或jql语法操作
一个uniCloud服务空间,有且只有一个数据库;
一个数据库可以有多个表;
一个表可以有多个记录;
data:数据内容
index:索引
schema:数据表格式定义
一个记录可以有多个字段。
Collection unicloud数据的指定表集合
获取集合Collection示例如下
'use strict'
const db=unicloud.database();
exports.main=async (event,context)=>
let {num}= event;
return await db.collection("article" ).limit(num).get();
}
集合 Collection
通过 db.collection(name) 可以获取指定集合的引用,在集合上可以进行以下操作
类型 接口 说明
写 add 新增记录(触发请求)
计数 count 获取符合条件的记录条数
读 get 获取集合中的记录,如果有使用 where 语句定义查询条件,则会返回匹配结果集 (触发请求)
引用 doc 获取对该集合中指定 id 的记录的引用
查询条件 where 通过指定条件筛选出匹配的记录,可搭配查询指令(eq, gt, in, …)使用
- skip 跳过指定数量的文档,常用于分页,传入 offset
- orderBy 排序方式
- limit 返回的结果集(文档数量)的限制,有默认值和上限值
- field 指定需要返回的字段
getData(){
unicloud.callFunction({
name:"cloudFun1"}).then(res=>{
console.log(res);
})
DB Schema 结构
OpenDB 预制表单
JQL 语法
requireNativePlugin
https://uniapp.dcloud.net.cn/plugin/native-plugin.html#requirenativeplugin
uni.promisify.adaptor.js
用于将小程序原生 API 的回调风格转换为 Promise 风格。
微信小程序的原生API通常采用异步回调的方式来处理请求结果,而Promise是JavaScript中用于处理异步操作的一种更优雅和易于链式调用的方式。
这个文件提供了适配器函数,使得开发者能够以Promise的形式来调用微信小程序的API
subPackages
封装$myRequest方法并挂载到全局
抓包
https://mp.weixin.qq.com/s/00tbT1ENFLdhIWElreFxtg
浅谈微信小程序渗透
# 踩坑 | Fiddler雷电模拟器4.0无法抓包(超详细)
https://mp.weixin.qq.com/s/AYVRGWbOCWvQh6fyifqcQQ
反编译&调试小程序请求签名
https://mp.weixin.qq.com/s/KfhgP97alL_d8mmOY4z44w
使用安卓模拟器挂微信找小程序包脱出来解包的操作太繁琐
MAC PC端微信
使用现有工具(https://github.com/TinyNiko/mac_wxapkg_decrypt) 采用github提到的第一种解密方法
首先需要安装frida
更新pip
python3 -m pip install --upgrade pip
安装frida
pip3 install frida
安装frida-tools
pip3 install frida-tools
Windows PC端微信
也是已经有师傅写好解密小程序包的工具了(https://github.com/BlackTrace/pc_wxapkg_decrypt) 找到微信小程序包所在根路径
夜神模拟器
C:\Users\amingMM\Nox_share\ImageShare
低版本
Android 5 32位
4CPU 6G
wxappUnpacker
反编译
微信小程序开发者,对前端思路的学习。
《解密》与《逆向》
在/data/data/com.tencent.mm/MicroMsg/xxxxxxx(不同微信文件夹也不同)/appbrand/pkg/目录下
存放着刚才访问这个小程序的两个数据包,
“我-设置-切换账号”,点击“添加账号”,
会弹出“登录其他账号”和“注册一个新的账号”选项。进入“注册一个新的账号”,
选择“通过当前微信号辅助注册”,就可以开始安全验证了。
两个包分为子包和主包
压缩后通过模拟器的微信发送到物理机进行反编译
wxappUnpacker进行反编译
CMD进入wxappUnpacker的下载目录,安装依赖包
```
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
转发 onShareAppMessage
用户点击右上角转发
页面组件
通过 module.exports 将一个对象导出
前端-制作自己的iconfont
色号转换
https://www.bchrt.com/tools/color-convert/
https://www.iconfont.cn/
Vue的原型链
App.vue 中使用
Vue.prototype.$location
// 在 Vue 组件中访问全局变量
console.log(this.$location)
生命周期函数onLoad
页面加载时被调用
<script>
export default {
data(){
},
components: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
} ,
methods:{
}
}
</script>
uni.chooseLocation
getCurrentPages
getCurrentPages() 方法获取到当前页面栈的所有页面,
而 pages[pages.length - 2] 表示当前页面栈中的倒数第二个页面,也就是其上一个页面的页面对象。
通过这个方法,我们可以在当前页面中调用上一个页面的方法、获取其数据等操作。
美团外卖微信小程序开发
调用https接口
开发小程序
提高vue技术
前端技术
课程需要具备vue基础知识
uniapp-美团外卖微信小程序开发
P1 成果展示
nodejs 后台
P2外卖小程序后端,学习给小程序写http接口
P3 主界面配置
uniapp 小程序 vue
新建界面
添加配置
资源文件
底部导航栏
拾色器
P4 首页组件拆分
P13 外卖列表布局
筛选组件
- 发生事件穿透
商家 布局
- 引进子组件
import Take from './components/takeout.vue'
export default {
components:{
Take
},
<template>
<view>
<block v-for="(item,index) in shoperlist" :key="index">
<view class="content-view">
<view class="content_img">
<image :src="item.logo" mode="aspectFill"></image>
</view>
<view class="content_title">
<text class="content_shoper">{
{item.shoper}}</text>
<view class="content_result">
<text>月销售{
{1}}</text>
<text>距您约{
{item.duration}}分钟</text>
</view>
<view class="content_end">
<image src=""></image>
<text>{
{item.types}}</text>
</view>
</view>
</view>
</block>
</view>
</template>
测试数据
- 写死数据 数组对象
https://www.bilibili.com/video/BV1Zt4y117RR?p=13&vd_source=f21773b7086456ae21a58a6cc59023be
<script>
export default {
data() {
return {
shoperlist: [{
'logo': 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fqny.smzdm.com%2F202205%2F23%2F628b811626a976429.jpg_d250.jpg&refer=http%3A%2F%2Fqny.smzdm.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1668590466&t=06731bdad94505329d8a942c1e08e66b',
'shoper': '啦啦啦',
'duration': 30,
'types': '大傻逼'
} ]
}
},
}
</script>
创建样式
.content-view text{display: block;}
.content-view{display: flex;
justify-content: space-between;
height: 200upx !important;
overflow: hidden;
border-bottom: 1rpx solid #E4E8EB;
padding-bottom: 5upx;
margin: 30upx 0;
color: #898989;}
.content_img{
width: 350upx !important;
height: 200upx !important;
}
.content_img image{
width: 100%;
height: 100%;
border-radius: 10upx;
}
.content_title{
width: 100%;
padding-left: 10upx;
font-size: 24upx;
}
.content_shoper{
color: #333333;
height: 50upx;
font-size: 33upx;
font-weight: bold;
line-height: 50upx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
overflow: hidden;
}
.content_result{
display: flex;
justify-content: space-between;
height: 50upx;
line-height: 50upx;
}
.content_end{
display: flex;
align-items: center;
height: 50upx;
line-height: 50upx;
}
.content_end text {width: 130upx;}
.content_end image {width: 24upx; height: 24upx;
padding-right: 10upx;}
<style scoped>
@import '../../../common/css/take.css'
</style>
请求商家外卖数据
封装请求
父页面引入
Prop属性传递:
在父组件中通过给子组件的 prop 属性绑定一个值,来传递参数。
<template>
<child-component :msg="message"></child-component>
</template>
<template>
<div>{
{
msg }}</div>
</template>
<script>
export default {
props: {
msg: {
type: String,
default: ''
}
}
}
</script>
Slot分发传递:
通过父组件在自身的插槽中填充内容,子组件通过插槽将父组件的内容显示出来。
<template>
<child-component>
<p>{
{
message }}</p>
</child-component>
</template>
<template>
<div>
<slot></slot>
</div>
</template>
并发请求
同时并发请求 多个接口,同时得到 多个接口数据
object 对象
工作 android jsbridge H5(uniapp打包) Hyprid App解决跨域问题
开发中
- 如果 你用 Hbuilder 自带的 内置 浏览器 (自带 解决了 跨域问题 )
可以 正常 调试 、、、
- 但是 无法 从 android 那边 安卓webview 打开 调试
所以 还是 得 加 跨域 代理
常识性 跨域 原理 知识点
(需要软件开发 联系我哦)
一、为什么会出现跨域问题
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,
它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。
可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
什么是跨域
当一个 浏览器 请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
当前页面url 被请求页面url 是否跨域 原因
http://www.test.com/ http://www.test.com/index.html 否 同源(协议、域名、端口号相同)
http://www.test.com/ https://www.test.com/index.html 跨域 协议不同(http/https)
http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu)
http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog)
http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001)
官方定义:
OPTIONS方法是用于请求获得由Request-URI标识的资源在请求/响应的通信过程中可以使用的功能选项。
通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。
出于安全考虑,并不是所有域名都可以访问后端服务。
在正式跨域之前,浏览器会根据需要发起一次预检(也就是 OPTIONS 请求),
用来让服务端返回允许的方法(如get、post),
允许被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。
浏览器将 CORS 分为两类
简单请求 不会进行预检,对于简单请求,浏览器直接请求,会在请求头信息中,增加一个origin字段,
来说明本次请求来自哪个源(协议+域名+端口)
同时满足下列三大条件,就属于简单请求,否则属于非简单请求
1.请求方式只能是:GET、POST、HEAD
2.HTTP请求头限制这几种字段:
Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID
3.Content-type取:application/x-www-form-urlencoded、multipart/form-data、text/plain
- 所以 说一下 解决方案
第一种:在项目根目录下(即跟App.vue同级)建vue.config.js,这个文件会默认优先加载
这个 是 测试 时候 用的 仅供参考
格式
module.exports = {
devServer:{
port:'8080',
disableHostCheck:true,
proxy:{
'/dpc':{
target:'http://XXXXX:9088',
changeOrigin:true,
pathRewrite:{
'^/dpc': ''
}
}
}
}
}
第二种:在manifest.json的代码视图中 根节点中(即{}中),做如下声明
"h5": {
"devServer": {
"port": 8080, //浏览器运行端口
"disableHostCheck": true,
"proxy": {
"/dpc": {
"target": "XXXXXX:9088", //实际请求服务器地址
"changeOrigin": true,
"secure": true,
"pathRewrite": {
"^/dpc": ""
}
}
}
}
}
- 封装的 请求 示例
var BASE_URL = 'http:XXXXXX:9088'; //不是h5默认这个地址
//附上网络请求的封装
export default (options)=>{
uni.showLoading({
title:'加载中...'
})
return new Promise((resolve,reject) =>{
uni.request({
url:BASE_URL + options.url,
method:options.method || 'GET',
data:options.data || {
},
success(res) {
if(res){
resolve(res.data)
}
},
fail(err) {
reject(err)
},
complete() {
uni.hideLoading()
}
})
})
}
可以直接搬
- 如果你要配置要网站多个子目录需要配置一些参数
例如你的网站域名是https://testapi.kemiandan.com,然而你想配置在https://testapi.kemiandan.com/h5/h5目录下
找到manifest.json文件打开源码视图新增
"h5" : {
"router" : {
"mode" : "history",
"base" : "/h5/h5/" // 配置引用的正确的文件路径
},
"domain" : "https://testapi.kemiandan.com/h5/h5"
}
然后把打包后的文件放在可访问/h5/h5目录下
访问路径 https://testapi.kemiandan.com/h5/h5/即可访问
- 从中 想到 把 跨域 配置 去掉
安卓端 跟 浏览器端 差不多 就是 发个 OPTIONS 请求 跨域 验证 到 后端
- 然后 你就可以 用 你的 浏览器(安卓端) 去访问 它(请求 你的 源代码 浏览器 进行 解析)
包括 向 你的 服务接口 发请求 数据 回传 渲染到 页面
- 这是 用 浏览器 打开 (安卓同理 ) - 服务器端(接收请求 返回)
- 这样一个 跨域代理 就解决了
部署
-
devServe是开发时候用的,正式环境不走这里
如果 你 还用 devserve
你会发现 请求 就跑nginx 前端服务器 去了 你的 proxy 没起作用 -
所以 发布时候 就得 在 nginx 服务器 和 后端接口方面 入手
- 先 确保 打包后 的 h5 能正常访问 并 发请求 给 后端
供参考 这个 是 测试的 django 后端 接口 1474
android 的 webview 发送 校验options 到 后端
POST 请求 失败
- 剩下 的事 就 交给 后端 和 运维的 处理 吧
- 前端的 问题 结束
options在此问题中属于第二种,当涉及到跨域时,并且是post请求时,
本地服务器会先发送一个options请求到服务器,如果服务器认为options请求时无危险性且认可的,
那么在允许本地服务器发送post请求;
但是如果后端认为options请求是危险且不成功的那么会直接阻止本地服务器发送其他请求
- 叫 后端 大哥 拿 Authorization中的token
- 或者将所有options放行,此时便能通过post请求访问到数据
index页商品列表 与 数据渲染
页面请求 后台数据 至前台
后台地址
请求三个值
页面
识别id
token
Eg:示例返回结果
{
"code": 1,
"msg": "success",
"data": {
"items": {
"s10001": {
"id": "s10001",
"type": "search",
"params": {
"placeholder": "搜索商品"
},
"style": {
"textAlign": "center",
"searchStyle": "radius"
}
},
"n606196612728596": {
"id": "n606196612728596",
"type": "banner",
"style": {
"btnColor": "#ffffff",
"btnShape": "round"
},
"data": {
"n400199453786769": {
"imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521e41cf3986.jpg",
"imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521e41cf3986.jpg",
"linkUrl": "page/index/index"
},
"n837367626101537": {
"imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015204bd302747.jpg",
"imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015204bd302747.jpg",
"linkUrl": "page/index/index"
},
"n39296042711415": {
"dataId": "n39296042711415",
"imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521eec407132.jpg",
"imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521eec407132.jpg",
"linkUrl": "page/index/index"
},
"n253302235811058": {
"dataId": "n253302235811058",
"imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015214ae427082.jpg",
"imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/202012161015214ae427082.jpg",
"linkUrl": "page/index/index"
},
"n894849566788663": {
"dataId": "n894849566788663",
"imgUrl": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521f14513173.jpg",
"imgName": "http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201216101521f14513173.jpg",
"linkUrl": "page/index/index"
}
}
}
},
"newest": [
{
"goods_id": 3,
"goods_name": "外星人",
"category_id": 10003,
"spec_type": 10,
"deduct_stock_type": 20,
"content": "<p>1111</p>",
"goods_sort": 100,
"delivery_id": 10003,
"goods_status": {
"text": "上架",
"value": 10
},
"spec": [
{
"goods_spec_id": 5,
"goods_id": 3,
"goods_no": "20201226",
"goods_price": "111.00",
"line_price": "1111.00",
"stock_num": 11,
"goods_sales": 0,
"goods_weight": 111,
"spec_sku_id": ""
}
],
"category": {
"category_id": 10003,
"name": "电脑",
"parent_id": 0,
"image_id": 10014,
"sort": 1,
"create_time": "2020-12-26 13:47:14"
},
"image": [
{
"id": 12,
"goods_id": 3,
"image_id": 10016,
"file_path": "http://192.168.0.100/www.cnthink.net/shop/web/uploads/2020122613485531f529442.png",
"file_name": "2020122613485531f529442.png",
"file_url": ""
}
],
"goods_sales": 0
},
{
"goods_id": 2,
"goods_name": "外星人",
"category_id": 10003,
"spec_type": 10,
"deduct_stock_type": 20,
"content": "<p><img src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201226134850d97b07122.png\" _src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/20201226134850d97b07122.png\" style=\"\"/></p><p><img src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/2020122613485531f529442.png\" _src=\"http://127.0.0.1/www.cnthink.net/shop/web/uploads/2020122613485531f529442.png\" style=\"\"/></p><p><br/></p>",
"goods_sort": 1,
"delivery_id": 10003,
"goods_status": {
"text": "上架",
"value": 10
},
"spec": [
{
"goods_spec_id": 4,
"goods_id": 2,
"goods_no": "20201226",
"goods_price": "50000.00",
"line_price": "40000.00",
"stock_num": 10000,
"goods_sales": 0,
"goods_weight": 36,
"spec_sku_id": ""
}
],
"category": {
"category_id": 10003,
"name": "电脑",
"parent_id": 0,
"image_id"