同步版本

This commit is contained in:
唐明明
2021-08-24 08:53:35 +08:00
parent bfea54eb8f
commit 9a2acd3813
256 changed files with 15703 additions and 1803 deletions

View File

@@ -10,6 +10,10 @@
{
"launchtype" : "local"
},
"h5" :
{
"launchtype" : "local"
},
"type" : "uniCloud"
}
]

View File

@@ -10,7 +10,7 @@
console.log('App Hide')
},
globalData: {
mainColor: "#c82626"
mainColor: "white"
}
}
</script>

View File

@@ -31,8 +31,12 @@ const request = (parameter) => {
'Authorization': store.getters.getToken || ''
}
console.log('发送数据调试用', parameter)
// 加载提示
uni.showLoading({
title: '加载中'
});
console.log('dbug', parameter)
// 请求实例
return new Promise((resolve, reject) => {
uni.request({
@@ -46,6 +50,7 @@ const request = (parameter) => {
updateToken('token', res.header.Authorization)
}
if(res.statusCode === 200){
uni.hideLoading()
const resolveData = res.data
if(resolveData.status_code === 200) {
resolve(resolveData.data)
@@ -64,9 +69,41 @@ const request = (parameter) => {
})
}
// 文件上传
const uploading = (paths) => {
uni.showLoading({
title: '上传中'
});
// 注入header
config.header = {
'Accept': 'application/json',
'Authorization': store.getters.getToken || ''
}
// 上传图片
return new Promise((resolve, reject) => {
uni.uploadFile({
url : config.apiUrl + 'storage/uploads',
files : paths,
header : config.header || {},
success : res=>{
if(res.statusCode === 200){
uni.hideLoading()
let updData = JSON.parse(res.data)
if(updData.status_code === 200){
resolve(updData.data)
return
}
reject(updData)
return
}
errToast(res.statusCode)
}
})
})
}
// 处理一些http请求错误提示
const errToast = (code) => {
console.log(code)
switch (code){
case 404:
uni.showToast({
@@ -107,10 +144,13 @@ const loginHint = () => {
success: res=> {
loginHintState = false
if (res.confirm) uni.reLaunch({
url: '/pages/auth/login?type=overdue'
url: '/pages/equity/index'
})
}
})
}
export default request
export {
request,
uploading
}

View File

@@ -6,7 +6,7 @@
* moduleName: 鉴权
*/
import request from '../index'
import { request } from '../index'
// 一键登录
const keyAuth = (data) => {

View File

@@ -0,0 +1,91 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 企业
*/
import { request } from '../index'
// 企业注册配置信息
const createConfig = () => {
return request({
url: 'companies/inits/create'
})
}
// 企业行业信息
const inits = data => {
return request({
url: 'companies/inits',
method: 'POST',
data
})
}
// 企业广场
const companies = data => {
return request({
url: 'companies',
data
})
}
// 企业列表
const companiesList = data => {
return request({
url: 'companies/lists',
data
})
}
// 企业认证配置信息
const appliesCreate = () => {
return request({
url: 'companies/applies/create'
})
}
// 企业认证提交、编辑
const applies = (data,method) => {
return request({
url: 'companies/applies',
method,
data
})
}
// 企业认证前置条件
const isallow = () => {
return request({
url: 'companies/applies/isallow',
method: 'POST'
})
}
// 企业申请状态
const appliesQuery = () => {
return request({
url: 'companies/applies/query'
})
}
// 企业信息展示
const appliesInfo = () => {
return request({
url: 'companies/applies'
})
}
export {
createConfig,
inits,
companies,
companiesList,
appliesCreate,
applies,
isallow,
appliesQuery,
appliesInfo
}

36
apis/interfaces/goods.js Normal file
View File

@@ -0,0 +1,36 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 商品
*/
import { request } from '../index'
// 商城首页
const mall = data => {
return request({
url: "mall"
})
}
// 商品列表
const list = data => {
return request({
url: "mall/goods"
})
}
// 商品详情
const goods = id => {
return request({
url: 'mall/goods/' + id
})
}
export {
mall,
list,
goods
}

22
apis/interfaces/order.js Normal file
View File

@@ -0,0 +1,22 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 订单
*/
import { request } from '../index'
// 创建,确认订单
const buy = (data, method) => {
return request({
url: 'mall/buy/goods',
method,
data
})
}
export {
buy
}

56
apis/interfaces/store.js Normal file
View File

@@ -0,0 +1,56 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 企业工具
*/
import { request } from '../index'
// 企业首页
const index = () => {
return request({
url: 'companies/index'
})
}
// 成交客户
const customer = data => {
return request({
url: 'mall/statistics',
data
})
}
// 访客记录
const visitors = data => {
return request({
url: 'companies/visitors/lists',
data
})
}
// 基础信息模块
const basicsConfig = () => {
return request({
url: 'companies/info/create'
})
}
// 企业基础信息 编辑
const basicsInfo = (method, data) => {
return request({
url: 'companies/info',
method,
data
})
}
export {
index,
customer,
visitors,
basicsConfig,
basicsInfo
}

View File

@@ -0,0 +1,17 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 上传图片
*/
import { uploading as upd } from '../index'
const uploads = (paths) => {
return upd(paths)
}
export {
uploads
}

37
apis/interfaces/vip.js Normal file
View File

@@ -0,0 +1,37 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 会员
*/
import { request } from '../index'
// 会员身份信息
const identities = () => {
return request({
url: 'user/identities'
})
}
// 开通会员
const vipOrder = id =>{
return request({
url : 'user/identities/create/' + id,
method : 'POST'
})
}
// 开通会员微信支付
const vipWechatPay = id => {
return request({
url : 'user/identities/pay/' + id + '/wechat'
})
}
export {
identities,
vipOrder,
vipWechatPay
}

View File

@@ -2,18 +2,18 @@
<template>
<view class="goods--list">
<block v-if="list.length > 0">
<view class="goods--item" v-for="(item, index) in list" :key="index">
<view class="goods--item" v-for="(item, index) in list" :key="index" @click="goods(item)">
<view class="cover">
<image class="cover--src" :src="item.cover" mode="aspectFill" />
</view>
<view class="content">
<view class="title">{{item.title}}</view>
<view class="title">{{item.name}}</view>
<view class="content-flex">
<view class="price eb" v-if="priceType === 'EB'">
{{item.price}}<text>易币</text>
</view>
<view class="price cny" v-if="priceType === 'CNY'">
<text></text>{{item.price}}
<text></text>{{item.original_price}}
</view>
<view class="sales">已易{{item.sales}}</view>
</view>
@@ -49,6 +49,11 @@ export default {
type : String,
default : '暂无商品数据 -_-!'
}
},
methods:{
goods(e){
this.$emit('on-goods', e)
}
}
};
</script>
@@ -63,7 +68,7 @@ export default {
box-sizing: border-box;
width: calc(50% - 20rpx);
margin: 10rpx;
border-radius: $radius/4;
border-radius: $radius/2;
overflow: hidden;
.cover{
position: relative;
@@ -83,6 +88,8 @@ export default {
font-size: $title-size-lg;
line-height: 40rpx;
height: 80rpx;
text-align: justify;
@extend .ellipsis;
}
.content-flex{
display: flex;
@@ -92,7 +99,7 @@ export default {
.price{
color: $text-price;
font-weight: bold;
font-size: $title-size + 8;
font-size: $title-size;
text{
font-size: $title-size-sm;
font-weight: normal;

View File

@@ -1,30 +0,0 @@
<template>
<view>
<view class="industry--list">
<view class="industry--box">
<image class="industry--cover" src="../../static/dev/good_cover_00.jpg" mode="aspectFill"></image>
<view class="industry--content">
<view class="industry--title">MLB</view>
<view class="industry--credibility">信誉值</view>
<view class="industry--business">主营</view>
<view class="industry--trading">成交</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
name:"industry-list",
data() {
return {
};
}
}
</script>
<style lang="scss">
</style>

View File

@@ -0,0 +1,104 @@
<template>
<view class="industry--list">
<block v-if="list.length > 0">
<view class="industry--box" v-for="(item, index) in list" :key="index" @click="industry(item)">
<image class="industry--cover" :src="item.cover" mode="aspectFill"></image>
<view class="industry--content">
<view class="industry--title">{{item.name}}</view>
<view class="industry--credibility">
<uni-rate
:readonly="true"
color="#ddd"
active-color="#c82626"
:value="item.star"
:size="14"
/>
</view>
<view class="industry--business">{{item.industry.title}}</view>
<uni-icons class="industry--arrow" type="arrowright" color="#ddd" size="14" />
</view>
</view>
</block>
<block v-else>
<view class="industry--null">
<view>{{toast}}</view>
</view>
</block>
</view>
</template>
<script>
export default {
name:"industry-list",
props: {
// 数据列表
list: {
type : Array,
default : () => {
return new Array
}
},
// 列表空提示
toast : {
type : String,
default : '暂无商品数据 -_-!'
}
},
methods:{
industry(e){
this.$emit('on-industry', e)
}
}
}
</script>
<style lang="scss" scoped>
// 列表信息
.industry--list{
padding-bottom: $padding;
}
.industry--box{
position: relative;
margin: $margin - 10 $margin;
background: white;
border-radius: $radius/2;
padding: $padding ($padding*3) $padding ($padding * 2 + 128);
min-height: 128rpx;
.industry--cover{
position: absolute;
left: $padding;
top: $padding;
width: 128rpx;
height: 128rpx;
}
.industry--title{
font-weight: bold;
font-size: $title-size-lg;
line-height: 40rpx;
}
.industry--credibility{
padding-top: 8rpx;
height: 48rpx;
box-sizing: border-box;
}
.industry--business{
line-height: 40rpx;
font-size: $title-size-sm;
color: $text-gray;
}
.industry--arrow{
position: absolute;
right: $margin;
top: 50%;
margin-top: -7px;
}
}
// 数据空
.industry--null{
width: 100%;
padding: 20vh 0;
text-align: center;
font-size: $title-size-m;
color: $text-gray;
}
</style>

View File

@@ -0,0 +1,249 @@
<template>
<view class="boos">
<!-- 店铺交易数据 -->
<view class="statistical">
<view class="item">
<view class="number">{{wordData.top.barter_total || 0}}</view>
<view class="text">总易货额</view>
</view>
<view class="item">
<view class="number">{{wordData.top.trading_day || 0}}</view>
<view class="text">今日交易额</view>
</view>
<view class="item">
<view class="number">{{wordData.top.eb_in || 0}}</view>
<view class="text">E货额度收入</view>
</view>
<view class="item">
<view class="number">{{wordData.top.cash_in || 0}}</view>
<view class="text">现金收入</view>
</view>
</view>
<!-- 店铺概况 -->
<view class="general">
<view class="general-box">
<view class="general-item" @click="$Router.push({name: 'Visitors'})">
<view class="number">{{wordData.middle.visitors || 0}}</view>
<view class="text">访客统计</view>
</view>
<view class="general-item" @click="$Router.push({name: 'Customer'})">
<view class="number">{{wordData.middle.clinch || 0}}</view>
<view class="text">成交客户</view>
</view>
<view class="general-item" @click="$Router.push({name: 'Employees'})">
<view class="number">{{wordData.middle.employees || 0}}</view>
<view class="text">员工数量</view>
<!-- <uni-icons type="arrowright" size="14" color="#555"></uni-icons> -->
</view>
<view class="general-item">
<view class="number">{{wordData.middle.sale || 0}}</view>
<view class="text">在售权证</view>
</view>
<view class="general-item">
<view class="number">{{wordData.middle.hold || 0}}</view>
<view class="text">权证持有</view>
</view>
<view class="general-item">
<view class="number">{{wordData.middle.transfer || 0}}</view>
<view class="text">转让权证</view>
</view>
</view>
</view>
<!-- 店铺订单管理 -->
<view class="tool-flex order">
<view class="order-item">
<view class="number" v-if="wordData.order.not_shipped > 0">{{wordData.order.not_shipped}}</view>
<image class="icon" src="@/static/icons/order_icon_01.png" mode="aspectFill"></image>
<view class="title">待发货</view>
</view>
<view class="order-item">
<view class="number" v-if="wordData.order.already_shipped > 0">{{wordData.order.already_shipped}}</view>
<image class="icon" src="@/static/icons/order_icon_02.png" mode="aspectFill"></image>
<view class="title">已发货</view>
</view>
<view class="order-item">
<view class="number" v-if="wordData.order.not_pick > 0">{{wordData.order.not_pick}}</view>
<image class="icon" src="@/static/icons/order_icon_03.png" mode="aspectFill"></image>
<view class="title">待提货</view>
</view>
<view class="order-item">
<view class="number" v-if="wordData.order.already_pick > 0">{{wordData.order.already_pick}}</view>
<image class="icon" src="@/static/icons/order_icon_00.png" mode="aspectFill"></image>
<view class="title">已提货</view>
</view>
<view class="order-item">
<view class="number" v-if="wordData.order.after_sale > 0">{{wordData.order.after_sale}}</view>
<image class="icon" src="@/static/icons/order_icon_04.png" mode="aspectFill"></image>
<view class="title">退换货</view>
</view>
</view>
<!-- 店铺工具 -->
<view class="tool-flex store">
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_00.png" mode="aspectFill"></image>
<view class="title">扫码验证</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_01.png" mode="aspectFill"></image>
<view class="title">商品权证</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_02.png" mode="aspectFill"></image>
<view class="title">优惠券管理</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_03.png" mode="aspectFill"></image>
<view class="title">收款管理</view>
</view>
</view>
<!-- 企业营销工具管理 -->
<view class="tool-flex store">
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_04.png" mode="aspectFill"></image>
<view class="title">基础信息</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_05.png" mode="aspectFill"></image>
<view class="title">智能名片</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_06.png" mode="aspectFill"></image>
<view class="title">营销推广码</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_07.png" mode="aspectFill"></image>
<view class="title">部门/门店</view>
</view>
<view class="store-item">
<image class="icon" src="@/static/icons/tool_icon_08.png" mode="aspectFill"></image>
<view class="title">员工管理</view>
</view>
</view>
</view>
</template>
<script>
export default {
name:"store-boss",
props:{
// 工作台信息
wordData:{
type: Object,
default: () => {
return {
top : {},
middle : {},
order : {}
}
}
}
}
}
</script>
<style lang="scss" scoped>
.boos{
// 店铺统计
.statistical{
display: flex;
background: $text-price;
padding: $padding ($padding/2) $padding*5;
flex-wrap: wrap;
justify-content: space-between;
.item{
width: calc(25% - #{$padding});
text-align: center;
color: white;
margin: 0 $margin / 2;
.number{
font-weight: bold;
font-size: $title-size;
}
.text{
font-size: $title-size-sm;
}
}
}
// 店铺概况
.general{
margin: -$margin*4 $margin 0 $margin;
.general-box{
background-color: white;
border-radius: $radius/2;
display: flex;
padding: $padding $padding/2;
flex-wrap: wrap;
.general-item{
width: 33.33%;
text-align: center;
padding: $padding/2;
box-sizing: border-box;
.number{
font-weight: bold;
font-size: $title-size;
line-height: 50rpx;
}
.text{
font-size: $title-size-sm;
color: $text-gray;
line-height: 40rpx;
}
}
}
}
// 店铺工具
.tool-flex{
background: white;
border-radius: $radius/2;
padding: $padding/2;
margin: $margin;
display: flex;
flex-wrap: wrap;
.store-item{
padding: $padding/2;
text-align: center;
width: 25%;
box-sizing: border-box;
.icon{
width: 68rpx;
height: 68rpx;
vertical-align: top;
}
.title{
font-size: $title-size-sm;
color: $text-gray;
padding-top: $padding/3;
}
}
.order-item{
position: relative;
padding: $padding/2;
text-align: center;
width: 20%;
box-sizing: border-box;
.icon{
width: 58rpx;
height: 58rpx;
vertical-align: top;
}
.title{
font-size: $title-size-sm;
color: $text-gray;
}
.number{
position: absolute;
top: 10rpx;
left: calc( 50% + 10rpx );
font-size: $title-size-sm;
background: $text-price;
color: white;
height: 30rpx;
line-height: 30rpx;
border-radius: 15rpx;
min-width: 30rpx;
z-index: 9;
}
}
}
}
</style>

View File

@@ -0,0 +1,159 @@
<template>
<view class="staff">
员工
</view>
</template>
<script>
export default {
name:"store-staff",
props:{
// 店铺统计
top: {
type: Object,
default: ()=> {
return {
barter_total: 0,
trading_day : 0,
eb_in : 0,
cash_in : 0
}
}
},
// 店铺概况
middle: {
type: Object,
default: ()=> {
return {
visitors : 0,
clinch : 0,
employees: 0,
sale : 0,
hold : 0,
transfer : 0
}
}
},
// 店铺订单
order: {
type: Object,
default: ()=> {
return {
not_shipped : 0,
already_shipped : 0,
not_pick : 0,
already_pick : 0,
after_sale : 0
}
}
}
}
}
</script>
<style lang="scss" scoped>
.staff{
// 店铺统计
.statistical{
display: flex;
background: $text-price;
padding: $padding ($padding/2) $padding*5;
flex-wrap: wrap;
justify-content: space-between;
.item{
width: calc(25% - #{$padding});
text-align: center;
color: white;
margin: 0 $margin / 2;
.number{
font-weight: bold;
font-size: $title-size;
}
.text{
font-size: $title-size-sm;
}
}
}
// 店铺概况
.general{
margin: -$margin*4 $margin 0 $margin;
.general-box{
background-color: white;
border-radius: $radius/2;
display: flex;
padding: $padding $padding/2;
flex-wrap: wrap;
.general-item{
width: 33.33%;
text-align: center;
padding: $padding/2;
box-sizing: border-box;
.number{
font-weight: bold;
font-size: $title-size;
line-height: 50rpx;
}
.text{
font-size: $title-size-sm;
color: $text-gray;
line-height: 40rpx;
}
}
}
}
// 店铺工具
.tool-flex{
background: white;
border-radius: $radius/2;
padding: $padding/2;
margin: $margin;
display: flex;
flex-wrap: wrap;
.store-item{
padding: $padding/2;
text-align: center;
width: 25%;
box-sizing: border-box;
.icon{
width: 68rpx;
height: 68rpx;
vertical-align: top;
}
.title{
font-size: $title-size-sm;
color: $text-gray;
padding-top: $padding/3;
}
}
.order-item{
position: relative;
padding: $padding/2;
text-align: center;
width: 20%;
box-sizing: border-box;
.icon{
width: 58rpx;
height: 58rpx;
vertical-align: top;
}
.title{
font-size: $title-size-sm;
color: $text-gray;
}
.number{
position: absolute;
top: 10rpx;
left: calc( 50% + 10rpx );
font-size: $title-size-sm;
background: $text-price;
color: white;
height: 30rpx;
line-height: 30rpx;
border-radius: 15rpx;
min-width: 30rpx;
z-index: 9;
}
}
}
}
</style>

View File

@@ -23,27 +23,30 @@
},
/* */
"modules" : {
"OAuth" : {}
"OAuth" : {},
"Payment" : {},
"Share" : {}
},
/* */
"distribute" : {
/* android */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<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_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_SETTINGS\"/>"
]
},
@@ -52,8 +55,63 @@
/* SDK */
"sdkConfigs" : {
"oauth" : {
"univerify" : {}
"univerify" : {},
"weixin" : {
"appid" : "wx222fbe58feee7819",
"appsecret" : "3d24525a636d7573a8fae885097d5cf7",
"UniversalLinks" : ""
}
},
"payment" : {
"weixin" : {
"__platform__" : [ "ios", "android" ],
"appid" : "wx222fbe58feee7819",
"UniversalLinks" : ""
}
},
"share" : {
"weixin" : {
"appid" : "wx222fbe58feee7819",
"UniversalLinks" : ""
}
},
"maps" : {},
"ad" : {}
},
"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"
}
}
},
"splashscreen" : {
"androidStyle" : "common"
}
}
},

View File

@@ -4,7 +4,8 @@
"path": "pages/equity/index",
"name": "Equity",
"style":{
"navigationStyle":"custom"
"navigationStyle":"custom",
"navigationBarTextStyle":"white"
}
},{
"path": "pages/market/index",
@@ -25,12 +26,23 @@
}
},{
"path": "pages/store/index",
"name": "Store"
"name": "Store",
"style": {
"navigationStyle":"custom",
"navigationBarTitleText":"企业工具",
"navigationBarTextStyle":"white",
"navigationBarBackgroundColor":"#c82626"
}
},{
"path": "pages/property/index",
"name": "Property"
"name": "Property",
"style": {
"navigationBarTitleText": "",
"navigationStyle":"custom"
}
},{
"path" : "pages/goods/details",
"name" : "goodsDetails",
"style": {
"navigationBarTitleText":"",
"titleNView": {
@@ -82,7 +94,94 @@
"path": "pages/vip/index",
"name": "Vip",
"style": {
"navigationBarTitleText": "我的会员"
"navigationBarTitleText": "会员",
"navigationBarBackgroundColor":"#1f1b1c",
"navigationBarTextStyle":"white",
"backgroundColor":"#fefaef"
}
}
,{
"path" : "pages/equity/search",
"name" : "Search",
"style":{
"navigationBarTitleText": "搜索"
}
},{
"path" : "pages/market/logs",
"name" : "marketLogs",
"style" :{
"navigationBarTitleText": "成交历史"
}
},{
"path" : "pages/order/buy",
"name" : "Buy",
"style" :{
"navigationBarTitleText": "确认订单",
"navigationBarBackgroundColor":"#FFFFFF"
}
},{
"path" : "pages/goods/lists",
"name" : "goodsList",
"style" :{
"navigationBarTitleText": "商品列表",
"navigationBarBackgroundColor":"#FFFFFF"
}
},{
"path" : "pages/company/approve",
"name" : "Approve",
"style" :{
"navigationBarTitleText": ""
}
},{
"path" : "pages/store/visitors",
"name" : "Visitors",
"style" : {
"navigationBarTitleText": "访客统计",
"navigationBarBackgroundColor":"#FFFFFF"
}
},{
"path" : "pages/store/customer",
"name" : "Customer",
"style" : {
"navigationBarTitleText": "成交客户",
"navigationBarBackgroundColor":"#FFFFFF"
}
},{
"path" : "pages/store/employees",
"name" : "Employees",
"style" : {
"navigationBarTitleText": "员工",
"app-plus":{
"titleNView": {
"backgroundColor": "#FFFFFF",
"buttons": [
{
"text": "添加",
"fontSize": "16",
"width": "80",
"color": "#c82626"
}
]
}
}
}
},{
"path" : "pages/store/basics",
"style" :{
"navigationBarTitleText": "基础信息",
"app-plus":{
"titleNView": {
"backgroundColor": "#FFFFFF",
"buttons": [
{
"text": "保存",
"fontSize": "16",
"width": "80",
"color": "#c82626"
}
]
}
}
}
}
],
@@ -121,5 +220,15 @@
},
"easycom": {
"nv": "@/uni_modules/pyh-nv/components/pyh-nv/pyh-nv.vue"
},
"condition" : { //模式配置,仅开发期间生效
"current": 0, //当前激活的模式(list 的索引项)
"list": [
{
"name": "", //模式名称
"path": "", //启动页面,必选
"query": "" //启动参数在页面的onLoad函数里面得到
}
]
}
}

259
pages/company/approve.vue Normal file
View File

@@ -0,0 +1,259 @@
<template>
<view class="content">
<view class="header">
<view class="title">企业认证</view>
<view class="subtitle">请如实填写认证信息快速审核开店</view>
</view>
<view class="white-box">
<view class="inputs logo">
<label>企业LOGO</label>
<image class="logo-cover" :src="logo || require('@/static/icons/add-icon.png')" @click="updImg('logo')" mode="aspectFill"></image>
</view>
<view class="inputs">
<label>企业名称</label>
<input type="text" v-model="name" placeholder="输入企业名称" />
</view>
<view class="inputs">
<label>企业类型</label>
<picker v-if="type.length > 0" :range="type" :value="typeIndex" range-key="name" @change="changePicker" data-type="type">
<view class="picker-text nowrap">
{{type[typeIndex].name}}
<uni-icons class="picker-icon" type="arrowdown"></uni-icons>
</view>
</picker>
</view>
<view class="inputs">
<label>企业行业</label>
<picker v-if="industry.length > 0" :range="industry" :value="industryIndex" range-key="title" @change="changePicker" data-type="industry">
<view class="picker-text nowrap">
{{industry[industryIndex].title}}
<uni-icons class="picker-icon" type="arrowdown"></uni-icons>
</view>
</picker>
</view>
<view class="inputs">
<label>法人姓名</label>
<input type="text" v-model="corporate" placeholder="输入法人姓名" />
</view>
<view class="inputs">
<label>法人身份证</label>
<input type="text" v-model="identity" placeholder="输入法人身份证" />
</view>
<view class="inputs">
<label>机构代码</label>
<input type="text" v-model="org" placeholder="输入企业组织机构代码" />
</view>
<view class="inputs logo">
<label>营业执照</label>
<image class="license-cover" :src="license || require('@/static/icons/add-icon.png')" @click="updImg('license')" mode="aspectFill"></image>
</view>
<view class="btns">
<button type="default" size="default" @click="submitApplies">提交认证</button>
</view>
</view>
</view>
</template>
<script>
import { appliesCreate, applies, appliesInfo } from '@/apis/interfaces/company'
import { uploads } from '@/apis/interfaces/uploading'
export default {
data() {
return {
formType : "",
name : "",
corporate : "",
identity : "",
org : "",
logo : "",
license : "",
type : [],
industry : [],
typeIndex : 0,
industryIndex: 0,
reason : ''
};
},
created(){
appliesCreate().then(res=>{
console.log(res)
this.industry = res.industries
this.type = res.type
this.formType = this.$Route.query.formType
this.name = res.info.name
this.typeIndex = res.type.findIndex(val => val.id === res.info.type.id) || 0
this.industryIndex = res.industries.findIndex(val => val.industry_id === res.info.industry.industry_id) || 0
if(this.formType === 'put'){
appliesInfo().then(formValue => {
this.corporate = formValue.certification.name
this.identity = formValue.certification.idcard
this.org = formValue.certification.code
this.logo = formValue.cover
this.license = formValue.certification.license
}).catch(valueErr => {
console.log(valueErr)
})
}
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods:{
// 提交信息
submitApplies(){
let method = this.formType === 'put' ? 'PUT' : 'POST'
applies({
name : this.name,
cover : this.logo,
license : this.license,
user_name : this.corporate,
id_card : this.identity,
code : this.org,
type : this.type[this.typeIndex].id,
industry_id : this.industry[this.industryIndex].industry_id,
}, method).then(res => {
uni.showModal({
title : '提示',
content : '您的企业认证信息已提交审核需3-7个工作日请耐心等待',
showCancel : false,
confirmText : '确认',
success : resModal => {
this.$Router.back()
}
})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择器
changePicker(e){
let changeType = e.target.dataset.type,
changeVlae = e.detail.value
switch(changeType){
case 'type':
this.typeIndex = changeVlae
break
case 'industry':
this.industryIndex = changeVlae
break
}
},
// 上传图片
updImg(type){
uni.chooseImage({
count : 1,
success : choose => {
let paths = choose.tempFilePaths
uploading(paths).then(res => {
this[type] = res.url
console.log(this[type])
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
// 内容
.content{
.header{
height: 15vh;
padding-bottom: $padding * 2;
box-sizing: border-box;
@extend .vertical;
.title{
text-align: center;
font-size: $title-size + 14;
font-weight: bold;
line-height: 90rpx;
}
.subtitle{
font-size: $title-size-m;
color: $text-gray;
text-align: center;
}
}
.white-box{
background-color: white;
border-radius: $radius $radius 0 0;
min-height: 85vh;
padding: $padding $padding * 2 $padding * 2;
box-sizing: border-box;
.inputs{
position: relative;
margin-top: $margin;
background: white;
border-bottom: solid 1rpx $border-color;
padding-left: 200rpx;
line-height: 90rpx;
min-height: 90rpx;
label{
position: absolute;
top: 0;
left: 0;
width: 200rpx;
font-size: $title-size;
}
input{
height: 90rpx;
line-height: 90rpx;
font-size: $title-size;
}
.picker-text{
position: relative;
padding-right: 90rpx;
.picker-icon{
position: absolute;
right: 0;
top: 0;
}
}
}
.logo{
min-height: 98rpx;
padding-bottom: $padding;
.logo-cover{
position: absolute;
right: 0;
top: 0;
width: 98rpx;
height: 98rpx;
background: $border-color-lg;
border-radius: 50%;
}
.license-cover{
@extend .logo-cover;
border-radius: 0;
width: 131rpx;
}
}
.btns{
padding-top: $padding * 2;
button{
background: $text-price;
border-radius: 0;
height: 90rpx;
line-height: 90rpx;
font-size: $title-size;
color: white;
font-weight: bold;
&::after{
border: none;
}
}
}
}
}
</style>

View File

@@ -16,7 +16,8 @@
},
onNavigationBarButtonTap(e){
this.$Router.pushTab({name: "Equity"})
}
},
}
</script>

View File

@@ -11,18 +11,18 @@
</view>
<view class="inputs">
<label>企业类型</label>
<picker @change="changePicker" data-type="type">
<picker v-if="type.length > 0" :range="type" :value="typeIndex" range-key="name" @change="changePicker" data-type="type">
<view class="picker-text nowrap">
选择企业类型
{{type[typeIndex].name}}
<uni-icons class="picker-icon" type="arrowdown"></uni-icons>
</view>
</picker>
</view>
<view class="inputs">
<label>企业行业</label>
<picker @change="changePicker" data-type="industry">
<picker v-if="industry.length > 0" :range="industry" :value="industryIndex" range-key="title" @change="changePicker" data-type="industry">
<view class="picker-text nowrap">
选择企业行业
{{industry[industryIndex].title}}
<uni-icons class="picker-icon" type="arrowdown"></uni-icons>
</view>
</picker>
@@ -35,6 +35,7 @@
</template>
<script>
import { createConfig, inits } from '@/apis/interfaces/company'
export default {
data() {
return {
@@ -45,18 +46,34 @@
industryIndex: 0
};
},
created(){
createConfig().then(res=>{
this.type = res.type
this.industry = res.industries
})
},
methods:{
// 提交信息
next(){
console.log(this.name)
console.log('提交信息')
inits({
name : this.name,
type : this.type[this.typeIndex].id,
industry_id : this.industry[this.industryIndex].industry_id
}).then(res => {
this.$Router.push({name: 'Prompt'})
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
//选择器
changePicker(e){
let changeType = e.target.dataset.type,
changeVlae = e.target.dataset.value
changeVlae = e.detail.value
switch(changeType){
case 'type':
this.typeIndex = changeVlae

View File

@@ -1,61 +1,53 @@
<template>
<view>
<!-- 状态栏 -->
<nv :config="nvConfig" @nvTabTap="onNvTab"></nv>
<nv :config="nvConfig" @nvTabTap="onNvTab" @nvBtnTap="onRightBtn"></nv>
<block v-if="tabIndex === 0">
<!-- 搜索 -->
<view class="search">
<navigator class="nav" url="#">搜索企业/行业</navigator>
</view>
<!-- 推荐商家 -->
<view class="block-title">推荐商家</view>
<scroll-view scroll-x class="recommended">
<block v-for="(item, index) in 4" :key="index">
<view class="item-box">
<image
class="item-cover"
src="@/static/dev/mall-logo-01.png"
mode="aspectFill"
></image>
<view class="item-title">MLB</view>
<view class="item-btn">进店</view>
<view class="block-title">
<view class="title">
推荐商家
</view>
</view>
<scroll-view scroll-x class="recommended">
<block v-for="(item, index) in recommendBus" :key="index">
<view class="item-box">
<image
class="item-cover"
src="@/static/dev/mall-logo-00.png"
:src="item.cover"
mode="aspectFill"
/>
<view class="item-title">名创优品</view>
<view class="item-title nowrap">{{item.name || '-'}}</view>
<view class="item-btn">进店</view>
</view>
</block>
</scroll-view>
<!-- 热易商家 -->
<view class="block-title">
<view class="title">
热易商家
<navigator class="more" url="#">查看更多</navigator>
</view>
</view>
<swiper class="hot-swiper">
<swiper-item v-for="(item, index) in 3" :key="index">
<swiper-item v-for="(item, index) in hotBus" :key="index">
<view class="hot-box">
<image
class="cover"
src="@/static/dev/mall-logo-00.png"
:src="item.cover"
mode="aspectFill"
/>
<view class="content">
<view class="title nowrap">MLB美职联</view>
<view class="hot-content">
<view class="hot-title nowrap">{{item.name || '-'}}</view>
<view class="credibility">
<uni-rate
:readonly="true"
color="#ddd"
active-color="#c82626"
:value="2.5"
:value="item.star"
:size="14"
/>
</view>
<view class="trading nowrap">累计交易100</view>
<view class="trading nowrap">累计交易{{item.orders || 0}}</view>
</view>
<view class="btn">进店</view>
</view>
@@ -63,68 +55,121 @@
</swiper>
<!-- 行业分类 -->
<scroll-view class="industry-tabs" scroll-x>
<view class="industry-item show">全部</view>
<view class="industry-item">轻工食品</view>
<view class="industry-item">服饰纺织</view>
<view class="industry-item">家居用品</view>
<view class="industry-item">住宿餐饮</view>
<view class="industry-item">建筑建材</view>
<view class="industry-item" :class="{'show':index === industryIndex}" v-for="(item, index) in industryBus" :key="index">{{item.title}}</view>
</scroll-view>
<!-- 商家 -->
<industry-list :list="busList" />
</block>
<!-- 易货商城 -->
<block v-if="tabIndex === 1">
<!-- 搜索 -->
<view class="search">
<navigator class="nav" url="#">搜索企业/行业</navigator>
</view>
<view class="header-back">
<!-- 轮播图 -->
<view class="banner">
<swiper class="banner-swiper">
<swiper-item>
<view class="swiper-item">1</view>
</swiper-item>
<swiper-item>
<view class="swiper-item">2</view>
<swiper class="banner-swiper" indicator-color="#c82626" indicator-active-color="#f8f8f8" indicator-dots autoplay>
<swiper-item v-for="(item, index) in banners" :key="index">
<image class="cover" :src="item.cover" mode="aspectFill"></image>
</swiper-item>
</swiper>
</view>
<!-- 分类 -->
<view class="classify">
<view class="classify-item" v-for="(item, index) in 10" :key="index">
<image src="" mode="aspectFill"></image>
<view class="">餐饮美食</view>
<view class="classify-item" v-for="(item, index) in classify" :key="index" @click="onClassify">
<image class="cover" :src="item.cover" mode="aspectFill"></image>
<view class="title">{{item.name}}</view>
</view>
</view>
</view>
<!-- 提醒信息 -->
<swiper class="notice">
<swiper-item>
<view class="swiper-item">公告信息</view>
</swiper-item>
</swiper>
<!-- 每日推荐 -->
<!-- 限时抢购 -->
<view class="block-title">
<view class="title">
每日推荐<text>小易精选 推荐好物</text>
</view>
</view>
<view class="goods-push" v-if="JSON.stringify(position) != '{}'">
<view class="itme item-mian" @click="onGoods(position.one)">
<image class="cover" :src="position.one.cover" mode="widthFix"></image>
<view class="title">{{position.one.name}}</view>
<view class="price"><text>¥</text>{{position.one.original_price}}</view>
</view>
<view class="itme">
<view class="itme-list" v-for="(item, index) in position.two" :key="index" @click="onGoods(item)">
<image class="cover" :src="item.cover" mode="aspectFill"></image>
<view class="title">{{item.name}}</view>
<view class="price"><text>¥</text>{{item.original_price}}</view>
</view>
</view>
</view>
<!-- 优惠券 -->
<view class="block-title">
<view class="title">
限时抢购<text>海量商家优惠券</text>
</view>
<navigator class="more" url="#">查看更多</navigator>
</view>
<view class="coupons" v-if="coupons.length > 0">
<view class="coupons-item" v-for="(item, index) in coupons" :key="index">
<view class="content">
<view class="coupons-title">{{item.title}}</view>
<view class="sun-text">{{item.title}}</view>
<view class="btn">立即领取</view>
</view>
<image class="logo" :src="item.cover" mode="aspectFill"></image>
</view>
</view>
<!-- 优选商品 -->
<goods-list :list="goods" priceType="CNY" @on-goods="onGoods" />
</block>
</view>
</template>
<script>
import { companies, companiesList } from '@/apis/interfaces/company'
import { mall, list } from '@/apis/interfaces/goods'
import goodsList from '@/components/goods-list/goods-list'
import industryList from '@/components/industry-list/industry-list'
export default{
comments:{
goodsList,
industryList
},
data() {
return {
tabIndex: 0,
nvConfig: {
tabIndex : 0,
nvConfig : {
tabArr: [
{title:'广场', active:true},
{title:'易货'}
],
color: "#555",
hideback: true
}
color: '#FFF',
hideback: true,
bgColor: '#c82626',
btn: [{
icon: '/static/icons/search-icon.png',
style: 'paddingRight: 20rpx;'
}]
},
// 易货部分
banners : [],
classify : [],
coupons : [],
position : {},
goods : [],
pages : {},
// 广场部分
industryIndex: 0,
recommendBus : [],
hotBus : [],
industryBus : [],
busList : [],
busPages : {}
};
},
created() {
this.getCompanies()
},
methods:{
// tab
onNvTab(e){
let tabIndex = e.index
for(let i in this.nvConfig.tabArr){
@@ -132,16 +177,231 @@
else this.nvConfig.tabArr[i].active = false
}
this.tabIndex = tabIndex
if(this.goods.length <= 0) this.getMall()
},
// 搜索
onRightBtn(e){
switch(e.index){
case 0:
this.$Router.push({name: 'Search'})
break
}
},
// 企业广场
getCompanies(){
companies().then(res=>{
this.recommendBus = res.positions
this.hotBus = res.hot
this.industryBus = [{title: '全部',}, ...res.industries]
this.getCompaniesList()
})
},
// 企业列表
getCompaniesList(){
companiesList().then(res => {
this.busList = res.data
this.busPages = res.pages
})
},
// 易货首页
getMall(){
mall().then(res => {
this.classify = res.categories
this.banners = res.banners
this.coupons = res.coupons
this.position = res.positions
})
this.getGoods()
},
// 商品列表
getGoods(){
list().then(res => {
this.goods = res.data
this.pages = res.page
})
},
// 商品详情
onGoods(e){
this.$Router.push({name: 'goodsDetails', params: {id: e.goods_id}})
},
// 易货分类
onClassify(){
this.$Router.push({name: 'goodsList'})
}
}
}
</script>
<style lang="scss" scoped>
// 易货
.header-back{
background-image: linear-gradient(to bottom, white , #f8f8f8);
padding-top: $padding;
// 易货轮播
.banner{
position: relative;
background: white;
margin: 0 $margin;
border-radius: $radius/2;
padding-top: calc(50% - #{$margin * 2});
overflow: hidden;
.banner-swiper{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
.cover{
width: 100%;
height: 100%;
border-radius: $radius/2;
}
}
}
// 分类
.classify{
display: flex;
margin: $margin/2;
flex-wrap: wrap;
.classify-item{
margin: $margin/2;
width: calc(20% - #{$margin});
text-align: center;
.cover{
width: 98rpx;
height: 98rpx;
vertical-align: top;
margin-bottom: $margin/2;
}
.title{
line-height: 40rpx;
font-size: $title-size-sm;
color: $text-gray;
}
}
}
}
// 每日推荐
.goods-push{
margin: 0 $margin;
background: white;
border-radius: $radius/2;
display: flex;
.itme{
width: 50%;
}
.item-mian{
width: 50%;
padding: $padding/2;
height: 450rpx;
box-sizing: border-box;
text-align: center;
border-right: solid 1rpx $border-color;
@extend .vertical;
.title{
font-weight: bold;
font-size: $title-size;
@extend .nowrap;
line-height: 50rpx;
}
.price{
color: $text-price;
font-size: $title-size;
font-weight: bold;
line-height: 50rpx;
text{
font-size: 80%;
margin-right: 10rpx;
}
}
.cover{
margin-bottom: 30rpx;
width: 220rpx;
height: 220rpx;
vertical-align: top;
}
}
.itme-list{
position: relative;
padding: 25rpx $padding/2;
padding-left: 150rpx;
height: 150rpx;
box-sizing: border-box;
.title{
font-size: $title-size-lg;
@extend .nowrap;
line-height: 60rpx;
}
.price{
color: $text-price;
font-size: $title-size;
font-weight: bold;
line-height: 40rpx;
text{
font-size: 80%;
margin-right: 10rpx;
}
}
.cover{
position: absolute;
left: $padding/2;
top: $padding/2;
width: calc(150rpx - #{$padding});
height: calc(150rpx - #{$padding});
}
}
}
// 优惠券
.coupons{
display: flex;
flex-wrap: wrap;
margin: -10rpx ($margin - 10rpx);
.coupons-item{
background: white;
width: calc(50% - 20rpx);
margin: 10rpx;
border-radius: $radius/2;
padding: $padding - 10;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
.content{
width: calc(100% - 118rpx);
.coupons-title{
font-size: $title-size-lg;
@extend .nowrap;
}
.sun-text{
font-size: $title-size-sm;
color: $text-gray;
margin-bottom: $margin/2;
@extend .nowrap;
}
.btn{
color: $text-price;
border:solid 1rpx $text-price;
display: inline-block;
font-size: $title-size-sm;
padding: 0 ($padding/2);
height: 45rpx;
line-height: 45rpx;
border-radius: 22rpx;
}
}
.logo{
width: 98rpx;
height: 98rpx;
border-radius: 50%;
border:solid 1rpx $border-color;
}
}
}
// 行业分类
.industry-tabs{
white-space:nowrap;
padding: 0 0 $padding 0;
.industry-item{
margin-left: $margin;
display: inline-block;
@@ -160,7 +420,7 @@
}
// 热易商家
.hot-swiper{
margin: $margin;
margin: 0 $margin $margin $margin;
height: 198rpx;
.hot-box{
position: absolute;
@@ -168,7 +428,6 @@
width: 100%;
border-radius: ($radius/2);
background: white;
box-shadow: 0 0 6rpx 6rpx rgba($color: #000, $alpha: .02);
padding: $padding;
box-sizing: border-box;
.cover{
@@ -178,15 +437,14 @@
width: calc(198rpx - #{$padding * 2});
height: calc(198rpx - #{$padding * 2});
}
.content{
.hot-content{
padding-left: calc(198rpx - #{$padding});
padding-right: calc(100rpx + #{$padding});
.title{
.hot-title{
font-weight: bold;
font-size: $title-size-lg;
line-height: 40rpx;
height: 40rpx;
color: $text-color;
padding-bottom: 10rpx;
}
.credibility{
@@ -217,11 +475,9 @@
// 推荐商家
.recommended{
white-space:nowrap;
padding: $padding 0;
.item-box{
display: inline-block;
background: white;
box-shadow: 0 0 6rpx 6rpx rgba($color: #000, $alpha: .02);
width: 240rpx;
margin-left: $margin;
border-radius: ($radius/2);
@@ -242,7 +498,6 @@
font-weight: bold;
font-size: $title-size-lg;
padding: ($padding/2) 0;
color: $text-color;
}
.item-btn{
font-size: $title-size-m;
@@ -254,27 +509,20 @@
}
}
}
// 搜索
.search{
padding: $padding;
.nav{
background: white;
border-radius: $radius/2;
height: 70rpx;
line-height: 70rpx;
text-align: center;
box-shadow: 0 0 6rpx 6rpx rgba($color: #000000, $alpha: .02);
font-size: $title-size-lg;
color: $text-gray-m;
}
}
// 模块标题
.block-title{
padding: 0 $padding;
font-weight: bold;
color: $text-color;
padding: $padding;
display: flex;
justify-content: space-between;
.title{
font-weight: bold;
text{
padding-left: $padding/2;
font-weight: normal;
font-size: $title-size-m;
color: $text-gray;
}
}
.more{
font-size: $title-size-m;
font-weight: normal;
@@ -283,41 +531,4 @@
}
</style>
<!-- goods: [
{
cover: "https://yanxuan-item.nosdn.127.net/d3b072b5006f56935d15d239cbc5c953.jpg",
title: "片片大果仁,夏威夷坚果脆片 可可味 55克",
price: "16",
sales: "25"
},
{
cover: "https://yanxuan-item.nosdn.127.net/8cfaed758404e23bc74c7214505ce5ec.jpg",
title: "每日坚果亚麻籽谷物燕麦片 600克",
price: "58",
sales: "1002"
},
{
cover: "https://yanxuan-item.nosdn.127.net/65af0745153e2dfa3d7c4fafb7472db6.jpg",
title: "全新升级银罐,玲珑柑普茶 130克10颗",
price: "98",
sales: "2235"
},
{
cover: "https://yanxuan-item.nosdn.127.net/f3af9b6eaf15e6e3be1f14e14da90930.jpg",
title: "别致养生设计 猪鬃气垫按摩梳",
price: "79",
sales: "992"
},
{
cover: "https://yanxuan-item.nosdn.127.net/cb99e8a2f4597f3a5d05347a9eeb64c5.png",
title: "2020年新款日式减压按摩腰靠",
price: "219",
sales: "231"
},
{
cover: "https://yanxuan-item.nosdn.127.net/fff6aead2baff207e869f0aa6f276b63.png",
title: "T300无线吸尘器",
price: "159",
sales: "988"
}
] -->

View File

@@ -1,6 +1,6 @@
<template>
<view>
搜索
</view>
</template>

View File

@@ -1,33 +1,29 @@
<template>
<view class="content">
<view class="content" v-if="!loding">
<!-- 轮播主图 -->
<view class="goods-covers">
<swiper class="swiper">
<swiper-item>
<image class="swiper-item" src="https://yanxuan-item.nosdn.127.net/b3cc0eadfe8581b8bc86f428b18a5ea8.png" mode="aspectFill"/>
</swiper-item>
<swiper-item>
<image class="swiper-item" src="https://yanxuan-item.nosdn.127.net/a7f8652eeecb2c0e1915120b1d986510.png" mode="aspectFill"/>
</swiper-item>
<swiper-item>
<image class="swiper-item" src="https://yanxuan-item.nosdn.127.net/afb05e6fc75e7476729146214450f0ae.png" mode="aspectFill"/>
<swiper class="swiper" indicator-dots indicator-active-color="#c82626">
<block v-if="goodsObj.pictures.length > 0">
<swiper-item v-for="(item, index) in goodsObj.pictures" :key="index">
<image class="swiper-item" :src="item" mode="aspectFill"/>
</swiper-item>
</block>
</swiper>
</view>
<!-- 产品详情 -->
<view class="goods-content">
<view class="header">
<view class="title">谷风一木3层软抽面巾纸 6/</view>
<view class="sub-title">进口原木浆 和风高颜值</view>
<view class="title">{{goodsObj.name}}</view>
<view class="sub-title">{{goodsObj.description}}</view>
<view class="flex-box">
<view class="price"><text></text>100.00</view>
<view class="sales">累计易货10</view>
<view class="price"><text></text>{{goodsObj.price.show}}</view>
<view class="sales">累计易货{{goodsObj.sales}}</view>
</view>
</view>
<!-- 商家信息 -->
<view class="store">
<view class="title">宜家哈尔滨旗舰店</view>
<image class="logo" src="@/static/dev/good_cover_06.jpg" mode="aspectFill"></image>
<view class="title">{{goodsObj.shop.name}}</view>
<image class="logo" :src="goodsObj.shop.cover" mode="aspectFill"></image>
<view class="rate">
<uni-rate
:readonly="true"
@@ -43,7 +39,7 @@
<view class="size">
<view class="size-item nowrap">
<label class="title">产品规格</label>
17个功能分区理性展现
{{goodsObj.skus[0].goods_name}}
</view>
<view class="size-item nowrap">
<label class="title">限制</label>
@@ -56,36 +52,53 @@
</view>
<!-- 产品详情 -->
<view class="product">
<image src="https://yanxuan-item.nosdn.127.net/15b6eb17fd2dfc10824d19262d579115.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/64bba3712d2de3afbd01209ddc8a144c.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/e361196cfdc93e697214cb8b73715d7b.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/b508dcfc9b597e0563fb9703084df968.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/47aea2602cdc2d74f7c1470845b10228.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/47aea2602cdc2d74f7c1470845b10228.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/a93ea06bab7212b3d09b58a4ef6ef992.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/48062fd41ab8345e4d89dcc9ae882a83.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/c6144d9afbfa23dae5127d71b27f9286.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/d36cbe3e7a3a51ad5809ace03a2ec11a.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/55152a8961ac3e4315bf0e9078c201de.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/e1daf70033b4a560ea3a163b7b2901ba.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/86a0fa00f375e4b266a528d2c4cc35fd.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/71bac1bfd70aeb8d6b97eae4f4d4af67.jpg" mode="widthFix"></image>
<image src="https://yanxuan-item.nosdn.127.net/2a536f0650b2a2cbb53373e758f0439e.jpg" mode="widthFix"></image>
<block v-for="(item, index) in goodsObj.content" :key="index">
<image :src="item" mode="widthFix"></image>
</block>
</view>
</view>
<!-- footer -->
<view class="footer">
<button class="btn" size="default">立即购买</button>
<button class="btn" size="default" @click="buyGoods">立即购买</button>
</view>
</view>
</template>
<script>
import { goods } from '@/apis/interfaces/goods'
import userAuth from '@/public/userAuth'
export default {
data() {
return {
loding : true,
goodsObj: {},
identity: ''
};
},
created() {
goods(this.$Route.query.id || 16).then(res=>{
this.loding = false
this.goodsObj = res
this.identity = res.identity.id || ''
})
},
methods:{
// 提交购买单
buyGoods(){
let token = this.$store.getters.getToken
if(token == ''){
let userLogin = new userAuth()
userLogin.Login()
return
}
this.$Router.push({
name: 'Buy',
params: {
skuId: this.goodsObj.skus[0].sku_id,
type : this.identity
}
})
}
}
}
</script>
@@ -102,7 +115,6 @@
top: 0;
left: 0;
z-index: 1;
background: #3F536E;
width: 100%;
padding-top: 100%;
.swiper{

83
pages/goods/lists.vue Normal file
View File

@@ -0,0 +1,83 @@
<template>
<view>
<view class="tabs">
<view class="tabs-item" :class="{'show': tabIndex == 0}" @click="onTabs" data-index="0">最新</view>
<view class="tabs-item" :class="{'show': tabIndex == 1}" @click="onTabs" data-index="1">
价格
<image
class="icon"
mode="widthFix" :src="require(marketType == 'low' ? '@/static/icons/market_icon_low.png': '@/static/icons/market_icon_high.png')"
/>
</view>
</view>
<view class="lists">
<goods-list :list="goods" priceType="CNY" @on-goods="onGoods" />
</view>
</view>
</template>
<script>
import { list } from '@/apis/interfaces/goods'
import goodsList from '@/components/goods-list/goods-list'
export default {
data() {
return {
tabIndex : 0,
marketType : 'low',
goods : []
};
},
created() {
list().then(res=>{
this.goods = res.data
this.pages = res.page
})
},
methods:{
onTabs(e){
let index = e.target.dataset.index
if(index == 0 && index == this.tabIndex) return
if(index == 1 && index == this.tabIndex) this.marketType = this.marketType == 'low' ? 'high': 'low'
this.tabIndex = index
},
onGoods(e){
this.$Router.push({name: 'goodsDetails', params: {id: e.goods_id}})
}
}
}
</script>
<style lang="scss" scoped>
.tabs{
position: fixed;
top: 0;
left: 0;
z-index: 9;
width: 100%;
display: flex;
justify-content: space-around;
background: white;
height: 70rpx;
line-height: 70rpx;
text-align: center;
.tabs-item{
font-size: $title-size-m;
color: $text-gray;
.icon{
width: 32rpx;
height: 32rpx;
vertical-align: middle;
margin-left: $margin / 3;
margin-bottom: 4rpx;
}
&.show{
color: $text-price;
}
}
}
// 列表
.lists{
padding-top: 70rpx;
}
</style>

View File

@@ -52,6 +52,7 @@
this.$Router.replace({name: "Registered"})
return
}
this.$Router.back()
}).catch(err => {
uni.showToast({
title: err.message,

View File

@@ -41,6 +41,9 @@
if(index == 1 && index == this.tabIndex) this.marketType = this.marketType == 'low' ? 'high': 'low'
this.tabIndex = index
}
},
onNavigationBarButtonTap(){
this.$Router.push({name: "marketLogs"})
}
}
</script>

View File

@@ -1,6 +1,6 @@
<template>
<view>
会员支付
成交历史
</view>
</template>
@@ -9,14 +9,11 @@
data() {
return {
}
},
methods: {
};
}
}
</script>
<style>
<style lang="scss">
</style>

284
pages/order/buy.vue Normal file
View File

@@ -0,0 +1,284 @@
<template>
<view v-if="loding">
<!-- 订单信息 -->
<view class="order-list" v-for="(mall, mallIndex) in detail" :key="mallIndex">
<view class="shop-name">
<image class="logo" :src="mall.shop.cover" mode="aspectFill"></image>
{{mall.shop.name || '-'}}
</view>
<view class="item" v-for="(item, itemsIndex) in mall.items" :key="itemsIndex">
<image class="cover" :src="item.cover" mode="aspectFill"></image>
<view class="title">{{item.title}}</view>
<view class="tool">
<view class="price"><text></text>{{item.price}}</view>
<uni-number-box class="number" :min="1" :value="qty" @change="numberChange"></uni-number-box>
</view>
</view>
</view>
<view class="amount">
<view class="item">
<label>订单金额</label>
<view class="price nowrap">{{amount}}</view>
</view>
<block v-if="coupons.length > 0">
<view class="item">
<label>使用优惠券</label>
<picker>
<view class="picker-text nowrap">
优惠券
<uni-icons type="arrowright" color="#ddd"></uni-icons>
</view>
</picker>
</view>
<view class="item">
<label>优惠金额</label>
<view class="price nowrap">-{{couponPrice}}</view>
</view>
</block>
</view>
<!-- 支付方式 -->
<radio-group class="pay-group" @change="payType">
<view class="item" v-if="buyTypeId != 1">
<label>
<radio class="radio" value="eb" checked color="#c82626" />
<view class="title">易货额支付</view>
<view class="sub-title" v-if="payValue === 'eb'">可用{{account.getEBBalance}} 冻结{{account.getEBFrozen}}</view>
</label>
</view>
<view class="item">
<label>
<radio class="radio" value="wx" color="#c82626" />
<view class="title">微信支付</view>
</label>
</view>
</radio-group>
<!-- footer -->
<view class="footer">
<button size="default" @click="buyOrder">提交订单</button>
</view>
</view>
</template>
<!-- <uni-number-box :min="1" v-model="qty"></uni-number-box> -->
<script>
import { buy } from '@/apis/interfaces/order'
export default {
data() {
return {
loding : false,
detail : {},
qty : 1,
couponPrice : 0,
amount : 0,
total : 0,
coupons : [],
account : {},
payValue : 'eb',
buyTypeId : ''
}
},
created(){
buy({
goods_sku_id: this.$Route.query.skuId || 23,
qty : this.qty,
type : this.$Route.query.type === 1 ? 2: 1
}, 'GET').then(res=>{
this.loding = true
this.buyTypeId = this.$Route.query.type
this.payValue = this.$Route.query.type === 1 ? 'wx' : 'eb'
this.detail = res.detail
this.couponPrice = res.coupon_price
this.amount = res.amount
this.total = res.total
this.coupons = res.coupons
this.account = res.account
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
payType(e){
this.payValue = e.detail.value
},
//数量变化
numberChange(e){
this.qty = e
this.amount = this.detail[0].items[0].price * e
},
// 提交订单
buyOrder(){
buy({
goods_sku_id: this.$Route.query.skuId || 23,
qty : this.qty,
type : this.payValue == 'eb' ? 1 : 2,
remark : 'app订单'
}, 'POST').then(res=>{
uni.showToast({
title: '订单id:' + res.order_no,
icon : 'none'
})
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 微信pay
wxPay(){
}
}
}
</script>
<style lang="scss" scoped>
// 商品统计
.amount{
background: white;
margin: $margin;
border-radius: $radius/2;
padding: 0 $padding;
box-sizing: border-box;
.item{
position: relative;
border-bottom: solid 1rpx $border-color;
padding-left: 160rpx;
line-height: 90rpx;
text-align: right;
&:last-child{
border-bottom: none;
}
label{
position: absolute;
left: 0;
top: 0;
font-size: $title-size-lg;
}
.number-box{
display: inline-block;
line-height: 90rpx;
}
.price{
color: $text-price;
}
.picker-text{
font-size: $title-size-lg;
color: $text-gray;
}
}
}
// 支付方式
.pay-group{
background: white;
margin: $margin;
border-radius: $radius/2;
padding: 0 $padding;
box-sizing: border-box;
.item{
position: relative;
border-bottom: solid 1rpx $border-color;
padding: ($padding - 10) 70rpx ($padding - 10) 0;
&:last-child{
border-bottom: none;
}
.radio{
position: absolute;
right: 0;
top: 50%;
margin-top: -25rpx;
}
.sub-title{
font-size: $title-size-sm;
color: $text-gray;
line-height: 40rpx;
}
.title{
font-size: $title-size-lg;
line-height: 50rpx;
}
}
}
// 支付按钮
.footer{
padding: 0 $padding $padding*2;
button{
background: $text-price;
font-size: $title-size;
color: white;
height: 90rpx;
line-height: 90rpx;
font-weight: bold;
border-radius: $radius/2;
&::after{
border: none;
}
}
}
// 订单商品列表
.order-list{
background: white;
margin: $margin;
border-radius: $radius/2;
padding: $padding;
box-sizing: border-box;
.shop-name{
position: relative;
padding-bottom: $padding;
font-size: $title-size-lg;
padding-left: 68rpx;
line-height: 48rpx;
min-height: 48rpx;
color: $text-color;
.logo{
position: absolute;
left: 0;
top: 0;
width: 48rpx;
height: 48rpx;
}
}
.item{
position: relative;
padding-left: 180rpx;
padding-bottom: $padding/2;
padding-top: $padding/2;
min-height: 160rpx;
.cover{
position: absolute;
left: 0;
top: $padding/2;
height: 160rpx;
width: 160rpx;
background: #2C405A;
}
.title{
height: 110rpx;
line-height: 40rpx;
font-size: $title-size-lg;
color: $text-color;
}
.tool{
display: flex;
justify-content: space-between;
align-items: center;
.price{
font-weight: bold;
color: $text-price;
font-size: $title-size;
line-height: 40rpx;
height: 40rpx;
text{
font-size: 80%;
}
}
}
}
}
</style>

View File

@@ -1,6 +1,27 @@
<template>
<view>
资产
<view class="androidwx">
321312
</view>
<view class="androidwx">
321312
</view>
<view class="androidwx">
321312
</view>
<view class="androidwx">
321312
</view>
<view class="androidwx">
321312
</view>
<view class="androidwx">
321312
</view>
<view class="androidwx">
321312
</view>
<button type="default" @click="onOut">退出登录</button>
</view>
</template>
@@ -9,11 +30,13 @@
data() {
return {
};
}
},
methods: {
onOut(){
this.$store.commit('setToken', '')
}
}
}
</script>
<style lang="scss">
</style>

406
pages/store/basics.vue Normal file
View File

@@ -0,0 +1,406 @@
<template>
<view class="ios-bottom">
<view class="info">
<view class="item info-logo" @click="updImg('logo', '')">
<label>企业LOGO</label>
<image :src="logo" mode="aspectFill"></image>
<uni-icons class="icon" color="#999" size="18" type="arrowright"></uni-icons>
</view>
<view class="item info-text">
<label>企业简介</label>
<textarea v-model="description" placeholder="输入企业简介" />
</view>
</view>
<block v-for="(module,index) in modules" :key="index">
<view class="module-item" v-if="module.type === 1">
<view class="module-title">
<input class="title-input" type="text" v-model="module.title" placeholder="输入标题" />
<view class="remove-btn" @click="removeModule(index)">删除</view>
</view>
<view class="module-textarea">
<textarea placeholder="输入文字内容" v-model="module.content.content" />
</view>
</view>
<view class="module-item" v-if="module.type === 2">
<view class="module-title">
<input class="title-input" type="text" v-model="module.title" placeholder="输入标题" />
<view class="remove-btn" @click="removeModule(index)">删除</view>
</view>
<view class="module-imgs">
<view class="item" v-for="(item, index) in module.content.image.showpath" :key="index">
<image class="cover" :src="item" mode="aspectFill"></image>
</view>
<view class="item" @click="updImgs(index)">
<view class="item-upd cover">
<uni-icons type="plus" size="20" color="#999"/>
<view>上传图片</view>
</view>
</view>
</view>
<view class="module-hint">点击查看图片长按删除图片</view>
</view>
<view class="module-item" v-if="module.type === 3">
<view class="module-title">
<input class="title-input" type="text" v-model="module.title" placeholder="输入标题" />
<view class="remove-btn" @click="removeModule(index)">删除</view>
</view>
<view class="module-videos">
<view class="item">
<image class="cover" v-if="module.content.video_image.showpath != ''" :src="module.content.video_image.showpath" mode="aspectFill" />
<view class="item-upd" @click="updImg('videoCover', index)" v-else>
<uni-icons type="plus" size="20" color="#999"/>
<view>上传视频封面</view>
</view>
</view>
<view class="item">
<video class="cover" v-if="module.content.video_url.showpath != ''" :src="module.content.video_url.showpath" />
<view class="item-upd" @click="updImg('video', index)" v-else>
<uni-icons type="plus" size="20" color="#999"/>
<view>上传视频</view>
</view>
</view>
</view>
<view class="module-hint">点击查看封面/视频长按删除封面/视频</view>
</view>
</block>
<view class="add-modules" @click="addModule">
<uni-icons class="icon" type="plus" size="18" color="#c82626"/> 添加展示模块
</view>
</view>
</template>
<script>
import { basicsInfo, basicsConfig } from '@/apis/interfaces/store'
import { uploading, uploads } from '@/apis/interfaces/uploading'
export default {
data() {
return {
logo : '',
description : '',
modules : [],
modulesType : []
};
},
created() {
Promise.all([basicsInfo('GET', {}), basicsConfig()]).then(res => {
let info = res[0]
this.logo = info.base.cover
this.description = info.base.description
this.modules = info.extends
this.modulesType = res[1]
}).catch(err => {
uni.showToast({
title: err,
icon : 'none'
})
})
},
methods:{
// 单图上传
updImg(type, index){
console.log(index)
switch(type){
case 'logo':
uni.chooseImage({
crop: {width: 300, height: 300},
success: path=> {
uploads([{
name: 'logo',
uri : path.tempFilePaths[0]
}]).then(res => {
this.logo = res.url[0]
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
})
break
case 'videoCover':
console.log('封面')
uni.chooseImage({
crop: {width: 500, height: 350},
success: path=> {
uploads([{
name: 'logo',
uri : path.tempFilePaths[0]
}]).then(res => {
let modulesObj = this.modules[index]
modulesObj.content.video_image.showpath = [...modulesObj.content.video_image.showpath, ...res.url]
modulesObj.content.video_image.path = [...modulesObj.content.video_image.path, ...res.path]
this.$set(this.modules, index, modulesObj)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
})
break
case 'video':
uni.chooseVideo({
success: path=> {
console.log(path)
}
})
console.log('上传视频')
break
}
},
// 批量上传图片
updImgs(index){
uni.chooseImage({
success: res=>{
let path = res.tempFiles.map((val, index) => {
return {
name: 'uploads' + index,
uri : val.path
}
})
uploads(path).then(pathRes => {
let modulesObj = this.modules[index]
modulesObj.content.image.showpath = [...modulesObj.content.image.showpath, ...pathRes.url]
modulesObj.content.image.path = [...modulesObj.content.image.path, ...pathRes.path]
this.$set(this.modules, index, modulesObj)
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
}
})
},
// 添加展示模块
addModule(){
let modulesList = this.modulesType.map(val => {
return val.value
})
uni.showActionSheet({
itemList: modulesList,
success : res => {
let content
switch(this.modulesType[res.tapIndex].id){
case 1:
content = {
content: ''
}
break
case 2:
content = {
image: {
showpath: [],
path : []
}
}
break
case 3:
content = {
video_image: {
showpath: '',
path : ''
},
video_url : {
showpath: '',
path : ''
}
}
break
}
this.modules.push({
type : this.modulesType[res.tapIndex].id,
title : '',
content : content
})
}
})
},
// 删除展示模块
removeModule(index){
this.modules.splice(index, 1)
},
// 保存基础信息
onNavigationBarButtonTap(e){
console.log(this.modules)
}
}
}
</script>
<style lang="scss" scoped>
// 基础信息
.info{
background: white;
padding: 0 $padding;
.item{
position: relative;
padding: $padding 0 $padding 200rpx;
&::after{
position: absolute;
left: 0;
bottom: 0;
right: -$padding;
content: " ";
height: 1rpx;
background: #eee;
}
&:last-child::after{
display: none;
}
}
.info-logo{
text-align: right;
padding-right: 40rpx;
label{
position: absolute;
left: 0;
height: 88rpx;
line-height: 88rpx;
}
image{
width: 88rpx;
height: 88rpx;
border-radius: 50%;
vertical-align: top;
background: $border-color-lg;
}
.icon{
position: absolute;
right: 0;
top: 50%;
margin-top: -10px;
}
}
.info-text{
label{
position: absolute;
left: 0;
height: 40rpx;
line-height: 40rpx;
}
textarea{
line-height: 40rpx;
width: 100%;
height: 160rpx;
}
}
}
// 模块
.add-modules{
line-height: 90rpx;
text-align: center;
color: $text-price;
background: white;
margin-top: $margin;
.icon{
vertical-align: middle;
margin-right: $margin/3;
}
}
// 展示模块
.module-item{
background: white;
padding: $padding/2 $padding;
margin-top: $margin;
.module-title{
display: flex;
justify-content: space-between;
padding-bottom: $padding/2;
border-bottom: solid 1rpx $border-color;
.title-input{
width: calc(100% - 150rpx);
height: 70rpx;
font-size: $title-size;
}
.remove-btn{
line-height: 70rpx;
color: $text-price;
text-align: right;
font-size: $title-size-m;
}
}
.module-textarea{
padding: $padding 0 $padding/2;
width: 100%;
font-size: $title-size;
line-height: 50rpx;
height: 200rpx;
}
.module-imgs{
display: flex;
flex-wrap: wrap;
padding-top: $padding/2;
margin-left: -10rpx;
margin-right: -10rpx;
.item{
position: relative;
background: #F8F8F8;
width: calc(25% - 20rpx);
padding-top: calc(25% - 20rpx);
margin: 10rpx;
.cover{
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
.item-upd{
@extend .vertical;
text-align: center;
font-size: $title-size-m;
color: $text-gray-m;
}
}
}
.module-hint{
color: $text-gray;
font-size: $title-size-sm;
padding: $padding/2 0;
line-height: 50rpx;
}
.module-videos{
display: flex;
padding: $padding 0 ($padding/2);
margin-left: -10rpx;
margin-right: -10rpx;
.item{
position: relative;
width: calc(50% - #{$margin/2});
padding-top: calc(35% - #{$margin/2});
background: #f8f8f8;
margin: 0 10rpx;
.item-upd{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
text-align: center;
font-size: $title-size-m;
color: $text-gray-m;
line-height: 40rpx;
@extend .vertical;
}
.cover{
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
}
}
</style>

216
pages/store/customer.vue Normal file
View File

@@ -0,0 +1,216 @@
<template>
<view class="content">
<!-- tabs -->
<view class="tabs">
<view class="item" :class="{'show': tabsIndex == 'day'}" @click="onTbas('day')">日成交</view>
<view class="item" :class="{'show': tabsIndex == 'month'}" @click="onTbas('month')">月成交</view>
<view class="item" :class="{'show': tabsIndex == 'year'}" @click="onTbas('year')">年成交</view>
</view>
<!-- 统计信息 -->
<view class="statistics">
<picker mode="date" :fields="tabsIndex" :value="dateValue" :end="endDate" @change="pickerDate">
<view class="statistics-date">
{{dateValue}}<uni-icons class="arrowdown" type="arrowdown" color="#555"></uni-icons>
</view>
</picker>
<view class="statistics-text">
<text>成交客户量 {{visitor.day}} </text>
<text>累计访客量 {{visitor.all}} </text>
</view>
</view>
<!-- 数据列表 -->
<view class="lists">
<block v-if="orders.length > 0">
<view class="item" v-for="(item, index) in orders" :key="index">
<image class="cover" :src="item.user.avatar" mode="aspectFill"></image>
<view class="title nowrap">
{{item.user.username}}
<view class="type">{{item.state}}</view>
</view>
<view class="sub-title nowrap">订单号: {{item.order_no}}</view>
<view class="sub-title nowrap">{{item.created_at}}</view>
</view>
</block>
<block v-else>
<view class="list-null">
<image class="icon" src="@/static/icons/listnull-icon.png" mode="widthFix"></image>
<view class="sub-title">暂无相关成交客户记录</view>
</view>
</block>
</view>
</view>
</template>
<script>
import getDate from '@/public/date'
import { customer } from '@/apis/interfaces/store'
export default {
data() {
return {
tabsIndex: 'day',
dateValue: '',
endDate : '',
visitor : {
day: 0,
all: 0
},
orders : [],
pages : {}
};
},
created() {
getDate().then(res => {
this.dateValue = res
this.endDate = res
this.getLists()
})
},
methods:{
// tabs筛选
onTbas(type){
getDate(type).then(res => {
this.tabsIndex = type
this.dateValue = res
this.getLists()
})
},
// 日期筛选
pickerDate(e){
let dateValue = e.detail.value
this.dateValue = dateValue
this.getLists()
},
// 获取列表
getLists(){
customer({
type: this.tabsIndex,
date: this.dateValue
}).then(res => {
this.visitor = res.visitor
this.orders = res.orders.data
this.pages = res.orders.page
}).catch(err => {
uni.showToast({
title: err,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss">
// 空提示
.list-null{
width: 100vw;
height: 40vh;
background: white;
text-align: center;
@extend .vertical;
.sub-title{
color: $text-gray;
font-size: $title-size-m;
}
.icon{
width: 288rpx;
}
}
// content
.content{
padding-top: 80rpx;
}
// tabs
.tabs{
position: fixed;
z-index: 9;
top: 0;
left: 0;
width: 100%;
display: flex;
background: white;
justify-content: space-around;
line-height: 80rpx;
font-size: $title-size-m;
color: $text-gray;
.item.show{
color: $text-price;
font-weight: bold;
}
}
// 统计信息
.statistics{
margin-top: $margin;
background-color: white;
border-bottom: solid 1rpx $border-color;
padding: $padding;
.statistics-date{
font-size: $title-size + 4;
font-weight: bold;
line-height: 60rpx;
.arrowdown{
margin-left: $margin/2;
}
}
.statistics-text{
font-size: $title-size-sm;
color: gray;
line-height: 50rpx;
text{
margin-left: $margin;
&:first-child{
margin: 0;
}
}
}
}
// 客户列表
.lists{
padding: $padding/2 0;
background: white;
.item{
padding: ($padding - 10) $padding ($padding - 10) ($padding*2 + 68);
position: relative;
min-height: 68rpx;
&::after{
position: absolute;
left: $padding*2 + 68;
top: 0;
right: 0;
content: ' ';
border-bottom: solid 1rpx $border-color;
}
&:first-child::after{
display: none;
}
.cover{
position: absolute;
left: $padding;
top: $padding - 10;
width: 68rpx;
height: 68rpx;
border-radius: 50%;
background-color: #eee;
}
.title{
padding-right: 200rpx;
position: relative;
line-height: 58rpx;
font-size: $title-size-lg;
.type{
position: absolute;
right: 0;
top: 0;
width: 180rpx;
text-align: right;
color: $text-price;
}
}
.sub-title{
line-height: 40rpx;
font-size: $title-size-sm;
color: $text-gray;
}
}
}
</style>

19
pages/store/employees.vue Normal file
View File

@@ -0,0 +1,19 @@
<template>
<view>
员工
</view>
</template>
<script>
export default {
data() {
return {
};
}
}
</script>
<style lang="scss">
</style>

View File

@@ -1,31 +1,246 @@
<template>
<view>
<view class="">店铺</view>
<!-- 登录 -->
<view class="content" v-if="!loding">
<block v-if="this.$store.state.token != ''">
<block v-if="!certification">
<!-- 企业认证 -->
<view class="statusBar">
<view class="statusBar-title">企业工具</view>
</view>
<view class="store-login">
<block v-if="appliesState.code === -1">
<image class="icon" src="@/static/icons/approve-icon.png" mode="widthFix"></image>
<view class="sub-title">{{appliesState.message}}</view>
<button type="default" @click="onRightBtn">认证并开通</button>
</block>
<block v-else-if="appliesState.code === 2">
<image class="icon" src="@/static/icons/approve-icon.png" mode="widthFix"></image>
<view class="title">认证失败</view>
<view class="sub-title">{{appliesState.message}}</view>
<button type="default" @click="$Router.push({name: 'Approve', params: {formType: 'put'}})">重新提交认证</button>
</block>
<block v-else-if="appliesState.code === 0">
<image class="icon" src="@/static/icons/audit-icon.png" mode="widthFix"></image>
<view class="sub-title">{{appliesState.message}}</view>
</block>
</view>
</block>
<block v-else>
<view class="statusBar">
<view class="statusBar-box">
<image class="logo" :src="company.logo" mode="aspectFill"></image>
<view class="company">
<view class="name">{{company.name}}</view>
<view class="faith">诚信{{company.faith}}</view>
</view>
<view class="btn">{{company.identity}}</view>
</view>
</view>
<!-- 老板 -->
<boss v-if="!employee" :word-data="workbench"/>
<!-- 员工 -->
<staff v-if="employee"/>
</block>
</block>
<!-- 登录提示 -->
<block v-else>
<view class="statusBar">
<view class="statusBar-title">企业工具</view>
</view>
<view class="store-login">
<image class="icon" src="@/static/icons/login-icon.png" mode="widthFix"></image>
<view class="sub-title">一键开启您的易货之旅</view>
<button type="default" @click="login">登录</button>
</view>
</block>
</view>
</template>
<script>
import { index } from '@/apis/interfaces/store'
import { isallow, appliesQuery } from '@/apis/interfaces/company'
import boss from '@/components/store-boss/store-boss'
import staff from '@/components/store-staff/store-staff'
import userAuth from '@/public/userAuth'
export default {
components:{
boss,
staff
},
data() {
return {
loding : true,
appliesState : {},
certification: false,
employee : false,
workbench : {},
company : {}
}
},
onShow(){
this.getIndex()
},
methods: {
// 首页数据
getIndex(){
if(this.$store.state.token == ''){
this.loding = false
return
}
index().then(res => {
if(!res.is_certification){
this.getAppliesQuery()
return
}
this.company = {
logo : res.cover,
name : res.name,
identity: res.company_identity,
faith : res.integrity
}
this.workbench = {
top : res.top,
middle : res.middle,
order : res.order
}
this.certification = res.is_certification
this.employee = res.is_employee
this.loding = false
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 查询企业认证状态
getAppliesQuery(){
appliesQuery().then(res=>{
this.appliesState = res
this.loding = false
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 登录
login(){
let auth = new userAuth()
auth.Login()
// auth.keyLogin()
// auth.smsLogin()
auth.Login().then(res => {
if(res.auth) this.getIndex()
}).catch(err => {
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 开通vip
onRightBtn(){
isallow().then(res =>{
this.$Router.push({name: 'Approve'})
}).catch(err =>{
uni.showModal({
title : '提示',
content : '暂未开通商家vip无法开通店铺工具',
confirmText : '立即开通',
success : res=> {
if(res.confirm){
this.$Router.push({name: 'Vip'})
}
}
})
})
}
}
}
</script>
<style>
<style lang="scss" scoped>
// 登录提示
.store-login{
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 9;
background: white;
text-align: center;
@extend .vertical;
button{
margin-top: $margin*3;
display: inline-block;
width: 50%;
height: 90rpx;
line-height: 90rpx;
border-radius: $radius/2;
background: $text-price;
color: white;
font-weight: bold;
font-size: $title-size;
}
.sub-title{
color: $text-gray;
font-size: $title-size-m;
}
.icon{
width: 288rpx;
}
}
// Bar
.statusBar{
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 99;
background: $text-price;
@extend .ios-top;
.statusBar-box{
min-height: 68rpx;
position: relative;
padding: $padding ($padding + 200) $padding ($padding + 88);
color: white;
.logo{
position: absolute;
left: $padding;
width: 68rpx;
height: 68rpx;
border-radius: 50%;
}
.company{
.name{
line-height: 40rpx;
@extend .nowrap;
font-size: $title-size;
}
.faith{
line-height: 28rpx;
@extend .nowrap;
font-size: $title-size-sm;
}
}
.btn{
position: absolute;
right: $padding;
top: $padding;
line-height: 68rpx;
font-size: $title-size-m;
}
}
.statusBar-title{
line-height: 88rpx;
min-height: 88rpx;
color: white;
text-align: center;
font-weight: bold;
}
}
.content{
padding-top: calc(var(--status-bar-height) + #{$padding * 2} + 65rpx);
padding-bottom: $padding;
}
</style>

203
pages/store/visitors.vue Normal file
View File

@@ -0,0 +1,203 @@
<template>
<view class="content">
<!-- tabs -->
<view class="tabs">
<view class="item" :class="{'show': tabsIndex == 'day'}" @click="onTbas('day')">日成交</view>
<view class="item" :class="{'show': tabsIndex == 'month'}" @click="onTbas('month')">月成交</view>
<view class="item" :class="{'show': tabsIndex == 'year'}" @click="onTbas('year')">年成交</view>
</view>
<!-- 统计信息 -->
<view class="statistics">
<picker mode="date" :fields="tabsIndex" :value="dateValue" :end="endDate" @change="pickerDate">
<view class="statistics-date">
{{dateValue}}<uni-icons class="arrowdown" type="arrowdown" color="#555"></uni-icons>
</view>
</picker>
<view class="statistics-text">
<text>访客量 {{visitor.factor}} </text>
<text>累计访客量 {{visitor.all}} </text>
</view>
</view>
<!-- 数据列表 -->
<block v-if="orders.length > 0">
<view class="lists">
<view class="item" v-for="(item, index) in orders" :key="index">
<image class="cover" :src="item.avatar" mode="aspectFill"></image>
<view class="title">{{item.nickname || '-'}}</view>
<view class="sub-title">{{item.date || '-'}}</view>
</view>
</view>
</block>
<block v-else>
<view class="list-null">
<image class="icon" src="@/static/icons/listnull-icon.png" mode="widthFix"></image>
<view class="sub-title">暂无相关访客记录</view>
</view>
</block>
</view>
</template>
<script>
import { visitors } from '@/apis/interfaces/store'
import getDate from '@/public/date'
export default {
data() {
return {
tabsIndex: 'day',
dateValue: '',
endDate : '',
visitor : {
factor: 0,
all: 0
},
orders : []
};
},
created() {
getDate().then(res => {
this.dateValue = res
this.endDate = res
this.getLists()
})
},
methods:{
// tabs筛选
onTbas(type){
getDate(type).then(res => {
this.tabsIndex = type
this.dateValue = res
this.getLists()
})
},
// 日期筛选
pickerDate(e){
let dateValue = e.detail.value
this.dateValue = dateValue
this.getLists()
},
// 获取列表
getLists(){
visitors({
type: this.tabsIndex,
date: this.dateValue
}).then(res => {
console.log(res)
this.visitor = res.total
this.orders = res.lists.data
this.pages = res.lists.page
}).catch(err => {
uni.showToast({
title: err,
icon : 'none'
})
})
}
}
}
</script>
<style lang="scss">
// 空提示
.list-null{
width: 100vw;
height: 40vh;
background: white;
text-align: center;
@extend .vertical;
.sub-title{
color: $text-gray;
font-size: $title-size-m;
}
.icon{
width: 288rpx;
}
}
// content
.content{
padding-top: 80rpx;
}
// tabs
.tabs{
position: fixed;
z-index: 9;
top: 0;
left: 0;
width: 100%;
display: flex;
background: white;
justify-content: space-around;
line-height: 80rpx;
font-size: $title-size-m;
color: $text-gray;
.item.show{
color: $text-price;
font-weight: bold;
}
}
// 统计信息
.statistics{
margin-top: $margin;
background-color: white;
border-bottom: solid 1rpx $border-color;
padding: $padding;
.statistics-date{
font-size: $title-size + 4;
font-weight: bold;
line-height: 60rpx;
.arrowdown{
margin-left: $margin/2;
}
}
.statistics-text{
font-size: $title-size-sm;
color: gray;
line-height: 50rpx;
text{
margin-left: $margin;
&:first-child{
margin: 0;
}
}
}
}
// 客户列表
.lists{
padding: $padding/2 0;
background: white;
.item{
padding: ($padding/2) $padding ($padding/2) ($padding*2 + 68);
position: relative;
min-height: 68rpx;
&::after{
position: absolute;
left: $padding*2 + 68;
top: 0;
right: 0;
content: ' ';
border-bottom: solid 1rpx $border-color;
}
&:first-child::after{
display: none;
}
.cover{
position: absolute;
left: $padding;
top: $padding/2;
width: 68rpx;
height: 68rpx;
border-radius: 50%;
background: #eee;
}
.title{
position: relative;
line-height: 58rpx;
font-size: $title-size-lg;
}
.sub-title{
line-height: 40rpx;
font-size: $title-size-sm;
color: $text-gray;
}
}
}
</style>

View File

@@ -1,22 +1,287 @@
<template>
<view>
开通会员
<view class="content" v-if="!loding">
<!-- 会员类型 -->
<view class="tabs">
<view class="item" :class="{'show': index === tabsIndex}" v-for="(item, index) in identities" :key="index" @click="onTabs(index)">{{item.name}}</view>
</view>
<!-- 会员信息 -->
<view class="cards">
<view class="card">
<view class="card-content">
<image class="cover" src="@/static/dev/good_cover_01.png" mode="aspectFill"></image>
<view class="user nowrap">{{user.username}}</view>
<view class="sub-time nowrap">{{user.identity.name}}{{user.identity.ended_at}}</view>
<view class="btn" @click="openOrder">开通/续费</view>
</view>
</view>
<view class="cards-back"></view>
<image class="cards-angle" src="@/static/imgs/vip-angle-back.png" mode="widthFix"></image>
</view>
<!-- 会员权限 -->
<view class="privilege">
<view class="title">开通会员享特权</view>
<view class="privilege-box">
<view class="item" v-for="(item, index) in rights" :key="index" @click="showRemark(item.name, item.remark)">
<image class="icon" :src="item.cover" mode="aspectFill"></image>
<view class="text">{{item.name}}</view>
</view>
</view>
</view>
<!-- 会员 -->
<view class="footer">
<button class="footer-btn" type="default" @click="openOrder">{{identities[tabsIndex].price}}/&nbsp;开通</button>
</view>
<!-- 会员服务信息 -->
<view class="notice">
<view class="title">开通须知</view>
<view class="item">
<text>{{description}}</text>
</view>
</view>
</view>
</template>
<script>
import { identities, vipOrder, vipWechatPay } from '@/apis/interfaces/vip'
export default {
data() {
return {
loding : true,
tabsIndex : 0,
user : {},
identities : [],
rights : [],
description : ''
}
},
created() {
identities().then(res => {
this.loding = false
this.user = res.user
this.description= res.description
this.identities = res.identities
this.rights = res.identities[0].rights
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
// 切换开通身份
onTabs(index){
if(this.tabsIndex === index) return
this.tabsIndex = index
this.rights = this.identities[index].rights
},
// 会员权益介绍
showRemark(title, text){
uni.showModal({
title : title + '说明',
content : text,
showCancel : false
})
},
// 开通会员
openOrder(){
let identitiesId = this.identities[this.tabsIndex].identity_id
vipOrder(identitiesId).then(res => {
let verifyForm = res
this.wechatPay(res.id)
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 微信支付
wechatPay(id){
vipWechatPay(id).then(res => {
let payConfig = JSON.parse(res.wechat),
payIdentity = res.identity
uni.requestPayment({
provider : "wxpay",
orderInfo : payConfig,
success : payRes => {
console.log(payRes)
},
fail : payErr => {
console.log(payErr)
}
})
})
}
}
}
</script>
<style>
<style lang="scss" scoped>
.content{
min-height: 100vh;
background: #fefaef;
}
// 开通须知
.notice{
font-size: $title-size-m;
color: $text-gray;
padding: $padding $padding*2 $padding*2;
.title{
padding-bottom: $padding/2;
font-weight: bold;
}
.item{
padding-bottom: $padding/2;
line-height: 40rpx;
text-align: justify;
}
}
// footer
.footer{
padding: $padding $padding*2;
.footer-btn{
background-color: #201212;
height: 90rpx;
line-height: 90rpx;
padding: 0;
border-radius: 0;
color: #f7d79c;
font-size: $title-size;
font-weight: bold;
}
}
// 会员权限
.privilege{
padding: $padding;
.title{
font-weight: bold;
color: #322711;
font-size: $title-size;
text-align: center;
line-height: 90rpx;
}
.privilege-box{
display: flex;
flex-wrap: wrap;
padding: $padding 0;
.item{
width: 25%;
padding: $padding/2;
box-sizing: border-box;
text-align: center;
.icon{
width: 78rpx;
height: 78rpx;
background: #bd995d;
border-radius: 50%;
vertical-align: top;
}
.text{
font-size: $title-size-sm;
color: #201212;
line-height: 60rpx;
}
}
}
}
// 会员卡
.cards{
position: relative;
background: #1f1b1c;
.card{
position: relative;
margin: 0 $margin;
background: linear-gradient(to right, #3b3d4a, #231d1f);
padding: 15rpx;
border-radius: $radius/2;
z-index: 2;
.card-content{
position: relative;
border:solid 1rpx rgba($color: white, $alpha: .4);
border-radius: $radius/2;
padding: 30rpx 180rpx 60rpx 148rpx;
min-height: 98rpx;
.cover{
position: absolute;
left: 30rpx;
top: 30rpx;
width: 98rpx;
height: 98rpx;
border-radius: 50%;
}
.user{
color: rgba($color: white, $alpha: .7);
line-height: 58rpx;
font-size: $title-size-lg;
}
.sub-time{
line-height: 40rpx;
color: #e6ce9e;
font-size: $title-size-sm;
}
.btn{
position: absolute;
color: #261f0f;
background: #e6ce9e;
width: 160rpx;
border-radius: 30rpx;
font-size: $title-size-m;
right: 30rpx;
top: 50rpx;
line-height: 58rpx;
text-align: center;
}
}
}
.cards-angle{
position: absolute;
left: 0;
bottom: 0;
width: 100%;
z-index: 3;
}
&::after{
content: " ";
height: 70rpx;
background: #b29671;
position: absolute;
width: 100%;
bottom: 0;
border-radius: $radius/2;
z-index: 0;
}
}
// tabs
.tabs{
background: #1f1b1c;
color: white;
padding: 0 0 $padding 0;
display: flex;
justify-content: center;
font-size: $title-size-lg;
.item{
margin: 0 $margin;
line-height: 70rpx;
height: 70rpx;
color: rgba($color: white, $alpha: .6);
&.show{
position: relative;
font-weight: bold;
font-size: $title-size;
color: white;
&::after{
position: absolute;
bottom: 0;
left: 20%;
width: 60%;
height: 6rpx;
border-radius: 3rpx;
content: " ";
background: white;
}
}
}
}
</style>

30
public/date.js Normal file
View File

@@ -0,0 +1,30 @@
/**
* Web唐明明
* 匆匆数载恍如梦,岁月迢迢华发增。
* 碌碌无为枉半生,一朝惊醒万事空。
* moduleName: 日期
*/
export default getDate = (type) =>{
return new Promise((resolve, reject) => {
const date = new Date()
const year = date.getFullYear()
const month = (date.getMonth() + 1) < 9 ? '0' + (date.getMonth() + 1) : date.getMonth()
const day = date.getDate()
switch(type){
case 'day':
resolve(year + '-' + month + '-' + day)
break
case 'month':
resolve(year + '-' + month)
break
case 'year':
resolve(year)
break
default:
resolve(year + '-' + month + '-' + day)
}
})
}

View File

@@ -7,26 +7,128 @@
*/
import { router } from '../router'
import { keyAuth } from '../apis/interfaces/auth'
import store from '../store'
class userAuth {
constructor() {
this.univerfyConfig = {
fullScreen : true,
authButton: {
'title': '一键登录',
'normalColor': '#c82626',
'highlightColor': '#a61010',
'disabledColor': '#d86767',
'borderRadius': '0'
},
otherLoginButton: {
'title': '其他手机号码',
'borderColor': '#c82626',
'borderRadius': '0',
'textColor': '#c82626'
},
privacyTerms: {
'checkedImage': '/static/icons/checked-icon.png',
'uncheckedImage': '/static/icons/unchecked-icon.png',
'textColor': '#555555',
'termsColor': '#c82626',
'suffix': '并使用本机号码登录/注册',
'privacyItems': [{
'url': 'https://www.baidu.com',
'title': '用户隐私规格'
},{
'url': 'https://www.baidu.com',
'title': '用户服务协议'
}]
},
buttons: {
'iconWidth': '45px',
'list': [{
"provider": '微信登录',
"iconPath": '/static/icons/wechat.png',
}]
}
}
}
// 预登录
Login(){
return new Promise((resolve, reject) => {
uni.showLoading({
title: '加载中',
mask : true
})
uni.preLogin({
provider: "univerify",
provider: 'univerify',
success : res=> {
console.log(res)
this.keyLogin().then(() => {
resolve({
auth: true
})
}).catch(errMsg => {
reject(errMsg)
})
},
fail : err=> {
router.push({name: "Login"})
router.push({name: 'Login'})
},
complete() {
uni.hideLoading()
}
})
})
}
// 一键登录
keyLogin(){
console.log('一键登录')
return new Promise((resolve, reject) => {
uni.login({
provider : 'univerify',
univerifyStyle : {...this.univerfyConfig},
success: authResult => {
keyAuth({
access_token: authResult.authResult.access_token,
openid : authResult.authResult.openid
}).then(res => {
uni.closeAuthView()
store.commit('setToken', res.token_type + ' ' + res.access_token)
resolve()
if(!res.is_company){
router.push({name: "Registered"})
return
}
}).catch(err => {
reject(err)
})
},
fail : err => {
uni.closeAuthView()
switch(err.code){
case 30002:
router.push({name: "Login"})
break
case 30008:
this.wechatAuth()
break
}
}
})
})
}
/**
* 微信登录
*/
wechatAuth(){
uni.showToast({
title: '微信登录',
icon : 'none'
})
}
/**
* 处理登录状态维护
*/
updAuthToken(){
}
}

View File

@@ -18,7 +18,6 @@ router.beforeEach((to, from, next) => {
const token = store.getters.getToken || uni.getStorageSync('token')
// 检查是否需要登录
if(to.meta.auth && token === ''){
keyPhone.keyAuth()
return
}
next();
@@ -29,6 +28,8 @@ router.afterEach((to, from) => {
// console.log('跳转结束--暂无应用场景')
})
//
export {
router,
RouterMount

View File

@@ -65,5 +65,15 @@ $padding: 30rpx;
text-overflow: ellipsis;
}
.ellipsis{
max-width: 100%;
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
// 修改nvtab
$mainColor: #c82626;
$mainColor: white;

BIN
static/icons/add-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
static/icons/audit-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
static/icons/e-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
static/icons/login-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -478,7 +478,7 @@
.nvTabBox{position: absolute!important;}
.nvTab{flex-direction: column!important;align-items: center;justify-content: flex-end;margin: 0 10rpx;position: relative;}
.nTTxt,.nTTxt-ac{padding: 0 10rpx;line-height: 88rpx;}
.nTLine,.nTLine-ac{height: 4rpx;border-radius: 2rpx;background: transparent;position: absolute;bottom: 0;left: 0;right: 0;}
.nTLine,.nTLine-ac{height: 4rpx;border-radius: 2rpx;background: transparent;position: absolute;bottom: 10rpx;left: 0;right: 0;}
.nTTxt-ac{color: $mainColor;}
.nTLine-ac{background: $mainColor;}
.nvTabHide{width:0;height:0;margin:0;overflow:hidden;}

View File

@@ -0,0 +1,18 @@
## 1.1.12021-07-30
- 优化 vue3下事件警告的问题
## 1.1.02021-07-13
- 组件兼容 vue3如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
## 1.0.72021-05-12
- 新增 组件示例地址
## 1.0.62021-04-20
- 修复 uni-number-box 浮点数运算不精确的 bug
- 修复 uni-number-box change 事件触发不正确的 bug
- 新增 uni-number-box v-model 双向绑定
## 1.0.52021-02-05
- 调整为uni_modules目录规范
## 1.0.72021-02-05
- 调整为uni_modules目录规范
- 新增 支持 v-model
- 新增 支持 focus、blur 事件
- 新增 支持 PC 端

View File

@@ -0,0 +1,203 @@
<template>
<view class="uni-numbox">
<view @click="_calcValue('minus')" class="uni-numbox__minus uni-cursor-point">
<text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue <= min || disabled }">-</text>
</view>
<input :disabled="disabled" @focus="_onFocus" @blur="_onBlur" class="uni-numbox__value" type="number" v-model="inputValue"/>
<view @click="_calcValue('plus')" class="uni-numbox__plus uni-cursor-point">
<text class="uni-numbox--text" :class="{ 'uni-numbox--disabled': inputValue >= max || disabled }">+</text>
</view>
</view>
</template>
<script>
/**
* NumberBox 数字输入框
* @description 带加减按钮的数字输入框
* @tutorial https://ext.dcloud.net.cn/plugin?id=31
* @property {Number} value 输入框当前值
* @property {Number} min 最小值
* @property {Number} max 最大值
* @property {Number} step 每次点击改变的间隔大小
* @property {Boolean} disabled = [true|false] 是否为禁用状态
* @event {Function} change 输入框值改变时触发的事件,参数为输入框当前的 value
*/
export default {
name: "UniNumberBox",
emits:['change','input','update:modelValue','blur','focus'],
props: {
value: {
type: [Number, String],
default: 1
},
modelValue:{
type: [Number, String],
default: 1
},
min: {
type: Number,
default: 0
},
max: {
type: Number,
default: 100
},
step: {
type: Number,
default: 1
},
disabled: {
type: Boolean,
default: false
}
},
data() {
return {
inputValue: 0
};
},
watch: {
value(val) {
this.inputValue = +val;
},
modelValue(val){
this.inputValue = +val;
}
},
created() {
if(this.value === 1){
this.inputValue = +this.modelValue;
}
if(this.modelValue === 1){
this.inputValue = +this.value;
}
},
methods: {
_calcValue(type) {
if (this.disabled) {
return;
}
const scale = this._getDecimalScale();
let value = this.inputValue * scale;
let step = this.step * scale;
if (type === "minus") {
value -= step;
if (value < (this.min * scale)) {
return;
}
if (value > (this.max * scale)) {
value = this.max * scale
}
}
if (type === "plus") {
value += step;
if (value > (this.max * scale)) {
return;
}
if (value < (this.min * scale)) {
value = this.min * scale
}
}
this.inputValue = (value / scale).toFixed(String(scale).length - 1);
this.$emit("change", +this.inputValue);
// TODO vue2 兼容
this.$emit("input", +this.inputValue);
// TODO vue3 兼容
this.$emit("update:modelValue", +this.inputValue);
},
_getDecimalScale() {
let scale = 1;
// 浮点型
if (~~this.step !== this.step) {
scale = Math.pow(10, String(this.step).split(".")[1].length);
}
return scale;
},
_onBlur(event) {
this.$emit('blur', event)
let value = event.detail.value;
if (!value) {
this.inputValue = this.min;
this.$emit("change", +this.inputValue);
return;
}
value = +value;
if (value > this.max) {
value = this.max;
} else if (value < this.min) {
value = this.min;
}
const scale = this._getDecimalScale();
this.inputValue = value.toFixed(String(scale).length - 1);
this.$emit("change", +this.inputValue);
this.$emit("input", +this.inputValue);
},
_onFocus(event) {
this.$emit('focus', event)
}
}
};
</script>
<style lang="scss" scoped>
$box-height: 50rpx;
/* #ifdef APP-NVUE */
$box-line-height: 50rpx;
/* #endif */
$box-line-height: 50rpx;
$box-width: 50rpx;
.uni-numbox {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
height: $box-height;
line-height: $box-height - 7rpx;
// width: 120px;
}
.uni-cursor-point {
/* #ifdef H5 */
cursor: pointer;
/* #endif */
}
.uni-numbox__value {
background-color: $uni-bg-color;
width: 50px;
height: $box-height;
text-align: center;
font-size: $uni-font-size-lg;
}
.uni-numbox__minus {
width: $box-width;
height: $box-height;
background: $border-color-lg;
border-radius: 50%;
text-align: center;
}
.uni-numbox__plus {
width: $box-width;
height: $box-height;
background: $border-color-lg;
border-radius: 50%;
text-align: center;
}
.uni-numbox--text {
font-size: 20px;
color: $uni-text-color;
}
.uni-numbox--disabled {
color: $uni-text-color-disable;
/* #ifdef H5 */
cursor: not-allowed;
/* #endif */
}
</style>

View File

@@ -0,0 +1,81 @@
{
"id": "uni-number-box",
"displayName": "uni-number-box 数字输入框",
"version": "1.1.1",
"description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。",
"keywords": [
"uni-ui",
"uniui",
"数字输入框"
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
"HBuilderX": ""
},
"directories": {
"example": "../../temps/example_temps"
},
"dcloudext": {
"category": [
"前端组件",
"通用组件"
],
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
},
"uni_modules": {
"dependencies": [],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "y"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "y",
"百度": "y",
"字节跳动": "y",
"QQ": "y"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}

View File

@@ -0,0 +1,50 @@
## NumberBox 数字输入框
> **组件名uni-number-box**
> 代码块: `uNumberBox`
带加减按钮的数字输入框。
### 安装方式
本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`
如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
### 基本用法
在 ``template`` 中使用组件
```html
<uni-number-box></uni-number-box>
<uni-number-box v-model = "vModelValue" />
<uni-number-box :min="0" :max="9"></uni-number-box>
<uni-number-box @change="bindChange"></uni-number-box>
```
## API
### NumberBox Props
|属性名 |类型 |默认值 |说明 |
|:-: |:-: |:-: |:-: |
|value/v-model|Number |0 |输入框当前值 |
|min |Number |0 |最小值 |
|max |Number |100 |最大值 |
|step |Number |1 |每次点击改变的间隔大小 |
|disabled |Boolean|false |是否为禁用状态 |
### NumberBox Events
|事件名称 |说明 |返回值 |
|:-: |:-: |:-: |
|change |输入框值改变时触发的事件,参数为输入框当前的 value |- |
|focus |输入框聚焦时触发的事件,参数为 event 对象 |- |
|blur |输入框失焦时触发的事件,参数为 event 对象 |- |
## 组件示例
点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/number-box/number-box](https://hellouniapp.dcloud.net.cn/pages/extUI/number-box/number-box)

Binary file not shown.

1
unpackage/cache/apk/apkurl vendored Normal file
View File

@@ -0,0 +1 @@
https://service.dcloud.net.cn/build/download/0d7b3af0-ffd9-11eb-a971-ed46b2192340

File diff suppressed because one or more lines are too long

3
unpackage/cache/certdata vendored Normal file
View File

@@ -0,0 +1,3 @@
andrCertfile=/Users/WebTmm/Desktop/5aa9ab18b4612a21d9e4849ca1200d74.keystore
andrCertAlias=__uni__cd19aad
andrCertPass=Nzz4TZfsMfJreNdZgt6XDw==

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<script>
var __UniViewStartTime__ = Date.now();
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title>View</title>
<link rel="stylesheet" href="view.css" />
</head>
<body>
<div id="app"></div>
<script src="__uniappes6.js"></script>
<script src="view.umd.min.js"></script>
<script src="app-view.js"></script>
</body>
</html>

View File

@@ -0,0 +1,8 @@
var isReady=false;var onReadyCallbacks=[];
var isServiceReady=false;var onServiceReadyCallbacks=[];
var __uniConfig = {"pages":["pages/equity/index","pages/market/index","pages/store/index","pages/property/index","pages/goods/details","pages/login/login","pages/company/registered","pages/company/prompt","pages/vip/index","pages/equity/search","pages/market/logs","pages/order/buy","pages/goods/lists","pages/company/approve"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"易货","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8"},"tabBar":{"color":"#bababa","selectedColor":"#c82626","backgroundColor":"#FFFFFF","borderStyle":"white","list":[{"pagePath":"pages/equity/index","text":"通证权易","iconPath":"static/tabBar/tabBar_icon_00.png","selectedIconPath":"static/tabBar/tabBar_show_00.png"},{"pagePath":"pages/market/index","text":"转让市场","iconPath":"static/tabBar/tabBar_icon_01.png","selectedIconPath":"static/tabBar/tabBar_show_01.png"},{"pagePath":"pages/store/index","text":"企业工具","iconPath":"static/tabBar/tabBar_icon_02.png","selectedIconPath":"static/tabBar/tabBar_show_02.png"},{"pagePath":"pages/property/index","text":"我的资产","iconPath":"static/tabBar/tabBar_icon_03.png","selectedIconPath":"static/tabBar/tabBar_show_03.png"}]},"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":false,"autoclose":true},"appname":"易品新境","compilerVersion":"3.1.22","entryPagePath":"pages/equity/index","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
var __uniRoutes = [{"path":"/pages/equity/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationStyle":"custom","navigationBarTextStyle":"white"}},{"path":"/pages/market/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"转让市场","titleNView":{"backgroundColor":"#FFFFFF","buttons":[{"text":"成交历史","fontSize":"14","width":"80","color":"#555555"}]}}},{"path":"/pages/store/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationStyle":"custom","navigationBarTitleText":"企业工具","navigationBarTextStyle":"white","navigationBarBackgroundColor":"#c82626"}},{"path":"/pages/property/index","meta":{"isQuit":true,"isTabBar":true},"window":{}},{"path":"/pages/goods/details","meta":{},"window":{"navigationBarTitleText":"","titleNView":{"backgroundColor":"#FFFFFF","type":"transparent","buttons":[{"text":"分享","fontSize":"12","color":"#555555"}]}}},{"path":"/pages/login/login","meta":{},"window":{"navigationBarTitleText":"","navigationBarBackgroundColor":"#FFFFFF","disableScroll":true}},{"path":"/pages/company/registered","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/company/prompt","meta":{},"window":{"navigationBarTitleText":"","navigationBarBackgroundColor":"#FFFFFF","disableScroll":true,"titleNView":{"backgroundColor":"#FFFFFF","buttons":[{"text":"先逛一逛","fontSize":"14","width":"80","color":"#555555"}]}}},{"path":"/pages/vip/index","meta":{},"window":{"navigationBarTitleText":"会员","navigationBarBackgroundColor":"#1f1b1c","navigationBarTextStyle":"white","backgroundColor":"#fefaef"}},{"path":"/pages/equity/search","meta":{},"window":{"navigationBarTitleText":"搜索"}},{"path":"/pages/market/logs","meta":{},"window":{"navigationBarTitleText":"成交历史"}},{"path":"/pages/order/buy","meta":{},"window":{"navigationBarTitleText":"确认订单","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/goods/lists","meta":{},"window":{"navigationBarTitleText":"商品列表","navigationBarBackgroundColor":"#FFFFFF"}},{"path":"/pages/company/approve","meta":{},"window":{"navigationBarTitleText":""}}];
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:Math.round(f/20)})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:void 0,window:void 0,document:void 0,frames:void 0,self:void 0,location:void 0,navigator:void 0,localStorage:void 0,history:void 0,Caches:void 0,screen:void 0,alert:void 0,confirm:void 0,prompt:void 0,fetch:void 0,XMLHttpRequest:void 0,WebSocket:void 0,webkit:void 0,print:void 0}}}});

View File

@@ -0,0 +1 @@
(function(e){function r(r){for(var n,l,i=r[0],p=r[1],a=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in p)Object.prototype.hasOwnProperty.call(p,n)&&(e[n]=p[n]);f&&f(r);while(s.length)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var p=t[i];0!==o[p]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={"app-config":0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this["webpackJsonp"]=this["webpackJsonp"]||[],p=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var f=p;t()})([]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"@platforms":["android","iPhone","iPad"],"id":"__UNI__CD19AAD","name":"易品新境","version":{"name":"1.0.0","code":"100"},"description":"易品新境为商家提供营销引流工具","launch_path":"__uniappview.html","developer":{"name":"","email":"","url":""},"permissions":{"OAuth":{},"UniNView":{"description":"UniNView原生渲染"}},"plus":{"useragent":{"value":"uni-app","concatenate":true},"splashscreen":{"autoclose":false,"waiting":true,"delay":0},"popGesture":"close","launchwebview":{"id":"1","kernel":"WKWebview"},"statusbar":{"immersed":"supportedDevice","style":"dark","background":"#F8F8F8"},"usingComponents":true,"nvueStyleCompiler":"uni-app","compilerVersion":3,"safearea":{"bottom":{"offset":"none"}},"distribute":{"icons":{"android":{"hdpi":"icon-android-hdpi.png","xhdpi":"icon-android-xhdpi.png","xxhdpi":"icon-android-xxhdpi.png","xxxhdpi":"icon-android-xxxhdpi.png"},"ios":{"appstore":"unpackage/res/icons/1024x1024.png","ipad":{"app":"unpackage/res/icons/76x76.png","app@2x":"unpackage/res/icons/152x152.png","proapp@2x":"unpackage/res/icons/167x167.png","spotlight":"unpackage/res/icons/40x40.png","spotlight@2x":"unpackage/res/icons/80x80.png","settings":"unpackage/res/icons/29x29.png","settings@2x":"unpackage/res/icons/58x58.png","notification":"unpackage/res/icons/20x20.png","notification@2x":"unpackage/res/icons/40x40.png"},"iphone":{"app@2x":"unpackage/res/icons/120x120.png","app@3x":"unpackage/res/icons/180x180.png","spotlight@2x":"unpackage/res/icons/80x80.png","spotlight@3x":"unpackage/res/icons/120x120.png","settings@2x":"unpackage/res/icons/58x58.png","settings@3x":"unpackage/res/icons/87x87.png","notification@2x":"unpackage/res/icons/40x40.png","notification@3x":"unpackage/res/icons/60x60.png"},"prerendered":"false"}},"splashscreen":{"androidStyle":"common"},"google":{"permissions":["<uses-feature android:name=\"android.hardware.camera\"/>","<uses-feature android:name=\"android.hardware.camera.autofocus\"/>","<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>","<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>","<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.MODIFY_AUDIO_SETTINGS\"/>","<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>","<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_SETTINGS\"/>"],"packagename":"yh.shangkelian.app","password":"Nzz4TZfsMfJreNdZgt6XDw==","aliasname":"__uni__cd19aad","keystore":"google-keystore.keystore","custompermissions":true},"apple":{"devices":"universal"},"plugins":{"oauth":{"univerify":{}},"ad":{},"audio":{"mp3":{"description":"Android平台录音支持MP3格式文件"}}},"orientation":["portrait-primary"]},"allowsInlineMediaPlayback":true,"uni-app":{"compilerVersion":"3.1.22","control":"uni-v3","nvueCompiler":"uni-app","renderer":"auto","nvue":{"flex-direction":"column"},"nvueLaunchMode":"normal"},"tabBar":{"color":"#bababa","selectedColor":"#c82626","backgroundColor":"#FFFFFF","borderStyle":"rgba(255,255,255,0.4)","list":[{"pagePath":"pages/equity/index","text":"通证权易","iconPath":"static/tabBar/tabBar_icon_00.png","selectedIconPath":"static/tabBar/tabBar_show_00.png"},{"pagePath":"pages/market/index","text":"转让市场","iconPath":"static/tabBar/tabBar_icon_01.png","selectedIconPath":"static/tabBar/tabBar_show_01.png"},{"pagePath":"pages/store/index","text":"企业工具","iconPath":"static/tabBar/tabBar_icon_02.png","selectedIconPath":"static/tabBar/tabBar_show_02.png"},{"pagePath":"pages/property/index","text":"我的资产","iconPath":"static/tabBar/tabBar_icon_03.png","selectedIconPath":"static/tabBar/tabBar_show_03.png"}],"height":"50px","child":["lauchwebview"],"selected":0},"launch_path":"__uniappview.html","adid":"125178130709"}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

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