Browse Source

个人中心

devlop
邓雄飞 4 years ago
parent
commit
5ddd0bdedc
29 changed files with 435 additions and 330 deletions
  1. 1
      App.vue
  2. 28
      apis/commonApi.js
  3. 40
      apis/testApi.js
  4. 16
      pages.json
  5. 37
      pages/address-manage/index.vue
  6. 31
      pages/enterprise-info/index.vue
  7. 12
      pages/login/index.vue
  8. 441
      pages/mine/index.vue
  9. 55
      pages/test/index.vue
  10. BIN
      static/imgs/mine/account-icon.png
  11. BIN
      static/imgs/mine/address-icon.png
  12. BIN
      static/imgs/mine/contract-icon.png
  13. BIN
      static/imgs/mine/credit-icon.png
  14. BIN
      static/imgs/mine/enquiry-icon.png
  15. BIN
      static/imgs/mine/finance-icon.png
  16. BIN
      static/imgs/mine/logout-icon.png
  17. BIN
      static/imgs/mine/money-icon.png
  18. BIN
      static/imgs/mine/msg-icon.png
  19. BIN
      static/imgs/mine/order-all-icon.png
  20. BIN
      static/imgs/mine/order-done-icon.png
  21. BIN
      static/imgs/mine/order-icon.png
  22. BIN
      static/imgs/mine/order-ing-icon.png
  23. BIN
      static/imgs/mine/order-ready-icon.png
  24. BIN
      static/imgs/mine/order-supplier-ready-icon.png
  25. BIN
      static/imgs/mine/setting-icon.png
  26. BIN
      static/imgs/mine/toggle-icon.png
  27. BIN
      static/imgs/mine/vip-icon.png
  28. 17
      store/index.js
  29. 87
      utils/hook.js

1
App.vue

@ -13,7 +13,6 @@ export default {
store.commit('setSupplierId', supplierId)
}
} else {
console.log('非分享进入', store.state.supplierId)
if (!store.state.supplierId) {
go2('error')
}

28
apis/commonApi.js

@ -1,4 +1,5 @@
import http from '../utils/http/index.js'
import store from '@/store/index'
let areaCache = null
/**
* 获取省市区街道
@ -21,6 +22,24 @@ export function getArea(data = {}) {
})
}
// 处理store同步问题
function syncStore(res) {
if (res.enterpriseList && res.enterpriseList.length > 0) {
let companyInfo = res.enterpriseList[0]
store.commit('setCompanyInfo', {
id: companyInfo.id,
name: companyInfo.name,
fddEnterpriseStatus: companyInfo.fddEnterpriseStatus
})
store.commit('setUserInfo', {
name: companyInfo.employeeName,
userId: res.userId,
mobile: res.mobile,
avatar: null
})
}
}
let baseInfo = null
/**
* 获取当前账号的基础信息
@ -36,6 +55,7 @@ export function getBaseInfo(data = {}, refresh = false) {
http.get({ url: '/yyt-uec/get/base-info', data }, { hideLoading: true }).then((res) => {
if (res) {
baseInfo = res
syncStore(res)
resolve(res)
} else {
resolve(null)
@ -60,3 +80,11 @@ export function getVerifyUrl(data = {}) {
export function getGuaranteeContract(data = {}) {
return http.post({ url: '/yyt-uec/create/supplier/guarantee-contract?mallSupplierId=' + data.mallSupplierId, data })
}
/**
* 获取当前账号企业的飞算额度
* @param {object} data 参数 enterpriseId
*/
export function getFsCredit(data = {}) {
return http.get({ url: '/yyt-uec/credit/get/enterprise-feisuan-credit', data })
}

40
apis/testApi.js

@ -0,0 +1,40 @@
import http from '../utils/http/index.js'
/**
* 获取店铺纸品列表
* @param {object} data 参数
* @returns {Promise<object[]>}
* swagger: http://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%95%86%E5%93%81%E7%AE%A1%E7%90%86/getStoreProductListForCustomerUsingGET
*/
export const getPaperList = (data = {}) => {
return http.get({
url: '/base-paper-trading/get/store/product-list/for/customer',
data
})
}
/**
* 获取店铺纸品详情
* @param {object} data 参数
* @returns {Promise<object[]>}
* swagger: http://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%95%86%E5%93%81%E7%AE%A1%E7%90%86/getProductDetailForCustomerUsingGET
*/
export const getPaperDetail = (data = {}) => {
return http.get({
url: '/base-paper-trading/get/product-detail/for/customer',
data
})
}
/**
* 立即订购
* @param {object} data 参数
* @returns {Promise<object[]>}
* swagger: http://api-ops-yyt-test.qniao.cn//base-paper-trading/swagger-ui/index.html?urls.primaryName=CustomerApi#/%E5%8E%9F%E7%BA%B8%E8%AE%A2%E5%8D%95/buyerPaperGoodsReserveUsingPOST
*/
export const purchasePaper = (data = {}) => {
return http.post({
url: '/base-paper-trading/buyer/paper/goods/reserve',
data
})
}

16
pages.json

@ -51,6 +51,14 @@
"navigationStyle": "custom"
}
},
{
"path": "pages/address-manage/index",
"style": {
"navigationBarTitleText": "收货地址",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{
"path": "pages/error/index",
"style": {
@ -58,6 +66,14 @@
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{
"path": "pages/test/index",
"style": {
"navigationBarTitleText": "测试页面",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}
],
"globalStyle": {

37
pages/address-manage/index.vue

@ -0,0 +1,37 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="收货地址"></uni-nav-bar>
</view>
</template>
<script>
import { go2, back, setCache } from '@/utils/hook.js'
export default {
data() {
return {
/**
* 页面操作类型 none: 无操作, select: 选择
*/
operation: 'none'
}
},
methods: {
go2,
back,
//
selectAddress(item) {
if (this.operation === 'select') {
setCache('address', item)
back()
}
}
},
onLoad(option) {
if (option) {
this.operation = option.operation
}
}
}
</script>
<style lang="scss" scoped></style>

31
pages/enterprise-info/index.vue

@ -1,6 +1,8 @@
<template>
<view class="content">
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="完善信息"></uni-nav-bar>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="完善信息">
<text @click="jump" v-if="operation === 'add'" style="color: #007aff" slot="right">跳过</text>
</uni-nav-bar>
<view>
<qn-form-item label="基础信息" type="title"></qn-form-item>
<qn-form-item label="企业名称" required>
@ -120,7 +122,7 @@
<text
v-if="form.businessLicenseImg"
@click="!hasSelected && selectedImage('businessLicenseImg')"
:style="`font-size: 28rpx;margin-right: 16rpx; color: ${hasSelected ? '#eee' : '#007aff'}`"
:style="`font-size: 28rpx;margin-right: 16rpx; color: ${hasSelected ? '#eee' : '#F5222D'}`"
>
重新上传
</text>
@ -171,7 +173,7 @@
</uni-popup>
<qn-footer fixed height="120rpx">
<view class="button-area">
<view class="button button__cancel" @click="back">
<view class="button button__cancel" @click="cancel">
<text class="text">取消</text>
</view>
<view class="button button__submit" @click="saveInfo">
@ -209,6 +211,7 @@ const validateFields = [
export default {
data() {
return {
operation: 'add',
form: {
id: null,
name: null,
@ -250,6 +253,17 @@ export default {
},
methods: {
back,
jump() {
go2('store')
},
cancel() {
//
if (this.operation === 'add') {
go2('store', {}, true)
} else {
back()
}
},
showLocationList() {
if (!this.form.name || !this.form.name.trim()) {
uni.showToast({
@ -345,9 +359,9 @@ export default {
},
selectedImage(type) {
uploadImage()
.then((url) => {
if (url) {
this.form[type] = url
.then((urls) => {
if (urls) {
this.form[type] = urls[0]
}
})
.catch((e) => {
@ -423,6 +437,11 @@ export default {
}
return this.form.legalPersonIdCardBackImg
}
},
onLoad(option) {
if (option) {
this.operation = option.operation
}
}
}
</script>

12
pages/login/index.vue

@ -160,18 +160,6 @@ export default {
if (!res.enterpriseList || res.enterpriseList.length === 0) {
go2('enterprise-info', { operation: 'add' }, true)
} else {
let companyInfo = res.enterpriseList[0]
store.commit('setCompanyInfo', {
id: companyInfo.id,
name: companyInfo.name,
fddEnterpriseStatus: companyInfo.fddEnterpriseStatus
})
store.commit('setUserInfo', {
name: companyInfo.employeeName,
userId: res.userId,
mobile: res.mobile,
avatar: null
})
go2('store')
}
}

441
pages/mine/index.vue

@ -17,7 +17,7 @@
<view v-else>
<view class="user__name">
<text class="name">{{ userInfo.name }}</text>
<image v-if="userInfo.fddEnterpriseStatus === fddStatus.UNCERTIFIED" class="image" src="/static/imgs/mine/certified-icon.png"></image>
<image v-if="userInfo.fddEnterpriseStatus === fddStatus.CERTIFIED_SUCCESS" class="image" src="/static/imgs/mine/certified-icon.png"></image>
<image v-else class="image" @click="certifyCompany()" src="/static/imgs/mine/non-certified-icon.png"></image>
</view>
<view style="margin-top: 10rpx">
@ -27,165 +27,106 @@
</view>
</view>
</view>
<view class="operation">
<view class="box">
<view class="container" @click="go2('message')">
<image class="icon" src="/static/imgs/mine/msg-icon.png"></image>
<view v-if="messageNum > 0" class="number">
<text class="text">{{ messageNum }}</text>
</view>
</view>
<image class="icon" @click="go2('setting')" src="/static/imgs/mine/setting-icon.png"></image>
</view>
<view v-if="companyNum > 1" class="box" @click="go2('toggle-supplier')">
<text style="font-size: 24rpx; color: #fff; flex-shrink: 0">切换账号</text>
<image class="icon" style="width: 24rpx; height: 24rpx; margin-left: 8rpx" src="/static/imgs/mine/toggle-icon.png"></image>
</view>
</view>
</view>
<view class="vip-area">
<view class="vip-content">
<view class="left">
<image class="icon" src="/static/imgs/mine/vip-icon.png"></image>
<text class="text">VIP会员</text>
</view>
<text class="center">立即开通会员 尊享特权</text>
<view class="right">
<text class="text">开通会员</text>
</view>
<view class="logout" @click="logout">
<text class="text">退出登录</text>
<image class="icon" src="/static/imgs/mine/logout-icon.png"></image>
</view>
</view>
</view>
</view>
<view class="card-area">
<view class="card-area" style="margin-top: -94rpx; z-index: 10">
<view class="header">
<view class="item" style="justify-content: flex-start">
<image class="icon" style="width: 32rpx; height: 32rpx" src="/static/imgs/mine/money-icon.png"></image>
<text class="text">掌柜收入</text>
</view>
<view class="item" style="justify-content: flex-end">
<qn-data-picker
v-model="tradeDate"
text="right"
:border="false"
placeholder="交易区间"
popup-title="请选择时间"
:localdata="tradeRange"
:clear-icon="false"
v-slot:default="{ data }"
>
<view class="time-range">
<text style="font-size: 24rpx; color: rgba(0, 0, 0, 0.65); margin-right: 8rpx">
{{ data[0] ? data[0].value : '' }}
</text>
<text style="font-size: 24rpx; color: #333333; font-weight: 500; margin-right: 8rpx">
{{ data[0] ? data[0].text : '' }}
</text>
<uni-icons type="bottom" size="14" color="rgba(0,0,0,0.65)"></uni-icons>
</view>
</qn-data-picker>
</view>
<text style="font-size: 30rpx; color: rgba(0, 0, 0, 0.85); font-weight: 600">其他工具</text>
</view>
<view class="order-area">
<view class="order-item">
<text class="value">{{ tradeData.tradingVolume }}</text>
<text class="label">交易额()</text>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/order-all-icon.png"></image>
<text class="label">全部订单</text>
</view>
<view class="order-item">
<text class="value">{{ tradeData.volumeOfBusiness }}</text>
<text class="label">交易量()</text>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/order-ready-icon.png"></image>
<text class="label">待确认</text>
</view>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/order-supplier-ready-icon.png"></image>
<text class="label">待供应商确认</text>
</view>
<view class="order-item">
<text class="value">{{ tradeData.orderQuantity }}</text>
<text class="label">成交订单()</text>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/order-ing-icon.png"></image>
<text class="label">已下单</text>
</view>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/order-done-icon.png"></image>
<text class="label">已完成</text>
</view>
</view>
</view>
<view class="card-area" v-if="fsInfo.status !== -1" style="border-radius: 16rpx">
<image
class="poster"
v-if="fsInfo.status == fsAuditStatus.WAIT_APPLY || fsInfo.status == fsAuditStatus.REJECT"
src="https://qncloud.oss-cn-shenzhen.aliyuncs.com/paper_shopkeeper/fs-to-apply.png"
></image>
<image
class="poster"
v-if="fsInfo.status == fsAuditStatus.AUDITING"
src="https://qncloud.oss-cn-shenzhen.aliyuncs.com/paper_shopkeeper/fs-to-apply.png"
></image>
<view class="fs-card" v-if="fsInfo.status == fsAuditStatus.PASS">
<view class="left">
<text style="font-size: 30rpx; color: rgba(0, 0, 0, 0.85); font-weight: 600">可用采购额度</text>
<!-- 下面这行不要换行 -->
<!-- prettier-ignore -->
<view style="margin:24rpx 0 16rpx;"><text class="pre"></text><text class="next">{{fsInfo.availableCreditLine}}</text></view>
<text style="font-size: 24rpx; color: rgba(0, 0, 0, 0.75)">{{ `已使用: ¥ ${fsInfo.usedCreditLine}` }}</text>
</view>
<view class="right">
<text>{{ `授信额度: ${fsInfo.creditLine / 10000}` }}</text>
<uni-icons style="margin-left: 16rpx" type="right" size="10"></uni-icons>
</view>
</view>
</view>
<view class="card-area">
<view class="header">
<text style="font-size: 30rpx; color: rgba(0, 0, 0, 0.85); font-weight: 500">其他工具</text>
<text style="font-size: 30rpx; color: rgba(0, 0, 0, 0.85); font-weight: 600">其他工具</text>
</view>
<view class="icon-area">
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/order-icon.png"></image>
<text class="label">订单管理</text>
<view class="icon-item" style="margin-right: 64rpx">
<image class="icon" src="/static/imgs/mine/account-icon.png"></image>
<text class="label">账号管理</text>
</view>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/finance-icon.png"></image>
<text class="label">账期订单融资</text>
<view class="icon-item" style="margin-right: 64rpx">
<image class="icon" src="/static/imgs/mine/enquiry-icon.png"></image>
<text class="label">我的询价</text>
</view>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/contract-icon.png"></image>
<text class="label">合同管理</text>
</view>
<view class="icon-item">
<image class="icon" src="/static/imgs/mine/credit-icon.png"></image>
<text class="label">征信管理</text>
</view>
<view class="icon-item" @click="go2('client-credit-list')">
<image class="icon" src="/static/imgs/mine/credit-icon.png"></image>
<text class="label">授信记录</text>
<view class="icon-item" style="margin-right: 64rpx">
<image class="icon" src="/static/imgs/mine/address-icon.png"></image>
<text class="label">收货地址</text>
</view>
<!-- <view class="icon-item">
<image class="icon" src="/static/imgs/mine/contract-icon.png"></image>
<text class="label">服务区域</text>
</view> -->
</view>
</view>
<view @click="logout">mine</view>
<view @click="go2('client-credit')">client-credit</view>
<view @click="go2('test')">test</view>
<view @click="go2('enterprise-info')">enterprise-info</view>
</view>
</template>
<script>
import { exit, go2 } from '@/utils/hook.js'
import { fddEnterpriseStatus } from '@/enums/index.js'
import { getBaseInfo } from '@/apis/commonApi.js'
import qnDataPicker from '@/components/qn-data-picker/qn-data-picker.vue'
import { fddEnterpriseStatus, fsAuditStatus } from '@/enums/index.js'
import { getVerifyUrl, getFsCredit } from '@/apis/commonApi.js'
import { dateTimeFormat } from '@/utils/index.js'
import { getOrderStatistics } from '@/apis/mineApi.js'
//
const currentMonth = (() => {
let endDate = new Date()
let beginDate = new Date(endDate.getFullYear(), endDate.getMonth(), 1)
return [dateTimeFormat(beginDate, 'yyyy-mm-dd'), dateTimeFormat(endDate, 'yyyy-mm-dd')]
})()
//
const lastMonth = (() => {
let now = new Date()
let endDate = new Date(now.getFullYear(), now.getMonth(), 0)
let beginDate = new Date(now.getFullYear(), now.getMonth() - 1, 1)
return [dateTimeFormat(beginDate, 'yyyy-mm-dd'), dateTimeFormat(endDate, 'yyyy-mm-dd')]
})()
export default {
components: { qnDataPicker },
data() {
return {
fddStatus: Object.freeze(fddEnterpriseStatus),
messageNum: 0,
companyNum: 0,
tradeRange: [
{
text: '本月',
value: currentMonth.join('~')
},
{
text: '上月',
value: lastMonth.join('~')
},
{
text: '总计',
value: ''
}
],
tradeDate: currentMonth.join('~'),
tradeData: {
tradingVolume: 0,
volumeOfBusiness: 0,
orderQuantity: 0
}
fsInfo: {
status: -1, //
availableCreditLine: 0,
usedCreditLine: 0,
creditLine: 0
},
fsAuditStatus: Object.freeze(fsAuditStatus)
}
},
methods: {
@ -216,30 +157,11 @@ export default {
})
}
},
go2,
go2
//
getStatistics() {}
},
watch: {
tradeDate(val) {
console.log('val:', val)
},
'$store.state.supplierInfo.supplierId': {
handler(val) {
console.log('切换了供应商:', val)
if (val) {
this.getStatistics()
}
},
immediate: true
},
tradeDate() {
this.getStatistics()
}
},
computed: {
hasLogin() {
console.log('token:', this.$store.state.qnToken)
return this.$store.state.qnToken != ''
},
curAvatar() {
@ -253,6 +175,8 @@ export default {
}
},
userInfo() {
console.log('userInfo:', this.$store.state.userInfo)
console.log('companyInfo:', this.$store.state.companyInfo)
return {
avatar: this.$store.state.userInfo.avatar || '',
name: this.$store.state.userInfo.name || this.$store.state.userInfo.mobile || '',
@ -262,14 +186,14 @@ export default {
}
},
onShow() {
getBaseInfo().then((res) => {
if (res) {
this.companyNum = res.enterpriseList.length
}
})
},
created() {
this.getStatistics()
this.hasLogin &&
getFsCredit({
enterpriseId: this.$store.state.companyInfo.id
}).then((res) => {
if (res.status) {
this.fsInfo = res
}
})
}
}
</script>
@ -310,7 +234,7 @@ export default {
padding: 0 32rpx;
display: flex;
flex-direction: row;
align-items: flex-start;
align-items: center;
justify-content: space-between;
.user {
z-index: 5;
@ -335,7 +259,7 @@ export default {
align-items: center;
justify-content: flex-start;
.name {
font-size: 40rpx;
font-size: 38rpx;
color: #fff;
font-weight: 600;
margin-right: 16rpx;
@ -349,106 +273,24 @@ export default {
}
}
}
.operation {
.logout {
z-index: 5;
margin-top: 18rpx;
margin-left: 20rpx;
flex-grow: 0;
flex-shrink: 0;
.box {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
margin-bottom: 36rpx;
.container {
width: 40rpx;
height: 40rpx;
flex-grow: 0;
flex-shrink: 0;
margin-right: 26rpx;
position: relative;
.number {
position: absolute;
top: -12rpx;
right: -12rpx;
// width:32rpx;
// height: 32rpx;
padding: 6rpx 10rpx;
background-color: #f5222d;
border-radius: 16rpx;
display: flex;
align-items: center;
justify-content: center;
.text {
font-size: 20rpx;
color: #fff;
font-weight: 500;
}
}
}
.icon {
width: 40rpx;
height: 40rpx;
flex-grow: 0;
flex-shrink: 0;
}
}
}
}
.vip-area {
z-index: 5;
position: absolute;
bottom: 0;
left: 0;
width: 686rpx;
height: 90rpx;
margin: 0 32rpx;
background-image: linear-gradient(90deg, #333333 0%, #696c6b 99%);
border-radius: 10rpx;
.vip-content {
width: 686rpx;
padding: 18rpx 24rpx 0;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.left {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
.icon {
width: 28rpx;
height: 28rpx;
flex-grow: 0;
flex-shrink: 0;
}
.text {
font-size: 26rpx;
color: #dbc189;
font-weight: 500;
}
}
.center {
justify-content: flex-end;
flex-grow: 0;
flex-shrink: 0;
.text {
font-size: 24rpx;
color: #e7e1be;
font-weight: 600;
color: #ffffff;
}
.right {
position: relative;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
width: 128rpx;
height: 44rpx;
border-radius: 14rpx;
background-image: linear-gradient(90deg, #f4edce 1%, #f3d99e 98%);
.text {
font-size: 24rpx;
color: #443015;
}
.icon {
margin-left: 8rpx;
width: 24rpx;
height: 24rpx;
flex-grow: 0;
flex-shrink: 0;
}
}
}
@ -458,7 +300,7 @@ export default {
margin: 20rpx 32rpx 0;
background-color: #fff;
box-shadow: 0 2rpx 14rpx 0 rgba(220, 220, 220, 0.5);
border-radius: 10px;
border-radius: 10rpx;
.header {
padding: 20rpx 24rpx 14rpx;
border-bottom: 2rpx solid #f8f8f8;
@ -479,65 +321,82 @@ export default {
font-size: 30rpx;
color: rgba(0, 0, 0, 0.85);
letter-spacing: 1.5rpx;
font-weight: 500;
font-weight: 600;
}
}
}
}
.order-area {
padding: 20rpx 20rpx 30rpx;
padding: 40rpx 32rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.order-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.value {
font-size: 36rpx;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
}
.label {
font-size: 26rpx;
color: #666666;
margin-top: 10rpx;
}
}
flex-wrap: nowrap;
}
.icon-area {
padding: 40rpx 32rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
justify-content: flex-start;
flex-wrap: wrap;
.icon-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-width: 140rpx;
margin-bottom: 36rpx;
.icon {
width: 68rpx;
height: 68rpx;
flex-grow: 0;
flex-shrink: 0;
}
.label {
font-size: 26rpx;
color: #666666;
margin-top: 10rpx;
}
}
.icon-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
margin-bottom: 36rpx;
.icon {
width: 68rpx;
height: 68rpx;
flex-grow: 0;
flex-shrink: 0;
}
.label {
font-size: 26rpx;
color: #666666;
margin-top: 10rpx;
}
}
.time-range {
.poster {
width: 686rpx;
height: 140rpx;
}
.fs-card {
width: 686rpx;
padding: 24rpx 32rpx 32rpx;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
justify-content: space-between;
flex-wrap: nowrap;
.left {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
.pre {
font-size: 36rpx;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
}
.next {
font-size: 56rpx;
color: rgba(0, 0, 0, 0.85);
font-weight: 700;
}
}
.right {
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-end;
font-size: 32rpx;
color: #333333;
font-weight: 500;
}
}
</style>

55
pages/test/index.vue

@ -0,0 +1,55 @@
<template>
<view>
<uni-nav-bar left-icon="back" @clickLeft="back" statusBar fixed title="测试"></uni-nav-bar>
<view @click="getList">list</view>
<view @click="getDetail">detail</view>
<view @click="purchase">purchase</view>
</view>
</template>
<script>
import { go2, back } from '@/utils/hook.js'
import { getPaperList, getPaperDetail, purchasePaper } from '@/apis/testApi.js'
export default {
data() {
return {}
},
methods: {
go2,
back,
//
getList() {
getPaperList({ supplierId: this.$store.state.supplierId }).then((res) => {
console.log(res)
})
},
getDetail() {
getPaperDetail({ productId: '678972506887032832' })
},
purchase() {
let form = {
orderGoodsList: [
{
buyTon: 2,
gramWeight: 200,
length: 1000,
mallSupplierId: '678289470268772352',
pieceQuantity: 10000,
productId: '678972506887032832',
productSkuId: '678972507222577152',
unitPrice: 10000,
width: 1000
}
],
otherFee: 0,
purchaserEnterpriseId: '807704'
}
purchasePaper(form).then((res) => {
console.log(res)
})
}
}
}
</script>
<style lang="scss" scoped></style>

BIN
static/imgs/mine/account-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 7.2 KiB

BIN
static/imgs/mine/address-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 7.1 KiB

BIN
static/imgs/mine/contract-icon.png

Before After
Width: 74  |  Height: 74  |  Size: 8.6 KiB

BIN
static/imgs/mine/credit-icon.png

Before After
Width: 68  |  Height: 73  |  Size: 5.9 KiB

BIN
static/imgs/mine/enquiry-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 5.5 KiB

BIN
static/imgs/mine/finance-icon.png

Before After
Width: 74  |  Height: 73  |  Size: 8.4 KiB

BIN
static/imgs/mine/logout-icon.png

Before After
Width: 24  |  Height: 25  |  Size: 541 B

BIN
static/imgs/mine/money-icon.png

Before After
Width: 32  |  Height: 32  |  Size: 1.6 KiB

BIN
static/imgs/mine/msg-icon.png

Before After
Width: 40  |  Height: 40  |  Size: 1.2 KiB

BIN
static/imgs/mine/order-all-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 3.9 KiB

BIN
static/imgs/mine/order-done-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 3.9 KiB

BIN
static/imgs/mine/order-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 5.2 KiB

BIN
static/imgs/mine/order-ing-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 4.4 KiB

BIN
static/imgs/mine/order-ready-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 3.6 KiB

BIN
static/imgs/mine/order-supplier-ready-icon.png

Before After
Width: 68  |  Height: 68  |  Size: 3.3 KiB

BIN
static/imgs/mine/setting-icon.png

Before After
Width: 40  |  Height: 40  |  Size: 1.2 KiB

BIN
static/imgs/mine/toggle-icon.png

Before After
Width: 24  |  Height: 24  |  Size: 382 B

BIN
static/imgs/mine/vip-icon.png

Before After
Width: 28  |  Height: 26  |  Size: 1.3 KiB

17
store/index.js

@ -56,9 +56,24 @@ const store = new Vuex.Store({
name: '',
data: {}
},
searchHistory: searchHistory || []
searchHistory: searchHistory || [],
/**
* 监听cache的type即可,每次取值后都必须调用commit('resetCache')
*/
cache: {
type: 'none',
data: null
}
},
mutations: {
setCache(state, { type, data }) {
state.cache.type = type
state.cache.data = data
},
resetCache(state) {
state.cache.type = 'none'
state.cache.data = null
},
setUecToken(state, token) {
try {
uni.setStorageSync('uecToken', token)

87
utils/hook.js

@ -94,9 +94,10 @@ export function exit() {
/**
* 文件上传
* @param {array} sourceType 上传的方式 album:相册 camera:相机
* @return {Promise} 以数组的形式返回对应的文件地址
* @param {number} count 上传的数量
* @return {Promise<string[]>} 以数组的形式返回对应的文件地址
*/
export function uploadImage(sourceType = ['album', 'camera']) {
export function uploadImage(sourceType = ['album', 'camera'], count = 1) {
return new Promise((resolve, reject) => {
uni.chooseImage({
count: 1,
@ -104,24 +105,16 @@ export function uploadImage(sourceType = ['album', 'camera']) {
sourceType: sourceType,
success: (res) => {
const tempFilePaths = res.tempFilePaths
uni.uploadFile({
url: uploadUrl.image,
filePath: tempFilePaths[0],
name: 'image',
fileType: 'image',
success: (res) => {
let result = JSON.parse(res.data)
if (result.data) {
resolve(result.data)
} else {
reject(result.message)
}
},
fail: (err) => {
console.error('uploadFile error:', err)
reject(err)
}
let cache = tempFilePaths.map((path) => {
return uploadFile(path, 'image')
})
Promise.all(cache)
.then((res) => {
resolve(res)
})
.catch((err) => {
reject(err)
})
},
fail: (err) => {
console.error('chooseImage error:', err)
@ -130,3 +123,59 @@ export function uploadImage(sourceType = ['album', 'camera']) {
})
})
}
/**
* 单文件上传
* @param {string} path 文件路径
* @param {string} type 文件类型 image | file默认为image
* @returns {Promise<string>} 返回单文件上传地址
*/
export function uploadFile(path, type = 'image') {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: uploadUrl[type],
filePath: path,
name: type,
// fileType: type,
success: (res) => {
let result = JSON.parse(res.data)
if (result.data) {
resolve(result.data)
} else {
reject(result.message)
}
},
fail: (err) => {
console.error('uploadFile error:', err)
reject(err)
}
})
})
}
/**
* 根据类型获取缓存
* @param {string} type 缓存类型
* @returns 缓存数据
*/
export function getCache(type) {
let data = null
if (store.state.cache.type === type) {
data = store.state.cache.data
// 防止同一事件循环的数据竞争
setTimeout(() => {
store.commit('resetCache')
})
}
return data
}
/**
* 设置缓存
* @param {string} type 缓存类型
* @param {object} data 缓存数据
* @returns null
*/
export function setCache(type, data) {
store.commit('setCache', { type, data })
}
Loading…
Cancel
Save