mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git
synced 2025-12-19 17:05:55 +08:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4400e406f6 | ||
|
|
78f81a8407 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -11,4 +11,3 @@ node_modules/
|
|||||||
.hbuilderx/launch.json
|
.hbuilderx/launch.json
|
||||||
.project.config.json
|
.project.config.json
|
||||||
.project.private.config.json
|
.project.private.config.json
|
||||||
|
|
||||||
|
|||||||
9
App.vue
9
App.vue
@@ -64,12 +64,11 @@ import {
|
|||||||
methods: {
|
methods: {
|
||||||
...mapMutations(["login"]),
|
...mapMutations(["login"]),
|
||||||
},
|
},
|
||||||
onLaunch: function(val) {
|
onLaunch: function() {
|
||||||
if(val.query.inviter){
|
// #ifdef APP-PLUS
|
||||||
storage.setInviter(val.query.inviter)
|
this.checkArguments(); // 检测启动参数
|
||||||
}
|
APPUpdate();
|
||||||
|
|
||||||
// #ifdef APP-PLUS
|
|
||||||
// 重点是以下: 一定要监听后台恢复 !一定要
|
// 重点是以下: 一定要监听后台恢复 !一定要
|
||||||
plus.globalEvent.addEventListener("newintent", (e) => {
|
plus.globalEvent.addEventListener("newintent", (e) => {
|
||||||
this.checkArguments(); // 检测启动参数
|
this.checkArguments(); // 检测启动参数
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
## Lilishop B2B2C 商城系统
|
## Lilishop B2B2C 商城系统
|
||||||
|
|
||||||
### 近期常出现的问题解决方法
|
|
||||||
|
|
||||||
1. 高版本hbulider启动会报错建议先固定使用 4.45
|
|
||||||
2. 编译到微信小程序会报错 xxx defined 这里注意微信小程序基础调试库要使用 3.5.3
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 商城介绍
|
### 商城介绍
|
||||||
|
|
||||||
**官网**:https://pickmall.cn
|
**官网**:https://pickmall.cn
|
||||||
@@ -95,8 +88,6 @@ git clone https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git
|
|||||||
|
|
||||||
2.在`hbulider`中点击`运行`->`运行到小程序模拟器`->`微信开发者工具` 运行的时候需要配置小程序的`appid`,配置完成后即可运行
|
2.在`hbulider`中点击`运行`->`运行到小程序模拟器`->`微信开发者工具` 运行的时候需要配置小程序的`appid`,配置完成后即可运行
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 运行 APP
|
#### 运行 APP
|
||||||
|
|
||||||
##### 运行在安卓
|
##### 运行在安卓
|
||||||
|
|||||||
11
api/im.js
11
api/im.js
@@ -2,6 +2,17 @@ import { http,Method } from "@/utils/request.js";
|
|||||||
|
|
||||||
import api from "@/config/api.js";
|
import api from "@/config/api.js";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
export function getImSetting() {
|
||||||
|
return http.request({
|
||||||
|
url: `/other/setting/get/IM_SETTING`,
|
||||||
|
method: Method.GET,
|
||||||
|
needToken: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取聊天详情接口
|
* 获取聊天详情接口
|
||||||
* @param {*} talkId
|
* @param {*} talkId
|
||||||
|
|||||||
13
api/login.js
13
api/login.js
@@ -95,19 +95,6 @@ export function modifyPass(params) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 修改密码
|
|
||||||
* @param newPassword
|
|
||||||
* @param password
|
|
||||||
*/
|
|
||||||
export function resetPassword(params) {
|
|
||||||
return http.request({
|
|
||||||
url: `/passport/member/resetPassword`,
|
|
||||||
method: "POST",
|
|
||||||
params,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 刷新token
|
* 刷新token
|
||||||
*/
|
*/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -437,7 +437,7 @@ export default {
|
|||||||
box-shadow: 0 2px 6px 0 rgba(255, 65, 66, 0.2);
|
box-shadow: 0 2px 6px 0 rgba(255, 65, 66, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep.u-icon-plus,
|
/deep/.u-icon-plus,
|
||||||
.u-icon-minus,
|
.u-icon-minus,
|
||||||
.u-icon-disabled {
|
.u-icon-disabled {
|
||||||
height: 30rpx !important;
|
height: 30rpx !important;
|
||||||
@@ -457,7 +457,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .uni-scroll-view {
|
/deep/ .uni-scroll-view {
|
||||||
overflow: hidden !important;
|
overflow: hidden !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -546,7 +546,7 @@ export default {
|
|||||||
color: #999;
|
color: #999;
|
||||||
margin-left: 10rpx;
|
margin-left: 10rpx;
|
||||||
|
|
||||||
::v-deep span {
|
/deep/ span {
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -185,35 +185,25 @@ export default {
|
|||||||
this.tabbars.splice(index + 1, this.tabbars.length - index - 1);
|
this.tabbars.splice(index + 1, this.tabbars.length - index - 1);
|
||||||
}
|
}
|
||||||
if (this.tabbars.length < this.pickersize) {
|
if (this.tabbars.length < this.pickersize) {
|
||||||
uni.showLoading({
|
let data = await getRegionsById(item.id);
|
||||||
title: "加载中",
|
// 当前选项级为最后一级时回调,将选中的数据返回
|
||||||
mask:true
|
if (data.data.result.length == 0) {
|
||||||
});
|
this.$emit("funcValue", this.tabbars);
|
||||||
try {
|
this.hide();
|
||||||
let data = await getRegionsById(item.id);
|
} else {
|
||||||
uni.hideLoading();
|
// 将新的数据填充进下一级
|
||||||
// 当前选项级为最后一级时回调,将选中的数据返回
|
var current = {
|
||||||
if (data.data.result.length == 0) {
|
localName: "请选择",
|
||||||
this.$emit("funcValue", this.tabbars);
|
id: "",
|
||||||
this.hide();
|
children: data.data.result,
|
||||||
} else {
|
|
||||||
// 将新的数据填充进下一级
|
|
||||||
var current = {
|
|
||||||
localName: "请选择",
|
|
||||||
id: "",
|
|
||||||
children: data.data.result,
|
|
||||||
|
|
||||||
};
|
};
|
||||||
this.tabbars.push(current);
|
this.tabbars.push(current);
|
||||||
this.tabCurrentIndex++;
|
this.tabCurrentIndex++;
|
||||||
|
|
||||||
// 当前距离重新为最上面
|
|
||||||
this.$set(this,'scrollTop',0)
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
uni.hideLoading();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// 当前距离重新为最上面
|
||||||
|
this.$set(this,'scrollTop',0)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.$emit("funcValue", this.tabbars);
|
this.$emit("funcValue", this.tabbars);
|
||||||
this.hide();
|
this.hide();
|
||||||
|
|||||||
@@ -32,26 +32,7 @@
|
|||||||
<span>已售 {{ item.buyCount || "0" }}</span>
|
<span>已售 {{ item.buyCount || "0" }}</span>
|
||||||
<span>{{ item.commentNum || "0" }}条评论</span>
|
<span>{{ item.commentNum || "0" }}条评论</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
|
||||||
class="store-seller-name"
|
|
||||||
v-if="storeName"
|
|
||||||
@click="navigateToStoreDetailPage(item)"
|
|
||||||
>
|
|
||||||
<div class="text-hidden">
|
|
||||||
<u-tag
|
|
||||||
style="margin-right: 10rpx"
|
|
||||||
size="mini"
|
|
||||||
mode="dark"
|
|
||||||
v-if="item.selfOperated"
|
|
||||||
text="自营"
|
|
||||||
type="error"
|
|
||||||
/>
|
|
||||||
<span>{{ item.storeName || "暂无" }}</span>
|
|
||||||
</div>
|
|
||||||
<span>
|
|
||||||
<u-icon name="arrow-right"></u-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -268,7 +249,7 @@ export default {
|
|||||||
color: $main-color;
|
color: $main-color;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
::v-deep span:nth-of-type(1) {
|
/deep/ span:nth-of-type(1) {
|
||||||
font-size: 38rpx;
|
font-size: 38rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,16 +34,7 @@
|
|||||||
<span>已售 {{ item.buyCount || "0" }}</span>
|
<span>已售 {{ item.buyCount || "0" }}</span>
|
||||||
<span>{{ item.commentNum || "0" }}条评论</span>
|
<span>{{ item.commentNum || "0" }}条评论</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="store-seller-name" v-if="storeName" @click="navigateToStoreDetailPage(item)">
|
|
||||||
<div class="text-hidden">
|
|
||||||
<u-tag style="margin-right: 10rpx" size="mini" mode="dark" v-if="item.selfOperated"
|
|
||||||
text="自营" type="error" />
|
|
||||||
<span>{{ item.storeName || "暂无" }}</span>
|
|
||||||
</div>
|
|
||||||
<span>
|
|
||||||
<u-icon name="arrow-right"></u-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -79,18 +70,7 @@
|
|||||||
<span style="float: left; font-size: 22rpx">已售 {{ item.buyCount || '0' }}</span>
|
<span style="float: left; font-size: 22rpx">已售 {{ item.buyCount || '0' }}</span>
|
||||||
<span style="float: right; font-size: 22rpx">{{ item.commentNum || '0' }}条评论</span>
|
<span style="float: right; font-size: 22rpx">{{ item.commentNum || '0' }}条评论</span>
|
||||||
</div>
|
</div>
|
||||||
<div style="overflow: hidden" @click="navigateToStoreDetailPage(item)" class="count-config">
|
|
||||||
<div class="text-hidden" v-if="storeName">
|
|
||||||
<u-tag style="margin-right: 10rpx" size="mini" mode="dark" v-if="item.selfOperated"
|
|
||||||
text="自营" type="error" />
|
|
||||||
<span class="line1-store-name">{{ item.storeName }}</span>
|
|
||||||
<span class="to-store">进店<u-icon size="24" name="arrow-right" color="#666"></u-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<span>
|
|
||||||
<u-icon name="arrow-right" color="#c5c5c5"></u-icon>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -331,7 +311,7 @@
|
|||||||
color: $main-color;
|
color: $main-color;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
::v-deep span:nth-of-type(1) {
|
/deep/ span:nth-of-type(1) {
|
||||||
font-size: 38rpx;
|
font-size: 38rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,7 @@
|
|||||||
color: $main-color;
|
color: $main-color;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
::v-deep span:nth-of-type(1) {
|
/deep/ span:nth-of-type(1) {
|
||||||
font-size: 48rpx;
|
font-size: 48rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,225 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="index">
|
|
||||||
<view v-model="show" class="slot-content">
|
|
||||||
<image @click="downLoad()" class="img" :src="imgUrl" />
|
|
||||||
<div class="canvas-hide">
|
|
||||||
<!-- #ifdef MP-WEIXIN -->
|
|
||||||
<canvas id="canvas" type="2d" style="width: 560px; height: 800px" />
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- #ifndef MP-WEIXIN -->
|
|
||||||
<canvas canvas-id="canvas" id="canvas" style="width: 560px; height: 800px" />
|
|
||||||
<!-- #endif -->
|
|
||||||
</div>
|
|
||||||
</view>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
// 引入绘制插件
|
|
||||||
import DrawPoster from "@/js_sdk/u-draw-poster";
|
|
||||||
// 生成二维码
|
|
||||||
import uQRCode from '@/components/Sansnn-uQRCode/uqrcode.js';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
data: () => ({
|
|
||||||
imgUrl: "", //绘制出来的图片路径
|
|
||||||
show: false, //是否展示模态框
|
|
||||||
dp: {}, //绘制的dp对象,用于存储绘制等一些方法。
|
|
||||||
logo: require("@/pages/passport/static/logo-title.png"), // 本地logo地址
|
|
||||||
myFace: require("@/pages/passport/static/missing-face.png"), // 本地默认头像
|
|
||||||
sharingLink: '', // 二维码链接
|
|
||||||
}),
|
|
||||||
props: {
|
|
||||||
/**
|
|
||||||
* 父级传参的数据
|
|
||||||
*/
|
|
||||||
res: {
|
|
||||||
type: null,
|
|
||||||
default: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
onUnload() {},
|
|
||||||
onReady() {},
|
|
||||||
methods: {
|
|
||||||
/** 解决微信小程序中图片模糊问题 */
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
st2: (size) => size * 2,
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifndef MP-WEIXIN
|
|
||||||
st2: (size) => size,
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
/** 保存图片 */
|
|
||||||
downLoad() {
|
|
||||||
uni.saveImageToPhotosAlbum({
|
|
||||||
filePath: this.imgUrl,
|
|
||||||
success: function () {
|
|
||||||
uni.showToast({title: "保存成功!",icon: "none",});
|
|
||||||
},
|
|
||||||
fail: function () {
|
|
||||||
uni.showToast({title: "保存失败,请稍后重试!",icon: "none",});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
|
||||||
/** 创建canvas */
|
|
||||||
async init() {
|
|
||||||
this.show = true;
|
|
||||||
this.dp = await DrawPoster.build({
|
|
||||||
selector: "canvas",
|
|
||||||
componentThis: this,
|
|
||||||
loading: true,
|
|
||||||
debugging: true,
|
|
||||||
});
|
|
||||||
let dp = this.dp;
|
|
||||||
// #ifdef MP-WEIXIN
|
|
||||||
// 用于微信小程序中画布错乱问题
|
|
||||||
dp.canvas.width = this.st2(560);
|
|
||||||
dp.canvas.height = this.st2(800);
|
|
||||||
// #endif
|
|
||||||
this.showQRCode(dp);
|
|
||||||
},
|
|
||||||
/** 生成二维码 */
|
|
||||||
async showQRCode(dp){
|
|
||||||
await uQRCode.make({
|
|
||||||
canvasId: 'canvas', // canvas画布
|
|
||||||
componentInstance: this,
|
|
||||||
text: this.res.bottom.code, // 二维码内容
|
|
||||||
size: 130, // 二维码大小
|
|
||||||
margin: 5, // 二维码内边距
|
|
||||||
backgroundColor: '#ffffff', // ! 二维码背景颜色
|
|
||||||
foregroundColor: '#000000', // !二维码色块颜色
|
|
||||||
fileType: 'jpg',
|
|
||||||
errorCorrectLevel: 0, // <== 关键 容错率,M:0,L:1,H:2,Q:3,
|
|
||||||
// errorCorrectLevel: uQRCode.errorCorrectLevel.M, // <== 关键 容错率,M:0,L:1,H:2,Q:3,
|
|
||||||
success: res => {
|
|
||||||
this.sharingLink = res; // res => 图片路径
|
|
||||||
// 对画布进行绘制
|
|
||||||
this.draw(dp);
|
|
||||||
},
|
|
||||||
fail: res => {
|
|
||||||
// console.log('失败',res)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
async draw(dp) {
|
|
||||||
const { face, nickName, desc } = this.res.memberInfo;
|
|
||||||
const { width, height, background, title } = this.res.container;
|
|
||||||
const { code, img, price } = this.res.bottom;
|
|
||||||
|
|
||||||
/** 绘制背景 */
|
|
||||||
await dp.draw((ctx) => {
|
|
||||||
ctx.fillStyle = background;
|
|
||||||
ctx.fillRoundRect( this.st2(0), this.st2(0), this.st2(width), this.st2(height), this.st2(12));
|
|
||||||
ctx.clip();
|
|
||||||
});
|
|
||||||
/** 绘制圆角矩形 */
|
|
||||||
await dp.draw(async (ctx)=>{
|
|
||||||
// 设置矩形色彩
|
|
||||||
ctx.fillStyle = "#ffffff";
|
|
||||||
// 设置图形轮廓的颜色。默认情况下,线条和填充颜色都是黑色(CSS 颜色值 #000000)
|
|
||||||
ctx.strokeStyle = "#ffffff";
|
|
||||||
// 这个属性设置当前绘线的粗细。属性值必须为正数。描述线段宽度的数字。 0、 负数、 Infinity 和 NaN 会被忽略。默认值是1.0。
|
|
||||||
ctx.lineWidth = this.st2(1);
|
|
||||||
// 进行绘制
|
|
||||||
ctx.fillRoundRect(30, 150, 500, 620, 0);
|
|
||||||
// ctx.strokeRoundRect(30, 150, 500, 620, 0);
|
|
||||||
// ctx.strokeRect(30, 150, 500, 620, 0);
|
|
||||||
})
|
|
||||||
/** 绘制图片 */
|
|
||||||
dp.draw(async (ctx) => {
|
|
||||||
await Promise.all([
|
|
||||||
// 绘制头像face
|
|
||||||
ctx.drawImage(face?face:this.myFace, this.st2(30), this.st2(30), this.st2(90), this.st2(90)),
|
|
||||||
// 绘制Logo
|
|
||||||
// ctx.drawImage( this.logo, this.st2(175), this.st2(0), this.st2(256), this.st2(144)),
|
|
||||||
// 中间图片
|
|
||||||
ctx.drawImage(img, this.st2(60), this.st2(170), this.st2(440), this.st2(440)),
|
|
||||||
// 二维码
|
|
||||||
ctx.drawImage(this.sharingLink, this.st2(375), this.st2(625), this.st2(130), this.st2(130))
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
/** 绘制顶部文字(昵称 简述) */
|
|
||||||
await dp.draw((ctx) => {
|
|
||||||
ctx.fillStyle = "#666";
|
|
||||||
ctx.font = `${this.st2(24)}px PingFang SC`;
|
|
||||||
ctx.fillText(nickName, this.st2(150), this.st2(65));
|
|
||||||
ctx.fillStyle = "#666";
|
|
||||||
ctx.font = `${this.st2(24)}px PingFang SC`;
|
|
||||||
ctx.fillText(desc, this.st2(150), this.st2(105));
|
|
||||||
});
|
|
||||||
/** 绘制中间文字(商品名称 价格) */
|
|
||||||
await dp.draw((ctx) => {
|
|
||||||
ctx.fillStyle = "#333";
|
|
||||||
ctx.font = `bold ${this.st2(24)}px PingFang SC`;
|
|
||||||
ctx.textAlign = "left";
|
|
||||||
ctx.fillWarpText({
|
|
||||||
text: title,
|
|
||||||
lineHeight: this.st2(32),
|
|
||||||
maxWidth: this.st2(280),
|
|
||||||
x: this.st2(60),
|
|
||||||
y: this.st2(710),
|
|
||||||
layer: 2,
|
|
||||||
});
|
|
||||||
ctx.fillStyle = "#ff3c2a";
|
|
||||||
ctx.font = `${this.st2(38)}px PingFang SC`;
|
|
||||||
ctx.textAlign = "left";
|
|
||||||
ctx.fillText(price, this.st2(60), this.st2(665));
|
|
||||||
});
|
|
||||||
/** 绘制底部文字 */
|
|
||||||
// await dp.draw((ctx) => {
|
|
||||||
// ctx.fillStyle = "#666";
|
|
||||||
// ctx.font = `${this.st2(24)}px PingFang SC`;
|
|
||||||
// ctx.fillText("长按图片,识别二维码", this.st2(200), this.st2(866));
|
|
||||||
// ctx.fillStyle = "#666";
|
|
||||||
// ctx.font = `${this.st2(24)}px PingFang SC`;
|
|
||||||
// ctx.fillText("查看商品详情", this.st2(200), this.st2(900));
|
|
||||||
// });
|
|
||||||
|
|
||||||
// 绘制生成本地地址
|
|
||||||
this.imgUrl = await dp.createImagePath();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
async mounted() {
|
|
||||||
this.init();
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
page,
|
|
||||||
.index {
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
.canvas-hide {
|
|
||||||
/* 1 */
|
|
||||||
position: fixed;
|
|
||||||
right: 100vw;
|
|
||||||
bottom: 100vh;
|
|
||||||
/* 2 */
|
|
||||||
z-index: -9999;
|
|
||||||
/* 3 */
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
.index {
|
|
||||||
position: relative;
|
|
||||||
text-align: center;
|
|
||||||
background: rgba($color: grey, $alpha: 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
image {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
.img {
|
|
||||||
width: 560rpx;
|
|
||||||
height: 800rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.qrcode-content {
|
|
||||||
width: 100rpx;
|
|
||||||
height: 100rpx;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -164,7 +164,7 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
//border-bottom: 1px #f5f5f5 solid; //HM修改 去掉边框
|
//border-bottom: 1px #f5f5f5 solid; //HM修改 去掉边框
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
font-size: 24rpx;
|
font-size: $uni-font-size-base;
|
||||||
|
|
||||||
.left-box {
|
.left-box {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -204,9 +204,6 @@
|
|||||||
"permission" : {
|
"permission" : {
|
||||||
"scope.userLocation" : {
|
"scope.userLocation" : {
|
||||||
"desc" : "位置信息将用于高德地图的效果展示"
|
"desc" : "位置信息将用于高德地图的效果展示"
|
||||||
},
|
|
||||||
"scope.writePhotosAlbum" : {
|
|
||||||
"desc" : "将用于保存图片"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugins" : {},
|
"plugins" : {},
|
||||||
|
|||||||
14
pages.json
14
pages.json
@@ -312,18 +312,6 @@
|
|||||||
"navigationBarTitleText": "意见反馈"
|
"navigationBarTitleText": "意见反馈"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"path": "set/securityCenter/updatePwdTab",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTitleText": "修改密码"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "set/securityCenter/editLoginPassword",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTitleText": "修改密码"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"path": "set/securityCenter/securityCenter",
|
"path": "set/securityCenter/securityCenter",
|
||||||
"style": {
|
"style": {
|
||||||
@@ -411,7 +399,7 @@
|
|||||||
"pages": [{
|
"pages": [{
|
||||||
"path": "shopPage",
|
"path": "shopPage",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationBarTitleText": "",
|
"navigationBarTitleText": "店铺详情",
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
},{
|
},{
|
||||||
|
|||||||
@@ -447,7 +447,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-row {
|
/deep/ .u-row {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between !important;
|
justify-content: space-between !important;
|
||||||
|
|||||||
@@ -14,9 +14,6 @@
|
|||||||
<span v-if="isBuy &&!master.toBeGroupedNum >0">
|
<span v-if="isBuy &&!master.toBeGroupedNum >0">
|
||||||
已成功拼团
|
已成功拼团
|
||||||
</span>
|
</span>
|
||||||
<span v-if="!master.toBeGroupedNum >0">
|
|
||||||
拼团已结束
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div v-if="isMaster && !isOver">
|
<div v-if="isMaster && !isOver">
|
||||||
@@ -27,7 +24,7 @@
|
|||||||
去首页逛逛
|
去首页逛逛
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isMaster && !isOver && !isBuy && master.toBeGroupedNum">
|
<div v-if="!isMaster && !isOver && !isBuy">
|
||||||
<div class="share-user" @click="toBuy">
|
<div class="share-user" @click="toBuy">
|
||||||
参与拼团
|
参与拼团
|
||||||
</div>
|
</div>
|
||||||
@@ -48,7 +45,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 倒计时 -->
|
<!-- 倒计时 -->
|
||||||
<div class="count-down" v-if="!isOver && master.toBeGroupedNum">
|
<div class="count-down" v-if="!isOver">
|
||||||
<u-count-down bg-color="#ededed" :hide-zero-day="true" @end="isOver" :timestamp="timeStamp"></u-count-down>
|
<u-count-down bg-color="#ededed" :hide-zero-day="true" @end="isOver" :timestamp="timeStamp"></u-count-down>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.detailAddress {
|
.detailAddress {
|
||||||
::v-deep .u-form-item--left {
|
/deep/ .u-form-item--left {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
}
|
}
|
||||||
@@ -332,7 +332,7 @@ export default {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
padding-top: 3%;
|
padding-top: 3%;
|
||||||
|
|
||||||
::v-deep .u-form-item {
|
/deep/ .u-form-item {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
padding: 24rpx 30rpx;
|
padding: 24rpx 30rpx;
|
||||||
}
|
}
|
||||||
@@ -341,7 +341,7 @@ export default {
|
|||||||
background-color: $main-color;
|
background-color: $main-color;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep.u-checkbox {
|
/deep/.u-checkbox {
|
||||||
margin: 30rpx 30rpx 0 30rpx;
|
margin: 30rpx 30rpx 0 30rpx;
|
||||||
|
|
||||||
.u-label-class.u-checkbox__label {
|
.u-label-class.u-checkbox__label {
|
||||||
@@ -350,7 +350,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::v-deep .u-checkbox__label {
|
/deep/ .u-checkbox__label {
|
||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
::v-deep .u-input__input,
|
/deep/ .u-input__input,
|
||||||
.u-input {
|
.u-input {
|
||||||
font-size: 80rpx !important;
|
font-size: 80rpx !important;
|
||||||
height: 102rpx !important;
|
height: 102rpx !important;
|
||||||
}
|
}
|
||||||
::v-deep .u-input__input {
|
/deep/ .u-input__input {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
font-size: 80rpx;
|
font-size: 80rpx;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,6 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="log-item-view">
|
<view class="log-item-view">
|
||||||
<view>创建时间:{{ item.createTime }}</view>
|
<view>创建时间:{{ item.createTime }}</view>
|
||||||
<view>店铺:{{ item.storeName }}</view>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="log-item-footer">
|
<view class="log-item-footer">
|
||||||
<view>会员名称:{{ item.memberName }}</view>
|
<view>会员名称:{{ item.memberName }}</view>
|
||||||
|
|||||||
@@ -82,13 +82,13 @@ export default {
|
|||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
::v-deep .u-input__input,
|
/deep/ .u-input__input,
|
||||||
.u-input {
|
.u-input {
|
||||||
font-size: 80rpx !important;
|
font-size: 80rpx !important;
|
||||||
height: 102rpx !important;
|
height: 102rpx !important;
|
||||||
|
|
||||||
}
|
}
|
||||||
::v-deep .u-input__input{
|
/deep/ .u-input__input{
|
||||||
height: 100%;
|
height: 100%;
|
||||||
font-size: 80rpx;
|
font-size: 80rpx;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -158,36 +158,36 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- loading是显示 -->
|
||||||
|
<!-- <view v-show="msgLoad" class=" margin-left margin-top">
|
||||||
|
<view class="chat-img flex-row-center">
|
||||||
|
<image style="height: 75rpx;width: 75rpx;" src="../../static/image/robt.png" mode="aspectFit"></image>
|
||||||
|
</view>
|
||||||
|
<view class="flex" style="width: 500rpx;">
|
||||||
|
<view class="margin-left padding-chat flex-column-start"
|
||||||
|
style="border-radius: 35rpx;background-color: #f9f9f9;">
|
||||||
|
<view class="cuIcon-loading turn-load" style="font-size: 35rpx;color: #3e9982;">
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view> -->
|
||||||
<!-- 防止消息底部被遮 -->
|
<!-- 防止消息底部被遮 -->
|
||||||
<view style="height: 120rpx;">
|
<view style="height: 120rpx;">
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 底部导航栏 -->
|
<!-- 底部导航栏 -->
|
||||||
<view :style="{position: 'fixed', bottom:inputHeight+'px'}" class="flex-column-center bottom-dh" :animation="animationData">
|
<view :style="{position: 'fixed',bottom:inputHeight+'px'}" class="flex-column-center" :animation="animationData">
|
||||||
<view class="bottom-dh-char flex-row-around" style="font-size: 55rpx;">
|
<view class="bottom-dh-char flex-row-around" style="font-size: 55rpx;">
|
||||||
<!-- vue无法使用软键盘"发送" -->
|
<!-- vue无法使用软键盘"发送" -->
|
||||||
|
<input @focus="inputBindFocus" @blur="eventHandle" :adjust-position="false" v-model="msg" class="dh-input" type="text" style="background-color: #f0f0f0;" @confirm="sendMessage"
|
||||||
<!-- #ifndef MP-WEIXIN -->
|
confirm-type="send" placeholder="用一句简短的话描述您的问题" />
|
||||||
<div v-if="!isShow" @click="navigateToBottom" class="dh-input">
|
|
||||||
用一句简短的话描述您的问题
|
|
||||||
</div>
|
|
||||||
<input v-show="isShow" ref="inputRef" :focus="isShow" @focus="inputBindFocus" @blur="eventHandle" :adjust-position="false" v-model="msg" class="dh-input" type="text" style="background-color: #f0f0f0;" @confirm="sendMessage"
|
|
||||||
confirm-type="send" placeholder="用一句简短的话描述您的问题" />
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<!-- #ifdef MP-WEIXIN -->
|
|
||||||
<input ref="inputRef" @focus="inputBindFocus" @blur="eventHandle" :adjust-position="false" v-model="msg" class="dh-input" type="text" style="background-color: #f0f0f0;" @confirm="sendMessage"
|
|
||||||
confirm-type="send" placeholder="用一句简短的话描述您的问题" />
|
|
||||||
<!-- #endif -->
|
|
||||||
|
|
||||||
<view @click="sendMessage" class="cu-tag bg-main-color send round">
|
<view @click="sendMessage" class="cu-tag bg-main-color send round">
|
||||||
发送
|
发送
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- <text @click="ckAdd" class="cuIcon-roundaddfill text-brown"></text> -->
|
<!-- <text @click="ckAdd" class="cuIcon-roundaddfill text-brown"></text> -->
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<div id="bottom"></div>
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -233,7 +233,26 @@ export default {
|
|||||||
if (this.resolve.goodsid) {
|
if (this.resolve.goodsid) {
|
||||||
this.commodityDetails()
|
this.commodityDetails()
|
||||||
}
|
}
|
||||||
|
// 如果需要缓存消息缓存msgList即可
|
||||||
|
// 监听键盘拉起
|
||||||
|
// 因为无法控制键盘拉起的速度,所以这里尽量以慢速处理
|
||||||
|
uni.onKeyboardHeightChange(res => {
|
||||||
|
const query = uni.createSelectorQuery()
|
||||||
|
query.select('#msgList').boundingClientRect(data => {
|
||||||
|
// 若消息体没有超过2倍的键盘则向下移动差值,防止遮住消息体
|
||||||
|
var up = res.height * 2 - data.height - l * 110
|
||||||
|
if (up > 0) {
|
||||||
|
// 动态改变空盒子高度
|
||||||
|
this.messageBoxMove(up, 300)
|
||||||
|
// 记录改变的值,若不收回键盘且发送了消息用来防止消息过多被遮盖
|
||||||
|
mgUpHeight = up
|
||||||
|
}
|
||||||
|
// 收回
|
||||||
|
if (res.height == 0) {
|
||||||
|
this.messageBoxMove(0, 0)
|
||||||
|
}
|
||||||
|
}).exec();
|
||||||
|
})
|
||||||
var query = uni.getSystemInfoSync()
|
var query = uni.getSystemInfoSync()
|
||||||
|
|
||||||
l = query.screenWidth / 750
|
l = query.screenWidth / 750
|
||||||
@@ -251,12 +270,8 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// this.ws.connect();
|
// this.ws.connect();
|
||||||
this.socket();
|
this.sokcet();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 页面隐藏
|
// 页面隐藏
|
||||||
onHide () {
|
onHide () {
|
||||||
uni.closeSocket();
|
uni.closeSocket();
|
||||||
@@ -306,65 +321,30 @@ export default {
|
|||||||
goodListData: {},
|
goodListData: {},
|
||||||
count: 0, //判断socket断开连接请求次数
|
count: 0, //判断socket断开连接请求次数
|
||||||
inputHeight:0,
|
inputHeight:0,
|
||||||
isShow:false,
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onPageScroll (e) {
|
// watch: {
|
||||||
|
// 'ws.callBackMapping': {
|
||||||
// #ifdef APP-PLUS
|
// handler: function (val) {
|
||||||
uni.hideKeyboard()
|
// val = JSON.parse(val)
|
||||||
this.isShow = false
|
// if (val.messageResultType == 'MESSAGE') {
|
||||||
// #endif
|
// this.msgList.push(val.result)
|
||||||
},
|
// }
|
||||||
|
// this.newMessageNum++;
|
||||||
|
// //接收到消息后发送已读
|
||||||
|
// let msg = val
|
||||||
|
// msg.operation_type = 'READ'
|
||||||
|
// this.ws.send(JSON.stringify(msg))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
methods: {
|
methods: {
|
||||||
navigateToBottom(){
|
|
||||||
// #ifdef H5
|
|
||||||
this.isShow = true
|
|
||||||
this.$refs.inputRef.focus()
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifdef APP-PLUS
|
|
||||||
this.$nextTick(() => {
|
|
||||||
uni.pageScrollTo({
|
|
||||||
scrollTop: 5000000,
|
|
||||||
duration: 50,
|
|
||||||
success: () => {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.isShow = true
|
|
||||||
}, 200);
|
|
||||||
;
|
|
||||||
},
|
|
||||||
fail: () => { },
|
|
||||||
complete: () => {}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
eventHandle(){
|
eventHandle(){
|
||||||
|
|
||||||
this.inputHeight = 0
|
this.inputHeight = 0
|
||||||
this.isShow = false
|
|
||||||
},
|
},
|
||||||
inputBindFocus(e){
|
inputBindFocus(e){
|
||||||
if (e.detail.height) {
|
if (e.detail.height) {
|
||||||
|
this.inputHeight = e.detail.height //这个高度就是软键盘的高度
|
||||||
|
|
||||||
// #ifdef APP-PLUS
|
|
||||||
// 判断是否是ios
|
|
||||||
if (uni.getSystemInfoSync().platform == 'ios') {
|
|
||||||
this.inputHeight = e.detail.height - 40 //这个高度就是软键盘的高度
|
|
||||||
}else{
|
|
||||||
this.inputHeight = e.detail.height
|
|
||||||
}
|
|
||||||
// #endif
|
|
||||||
|
|
||||||
// #ifndef APP-PLUS
|
|
||||||
this.inputHeight = e.detail.height //这个高度就是软键盘的高度
|
|
||||||
// #endif
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sendMessage () {
|
sendMessage () {
|
||||||
@@ -424,7 +404,7 @@ export default {
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
socket () {
|
sokcet () {
|
||||||
var _this = this;
|
var _this = this;
|
||||||
uni.closeSocket();
|
uni.closeSocket();
|
||||||
this.socketOpen = false;
|
this.socketOpen = false;
|
||||||
@@ -475,7 +455,7 @@ export default {
|
|||||||
// 监听是否断线,断线进行重新连接
|
// 监听是否断线,断线进行重新连接
|
||||||
uni.onSocketClose((res) => {
|
uni.onSocketClose((res) => {
|
||||||
if (res.code != null && res.code != 1000) {
|
if (res.code != null && res.code != 1000) {
|
||||||
this.socket()
|
this.sokcet()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -845,7 +825,6 @@ export default {
|
|||||||
margin-left: 10rpx;
|
margin-left: 10rpx;
|
||||||
}
|
}
|
||||||
.dh-input {
|
.dh-input {
|
||||||
line-height: 65rpx;
|
|
||||||
width: 500rpx;
|
width: 500rpx;
|
||||||
height: 65rpx;
|
height: 65rpx;
|
||||||
border-radius: 30rpx;
|
border-radius: 30rpx;
|
||||||
@@ -892,19 +871,6 @@ uni-page-head {
|
|||||||
right: 0;
|
right: 0;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
}
|
}
|
||||||
.bottom-dh{
|
|
||||||
position: fixed; // input 所在盒子设置绝对定位
|
|
||||||
flex-shrink: 0;
|
|
||||||
width: 100%;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0; // 默认 0
|
|
||||||
z-index: 199;
|
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
|
||||||
background: #FFFFFF;
|
|
||||||
box-sizing: border-box;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@
|
|||||||
background: #f9f9f9;
|
background: #f9f9f9;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-col-2 {
|
/deep/ .u-col-2 {
|
||||||
height: 60px;
|
height: 60px;
|
||||||
line-height: 60px;
|
line-height: 60px;
|
||||||
text-align: center !important;
|
text-align: center !important;
|
||||||
|
|||||||
@@ -27,36 +27,7 @@
|
|||||||
|
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 显示收藏的店铺栏 -->
|
|
||||||
<view v-else class="tab-content">
|
|
||||||
<scroll-view class="list-scroll-content" scroll-y>
|
|
||||||
<!-- 空白页 -->
|
|
||||||
<u-empty style="margin-top: 40rpx" text="暂无收藏店铺数据" mode="favor" v-if="storeEmpty"></u-empty>
|
|
||||||
<!-- 店铺展示数据 -->
|
|
||||||
<u-swipe-action @open="openLeftChange(item, 'store')" :show="item.selected" btn-width="180"
|
|
||||||
:options="LeftOptions" v-else v-for="(item, index) in storeList" :key="index"
|
|
||||||
@click="clickStoreSwiperAction(item)">
|
|
||||||
<view class="store" @click="goStoreMainPage(item.id)">
|
|
||||||
<view class="intro">
|
|
||||||
<view class="store-logo">
|
|
||||||
<u-image width="102rpx" height="102rpx" :src="item.storeLogo" :alt="item.storeName"
|
|
||||||
mode="aspectFit">
|
|
||||||
<u-loading slot="loading"></u-loading>
|
|
||||||
</u-image>
|
|
||||||
</view>
|
|
||||||
<view class="store-name">
|
|
||||||
<view>{{ item.storeName }}</view>
|
|
||||||
<u-tag size="mini" type="error" :color="$mainColor" v-if="item.selfOperated"
|
|
||||||
text="自营" mode="plain" shape="circle" />
|
|
||||||
</view>
|
|
||||||
<view class="store-collect">
|
|
||||||
<view>进店逛逛</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</u-swipe-action>
|
|
||||||
</scroll-view>
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -90,14 +61,7 @@
|
|||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "店铺(0)",
|
|
||||||
|
|
||||||
params: {
|
|
||||||
pageNumber: 1,
|
|
||||||
pageSize: 10,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
|
|
||||||
goodsEmpty: false, //商品数据是否为空
|
goodsEmpty: false, //商品数据是否为空
|
||||||
@@ -300,7 +264,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-swipe-content {
|
/deep/ .u-swipe-content {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
<u-empty text="暂无历史记录" style="margin-top:200rpx;" mode="history" v-if="whetherEmpty"></u-empty>
|
<u-empty text="暂无历史记录" style="margin-top:200rpx;" mode="history" v-if="whetherEmpty"></u-empty>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<view v-for="(item, index) in trackList" :key="index">
|
<view v-for="(item, index) in trackList" :key="index">
|
||||||
<view class="myTracks-title" @click="navigateToStore(item)">{{item.storeName}}</view>
|
|
||||||
<view class="myTracks-items">
|
<view class="myTracks-items">
|
||||||
|
|
||||||
<u-swipe-action style="width: 100%;" :show="item.show" :index="index" :key="item.id"
|
<u-swipe-action style="width: 100%;" :show="item.show" :index="index" :key="item.id"
|
||||||
|
|||||||
@@ -151,10 +151,10 @@ export default {
|
|||||||
border-radius: 0 0 20rpx 20rpx;
|
border-radius: 0 0 20rpx 20rpx;
|
||||||
margin: 0 20rpx;
|
margin: 0 20rpx;
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
::v-deep .u-col {
|
/deep/ .u-col {
|
||||||
text-align: center !important;
|
text-align: center !important;
|
||||||
}
|
}
|
||||||
::v-deep .u-col:first-child {
|
/deep/ .u-col:first-child {
|
||||||
border-right: 1px solid $border-color-light;
|
border-right: 1px solid $border-color-light;
|
||||||
}
|
}
|
||||||
.pcolor {
|
.pcolor {
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ export default {
|
|||||||
padding: 32rpx;
|
padding: 32rpx;
|
||||||
margin-bottom: 40rpx;
|
margin-bottom: 40rpx;
|
||||||
}
|
}
|
||||||
::v-deep .u-input__textarea {
|
/deep/ .u-input__textarea {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
}
|
}
|
||||||
.feedBack-box:nth-of-type(1) {
|
.feedBack-box:nth-of-type(1) {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
{{form.mobile}}
|
{{form.mobile}}
|
||||||
</view>
|
</view>
|
||||||
<view v-else>
|
<view v-else>
|
||||||
<view class="submit" style="text-align: left;" @click="navigateTo(form.username)">绑定手机号码</view>
|
<view class="submit" @click="navigateTo(form.username)">绑定手机号码</view>
|
||||||
</view>
|
</view>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
|
|
||||||
@@ -59,8 +59,8 @@ export default {
|
|||||||
region: storage.getUserInfo().region || [], //地址
|
region: storage.getUserInfo().region || [], //地址
|
||||||
sex: storage.getUserInfo().sex, //性别
|
sex: storage.getUserInfo().sex, //性别
|
||||||
___path: storage.getUserInfo().region,
|
___path: storage.getUserInfo().region,
|
||||||
mobile: storage.getUserInfo().mobile,
|
mobile: storage.getUserInfo().mobile,
|
||||||
username: storage.getUserInfo().username,
|
username: storage.getUserInfo().username,
|
||||||
},
|
},
|
||||||
birthday: storage.getUserInfo().birthday || "", //生日
|
birthday: storage.getUserInfo().birthday || "", //生日
|
||||||
photo: [
|
photo: [
|
||||||
@@ -183,24 +183,6 @@ export default {
|
|||||||
* 加载数据
|
* 加载数据
|
||||||
*/
|
*/
|
||||||
onLoad() {},
|
onLoad() {},
|
||||||
|
|
||||||
/**
|
|
||||||
* 页面显示时执行
|
|
||||||
*/
|
|
||||||
onShow() {
|
|
||||||
// 从缓存中重新获取用户信息
|
|
||||||
const userInfo = storage.getUserInfo();
|
|
||||||
// 更新表单数据
|
|
||||||
this.form.nickName = userInfo.nickName || "";
|
|
||||||
this.form.birthday = userInfo.birthday || "";
|
|
||||||
this.form.face = userInfo.face || "/static/missing-face.png";
|
|
||||||
this.form.region = userInfo.region || [];
|
|
||||||
this.form.sex = userInfo.sex;
|
|
||||||
this.form.___path = userInfo.region;
|
|
||||||
this.form.mobile = userInfo.mobile;
|
|
||||||
this.form.username = userInfo.username;
|
|
||||||
this.birthday = userInfo.birthday || "";
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
@@ -219,7 +201,6 @@ page{
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
color: $main-color;
|
color: $main-color;
|
||||||
border-radius: 100px;
|
border-radius: 100px;
|
||||||
|
|
||||||
}
|
}
|
||||||
.head {
|
.head {
|
||||||
height: 260rpx;
|
height: 260rpx;
|
||||||
@@ -236,7 +217,7 @@ page{
|
|||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
::v-deep .u-form {
|
/deep/ .u-form {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin-top: 30rpx;
|
margin-top: 30rpx;
|
||||||
|
|||||||
@@ -30,15 +30,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {
|
import {
|
||||||
sendMobile,
|
sendMobile,
|
||||||
bindMobile
|
bindMobile
|
||||||
} from "@/api/login";
|
} from "@/api/login";
|
||||||
import { getUserInfo } from "@/api/members.js";
|
|
||||||
import storage from "@/utils/storage.js";
|
|
||||||
|
|
||||||
import myVerification from "@/components/verification/verification.vue"; //验证
|
import myVerification from "@/components/verification/verification.vue"; //验证
|
||||||
import uuid from "@/utils/uuid.modified.js";
|
import uuid from "@/utils/uuid.modified.js";
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
myVerification,
|
myVerification,
|
||||||
@@ -125,24 +123,17 @@ import uuid from "@/utils/uuid.modified.js";
|
|||||||
bindMobile(this.codeForm).then((res) => {
|
bindMobile(this.codeForm).then((res) => {
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
this.validateFlage = !this.validateFlage;
|
this.validateFlage = !this.validateFlage;
|
||||||
// 获取最新的用户信息并更新缓存
|
// 登录成功
|
||||||
getUserInfo().then(userRes => {
|
uni.showToast({
|
||||||
if (userRes.data.success) {
|
title: "绑定成功!",
|
||||||
storage.setUserInfo(userRes.data.result);
|
duration: 2000,
|
||||||
}
|
icon: "none",
|
||||||
// 显示成功提示
|
|
||||||
uni.showToast({
|
|
||||||
title: "绑定成功!",
|
|
||||||
duration: 2000,
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
// 返回上一页
|
|
||||||
setTimeout(() => {
|
|
||||||
uni.navigateBack({
|
|
||||||
delta: 1,
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
});
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
uni.navigateBack({
|
||||||
|
delta: 1,
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -187,12 +178,12 @@ import uuid from "@/utils/uuid.modified.js";
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import url("@/pages/passport/login.scss");
|
@import url("@/pages/passport/login.scss");
|
||||||
|
|
||||||
::v-deep .u-form-item {
|
/deep/ .u-form-item {
|
||||||
margin: 40rpx 0;
|
margin: 40rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sendCode {
|
.sendCode {
|
||||||
::v-deep .u-form-item--right__content__slot {
|
/deep/ .u-form-item--right__content__slot {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,160 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="box">
|
|
||||||
<view class="box-tips">
|
|
||||||
<h2 class='h2'>
|
|
||||||
{{verificationTitle.title}}
|
|
||||||
</h2>
|
|
||||||
<view class="verification">{{verificationTitle.desc}}</view>
|
|
||||||
</view>
|
|
||||||
<view class="form">
|
|
||||||
<u-form :model="codeForm" ref="validateCodeForm">
|
|
||||||
<u-form-item label-width="120" label="旧密码">
|
|
||||||
<u-input type="password" v-model="oldPassword" placeholder="请输入您的旧密码" />
|
|
||||||
</u-form-item>
|
|
||||||
|
|
||||||
<u-form-item label-width="120" label="密码">
|
|
||||||
<u-input type="password" v-model="password" placeholder="请输入您的密码" />
|
|
||||||
</u-form-item>
|
|
||||||
|
|
||||||
<u-form-item label-width="120" label="确认密码">
|
|
||||||
<u-input type="password" v-model="newPassword" placeholder="请再次输入您的密码" />
|
|
||||||
</u-form-item>
|
|
||||||
|
|
||||||
<view class="submit" @click="updatePassword">修改密码</view>
|
|
||||||
</u-form>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import {
|
|
||||||
resetByMobile,
|
|
||||||
modifyPass
|
|
||||||
} from "@/api/login";
|
|
||||||
|
|
||||||
import {
|
|
||||||
md5
|
|
||||||
} from "@/utils/md5.js"; // md5
|
|
||||||
import myVerification from "@/components/verification/verification.vue"; //验证
|
|
||||||
import uuid from "@/utils/uuid.modified.js";
|
|
||||||
export default {
|
|
||||||
components: {
|
|
||||||
myVerification,
|
|
||||||
},
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
uuid,
|
|
||||||
validateFlage: false, //是否进行了手机号验证
|
|
||||||
verificationTitle: {
|
|
||||||
title: "修改密码",
|
|
||||||
desc: "请验证并输入密码",
|
|
||||||
},
|
|
||||||
step: 0, //当前验证步骤
|
|
||||||
flage: false, //是否验证码验证
|
|
||||||
|
|
||||||
codeForm: {
|
|
||||||
mobile: "", //手机号
|
|
||||||
code: "", //验证码
|
|
||||||
},
|
|
||||||
newPassword: "", //新密码
|
|
||||||
password: "", //密码
|
|
||||||
oldPassword: '', //旧密码
|
|
||||||
tips: "", //提示
|
|
||||||
seconds: 69, // 60s等待时间
|
|
||||||
|
|
||||||
// 验证码登录校验
|
|
||||||
codeRules: {
|
|
||||||
mobile: [{
|
|
||||||
validator: (rule, value, callback) => {
|
|
||||||
return this.$u.test.mobile(value);
|
|
||||||
},
|
|
||||||
message: "手机号码不正确",
|
|
||||||
trigger: ["blur"],
|
|
||||||
}, ],
|
|
||||||
code: [{
|
|
||||||
min: 4,
|
|
||||||
max: 6,
|
|
||||||
required: true,
|
|
||||||
message: "请输入验证码",
|
|
||||||
trigger: ["blur"],
|
|
||||||
}, ],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
},
|
|
||||||
onReady() {
|
|
||||||
// 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
|
|
||||||
this.$refs.validateCodeForm.setRules(this.codeRules);
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
// 修改密码
|
|
||||||
updatePassword() {
|
|
||||||
if(this.password !== this.newPassword){
|
|
||||||
uni.showToast({
|
|
||||||
title: "两次输入密码不一致!",
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
modifyPass({
|
|
||||||
password: md5(this.oldPassword),
|
|
||||||
newPassword: md5(this.newPassword),
|
|
||||||
}).then((res) => {
|
|
||||||
if (res.data.success) {
|
|
||||||
uni.showToast({
|
|
||||||
title: "修改成功!",
|
|
||||||
duration: 2000,
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
setTimeout(() => {
|
|
||||||
uni.navigateBack({
|
|
||||||
delta: 1,
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
@import url("@/pages/passport/login.scss");
|
|
||||||
|
|
||||||
::v-deep .u-form-item {
|
|
||||||
margin: 40rpx 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sendCode {
|
|
||||||
::v-deep .u-form-item--right__content__slot {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.h2 {
|
|
||||||
font-size: 40rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
page {
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box {
|
|
||||||
padding: 80rpx 0;
|
|
||||||
border-radius: 20rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.submit {
|
|
||||||
background: $light-color;
|
|
||||||
}
|
|
||||||
|
|
||||||
.box-tips {
|
|
||||||
margin: 0 72rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
.verification {
|
|
||||||
font-size: 24rpx;
|
|
||||||
color: #999;
|
|
||||||
margin-top: 10rpx;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -25,12 +25,14 @@
|
|||||||
business="FIND_USER" />
|
business="FIND_USER" />
|
||||||
</view>
|
</view>
|
||||||
<view v-if="validateFlage">
|
<view v-if="validateFlage">
|
||||||
<u-form-item label-width="120" label="密码">
|
<u-form-item label-width="120" label="旧密码">
|
||||||
<u-input type="password" v-model="password" placeholder="请输入您的密码" />
|
<u-input type="password" v-model="password" placeholder="请输入您的旧密码" />
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
|
|
||||||
<u-form-item label-width="120" label="确认密码">
|
<u-form-item label-width="120" label="新密码">
|
||||||
<u-input type="password" v-model="newPassword" placeholder="请再次输入您的密码" />
|
|
||||||
|
<u-input type="password" v-model="newPassword" placeholder="请输入您的新密码" />
|
||||||
|
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
|
|
||||||
<view class="submit" @click="updatePassword">修改密码</view>
|
<view class="submit" @click="updatePassword">修改密码</view>
|
||||||
@@ -44,7 +46,7 @@
|
|||||||
import {
|
import {
|
||||||
sendMobile,
|
sendMobile,
|
||||||
resetByMobile,
|
resetByMobile,
|
||||||
resetPassword
|
modifyPass
|
||||||
} from "@/api/login";
|
} from "@/api/login";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -137,14 +139,8 @@
|
|||||||
methods: {
|
methods: {
|
||||||
// 修改密码
|
// 修改密码
|
||||||
updatePassword() {
|
updatePassword() {
|
||||||
if(this.password !== this.newPassword){
|
modifyPass({
|
||||||
uni.showToast({
|
newPassword: md5(this.newPassword),
|
||||||
title: "两次输入密码不一致!",
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
resetPassword({
|
|
||||||
password: md5(this.password),
|
password: md5(this.password),
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
@@ -241,12 +237,12 @@
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import url("@/pages/passport/login.scss");
|
@import url("@/pages/passport/login.scss");
|
||||||
|
|
||||||
::v-deep .u-form-item {
|
/deep/ .u-form-item {
|
||||||
margin: 40rpx 0;
|
margin: 40rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sendCode {
|
.sendCode {
|
||||||
::v-deep .u-form-item--right__content__slot {
|
/deep/ .u-form-item--right__content__slot {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="securityCenter">
|
<view class="securityCenter">
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item title="修改密码" @click="navigateTo('/pages/mine/set/securityCenter/updatePwdTab')"></u-cell-item>
|
<u-cell-item title="修改密码" @click="navigateTo('/pages/mine/set/securityCenter/editPassword')"></u-cell-item>
|
||||||
<u-cell-item title="注销账户" @click="zhuxiao"></u-cell-item>
|
<u-cell-item title="注销账户" @click="zhuxiao"></u-cell-item>
|
||||||
</u-cell-group>
|
</u-cell-group>
|
||||||
</view>
|
</view>
|
||||||
|
|||||||
@@ -1,34 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="securityCenter">
|
|
||||||
<u-cell-group>
|
|
||||||
<u-cell-item title="验证密码" @click="navigateTo('/pages/mine/set/securityCenter/editLoginPassword')"></u-cell-item>
|
|
||||||
<u-cell-item title="验证手机号" @click="navigateTo('/pages/mine/set/securityCenter/editPassword')"></u-cell-item>
|
|
||||||
</u-cell-group>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
mobile: "", //存储手机号
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
navigateTo(url) {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: url,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.securityCenter {
|
|
||||||
.u-cell {
|
|
||||||
line-height: normal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -202,11 +202,11 @@ export default {
|
|||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-cell__value {
|
/deep/ .u-cell__value {
|
||||||
color: #cccccc !important;
|
color: #cccccc !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-cell__right-icon-wrap {
|
/deep/ .u-cell__right-icon-wrap {
|
||||||
color: #cccccc !important;
|
color: #cccccc !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ page {
|
|||||||
line-height: 70rpx;
|
line-height: 70rpx;
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
}
|
}
|
||||||
::v-deep .uni-input-input {
|
/deep/ .uni-input-input {
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -441,7 +441,7 @@ view {
|
|||||||
padding-top: 300rpx;
|
padding-top: 300rpx;
|
||||||
color: #999999;
|
color: #999999;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
::v-deep .u-image {
|
/deep/ .u-image {
|
||||||
width: 346rpx;
|
width: 346rpx;
|
||||||
height: 304rpx;
|
height: 304rpx;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,6 @@
|
|||||||
>
|
>
|
||||||
<!-- 店铺名称 -->
|
<!-- 店铺名称 -->
|
||||||
<view class="seller-info u-flex u-row-between" v-if="current == 0">
|
<view class="seller-info u-flex u-row-between" v-if="current == 0">
|
||||||
<view class="seller-name">
|
|
||||||
<view class="name">{{ order.storeName }}</view>
|
|
||||||
</view>
|
|
||||||
<view class="order-sn">订单编号:{{ order.sn }}</view>
|
<view class="order-sn">订单编号:{{ order.sn }}</view>
|
||||||
</view>
|
</view>
|
||||||
<!-- 申请记录 选项卡 -->
|
<!-- 申请记录 选项卡 -->
|
||||||
|
|||||||
@@ -2,13 +2,6 @@
|
|||||||
<view class="content">
|
<view class="content">
|
||||||
<u-form :model="form" ref="uForm">
|
<u-form :model="form" ref="uForm">
|
||||||
<view class="after-sales-goods-detail-view">
|
<view class="after-sales-goods-detail-view">
|
||||||
<view class="header">
|
|
||||||
<view>
|
|
||||||
本次售后服务将由
|
|
||||||
<text class="seller-name">{{ sku.storeName }}</text>
|
|
||||||
为您提供
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view>
|
<view>
|
||||||
<view class="goods-item-view" v-for="(item,index) in sku.orderItems" v-if="item.sn == sn"
|
<view class="goods-item-view" v-for="(item,index) in sku.orderItems" v-if="item.sn == sn"
|
||||||
@click="gotoGoodsDetail(sku.goods_id)">
|
@click="gotoGoodsDetail(sku.goods_id)">
|
||||||
|
|||||||
@@ -2,15 +2,9 @@
|
|||||||
<view class="mp-iphonex-bottom content">
|
<view class="mp-iphonex-bottom content">
|
||||||
<u-form :model="form" ref="uForm">
|
<u-form :model="form" ref="uForm">
|
||||||
<view class="after-sales-goods-detail-view">
|
<view class="after-sales-goods-detail-view">
|
||||||
<view class="header">
|
|
||||||
<view>
|
|
||||||
本次售后服务将由
|
|
||||||
<text class="seller-name">{{ sku.storeName }}</text>
|
|
||||||
为您提供
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view>
|
<view>
|
||||||
<view class="goods-item-view" @click="gotoGoodsDetail(sku)">
|
<view class="goods-item-view" @click="gotoGoodsDetail(sku.skuId)">
|
||||||
<view class="goods-img">
|
<view class="goods-img">
|
||||||
<u-image border-radius="6" width="131rpx" height="131rpx" :src="sku.image"></u-image>
|
<u-image border-radius="6" width="131rpx" height="131rpx" :src="sku.image"></u-image>
|
||||||
</view>
|
</view>
|
||||||
@@ -33,38 +27,30 @@
|
|||||||
<div style="width: 100%; text-align: right;">快递至第三方卖家</div>
|
<div style="width: 100%; text-align: right;">快递至第三方卖家</div>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
<u-form-item label="快递公司" :label-width="150">
|
<u-form-item label="快递公司" :label-width="150">
|
||||||
<div style="width: 100%; text-align: right;" @click="companySelectShow = true">
|
<div style="width: 100%; text-align: right;" @click="companySelectShow = true" >{{ form.courierCompany || '请选择快递公司' }}</div>
|
||||||
{{ form.courierCompany || '请选择快递公司' }}
|
|
||||||
</div>
|
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
<u-form-item label="快递单号" :label-width="150">
|
<u-form-item label="快递单号" :label-width="150">
|
||||||
<u-input input-align="right" v-model="form.logisticsNo" placeholder="请输入快递单号"/>
|
<u-input input-align="right" v-model="form.logisticsNo" placeholder="请输入快递单号" />
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
<u-form-item label="发货时间" :label-width="150">
|
<u-form-item label="发货时间" :label-width="150">
|
||||||
<div style="width: 100%; text-align: right;" @click="timeshow = true">{{
|
<div style="width: 100%; text-align: right;" @click="timeshow = true" >{{ form.mDeliverTime || '请选择发货时间' }}</div>
|
||||||
form.mDeliverTime || '请选择发货时间'
|
|
||||||
}}
|
|
||||||
</div>
|
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
<view class="submit-view">
|
<view class="submit-view">
|
||||||
<u-button ripple :customStyle="{'background':$lightColor,'color':'#fff' }" shape="circle" @click="onSubmit">
|
<u-button ripple :customStyle="{'background':$lightColor,'color':'#fff' }" shape="circle" @click="onSubmit">提交申请</u-button>
|
||||||
提交申请
|
|
||||||
</u-button>
|
|
||||||
</view>
|
</view>
|
||||||
</u-form>
|
</u-form>
|
||||||
<u-select mode="single-column" :list="companyList" v-model="companySelectShow"
|
<u-select mode="single-column" :list="companyList" v-model="companySelectShow" @confirm="companySelectConfirm"></u-select>
|
||||||
@confirm="companySelectConfirm"></u-select>
|
|
||||||
<u-calendar v-model="timeshow" :mode="'date'" @change="onTimeChange"></u-calendar>
|
<u-calendar v-model="timeshow" :mode="'date'" @change="onTimeChange"></u-calendar>
|
||||||
<u-toast ref="uToast"/>
|
<u-toast ref="uToast" />
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {getLogistics} from "@/api/address.js";
|
import { getLogistics } from "@/api/address.js";
|
||||||
import {fillShipInfo} from "@/api/after-sale.js";
|
import { fillShipInfo } from "@/api/after-sale.js";
|
||||||
import storage from "@/utils/storage";
|
import storage from "@/utils/storage";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -130,39 +116,13 @@ export default {
|
|||||||
* 点击提交
|
* 点击提交
|
||||||
*/
|
*/
|
||||||
onSubmit() {
|
onSubmit() {
|
||||||
delete this.form.courierCompany;
|
|
||||||
|
|
||||||
if (this.form.logisticsId == "") {
|
|
||||||
this.$refs.uToast.show({
|
|
||||||
title: "请选择快递公司",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this.form.logisticsNo == "") {
|
|
||||||
this.$refs.uToast.show({
|
|
||||||
title: "请填写快递单号",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this.form.mDeliverTime == "") {
|
|
||||||
this.$refs.uToast.show({
|
|
||||||
title: "请选择发货时间",
|
|
||||||
type: "error",
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
uni.showLoading({
|
uni.showLoading({
|
||||||
title: "加载中",
|
title: "加载中",
|
||||||
mask: true,
|
mask: true,
|
||||||
});
|
});
|
||||||
|
delete this.form.courierCompany;
|
||||||
fillShipInfo(this.serviceDetail.sn, this.form).then((res) => {
|
fillShipInfo(this.serviceDetail.sn, this.form).then((res) => {
|
||||||
if (this.$store.state.isShowToast) {
|
if (this.$store.state.isShowToast){ uni.hideLoading() };
|
||||||
uni.hideLoading()
|
|
||||||
}
|
|
||||||
;
|
|
||||||
if (res.statusCode === 200) {
|
if (res.statusCode === 200) {
|
||||||
this.$refs.uToast.show({
|
this.$refs.uToast.show({
|
||||||
title: "提交成功",
|
title: "提交成功",
|
||||||
@@ -173,11 +133,6 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
gotoGoodsDetail(sku) {
|
|
||||||
uni.navigateTo({
|
|
||||||
url: `/pages/product/goods?id=${sku.skuId}&goodsId=${sku.goodsId}`,
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
@@ -188,15 +143,12 @@ page,
|
|||||||
background: $page-color-base;
|
background: $page-color-base;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mp-iphonex-bottom {
|
.mp-iphonex-bottom {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.after-sales-goods-detail-view {
|
.after-sales-goods-detail-view {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
padding: 10rpx 0rpx;
|
padding: 10rpx 0rpx;
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
background-color: #f7f7f7;
|
background-color: #f7f7f7;
|
||||||
color: #999999;
|
color: #999999;
|
||||||
@@ -206,18 +158,15 @@ page,
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
line-height: 70rpx;
|
line-height: 70rpx;
|
||||||
|
|
||||||
.header-text {
|
.header-text {
|
||||||
background-color: #999999;
|
background-color: #999999;
|
||||||
padding: 10rpx 30rpx;
|
padding: 10rpx 30rpx;
|
||||||
border-radius: 50rpx;
|
border-radius: 50rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.seller-name {
|
.seller-name {
|
||||||
color: $main-color;
|
color: $main-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.goods-item-view {
|
.goods-item-view {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -227,18 +176,15 @@ page,
|
|||||||
.goods-info {
|
.goods-info {
|
||||||
padding-left: 30rpx;
|
padding-left: 30rpx;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
.goods-title {
|
.goods-title {
|
||||||
margin-bottom: 10rpx;
|
margin-bottom: 10rpx;
|
||||||
color: $font-color-dark;
|
color: $font-color-dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
.goods-specs {
|
.goods-specs {
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
margin-bottom: 10rpx;
|
margin-bottom: 10rpx;
|
||||||
color: #cccccc;
|
color: #cccccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.goods-price {
|
.goods-price {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -246,27 +192,23 @@ page,
|
|||||||
font-size: 28rpx;
|
font-size: 28rpx;
|
||||||
margin-bottom: 10rpx;
|
margin-bottom: 10rpx;
|
||||||
color: $light-color;
|
color: $light-color;
|
||||||
|
|
||||||
.num {
|
.num {
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
color: #999999;
|
color: #999999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.goods-num {
|
.goods-num {
|
||||||
width: 60rpx;
|
width: 60rpx;
|
||||||
color: $main-color;
|
color: $main-color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.opt-view {
|
.opt-view {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
padding: 40rpx 30rpx 0rpx 30rpx;
|
padding: 40rpx 30rpx 0rpx 30rpx;
|
||||||
|
|
||||||
font-size: 26rpx;
|
font-size: 26rpx;
|
||||||
|
|
||||||
.how-view {
|
.how-view {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
@@ -275,21 +217,18 @@ page,
|
|||||||
height: 80rpx;
|
height: 80rpx;
|
||||||
border-bottom: 1px solid $page-color-base;
|
border-bottom: 1px solid $page-color-base;
|
||||||
}
|
}
|
||||||
|
|
||||||
.explain-view {
|
.explain-view {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
height: 150rpx;
|
height: 150rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.img-title {
|
.img-title {
|
||||||
height: 80rpx;
|
height: 80rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.images-view {
|
.images-view {
|
||||||
padding: 20rpx;
|
padding: 20rpx;
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -298,7 +237,6 @@ page,
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.submit-view {
|
.submit-view {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
|||||||
@@ -1,13 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view>
|
<view>
|
||||||
<view class="after-sales-goods-detail-view">
|
<view class="after-sales-goods-detail-view">
|
||||||
<view class="header">
|
|
||||||
<view>
|
|
||||||
本次售后服务将由
|
|
||||||
<text class="seller-name">{{ sku.storeName }}</text>
|
|
||||||
为您提供
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view>
|
<view>
|
||||||
<view class="goods-item-view" :key="index" v-for="(item,index) in sku.orderItems" v-if="item.sn == sn" @click="navigateToGoodsDetail(sku.skuId)">
|
<view class="goods-item-view" :key="index" v-for="(item,index) in sku.orderItems" v-if="item.sn == sn" @click="navigateToGoodsDetail(sku.skuId)">
|
||||||
<view class="goods-img">
|
<view class="goods-img">
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view v-if="serviceDetail">
|
<view v-if="serviceDetail">
|
||||||
<view class="after-sales-goods-detail-view">
|
<view class="after-sales-goods-detail-view">
|
||||||
<view class="header">
|
|
||||||
<view>
|
|
||||||
本次售后服务将由
|
|
||||||
<text class="seller-name">{{ serviceDetail.storeName }}</text>
|
|
||||||
为您提供
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view class="apply-info-view">
|
<view class="apply-info-view">
|
||||||
<view class="status-info">
|
<view class="status-info">
|
||||||
<view class="status-info-box">
|
<view class="status-info-box">
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
<view class="seller-view">
|
<view class="seller-view">
|
||||||
<view class="seller-info u-flex u-row-between">
|
<view class="seller-info u-flex u-row-between">
|
||||||
<view class="seller-name">
|
<view class="seller-name">
|
||||||
<view class="name">{{ order.storeName || "" }}</view>
|
|
||||||
<view class="status">{{ orderStatusList[order.orderStatus] }}</view>
|
<view class="status">{{ orderStatusList[order.orderStatus] }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="order-sn"></view>
|
<view class="order-sn"></view>
|
||||||
@@ -217,7 +216,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-input__textarea {
|
/deep/ .u-input__textarea {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
.cell-title {
|
.cell-title {
|
||||||
|
|||||||
@@ -35,15 +35,13 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="speak-way" v-else>暂无对话</view>
|
<view class="speak-way" v-else>暂无对话</view>
|
||||||
<div v-if="complainDetail.complainStatus!='COMPLETE'">
|
<view class="tips">回复对话</view>
|
||||||
<view class="tips">回复对话</view>
|
<view class="cell-item complain-content">
|
||||||
<view class="cell-item complain-content">
|
<view class="cell-view content">
|
||||||
<view class="cell-view content">
|
<u-input type="textarea" height="70rpx" auto-height v-model="complainValue" />
|
||||||
<u-input type="textarea" height="70rpx" auto-height v-model="complainValue" />
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
<view class="submit-btn" @click="handleSubmit">回复</view>
|
||||||
<view class="submit-btn" @click="handleSubmit">回复</view>
|
|
||||||
</div>
|
|
||||||
<view class="tips">平台仲裁</view>
|
<view class="tips">平台仲裁</view>
|
||||||
<u-cell-group>
|
<u-cell-group>
|
||||||
<u-cell-item :arrow="false" title="仲裁意见" :value="complainDetail.arbitrationResult || '暂无'"></u-cell-item>
|
<u-cell-item :arrow="false" title="仲裁意见" :value="complainDetail.arbitrationResult || '暂无'"></u-cell-item>
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="seller-view" v-for="(item, index) in complaionData" :key="index">
|
<view class="seller-view" v-for="(item, index) in complaionData" :key="index">
|
||||||
<view class="seller-info u-flex u-row-between">
|
<view class="seller-info u-flex u-row-between">
|
||||||
<view class="seller-name">
|
|
||||||
<view class="name">{{ item.storeName }}</view>
|
|
||||||
</view>
|
|
||||||
<view class="order-sn">{{ statusData[item.complainStatus] }}</view>
|
<view class="order-sn">{{ statusData[item.complainStatus] }}</view>
|
||||||
</view>
|
</view>
|
||||||
<u-line color="#DCDFE6"></u-line>
|
<u-line color="#DCDFE6"></u-line>
|
||||||
@@ -28,8 +25,9 @@
|
|||||||
<view class="complain-speak"> {{ item.complainTopic }} </view>
|
<view class="complain-speak"> {{ item.complainTopic }} </view>
|
||||||
</view>
|
</view>
|
||||||
<view class="complain-btn">
|
<view class="complain-btn">
|
||||||
<u-tag mode="plain" @click="handleClear(item)" class="complain-tag" text="撤销投诉" type="info"
|
<u-tag mode="plain" @click="handleClear(item)" class="complain-tag" text="撤销投诉" type="info" v-if="
|
||||||
v-if="item.complainStatus === 'APPLYING' || item.complainStatus === 'NEW'" />
|
item.complainStatus != 'EXPIRED' && item.complainStatus != 'CANCEL'
|
||||||
|
" />
|
||||||
<u-tag mode="plain" @click="handleInfo(item)" class="complain-tag" text="投诉详情" type="info" />
|
<u-tag mode="plain" @click="handleInfo(item)" class="complain-tag" text="投诉详情" type="info" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -162,7 +160,7 @@ export default {
|
|||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
::v-deep .seller-name {
|
/deep/ .seller-name {
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
}
|
}
|
||||||
.complain-btn {
|
.complain-btn {
|
||||||
|
|||||||
@@ -11,11 +11,6 @@
|
|||||||
<u-empty text="尚无需要评价的商品" mode="list" v-if="orderList.length == 0"></u-empty>
|
<u-empty text="尚无需要评价的商品" mode="list" v-if="orderList.length == 0"></u-empty>
|
||||||
<view class="seller-view" v-for="(order, index) in orderList" :key="index">
|
<view class="seller-view" v-for="(order, index) in orderList" :key="index">
|
||||||
<!-- 店铺名称 -->
|
<!-- 店铺名称 -->
|
||||||
<view class="box-title">
|
|
||||||
<view class="title_seller_name">
|
|
||||||
{{ order.storeName }}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<view v-for="(sku, _index) in order.orderItems" :key="_index">
|
<view v-for="(sku, _index) in order.orderItems" :key="_index">
|
||||||
<view class="goods-item-view">
|
<view class="goods-item-view">
|
||||||
<view>
|
<view>
|
||||||
|
|||||||
@@ -125,11 +125,6 @@
|
|||||||
:key="index"
|
:key="index"
|
||||||
>
|
>
|
||||||
<div v-if="item.checked">
|
<div v-if="item.checked">
|
||||||
<div @click="navigateToStore(item)">
|
|
||||||
<div class="store-name">
|
|
||||||
<span>{{ item.storeName }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="promotionNotice">{{ item.promotionNotice || "" }}</div>
|
<div class="promotionNotice">{{ item.promotionNotice || "" }}</div>
|
||||||
<div
|
<div
|
||||||
class="flex goods-item"
|
class="flex goods-item"
|
||||||
@@ -881,7 +876,7 @@ page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.uinput {
|
.uinput {
|
||||||
::v-deep input {
|
/deep/ input {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -976,7 +971,7 @@ page {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-col-3 {
|
/deep/ .u-col-3 {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1011,7 +1006,7 @@ page {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-notice-bar-wrap {
|
/deep/ .u-notice-bar-wrap {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1128,11 +1123,11 @@ page {
|
|||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-col {
|
/deep/ .u-col {
|
||||||
padding: 36rpx 0 !important;
|
padding: 36rpx 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-col-3,
|
/deep/ .u-col-3,
|
||||||
.tipsColor {
|
.tipsColor {
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -10,8 +10,16 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 物流信息 -->
|
<!-- 物流信息 -->
|
||||||
<view class="info-view logistics-view">
|
<view class="info-view logistics-view">
|
||||||
|
<view class="logistics-List" v-if="logisticsList && logisticsList.traces && logisticsList.traces.length != 0 ">
|
||||||
|
<view class="logistics-List-title">
|
||||||
|
{{ logisticsList.traces[logisticsList.traces.length - 1].AcceptStation }}
|
||||||
|
</view>
|
||||||
|
<view class="logistics-List-time">
|
||||||
|
{{ logisticsList.traces[logisticsList.traces.length - 1].AcceptTime }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
<view class="logistics-List">
|
<view class="logistics-List" v-else>
|
||||||
<view class="verificationCode" v-if="order.verificationCode">
|
<view class="verificationCode" v-if="order.verificationCode">
|
||||||
券码: {{ order.orderStatus == 'CANCELLED' ? '已失效' : order.verificationCode }}
|
券码: {{ order.orderStatus == 'CANCELLED' ? '已失效' : order.verificationCode }}
|
||||||
</view>
|
</view>
|
||||||
@@ -64,14 +72,6 @@
|
|||||||
<view>
|
<view>
|
||||||
<view class="seller-view">
|
<view class="seller-view">
|
||||||
<!-- 店铺名称 -->
|
<!-- 店铺名称 -->
|
||||||
<view class="seller-info u-flex u-row-between">
|
|
||||||
<view class="seller-name" @click="goToShopPage(order)">
|
|
||||||
<view class="name">{{ order.storeName }}</view>
|
|
||||||
<view class="status" v-if="orderStatusList[order.orderStatus]"> {{ orderStatusList[order.orderStatus].title
|
|
||||||
}}</view>
|
|
||||||
</view>
|
|
||||||
<view class="order-sn"></view>
|
|
||||||
</view>
|
|
||||||
<view>
|
<view>
|
||||||
<view v-for="(sku, skuIndex) in orderGoodsList" :key="skuIndex">
|
<view v-for="(sku, skuIndex) in orderGoodsList" :key="skuIndex">
|
||||||
<view class="goods-item-view">
|
<view class="goods-item-view">
|
||||||
|
|||||||
@@ -162,18 +162,8 @@
|
|||||||
:max-count="1"
|
:max-count="1"
|
||||||
:show-progress="false"
|
:show-progress="false"
|
||||||
></u-upload>
|
></u-upload>
|
||||||
<u-upload
|
|
||||||
:file-list="legalPhotoFileList"
|
|
||||||
:header="{ accessToken: storage.getAccessToken() }"
|
|
||||||
:action="action"
|
|
||||||
width="200"
|
|
||||||
@on-uploaded="onUploaded($event, 'legalPhoto')"
|
|
||||||
:max-count="1"
|
|
||||||
:show-progress="false"
|
|
||||||
></u-upload>
|
|
||||||
</div>
|
</div>
|
||||||
</u-form-item>
|
</u-form-item>
|
||||||
{{form}}
|
|
||||||
</div>
|
</div>
|
||||||
</u-form>
|
</u-form>
|
||||||
<div class="submit" @click="validatorStep1Form">提交/下一步</div>
|
<div class="submit" @click="validatorStep1Form">提交/下一步</div>
|
||||||
@@ -287,18 +277,7 @@ export default {
|
|||||||
{ pattern: RegExp.licenseNum, message: "请输入正确的营业执照号" },
|
{ pattern: RegExp.licenseNum, message: "请输入正确的营业执照号" },
|
||||||
],
|
],
|
||||||
scope: [{ required: true, message: "请填写营业执照所示经营范围" }],
|
scope: [{ required: true, message: "请填写营业执照所示经营范围" }],
|
||||||
legalPhoto: [{ required: true, message: "请上传法人身份证照片" },
|
legalPhoto: [{ required: true, message: "请上传法人身份证照片" }],
|
||||||
{
|
|
||||||
// 自定义验证函数,见上说明
|
|
||||||
validator: (rule, value, callback) => {
|
|
||||||
// 上面有说,返回true表示校验通过,返回false表示不通过
|
|
||||||
// this.$u.test.mobile()就是返回true或者false的
|
|
||||||
return value.length === 2;
|
|
||||||
},
|
|
||||||
message: "请上传法人身份证正反照片",
|
|
||||||
// 触发器可以同时用blur和change
|
|
||||||
trigger: ["change", "blur"],
|
|
||||||
}],
|
|
||||||
licencePhoto: [{ required: true, message: "请上传营业执照" }],
|
licencePhoto: [{ required: true, message: "请上传营业执照" }],
|
||||||
legalName: [{ required: true, message: "请输入法人姓名" }],
|
legalName: [{ required: true, message: "请输入法人姓名" }],
|
||||||
legalId: [
|
legalId: [
|
||||||
@@ -335,13 +314,10 @@ export default {
|
|||||||
// 图片上传
|
// 图片上传
|
||||||
onUploaded(lists, key) {
|
onUploaded(lists, key) {
|
||||||
let images = [];
|
let images = [];
|
||||||
if(!this.form[key]){
|
|
||||||
this.form[key] = [];
|
|
||||||
}
|
|
||||||
lists.forEach((item) => {
|
lists.forEach((item) => {
|
||||||
images.push(item.response.result);
|
images.push(item.response.result);
|
||||||
});
|
});
|
||||||
this.form[key].push(images[0]);
|
this.form[key] = images;
|
||||||
},
|
},
|
||||||
getPickerParentValue(e) {
|
getPickerParentValue(e) {
|
||||||
this.form.companyAddressIdPath = [];
|
this.form.companyAddressIdPath = [];
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-form-item--right__content__slot {
|
/deep/ .u-form-item--right__content__slot {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -363,22 +363,8 @@
|
|||||||
icon: "none",
|
icon: "none",
|
||||||
});
|
});
|
||||||
getUserInfo().then((user) => {
|
getUserInfo().then((user) => {
|
||||||
if(user.data.success){
|
storage.setUserInfo(user.data.result);
|
||||||
storage.setUserInfo(user.data.result);
|
storage.setHasLogin(true);
|
||||||
storage.setHasLogin(true);
|
|
||||||
}else {
|
|
||||||
setTimeout(() => {
|
|
||||||
uni.showToast({
|
|
||||||
title: user.data.message,
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
storage.setAccessToken('');
|
|
||||||
storage.setRefreshToken('');
|
|
||||||
uni.switchTab({
|
|
||||||
url: "/pages/tabbar/user/my",
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
getCurrentPages().length > 1 ?
|
getCurrentPages().length > 1 ?
|
||||||
uni.navigateBack({
|
uni.navigateBack({
|
||||||
@@ -517,17 +503,9 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setTimeout(() => {
|
uni.switchTab({
|
||||||
uni.showToast({
|
url: "/pages/tabbar/home/index",
|
||||||
title: user.data.message,
|
});
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
storage.setAccessToken('');
|
|
||||||
storage.setRefreshToken('');
|
|
||||||
uni.switchTab({
|
|
||||||
url: "/pages/tabbar/user/my",
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -578,6 +556,7 @@
|
|||||||
|
|
||||||
// 登录成功之后获取用户信息
|
// 登录成功之后获取用户信息
|
||||||
getUserInfoMethods(res) {
|
getUserInfoMethods(res) {
|
||||||
|
console.log(res);
|
||||||
if (res.data.success) {
|
if (res.data.success) {
|
||||||
storage.setAccessToken(res.data.result.accessToken);
|
storage.setAccessToken(res.data.result.accessToken);
|
||||||
storage.setRefreshToken(res.data.result.refreshToken);
|
storage.setRefreshToken(res.data.result.refreshToken);
|
||||||
@@ -595,26 +574,17 @@
|
|||||||
storage.setAutoCp(0)
|
storage.setAutoCp(0)
|
||||||
// 登录成功
|
// 登录成功
|
||||||
uni.showToast({
|
uni.showToast({
|
||||||
title:"提示",
|
title: "登录成功!",
|
||||||
content: "登录成功!",
|
|
||||||
icon: "none",
|
icon: "none",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
whetherNavigate();
|
whetherNavigate();
|
||||||
}else{
|
|
||||||
setTimeout(() => {
|
|
||||||
uni.showToast({
|
|
||||||
title: user.data.message,
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
storage.setAccessToken('');
|
|
||||||
storage.setRefreshToken('');
|
|
||||||
uni.switchTab({
|
|
||||||
url: "/pages/tabbar/user/my",
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
uni.switchTab({
|
||||||
|
url: "/pages/tabbar/home/index",
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ export default {
|
|||||||
padding: 32rpx;
|
padding: 32rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-col {
|
/deep/ .u-col {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 16rpx 0 !important;
|
padding: 16rpx 0 !important;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,8 +183,6 @@
|
|||||||
<!-- 评价 -->
|
<!-- 评价 -->
|
||||||
<Evaluation id="main5" :goodsDetail="goodsDetail" />
|
<Evaluation id="main5" :goodsDetail="goodsDetail" />
|
||||||
|
|
||||||
<!-- 店铺推荐 -->
|
|
||||||
<storeLayout id="main7" :storeDetail="storeDetail" :goodsDetail="goodsDetail" :res="recommendList" />
|
|
||||||
|
|
||||||
<!-- 宝贝详情 -->
|
<!-- 宝贝详情 -->
|
||||||
<GoodsIntro id="main9" :res="goodsDetail" :goodsParams="goodsParams" :goodsId="goodsDetail.goodsId"
|
<GoodsIntro id="main9" :res="goodsDetail" :goodsParams="goodsParams" :goodsId="goodsDetail.goodsId"
|
||||||
@@ -198,10 +196,6 @@
|
|||||||
|
|
||||||
<view class="page-bottom mp-iphonex-bottom" id="pageBottom">
|
<view class="page-bottom mp-iphonex-bottom" id="pageBottom">
|
||||||
<view class="icon-btn">
|
<view class="icon-btn">
|
||||||
<view class="icon-btn-item" @click="navigateToStore(goodsDetail.storeId)">
|
|
||||||
<u-icon size="34" class="red" name="home-fill"></u-icon>
|
|
||||||
<view class="red icon-btn-name">店铺</view>
|
|
||||||
</view>
|
|
||||||
<view class="icon-btn-item" @click="linkMsgDetail()">
|
<view class="icon-btn-item" @click="linkMsgDetail()">
|
||||||
<u-icon size="34" name="kefu-ermai"></u-icon>
|
<u-icon size="34" name="kefu-ermai"></u-icon>
|
||||||
<view class="icon-btn-name">客服</view>
|
<view class="icon-btn-name">客服</view>
|
||||||
@@ -293,7 +287,7 @@ import PromotionAssembleListLayout from "./product/promotion/-promotion-assemble
|
|||||||
import PromotionCoupon from "./product/promotion/-promotion-coupon"; //优惠券组件
|
import PromotionCoupon from "./product/promotion/-promotion-coupon"; //优惠券组件
|
||||||
import GoodsIntro from "./product/goods/-goods-intro"; //商品介绍组件
|
import GoodsIntro from "./product/goods/-goods-intro"; //商品介绍组件
|
||||||
import GoodsRecommend from "./product/goods/-goods-recommend"; //宝贝推荐
|
import GoodsRecommend from "./product/goods/-goods-recommend"; //宝贝推荐
|
||||||
import storeLayout from "./product/shop/-shop"; //店铺组件
|
|
||||||
import Evaluation from "./product/evaluation/-evaluation"; //评价组件
|
import Evaluation from "./product/evaluation/-evaluation"; //评价组件
|
||||||
import GoodsSwiper from "./product/goods/-goods-swiper"; //轮播图组件
|
import GoodsSwiper from "./product/goods/-goods-swiper"; //轮播图组件
|
||||||
import popupGoods from "@/components/m-buy/goods"; //购物车商品的模块
|
import popupGoods from "@/components/m-buy/goods"; //购物车商品的模块
|
||||||
@@ -314,7 +308,7 @@ export default {
|
|||||||
PromotionCoupon,
|
PromotionCoupon,
|
||||||
GoodsIntro,
|
GoodsIntro,
|
||||||
GoodsRecommend,
|
GoodsRecommend,
|
||||||
storeLayout,
|
|
||||||
Evaluation,
|
Evaluation,
|
||||||
GoodsSwiper,
|
GoodsSwiper,
|
||||||
popupGoods,
|
popupGoods,
|
||||||
@@ -567,7 +561,7 @@ export default {
|
|||||||
// }, 500);
|
// }, 500);
|
||||||
}
|
}
|
||||||
// 这里是绑定分销员
|
// 这里是绑定分销员
|
||||||
if ((distributionId || this.$store.state.distributionId) && this.$options.filters.isLogin("auth")) {
|
if (distributionId || this.$store.state.distributionId) {
|
||||||
let disResult = await getGoodsDistribution(distributionId);
|
let disResult = await getGoodsDistribution(distributionId);
|
||||||
if (!disResult.data.success || disResult.statusCode == 403) {
|
if (!disResult.data.success || disResult.statusCode == 403) {
|
||||||
this.$store.state.distributionId = distributionId;
|
this.$store.state.distributionId = distributionId;
|
||||||
@@ -625,7 +619,7 @@ export default {
|
|||||||
|
|
||||||
linkMsgDetail () {
|
linkMsgDetail () {
|
||||||
// lili 基础客服
|
// lili 基础客服
|
||||||
this.$options.filters.talkIm(this.goodsDetail.storeId, this.routerVal.goodsId, this.routerVal.id)
|
this.$options.filters.talkIm(this.goodsDetail.storeId, this.routerVal.goodsId, this.routerVal.id,this.goodsDetail)
|
||||||
// uni.navigateTo({
|
// uni.navigateTo({
|
||||||
// url: `/pages/mine/im/index?userId=${this.goodsDetail.storeId}&goodsid=${this.routerVal.goodsId}&skuid=${this.routerVal.id}`
|
// url: `/pages/mine/im/index?userId=${this.goodsDetail.storeId}&goodsid=${this.routerVal.goodsId}&skuid=${this.routerVal.id}`
|
||||||
// });
|
// });
|
||||||
@@ -793,8 +787,8 @@ export default {
|
|||||||
getGoodsList({
|
getGoodsList({
|
||||||
pageNumber: 1,
|
pageNumber: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
currentGoodsId: this.goodsDetail.id,
|
category: this.goodsDetail.categoryId,
|
||||||
keyword: this.goodsDetail.name
|
keyword: this.goodsDetail.name,
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
this.likeGoodsList = res.data.result.records;
|
this.likeGoodsList = res.data.result.records;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -120,18 +120,18 @@ export default {
|
|||||||
.empty {
|
.empty {
|
||||||
margin: 40rpx 0;
|
margin: 40rpx 0;
|
||||||
}
|
}
|
||||||
.goods-detail ::v-deep .vhtml {
|
.goods-detail /deep/ .vhtml {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.vhtml {
|
.vhtml {
|
||||||
::v-deep img {
|
/deep/ img {
|
||||||
display: block !important;
|
display: block !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep img {
|
/deep/ img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.goods-detail-box {
|
.goods-detail-box {
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .image-wrapper image {
|
/deep/ .image-wrapper image {
|
||||||
opacity: 1 !important;
|
opacity: 1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ export default {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-mode-light-error {
|
/deep/ .u-mode-light-error {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export default {
|
|||||||
color: #333333;
|
color: #333333;
|
||||||
margin-left: 20rpx;
|
margin-left: 20rpx;
|
||||||
}
|
}
|
||||||
::v-deep .u-mode-light-error {
|
/deep/ .u-mode-light-error {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
.coupon{
|
.coupon{
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
background: #ffe7e6 !important;
|
background: #ffe7e6 !important;
|
||||||
text-align: center !important;
|
text-align: center !important;
|
||||||
}
|
}
|
||||||
::v-deep .u-mode-light-error {
|
/deep/ .u-mode-light-error {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,6 @@
|
|||||||
<u-image width="120rpx" mode="aspectFit" height="120rpx" :src="storeDetail.storeLogo"></u-image>
|
<u-image width="120rpx" mode="aspectFit" height="120rpx" :src="storeDetail.storeLogo"></u-image>
|
||||||
</view>
|
</view>
|
||||||
<view class="name-star star-con">
|
<view class="name-star star-con">
|
||||||
<div class="name">
|
|
||||||
{{ storeDetail.storeName }}
|
|
||||||
<span v-if="storeDetail.selfOperated == 1" class="shopTag">自营</span>
|
|
||||||
</div>
|
|
||||||
<div class="store-row">
|
<div class="store-row">
|
||||||
<div class="collectionNum">{{ storeDetail.collectionNum || 0 }}人关注</div>
|
<div class="collectionNum">{{ storeDetail.collectionNum || 0 }}人关注</div>
|
||||||
<div class="goodsNum">{{ storeDetail.goodsNum || 0 }}件商品</div>
|
<div class="goodsNum">{{ storeDetail.goodsNum || 0 }}件商品</div>
|
||||||
@@ -87,14 +83,14 @@ export default {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border-radius: 12rpx;
|
border-radius: 12rpx;
|
||||||
|
|
||||||
::v-deep .u-image__image {
|
/deep/ .u-image__image {
|
||||||
height: 218rpx;
|
height: 218rpx;
|
||||||
border-radius: 12rpx !important;
|
border-radius: 12rpx !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.recommend-item-img {
|
.recommend-item-img {
|
||||||
::v-deep .u-image__image {
|
/deep/ .u-image__image {
|
||||||
width: 100% !important;
|
width: 100% !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,7 +186,7 @@ export default {
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
::v-deep .u-row {
|
/deep/ .u-row {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ page {
|
|||||||
color: $price-color;
|
color: $price-color;
|
||||||
font-size: 32rpx;
|
font-size: 32rpx;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
::v-deep .price {
|
/deep/ .price {
|
||||||
font-size: 60rpx;
|
font-size: 60rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,7 +124,7 @@ page {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border-radius: 12rpx;
|
border-radius: 12rpx;
|
||||||
|
|
||||||
::v-deep .u-image__image {
|
/deep/ .u-image__image {
|
||||||
// width: 228rpx;
|
// width: 228rpx;
|
||||||
height: 228rpx;
|
height: 228rpx;
|
||||||
border-radius: 12rpx !important;
|
border-radius: 12rpx !important;
|
||||||
@@ -200,7 +200,7 @@ page {
|
|||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
transition: all 0.5s;
|
transition: all 0.5s;
|
||||||
}
|
}
|
||||||
::v-deep .u-navbar {
|
/deep/ .u-navbar {
|
||||||
padding-left: 10rpx;
|
padding-left: 10rpx;
|
||||||
}
|
}
|
||||||
.nav-item {
|
.nav-item {
|
||||||
@@ -356,7 +356,7 @@ page {
|
|||||||
z-index: 8;
|
z-index: 8;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|
||||||
::v-deep .u-row {
|
/deep/ .u-row {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -368,7 +368,7 @@ page {
|
|||||||
color: #fff;
|
color: #fff;
|
||||||
padding: 0 20rpx;
|
padding: 0 20rpx;
|
||||||
|
|
||||||
::v-deep .price {
|
/deep/ .price {
|
||||||
font-size: 36rpx;
|
font-size: 36rpx;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
|||||||
@@ -11,9 +11,6 @@
|
|||||||
</u-image>
|
</u-image>
|
||||||
</div>
|
</div>
|
||||||
<div class="store-msg">
|
<div class="store-msg">
|
||||||
<div class="store-name">
|
|
||||||
{{item.storeName}}
|
|
||||||
</div>
|
|
||||||
<div class="goods-num">
|
<div class="goods-num">
|
||||||
商品 {{item.goodsNum}}
|
商品 {{item.goodsNum}}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -290,7 +290,7 @@ page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.index-item-img {
|
.index-item-img {
|
||||||
::v-deep .u-image {
|
/deep/ .u-image {
|
||||||
width: 346rpx !important;
|
width: 346rpx !important;
|
||||||
height: 320rpx !important;
|
height: 320rpx !important;
|
||||||
border-radius: 10rpx !important;
|
border-radius: 10rpx !important;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
color: #999999;
|
color: #999999;
|
||||||
margin: 0 20rpx;
|
margin: 0 20rpx;
|
||||||
|
|
||||||
::v-deep view {
|
/deep/ view {
|
||||||
line-height: 1.75;
|
line-height: 1.75;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,7 +121,7 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
padding: 6rpx 16rpx;
|
padding: 6rpx 16rpx;
|
||||||
}
|
}
|
||||||
::v-deep .empty {
|
/deep/ .empty {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-top: 20%;
|
padding-top: 20%;
|
||||||
> .empty-content {
|
> .empty-content {
|
||||||
|
|||||||
@@ -19,24 +19,8 @@
|
|||||||
:key="index">
|
:key="index">
|
||||||
<view class="tab">
|
<view class="tab">
|
||||||
<view class="store-line">
|
<view class="store-line">
|
||||||
<u-checkbox-group class="store-line-check">
|
|
||||||
<!-- #ifndef MP-WEIXIN -->
|
|
||||||
<u-checkbox shape="circle" :active-color="lightColor" v-model="item.checked"
|
|
||||||
@change="checkboxChangeDP(item)"></u-checkbox>
|
|
||||||
<!-- #endif -->
|
|
||||||
<!-- 微信小程序这里 v-model出现问题,改用:value -->
|
|
||||||
<!-- #ifdef MP-WEIXIN -->
|
|
||||||
<u-checkbox shape="circle" :active-color="lightColor" :value="item.checked"
|
|
||||||
@change="checkboxChangeDP(item)"></u-checkbox>
|
|
||||||
<!-- #endif -->
|
|
||||||
</u-checkbox-group>
|
|
||||||
<span class="store-name wes store-line-desc" @click.stop="navigateToStore(item)">{{
|
|
||||||
item.storeName
|
|
||||||
}}</span>
|
|
||||||
<u-icon @click="navigateToStore(item)" size="24" style="margin-left:10rpx;" name="arrow-right"></u-icon>
|
|
||||||
</view>
|
</view>
|
||||||
<view class="right-col" v-if="item.canReceiveCoupon" @click="navigateToCoupon(item)">
|
<view class="right-col" v-if="item.canReceiveCoupon" @click="navigateToCoupon(item)">
|
||||||
<div class="right-line"></div>
|
|
||||||
<span>领劵</span>
|
<span>领劵</span>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@@ -570,7 +554,7 @@ page {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
::v-deep .tips {
|
/deep/ .tips {
|
||||||
margin: 0 8rpx 0 0;
|
margin: 0 8rpx 0 0;
|
||||||
background: $main-color;
|
background: $main-color;
|
||||||
border-radius: 100px;
|
border-radius: 100px;
|
||||||
@@ -604,14 +588,14 @@ page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* 空白页 */
|
/* 空白页 */
|
||||||
::v-deep .u-number-input {
|
/deep/ .u-number-input {
|
||||||
background: #fff !important;
|
background: #fff !important;
|
||||||
border: 1px solid #ededed;
|
border: 1px solid #ededed;
|
||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-icon-minus,
|
/deep/ .u-icon-minus,
|
||||||
::v-deep .u-icon-plus {
|
/deep/ .u-icon-plus {
|
||||||
background: #ffffff !important;
|
background: #ffffff !important;
|
||||||
border: 1px solid #ededed;
|
border: 1px solid #ededed;
|
||||||
color: #333 !important;
|
color: #333 !important;
|
||||||
@@ -665,7 +649,7 @@ page {
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
::v-deep .number {
|
/deep/ .number {
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
> span {
|
> span {
|
||||||
@@ -691,7 +675,7 @@ page {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-col {
|
/deep/ .u-col {
|
||||||
padding: 24rpx 0 !important;
|
padding: 24rpx 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -735,7 +719,7 @@ page {
|
|||||||
.goods-config {
|
.goods-config {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
::v-deep .invalid {
|
/deep/ .invalid {
|
||||||
display: block;
|
display: block;
|
||||||
width: 80rpx !important;
|
width: 80rpx !important;
|
||||||
}
|
}
|
||||||
@@ -765,7 +749,7 @@ page {
|
|||||||
height: 40rpx;
|
height: 40rpx;
|
||||||
border-left: 1px solid #eeeeee;
|
border-left: 1px solid #eeeeee;
|
||||||
|
|
||||||
::v-deep span {
|
/deep/ span {
|
||||||
margin-left: 20rpx;
|
margin-left: 20rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -814,10 +798,10 @@ page {
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
> .sp-price {
|
> .sp-price {
|
||||||
::v-deep span:nth-of-type(1) {
|
/deep/ span:nth-of-type(1) {
|
||||||
font-size: 38rpx;
|
font-size: 38rpx;
|
||||||
}
|
}
|
||||||
::v-deep span:nth-of-type(2) {
|
/deep/ span:nth-of-type(2) {
|
||||||
font-size: 24rpx;
|
font-size: 24rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ uni-scroll-view .uni-scroll-view::-webkit-scrollbar {
|
|||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
margin-bottom: 20rpx;
|
margin-bottom: 20rpx;
|
||||||
}
|
}
|
||||||
::v-deep .u-image {
|
/deep/ .u-image {
|
||||||
width: 140rpx !important;
|
width: 140rpx !important;
|
||||||
height: 140rpx !important;
|
height: 140rpx !important;
|
||||||
border-radius: 8px !important;
|
border-radius: 8px !important;
|
||||||
|
|||||||
@@ -32,38 +32,9 @@ export function modelNavigateTo(item) {
|
|||||||
break;
|
break;
|
||||||
// 活动
|
// 活动
|
||||||
case "marketing":
|
case "marketing":
|
||||||
switch (val.___promotion) {
|
uni.navigateTo({
|
||||||
// 积分商品
|
url: "/pages/product/goods?id=" + val.skuId + "&goodsId=" + val.goodsId,
|
||||||
case "POINTS_GOODS":
|
});
|
||||||
uni.navigateTo({
|
|
||||||
url: `/pages/promotion/point/detail?id=${val.promotionId}`,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
// 砍价
|
|
||||||
case "KANJIA":
|
|
||||||
uni.navigateTo({
|
|
||||||
url: `/pages/promotion/bargain/detail?id=${val.promotionId}`,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
// 优惠券商品
|
|
||||||
case "COUPON":
|
|
||||||
uni.navigateTo({
|
|
||||||
url: "/pages/product/goods?id=" + val.skuId + "&goodsId=" + val.goodsId,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
// 满减商品
|
|
||||||
case "FULL_DISCOUNT":
|
|
||||||
uni.navigateTo({
|
|
||||||
url: "/pages/product/goods?id=" + val.skuId + "&goodsId=" + val.goodsId,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
// 秒杀频道
|
|
||||||
case "SECKILL":
|
|
||||||
uni.navigateTo({
|
|
||||||
url: "/pages/product/goods?id=" + val.skuId + "&goodsId=" + val.goodsId,
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "pages":
|
case "pages":
|
||||||
uni.navigateTo({
|
uni.navigateTo({
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ export default {
|
|||||||
handler(val) {
|
handler(val) {
|
||||||
// 监听父级的值 如果有值将值赋给selected
|
// 监听父级的值 如果有值将值赋给selected
|
||||||
if (val) {
|
if (val) {
|
||||||
|
console.log(val)
|
||||||
// 如果第一个标签页绑定为商品
|
// 如果第一个标签页绑定为商品
|
||||||
this.selected.val = this.res.list[0].listWay[0] ? this.res.list[0].listWay[0].type: '';
|
this.selected.val = this.res.list[0].listWay[0] ? this.res.list[0].listWay[0].type: '';
|
||||||
// 如果第一个标签为绑定为分类
|
// 如果第一个标签为绑定为分类
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export default {
|
|||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.web-view {
|
.web-view {
|
||||||
::v-deep .web-view {
|
/deep/ .web-view {
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ body {
|
|||||||
line-height: 1;
|
line-height: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
::v-deep .u-icon,
|
/deep/ .u-icon,
|
||||||
.u-icon {
|
.u-icon {
|
||||||
margin-top: 106rpx;
|
margin-top: 106rpx;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,16 +91,6 @@
|
|||||||
<view>关于</view>
|
<view>关于</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<view class="interact-item" @click="navigateTo('/pages/passport/entry/seller/index')">
|
|
||||||
<image src="/static/mine/feedback.png" mode=""></image>
|
|
||||||
<view>店铺入驻</view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <view class="interact-item" @click="inviter()">-->
|
|
||||||
<!-- <image src="/static/mine/share.png" mode=""></image>-->
|
|
||||||
<!-- <view>邀新</view>-->
|
|
||||||
<!-- </view>-->
|
|
||||||
<view class="interact-item" @click="navigateTo('/pages/mine/set/setUp')">
|
<view class="interact-item" @click="navigateTo('/pages/mine/set/setUp')">
|
||||||
<image src="/static/mine/setting.png" mode=""></image>
|
<image src="/static/mine/setting.png" mode=""></image>
|
||||||
<view>设置</view>
|
<view>设置</view>
|
||||||
@@ -109,23 +99,6 @@
|
|||||||
|
|
||||||
</view>
|
</view>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<template>
|
|
||||||
<u-popup v-model="sharingShow" mode="bottom" border-radius="14">
|
|
||||||
<view style="margin: 10px; text-align: center;"> 请邀请用户扫描二维码或者将地址复制转发给其他用户 </view>
|
|
||||||
<view class='qrcode'>
|
|
||||||
<uqrcode ref="uqrcode" canvas-id="qrcode" :value="sharingLink" :options="{ margin: 10 }">
|
|
||||||
</uqrcode>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="copy-text" @click="getDetail(sharingLink)">
|
|
||||||
{{sharingLink}}
|
|
||||||
</view>
|
|
||||||
<view class="confrim-btn">
|
|
||||||
<u-button @click="sharingShow = false;">关闭</u-button>
|
|
||||||
</view>
|
|
||||||
</u-popup>
|
|
||||||
</template>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -138,11 +111,8 @@ import storage from "@/utils/storage";
|
|||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
configs,
|
configs,
|
||||||
storage,
|
storage
|
||||||
repayingShow: false, //分销清退弹框
|
|
||||||
sharingShow: false,
|
|
||||||
sharingLink: ""
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -152,18 +122,6 @@ export default {
|
|||||||
url,
|
url,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
inviter() {
|
|
||||||
if (storage.getUserInfo().id) {
|
|
||||||
this.sharingLink = this.configs.shareLink + "?inviter=" + this.storage.getUserInfo().id
|
|
||||||
this.sharingShow = true
|
|
||||||
} else {
|
|
||||||
uni.showToast({
|
|
||||||
title: "请先登录",
|
|
||||||
duration: 2000,
|
|
||||||
icon: "none",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
navigateTo(url) {
|
navigateTo(url) {
|
||||||
const ignores = [
|
const ignores = [
|
||||||
'/pages/mine/set/setUp',
|
'/pages/mine/set/setUp',
|
||||||
@@ -230,58 +188,41 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.copy-text {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
margin: 10px;
|
|
||||||
line-break: anywhere;
|
|
||||||
}
|
|
||||||
|
|
||||||
.interact-tools {
|
.interact-tools {
|
||||||
border-left: none;
|
border-left: none;
|
||||||
border-right: none;
|
border-right: none;
|
||||||
|
|
||||||
|
|
||||||
.interactBox {
|
.interactBox {
|
||||||
height: 156rpx;
|
height: 156rpx;
|
||||||
}
|
}
|
||||||
|
.interact-container {
|
||||||
|
margin: 0 20rpx;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
box-shadow: 0 4rpx 24rpx 0 rgba($color: #f6f6f6, $alpha: 1);
|
||||||
|
.interact-item-img {
|
||||||
|
width: 52rpx !important;
|
||||||
|
height: 52rpx !important;
|
||||||
|
// margin-bottom: !important;
|
||||||
|
margin: 0 auto 6rpx auto !important;
|
||||||
|
}
|
||||||
|
image {
|
||||||
|
width: 52rpx;
|
||||||
|
height: 52rpx;
|
||||||
|
margin-bottom: 6rpx;
|
||||||
|
}
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
.interact-container {
|
.interact-item {
|
||||||
margin: 0 20rpx;
|
font-size: $font-sm;
|
||||||
background: #fff;
|
width: 25%;
|
||||||
border-radius: 20rpx;
|
height: 160rpx;
|
||||||
box-shadow: 0 4rpx 24rpx 0 rgba($color: #f6f6f6, $alpha: 1);
|
padding: 30rpx;
|
||||||
|
}
|
||||||
.interact-item-img {
|
}
|
||||||
width: 52rpx !important;
|
|
||||||
height: 52rpx !important;
|
|
||||||
// margin-bottom: !important;
|
|
||||||
margin: 0 auto 6rpx auto !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
image {
|
|
||||||
width: 52rpx;
|
|
||||||
height: 52rpx;
|
|
||||||
margin-bottom: 6rpx;
|
|
||||||
}
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
.interact-item {
|
|
||||||
font-size: $font-sm;
|
|
||||||
width: 25%;
|
|
||||||
height: 160rpx;
|
|
||||||
padding: 30rpx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.qrcode {
|
|
||||||
margin: 0 auto;
|
|
||||||
width: 200px;
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -5,27 +5,6 @@
|
|||||||
import { getAppVersion } from "@/api/message.js";
|
import { getAppVersion } from "@/api/message.js";
|
||||||
|
|
||||||
const platform = uni.getSystemInfoSync().platform;
|
const platform = uni.getSystemInfoSync().platform;
|
||||||
|
|
||||||
// 版本号比较函数
|
|
||||||
function compareVersion(version1, version2) {
|
|
||||||
const v1Parts = version1.split('.').map(Number);
|
|
||||||
const v2Parts = version2.split('.').map(Number);
|
|
||||||
|
|
||||||
const maxLength = Math.max(v1Parts.length, v2Parts.length);
|
|
||||||
|
|
||||||
for (let i = 0; i < maxLength; i++) {
|
|
||||||
const v1Part = v1Parts[i] || 0;
|
|
||||||
const v2Part = v2Parts[i] || 0;
|
|
||||||
|
|
||||||
if (v1Part > v2Part) {
|
|
||||||
return 1;
|
|
||||||
} else if (v1Part < v2Part) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
// 主颜色
|
// 主颜色
|
||||||
const $mainColor = "#1ABC9C";
|
const $mainColor = "#1ABC9C";
|
||||||
// 弹窗图标url
|
// 弹窗图标url
|
||||||
@@ -50,7 +29,7 @@ export const getServerNo = function (callback) {
|
|||||||
platform == "android" ? (type = "ANDROID") : (type = "IOS");
|
platform == "android" ? (type = "ANDROID") : (type = "IOS");
|
||||||
|
|
||||||
getAppVersion(type).then((res) => {
|
getAppVersion(type).then((res) => {
|
||||||
if (res.data.success && res.data.result && res.data.result.downloadUrl) {
|
if (res.data.success && res.data.result.downloadUrl) {
|
||||||
let response = res.data.result;
|
let response = res.data.result;
|
||||||
let result = {};
|
let result = {};
|
||||||
result.versionCode = response.version;
|
result.versionCode = response.version;
|
||||||
@@ -875,9 +854,11 @@ function downloadPopup(data, callback, cancelCallback, rebootCallback) {
|
|||||||
export default function (isPrompt = false) {
|
export default function (isPrompt = false) {
|
||||||
getCurrentNo((version) => {
|
getCurrentNo((version) => {
|
||||||
getServerNo((res) => {
|
getServerNo((res) => {
|
||||||
if (compareVersion(res.versionCode, version.version) <= 0) {
|
|
||||||
|
if (res.versionCode.replace(/\./g, "") <= version.version.replace(/\./g, "")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (res.forceUpdate) {
|
if (res.forceUpdate) {
|
||||||
if (/\.wgt$/i.test(res.downloadUrl)) {
|
if (/\.wgt$/i.test(res.downloadUrl)) {
|
||||||
getDownload(res);
|
getDownload(res);
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.8 KiB |
5
uni.scss
5
uni.scss
@@ -65,7 +65,7 @@ $font-weight: 400;
|
|||||||
}
|
}
|
||||||
.bg-light-color {
|
.bg-light-color {
|
||||||
background-color: $light-color !important;
|
background-color: $light-color !important;
|
||||||
::v-deep * {
|
/deep/ * {
|
||||||
background-color: $light-color !important;
|
background-color: $light-color !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -153,6 +153,9 @@ $font-weight: 400;
|
|||||||
.flex-j-sb{
|
.flex-j-sb{
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
.flex-j-c{
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
.relative {
|
.relative {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,201 +0,0 @@
|
|||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
@@ -1,392 +0,0 @@
|
|||||||
# 介绍
|
|
||||||
|
|
||||||
`uQRCode`是一款基于`Javascript`环境开发的二维码生成插件,适用所有`Javascript`运行环境的前端应用和`Node.js`应用。
|
|
||||||
|
|
||||||
`uQRCode`可扩展性高,它支持自定义渲染二维码,可通过`uQRCode API`得到二维码绘制关键信息后,使用`canvas`、`svg`或`js`操作`dom`的方式绘制二维码图案。还可自定义二维码样式,如随机颜色、圆点、方块、块与块之间的间距等。
|
|
||||||
|
|
||||||
欢迎加入群聊【uQRCode交流群】:[695070434](https://jq.qq.com/?_wv=1027&k=JRjzDqiw)。
|
|
||||||
|
|
||||||
# 设计器
|
|
||||||
|
|
||||||
uQRCode发布了配套的可视化设计器,可根据自己喜好在设计器中设计二维码样式,一键生成配置代码复制到项目中,详情请在微信小程序搜索“柚子二维码”,或扫描下方小程序码体验。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 设计器模板示例
|
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
# 快速上手
|
|
||||||
|
|
||||||
> 在`uni-app`中,我们更推荐使用组件方式来生成二维码,组件方式大大提高了页面的可读性以及避开了一些平台容易出问题的地方,当组件无法满足需求的时候,再考虑切换成原生方式。
|
|
||||||
|
|
||||||
官方文档:[https://uqrcode.cn/doc](https://uqrcode.cn/doc)。
|
|
||||||
|
|
||||||
github地址:[https://github.com/Sansnn/uQRCode](https://github.com/Sansnn/uQRCode)。
|
|
||||||
|
|
||||||
npm地址:[https://www.npmjs.com/package/uqrcodejs](https://www.npmjs.com/package/uqrcodejs)。
|
|
||||||
|
|
||||||
uni-app插件市场地址:[https://ext.dcloud.net.cn/plugin?id=1287](https://ext.dcloud.net.cn/plugin?id=1287)。
|
|
||||||
|
|
||||||
## 原生方式
|
|
||||||
|
|
||||||
原生方式仅需要获取`uqrcode.js`文件便可使用。详细配置请移步到:文档 > [原生](https://uqrcode.cn/doc/document/native.html)。
|
|
||||||
|
|
||||||
### 安装
|
|
||||||
|
|
||||||
1. 通过`npm`安装,成功后即可使用`import`或`require`进行引用。
|
|
||||||
``` bash
|
|
||||||
# npm安装
|
|
||||||
npm install uqrcodejs
|
|
||||||
# 或者
|
|
||||||
npm install @uqrcode/js
|
|
||||||
```
|
|
||||||
|
|
||||||
2. 通过项目开源地址获取`uqrcode.js`,下载`uqrcode.js`后,将其复制到您项目指定目录,在页面中引入`uqrcode.js`文件即可开始使用。
|
|
||||||
|
|
||||||
### 引入
|
|
||||||
|
|
||||||
- 通过`import`引入。
|
|
||||||
``` javascript
|
|
||||||
// npm安装
|
|
||||||
import UQRCode from 'uqrcodejs'; // npm install uqrcodejs
|
|
||||||
// 或者
|
|
||||||
import UQRCode from '@uqrcode/js'; // npm install @uqrcode/js
|
|
||||||
```
|
|
||||||
|
|
||||||
- `Node.js`通过`require`引入。
|
|
||||||
``` javascript
|
|
||||||
// npm安装
|
|
||||||
const UQRCode = require('uqrcodejs'); // npm install uqrcodejs
|
|
||||||
// 或者
|
|
||||||
const UQRCode = require('@uqrcode/js'); // npm install @uqrcode/js
|
|
||||||
```
|
|
||||||
|
|
||||||
- 原生浏览器环境,在js脚本加载时添加到`window`。
|
|
||||||
``` html
|
|
||||||
<script type="text/javascript" src="uqrcode.js"></script>
|
|
||||||
<script>
|
|
||||||
var UQRCode = window.UQRCode;
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
### 简单用法
|
|
||||||
|
|
||||||
`uQRCode`基于`Canvas API`封装了一套方法,建议开发者使用`canvas`生成,一键调用,非常方便。以下是示例:
|
|
||||||
|
|
||||||
- HTML示例
|
|
||||||
- DOM部分
|
|
||||||
``` html
|
|
||||||
<canvas id="qrcode" width="200" height="200"></canvas>
|
|
||||||
```
|
|
||||||
|
|
||||||
- JS部分
|
|
||||||
``` javascript
|
|
||||||
// 获取uQRCode实例
|
|
||||||
var qr = new UQRCode();
|
|
||||||
// 设置二维码内容
|
|
||||||
qr.data = "https://uqrcode.cn/doc";
|
|
||||||
// 设置二维码大小,必须与canvas设置的宽高一致
|
|
||||||
qr.size = 200;
|
|
||||||
// 调用制作二维码方法
|
|
||||||
qr.make();
|
|
||||||
// 获取canvas元素
|
|
||||||
var canvas = document.getElementById("qrcode");
|
|
||||||
// 获取canvas上下文
|
|
||||||
var canvasContext = canvas.getContext("2d");
|
|
||||||
// 设置uQRCode实例的canvas上下文
|
|
||||||
qr.canvasContext = canvasContext;
|
|
||||||
// 调用绘制方法将二维码图案绘制到canvas上
|
|
||||||
qr.drawCanvas();
|
|
||||||
```
|
|
||||||
|
|
||||||
- uni-app示例
|
|
||||||
- Template部分
|
|
||||||
``` html
|
|
||||||
<canvas id="qrcode" canvas-id="qrcode" style="width: 200px;height: 200px;"></canvas>
|
|
||||||
```
|
|
||||||
|
|
||||||
- JS部分
|
|
||||||
``` javascript
|
|
||||||
onReady() {
|
|
||||||
// 获取uQRCode实例
|
|
||||||
var qr = new UQRCode();
|
|
||||||
// 设置二维码内容
|
|
||||||
qr.data = "https://uqrcode.cn/doc";
|
|
||||||
// 设置二维码大小,必须与canvas设置的宽高一致
|
|
||||||
qr.size = 200;
|
|
||||||
// 调用制作二维码方法
|
|
||||||
qr.make();
|
|
||||||
// 获取canvas上下文
|
|
||||||
var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件,this必须传入
|
|
||||||
// 设置uQRCode实例的canvas上下文
|
|
||||||
qr.canvasContext = canvasContext;
|
|
||||||
// 调用绘制方法将二维码图案绘制到canvas上
|
|
||||||
qr.drawCanvas();
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
- 微信小程序,推荐使用Canvas 2D,关于Canvas 2D的使用请参考微信开放文档。
|
|
||||||
|
|
||||||
### 高级用法
|
|
||||||
|
|
||||||
考虑到部分平台可能不支持`canvas`,所以`uQRCode`并没有强制要求和`canvas`一起使用,您还可以选择其他方式来生成二维码,例如使用`js`操作`dom`进行绘制或是使用`svg`绘制等。以下是示例:
|
|
||||||
|
|
||||||
- uni-app v-for+view
|
|
||||||
|
|
||||||
```html
|
|
||||||
<template>
|
|
||||||
<view>
|
|
||||||
<view class="qrcode">
|
|
||||||
<view v-for="(row, rowI) in modules" :key="rowI" style="display: flex;flex-direction: row;">
|
|
||||||
<view v-for="(col, colI) in row" :key="colI">
|
|
||||||
<view v-if="col.isBlack" style="width: 10px;height: 10px;background-color: black;">
|
|
||||||
<!-- 黑色码点 -->
|
|
||||||
</view>
|
|
||||||
<view v-else style="width: 10px;height: 10px;background-color: white;">
|
|
||||||
<!-- 白色码点 -->
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import UQRCode from '../../uni_modules/Sansnn-uQRCode/js_sdk/uqrcode/uqrcode.js';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
modules: []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onLoad() {
|
|
||||||
const qr = new UQRCode();
|
|
||||||
qr.data = 'uQRCode';
|
|
||||||
qr.make();
|
|
||||||
this.modules = qr.modules;
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
- js操作dom
|
|
||||||
|
|
||||||
``` html
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>uQRCode二维码生成</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="qrcode" style="position: relative;"></div>
|
|
||||||
<script type="text/javascript" src="uqrcode.js"></script>
|
|
||||||
<script>
|
|
||||||
// 引入uQRCode
|
|
||||||
var UQRCode = window.UQRCode;
|
|
||||||
// 获取uQRCode实例
|
|
||||||
var qr = new UQRCode();
|
|
||||||
// 设置二维码内容
|
|
||||||
qr.data = "https://uqrcode.cn/doc";
|
|
||||||
// 设置二维码大小,必须与canvas设置的宽高一致
|
|
||||||
qr.size = 200;
|
|
||||||
// 设置二维码前景图,可以是路径
|
|
||||||
qr.foregroundImageSrc =
|
|
||||||
'data:image/png;base64,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';
|
|
||||||
// 调用制作二维码方法
|
|
||||||
qr.make();
|
|
||||||
|
|
||||||
var drawModules = qr.getDrawModules();
|
|
||||||
// 遍历drawModules创建dom元素
|
|
||||||
var qrHtml = '';
|
|
||||||
for (var i = 0; i < drawModules.length; i++) {
|
|
||||||
var drawModule = drawModules[i];
|
|
||||||
switch (drawModule.type) {
|
|
||||||
case 'tile':
|
|
||||||
/* 绘制小块 */
|
|
||||||
qrHtml += `<div style="position: absolute;left: ${drawModule.x}px;top: ${drawModule.y}px;width: ${drawModule.width}px;height: ${drawModule.height}px;background: ${drawModule.color};"></div>`;
|
|
||||||
break;
|
|
||||||
case 'image':
|
|
||||||
/* 绘制图像 */
|
|
||||||
qrHtml += `<img style="position: absolute;left: ${drawModule.x}px;top: ${drawModule.y}px;width: ${drawModule.width}px;height: ${drawModule.height}px;" src="${drawModule.imageSrc}" />`;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.getElementById('qrcode').innerHTML = qrHtml;
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
```
|
|
||||||
|
|
||||||
- svg
|
|
||||||
``` html
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>uQRCode二维码生成</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<svg id="qrcode" width="200" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1"></svg>
|
|
||||||
<script type="text/javascript" src="uqrcode.js"></script>
|
|
||||||
<script>
|
|
||||||
// 引入uQRCode
|
|
||||||
var UQRCode = window.UQRCode;
|
|
||||||
// 获取uQRCode实例
|
|
||||||
var qr = new UQRCode();
|
|
||||||
// 设置二维码内容
|
|
||||||
qr.data = "https://uqrcode.cn/doc";
|
|
||||||
// 设置二维码大小,必须与canvas设置的宽高一致
|
|
||||||
qr.size = 200;
|
|
||||||
// 设置二维码前景图,可以是路径
|
|
||||||
qr.foregroundImageSrc =
|
|
||||||
'data:image/png;base64,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';
|
|
||||||
// 调用制作二维码方法
|
|
||||||
qr.make();
|
|
||||||
|
|
||||||
var drawModules = qr.getDrawModules();
|
|
||||||
// 遍历drawModules创建svg元素
|
|
||||||
var qrHtml = '';
|
|
||||||
for (var i = 0; i < drawModules.length; i++) {
|
|
||||||
var drawModule = drawModules[i];
|
|
||||||
switch (drawModule.type) {
|
|
||||||
case 'tile':
|
|
||||||
/* 绘制小块 */
|
|
||||||
qrHtml += `<rect x="${drawModule.x}" y="${drawModule.y}" width="${drawModule.width}" height="${drawModule.height}" style="fill: ${drawModule.color};" />`;
|
|
||||||
break;
|
|
||||||
case 'image':
|
|
||||||
/* 绘制图像 */
|
|
||||||
qrHtml += `<image href="${drawModule.imageSrc}" x="${drawModule.x}" y="${drawModule.y}" width="${drawModule.width}" height="${drawModule.height}" />`;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
document.getElementById('qrcode').innerHTML = qrHtml;
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
```
|
|
||||||
|
|
||||||
> 更多用法大家自行探索咯,期待分享哟~
|
|
||||||
|
|
||||||
### 导出临时文件路径
|
|
||||||
|
|
||||||
原生方式基于`Canvas`的,请自行参阅各平台`Canvas`的导出方式。以下是部分示例:
|
|
||||||
|
|
||||||
- uni-app
|
|
||||||
```javascript
|
|
||||||
// 通过uni.createCanvasContext方式创建绘制上下文的,对应导出API为uni.canvasToTempFilePath
|
|
||||||
// 调用完ctx.draw()方法后不能第一时间导出,否则会异常,需要有一定的延时
|
|
||||||
setTimeout(() => {
|
|
||||||
uni.canvasToTempFilePath(
|
|
||||||
{
|
|
||||||
canvasId: this.canvasId,
|
|
||||||
fileType: this.fileType,
|
|
||||||
width: this.canvasWidth,
|
|
||||||
height: this.canvasHeight,
|
|
||||||
success: res => {
|
|
||||||
console.log(res);
|
|
||||||
},
|
|
||||||
fail: err => {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// this // 组件内使用必传当前实例
|
|
||||||
);
|
|
||||||
}, 300);
|
|
||||||
```
|
|
||||||
|
|
||||||
- Canvas2D
|
|
||||||
```javascript
|
|
||||||
// 得到base64
|
|
||||||
console.log(canvas.toDataURL());
|
|
||||||
// 得到buffer
|
|
||||||
console.log(canvas.toBuffer());
|
|
||||||
```
|
|
||||||
|
|
||||||
### 保存二维码到本地相册
|
|
||||||
|
|
||||||
必须在导出临时文件路径成功后再执行保存。uni-app通用保存方式(H5除外):
|
|
||||||
```javascript
|
|
||||||
uni.saveImageToPhotosAlbum({
|
|
||||||
filePath: tempFilePath,
|
|
||||||
success: res => {
|
|
||||||
console.log(res);
|
|
||||||
},
|
|
||||||
fail: err => {
|
|
||||||
console.log(err);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
H5可以通过设置`<a>`标签`href`属性的方式进行保存:
|
|
||||||
```javascript
|
|
||||||
const aEle = document.createElement('a');
|
|
||||||
aEle.download = 'uQRCode'; // 设置下载的文件名,默认是'下载'
|
|
||||||
aEle.href = tempFilePath;
|
|
||||||
document.body.appendChild(aEle);
|
|
||||||
aEle.click();
|
|
||||||
aEle.remove(); // 下载之后把创建的元素删除
|
|
||||||
```
|
|
||||||
经过测试,PC端浏览器可以下载,部分安卓自带或第三方浏览器可以下载,安卓微信浏览器不适用,移动端iOS所有浏览器均不适用,差异较大,还是推荐各位导出文件给图片组件显示,然后提示用户通过长按图片进行保存这种方式。
|
|
||||||
|
|
||||||
## uni-app组件方式
|
|
||||||
|
|
||||||
### 安装
|
|
||||||
|
|
||||||
通过uni-app插件市场地址安装:[https://ext.dcloud.net.cn/plugin?id=1287](https://ext.dcloud.net.cn/plugin?id=1287)。详细配置请移步到:文档 > [uni-app组件](https://uqrcode.cn/doc/document/uni-app.html)。
|
|
||||||
|
|
||||||
### 引入
|
|
||||||
|
|
||||||
uni-app默认为easycom模式,可直接键入`<uqrcode>`标签。
|
|
||||||
|
|
||||||
### 简单用法
|
|
||||||
|
|
||||||
安装`uqrcode`组件后,在`template`中键入`<uqrcode/>`。设置`ref`属性可使用组件内部方法,`canvas-id`属性为组件内部的canvas组件标识,`value`属性为二维码生成对应内容,`options`为配置选项,可配置二维码样式,绘制Logo等,详见:[options](https://uqrcode.cn/doc/document/uni-app.html#options) 。
|
|
||||||
|
|
||||||
``` html
|
|
||||||
<uqrcode ref="uqrcode" canvas-id="qrcode" value="https://uqrcode.cn/doc" :options="{ margin: 10 }"></uqrcode>
|
|
||||||
```
|
|
||||||
|
|
||||||
### 导出临时文件路径
|
|
||||||
|
|
||||||
为了保证方法调用成功,请在 [complete](https://uqrcode.cn/doc/document/uni-app.html#complete) 事件返回`success=true`后调用。
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// uqrcode为组件的ref名称
|
|
||||||
this.$refs.uqrcode.toTempFilePath({
|
|
||||||
success: res => {
|
|
||||||
console.log(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### 保存二维码到本地相册
|
|
||||||
|
|
||||||
为了保证方法调用成功,请在 [complete](https://uqrcode.cn/doc/document/uni-app.html#complete) 事件返回`success=true`后调用。
|
|
||||||
|
|
||||||
```javascript
|
|
||||||
// uqrcode为组件的ref名称
|
|
||||||
this.$refs.uqrcode.save({
|
|
||||||
success: () => {
|
|
||||||
uni.showToast({
|
|
||||||
icon: 'success',
|
|
||||||
title: '保存成功'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## 更多使用说明请前往官方文档查看:[https://uqrcode.cn/doc](https://uqrcode.cn/doc)。
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
## 4.0.6(2022-12-12)
|
|
||||||
修复`getDrawModules`,第一次获取结果正常,后续获取`tile`模块不存在的问题;
|
|
||||||
修复安卓type:normal因Canvas API使用了小数或为0的参数导致生成异常的问题(注:安卓非2d Canvas部分API参数不支持携带小数,部分API参数必须大于0)。
|
|
||||||
## 4.0.1(2022-11-28)
|
|
||||||
优化组件loading属性的表现;
|
|
||||||
新增组件type选项normal,以便于在某些条件编译初始为type=2d时还可以选择使用非2d组件类型;
|
|
||||||
修复组件条件编译在其他编辑器语法提示报错;
|
|
||||||
修复原生对es5的支持。
|
|
||||||
## 4.0.0(2022-11-21)
|
|
||||||
v4版本源代码全面开放,开源地址:[https://github.com/Sansnn/uQRCode](https://github.com/Sansnn/uQRCode);
|
|
||||||
|
|
||||||
升级说明:v4为大版本更新,虽然已尽可能兼容上一代版本,但不可避免的还是存在一些细节差异,若更新后出现问题,请参考对照[v3 文档](https://uqrcode.cn/doc/v3),[v4 文档](https://uqrcode.cn/doc)进行修改。
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
export const cacheImageList = [];
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
function Queue() {
|
|
||||||
let waitingQueue = this.waitingQueue = [];
|
|
||||||
let isRunning = this.isRunning = false; // 记录是否有未完成的任务
|
|
||||||
|
|
||||||
function execute(task, resolve, reject) {
|
|
||||||
task()
|
|
||||||
.then((data) => {
|
|
||||||
resolve(data);
|
|
||||||
})
|
|
||||||
.catch((e) => {
|
|
||||||
reject(e);
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
// 等待任务队列中如果有任务,则触发它;否则设置isRunning = false,表示无任务状态
|
|
||||||
if (waitingQueue.length) {
|
|
||||||
const next = waitingQueue.shift();
|
|
||||||
execute(next.task, next.resolve, next.reject);
|
|
||||||
} else {
|
|
||||||
isRunning = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.exec = function(task) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
if (isRunning) {
|
|
||||||
waitingQueue.push({
|
|
||||||
task,
|
|
||||||
resolve,
|
|
||||||
reject
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
isRunning = true;
|
|
||||||
execute(task, resolve, reject);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 队列实例,某些平台一起使用多个组件时需要通过队列逐一绘制,否则部分绘制方法异常,nvue端的iOS gcanvas尤其明显,在不通过队列绘制时会出现图片丢失的情况 */
|
|
||||||
export const queueDraw = new Queue();
|
|
||||||
export const queueLoadImage = new Queue();
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
declare module '*/common/cache' {
|
|
||||||
export const cacheImageList: Array;
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
declare module '*/common/queue' {
|
|
||||||
export const queueDraw: any;
|
|
||||||
export const queueLoadImage: any;
|
|
||||||
}
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,241 +0,0 @@
|
|||||||
const isWeex = typeof WXEnvironment !== 'undefined';
|
|
||||||
const isWeexIOS = isWeex && /ios/i.test(WXEnvironment.platform);
|
|
||||||
const isWeexAndroid = isWeex && !isWeexIOS;
|
|
||||||
|
|
||||||
import GLmethod from '../context-webgl/GLmethod';
|
|
||||||
|
|
||||||
const GCanvasModule =
|
|
||||||
(typeof weex !== 'undefined' && weex.requireModule) ? (weex.requireModule('gcanvas')) :
|
|
||||||
(typeof __weex_require__ !== 'undefined') ? (__weex_require__('@weex-module/gcanvas')) : {};
|
|
||||||
|
|
||||||
let isDebugging = false;
|
|
||||||
|
|
||||||
let isComboDisabled = false;
|
|
||||||
|
|
||||||
const logCommand = (function () {
|
|
||||||
const methodQuery = [];
|
|
||||||
Object.keys(GLmethod).forEach(key => {
|
|
||||||
methodQuery[GLmethod[key]] = key;
|
|
||||||
})
|
|
||||||
const queryMethod = (id) => {
|
|
||||||
return methodQuery[parseInt(id)] || 'NotFoundMethod';
|
|
||||||
}
|
|
||||||
const logCommand = (id, cmds) => {
|
|
||||||
const mId = cmds.split(',')[0];
|
|
||||||
const mName = queryMethod(mId);
|
|
||||||
console.log(`=== callNative - componentId:${id}; method: ${mName}; cmds: ${cmds}`);
|
|
||||||
}
|
|
||||||
return logCommand;
|
|
||||||
})();
|
|
||||||
|
|
||||||
function joinArray(arr, sep) {
|
|
||||||
let res = '';
|
|
||||||
for (let i = 0; i < arr.length; i++) {
|
|
||||||
if (i !== 0) {
|
|
||||||
res += sep;
|
|
||||||
}
|
|
||||||
res += arr[i];
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
const commandsCache = {}
|
|
||||||
|
|
||||||
const GBridge = {
|
|
||||||
|
|
||||||
callEnable: (ref, configArray) => {
|
|
||||||
|
|
||||||
commandsCache[ref] = [];
|
|
||||||
|
|
||||||
return GCanvasModule.enable({
|
|
||||||
componentId: ref,
|
|
||||||
config: configArray
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
callEnableDebug: () => {
|
|
||||||
isDebugging = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
callEnableDisableCombo: () => {
|
|
||||||
isComboDisabled = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
callSetContextType: function (componentId, context_type) {
|
|
||||||
GCanvasModule.setContextType(context_type, componentId);
|
|
||||||
},
|
|
||||||
|
|
||||||
callReset: function(id){
|
|
||||||
GCanvasModule.resetComponent && canvasModule.resetComponent(componentId);
|
|
||||||
},
|
|
||||||
|
|
||||||
render: isWeexIOS ? function (componentId) {
|
|
||||||
return GCanvasModule.extendCallNative({
|
|
||||||
contextId: componentId,
|
|
||||||
type: 0x60000001
|
|
||||||
});
|
|
||||||
} : function (componentId) {
|
|
||||||
return callGCanvasLinkNative(componentId, 0x60000001, 'render');
|
|
||||||
},
|
|
||||||
|
|
||||||
render2d: isWeexIOS ? function (componentId, commands, callback) {
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
console.log('>>> >>> render2d ===');
|
|
||||||
console.log('>>> commands: ' + commands);
|
|
||||||
}
|
|
||||||
|
|
||||||
GCanvasModule.render([commands, callback?true:false], componentId, callback);
|
|
||||||
|
|
||||||
} : function (componentId, commands,callback) {
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
console.log('>>> >>> render2d ===');
|
|
||||||
console.log('>>> commands: ' + commands);
|
|
||||||
}
|
|
||||||
|
|
||||||
callGCanvasLinkNative(componentId, 0x20000001, commands);
|
|
||||||
if(callback){
|
|
||||||
callback();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
callExtendCallNative: isWeexIOS ? function (componentId, cmdArgs) {
|
|
||||||
|
|
||||||
throw 'should not be here anymore ' + cmdArgs;
|
|
||||||
|
|
||||||
} : function (componentId, cmdArgs) {
|
|
||||||
|
|
||||||
throw 'should not be here anymore ' + cmdArgs;
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
flushNative: isWeexIOS ? function (componentId) {
|
|
||||||
|
|
||||||
const cmdArgs = joinArray(commandsCache[componentId], ';');
|
|
||||||
commandsCache[componentId] = [];
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
console.log('>>> >>> flush native ===');
|
|
||||||
console.log('>>> commands: ' + cmdArgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = GCanvasModule.extendCallNative({
|
|
||||||
"contextId": componentId,
|
|
||||||
"type": 0x60000000,
|
|
||||||
"args": cmdArgs
|
|
||||||
});
|
|
||||||
|
|
||||||
const res = result && result.result;
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
console.log('>>> result: ' + res);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
|
|
||||||
} : function (componentId) {
|
|
||||||
|
|
||||||
const cmdArgs = joinArray(commandsCache[componentId], ';');
|
|
||||||
commandsCache[componentId] = [];
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
console.log('>>> >>> flush native ===');
|
|
||||||
console.log('>>> commands: ' + cmdArgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = callGCanvasLinkNative(componentId, 0x60000000, cmdArgs);
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
console.log('>>> result: ' + result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
|
|
||||||
callNative: function (componentId, cmdArgs, cache) {
|
|
||||||
|
|
||||||
if (isDebugging) {
|
|
||||||
logCommand(componentId, cmdArgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
commandsCache[componentId].push(cmdArgs);
|
|
||||||
|
|
||||||
if (!cache || isComboDisabled) {
|
|
||||||
return GBridge.flushNative(componentId);
|
|
||||||
} else {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
texImage2D(componentId, ...args) {
|
|
||||||
if (isWeexIOS) {
|
|
||||||
if (args.length === 6) {
|
|
||||||
const [target, level, internalformat, format, type, image] = args;
|
|
||||||
GBridge.callNative(
|
|
||||||
componentId,
|
|
||||||
GLmethod.texImage2D + ',' + 6 + ',' + target + ',' + level + ',' + internalformat + ',' + format + ',' + type + ',' + image.src
|
|
||||||
)
|
|
||||||
} else if (args.length === 9) {
|
|
||||||
const [target, level, internalformat, width, height, border, format, type, image] = args;
|
|
||||||
GBridge.callNative(
|
|
||||||
componentId,
|
|
||||||
GLmethod.texImage2D + ',' + 9 + ',' + target + ',' + level + ',' + internalformat + ',' + width + ',' + height + ',' + border + ',' +
|
|
||||||
+ format + ',' + type + ',' + (image ? image.src : 0)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else if (isWeexAndroid) {
|
|
||||||
if (args.length === 6) {
|
|
||||||
const [target, level, internalformat, format, type, image] = args;
|
|
||||||
GCanvasModule.texImage2D(componentId, target, level, internalformat, format, type, image.src);
|
|
||||||
} else if (args.length === 9) {
|
|
||||||
const [target, level, internalformat, width, height, border, format, type, image] = args;
|
|
||||||
GCanvasModule.texImage2D(componentId, target, level, internalformat, width, height, border, format, type, (image ? image.src : 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
texSubImage2D(componentId, target, level, xoffset, yoffset, format, type, image) {
|
|
||||||
if (isWeexIOS) {
|
|
||||||
if (arguments.length === 8) {
|
|
||||||
GBridge.callNative(
|
|
||||||
componentId,
|
|
||||||
GLmethod.texSubImage2D + ',' + 6 + ',' + target + ',' + level + ',' + xoffset + ',' + yoffset, + ',' + format + ',' + type + ',' + image.src
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else if (isWeexAndroid) {
|
|
||||||
GCanvasModule.texSubImage2D(componentId, target, level, xoffset, yoffset, format, type, image.src);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
bindImageTexture(componentId, src, imageId) {
|
|
||||||
GCanvasModule.bindImageTexture([src, imageId], componentId);
|
|
||||||
},
|
|
||||||
|
|
||||||
perloadImage([url, id], callback) {
|
|
||||||
GCanvasModule.preLoadImage([url, id], function (image) {
|
|
||||||
image.url = url;
|
|
||||||
image.id = id;
|
|
||||||
callback(image);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
measureText(text, fontStyle, componentId) {
|
|
||||||
return GCanvasModule.measureText([text, fontStyle], componentId);
|
|
||||||
},
|
|
||||||
|
|
||||||
getImageData (componentId, x, y, w, h, callback) {
|
|
||||||
GCanvasModule.getImageData([x, y,w,h],componentId,callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
putImageData (componentId, data, x, y, w, h, callback) {
|
|
||||||
GCanvasModule.putImageData([x, y,w,h,data],componentId,callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
toTempFilePath(componentId, x, y, width, height, destWidth, destHeight, fileType, quality, callback){
|
|
||||||
GCanvasModule.toTempFilePath([x, y, width,height, destWidth, destHeight, fileType, quality], componentId, callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default GBridge;
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
class FillStyleLinearGradient {
|
|
||||||
|
|
||||||
constructor(x0, y0, x1, y1) {
|
|
||||||
this._start_pos = { _x: x0, _y: y0 };
|
|
||||||
this._end_pos = { _x: x1, _y: y1 };
|
|
||||||
this._stop_count = 0;
|
|
||||||
this._stops = [0, 0, 0, 0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
addColorStop = function (pos, color) {
|
|
||||||
if (this._stop_count < 5 && 0.0 <= pos && pos <= 1.0) {
|
|
||||||
this._stops[this._stop_count] = { _pos: pos, _color: color };
|
|
||||||
this._stop_count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default FillStyleLinearGradient;
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
class FillStylePattern {
|
|
||||||
constructor(img, pattern) {
|
|
||||||
this._style = pattern;
|
|
||||||
this._img = img;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default FillStylePattern;
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
class FillStyleRadialGradient {
|
|
||||||
constructor(x0, y0, r0, x1, y1, r1) {
|
|
||||||
this._start_pos = { _x: x0, _y: y0, _r: r0 };
|
|
||||||
this._end_pos = { _x: x1, _y: y1, _r: r1 };
|
|
||||||
this._stop_count = 0;
|
|
||||||
this._stops = [0, 0, 0, 0, 0];
|
|
||||||
}
|
|
||||||
|
|
||||||
addColorStop(pos, color) {
|
|
||||||
if (this._stop_count < 5 && 0.0 <= pos && pos <= 1.0) {
|
|
||||||
this._stops[this._stop_count] = { _pos: pos, _color: color };
|
|
||||||
this._stop_count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default FillStyleRadialGradient;
|
|
||||||
@@ -1,666 +0,0 @@
|
|||||||
import FillStylePattern from './FillStylePattern';
|
|
||||||
import FillStyleLinearGradient from './FillStyleLinearGradient';
|
|
||||||
import FillStyleRadialGradient from './FillStyleRadialGradient';
|
|
||||||
import GImage from '../env/image.js';
|
|
||||||
import {
|
|
||||||
ArrayBufferToBase64,
|
|
||||||
Base64ToUint8ClampedArray
|
|
||||||
} from '../env/tool.js';
|
|
||||||
|
|
||||||
export default class CanvasRenderingContext2D {
|
|
||||||
|
|
||||||
_drawCommands = '';
|
|
||||||
|
|
||||||
_globalAlpha = 1.0;
|
|
||||||
|
|
||||||
_fillStyle = 'rgb(0,0,0)';
|
|
||||||
_strokeStyle = 'rgb(0,0,0)';
|
|
||||||
|
|
||||||
_lineWidth = 1;
|
|
||||||
_lineCap = 'butt';
|
|
||||||
_lineJoin = 'miter';
|
|
||||||
|
|
||||||
_miterLimit = 10;
|
|
||||||
|
|
||||||
_globalCompositeOperation = 'source-over';
|
|
||||||
|
|
||||||
_textAlign = 'start';
|
|
||||||
_textBaseline = 'alphabetic';
|
|
||||||
|
|
||||||
_font = '10px sans-serif';
|
|
||||||
|
|
||||||
_savedGlobalAlpha = [];
|
|
||||||
|
|
||||||
timer = null;
|
|
||||||
componentId = null;
|
|
||||||
|
|
||||||
_notCommitDrawImageCache = [];
|
|
||||||
_needRedrawImageCache = [];
|
|
||||||
_redrawCommands = '';
|
|
||||||
_autoSaveContext = true;
|
|
||||||
// _imageMap = new GHashMap();
|
|
||||||
// _textureMap = new GHashMap();
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
this.className = 'CanvasRenderingContext2D';
|
|
||||||
//this.save()
|
|
||||||
}
|
|
||||||
|
|
||||||
setFillStyle(value) {
|
|
||||||
this.fillStyle = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set fillStyle(value) {
|
|
||||||
this._fillStyle = value;
|
|
||||||
|
|
||||||
if (typeof(value) == 'string') {
|
|
||||||
this._drawCommands = this._drawCommands.concat("F" + value + ";");
|
|
||||||
} else if (value instanceof FillStylePattern) {
|
|
||||||
const image = value._img;
|
|
||||||
if (!image.complete) {
|
|
||||||
image.onload = () => {
|
|
||||||
var index = this._needRedrawImageCache.indexOf(image);
|
|
||||||
if (index > -1) {
|
|
||||||
this._needRedrawImageCache.splice(index, 1);
|
|
||||||
CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id);
|
|
||||||
this._redrawflush(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._notCommitDrawImageCache.push(image);
|
|
||||||
} else {
|
|
||||||
CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id);
|
|
||||||
}
|
|
||||||
|
|
||||||
//CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id);
|
|
||||||
this._drawCommands = this._drawCommands.concat("G" + image._id + "," + value._style + ";");
|
|
||||||
} else if (value instanceof FillStyleLinearGradient) {
|
|
||||||
var command = "D" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," +
|
|
||||||
value._end_pos._x.toFixed(2) + "," + value._end_pos._y.toFixed(2) + "," +
|
|
||||||
value._stop_count;
|
|
||||||
for (var i = 0; i < value._stop_count; ++i) {
|
|
||||||
command += ("," + value._stops[i]._pos + "," + value._stops[i]._color);
|
|
||||||
}
|
|
||||||
this._drawCommands = this._drawCommands.concat(command + ";");
|
|
||||||
} else if (value instanceof FillStyleRadialGradient) {
|
|
||||||
var command = "H" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," + value._start_pos._r
|
|
||||||
.toFixed(2) + "," +
|
|
||||||
value._end_pos._x.toFixed(2) + "," + value._end_pos._y.toFixed(2) + "," + value._end_pos._r.toFixed(2) + "," +
|
|
||||||
value._stop_count;
|
|
||||||
for (var i = 0; i < value._stop_count; ++i) {
|
|
||||||
command += ("," + value._stops[i]._pos + "," + value._stops[i]._color);
|
|
||||||
}
|
|
||||||
this._drawCommands = this._drawCommands.concat(command + ";");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get fillStyle() {
|
|
||||||
return this._fillStyle;
|
|
||||||
}
|
|
||||||
|
|
||||||
get globalAlpha() {
|
|
||||||
return this._globalAlpha;
|
|
||||||
}
|
|
||||||
|
|
||||||
setGlobalAlpha(value) {
|
|
||||||
this.globalAlpha = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set globalAlpha(value) {
|
|
||||||
this._globalAlpha = value;
|
|
||||||
this._drawCommands = this._drawCommands.concat("a" + value.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
get strokeStyle() {
|
|
||||||
return this._strokeStyle;
|
|
||||||
}
|
|
||||||
|
|
||||||
setStrokeStyle(value) {
|
|
||||||
this.strokeStyle = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set strokeStyle(value) {
|
|
||||||
|
|
||||||
this._strokeStyle = value;
|
|
||||||
|
|
||||||
if (typeof(value) == 'string') {
|
|
||||||
this._drawCommands = this._drawCommands.concat("S" + value + ";");
|
|
||||||
} else if (value instanceof FillStylePattern) {
|
|
||||||
CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id);
|
|
||||||
this._drawCommands = this._drawCommands.concat("G" + image._id + "," + value._style + ";");
|
|
||||||
} else if (value instanceof FillStyleLinearGradient) {
|
|
||||||
var command = "D" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," +
|
|
||||||
value._end_pos._x.toFixed(2) + "," + value._end_pos._y.toFixed(2) + "," +
|
|
||||||
value._stop_count;
|
|
||||||
|
|
||||||
for (var i = 0; i < value._stop_count; ++i) {
|
|
||||||
command += ("," + value._stops[i]._pos + "," + value._stops[i]._color);
|
|
||||||
}
|
|
||||||
this._drawCommands = this._drawCommands.concat(command + ";");
|
|
||||||
} else if (value instanceof FillStyleRadialGradient) {
|
|
||||||
var command = "H" + value._start_pos._x.toFixed(2) + "," + value._start_pos._y.toFixed(2) + "," + value._start_pos._r
|
|
||||||
.toFixed(2) + "," +
|
|
||||||
value._end_pos._x.toFixed(2) + "," + value._end_pos._y + ",".toFixed(2) + value._end_pos._r.toFixed(2) + "," +
|
|
||||||
value._stop_count;
|
|
||||||
|
|
||||||
for (var i = 0; i < value._stop_count; ++i) {
|
|
||||||
command += ("," + value._stops[i]._pos + "," + value._stops[i]._color);
|
|
||||||
}
|
|
||||||
this._drawCommands = this._drawCommands.concat(command + ";");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
get lineWidth() {
|
|
||||||
return this._lineWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
setLineWidth(value) {
|
|
||||||
this.lineWidth = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set lineWidth(value) {
|
|
||||||
this._lineWidth = value;
|
|
||||||
this._drawCommands = this._drawCommands.concat("W" + value + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get lineCap() {
|
|
||||||
return this._lineCap;
|
|
||||||
}
|
|
||||||
|
|
||||||
setLineCap(value) {
|
|
||||||
this.lineCap = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
set lineCap(value) {
|
|
||||||
this._lineCap = value;
|
|
||||||
this._drawCommands = this._drawCommands.concat("C" + value + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get lineJoin() {
|
|
||||||
return this._lineJoin;
|
|
||||||
}
|
|
||||||
|
|
||||||
setLineJoin(value) {
|
|
||||||
this.lineJoin = value
|
|
||||||
}
|
|
||||||
|
|
||||||
set lineJoin(value) {
|
|
||||||
this._lineJoin = value;
|
|
||||||
this._drawCommands = this._drawCommands.concat("J" + value + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get miterLimit() {
|
|
||||||
return this._miterLimit;
|
|
||||||
}
|
|
||||||
|
|
||||||
setMiterLimit(value) {
|
|
||||||
this.miterLimit = value
|
|
||||||
}
|
|
||||||
|
|
||||||
set miterLimit(value) {
|
|
||||||
this._miterLimit = value;
|
|
||||||
this._drawCommands = this._drawCommands.concat("M" + value + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get globalCompositeOperation() {
|
|
||||||
return this._globalCompositeOperation;
|
|
||||||
}
|
|
||||||
|
|
||||||
set globalCompositeOperation(value) {
|
|
||||||
|
|
||||||
this._globalCompositeOperation = value;
|
|
||||||
let mode = 0;
|
|
||||||
switch (value) {
|
|
||||||
case "source-over":
|
|
||||||
mode = 0;
|
|
||||||
break;
|
|
||||||
case "source-atop":
|
|
||||||
mode = 5;
|
|
||||||
break;
|
|
||||||
case "source-in":
|
|
||||||
mode = 0;
|
|
||||||
break;
|
|
||||||
case "source-out":
|
|
||||||
mode = 2;
|
|
||||||
break;
|
|
||||||
case "destination-over":
|
|
||||||
mode = 4;
|
|
||||||
break;
|
|
||||||
case "destination-atop":
|
|
||||||
mode = 4;
|
|
||||||
break;
|
|
||||||
case "destination-in":
|
|
||||||
mode = 4;
|
|
||||||
break;
|
|
||||||
case "destination-out":
|
|
||||||
mode = 3;
|
|
||||||
break;
|
|
||||||
case "lighter":
|
|
||||||
mode = 1;
|
|
||||||
break;
|
|
||||||
case "copy":
|
|
||||||
mode = 2;
|
|
||||||
break;
|
|
||||||
case "xor":
|
|
||||||
mode = 6;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
mode = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._drawCommands = this._drawCommands.concat("B" + mode + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get textAlign() {
|
|
||||||
return this._textAlign;
|
|
||||||
}
|
|
||||||
|
|
||||||
setTextAlign(value) {
|
|
||||||
this.textAlign = value
|
|
||||||
}
|
|
||||||
|
|
||||||
set textAlign(value) {
|
|
||||||
|
|
||||||
this._textAlign = value;
|
|
||||||
let Align = 0;
|
|
||||||
switch (value) {
|
|
||||||
case "start":
|
|
||||||
Align = 0;
|
|
||||||
break;
|
|
||||||
case "end":
|
|
||||||
Align = 1;
|
|
||||||
break;
|
|
||||||
case "left":
|
|
||||||
Align = 2;
|
|
||||||
break;
|
|
||||||
case "center":
|
|
||||||
Align = 3;
|
|
||||||
break;
|
|
||||||
case "right":
|
|
||||||
Align = 4;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Align = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._drawCommands = this._drawCommands.concat("A" + Align + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get textBaseline() {
|
|
||||||
return this._textBaseline;
|
|
||||||
}
|
|
||||||
|
|
||||||
setTextBaseline(value) {
|
|
||||||
this.textBaseline = value
|
|
||||||
}
|
|
||||||
|
|
||||||
set textBaseline(value) {
|
|
||||||
this._textBaseline = value;
|
|
||||||
let baseline = 0;
|
|
||||||
switch (value) {
|
|
||||||
case "alphabetic":
|
|
||||||
baseline = 0;
|
|
||||||
break;
|
|
||||||
case "middle":
|
|
||||||
baseline = 1;
|
|
||||||
break;
|
|
||||||
case "top":
|
|
||||||
baseline = 2;
|
|
||||||
break;
|
|
||||||
case "hanging":
|
|
||||||
baseline = 3;
|
|
||||||
break;
|
|
||||||
case "bottom":
|
|
||||||
baseline = 4;
|
|
||||||
break;
|
|
||||||
case "ideographic":
|
|
||||||
baseline = 5;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
baseline = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._drawCommands = this._drawCommands.concat("E" + baseline + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
get font() {
|
|
||||||
return this._font;
|
|
||||||
}
|
|
||||||
|
|
||||||
setFontSize(size) {
|
|
||||||
var str = this._font;
|
|
||||||
var strs = str.trim().split(/\s+/);
|
|
||||||
for (var i = 0; i < strs.length; i++) {
|
|
||||||
var values = ["normal", "italic", "oblique", "normal", "small-caps", "normal", "bold",
|
|
||||||
"bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900",
|
|
||||||
"normal", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed",
|
|
||||||
"semi-expanded", "expanded", "extra-expanded", "ultra-expanded"
|
|
||||||
];
|
|
||||||
|
|
||||||
if (-1 == values.indexOf(strs[i].trim())) {
|
|
||||||
if (typeof size === 'string') {
|
|
||||||
strs[i] = size;
|
|
||||||
} else if (typeof size === 'number') {
|
|
||||||
strs[i] = String(size) + 'px';
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.font = strs.join(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
set font(value) {
|
|
||||||
this._font = value;
|
|
||||||
this._drawCommands = this._drawCommands.concat("j" + value + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
setTransform(a, b, c, d, tx, ty) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("t" +
|
|
||||||
(a === 1 ? "1" : a.toFixed(2)) + "," +
|
|
||||||
(b === 0 ? "0" : b.toFixed(2)) + "," +
|
|
||||||
(c === 0 ? "0" : c.toFixed(2)) + "," +
|
|
||||||
(d === 1 ? "1" : d.toFixed(2)) + "," + tx.toFixed(2) + "," + ty.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
transform(a, b, c, d, tx, ty) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("f" +
|
|
||||||
(a === 1 ? "1" : a.toFixed(2)) + "," +
|
|
||||||
(b === 0 ? "0" : b.toFixed(2)) + "," +
|
|
||||||
(c === 0 ? "0" : c.toFixed(2)) + "," +
|
|
||||||
(d === 1 ? "1" : d.toFixed(2)) + "," + tx + "," + ty + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
resetTransform() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("m;");
|
|
||||||
}
|
|
||||||
|
|
||||||
scale(a, d) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("k" + a.toFixed(2) + "," +
|
|
||||||
d.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
rotate(angle) {
|
|
||||||
this._drawCommands = this._drawCommands
|
|
||||||
.concat("r" + angle.toFixed(6) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
translate(tx, ty) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("l" + tx.toFixed(2) + "," + ty.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
save() {
|
|
||||||
this._savedGlobalAlpha.push(this._globalAlpha);
|
|
||||||
this._drawCommands = this._drawCommands.concat("v;");
|
|
||||||
}
|
|
||||||
|
|
||||||
restore() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("e;");
|
|
||||||
this._globalAlpha = this._savedGlobalAlpha.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
createPattern(img, pattern) {
|
|
||||||
if (typeof img === 'string') {
|
|
||||||
var imgObj = new GImage();
|
|
||||||
imgObj.src = img;
|
|
||||||
img = imgObj;
|
|
||||||
}
|
|
||||||
return new FillStylePattern(img, pattern);
|
|
||||||
}
|
|
||||||
|
|
||||||
createLinearGradient(x0, y0, x1, y1) {
|
|
||||||
return new FillStyleLinearGradient(x0, y0, x1, y1);
|
|
||||||
}
|
|
||||||
|
|
||||||
createRadialGradient = function(x0, y0, r0, x1, y1, r1) {
|
|
||||||
return new FillStyleRadialGradient(x0, y0, r0, x1, y1, r1);
|
|
||||||
};
|
|
||||||
|
|
||||||
createCircularGradient = function(x0, y0, r0) {
|
|
||||||
return new FillStyleRadialGradient(x0, y0, 0, x0, y0, r0);
|
|
||||||
};
|
|
||||||
|
|
||||||
strokeRect(x, y, w, h) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("s" + x + "," + y + "," + w + "," + h + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
clearRect(x, y, w, h) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("c" + x + "," + y + "," + w +
|
|
||||||
"," + h + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
clip() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("p;");
|
|
||||||
}
|
|
||||||
|
|
||||||
resetClip() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("q;");
|
|
||||||
}
|
|
||||||
|
|
||||||
closePath() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("o;");
|
|
||||||
}
|
|
||||||
|
|
||||||
moveTo(x, y) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("g" + x.toFixed(2) + "," + y.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
lineTo(x, y) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("i" + x.toFixed(2) + "," + y.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
quadraticCurveTo = function(cpx, cpy, x, y) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("u" + cpx + "," + cpy + "," + x + "," + y + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y, ) {
|
|
||||||
this._drawCommands = this._drawCommands.concat(
|
|
||||||
"z" + cp1x.toFixed(2) + "," + cp1y.toFixed(2) + "," + cp2x.toFixed(2) + "," + cp2y.toFixed(2) + "," +
|
|
||||||
x.toFixed(2) + "," + y.toFixed(2) + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
arcTo(x1, y1, x2, y2, radius) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("h" + x1 + "," + y1 + "," + x2 + "," + y2 + "," + radius + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
beginPath() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("b;");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fillRect(x, y, w, h) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("n" + x + "," + y + "," + w +
|
|
||||||
"," + h + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
rect(x, y, w, h) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("w" + x + "," + y + "," + w + "," + h + ";");
|
|
||||||
}
|
|
||||||
|
|
||||||
fill() {
|
|
||||||
this._drawCommands = this._drawCommands.concat("L;");
|
|
||||||
}
|
|
||||||
|
|
||||||
stroke(path) {
|
|
||||||
this._drawCommands = this._drawCommands.concat("x;");
|
|
||||||
}
|
|
||||||
|
|
||||||
arc(x, y, radius, startAngle, endAngle, anticlockwise) {
|
|
||||||
|
|
||||||
let ianticlockwise = 0;
|
|
||||||
if (anticlockwise) {
|
|
||||||
ianticlockwise = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._drawCommands = this._drawCommands.concat(
|
|
||||||
"y" + x.toFixed(2) + "," + y.toFixed(2) + "," +
|
|
||||||
radius.toFixed(2) + "," + startAngle + "," + endAngle + "," + ianticlockwise +
|
|
||||||
";"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
fillText(text, x, y) {
|
|
||||||
let tmptext = text.replace(/!/g, "!!");
|
|
||||||
tmptext = tmptext.replace(/,/g, "!,");
|
|
||||||
tmptext = tmptext.replace(/;/g, "!;");
|
|
||||||
this._drawCommands = this._drawCommands.concat("T" + tmptext + "," + x + "," + y + ",0.0;");
|
|
||||||
}
|
|
||||||
|
|
||||||
strokeText = function(text, x, y) {
|
|
||||||
let tmptext = text.replace(/!/g, "!!");
|
|
||||||
tmptext = tmptext.replace(/,/g, "!,");
|
|
||||||
tmptext = tmptext.replace(/;/g, "!;");
|
|
||||||
this._drawCommands = this._drawCommands.concat("U" + tmptext + "," + x + "," + y + ",0.0;");
|
|
||||||
}
|
|
||||||
|
|
||||||
measureText(text) {
|
|
||||||
return CanvasRenderingContext2D.GBridge.measureText(text, this.font, this.componentId);
|
|
||||||
}
|
|
||||||
|
|
||||||
isPointInPath = function(x, y) {
|
|
||||||
throw new Error('GCanvas not supported yet');
|
|
||||||
}
|
|
||||||
|
|
||||||
drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) {
|
|
||||||
if (typeof image === 'string') {
|
|
||||||
var imgObj = new GImage();
|
|
||||||
imgObj.src = image;
|
|
||||||
image = imgObj;
|
|
||||||
}
|
|
||||||
if (image instanceof GImage) {
|
|
||||||
if (!image.complete) {
|
|
||||||
imgObj.onload = () => {
|
|
||||||
var index = this._needRedrawImageCache.indexOf(image);
|
|
||||||
if (index > -1) {
|
|
||||||
this._needRedrawImageCache.splice(index, 1);
|
|
||||||
CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id);
|
|
||||||
this._redrawflush(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._notCommitDrawImageCache.push(image);
|
|
||||||
} else {
|
|
||||||
CanvasRenderingContext2D.GBridge.bindImageTexture(this.componentId, image.src, image._id);
|
|
||||||
}
|
|
||||||
var srcArgs = [image, sx, sy, sw, sh, dx, dy, dw, dh];
|
|
||||||
var args = [];
|
|
||||||
for (var arg in srcArgs) {
|
|
||||||
if (typeof(srcArgs[arg]) != 'undefined') {
|
|
||||||
args.push(srcArgs[arg]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.__drawImage.apply(this, args);
|
|
||||||
//this.__drawImage(image,sx, sy, sw, sh, dx, dy, dw, dh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
__drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) {
|
|
||||||
const numArgs = arguments.length;
|
|
||||||
|
|
||||||
function drawImageCommands() {
|
|
||||||
|
|
||||||
if (numArgs === 3) {
|
|
||||||
const x = parseFloat(sx) || 0.0;
|
|
||||||
const y = parseFloat(sy) || 0.0;
|
|
||||||
|
|
||||||
return ("d" + image._id + ",0,0," +
|
|
||||||
image.width + "," + image.height + "," +
|
|
||||||
x + "," + y + "," + image.width + "," + image.height + ";");
|
|
||||||
} else if (numArgs === 5) {
|
|
||||||
const x = parseFloat(sx) || 0.0;
|
|
||||||
const y = parseFloat(sy) || 0.0;
|
|
||||||
const width = parseInt(sw) || image.width;
|
|
||||||
const height = parseInt(sh) || image.height;
|
|
||||||
|
|
||||||
return ("d" + image._id + ",0,0," +
|
|
||||||
image.width + "," + image.height + "," +
|
|
||||||
x + "," + y + "," + width + "," + height + ";");
|
|
||||||
} else if (numArgs === 9) {
|
|
||||||
sx = parseFloat(sx) || 0.0;
|
|
||||||
sy = parseFloat(sy) || 0.0;
|
|
||||||
sw = parseInt(sw) || image.width;
|
|
||||||
sh = parseInt(sh) || image.height;
|
|
||||||
dx = parseFloat(dx) || 0.0;
|
|
||||||
dy = parseFloat(dy) || 0.0;
|
|
||||||
dw = parseInt(dw) || image.width;
|
|
||||||
dh = parseInt(dh) || image.height;
|
|
||||||
|
|
||||||
return ("d" + image._id + "," +
|
|
||||||
sx + "," + sy + "," + sw + "," + sh + "," +
|
|
||||||
dx + "," + dy + "," + dw + "," + dh + ";");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._drawCommands += drawImageCommands();
|
|
||||||
}
|
|
||||||
|
|
||||||
_flush(reserve, callback) {
|
|
||||||
const commands = this._drawCommands;
|
|
||||||
this._drawCommands = '';
|
|
||||||
CanvasRenderingContext2D.GBridge.render2d(this.componentId, commands, callback);
|
|
||||||
this._needRender = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_redrawflush(reserve, callback) {
|
|
||||||
const commands = this._redrawCommands;
|
|
||||||
CanvasRenderingContext2D.GBridge.render2d(this.componentId, commands, callback);
|
|
||||||
if (this._needRedrawImageCache.length == 0) {
|
|
||||||
this._redrawCommands = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
draw(reserve, callback) {
|
|
||||||
if (!reserve) {
|
|
||||||
this._globalAlpha = this._savedGlobalAlpha.pop();
|
|
||||||
this._savedGlobalAlpha.push(this._globalAlpha);
|
|
||||||
this._redrawCommands = this._drawCommands;
|
|
||||||
this._needRedrawImageCache = this._notCommitDrawImageCache;
|
|
||||||
if (this._autoSaveContext) {
|
|
||||||
this._drawCommands = ("v;" + this._drawCommands);
|
|
||||||
this._autoSaveContext = false;
|
|
||||||
} else {
|
|
||||||
this._drawCommands = ("e;X;v;" + this._drawCommands);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this._needRedrawImageCache = this._needRedrawImageCache.concat(this._notCommitDrawImageCache);
|
|
||||||
this._redrawCommands += this._drawCommands;
|
|
||||||
if (this._autoSaveContext) {
|
|
||||||
this._drawCommands = ("v;" + this._drawCommands);
|
|
||||||
this._autoSaveContext = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this._notCommitDrawImageCache = [];
|
|
||||||
if (this._flush) {
|
|
||||||
this._flush(reserve, callback);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getImageData(x, y, w, h, callback) {
|
|
||||||
CanvasRenderingContext2D.GBridge.getImageData(this.componentId, x, y, w, h, function(res) {
|
|
||||||
res.data = Base64ToUint8ClampedArray(res.data);
|
|
||||||
if (typeof(callback) == 'function') {
|
|
||||||
callback(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
putImageData(data, x, y, w, h, callback) {
|
|
||||||
if (data instanceof Uint8ClampedArray) {
|
|
||||||
data = ArrayBufferToBase64(data);
|
|
||||||
CanvasRenderingContext2D.GBridge.putImageData(this.componentId, data, x, y, w, h, function(res) {
|
|
||||||
if (typeof(callback) == 'function') {
|
|
||||||
callback(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
toTempFilePath(x, y, width, height, destWidth, destHeight, fileType, quality, callback) {
|
|
||||||
CanvasRenderingContext2D.GBridge.toTempFilePath(this.componentId, x, y, width, height, destWidth, destHeight,
|
|
||||||
fileType, quality,
|
|
||||||
function(res) {
|
|
||||||
if (typeof(callback) == 'function') {
|
|
||||||
callback(res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
export default class WebGLActiveInfo {
|
|
||||||
className = 'WebGLActiveInfo';
|
|
||||||
|
|
||||||
constructor({
|
|
||||||
type, name, size
|
|
||||||
}) {
|
|
||||||
this.type = type;
|
|
||||||
this.name = name;
|
|
||||||
this.size = size;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLBuffer';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLBuffer {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLFrameBuffer';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLFramebuffer {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,298 +0,0 @@
|
|||||||
export default {
|
|
||||||
"DEPTH_BUFFER_BIT": 256,
|
|
||||||
"STENCIL_BUFFER_BIT": 1024,
|
|
||||||
"COLOR_BUFFER_BIT": 16384,
|
|
||||||
"POINTS": 0,
|
|
||||||
"LINES": 1,
|
|
||||||
"LINE_LOOP": 2,
|
|
||||||
"LINE_STRIP": 3,
|
|
||||||
"TRIANGLES": 4,
|
|
||||||
"TRIANGLE_STRIP": 5,
|
|
||||||
"TRIANGLE_FAN": 6,
|
|
||||||
"ZERO": 0,
|
|
||||||
"ONE": 1,
|
|
||||||
"SRC_COLOR": 768,
|
|
||||||
"ONE_MINUS_SRC_COLOR": 769,
|
|
||||||
"SRC_ALPHA": 770,
|
|
||||||
"ONE_MINUS_SRC_ALPHA": 771,
|
|
||||||
"DST_ALPHA": 772,
|
|
||||||
"ONE_MINUS_DST_ALPHA": 773,
|
|
||||||
"DST_COLOR": 774,
|
|
||||||
"ONE_MINUS_DST_COLOR": 775,
|
|
||||||
"SRC_ALPHA_SATURATE": 776,
|
|
||||||
"FUNC_ADD": 32774,
|
|
||||||
"BLEND_EQUATION": 32777,
|
|
||||||
"BLEND_EQUATION_RGB": 32777,
|
|
||||||
"BLEND_EQUATION_ALPHA": 34877,
|
|
||||||
"FUNC_SUBTRACT": 32778,
|
|
||||||
"FUNC_REVERSE_SUBTRACT": 32779,
|
|
||||||
"BLEND_DST_RGB": 32968,
|
|
||||||
"BLEND_SRC_RGB": 32969,
|
|
||||||
"BLEND_DST_ALPHA": 32970,
|
|
||||||
"BLEND_SRC_ALPHA": 32971,
|
|
||||||
"CONSTANT_COLOR": 32769,
|
|
||||||
"ONE_MINUS_CONSTANT_COLOR": 32770,
|
|
||||||
"CONSTANT_ALPHA": 32771,
|
|
||||||
"ONE_MINUS_CONSTANT_ALPHA": 32772,
|
|
||||||
"BLEND_COLOR": 32773,
|
|
||||||
"ARRAY_BUFFER": 34962,
|
|
||||||
"ELEMENT_ARRAY_BUFFER": 34963,
|
|
||||||
"ARRAY_BUFFER_BINDING": 34964,
|
|
||||||
"ELEMENT_ARRAY_BUFFER_BINDING": 34965,
|
|
||||||
"STREAM_DRAW": 35040,
|
|
||||||
"STATIC_DRAW": 35044,
|
|
||||||
"DYNAMIC_DRAW": 35048,
|
|
||||||
"BUFFER_SIZE": 34660,
|
|
||||||
"BUFFER_USAGE": 34661,
|
|
||||||
"CURRENT_VERTEX_ATTRIB": 34342,
|
|
||||||
"FRONT": 1028,
|
|
||||||
"BACK": 1029,
|
|
||||||
"FRONT_AND_BACK": 1032,
|
|
||||||
"TEXTURE_2D": 3553,
|
|
||||||
"CULL_FACE": 2884,
|
|
||||||
"BLEND": 3042,
|
|
||||||
"DITHER": 3024,
|
|
||||||
"STENCIL_TEST": 2960,
|
|
||||||
"DEPTH_TEST": 2929,
|
|
||||||
"SCISSOR_TEST": 3089,
|
|
||||||
"POLYGON_OFFSET_FILL": 32823,
|
|
||||||
"SAMPLE_ALPHA_TO_COVERAGE": 32926,
|
|
||||||
"SAMPLE_COVERAGE": 32928,
|
|
||||||
"NO_ERROR": 0,
|
|
||||||
"INVALID_ENUM": 1280,
|
|
||||||
"INVALID_VALUE": 1281,
|
|
||||||
"INVALID_OPERATION": 1282,
|
|
||||||
"OUT_OF_MEMORY": 1285,
|
|
||||||
"CW": 2304,
|
|
||||||
"CCW": 2305,
|
|
||||||
"LINE_WIDTH": 2849,
|
|
||||||
"ALIASED_POINT_SIZE_RANGE": 33901,
|
|
||||||
"ALIASED_LINE_WIDTH_RANGE": 33902,
|
|
||||||
"CULL_FACE_MODE": 2885,
|
|
||||||
"FRONT_FACE": 2886,
|
|
||||||
"DEPTH_RANGE": 2928,
|
|
||||||
"DEPTH_WRITEMASK": 2930,
|
|
||||||
"DEPTH_CLEAR_VALUE": 2931,
|
|
||||||
"DEPTH_FUNC": 2932,
|
|
||||||
"STENCIL_CLEAR_VALUE": 2961,
|
|
||||||
"STENCIL_FUNC": 2962,
|
|
||||||
"STENCIL_FAIL": 2964,
|
|
||||||
"STENCIL_PASS_DEPTH_FAIL": 2965,
|
|
||||||
"STENCIL_PASS_DEPTH_PASS": 2966,
|
|
||||||
"STENCIL_REF": 2967,
|
|
||||||
"STENCIL_VALUE_MASK": 2963,
|
|
||||||
"STENCIL_WRITEMASK": 2968,
|
|
||||||
"STENCIL_BACK_FUNC": 34816,
|
|
||||||
"STENCIL_BACK_FAIL": 34817,
|
|
||||||
"STENCIL_BACK_PASS_DEPTH_FAIL": 34818,
|
|
||||||
"STENCIL_BACK_PASS_DEPTH_PASS": 34819,
|
|
||||||
"STENCIL_BACK_REF": 36003,
|
|
||||||
"STENCIL_BACK_VALUE_MASK": 36004,
|
|
||||||
"STENCIL_BACK_WRITEMASK": 36005,
|
|
||||||
"VIEWPORT": 2978,
|
|
||||||
"SCISSOR_BOX": 3088,
|
|
||||||
"COLOR_CLEAR_VALUE": 3106,
|
|
||||||
"COLOR_WRITEMASK": 3107,
|
|
||||||
"UNPACK_ALIGNMENT": 3317,
|
|
||||||
"PACK_ALIGNMENT": 3333,
|
|
||||||
"MAX_TEXTURE_SIZE": 3379,
|
|
||||||
"MAX_VIEWPORT_DIMS": 3386,
|
|
||||||
"SUBPIXEL_BITS": 3408,
|
|
||||||
"RED_BITS": 3410,
|
|
||||||
"GREEN_BITS": 3411,
|
|
||||||
"BLUE_BITS": 3412,
|
|
||||||
"ALPHA_BITS": 3413,
|
|
||||||
"DEPTH_BITS": 3414,
|
|
||||||
"STENCIL_BITS": 3415,
|
|
||||||
"POLYGON_OFFSET_UNITS": 10752,
|
|
||||||
"POLYGON_OFFSET_FACTOR": 32824,
|
|
||||||
"TEXTURE_BINDING_2D": 32873,
|
|
||||||
"SAMPLE_BUFFERS": 32936,
|
|
||||||
"SAMPLES": 32937,
|
|
||||||
"SAMPLE_COVERAGE_VALUE": 32938,
|
|
||||||
"SAMPLE_COVERAGE_INVERT": 32939,
|
|
||||||
"COMPRESSED_TEXTURE_FORMATS": 34467,
|
|
||||||
"DONT_CARE": 4352,
|
|
||||||
"FASTEST": 4353,
|
|
||||||
"NICEST": 4354,
|
|
||||||
"GENERATE_MIPMAP_HINT": 33170,
|
|
||||||
"BYTE": 5120,
|
|
||||||
"UNSIGNED_BYTE": 5121,
|
|
||||||
"SHORT": 5122,
|
|
||||||
"UNSIGNED_SHORT": 5123,
|
|
||||||
"INT": 5124,
|
|
||||||
"UNSIGNED_INT": 5125,
|
|
||||||
"FLOAT": 5126,
|
|
||||||
"DEPTH_COMPONENT": 6402,
|
|
||||||
"ALPHA": 6406,
|
|
||||||
"RGB": 6407,
|
|
||||||
"RGBA": 6408,
|
|
||||||
"LUMINANCE": 6409,
|
|
||||||
"LUMINANCE_ALPHA": 6410,
|
|
||||||
"UNSIGNED_SHORT_4_4_4_4": 32819,
|
|
||||||
"UNSIGNED_SHORT_5_5_5_1": 32820,
|
|
||||||
"UNSIGNED_SHORT_5_6_5": 33635,
|
|
||||||
"FRAGMENT_SHADER": 35632,
|
|
||||||
"VERTEX_SHADER": 35633,
|
|
||||||
"MAX_VERTEX_ATTRIBS": 34921,
|
|
||||||
"MAX_VERTEX_UNIFORM_VECTORS": 36347,
|
|
||||||
"MAX_VARYING_VECTORS": 36348,
|
|
||||||
"MAX_COMBINED_TEXTURE_IMAGE_UNITS": 35661,
|
|
||||||
"MAX_VERTEX_TEXTURE_IMAGE_UNITS": 35660,
|
|
||||||
"MAX_TEXTURE_IMAGE_UNITS": 34930,
|
|
||||||
"MAX_FRAGMENT_UNIFORM_VECTORS": 36349,
|
|
||||||
"SHADER_TYPE": 35663,
|
|
||||||
"DELETE_STATUS": 35712,
|
|
||||||
"LINK_STATUS": 35714,
|
|
||||||
"VALIDATE_STATUS": 35715,
|
|
||||||
"ATTACHED_SHADERS": 35717,
|
|
||||||
"ACTIVE_UNIFORMS": 35718,
|
|
||||||
"ACTIVE_ATTRIBUTES": 35721,
|
|
||||||
"SHADING_LANGUAGE_VERSION": 35724,
|
|
||||||
"CURRENT_PROGRAM": 35725,
|
|
||||||
"NEVER": 512,
|
|
||||||
"LESS": 513,
|
|
||||||
"EQUAL": 514,
|
|
||||||
"LEQUAL": 515,
|
|
||||||
"GREATER": 516,
|
|
||||||
"NOTEQUAL": 517,
|
|
||||||
"GEQUAL": 518,
|
|
||||||
"ALWAYS": 519,
|
|
||||||
"KEEP": 7680,
|
|
||||||
"REPLACE": 7681,
|
|
||||||
"INCR": 7682,
|
|
||||||
"DECR": 7683,
|
|
||||||
"INVERT": 5386,
|
|
||||||
"INCR_WRAP": 34055,
|
|
||||||
"DECR_WRAP": 34056,
|
|
||||||
"VENDOR": 7936,
|
|
||||||
"RENDERER": 7937,
|
|
||||||
"VERSION": 7938,
|
|
||||||
"NEAREST": 9728,
|
|
||||||
"LINEAR": 9729,
|
|
||||||
"NEAREST_MIPMAP_NEAREST": 9984,
|
|
||||||
"LINEAR_MIPMAP_NEAREST": 9985,
|
|
||||||
"NEAREST_MIPMAP_LINEAR": 9986,
|
|
||||||
"LINEAR_MIPMAP_LINEAR": 9987,
|
|
||||||
"TEXTURE_MAG_FILTER": 10240,
|
|
||||||
"TEXTURE_MIN_FILTER": 10241,
|
|
||||||
"TEXTURE_WRAP_S": 10242,
|
|
||||||
"TEXTURE_WRAP_T": 10243,
|
|
||||||
"TEXTURE": 5890,
|
|
||||||
"TEXTURE_CUBE_MAP": 34067,
|
|
||||||
"TEXTURE_BINDING_CUBE_MAP": 34068,
|
|
||||||
"TEXTURE_CUBE_MAP_POSITIVE_X": 34069,
|
|
||||||
"TEXTURE_CUBE_MAP_NEGATIVE_X": 34070,
|
|
||||||
"TEXTURE_CUBE_MAP_POSITIVE_Y": 34071,
|
|
||||||
"TEXTURE_CUBE_MAP_NEGATIVE_Y": 34072,
|
|
||||||
"TEXTURE_CUBE_MAP_POSITIVE_Z": 34073,
|
|
||||||
"TEXTURE_CUBE_MAP_NEGATIVE_Z": 34074,
|
|
||||||
"MAX_CUBE_MAP_TEXTURE_SIZE": 34076,
|
|
||||||
"TEXTURE0": 33984,
|
|
||||||
"TEXTURE1": 33985,
|
|
||||||
"TEXTURE2": 33986,
|
|
||||||
"TEXTURE3": 33987,
|
|
||||||
"TEXTURE4": 33988,
|
|
||||||
"TEXTURE5": 33989,
|
|
||||||
"TEXTURE6": 33990,
|
|
||||||
"TEXTURE7": 33991,
|
|
||||||
"TEXTURE8": 33992,
|
|
||||||
"TEXTURE9": 33993,
|
|
||||||
"TEXTURE10": 33994,
|
|
||||||
"TEXTURE11": 33995,
|
|
||||||
"TEXTURE12": 33996,
|
|
||||||
"TEXTURE13": 33997,
|
|
||||||
"TEXTURE14": 33998,
|
|
||||||
"TEXTURE15": 33999,
|
|
||||||
"TEXTURE16": 34000,
|
|
||||||
"TEXTURE17": 34001,
|
|
||||||
"TEXTURE18": 34002,
|
|
||||||
"TEXTURE19": 34003,
|
|
||||||
"TEXTURE20": 34004,
|
|
||||||
"TEXTURE21": 34005,
|
|
||||||
"TEXTURE22": 34006,
|
|
||||||
"TEXTURE23": 34007,
|
|
||||||
"TEXTURE24": 34008,
|
|
||||||
"TEXTURE25": 34009,
|
|
||||||
"TEXTURE26": 34010,
|
|
||||||
"TEXTURE27": 34011,
|
|
||||||
"TEXTURE28": 34012,
|
|
||||||
"TEXTURE29": 34013,
|
|
||||||
"TEXTURE30": 34014,
|
|
||||||
"TEXTURE31": 34015,
|
|
||||||
"ACTIVE_TEXTURE": 34016,
|
|
||||||
"REPEAT": 10497,
|
|
||||||
"CLAMP_TO_EDGE": 33071,
|
|
||||||
"MIRRORED_REPEAT": 33648,
|
|
||||||
"FLOAT_VEC2": 35664,
|
|
||||||
"FLOAT_VEC3": 35665,
|
|
||||||
"FLOAT_VEC4": 35666,
|
|
||||||
"INT_VEC2": 35667,
|
|
||||||
"INT_VEC3": 35668,
|
|
||||||
"INT_VEC4": 35669,
|
|
||||||
"BOOL": 35670,
|
|
||||||
"BOOL_VEC2": 35671,
|
|
||||||
"BOOL_VEC3": 35672,
|
|
||||||
"BOOL_VEC4": 35673,
|
|
||||||
"FLOAT_MAT2": 35674,
|
|
||||||
"FLOAT_MAT3": 35675,
|
|
||||||
"FLOAT_MAT4": 35676,
|
|
||||||
"SAMPLER_2D": 35678,
|
|
||||||
"SAMPLER_CUBE": 35680,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_ENABLED": 34338,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_SIZE": 34339,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_STRIDE": 34340,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_TYPE": 34341,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_NORMALIZED": 34922,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_POINTER": 34373,
|
|
||||||
"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING": 34975,
|
|
||||||
"IMPLEMENTATION_COLOR_READ_TYPE": 35738,
|
|
||||||
"IMPLEMENTATION_COLOR_READ_FORMAT": 35739,
|
|
||||||
"COMPILE_STATUS": 35713,
|
|
||||||
"LOW_FLOAT": 36336,
|
|
||||||
"MEDIUM_FLOAT": 36337,
|
|
||||||
"HIGH_FLOAT": 36338,
|
|
||||||
"LOW_INT": 36339,
|
|
||||||
"MEDIUM_INT": 36340,
|
|
||||||
"HIGH_INT": 36341,
|
|
||||||
"FRAMEBUFFER": 36160,
|
|
||||||
"RENDERBUFFER": 36161,
|
|
||||||
"RGBA4": 32854,
|
|
||||||
"RGB5_A1": 32855,
|
|
||||||
"RGB565": 36194,
|
|
||||||
"DEPTH_COMPONENT16": 33189,
|
|
||||||
"STENCIL_INDEX8": 36168,
|
|
||||||
"DEPTH_STENCIL": 34041,
|
|
||||||
"RENDERBUFFER_WIDTH": 36162,
|
|
||||||
"RENDERBUFFER_HEIGHT": 36163,
|
|
||||||
"RENDERBUFFER_INTERNAL_FORMAT": 36164,
|
|
||||||
"RENDERBUFFER_RED_SIZE": 36176,
|
|
||||||
"RENDERBUFFER_GREEN_SIZE": 36177,
|
|
||||||
"RENDERBUFFER_BLUE_SIZE": 36178,
|
|
||||||
"RENDERBUFFER_ALPHA_SIZE": 36179,
|
|
||||||
"RENDERBUFFER_DEPTH_SIZE": 36180,
|
|
||||||
"RENDERBUFFER_STENCIL_SIZE": 36181,
|
|
||||||
"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE": 36048,
|
|
||||||
"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME": 36049,
|
|
||||||
"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL": 36050,
|
|
||||||
"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE": 36051,
|
|
||||||
"COLOR_ATTACHMENT0": 36064,
|
|
||||||
"DEPTH_ATTACHMENT": 36096,
|
|
||||||
"STENCIL_ATTACHMENT": 36128,
|
|
||||||
"DEPTH_STENCIL_ATTACHMENT": 33306,
|
|
||||||
"NONE": 0,
|
|
||||||
"FRAMEBUFFER_COMPLETE": 36053,
|
|
||||||
"FRAMEBUFFER_INCOMPLETE_ATTACHMENT": 36054,
|
|
||||||
"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT": 36055,
|
|
||||||
"FRAMEBUFFER_INCOMPLETE_DIMENSIONS": 36057,
|
|
||||||
"FRAMEBUFFER_UNSUPPORTED": 36061,
|
|
||||||
"FRAMEBUFFER_BINDING": 36006,
|
|
||||||
"RENDERBUFFER_BINDING": 36007,
|
|
||||||
"MAX_RENDERBUFFER_SIZE": 34024,
|
|
||||||
"INVALID_FRAMEBUFFER_OPERATION": 1286,
|
|
||||||
"UNPACK_FLIP_Y_WEBGL": 37440,
|
|
||||||
"UNPACK_PREMULTIPLY_ALPHA_WEBGL": 37441,
|
|
||||||
"CONTEXT_LOST_WEBGL": 37442,
|
|
||||||
"UNPACK_COLORSPACE_CONVERSION_WEBGL": 37443,
|
|
||||||
"BROWSER_DEFAULT_WEBGL": 37444
|
|
||||||
};
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
let i = 1;
|
|
||||||
|
|
||||||
const GLmethod = {};
|
|
||||||
|
|
||||||
GLmethod.activeTexture = i++; //1
|
|
||||||
GLmethod.attachShader = i++;
|
|
||||||
GLmethod.bindAttribLocation = i++;
|
|
||||||
GLmethod.bindBuffer = i++;
|
|
||||||
GLmethod.bindFramebuffer = i++;
|
|
||||||
GLmethod.bindRenderbuffer = i++;
|
|
||||||
GLmethod.bindTexture = i++;
|
|
||||||
GLmethod.blendColor = i++;
|
|
||||||
GLmethod.blendEquation = i++;
|
|
||||||
GLmethod.blendEquationSeparate = i++; //10
|
|
||||||
GLmethod.blendFunc = i++;
|
|
||||||
GLmethod.blendFuncSeparate = i++;
|
|
||||||
GLmethod.bufferData = i++;
|
|
||||||
GLmethod.bufferSubData = i++;
|
|
||||||
GLmethod.checkFramebufferStatus = i++;
|
|
||||||
GLmethod.clear = i++;
|
|
||||||
GLmethod.clearColor = i++;
|
|
||||||
GLmethod.clearDepth = i++;
|
|
||||||
GLmethod.clearStencil = i++;
|
|
||||||
GLmethod.colorMask = i++; //20
|
|
||||||
GLmethod.compileShader = i++;
|
|
||||||
GLmethod.compressedTexImage2D = i++;
|
|
||||||
GLmethod.compressedTexSubImage2D = i++;
|
|
||||||
GLmethod.copyTexImage2D = i++;
|
|
||||||
GLmethod.copyTexSubImage2D = i++;
|
|
||||||
GLmethod.createBuffer = i++;
|
|
||||||
GLmethod.createFramebuffer = i++;
|
|
||||||
GLmethod.createProgram = i++;
|
|
||||||
GLmethod.createRenderbuffer = i++;
|
|
||||||
GLmethod.createShader = i++; //30
|
|
||||||
GLmethod.createTexture = i++;
|
|
||||||
GLmethod.cullFace = i++;
|
|
||||||
GLmethod.deleteBuffer = i++;
|
|
||||||
GLmethod.deleteFramebuffer = i++;
|
|
||||||
GLmethod.deleteProgram = i++;
|
|
||||||
GLmethod.deleteRenderbuffer = i++;
|
|
||||||
GLmethod.deleteShader = i++;
|
|
||||||
GLmethod.deleteTexture = i++;
|
|
||||||
GLmethod.depthFunc = i++;
|
|
||||||
GLmethod.depthMask = i++; //40
|
|
||||||
GLmethod.depthRange = i++;
|
|
||||||
GLmethod.detachShader = i++;
|
|
||||||
GLmethod.disable = i++;
|
|
||||||
GLmethod.disableVertexAttribArray = i++;
|
|
||||||
GLmethod.drawArrays = i++;
|
|
||||||
GLmethod.drawArraysInstancedANGLE = i++;
|
|
||||||
GLmethod.drawElements = i++;
|
|
||||||
GLmethod.drawElementsInstancedANGLE = i++;
|
|
||||||
GLmethod.enable = i++;
|
|
||||||
GLmethod.enableVertexAttribArray = i++; //50
|
|
||||||
GLmethod.flush = i++;
|
|
||||||
GLmethod.framebufferRenderbuffer = i++;
|
|
||||||
GLmethod.framebufferTexture2D = i++;
|
|
||||||
GLmethod.frontFace = i++;
|
|
||||||
GLmethod.generateMipmap = i++;
|
|
||||||
GLmethod.getActiveAttrib = i++;
|
|
||||||
GLmethod.getActiveUniform = i++;
|
|
||||||
GLmethod.getAttachedShaders = i++;
|
|
||||||
GLmethod.getAttribLocation = i++;
|
|
||||||
GLmethod.getBufferParameter = i++; //60
|
|
||||||
GLmethod.getContextAttributes = i++;
|
|
||||||
GLmethod.getError = i++;
|
|
||||||
GLmethod.getExtension = i++;
|
|
||||||
GLmethod.getFramebufferAttachmentParameter = i++;
|
|
||||||
GLmethod.getParameter = i++;
|
|
||||||
GLmethod.getProgramInfoLog = i++;
|
|
||||||
GLmethod.getProgramParameter = i++;
|
|
||||||
GLmethod.getRenderbufferParameter = i++;
|
|
||||||
GLmethod.getShaderInfoLog = i++;
|
|
||||||
GLmethod.getShaderParameter = i++; //70
|
|
||||||
GLmethod.getShaderPrecisionFormat = i++;
|
|
||||||
GLmethod.getShaderSource = i++;
|
|
||||||
GLmethod.getSupportedExtensions = i++;
|
|
||||||
GLmethod.getTexParameter = i++;
|
|
||||||
GLmethod.getUniform = i++;
|
|
||||||
GLmethod.getUniformLocation = i++;
|
|
||||||
GLmethod.getVertexAttrib = i++;
|
|
||||||
GLmethod.getVertexAttribOffset = i++;
|
|
||||||
GLmethod.isBuffer = i++;
|
|
||||||
GLmethod.isContextLost = i++; //80
|
|
||||||
GLmethod.isEnabled = i++;
|
|
||||||
GLmethod.isFramebuffer = i++;
|
|
||||||
GLmethod.isProgram = i++;
|
|
||||||
GLmethod.isRenderbuffer = i++;
|
|
||||||
GLmethod.isShader = i++;
|
|
||||||
GLmethod.isTexture = i++;
|
|
||||||
GLmethod.lineWidth = i++;
|
|
||||||
GLmethod.linkProgram = i++;
|
|
||||||
GLmethod.pixelStorei = i++;
|
|
||||||
GLmethod.polygonOffset = i++; //90
|
|
||||||
GLmethod.readPixels = i++;
|
|
||||||
GLmethod.renderbufferStorage = i++;
|
|
||||||
GLmethod.sampleCoverage = i++;
|
|
||||||
GLmethod.scissor = i++;
|
|
||||||
GLmethod.shaderSource = i++;
|
|
||||||
GLmethod.stencilFunc = i++;
|
|
||||||
GLmethod.stencilFuncSeparate = i++;
|
|
||||||
GLmethod.stencilMask = i++;
|
|
||||||
GLmethod.stencilMaskSeparate = i++;
|
|
||||||
GLmethod.stencilOp = i++; //100
|
|
||||||
GLmethod.stencilOpSeparate = i++;
|
|
||||||
GLmethod.texImage2D = i++;
|
|
||||||
GLmethod.texParameterf = i++;
|
|
||||||
GLmethod.texParameteri = i++;
|
|
||||||
GLmethod.texSubImage2D = i++;
|
|
||||||
GLmethod.uniform1f = i++;
|
|
||||||
GLmethod.uniform1fv = i++;
|
|
||||||
GLmethod.uniform1i = i++;
|
|
||||||
GLmethod.uniform1iv = i++;
|
|
||||||
GLmethod.uniform2f = i++; //110
|
|
||||||
GLmethod.uniform2fv = i++;
|
|
||||||
GLmethod.uniform2i = i++;
|
|
||||||
GLmethod.uniform2iv = i++;
|
|
||||||
GLmethod.uniform3f = i++;
|
|
||||||
GLmethod.uniform3fv = i++;
|
|
||||||
GLmethod.uniform3i = i++;
|
|
||||||
GLmethod.uniform3iv = i++;
|
|
||||||
GLmethod.uniform4f = i++;
|
|
||||||
GLmethod.uniform4fv = i++;
|
|
||||||
GLmethod.uniform4i = i++; //120
|
|
||||||
GLmethod.uniform4iv = i++;
|
|
||||||
GLmethod.uniformMatrix2fv = i++;
|
|
||||||
GLmethod.uniformMatrix3fv = i++;
|
|
||||||
GLmethod.uniformMatrix4fv = i++;
|
|
||||||
GLmethod.useProgram = i++;
|
|
||||||
GLmethod.validateProgram = i++;
|
|
||||||
GLmethod.vertexAttrib1f = i++; //new
|
|
||||||
GLmethod.vertexAttrib2f = i++; //new
|
|
||||||
GLmethod.vertexAttrib3f = i++; //new
|
|
||||||
GLmethod.vertexAttrib4f = i++; //new //130
|
|
||||||
GLmethod.vertexAttrib1fv = i++; //new
|
|
||||||
GLmethod.vertexAttrib2fv = i++; //new
|
|
||||||
GLmethod.vertexAttrib3fv = i++; //new
|
|
||||||
GLmethod.vertexAttrib4fv = i++; //new
|
|
||||||
GLmethod.vertexAttribPointer = i++;
|
|
||||||
GLmethod.viewport = i++;
|
|
||||||
|
|
||||||
export default GLmethod;
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
const GLtype = {};
|
|
||||||
|
|
||||||
[
|
|
||||||
"GLbitfield",
|
|
||||||
"GLboolean",
|
|
||||||
"GLbyte",
|
|
||||||
"GLclampf",
|
|
||||||
"GLenum",
|
|
||||||
"GLfloat",
|
|
||||||
"GLint",
|
|
||||||
"GLintptr",
|
|
||||||
"GLsizei",
|
|
||||||
"GLsizeiptr",
|
|
||||||
"GLshort",
|
|
||||||
"GLubyte",
|
|
||||||
"GLuint",
|
|
||||||
"GLushort"
|
|
||||||
].sort().map((typeName, i) => GLtype[typeName] = 1 >> (i + 1));
|
|
||||||
|
|
||||||
export default GLtype;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLProgram';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLProgram {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLRenderBuffer';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLRenderbuffer {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,22 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLShader';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLShader {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id, type) {
|
|
||||||
this.id = id;
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
export default class WebGLShaderPrecisionFormat {
|
|
||||||
className = 'WebGLShaderPrecisionFormat';
|
|
||||||
|
|
||||||
constructor({
|
|
||||||
rangeMin, rangeMax, precision
|
|
||||||
}) {
|
|
||||||
this.rangeMin = rangeMin;
|
|
||||||
this.rangeMax = rangeMax;
|
|
||||||
this.precision = precision;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLTexture';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLTexture {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id, type) {
|
|
||||||
this.id = id;
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
import {getTransferedObjectUUID} from './classUtils';
|
|
||||||
|
|
||||||
const name = 'WebGLUniformLocation';
|
|
||||||
|
|
||||||
function uuid(id) {
|
|
||||||
return getTransferedObjectUUID(name, id);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class WebGLUniformLocation {
|
|
||||||
className = name;
|
|
||||||
|
|
||||||
constructor(id, type) {
|
|
||||||
this.id = id;
|
|
||||||
this.type = type;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uuid = uuid;
|
|
||||||
|
|
||||||
uuid() {
|
|
||||||
return uuid(this.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
export function getTransferedObjectUUID(name, id) {
|
|
||||||
return `${name.toLowerCase()}-${id}`;
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user