首次提交

This commit is contained in:
duan 2024-06-06 11:50:53 +08:00
parent cab4751927
commit 544c3b65b2
344 changed files with 72919 additions and 1 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.hbuilderx
unpackage

414
App.vue Normal file
View File

@ -0,0 +1,414 @@
<script>
export default {
onLaunch: function() {
setInterval(d => { //
let userId = uni.getStorageSync('userId')
if (userId) {
this.$Request.getMsg('/app/ordersChat/selectUserAllUnreadCount').then(res => {
if (res.code === 0) {
let messageCount = res.data
uni.setStorageSync('messageCount', messageCount)
let num = messageCount
// console.log(num, '')
if (num == 0) {
uni.removeTabBarBadge({
index: 2
})
return;
}
uni.setTabBarBadge({
index: 2,
text: num + ''
})
}
});
}
}, 3000);
// 256
this.$Request.get('/app/common/type/256').then(res => {
if (res.code == 0) {
this.$queue.setData('paotuiHB', res.data.value);
}
});
// 324
this.$Request.get('/app/common/type/324').then(res => {
if (res.code == 0) {
this.$queue.setData('waimaiHB', res.data.value);
}
});
//线
console.log('App Launch')
// this.$Request.get('/app/common/type/261').then(res => {
// if (res.code == 0) {
// // #ifdef MP-WEIXIN
// this.$queue.setData('XCXIsSelect', res.data.value);
// this.$queue.setData('shangxianSelect', res.data.value);
// // #endif
// // #ifndef MP-WEIXIN
// this.$queue.setData('XCXIsSelect', '');
// this.$queue.setData('shangxianSelect', '');
// // #endif
// }
// });
this.$Request.get('/app/common/type/264').then(res => {
if (res.code == 0) {
// #ifdef MP-WEIXIN
this.$queue.setData('XCXIsSelect', res.data.value);
this.$queue.setData('shangxianSelect', res.data.value);
// #endif
// #ifndef MP-WEIXIN
this.$queue.setData('XCXIsSelect', '是');
this.$queue.setData('shangxianSelect', '是');
// #endif
}
});
//#ifdef APP-PLUS
// APP https://ask.dcloud.net.cn/article/35667
plus.screen.lockOrientation('portrait-primary'); //
//
const updated = uni.getStorageSync('updated'); // storage
let that = this;
if (updated.completed === true) {
//
//
console.log('安装记录被删除,更新成功');
uni.removeSavedFile({
filePath: updated.packgePath,
success: res => {
uni.removeStorageSync('updated');
}
});
} else if (updated.completed === false) {
uni.removeStorageSync('updated');
plus.runtime.install(updated.packgePath, {
force: true
});
uni.setStorage({
key: 'updated',
data: {
completed: true,
packgePath: updated.packgePath
},
success: res => {
console.log('成功安装上次的更新,应用需要重启才能继续完成');
}
});
uni.showModal({
title: '温馨提示',
content: '应用将重启以完成更新',
showCancel: false,
complete: () => {
plus.runtime.restart();
}
});
} else {
//
plus.runtime.getProperty(plus.runtime.appid, widgetInfo => {
//
that.$Request.getT('/app/user/selectNewApp').then(res => {
res = res.data[0];
if (res.wgtUrl && widgetInfo.version < res.version) {
let downloadLink = '';
let androidLink = res.androidWgtUrl;
let iosLink = res.iosWgtUrl;
let ready = false;
//
if (res.wgtUrl.match(RegExp(/.wgt/))) {
//
if (plus.os.name.toLowerCase() === 'android') {
console.log('安卓系统');
if (androidLink && androidLink !== '#') {
// #
console.log('发现下载地址');
//
if (androidLink.match(RegExp(/.wgt/))) {
console.log('确认wgt热更新包');
downloadLink = androidLink;
ready = true;
} else {
console.log('安卓推荐.wgt强制更新.apk的强制更新请您自行修改程序');
}
} else {
console.log('下载地址是空的,无法继续');
}
} else {
console.log('苹果系统');
if (iosLink && iosLink !== '#') {
// #
console.log('发现下载地址');
// (A)iosLinkwgt.wgt
if (iosLink.match(RegExp(/.wgt/))) {
console.log('确认wgt热更新包');
downloadLink = iosLink;
ready = true;
} else {
console.log('苹果只支持.wgt强制更新');
}
} else {
console.log('下载地址是空的,无法继续');
}
}
if (ready) {
console.log('任务开始');
let downloadTask = uni.downloadFile({
url: downloadLink,
success: res => {
if (res.statusCode === 200) {
//
console.log('保存安装包');
uni.saveFile({
tempFilePath: res.tempFilePath,
success: res => {
const packgePath = res
.savedFilePath;
// stroageapp
uni.setStorage({
key: 'updated',
data: {
completed: false,
packgePath: packgePath
},
success: () => {
console
.log(
'成功保存记录'
);
}
});
//
console.log(
'任务完成,关闭下载任务,下一次启动应用时将安装更新'
);
downloadTask.abort();
downloadTask = null;
}
});
}
}
});
} else {
console.log('下载地址未准备,无法开启下载任务');
}
} else {
//线
if (res.method == 'true') {
uni.showModal({
showCancel: false,
confirmText: '立即更新',
title: '发现新版本',
content: res.des,
success: res => {
if (res.confirm) {
that.$queue.showLoading('下载中...');
if (uni.getSystemInfoSync().platform ==
'android') {
uni.downloadFile({
url: androidLink,
success: downloadResult => {
if (downloadResult
.statusCode ===
200) {
plus.runtime
.install(
downloadResult
.tempFilePath, {
force: false
},
d => {
console
.log(
'install success...'
);
plus.runtime
.restart();
},
e => {
console
.error(
'install fail...'
);
}
);
}
}
});
}
if (uni.getSystemInfoSync().platform ==
'ios') {
plus.runtime.openURL(iosLink, function(
res) {});
}
} else if (res.cancel) {
console.log('取消');
}
}
});
} else {
uni.showModal({
title: '发现新版本',
confirmText: '立即更新',
cancelText: '下次更新',
content: res.des,
success: res => {
if (res.confirm) {
that.$queue.showLoading('下载中...');
if (uni.getSystemInfoSync().platform ==
'android') {
uni.downloadFile({
url: androidLink,
success: downloadResult => {
if (downloadResult
.statusCode ===
200) {
plus.runtime
.install(
downloadResult
.tempFilePath, {
force: false
},
d => {
console
.log(
'install success...'
);
plus.runtime
.restart();
},
e => {
console
.error(
'install fail...'
);
}
);
}
}
});
}
if (uni.getSystemInfoSync().platform ==
'ios') {
plus.runtime.openURL(iosLink, function(
res) {});
}
} else if (res.cancel) {
console.log('取消');
}
}
});
}
}
}
});
});
}
//#endif
//#ifdef H5
let ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') !== -1) {
let openid = uni.getStorageSync('openid');
let userId = uni.getStorageSync('userId');
let that = this;
console.log(openid)
if (!openid) {
if (window.location.href.indexOf('?code=') !== -1 || window.location.href.indexOf('&code=') !==
-1) {
let code;
if (window.location.href.indexOf('?code=') !== -1) {
code = window.location.href.split('?code=')[1].split('&')[0];
} else {
code = window.location.href.split('&code=')[1].split('&')[0];
}
this.$Request.get('/app/Login/getOpenId?code=' + code).then(ret => {
this.$queue.setData('openid', ret.data)
this.$Request.get('/app/Login/wxOpenIdLogin?openId=' + ret.data + '&userType=1')
.then(res => {
console.error(res)
if (res.code == 0) {
this.$queue.setData("token", res.token);
this.$queue.setData("userId", res.user.userId);
this.$queue.setData("phone", res.user.phone);
uni.setStorageSync('userName', res.user.userName)
uni.setStorageSync('avatar', res.user.avatar)
uni.setStorageSync('phone', res.user.phone)
uni.setStorageSync('sex', res.user.sex)
uni.setStorageSync('userId', res.user.userId)
uni.setStorageSync('wxCode', res.user.wxCode)
uni.setStorageSync('wxQrCode', res.user.wxQrCode)
uni.setStorageSync('zhiFuBao', res.user.zhiFuBao)
uni.setStorageSync('zhiFuBaoName', res.user.zhiFuBaoName)
}
});
});
} else {
window.location.href =
'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
that.$queue.getWxAppid() +
'&redirect_uri=' +
window.location.href.split('#')[0] +
'&response_type=code&scope=snsapi_base#wechat_redirect';
}
} else {
this.$Request.get('/app/Login/wxOpenIdLogin?openId=' + openid + '&userType=1').then(res => {
if (res.code == 0) {
this.$queue.setData("token", res.token);
this.$queue.setData("userId", res.user.userId);
this.$queue.setData("phone", res.user.phone);
uni.setStorageSync('userName', res.user.userName)
uni.setStorageSync('avatar', res.user.avatar)
uni.setStorageSync('phone', res.user.phone)
uni.setStorageSync('sex', res.user.sex)
uni.setStorageSync('userId', res.user.userId)
uni.setStorageSync('wxCode', res.user.wxCode)
uni.setStorageSync('wxQrCode', res.user.wxQrCode)
uni.setStorageSync('zhiFuBao', res.user.zhiFuBao)
uni.setStorageSync('zhiFuBaoName', res.user.zhiFuBaoName)
}
});
}
}
//#endif
},
onShow: function() {
console.log('App Show')
// #ifdef APP-PLUS
if (uni.getSystemInfoSync().platform == 'android') {
let clientid = plus.push.getClientInfo().clientid;
let userId = this.$queue.getData('userId');
if (userId) {
console.log(clientid, '----', userId)
this.$Request.postT('/app/user/updateClientId?clientId=' + clientid).then(
res => {});
}
}
//#endif
},
onHide: function() {
console.log('App Hide')
}
}
</script>
<style lang="scss">
/*每个页面公共css */
@import "uview-ui/index.scss";
@import 'components/colorui/main.css';
@import 'components/colorui/icon.css';
</style>

View File

@ -1 +0,0 @@
#tcwm-uniapp-user

87
common/cache.js Normal file
View File

@ -0,0 +1,87 @@
/**
* 缓存数据优化
* var cache = require('utils/cache.js');
* import cache from '../cache'
* 使用方法
* 设置缓存
* string cache.put('k', 'string你好啊');
* json cache.put('k', { "b": "3" }, 2);
* array cache.put('k', [1, 2, 3]);
* boolean cache.put('k', true);
* 读取缓存
* 默认值 cache.get('k')
* string cache.get('k', '你好')
* json cache.get('k', { "a": "1" })
* 移除/清理
* 移除: cache.remove('k');
* 清理cache.clear();
*
* @type {String}
*/
var postfix = '_mallStore'; // 缓存前缀
/**
* 设置缓存
* @param {[type]} k [键名]
* @param {[type]} v [键值]
* @param {[type]} t [时间单位秒]
*/
function put(k, v, t) {
uni.setStorageSync(k, v)
var seconds = parseInt(t);
if (seconds > 0) {
var timestamp = Date.parse(new Date());
timestamp = timestamp / 1000 + seconds;
uni.setStorageSync(k + postfix, timestamp + "")
} else {
uni.removeStorageSync(k + postfix)
}
}
/**
* 获取缓存
* @param {[type]} k [键名]
* @param {[type]} def [获取为空时默认]
*/
function get(k, def) {
var deadtime = parseInt(uni.getStorageSync(k + postfix))
if (deadtime) {
if (parseInt(deadtime) < Date.parse(new Date()) / 1000) {
if (def) {
return def;
} else {
return false;
}
}
}
var res = uni.getStorageSync(k);
if (res) {
return res;
} else {
if (def == undefined || def == "") {
def = false;
}
return def;
}
}
function remove(k) {
uni.removeStorageSync(k);
uni.removeStorageSync(k + postfix);
}
/**
* 清理所有缓存
* @return {[type]} [description]
*/
function clear() {
uni.clearStorageSync();
}
module.exports = {
put: put,
get: get,
remove: remove,
clear: clear,
}

15
common/config.js Normal file
View File

@ -0,0 +1,15 @@
const ROOTPATH = "https://tcwm.xianmaxiong.com/sqx_fast";
const ROOTPATH1 = "https://tcwm.xianmaxiong.com/sqx_fast";
const ROOTPATH2 = "wss://tcwm.xianmaxiong.com/wss/websocket/"//联系客服
const ROOTPATH3 = "wss://tcwm.xianmaxiong.com/wss/ordersChat/"//聊天
// const ROOTPATH = "http://192.168.0.114:8171/sqx_fast";
// const ROOTPATH1 = "http://192.168.0.114:8171/sqx_fast";
// const ROOTPATH2 = "http://192.168.0.114:8171/sqx_fast";
// const ROOTPATH3 = "ws://192.168.0.114:8171/sqx_fast";
module.exports = {
APIHOST: ROOTPATH,
APIHOST1: ROOTPATH1,
WSHOST: ROOTPATH2,
WSHOST1: ROOTPATH3
};

318
common/httpRequest.js Normal file
View File

@ -0,0 +1,318 @@
import configdata from './config'
import cache from './cache'
module.exports = {
config: function (name) {
var info = null;
if (name) {
var name2 = name.split("."); //字符分割
if (name2.length > 1) {
info = configdata[name2[0]][name2[1]] || null;
} else {
info = configdata[name] || null;
}
if (info == null) {
let web_config = cache.get("web_config");
if (web_config) {
if (name2.length > 1) {
info = web_config[name2[0]][name2[1]] || null;
} else {
info = web_config[name] || null;
}
}
}
}
return info;
},
post: function (url, data, header) {
header = header || "application/x-www-form-urlencoded";
url = this.config("APIHOST") + url;
let token = uni.getStorageSync("token");
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "POST",
header: {
"content-type": header,
"token": token
},
success: function (result) {
if(result.data.code == 401&&token) {
uni.removeStorageSync("token")
uni.removeStorageSync("userId")
uni.removeStorageSync("phone")
uni.removeStorageSync("openid")
uni.removeStorageSync("userName")
uni.removeStorageSync("relation")
uni.removeStorageSync("relation_id")
uni.removeStorageSync("isInvitation")
uni.removeStorageSync("zhiFuBao")
uni.removeStorageSync("zhiFuBaoName")
uni.showToast({
title: '用户信息失效,请重新登录!',
icon: 'none'
})
}
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
},
postT: function (url, data, header) {
header = header || "application/x-www-form-urlencoded";
url = this.config("APIHOST1") + url;
let token = uni.getStorageSync("token");
if (token) {
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "POST",
header: {
"content-type": header,
"token": token
},
success: function (result) {
if(result.data.code == 401&&token) {
uni.removeStorageSync("token")
uni.removeStorageSync("userId")
uni.removeStorageSync("phone")
uni.removeStorageSync("openid")
uni.removeStorageSync("userName")
uni.removeStorageSync("relation")
uni.removeStorageSync("relation_id")
uni.removeStorageSync("isInvitation")
uni.removeStorageSync("zhiFuBao")
uni.removeStorageSync("zhiFuBaoName")
uni.showToast({
title: '用户信息失效,请重新登录!',
icon: 'none'
})
}
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
} else {
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "POST",
header: {
"content-type": header,
},
success: function (result) {
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
}
},
postJson: function (url, data, header) {
header = header || "application/json";
url = this.config("APIHOST1") + url;
let token = uni.getStorageSync("token");
if (token) {
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "POST",
header: {
"content-type": header,
"token": token
},
success: function (result) {
if(result.data.code == 401&&token) {
uni.removeStorageSync("token")
uni.removeStorageSync("userId")
uni.removeStorageSync("phone")
uni.removeStorageSync("openid")
uni.removeStorageSync("userName")
uni.removeStorageSync("relation")
uni.removeStorageSync("relation_id")
uni.removeStorageSync("isInvitation")
uni.removeStorageSync("zhiFuBao")
uni.removeStorageSync("zhiFuBaoName")
uni.showToast({
title: '用户信息失效,请重新登录!',
icon: 'none'
})
}
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
} else {
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "POST",
header: {
"content-type": header,
},
success: function (result) {
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
}
},
getT: function (url, data, header) {
header = header || "application/x-www-form-urlencoded";
url = this.config("APIHOST1") + url;
let token = uni.getStorageSync("token");
if (token) {
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "GET",
header: {
"content-type": header,
"token": token
},
success: function (result) {
if(result.data.code == 401&&token) {
uni.removeStorageSync("token")
uni.removeStorageSync("userId")
uni.removeStorageSync("phone")
uni.removeStorageSync("openid")
uni.removeStorageSync("userName")
uni.removeStorageSync("relation")
uni.removeStorageSync("relation_id")
uni.removeStorageSync("isInvitation")
uni.removeStorageSync("zhiFuBao")
uni.removeStorageSync("zhiFuBaoName")
uni.showToast({
title: '用户信息失效,请重新登录!',
icon: 'none'
})
}
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
} else {
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "GET",
header: {
"content-type": header
},
success: function (result) {
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
}
},
get: function (url, data, header) {
header = header || "application/x-www-form-urlencoded";
url = this.config("APIHOST") + url;
let token = uni.getStorageSync("token");
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "GET",
header: {
"content-type": header,
"token": token
},
success: function (result) {
if(result.data.code == 401&&token) {
uni.removeStorageSync("token")
uni.removeStorageSync("userId")
uni.removeStorageSync("phone")
uni.removeStorageSync("openid")
uni.removeStorageSync("userName")
uni.removeStorageSync("relation")
uni.removeStorageSync("relation_id")
uni.removeStorageSync("isInvitation")
uni.removeStorageSync("zhiFuBao")
uni.removeStorageSync("zhiFuBaoName")
uni.showToast({
title: '用户信息失效,请重新登录!',
icon: 'none'
})
}
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
},
getMsg: function (url, data, header) {
header = header || "application/x-www-form-urlencoded";
url = this.config("APIHOST") + url;
let token = uni.getStorageSync("token");
return new Promise((succ, error) => {
uni.request({
url: url,
data: data,
method: "GET",
header: {
"content-type": header,
"token": token
},
success: function (result) {
if(result.data.code == 401&&token) {
uni.removeStorageSync("token")
uni.removeStorageSync("userId")
uni.removeStorageSync("phone")
uni.removeStorageSync("openid")
uni.removeStorageSync("userName")
uni.removeStorageSync("relation")
uni.removeStorageSync("relation_id")
uni.removeStorageSync("isInvitation")
uni.removeStorageSync("zhiFuBao")
uni.removeStorageSync("zhiFuBaoName")
uni.showToast({
title: '用户信息失效,请重新登录!',
icon: 'none'
})
}
succ.call(self, result.data)
},
fail: function (e) {
error.call(self, e)
}
})
})
}
}

185
common/queue.js Normal file
View File

@ -0,0 +1,185 @@
/**
*
* @author maxd
* @date 2019.8.1
*/
module.exports = {
//微信的appId
getWxAppid() {
return 'wxef277af6b5cf522e'
},
//全局邀请码
getInvitation() {
return uni.getStorageSync("publicRelation")
},
//获取APP下载地址
getAppDownUrl() {
return uni.getStorageSync("appurl")
},
//全局域名 部分html中需要单独替换 需要修改config中的网络请求域名
publicYuMing() {
return 'https://tcwm.xianmaxiong.com'
},
logout() {
this.remove("token");
this.remove("userId");
this.remove("mobile");
this.remove("openid");
this.remove("nickName");
this.remove("relation");
this.remove("image_url");
this.remove("relation_id");
this.remove("isInvitation");
this.remove("member");
},
loginClear() {
this.remove("token");
this.remove("userId");
this.remove("mobile");
this.remove("nickName");
this.remove("image_url");
this.remove("relation_id");
this.remove("isInvitation");
this.remove("member");
},
showLoading(title) {
uni.showLoading({
title: title
});
},
showToast(title) {
uni.showToast({
title: title,
mask: false,
duration: 2000,
icon: "none"
});
},
setJson: function(key, value) {
let jsonString = JSON.stringify(value);
try {
uni.setStorageSync(key, jsonString);
} catch (e) {
// error
}
},
setData: function(key, value) {
try {
uni.setStorageSync(key, value);
} catch (e) {
// error
}
},
getData: function(key) {
try {
const value = uni.getStorageSync(key);
if (value) {
return value;
}
} catch (e) {
// error
}
},
getJson: function(key) {
try {
const value = uni.getStorageSync(key);
if (value) {
return JSON.parse(value);
}
} catch (e) {
// error
}
},
clear: function() {
uni.clearStorage();
},
get: function(key) { //获取队列里面全部的数据
let data = this.getJson(key);
if (data instanceof Array) {
return data;
}
return [];
},
insert: function(param) { //队列插入数据
param.capacityNum = param.capacityNum || 100; //队列容量 默认队列中超过100条数据自动删除尾部
let data = this.getJson(param.key);
if (data instanceof Array) {
if (data.length > param.capacityNum) {
let total = data.length - param.capacityNum;
for (let i = 0; i < total; i++) {
data.pop();
}
}
data.unshift(param.value);
} else {
data = [];
data.push(param.value);
}
this.setJson(param.key, data);
},
removeItem: function(key, itemIds) { //提供itemIds数组 批量删除队列中的某项数据
let data = this.getJson(key);
if (data instanceof Array) {
for (let i = 0; i < itemIds.length; i++) {
for (let p = 0; p < data.length; p++) {
if (itemIds[i] === data[p].itemid) {
data.splice(p, 1);
break;
}
}
}
this.setJson(key, data);
}
},
isExist: function(key, itemId) { //检测某条数据在队列中是否存在
let data = this.getJson(key);
if (data instanceof Array) {
for (let p = 0; p < data.length; p++) {
if (itemId === data[p].itemid) {
return true;
}
}
}
return false;
},
isExistPdd: function(key, itemId) { //检测某条数据在队列中是否存在
let data = this.getJson(key);
if (data instanceof Array) {
for (let p = 0; p < data.length; p++) {
if (itemId === data[p].goodsId) {
return true;
}
}
}
return false;
},
isExistJd: function(key, itemId) { //检测某条数据在队列中是否存在
let data = this.getJson(key);
if (data instanceof Array) {
for (let p = 0; p < data.length; p++) {
if (itemId === data[p].skuId) {
return true;
}
}
}
return false;
},
remove: function(key) { //删除某条队列
try {
uni.removeStorageSync(key);
//localStorage.removeItem(key)
} catch (e) {
// error
}
},
getCount: function(key) { //获取队列中全部数据数量
let data = this.getJson(key);
if (data instanceof Array) {
return data.length;
}
return 0;
},
};

BIN
components/colorui/.DS_Store vendored Normal file

Binary file not shown.

View File

@ -0,0 +1,184 @@
/*
Animation 微动画
基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28
*/
/* css 滤镜 控制黑白底色gif的 */
.gif-black{
mix-blend-mode: screen;
}
.gif-white{
mix-blend-mode: multiply;
}
/* Animation css */
[class*=animation-] {
animation-duration: .5s;
animation-timing-function: ease-out;
animation-fill-mode: both
}
.animation-fade {
animation-name: fade;
animation-duration: .8s;
animation-timing-function: linear
}
.animation-scale-up {
animation-name: scale-up
}
.animation-scale-down {
animation-name: scale-down
}
.animation-slide-top {
animation-name: slide-top
}
.animation-slide-bottom {
animation-name: slide-bottom
}
.animation-slide-left {
animation-name: slide-left
}
.animation-slide-right {
animation-name: slide-right
}
.animation-shake {
animation-name: shake
}
.animation-reverse {
animation-direction: reverse
}
@keyframes fade {
0% {
opacity: 0
}
100% {
opacity: 1
}
}
@keyframes scale-up {
0% {
opacity: 0;
transform: scale(.2)
}
100% {
opacity: 1;
transform: scale(1)
}
}
@keyframes scale-down {
0% {
opacity: 0;
transform: scale(1.8)
}
100% {
opacity: 1;
transform: scale(1)
}
}
@keyframes slide-top {
0% {
opacity: 0;
transform: translateY(-100%)
}
100% {
opacity: 1;
transform: translateY(0)
}
}
@keyframes slide-bottom {
0% {
opacity: 0;
transform: translateY(100%)
}
100% {
opacity: 1;
transform: translateY(0)
}
}
@keyframes shake {
0%,
100% {
transform: translateX(0)
}
10% {
transform: translateX(-9px)
}
20% {
transform: translateX(8px)
}
30% {
transform: translateX(-7px)
}
40% {
transform: translateX(6px)
}
50% {
transform: translateX(-5px)
}
60% {
transform: translateX(4px)
}
70% {
transform: translateX(-3px)
}
80% {
transform: translateX(2px)
}
90% {
transform: translateX(-1px)
}
}
@keyframes slide-left {
0% {
opacity: 0;
transform: translateX(-100%)
}
100% {
opacity: 1;
transform: translateX(0)
}
}
@keyframes slide-right {
0% {
opacity: 0;
transform: translateX(100%)
}
100% {
opacity: 1;
transform: translateX(0)
}
}

View File

@ -0,0 +1,65 @@
<template>
<view>
<view class="cu-custom" :style="[{height:CustomBar + 'px'}]">
<view class="cu-bar fixed" :style="style" :class="[bgImage!=''?'none-bg text-white bg-img':'',bgColor]">
<view class="action" @tap="BackPage" v-if="isBack">
<text class="cuIcon-back"></text>
<slot name="backText"></slot>
</view>
<view class="content" :style="[{top:StatusBar + 'px'}]">
<slot name="content"></slot>
</view>
<slot name="right"></slot>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
StatusBar: this.StatusBar,
CustomBar: this.CustomBar
};
},
name: 'cu-custom',
computed: {
style() {
var StatusBar= this.StatusBar;
var CustomBar= this.CustomBar;
var bgImage = this.bgImage;
var style = `height:${CustomBar}px;padding-top:${StatusBar}px;`;
if (this.bgImage) {
style = `${style}background-image:url(${bgImage});`;
}
return style
}
},
props: {
bgColor: {
type: String,
default: ''
},
isBack: {
type: [Boolean, String],
default: false
},
bgImage: {
type: String,
default: ''
},
},
methods: {
BackPage() {
uni.navigateBack({
delta: 1
});
}
}
}
</script>
<style>
</style>

1226
components/colorui/icon.css Normal file

File diff suppressed because one or more lines are too long

3912
components/colorui/main.css Normal file

File diff suppressed because it is too large Load Diff

69
components/empty.vue Normal file
View File

@ -0,0 +1,69 @@
<template>
<view class="page-box">
<view class="centre">
<image src="../static/images/empty.png" mode=""></image>
<view class="tips">
{{content}}
</view>
</view>
</view>
</template>
<script>
export default {
props: {
content: {
type: String,
default: '暂无内容'
}
}
}
</script>
<style lang="scss" scoped>
.page-box {
position: relative;
// left: 0;
height: 50vh;
z-index: 0;
top: 70px;
}
.centre {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
height: 400rpx;
text-align: center;
// padding: 200rpx auto;
font-size: 32rpx;
image {
width: 387rpx;
height: 341rpx;
// margin-bottom: 20rpx;
margin: 0 auto 20rpx;
// border: 1px dotted #000000;
}
.tips {
font-size: 32rpx;
color: #2F3044;
margin-top: 20rpx;
font-weight: 700;
}
.btn {
margin: 80rpx auto;
width: 600rpx;
border-radius: 32rpx;
line-height: 90rpx;
color: #ffffff;
font-size: 34rpx;
background: #5074FF;
}
}
</style>

269
components/permission.js Normal file
View File

@ -0,0 +1,269 @@
var isIos
// #ifdef APP-PLUS
isIos = (plus.os.name == "iOS")
// #endif
// 判断推送权限是否开启
function judgeIosPermissionPush() {
var result = false;
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
var enabledTypes = 0;
if (app.currentUserNotificationSettings) {
var settings = app.currentUserNotificationSettings();
enabledTypes = settings.plusGetAttribute("types");
console.log("enabledTypes1:" + enabledTypes);
if (enabledTypes == 0) {
console.log("推送权限没有开启");
} else {
result = true;
console.log("已经开启推送功能!")
}
plus.ios.deleteObject(settings);
} else {
enabledTypes = app.enabledRemoteNotificationTypes();
if (enabledTypes == 0) {
console.log("推送权限没有开启!");
} else {
result = true;
console.log("已经开启推送功能!")
}
console.log("enabledTypes2:" + enabledTypes);
}
plus.ios.deleteObject(app);
plus.ios.deleteObject(UIApplication);
return result;
}
// 判断定位权限是否开启
function judgeIosPermissionLocation() {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var status = cllocationManger.authorizationStatus();
result = (status != 2)
console.log("定位权限开启:" + result);
// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
/* var enable = cllocationManger.locationServicesEnabled();
var status = cllocationManger.authorizationStatus();
console.log("enable:" + enable);
console.log("status:" + status);
if (enable && status != 2) {
result = true;
console.log("手机定位服务已开启且已授予定位权限");
} else {
console.log("手机系统的定位没有打开或未给予定位权限");
} */
plus.ios.deleteObject(cllocationManger);
return result;
}
// 判断麦克风权限是否开启
function judgeIosPermissionRecord() {
var result = false;
var avaudiosession = plus.ios.import("AVAudioSession");
var avaudio = avaudiosession.sharedInstance();
var permissionStatus = avaudio.recordPermission();
console.log("permissionStatus:" + permissionStatus);
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
console.log("麦克风权限没有开启");
} else {
result = true;
console.log("麦克风权限已经开启");
}
plus.ios.deleteObject(avaudiosession);
return result;
}
// 判断相机权限是否开启
function judgeIosPermissionCamera() {
var result = false;
var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相机权限已经开启");
} else {
console.log("相机权限没有开启");
}
plus.ios.deleteObject(AVCaptureDevice);
return result;
}
// 判断相册权限是否开启
function judgeIosPermissionPhotoLibrary() {
var result = false;
var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
var authStatus = PHPhotoLibrary.authorizationStatus();
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相册权限已经开启");
} else {
console.log("相册权限没有开启");
}
plus.ios.deleteObject(PHPhotoLibrary);
return result;
}
// 判断通讯录权限是否开启
function judgeIosPermissionContact() {
var result = false;
var CNContactStore = plus.ios.import("CNContactStore");
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
if (cnAuthStatus == 3) {
result = true;
console.log("通讯录权限已经开启");
} else {
console.log("通讯录权限没有开启");
}
plus.ios.deleteObject(CNContactStore);
return result;
}
// 判断日历权限是否开启
function judgeIosPermissionCalendar() {
var result = false;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
if (ekAuthStatus == 3) {
result = true;
console.log("日历权限已经开启");
} else {
console.log("日历权限没有开启");
}
plus.ios.deleteObject(EKEventStore);
return result;
}
// 判断备忘录权限是否开启
function judgeIosPermissionMemo() {
var result = false;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
if (ekAuthStatus == 3) {
result = true;
console.log("备忘录权限已经开启");
} else {
console.log("备忘录权限没有开启");
}
plus.ios.deleteObject(EKEventStore);
return result;
}
// Android权限查询
function requestAndroidPermission(permissionID) {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
function(resultObj) {
var result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
var grantedPermission = resultObj.granted[i];
console.log('已获取的权限:' + grantedPermission);
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
resolve(result);
// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
// if (result != 1) {
// gotoAppPermissionSetting()
// }
},
function(error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
}
// 使用一个方法,根据参数判断权限
function judgeIosPermission(permissionID) {
if (permissionID == "location") {
return judgeIosPermissionLocation()
} else if (permissionID == "camera") {
return judgeIosPermissionCamera()
} else if (permissionID == "photoLibrary") {
return judgeIosPermissionPhotoLibrary()
} else if (permissionID == "record") {
return judgeIosPermissionRecord()
} else if (permissionID == "push") {
return judgeIosPermissionPush()
} else if (permissionID == "contact") {
return judgeIosPermissionContact()
} else if (permissionID == "calendar") {
return judgeIosPermissionCalendar()
} else if (permissionID == "memo") {
return judgeIosPermissionMemo()
}
return false;
}
// 跳转到**应用**的权限页面
function gotoAppPermissionSetting() {
if (isIos) {
var UIApplication = plus.ios.import("UIApplication");
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import("NSURL");
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString("app-settings:");
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
} else {
// console.log(plus.device.vendor);
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
}
}
// 检查系统的设备服务是否开启
// var checkSystemEnableLocation = async function () {
function checkSystemEnableLocation() {
if (isIos) {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var result = cllocationManger.locationServicesEnabled();
console.log("系统定位开启:" + result);
plus.ios.deleteObject(cllocationManger);
return result;
} else {
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass("android.location.LocationManager");
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
console.log("系统定位开启:" + result);
return result
}
}
export {
judgeIosPermission,
requestAndroidPermission,
checkSystemEnableLocation,
gotoAppPermissionSetting
}

View File

@ -0,0 +1,260 @@
<template>
<view class="filter-wrapper"
:style="{ height: height + 'rpx', top: top,'border-top':border?'1rpx solid #f2f2f2':'none' }"
@touchmove.stop.prevent="discard">
<view class="inner-wrapper">
<view class="mask" :class="showMask ? 'show' : 'hide'" @tap="tapMask"></view>
<view class="navs">
<view class="c-flex-align c-flex-center" :class="{ 'c-flex-center': index > 0, actNav: index === actNav }"
v-for="(item, index) in navData" :key="index" @click="navClick(index)">
<view v-for="(child, childx) in item" :key="childx" v-if="child.select">{{ child.label }}</view>
<image src="https://i.loli.net/2020/07/15/QsHxlr1gbSImvWt.png" mode="" class="icon-triangle"
v-if="index === actNav"></image>
<image src="https://i.loli.net/2020/07/15/xjVSvzWcH9NO7al.png" mode="" class="icon-triangle" v-else>
</image>
</view>
</view>
<scroll-view scroll-y="true" class="popup" :class="popupShow ? 'popupShow' : ''">
<view class="item-opt c-flex-align" :class="item.select ? 'actOpt' : ''"
v-for="(item, index) in navData[actNav]" :key="index" @click="handleOpt(index)">
{{ item.label }}
</view>
</scroll-view>
</view>
</view>
</template>
<script>
// import { getCurDateTime } from '@/libs/utils.js';
export default {
props: {
height: {
type: Number,
default: 100
},
top: {
type: String,
default: 'calc(var(--window-statsu-bar) + 44px)'
},
border: {
type: Boolean,
default: false
},
filterData: {
//
type: Array,
default: () => {
return [];
}
// default: () => {
// return [
// [{ text: '', value: '' }, { text: '1', value: 1 }, { text: '2', value: 2 }, { text: '3', value: 3 }],
// [{ text: '', value: '' }, { text: '1', value: 1 }, { text: '2', value: 2 }, { text: '3', value: 3 }]
// ];
// }
},
defaultIndex: {
//,
type: Array,
default: () => {
return [0];
}
}
},
data() {
return {
navData: [],
popupShow: false,
showMask: false,
actNav: null,
selDate: '选择日期',
selIndex: [] //
};
},
created() {
this.navData = this.filterData;
this.selIndex = this.defaultIndex;
this.keepStatus();
},
mounted() {
// this.selDate = getCurDateTime().formatDate;
},
methods: {
keepStatus() {
this.navData.forEach(itemnavData => {
itemnavData.map(child => {
child.select = false;
});
return itemnavData;
});
for (let i = 0; i < this.selIndex.length; i++) {
let selindex = this.selIndex[i];
this.navData[i][selindex].select = true;
}
},
navClick(index) {
if (index === this.actNav) {
this.tapMask();
return;
}
this.popupShow = true;
this.showMask = true;
this.actNav = index;
},
handleOpt(index) {
this.selIndex[this.actNav] = index;
this.keepStatus();
setTimeout(() => {
this.tapMask();
}, 100);
let data = [];
let res = this.navData.forEach(item => {
let sel = item.filter(child => child.select);
data.push(sel);
});
console.log(this.selIndex)
console.log(data);
this.$emit('onSelected', data);
},
dateClick() {
this.tapMask();
},
tapMask() {
this.showMask = false;
this.popupShow = false;
this.actNav = null;
},
handleDate(e) {
let d = e.detail.value;
this.selDate = d;
this.$emit('dateChange', d);
},
discard() {}
}
};
</script>
<style lang="scss" scoped>
page {
font-size: 28rpx;
}
.c-flex-align {
display: flex;
align-items: center;
}
.c-flex-center {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.filter-wrapper {
position: relative;
// left: 0;
width: 750rpx;
z-index: 99;
// padding: 0 20rpx;
.inner-wrapper {
position: relative;
.navs {
position: relative;
height: 80rpx;
// padding: 0 40rpx;
display: flex;
align-items: center;
justify-content: space-between;
background-color: #FFFFFF;
// border-bottom: 2rpx solid #f5f6f9;
color: #8b9aae;
z-index: 999;
box-sizing: border-box;
// border-radius: 10rpx;
&>view {
flex: 1;
height: 100%;
flex-direction: row;
z-index: 999;
}
.date {
justify-content: flex-end;
}
.actNav {
color: #FCD202;
font-weight: bold;
}
}
.mask {
z-index: 666;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0);
transition: background-color 0.15s linear;
&.show {
background-color: rgba(0, 0, 0, 0.4);
}
&.hide {
display: none;
}
}
.popup {
position: relative;
max-height: 500rpx;
background-color: #FFFFFF;
border-bottom-left-radius: 20rpx;
border-bottom-right-radius: 20rpx;
overflow: scroll;
z-index: 999;
transition: all 2s linear;
opacity: 0;
display: none;
.item-opt {
height: 100rpx;
padding: 0 40rpx;
color: #8b9aae;
border-bottom: 2rpx solid #f1f1f1;
}
.actOpt {
color: #FCD202;
font-weight: bold;
position: relative;
&::after {
content: '✓';
font-weight: bold;
font-size: 36rpx;
position: absolute;
right: 40rpx;
}
}
}
.popupShow {
display: block;
opacity: 1;
}
}
.icon-triangle {
width: 16rpx;
height: 16rpx;
margin-left: 10rpx;
}
}
</style>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,108 @@
<template>
<view>
<!-- 按钮 -->
<button :class="['buttonBorder',!_rotate?'dlbutton':'dlbutton_loading']" :style="{'background':bgColor, 'color': fontColor}">
<view :class="_rotate?'rotate_loop':''">
<text v-if="_rotate" class="cuIcon cuIcon-loading1 "></text>
<text v-if="!_rotate">{{ text }}</text>
</view>
</button>
</view>
</template>
<script>
export default{
props:{
text: String, //
rotate:{
//
type: [Boolean,String],
default: false,
},
bgColor:{
//
type: String,
// default: "linear-gradient(to right, rgba(0,0,0,0.7), rgba(0,0,0,0.6))",
},
fontColor:{
//
type: String,
default: "#FFFFFF",
},
},
computed:{
_rotate() {
//
return String(this.rotate) !== 'false'
},
}
}
</script>
<style>
@import url("./css/icon.css");
.dlbutton {
color: #FFFFFF;
font-size: 30upx;
width:601upx;
height:90upx;
background: #FCD202;
box-shadow:0upx 0upx 13upx 0upx rgba(164,217,228,0.4);
border-radius:2.5rem;
line-height: 90upx;
text-align: center;
margin-left: auto;
margin-right: auto;
margin-top: 96upx;
}
.dlbutton_loading {
color: #FFFFFF;
font-size: 30upx;
width:100upx;
height:100upx;
background: #FCD202;
box-shadow:0upx 0upx 13upx 0upx rgba(164,217,228,0.4);
border-radius:2.5rem;
line-height: 100upx;
text-align: center;
margin-left: auto;
margin-right: auto;
margin-top: 96upx;
}
.buttonBorder{
border: none ;
border-radius: 2.5rem ;
-webkit-box-shadow: 0 0 60upx 0 rgba(0,0,0,.2) ;
box-shadow: 0 0 60upx 0 rgba(0,0,0,.2) ;
-webkit-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
-moz-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
-ms-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
-o-transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
transition: all 0.4s cubic-bezier(.57,.19,.51,.95);
}
/* 旋转动画 */
.rotate_loop{
-webkit-transition-property: -webkit-transform;
-webkit-transition-duration: 1s;
-moz-transition-property: -moz-transform;
-moz-transition-duration: 1s;
-webkit-animation: rotate 1s linear infinite;
-moz-animation: rotate 1s linear infinite;
-o-animation: rotate 1s linear infinite;
animation: rotate 1s linear infinite;
}
@-webkit-keyframes rotate{from{-webkit-transform: rotate(0deg)}
to{-webkit-transform: rotate(360deg)}
}
@-moz-keyframes rotate{from{-moz-transform: rotate(0deg)}
to{-moz-transform: rotate(359deg)}
}
@-o-keyframes rotate{from{-o-transform: rotate(0deg)}
to{-o-transform: rotate(359deg)}
}
@keyframes rotate{from{transform: rotate(0deg)}
to{transform: rotate(359deg)}
}
</style>

View File

@ -0,0 +1,223 @@
<template>
<view class="main-list oBorder">
<!-- 文本框 -->
<input
class="main-input"
:value="value"
:type="_type"
:maxlength="maxlength"
:placeholder="placeholder"
:password="type==='password'&&!showPassword"
@input="onInput"
/>
<!-- 是否可见密码 -->
<image
v-if="_isShowPass&&type==='password'&&!_isShowCode"
class="img cuIcon"
:class="showPassword?'cuIcon-attention':'cuIcon-attentionforbid'"
@tap="showPass"
></image>
<!-- 倒计时 -->
<view
v-if="_isShowCode&&!_isShowPass"
:class="['vercode',{'vercode-run': second>0}]"
@click="setCode"
>{{ getVerCodeSecond }}</view>
<view
v-if="_isShowGet"
class="vercode"
@click="setNumberCode"
>官方邀请码</view>
</view>
</template>
<script>
var _this, countDown;
export default{
data(){
return{
showPassword: false, //
second: 0, //
isRunCode: false, //
}
},
props:{
type: String, //
value: String, //
placeholder: String, //
maxlength: {
//
type: [Number,String],
default: 20,
},
isShowPass:{
//
type: [Boolean,String],
default: false,
},
isShowCode:{
//
type: [Boolean,String],
default: false,
},
isShowGet:{
//
type: [Boolean,String],
default: false,
},
codeText:{
type: String,
default: "获取验证码",
},
setTime:{
//
type: [Number,String],
default: 60,
}
},
model: {
prop: 'value',
event: 'input'
},
mounted() {
_this=this
//
this.$on('runCode',(val)=>{
this.runCode(val);
});
clearInterval(countDown);//
},
methods:{
showPass(){
//
this.showPassword = !this.showPassword
},
onInput(e) {
//
this.$emit('input', e.target.value)
},
setCode(){
//
if(this.isRunCode){
//
return false;
}
this.$emit('setCode')
},
setNumberCode(){
this.$emit('setNumberCode')
},
runCode(val){
//
if(String(val)=="0"){
//
this.second = 0; //
clearInterval(countDown);//
this.isRunCode= false; //
return false;
}
if(this.isRunCode){
//
return false;
}
this.isRunCode= true
this.second = this._setTime //
let _this=this;
countDown = setInterval(function(){
_this.second--
if(_this.second==0){
_this.isRunCode= false
clearInterval(countDown)
}
},1000)
}
},
computed:{
_type(){
//
const type = this.type
return type == 'password' ? 'text' : type
},
_isShowPass() {
//
return String(this.isShowPass) !== 'false'
},
_isShowCode() {
//
return String(this.isShowCode) !== 'false'
},
_isShowGet() {
//
return String(this.isShowGet) !== 'false'
},
_setTime() {
//
const setTime = Number(this.setTime)
return setTime>0 ? setTime : 60
},
getVerCodeSecond(){
//
if(this.second<=0){
return this.codeText;
}else{
if(this.second<10){
return '0'+this.second;
}else{
return this.second;
}
}
}
}
}
</script>
<style>
@import url("./css/icon.css");
.main-list{
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
height: 90upx; /* Input 高度 */
color: #333333;
padding: 32upx;
margin-top:18upx;
margin-bottom: 18upx;
}
.img{
width: 32upx;
height: 32upx;
font-size: 32upx;
}
.main-input{
flex: 1;
text-align: left;
font-size: 28upx;
/* line-height: 100upx; */
padding-right: 10upx;
margin-left: 20upx;
}
.vercode {
color: rgba(0,0,0,0.7);
font-size: 24upx;
line-height: 100upx;
}
.vercode-run {
color: rgba(0,0,0,0.4) !important;
}
.oBorder{
border: none;
border-radius: 2.5rem ;
-webkit-box-shadow: 0 0 60upx 0 rgba(43,86,112,.1) ;
box-shadow: 0 0 60upx 0 rgba(43,86,112,.1) ;
}
</style>

BIN
file/mxkj.keystore Normal file

Binary file not shown.

14
index.html Normal file
View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>

36
main.js Normal file
View File

@ -0,0 +1,36 @@
import App from './App'
import HttpRequest from './common/httpRequest'
import HttpCache from './common/cache'
import queue from './common/queue'
Vue.config.productionTip = false
Vue.prototype.$Request = HttpRequest;
Vue.prototype.$queue = queue;
Vue.prototype.$Sysconf = HttpRequest.config;
Vue.prototype.$SysCache = HttpCache;
// 引入全局uView
import uView from "uview-ui";
Vue.use(uView);
// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif

207
manifest.json Normal file
View File

@ -0,0 +1,207 @@
{
"name" : "同城外卖用户端",
"appid" : "__UNI__CA593C1",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App */
"app-plus" : {
"privacy" : {
"prompt" : "template",
"template" : {
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://tcwm.xianmaxiong.com/my/setting/xieyi\">《服务协议》</a>和<a href=\"https://tcwm.xianmaxiong.com/my/setting/mimi\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面同意按钮开始接受我们的服务。",
"buttonAccept" : "同意",
"buttonRefuse" : "不同意"
}
},
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* */
"modules" : {
"Maps" : {},
"Payment" : {},
"Push" : {},
"Geolocation" : {},
"Share" : {},
"Record" : {},
"Camera" : {}
},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios" : {
"privacyDescription" : {
"NSPhotoLibraryUsageDescription" : "该应用需要读取你的相册,如果不允许,你将无法从系统相册选择照片编辑头像。",
"NSPhotoLibraryAddUsageDescription" : "是否允许此App在你的APP写入照片如果不允许你将无法保存图片到本地。",
"NSCameraUsageDescription" : "是否允许此App使用你的相机如果不允许你将无法使用拍照等功能。",
"NSLocationAlwaysAndWhenInUseUsageDescription" : "是否允许此App使用你的位置如果不允许你将无法获取到您所在位置附近商家。",
"NSAppleMusicUsageDescription" : "App需要您的同意,才能访问媒体资料库权限,如果不允许,你将无法从系统相册选择照片发布需求和修改头像",
"NSLocalNetworkUsageDescription" : "是否允许此App使用你的本地网络权限如果不允许你将无法获取在线内容。",
"NSLocationAlwaysUsageDescription" : "是否允许此App使用你的位置如果不允许你将无法获取到您所在位置附近商家。",
"NSLocationWhenInUseUsageDescription" : "是否允许此App使用你的位置如果不允许你将无法获取到您所在位置附近商家。",
"NSUserTrackingUsageDescription" : "请放心,开启权限不会获取您在其他站点的隐私信息,该权限仅用于标识设备并保障服务安全与提示浏览体验"
},
"idfa" : true,
"dSYMs" : false
},
/* SDK */
"sdkConfigs" : {
"maps" : {
"amap" : {
"appkey_ios" : "0745993c59c890b5bb67ba6595400e76",
"appkey_android" : "7af0ea8202f9f5f8570afa4f262ffbc1"
}
},
"payment" : {
"alipay" : {
"__platform__" : [ "android" ]
},
"weixin" : {
"__platform__" : [ "android" ],
"appid" : "wxeaffcaea958472d3",
"UniversalLinks" : "https://maxiong.xianmxkj.com/"
}
},
"push" : {
"unipush" : {}
},
"oauth" : {},
"ad" : {},
"geolocation" : {
"amap" : {
"__platform__" : [ "ios", "android" ],
"appkey_ios" : "0745993c59c890b5bb67ba6595400e76",
"appkey_android" : "7af0ea8202f9f5f8570afa4f262ffbc1"
}
},
"share" : {
"weixin" : {
"appid" : "wxeaffcaea958472d3",
"UniversalLinks" : "https://maxiong.xianmxkj.com/"
}
}
},
"icons" : {
"android" : {
"hdpi" : "unpackage/res/icons/72x72.png",
"xhdpi" : "unpackage/res/icons/96x96.png",
"xxhdpi" : "unpackage/res/icons/144x144.png",
"xxxhdpi" : "unpackage/res/icons/192x192.png"
},
"ios" : {
"appstore" : "unpackage/res/icons/1024x1024.png",
"ipad" : {
"app" : "unpackage/res/icons/76x76.png",
"app@2x" : "unpackage/res/icons/152x152.png",
"notification" : "unpackage/res/icons/20x20.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"proapp@2x" : "unpackage/res/icons/167x167.png",
"settings" : "unpackage/res/icons/29x29.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"spotlight" : "unpackage/res/icons/40x40.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png"
},
"iphone" : {
"app@2x" : "unpackage/res/icons/120x120.png",
"app@3x" : "unpackage/res/icons/180x180.png",
"notification@2x" : "unpackage/res/icons/40x40.png",
"notification@3x" : "unpackage/res/icons/60x60.png",
"settings@2x" : "unpackage/res/icons/58x58.png",
"settings@3x" : "unpackage/res/icons/87x87.png",
"spotlight@2x" : "unpackage/res/icons/80x80.png",
"spotlight@3x" : "unpackage/res/icons/120x120.png"
}
}
}
}
},
/* */
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wxcf9fdee37e8a4803",
"setting" : {
"urlCheck" : false,
"minified" : true
},
"usingComponents" : true,
"permission" : {
"scope.userLocation" : {
"desc" : "获取您的位置"
}
},
"plugins" : {
"routePlan" : {
"version" : "1.0.19",
"provider" : "wx50b5593e81dd937a"
}
},
"__usePrivacyCheck__" : false,
"requiredPrivateInfos" : [ "getLocation", "chooseLocation" ]
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2",
"h5" : {
"sdkConfigs" : {
"maps" : {
"qqmap" : {
"key" : "K5DBZ-MTOHV-UUKPU-UXJUB-AHPOH-U7BZD"
}
}
},
"devServer" : {
"port" : 8080,
"https" : false
},
"router" : {
"mode" : "history"
}
}
}

323
my/address/add.vue Normal file
View File

@ -0,0 +1,323 @@
<template>
<view class="" v-if="XCXIsSelect=='是'">
<form>
<view class="cu-form-group">
<view class="title">联系人</view>
<input placeholder="请输入联系人" name="input" v-model="form.userName"></input>
</view>
<view class="cu-form-group">
<view class="title">联系电话</view>
<input placeholder="请输入联系电话" name="input" v-model="form.userPhone" maxlength="11"></input>
</view>
<view class="cu-form-group" @click="pickerShow">
<view class="title">所在地区</view>
<input placeholder="请选择地区" name="input" disabled v-model="form.address"></input>
<text class='cuIcon-locationfill text-orange'></text>
</view>
<view class="cu-form-group">
<view class="title">详细地址</view>
<input placeholder="请输入详细地址" name="input" v-model="form.addressDetail"></input>
</view>
<view class="cu-form-group">
<view class="title">设为默认</view>
<switch @change="SwitchA" :class="form.addressDefault?'checked':''"
:checked="form.addressDefault?true:false"></switch>
</view>
</form>
<view class="btn" v-if="!id">
<view class="address_push" @click="submit">保存</view>
</view>
<view class="btn" v-if="id">
<view class="address_push" @click="updata">修改</view>
</view>
</view>
<view v-else>
<view style="font-size: 28upx;" v-html="content"></view>
</view>
</template>
<script>
import {
requestAndroidPermission,
gotoAppPermissionSetting
} from '@/components/permission.js'
export default {
data() {
return {
form: {
addressId: '',
userName: '',
userPhone: '',
address: '',
addressDetail: '',
addressDefault: 0, // 0 1
lng: '',
lat: ''
},
// switchA: false,
region: '',
id: '',
latitude: '',
longitude: '',
XCXIsSelect: '是',
content: ''
}
},
onLoad(option) {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect') ? this.$queue.getData('XCXIsSelect') : '是';
if (this.XCXIsSelect == '否') {
this.getGuize()
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '添加地址'
});
}
this.id = option.id
if (option.id) {
this.getAddressDet(option.id)
uni.setNavigationBarTitle({
title: "修改地址"
})
}
},
methods: {
getGuize() {
this.$Request.getT('/app/common/type/237').then(res => {
if (res.code == 0) {
this.content = res.data.value;
// this.tit = res.data.min
}
});
},
pickerShow() {
let that = this
// An highlighted block
uni.chooseLocation({
success: function(res) {
console.log(res)
console.log('位置名称:' + res.name);
console.log('详细地址:' + res.address);
console.log('纬度:' + res.latitude);
console.log('经度:' + res.longitude);
let latitude = res.latitude; //
let longitude = res.longitude; //
that.form.lng = longitude
that.form.lat = latitude
that.form.addressDetail = res.name
let data = {
lat: latitude,
lng: longitude
}
that.$Request.get("/app/address/selectCity", data).then(res => {
if (res.code == 0) {
that.form.province = res.data.province
that.form.city = res.data.city
that.form.district = res.data.district
that.form.address = res.data.province + res.data.city + res.data
.district
}
});
},fail(e) {
console.log(e)
uni.showModal({
title: '温馨提示',
content: '您的定位权限未开启,请开启后再来刷新操作吧!',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if(res.confirm){
// #ifdef MP-WEIXIN
uni.openSetting({ //
success(rea) {
console.log(rea.authSetting)
}
});
// #endif
// #ifdef APP-PLUS
gotoAppPermissionSetting()
// #endif
}
}
});
}
});
},
SwitchA(e) {
console.log(e.detail.value)
this.form.addressDefault = e.detail.value
},
//
regionConfirm(e) {
console.log(e)
this.form.province = e.province.label
this.form.city = e.city.label
this.form.area = e.area.label
this.region = e.province.label + '-' + e.city.label + '-' + e.area.label;
console.log(this.region)
},
//
submit() {
if (!this.form.userName) {
uni.showToast({
title: '请输入姓名',
icon: 'none'
})
return
}
if (!this.form.userPhone) {
uni.showToast({
title: '请输入联系电话',
icon: 'none'
})
return
}
if (this.form.userPhone.length<=10) {
uni.showToast({
title: '请输入正确联系电话',
icon: 'none'
})
return
}
if (!this.form.address) {
uni.showToast({
title: '请选择所在地区',
icon: 'none'
})
return
}
if (!this.form.addressDetail) {
uni.showToast({
title: '请输入详细地址',
icon: 'none'
})
return
}
this.form.addressDefault = this.form.addressDefault ? 1 : 0
this.$Request.postJson("/app/address/insertAddress", this.form).then(res => {
if (res.code == 0) {
uni.showToast({
title: '保存成功',
icon: 'none'
})
setTimeout(function() {
uni.navigateBack()
}, 1000)
}
});
},
//
updata() {
if (!this.form.userName) {
uni.showToast({
title: '请输入姓名',
icon: 'none'
})
return
}
if (!this.form.userPhone) {
uni.showToast({
title: '请输入联系电话',
icon: 'none'
})
return
}
if (!this.form.address) {
uni.showToast({
title: '请选择所在地区',
icon: 'none'
})
return
}
if (!this.form.addressDetail) {
uni.showToast({
title: '请输入详细地址',
icon: 'none'
})
return
}
let data = {
addressId: this.form.addressId,
userName: this.form.userName,
userPhone: this.form.userPhone,
province: this.form.province,
city: this.form.city,
district: this.form.district,
address: this.form.address,
addressDetail: this.form.addressDetail,
addressDefault: this.form.addressDefault ? 1 : 0,
lng: this.form.lng,
lat: this.form.lat,
}
this.$Request.postJson("/app/address/updateAddress", data).then(res => {
if (res.code == 0) {
uni.showToast({
title: '修改成功',
icon: 'none'
})
setTimeout(function() {
uni.navigateBack()
}, 1500)
}
});
},
// id
getAddressDet(e) {
this.$Request.get("/app/address/selectAddressById?addressId=" + e).then(res => {
if (res.code == 0) {
this.form.addressId = res.data.addressId
this.form.userName = res.data.userName
this.form.userPhone = res.data.userPhone
this.form.address = res.data.province + res.data.city + res.data.district
this.form.addressDetail = res.data.addressDetail
this.form.lng = res.data.lng
this.form.lat = res.data.lat
this.form.addressDefault = res.data.addressDefault
that.form.province = res.data.province
that.form.city = res.data.v
that.form.district = res.data.district
}
});
}
}
}
</script>
<style>
page {
background-color: #fff !important;
}
/* 添加收货地址 */
.btn {
/* position: fixed;
bottom: 0rpx; */
width: 100%;
height: 100rpx;
line-height: 100rpx;
background-color: white;
margin-top: 30rpx;
}
.address_push {
width: 90%;
height: 80rpx;
margin: 0 auto;
background: #FCD202;
border-radius: 20rpx;
color: white;
text-align: center;
line-height: 80rpx;
font-size: 35rpx;
}
</style>

335
my/address/index.vue Normal file
View File

@ -0,0 +1,335 @@
<template>
<view class="address" v-if="XCXIsSelect=='是'">
<view class="bg-white radius margin-sm" v-for="(item, index) in list" :key="index">
<view class="content_top" @click="goBack(item)">
<view class="content_part1">
<view class="content_name">{{item.userName}}</view>
<view class="content_number">
{{item.userPhone}}
</view>
<view class="content_btn" v-if="item.addressDefault">默认</view>
</view>
<view class="content_part2">
{{item.province}}{{item.city}}{{item.district}}{{item.addressDetail}}
</view>
</view>
<!-- 线条 -->
<!-- <u-line color="#c1c1c1" border-style="solid" direction="row"></u-line> -->
<view class="content_bottom">
<view class="bottom_right">
<view class="write" @click.stop="update(item)">
<image src="../static/address/write.png"></image>
</view>
<view class="dete" @click.stop="del(item)">
<image src="../static/address/dete.png"></image>
</view>
</view>
</view>
</view>
<empty v-if="list.length == 0"></empty>
<view style="height: 100rpx;"></view>
<!-- 添加收货地址 -->
<view class="btn">
<view class="address_push" @click="addAddress">添加收货地址</view>
</view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
list: [],
checked: false,
page: 1,
limit: 10,
add: 0,
addressType: '',
totalCount: 0,
XCXIsSelect: '是',
}
},
onLoad(option) {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect') ? this.$queue.getData('XCXIsSelect') : '是';
if (this.XCXIsSelect == '否') {
this.getGuize()
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '地址管理'
});
}
this.add = option.add ? option.add : 0
if (option.addressType) {
this.addressType = option.addressType
}
},
onShow() {
this.page = 1
this.getAddressList()
},
methods: {
bindOrdersure() {
uni.navigateTo({
url: '/pages/order_sure/order_sure'
})
},
//
addAddress() {
uni.navigateTo({
url: '/my/address/add?page=2'
})
},
//
getAddressList() {
let data = {
page: this.page,
limit: this.limit
}
this.$Request.get("/app/address/selectAddressList", data).then(res => {
if (res.code == 0) {
this.totalCount = res.data.totalCount
if (this.page == 1) {
this.list = res.data.list
} else {
this.list = [...this.list, ...res.data.list]
}
}
uni.stopPullDownRefresh();
uni.hideLoading();
});
},
//
checkboxChange(e) {
console.log(e)
// this.list.forEach(res => {
// if (res.addressId == e.addressId) {
let data = {
addressId: e.addressId,
userName: e.userName,
userPhone: e.userPhone,
address: e.address,
addressDetail: e.addressDetail,
addressDefault: e.addressDefault ? 0 : 1
}
this.$Request.postJson("/app/address/updateAddress", data).then(res => {
if (res.code == 0) {
this.getAddressList()
}
});
// } else {
// res.addressDefault = 0
// }
// })
},
//
update(e) {
uni.navigateTo({
url: '/my/address/add?id=' + e.addressId
})
},
//
del(e) {
let that = this
uni.showModal({
title: '提示',
content: '确认删除吗',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
that.$Request.post("/app/address/deleteAddress", {
addressId: e.addressId
}).then(res => {
if (res.code == 0) {
uni.showToast({
title: '删除成功',
icon: 'none'
})
that.page = 1
that.getAddressList()
}
});
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
//
goBack(e) {
console.log(e)
if (this.add) {
let pages = getCurrentPages();
let prevPage = pages[pages.length - 2];
// addressId
// #ifdef MP-WEIXIN
prevPage.$vm._data.addressId = e.addressId
prevPage.$vm._data.addressType = this.addressType
uni.navigateBack()
// #endif
// #ifdef H5
prevPage._data.addressId = e.addressId
prevPage._data.addressType = this.addressType
uni.navigateBack()
// #endif
// #ifdef APP-PLUS
uni.setStorageSync('addressId',e.addressId)
uni.setStorageSync('addressType',this.addressType)
setTimeout(function(){
uni.navigateBack()
},10)
// #endif
}
}
},
onReachBottom: function() {
if(this.list.length<this.totalCount) {
this.page = this.page + 1;
this.getAddressList()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
onPullDownRefresh: function() {
this.page = 1;
this.getAddressList();
},
}
</script>
<style>
body {
background-color: #eeeeee;
background-size: cover;
box-sizing: border-box;
}
.address {
width: 100%;
}
.address_content {
width: 100%;
background: #FFFFFF;
margin-top: 20rpx;
}
.content_top {
width: 90%;
margin: 0 auto;
}
.content_part1 {
font-size: 32rpx;
color: #333333;
display: flex;
align-items: center;
padding-top: 30rpx;
}
.content_name {
font-size: 36rpx;
font-weight: bold;
}
.content_number {
margin-left: 20rpx;
}
.content_btn {
padding: 4rpx 10rpx;
border-radius: 10rpx;
border: 1rpx solid #FCD202;
color: #FCD202;
margin-left: 20rpx;
font-size: 22rpx;
text-align: center;
}
.content_part2 {
color: #999999;
font-size: 28rpx;
margin-top: 20rpx;
margin-bottom: 30rpx;
}
.content_bottom {
display: flex;
width: 90%;
margin: 0 auto;
height: 60rpx;
}
.bottom_left {
flex: 1;
display: flex;
justify-content: left;
align-items: center;
}
.bottom_right {
flex: 1;
position: relative;
display: flex;
justify-content: center;
align-items: center;
}
.write image {
width: 35rpx;
height: 35rpx;
}
.dete image {
width: 35rpx;
height: 35rpx;
}
.write {
position: absolute;
right: 75rpx;
}
.dete {
position: absolute;
right: 0rpx;
}
/* 添加收货地址 */
.btn {
position: fixed;
bottom: 0rpx;
width: 100%;
height: 100rpx;
line-height: 100rpx;
background-color: white;
padding-top: 10rpx;
}
.address_push {
width: 90%;
height: 80rpx;
margin: 0 auto;
background: #FCD202;
border-radius: 20rpx;
color: white;
text-align: center;
line-height: 80rpx;
font-size: 35rpx;
}
</style>

704
my/apply/index.vue Normal file
View File

@ -0,0 +1,704 @@
<template>
<view class="padding">
<view style="padding-bottom: 20upx;color: red;" v-if="auditReason && shop.status == 2">{{auditReason}}</view>
<view class="text-white padding bg radius">
<u-form :model="shop" label-position="top">
<u-form-item label="商铺主营类型">
<u-input v-model="shop.shopTypeName" placeholder="请输入商铺主营类型" disabled @click="show = true" />
</u-form-item>
<u-form-item label="商铺名称">
<u-input v-model="shop.name" placeholder="请填写 (必填)" />
</u-form-item>
<u-form-item label="省市区">
<u-input v-model="shop.address" disabled placeholder="请填写" @click="bindOpen" />
</u-form-item>
<u-form-item label="商铺详细地址">
<!-- <u-input v-model="shop.detailedAddress" placeholder="请填写" /> -->
<textarea v-model="shop.detailedAddress" placeholder-style="color: #aaaaaa;font-size: 28rpx;"
placeholder="请填写商铺详细地址" style="height: 120rpx;width: 100%;font-size: 28rpx;" />
</u-form-item>
</u-form>
</view>
<view class="text-white padding bg radius margin-top">
<u-form :model="shop" label-position="top">
<u-form-item label="联系人姓名">
<u-input v-model="shop.userName" placeholder="请输入真实姓名" />
</u-form-item>
<u-form-item label="身份证号">
<u-input v-model="shop.isNumber" maxlength="20" placeholder="请填写 (必填)" />
</u-form-item>
<u-form-item label="联系电话">
<u-input v-model="shop.phone" disabled type="number" placeholder="请填写 (必填)" />
</u-form-item>
<u-form-item label="验证码" v-if="shop.status == null||shop.status == 2">
<u-input v-model="shop.verCode" type="number" placeholder="请填写 (必填)"
style="width: 50%;display: inline-block;" />
<button class="send-msg" @click="sendMsg">{{sendTime}}</button>
</u-form-item>
</u-form>
</view>
<view class="text-white padding bg radius margin-tb">
<view>
<view class="text-lg margin-top-sm text-black">店铺logo</view>
<view class="flex" style="overflow: hidden;flex-wrap: wrap;">
<view v-if="detailsImg.length">
<view class="margin-top flex margin-right-sm flex-wrap">
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;">
<image :src="detailsImg" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="removeImg(1)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
</view>
</view>
<view class="margin-top" @click="addImages(2)" v-if="detailsImg.length<=0">
<view style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="../static/apply/addimg.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center text-black">添加图片</view>
</view>
</view>
</view>
</view>
</view>
<view>
<view class="text-lg margin-top-sm text-black">营业执照</view>
<view class="flex" style="overflow: hidden;flex-wrap: wrap;">
<view v-if="shop.business.length">
<view class="margin-top flex margin-right-sm flex-wrap">
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;">
<image :src="shop.business" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="removeImgs(1)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
</view>
</view>
<view class="margin-top" @click="addImage(1)" v-if="shop.business.length<=0">
<view style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="../static/apply/addimg.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center text-black">添加图片</view>
</view>
</view>
</view>
</view>
</view>
<view>
<view class="text-lg margin-top-sm text-black">身份证正面</view>
<view class="flex" style="overflow: hidden;flex-wrap: wrap;">
<view v-if="shop.front.length">
<view class="margin-top flex margin-right-sm flex-wrap">
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;">
<image :src="shop.front" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="removeImgs(2)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
</view>
</view>
<view class="margin-top" @click="addImage(2)" v-if="shop.front.length<=0">
<view style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="../static/apply/addimg.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center text-black">添加图片</view>
</view>
</view>
</view>
</view>
</view>
<view>
<view class="text-lg margin-top-sm text-black">身份证反面片</view>
<view class="flex" style="overflow: hidden;flex-wrap: wrap;">
<view v-if="shop.back.length">
<view class="margin-top flex margin-right-sm flex-wrap">
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;">
<image :src="shop.back" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="removeImgs(3)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
</view>
</view>
<view class="margin-top" @click="addImage(3)" v-if="shop.back.length<=0">
<view style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="../static/apply/addimg.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center text-black">添加图片</view>
</view>
</view>
</view>
</view>
</view>
</view>
<u-button v-if="shop.status == null || shop.status == 2" @click="submit" class="margin-top"
:custom-style="customStyle" shape="square" :hair-line="false">提交审核
</u-button>
<u-button v-if="shop.status == 0" class="margin-top" disabled :custom-style="customStyle" shape="square"
:hair-line="false">审核中
</u-button>
<!-- 分类列表 -->
<u-select v-model="show" :list="shopList" valueName='id' labelName="shopTypeName" @confirm="confirm"></u-select>
</view>
</template>
<script>
import configdata from '@/common/config.js';
export default {
data() {
return {
shop: {
type: '',
typeid: '',
name: '',
address: '',
shopTypeName: '',
detailedAddress: '',
userName: '',
isNumber: '',
phone: '',
verCode: '',
latitude: '',
longitude: '',
//
detailsImg: [],
business: '',
front: '',
back: ""
},
customStyle: {
backgroundColor: '#FFCC00',
color: '#000000',
border: 0
},
status: 1,
//
detailsImg: [],
shopId: '',
page: 1,
limit: 100,
show: false,
shopList: [],
city: '',
province: '',
district: '',
auditReason: '',
Settedlist: [],
sending: false,
sendTime: '获取验证码',
count: 60,
XCXIsSelect: '是',
}
},
onLoad(option) {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
if (this.XCXIsSelect == '否') {
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '商家入驻'
});
}
// uni.getLocation({
// type: 'gcj02',
// success: (res) => {
// console.log(res.latitude);
// console.log(res.longitude);
// console.log("res___:" + JSON.stringify(res));
// },
// fail(e) {
// console.log(e);
// }
// });
// this.Settedlist = uni.getStorageSync("Settedlist")
// if(this.Settedlist){
// this.auditReason = this.Settedlist.auditReason
// this.shop.name = this.Settedlist.shopName
// this.shop.typeid = this.Settedlist.shopTypeId
// this.shop.shopTypeName = this.Settedlist.shopTypeName
// this.shop.address = this.Settedlist.province + this.Settedlist.city + this.Settedlist.district
// this.shop.detailedAddress = this.Settedlist.detailedAddress
// this.shop.latitude = this.Settedlist.shopLat
// this.shop.longitude = this.Settedlist.shopLng
// this.province = this.Settedlist.province
// this.city = this.Settedlist.city
// this.district = this.Settedlist.district
// this.shop.userName =this.Settedlist.realName
// this.shop.isNumber = this.Settedlist.identitycardNumber
// this.shop.phone = this.Settedlist.phone
// this.shop.business = this.Settedlist.businessLicense
// this.shop.front = this.Settedlist.identitycardPro
// this.shop.back = this.Settedlist.identitycardCon
// this.shop.detailsImg = this.Settedlist.shopCover
// this.detailsImg = this.Settedlist.shopCover.split(',')
// }else{
this.getShopList()
// }
this.getData()
},
onShow() {
this.shop.phone = this.$queue.getData("phone");
},
onHide() {
},
methods: {
getData() {
this.$Request.get("/app/shop/selectShopByUserId").then(res => {
if (res.code == 0 && res.data) {
this.auditReason = res.data.auditReason
this.shop.shopTypeName = res.data.shopTypeName
this.shop.name = res.data.shopName
this.shop.address = res.data.province + res.data.city + res.data.district
this.shop.detailedAddress = res.data.detailedAddress
this.shop.userName = res.data.realName
this.shop.isNumber = res.data.identitycardNumber
this.shop.phone = res.data.phone
this.shop.detailsImg = res.data.shopCover //
this.detailsImg = res.data.shopCover.split(',')
this.shop.business = res.data.businessLicense //
this.shop.front = res.data.identitycardPro //
this.shop.back = res.data.identitycardCon //
this.shop.latitude = res.data.shopLat
this.shop.longitude = res.data.shopLng
this.province = res.data.province
this.city = res.data.city
this.district = res.data.district
this.shop.status = res.data.status
}
});
},
confirm(e) {
console.log(e)
this.shop.shopTypeName = e[0].label
this.shop.typeid = e[0].value
},
//
getShopList() {
let data = {
page: this.page,
limit: this.limit,
}
this.$Request.get("/app/shoptype/selectShopTypeList", data).then(res => {
if (res.code == 0) {
this.shopList = res.data.list
}
});
},
//
removeImg(index) {
this.detailsImg = ''
},
//
removeImgs(index) {
if (index == 1) {
this.shop.business = ''
} else if (index == 2) {
this.shop.front = ''
} else if (index == 3) {
this.shop.back = ''
}
},
bindOpen() {
const that = this;
uni.chooseLocation({
success: function(res) {
console.log('位置名称:' + res.name);
console.log('详细地址:' + res.address);
console.log('纬度:' + res.latitude);
console.log('经度:' + res.longitude);
that.shop.detailedAddress = res.address
that.shop.latitude = res.latitude
that.shop.longitude = res.longitude
that.getcity(res.latitude, res.longitude)
}
});
},
getcity(latitude, longitude) {
let data = {
lat: latitude,
lng: longitude,
}
this.$Request.get("/app/address/selectCity", data).then(res => {
if (res.code == 0) {
this.city = res.data.city
this.province = res.data.province
this.district = res.data.district
this.shop.address = res.data.province + res.data.city + res.data.district
}
});
},
//
addImages(e) {
let that = this
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < res.tempFilePaths.length; i++) {
that.$queue.showLoading("上传中...");
uni.uploadFile({ //
url: that.config("APIHOST1") + '/alioss/upload', //
// url: 'https://jiazheng.xianmxkj.com/sqx_fast/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
// if (that.detailsImg.length < 6) {
that.detailsImg = JSON.parse(uploadFileRes.data).data
// }
console.log(that.detailsImg)
uni.hideLoading();
}
});
}
}
})
},
//
addImage(e) {
let that = this
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < res.tempFilePaths.length; i++) {
that.$queue.showLoading("上传中...");
uni.uploadFile({ //
url: that.config("APIHOST1") + '/alioss/upload', //
// url: 'https://jiazheng.xianmxkj.com/sqx_fast/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
if (e == 1) {
that.shop.business = JSON.parse(uploadFileRes.data).data
} else if (e == 2) {
that.shop.front = JSON.parse(uploadFileRes.data).data
} else if (e == 3) {
that.shop.back = JSON.parse(uploadFileRes.data).data
}
console.log(that.detailsImg)
uni.hideLoading();
}
});
}
}
})
},
config: function(name) {
var info = null;
if (name) {
var name2 = name.split("."); //
if (name2.length > 1) {
info = configdata[name2[0]][name2[1]] || null;
} else {
info = configdata[name] || null;
}
if (info == null) {
let web_config = cache.get("web_config");
if (web_config) {
if (name2.length > 1) {
info = web_config[name2[0]][name2[1]] || null;
} else {
info = web_config[name] || null;
}
}
}
}
return info;
},
//
submit() {
console.log(this.detailsImg)
this.shop.detailsImg = this.detailsImg
this.shop.detailsImg = this.shop.detailsImg.toString();
if (!this.shop.shopTypeName) {
uni.showToast({
title: '请填写商铺主营类型',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.name) {
uni.showToast({
title: '请填写商铺名称',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.address) {
uni.showToast({
title: '请填写商铺地址',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.detailedAddress) {
uni.showToast({
title: '请填写店铺详细地址',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.userName) {
uni.showToast({
title: '请填写真实姓名',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.isNumber) {
uni.showToast({
title: '请填写身份证号',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.phone) {
uni.showToast({
title: '请填写联系电话',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.verCode) {
uni.showToast({
title: '请填写验证码',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.detailsImg) {
uni.showToast({
title: '请上传商铺图片',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.business) {
uni.showToast({
title: '请上传营业执照',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.front) {
uni.showToast({
title: '请上传身份证正面',
icon: 'none',
duration: 1000
})
return
}
if (!this.shop.back) {
uni.showToast({
title: '请上传身份证反面',
icon: 'none',
duration: 1000
})
return
}
let data = {
shopName: this.shop.name,
shopTypeId: this.shop.typeid,
shopTypeName: this.shop.shopTypeName,
detailedAddress: this.shop.address,
detailedAddress: this.shop.detailedAddress,
shopLat: this.shop.latitude,
shopLng: this.shop.longitude,
province: this.province,
city: this.city,
district: this.district,
realName: this.shop.userName,
identitycardNumber: this.shop.isNumber,
phone: this.shop.phone,
code: this.shop.verCode,
businessLicense: this.shop.business,
identitycardPro: this.shop.front,
identitycardCon: this.shop.back,
shopCover: this.shop.detailsImg
}
// uni.setStorageSync('updataShopId', this.shop.shopId)
this.$Request.postJson("/app/shop/insertShopAuthentication", data).then(res => {
if (res.code == 0) {
uni.showToast({
title: '提交成功,等待审核通过',
icon: 'none'
})
setTimeout(function() {
uni.navigateBack()
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
});
},
sendMsg() {
// const {
// phone
// } = this.shop;
if (this.sendTime != '获取验证码') {
return;
}
console.log('this.shop.phone', this.shop.phone)
if (!this.shop.phone) {
this.$queue.showToast("请输入手机号");
} else if (this.shop.phone.length !== 11) {
this.$queue.showToast("请输入正确的手机号");
} else {
this.$queue.showLoading("正在发送验证码...");
this.$Request.getT("/app/shop/sendMsgs/" + this.shop.phone + "/enter").then(res => {
if (res.code === 0) {
this.sending = true;
this.$queue.showToast('验证码发送成功请注意查收');
this.countDown();
uni.hideLoading();
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '短信发送失败',
content: res.msg ? res.msg : '请一分钟后再获取验证码'
});
}
});
}
},
countDown() {
const {
count
} = this;
if (count === 1) {
this.count = 60;
this.sending = false;
this.sendTime = '获取验证码'
} else {
this.count = count - 1;
this.sending = true;
this.sendTime = count - 1 + '秒后重新获取';
setTimeout(this.countDown.bind(this), 1000);
}
},
},
}
</script>
<style>
page {
background-color: #F5F5F5;
}
.bg {
background-color: #FFFFFF;
}
textarea::-webkit-input-placeholder {
color: #303133;
font-size: 20rpx;
}
textarea:-moz-placeholder {
color: #303133;
font-size: 20rpx;
}
textarea::-moz-placeholder {
color: #303133;
font-size: 20rpx;
}
textarea::-ms-input-placeholder {
color: #303133;
font-size: 20rpx;
}
.tabBox {
border: 1rpx solid #999999;
padding: 15rpx 20rpx;
border-radius: 15rpx;
font-size: 28rpx;
}
.btnnum {
color: #005DFF;
border: 1rpx solid #005DFF;
}
.send-msg {
border-radius: 30px;
color: #FFFFFF;
/*#FCD202 */
background: #FCD202;
height: 60rpx;
font-size: 28rpx;
line-height: 60rpx;
display: inline-block;
width: 45%;
margin-left: 4%;
position: relative;
top: 20rpx;
}
</style>

168
my/chat/index.vue Normal file
View File

@ -0,0 +1,168 @@
<template>
<view class="">
<view v-if="chatList.length" class="content ">
<!-- {{userId == item.userId,userId,item.userId}} -->
<view class="radius padding-lr-sm bg" style="margin-top: 4rpx;" @click="goIM(item)"
v-for="(item,index) in chatList" :key='index' >
<view class="flex padding-tb " v-if="userId == item.userId">
<view>
<u-image shape="circle" width='80rpx' height="80rpx" :src="item.shopCover"></u-image>
</view>
<view class="flex-sub margin-left-sm">
<view class="flex justify-between">
<view style="width: 50%;">{{item.shopName}}</view>
<view class="text-grey">{{item.createTime}}</view>
</view>
<view class="flex justify-between">
<view class="text-grey">{{ item.messageType == 1? item.content : '[图片]'}}</view>
<view v-if="item.userUnread"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
{{item.userUnread}}
</view>
</view>
</view>
</view>
<view class="flex padding-tb" v-else>
<view>
<u-image shape="circle" width='80rpx' height="80rpx" :src="item.shopCover"></u-image>
</view>
<view class="flex-sub margin-left-sm">
<view class="flex justify-between">
<view style="width: 50%;">{{item.shopName}}</view>
<view class="text-grey">{{item.createTime}}</view>
</view>
<view class="flex justify-between">
<view class="text-grey">{{ item.messageType == 1? item.content : '[图片]'}}</view>
<view v-if="item.userUnread"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
{{item.userUnread}}
</view>
</view>
</view>
</view>
</view>
</view>
<empty v-if="!chatList.length && !msgList.length" content='暂无消息'></empty>
</view>
</template>
<script>
import empty from '../../components/empty.vue'
export default {
components: {
empty
},
data() {
return {
page: 1,
limit: 20,
chatList: [],
userId: '',
msgList: [],
time: '',
count: 0,
messageCount: 0
}
},
onLoad() {
this.getChatList()
let that = this
if (that.userId) {
that.time = setInterval(function() {
that.getChatList()
// that.getMsgList()
that.$nextTick(function() {
that.messageCount = uni.getStorageSync('messageCount')
})
}, 3000)
} else {
that.chatList = []
that.msgList = []
}
},
onShow() {
let that = this
that.userId = uni.getStorageSync('userId')
if (that.userId) {
that.page = 1;
// that.chatList = []
that.msgList = []
that.getChatList();
} else {
that.chatList = []
that.msgList = []
}
},
onHide() {
clearInterval(this.time)
},
methods: {
getChatList() {
this.$Request.get("/app/ordersChat/selectOrdersChatPageUser", {
page: this.page,
limit: this.limit,
}).then(res => {
if (res.code == 0) {
if (this.page == 1) {
this.chatList = [];
}
res.data.list.forEach(d => {
this.chatList.push(d);
});
this.count = res.data.totalCount;
// this.chatList = res.data.list
}
});
},
// getMsgList() {
// this.$Request.get("/app/message/selectMessageByUserIdLimit1").then(res => {
// if (res.code == 0) {
// this.msgList = res.data.list
// }
// });
// },
goIM(e) {
let userId = this.$queue.getData('userId');
if (e.userId == userId) {
userId = e.byUserId
} else {
userId = e.userId
}
uni.navigateTo({
url: '/pages/index/shop/im?ordersId=' + e.ordersId
})
// uni.navigateTo({
// url: '/pages/msg/im?chatConversationId=' + e.chatConversationId + '&byUserId=' + userId
// })
},
goMsg() {
uni.navigateTo({
url: '/pages/msg/message'
})
}
},
onReachBottom: function() {
if (this.chatList.length == this.count) {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
} else {
this.page = this.page + 1;
this.getChatList();
}
},
}
</script>
<style>
page {
background-color: #F7F7F7;
}
.bg {
background: #FFFFFF;
}
</style>

514
my/check/index.vue Normal file
View File

@ -0,0 +1,514 @@
<template>
<view class="">
<!-- <view class="text-center text-white bg-red">18岁以上方可认证使用</view> -->
<view class="margin padding-lr bg-white" style="border-radius: 16rpx;">
<view class="flex justify-between align-center" style="border-bottom: 2rpx solid #e6e6e6;color: #1a1a1a;">
<view class="padding-tb text-lg text-bold ">申请信息</view>
<view class="text-df" style="color: #666666;">18岁以上方可认证使用</view>
</view>
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">你的生日</view>
<view class="flex align-center">
<!-- <view class="margin-right-xs text-gray">2020年4月2日</view> -->
<input @click="isShow" v-model="birthday" class="margin-right-xs" disabled placeholder="请填写你的生日"
style="text-align: right;" type="text">
<!-- <image src="../../static/images/orderReceiving/right.png" style="width: 16rpx;height: 26rpx;"></image> -->
</view>
</view>
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">你的性别</view>
<view class="flex align-center">
<u-radio-group v-model="sex">
<u-radio v-for="(item,index) in gender" :key='index' :name="item.name">{{item.name}}</u-radio>
</u-radio-group>
</view>
</view>
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">你的身高(CM)</view>
<view class="flex align-center">
<!-- <view class="margin-right-xs text-gray">170cm</view> -->
<input class="margin-right-xs" v-model="height" placeholder="请填写你的身高" style="text-align: right;"
type="text">
<!-- <image src="../../static/images/orderReceiving/right.png" style="width: 16rpx;height: 26rpx;"></image> -->
</view>
</view>
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">你的体重(KG)</view>
<view class="flex align-center">
<!-- <view class="margin-right-xs text-gray">50kg</view> -->
<input class="margin-right-xs" v-model="weight" placeholder="请填写你的体重" style="text-align: right;"
type="text">
<!-- <image src="../../static/images/orderReceiving/right.png" style="width: 16rpx;height: 26rpx;"></image> -->
</view>
</view>
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">你的职业</view>
<view class="flex align-center">
<!-- <view class="margin-right-xs text-gray">设计</view> -->
<input class="margin-right-xs" v-model="occupation" placeholder="请填写你的职业" style="text-align: right;"
type="text">
<!-- <image src="../../static/images/orderReceiving/right.png" style="width: 16rpx;height: 26rpx;"></image> -->
</view>
</view>
</view>
<view class="margin padding bg-white" style="border-radius: 16rpx;">
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">真实姓名</view>
<view class="flex align-center">
<!-- <view class="margin-right-xs text-gray">设计</view> -->
<input class="margin-right-xs" v-model="realName" placeholder="请填写你的真实姓名" style="text-align: right;"
type="text">
<!-- <image src="../../static/images/orderReceiving/right.png" style="width: 16rpx;height: 26rpx;"></image> -->
</view>
</view>
<view class="flex align-center padding-tb">
<view class="flex-sub text-df text-bold" style="color: #1a1a1a;">身份证号 <text class="text-red"> *</text>
</view>
<view class="flex align-center">
<!-- <view class="margin-right-xs text-gray">设计</view> -->
<input class="margin-right-xs" v-model="identityCardNum" placeholder="请填写你的身份证号"
style="text-align: right;" type="text">
<!-- <image src="../../static/images/orderReceiving/right.png" style="width: 16rpx;height: 26rpx;"></image> -->
</view>
</view>
<view class="text-lg text-bold text-black margin-bottom-sm">上传身份证正面</view>
<view class="margin-top"
style="border: 2rpx dashed #484B74; width: 100%;height: 320rpx;position: relative;">
<view style="text-align: center;margin: 80rpx auto 0;" @click="addIDCard(1)" v-if="!identityCardFront">
<image src="../../static/images/index/add.png" mode="widthFix" style="width: 73rpx;"></image>
<view class="text-sm text-gray margin-top-sm">添加身份证正面</view>
</view>
<image @click="addIDCard(1)" v-else :src="identityCardFront" style="width: 100%;height: 320rpx;">
</image>
</view>
<view class="text-lg text-bold text-black margin-tb-sm">上传身份证反面</view>
<view class="margin-top"
style="border: 2rpx dashed #484B74; width: 100%;height: 320rpx;position: relative;">
<view style="text-align: center;margin: 80rpx auto 0;" @click="addIDCard(2)" v-if="!identityCardRear">
<image src="../../static/images/index/add.png" mode="widthFix" style="width: 73rpx;"></image>
<view class="text-sm text-gray margin-top-sm">添加身份证反面</view>
</view>
<image @click="addIDCard(2)" v-else :src="identityCardRear" style="width: 100%;height: 320rpx;"></image>
</view>
</view>
<view class="margin padding bg-white" style="border-radius: 16rpx;">
<view class="text-lg text-bold text-black margin-bottom-sm">个人简介</view>
<textarea class="radius" v-model="individualResume"
style=" width: 100%; height: 150rpx;background: #f5f5f5;padding: 15rpx;"
placeholder="请输入个人简介"></textarea>
<view class="text-lg text-bold text-black margin-tb-sm">图片上传</view>
<view class="flex flex-wrap">
<view class="flex " v-if="infantImgs.length"
style="width: 200rpx;height: 200rpx;margin-right: 10rpx;position: relative;margin-bottom: 10rpx;"
v-for="(image,index) in infantImgs" :key="index">
<image :src="image" class="radius" style="width: 100%;height: 100%;" @click="previewImg(index)">
</image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="infantImgremove(index)">
<u-icon name="close-circle-fill" color="red" size="50rpx"></u-icon>
</view>
</view>
<view v-if="infantImgs.length<9" style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center radius" @click="addImages()">
<view>
<view class="text-center">
<image src="../../static/images/index/add.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center">添加图片</view>
</view>
</view>
</view>
<view class="text-lg text-bold text-black margin-tb-sm">视频上传</view>
<view>
<view v-if="!video" style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center radius" @click="addVideo()">
<view>
<view class="text-center">
<image src="../../static/images/index/add.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center">添加视频</view>
</view>
</view>
<view class="flex " v-if="video" style="width: 100%;position: relative;">
<video :src="video" controls></video>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;" @click="removeVidoe()">
<u-icon name="close-circle-fill" color="red" size="50rpx"></u-icon>
</view>
</view>
</view>
<!-- </view> -->
</view>
<view class="margin">
<view class="text-center text-lg radius text-bold"
style="width: 100%;height: 78rpx;line-height: 78rpx;background: #7E59FF;color: #FFF;"
@click="fabuBtn()">
{{btnName}}
</view>
</view>
<u-picker @confirm="timeAction" v-model="show" :params="params" mode="time"></u-picker>
</view>
</template>
<script>
export default {
data() {
return {
action: 'https://newxxpw.xianmxkj.com/sqx_fast/alioss/upload',
fileList: [],
show: false,
params: {
year: true,
month: true,
day: true,
},
birthday: '', //
height: '', //
weight: '', //
occupation: '', //
individualResume: '', //
pictureList: [],
realName: '', //
identityCardNum: '', //
identityCardFront: '', //
identityCardRear: '', //
gender: [{
name: '男',
checked: true
},
{
name: '女',
checked: false
},
],
sex: '男',
userId: '',
btnName: '提交申请',
video: "",
isFinish: false,
infantImgs: [],
}
},
onLoad(option) {
this.userId = option.userId ? option.userId : ''
if (this.userId) {
// this.getUserInfo()
}
uni.setNavigationBarTitle({
title: "修改个人信息"
})
this.btnName = '提交修改'
this.getPWInfo()
},
methods: {
//
addVideo() {
uni.chooseVideo({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
this.$queue.showLoading("上传中...");
console.log(res.tempFilePath)
uni.uploadFile({ //
// url: this.config("APIHOST1") + '/alioss/upload', //
url: 'https://newxxpw.xianmxkj.com/sqx_fast/alioss/upload',
filePath: res.tempFilePath,
name: 'file',
timeout: '30000',
success: (uploadFileRes) => {
// console.log(JSON.parse(uploadFileRes.data))
this.video = JSON.parse(uploadFileRes.data).data
console.log(this.video)
uni.hideLoading();
}
});
}
})
},
//
removeVidoe() {
this.video = ''
},
addIDCard(e) {
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < 1; i++) {
this.$queue.showLoading("上传中...");
uni.uploadFile({ //
// url: this.config("APIHOST1") + '/alioss/upload', //
url: 'https://newxxpw.xianmxkj.com/sqx_fast/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
if (e == 1) {
this.identityCardFront = JSON.parse(uploadFileRes.data)
.data
} else {
this.identityCardRear = JSON.parse(uploadFileRes.data).data
}
uni.hideLoading();
}
});
}
}
})
},
//
addImages(e) {
uni.chooseImage({
count: 9,
sourceType: ['album', 'camera'],
success: res => {
console.log(res.tempFilePaths)
for (let i = 0; i < res.tempFilePaths.length; i++) {
this.$queue.showLoading("上传中...");
uni.uploadFile({ //
// url: this.config("APIHOST1") + '/alioss/upload', //
url: 'https://newxxpw.xianmxkj.com/sqx_fast/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
if (this.infantImgs.length < 9) {
this.infantImgs.push(JSON.parse(uploadFileRes.data).data)
}
uni.hideLoading();
}
});
}
}
})
},
//
infantImgremove(index) {
this.infantImgs.splice(index, 1)
},
//
previewImg(index) {
let _this = this;
uni.previewImage({
current: index,
urls: _this.infantImgs
});
},
getPWInfo() {
this.$Request.getT('/app/usermessage/findPwUserMessage').then(res => {
if (res.code == 0) {
// if (res.data.auditStatus == 0) {
this.birthday = res.data.birthday //
this.height = res.data.height //
this.weight = res.data.weight //
this.sex = res.data.sex == 1 ? '男' : '女'
this.occupation = res.data.occupation //
this.individualResume = res.data.individualResume //
this.realName = res.data.realName //
this.identityCardNum = res.data.identityCardNum //
this.identityCardFront = res.data.identityCardFront //
this.identityCardRear = res.data.identityCardRear //
this.pictureList = res.data.pictureList.split(',')
this.video = res.data.video
this.infantImgs = [];
this.pictureList.forEach(res => {
this.infantImgs.push(res)
})
// }
}
})
},
getUserInfo() {
this.$Request.getT('/app/payorder/selectUserMessageById?userId=' + this.userId).then(res => {
if (res.code == 0) {
console.log(res.data)
this.birthday = res.data.birthday //
this.height = res.data.height //
this.weight = res.data.weight //
this.occupation = res.data.occupation //
this.individualResume = res.data.individualResume //
this.realName = res.data.realName //
this.identityCardNum = res.data.identityCardNum //
this.identityCardFront = res.data.identityCardFront //
this.identityCardRear = res.data.identityCardRear //
this.sex = res.data.sex == 1 ? '男' : '女'
this.pictureList = res.data.pictureList.split(',')
this.video = res.data.video
this.infantImgs = [];
this.pictureList.forEach(res => {
this.infantImgs.push(res)
})
}
})
},
isShow() {
this.show = true
},
timeAction(e) {
console.log(e)
this.birthday = e.year + '-' + e.month + '-' + e.day
},
//
fabuBtn() {
let that = this
if (!that.birthday) {
uni.showToast({
title: '请填写你的生日',
icon: 'none'
})
return
}
if (!that.height) {
uni.showToast({
title: '请填写你的身高',
icon: 'none'
})
return
}
if (!that.weight) {
uni.showToast({
title: '请填写你的体重',
icon: 'none'
})
return
}
if (!that.occupation) {
uni.showToast({
title: '请填写你的职业',
icon: 'none'
})
return
}
if (!that.realName) {
uni.showToast({
title: '请填写你的真实姓名',
icon: 'none'
})
return
}
if (!that.identityCardNum) {
uni.showToast({
title: '请填写你的身份证号',
icon: 'none'
})
return
}
if (!that.identityCardFront) {
uni.showToast({
title: '请上传你的身份证正面',
icon: 'none'
})
return
}
if (!that.identityCardRear) {
uni.showToast({
title: '请上传你的身份证反面',
icon: 'none'
})
return
}
console.log(that.infantImgs, 'lenght', that.infantImgs.length)
if (that.infantImgs.length < 9) {
uni.showToast({
title: '请上传9张你的照片',
icon: 'none'
})
return
}
if (!that.video) {
uni.showToast({
title: '请上传你的视频',
icon: 'none'
})
return
}
console.log(that.isFinish)
console.log(that.infantImgs)
// return
let data = {
birthday: that.birthday, //
sex: that.sex == '男' ? 1 : 2, //
height: that.height, //
weight: that.weight, //
occupation: that.occupation, //
individualResume: that.individualResume, //
pictureList: that.infantImgs.toString(),
realName: that.realName,
identityCardNum: that.identityCardNum,
identityCardFront: that.identityCardFront,
identityCardRear: that.identityCardRear,
video: that.video
}
if (that.userId) {
uni.showModal({
title: '提示',
content: '修改资料预计24小时后通过审核,审核期间将不能接单,是否继续?',
confirmText: '继续',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
that.$Request.postJson('/app/usermessage/updateUserMessage', data).then(
res => {
// console.log(that.res)
if (res.code == 0) {
uni.showToast({
title: '提交成功'
})
setTimeout(function() {
uni.switchTab({
url: '/pages/my/index'
})
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
});
} else if (res.cancel) {
console.log('用户点击取消');
}
}
})
} else {
that.$Request.postJson('/app/usermessage/applyPw', data).then(res => {
console.log(that.res)
if (res.code == 0) {
uni.showToast({
title: '申请成功'
})
setTimeout(function() {
uni.switchTab({
url: '/pages/my/index'
})
}, 1000)
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
});
}
},
}
}
</script>
<style>
page {
/* background-color: #FFF; */
}
</style>

276
my/coupon/index.vue Normal file
View File

@ -0,0 +1,276 @@
<template>
<view class="pages">
<!-- 切换选项 -->
<view class="nav">
<view @tap="change(0)" :class="{nav_btna:status == 0}">可使用</view>
<view @tap="change(1)" :class="{nav_btna:status == 1}">已使用</view>
<view @tap="change(2)" :class="{nav_btna:status == 2}">已失效</view>
</view>
<!-- 全部订单 -->
<view class="cont_one">
<view class="cont_one_ce" v-for="(item,index) in dataList" :key='index'>
<view class="cont_one_top">
<view class="cont_one_top_le flex align-center">
<image :src="item.shopId==0 || item.shopId==null?imgtype2:imgtype1" style="margin-right: 10rpx;width: 65rpx;height: 35rpx;border-radius: 8rpx;" mode=""></image>
{{item.couponName}}
</view>
<view class="cont_one_top_ri"><text></text>{{item.money}}</view>
</view>
<view class="cont_one_text" style="font-size: 28upx;">
<text>有效期至{{item.expirationTime}}</text>
<view v-if="item.minMoney" >{{item.minMoney}}元可用</view>
<view v-if="!item.minMoney" >无门槛优惠券</view>
</view>
<view class="cont_one_bottom">
<view class="cont_one_bottom_le" >
优惠券一张
</view>
<view class="cont_one_bottom_ri flex justify-center align-center" @click="use(item)" v-if="status == 0">立即使用</view>
</view>
<view class="cont_one_img" v-if="status == 1">
<image src="../static/coupon/has.png" mode=""></image>
</view>
<view class="cont_one_img" v-if="status == 2">
<image src="../static/coupon/failure.png" mode=""></image>
</view>
</view>
</view>
<empty v-if="!dataList.length" ></empty>
<u-popup v-model="popupShow" closeable mode="center" border-radius="20">
<view class="margin-tb text-center text-lg text-bold">使用规则</view>
<view class="padding-lr padding-bottom">
<view style="color: #333333;font-size: 28upx;width: 550rpx;height: 70vh;" v-html="content"></view>
</view>
</u-popup>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
imgtype1:'https://tcwm.xianmaxiong.com/file/uploadPath/2022/11/23/24b686b872b3001f0342eae67db6d482.png',
imgtype2:'https://tcwm.xianmaxiong.com/file/uploadPath/2022/11/23/7716e0595580f34c4778ce5626dae262.png',
btnnum: 0,
page: 1,
limit: 10,
status: 0, //0 1使 2
dataList: [],
popupShow: false,
content: '',
totalCount: 0
};
},
onLoad() {
this.getData()
// this.getGuize()
},
methods: {
change(e) {
this.status = e
this.page = 1
this.dataList = []
this.getData()
},
getData() {
let data = {
status: this.status,
page: this.page,
limit: this.limit,
}
this.$Request.get("/app/coupon/CouponList", data).then(res => {
if (res.code == 0) {
this.totalCount = res.data.totalCount
if (this.page == 1) {
this.dataList = res.data.list
} else {
this.dataList = [...this.dataList, ...res.data.list]
}
}
});
},
//
getGuize() {
this.$Request.getT('/app/common/type/240').then(res => {
if (res.code == 0) {
this.content = res.data.value;
}
})
},
use(item) {
if(!item.shopId){
uni.switchTab({
url: '/pages/index/index'
})
}else{
uni.navigateTo({
url: '/pages/index/shop/index?shopId=' + item.shopId
});
}
}
},
onReachBottom: function() {
if(this.dataList.length<this.totalCount) {
this.page = this.page + 1;
this.getData()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
}
</script>
<style scoped>
/* 切换选项 */
.nav {
display: flex;
align-items: center;
justify-content: center;
background-color: #FFFFFF;
color: #999999;
}
.nav view {
flex-grow: 1;
margin: 3% 9% 2%;
text-align: center;
}
.nav_btna {
font-size: 38rpx;
line-height: 34rpx;
border-bottom: 14rpx solid #FCD202;
color: #000000;
font-weight: bold;
}
/* 内容 */
/* 全部订单 */
.cont_one {
/* display: none; */
width: 94%;
margin: 0 auto;
}
.cont_one_ce {
width: 100%;
padding: 3% 3% 2%;
margin: 3% 0 0;
background-color: #FFFFFF;
border-radius: 18rpx;
position: relative;
}
.cont_one_top {
display: flex;
width: 100%;
}
.cont_one_top_le {
flex: 2;
font-size: 35rpx;
font-weight: 800;
color: #000000;
line-height: 32rpx;
}
.cont_one_top_le2 {
flex: 2;
font-size: 35rpx;
font-weight: 800;
color: #999999;
line-height: 32rpx;
}
.cont_one_top_ri {
flex: 1;
font-size: 40rpx;
text-align: right;
font-family: DINPro;
font-weight: 500;
color: #FF130A;
line-height: 32rpx;
}
.cont_one_top_ri text {
font-size: 30rpx;
}
.cont_one_text {
font-size: 30rpx;
margin: 2% 0 1%;
font-weight: 400;
color: #999999;
display: flex;
justify-content: space-between;
}
.cont_one_bottom {
width: 100%;
padding: 3% 0 0;
margin-top: 3%;
display: flex;
border-top: 2rpx dotted #E6E6E6;
}
.cont_one_bottom_le {
width: 80%;
/* font-size: 30rpx; */
font-weight: 500;
color: #999999;
line-height: 2;
}
.cont_one_bottom_ri {
width: 20%;
text-align: center;
/* line-height: 2; */
background: rgba(255, 19, 10, 0.2);
font-size: 24rpx;
border: 2rpx solid #FF130A;
color: #FF130A;
opacity: 0.6;
border-radius: 50rpx;
}
/* 到店取餐 */
/* .cont_two {
display: none;width: 94%;margin: 0 auto;
}
.cont_two_ce{
width: 94%;padding: 3% 3% 2%; margin: 3% 0 0 ;background-color: #FFFFFF;
border-radius: 18rpx;
} */
.cont_one_img {}
.cont_one_img {
width: 120upx;
height: 117upx;
position: absolute;
top: 0;
left: 83%;
}
.cont_one_img image {
width: 120upx;
height: 117upx;
}
.cont {
display: none;
}
.cont_dis {
display: block;
}
</style>

77
my/helpList/helpDet.vue Normal file
View File

@ -0,0 +1,77 @@
<template>
<view style="line-height: 26px;padding: 32upx;" class="home1">
<!-- <view v-html="tit"> </view> -->
<!-- <view style="font-size: 28upx;" v-html="content"></view> -->
<u-parse :html="content"></u-parse>
</view>
</template>
<script>
export default {
data() {
return {
list: [],
content: ''
}
},
onLoad(e) {
this.taskData(e.id)
},
methods: {
//
taskData(e) {
this.$Request.getT('/app/userinfo/TrainingCenter?id='+e).then(res => {
if(res.code==0){
this.content = res.data.message
}
});
},
}
}
</script>
<style>
page {
background: #FFFFFF;
}
.content {
width: 100%;
background: #FFFFFF;
margin-top: 20rpx;
padding-bottom: 50rpx;
padding-top: 20rpx;
}
.list_box {
width: 90%;
margin: 0 auto;
display: flex;
line-height: 45rpx;
padding-top: 20rpx;
}
.list_left {
flex: 2;
}
.name {
font-size: 26rpx;
color: #333333;
font-weight: bold;
letter-spacing: 2rpx;
}
.data {
color: #999999;
font-size: 24rpx;
}
/* .list_right {
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
font-size: 31rpx;
} */
</style>

48
my/helpList/index.vue Normal file
View File

@ -0,0 +1,48 @@
<template>
<view>
<view style="margin-top: 4upx;" class="bg-white flex justify-between align-center padding" v-for="(item,index) in dataList" :key='index' @click="goDet(item)" >
<view class="text-lg">{{index+1}}.{{item.title}}</view>
<image src="../../static/images/index/right2.png" style="width: 20rpx;height: 34rpx;" mode="aspectFill"></image>
</view>
</view>
</template>
<script>
export default {
data() {
return {
page: 1,
limit: 10,
dataList: []
}
},
onLoad() {
this.getDataList()
},
methods: {
getDataList() {
let data = {
page: this.page,
limit: this.limit,
type: 1
}
this.$Request.getT("/app/userinfo/trainingCenterList",data).then(res => {
this.dataList = res.data.list
})
},
goDet(e) {
uni.navigateTo({
url: '/my/helpList/helpDet?id='+e.trainingId
})
}
},
onReachBottom: function() {
this.page = this.page + 1;
this.getDataList();
},
}
</script>
<style>
</style>

173
my/hongbao/hongbao.vue Normal file
View File

@ -0,0 +1,173 @@
<template>
<view>
<view class="empty" v-if="moneylist == ''">
<view
style="display: block; width: 90%; margin: 0 auto; position: fixed;top: 35%;left: 0rpx;right: 0rpx;text-align: center;">
<image src="../../static/images/empty.png" style="width: 300rpx;height: 300rpx;"></image>
<view style="color: #CCCCCC;">暂无内容</view>
</view>
</view>
<view class="popup_money" v-else>
<view class="data_select">
<view class="money_box" v-for="(item,index) in moneylist" :key="index">
<view class="box_tit">
<view class="money_name">{{item.redPacketTitle}}</view>
<view class="money_price">{{item.redPacketAmount}}</view>
</view>
<view class="money_data">有效期至{{item.expirationTime}}</view>
<view class="money_line">
<u-line direction="row" color="#E6E6E6" border-style="dashed" />
</view>
<view class="box_bottom">
<view class="money_use">{{item.minimumAmount}}元可使用</view>
<!-- <view class="money_btn">
<view class="lj_use">
立即使用
</view>
</view> -->
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
moneylist: ''
}
},
onLoad() {
this.hongbao()
},
methods: {
//
hongbao() {
this.$Request.getT('/app/tbindent/findAllRedPacket').then(res => {
console.log(res)
if (res.code === 0) {
this.moneylist = res.data
// console.log(this.hongbao)
}
});
}
},
}
</script>
<style>
body {
background-color: #F5F5F5;
}
/* #ifndef MP-WEIXIN */
page {
background: #F2EDED;
}
/* #endif */
.empty {
width: 100%;
background: #ffffff;
/* #ifdef MP-WEIXIN */
height: 93vh;
/* #endif */
/* #ifndef MP-WEIXIN */
height: 100vh;
/* #endif */
}
.popup_money {
height: 800upx;
width: 100%;
position: relative;
}
.u-drawer-bottom {
background-color: #FAF7F5 !important;
}
.money_box {
width: 93%;
margin: 0 auto;
background: #ffffff;
border-radius: 14upx;
height: 220rpx;
margin-bottom: 20upx;
margin-top: 20rpx;
}
.box_tit {
width: 90%;
margin: 0 auto;
height: 80upx;
display: flex;
}
.money_name {
flex: 1;
display: flex;
justify-content: left;
align-items: center;
font-size: 27rpx;
font-weight: bold;
letter-spacing: 2upx;
}
.money_price {
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
font-size: 39upx;
/* font-weight: bold; */
color: red;
}
.money_data {
color: #999999;
font-size: 24rpx;
width: 90%;
margin: 0 auto;
margin-top: -8upx;
}
.u-line {
width: 90% !important;
border-bottom-width: 6upx !important;
margin: 0 auto !important;
margin-top: 22upx !important;
margin-bottom: 22upx !important;
}
.box_bottom {
width: 90%;
margin: 0 auto;
display: flex;
height: 40upx;
}
.money_use {
flex: 1;
color: #999999;
font-size: 24rpx;
display: flex;
justify-content: left;
align-items: center;
}
.lj_use {
width: 150rpx;
border: 2rpx solid #FF7F00;
color: #FF7F00;
text-align: center;
line-height: 48rpx;
border-radius: 40rpx;
font-size: 23rpx;
}
</style>

263
my/integral/index.vue Normal file
View File

@ -0,0 +1,263 @@
<template>
<view class="integral_all">
<!-- 积分信息 -->
<view class="information">
<view class="information_le">
<view class="information_text1">当前可用积分</view>
<view class="information_text2">{{integralNum}}</view>
<view class="information_text3" @click="goDet(1)" >积分明细 <u-icon name="arrow-right" size="28"></u-icon></view>
</view>
<view class="information_ri">
<image src="../static/integral/rectangular.png" mode="r"></image>
<view class="information_text4" @click="goDet(2)">兑换记录</view>
</view>
<!-- <view class="duihuan" @click="goDet(2)">
兑换记录
</view> -->
</view>
<!-- 兑换商品 -->
<view class="integral_goods">
<view class="integral_goods_sty">
<view class="integral_goods_sty1" v-for="(item,index) in dataList" :key='index' >
<image :src="item.couponPicture" mode=""></image>
<view class="integral_goods_text">{{item.couponName}}</view>
<view class="integral_goods_sty_bo">
<view class="integral_goods_sty_bo_le"><text
class="integral_goods_text2">{{item.needIntegral}}</text>积分</view>
<view class="integral_goods_sty_bo_ri" @click="exchange(item)">兑换</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
btnnum: 0,
page: 1,
limit: 10,
dataList: [],
integralNum: 0
};
},
onLoad() {
this.getIntegral()
this.getData()
},
methods: {
exchange(e) {
let that = this
uni.showModal({
title: '提示',
content: '确定兑换' + e.couponName + '吗?',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
that.$Request.post("/app/coupon/buyCoupon", {
couponId: e.couponId
}).then(res => {
if (res.code == 0) {
uni.showToast({
title: '兑换成功'
})
that.getIntegral()
} else {
uni.showToast({
title: res.msg,
icon: 'none'
})
}
});
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
goDet(e) {
uni.navigateTo({
url:'/my/integral/integralDet?classify='+e
})
},
change(e) {
this.btnnum = e
console.log(this.btnnum)
},
getIntegral() {
this.$Request.get("/app/userintegral/selectUserIntegral").then(res => {
if (res.code == 0) {
this.integralNum = res.data.integralNum
}
});
},
getData() {
let data = {
page: this.page,
limit: this.limit,
shopId:0
}
this.$Request.get("/app/coupon/selectCouponList", data).then(res => {
if (res.code == 0) {
if (this.page == 1) {
this.dataList = res.data.list
} else {
this.dataList = [...this.dataList, ...res.data.list]
}
}
});
}
},
onReachBottom: function() {
this.page = this.page + 1;
this.getData();
},
}
</script>
<style scoped>
.integral_all {
width: 100%;
background-color: #FCD202;
}
/* 积分信息 */
.information {
width: 94%;
padding: 4% 3% 5%;
display: flex;
align-items: center;
justify-content: space-between;
}
.information_le {
/* width: 70%; */
color: #FFFFFF;
}
.information_text1 {
font-size: 28rpx;
font-weight: 500;
color: #FFFFFF;
margin-bottom: 10upx;
line-height: 32rpx
}
.information_text2 {
font-size: 60rpx;
font-weight: bold;
color: #FFFFFF;
margin-bottom: 10upx;
}
.information_text3 {
font-size: 28rpx;
font-weight: 500;
color: #FFFFFF;
line-height: 32rpx;
}
.information_ri {
/* width: 30%; */
/* padding-top: 50rpx; */
position: relative;
}
.information_ri image {
width: 218rpx;
height: 98rpx;
}
.information_text4 {
color: #FFFFFF;
position: absolute;
/* bottom: 0; */
left: 51rpx;
top: 23rpx;
font-size: 28upx;
/* right: 0; */
/* margin: auto; */
}
.duihuan {
padding: 8rpx 18rpx;
background-color: #FCD202;
box-shadow: 0 0 10rpx #FCD202;
}
/* 兑换商品 */
.integral_goods {
width: 100%;
background-color: #F5F5F5;
border-top-left-radius: 18rpx;
border-top-right-radius: 18rpx;
padding-bottom: 3%;
}
.integral_goods_sty {
width: 94%;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding-top: 3%;
}
.integral_goods_sty1 {
width: 48.5%;
/* margin-left: 3%; */
background-color: #FFFFFF;
padding: 0 2% 4%;
border-radius: 18rpx;
margin-bottom: 3%;
}
/* .integral_goods_sty1:first-child {
margin-left: 0;
} */
.integral_goods_sty1 image {
width: 100%;
height: 240upx;
}
.integral_goods_text {
font-size: 35rpx;
font-weight: bold;
color: #333333;
line-height: 1.8;
}
.integral_goods_sty_bo {
display: flex;
margin-top: 2%;
}
.integral_goods_sty_bo_le {
width: 65%;
color: #999999;
font-size: 30rpx;
}
.integral_goods_text2 {
color: #D80204;
font-size: 28rpx;
margin-right: 4upx;
font-weight: bold;
}
.integral_goods_sty_bo_ri {
width: 35%;
background-color: #FCD202;
font-size: 24rpx;
font-weight: bold;
color: #333333;
padding: 2% 0;
text-align: center;
border-radius: 50rpx;
}
</style>

144
my/integral/integralDet.vue Normal file
View File

@ -0,0 +1,144 @@
<template>
<view>
<view style="text-align: left;padding-bottom: 10rpx;">
<view v-for="(item, index) in list" :key="index" class="item">
<view>
<!-- <view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="margin-bottom: 8upx;color: #ecd4b4">充值</text>
<text v-if="item.type == 2" style="margin-bottom: 8upx;color: #ecd4b4">提现</text>
</view> -->
<view style="color: #999999;font-size: 28upx;">
<view style="margin-bottom: 8upx">{{item.title}}</view>
<!-- <view v-if="item.classify === 2" style="margin-bottom: 8upx"> 返佣类型直属返佣</view> -->
<!-- <view v-if="item.classify === 3" style="margin-bottom: 8upx"> 返佣类型非直属支付</view> -->
<view style="margin-bottom: 8upx">{{item.content}}</view>
<view style="margin-bottom: 8upx"> 创建时间{{item.createTime}}</view>
<view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text style="color: #000000;">+</text>{{item.num}}积分</text>
<text v-if="item.type == 2" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text style="color: #000000;">-</text>{{item.num}}积分</text>
</view>
</view>
</view>
</view>
<!-- 加载更多提示 -->
<!-- <view class="s-col is-col-24" v-if="list.length > 0">
<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
</view> -->
<!-- 加载更多提示 -->
<!-- <empty v-if="list.length === 0" des="暂无明细数据" show="false"></empty> -->
<empty v-if="list.length == 0" content="暂无数据" ></empty>
</view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
list: [],
page: 1,
limit: 10,
tabIndex: 1,
checkReZhiShu: '否',
checkReTuanZhang: '否',
checkReFeiZhiShu: '否',
scrollTop: false,
contentText: {
contentdown: '上拉显示更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
classify: '',
totalCount: 0
}
},
onLoad(option) {
this.classify = option.classify
if(this.classify == 2) {
uni.setNavigationBarTitle({
title: "兑换记录"
});
}
this.$queue.showLoading("加载中...");
this.getList();
},
onPageScroll: function(e) {
this.scrollTop = e.scrollTop > 200;
},
methods: {
getList() {
let data = {
page: this.page,
limit: this.limit,
classify: this.classify==2?this.classify:''
}
this.$Request.getT('/app/userintegraldetails/selectIntegraldetailsList',data ).then(res => {
if (res.code === 0) {
this.totalCount = res.data.totalCount
if (this.page === 1) {
this.list = res.data.list;
} else {
this.list = [...this.list, ...res.data.list];
}
}
uni.stopPullDownRefresh();
uni.hideLoading();
});
}
},
onReachBottom: function() {
// this.page = this.page + 1;
// this.getList();
if(this.list.length<this.totalCount) {
this.page = this.page + 1;
this.getList()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
onPullDownRefresh: function() {
this.page = 1;
this.getList();
}
}
</script>
<style lang="less">
page {
// background: #1c1b20;
}
.tui-tab-item-title {
// color: #ffffff;
font-size: 30rpx;
height: 80rpx;
line-height: 80rpx;
flex-wrap: nowrap;
white-space: nowrap;
}
.tui-tab-item-title-active {
border-bottom: 1px solid #5E81F9;
color: #5E81F9;
font-size: 32upx;
font-weight: bold;
border-bottom-width: 6upx;
text-align: center;
}
.item {
background: #FFFFFF;
padding: 32rpx;
margin: 32rpx;
font-size: 28rpx;
box-shadow: 7px 9px 34px rgba(0, 0, 0, 0.1);
border-radius: 16upx;
}
</style>

125
my/integral/record.vue Normal file
View File

@ -0,0 +1,125 @@
<template>
<view>
<view style="text-align: left;padding-bottom: 10rpx;">
<view v-for="(item, index) in list" :key="index" class="item">
<view>
<!-- <view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="margin-bottom: 8upx;color: #ecd4b4">充值</text>
<text v-if="item.type == 2" style="margin-bottom: 8upx;color: #ecd4b4">提现</text>
</view> -->
<view style="color: #999999;font-size: 28upx;">
<view style="margin-bottom: 8upx">{{item.title}}</view>
<!-- <view v-if="item.classify === 2" style="margin-bottom: 8upx"> 返佣类型直属返佣</view> -->
<!-- <view v-if="item.classify === 3" style="margin-bottom: 8upx"> 返佣类型非直属支付</view> -->
<view style="margin-bottom: 8upx">{{item.content}}</view>
<view style="margin-bottom: 8upx"> 创建时间{{item.createTime}}</view>
<view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text class="text-olive">+</text>{{item.money}}</text>
<text v-if="item.type == 2" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text class="text-red">-</text>{{item.money}}</text>
</view>
</view>
</view>
</view>
<!-- 加载更多提示 -->
<!-- <view class="s-col is-col-24" v-if="list.length > 0">
<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
</view> -->
<!-- 加载更多提示 -->
<!-- <empty v-if="list.length === 0" des="暂无明细数据" show="false"></empty> -->
<empty v-if="list.length == 0" content="暂无明细" ></empty>
</view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
list: [],
page: 1,
limit: 10,
tabIndex: 1,
checkReZhiShu: '否',
checkReTuanZhang: '否',
checkReFeiZhiShu: '否',
scrollTop: false,
contentText: {
contentdown: '上拉显示更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
}
}
},
onLoad() {
this.$queue.showLoading("加载中...");
this.getList();
},
onPageScroll: function(e) {
this.scrollTop = e.scrollTop > 200;
},
methods: {
getList() {
let data = {
page: this.page,
limit: this.limit,
}
this.$Request.getT('/app/userintegraldetails/selectIntegraldetailsList',data ).then(res => {
if (res.code === 0) {
if (this.page === 1) {
this.list = res.data.list;
} else {
this.list = [...this.list, ...res.data.list];
}
}
uni.stopPullDownRefresh();
uni.hideLoading();
});
}
},
onReachBottom: function() {
this.page = this.page + 1;
this.getList();
},
onPullDownRefresh: function() {
this.page = 1;
this.getList();
}
}
</script>
<style lang="less">
page {
// background: #1c1b20;
}
.tui-tab-item-title {
// color: #ffffff;
font-size: 30rpx;
height: 80rpx;
line-height: 80rpx;
flex-wrap: nowrap;
white-space: nowrap;
}
.tui-tab-item-title-active {
border-bottom: 1px solid #5E81F9;
color: #5E81F9;
font-size: 32upx;
font-weight: bold;
border-bottom-width: 6upx;
text-align: center;
}
.item {
// background: #1E1F31;
padding: 32rpx;
margin: 32rpx;
font-size: 28rpx;
box-shadow: 7px 9px 34px rgba(0, 0, 0, 0.1);
border-radius: 16upx;
}
</style>

190
my/msg/index.vue Normal file
View File

@ -0,0 +1,190 @@
<template>
<view class="content">
<!-- <view class="navbar">
<view v-for="(item, index) in tabList" :key="index" class="nav-item"
:class="{ current: tabFromIndex === item.state }" @click="tabClicks(item.state)">
{{ item.text }}
</view>
</view> -->
<view v-for="(item, index) in list" :key="index" class="item" @click="goDet(item.content)">
<view class="flex justify-between"
style="font-size: 30upx;width: 100%;overflow: hidden;text-overflow: ellipsis;white-space:nowrap">
<view class="text-bold">{{ item.title }}</view>
<!-- <view v-if="item.isSee == 0"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
</view> -->
</view>
<view class="flex justify-between">
<view style="color: #999999;font-size: 28upx;margin-top: 10upx;">{{ item.content }}</view>
<view style="margin-top: 10upx;color: #999999;font-size: 28upx;text-align: right;">{{ item.createAt }}
</view>
</view>
</view>
<!-- <view v-if="list.length === 0" style="background: #1c1b20;text-align: center;padding-top: 140upx;color: #FFFFFF;">暂无消息</view> -->
<empty v-if="list.length === 0" des="暂无消息" show="false"></empty>
</view>
</template>
<script>
import empty from '@/components/empty';
export default {
components: {
empty
},
data() {
return {
tabFromIndex: 5,
tabCurrentIndex: 0,
fromInfo: 5,
list: [],
page: 1,
limit: 20,
scrollTop: false,
tabList: [{
state: 5,
text: '用户消息',
totalElements: 0
},
{
state: 4,
text: '订单消息',
totalElements: 0
}
],
totalCount: 0
};
},
onPageScroll: function(e) {
this.scrollTop = e.scrollTop > 200;
},
onLoad(options) {
this.$queue.showLoading("加载中...")
this.loadData();
},
methods: {
goDet(e) {
console.log(e.indexOf('下单'))
if (e.indexOf('下单') != -1) {
uni.navigateTo({
url: '/my/order/index'
})
} else if (e.indexOf('接单') != -1) {
uni.navigateTo({
url: '/my/takeOrder/index'
})
} else if (e.indexOf('订单审核通过') != -1) {
uni.navigateTo({
url: '/my/publish/index'
})
}
},
//
tabClicks(index) {
this.list = [];
this.page = 1;
this.tabFromIndex = index;
this.$queue.showLoading("加载中...")
this.loadData();
},
//
loadData() {
let that = this;
let number = 10;
let token = this.$queue.getData('token');
if (token) {
let data = {
page: this.page,
limit: this.limit,
// state: this.tabFromIndex
}
this.$Request.getT('/app/message/selectMessageByUserId', data).then(res => {
if (res.code === 0) {
this.totalCount = res.data.totalCount
if (this.page == 1) {
this.list = res.data.list
} else {
res.data.list.forEach(d => {
this.list.push(d);
});
}
}
uni.hideLoading();
uni.stopPullDownRefresh();
});
}
}
},
onReachBottom: function() {
if(this.list.length<this.totalCount) {
this.page = this.page + 1;
this.loadData()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
};
</script>
<style lang="scss">
page,
page {
// background: #111224;
}
.content {
// background: #111224;
height: 100%;
}
.navbar {
display: flex;
height: 40px;
padding: 0 5px;
// background: #1E1F31;
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
position: relative;
z-index: 10;
.nav-item {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
height: 100%;
font-size: 15px;
// color: #FFFFFF;
position: relative;
&.current {
color: #5E81F9;
&:after {
content: '';
position: absolute;
left: 50%;
bottom: 0;
transform: translateX(-50%);
width: 44px;
height: 0;
border-bottom: 2px solid #5E81F9;
}
}
}
}
.item {
// background: #1E1F31;
padding: 16rpx 25rpx;
margin: 16rpx;
font-size: 28rpx;
box-shadow: 7rpx 9rpx 34rpx rgba(0, 0, 0, 0.1);
border-radius: 16upx;
background: #fff;
}
</style>

338
my/myPingJia/myPingJia.vue Normal file
View File

@ -0,0 +1,338 @@
<template>
<view style="padding-bottom: 20rpx;">
<view class="padding-tb-sm margin-lr u-border-bottom" v-for="(item, index) in EvaluateList" :key='index'>
<view class="flex justify-between align-center" @click="gotoShop(item.shopId)">
<view class="flex align-center">
<u-avatar :src="item.shopCover" size="65"></u-avatar>
<view class=" margin-left-sm" style="line-height: 46upx;">{{item.shopName?item.shopName:'匿名'}}
</view>
<view class="flex margin-left-sm">
<u-icon v-for="ite in item.score" :key='ite' color="#FCD202" name="star-fill">
</u-icon>
</view>
</view>
<view>{{item.createTime}}</view>
</view>
<view style="display: flex;">
<view class="margin-top-sm" :style="!item.shopReplyMessage ? 'width: 90%;' : ''">{{item.evaluateMessage}}</view>
<view class="flex padding-top-sm margin-right" @tap="goShow(index)" v-if="!item.shopReplyMessage">
<!-- <image src="../../static/images/order/pinglun.png" style="width: 20px;height: 20px;"></image> -->
</view>
</view>
<view class="margin-top-sm" v-if="item.shopReplyMessage">
<view class="flex align-center">
<view class=" flex align-center text-df" style="color: #999999;">
<view class="text-df">商家回复:</view>{{item.shopReplyMessage}}
</view>
</view>
<!-- <view class="text-lg padding-left margin-left-xl">{{dataDet.shopReplyMessage}}</view> -->
</view>
<view class="flex" style="width: 100%;margin-top: 20rpx;flex-wrap: wrap;" v-if="item.pictures">
<image @click="lookImgs(ind,item.pictures)" :src="ite" v-for="(ite,ind) in item.pictures" :key="ind" style="width: 200rpx;height: 200rpx;margin-right: 10rpx;margin-bottom: 10rpx;" mode=""></image>
</view>
<view class="flex justify-end" style="width: 100%;color: #999999;" @click="deletePj(item)">
删除
</view>
</view>
<empty v-if="EvaluateList.length<=0"></empty>
</view>
</template>
<script>
import empty from '../../components/empty.vue'
export default {
components:{
empty
},
data() {
return {
pinglun: '',
count: 0,
show: false,
customStyle: {
color: '#333333',
background: '#FCD202',
marginRight: '20rpx',
border: 0
},
customStyle1: {
color: '#333333',
background: '#F2F2F2',
marginRight: '20rpx',
border: 0
},
cashDeposit: [],
EvaluateData: {},
EvaluateList: [],
grade: '',
page: 1,
size: 10,
isShow: false,
oneData: [],
titleData: [],
shopDet: {}
}
},
onShow() {
this.getList()
},
onPullDownRefresh() {
this.page = 1
this.getList()
},
onReachBottom: function() {
this.page = this.page + 1;
this.getList()
},
methods: {
deletepjrequest(id){
let data = {
id:id
}
this.$Request.getT("/app/order/deleteEvaluateById", data).then(res => {
uni.hideLoading()
if (res.code == 0) {
uni.showToast({
title:'删除成功'
})
this.page = 1
this.getList()
}else{
uni.showToast({
title:res.msg,
icon:'none'
})
}
});
},
//
deletePj(item){
let that = this
uni.showModal({
title:'提示',
content:'确定删除此评价?',
complete(ret) {
if(ret.confirm){
//
that.deletepjrequest(item.id)
}
}
})
},
//
gotoShop(shopId){
uni.navigateTo({
url:'/pages/index/shop/index?shopId='+shopId
})
},
//
lookImgs(index,imgs){
uni.previewImage({
current:index,
urls:imgs
})
},
goShow(index){
this.orderNumber = this.EvaluateList[index].orderNumber;
this.show = true;
},
sel(e) {
this.grade = e
this.count = e
this.page = 1
this.getList()
},
open(data) {
console.log(data);
this.oneData = data;
this.titleData = data.goods
this.isShow = true;
},
close() {
this.isShow = false;
},
//
getList() {
let data = {
page: this.page,
limit: this.size,
}
this.$Request.getT("/app/order/getEvaluateList", data).then(res => {
if (res.code == 0 && res.data) {
// this.EvaluateData = res.data
res.data.records.map(item=>{
if(item.pictures){
item.pictures = item.pictures.split(',')
}else{
item.pictures = []
}
})
if (this.page == 1) {
this.EvaluateList = res.data.records
} else {
this.EvaluateList = [...this.EvaluateList, ...res.data.records]
}
}
});
}
}
}
</script>
<style lang="scss">
page {
background-color: #FFFFFF;
}
.box1 {
position: absolute;
background: #000000;
width: 750rpx;
height: 100vh;
opacity: 0.4;
}
.moudes {
width: 650rpx;
position: absolute;
background: #FFFFFF;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
height: 700rpx;
border-radius: 10rpx;
.bt {
font-size: 30rpx;
font-weight: bold;
}
.pjImg {
width: 200rpx;
height: 200rpx;
}
.navBox {
.avtiter {
width: 80rpx;
height: 80rpx;
border-radius: 40rpx;
margin-right: 15rpx
}
padding-left: 30rpx;
padding-top: 30rpx;
display: flex;
align-items: center;
.userName {
font-size: 28rpx;
font-weight: bold;
}
}
}
.nrTxt {
display: inline-block;
width: 500rpx;
}
.navList {
text-align: center;
margin-top: 30rpx;
padding-left: 30rpx;
padding-right: 30rpx;
display: flex;
justify-content: center;
.xq {
font-size: 30rpx;
font-weight: bolder;
text-align: center;
}
}
.contentTxt {
view {
margin-bottom: 30rpx;
display: flex;
align-items: center;
}
.title {
font-size: 30rpx;
font-weight: bold;
color: #000000;
margin-right: 15rpx;
}
.imgRsc {
width: 100rpx;
height: 100rpx;
border-radius: 10rpx;
}
}
.list_1 {
position: absolute;
}
.btn {
width: 690upx;
height: 88upx;
margin: 30upx auto;
background: #FCD202;
box-shadow: 0px 10upx 20upx 0upx #FFD9B3;
border-radius: 16upx;
display: flex;
align-items: center;
justify-content: center;
color: #000000;
}
.one {
background: #FFFFFF;
margin-top: 20rpx;
display: flex;
justify-content: space-between;
padding: 20rpx;
.imgSrc {
width: 100rpx;
height: 100rpx;
vertical-align: middle;
margin-right: 20rpx;
border-radius: 10rpx;
}
.name {
margin-top: 10rpx;
margin-bottom: 20rpx;
font-size: 24rpx;
color: #000000;
}
.timer {
font-size: 20rpx;
color: #b3b3c4;
}
.contentTxt {
font-size: 24rpx;
color: #000000;
}
}
</style>

329
my/recruit/index.vue Normal file
View File

@ -0,0 +1,329 @@
<template>
<view>
<view class="hehuo_view" v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/hezuobg.png"></image>
<view class="text_view">
<view class="item_view">
<view class="item_title">意向代理城市</view>
<input @click="goCity" type="text" disabled v-model="city" placeholder="请输入代理城市" />
<view class="xian"></view>
</view>
<view class="item_view">
<view class="item_title">姓名</view>
<input type="text" v-model="userName" placeholder="请输入姓名" />
<view class="xian"></view>
</view>
<view class="item_view">
<view class="item_title">联系电话</view>
<input type="number" v-model="phone" maxlength="11" placeholder="请输入联系电话" />
<view class="xian"></view>
</view>
<view class="item_view">
<view class="item_title">年龄</view>
<input type="number" v-model="age" maxlength="11" placeholder="请输入年龄" />
<view class="xian"></view>
</view>
<view class="item_view">
<view class="item_title">头像上传</view>
<view class="flex" style="overflow: hidden;flex-direction: initial;">
<view v-if="headImg.length">
<view class="margin-top flex margin-right-sm">
<view class="flex"
style="width: 150upx;height: 150upx;margin-right: 10rpx;position: relative;">
<image :src="headImg" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="headImgremove(index)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
</view>
</view>
<view class="margin-top" @click="addImage()" v-if="headImg.length<=0">
<view style="width: 150upx;height: 150upx;background: #F5F5F5;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="../../static/images/my/add.png"
style="width: 54upx;height: 47upx;position: relative;">
</image>
</view>
<view class="text-center text-xs margin-top-xs">上传图片</view>
</view>
</view>
</view>
</view>
</view>
<!-- <view class="audit_message" v-if="auditContent != '' && bb == 3">拒绝原因{{auditContent}}</view> -->
<view class="save_btn" @tap="save" v-if="bb !=0">提交申请</view>
<!-- <view class="save_btn" v-if="status == 0">审核中</view> -->
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
hotCitys: ['杭州', '天津', '北京', '上海', '深圳', '广州', '成都', '重庆', '厦门'],
locationValue: '正在定位...',
// auditContent: '',
city: '',
money: '',
teamNumber: '',
userName: '',
phone: '',
age: '',
headImg: [],
bb:true,
XCXIsSelect: '是',
}
},
onLoad() {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
if (this.XCXIsSelect == '否') {
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '骑手招募'
});
}
this.getChannel();
},
methods: {
//
headImgremove(index) {
this.headImg = ''
},
getChannel() {
let userId = this.$queue.getData('userId');
this.$Request.getT('/app/artificer/selectAgencyById?userId=' + userId).then(res => {
if (res.code == 0) {
if (res.data == null) {
this.bb = 1;
} else {
this.bb = res.data.status;
this.city = res.data.city;
this.age = res.data.age;
this.headImg = res.data.img;
this.userName = res.data.name;
this.phone = res.data.phone;
}
console.log(this.bb)
// this.auditContent = res.data.auditContent;
}
});
},
//
Getcity(latitude, longitude) {
this.$Request.get("/app/Login/selectCity", {
lat: latitude,
lng: longitude
}).then(res => {
console.log(res)
this.city = res.data.city
console.log(this.address)
});
},
goCity() {
let that = this
uni.chooseLocation({
success: function(res) {
console.log('位置名称:' + res.name);
console.log('详细地址:' + res.address);
console.log('纬度:' + res.latitude);
console.log('经度:' + res.longitude);
// that.city = res.address || ''
that.Getcity(res.latitude, res.longitude)
}
});
// uni.getLocation({
// type: 'gcj02',
// geocode: true,
// success: function(res) {
// console.log('' + res.address.city);
// that.city = res.address.city || ''
// }
// });
},
save() {
// let isStudent = this.$queue.getData("isStudent");
// if (isStudent != 2) {
// uni.showModal({
// title: '',
// content: '',
// showCancel: true,
// cancelText: '',
// confirmText: '',
// success: res => {
// if (res.confirm) {
// uni.navigateTo({
// url: '/offlinetask/pages/public/authentication'
// });
// }
// }
// });
// return;
// }
// this.form.headImg = this.headImg
// this.headImg = this.headImg.toString();
if (this.city === '') {
this.$queue.showToast('请输入代理城市')
return;
}
if (this.userName === '') {
this.$queue.showToast('请输入姓名')
return;
}
if (this.phone === '' || this.phone.length != 11) {
this.$queue.showToast('请输入正确的手机号!')
return;
}
if (this.age === '') {
this.$queue.showToast('请输入年龄')
return;
}
if (this.headImg == '') {
this.$queue.showToast('请上传头像')
return;
}
let userId = this.$queue.getData('userId');
let data = {
userId: userId,
name: this.userName,
phone: this.phone,
age: this.age,
city: this.city,
img: this.headImg,
}
this.$Request.postJson('/app/artificer/insertAgency', data).then(res => {
if (res.code == 0) {
uni.hideLoading();
this.$queue.showToast('提交成功!');
setTimeout(d => {
uni.navigateBack();
}, 1000);
} else {
uni.hideLoading();
this.$queue.showToast(res.msg);
}
});
},
addImage() {
let that = this
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < 1; i++) {
that.$queue.showLoading("上传中...");
uni.uploadFile({ //
url: that.config("APIHOST1") + '/alioss/upload', //
// url: 'https://anmo.xianmxkj.com/sqx_fast/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
console.log(uploadFileRes.data)
that.headImg = JSON.parse(uploadFileRes.data).data
console.log(that.headImg)
uni.hideLoading();
}
});
}
}
})
},
}
}
</script>
<style lang="less">
// @import '../../static/less/index.less';
// @import '../../static/css/index.css';
.hehuo_view {
width: 750rpx;
height: 1830upx;
image {
width: 750rpx;
height: 1830upx;
background-size: 100%;
position: absolute;
}
.text_view {
position: absolute;
z-index: 1;
width: 84%;
margin: 660rpx 50rpx 30rpx;
.audit_message {
color: red;
width: 650rpx;
height: 50rpx;
margin-top: 50rpx;
}
.save_btn {
width: 650rpx;
height: 88rpx;
background: #FFFFFF;
border-radius: 10rpx;
text-align: center;
line-height: 88rpx;
/* #ifdef MP-WEIXIN */
margin-top: 150rpx;
/* #endif */
/* #ifdef H5 */
margin-top: 100rpx;
/* #endif */
/* #ifdef APP-PLUS */
margin-top: 180rpx;
/* #endif */
}
.save_btn1 {
width: 650rpx;
height: 88rpx;
background: #FFFFFF;
border-radius: 10rpx;
margin-top: 100rpx;
text-align: center;
line-height: 88rpx;
}
.item_view {
margin-top: 30rpx;
.item_title {
font-size: 28rpx;
font-family: PingFang SC Heavy, PingFang SC Heavy-Heavy;
font-weight: 800;
color: #333333;
}
input {
margin-top: 20rpx;
height: 40rpx;
font-size: 24rpx;
font-family: PingFang SC Regular, PingFang SC Regular-Regular;
font-weight: 400;
color: #333333;
}
.xian {
width: 630rpx;
height: 1rpx;
border: 1rpx solid #77D7B0;
margin-top: 10rpx;
}
}
}
}
</style>

36
my/setting/about.vue Normal file
View File

@ -0,0 +1,36 @@
<template>
<view style="line-height: 26px;padding: 32upx;" class="home1">
<!-- <view v-html="tit"> </view> -->
<view style="font-size: 28upx;" v-html="content"></view>
</view>
</template>
<script>
export default {
data() {
return {
tit: '',
content: ''
}
},
onLoad() {
this.getGuize();
},
methods: {
getGuize() {
this.$Request.getT('/app/common/type/233').then(res => {
if (res.code == 0) {
this.content = res.data.value;
// this.tit = res.data.min
}
});
}
}
}
</script>
<style>
page {
background: #FFFFFF;
}
</style>

637
my/setting/chat.vue Normal file
View File

@ -0,0 +1,637 @@
<template>
<view>
<view style="width: 100%;padding-bottom: 140rpx;">
<view style="display: flex;flex-direction: column;" v-for="(item,index) in ListItem" :key='index' >
<view style="margin-top: 15rpx;width: 100%;text-align: center;font-size: 26rpx;color: #999999;">
{{item.createTime}}</view>
<view v-if="item.sendType === 2" style="width: 83%;margin-right: 15%;">
<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
<view>
<image src="../../static/logo.png" class="chat-listitem-image"></image>
</view>
<view v-if="item.content && item.type === 1" class="chat-listitem-text"
style="margin-left: 20rpx;">{{item.content}}</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.type === 2" :src="item.content"
style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
</view>
</view>
<view v-if="item.sendType === 1" style="width: 83%;margin-left: 15%;">
<view class="chat-listitem" style="float: right;">
<view v-if="item.content && item.type === 1" @longpress="copy(item.content)"
class="chat-listitem-text" style="margin-right: 20rpx;">{{item.content}}</view>
<view v-if="item.content && item.type === 4" @click="goShop(item.content[3])"
style="width: 400rpx;background: #FFFFFF;height: max-content;margin-right: 20rpx;margin-top: 10rpx;border-radius: 20rpx;">
<image :src="item.content[0]" class="chat-listitem-image-type4"
style="width: 400rpx;height: 350rpx;"></image>
<view style="padding: 10rpx;padding-bottom: 20rpx;">
<view style="color: #ed5732;font-size: 34rpx;"><text style="font-size: 22rpx;"> </text>
{{item.content[2]}}</view>
<view
style="overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;width: 100%;height: 75upx;">
{{item.content[1]}}</view>
</view>
</view>
<view v-if="item.content && item.type === 3"
style="width: 500rpx;background: #FFFFFF;height: max-content;margin-right: 20rpx;margin-top: 10rpx;border-radius: 20rpx;padding: 15rpx 10rpx;">
<view style="color: #000000;font-weight: 600;margin-left: 10rpx;">你正在咨询的订单</view>
<view style="display: flex;">
<image :src="item.content[0]" class="chat-listitem-image-type4"
style="margin-left: 7rpx;margin-top: 20rpx;width: 110rpx;height: 110rpx;"></image>
<view
style="margin-top: 15rpx;padding: 10rpx 0rpx 5rpx 10rpx;width: 75%;background: #f5f5f5;margin-left: 10rpx;">
<view
style="font-size: 28rpx;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;-webkit-box-orient: vertical;height: 75upx;width: 100%;">
{{item.content[1]}}</view>
<view style="color: #ed5732;font-size: 28rpx;"><text style="font-size: 22rpx;">
</text>{{item.content[5]}}
</view>
</view>
</view>
<view style="color: #999999;margin-top: 10rpx;margin-left: 12rpx;">
<view>订单编号{{item.content[3]}}</view>
<view style="margin-top: 10rpx;">创建时间{{item.content[4]}}</view>
</view>
<view
style="float: right;margin-right: 10rpx;margin-top: 15rpx;background: #F9221D;color: #FFFFFF;border-radius: 50rpx;width: 150rpx;height: 50rpx;font-size: 24rpx;text-align: center;line-height: 50rpx;"
@click="goDingdanDetail(item.content[2])">查看</view>
</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.type === 2" :src="item.content"
style="height: 200rpx;width: 200rpx;margin-right: 20rpx;"></image>
<view>
<image v-if="item.chat.userHead" :src="item.chat.userHead" class="chat-listitem-image">
</image>
<image v-else src="../../static/logo.png" class="chat-listitem-image"></image>
</view>
</view>
</view>
<!-- <view v-if="item.sendType === 4" style="width: 83%;margin-left: 15%;">
<view class="chat-listitem" style="float: right;">
<view style="height: max-content;">
<image :src="type4[0]" mode=""></image>
</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.type === 2" :src="item.content" style="height: 200rpx;width: 170rpx;margin-right: 20rpx;"></image>
<view>
<image :src="item.chat.userHead" class="chat-listitem-image"></image>
</view>
</view>
</view> -->
</view>
</view>
<view v-if="ShopState"
style="width: 95%;margin-left: 20rpx;height: 150upx;position: fixed;bottom: 120upx;z-index: 99;background-color: #FFFFFF;border-radius: 20rpx;">
<view style="display: flex;width: 100%;color: #000000;padding: 20rpx;">
<image :src="Shopimage" style="width: 110rpx;height: 110rpx;"></image>
<view style="margin-left: 20rpx;width: 400rpx;">
<view
style="font-size: 34rpx;color: #000000;overflow: hidden;text-overflow: ellipsis;flex-wrap: nowrap;white-space: nowrap;width: 98%;">
{{ShopTitle}}</view>
<view style="margin-top: 20rpx;color: #ed5732;font-size: 34rpx;">{{Shopmoney}}</view>
</view>
<view style="text-align: right;">
<image @click="ShopClose" src="../../static/images/msg/close.png"
style="width: 30rpx;height: 30rpx;"></image>
<view
style="margin-top: 20rpx;background: #F9221D;color: #FFFFFF;border-radius: 50rpx;width: 150rpx;height: 50rpx;font-size: 24rpx;text-align: center;line-height: 50rpx;"
@click="goMaijia">发送给商家</view>
</view>
</view>
</view>
<view v-if="orderState"
style="width: 95%;margin-left: 20rpx;height: 150upx;position: fixed;bottom: 120upx;z-index: 99;background-color: #FFFFFF;border-radius: 20rpx;">
<view style="display: flex;width: 100%;color: #000000;padding: 20rpx;">
<image :src="orderimage" style="width: 110rpx;height: 110rpx;"></image>
<view style="margin-left: 20rpx;width: 400rpx;">
<view
style="font-size: 34rpx;color: #000000;overflow: hidden;text-overflow: ellipsis;flex-wrap: nowrap;white-space: nowrap;width: 98%;">
你可能想咨询该订单</view>
<view style="margin-top: 20rpx;color: #ed5732;font-size: 34rpx;">{{ordermoney}}</view>
</view>
<view style="text-align: right;">
<image @click="orderClose" src="../../static/images/msg/close.png"
style="width: 30rpx;height: 30rpx;"></image>
<view
style="margin-top: 20rpx;background: #F9221D;color: #000000;border-radius: 50rpx;width: 150rpx;height: 50rpx;font-size: 24rpx;text-align: center;line-height: 50rpx;"
@click="goDingdan">发送订单</view>
</view>
</view>
</view>
<!-- 底部聊天输入框 -->
<view class="input-box">
<view class="justify-between padding-lr" style="display: flex;margin-top: 15rpx;width: 100%;background-color: #eee;padding-top: 4upx;">
<image src="../../static/images/msg/add.png" @click="chooseImage(['album'])"
style="width: 50rpx;height: 50rpx;margin-top: 8rpx;margin-right: 12rpx;border-radius: 50upx;"></image>
<input confirm-type="send" @confirm='setChatSave(1)' type="text" v-model="content"
style="width: 72%;height: 70rpx;background: #fff;margin: 4rpx 10rpx 0;border-radius: 70rpx;padding-left: 10rpx;color: #000000;" />
<view class="save" @tap='setChatSave(1)'>发送</view>
</view>
</view>
</view>
</template>
<script>
import configdata from '../../common/config.js';
export default {
data() {
return {
connected: false,
connecting: false,
msg: false,
type4: [],
listRight: {
chat: {
userHead: ""
},
content: "",
sendType: 1,
type: 1
},
content: '',
chatId: '',
type: 1,
ListItem: [],
ShopState: false,
ShopordersId: '',
Shopimage: '',
Shopmoney: '',
ShopTitle: '',
orderState: false,
ordersId: '',
orderimage: '',
orderNum: '',
ordermoney: '',
orderTitle: '',
orderCreateTime: '',
className: '',
Shopsales: '',
hand: 1,
index: 0,
page: 0,
size: 1000,
countDown: ''
};
},
computed: {
showMsg() {
if (this.connected) {
if (this.msg) {
return '收到消息:' + this.msg
} else {
return '等待接收消息'
}
} else {
return '尚未连接'
}
}
},
onUnload() {
uni.closeSocket()
uni.hideLoading()
},
onLoad(d) {
if (d.className) {
this.className = d.className;
if (d.className === 'shop') {
this.ShopState = true;
this.ShopordersId = d.ordersId;
this.Shopimage = d.image;
this.Shopmoney = d.money;
this.Shopsales = d.sales;
this.ShopTitle = d.title;
} else if (d.className === 'order') {
this.orderState = true;
this.ordersId = d.id;
this.orderimage = d.image;
this.ordermoney = d.money;
this.orderTitle = d.title;
this.orderNum = d.orderNum;
this.orderCreateTime = d.createTime;
}
}
this.getChatSave();
this.connect();
},
onShow() {
if (this.connected || this.connecting) {
} else {
this.connect();
}
},
onHide() {
uni.closeSocket()
},
methods: {
copy(content) {
uni.showModal({
title: '温馨提示',
content: '确认要复制此文字吗?',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if (res.confirm) {
uni.setClipboardData({
data: content,
success: r => {
this.$queue.showToast('复制成功');
}
});
}
}
});
},
h5Copy(content) {
if (!document.queryCommandSupported('copy')) {
//
return false
}
let textarea = document.createElement("textarea")
textarea.value = content
textarea.readOnly = "readOnly"
document.body.appendChild(textarea)
textarea.select() //
textarea.setSelectionRange(0, content.length) //
let result = document.execCommand("copy") //
textarea.remove()
return result
},
getDateDiff(data) {
// data
//var str = data;
//
var timePublish = new Date(data);
var timeNow = new Date();
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var month = day * 30;
var result = "2";
var diffValue = timeNow - timePublish;
var diffMonth = diffValue / month;
var diffWeek = diffValue / (7 * day);
var diffDay = diffValue / day;
var diffHour = diffValue / hour;
var diffMinute = diffValue / minute;
if (diffMonth > 3) {
result = timePublish.getFullYear() + "-";
result += timePublish.getMonth() + "-";
result += timePublish.getDate();
} else if (diffMonth > 1) { //
result = data.substring(0, 10);
} else if (diffWeek > 1) { //
result = data.substring(0, 10);
} else if (diffDay > 1) { //
result = data.substring(0, 10);
} else if (diffHour > 1) { //
result = parseInt(diffHour) + "小时前";
} else if (diffMinute > 1) { //
result = parseInt(diffMinute) + "分钟前";
} else {
result = "刚刚";
}
return result;
},
goDingdanDetail(id) {
uni.navigateTo({
url: '../member/orderdetail?id=' + id
});
},
goShop(ordersId) {
uni.navigateTo({
url: './commoditydetail?ordersId=' + ordersId
});
},
ShopClose() {
this.ShopState = false;
},
orderClose() {
this.orderState = false;
},
goDingdan() {
this.orderState = false;
this.setChatSave(3);
},
goMaijia() {
this.ShopState = false;
this.setChatSave(4);
},
connect() {
let userId = this.$queue.getData('userId');
if (this.connected || this.connecting) {
uni.showModal({
content: '正在连接或者已经连接,请勿重复连接',
showCancel: false
})
return false
}
let token = uni.getStorageSync('token')
this.connecting = true
uni.showLoading({
title: '连接中...'
})
uni.connectSocket({
// url: 'wss://game.shengqianxiong.com.cn/wss/websocket/' + userId,
// url: 'ws://192.168.1.17:8180/sqx_fast/websocket/' + userId,
url: this.config("WSHOST") + userId,
data() {
return {
msg: 'Hello'
}
},
header: {
'content-type': 'application/json',
'token': token
},
method: 'GET',
success(res) {
//
},
fail(err) {
//
}
})
uni.onSocketOpen((res) => {
this.connecting = false
this.connected = true
uni.hideLoading()
// uni.showToast({
// icon: 'none',
// title: ''
// })
console.log('onOpen', res);
})
uni.onSocketError((err) => {
this.connecting = false
this.connected = false
uni.hideLoading()
uni.showModal({
content: '网络较差,请稍后再试',
showCancel: false
})
console.log('onError', err);
})
uni.onSocketMessage((res) => {
// let that = this;
// let datas = JSON.parse(res.data)
// let data = {
// chat: {
// userHead: '../../static/logo.png'
// },
// content: datas.content,
// type: datas.type,
// sendType: datas.sendType
// }
// that.ListItem.push(data);
this.getTimeOrListItem1();
console.log('onMessage', res)
})
uni.onSocketClose((res) => {
this.connected = false
this.startRecive = false
this.msg = false
console.log('onClose', res)
})
},
close() {
uni.closeSocket()
},
getTimeOrListItem1() {
this.$Request.getT('/app/chats/list?chatId=' + this.chatId).then(
res => {
this.ListItem = [];
if (res.data) {
var time = '';
res.data.forEach(d => {
d.createTime = this.getDateDiff(d.createTime);
if (d.createTime === time) {
d.createTime = '';
} else {
time = d.createTime;
}
if (!d.chat.userHead) {
// d.chat.userHead = '../../static/logo.png';
let avatar = this.$queue.getData('avatar');
d.chat.userHead = avatar
}
if (d.type === 4) {
let data = d.content.split(',');
d.content = data;
}
if (d.type === 3) {
let data = d.content.split(',');
d.content = data;
}
this.ListItem.push(d);
});
setTimeout(() => {
uni.pageScrollTo({
scrollTop: 99999,
duration: 0
});
}, 50);
}
uni.hideLoading();
});
},
getChatSave() {
let userId = this.$queue.getData('userId');
let phone = this.$queue.getData('phone');
let userName = this.$queue.getData('userName');
if (!phone) {
phone = this.$queue.getData('userName');
}
let avatar = this.$queue.getData('avatar');
let data = {
userId: userId,
userHead: avatar,
userName: userName,
storeId: '0',
storeHead: '码兄外卖',
storeName: ''
}
this.$Request.postJson('/app/chats/save', data).then(res => {
if (res.status === 0) {
this.chatId = res.data.chatId;
uni.showLoading({
title: '加载中...'
});
this.getTimeOrListItem1();
}
});
},
setChatSave(type) {
//type:1 2
if (type === 1 && this.content == '') {
this.$queue.showToast('请输入聊天内容');
return;
}
if (this.chatId == '' || this.chatId == undefined) {
this.$queue.showToast('网络较差,请稍后再试');
return;
}
let userId = this.$queue.getData('userId');
if (type === 4) {
this.content = this.Shopimage + ',' + this.ShopTitle + ',' + this.Shopmoney + ',' + this.ShopordersId;
}
if (type === 3) {
this.content = this.orderimage + ',' + this.orderTitle + ',' + this.ordersId + ',' + this.orderNum +
',' + this.orderCreateTime +
',' + this.ordermoney
}
let data = {
userId: userId,
content: this.content,
chatId: this.chatId,
type: type,
storeId: '0',
sendType: '1'
}
data = JSON.stringify(data);
let that = this;
uni.sendSocketMessage({
data: data,
success(res) {
let avatar = that.$queue.getData('avatar');
if (!avatar) {
avatar = '../../static/logo.png';
}
setTimeout(() => {
that.getTimeOrListItem1();
}, 50);
console.log(that.content);
},
fail(err) {
console.log(err);
}
})
this.content = '';
},
//
chooseImage(sourceType) {
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < res.tempFilePaths.length; i++) {
this.$queue.showLoading("上传中...");
uni.uploadFile({ //
url: this.config("APIHOST") + '/alioss/upload', //
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
this.content = JSON.parse(uploadFileRes.data).data;
this.setChatSave(2);
uni.hideLoading();
}
});
}
}
})
},
config: function(name) {
var info = null;
if (name) {
var name2 = name.split("."); //
if (name2.length > 1) {
info = configdata[name2[0]][name2[1]] || null;
} else {
info = configdata[name] || null;
}
if (info == null) {
// let web_config = cache.get("web_config");
// if (web_config) {
// if (name2.length > 1) {
// info = web_config[name2[0]][name2[1]] || null;
// } else {
// info = web_config[name] || null;
// }
// }
}
}
return info;
},
//
viewImg(item) {
let imgsArray = [];
imgsArray[0] = item;
uni.previewImage({
current: 0,
urls: imgsArray
});
},
},
};
</script>
<style>
page {
/* background: #1c1b20; */
}
.input-box {
position: fixed;
bottom: 0;
left: 0;
height: 100rpx;
width: 100%;
display: flex;
box-sizing: content-box;
z-index: 999;
/* background-color: #ececec; */
/* padding: 0 5rpx; */
}
.chat-listitem {
display: flex;
margin-top: 20rpx;
padding: 10rpx;
}
.chat-listitem-text {
color: #000000;
background: #FFFFFF;
margin-top: 10rpx;
width: fit-content;
padding: 15rpx;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-radius: 10rpx;
}
.chat-listitem-image-type4 {
color: #000000;
background: #FFFFFF;
width: fit-content;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-top-left-radius: 20rpx;
border-top-right-radius: 20rpx;
}
.chat-listitem-image {
margin-top: 5rpx;
width: 75rpx;
height: 75rpx;
border-radius: 5rpx;
}
.save {
width: 130rpx;
text-align: center;
border-radius: 10rpx;
height: 70rpx;
color: #FFF;
background: #1789FD;
margin: 5rpx 10rpx 0;
line-height: 70rpx;
}
</style>

137
my/setting/customer.vue Normal file
View File

@ -0,0 +1,137 @@
<template>
<view style="height: 100vh;margin: 32upx;">
<view style="text-align: center;background: #fff;padding: 40upx;border-radius: 32upx;">
<view style="font-size: 38upx;color: #333333">添加客服微信咨询</view>
<view style="font-size: 32upx;margin-top: 32upx;color: #333333">微信号{{weixin}}</view>
<view @click="copyHref"
style="background: #5E81F9;width:200upx;margin-top: 32upx;font-size: 30upx;margin-left: 36%;color: #333333;padding: 4upx 20upx;border-radius: 24upx;">
一键复制</view>
<image @click="saveImg" mode="aspectFit" style="margin-top: 32upx" :src="image"></image>
<view style="font-size: 28upx;color: #333333;margin-top: 32upx" v-if="isWeiXin">
{{ isWeiXin ? '长按识别上方二维码' : '' }}
</view>
<!-- <button open-type="contact" class="btn">联系在线客服</button> -->
<view @click="goChat" style="width:260upx;margin-top: 32upx;font-size: 30upx;margin-left: 28%;color: #5E81F9;padding: 4upx 20upx;border-radius: 24upx;">联系在线客服</view>
<!-- <view v-if="isWeiXin" style="font-size: 24upx;color: #333333;margin-top: 80upx" @click="rests">无法识别</view> -->
</view>
</view>
</template>
<script>
export default {
data() {
return {
image: '',
isWeiXin: false,
weixin: '710070994',
webviewStyles: {
progress: {
color: '#1A1929 '
}
}
};
},
onLoad() {
// #ifdef H5
let ua = navigator.userAgent.toLowerCase();
if (ua.indexOf('micromessenger') !== -1) {
this.isWeiXin = true;
}
// #endif
//
this.$Request.getT('/app/common/type/1').then(res => {
if (res.code == 0) {
if (res.data && res.data.value) {
console.log(res.data.value)
this.image = res.data.value;
}
}
});
this.$Request.getT('/app/common/type/44').then(res => {
if (res.code == 0) {
if (res.data && res.data.value) {
this.weixin = res.data.value;
}
}
});
},
onPullDownRefresh: function() {
uni.stopPullDownRefresh(); //
},
methods: {
//
copyHref() {
uni.setClipboardData({
data: this.weixin,
success: r => {
this.$queue.showToast('复制成功');
}
});
},
saveImg() {
let that = this;
// uni.saveImageToPhotosAlbum({
// filePath: that.image,
// success(res) {
// that.$queue.showToast('');
// }
// });
let _this = this;
let imgsArray = [];
imgsArray[0] = that.image
uni.previewImage({
current: 0,
urls: imgsArray
});
},
rests() {
uni.showToast({
title: '已刷新请再次长按识别',
mask: false,
duration: 1500,
icon: 'none'
});
window.location.reload();
},
// 线
goChat() {
let token = this.$queue.getData('token');
if (token) {
uni.navigateTo({
url: '/my/setting/chat'
});
} else {
this.goLoginInfo();
}
},
//
goLoginInfo() {
uni.navigateTo({
url: '/pages/public/loginphone'
});
},
}
};
</script>
<style>
/* @import '../../static/css/index.css'; */
page {
/* background: #1c1b20; */
}
.btn {
border: none;
background-color: #fff;
color: #5E81F9;
margin-top: 32upx;
font-size: 30upx;
}
button::after {
border: none;
}
</style>

184
my/setting/feedback.vue Normal file
View File

@ -0,0 +1,184 @@
<template>
<view class="page" style="background-color: #ffffff;" v-if="XCXIsSelect=='是'">
<view class="feedback-title">
<text>问题和意见</text>
<text @tap="chooseMsg">快速键入</text>
</view>
<view class="feedback-body"><textarea placeholder="请详细描述你的问题和意见..." v-model="sendDate.feedbackMessage" class="feedback-textare" /></view>
<view class="feedback-title"><text>QQ/邮箱</text></view>
<view class="feedback-body"><input class="feedback-input" v-model="sendDate.userEmail" placeholder="方便我们联系你" /></view>
<button style="" class="feedback-submit" @tap="send">提交</button>
</view>
</template>
<script>
export default {
data() {
return {
XCXIsSelect: '是',
msgContents: ['界面显示错乱', '启动缓慢,卡出翔了', 'UI无法直视丑哭了', '偶发性崩溃'],
stars: [1, 2, 3, 4, 5],
imageList: [],
sendDate: {
score: 5,
feedbackMessage: '',
userEmail: ''
}
};
},
onLoad() {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect') ? this.$queue.getData('XCXIsSelect') : '是'
// let deviceInfo = {
// appid: plus.runtime.appid,
// imei: plus.device.imei, //
// p: plus.os.name === 'Android' ? 'a' : 'i', //iiOSaAndroid
// md: plus.device.model, //
// app_version: plus.runtime.version,
// plus_version: plus.runtime.innerVersion, //
// os: plus.os.version,
// net: '' + plus.networkinfo.getCurrentType()
// };
// this.sendDate = Object.assign(deviceInfo, this.sendDate);
},
methods: {
close(e) {
this.imageList.splice(e, 1);
},
chooseMsg() {
//
uni.showActionSheet({
itemList: this.msgContents,
success: res => {
this.sendDate.feedbackMessage = this.msgContents[res.tapIndex];
}
});
},
chooseImg() {
//
uni.chooseImage({
sourceType: ['camera', 'album'],
sizeType: 'compressed',
count: 8 - this.imageList.length,
success: res => {
this.imageList = this.imageList.concat(res.tempFilePaths);
}
});
},
chooseStar(e) {
//
this.sendDate.score = e;
},
previewImage() {
//
uni.previewImage({
urls: this.imageList
});
},
send() {
//
console.log(JSON.stringify(this.sendDate));
if (!this.sendDate.feedbackMessage) {
uni.showToast({
icon: 'none',
title: '请输入反馈内容'
});
return;
}
if (!this.sendDate.userEmail) {
uni.showToast({
icon: 'none',
title: '请填写QQ或邮箱'
});
return;
}
this.$queue.showLoading('加载中...');
this.$Request.postJson('/app/userinfo/userFeedback', {
userEmail: this.sendDate.userEmail,
feedbackMessage: this.sendDate.feedbackMessage,
feedbackType: 1
}).then(res => {
if (res.code === 0) {
uni.showToast({
title: '提交成功'
});
setTimeout(function() {
uni.navigateBack();
}, 1000);
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '提交失败',
feedbackMessage: res.msg
});
}
});
}
}
};
</script>
<style>
@font-face {
font-family: uniicons;
font-weight: normal;
font-style: normal;
src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
}
page {
background-color: #F5F5F5 !important;
}
view {
font-size: 28upx;
}
/*问题反馈*/
.feedback-title {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 20upx;
color: #8f8f94;
font-size: 28upx;
}
.feedback-star-view.feedback-title {
justify-content: flex-start;
margin: 0;
}
.feedback-body {
font-size: 32upx;
padding: 16upx;
margin: 16upx;
border-radius: 16upx;
background: #FFFFFF;
/* color: #FFF; */
}
.feedback-textare {
height: 200upx;
font-size: 34upx;
line-height: 50upx;
width: 100%;
box-sizing: border-box;
padding: 20upx 30upx 0;
}
.feedback-input {
font-size: 32upx;
height: 60upx;
/* padding: 15upx 20upx; */
line-height: 60upx;
}
.feedback-submit {
background: #FFCC00;
/* color: #ffffff; */
margin: 20upx;
margin-top: 32upx;
}
</style>

121
my/setting/index.vue Normal file
View File

@ -0,0 +1,121 @@
<template>
<view class="bg-white padding-lr">
<!-- <view class="flex padding-tb" @click="goNav('/pages/public/pwd')">
<view class="flex-sub text-df" style="line-height: 50upx;">修改密码</view>
<image src="../../static/images/my/right.png" style="line-height: 50upx;width: 20rpx;height: 30rpx;"></image>
</view> -->
<view class="flex align-center padding-tb" @click="goNav('/my/setting/feedback')" v-if="XCXIsSelect=='是'">
<view class="flex-sub text-df" style="line-height: 50upx;">意见反馈</view>
<image src="../../static/images/index/right2.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
</image>
</view>
<view class="flex align-center padding-tb" @click="goNav('/my/setting/xieyi')">
<view class="flex-sub text-df" style="line-height: 50upx;">用户协议</view>
<image src="../../static/images/index/right2.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
</image>
</view>
<view class="flex align-center padding-tb" @click="goNav('/my/setting/mimi')">
<view class="flex-sub text-df" style="line-height: 50upx;">隐私政策</view>
<image src="../../static/images/index/right2.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
</image>
</view>
<view class="flex align-center padding-tb" @click="goNav('/my/setting/about')">
<view class="flex-sub text-df" style="line-height: 50upx;">关于我们</view>
<image src="../../static/images/index/right2.png" style="line-height: 50upx;width: 15rpx;height: 30rpx;">
</image>
</view>
<view class="btn" @click="goOut">退出登录</view>
</view>
</template>
<script>
export default {
data() {
return {
XCXIsSelect: '是',
checked: true
}
},
onLoad() {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect') ? this.$queue.getData('XCXIsSelect') : '是'
this.getUserInfo()
},
methods: {
change(val) {
this.checked = val
this.$Request.post('/app/user/updateSendMsg', {
isSendMsg: this.checked == true ? 1 : 2
}).then(res => {
if (res.code === 0) {
this.content = res.data.value;
}
});
},
getUserInfo() {
this.$Request.get("/app/user/selectUserById").then(res => {
if (res.code == 0) {
this.checked = res.data.isSendMsg == null || res.data.isSendMsg == 1 ? true : false
}
});
},
goNav(e) {
uni.navigateTo({
url: e
})
},
goOut() {
uni.showModal({
title: '提示',
content: '确定退出登录吗?',
success: function(res) {
if (res.confirm) {
console.log('用户点击确定');
uni.removeStorageSync('userName')
uni.removeStorageSync('avatar')
uni.removeStorageSync('userId')
uni.removeStorageSync('token')
uni.removeStorageSync('phone')
uni.removeStorageSync('zhiFuBaoName')
uni.removeStorageSync('zhiFuBao')
uni.removeStorageSync('invitationCode')
uni.removeStorageSync('unionId')
uni.removeStorageSync('openId')
uni.removeStorageSync('isVIP')
uni.removeStorageSync('wxCode')
uni.removeStorageSync('wxQrCode')
uni.removeStorageSync('sex')
uni.showToast({
title: '退出成功!',
icon: 'none'
})
setTimeout(function() {
uni.navigateBack()
}, 1000)
} else if (res.cancel) {
console.log('用户点击取消');
}
}
})
}
}
}
</script>
<style>
page {
background-color: #FFF;
}
.btn {
width: 100%;
height: 80upx;
background: #FCD202;
border-radius: 6upx;
text-align: center;
line-height: 80upx;
margin-top: 40upx;
font-size: 34upx;
color: #fff;
}
</style>

37
my/setting/mimi.vue Normal file
View File

@ -0,0 +1,37 @@
<template>
<view style="line-height: 26px;padding: 32upx;" class="home1">
<!-- <view v-html="tit"> </view> -->
<view style="font-size: 28upx;" v-html="content"></view>
</view>
</template>
<script>
export default {
data() {
return {
tit: '',
content: ''
}
},
onLoad() {
this.getGuize();
},
methods: {
getGuize() {
this.$Request.getT('/app/common/type/237').then(res => {
if (res.code == 0) {
this.content = res.data.value;
// this.tit = res.data.min
}
});
}
}
}
</script>
<style>
page {
background: #FFFFFF;
}
</style>

36
my/setting/xieyi.vue Normal file
View File

@ -0,0 +1,36 @@
<template>
<view style="line-height: 26px;padding: 32upx;" class="home1">
<!-- <view v-html="tit"> </view> -->
<view style="font-size: 28upx;" v-html="content"></view>
</view>
</template>
<script>
export default {
data() {
return {
tit: '',
content: ''
}
},
onLoad() {
this.getGuize();
},
methods: {
getGuize() {
this.$Request.getT('/app/common/type/236').then(res => {
if (res.code == 0) {
this.content = res.data.value;
// this.tit = res.data.min
}
});
}
}
}
</script>
<style>
page {
background: #FFFFFF;
}
</style>

365
my/shoppingCar/index.vue Normal file
View File

@ -0,0 +1,365 @@
<template>
<view>
<view>
<view class="store-list y-p-30">
<view class="bg-white store-single y-p-30 y-m-b-30 y-radius-30" v-for="(storeItem, storeIndex) in shoppingCart" :key="storeIndex">
<view @click="storeSelBtn(storeIndex)" class="store-header y-flex y-align-center">
<view class="sel-btn y-p-t-5">
<u-icon v-if="(storeItem.isBuySelect && !isEdit) || (storeItem.isDelSelect && isEdit)" name="checkmark-circle-fill" color="#04BE02" size="40rpx"></u-icon>
<view v-else class="no-select"></view>
</view>
<span class="y-font-size-30 y-m-l-13 y-m-r-10">{{storeItem.shopName}}</span>
<u-icon name="arrow-right"></u-icon>
</view>
<view class="goods-list y-p-l-20">
<view class="goods-item y-flex y-p-t-20" v-for="(goodsItem, goodsIndex) in storeItem.orderGoodsList" :key="goodsIndex">
<view @click="goodsSelBtn(storeIndex, goodsIndex)" class="y-flex y-align-center">
<view class="sel-btn">
<u-icon v-if="(goodsItem.isBuySelect && !isEdit) || (goodsItem.isDelSelect && isEdit)" name="checkmark-circle-fill" color="#04BE02" size="40rpx"></u-icon>
<view v-else class="no-select"></view>
</view>
</view>
<view class="y-m-l-15">
<u-image :src="goodsItem.goodsPicture[0]" radius="10rpx" width="162rpx" height="162rpx"></u-image>
</view>
<view class="y-m-l-28 y-flex y-flex-1 y-flex-column">
<view class="y-flex-1">
<view class="goods-name y-font-size-28"> {{goodsItem.goodsName}} </view>
<view class="goods-attr y-flex y-m-t-15">
{{goodsItem.skuMessage}}
<!-- <u-tag v-if="goodsItem.skuMessage.length > 0" :text="goodsItem.skuMessage.join(';')" plain size="mini" type="warning"></u-tag> -->
<!-- <u-tag v-else text="默认规格" plain size="mini" type="warning"></u-tag> -->
</view>
</view>
<view class="goods-price y-flex y-align-end y-flex-1">
<view class="y-flex-1 y-font-size-30 y-weight-bold color-price"> {{goodsItem.goodsPrice}} </view>
<view class="flex align-center">
<image @click="updataNum(storeItem,goodsItem,2)" src="../static/shoppingCar/jian.png" style="width: 54rpx;height: 54rpx;" mode=""></image>
<view class="padding-lr-sm">{{goodsItem.goodsNum}}</view>
<image @click="updataNum(storeItem,goodsItem,1)" src="../static/shoppingCar/add.png" style="width: 49rpx;height: 49rpx;" mode=""></image>
<!-- <u-number-box size="18" v-model="goodsItem.goodsNum" @change="countChange(storeIndex, goodsIndex)"></u-number-box> -->
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view style="height: 120rpx;"></view>
</view>
<view class="y-position-fixed y-bottom-0 y-left-0 y-right-0 y-p-y-20 y-p-x-30 bg-white y-flex">
<view class="y-flex y-flex-1 y-align-center">
<view @click="allSelBtn()" class="store-header y-flex y-align-center">
<view class="sel-btn y-p-t-5">
<u-icon v-if="allSelState" name="checkmark-circle-fill" color="#04BE02" size="40rpx"></u-icon>
<view v-else class="no-select"></view>
</view>
<span class="y-font-size-28 y-m-l-10">全选</span>
</view>
</view>
<view class="y-flex y-align-center y-font-size-28">
<view v-if="!isEdit" class="y-font-size-33"> 总计: <span class="color-price y-weight-bold y-m-l-8"> {{totalPrice}} </span> </view>
<view class="y-flex y-m-l-25">
<u-button v-if="!isEdit" shape="circle" :hairline="false" :customStyle="submitBtnStyle"> 结算( {{totalSelCount}} ) </u-button>
<u-button v-else shape="circle" :hairline="false" :customStyle="submitBtnStyle"> 删除( {{totalSelCount}} ) </u-button>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
isEdit: false, ///
shoppingCart: [],//
submitBtnStyle: {
background: '#FD7026',
color: '#ffffff',
border: 'none'
},//
page: 1,
limit: 10,
}
},
computed:{
//
allSelState(){
let buyAllSelect = true //
let delAllSelect = true //
this.shoppingCart.forEach(sitem=>{
sitem.orderGoodsList.forEach(gitem=>{
if(!gitem.isBuySelect) buyAllSelect = false;
if(!gitem.isDelSelect) delAllSelect = false;
})
})
if(!this.isEdit) return buyAllSelect;
else return delAllSelect;
},
//
totalPrice(){
let totalPrice = 0
this.shoppingCart.forEach(sitem=>{
sitem.orderGoodsList.forEach(gitem=>{
if(gitem.isBuySelect){
totalPrice = totalPrice*1 + gitem.goodsPrice*gitem.goodsNum
}
})
})
return totalPrice
},
//
totalSelCount(){
let buyCount = 0 //
let delCount = 0 //
this.shoppingCart.forEach(sitem=>{
sitem.orderGoodsList.forEach(gitem=>{
if(gitem.isBuySelect){
buyCount = buyCount*1 + gitem.goodsNum
}
if(gitem.isDelSelect){
delCount = delCount*1 + 1
}
})
})
if(!this.isEdit){
return buyCount
} else{
return delCount
}
}
},
onLoad() {
this.getData()
},
methods: {
//
goConfirm() {
if (this.shoppingCart && this.goodsList.orderGoodsList[0].length > 0) {
uni.navigateTo({
url: '/pages/diancan/confirmOrder?shopId=' + this.shop.shopId + '&orderType=' + this
.orderType
})
} else {
uni.showToast({
title: '请先添加商品',
icon: "none"
})
}
},
//
getData(){
let data = {
// page: 1,
// limit: 10
}
this.$Request.get("/app/order/selectShoppingTrolley", data).then(res => {
if (res.code == 0&&res.data) {
res.data.forEach(res=>{
res.isDelSelect = false
res.isBuySelect = false
res.orderGoodsList.forEach(ret=>{
ret.goodsPicture = ret.goodsPicture.split(',')
ret.isDelSelect = false
ret.isBuySelect = false
})
})
if(this.page == 1) {
this.shoppingCart = res.data
} else {
this.shoppingCart = [...this.shoppingCart, ...res.data]
}
}
});
},
//
storeSelBtn(storeIndex){
if(!this.isEdit){ //
this.shoppingCart[storeIndex].isBuySelect = !this.shoppingCart[storeIndex].isBuySelect
this.shoppingCart[storeIndex].orderGoodsList.forEach(item=>{
item.isBuySelect = this.shoppingCart[storeIndex].isBuySelect
})
}else{//
this.shoppingCart[storeIndex].isDelSelect = !this.shoppingCart[storeIndex].isDelSelect
this.shoppingCart[storeIndex].orderGoodsList.forEach(item=>{
item.isDelSelect = this.shoppingCart[storeIndex].isDelSelect
})
}
},
//
goodsSelBtn(storeIndex, goodsIndex){
if(!this.isEdit){ //
this.shoppingCart[storeIndex].orderGoodsList[goodsIndex].isBuySelect = !this.shoppingCart[storeIndex].orderGoodsList[goodsIndex].isBuySelect
let allIsSel = true //
this.shoppingCart[storeIndex].orderGoodsList.forEach(item=>{
if(!item.isBuySelect){
allIsSel = false
}
})
this.shoppingCart[storeIndex].isBuySelect = allIsSel
}else{//
this.shoppingCart[storeIndex].orderGoodsList[goodsIndex].isDelSelect = !this.shoppingCart[storeIndex].orderGoodsList[goodsIndex].isDelSelect
let allIsSel = true //
this.shoppingCart[storeIndex].orderGoodsList.forEach(item=>{
if(!item.isDelSelect){
allIsSel = false
}
})
this.shoppingCart[storeIndex].isDelSelect = allIsSel
}
},
//
allSelBtn(){
let toState = !this.allSelState
if(!this.isEdit){//
this.shoppingCart.forEach(sitem=>{
sitem.isBuySelect = toState
sitem.orderGoodsList.forEach(gitem=>{
gitem.isBuySelect = toState
})
})
}else{//
this.shoppingCart.forEach(sitem=>{
sitem.isDelSelect = toState
sitem.orderGoodsList.forEach(gitem=>{
gitem.isDelSelect = toState
})
})
}
},
//
countChange(storeIndex, goodsIndex){
//storeIndex, goodsIndex
},
updataNum(storeItem,goodsItem,type) {
let data = {
orderGoodsId: goodsItem.id,
type: type,
num: 1,
shopId: storeItem.shopId
}
this.$Request.get("/app/order/updateGoodsNum", data).then(res => {
if (res.code == 0) {
this.getData()
}
});
}
}
}
</script>
<style lang="scss" scoped>
.w-90{
width: 90rpx;
}
.sel-btn{
width: 45rpx;
height: 45rpx;
}
.no-select{
width: 39rpx;
height: 39rpx;
border-radius: 50%;
border: 1px solid rgb(235, 236, 238);
}
.y-position-fixed{
position: fixed;
}
.y-top-0{
top: 0;
}
.y-bottom-0{
bottom: 0;
}
.y-left-0{
left: 0;
}
.y-right-0{
right: 0;
}
.y-flex-column{
flex-direction: column !important;
}
.y-w-100{
width: 100%;
}
/*系统状态栏高度*/
.y-system-height{
height: var(--status-bar-height);
}
/* 圆角大小例radius-1 ,radius-10... */
@for $i from 1 through 50 {
.y-radius-#{$i} { border-radius: $i*1rpx;}
/* margin */
.y-m-t-#{$i} { margin-top: $i*1rpx; }
.y-m-b-#{$i} { margin-bottom: $i*1rpx; }
.y-m-l-#{$i} { margin-left: $i*1rpx; }
.y-m-r-#{$i} { margin-right: $i*1rpx; }
.y-m-x-#{$i} { margin-left: $i*1rpx; margin-right: $i*1rpx; }
.y-m-y-#{$i} { margin-top: $i*1rpx; margin-bottom: $i*1rpx; }
.y-m-#{$i} { margin: $i*1rpx; }
/* padding */
.y-p-t-#{$i} { padding-top: $i*1rpx; }
.y-p-b-#{$i} { padding-bottom: $i*1rpx; }
.y-p-l-#{$i} { padding-left: $i*1rpx; }
.y-p-r-#{$i} { padding-right: $i*1rpx; }
.y-p-x-#{$i} { padding-left: $i*1rpx; padding-right: $i*1rpx; }
.y-p-y-#{$i} { padding-top: $i*1rpx; padding-bottom: $i*1rpx; }
.y-p-#{$i} { padding: $i*1rpx; }
/* font-size */
.y-font-size-#{$i} { font-size: $i*1rpx; }
}
/* 自体加粗例weight-100 ,weight-150 ,weight-600... */
@for $i from 1 through 9 {
.y-weight-#{$i*100} { font-weight: $i*100;}
.y-weight-#{$i*100 + 50} { font-weight: 50 + $i*100;}
}
.y-justify-end{
justify-content: flex-end;
}
.y-align-center{
align-items: center;
}
.y-align-start{
align-items: flex-start;
}
.y-align-end{
align-items: flex-end;
}
.y-flex{
display: flex;
}
.y-flex-column{
flex-direction: column;
}
.y-flex-1{
flex: 1;
}
.y-justify-start{
justify-content: flex-start;
}
.y-justify-end{
justify-content: flex-end;
}
.y-justify-around{
justify-content: space-around;
}
.y-justify-between{
justify-content: space-between;
}
.y-weight-bold{
font-weight: bold;
}
.y-border-bottom {
border-bottom: 1rpx solid rgba($color: #707070, $alpha: 0.12);
}
.color-price{
color: #C8222A;
}
</style>

BIN
my/static/address/dete.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
my/static/address/write.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

BIN
my/static/apply/addimg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
my/static/coupon/has.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 860 B

BIN
my/static/task/level.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 923 B

BIN
my/static/tousu/black.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 B

BIN
my/static/tousu/orange.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

BIN
my/static/vip/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
my/static/vip/vip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
my/static/wallet/face.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 B

BIN
my/static/wallet/pay.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

BIN
my/static/wallet/right1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

369
my/task/index.vue Normal file
View File

@ -0,0 +1,369 @@
<template>
<view class="pages">
<view class="task_top">
<!-- 用户信息 -->
<view class="task_top_infor">
<view class="task_top_user">
<view class="task_top_user_le">
<image :src="avatar?avatar:'../../static/logo.png'" mode=""></image>
</view>
<view class="task_top_user_ce">
{{userName?userName:'匿名'}}
</view>
<!-- <view class="task_top_user_ri">
<image src="../static/task/level.png" mode=""></image>
<view>LV.1</view>
</view> -->
</view>
<!-- <view class="task_top_text">经验值0/299</view> -->
<view class="task_top_text">当前积分{{integral}}</view>
</view>
<!-- 周期任务 -->
<view class="task_top_task">
<view class="task_top_text2">每日任务</view>
<view class="task_top_task_sty">
<view class="task_top_task_sty_le">
<view class="task_top_task_sty_le_to">
<view class="task_top_task_sty_le_to_le">
每日签到
</view>
<view class="task_top_task_sty_le_to_ri">+{{todayIntegral}}</view>
<view class="task_top_task_img">
<image src="../static/task/goldcoins.png" mode=""></image>
</view>
</view>
<view class="task_top_text3">已连续签到{{today.dayNum}}</view>
</view>
<view class="task_top_task_sty_ri" v-if="isSignIn">
已签到
</view>
<view class="task_top_task_sty_ri2" v-else @click="check">
签到
</view>
</view>
</view>
</view>
<view class="bg-white margin-lr margin-top padding-sm radius" style="text-align: left;padding-bottom: 10rpx;"
v-if="list.length">
<view v-for="(item, index) in list" :key="index" class="item">
<view>
<view style="color: #999999;font-size: 28upx;">
<view style="margin-bottom: 8upx">{{item.title}}</view>
<view style="margin-bottom: 8upx">{{item.content}}</view>
<view style="margin-bottom: 8upx"> 创建时间{{item.createTime}}</view>
<view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text
class="text-olive">+</text>{{item.num}}积分</text>
<text v-if="item.type == 2" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text
class="text-red">-</text>{{item.num}}积分</text>
</view>
</view>
</view>
</view>
</view>
<empty v-if="list.length == 0" content="暂无明细"></empty>
<!-- 成长任务 -->
<!-- <view class="task_top">
<view class="task_top_task">
<view class="task_top_text2">成长任务</view>
<view class="task_top_task_sty">
<view class="task_top_task_sty_le">
<view class="task_top_task_sty_le_to">
<view class="task_top_task_sty_le_to_le">
每日签到
</view>
<view class="task_top_task_sty_le_to_ri">+75</view>
<view class="task_top_task_img">
<image src="../static/task/goldcoins.png" mode=""></image>
</view>
</view>
<view class="task_top_text3">完成0/10</view>
</view>
<view class="task_top_task_sty_ri2">
未完成
</view>
</view>
</view>
</view> -->
</view>
</template>
<script>
import empty from '@/components/empty';
export default {
components: {
empty
},
data() {
return {
userName: '匿名',
avatar: '',
isSignIn: false,
integral: 0,
todayIntegral: 0, //
list: [],
page: 1,
limit: 10,
today: {},
totalCount: ''
}
},
onLoad() {
this.getUserInfo()
this.getIsSignIn()
this.getIntegral()
this.getTodayIntegral()
this.getToday()
this.getList()
},
methods: {
getUserInfo() {
this.$Request.get("/app/user/selectUserMessage").then(res => {
if (res.code == 0) {
this.userName = res.data.userName?res.data.userName:res.data.nickName
this.avatar = res.data.avatar
}
});
},
//
getIntegral() {
this.$Request.get("/app/userintegral/findUserMessage").then(res => {
if (res.code == 0) {
this.integral = res.data.userIntegral
}
});
},
//
getIsSignIn() {
this.$Request.get("/app/userintegral/isSignIn").then(res => {
if (res.code == 0) {
this.isSignIn = res.data == '今日未签到' ? false : true
}
});
},
//
getTodayIntegral() {
this.$Request.get("/app/userintegral/todayIntegral").then(res => {
if (res.code == 0) {
this.todayIntegral = res.data
}
});
},
//
getToday() {
this.$Request.get("/app/userintegral/continuousDay").then(res => {
if (res.code == 0) {
this.today = res.data
}
});
},
//
check() {
this.$Request.get("/app/userintegral/signIn").then(res => {
if (res.code == 0) {
// this.todayIntegral = res.data
this.isSignIn = true
uni.showToast({
title: '签到成功',
icon: 'none'
})
this.getIntegral()
this.getList()
this.getToday()
}
});
},
getList() {
let data = {
page: this.page,
limit: this.limit,
classify: 1
}
this.$Request.getT('/app/userintegraldetails/selectIntegraldetailsList', data).then(res => {
if (res.code === 0) {
this.totalCount = res.data.totalCount
if (this.page === 1) {
this.list = res.data.list;
} else {
this.list = [...this.list, ...res.data.list];
}
}
uni.stopPullDownRefresh();
uni.hideLoading();
});
}
},
onReachBottom: function() {
// this.page = this.page + 1;
// this.getList();
if(this.list.length<this.totalCount) {
this.page = this.page + 1;
this.getList()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
}
</script>
<style scoped>
.task_top {
width: 100%;
overflow: hidden;
/* margin: 3% 0; */
background-color: #FFFFFF;
}
/* 用户信息 */
.task_top_infor {
width: 94%;
overflow: hidden;
margin: 4% auto 0;
padding: 2% 3%;
background: linear-gradient(90deg, #F4DAA7 0%, #E2BC7E 100%);
border-radius: 18rpx;
}
.task_top_user {
display: flex;
}
.task_top_user_le image {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
}
.task_top_user_ce {
padding-left: 2%;
font-size: 38rpx;
font-weight: 500;
color: #333333;
line-height: 2;
}
.task_top_user_ri {
margin: 3% 0 0 2%;
}
.task_top_user_ri image {
width: 118rpx;
height: 34rpx;
}
.task_top_user_ri view {
position: relative;
bottom: 43rpx;
left: 45rpx;
font-size: 24rpx;
font-weight: 800;
color: #D3B17B;
}
.task_top_text {
color: #FFFFFF;
line-height: 2;
}
/* 周期任务 */
.task_top_task {
width: 94%;
overflow: hidden;
margin: 3% auto 0;
}
.task_top_text2 {
font-size: 34rpx;
font-weight: bold;
color: #333333;
/* margin-bottom: 2%; */
/* line-height: 32rpx; */
}
.task_top_task_sty {
width: 100%;
overflow: hidden;
background: #FCFBF5;
border-radius: 18rpx;
display: flex;
padding: 4% 3%;
margin: 3% 0;
}
.task_top_task_sty_le {
width: 80%;
}
.task_top_task_sty_le_to {
display: flex;
margin: 2% 0;
}
.task_top_task_sty_le_to_le {
width: 150rpx;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
}
.task_top_task_sty_le_to_ri {
width: 110rpx;
height: 40rpx;
background: rgba(255, 247, 226, 0.5);
border: 2rpx solid #FFA800;
/* border-right: 2rpx solid #FFA800; */
border-radius: 50rpx;
text-align: right;
color: #FFA800;
padding-right: 2%;
}
.task_top_task_img image {
width: 36rpx;
height: 36rpx;
position: relative;
right: 110rpx;
top: 2rpx;
}
.task_top_text3 {
font-size: 26upx;
/* font-family: PingFang SC; */
font-weight: 500;
color: #999999;
}
.task_top_text3 text {
color: #FF130A;
}
.task_top_task_sty_ri {
width: 20%;
border: 2rpx solid #999999;
height: 50rpx;
line-height: 50rpx;
color: #999999;
text-align: center;
font-size: 28upx;
border-radius: 18rpx;
/* margin: 6% 0; */
}
.task_top_task_sty_ri2 {
width: 20%;
border: 2rpx solid #FF130A;
height: 50rpx;
color: #FF130A;
text-align: center;
line-height: 50rpx;
font-size: 28upx;
border-radius: 8px;
/* margin: 6% 0; */
}
</style>

195
my/tousu/detail.vue Normal file
View File

@ -0,0 +1,195 @@
<template>
<view class="content">
<view class="online_box">
<view class="online_title">{{datas.illegal}}</view>
<u-line color="#E6E6E6" />
<view class="online" style="padding-top: 10rpx;">
<view class="online_tit">违规说明</view>
<view class="online_test">{{datas.wrongExplain}}</view>
</view>
<view class="online">
<view class="online_tit">关联订单</view>
<view class="online_text" v-if="datas.shipAddressDetail" >
<image src="../static/tousu/black.png"></image>
<text>{{datas.shipAddressDetail}}</text>
</view>
<view class="online_text" v-if="datas.deilveryAddressDetail">
<image src="../static/tousu/orange.png"></image>
<text>{{datas.deilveryAddressDetail}}</text>
</view>
<view class="online_text" v-if="datas.shopAddressDetail">
<image src="../static/tousu/black.png"></image>
<text>{{datas.shopAddressDetail}}</text>
</view>
<view class="online_text" v-if="datas.userAddressDetail">
<image src="../static/tousu/orange.png"></image>
<text>{{datas.userAddressDetail}}</text>
</view>
<view class="online_text" v-if="datas.indentNumber" @click="copyOrder(datas.indentNumber)">
<image src="../static/tousu/orange.png"></image>
<text>订单号{{datas.indentNumber}}</text>
</view>
</view>
<!-- <view class="online">
<view class="online_tit">违规说明</view>
<view style="font-size: 24rpx;margin-top: 10rpx;">{{datas.resultHanding}}</view>
<view class="pnline_tip">如果配送中上报异常审核成功后违规消除不扣款</view>
</view> -->
</view>
<!-- <view class="btn" v-if="datas.complaintState=='1'" @click="bindonline">在线申诉</view>
<view class="btn btn1" v-if="datas.complaintState=='2'" >申诉中</view>
<view class="btn" v-if="datas.complaintState=='3'"@click="bindonline" >申诉未通过</view>
<view class="btn" v-if="datas.complaintState=='4'" >申诉通过</view> -->
</view>
</template>
<script>
export default {
data() {
return {
list: [{
id: 1,
img: '../../../../static/image/black.png',
name: '西安智能大厦'
}, {
id: 2,
img: '../../../../static/image/orange.png',
name: '用户地址隐藏',
}],
indentNumber:'',
datas:{},
complaintId: ''
}
},
onLoad(options) {
console.log(options)
this.indentNumber =options.indentNumber
this.complaintId = options.complaintId
// this.bindorder()
},
onShow() {
console.log('`````````````11111111')
if(this.indentNumber!=''){
this.bindorder()
}
},
methods: {
copyOrder(value) {
uni.setClipboardData({
data: value, //
success: () => { //
uni.showToast({ //
title: '复制成功'
})
}
});
},
bindonline() {
uni.navigateTo({
url: '/pages/riderMy/myOnline/myOnline?indentNumber='+this.indentNumber+'&complaintType='+this.datas.complaintType+'&complaintId='+this.complaintId
})
},
//
bindorder() {
this.$Request.getT('/app/tbindent/findComplaint',
{
indentNumber:this.indentNumber,
complaintId: this.complaintId
}).then(res => {
if(res.code==0){
this.datas = res.data
}else{
console.log('失败:',res.data)
}
});
},
}
}
</script>
<style>
body {
background-color: #F5F5F5;
}
.content {
width: 100%;
}
.online_box {
width: 90%;
margin: 0 auto;
background: #FFFFFF;
border-radius: 20rpx;
margin-top: 30rpx;
}
.online_title {
font-size: 28rpx;
font-weight: bold;
letter-spacing: 2rpx;
width: 90%;
margin: 0 auto;
line-height: 80rpx;
}
.online {
width: 90%;
margin: 0 auto;
padding-bottom: 34rpx;
}
.online_tit {
font-size: 27rpx;
letter-spacing: 2rpx;
font-weight: bolder;
line-height: 40rpx;
}
.online_test {
color: #333333;
font-size: 26rpx;
letter-spacing: 2rpx;
line-height: 38rpx;
}
.online_text {}
.online_text image {
width: 15rpx;
height: 15rpx;
}
.online_text text {
font-size: 21rpx;
color: #333333;
margin-left: 15rpx;
letter-spacing: 1rpx;
}
.pnline_tip {
color: #999999;
font-size: 25rpx;
line-height: 50rpx;
}
.btn {
width: 90%;
margin: 0 auto;
background: #FF7F00;
line-height: 90rpx;
text-align: center;
color: white;
border-radius: 15rpx;
margin-top: 20rpx;
font-size: 28rpx;
}
.btn1{
background: #ccc;
}
</style>

363
my/tousu/index.vue Normal file
View File

@ -0,0 +1,363 @@
<template>
<view class="content">
<!-- <view class="complain_cont">
<view class="complain_tabs" v-show="!isShow">
<u-tabs :list="list" :is-scroll="true" name="illegal" :current="current" active-color="#FF7F00"
@change="change"></u-tabs>
</view>
</view> -->
<!-- <u-tabs :list="listTab" :is-scroll="false" inactive-color="#333333" active-color="#FF7F00" :current="currentIndex" @change="changeTab">
</u-tabs> -->
<view class="tabs_box dis">
<!-- 全部 -->
<view class="complain_box padding-bottom-xs" v-for="(item,index) in orderlist" :key="index" @click="bindonline(item)">
<view class="complain_part1 ">
<view class="part1_left">{{item.illegal}}</view>
<!-- <view class="part1_left" v-if="item.complaintType=='2'">拒绝系统推单</view> -->
<!-- <view class="part1_left" v-if="item.complaintType=='3'">残损违规</view> -->
<!-- <view class="part1_right">扣款{{item.deductMoney}}</view> -->
<view class="complain_title">
<span v-if="item.complaintState=='1'">投诉成功</span>
<!-- <span v-if="item.complaintState=='2'">申诉中</span>
<span v-if="item.complaintState=='3'">申诉未通过</span>
<span v-if="item.complaintState=='4'">申诉通过</span> -->
<span v-if="item.complaintState=='5'">投诉审核中</span>
<span v-if="item.complaintState=='6'">投诉未通过</span>
</view>
</view>
<view class="complain_part2" v-if="item.shopAddressDetail">
<image src="../static/tousu/black.png"></image>
<text>{{item.shopAddressDetail}}</text>
</view>
<view class="complain_part2" v-if="item.userAddressDetail">
<image src="../static/tousu/orange.png"></image>
<text>{{item.userAddressDetail}}</text>
</view>
<view class="complain_part2" v-if="item.complaintTime">
<image src="../static/tousu/black.png"></image>
<text>投诉时间{{item.complaintTime}}</text>
</view>
<view class="complain_part2" v-if="item.indentNumber">
<image src="../static/tousu/orange.png"></image>
<text>订单号{{item.indentNumber}}</text>
</view>
<!-- <u-line color="#E6E6E6" /> -->
</view>
<!-- <view class="empty" v-if="orderlist.length == 0">
<view
style="display: block; width: 90%; margin: 0 auto; position: fixed;top: 35%;left: 0rpx;right: 0rpx;text-align: center;">
<image src="../../../static/image/empty.png" style="width: 300rpx;height: 300rpx;"></image>
<view style="color: #CCCCCC;">暂无内容</view>
</view>
</view> -->
<empty v-if="!orderlist.length" style="z-index:0;position: relative;top: -20px;"></empty>
</view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
isShow: false,
page: 1,
limit: 10,
complaintType: null,
complaintState: '',
listTab: [{
name: '全部'
}, {
name: '可申诉'
}, {
name: '申诉中'
}, {
name: '申诉未通过'
}, {
name: '申诉通过'
}],
currentIndex: 0,
list: [{
id: '',
illegal: '全部'
}],
current: 0,
orderlist: [],
totalCount: 0,
illegalId: ''
}
},
mounted() {
},
onLoad() {
// this.getTypeList()
this.bindorder()
},
methods: {
getTypeList() {
this.$Request.getT('/app/illegalType/selectIllegalTypeList').then(res => {
if (res.code == 0) {
this.list = [...this.list, ...res.data]
}
});
},
bindlist(index) {
console.log(index)
this.current = index;
this.isShow = !this.isShow
},
//
bindorder() {
this.$Request.getT('/app/tbindent/selectComplaint', {
page: this.page,
limit: this.limit,
// shopId:uni.getStorageSync('shopId')
// complaintState: this.complaintState,
// illegalId: this.illegalId
}).then(res => {
if (res.code == 0) {
this.totalCount = res.data.totalCount
if (this.page == 1) {
this.orderlist = res.data.list
} else {
this.orderlist = this.list_box.concat(res.data.list)
}
} else {
console.log('失败:', res.data)
}
});
},
change(index) {
console.log(index)
this.illegalId = this.list[index].id
this.orderlist = []
this.current = index;
this.currentIndex = 0
this.page = 1
this.complaintState = ''
this.bindorder()
},
changeTab(index) {
this.orderlist = []
this.currentIndex = index
this.page = 1
if (index == 0) {
this.complaintState = ''
} else {
this.complaintState = index
}
this.bindorder()
},
bindonline(item) {
// if(item.complaintState == 1 || item.complaintState == 4) {
uni.navigateTo({
url: '/my/tousu/detail?indentNumber=' + item
.indentNumber + '&complaintId=' + item.complaintId
})
// }
},
bindshow() {
this.isShow = !this.isShow
},
},
//
onReachBottom: function() {
if (this.page < this.totalCount) {
this.page = this.page + 1;
} else {
uni.showToast({
title: '已经最后一页啦',
icon: 'none'
})
}
this.bindorder();
}
}
</script>
<style>
body {
background-color: #F5F5F5;
}
.empty {
width: 100%;
background: #ffffff;
/* #ifdef MP-WEIXIN */
height: 93vh;
/* #endif */
/* #ifndef MP-WEIXIN */
height: 80vh;
/* #endif */
}
.u-tab-item {
font-weight: 400 !important;
color: #000000 !important;
font-size: 24rpx !important;
}
.tabs_box {
/* display: none; */
/* position: absolute; */
/* top: 144rpx; */
}
.dis {
/* display: block; */
/* width: 100%; */
/* position: absolute; */
/* top: 100rpx; */
}
.content {
width: 100%;
position: relative;
}
.complain_cont {
width: 100%;
position: relative;
/* display: flex; */
}
.complain_tabs {
width: 100%;
}
.complain_btn {
width: 15%;
background: #FFFFFF;
box-shadow: -2rpx 1rpx 3rpx 0rpx rgba(39, 39, 39, 0.11);
height: 88rpx;
position: absolute;
top: 0rpx;
right: 0rpx;
z-index: 10075;
}
.btn {
color: #999999;
font-size: 25rpx;
letter-spacing: 2rpx;
text-align: center;
line-height: 88rpx;
}
.complain_none {
width: 15%;
background: #FFFFFF;
box-shadow: -2rpx 1rpx 3rpx 0rpx rgba(39, 39, 39, 0.11);
height: 88rpx;
position: absolute;
top: 88rpx;
right: 0rpx;
}
.popup_list {
width: 97%;
margin: 0 auto;
position: relative;
top: 90rpx;
}
.list_tabs {
width: 90%;
height: auto;
display: flex;
justify-content: start;
flex-wrap: wrap;
}
.tabs {
border: 1rpx solid #cccccc;
padding: 0rpx 25rpx;
line-height: 50rpx;
margin: 10rpx 10rpx;
}
/* 全部 */
.complain_box {
width: 90%;
margin: 0 auto;
/* height: 300rpx; */
background: #ffffff;
margin-top: 30rpx;
border-radius: 17rpx;
}
.complain_part1 {
width: 90%;
margin: 0 auto;
display: flex;
/* padding-top: 20rpx; */
}
.part1_left {
flex: 1;
font-size: 26rpx;
font-weight: bold;
letter-spacing: 2rpx;
height: 80rpx;
justify-content: left;
align-items: center;
display: flex;
}
.part1_right {
flex: 1;
color: #FF1B1B;
display: flex;
justify-content: flex-end;
align-items: center;
}
.complain_part2 {
width: 90%;
margin: 0 auto;
height: 50rpx;
display: flex;
justify-content: left;
align-items: center;
}
.complain_part2 image {
width: 15rpx;
height: 15rpx;
margin-right: 20rpx;
}
.complain_part2 text {
color: #999999;
font-size: 24rpx;
}
.u-line {
border-bottom-width: 3px !important;
margin-top: 20rpx !important;
}
.complain_title {
/* width: 90%; */
margin: 0 auto;
height: 80rpx;
display: flex;
justify-content: flex-end;
align-items: center;
color: #FF2727;
font-size: 27rpx;
font-weight: bold;
letter-spacing: 2rpx;
}
</style>

476
my/vip/index.vue Normal file
View File

@ -0,0 +1,476 @@
<template>
<view>
<view class="">
<view class="margin-lr margin-top" style="position: relative;border-radius: 10upx;overflow: hidden;">
<image src="../static/vip/vip.png" style="width: 100%;height: 250rpx;"></image>
<view class=" u-flex u-p-l-30 u-p-t-80 u-p-b-30" style="position: absolute;top: 0;width: 100%;">
<view class="u-m-r-20">
<u-avatar :src="avatar" size="100"></u-avatar>
</view>
<view class="u-flex-1 ">
<view class="u-font-18 text-white text-bold">{{userName}}</view>
<view class="u-font-10 text-bold" style="margin-top: 10rpx;color: #999999;" v-if="vipExpirationTime && isVip">有效期{{vipExpirationTime}}</view>
<view class="u-font-14 u-m-t-10 u-tips-color" style="color: #C59D7C;" v-if="!isVip">您目前还未开通会员
</view>
</view>
</view>
</view>
<!-- <view class="flex justify-center margin-top-sm flex-wrap padding-lr-sm">
<view style="display: inline-block;width: 216rpx;height: 250rpx;margin: 10rpx 10rpx;">
<view class="text-center flex flex-direction justify-between padding-tb radius active"
style="color: #DFC5A7;width: 216rpx;height: 250rpx;background: linear-gradient(-30deg, #2B2A30, #4A4A4A);border: 1px;">
<view class="text-bold">月会员</view>
<view class="text-bold">¥<text class="text-xxl">{{vipList.value}}</text></view>
<view>立即购买</view>
</view>
</view>
</view> -->
<view class="flex justify-center align-center margin-top" v-if="!isVip">
<view class="" @click="showpay=true"
style="position: relative;left: 0;right: 0;border-radius: 10upx;overflow: hidden;display: inline-block;margin: auto;">
<image src="../static/vip/bg.png" style="width: 459rpx;height: 129rpx;"></image>
<view class="flex align-center"
style="position: absolute;top: -10rpx;left:30rpx;bottom: 0;margin: auto; width: 100%;height: 100%;">
<view class="text-bold">¥<text class="text-xxl">{{vipList.value}}</text></view>
</view>
</view>
</view>
<view class="padding-tb radius margin-top margin-lr"
style="background-color: #343339;border-radius: 10upx;">
<view class="text-center text-xl text-bold " style="color: #CAB49C;">会员特权</view>
<view class="flex flex-wrap">
<view v-for="(item,index) in MemberList" :key="index"
style="width: 33%;text-align: center;margin-top: 34upx;">
<image :src="item.memberImg" mode="" style="margin: 0 auto;height: 45rpx;width: 45rpx;"></image>
<view class="grid-text margin-top-sm" style="color: #DFC5A7;">{{item.memberName}}</view>
</view>
</view>
</view>
</view>
<view style="height: 110rpx;"></view>
<view class="flex justify-between cu-bar foot bg padding-lr" v-if="!isVip">
<view style="color: #DFC5A7;">
实付<text style="font-size: 38upx;margin-top: 8upx;">{{price}}</text>
</view>
<view class="">
<u-button :custom-style="customStyle" @click="showpay=true" shape="circle" :hair-line="false">立即开通
</u-button>
</view>
</view>
<!-- 支付方式 -->
<u-popup v-model="showpay" mode="bottom" :closeable="closeable">
<view class="popup_pay">
<view style="background-color: #fff;">
<view style="padding: 0 20upx;margin-top: 60rpx;margin-bottom: 20rpx;">
<view
style="display: flex;height: 100upx;align-items: center;padding: 20upx 0;justify-content: center;"
v-for="(item,index) in openLists" :key='index'>
<image :src="item.image" style="width: 55upx;height: 55upx;border-radius: 50upx;">
</image>
<view style="font-size: 30upx;margin-left: 20upx;width: 70%;">
{{item.text}}
</view>
<radio-group name="openWay" style="margin-left: 45upx;" @tap='selectWay(item)'>
<label class="tui-radio">
<radio color="#1777FF" :checked="openWay === item.id ? true : false" />
</label>
</radio-group>
</view>
</view>
</view>
<view class="pay_btn" @click="pay()">确认支付</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
vipExpirationTime:'',
showpay: false,
closeable: true,
openLists: [],
customStyle: {
width: '250rpx',
color: '#402321',
background: "#DFC5A7",
border: 0,
fontWeight: '700'
},
gridData: [{
title: '专享折上折',
image: '../static/1.png'
},
{
title: '特权礼物',
image: '../static/2.png'
},
{
title: '身份标识',
image: '../static/3.png'
},
{
title: '超值专享券',
image: '../static/4.png'
},
{
title: '商家特权',
image: '../static/5.png'
},
{
title: '定制挂件',
image: '../static/6.png'
}
],
avatar: '',
userName: '匿名',
vipList: [],
selNum: 1,
newPrice: 0,
money: 0,
price: 0,
MemberList: [],
isVip: false,
openWay: 2
}
},
onLoad() {
// #ifdef APP
this.openLists = [{
image: '../../static/images/my/weixin.png',
text: '微信',
id: 2
}, {
image: '../../static/images/my/zhifubao.png',
text: '支付宝',
id: 3
},{
image: '../../static/images/my/jinbi.png',
text: '零钱',
id: 1
}]
// #endif
// #ifdef MP-WEIXIN
this.openLists = [{
image: '../../static/images/my/weixin.png',
text: '微信',
id: 2
},{
image: '../../static/images/my/jinbi.png',
text: '零钱',
id: 1
}]
// #endif
// #ifdef H5
this.openLists = [{
image: '../../static/images/my/weixin.png',
text: '微信',
id: 2
},{
image: '../../static/images/my/zhifubao.png',
text: '支付宝',
id: 3
},{
image: '../../static/images/my/jinbi.png',
text: '零钱',
id: 1
}]
// #endif
this.avatar = uni.getStorageSync('avatar')
this.userName = uni.getStorageSync('userName')
this.getVipList()
this.getMemberList()
this.getMoney()
this.getIsVip()
this.getUserInfo()
},
methods: {
selectWay: function(item) {
this.openWay = item.id;
},
getUserInfo() {
this.$Request.get("/app/user/selectUserById").then(res => {
if (res.code == 0) {
this.avatar = res.data.avatar ? res.data.avatar : '../../static/logo.png'
uni.setStorageSync('avatar', res.data.avatar)
}
});
},
//VIP
getVipList() {
this.$Request.get('/app/common/type/313').then(res => {
if (res.code == 0) {
this.vipList = res.data
this.price = this.vipList.value
}
})
},
//
getMemberList() {
this.$Request.get('/app/member/selectMemberList').then(res => {
if (res.code == 0) {
this.MemberList = res.data
}
})
},
getIsVip() {
this.$Request.get("/app/user/selectUserMessage").then(res => {
if (res.code == 0) {
this.vipExpirationTime = res.data.vipExpirationTime;
this.isVip = res.data.isVip==1?true:false
}
});
},
//
getMoney() {
this.$Request.get("/app/userMoney/selectMyMoney").then(res => {
if (res.code == 0 && res.data) {
this.money = res.data.money
}
});
},
select(e) {
this.selNum = e.id
this.price = e.money
},
pay() {
let userId = uni.getStorageSync('userId')
this.showpay = false
if (this.openWay == 1) { //
this.$Request.post("/app/wxPay/balanceBuyVip").then(res => {
if (res.code == 0) {
this.$queue.showToast('支付成功');
setTimeout(function() {
uni.navigateBack()
}, 1000)
}else {
this.$queue.showToast(res.msg);
}
});
} else if (this.openWay == 2) { //
// #ifdef MP-WEIXIN
let data = {
type: 3
}
this.$Request.post('/app/wxPay/wxPayJsApiBuyVip', data).then(res => {
console.log(res)
if (res.code == 0) {
uni.requestPayment({
provider: 'wxpay',
timeStamp: res.data.timestamp,
nonceStr: res.data.noncestr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.sign,
success: function(res) {
console.log(res)
uni.showLoading({
title: '支付成功',
icon: 'none'
});
setTimeout(function() {
uni.navigateBack()
}, 1000)
},
fail: function(err) {
uni.showLoading({
title: '支付失败',
icon: 'nones'
});
}
});
}
});
// #endif
// #ifdef H5
let data = {
userId: userId,
type: 2
}
this.$Request.post('/app/wxPay/wxPayJsApiBuyVip', data).then(res => {
this.showpay = false
this.callPay(res);
});
// #endif
// #ifdef APP
let data = {
type: 1
}
this.$Request.post('/app/wxPay/wxPayJsApiBuyVip', data).then(res => {
console.log(res)
this.showpay = false
if (res.code == 0) {
this.isCheckPay(res.code, 'wxpay', JSON.stringify(res.data));
}
});
// #endif
} else if (this.openWay == 3) { //
// #ifdef H5
let data = {
type: 5
}
this.$Request.post('/app/wxPay/wxPayJsApiBuyVip', data).then(
res => {
this.showpay = false
const div = document.createElement('div')
div.innerHTML = res.data //form
document.body.appendChild(div)
document.forms[0].submit()
});
// #endif
// #ifdef APP-PLUS
let data = {
type: 4
}
this.$Request.post('/app/wxPay/wxPayJsApiBuyVip', data).then(res => {
this.showpay = false
this.setPayment('alipay', res.data);
});
// #endif
}
},
callPay: function(response) {
if (typeof WeixinJSBridge === "undefined") {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady(response), false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady(response));
document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady(response));
}
} else {
this.onBridgeReady(response);
}
},
onBridgeReady: function(response) {
let that = this;
console.log(response)
if (!response.package) {
return;
}
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": response.appid, //
"timeStamp": response.timestamp, //1970
"nonceStr": response.noncestr, //
"package": response.package,
"signType": response.signType, //
"paySign": response.sign //
},
function(res) {
if (res.err_msg === "get_brand_wcpay_request:ok") {
// 使,
//res.err_msgok
uni.showLoading({
title: '支付成功'
});
uni.hideLoading();
uni.navigateTo({
url: '/pages/my/index'
})
} else {
uni.hideLoading();
}
WeixinJSBridge.log(response.err_msg);
}
);
},
isCheckPay(code, name, order) {
if (code == 0) {
console.log('999999999999')
this.setPayment(name, order);
} else {
uni.hideLoading();
uni.showToast({
title: '支付信息有误'
});
}
},
setPayment(name, order) {
console.log(777777777, name, order)
uni.requestPayment({
provider: name,
orderInfo: order, //
success: function(res) {
uni.hideLoading();
uni.showLoading({
title: '支付成功',
icon: 'none'
});
setTimeout(function() {
uni.navigateBack()
}, 1000)
},
fail: function(err) {
uni.hideLoading();
},
complete() {
uni.hideLoading();
}
});
}
},
computed: {
}
}
</script>
<style>
.bg {
background-color: #1E1F31;
}
.btn {
width: 100%;
height: 88upx;
background: linear-gradient(0deg, #af8262 0%, #cab49c 100%);
border-radius: 44upx;
text-align: center;
line-height: 88upx;
margin-top: 40upx;
font-size: 34upx;
font-weight: 600;
color: #402321;
}
.active {
border: 1px solid #cab49c !important;
border-radius: ;
}
.popup_pay {
width: 100%;
position: relative;
padding-bottom: 45rpx;
}
.pay_btn {
width: 90%;
margin: 0 auto;
text-align: center;
background: #FCD202;
height: 80rpx;
border-radius: 16rpx;
color: #ffffff;
line-height: 80rpx;
}
</style>

498
my/wallet/index.vue Normal file
View File

@ -0,0 +1,498 @@
<template>
<view class="pages">
<!-- 余额 -->
<view class="wallet">
<view class="wallet_header">
<view class="wallet_header_text">当前余额</view>
<view class="wallet_header_xin">
<view class="wallet_header_le">{{myMoney}} <text> </text></view>
</view>
</view>
</view>
<!-- 充值 -->
<view class="wallet_topup">
<view class="wallet_header_text">充值金额</view>
<view class="wallet_header_xin2">
<view class="wallet_header_xin2_sty" v-for="(item,index) in wallet" :key='index' :class="{topup:item.isSelect}" @tap="active(item)">
<view class="topup_img" v-if="item.isSelect">
<image src="../static/wallet/face.png" mode=""></image>
</view>
充值<text>{{item.money}}</text>
</view>
</view>
</view>
<!-- 消费 -->
<view class="wallet_header_consum" @click="record()">
<view class="wallet_header_consum_le">消费记录</view>
<view class="wallet_header_consum_ri">
<image src="../static/wallet/right1.png" mode="scaleToFill"></image>
</view>
</view>
<!-- 立即充值 -->
<view class="wallet_bottom" @click="showpay = true" >立即充值</view>
<!-- 支付方式 -->
<u-popup v-model="showpay" mode="bottom" :closeable="closeable">
<view class="popup_pay">
<view style="background-color: #fff;">
<view style="padding: 0 20upx;margin-top: 60rpx;margin-bottom: 20rpx;">
<view
style="display: flex;height: 100upx;align-items: center;padding: 20upx 0;justify-content: center;"
v-for="(item,index) in openLists" :key='index'>
<image :src="item.image" style="width: 55upx;height: 55upx;border-radius: 50upx;">
</image>
<view style="font-size: 30upx;margin-left: 20upx;width: 70%;">
{{item.text}}
</view>
<radio-group name="openWay" style="margin-left: 45upx;" @tap='selectWay(item)'>
<label class="tui-radio">
<radio color="#1777FF" :checked="openWay === item.id ? true : false" />
</label>
</radio-group>
</view>
</view>
</view>
<view class="pay_btn" @click="payment()">确认支付</view>
</view>
</u-popup>
</view>
</template>
<script>
export default {
data() {
return {
showpay: false,
closeable: true,
openLists: [],
openWay: 2,
myMoney: 0,
wallet: [],
thisSelect: {}
}
},
onLoad() {
// #ifdef APP
this.openLists = [ {
image: '../../static/images/my/weixin.png',
text: '微信',
id: 2
}, {
image: '../../static/images/my/zhifubao.png',
text: '支付宝',
id: 3
}]
// #endif
// #ifdef MP-WEIXIN
this.openLists = [{
image: '../../static/images/my/weixin.png',
text: '微信',
id: 2
}]
// #endif
// #ifdef H5
this.openLists = [ {
image: '../../static/images/my/weixin.png',
text: '微信',
id: 2
}, {
image: '../../static/images/my/zhifubao.png',
text: '支付宝',
id: 3
}]
// #endif
},
onShow() {
this.deploy()
this.getMoneyNum()
},
methods: {
selectWay: function(item) {
this.openWay = item.id;
},
deploy() {
this.$Request.get("/app/topupmoney/selectTopUpMoney").then(res => {
if (res.code == 0) {
res.data.forEach(res=> {
res.isSelect = false
})
this.wallet = res.data
}
});
},
active(e) {
this.wallet.forEach(res => {
if (res.id == e.id) {
res.isSelect = true
this.thisSelect = e
} else {
res.isSelect = false
}
})
console.log(this.wallet)
},
record() {
uni.navigateTo({
url: '/my/wallet/walletDet'
})
},
getMoneyNum() {
this.$Request.get("/app/userMoney/selectMyMoney").then(res => {
if (res.code == 0) {
this.myMoney = res.data.money
}
});
},
payment() {
let that = this
that.showpay = false
if(!that.thisSelect.money) {
uni.showToast({
title: '请选择充值金额!',
icon: 'none'
})
return
}
if (that.openWay == 2) { //
// #ifdef MP-WEIXIN
that.$Request.post('/app/wxPay/wxPayJsApiMoney', {
money: that.thisSelect.money,
type: 3,
}).then(ret => {
uni.hideLoading()
uni.requestPayment({
provider: 'wxpay',
timeStamp: ret.data.timestamp,
nonceStr: ret.data.noncestr,
package: ret.data.package,
signType: ret.data.signType,
paySign: ret.data.sign,
success: function(suc) {
uni.showToast({
title: '支付成功',
icon: 'success'
})
that.getMoneyNum()
},
fail: function(err) {
console.log('fail:' + JSON.stringify(err));
uni.showToast({
title: '支付失败',
icon: 'none'
})
}
});
});
// #endif
// #ifdef APP
let data = {
type: 1,
money: that.thisSelect.money
}
that.$Request.post('/app/wxPay/wxPayJsApiMoney', data).then(res => {
console.log(res)
that.showpay = false
if (res.code == 0) {
that.isCheckPay(res.code, 'wxpay', JSON.stringify(res.data));
}
});
// #endif
// #ifdef H5
let data = {
money: that.thisSelect.money,
type: 2
}
this.$Request.post('/app/wxPay/wxPayJsApiMoney', data).then(res => {
this.showpay = false
that.callPay(res.data);
});
// #endif
} else if(that.openWay == 3) {
// #ifdef APP-PLUS
let data = {
type: 4,
money: that.thisSelect.money
}
that.$Request.post('/app/wxPay/wxPayJsApiMoney', data).then(res => {
that.showpay = false
that.setPayment('alipay', res.data);
});
// #endif
// #ifdef H5
let data = {
type: 5,
money: that.thisSelect.money
}
this.$Request.post('/app/wxPay/wxPayJsApiMoney', data).then(res => {
this.showpay = false
const div = document.createElement('div')
div.innerHTML = res.data //form
document.body.appendChild(div)
document.forms[0].submit()
});
// #endif
}
},
callPay: function(response) {
if (typeof WeixinJSBridge === "undefined") {
console.log(document.addEventListener,'999')
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady(response), false);
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady(response));
document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady(response));
}
} else {
console.log(888)
this.onBridgeReady(response);
}
},
onBridgeReady: function(response) {
console.log(response)
let that = this;
if (!response.package) {
return;
}
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": response.appid, //
"timeStamp": response.timestamp, //1970
"nonceStr": response.noncestr, //
"package": response.package,
"signType": response.signType, //
"paySign": response.sign //
},
function(res) {
if (res.err_msg === "get_brand_wcpay_request:ok") {
// 使,
//res.err_msgok
uni.showLoading({
title: '支付成功'
});
uni.hideLoading();
that.getMoneyNum()
uni.navigateTo({
url: '/pages/my/index'
})
} else {
uni.hideLoading();
}
WeixinJSBridge.log(response.err_msg);
}
);
},
isCheckPay(code, name, order) {
if (code == 0) {
console.log('999999999999')
this.setPayment(name, order);
} else {
uni.hideLoading();
uni.showToast({
title: '支付信息有误'
});
}
},
setPayment(name, order) {
console.log(777777777, name, order)
uni.requestPayment({
provider: name,
orderInfo: order, //
success: function(res) {
uni.hideLoading();
uni.showLoading({
title: '支付成功',
icon: 'none'
});
that.getMoneyNum()
// setTimeout(function() {
// uni.navigateBack()
// }, 1000)
},
fail: function(err) {
uni.hideLoading();
},
complete() {
uni.hideLoading();
}
});
}
}
}
</script>
<style scoped>
/* 余额 */
.wallet {
width: 100%;
height: 260rpx;
background: -webkit-linear-gradient(top, #FCD202, #F5F5F5);
}
.wallet_header {
width: 94%;
margin: 0 auto;
background-color: #FFFFFF;
border-radius: 18rpx;
position: relative;
top: 100rpx;
}
.wallet_header_text {
padding: 3% 3% 1%;
line-height: 32rpx;
font-size: 30rpx;
font-weight: 500;
color: #333333;
line-height: 32px;
}
.wallet_header_xin {
padding: 2% 3% 5%;
display: flex;
}
.wallet_header_le {
flex: 2;
font-size: 68rpx;
font-weight: 500;
color: #333333;
}
.wallet_header_le text {
font-size: 34rpx;
}
.wallet_header_ri {
margin-top: 20rpx;
}
.wallet_header_ri image {
width: 40rpx;
height: 30rpx;
}
.wallet_header_ri text {
font-size: 34rpx;
font-weight: 500;
color: #333333;
}
/* 充值 */
.wallet_topup {
width: 94%;
margin: 13% auto 0;
background-color: #FFFFFF;
border-radius: 18rpx;
padding: 0 0 3%;
}
.wallet_header_xin2 {
/* padding: 0 3% 2%; */
display: flex;
flex-wrap: wrap;
justify-content: space-between;
padding: 0 2%;
}
.wallet_header_xin2_sty {
width: 48.5%;
/* margin: 1% 0 0 3%; */
border: 2rpx solid #E6E6E6;
border-radius: 18rpx;
text-align: center;
line-height: 3;
margin-bottom: 2%;
}
.wallet_header_xin2_sty text {
font-size: 44rpx;
}
.wallet_header_xin2_sty:first-child {
margin-left: 0;
}
.topup {
color: #FF130A;
border: 2rpx solid #FF130A;
position: relative;
}
.topup_img {
position: absolute;
bottom: 61rpx;
}
.topup_img image {
width: 48rpx;
height: 40rpx;
}
/* 消费 */
.wallet_header_consum {
width: 94%;
margin: 3% auto;
background-color: #FFFFFF;
border-radius: 18rpx;
padding: 3%;
display: flex;
}
.wallet_header_consum_le {
width: 97%;
font-family: PingFang SC;
font-weight: 500;
color: #333333;
}
.wallet_header_consum_ri {
line-height: 1.5;
}
.wallet_header_consum_ri image {
width: 16rpx;
height: 28rpx;
}
/* 立即充值 */
.wallet_bottom {
width: 94%;
position: fixed;
bottom: 3%;
left: 3%;
line-height: 2.5;
background: #FCD202;
text-align: center;
border-radius: 49rpx;
font-size: 38rpx;
font-weight: bold;
color: #333333;
}
.popup_pay {
width: 100%;
position: relative;
padding-bottom: 45rpx;
}
.pay_btn {
width: 90%;
margin: 0 auto;
text-align: center;
background: #FCD202;
height: 80rpx;
border-radius: 16rpx;
color: #ffffff;
line-height: 80rpx;
}
</style>

137
my/wallet/walletDet.vue Normal file
View File

@ -0,0 +1,137 @@
<template>
<view>
<view style="text-align: left;padding-bottom: 10rpx;">
<view v-for="(item, index) in list" :key="index" class="item">
<view>
<!-- <view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="margin-bottom: 8upx;color: #ecd4b4">充值</text>
<text v-if="item.type == 2" style="margin-bottom: 8upx;color: #ecd4b4">提现</text>
</view> -->
<view style="color: #999999;font-size: 28upx;">
<view style="margin-bottom: 8upx">{{item.title}}</view>
<!-- <view v-if="item.classify === 2" style="margin-bottom: 8upx"> 返佣类型直属返佣</view> -->
<!-- <view v-if="item.classify === 3" style="margin-bottom: 8upx"> 返佣类型非直属支付</view> -->
<view style="margin-bottom: 8upx">{{item.content}}</view>
<view style="margin-bottom: 8upx"> 创建时间{{item.createTime}}</view>
<view style="margin-bottom: 8upx;text-align: right;">
<text v-if="item.type == 1" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text
class="text-olive">+</text>{{item.money}}</text>
<text v-if="item.type == 2" style="color: #ecd4b4;font-size: 32upx;font-weight: 600"><text
class="text-red">-</text>{{item.money}}</text>
</view>
</view>
</view>
</view>
<!-- 加载更多提示 -->
<!-- <view class="s-col is-col-24" v-if="list.length > 0">
<load-more :loadingType="loadingType" :contentText="contentText"></load-more>
</view> -->
<!-- 加载更多提示 -->
<!-- <empty v-if="list.length === 0" des="暂无明细数据" show="false"></empty> -->
<empty v-if="list.length == 0" content="暂无明细"></empty>
</view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
list: [],
page: 1,
limit: 10,
tabIndex: 1,
checkReZhiShu: '否',
checkReTuanZhang: '否',
checkReFeiZhiShu: '否',
scrollTop: false,
contentText: {
contentdown: '上拉显示更多',
contentrefresh: '正在加载...',
contentnomore: '没有更多数据了'
},
totalCount: 0
}
},
onLoad() {
this.$queue.showLoading("加载中...");
this.getList();
},
onPageScroll: function(e) {
this.scrollTop = e.scrollTop > 200;
},
methods: {
getList() {
let data = {
page: this.page,
limit: this.limit,
classify: 3
}
this.$Request.get('/app/userMoney/balanceDetailed', data).then(res => {
if (res.code === 0) {
this.totalCount = res.data.totalCount
if (this.page === 1) {
this.list = res.data.list;
} else {
this.list = [...this.list, ...res.data.list];
}
}
uni.stopPullDownRefresh();
uni.hideLoading();
});
}
},
onReachBottom: function() {
if(this.list.length<this.totalCount) {
this.page = this.page + 1;
this.getList()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
onPullDownRefresh: function() {
this.page = 1;
this.getList();
}
}
</script>
<style lang="less">
page {
// background: #1c1b20;
}
.tui-tab-item-title {
// color: #ffffff;
font-size: 30rpx;
height: 80rpx;
line-height: 80rpx;
flex-wrap: nowrap;
white-space: nowrap;
}
.tui-tab-item-title-active {
border-bottom: 1px solid #5E81F9;
color: #5E81F9;
font-size: 32upx;
font-weight: bold;
border-bottom-width: 6upx;
text-align: center;
}
.item {
background: #FFFFFF;
padding: 32rpx;
margin: 32rpx;
font-size: 28rpx;
box-shadow: 7px 9px 34px rgba(0, 0, 0, 0.1);
border-radius: 16upx;
}
</style>

427
pages.json Normal file
View File

@ -0,0 +1,427 @@
{
"easycom": {
"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
},
"pages": [ //pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"navigationStyle": "custom",
"enablePullDownRefresh": true
}
},
{
"path": "pages/index/search/index",
"style": {
"navigationBarTitleText": "搜索"
}
},
{
"path": "pages/index/selectCampus",
"style": {
"navigationBarTitleText": "选择地址"
}
},
{
"path": "pages/index/shopList/index",
"style": {
"navigationBarTitleText": "店铺列表"
}
},
{
"path": "pages/index/shop/index",
"style": {
"navigationBarTitleText": "店铺详情"
}
},
{
"path": "pages/index/shop/im",
"style": {
"navigationBarTitleText": "聊天"
}
},
// {
// "path": "pages/index/shop/liaotian",
// "style": {
// "navigationBarTitleText": "聊天室"
// }
// },
{
"path": "pages/index/shop/goodsDet",
"style": {
"navigationBarTitleText": "商品详情"
}
},
{
"path": "pages/index/shop/payOrder",
"style": {
"navigationBarTitleText": "订单支付"
}
},
{
"path": "pages/index/shop/confirmOrder",
"style": {
"navigationBarTitleText": "订单支付"
}
},
{
"path": "pages/index/shop/pindanDet",
"style": {
"navigationBarTitleText": "拼单详情"
}
},
{
"path": "pages/index/shop/goodsList",
"style": {
"navigationBarTitleText": "店铺详情"
}
},
{
"path": "pages/order/index",
"style": {
"navigationBarTitleText": "订单",
"enablePullDownRefresh": true,
"app-plus": {
//#ifdef H5
"titleNView": false
//#endif
}
}
},
{
"path": "pages/order/detail",
"style": {
"navigationBarTitleText": "订单详情"
}
},
{
"path": "pages/order/takefood",
"style": {
"navigationBarTitleText": "订单详情"
}
},
{
"path": "pages/order/feedback",
"style": {
"navigationBarTitleText": "订单评价"
}
},
{
"path": "pages/order/feedbacks",
"style": {
"navigationBarTitleText": "点赞骑手"
}
},
{
"path": "pages/order/complaint/complaint",
"style": {
"navigationBarTitleText": "投诉"
}
},
{
"path": "pages/order/waimaiMap",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/order/paotuiMap",
"style": {
"navigationBarTitleText": "地图"
}
},
{
"path": "pages/my/index",
"style": {
"navigationBarTitleText": "我的",
"navigationBarBackgroundColor": "#FEFBDA"
}
},{
"path": "pages/my/updateNickName",
"style": {
"navigationBarTitleText": "修改昵称",
"navigationBarBackgroundColor": "#FEFBDA"
}
},
{
"path": "pages/public/login",
"style": {
"navigationBarTitleText": "登录"
}
}
],
"subPackages": [{
"root": "my",
"pages": [{
"path": "address/index",
"style": {
"navigationBarTitleText": "地址管理"
}
},
{
"path": "address/add",
"style": {
"navigationBarTitleText": "添加地址"
}
},
{
"path": "chat/index",
"style": {
"navigationBarTitleText": "聊天室"
}
},
{
"path": "task/index",
"style": {
"navigationBarTitleText": "任务中心"
}
},
{
"path": "msg/index",
"style": {
"navigationBarTitleText": "消息中心"
}
},
{
"path": "wallet/index",
"style": {
"navigationBarTitleText": "我的钱包"
}
},
{
"path": "wallet/walletDet",
"style": {
"navigationBarTitleText": "消费记录"
}
},
{
"path": "helpList/index",
"style": {
"navigationBarTitleText": "帮助中心"
}
},
{
"path": "helpList/helpDet",
"style": {
"navigationBarTitleText": "详情"
}
},
{
"path": "recruit/index",
"style": {
"navigationBarTitleText": "骑手招募"
}
},
{
"path": "setting/index",
"style": {
"navigationBarTitleText": "系统设置"
}
},
{
"path": "setting/customer",
"style": {
"navigationBarTitleText": "联系客服"
}
},
{
"path": "setting/mimi",
"style": {
"navigationBarTitleText": "隐私政策"
}
},
{
"path": "setting/xieyi",
"style": {
"navigationBarTitleText": "用户协议"
}
},
{
"path": "setting/about",
"style": {
"navigationBarTitleText": "关于我们"
}
},
{
"path": "setting/feedback",
"style": {
"navigationBarTitleText": "意见反馈"
}
},
{
"path": "integral/index",
"style": {
"navigationBarTitleText": "积分商城"
}
},
{
"path": "coupon/index",
"style": {
"navigationBarTitleText": "外卖优惠券"
}
},
{
"path": "integral/record",
"style": {
"navigationBarTitleText": "兑换记录"
}
},
{
"path": "integral/integralDet",
"style": {
"navigationBarTitleText": "积分明细"
}
},
{
"path": "apply/index",
"style": {
"navigationBarTitleText": "商家入驻"
}
},
{
"path": "shoppingCar/index",
"style": {
"navigationBarTitleText": "购物车"
}
},
{
"path": "setting/chat",
"style": {
"navigationBarTitleText": "联系客服"
}
},
{
"path": "hongbao/hongbao",
"style": {
"navigationBarTitleText": "跑腿红包"
}
},
{
"path": "tousu/index",
"style": {
"navigationBarTitleText": "我的投诉"
}
},{
"path": "tousu/detail",
"style": {
"navigationBarTitleText": "投诉详情"
}
},
{
"path": "vip/index",
"style": {
"navigationBarTitleText": "超级会员"
}
}
,{
"path" : "myPingJia/myPingJia",
"style" :
{
"navigationBarTitleText": "我的评价",
"enablePullDownRefresh": false
}
}
]
},
{
"root": "running",
"pages": [{
"path": "index/index",
"style": {
"navigationBarTitleText": "同城跑腿"
}
},
{
"path": "takeaddress/takeaddress",
"style": {
"navigationBarTitleText": "填写地址",
"enablePullDownRefresh": false
}
},
{
"path": "closeaddress/closeaddress",
"style": {
"navigationStyle": "custom",
"navigationBarTextStyle": "white"
}
},
{
"path": "Helpsend/Helpsend"
},
{
"path": "Helppay/Helppay",
"style": {
"navigationBarTitleText": "帮我购买",
"enablePullDownRefresh": false
}
},
{
"path": "Cityservice/Cityservice",
"style": {
"navigationBarTitleText": "同城服务",
"enablePullDownRefresh": false
}
},
{
"path": "order/pay/pay",
"style": {
"navigationBarTitleText": "订单支付",
"enablePullDownRefresh": false
}
}
,{
"path" : "huodong/list",
"style" :
{
"navigationBarTitleText": "精选活动",
"enablePullDownRefresh": false
}
}
]
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "同城外卖",
"navigationBarBackgroundColor": "#FFFFFF",
"backgroundColor": "#FFFFFF"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#FCD202",
"backgroundColor": "#FFFFFF",
"borderStyle": "black",
"list": [{
"pagePath": "pages/index/index",
"iconPath": "static/tabbar/index.png",
"selectedIconPath": "static/tabbar/index_.png",
"text": "首页"
},
{
"pagePath": "pages/order/index",
"iconPath": "static/tabbar/order.png",
"selectedIconPath": "static/tabbar/order_.png",
"text": "订单"
},
{
"pagePath": "pages/my/index",
"iconPath": "static/tabbar/my.png",
"selectedIconPath": "static/tabbar/my_.png",
"text": "我的"
}
]
}
}

1806
pages/index/index.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,636 @@
<template>
<view class="content">
<view class="search-box">
<!-- mSearch组件 如果使用原样式删除组件元素-->
<!-- <mSearch class="mSearch-input-box" :mode="2" button="inside" :placeholder="defaultKeyword"
@search="doSearch(false)" @input="inputChange" @confirm="doSearch(false)" v-model="keyword"></mSearch> -->
<!-- 原样式 如果使用原样式恢复下方注销代码 -->
<!-- <view class="input-box">
<input type="text" :adjust-position="true" :placeholder="defaultKeyword" @input="inputChange" v-model="keyword" @confirm="doSearch(false)"
placeholder-class="placeholder-class" confirm-type="search">
</view>
<view class="search-btn" @tap="doSearch(false)">搜索</view> -->
<view class="margin-lr">
<u-search style="width: 100%;" placeholder="请输入商家或者商品名称" :focus="true" v-model="keyword"
:show-action="true" :animation="true" shape="square" action-text="取消" @custom="goBack()"
@search="doSearch(false)">
</u-search>
</view>
<!-- <u-dropdown v-show="isShowKeywordList">
<u-dropdown-item v-model="value1" :title="title" :options="options1" @change="confirm">
</u-dropdown-item>
<u-dropdown-item v-model="value2" :title="title1" :options="options2" @change="confirm2">
</u-dropdown-item>
</u-dropdown> -->
<view v-show="isShowKeywordList" style="width: 100%;z-index: 999;">
<view class="flex justify-between align-center bg-white padding-tb padding-lr-sm">
<view class="flex-sub text-center" :class="current==1?'select':''" @click="confirm(1)">综合排序</view>
<view class="flex-sub text-center" :class="current==3?'select':''" @click="confirm(3)">距离优先</view>
<view class="flex-sub text-center" :class="current==4?'select':''" @click="confirm(4)">销量优先</view>
<view class="flex-sub text-center flex" @click="isShow = !isShow" >
<view class="flex align-center" style="margin: 0 auto;">
<view :class="isShow?'select':''" >筛选</view>
<u-icon v-if="!isShow" name="arrow-down" size="28"></u-icon>
<u-icon v-if="isShow" name="arrow-up" color="#FCD202" size="28"></u-icon>
</view>
</view>
</view>
<view v-if="isShow" style="position: absolute;top: 150rpx;width: 100%;z-index: 1000;background: rgba(0,0,0,.5);height: 100vh;" @click="isShow =false">
<view class="padding-lr bg-white">
<view class="flex justify-between align-center padding-tb-sm u-border-bottom" v-for="(item,index) in options4" :key='index' @click.stop="getSelect(item)" >
<view class="text-df" :class="item.select?'select':''">{{item.shopTypeName}}</view>
<u-icon v-if="item.select" name="checkmark" color="#FCD202" size="28"></u-icon>
</view>
</view>
</view>
</view>
<!-- 原样式 end -->
<!-- 活动筛选 -->
<view class="hd flex justify-center" v-if="hdlist.length>0 && isShowKeywordList">
<view class="hd-box">
<scroll-view scroll-x="true" class="scroll-view_H">
<view class="hd-box-item" :style="currenthd==index?'background-color:#fcd202;font-weight:bold':''" @click="searchhd(index,item.activityId)" v-for="(item,index) in hdlist" :key="index">{{item.activityTitle}}</view>
</scroll-view>
</view>
</view>
</view>
<view class="search-keyword">
<view class="keyword-list-box" v-show="isShowKeywordList" scroll-y>
<view class="padding-lr">
<view class="" v-for="(item,index) in keywordList" :key='index'>
<view class=" flex justify-between bg-white padding" style="margin-bottom: 20rpx;"
@click="goNav('/pages/index/shop/index?shopId='+item.shopId)">
<image :src="item.shopCover" class="radius" style="width: 160rpx;height: 160rpx;"></image>
<view class=" margin-left-sm" style="width: 450rpx;">
<view class=" flex flex-direction justify-between">
<view class="text-lg text-bold text-black">{{item.shopName}}</view>
<view class="flex align-center margin-top-xs" style="width: 100%;">
<u-icon name="star-fill" color="#FD6416" size="28"></u-icon>
<text class="text-lg" style=""> {{item.shopScore?item.shopScore:0}}</text>
<text class="text-gray flex-sub margin-left-xs">销量{{item.shopSales?item.shopSales:0}}</text>
<text class="text-gray margin-left-xs">{{item.errandTime}}分钟</text>
<text class="text-gray margin-left-xs">{{item.distance}}</text>
</view>
<view class="text-gray margin-top-xs flex justify-between">
<view>起送 ¥{{item.minimumDelivery}} 配送 ¥{{item.errandMoney?item.errandMoney:0}}</view>
<view style="color: #FCD202;">{{item.autoSendOrder==1?'商家配送':'平台配送'}}</view>
</view>
<view class="text-gray margin-top-xs" v-if="item.businessHours&&item.lockHours">
营业时间{{item.businessHours}}-{{item.lockHours}}</view>
<view class="flex margin-top-xs justify-between align-start" style="width: 100%;">
<view class="flex flex-wrap align-center" style="width: 100%;height: 100%;overflow: hidden;">
<view class="lable flex justify-center align-center" v-if="item.exemptMinMoney">{{item.exemptMinMoney}}免配送费</view>
<view class="lable flex justify-center align-center" v-for="(ite,ind) in item.shopLable" :key='ind'
v-if="item.shopLable">
{{ite}}
</view>
<view class="lable flex justify-center align-center" v-if="item.couponList" style="border-radius: 4rpx;border: 1rpx solid red;background-color: #ffffff;color: red;box-sizing: border-box;" v-for="(it,ide) in item.couponList" :key="ide">{{it.minMoney}}{{it.money}}</view>
</view>
</view>
</view>
<view class="flex margin-top-xs">
<view v-for="(ite,ind) in item.goodsList" :key='ind'
@click.stop="goDet(ite.goodsId,item.shopId)" style="width: 33%;">
<image :src="ite.goodsCover" style="width: 120rpx;height: 120rpx;"
class="radius" mode=""></image>
<view class="u-line-1 text-df text-bold margin-top-xs">{{ite.goodsName}}</view>
<view class="text-bold margin-top-xs" style="color: #FD6416;"> <text
class="text-sm">¥</text> {{ite.goodsMoney}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- <view v-if="keywordList.length == 0">
暂无数据
</view> -->
<empty v-if="keywordList.length == 0"></empty>
</view>
<view class="keyword-box" v-show="!isShowKeywordList" scroll-y>
<view class="keyword-block" v-if="hotKeywordList.length>0">
<view class="keyword-list-header">
<view>热门搜索</view>
<view>
<image @tap="hotToggle" :src="'/static/images/index/attention'+forbid+'.png'"></image>
</view>
</view>
<view class="keyword" v-if="forbid==''">
<view v-for="(keyword,index) in hotKeywordList" @tap="doSearch(keyword)" :key="index">
{{keyword}}
</view>
</view>
<view class="hide-hot-tis" v-else>
<view>当前搜热已隐藏</view>
</view>
</view>
<view class="keyword-block" v-if="oldKeywordList.length>0">
<view class="keyword-list-header">
<view>历史记录</view>
<view>
<image @tap="oldDelete" src="/static/images/index/delete.png"></image>
</view>
</view>
<view class="keyword">
<view v-for="(keyword,index) in oldKeywordList" @tap="doSearch(keyword.message)" :key="index">
{{keyword.message}}
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
currenthd:-1,
hdlist:[],
activityId:'',
isShow: false,
defaultKeyword: "",
keyword: "",
oldKeywordList: [], //
hotKeywordList: [], //
keywordList: [], //
forbid: '',
isShowKeywordList: false,
limit: 10,
page: 1,
userId: '',
isVip: false,
lng: '',
lat: '',
value1: 1,
value2: 0,
options1: [{
label: '综合排序',
value: 1,
},
{
label: '距离优先',
value: 3,
},
{
label: '销量优先',
value: 4,
}
],
options2: [{
value: '',
label: "全部"
}],
options4: [{
id: '',
select: true,
shopTypeName: "全部"
}],
current: 1,
shopTypeId: '',
title: '综合排序',
title1: '筛选',
totalCount: 0
}
},
onLoad() {
let that = this
this.getSearchList()
this.gethdlist();
this.userId = uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
this.lng = uni.getStorageSync('lng')
this.lat = uni.getStorageSync('lat')
this.getShopType()
this.isVip = uni.getStorageSync('isVIP')
uni.getLocation({
type: 'gcj02', //uni.openLocation
success: function(res) {
// that.lat = res.latitude;
// that.lng = res.longitude;
}
});
},
methods: {
//
searchhd(index,activityId){
if(index==this.currenthd){
this.currenthd = -1
this.activityId = '';
this.doSearch(false);
}else{
this.currenthd = index;
this.activityId=activityId;
this.doSearch(false);
}
},
//
gethdlist(){
this.$Request.get("/app/activityManage/getActivityList").then(res => {
if (res.code == 0) {
res.data.records.map((item,index)=>{
if(item.activityId==14){
res.data.records.splice(index, 1)
}
})
this.hdlist = res.data.records
}
});
},
getSelect(e) {
this.options4.forEach(res=>{
if(res.id == e.id) {
res.select = true
this.page = 1
this.shopTypeId = e.id
// this.getShopList();
this.doSearch(this.keyword);
this.isShow = false
} else {
res.select = false
}
})
},
confirm(e) {
console.log(e)
this.page = 1
this.current = e;
this.doSearch(this.keyword);
},
confirm2(e) {
console.log(e)
this.page = 1
this.shopTypeId = e
if (e == 0) {
this.title1 = '筛选'
} else {
this.title1 = this.options2[e].label
}
this.doSearch(this.keyword);
},
//
getSearchList() {
let data = {
page: this.page,
limit: this.limit,
}
this.$Request.get("/app/searchhistory/selectSearchHistory", data).then(res => {
console.log(res)
if (res.code == 0) {
this.oldKeywordList = res.data.list
}
});
this.$Request.getT('/app/common/type/309').then(res => { //
if (res.code == 0) {
this.hotKeywordList = res.data.value.split(',')
}
})
},
//
oldDelete() {
uni.showModal({
content: '确定清除历史搜索记录?',
success: (res) => {
if (res.confirm) {
console.log('用户点击确定');
this.$Request.get("/app/searchhistory/deleteSearchHistory").then(res => {
if (res.code == 0) {
this.getSearchList()
}
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
},
//
doSearch(keyword) {
this.keyword = keyword === false ? this.keyword : keyword;
this.isShowKeywordList = true;
if (!this.keyword) {
uni.showToast({
title: '请输入内容',
icon: 'none',
duration: 1000
})
return
}
let data = {
impotr: this.keyword,
screen: this.current,
shopTypeId: this.shopTypeId,
limit: this.limit,
page: this.page,
lng: this.lng,
lat: this.lat,
userId: this.userId,
activityId:this.activityId
}
this.$Request.get("/app/goods/selectShop", data).then(res => {
if (res.code == 0) {
this.totalCount = res.data.totalCount
res.data.list.forEach(ret => {
if (ret.distance > 1000) {
ret.distance = Number((ret.distance / 1000)).toFixed(2) + "km"
} else {
if (ret.distance == 0) {
ret.distance = "0m";
} else {
ret.distance = Number(ret.distance).toFixed(1) + "m";
}
}
ret.shopLable = ret.shopLable ? ret.shopLable.split(',') : ''
ret.errandTime = Math.round(ret.errandTime)
ret.shopScore = ret.shopScore.toFixed(1)
})
if (this.page == 1) this.keywordList = [];
this.keywordList = [...this.keywordList, ...res.data.list]
}
});
},
//
getShopType() {
this.$Request.getT('/app/shoptype/selectShopTypeList').then(res => {
if (res.code == 0) {
res.data.forEach(res => {
res.select = false
})
this.options4 = [...this.options4, ...res.data]
}
})
},
//
goBack() {
uni.navigateBack()
},
//
hotToggle() {
this.forbid = this.forbid ? '' : '_forbid';
},
//
goDet(goodsId, shopId) {
uni.navigateTo({
url: '/pages/index/shop/goodsDet?goodsId=' + goodsId + '&shopId=' + shopId + '&orderType=1'
})
},
goNav(url) {
console.log(url)
if (this.userId) {
uni.navigateTo({
url
})
} else {
uni.navigateTo({
url: '/pages/public/login'
})
}
},
//
goOrder(e) {
if (this.userId) {
uni.navigateTo({
url: '/pages/index/game/order?id=' + e.id
});
} else {
uni.navigateTo({
url: '/pages/public/login'
});
}
},
},
onReachBottom: function() {
// this.page = this.page + 1;
// this.doSearch(false);
if(this.keywordList.length<this.totalCount) {
this.page = this.page + 1;
this.doSearch(false);
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
onPullDownRefresh: function() {
this.page = 1;
this.doSearch(false);
},
}
</script>
<style lang="scss">
page {
/* background-color: #FFFFFF; */
}
.hd{
width: 100%;
height: auto;
// margin-top: 20rpx;
padding-top: 20rpx;
padding-bottom: 20rpx;
background-color: rgb(248,248,248);
.hd-box{
width: 686rpx;
height: 100%;
.scroll-view_H{
width: 100%;
white-space: nowrap;
}
.hd-box-item{
display: inline-block;
padding: 10rpx 20rpx 10rpx 20rpx;
background-color: #ffffff;
font-size: 24rpx;
border-radius: 8rpx;
margin-right: 10rpx;
}
}
}
.select{
color: #FCD202;
}
.search-box {
width: 100%;
/* background-color: rgb(242, 242, 242); */
padding: 15upx 0 0;
/* display: flex; */
/* justify-content: space-between; */
position: sticky;
top: 0;
background-color: #FFF;
z-index: 99;
}
.search-box .mSearch-input-box {
width: 100%;
}
.search-box .input-box {
width: 85%;
flex-shrink: 1;
display: flex;
justify-content: center;
align-items: center;
}
.search-box .search-btn {
width: 15%;
margin: 0 0 0 2%;
display: flex;
justify-content: center;
align-items: center;
flex-shrink: 0;
font-size: 28upx;
/* color: #fff; */
background: linear-gradient(to right, #ff9801, #ff570a);
border-radius: 60upx;
}
.search-box .input-box>input {
width: 100%;
height: 60upx;
font-size: 32upx;
border: 0;
border-radius: 60upx;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
padding: 0 3%;
margin: 0;
background-color: #ffffff;
}
.placeholder-class {
color: #9e9e9e;
}
.search-keyword {
width: 100%;
/* background-color: #111224; */
}
.keyword-list-box {
height: calc(100vh - 110upx);
/* padding-top: 10upx; */
/* border-radius: 20upx 20upx 0 0; */
/* background-color: #fff; */
}
.keyword-entry-tap {
background-color: #eee;
}
.keyword-entry {
width: 94%;
height: 80upx;
margin: 0 3%;
font-size: 30upx;
color: #333;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: solid 1upx #e7e7e7;
}
.keyword-entry image {
width: 60upx;
height: 60upx;
}
.keyword-entry .keyword-text,
.keyword-entry .keyword-img {
height: 80upx;
display: flex;
align-items: center;
}
.keyword-entry .keyword-text {
width: 90%;
}
.keyword-entry .keyword-img {
width: 10%;
justify-content: center;
}
.keyword-box {
height: calc(100vh - 110upx);
/* border-radius: 20upx 20upx 0 0; */
/* background-color: #111224; */
}
.keyword-box .keyword-block {
padding: 10upx 0;
}
.keyword-box .keyword-block .keyword-list-header {
width: 94%;
padding: 10upx 3%;
font-size: 27upx;
font-weight: 700;
/* color: #FFFFFF; */
display: flex;
justify-content: space-between;
}
.keyword-box .keyword-block .keyword-list-header image {
width: 40upx;
height: 40upx;
}
.keyword-box .keyword-block .keyword {
width: 94%;
padding: 3px 3%;
display: flex;
flex-flow: wrap;
justify-content: flex-start;
}
.keyword-box .keyword-block .hide-hot-tis {
display: flex;
justify-content: center;
font-size: 28upx;
/* color: #FFFFFF; */
}
.keyword-box .keyword-block .keyword>view {
display: flex;
justify-content: center;
align-items: center;
border-radius: 10upx;
padding: 0 20upx;
margin: 10upx 20upx 10upx 0;
height: 60upx;
font-size: 28upx;
background-color: #eee;
/* color: #FFFFFF; */
}
.lable {
border: 1rpx solid #FFE6D9;
height: 40rpx;
padding: 0 14rpx;
background: #FFE6D9;
border-radius: 4rpx;
font-weight: 500;
color: #FD6416;
font-size: 20rpx;
margin-right: 10rpx;
margin-bottom: 10rpx;
}
</style>

View File

@ -0,0 +1,549 @@
<template>
<view class="container">
<view class="flex align-center" style="background:#fff;">
<view class="content padding-left bg-white" style="color: #333;font-size: 28upx;font-weight: bold;"
v-if="city">
<text @click="goCity()">{{city}}<text class="cuIcon-right"></text></text>
</view>
<view class="padding-tb-sm padding-lr-xs margin-right-xs flex-sub">
<view class="search-bar-form">
<view class="search-bar-box">
<icon class="icon-search-in-box" type="search" size="16"></icon>
<input confirm-type="search" class="search-bar-input" placeholder="输入地址查询"
placeholder-class="phcolor" :value="inputVal" :focus="inputShowed" @input="inputTyping" />
<view class="icon-clear" v-if="inputVal" @tap="clearInput">
<!-- #ifdef APP-PLUS || MP -->
<icon type="clear" :size="15"></icon>
<!-- #endif -->
</view>
</view>
</view>
</view>
</view>
<view class="tui-list search-result " v-if="inputShowed">
<view class="padding margin-lr radius flex justify-between align-center"
v-for="(item,index) in searchResult" :key="index" @click="update(item)">
<view>
<view class="text-lg text-bold text-black">{{item.addressDetail}}</view>
<view class="text-df text-gray margin-top-xs">{{item.province}}{{item.city}}{{item.district}}</view>
</view>
</view>
</view>
<view v-else>
<view class="tui-list city-list " v-if="list&&list.length>0">
<view class="flex justify-between">
<view class="title text-lg text-bold padding-sm padding-top-sm">我的地址</view>
<view style="display: flex;align-items: center;font-size: 26rpx;" class="padding-sm padding-top-sm" @tap="goAddressList">
<view>地址管理</view>
<image src="../../static/images/index/right2.png" style="width: 12rpx;height: 20rpx;margin-left: 6rpx;"></image>
</view>
</view>
<view class="padding margin-lr radius flex justify-between align-center" v-for="(item,index) in list"
:key="index" v-if="index == 0" @click="update(item)" style="border: 2rpx solid #FCD202;">
<view>
<view class="text-lg text-bold text-black">{{item.addressDetail}}</view>
<view class="text-df text-gray margin-top-xs">{{item.province}}{{item.city}}{{item.district}}
</view>
</view>
<u-icon name="checkbox-mark" color="#FCD202" size="42"></u-icon>
</view>
<view class="padding margin-lr radius flex justify-between align-center" v-for="(item,index) in list"
:key="index" v-if="index > 0" @click="update(item)">
<view>
<view class="text-lg text-bold text-black">{{item.addressDetail}}</view>
<view class="text-df text-gray margin-top-xs">{{item.province}}{{item.city}}{{item.district}}
</view>
</view>
</view>
</view>
</view>
<!-- 添加收货地址 -->
<view class="btn">
<view class="address_push" @click="addAddress">添加收货地址</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
region: [],
inputVal: '', //
inputShowed: false, //
list: [],
searchResult: [], //
localCampus: '',
campusDetails: '',
txt: '选择城市',
province: '', //
city: '', //
district: '', //
page: 1,
limit: 10,
totalCount: 0,
longitude: '',
latitude: ''
}
},
onLoad: function(options) {
console.log(options)
if (uni.getStorageSync('city')) {
this.city = uni.getStorageSync('city')
this.longitude = uni.getStorageSync('lng')
this.latitude = uni.getStorageSync('lat')
} else {
this.getlocation()
}
},
onShow() {
if (uni.getStorageSync('userId')) {
this.initCampusList()
}
},
methods: {
goAddressList() {
uni.navigateTo({
url: '/my/address/index'
});
},
update(e) {
let data = {
addressId: e.addressId,
addressDefault: 1,
}
this.$Request.postJson("/app/address/updateAddress", data).then(res => {
if (res.code == 0) {
uni.removeStorageSync('city')
uni.removeStorageSync('lng')
uni.removeStorageSync('lat')
setTimeout(function() {
uni.navigateBack()
}, 10)
}
});
},
goCity() {
let that = this
uni.chooseLocation({
success: function(res) {
console.log(res, '选择');
that.longitude = res.longitude
that.latitude = res.latitude
that.city = res.name
uni.setStorageSync('lng', that.longitude)
uni.setStorageSync('lat', that.latitude)
uni.setStorageSync('city', res.name)
setTimeout(function() {
uni.navigateBack()
}, 10)
}
});
},
getlocation() {
let that = this
// that.list=[]
uni.getLocation({
type: 'gcj02',
success: function(res) {
console.log('当前位置的经度:' + res.longitude);
console.log('当前位置的纬度:' + res.latitude);
that.longitude = res.longitude
that.latitude = res.latitude
let data = {
lat: res.latitude,
lng: res.longitude
}
that.$Request.get("/app/address/selectCity", data).then(res => {
if (res.code == 0) {
that.city = res.data.city
}
});
// that.initCampusList();
}
});
},
//
initCampusList() {
let that = this;
let data = {
page: that.page,
limit: that.limit,
}
that.$Request.getT('/app/address/selectAddressList', data).then(res => {
console.log(res)
if (res.code === 0) {
if (that.page == 1) {
that.list = res.data.list
} else {
that.list = [...that.list, ...res.data.list]
}
}
})
},
showInput() {
this.inputShowed = true
},
clearInput() {
this.inputVal = "";
this.inputShowed = false;
this.searchResult = [];
uni.hideKeyboard() //
},
inputTyping(e) {
this.inputVal = e.detail.value;
if (e.detail.value.length === 0) {
this.searchResult = [];
this.inputShowed = false
} else {
this.inputShowed = true
}
this.searchCity()
},
//
searchCity() {
let data = {
impotr: this.inputVal,
page: 1,
limit: 1000
}
this.$Request.get("/app/address/searchAddress", data).then(res => {
if (res.code == 0) {
this.searchResult = res.data.list
}
});
},
//
addAddress() {
let userId = this.$queue.getData('userId');
if (!userId) {
uni.navigateTo({
url: '/pages/public/login'
})
return
}
uni.navigateTo({
url: '/my/address/add'
})
},
},
onReachBottom: function() {
this.page = this.page + 1;
this.initCampusList();
},
onPullDownRefresh: function() {
this.page = 1;
this.initCampusList();
},
}
</script>
<style lang="scss">
page {
height: 100%;
background: #FFFFFF;
}
.page {
height: 100%;
overflow: hidden;
}
.search-bar {
display: flex;
align-items: center;
position: relative;
padding: 27rpx 30rpx 35rpx;
background-color: #fff;
}
.search-bar-form {
flex: 1;
position: relative;
border-radius: 32rpx;
background: #f2f5f7;
}
.search-bar-box {
display: flex;
align-items: center;
position: relative;
padding-left: 20rpx;
padding-right: 20rpx;
height: 64rpx;
z-index: 1;
}
.search-bar-input {
line-height: normal;
width: 100%;
padding-left: 20rpx;
font-size: 30rpx;
color: #333;
}
.phcolor {
font-size: 30rpx;
}
.icon-clear {
height: 38rpx;
}
.icon-clear .tui-icon-class {
display: block
}
.search-bar-label {
height: 64rpx;
display: flex;
justify-content: center;
align-items: center;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 2;
border-radius: 32rpx;
color: #ccc;
background: #f2f5f7;
}
.icon-search {
position: relative;
height: 26rpx;
margin-right: 20rpx;
font-size: inherit;
}
.search-bar-text {
font-size: 30rpx;
line-height: 32rpx;
}
.cancel-btn {
padding-left: 30rpx;
}
.search-result::before {
display: none;
}
.search-result::after {
display: none;
}
.tui-list-cell {
// padding: 30upx;
// display: flex;
// flex-direction: row;
// justify-content: space-between;
// align-items: center;
// width: 100%;
}
.tui-list-cell-hover {
// background-color: #eee !important;
}
.tui-list-cell-navigate {
// width: 100%;
// position: relative;
// padding: 30rpx 0 30rpx 30rpx;
font-size: 30rpx;
color: #333;
font-weight: 800;
}
.tui-list-cell-navigate::after {
content: '';
position: absolute;
border-bottom: 1rpx solid #eaeef1;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
bottom: 0;
right: 0;
left: 30rpx;
}
.current-city {
padding: 0 30rpx 30rpx;
background: #fff;
}
.tui-icon-class {
margin-right: 10rpx;
}
.current-city .title {
font-size: 28rpx;
line-height: 24rpx;
color: #333333;
}
.box {
background: #F5F5F5;
border-radius: 10upx;
width: 686upx;
// height: 134upx;
}
.city-name {
display: flex;
align-items: center;
// margin-top: 17rpx;
font-size: 30rpx;
font-weight: bold;
line-height: 30rpx;
color: #333;
}
.hot-city .title {
height: 48rpx !important;
padding-left: 30rpx;
font-size: 24rpx !important;
line-height: 48rpx !important;
color: #999;
background: #f2f5f7 !important;
}
.city-names {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-content: space-between;
padding: 12rpx 90rpx 26rpx 30rpx;
background: #fff;
}
.city-name-item {
display: flex;
justify-content: center;
align-items: center;
width: 140rpx;
height: 56rpx;
margin-top: 16rpx;
/* border: solid 1rpx #ccc; */
border-radius: 28rpx;
font-size: 28rpx;
color: #333;
position: relative;
}
.city-name-item::before {
content: "";
position: absolute;
width: 200%;
height: 200%;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(0.5, 0.5);
transform: scale(0.5, 0.5);
-webkit-box-sizing: border-box;
box-sizing: border-box;
left: 0;
top: 0;
border-radius: 56rpx;
border: 1px solid #ccc;
}
.tap-city {
color: #fff;
background: #5677fc;
/* border: solid 1rpx #5677fc; */
}
.tui-list {
background-color: #fff;
position: relative;
width: 100%;
display: flex;
flex-direction: column;
padding-bottom: env(safe-area-inset-bottom);
}
.tui-list-cell-divider {
height: 48rpx;
padding-left: 30rpx;
font-size: 24rpx;
color: #999;
background: #f2f5f7;
padding: 0 30rpx;
display: flex;
align-items: center;
}
.tui-indexed-list-bar {
display: flex;
flex-direction: column;
align-items: center;
justify-content: flex-start;
z-index: 9999;
position: absolute;
top: 132rpx;
right: 0;
padding-right: 10rpx;
width: 44rpx;
}
.tui-indexed-list-text {
font-size: 22rpx;
white-space: nowrap;
}
.tui-indexed-list-bar.active {
background-color: rgb(200, 200, 200);
}
.tui-indexed-list-alert {
position: absolute;
z-index: 20;
width: 160rpx;
height: 160rpx;
left: 50%;
top: 50%;
margin-left: -80rpx;
margin-top: -80rpx;
border-radius: 80rpx;
text-align: center;
line-height: 160rpx;
font-size: 70rpx;
color: #fff;
background-color: rgba(0, 0, 0, 0.5);
}
/* 添加收货地址 */
.btn {
position: fixed;
bottom: 0rpx;
width: 100%;
height: 100rpx;
line-height: 100rpx;
background-color: white;
padding-top: 10rpx;
}
.address_push {
width: 90%;
height: 80rpx;
margin: 0 auto;
background: #FCD202;
border-radius: 20rpx;
color: white;
text-align: center;
line-height: 80rpx;
font-size: 35rpx;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

518
pages/index/shop/im.vue Normal file
View File

@ -0,0 +1,518 @@
<template>
<view>
<view style="width: 100%;padding-bottom: 140rpx;">
<view style="display: flex;flex-direction: column;" v-for="(item,index) in ListItem" :key='index'>
<view style="margin-top: 15rpx;width: 100%;text-align: center;font-size: 26rpx;color: #999999;">
{{item.createTime}}
</view>
<view v-if="!item.shopId && !item.riderId" style="width: 83%;margin-left: 15%;">
<view class="chat-listitem" style="float: right;">
<view v-if="item.content && item.messageType === 1" @longpress="copy(item.content)"
class="chat-listitem-text" style="margin-right: 20rpx;">{{item.content}}</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
:src="item.content" style="height: 200rpx;width: 200rpx;margin-right: 20rpx;"></image>
<view>
<image v-if="item.avatar" :src="item.avatar" class="chat-listitem-image"></image>
<image v-else src="../../../static/logo.png" class="chat-listitem-image"></image>
</view>
</view>
</view>
<view v-if="item.riderId" style="width: 83%;margin-right: 15%;">
<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
<view v-if="item.riderId">
<image :src="item.riderAvatar" class="chat-listitem-image"></image>
</view>
<view v-if="item.content && item.messageType === 1" class="chat-listitem-text"
style="margin-left: 20rpx;">{{item.content}}</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
:src="item.content" style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
</view>
</view>
<view v-if="item.shopId" style="width: 83%;margin-right: 15%;">
<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
<view v-if="item.shopId">
<image :src="item.shopCover" class="chat-listitem-image"></image>
</view>
<view v-if="item.content && item.messageType === 1" class="chat-listitem-text"
style="margin-left: 20rpx;">{{item.content}}</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
:src="item.content" style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
</view>
</view>
</view>
</view>
<!-- 底部聊天输入框 -->
<view class="input-box ">
<view class="justify-between padding-lr align-center"
style="display: flex;width: 100%;background-color: #EEEEEE;">
<image src="../../../static/images/msg/add.png" @click="chooseImage(['album'])"
style="width: 50rpx;height: 50rpx;margin-right: 12rpx;border-radius: 52upx;"></image>
<input confirm-type="send" @confirm='setChatSave(1)' type="text" v-model="content"
style="width: 72%;height: 70rpx;background: #fff;margin: 0 10rpx;border-radius: 5rpx;padding-left: 10rpx;" />
<view class="save" @tap='setChatSave(1)'>发送</view>
</view>
</view>
</view>
</template>
<script>
import configdata from '../../../common/config.js';
export default {
data() {
return {
connected: false,
connecting: false,
msg: false,
type4: [],
listRight: {
chat: {
userHead: ""
},
content: "",
sendType: 1,
type: 1
},
content: '',
chatId: '',
type: 1,
ListItem: [],
ShopState: false,
ShopordersId: '',
Shopimage: '',
Shopmoney: '',
ShopTitle: '',
orderState: false,
ordersId: '',
userId: '',
orderimage: '',
orderNum: '',
teamId: '',
hand: 1,
index: 0,
page: 0,
size: 1000,
countDown: '',
ordersId: '',
byUserId: '',
RiderUnreadCount: 0,
};
},
computed: {
showMsg() {
if (this.connected) {
if (this.msg) {
return '收到消息:' + this.msg
} else {
return '等待接收消息'
}
} else {
return '尚未连接'
}
}
},
onUnload() {
// uni.closeSocket()
uni.hideLoading()
},
onLoad(d) {
this.userId = this.$queue.getData('userId');
this.byUserId = d.byUserId
this.ordersId = d.ordersId;
this.connect();
// if (d.teamName) {
// uni.setNavigationBarTitle({
// title: d.teamName
// });
// }
},
onShow() {
if (this.connected || this.connecting) {
} else {
this.connect();
}
},
onHide() {
// uni.closeSocket()
},
onUnload() {
this.close()
},
methods: {
copy(content) {
uni.showModal({
title: '温馨提示',
content: '确认要复制此文字吗?',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if (res.confirm) {
uni.setClipboardData({
data: content,
success: r => {
this.$queue.showToast('复制成功');
}
});
}
}
});
},
getDateDiff(data) {
// data
//var str = data;
//
var timePublish = new Date(data);
var timeNow = new Date();
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var month = day * 30;
var result = "2";
var diffValue = timeNow - timePublish;
var diffMonth = diffValue / month;
var diffWeek = diffValue / (7 * day);
var diffDay = diffValue / day;
var diffHour = diffValue / hour;
var diffMinute = diffValue / minute;
if (diffMonth > 3) {
result = timePublish.getFullYear() + "-";
result += timePublish.getMonth() + "-";
result += timePublish.getDate();
} else if (diffMonth > 1) { //
result = data.substring(0, 10);
} else if (diffWeek > 1) { //
result = data.substring(0, 10);
} else if (diffDay > 1) { //
result = data.substring(0, 10);
} else if (diffHour > 1) { //
result = parseInt(diffHour) + "小时前";
} else if (diffMinute > 1) { //
result = parseInt(diffMinute) + "分钟前";
} else {
result = "刚刚";
}
return result;
},
connect() {
let that = this;
let userId = that.$queue.getData('userId');
if (that.connected || that.connecting) {
uni.showModal({
content: '正在连接或者已经连接,请勿重复连接',
showCancel: false
})
return false
}
that.connecting = true
uni.showLoading({
title: '连接中...'
})
console.log(userId, '*******************')
console.log(this.config("WSHOST1") +'/'+ this.ordersId, '*******************2')
uni.connectSocket({
// url: 'ws://192.168.1.17:8881/gameTeamChat/' + userId + '_' + this.teamId,
// url: 'wss://game.shengqianxiong.com.cn/wss/gameTeamChat/' + userId + '_' + this.teamId,
// url: 'ws://192.168.1.17:8180/sqx_fast/chatSocket/' + userId,
url: this.config("WSHOST1") + this.ordersId,
data() {
return {
msg: 'Hello'
}
},
header: {
'content-type': 'application/json'
},
method: 'GET',
success(res) {
uni.hideLoading();
that.getTimeOrListItem1();
//
},
fail(err) {
//
console.log("--------------" + JSON.stringify(err))
}
});
uni.onSocketOpen((res) => {
that.connecting = false
that.connected = true
uni.hideLoading()
// uni.showToast({
// icon: 'none',
// title: ''
// })
console.log('onOpen', res);
});
uni.onSocketError((err) => {
that.connecting = false
that.connected = false
uni.hideLoading()
uni.showModal({
content: '网络较差,请稍后再试',
showCancel: false
})
console.log('onError', err);
});
uni.onSocketMessage(function(res) {
console.log('收到服务器内容1111' + JSON.stringify(res));
setTimeout(() => {
that.getTimeOrListItem1();
}, 50);
});
uni.onSocketClose((res) => {
that.connected = false
that.startRecive = false
that.msg = false
console.log('onClose', res)
});
},
close() {
uni.closeSocket()
},
getTimeOrListItem1() {
this.$Request.getMsg('/app/ordersChat/selectGameChatDetails?type=1&page=1&limit=1000&ordersId=' + this.ordersId)
.then(
res => {
this.ListItem = [];
if (res.data) {
var time = '';
res.data.list.forEach(d => {
if (!d.avatar) {
// d.chat.userHead = '../../static/logo.png';
let avatar = this.$queue.getData('avatar');
d.avatar = avatar
}
this.ListItem.push(d);
});
this.ListItem = this.ListItem.reverse();
setTimeout(() => {
uni.pageScrollTo({
scrollTop: 99999,
duration: 0
});
}, 50);
}
uni.hideLoading();
});
},
getChatSave() {
let userId = this.$queue.getData('userId');
let phone = this.$queue.getData('phone');
let userName = this.$queue.getData('userName');
if (!phone) {
phone = this.$queue.getData('userName');
}
let avatar = this.$queue.getData('avatar');
let data = {
userId: userId,
userHead: avatar,
userName: userName,
storeId: '0',
storeHead: '同城外卖',
storeName: ''
}
this.$Request.postJson('/chat/save', data).then(res => {
if (res.status === 0) {
this.chatId = res.data.chatId;
uni.showLoading({
title: '加载中...'
});
this.getTimeOrListItem1();
}
});
},
setChatSave(type) {
//type:1 2
if (type === 1 && this.content == '') {
this.$queue.showToast('请输入聊天内容');
return;
}
// if (this.chatId == '' || this.chatId == undefined) {
// this.$queue.showToast('');
// return;
// }
let userId = this.$queue.getData('userId');
let avatar = this.$queue.getData('avatar');
let phone = this.$queue.getData('phone');
let userName = this.$queue.getData('userName');
if (!phone) {
phone = this.$queue.getData('userName');
}
console.log(this.byUserId)
let data = {
content: this.content,
messageType: type,
userId: userId,
ordersId: this.ordersId,
}
data = JSON.stringify(data);
let that = this;
uni.sendSocketMessage({
data: data,
success(res) {
let avatar = that.$queue.getData('avatar');
if (!avatar) {
avatar = '../../static/logo.png';
}
let data = {
chat: {
userHead: avatar
},
content: that.content,
type: type,
userId: userId
}
console.log(data, 'data99999999999999999')
setTimeout(() => {
that.getTimeOrListItem1();
}, 50);
console.log(that.content);
},
fail(err) {
console.log(err);
}
})
this.content = '';
},
//
chooseImage(sourceType) {
uni.chooseImage({
count: 1,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < res.tempFilePaths.length; i++) {
this.$queue.showLoading("上传中...");
uni.uploadFile({ //
url: this.config("APIHOST1") + '/alioss/upload', //
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
console.log(uploadFileRes)
this.content = JSON.parse(uploadFileRes.data).data;
this.setChatSave(2);
uni.hideLoading();
}
});
}
}
})
},
config: function(name) {
var info = null;
if (name) {
var name2 = name.split("."); //
if (name2.length > 1) {
info = configdata[name2[0]][name2[1]] || null;
} else {
info = configdata[name] || null;
}
if (info == null) {
let web_config = cache.get("web_config");
if (web_config) {
if (name2.length > 1) {
info = web_config[name2[0]][name2[1]] || null;
} else {
info = web_config[name] || null;
}
}
}
}
return info;
},
//
viewImg(item) {
let imgsArray = [];
imgsArray[0] = item;
uni.previewImage({
current: 0,
urls: imgsArray
});
},
},
};
</script>
<style>
page {
/* background: #1c1b20; */
}
.input-box {
position: fixed;
bottom: 0;
left: 0;
height: 120rpx;
width: 100%;
display: flex;
box-sizing: content-box;
z-index: 999;
/* background-color: #ececec; */
/* padding: 0 5rpx; */
}
.chat-listitem {
display: flex;
margin-top: 20rpx;
padding: 10rpx;
}
.chat-listitem-text {
color: #000000;
background: #FFFFFF;
margin-top: 10rpx;
width: fit-content;
padding: 15rpx;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-radius: 10rpx;
}
.chat-listitem-image-type4 {
color: #000000;
background: #FFFFFF;
width: fit-content;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-top-left-radius: 20rpx;
border-top-right-radius: 20rpx;
}
.chat-listitem-image {
margin-top: 5rpx;
width: 75rpx;
height: 75rpx;
border-radius: 5rpx;
}
.save {
width: 130rpx;
text-align: center;
border-radius: 70rpx;
height: 70rpx;
color: #FFF;
background: #1789FD;
margin: 5rpx 10rpx 0;
line-height: 70rpx;
}
</style>

1921
pages/index/shop/index.vue Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,156 @@
<template>
<view class="">
<!-- <view v-if="msgList.length" class="margin-topW">
<view class="flex padding-tb radius padding-lr-sm bg" @click="goMsg" v-for="(item,index) in msgList"
:key='index'>
<view>
<image style="width: 80rpx;height: 80rpx;border-radius: 80rpx;"
src="../../static/images/msg/msg.png"></image>
</view>
<view class="flex-sub margin-left-sm">
<view class="flex justify-between">
<view class="text-white">{{item.title?item.title: '系统消息'}}</view>
<view v-if="messageCount>0"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
{{messageCount}}</view>
</view>
<view>
<view class="text-grey">{{item.content}}</view>
</view>
</view>
</view>
</view> -->
<view v-if="chatList.length" class="content ">
<view class="radius padding-lr-sm bg" style="margin-top: 4rpx;" @click="goIM(item)"
v-for="(item,index) in chatList" :key='index'>
<view class="flex padding-tb " v-if="userId == item.userId">
<view>
<u-image shape="circle" width='80rpx' height="80rpx" :src="item.shopCover"></u-image>
</view>
<view class="flex-sub margin-left-sm">
<view class="flex justify-between">
<view class="text-white">{{item.shopName}}</view>
<view class="text-grey">{{item.createTime}}</view>
</view>
<view class="flex justify-between">
<view class="text-grey">{{ item.messageType == 1? item.content : '[图片]'}}</view>
<view v-if="item.unreadMessageCount"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
{{item.unreadMessageCount}}</view>
</view>
</view>
</view>
<view class="flex padding-tb" v-else>
<view>
<u-image shape="circle" width='80rpx' height="80rpx" :src="item.shopCover"></u-image>
</view>
<view class="flex-sub margin-left-sm">
<view class="flex justify-between">
<view class="text-white">{{item.shopName}}</view>
<view class="text-grey">{{item.createTime}}</view>
</view>
<view class="flex justify-between">
<view class="text-grey">{{ item.messageType == 1? item.content : '[图片]'}}</view>
<view v-if="item.unreadMessageCount"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;">
{{item.unreadMessageCount}}</view>
</view>
</view>
</view>
</view>
</view>
<empty v-if="!chatList.length && !msgList.length" content='暂无消息'></empty>
</view>
</template>
<script>
import empty from '../../components/empty.vue'
export default {
components: {
empty
},
data() {
return {
page: 1,
limit: 100,
chatList: [],
userId: '',
msgList: [],
time: '',
messageCount: 0
}
},
onLoad() {
this.getChatList()
},
onShow() {
let that = this
that.userId = uni.getStorageSync('userId')
if (that.userId) {
that.time = setInterval(function() {
that.getChatList()
// that.getMsgList()
that.$nextTick(function() {
that.messageCount = uni.getStorageSync('messageCount')
})
}, 10000)
} else {
that.chatList = []
that.msgList = []
}
},
onHide() {
clearInterval(this.time)
},
methods: {
getChatList() {
this.$Request.get("/shop/ordersChat/selectOrdersChatPageShop", {
page: this.page,
limit: this.limit,
shopId: uni.getStorageSync('shopId')
}).then(res => {
if (res.code == 0) {
this.chatList = res.data.list
}
});
},
// getMsgList() {
// this.$Request.get("/app/message/selectMessageByUserIdLimit1").then(res => {
// if (res.code == 0) {
// this.msgList = res.data.list
// }
// });
// },
goIM(e) {
let userId = this.$queue.getData('userId');
if (e.userId == userId) {
userId = e.byUserId
} else {
userId = e.userId
}
uni.navigateTo({
url: '/pages/msg/im?chatConversationId=' + e.chatConversationId + '&byUserId=' + userId
})
},
goMsg() {
uni.navigateTo({
url: '/pages/msg/message'
})
}
}
}
</script>
<style>
page {
background-color: #F7F7F7;
}
.bg {
background: #FFFFFF;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,566 @@
<template>
<view v-if="XCXIsSelect=='是'">
<view style="position: fixed;top: 0;width: 100%;z-index: 999;">
<view class="flex justify-between align-center bg-white padding-tb padding-lr-sm">
<view class="flex-sub text-center" :class="current==1?'select':''" @click="confirm(1)">综合排序</view>
<view class="flex-sub text-center" :class="current==3?'select':''" @click="confirm(3)">距离优先</view>
<view class="flex-sub text-center" :class="current==4?'select':''" @click="confirm(4)">销量优先</view>
<view class="flex-sub text-center flex" @click="isShow = !isShow">
<view class="flex align-center" style="margin: 0 auto;">
<view :class="isShow?'select':''">筛选</view>
<u-icon v-if="!isShow" name="arrow-down" size="28"></u-icon>
<u-icon v-if="isShow" name="arrow-up" color="#FCD202" size="28"></u-icon>
</view>
</view>
</view>
<view v-if="isShow"
style="position: absolute;top: 90rpx;width: 100%;z-index: 1000;background: rgba(0,0,0,.5);height: 100vh;"
@click="isShow =false">
<view class="padding-lr bg-white">
<view class="flex justify-between align-center padding-tb-sm u-border-bottom"
v-for="(item,index) in options4" :key='index' @click.stop="getSelect(item)">
<view class="text-df" :class="item.select?'select':''">{{item.shopTypeName}}</view>
<u-icon v-if="item.select" name="checkmark" color="#FCD202" size="28"></u-icon>
</view>
</view>
</view>
</view>
<!-- #ifdef H5 -->
<view class="hd flex justify-center" style="position: fixed;top: 90rpx;" v-if="hdlist.length>0">
<!-- #endif -->
<!-- #ifndef H5 -->
<view class="hd flex justify-center" style="position: fixed;top: 90rpx;" v-if="hdlist.length>0">
<!-- #endif -->
<view class="hd-box">
<scroll-view scroll-x="true" class="scroll-view_H">
<view class="hd-box-item" :style="currenthd==index?'background-color:#fcd202;font-weight:bold':''" @click="searchhd(index,item.activityId)" v-for="(item,index) in hdlist" :key="index">{{item.activityTitle}}</view>
</scroll-view>
</view>
</view>
<!-- #ifdef H5 -->
<view class="padding-lr-sm" style="margin-top: 80rpx;">
<!-- #endif -->
<!-- #ifndef H5 -->
<view class="padding-lr-sm" style="margin-top: 180rpx;">
<!-- #endif -->
<view class="" v-for="(item,index) in shopList" :key='index'>
<view class="margin-tb-sm flex justify-between bg-white padding"
@click="goNav('/pages/index/shop/index?shopId='+item.shopId)">
<image :src="item.shopCover" class="radius" style="width: 160rpx;height: 160rpx;"></image>
<view class=" margin-left-sm" style="width: 450rpx;">
<view class=" flex flex-direction justify-between">
<view class="text-lg text-bold text-black">{{item.shopName}}</view>
<view class="flex align-center margin-top-xs" style="width: 100%;">
<u-icon name="star-fill" color="#FD6416" size="28"></u-icon>
<text class="text-lg" style=""> {{item.shopScore?item.shopScore:0}}</text>
<text
class="text-gray flex-sub margin-left-xs">销量{{item.shopSales?item.shopSales:0}}</text>
<text class="text-gray margin-left-xs">{{item.errandTime}}分钟</text>
<text class="text-gray margin-left-xs">{{item.distance}}</text>
</view>
<view class="text-gray margin-top-xs flex justify-between">
<view>起送 ¥{{item.minimumDelivery}} 配送 ¥{{item.errandMoney?item.errandMoney:0}}
</view>
<view style="color: #FCD202;">{{item.autoSendOrder==1?'商家配送':'平台配送'}}</view>
</view>
<view class="text-gray margin-top-xs" v-if="item.businessHours&&item.lockHours">
营业时间{{item.businessHours}}-{{item.lockHours}}</view>
<view class="flex margin-top-xs justify-between align-start" style="width: 100%;">
<view class="flex flex-wrap align-center" style="width: 100%;height: 100%;overflow: hidden;">
<view class="lable flex justify-center align-center" v-if="item.exemptMinMoney">{{item.exemptMinMoney}}免配送费</view>
<view class="lable flex justify-center align-center" v-for="(ite,ind) in item.shopLable" :key='ind'
v-if="item.shopLable">
{{ite}}
</view>
<view class="lable flex justify-center align-center" v-if="item.couponList" style="border-radius: 4rpx;border: 1rpx solid red;background-color: #ffffff;color: red;box-sizing: border-box;" v-for="(it,ide) in item.couponList" :key="ide">{{it.minMoney}}{{it.money}}</view>
</view>
</view>
</view>
<view class="flex margin-top-xs">
<view v-for="(ite,ind) in item.goodsList" :key='ind'
@click.stop="goDet(ite.goodsId,item.shopId)" style="width: 33%;">
<image :src="ite.goodsCover" style="width: 120rpx;height: 120rpx;" class="radius"
mode=""></image>
<view class="u-line-1 text-df text-bold margin-top-xs">{{ite.goodsName}}</view>
<view class="text-bold margin-top-xs" style="color: #FD6416;">
<text class="text-sm">¥</text> {{ite.goodsMoney}}
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<empty v-if="!shopList.length"></empty>
</view>
<view v-else>
<view style="font-size: 28upx;" v-html="content"></view>
</view>
</template>
<script>
import empty from '@/components/empty.vue'
export default {
components: {
empty
},
data() {
return {
currenthd:-1,
hdlist:[],
activityId:'',
isShow: false,
hintShow: false,
shop: {},
page: 1,
limit: 10,
shopList: [],
current: 1,
shopTypeId: '',
userId: '',
lng: '',
lat: '',
value1: 0,
value2: 0,
value3: 0,
value4: 0,
options1: [{
label: '综合排序',
value: 1,
}],
options2: [{
value: '3',
label: "距离优先"
}],
options3: [{
value: '4',
label: "销量优先"
}],
options4: [{
id: '',
select: true,
shopTypeName: "全部"
}],
title: '综合排序',
title1: '距离优先',
title2: '销量优先',
title3: '筛选',
totalCount: 0,
XCXIsSelect: '否',
content:''
}
},
onLoad(e) {
console.log(e)
this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
if (this.XCXIsSelect == '否') {
this.getGuize()
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '店铺列表'
});
}
let that = this
uni.showLoading({
title: '加载中'
})
that.shopTypeId = e.value ? e.value : ''
that.value2 = e.value ? e.value : 0
that.userId = uni.getStorageSync('userId')
that.getShopType()
uni.getLocation({
type: 'gcj02', //uni.openLocation
success: function(res) {
that.lat = res.latitude;
that.lng = res.longitude;
}
});
that.getShopList()
that.gethdlist();
},
methods: {
//
searchhd(index,activityId){
if(index==this.currenthd){
this.currenthd = -1
this.activityId = '';
this.getShopList()
}else{
this.currenthd = index;
this.activityId=activityId;
this.getShopList()
}
},
//
gethdlist(){
this.$Request.get("/app/activityManage/getActivityList").then(res => {
if (res.code == 0) {
res.data.records.map((item,index)=>{
if(item.activityId==14){
res.data.records.splice(index, 1)
}
})
this.hdlist = res.data.records
}
});
},
//
goDet(goodsId, shopId) {
let userId = this.$queue.getData('userId');
if (!userId) {
uni.navigateTo({
url: '/pages/public/login'
})
return
}
uni.navigateTo({
url: '/pages/index/shop/goodsDet?goodsId=' + goodsId + '&shopId=' + shopId + '&orderType=2'
})
},
getGuize() {
this.$Request.getT('/app/common/type/237').then(res => {
if (res.code == 0) {
this.content = res.data.value;
// this.tit = res.data.min
}
});
},
goBack() {
uni.navigateBack({
})
},
getSelect(e) {
console.log(e)
this.options4.forEach(res => {
if (res.id == e.id) {
res.select = true
this.page = 1
this.shopTypeId = e.id
this.getShopList();
this.isShow = false
} else {
res.select = false
}
})
},
confirm(e) {
console.log(e)
this.page = 1
this.current = e;
this.getShopList();
},
confirm2(e) {
console.log(e)
this.page = 1
this.current = e;
this.getShopList();
},
confirm3(e) {
console.log(e)
this.page = 1
this.current = e;
this.getShopList();
},
confirm4(e) {
console.log(e)
this.page = 1
this.shopTypeId = e
this.getShopList();
},
//
getShopList() {
// this.lng = uni.getStorageSync('lng')
// this.lat = uni.getStorageSync('lat')
let data = {
page: this.page,
limit: this.limit,
screen: this.current,
shopTypeId: this.shopTypeId,
lng: uni.getStorageSync('lng'),
lat: uni.getStorageSync('lat'),
activityId:this.activityId
}
this.$Request.getT('/app/goods/selectShop', data).then(res => {
uni.hideLoading()
if (res.code == 0) {
console.log(res.data.list)
this.totalCount = res.data.totalCount
res.data.list.forEach(ret => {
if (ret.distance > 1000) {
ret.distance = Number((ret.distance / 1000)).toFixed(2) + "km"
} else {
if (ret.distance == 0) {
ret.distance = "0m";
} else {
ret.distance = Number(ret.distance).toFixed(1) + "m";
}
}
ret.shopLable = ret.shopLable ? ret.shopLable.split(',') : ''
ret.shopCover = ret.shopCover ? ret.shopCover.split(',') :
'../../static/logo.png'
ret.errandTime = Math.round(ret.errandTime)
ret.shopScore = ret.shopScore.toFixed(1)
})
if (this.page == 1) {
this.shopList = res.data.list
} else {
this.shopList = [...this.shopList, ...res.data.list]
}
console.log(this.shopList)
}
})
},
//
getShopType() {
this.$Request.getT('/app/shoptype/selectShopTypeList').then(res => {
if (res.code == 0) {
res.data.forEach(res => {
res.select = false
})
this.options4 = [...this.options4, ...res.data]
}
})
},
goNav(url) {
console.log(url)
if (this.userId) {
uni.navigateTo({
url
})
} else {
uni.navigateTo({
url: '/pages/public/login'
})
}
},
goShopDet(url, e) {
this.shop = e
// console.log(e, '')
// let myDate = new Date();
// let hours = myDate.getHours();
// let minute = myDate.getMinutes();
// let openTime = this.shop.businessHours.split(':')[0] //
// let closeTime = this.shop.lockHours.split(':')[0] //
// let openTime1 = this.shop.businessHours.split(':')[1] //
// let closeTime1 = this.shop.lockHours.split(':')[1] //.
// console.log(hours)
// console.log(minute)
// console.log(openTime)
// console.log(openTime1)
// console.log(closeTime)
// console.log(closeTime1)
// console.log(minute >= closeTime1)
// if (hours < openTime) {
// this.hintShow = true
// return
// } else if (hours == openTime && minute < openTime1) {
// this.hintShow = true
// return
// } else if (hours >= closeTime) {
// this.hintShow = true
// return
// } else if (hours == closeTime && minute >= closeTime1) {
// this.hintShow = true
// return
// }
console.log(url)
if (this.userId) {
uni.navigateTo({
url
})
} else {
uni.navigateTo({
url: '/pages/public/login'
})
}
},
},
onReachBottom: function() {
if (this.shopList.length < this.totalCount) {
this.page = this.page + 1;
this.getShopList()
} else {
uni.showToast({
title: '已经到底了',
icon: 'none'
})
}
},
}
</script>
<style lang="scss">
.hd{
width: 100%;
height: auto;
background-color: rgb(248, 248, 248);
padding: 20rpx 0 20rpx 0;
z-index: 1;
// margin-top: 20rpx;
.hd-box{
width: 686rpx;
height: 100%;
.scroll-view_H{
width: 100%;
white-space: nowrap;
}
.hd-box-item{
display: inline-block;
padding: 10rpx 20rpx 10rpx 20rpx;
background-color: #ffffff;
font-size: 24rpx;
border-radius: 8rpx;
margin-right: 10rpx;
}
}
}
.select {
color: #FCD202;
}
.tabs {
margin: 20rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
}
.tabs_name {
flex: 1;
/* display: inline-block; */
text-align: center;
margin-bottom: 30rpx 0;
position: relative;
display: flex;
/* justify-content: space-between; */
align-items: center;
}
.tabs_name view {
margin: 0 auto;
display: flex;
align-items: center;
}
.tabs_2 {
/* width: 30%; */
}
.actives {
color: #007AFF;
}
.tabsicon {
position: absolute;
top: 0;
right: 22rpx;
width: 20rpx;
height: 40rpx;
z-index: 1;
}
.tabs_icon {
width: 12rpx;
height: 8rpx;
z-index: 1;
margin-left: 10rpx;
}
.icon1 {
/* position: absolute; */
/* top: 6rpx; */
}
.icon2 {
position: absolute;
bottom: 6rpx;
}
.hintPopul {
width: 100%;
height: 100vh;
position: fixed;
top: 0;
background: rgba(0, 0, 0, .4);
z-index: 999;
}
.content_ {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
text-align: center;
width: 500rpx;
height: 400rpx;
border-radius: 20rpx;
background-color: #fff;
padding-top: 120rpx;
}
.content_ image {
position: absolute;
top: -50rpx;
left: 0;
right: 0;
margin: auto;
}
.hintText {
font-size: 30rpx;
}
.skuBtn {
width: 460rpx;
height: 60rpx;
line-height: 60rpx;
text-align: center;
background: #FCD202;
font-size: 28rpx;
border: 2rpx solid #FCD202;
color: #333333;
border-radius: 50rpx;
font-weight: 700;
margin: auto;
}
.lable {
border: 1rpx solid #FFE6D9;
height: 40rpx;
padding: 0 14rpx;
background: #FFE6D9;
border-radius: 4rpx;
font-weight: 500;
color: #FD6416;
font-size: 20rpx;
margin-right: 10rpx;
margin-bottom: 10rpx;
}
</style>

16
pages/index/webView.vue Normal file
View File

@ -0,0 +1,16 @@
<template>
<web-view :src="url"></web-view>
</template>
<script>
export default {
data() {
return {
url: null //
}
},
onLoad: function (option) {
this.url = option.url
}
}
</script>

726
pages/my/index.vue Normal file
View File

@ -0,0 +1,726 @@
<template>
<view class="content">
<view class="head">
<view class="head_image">
<!-- #ifdef MP-WEIXIN -->
<button open-type="chooseAvatar" v-if="token" @chooseavatar="onChooseAvatar">
<image style="width: 90rpx;height: 90rpx;border-radius: 50%"
:src="avatar?avatar:'../../static/logo.png'"></image>
</button>
<image v-if="!token" @click="bindlogin" style="width: 90rpx;height: 90rpx;border-radius: 50%"
src="../../static/logo.png"></image>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<image @click="avatar?goLogin():''" style="width: 90rpx;height: 90rpx;border-radius: 50%"
:src="avatar?avatar:'../../static/logo.png'"></image>
<!-- #endif -->
<view class="lovip" v-if="isVip">
<image src="../../static/images/my/vip.png" style="width: 88rpx;height: 32rpx;top: -30rpx;"></image>
</view>
</view>
<view class="head_name">
<view class="name" v-if="token" @click="goShop('/pages/my/updateNickName')">{{ userName }}</view>
<view class="name" v-if="!token" @click="bindlogin">登录</view>
</view>
</view>
<view class="margin-lr padding-lr-sm padding-tb radius flex justify-between" v-if="XCXIsSelect=='是'">
<view class="text-center text-black" @click="goShop('/my/coupon/index')">
<view class="text-lg text-bold">{{msgData.countCoupon}}</view>
<view>外卖优惠券</view>
</view>
<view class="text-center text-black" @click="goShop('/my/wallet/index')">
<view class="text-lg text-bold">{{msgData.userMoney}}</view>
<view>我的余额</view>
</view>
<view class="text-center text-black" @click="goShop('/my/task/index')">
<view class="text-lg text-bold">{{msgData.userIntegral}}</view>
<view>我的积分</view>
</view>
</view>
<view class="margin-bottom padding-lr" style="position: relative;" v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/bg.png" style="width: 100%;height: 110rpx;" mode=""></image>
<view class="flex justify-between margin-lr padding-tb-sm radius"
style="position: absolute;top: 0;width: 640rpx;">
<image src="../../static/images/my/huiyuan.png" style="width: 70rpx;height: 70rpx;"></image>
<view class="flex-sub margin-left text-lg text-bold" style="line-height: 74rpx;color: #604320;">
超级会员享特权
</view>
<view v-if="!isVip" class="btn-bg" style="color: #604320;" @click="goNav({url:'/my/vip/index'})">去开通
</view>
<view v-if="isVip" class="btn-bg" style="color: #604320;" @click="goNav({url:'/my/vip/index'})">已开通
</view>
</view>
</view>
<view class="center flex justify-between bg-white margin-top padding-lr padding-tb-lg radius">
<view class="flex justify-between flex-sub padding-right" style="border-right: 2rpx solid #CCCCCC;"
@click="goShop('/my/task/index')">
<view class="">
<view class="text-black text-xl text-bold">每日任务</view>
<view class="text-sm margin-top-xs">每日签到领积分</view>
</view>
<image src="../../static/images/my/renwu.png" mode="" style="width: 88rpx;height: 88rpx;"></image>
</view>
<view class="flex justify-between flex-sub padding-left" @click="goShop('/my/integral/index')">
<view class="">
<view class="text-black text-xl text-bold">积分商城</view>
<view class="text-sm margin-top-xs flex align-center">积分兑换优惠券</view>
</view>
<image src="../../static/images/my/jifen.png" mode="" style="width: 88rpx;height: 88rpx;"></image>
</view>
</view>
<view class="margin padding-lr-sm padding-tb bg-white radius">
<view class="flex justify-between align-center">
<view class="text-lg text-bold text-black">推荐工具</view>
</view>
<view class="flex flex-wrap">
<!-- #ifdef MP-WEIXIN -->
<view class="text-center margin-tb-sm" style="width: 25%;" v-if="XCXIsSelect=='是'">
<button class="btn" open-type="share">
<image src="../../static/images/my/4.png" style="width: 50rpx;height: 48rpx;" mode=""></image>
<view>分享好友</view>
</button>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goApplet(shopAppId)"
v-if="shopStatus == 1&&XCXIsSelect=='是'">
<image src="../../static/images/my/1.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">商家入驻</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/apply/index'})"
v-if="shopStatus != 1&&XCXIsSelect=='是'">
<image src="../../static/images/my/1.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">商家入驻</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goApplet(qishouAppId)"
v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/11.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">骑手入驻</view>
</view>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/apply/index'})"
v-if="shopStatus != 1">
<image src="../../static/images/my/1.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">商家入驻</view>
</view>
<!-- #ifdef APP -->
<view class="text-center margin-tb-sm" style="width: 25%;" @click="shopRuzhu" v-else>
<image src="../../static/images/my/1.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">商家入驻</view>
</view>
<!-- #endif -->
<!-- #endif -->
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/tousu/index'})"
v-if="XCXIsSelect=='是'">
<image src="../../static/images/order/tousu.png" style="width: 55rpx;height: 55rpx;"
mode="scaleToFill"></image>
<view class="text-sm">我的投诉</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;"
@click="goNav({url:'/my/myPingJia/myPingJia'})" v-if="XCXIsSelect=='是'">
<image src="../../static/images/order/pingjia.png" style="width: 55rpx;height: 55rpx;"
mode="scaleToFill"></image>
<view class="text-sm">我的评价</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/helpList/index'})">
<image src="../../static/images/my/12.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">帮助中心</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/msg/index'})"
v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/3.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">消息中心</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/running/index/index'})"
v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/5.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">同城跑腿</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/setting/chat'})"
v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/6.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">联系客服</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/address/index'})">
<image src="../../static/images/my/7.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">地址管理</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/hongbao/hongbao'})"
v-if="XCXIsSelect=='是'">
<image src="../../static/images/my/9.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">跑腿红包</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;position: relative;"
@click="goNav({url:'/my/chat/index'})" v-if="XCXIsSelect=='是'">
<image src="../../static/images/order/kefu.png" style="width: 55rpx;height: 55rpx;"
mode="scaleToFill">
</image>
<view class="text-sm">聊天室</view>
<view v-if="messageCount>0"
style="height: 32rpx;width: 32rpx;border-radius: 100rpx;background-color: red;color: #FFF;text-align: center;position: absolute;top:-10rpx;right: 24rpx;">
{{messageCount}}
</view>
</view>
<view class="text-center margin-tb-sm" style="width: 25%;" @click="goNav({url:'/my/setting/index'})">
<image src="../../static/images/my/8.png" style="width: 55rpx;height: 55rpx;" mode="scaleToFill">
</image>
<view class="text-sm">系统设置</view>
</view>
</view>
</view>
</view>
</template>
<script>
import config from '../../common/config.js'
export default {
data() {
return {
messageCount: 0,
avatar: '',
userName: '',
checkCertification: -1,
arr: [],
showModal: true,
msgData: {
userIntegral: 0,
countCoupon: 0,
userMoney: 0
},
tuiguang: '',
tuiguangImg: '',
token: '',
XCXIsSelect: '否',
shopStatus: '',
isVip: false,
messageCount: 0,
time: '',
qishouAppId: '', //APPID
shopAppId: '', //appid
}
},
onLoad() {
let that = this
that.token = that.$queue.getData("token")
that.$Request.get('/app/common/type/248').then(res => { //APPID 248
if (res.code == 0) {
that.qishouAppId = res.data.value
}
});
that.$Request.get('/app/common/type/305').then(res => { //APPID 305
if (res.code == 0) {
that.shopAppId = res.data.value
}
});
that.XCXIsSelect = that.$queue.getData('XCXIsSelect') ? that.$queue.getData('XCXIsSelect') : '是'
that.time = setInterval(function() {
that.messageCount = uni.getStorageSync('messageCount')
if (that.messageCount) {
that.messageCount = that.messageCount
} else {
that.messageCount = 0
}
}, 3000)
that.getZiZhi()
console.log("that.XCXIsSelect___:" + that.XCXIsSelect)
},
onHide() {
clearInterval(this.time)
},
onShow() {
let that = this
// this.avatar = this.$queue.getData('avatar') || '';
// this.userName = this.$queue.getData('userName') || '';
that.token = that.$queue.getData("token")
if (that.token) {
that.getUserInfo();
that.getMsgData()
that.messageCount = uni.getStorageSync('messageCount')
if (that.messageCount) {
that.messageCount = that.messageCount
} else {
that.messageCount = 0
}
} else {
that.token = '';
that.isVip = false
that.userName = ''
that.avatar = ''
that.msgData.userIntegral = 0
that.msgData.countCoupon = 0
that.msgData.userMoney = 0
}
},
onShareAppMessage(res) { //
return {
title: this.tuiguang,
path: '/pages/index/index',
imageUrl: this.tuiguangImg,
}
},
onShareTimeline(res) { //
return {
title: this.tuiguang,
path: '/pages/index/index',
imageUrl: this.tuiguangImg,
}
},
methods: {
//
onChooseAvatar(e) {
console.log(e.detail.avatarUrl)
let that = this;
let token = uni.getStorageSync('token');
uni.showLoading({
title: '上传中...'
});
uni.uploadFile({
// url: config.APIHOST1 + '/alioss/upload', //
url: 'https://tcwm.xianmaxiong.com/sqx_fast/alioss/upload', //
filePath: e.detail.avatarUrl,
header: {
token: token
},
name: 'file',
success: uploadFileRes => {
let url = JSON.parse(uploadFileRes.data).data;
that.$Request.postJson(
'/app/user/updateUserImageUrl?avatar=' + url).then(
res => {
uni.hideLoading();
if (res.code === 0) {
that.$queue.showToast(
"更新成功");
that.getUserInfo();
}
});
}
});
},
goLogin() {
let that = this;
var url = null;
let userId = this.$queue.getData('userId');
if (!userId) {
this.bindlogin();
return;
}
uni.showActionSheet({
// itemList
itemList: ["查看头像", "从相册选择图片"],
success(e) {
var index = e.tapIndex
if (index === 0) {
//
//
let url = that.avatar;
let arr = []
arr.push(url)
uni.previewImage({
//
urls: arr
})
} else if (index === 1) {
uni.chooseImage({
count: 1, //9
sizeType: ['original', 'compressed'], //
sourceType: ['album'], //
success: function(res) {
uni.showLoading({
title: '上传中...'
});
let token = uni.getStorageSync('token');
uni.uploadFile({
// url: config.APIHOST1 + '/alioss/upload', //
url: 'https://tcwm.xianmaxiong.com/sqx_fast/alioss/upload', //
filePath: res.tempFilePaths[0],
header: {
token: token
},
name: 'file',
success: uploadFileRes => {
url = JSON.parse(uploadFileRes.data).data;
that.$Request.postJson(
'/app/user/updateUserImageUrl?avatar=' +
url).then(
res => {
uni.hideLoading();
if (res.code === 0) {
that.$queue.showToast(
"更新成功");
that.getUserInfo();
}
});
}
});
}
});
}
}
})
},
shopRuzhu() {
uni.showToast({
title: '请先下载同城外卖商户端APP',
icon: 'none'
})
},
getMsgData() {
this.$Request.get("/app/userintegral/findUserMessage").then(res => {
if (res.code == 0) {
this.msgData = res.data
}
});
},
//
getZiZhi() {
this.$Request.getT('/app/common/type/239').then(res => {
if (res.code === 0) {
this.tuiguang = res.data.value;
}
});
this.$Request.getT('/app/common/type/238').then(res => {
if (res.code === 0) {
this.tuiguangImg = res.data.value;
}
});
},
goSwt(e) {
uni.setStorageSync('current', e)
setTimeout(function() {
uni.switchTab({
url: '/pages/order/index',
})
}, 10)
},
goApplet(e) {
uni.navigateToMiniProgram({
appId: e,
path: 'pages/index/index',
success(res) {
//
}
})
},
goNav(e) {
if (this.token) {
if (e.name == '注册骑手') {
uni.navigateToMiniProgram({
appId: 'wx5ed22ce813e47796',
path: '/pages/login/login',
extraData: {
'data1': 'test'
},
success(res) {
//
console.log("打开成功")
}
})
} else if (e.name == '分享好友') {
uni.share({
provider: "weixin",
scene: "WXSceneSession",
type: 1,
summary: "我正在使用HBuilderX开发uni-app赶紧跟我一起来体验",
success: function(res) {
console.log("success:" + JSON.stringify(res));
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
}
});
} else {
uni.navigateTo({
url: e.url
})
}
} else {
this.bindlogin();
}
},
goShop(url) {
if (this.token) {
uni.navigateTo({
url
})
} else {
this.bindlogin();
}
},
getUserInfo() {
this.$Request.getT('/app/user/selectUserMessage').then(res => {
console.log(res)
if (res.code == 0) {
if (parseInt(res.data.checkCertification)) {
this.checkCertification = parseInt(res.data.checkCertification)
} else {
this.checkCertification = -1;
}
this.isVip = res.data.isVip
this.shopStatus = res.data.shopStatus
this.$queue.setData("avatar", res.data.avatar ? res.data.avatar :
'../../static/logo.png');
this.$queue.setData("userId", res.data.userId);
this.$queue.setData("phone", res.data.phone);
this.$queue.setData("status", res.data.status);
this.$queue.setData("userName", res.data.userName ? res.data.userName : res
.data.nickName);
this.avatar = res.data.avatar ? res.data.avatar : '../../static/logo.png';
this.userName = res.data.userName ? res.data.userName : res.data.nickName
}
});
},
bindlogin() {
if (!this.token) {
uni.navigateTo({
url: '/pages/public/login'
})
}
},
bindTo(name) {
console.log(name)
if (this.token) {
if (name == '我的红包') {
uni.navigateTo({
url: '/pages/my/hongbao/hongbao'
})
} else if (name == '注册骑手') {
uni.navigateToMiniProgram({
appId: 'wx5ed22ce813e47796',
path: '/pages/index/index',
extraData: {
'data1': 'test'
},
success(res) {
//
console.log("打开成功")
}
})
} else if (name == '意见反馈') {
uni.navigateTo({
url: '/pageA/feedback/feedback'
})
} else if (name == '联系客服') {
uni.navigateTo({
url: '/pageA/kefu/kefu'
})
} else if (name == '系统设置') {
uni.navigateTo({
url: '/pages/my/set/set'
})
} else if (name == '地址管理') {
uni.navigateTo({
url: '/pageA/address/address'
})
}
} else {
this.bindlogin();
}
},
bindapprove() {
if (this.token) {
uni.navigateTo({
url: '/pages/my/approve/approve'
})
} else {
this.bindlogin();
}
},
binduser() {
if (this.token) {
// uni.navigateTo({
// url: '/pages/my/userphone/userphone'
// })
} else {
this.bindlogin();
}
}
}
}
</script>
<style>
button::after {
border: none;
background-color: none;
}
button {
position: relative;
display: block;
margin-left: auto;
margin-right: auto;
padding-left: 0px;
padding-right: 0px;
box-sizing: border-box;
text-decoration: none;
line-height: 1.35;
overflow: hidden;
color: #666666;
/* background-color: #fff; */
background-color: rgba(255, 255, 255, 0) !important;
width: 100%;
height: 100%;
}
.btn-bg {
width: 64px;
height: 28px;
background: linear-gradient(90deg, #CDA26E 0%, #DCB78A 100%);
border-radius: 28px;
text-align: center;
line-height: 28px;
margin-top: 10upx;
color: '#604320'
}
body {
background: #F5F5F5;
}
/* #ifndef MP-WEIXIN */
page {
background: #F2EDED;
}
/* #endif */
.content {
width: 100%;
}
.btn {
font-size: 24upx;
/* width: 95%; */
text-align: center;
background: #FFFFFF;
margin-top: 6rpx;
}
.head {
/* width: 100%; */
/* height: 200rpx; */
display: flex;
align-items: center;
padding: 30rpx;
border-radius: 16rpx;
background-image: linear-gradient(#FEFBDA, #F7F7F7);
}
.head_image {}
.head_image>image {
width: 90rpx;
height: 90rpx;
border-radius: 50%
}
.head_name {
margin-left: 10rpx;
}
.name {
font-size: 38rpx;
font-weight: bold;
}
.approve {
position: absolute;
top: 100rpx;
font-size: 24rpx;
color: #999999;
}
/* 列表 */
.use_list {
width: 100%;
background: #ffffff;
margin-top: 20rpx;
}
.list_box {
width: 90%;
margin: 0 auto;
display: flex;
height: 110rpx;
}
.box_left {
flex: 1;
display: flex;
justify-content: left;
align-items: center;
}
.box_right {
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
color: #808080;
}
.use_name {
margin-left: 30rpx;
font-size: 32rpx;
}
.use_image image {
width: 50rpx;
height: 50rpx;
}
.center {
width: 94%;
/* line-height: 1.5; */
background-color: #FFFFFF;
border-radius: 18rpx;
margin: 0 auto 0;
display: flex;
justify-content: space-between;
}
.header_text2 {
font-size: 24rpx;
font-weight: 500;
color: #999999;
margin-top: 10rpx;
}
.header_text4 {
font-size: 32rpx;
font-weight: bold;
color: #333333;
}
</style>

197
pages/my/updateNickName.vue Normal file
View File

@ -0,0 +1,197 @@
<template>
<view class="container">
<view class="wrapper">
<view class="input-content">
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title">原昵称</text>
<input type="text" :value="oldnickName" placeholder-class="input-empty" disabled="true" />
</view>
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title">新昵称</text>
<input type="nickname" v-model="nickName" placeholder="请设置新昵称" placeholder-class="input-empty" maxlength="20"
minlength="6" />
</view>
</view>
<button class="confirm-btn" @click="updatNickName">修改昵称</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
nickName: '',
oldnickName: ''
}
},
onLoad() {
this.oldnickName = this.$queue.getData('userName');
},
methods: {
updatNickName() {
var patrn = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、 ]/im;
if (patrn.test(this.nickName)) { // false
this.$queue.showToast('包含特殊字符,请重新输入');
return;
}
uni.showLoading({
title: '提交中...'
});
let userId = this.$queue.getData('userId');
let data = {
userName:this.nickName
}
this.$Request.postT('/app/user/updateUserName',data).then(res => {
uni.hideLoading();
if (res.code === 0) {
this.$queue.showToast("更新成功");
setTimeout(() => {
uni.navigateBack();
}, 500);
}
});
},
},
}
</script>
<style lang='scss'>
page {
background: #fff;
}
.send-msg {
border-radius: 30px;
color: white;
height: 30px;
font-size: 14px;
line-height: 30px;
background: #e10a07;
}
.container {
padding-top: 32upx;
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
background: #fff;
}
.wrapper {
position: relative;
z-index: 90;
background: #fff;
padding-bottom: 20px;
}
.right-top-sign {
position: absolute;
top: 40px;
right: -15px;
z-index: 95;
&:before,
&:after {
display: block;
content: "";
width: 20px;
height: 40px;
background: -moz-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
background: -webkit-gradient(linear,
left top,
left right,
color-stop(0, #fa4dbe),
color-stop(100%, #fbaa58));
background: -webkit-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
background: -o-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
background: -ms-linear-gradient(left, #fa4dbe 0, #fbaa58 100%);
background: linear-gradient(to left, #fa4dbe 0, #fbaa58 100%);
}
&:before {
transform: rotate(50deg);
border-radius: 0 50px 0 0;
}
&:after {
position: absolute;
right: -198px;
top: 0;
transform: rotate(-50deg);
border-radius: 50px 0 0 0;
/* background: pink; */
}
}
.left-bottom-sign {
position: absolute;
left: -270px;
bottom: -320px;
/*border: 100upx solid #d0d1fd;*/
border-radius: 50%;
padding: 90px;
}
.welcome {
position: relative;
left: 30px;
top: -55px;
font-size: 28px;
color: #555;
text-shadow: 1px 0px 1px rgba(0, 0, 0, .3);
}
.input-content {
padding: 0 20px;
}
.confirm-btn {
width: 300px;
height: 42px;
line-height: 42px;
border-radius: 30px;
margin-top: 40px;
background: #fcd202;
color: #fff;
&:after {
border-radius: 60px;
}
}
.confirm-btn1 {
width: 300px;
height: 42px;
line-height: 42px;
border-radius: 30px;
margin-top: 40px;
background: whitesmoke;
color: grey;
&:after {
border-radius: 60px;
}
}
.forget-section {
text-align: center;
margin-top: 40px;
}
.register-section {
position: fixed;
left: 0;
bottom: 30px;
width: 100%;
text-align: center;
text {
margin-left: 10px;
}
}
</style>

View File

@ -0,0 +1,188 @@
<template>
<view class="content">
<view class="online_box">
<view class="part1">
<view class="online_left">投诉类型</view>
<view class="online_right" @click="show = true">
{{complaintName?complaintName:'请选择投诉类型'}}
<image src="../../../static/images/index/right.png"></image>
</view>
</view>
<u-line color="#E6E6E6" />
<view class="online">
<view class="tit">投诉理由</view>
<view class="text_box" style="margin-top: 20rpx;">
<u-input v-model="value" height="300" :type="type" :border="border" :clearable="false"
placeholder="请描述问题发生的情况" />
</view>
</view>
</view>
<view class="btn" @click="bindorder">立即提交</view>
<u-picker v-model="show" mode="selector" :range="typeList" range-key="illegal" @confirm='select'></u-picker>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
value: '',
type: 'textarea',
border: true,
indentNumber: '',
complaintName: '',
typeList: [],
IllegalId: '',
indentType: ''
}
},
onLoad(options) {
console.log(options)
this.indentNumber = options.indentNumber
this.indentType = options.indentType
this.getTypeList()
},
methods: {
select(e) {
console.log(e)
this.complaintName = this.typeList[e].illegal
this.IllegalId = this.typeList[e].id
},
getTypeList() {
this.$Request.get('/shop/illegalType/selectIllegalTypeList').then(res => {
if (res.code == 0) {
this.typeList = res.data
}
});
},
bindorder() {
if (this.IllegalId == '') {
uni.showToast({
title: '请选择投诉类型',
icon: 'none'
})
return
}
if (this.value == '') {
uni.showToast({
title: '请填写投诉原因',
icon: 'none'
})
return
}
this.$Request.postJson('/app/tbindent/insertComplaint', {
indentNumber: this.indentNumber,
wrongExplain: this.value,
illegalId: this.IllegalId,
indentType: '5',
type: '1',
userId: uni.getStorageSync('userId')
}).then(res => {
if (res.code == 0) {
uni.showToast({
title: '提交成功',
icon: 'none'
})
setTimeout(function() {
uni.navigateBack()
}, 1000)
} else {
console.log('失败:', res.data)
}
});
}
}
}
</script>
<style>
body {
background-color: #F5F5F5;
}
.content {
width: 100%;
}
.online_box {
width: 90%;
margin: 0 auto;
background: #FFFFFF;
border-radius: 20rpx;
margin-top: 30rpx;
padding-bottom: 40rpx;
}
.part1 {
width: 90%;
margin: 0 auto;
height: 80rpx;
display: flex;
align-items: center;
}
.online_left {
flex: 1;
font-size: 27rpx;
font-weight: bold;
letter-spacing: 2rpx;
}
.online_right {
color: #999999;
font-size: 22rpx;
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
}
.online_right image {
width: 12rpx;
height: 21rpx;
margin-left: 10rpx;
}
.online_title {
font-size: 28rpx;
font-weight: bold;
letter-spacing: 2rpx;
width: 90%;
margin: 0 auto;
line-height: 80rpx;
}
.online {
width: 90%;
margin: 0 auto;
padding-bottom: 34rpx;
}
.tit {
font-size: 27rpx;
font-weight: bold;
letter-spacing: 2rpx;
margin-top: 19rpx;
}
.u-input--border {
border: none !important;
background: #F5F5F5 !important;
}
.btn {
width: 90%;
margin: 0 auto;
background: #FF7F00;
line-height: 90rpx;
text-align: center;
color: white;
border-radius: 15rpx;
margin-top: 20rpx;
font-size: 28rpx;
}
</style>

866
pages/order/detail.vue Normal file
View File

@ -0,0 +1,866 @@
<template>
<view class="order_details">
<!-- 待支付 -->
<view class="part_one">
<view>
<!-- 订单状态 -->
<view class="rider_order" v-if="orderDetails.indentState == 0">待付款</view>
<view class="rider_order"
v-if="orderDetails.indentState == 1||orderDetails.indentState ==8||orderDetails.indentState ==9||orderDetails.indentState ==10">
已取消</view>
<view class="rider_order" v-if="orderDetails.indentState == 2">待接单</view>
<view class="rider_order" v-if="orderDetails.indentState == 5">待确认</view>
<view class="rider_order" v-if="orderDetails.indentState == 3">已接单</view>
<view class="rider_order" v-if="orderDetails.indentState ==4">派送中</view>
<view class="rider_order" v-if="orderDetails.indentState ==6||orderDetails.indentState ==7">已完成
</view>
<!-- 订单提示状态 -->
<view class="rider_tit" v-if="orderDetails.indentState == 2">请耐心等待骑手接单...</view>
<view class="rider_tit" v-if="orderDetails.indentState == 0">请及时支付订单否则将自动取消</view>
<!-- <view class="rider_tit"
v-if="orderDetails.indentState ==5||orderDetails.indentState ==6||orderDetails.indentState ==7">
写下您的评价感受吧</view> -->
<view class="rider_tit"
v-if="orderDetails.indentState == 1||orderDetails.indentState ==8||orderDetails.indentState ==9||orderDetails.indentState ==10">
订单已被您取消</view>
<view class="rider_tit" v-if="orderDetails.indentState == 3||orderDetails.indentState ==4">骑手已接单尽快为您派送
</view>
<!-- 订单按钮状态 -->
<view style="display: flex;justify-content: flex-end;margin-top: 30rpx;margin-right: 20rpx;">
<!-- <view class="btn1" @tap.stop="bindcomment(orderDetails)"
v-if="orderDetails.indentState ==7||orderDetails.indentState == 6&&!orderDetails.evaluateMessage">
去评论
</view> -->
<view class="btn1" v-if="orderDetails.indentState == 0||orderDetails.indentState == 2"
@tap.stop="bindorderOff(orderDetails)">取消订单</view>
<view class="btn1" @tap.stop="bindconfirm(orderDetails)" v-if="orderDetails.indentState == 5">确认订单
</view>
<view class="btn2" @tap.stop="bindorder(orderDetails)"
v-if="orderDetails.indentState == 1||orderDetails.indentState == 3||orderDetails.indentState ==8||
orderDetails.indentState ==9||orderDetails.indentState ==10||orderDetails.indentState == 4||orderDetails.indentState == 6">再来一单</view>
<view class="btn2" v-if="orderDetails.indentState == 0" @tap.stop="bindorderpay(orderDetails)">立即付款
</view>
</view>
</view>
</view>
<!-- 购买时间 -->
<view class="five_box" style="padding: 30rpx 30rpx;">
<text>预约时间</text>
<text style="font-weight: bold;">{{orderDetails.sendOutTime?orderDetails.sendOutTime:''}}</text>
</view>
<map v-if="(orderDetails.indentState == 3||orderDetails.indentState == 4||orderDetails.indentState == 5) && latitude && longitude"
id="map" @tap="goMap" style="width: 95%; height: 300rpx;margin: 20rpx auto 0;" :markers="markers"
:latitude="latitude" :longitude="longitude"></map>
<!-- 同城购买-->
<view class="part_three" v-if="orderDetails.indentType == 3">
<view class="city_pay">
<view class="city_box">同城购买</view>
<text v-if="orderDetails.buyType == 0">就近购买</text>
<text v-else>指定购买</text>
</view>
<view class="pay_tit">{{orderDetails.productDetails?orderDetails.productDetails:''}}</view>
</view>
<!-- 同城服务-->
<view class="part_three" v-if="orderDetails.indentType == 4">
<view class="city_pay">
<view class="city_box">同城服务</view>
<text v-if="orderDetails.serviceType">{{orderDetails.serviceType}}</text>
</view>
<view class="pay_tit">{{orderDetails.serviceDetails?orderDetails.serviceDetails:''}}</view>
</view>
<!-- 骑手商家地址 -->
<view class="part_four">
<view class="city_pay" v-if="orderDetails.indentType !=3&&orderDetails.indentType !=4">
<view class="city_box" v-if="orderDetails.indentType == 1">帮我送</view>
<view class="city_box" v-if="orderDetails.indentType == 2">帮我取</view>
<text v-if="orderDetails.itemType">{{orderDetails.itemType}}</text>
<text v-if="orderDetails.itemValue">{{orderDetails.itemValue}}</text>
<text v-if="orderDetails.itemWeight">{{orderDetails.itemWeight}}</text>
</view>
<view v-if="orderDetails.indentType !=3&&orderDetails.indentType != 4">
<u-line color="#F2F2F2" />
</view>
<!-- 发货地址 -->
<view class="one_box" v-if="orderDetails.indentType != 4" style="margin-top: 30rpx;">
<view class="box_dian">
<image src="../../static/images/order/mai.png" v-if="orderDetails.indentType == 3"></image>
<image src="../../static/images/order/icon_f.png" v-else></image>
</view>
<view class="box_addres">
<view class="add">{{orderDetails.shopAddressDetail}}</view>
<view class="num">
<view class="name" v-if="orderDetails.indentType !=3">
{{orderDetails.shopName}} <text>{{orderDetails.shopPhone}}</text>
<!-- <view class="phone_bd" @click="bindphone(0)">拨打</view> -->
</view>
<!-- <view class="name" v-else>暂无信息</view> -->
</view>
</view>
</view>
<!-- 收获地址 -->
<view class="one_box" style="margin-top: 20rpx;margin-bottom: 30rpx;">
<view class="box_dian">
<image src="../../static/images/order/icon_s.png"></image>
</view>
<view class="box_addres">
<view class="add">{{orderDetails.userAddressDetail}}</view>
<view class="num">
<view class="name">
{{orderDetails.userName}}<text>{{orderDetails.userPhone}}</text>
<!-- <view class="phone_bd" @click="bindphone()">联系TA</view> -->
</view>
</view>
</view>
</view>
<u-line color="#F2F2F2" />
<view class="address_pay">
<view class="runing_pay">
跑腿费
</view>
<view class="runing_distance">
<!-- {{orderDetails.distance}}m -->
<text>{{orderDetails.indentBasicsMoney?orderDetails.indentBasicsMoney:0}}</text>
</view>
</view>
</view>
<!-- 联系骑手 -->
<view class="rider_box"
v-if="orderDetails.indentState != 0&&orderDetails.indentState != 1&&orderDetails.indentState != 8&&orderDetails.indentState != 2&&orderDetails.indentState != 9&&orderDetails.indentState != 10">
<!-- <view style="font-size: 31rpx;color: black;padding: 20rpx 25rpx;">联系骑手...</view> -->
<view class="flex justify-between align-center padding">
<view style="font-size: 31rpx;color: black;">联系骑手...</view>
<image @click="complaint" src="../../static/images/order/tousu.png" style="width: 43rpx;height: 39rpx;"
mode=""></image>
</view>
<view>
<u-line color="#F2F2F2" />
</view>
<view style="padding: 20rpx 25rpx;display: flex;justify-content: space-between;align-items: center;">
<view style="display: flex;">
<view class="rider_left">
<image :src="orderDetails.avatar"></image>
</view>
<view style="margin-left: 10rpx;color: #333333;">
<view>{{orderDetails.riderNickName}}</view>
<view>{{orderDetails.phone1}}</view>
</view>
</view>
<view class="phone" @click="bindphone()">联系TA</view>
</view>
</view>
<!-- 收货码 -->
<view class="five_box1">
<view class="part_seven" v-if="orderDetails.orderCode">
<text>收货码</text>
<text>{{orderDetails.orderCode}}</text>
</view>
<!-- 备注 -->
<view class="part_seven"
v-if="orderDetails.indentType != 4&&orderDetails.indentType != 3&&orderDetails.remarks">
<text>备注</text>
<view style="text-align: right;flex: 1;">{{orderDetails.remarks}}</view>
</view>
</view>
<!-- 订单信息 -->
<view class="part_six">
<view class="order_info">
订单信息
</view>
<view class="order_list">
<view class="order_name">订单号码</view>
<view class="order_nums">{{orderDetails.indentNumber}}
<u-icon @click="copy(orderDetails.indentNumber)" name="cut" style="margin-left: 6rpx;" size="32">
</u-icon>
</view>
</view>
<view class="order_list">
<view class="order_name">下单时间</view>
<view class="order_nums">{{orderDetails.createTime}}</view>
</view>
<view class="order_list">
<view class="order_name">支付方式</view>
<view class="order_nums">在线支付</view>
</view>
</view>
<!-- 订单下单详情 -->
<view class="part_sevens">
<view class="order_info">
订单下单支出
</view>
<!-- <view class="order_list">
<view class="order_name">跑腿费</view>
<view class="order_nums">{{orderDetails.errandMoney}}</view>
</view> -->
<view class="order_list" v-if="orderDetails.tip">
<view class="order_name">小费</view>
<view class="order_nums">{{orderDetails.tip}}</view>
</view>
<view class="order_list" v-if="orderDetails.prepayMoney">
<view class="order_name">预付价格</view>
<view class="order_nums">{{orderDetails.prepayMoney}}</view>
</view>
<view class="order_list" v-if="orderDetails.redPacketAmount">
<view class="order_name">红包</view>
<view class="order_nums">-{{orderDetails.redPacketAmount}}</view>
</view>
<view class="order_list" v-if="orderDetails.cargoInsuranceFlag == 0">
<view class="order_name">物品保价</view>
<view class="order_nums">{{orderDetails.cargoInsurance}}</view>
</view>
<view class="order_list" v-if="orderDetails.indentMoney">
<view class="order_name" style="color: black;font-size: 28rpx;">订单总支出</view>
<view class="order_nums" style="color: red;font-size: 28rpx;">{{orderDetails.indentMoney}}</view>
</view>
</view>
<!-- <image
v-if="orderDetails.indentState ==3||orderDetails.indentState ==4||orderDetails.indentState ==5||orderDetails.indentState ==6||orderDetails.indentState ==7"
src="../../static/images/order/kefu.png"
style="width: 100rpx;height: 100rpx;position: fixed;bottom: 100rpx;right: 70rpx;" @click="goChat()" mode="">
</image> -->
</view>
</template>
<script>
export default {
data() {
return {
orderDetails: '',
latitude: '',
longitude: '',
markers: [], //
lat: '',
lng: ''
}
},
onLoad(e) {
let that = this
this.indentNumber = e.indentNumber
that.userList()
},
methods: {
getLocation(e) {
let data = {
riderUserId: e,
lat: this.lat,
lng: this.lng
}
this.$Request.getT('/timedtask/selectRiderLocation', data).then(res => {
if (res.code === 0) {
console.log(res.data, '经纬度')
this.latitude = res.data.riderLocation.lat;
this.longitude = res.data.riderLocation.lng;
this.markers = [{
id: 1,
latitude: res.data.riderLocation.lat,
longitude: res.data.riderLocation.lng,
iconPath: '../../static/images/order/rider.png',
width: '40',
height: '40'
}]
}
});
},
goMap() {
uni.navigateTo({
url: '/pages/order/paotuiMap?indentNumber=' + this.indentNumber
})
},
goChat() {
uni.navigateTo({
url: '/pages/index/shop/im?ordersId=' + this.orderDetails.indentId
})
},
//
bindphone() {
uni.makePhoneCall({
phoneNumber: this.orderDetails.phone
});
},
//
userList() {
let that=this;
this.$Request.postT('/app/tbindent/userIndentMessage?indentNumber=' + this.indentNumber).then(res => {
console.log(res)
if (res.code == 0) {
this.orderDetails = res.data
if (this.orderDetails.phone) {
this.orderDetails.phone1 = this.orderDetails.phone.substring(0, 3) + "****" + this
.orderDetails.phone.substring(7, 11);
}
uni.getLocation({
type: 'gcj02', //uni.openLocation
success: function(res) {
that.lat = res.latitude;
that.lng = res.longitude;
that.getLocation(this.orderDetails.riderUserId)
}
});
}
});
},
//
bindorder(e) {
console.log(e)
if (e.indentType == 1 || e.indentType == 2) {
let index = e.indentType
uni.navigateTo({
url: '/running/Helpsend/Helpsend?indentNumber=' + e.indentNumber + '&index=' + index
})
} else if (e.indentType == 3) {
let index = e.indentType
let current = e.buyType
uni.navigateTo({
url: '/running/Helppay/Helppay?indentNumber=' + e.indentNumber + '&index=' + index +
'&current=' + current
})
} else {
let index = e.indentType
uni.navigateTo({
url: '/running/Cityservice/Cityservice?indentNumber=' + e.indentNumber + '&index=' + index
})
}
},
//
bindcomment(e) {
console.log(e)
uni.navigateTo({
url: '/pages/order/comments/comments?indentNumber=' + e.indentNumber + '&riderUserId=' + e
.riderUserId
})
},
//
bindorderOff(e) {
// console.log(e)this.orderDetails.userFine
let indentNumber = e.indentNumber
console.log(indentNumber)
uni.showModal({
title: '温馨提示',
content: '确定取消订单?',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if (res.confirm) {
this.$Request.postT('/app/tbindent/userCancleIndent?indentNumber=' + indentNumber)
.then(res => {
// console.log(res)
if (res.code == 0) {
uni.showToast({
title: '订单取消成功'
});
this.userList()
// setTimeout(function() {
// uni.navigateBack();
// }, 1000);
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '订单失败',
content: res.msg
});
}
});
}
}
});
},
//
bindconfirm(e) {
// console.log(e)
let indentNumber = e.indentNumber
console.log(indentNumber)
this.$Request.postT('/app/tbindent/userDelivery?indentNumber=' + indentNumber).then(res => {
console.log(res)
if (res.code == 0) {
uni.showToast({
title: '订单确认成功'
});
this.userList()
// setTimeout(function() {
// uni.navigateBack();
// }, 1000);
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '订单确认失败',
content: res.msg
});
}
});
},
//
bindorderpay(e) {
console.log(e)
let indentNumber = e.indentNumber
uni.navigateTo({
url: '/running/order/pay/pay?indentNumber=' + indentNumber
})
},
copy(e) {
uni.setClipboardData({
data: e,
success: () => {
uni.showToast({
title: '复制成功'
})
}
})
},
complaint() {
uni.navigateTo({
url: '/pages/order/complaint/complaint?indentNumber=' + this.orderDetails.indentNumber +
'&indentType=' + this.orderDetails.indentType
})
},
}
}
</script>
<style>
body {
background: #F5F5F5;
}
/* #ifndef MP-WEIXIN */
page {
background: #F2EDED;
}
/* #endif */
.order_details {
width: 100%;
padding-bottom: 100rpx;
}
/* 待支付 */
.part_one {
width: 95%;
margin: 0 auto;
height: 230rpx;
background: #ffffff;
border-radius: 10rpx;
margin-top: 30rpx;
}
.city_box {
width: 110rpx;
line-height: 42rpx;
background: #c4e2ff;
color: #49A5FF;
text-align: center;
font-size: 30rpx;
height: 42rpx;
}
.city_pay {
width: 90%;
margin: 0 auto;
display: flex;
height: 80rpx;
justify-content: left;
align-items: center;
}
.city_pay text {
font-size: 30rpx;
letter-spacing: 2rpx;
margin-left: 15rpx;
}
.rider_order {
width: 90%;
margin: 0 auto;
font-size: 36rpx;
font-weight: bold;
padding-top: 20rpx;
letter-spacing: 2rpx;
}
.rider_tit {
width: 90%;
margin: 0 auto;
color: #999999;
font-size: 31rpx;
margin-top: 10rpx;
letter-spacing: 2rpx;
}
.order_btn {
display: flex;
margin-top: 30rpx;
}
.close_order {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
}
.close_btn {
border: 1rpx solid #CCCCCC;
width: 245rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
border-radius: 75rpx;
font-size: 31rpx;
color: #999999;
letter-spacing: 2rpx;
}
.tip_order {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
}
.close_tip {
width: 245rpx;
height: 70rpx;
line-height: 70rpx;
text-align: center;
border-radius: 75rpx;
font-size: 31rpx;
color: white;
letter-spacing: 2rpx;
background: #FF7F00;
}
/* 骑手商家地址 */
.part_four {
width: 95%;
margin: 0 auto;
margin-top: 20rpx;
background: #FFFFFF;
/* height: 390rpx; */
border-radius: 10rpx;
padding: 15rpx 15rpx;
}
.u-line {
border-bottom-width: 6rpx !important;
}
.one_box {
width: 100%;
/* height: 100rpx; */
/* background: #F5F5F5; */
margin: 0 auto;
border-radius: 12upx;
display: flex;
}
.box_dian {
/* flex: 1; */
width: 10%;
display: flex;
justify-content: center;
align-items: center;
}
.box_dian image {
width: 45rpx;
height: 45rpx;
}
.box_name {
flex: 5;
display: flex;
justify-content: left;
align-items: center;
color: #333333;
font-weight: 700;
}
.box_addres {
/* flex: 5; */
width: 85%;
font-size: 31rpx;
}
.add {
/* color: #333333;
font-size: 31rpx;
letter-spacing: 2upx;
font-weight: bold;
margin-top: 20upx; */
}
.name {
display: inline;
font-size: 30rpx;
color: #999999;
}
.name text {
color: #999999;
font-size: 30rpx;
margin-left: 30upx;
}
.address_pay {
display: flex;
width: 90%;
margin: 0 auto;
height: 80rpx;
line-height: 80rpx
}
.runing_pay {
flex: 1;
color: #999999;
font-size: 30rpx;
letter-spacing: 1rpx;
}
.runing_distance {
flex: 1;
color: #999999;
font-size: 30rpx;
letter-spacing: 1rpx;
text-align: end;
}
.runing_distance text {
font-size: 31rpx;
color: black;
margin-left: 35rpx;
}
/* 收货码 */
.five_box {
width: 95%;
margin: 0 auto;
background: #ffffff;
margin-top: 20rpx;
border-radius: 10rpx;
font-size: 35rpx;
display: flex;
justify-content: space-between;
}
.five_box1 {
width: 95%;
margin: 0 auto;
background: #ffffff;
margin-top: 20rpx;
border-radius: 10rpx;
font-size: 35rpx;
/* display: flex;
justify-content: space-between; */
}
.part_five {
/* height: 85rpx; */
display: flex;
justify-content: space-between;
padding: 20rpx 20rpx;
border-radius: 10rpx;
}
.take_number {
flex: 1;
display: flex;
justify-content: left;
align-items: center;
text-indent: 30rpx;
}
.numbers {
flex: 1;
display: flex;
justify-content: flex-end;
align-items: center;
margin-right: 30rpx;
}
/* 订单信息 */
.part_six {
width: 95%;
margin: 0 auto;
height: 275rpx;
background: #ffffff;
margin-top: 20rpx;
border-radius: 10rpx;
/* margin-bottom: 100rpx; */
}
.order_info {
width: 90%;
margin: 0 auto;
height: 80rpx;
line-height: 80rpx;
font-size: 31rpx;
font-weight: bold;
letter-spacing: 3rpx;
}
.order_list {
width: 90%;
margin: 0 auto;
display: flex;
height: 60rpx;
}
.order_name {
flex: 1;
color: #999999;
font-size: 29rpx;
letter-spacing: 2rpx;
display: flex;
justify-content: left;
align-items: center;
}
.order_nums {
flex: 2;
color: #999999;
font-size: 28rpx;
letter-spacing: 2rpx;
display: flex;
justify-content: flex-end;
align-items: center;
}
/* 同城服务 */
.part_three {
width: 95%;
margin: 0 auto;
margin-top: 20rpx;
background: #FFFFFF;
border-radius: 10rpx;
padding-bottom: 30rpx;
}
.city_pay {
width: 90%;
margin: 0 auto;
display: flex;
/* height: 90rpx; */
justify-content: left;
align-items: center;
}
.city_pay text {
font-size: 28rpx;
letter-spacing: 2rpx;
margin-left: 30rpx;
}
.city_box {
width: 110rpx;
line-height: 42rpx;
background: #c4e2ff;
color: #49A5FF;
text-align: center;
font-size: 28rpx;
height: 42rpx;
}
.pay_tit {
width: 90%;
margin: 0 auto;
font-size: 27rpx;
}
.btn1 {
width: 170upx;
font-size: 28rpx;
line-height: 60upx;
text-align: center;
border: 1upx solid #9C9C9C;
border-radius: 20upx;
color: #9C9C9C;
margin-right: 30upx;
}
.btn2 {
width: 170upx;
line-height: 60upx;
color: white;
background: #FF6A04;
font-size: 22upx;
text-align: center;
margin-right: 10rpx;
border-radius: 20upx;
}
.phone_bd {
display: inline-block;
background: #FF6A04;
color: #ffffff;
padding: 0rpx 15rpx;
margin-left: 14rpx;
border-radius: 10rpx;
}
.part_seven {
padding: 20rpx 0;
width: 90%;
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 auto;
color: #999999;
}
.part_sevens {
width: 95%;
margin: 0 auto;
/* height: 275rpx; */
background: #ffffff;
margin-top: 20rpx;
border-radius: 10rpx;
padding-bottom: 20rpx;
margin-bottom: 100rpx;
}
/* 联系骑手 */
.rider_box {
width: 95%;
margin: 0 auto;
background: #ffffff;
margin-top: 20rpx;
border-radius: 10rpx;
}
.rider_left image {
width: 80rpx;
height: 85rpx;
border-radius: 60%;
}
.phone {
background: #FD6416;
color: #ffffff;
padding: 8rpx 15rpx;
border-radius: 13rpx;
font-size: 24rpx;
}
</style>

442
pages/order/feedback.vue Normal file
View File

@ -0,0 +1,442 @@
<template>
<view class="page">
<!-- <view class="feedback-title"> -->
<!-- <text>评价</text> -->
<!-- <text @tap="chooseMsg">快速键入</text> -->
<!-- </view> -->
<view class="feedback-body">
<textarea placeholder="请输入你的评价..." v-model="sendDate.content" class="feedback-textare" />
</view>
<!-- <view class="feedback-title"><text>QQ/邮箱</text></view> -->
<!-- <view class="feedback-body"><input class="feedback-input" v-model="sendDate.mail" placeholder="方便我们联系你 " /></view> -->
<view class="text-white padding bg radius margin-tb">
<view>
<view class="text-lg margin-top-sm text-black">商品评价图可多张</view>
<view class="flex" style="overflow: hidden;flex-wrap: wrap;">
<view>
<view class="margin-top flex margin-right-sm flex-wrap">
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;"
v-for="(image,index) in shopBanner" :key="index">
<!-- <image :src="image" style="width: 100%;height: 100%;"></image> -->
<image :src="image" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="removeImg(index)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;" @click="addImages(2)" v-if="shopBanner.length<9">
<!-- <image :src="image" style="width: 100%;height: 100%;"></image> -->
<view style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="/static/images/addimg.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center text-black">添加图片</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="feedback-title feedback-star-view">
<text>订单评分</text>
<view class="feedback-star-view">
<!-- <text class="feedback-star" v-for="(value, key) in stars" :key="key" :class="key < sendDate.score ? 'active' : ''" @tap="chooseStar(value)"></text> -->
</view>
<u-rate :count="count" min-count='1' active-color="#FCD202" v-model="value"></u-rate>
</view>
<button type="primary" style="background: #FCD202;margin-top: 32upx;" class="feedback-submit"
@tap="send">提交</button>
</view>
</template>
<script>
import configUrl from '../../common/config.js'
export default {
data() {
return {
shopBanner: [],
msgContents: ['界面显示错乱', '启动缓慢,卡出翔了', 'UI无法直视丑哭了', '偶发性崩溃'],
stars: [1, 2, 3, 4, 5],
imageList: [],
sendDate: {
score: 5,
content: '',
contact: '',
goodsId: '',
ordersId: '',
orderNumber: '',
shopId: ''
},
count: 5,
value: 5,
goodsId: '',
ordersId: '',
orderNumber: '',
};
},
onLoad(e) {
this.sendDate.goodsId = e.goodsId
this.sendDate.ordersId = e.ordersId
this.sendDate.orderNumber = e.orderNumber
this.sendDate.shopId = e.shopId
// let deviceInfo = {
// appid: plus.runtime.appid,
// imei: plus.device.imei, //
// p: plus.os.name === 'Android' ? 'a' : 'i', //iiOSaAndroid
// md: plus.device.model, //
// app_version: plus.runtime.version,
// plus_version: plus.runtime.innerVersion, //
// os: plus.os.version,
// net: '' + plus.networkinfo.getCurrentType()
// };
// this.sendDate = Object.assign(deviceInfo, this.sendDate);
},
methods: {
//
addImages(e) {
let that = this
uni.chooseImage({
count: 9,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < res.tempFilePaths.length; i++) {
that.$queue.showLoading("上传中...");
uni.uploadFile({ //
// url: that.config("APIHOST1") + '/alioss/upload', //
// url: 'https://tcwm.xianmaxiong.com/sqx_fast/alioss/upload',
url:configUrl.APIHOST+'/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
if (that.shopBanner.length < 9) {
if(JSON.parse(uploadFileRes.data).data){
that.shopBanner.push(JSON.parse(uploadFileRes.data).data)
}else{
uni.showToast({
title:'图片上传失败,请重试',
icon:'none'
})
}
}
console.log(that.shopBanner)
uni.hideLoading();
}
});
}
}
})
},
//
removeImg(index) {
this.shopBanner.splice(index, 1)
},
close(e) {
this.imageList.splice(e, 1);
},
chooseMsg() {
//
uni.showActionSheet({
itemList: this.msgContents,
success: res => {
this.sendDate.content = this.msgContents[res.tapIndex];
}
});
},
chooseImg() {
//
uni.chooseImage({
sourceType: ['camera', 'album'],
sizeType: 'compressed',
count: 8 - this.imageList.length,
success: res => {
this.imageList = this.imageList.concat(res.tempFilePaths);
}
});
},
chooseStar(e) {
//
this.sendDate.score = e;
},
previewImage() {
//
uni.previewImage({
urls: this.imageList
});
},
send() {
//
// console.log(this.sendDate,'111111111');
// console.log(this.shopBanner.join(','),'22222222222222222')
if (!this.sendDate.content) {
uni.showToast({
icon: 'none',
title: '请输入评价内容'
});
return;
}
if(!this.shopBanner.length){
uni.showToast({
icon: 'none',
title: '请上传商品评价图'
});
return;
}
this.$queue.showLoading('加载中...');
console.log(this.orderNumber)
this.$Request.postJson('/app/order/insertEvaluate', {
goodsId: this.sendDate.goodsId,
ordersId: this.sendDate.ordersId,
orderNumber: this.sendDate.orderNumber,
evaluateMessage: this.sendDate.content,
score: this.value,
shopId: this.sendDate.shopId,
pictures:this.shopBanner.length>0?this.shopBanner.join(','):[]
}).then(res => {
if (res.code === 0) {
uni.showToast({
title: '评价成功'
});
setTimeout(function() {
uni.navigateBack();
}, 1000);
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '评价失败',
content: res.msg
});
}
});
}
}
};
</script>
<style>
@font-face {
font-family: uniicons;
font-weight: normal;
font-style: normal;
src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
}
page {
background-color: #FFFFFF;
}
view {
font-size: 28upx;
}
.input-view {
font-size: 28upx;
}
.close-view {
text-align: center;
line-height: 14px;
height: 16px;
width: 16px;
border-radius: 50%;
background: #ff5053;
color: #ffffff;
position: absolute;
top: -6px;
right: -4px;
font-size: 12px;
}
/* 上传 */
.uni-uploader {
flex: 1;
flex-direction: column;
}
.uni-uploader-head {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.uni-uploader-info {
color: #b2b2b2;
}
.uni-uploader-body {
margin-top: 16upx;
}
.uni-uploader__files {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.uni-uploader__file {
margin: 10upx;
width: 210upx;
height: 210upx;
}
.uni-uploader__img {
display: block;
width: 210upx;
height: 210upx;
}
.uni-uploader__input-box {
position: relative;
margin: 10upx;
width: 208upx;
height: 208upx;
border: 2upx solid #d9d9d9;
}
.uni-uploader__input-box:before,
.uni-uploader__input-box:after {
content: ' ';
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
background-color: #d9d9d9;
}
.uni-uploader__input-box:before {
width: 4upx;
height: 79upx;
}
.uni-uploader__input-box:after {
width: 79upx;
height: 4upx;
}
.uni-uploader__input-box:active {
border-color: #999999;
}
.uni-uploader__input-box:active:before,
.uni-uploader__input-box:active:after {
background-color: #999999;
}
.uni-uploader__input {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
}
/*问题反馈*/
.feedback-title {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 20upx;
color: #8f8f94;
font-size: 28upx;
}
.feedback-star-view.feedback-title {
justify-content: flex-start;
margin: 0;
}
.feedback-quick {
position: relative;
padding-right: 40upx;
}
.feedback-quick:after {
font-family: uniicons;
font-size: 40upx;
content: '\e581';
position: absolute;
right: 0;
top: 50%;
color: #bbb;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.feedback-body {
font-size: 32upx;
padding: 16upx;
margin: 16upx;
border-radius: 16upx;
background: #F2F2F2;
color: #FFF;
}
.feedback-textare {
height: 200upx;
font-size: 30upx;
line-height: 50upx;
width: 100%;
box-sizing: border-box;
padding: 10upx 0upx 0;
color: #8f8f94;
}
.feedback-input {
font-size: 32upx;
height: 60upx;
padding: 15upx 20upx;
line-height: 60upx;
}
.feedback-uploader {
padding: 22upx 20upx;
}
.feedback-star {
font-family: uniicons;
font-size: 40upx;
margin-left: 6upx;
}
.feedback-star-view {
margin-left: 20upx;
}
.feedback-star:after {
content: '\e408';
}
.feedback-star.active {
color: #ffb400;
}
.feedback-star.active:after {
content: '\e438';
}
.feedback-submit {
background: #007aff;
color: #ffffff;
margin: 20upx;
}
</style>

449
pages/order/feedbacks.vue Normal file
View File

@ -0,0 +1,449 @@
<template>
<view class="page">
<view class="feedback-title">
<text>是否满意</text>
<text @tap="chooseMsg">{{satisfactionFlagName?satisfactionFlagName:'请选择是否满意'}}</text>
</view>
<view class="feedback-body">
<textarea placeholder="请输入你的评价..." v-model="sendDate.content" class="feedback-textare" />
</view>
<!-- <view class="feedback-title"><text>QQ/邮箱</text></view> -->
<!-- <view class="feedback-body"><input class="feedback-input" v-model="sendDate.mail" placeholder="方便我们联系你 " /></view> -->
<!-- <view class="text-white padding bg radius margin-tb-sm">
<view>
<view class="text-lg text-black">评价图可多张</view>
<view class="flex" style="overflow: hidden;flex-wrap: wrap;">
<view>
<view class="margin-top flex margin-right-sm flex-wrap">
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;"
v-for="(image,index) in shopBanner" :key="index">
<image :src="image" style="width: 100%;height: 100%;"></image>
<view style="z-index: 9;position: absolute;top: -15rpx;right: -15rpx;"
@click="removeImg(index)">
<u-icon name="close-circle-fill" color="#2979ff" size="50rpx"></u-icon>
</view>
</view>
<view class="flex"
style="width: 200rpx;height: 200rpx;margin-right: 2rpx;position: relative;" @click="addImages(2)" v-if="shopBanner.length<9">
<view style="width: 200rpx;height: 200rpx;background: #f4f5f6;"
class="flex justify-center align-center">
<view>
<view class="text-center">
<image src="/static/images/addimg.png" style="width: 65rpx;height: 55rpx;">
</image>
</view>
<view class="text-center text-black">添加图片</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</view> -->
<!-- <view class="feedback-title feedback-star-view">
<text>订单评分</text>
<view class="feedback-star-view">
</view>
<u-rate :count="count" min-count='1' active-color="#FCD202" v-model="value"></u-rate>
</view> -->
<button type="primary" style="background: #FCD202;margin-top: 32upx;" class="feedback-submit"
@tap="send">提交</button>
</view>
</template>
<script>
import configUrl from '../../common/config.js'
export default {
data() {
return {
satisfactionFlag:0,
satisfactionFlagName:'满意',
shopBanner: [],
msgContents: ['满意', '不满意'],
stars: [1, 2, 3, 4, 5],
imageList: [],
sendDate: {
score: 5,
content: '',
contact: '',
goodsId: '',
ordersId: '',
orderNumber: '',
shopId: ''
},
count: 5,
value: 5,
goodsId: '',
ordersId: '',
orderNumber: '',
indentNumber:''
};
},
onLoad(e) {
this.indentNumber = e.indentNumber;
// this.sendDate.goodsId = e.goodsId
// this.sendDate.ordersId = e.ordersId
// this.sendDate.orderNumber = e.orderNumber
// this.sendDate.shopId = e.shopId
// let deviceInfo = {
// appid: plus.runtime.appid,
// imei: plus.device.imei, //
// p: plus.os.name === 'Android' ? 'a' : 'i', //iiOSaAndroid
// md: plus.device.model, //
// app_version: plus.runtime.version,
// plus_version: plus.runtime.innerVersion, //
// os: plus.os.version,
// net: '' + plus.networkinfo.getCurrentType()
// };
// this.sendDate = Object.assign(deviceInfo, this.sendDate);
},
methods: {
//
addImages(e) {
let that = this
uni.chooseImage({
count: 9,
sourceType: ['album', 'camera'],
success: res => {
for (let i = 0; i < res.tempFilePaths.length; i++) {
that.$queue.showLoading("上传中...");
uni.uploadFile({ //
// url: that.config("APIHOST1") + '/alioss/upload', //
// url: 'https://tcwm.xianmaxiong.com/sqx_fast/alioss/upload',
url:configUrl.APIHOST+'/alioss/upload',
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
if (that.shopBanner.length < 9) {
if(JSON.parse(uploadFileRes.data).data){
that.shopBanner.push(JSON.parse(uploadFileRes.data).data)
}else{
uni.showToast({
title:'图片上传失败,请重试',
icon:'none'
})
}
}
console.log(that.shopBanner)
uni.hideLoading();
}
});
}
}
})
},
//
removeImg(index) {
this.shopBanner.splice(index, 1)
},
close(e) {
this.imageList.splice(e, 1);
},
chooseMsg() {
//
uni.showActionSheet({
itemList: this.msgContents,
success: res => {
console.log(res.tapIndex)
this.satisfactionFlagName = this.msgContents[res.tapIndex];
this.satisfactionFlag = res.tapIndex;
}
});
},
chooseImg() {
//
uni.chooseImage({
sourceType: ['camera', 'album'],
sizeType: 'compressed',
count: 8 - this.imageList.length,
success: res => {
this.imageList = this.imageList.concat(res.tempFilePaths);
}
});
},
chooseStar(e) {
//
this.sendDate.score = e;
},
previewImage() {
//
uni.previewImage({
urls: this.imageList
});
},
send() {
//
// console.log(this.sendDate,'111111111');
// console.log(this.shopBanner.join(','),'22222222222222222')
if(!this.satisfactionFlagName){
uni.showToast({
icon: 'none',
title: '请选择是否满意'
});
return;
}
if (!this.sendDate.content) {
uni.showToast({
icon: 'none',
title: '请输入评价内容'
});
return;
}
// if(!this.shopBanner.length){
// uni.showToast({
// icon: 'none',
// title: ''
// });
// return;
// }
this.$queue.showLoading('加载中...');
// console.log(this.orderNumber)
this.$Request.postJson('/app/apperrandevaluate/userEvaluate', {
indentNumber: this.indentNumber,
evaluateMessage: this.sendDate.content,
satisfactionFlag: this.satisfactionFlag
}).then(res => {
if (res.code === 0) {
uni.showToast({
title: '评价成功'
});
setTimeout(function() {
uni.navigateBack();
}, 1000);
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '评价失败',
content: res.msg
});
}
});
}
}
};
</script>
<style>
@font-face {
font-family: uniicons;
font-weight: normal;
font-style: normal;
src: url('https://img-cdn-qiniu.dcloud.net.cn/fonts/uni.ttf') format('truetype');
}
page {
background-color: #FFFFFF;
}
view {
font-size: 28upx;
}
.input-view {
font-size: 28upx;
}
.close-view {
text-align: center;
line-height: 14px;
height: 16px;
width: 16px;
border-radius: 50%;
background: #ff5053;
color: #ffffff;
position: absolute;
top: -6px;
right: -4px;
font-size: 12px;
}
/* 上传 */
.uni-uploader {
flex: 1;
flex-direction: column;
}
.uni-uploader-head {
display: flex;
flex-direction: row;
justify-content: space-between;
}
.uni-uploader-info {
color: #b2b2b2;
}
.uni-uploader-body {
margin-top: 16upx;
}
.uni-uploader__files {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.uni-uploader__file {
margin: 10upx;
width: 210upx;
height: 210upx;
}
.uni-uploader__img {
display: block;
width: 210upx;
height: 210upx;
}
.uni-uploader__input-box {
position: relative;
margin: 10upx;
width: 208upx;
height: 208upx;
border: 2upx solid #d9d9d9;
}
.uni-uploader__input-box:before,
.uni-uploader__input-box:after {
content: ' ';
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
background-color: #d9d9d9;
}
.uni-uploader__input-box:before {
width: 4upx;
height: 79upx;
}
.uni-uploader__input-box:after {
width: 79upx;
height: 4upx;
}
.uni-uploader__input-box:active {
border-color: #999999;
}
.uni-uploader__input-box:active:before,
.uni-uploader__input-box:active:after {
background-color: #999999;
}
.uni-uploader__input {
position: absolute;
z-index: 1;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
}
/*问题反馈*/
.feedback-title {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
padding: 20upx;
color: #333333;
font-size: 28upx;
}
.feedback-star-view.feedback-title {
justify-content: flex-start;
margin: 0;
}
.feedback-quick {
position: relative;
padding-right: 40upx;
}
.feedback-quick:after {
font-family: uniicons;
font-size: 40upx;
content: '\e581';
position: absolute;
right: 0;
top: 50%;
color: #bbb;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.feedback-body {
font-size: 32upx;
padding: 16upx;
margin: 16upx;
border-radius: 16upx;
background: #F2F2F2;
color: #FFF;
}
.feedback-textare {
height: 200upx;
font-size: 30upx;
line-height: 50upx;
width: 100%;
box-sizing: border-box;
padding: 10upx 0upx 0;
color: #8f8f94;
}
.feedback-input {
font-size: 32upx;
height: 60upx;
padding: 15upx 20upx;
line-height: 60upx;
}
.feedback-uploader {
padding: 22upx 20upx;
}
.feedback-star {
font-family: uniicons;
font-size: 40upx;
margin-left: 6upx;
}
.feedback-star-view {
margin-left: 20upx;
}
.feedback-star:after {
content: '\e408';
}
.feedback-star.active {
color: #ffb400;
}
.feedback-star.active:after {
content: '\e438';
}
.feedback-submit {
background: #007aff;
color: #ffffff;
margin: 20upx;
}
</style>

1511
pages/order/index.vue Normal file

File diff suppressed because it is too large Load Diff

205
pages/order/paotuiMap.vue Normal file
View File

@ -0,0 +1,205 @@
<template>
<view v-if="XCXIsSelect=='是'">
<map id="map" style="width: 100%; height: 700px;" :latitude="latitude" :longitude="longitude" :markers="markers"
:show-location="true">
</map>
<cover-view class="controls-title">
<cover-view class="tabs_box">
<cover-image class="pay_img" src="../../static/images/order/avatar.png"></cover-image>
<cover-view class="flex flex-sub margin-left-sm flex-direction justify-between">
<cover-view class="pay_name">骑手预计{{rider.mDateTime[1]}}送达</cover-view>
<cover-view class="text-gray margin-top" style="margin-top: 5rpx;">
距离您{{rider.aDouble}}
</cover-view>
</cover-view>
<cover-view class="flex">
<cover-image class="pay_img1 margin-right" @click="goNav" src="../../static/images/order/im.png"></cover-image>
<cover-image class="pay_img1" @click="call" src="../../static/images/order/phone.png"></cover-image>
</cover-view>
</cover-view>
</cover-view>
</view>
</template>
<script>
export default {
data() {
return {
latitude: '',
longitude: '',
markers: [], //
indentNumber: '',
riderUserId: '',
orderDetails: {},
rider: {},
timer: '',
XCXIsSelect: '是',
}
},
onLoad(option) {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
if (this.XCXIsSelect == '否') {
this.getGuize()
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '地图'
});
}
let that = this
that.indentNumber = option.indentNumber
that.getData()
},
onShow() {
let that = this
this.timer = setInterval(function() {
that.getLocation()
}, 10000)
},
onHide() {
console.log(this.timer,'定时器')
clearInterval(this.timer)
},
methods: {
getData() {
this.$Request.postT('/app/tbindent/userIndentMessage?indentNumber=' + this.indentNumber).then(res => {
console.log(res)
if (res.code == 0) {
this.orderDetails = res.data
console.log(this.orderDetails.avatar)
let marker = {
id: 1,
latitude: res.data.userLat,
longitude: res.data.userLng,
iconPath: '../../static/images/order/01.png',
width: '40',
height: '40'
}
this.markers.push(marker)
this.riderUserId = this.orderDetails.riderUserId
this.getLocation()
console.log(this.markers)
}
});
},
getLocation() {
let data = {
riderUserId: this.riderUserId,
lat: this.orderDetails.userLat,
lng: this.orderDetails.userLng
}
this.$Request.getT('/timedtask/selectRiderLocation', data).then(res => {
if (res.code === 0) {
this.latitude = res.data.riderLocation.lat;
this.longitude = res.data.riderLocation.lng;
this.rider = res.data
this.rider.mDateTime = res.data.mDateTime.split(' ')
if (this.rider.aDouble > 1000) {
this.rider.aDouble = Number((this.rider.aDouble / 1000)).toFixed(2)+"km"
}else{
if(this.rider.aDouble==0){
this.rider.aDouble = "0m";
}else{
this.rider.aDouble = Number(this.rider.aDouble).toFixed(1) +"m";
}
}
let marker = {
id: 2,
latitude: res.data.riderLocation.lat,
longitude: res.data.riderLocation.lng,
iconPath: '../../static/images/order/rider.png',
width: '40',
height: '40',
}
this.markers.push(marker)
}
});
},
call() {
uni.makePhoneCall({
phoneNumber: this.orderDetails.phone
});
},
goNav() {
uni.navigateTo({
url: '/pageA/kefu/kefu'
})
}
},
}
</script>
<style>
.controls-title {
width: 90%;
/* height: 220upx; */
/* line-height: 220upx; */
background: #FFFFFF;
position: fixed;
bottom: 0rpx;
margin: 40upx;
border-radius: 26upx;
box-shadow: 0upx 30upx 40upx 0upx rgba(187, 170, 163, 0.20);
/* margin: 0 40rpx; */
margin-bottom: 50rpx;
}
.tabs_box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx;
margin: 20rpx;
}
.pay_tit {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.pay_img {
width: 100rpx;
height: 100rpx;
border-radius: 10rpx;
}
.pay_img1 {
width: 60rpx;
height: 60rpx;
border-radius: 10rpx;
}
.tabs_bottom {
margin: 0 20rpx 20rpx;
display: flex;
}
.pay_btn {
padding: 5rpx 16rpx;
border: solid 2rpx #999999;
margin-right: 20rpx;
display: flex;
align-items: center;
border-radius: 10rpx;
}
.pay_name {
font-size: 32rpx;
font-weight: bold;
}
.pay_line {
height: 2rpx;
background-color: #afafaf;
margin: 10rpx 0;
}
</style>

623
pages/order/takefood.vue Normal file
View File

@ -0,0 +1,623 @@
<template>
<view class="pages" v-if="XCXIsSelect=='是'">
<!-- 余额 -->
<view class="tosend" v-if="dataDet">
<view class="tosend_text" v-if="dataDet.status == 3&&dataDet.orderType==1">待取餐</view>
<view class="tosend_text" v-if="dataDet.status == 3&&dataDet.orderType==2">配送中</view>
<view class="tosend_text" v-if="dataDet.status == 4">已完成</view>
<view class="tosend_text" v-if="dataDet.status == 5">已取消</view>
<view class="tosend_text" v-if="dataDet.status == 6">制作中</view>
<view class="tosend_text" v-if="dataDet.status == 7">待接单</view>
<view class="tosend_text" v-if="dataDet.status == 8">已取消</view>
<view class="flex justify-center" v-if="dataDet.orderType==1" style="width: 100%;height: 140rpx;margin-bottom: 30rpx;">
<view class="flex justify-center" style="width: 94%;height: 100%;border-radius: 18rpx;background-color: #ffffff;padding: 3%;">
<view class="flex justify-between align-center" style="width: 100%;height: 100%;">
<image :src="shopInfo.shopCover?shopInfo.shopCover:'../../static/logo.png'" style="width: 110rpx;height: 110rpx;border-radius: 8rpx;" mode=""></image>
<view class="flex flex-wrap align-center" style="width: 80%;height: 100%;">
<view class="" style="width: 100%;font-size: 30rpx;" @click="call">
<text style="font-weight: bold;">{{shopInfo.shopName?shopInfo.shopName:''}}</text>
<text style="margin-left: 10rpx;font-weight: bold;">{{shopInfo.phones?shopInfo.phones:''}}</text>
<u-icon name="phone" size="30" color="#999999" style=""></u-icon>
</view>
<view class="flex align-center" style="width: 100%;color: #999999;font-size: 24rpx;" @click="goMaps">
<u-icon name="map" size="30" color="#999999" style="margin-right: 10rpx;"></u-icon>
{{shopInfo.detailedAddress?shopInfo.detailedAddress:''}}
</view>
</view>
</view>
</view>
</view>
<view class="tosend_header">
<!-- 排序 -->
<view class="cont_two_top" v-if="dataDet.status == 3&&dataDet.orderType==1">
<view class="cont_two_top_le">取餐号码</view>
<!-- <view class="cont_two_top_ri">制作中</view> -->
</view>
<view v-if="dataDet.status == 3&&dataDet.orderType==1" class="cont_two_text">{{dataDet.orderCode}}
</view>
<view v-if="dataDet.status == 3&&dataDet.orderType==1" class="cont_two_text2">
前面还有<text>{{dataDet.countOrder}}</text>个订单</view>
<!-- 商品列表 -->
<view v-if="dataDet" class="tosend_header_food" v-for="(item,index) in dataDet.orderGoodsList"
:key='index'>
<view class="tosend_header_food_le">
<image :src="item.goodsPicture[0]" style="border-radius: 10rpx;" mode=""></image>
</view>
<view class="flex-sub margin-left-sm">
<view class="flex justify-between align-center">
<view class="text-lg text-bold text-black">{{item.goodsName}}</view>
<view class="text-lg text-bold text-black"><text class="text-sm">¥</text>{{item.goodsPrice}}
</view>
</view>
<view class="flex justify-between align-center text-gray">
<view v-if="item.skuMessage">{{item.skuMessage}}</view>
<view>X{{item.goodsNum}}</view>
</view>
<view class="flex justify-between align-center text-gray" v-if="item.goodsPack">
<view>打包费</view>
<view>{{item.goodsPack}} / </view>
</view>
</view>
</view>
<view class="tosend_header_do " v-if="dataDet.couponMoney>0">
<view>优惠券</view>
<view class="tosend_header_do_ri">-{{dataDet.couponMoney}}</view>
</view>
<view class="tosend_header_do do_bot" v-if="dataDet.errandMoney>0&&dataDet.orderType==2">
<view>跑腿费</view>
<view class="tosend_header_do_ri">{{dataDet.errandMoney}}</view>
</view>
<view class="tosend_header_do">
<view class="tosend_header_do_le2">实付</view>
<view class="tosend_header_do_ri2"><text></text>{{dataDet.payMoney}}</view>
</view>
</view>
<view class="text-center" v-if="dataDet">
<map v-if="dataDet.status == 3 && latitude && longitude" id="map" @tap="goMap"
style="width: 95%; height: 300rpx;margin: 20rpx auto 0;" :markers="markers" :latitude="latitude"
:longitude="longitude"></map>
</view>
<!-- 骑手信息 -->
<view class="rider_box" v-if="dataDet&&(dataDet.status == 3||dataDet.status == 4)&&dataDet.riderUserId">
<view class="flex justify-between align-center padding">
<view style="font-size: 31rpx;color: black;">联系骑手</view>
<image @click="complaint" src="../../static/images/order/tousu.png"
style="width: 43rpx;height: 39rpx;" mode=""></image>
</view>
<view>
<u-line color="#F2F2F2" />
</view>
<view style="padding: 20rpx 25rpx;display: flex;justify-content: space-between;align-items: center;">
<view style="display: flex;">
<view class="rider_left">
<image :src="dataDet.riderAvatar"></image>
</view>
<view style="margin-left: 10rpx;color: #333333;">
<view>{{dataDet.riderUserName}}</view>
<view>{{dataDet.riderPhone1}}</view>
</view>
</view>
<view class="phone" @click="bindphone(dataDet.riderPhone)">联系TA</view>
</view>
</view>
<!-- 其他信息 -->
<view class="tosend_cont" v-if="dataDet">
<view class="tosend_header_text">
<text>订单信息</text>
</view>
<view class="tosend_cont_infor" v-if="dataDet.orderType==1">
<view class="tosend_cont_infor_le">取餐号码</view>
<view class="tosend_cont_infor_ri">{{dataDet.orderCode}}</view>
</view>
<view class="tosend_cont_infor">
<view class="tosend_cont_infor_le">订单编号</view>
<view class="tosend_cont_infor_ri">{{dataDet.orderNumber}}
<u-icon @click="copy(dataDet.orderNumber)" name="order" style="margin-left: 6rpx;" size="32">
</u-icon>
</view>
</view>
<view class="tosend_cont_infor">
<view class="tosend_cont_infor_le">下单时间</view>
<view class="tosend_cont_infor_ri">{{dataDet.payTime}}</view>
</view>
<view class="tosend_cont_infor">
<view class="tosend_cont_infor_le">支付方式</view>
<view class="tosend_cont_infor_ri" v-if="dataDet.payType==1">微信支付</view>
<view class="tosend_cont_infor_ri" v-if="dataDet.payType==2">余额支付</view>
</view>
<view class="tosend_cont_infor" v-if="dataDet.orderType==2">
<view class="tosend_cont_infor_le">联系人</view>
<view class="tosend_cont_infor_ri">{{dataDet.address.userName}}</view>
</view>
<view class="tosend_cont_infor" v-if="dataDet.orderType==2">
<view class="tosend_cont_infor_le">联系方式</view>
<view class="tosend_cont_infor_ri">{{dataDet.address.userPhone}}</view>
</view>
<view class="tosend_cont_infor" v-if="dataDet.orderType==2">
<view class="tosend_cont_infor_le">详细地址</view>
<view class="tosend_cont_infor_ri">
{{dataDet.address.province}}{{dataDet.address.city}}{{dataDet.address.district}}{{dataDet.address.addressDetail}}
</view>
</view>
<view class="tosend_cont_infor" v-if="dataDet.remark">
<view class="tosend_cont_infor_le">订单备注</view>
<view class="tosend_cont_infor_ri">
{{dataDet.remark}}
</view>
</view>
</view>
</view>
<view style="width: 100rpx;height: 100rpx;position: fixed;bottom: 100rpx;right: 70rpx;" v-if="dataDet">
<image src="../../static/images/order/kefu.png" style="width: 100%;height: 100%;" @click="goChat()" mode="">
</image>
<view class="shopxiaoix" v-if="RiderUnreadCount>0">{{RiderUnreadCount}}</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
orderId: '',
dataDet: '',
markers: [], //
latitude: '',
longitude: '',
RiderUnreadCount: 0,
XCXIsSelect: '是',
shopId:'',
shopInfo:{},
}
},
onLoad(option) {
this.XCXIsSelect = this.$queue.getData('XCXIsSelect');
if (this.XCXIsSelect == '否') {
uni.setNavigationBarTitle({
title: '隐私政策'
});
} else {
uni.setNavigationBarTitle({
title: '订单详情'
});
}
let that = this
uni.showLoading({
title: '加载中...'
})
that.orderId = option.orderId
that.shopId = option.shopId
uni.getLocation({
type: 'gcj02', //uni.openLocation
success: function(res) {
that.lat = res.latitude;
that.lng = res.longitude;
that.getDataDet()
},fail(e) {
uni.hideLoading();
uni.showModal({
title: '温馨提示',
content: '您的定位权限未开启,请开启后再来操作吧!',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if(res.confirm){
uni.openSetting({ //
success(rea) {
console.log(rea.authSetting)
}
});
}
}
});
}
});
this.getRiderUnreadCount()
this.getShopInfo()
},
created() {
this.RiderUnreadCount = setInterval(() => {
this.getRiderUnreadCount()
}, 5000)
},
methods: {
//
goMaps() {
let that = this;
let lati = parseFloat(that.shopInfo.shopLat);
let longi = parseFloat(that.shopInfo.shopLng);
uni.authorize({
scope: 'scope.userLocation',
success(res) {
uni.openLocation({
name: that.shopInfo.shopName,
latitude: lati,
longitude: longi,
success: function() {}
});
},
fail(err) {}
});
},
//
call() {
uni.makePhoneCall({
phoneNumber: this.shopInfo.phone
});
},
//
getShopInfo(){
let data ={
shopId:this.shopId
}
this.$Request.get("/app/shop/selectShopMessage", data).then(res => {
if(res.code == 0 && res.data){
this.shopInfo = res.data
let phoneNumber = this.shopInfo.phone.toString() //
this.shopInfo.phones = phoneNumber.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2')
}
})
},
getDataDet() {
let data = {
orderId: this.orderId
}
this.$Request.get("/app/order/selectOrderById", data).then(res => {
uni.hideLoading()
if (res.code == 0) {
this.dataDet = res.data
// this.dataDet.goodsMessage = JSON.parse(this.dataDet.goodsMessage)
this.dataDet.orderCode = this.dataDet.orderCode.substring(this.dataDet.orderCode.length -
3, this.dataDet.orderCode.length)
this.dataDet.orderGoodsList.forEach(res => {
res.goodsPicture = res.goodsPicture.split(',')
})
if (this.dataDet.riderPhone) {
this.dataDet.riderPhone1 = this.dataDet.riderPhone.substring(0, 3) + "****" + this
.dataDet.riderPhone.substring(7, 11);
}
this.dataDet.address = this.dataDet.address ? JSON.parse(this.dataDet.address) : ''
console.log(this.dataDet.address)
if (this.dataDet.riderUserId) {
this.getLocation(this.dataDet.riderUserId)
}
}
});
},
goChat() {
uni.navigateTo({
url: '/pages/index/shop/im?ordersId=' + this.orderId
})
},
getLocation(e) {
let data = {
riderUserId: e,
lat: this.lat,
lng: this.lng
}
this.$Request.getT('/timedtask/selectRiderLocation', data).then(res => {
if (res.code === 0) {
console.log(res.data, '经纬度')
this.latitude = res.data.riderLocation.lat;
this.longitude = res.data.riderLocation.lng;
this.markers = [{
id: 1,
latitude: res.data.riderLocation.lat,
longitude: res.data.riderLocation.lng,
iconPath: '../../static/images/order/rider.png',
width: '40',
height: '40'
}]
}
});
},
goMap() {
uni.navigateTo({
url: '/pages/order/waimaiMap?orderId=' + this.orderId
})
},
//
bindphone(e) {
console.log(e)
uni.makePhoneCall({
phoneNumber: e
});
},
complaint() {
uni.navigateTo({
url: '/pages/order/complaint/complaint?indentNumber=' + this.dataDet.indentNumber +
'&indentType=5'
})
},
copy(e) {
uni.setClipboardData({
data: e,
success: () => {
uni.showToast({
title: '复制成功'
})
}
})
},
getRiderUnreadCount() {
let that = this
let data = {
ordersId: that.orderId
}
that.$Request.getT("/app/ordersChat/selectUserUnreadCount", data).then(res => {
if (res.code == 0) {
if (res.data > 0) {
if (that.RiderUnreadCount != res.data) {
that.aplayAudio()
that.RiderUnreadCount = res.data
}
} else {
that.RiderUnreadCount = 0
}
}
});
},
//
aplayAudio() {
// const audio = document.getElementById('audio')
// audio.play()
// console.log('')
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.autoplay = true;
innerAudioContext.src =
'https://pw.xianmxkj.com/file/uploadPath/2022/01/19/0753211f78d718d44ee6372e33eae9ee.mp3';
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.log(res.errMsg);
console.log(res.errCode);
});
},
}
}
</script>
<style scoped>
/* 余额 */
.tosend {
width: 100%;
height: 280rpx;
background: -webkit-linear-gradient(top, #FCD202, #F5F5F5);
}
.tosend_text {
padding: 3% 3% 4%;
font-size: 48rpx;
font-weight: 800;
color: #333333;
}
.tosend_header {
width: 94%;
background-color: #FFFFFF;
margin: 0 auto;
border-radius: 18rpx;
padding: 3%;
}
/* 排序 */
.cont_two_top {
width: 100%;
display: flex;
justify-content: space-between;
}
.cont_two_top_le {
font-size: 30rpx;
font-weight: 500;
color: #333333;
}
.cont_two_top_ri {
padding: 6rpx 10rpx;
text-align: center;
background: rgba(255, 19, 10, 0.2);
font-size: 24rpx;
border: 2rpx solid #FF130A;
color: #FF130A;
opacity: 0.6;
border-radius: 8rpx;
}
.cont_two_text {
font-size: 56rpx;
text-align: center;
font-weight: bold;
color: #333333;
margin: 5% 0;
line-height: 32rpx;
}
.cont_two_text2 {
font-size: 30rpx;
width: 100%;
font-weight: 500;
color: #333333;
text-align: center;
padding-bottom: 4%;
line-height: 32rpx;
border-bottom: 1rpx solid #E6E6E6;
}
.cont_two_text2 text {
color: #FF130A;
}
/* 商品列表 */
.tosend_header_text {
font-weight: 800;
color: #333333;
line-height: 2;
font-size: 30rpx;
display: flex;
justify-content: space-between;
}
.tosend_header_food {
width: 100%;
display: flex;
margin-top: 3%;
}
.tosend_header_food_le {
width: 15%;
}
.tosend_header_food_le image {
width: 110rpx;
height: 110rpx;
}
.tosend_header_food_ce {
margin: 0 0 0 4%;
width: 57%;
}
.tosend_header_food_ri {
text-align: right;
width: 25%;
}
.tosend_header_food_text {
font-size: 34rpx;
font-weight: 500;
color: #333333;
line-height: 1.8;
}
.tosend_header_food_text text {
font-size: 25rpx;
}
.tosend_header_food_text2 {
font-size: 30rpx;
font-weight: 500;
color: #999999;
}
.do_top {
padding-top: 3%;
}
.do_bot {
padding-bottom: 3%;
border-bottom: 2rpx solid #E6E6E6;
}
.tosend_header_do {
width: 100%;
color: #333333;
font-size: 30rpx;
display: flex;
line-height: 1.5;
}
.tosend_header_do view {
flex: 1;
}
.tosend_header_do_ri {
text-align: right;
}
.tosend_header_do_le2 {
font-family: PingFang SC;
font-weight: 500;
color: #999999;
padding-top: 1.5%;
}
.tosend_header_do_ri2 {
text-align: right;
color: #EA0000;
font-size: 40rpx;
}
.tosend_header_do_ri2 text {
font-size: 30rpx;
}
/* 其他信息 */
.tosend_cont {
width: 94%;
background-color: #FFFFFF;
margin: 3% auto;
border-radius: 18rpx;
padding: 3%;
}
.tosend_cont_infor {
display: flex;
margin-top: 3%;
}
.tosend_cont_infor_le {
flex: 1;
color: #999999;
}
.tosend_cont_infor_ri {
flex: 2;
text-align: right;
color: #333333;
}
.tosend_cont_text {
text-align: right;
}
/* 联系骑手 */
.rider_box {
width: 95%;
margin: 0 auto;
background: #ffffff;
margin-top: 20rpx;
border-radius: 10rpx;
}
.rider_left image {
width: 80rpx;
height: 85rpx;
border-radius: 60%;
}
.phone {
background: #FD6416;
color: #ffffff;
padding: 8rpx 15rpx;
border-radius: 13rpx;
font-size: 24rpx;
}
.shopxiaoix {
background: red;
color: #ffffff;
width: auto;
padding: 5rpx 12rpx;
height: auto;
text-align: center;
border-radius: 30rpx;
position: absolute;
top: -4rpx;
right: -4rpx;
}
</style>

216
pages/order/waimaiMap.vue Normal file
View File

@ -0,0 +1,216 @@
<template>
<view>
<map id="map" style="width: 100%; height: 700px;" :latitude="latitude" :longitude="longitude" :markers="markers"
:show-location="true">
</map>
<cover-view class="controls-title">
<cover-view class="tabs_box">
<cover-image class="pay_img" src="../../static/images/order/avatar.png"></cover-image>
<cover-view class="flex flex-sub margin-left-sm flex-direction justify-between">
<cover-view class="pay_name">骑手预计{{rider.mDateTime[1]}}送达</cover-view>
<cover-view class="text-gray margin-top" style="margin-top: 5rpx;">
距离您{{rider.aDouble}}
</cover-view>
</cover-view>
<cover-view class="flex">
<cover-image class="pay_img1 margin-right" @click="goNav" src="../../static/images/order/im.png"></cover-image>
<cover-image class="pay_img1" @click="call" src="../../static/images/order/phone.png"></cover-image>
</cover-view>
</cover-view>
</cover-view>
</view>
</template>
<script>
export default {
data() {
return {
latitude: '',
longitude: '',
markers: [], //
orderId: '',
riderUserId: '',
orderDetails: {},
rider: {},
timer: '',
lat: '',
lng: '',
}
},
onLoad(option) {
let that = this
that.orderId = option.orderId
uni.getLocation({
type: 'gcj02', //uni.openLocation
success: function(res) {
that.lat = res.latitude;
that.lng = res.longitude;
that.getData()
},fail(e) {
uni.hideLoading();
uni.showModal({
title: '温馨提示',
content: '您的定位权限未开启,请开启后再来操作吧!',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if(res.confirm){
uni.openSetting({ //
success(rea) {
console.log(rea.authSetting)
}
});
}
}
});
}
});
},
onShow() {
let that = this
that.timer = setInterval(function() {
that.getLocation()
}, 10000)
},
onHide() {
console.log(this.timer,'定时器')
clearInterval(this.timer)
},
onBackPress(e){
console.log("监听返回按钮事件",this.timer);
clearInterval(this.timer)
// returntrue
return true;
},
methods: {
getData() {
this.$Request.get('/app/order/selectOrderById?orderId=' + this.orderId).then(res => {
console.log(res)
if (res.code == 0) {
this.orderDetails = res.data
this.riderUserId = res.data.riderUserId
this.getLocation()
// console.log(this.markers)
}
});
},
getLocation() {
let data = {
riderUserId: this.riderUserId,
lat: this.lat,
lng: this.lng
}
this.$Request.getT('/timedtask/selectRiderLocation', data).then(res => {
if (res.code === 0) {
this.latitude = res.data.riderLocation.lat;
this.longitude = res.data.riderLocation.lng;
this.rider = res.data
this.rider.mDateTime = res.data.mDateTime.split(' ')
if (this.rider.aDouble > 1000) {
this.rider.aDouble = Number((this.rider.aDouble / 1000)).toFixed(2)+"km"
}else{
if(this.rider.aDouble==0){
this.rider.aDouble = "0m";
}else{
this.rider.aDouble = Number(this.rider.aDouble).toFixed(1) +"m";
}
}
let marker = {
id: 2,
latitude: res.data.riderLocation.lat,
longitude: res.data.riderLocation.lng,
iconPath: '../../static/images/order/rider.png',
width: '40',
height: '40',
}
this.markers.push(marker)
}
});
},
call() {
uni.makePhoneCall({
phoneNumber: this.orderDetails.riderPhone
});
},
goNav() {
uni.navigateTo({
url: '/my/setting/chat'
})
}
},
}
</script>
<style>
.controls-title {
width: 90%;
/* height: 220upx; */
/* line-height: 220upx; */
background: #FFFFFF;
position: fixed;
bottom: 0rpx;
margin: 40upx;
border-radius: 26upx;
box-shadow: 0upx 30upx 40upx 0upx rgba(187, 170, 163, 0.20);
/* margin: 0 40rpx; */
margin-bottom: 50rpx;
}
.tabs_box {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10rpx;
margin: 20rpx;
}
.pay_tit {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.pay_img {
width: 100rpx;
height: 100rpx;
border-radius: 10rpx;
}
.pay_img1 {
width: 60rpx;
height: 60rpx;
border-radius: 10rpx;
}
.tabs_bottom {
margin: 0 20rpx 20rpx;
display: flex;
}
.pay_btn {
padding: 5rpx 16rpx;
border: solid 2rpx #999999;
margin-right: 20rpx;
display: flex;
align-items: center;
border-radius: 10rpx;
}
.pay_name {
font-size: 32rpx;
font-weight: bold;
}
.pay_line {
height: 2rpx;
background-color: #afafaf;
margin: 10rpx 0;
}
</style>

163
pages/public/bind.vue Normal file
View File

@ -0,0 +1,163 @@
<template>
<view class="container">
<view class="cu-form-group" style="margin: 30upx;border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<view class="title">手机号</view>
<input type="number" :value="mobile" placeholder="请输入手机号" maxlength="11" data-key="mobile" @input="inputChange" />
</view>
<view class="cu-form-group" style="margin: 30upx;border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title">验证码</text>
<input type="number" :value="code" placeholder="请输入验证码" maxlength="6" data-key="code" @input="inputChange"
@confirm="toLogin" />
<button class="send-msg" @click="sendMsg" :disabled="sending">{{ sendTime }}</button>
</view>
<button class="confirm-btn" @click="toLogin" :disabled="logining">立即换绑</button>
</view>
</view>
</template>
<script>
import listCell from '@/components/com-input';
export default {
components: {
listCell
},
data() {
return {
mobile: '',
code: '',
logining: false,
sending: false,
sendTime: '获取验证码',
count: 60,
}
},
methods: {
inputChange(e) {
const key = e.currentTarget.dataset.key;
this[key] = e.detail.value;
},
navBack() {
uni.navigateBack();
},
countDown() {
const {
count
} = this;
if (count === 1) {
this.count = 60;
this.sending = false;
this.sendTime = '获取验证码'
} else {
this.count = count - 1;
this.sending = true;
this.sendTime = count - 1 + '秒后重新获取';
setTimeout(this.countDown.bind(this), 1000);
}
},
sendMsg() {
const {
mobile
} = this;
if (!mobile) {
this.$queue.showToast("请输入手机号");
} else if (mobile.length !== 11) {
this.$queue.showToast("请输入正确的手机号");
} else {
this.$queue.showLoading("正在发送验证码...");
this.$Request.getT('/appLogin/sendMsg/' + mobile + '/bind').then(res => {
if (res.code === 0) {
this.sending = true;
this.$queue.showToast('验证码发送成功请注意查收');
this.countDown();
uni.hideLoading();
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '短信发送失败',
content: res.msg ? res.msg : '请一分钟后再获取验证码'
});
}
});
}
},
toLogin() {
const {
mobile,
code
} = this;
let userId = this.$queue.getData("userId");
if (!mobile) {
this.$queue.showToast("请输入手机号");
} else if (mobile.length !== 11) {
this.$queue.showToast("请输入正确的手机号");
} else if (!code) {
this.$queue.showToast("请输入验证码");
} else {
this.$queue.showLoading("正在绑定中...");
this.$Request.postT("/app/updatePhone?msg=" + code + "&phone=" + mobile + "&userId=" + userId).then(res => {
if (res.code === 0) {
this.$queue.setData("mobile", mobile);
this.$queue.showToast('修改成功');
uni.switchTab({
url: '/pages/my/index'
});
} else {
uni.showModal({
showCancel: false,
title: '绑定失败',
content: res.msg,
});
}
uni.hideLoading();
});
}
},
},
}
</script>
<style lang='scss'>
.send-msg {
border-radius: 30px;
color: white;
height: 30px;
font-size: 14px;
line-height: 30px;
background: #e10a07;
}
.container {
top: 0;
padding-top: 32upx;
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
background: #111224;
}
.confirm-btn {
width: 600upx;
height: 80upx;
line-height: 80upx;
border-radius: 60upx;
margin-top: 32upx;
background: #5E81F9;
color: #fff;
font-size: 32upx;
&:after {
border-radius: 60px;
}
}
</style>

93
pages/public/css/main.css Normal file
View File

@ -0,0 +1,93 @@
.content {
display: flex;
flex-direction: column;
justify-content:center;
/* margin-top: 128upx; */
}
/* 头部 logo */
.header {
text-align: center;
width:161upx;
height:161upx;
box-shadow:0upx 0upx 60upx 0upx rgba(0,0,0,0.1);
border-radius:50%;
background: -moz-linear-gradient(left, #F15B6C, #e10a07 100%);
background: -webkit-gradient(linear, left top, left right, color-stop(0, #F15B6C), color-stop(100%, #e10a07));
background: -webkit-linear-gradient(left, #F15B6C 0, #e10a07 100%);
background: -o-linear-gradient(left, #F15B6C 0, #e10a07 100%);
background: -ms-linear-gradient(left, #F15B6C 0, #e10a07 100%);
background: linear-gradient(to left, #F15B6C 0, #e10a07 100%);
margin-top: 180upx;
margin-bottom: 72upx;
font-size: 60upx;
color: white;
font-weight: bold;
padding-top: 32upx;
margin-left: auto;
margin-right: auto;
}
.header image{
width:161upx;
height:161upx;
border-radius:50%;
}
/* 主体 */
.main {
display: flex;
flex-direction: column;
padding-left: 70upx;
padding-right: 70upx;
}
.tips {
color: #999999;
font-size: 28upx;
margin-top: 64upx;
margin-left: 48upx;
}
/* 其他登录方式 */
.other_login{
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
margin-top: 256upx;
text-align: center;
}
.login_icon{
border: none;
font-size: 64upx;
margin: 0 64upx 0 64upx;
color: rgba(0,0,0,0.7)
}
.wechat_color{
color: #83DC42;
}
.weibo_color{
color: #F9221D;
}
.github_color{
color: #24292E;
}
/* 底部 */
.footer{
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
font-size: 28upx;
margin-top: 64upx;
color: rgba(0,0,0,0.7);
text-align: center;
height: 40upx;
line-height: 40upx;
}
.footer text{
font-size: 24upx;
margin-left: 15upx;
margin-right: 15upx;
}

189
pages/public/forgetPwd.vue Normal file
View File

@ -0,0 +1,189 @@
<template>
<view class="container">
<view class="wrapper">
<view class="input-content">
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<view class="title text-black">手机号</view>
<input type="number" :value="phone" placeholder="请输入手机号" maxlength="11" data-key="phone" @input="inputChange" />
</view>
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title text-black">验证码</text>
<input type="number" :value="code" placeholder="请输入验证码" maxlength="6" data-key="code" @input="inputChange"
@confirm="toLogin" />
<button class="send-msg" @click="sendMsg" :disabled="sending">{{sendTime}}</button>
</view>
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title text-black">设置密码</text>
<input type="password" :value="password" placeholder="请设置新密码" placeholder-class="input-empty" maxlength="20"
minlength="6" data-key="password" @input="inputChange" @confirm="toLogin" />
</view>
</view>
<button class="confirm-btn" @click="toLogin">立即找回</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
code: '',
phone: '',
password: '',
sending: false,
sendTime: '获取验证码',
count: 60,
logining: false
}
},
methods: {
sendMsg() {
const {
phone
} = this;
if (!phone) {
this.$queue.showToast("请输入手机号");
} else if (phone.length !== 11) {
this.$queue.showToast("请输入正确的手机号");
} else {
this.$queue.showLoading("正在发送验证码...");
this.$Request.getT("/app/Login/sendMsg/" + phone + "/forget").then(res => {
if (res.code === 0) {
this.sending = true;
this.$queue.showToast('验证码发送成功请注意查收');
this.countDown();
uni.hideLoading();
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '短信发送失败',
content: res.msg ? res.msg : '请一分钟后再获取验证码'
});
}
});
}
},
countDown() {
const {
count
} = this;
if (count === 1) {
this.count = 60;
this.sending = false;
this.sendTime = '获取验证码'
} else {
this.count = count - 1;
this.sending = true;
this.sendTime = count - 1 + '秒后重新获取';
setTimeout(this.countDown.bind(this), 1000);
}
},
inputChange(e) {
const key = e.currentTarget.dataset.key;
this[key] = e.detail.value;
},
navBack() {
uni.navigateBack();
},
navTo(url) {
uni.navigateTo({
url
})
},
toLogin() {
const {
phone,
password,
code
} = this;
if (!phone) {
this.$queue.showToast("请输入手机号");
} else if (!password) {
this.$queue.showToast("请设置密码");
} else if (password.length < 6) {
this.$queue.showToast("密码位数必须大于六位");
} else {
this.logining = true;
this.$queue.showLoading("正在修改密码中...");
this.$Request.post("/app/Login/forgetPwd", {
pwd: password,
phone: phone,
msg: code
}).then(res => {
uni.hideLoading();
if (res.code === 0) {
uni.navigateTo({
url: '/pages/public/loginphone'
});
} else {
uni.showModal({
showCancel: false,
title: '密码找回失败',
content: res.msg,
});
}
});
}
},
},
}
</script>
<style lang='scss'>
page {
background: #1E1F31 !important;
}
.send-msg {
border-radius: 30px;
color: white;
height: 30px;
font-size: 14px;
line-height: 30px;
background: #5E81F9;
}
.container {
padding-top: 32upx;
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
background: #1E1F31;
}
.wrapper {
position: relative;
z-index: 90;
background: #1E1F31;
padding-bottom: 20px;
}
.input-content {
padding: 32upx 80upx;
}
.confirm-btn {
width: 600upx;
height: 80upx;
line-height: 80upx;
border-radius: 60upx;
margin-top: 32upx;
background: #5E81F9;
color: #fff;
font-size: 32upx;
&:after {
border-radius: 60px;
}
}
</style>

650
pages/public/login.vue Normal file
View File

@ -0,0 +1,650 @@
<template>
<view class="container">
<!-- <image @click="navBack" src="../../static/images/index/close.png" style="width: 32upx;height: 32upx;margin-left: 46upx;"></image> -->
<!-- 小程序状态下登录 -->
<!-- #ifdef MP-WEIXIN -->
<view class="mp_wxBox">
<view>
<view class="headers">
<image src="../../static/logo.png" style="border-radius: 50%;"></image>
</view>
<view class="content">
<view>申请获取以下权限</view>
<text>获得你的公开信息(昵称头像地区等)</text>
</view>
<button v-show="weixinPhone" style="background: #FCD202;color: #333333;" class="bottom"
open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
授权手机号
</button>
<button v-show="!weixinPhone" style="background: #FCD202;color: #333333;" class='bottom'
bindtap="getUserProfile" @tap="wxGetUserInfo">
授权登录
</button>
</view>
</view>
<view style="text-align: center;">
<view class="footers">
<image v-if="showAgree" @tap="isShowAgree" src="../../static/images/selected.png"
style="width: 36upx;height: 36upx;"></image>
<image v-else @tap="isShowAgree" src="../../static/images/select.png"
style="width: 36upx;height: 36upx;"></image>
<text style="margin-left: 10upx;margin-right: 0;">同意</text>
<navigator url="/my/setting/mimi" open-type="navigate">隐私政策</navigator>
<navigator url="/my/setting/xieyi" open-type="navigate">用户服务协议</navigator>
</view>
</view>
<!-- #endif -->
<!-- #ifndef MP-WEIXIN -->
<view class="register">
<view class="back-btn yticon icon-zuojiantou-up" @click="navBack"></view>
<view style="padding-top: 172upx;margin-left: 36upx;">
<view style="color: #333333;font-size: 44upx;">手机快捷登录</view>
<view style="color: #999999;font-size: 24upx;margin-top: 20upx;">未注册的手机号将自动创建账号</view>
</view>
<view style="margin-left: 40upx;margin-top: 104upx;margin-right: 40upx;">
<wInput v-model="phoneData" type="number" maxlength="11" placeholder="请输入手机号"></wInput>
<!-- <wInput v-model="passData" type="number" maxlength="6" placeholder="请输入密码"></wInput> -->
<wInput v-model="verCode" type="number" maxlength="6" placeholder="请输入验证码" isShowCode ref="runCode"
@setCode="sendMsg()"></wInput>
<wInput v-show="show" v-model="invitation" isShowGet ref="setNumberCode" @setNumberCode="isShowGet()"
placeholder="请填写邀请码"></wInput>
</view>
<view class="footer">
<image v-if="showAgree" @tap="isShowAgree" src="../../static/images/selected.png"
style="width: 36upx;height: 36upx;"></image>
<image v-else @tap="isShowAgree" src="../../static/images/select.png"
style="width: 36upx;height: 36upx;"></image>
<text style="margin-left: 10upx;margin-right: 0;">同意</text>
<navigator url="/my/setting/mimi" open-type="navigate">隐私政策</navigator>
<navigator url="/my/setting/xieyi" open-type="navigate">用户服务协议</navigator>
</view>
<wButton text="登 录" :rotate="isRotate" @click.native="startReg()"></wButton>
</view>
<!-- #endif -->
</view>
</template>
<script>
import wInput from '@/components/watch-login/watch-input.vue' //input
import wButton from '@/components/watch-login/watch-button.vue' //button
export default {
components: {
wInput,
wButton,
},
data() {
return {
mobile: '',
code: '',
weixinLogin: false,
sending: false,
sendTime: '获取验证码',
count: 60,
weixinPhone: false,
sendDataList: {},
sessionkey: '',
phoneNum: false,
sysphone: 1,
phoneData: '',
verCode: '',
invitation: '',
show: '',
showAgree: false, //
isRotate: false, //
platform: "h5",
};
},
onLoad(e) {
if (e.inviterCode) {
this.$queue.setData('inviterCode', e.inviterCode);
}
//
this.$Request.getT('/app/common/type/53').then(res => {
if (res.code == 0) {
if (res.data && res.data.value && res.data.value == '是') {
// this.weixinLogin = true;
}
}
});
this.$Request.getT('/app/common/type/188').then(res => {
if (res.code == 0) {
if (res.data && res.data.value && res.data.value == '是') {
this.phoneNum = true;
}
}
});
},
methods: {
isShowAgree() {
this.showAgree = !this.showAgree
},
startReg() {
var that = this
uni.getSystemInfo({
success: function(res) {
console.log(res.model);
if (res.model == 'iPhone') {
that.sysphone = 2
} else if (res.model != 'iPhone') {
that.sysphone = 1
}
}
});
//
if (that.isRotate) {
//
return false;
}
if (!that.phoneData) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: '请输入手机号'
});
return false;
}
if (that.phoneData.length != 11) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: '手机号不正确'
});
return false;
}
if (that.verCode.length != 6) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: '验证码不正确'
});
return false;
}
if (that.showAgree == false) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: '请阅读并同意《隐私政策》和《用户服务协议》'
});
return false;
}
that.isRotate = true;
var openid = this.$queue.getData("openid") ? this.$queue.getData("openid") : '';
let data = {
phone: that.phoneData,
msg: that.verCode,
platform: that.platform,
sysPhone: that.sysphone,
openId: openid,
userType: 1
}
that.$Request.post("/app/Login/registerCode", data).then(res => {
console.log(res)
if (res.code == 0) {
console.log(res.token)
this.$queue.setData("token", res.token);
this.$queue.setData("userId", res.user.userId);
this.$queue.setData("phone", res.user.phone);
uni.setStorageSync('userName', res.user.userName)
uni.setStorageSync('avatar', res.user.avatar)
uni.setStorageSync('phone', res.user.phone)
uni.setStorageSync('sex', res.user.sex)
uni.setStorageSync('userId', res.user.userId)
uni.setStorageSync('wxCode', res.user.wxCode)
uni.setStorageSync('wxQrCode', res.user.wxQrCode)
uni.setStorageSync('zhiFuBao', res.user.zhiFuBao)
uni.setStorageSync('zhiFuBaoName', res.user.zhiFuBaoName)
uni.switchTab({
url: '/pages/index/index'
})
return false;
} else {
that.isRotate = false;
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '登录失败',
content: res.msg,
});
}
});
},
sendMsg() {
const {
phoneData
} = this;
if (!phoneData) {
this.$queue.showToast("请输入手机号");
} else if (phoneData.length !== 11) {
this.$queue.showToast("请输入正确的手机号");
} else {
this.$queue.showLoading("正在发送验证码...");
this.$Request.getT("/app/Login/sendMsg/" + phoneData + "/login").then(res => {
console.log(res)
if (res.code == 0) {
if (res.data === 'register') {
this.show = true;
}
this.sending = true;
this.$queue.showToast('验证码发送成功请注意查收');
this.$refs.runCode.$emit('runCode');
uni.hideLoading();
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '短信发送失败',
content: res.msg ? res.msg : '请一分钟后再获取验证码',
});
}
});
}
},
wxGetUserInfo(e) {
if (this.showAgree == false) {
uni.showToast({
icon: 'none',
position: 'bottom',
title: '请阅读并同意《隐私政策》和《用户服务协议》'
});
return false;
}
wx.getUserProfile({
desc: '业务需要',
success: infoRes => {
console.log("infoRes.encryptedData__________:" + JSON.stringify(infoRes.userInfo))
let nickName = infoRes.userInfo.nickName; //
let avatarUrl = infoRes.userInfo.avatarUrl; //
let sex = infoRes.userInfo.gender; //
try {
this.$queue.showLoading('正在登录中...');
this.login(nickName, avatarUrl, sex);
} catch (e) {}
}
})
},
//
login(nickName, avatarUrl, sex) {
let that = this;
// 1.wxcode
uni.login({
provider: 'weixin',
success: function(loginRes) {
console.log(loginRes, '************')
let data = {
code: loginRes.code,
}
that.$Request.get('/app/Login/wxLogin', data).then(res => {
if (res.code == 0) {
uni.hideLoading()
uni.setStorageSync('openId', res.data.open_id)
uni.setStorageSync('unionId', res.data.unionId)
that.sessionkey = res.data.session_key;
let inviterCode = '';
if (uni.getStorageSync('inviterCode')) {
inviterCode = uni.getStorageSync('inviterCode')
}
let sendData = {
openId: uni.getStorageSync('openId'),
unionId: uni.getStorageSync('unionId'),
userName: nickName,
avatar: avatarUrl,
sex: sex, //
inviterCode: inviterCode //
};
that.sendDataList = sendData;
//
console.log(that.phoneNum)
if (res.data.isPhone == '2' && that.phoneNum) {
that.weixinPhone = true;
} else {
that.getWeixinInfo(sendData);
}
} else {
uni.showToast({
icon: 'none',
title: res.msg,
duration: 2000
});
console.log(res, '失败')
}
})
}
});
},
//
getPhoneNumber: function(e) {
if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
console.log('用户拒绝提供手机号');
} else {
console.log('用户同意提供手机号');
console.log(e)
this.setPhoneByInsert(e.detail.encryptedData, e.detail.iv);
}
},
//
setPhoneByInsert(decryptData, iv) {
let data = {
decryptData: decryptData,
key: this.sessionkey,
iv: iv
};
this.$Request.postJson('/app/Login/selectPhone', data).then(res => {
if (res.code == 0) {
this.phone = res.data.phoneNumber;
this.getWeixinInfo(this.sendDataList);
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
})
},
//
getWeixinInfo(sendData) {
let that = this;
uni.showLoading({
title: '登录中...'
});
let postData = {
openId: sendData.openId, //openId
unionId: sendData.unionId, //unionId
userName: sendData.userName, //
avatar: sendData.avatar, //
sex: sendData.sex, //
phone: that.phone,
inviterCode: sendData.inviterCode
};
that.$Request.postJson('/app/Login/insertWxUser', postData).then(res => {
uni.hideLoading();
if (res.code == 0) {
uni.setStorageSync('token', res.token)
uni.setStorageSync('adminUserId', res.user.adminUserId)
uni.setStorageSync('userName', res.user.userName)
uni.setStorageSync('avatar', res.user.avatar)
uni.setStorageSync('phone', res.user.phone)
uni.setStorageSync('invitationCode', res.user.invitationCode)
uni.setStorageSync('sex', res.user.sex)
uni.setStorageSync('userId', res.user.userId)
uni.setStorageSync('openId', res.user.openId)
uni.setStorageSync('zhiFuBao', res.user.zhiFuBao)
uni.setStorageSync('zhiFuBaoName', res.user.zhiFuBaoName)
// var pages = getCurrentPages();
// var currPage = pages[pages.length - 1] //
// var prePage = pages[pages.length - 2] //
//
// console.log(prePage.route)
// if (prePage.route == "pages/my/index") {
// prePage.$vm.getUserInfo()
// }
uni.navigateBack();
} else {
uni.showModal({
showCancel: false,
title: '登录失败',
content: res.msg,
});
}
})
},
weixinLo() {
let that = this;
uni.login({
provider: 'weixin',
success: function(loginRes) {
that.$queue.showLoading('正在登录中...');
console.error(loginRes.authResult);
that.$queue.setData('weixinToken', loginRes.authResult.access_token);
that.$queue.setData('unionid', loginRes.authResult.unionid);
that.$queue.setData('weixinOpenid', loginRes.authResult.openid);
that.$Request.postJson('/app/login/loginApp', {
token: loginRes.authResult.access_token,
unionid: loginRes.authResult.unionid,
openid: loginRes.authResult.openid
}).then(res => {
console.log(JSON.stringify(res))
if (res.code === 0) {
if (uni.getSystemInfoSync().platform == "android") {
let clientid = plus.push.getClientInfo().clientid;
that.$Request.postT('/app/login/updateClientId?clientId=' +
clientid + '&userId=' + res.userId).then(res => {
});
}
that.$queue.setData("token", res.uuid);
that.$queue.setData("userId", res.userId);
that.getUserInfo(res.userId, res.token);
} else {
uni.hideLoading();
uni.navigateTo({
url: '/pages/public/wxmobile'
});
}
});
}
});
},
forget() {
uni.navigateTo({
url: '/pages/public/pwd'
});
},
register() {
uni.navigateTo({
url: '/pages/public/loginphone'
});
},
inputChange(e) {
const key = e.currentTarget.dataset.key;
this[key] = e.detail.value;
},
navBack() {
uni.navigateBack();
},
getUserInfo(userId, token) {
this.$Request.postJson('/app/selectUserById?userId=' + userId).then(res => {
if (res.code === 0) {
this.$queue.setData('token', res.data.uuid);
this.$queue.setData('image_url', res.data.imageUrl ? res.data.imageUrl :
'/static/img/common/logo.jpg');
this.$queue.setData('inviterCode', res.data.inviterCode);
this.$queue.setData('invitationCode', res.data.invitationCode);
this.$queue.setData('grade', res.data.grade);
this.$queue.setData('mobile', res.data.mobile);
this.$queue.setData('isInvitation', res.data.isInvitation);
this.$queue.setData('nickName', res.data.nickName ? res.data.nickName : res.data.phone);
this.$queue.setData('gender', parseInt(res.data.gender));
uni.switchTab({
url: '/pages/index/index'
});
} else {
uni.showModal({
showCancel: false,
title: '登录失败',
content: res.msg
});
this.$queue.logout();
}
uni.hideLoading();
});
}
}
};
</script>
<style lang="scss">
page {
height: 100%;
background: #FFF;
}
.footers {
padding-left: 140upx;
margin-top: 32upx;
font-size: 24upx;
color: #666666;
text-align: center;
display: flex;
}
.confirm-btn-weixin {
width: 200px;
height: 42px;
line-height: 42px;
border-radius: 30px;
margin-top: 40upx;
background: -moz-linear-gradient(left, #f15b6c, #e10a07 100%);
background: -webkit-gradient(linear, left top, left right, color-stop(0, #f15b6c), color-stop(100%, #e10a07));
background: -webkit-linear-gradient(left, #f15b6c 0, #e10a07 100%);
background: -o-linear-gradient(left, #f15b6c 0, #e10a07 100%);
background: -ms-linear-gradient(left, #f15b6c 0, #e10a07 100%);
background: linear-gradient(to left, #f15b6c 0, #e10a07 100%);
color: #fff;
font-size: 32upx;
&:after {
border-radius: 60px;
}
}
.confirm-btn {
width: 200px;
height: 42px;
line-height: 42px;
border-radius: 30px;
margin-top: 300upx;
background: -moz-linear-gradient(left, #f15b6c, #e10a07 100%);
background: -webkit-gradient(linear, left top, left right, color-stop(0, #f15b6c), color-stop(100%, #e10a07));
background: -webkit-linear-gradient(left, #f15b6c 0, #e10a07 100%);
background: -o-linear-gradient(left, #f15b6c 0, #e10a07 100%);
background: -ms-linear-gradient(left, #f15b6c 0, #e10a07 100%);
background: linear-gradient(to left, #f15b6c 0, #e10a07 100%);
color: #fff;
font-size: 32upx;
&:after {
border-radius: 60px;
}
}
.headers {
text-align: center;
}
.headers>image {
width: 400upx;
height: 400upx;
}
.footer {
padding-left: 60upx;
margin-top: 48upx;
font-size: 24upx;
color: #666666;
text-align: center;
display: flex;
}
page {
background: #fff;
}
.send-msg {
border-radius: 30px;
color: black;
background: white;
height: 30px;
font-size: 14px;
line-height: 30px;
}
.container {
top: 0;
padding-top: 32upx;
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
// background: #111224;
// color: #FFF;
.mp_wxBox {
.headers {
margin: 35% auto 50rpx;
text-align: center;
border-radius: 60rpx;
width: 650rpx;
height: 300rpx;
line-height: 450rpx;
image {
width: 300rpx;
height: 300rpx;
}
}
.content {
text-align: center;
}
text {
display: block;
color: #9d9d9d;
margin-top: 40rpx;
}
.bottom {
line-height: 80upx;
border-radius: 80upx;
margin: 70rpx 50rpx;
height: 80upx;
font-size: 35rpx;
}
}
}
.wrapper {
position: relative;
z-index: 90;
background: #fff;
padding-bottom: 20px;
}
.input-content {
padding: 0 20px;
}
.confirm-btn {
width: 300px;
height: 42px;
line-height: 42px;
border-radius: 30px;
margin-top: 40px;
background: linear-gradient(to left, #3f5ecb 0, #5074FF 100%);
color: #fff;
// font-size: $font-lg;
&:after {
border-radius: 60px;
}
}
</style>

174
pages/public/pwd.vue Normal file
View File

@ -0,0 +1,174 @@
<template>
<view class="container">
<view class="wrapper">
<view class="input-content">
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title">旧密码</text>
<input type="password" :value="oldPwd" placeholder="请输入旧密码" placeholder-class="input-empty" maxlength="20"
minlength="6" data-key="oldpassword" @input="inputChange" @confirm="toLogin" />
</view>
<view class="cu-form-group" style="border: 2upx solid whitesmoke;margin-bottom: 20px;border-radius: 30px">
<text class="title">新密码</text>
<input type="password" :value="pwd" placeholder="请设置新密码" placeholder-class="input-empty" maxlength="20"
minlength="6" data-key="password" @input="inputChange" @confirm="toLogin" />
</view>
</view>
<button class="confirm-btn" @click="toLogin">修改密码</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
code: '',
phone: '',
password: '',
oldpassword: '',
sending: false,
sendTime: '获取验证码',
count: 60,
logining: false,
oldPwd: '',
pwd: ''
}
},
methods: {
sendMsg() {
const {
phone
} = this;
if (!phone) {
this.$queue.showToast("请输入手机号");
} else if (phone.length !== 11) {
this.$queue.showToast("请输入正确的手机号");
} else {
this.$queue.showLoading("正在发送验证码...");
this.$Request.getT('/appLogin/sendMsg/' + mobile + '/forget').then(res => {
if (res.code === 0) {
this.sending = true;
this.$queue.showToast('验证码发送成功请注意查收');
this.countDown();
uni.hideLoading();
} else {
uni.hideLoading();
uni.showModal({
showCancel: false,
title: '短信发送失败',
content: res.msg ? res.msg : '请一分钟后再获取验证码'
});
}
});
}
},
countDown() {
const {
count
} = this;
if (count === 1) {
this.count = 60;
this.sending = false;
this.sendTime = '获取验证码'
} else {
this.count = count - 1;
this.sending = true;
this.sendTime = count - 1 + '秒后重新获取';
setTimeout(this.countDown.bind(this), 1000);
}
},
inputChange(e) {
const key = e.currentTarget.dataset.key;
this[key] = e.detail.value;
},
navBack() {
uni.navigateBack();
},
toLogin() {
const {
password,
oldpassword
} = this;
if (!oldpassword) {
this.$queue.showToast("请输入旧密码");
} else if (oldpassword.length < 6) {
this.$queue.showToast("旧密码位数必须大于六位");
} else if (!password) {
this.$queue.showToast("请设置新密码");
} else if (password.length < 6) {
this.$queue.showToast("新密码位数必须大于六位");
} else {
this.logining = true;
this.$queue.showLoading("正在修改密码中...");
this.$Request.post("/app/user/updatePwd", {
pwd : password,
oldPwd : oldpassword,
}).then(res => {
uni.hideLoading();
if (res.code === 0) {
this.$queue.showToast('密码修改成功!下次请使用新密码登录!')
setTimeout(function(){
uni.navigateBack()
},1000)
} else {
uni.showModal({
showCancel: false,
title: '密码修改失败',
content: res.msg,
});
}
});
}
},
},
}
</script>
<style lang='scss'>
page {
height: 100%;
background: #1E1F31 !important;
}
.container {
padding-top: 32upx;
position: relative;
width: 100%;
height: 100%;
overflow: hidden;
background: #1E1F31 !important;
}
.wrapper {
position: relative;
z-index: 90;
background: #111224;
padding-bottom: 20px;
}
.input-content {
padding: 32upx 80upx;
}
.confirm-btn {
width: 600upx;
height: 80upx;
line-height: 80upx;
border-radius: 60upx;
margin-top: 32upx;
background: #5E81F9;
color: #fff;
font-size: 32upx;
&:after {
border-radius: 60px;
}
}
</style>

File diff suppressed because it is too large Load Diff

1570
running/Helppay/Helppay.vue Normal file

File diff suppressed because it is too large Load Diff

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