Эх сурвалжийг харах

商品、购物车、商品详情UI调整

kevin_zhangl 3 жил өмнө
parent
commit
10dfd1e98e

+ 18 - 0
src/api/user.js

@@ -149,3 +149,21 @@ export function fetchFullInfo(data) {
     params: data
   })
 }
+
+// 用户升级
+export function fetchUpgrade() {
+  return request({
+    url: '/v1/user/upgrade',
+    method: 'get',
+  })
+}
+
+// 用户升级信息
+export function fetchUpgradeInfo(data) {
+  return request({
+    url: '/v1/user/upgrade-info',
+    method: 'get',
+    params: data
+  })
+}
+

+ 2 - 0
src/lang/en.js

@@ -307,6 +307,8 @@ export default {
     selectWelcomePack: 'Select Welcome Pack',
     sponsorCode: 'Sponsor Code',
     payInfo: 'Pay Info',
+    memberInformation: 'Member Information',
+    enterMemberCode: 'Please enter member code.',
   },
 
   atlas: {

+ 2 - 0
src/lang/zh.js

@@ -304,6 +304,8 @@ export default {
     selectWelcomePack: '报单方式',
     sponsorCode: '报单中心编号',
     payInfo: '支付信息',
+    memberInformation: '会员信息',
+    enterMemberCode: '请输入会员编号',
   },
 
   atlas: {

+ 7 - 1
src/router/modules/user.js

@@ -10,7 +10,13 @@ const userRouter = {
       path: 'ba-dec',  // 新建BA会员
       component: () => import('@/views/user/brand-ambassador'),
       name: 'brandAmbassador',
-      meta: { title: 'Welcome BA', icon: 'user', noCache: true }
+      meta: { title: 'Welcome Brand Ambassador', icon: 'user', noCache: true }
+    },
+    {
+      path: 'upgrade',  // 会员升级
+      component: () => import('@/views/user/member-upgrade'),
+      name: 'upgradeManagement',
+      meta: { title: 'Upgrade Management', icon: 'user', noCache: true }
     },
   ]
 }

+ 55 - 110
src/views/shop/car-fund-products.vue

@@ -1,66 +1,45 @@
 <template>
 	<div class="app-container">
-		<el-table
-			:key="tableKey"
-			v-loading="listLoading"
-			:data="tableData"
-			fit
-			highlight-current-row
-			ref="multipleTable"
-			@selection-change="handleSelectionChange"
-		>
-			<el-table-column type="selection" width="50" align="center"></el-table-column>
-			<el-table-column align="center" type="index" width="50"></el-table-column>
-			<el-table-column :label="$t('shop.qty')" min-width="150" align="center">
+		<el-table :data="tableData" :show-header="false" :key="tableKey" v-loading="listLoading" fit ref="multipleTable" @selection-change="handleSelectionChange">
+			<el-table-column type="selection" width="30" align="center"></el-table-column>
+			<el-table-column align="center">
 				<template slot-scope="{row, $index}">
-					<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.productName')" min-width="140" align="center" prop="GOODS_NAME">
-				<template slot-scope="{row}">
-					<span style="word-break: keep-all; cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.productPicture')" align="center" min-width="80px" prop="GOODS_NAME">
-				<template slot-scope="{row}">
-					<el-image
-						style="width: 80px; height: 80px"
-						:src="tool.getArImage(row.COVER, '/files/')"
-						:preview-src-list="[tool.getArImage(row.COVER, '/files/')]"
-					>
-					</el-image>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.productPrice')" align="center" prop="SELL_PRICE" min-width="120px">
-				<template slot-scope="{row}">
-					<span>{{ row.SELL_PRICE | amountFilter }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.taxRate')" align="center" prop="TAX_RATE" min-width="100px">
-				<template slot-scope="{row}">
-					<span>{{ row.TAX_RATE / 100  }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.taxAmount')" align="center" min-width="120px">
-				<template slot-scope="{row}">
-					<span>{{ row | taxAmountFilter | amountFilter }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.inventory')" align="center" prop="STORE_NUMS" min-width="120px">
-				<template slot-scope="{row}">
-					<span>{{ row.STORE_NUMS }}</span>
+					<el-container>
+						<el-aside width="80px" style="background-color: #ffffff; padding: 0; margin-bottom: 0;">
+							<el-image style="width: 80px; height: 80px" :src="tool.getArImage(row.COVER, '/files/')" @click="handleProduct(row)"></el-image>
+						</el-aside>
+						<el-main style="padding: 5px 5px; text-align: left;">
+							<el-row :gutter="10">
+								<el-col :xs="24" :sm="24" :lg="6">
+									<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
+								</el-col>
+								<el-col :xs="24" :sm="24" :lg="4">
+									<span style="color: #9c9c9c; cursor: pointer;">{{ row.GOODS_NO }}</span>
+								</el-col>
+								<el-col :xs="16" :sm="8" :lg="5">
+									<span style="font-weight: bold; color: tomato;">{{ $t('shop.productPrice') }}:{{ row.SELL_PRICE | amountFilter }}</span>
+								</el-col>
+								<el-col :xs="8" :sm="8" :lg="4">
+									<span style="font-size: 13px;">{{ $t('shop.inventory') }}:{{ row.STORE_NUMS }}</span>
+								</el-col>
+								<el-col :xs="24" :sm="8" :lg="5">
+									<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
+								</el-col>
+							</el-row>
+						</el-main>
+					</el-container>
 				</template>
 			</el-table-column>
 		</el-table>
 
 		<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
 
-		<div class="white-box-footer" style="margin-top: 15px;">
-			<div class="flex data" style="float: left; display: inline-block; margin-top: 20px;">
-				<el-button type="primary" size="small" @click="settlement()" style="float: left;">{{ $t('shop.checkOut') }}</el-button>
+		<div class="white-box-footer" style="margin-top: 7px;" v-show="total>0">
+			<div class="flex data" style="float: left; display: inline-block; margin-top: 10px;">
+				<el-button type="primary" size="mini" @click="settlement()" style="float: left;">{{ $t('shop.checkOut') }}</el-button>
 			</div>
-			<div class="flex data" style="float: right; display: inline-block; line-height: 35px; font-size: 14px; margin-top: 20px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
-				<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ sellPriceSum }}</div>
+			<div class="flex data" style="float: right; display: inline-block; line-height: 28px; font-size: 14px; margin-top: 10px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 5px;">
+				<div style="margin-right: 1rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ sellPriceSum }}</div>
 				<div style="display: inline-block;">{{ $t('shop.taxAmount') }}:{{ taxSum }}</div>
 			</div>
 		</div>
@@ -69,63 +48,31 @@
 		<el-dialog :title="$t('shop.productsSettlement')" :visible.sync="visibleShoppingCart" :width="screenWidth" style="margin-top: -95px;">
 			<div v-loading="loading">
 				<div class="white-box">
-					<el-table :data="goods" style="width: 100%" v-if="media === 'medium'" show-summary :summary-method="getSummaries">
-						<el-table-column :label="$t('shop.productPicture')" align="center" min-width="90px">
-							<template slot-scope="{row}">
-								<el-image
-									style="width: 80px; height: 80px"
-									:src="tool.getArImage(row.COVER, '/files/')"
-									:preview-src-list="[tool.getArImage(row.COVER, '/files/')]" @click="handleProduct(row)">
-								</el-image>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.productName')" prop="GOODS_NAME" align="center" min-width="130px">
-							<template slot-scope="{row}">
-								<span @click="handleProduct(row)" style="cursor: pointer;">{{ row.GOODS_NAME }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.qty')" prop="chose_num" align="center" min-width="90px"></el-table-column >
-						<el-table-column :label="$t('shop.productPrice')" prop="member_price" align="center" min-width="130px">
-							<template slot-scope="{row}">
-								<span>{{ row.member_price }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.totalPrice')" prop="member_price_plus" align="center" min-width="130px">
-							<template slot-scope="{row}">
-								<span>{{ row.member_price_plus }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.taxRate')" prop="TAX_RATE" align="center" min-width="70px">
-							<template slot-scope="{row}">
-								<span>{{ row.TAX_RATE / 100 }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.totalTaxAmount')" prop="tax_amount_plus" align="center" min-width="120px">
-							<template slot-scope="{row}">
-								<span>{{ row.tax_amount_plus }}</span>
-							</template>
-						</el-table-column>
-					</el-table>
-
-					<el-table :data="goods" v-else :show-header="false">
+					<el-table :data="goods" :show-header="false">
 						<el-table-column align="center">
 							<template slot-scope="{row}">
 								<el-container>
-									<el-aside width="100px" style="background-color: #ffffff; padding: 10px 0;">
+									<el-aside width="100px" style="background-color: #ffffff; padding: 0; margin-bottom: 0;">
 										<el-image style="width: 100px; height: 100px" :src="tool.getArImage(row.COVER, '/files/')" @click="handleProduct(row)"></el-image>
 									</el-aside>
-									<el-main>
-										<div style="text-align: left;">
-											<span style="font-weight: bold;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span><br />
-											<span>{{ row.GOODS_NO }}</span><br />
-											<span style="display: inline-block;">
-											<span style="float: left; color: tomato;">{{ $t('currency.sign') }} {{ row.member_price }}</span>
-										</span>
-											<span style="float: right;">
-											x {{ row.chose_num }}
-										</span><br />
-											<span>{{ $t('shop.totalPrice') }}:{{ $t('currency.sign') }} {{ row.member_price_plus }}</span>
-										</div>
+									<el-main style="padding: 10px 5px; text-align: left;">
+										<el-row :gutter="10">
+											<el-col :xs="24" :sm="9" :lg="9">
+												<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
+											</el-col>
+											<el-col :xs="24" :sm="4" :lg="4">
+												<span style="color: #9c9c9c; cursor: pointer;">{{ row.GOODS_NO }}</span>
+											</el-col>
+											<el-col :xs="20" :sm="4" :lg="4">
+												<span style="font-weight: bold;">{{ $t('shop.productPrice') }}:{{ row.member_price }}</span>
+											</el-col>
+											<el-col :xs="4" :sm="2" :lg="2">
+												<span style="">x {{ row.chose_num }}</span>
+											</el-col>
+											<el-col :xs="24" :sm="5" :lg="5">
+												<span style="color: tomato; font-weight: bold;">{{ $t('shop.totalPrice') }}:{{ row.member_price_plus }}</span>
+											</el-col>
+										</el-row>
 									</el-main>
 								</el-container>
 							</template>
@@ -140,7 +87,7 @@
 									{{ $t('shop.totalOrders') }}:
 									<div class="sum">
 										<div class="sum_box">
-											<div>{{ $t('shop.paidAmount') }}</div>
+											<div>{{ $t('shop.total') }}</div>
 											<div>{{ pointsSum }}</div>
 										</div>
 										<div class="sum_box">
@@ -216,10 +163,9 @@
 					<div style="text-align: left; line-height: 50px; font-size: 16px;">
 						<span style="font-weight: bold; font-size: 20px;">{{ product.GOODS_NAME }}</span><br />
 						<span style="font-weight: bold; font-size: 15px;">{{ $t('shop.productCode') }}:{{ product.GOODS_NO }}</span><br />
-						<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ product.SELL_PRICE }}</span><br />
-						<span>{{ $t('shop.productBV') }}:{{ product.PRICE_PV }}</span><br />
+						<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ product.SELL_PRICE }}</span><br />
 						<span>{{ $t('shop.taxRate') }}:{{ product.TAX_RATE / 100 }}</span><br />
-						<span>{{ $t('shop.taxAmount') }}:{{ $t('currency.sign') }} {{ product.taxAmount }}</span><br />
+						<span>{{ $t('shop.taxAmount') }}:{{ product.taxAmount }}</span><br />
 						<span>{{ $t('shop.inventory') }}:{{ product.STORE_NUMS }}</span>
 					</div>
 				</el-col>
@@ -309,7 +255,6 @@ export default {
 
 			screenWidth: getScreenWidth() > 600 ? '80%' : getScreenWidth() + 'px',
 			labelPosition: getScreenWidth() > 600 ? 'right' : 'top',
-			media: getMedia(),
 
 			visibleProduct: false,
 			product: {

+ 58 - 112
src/views/shop/standard-products.vue

@@ -1,70 +1,50 @@
 <template>
 <div class="app-container">
-  <el-table
-    :key="tableKey"
-    v-loading="listLoading"
-    :data="tableData"
-    fit
-    highlight-current-row
-		ref="multipleTable"
-		@selection-change="handleSelectionChange"
-  >
-		<el-table-column type="selection" width="50" align="center"></el-table-column>
-		<el-table-column align="center" type="index" width="50"></el-table-column>
-		<el-table-column :label="$t('shop.qty')" min-width="150" align="center">
+	<el-table :data="tableData" :show-header="false" :key="tableKey" v-loading="listLoading" fit ref="multipleTable" @selection-change="handleSelectionChange">
+		<el-table-column type="selection" width="30" align="center"></el-table-column>
+<!--		<el-table-column align="center" type="index" width="50"></el-table-column>-->
+		<el-table-column align="center">
 			<template slot-scope="{row, $index}">
-				<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
+				<el-container>
+					<el-aside width="80px" style="background-color: #ffffff; padding: 0; margin-bottom: 0;">
+						<el-image style="width: 80px; height: 80px" :src="tool.getArImage(row.COVER, '/files/')" @click="handleProduct(row)"></el-image>
+					</el-aside>
+					<el-main style="padding: 5px 5px; text-align: left;">
+						<el-row :gutter="10">
+							<el-col :xs="24" :sm="24" :lg="6">
+								<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
+							</el-col>
+							<el-col :xs="24" :sm="24" :lg="4">
+								<span style="color: #9c9c9c; cursor: pointer;">{{ row.GOODS_NO }}</span>
+							</el-col>
+							<el-col :xs="16" :sm="8" :lg="5">
+								<span style="font-size: 13px;">
+									<span style="font-weight: bold; color: tomato;">
+										{{ $t('currency.sign') }} {{ row.SELL_PRICE | amountFilter }}
+										<span style="font-weight:normal; color: #606266;">({{ row.PRICE_PV }}{{ $t('shop.productBV') }})</span>
+									</span>
+								</span>
+							</el-col>
+							<el-col :xs="8" :sm="8" :lg="4">
+								<span style="font-size: 13px;">{{ $t('shop.inventory') }}:{{ row.STORE_NUMS }}</span>
+							</el-col>
+							<el-col :xs="24" :sm="8" :lg="5">
+								<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
+							</el-col>
+						</el-row>
+					</el-main>
+				</el-container>
 			</template>
 		</el-table-column>
-    <el-table-column :label="$t('shop.productName')" min-width="140" align="center" prop="GOODS_NAME">
-      <template slot-scope="{row}">
-        <span style="word-break: keep-all; cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
-      </template>
-    </el-table-column>
-    <el-table-column :label="$t('shop.productPicture')" align="center" min-width="80px">
-      <template slot-scope="{row}">
-				<el-image
-					style="width: 80px; height: 80px"
-					:src="tool.getArImage(row.COVER, '/files/')"
-					:preview-src-list="[tool.getArImage(row.COVER, '/files/')]"
-				>
-				</el-image>
-      </template>
-    </el-table-column>
-    <el-table-column :label="$t('shop.productPrice')" align="center" prop="SELL_PRICE" min-width="120px">
-      <template slot-scope="{row}">
-        <span>{{ $t('currency.sign') }} {{ row.SELL_PRICE | amountFilter }}</span>
-      </template>
-    </el-table-column>
-    <el-table-column :label="$t('shop.productBV')" align="center" prop="PRICE_PV" min-width="100px">
-      <template slot-scope="{row}">
-        <span>{{ row.PRICE_PV }}</span>
-      </template>
-    </el-table-column>
-    <el-table-column :label="$t('shop.taxRate')" align="center" prop="TAX_RATE" min-width="100px">
-      <template slot-scope="{row}">
-				<span>{{ row.TAX_RATE / 100  }}</span>
-      </template>
-    </el-table-column>
-    <el-table-column :label="$t('shop.taxAmount')" align="center" min-width="120px">
-      <template slot-scope="{row}">
-				<span>{{ $t('currency.sign') }} {{ row | taxAmountFilter | amountFilter }}</span>
-      </template>
-    </el-table-column>
-    <el-table-column :label="$t('shop.inventory')" align="center" prop="STORE_NUMS" min-width="120px">
-      <template slot-scope="{row}">
-				<span>{{ row.STORE_NUMS }}</span>
-      </template>
-    </el-table-column>
-  </el-table>
+	</el-table>
 
 	<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
 
-	<div class="white-box-footer" style="margin-top: 15px;">
+	<div class="white-box-footer" style="margin-top: 15px;" v-show="total>0">
 		<div class="flex data" style="float: left; display: inline-block; margin-top: 20px;">
 			<el-button type="primary" size="small" @click="settlement()" style="float: left;">{{ $t('shop.checkOut') }}</el-button>
 		</div>
-		<div class="flex data" style="float: right; display: inline-block; line-height: 35px; font-size: 14px; margin-top: 20px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
+		<div class="flex data" style="float: right; display: inline-block; line-height: 28px; font-size: 14px; margin-top: 10px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 5px;">
 			<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ sellPriceSum }}</div>
 			<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productBV') }}:{{ $t('currency.sign') }} {{ pricePvSum }}</div>
 			<div style="display: inline-block;">{{ $t('shop.taxAmount') }}:{{ $t('currency.sign') }} {{ taxSum }}</div>
@@ -75,71 +55,38 @@
 	<el-dialog :title="$t('shop.productsSettlement')" :visible.sync="visibleShoppingCart" :width="screenWidth" v-loading="shoppingCartLoading" style="margin-top: -95px;">
 		<div v-loading="loading">
 			<div class="white-box">
-				<el-table :data="goods" v-if="media === 'medium'">
-					<el-table-column :label="$t('shop.productPicture')" align="center" min-width="90px">
-						<template slot-scope="{row}">
-							<el-image
-								style="width: 80px; height: 80px"
-								:src="tool.getArImage(row.COVER, '/files/')"
-								:preview-src-list="[tool.getArImage(row.COVER, '/files/')]"
-							>
-							</el-image>
-						</template>
-					</el-table-column>
-					<el-table-column :label="$t('shop.productName')" prop="GOODS_NAME" align="center" min-width="130px">
-						<template slot-scope="{row}">
-							<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
-						</template>
-					</el-table-column>
-					<el-table-column :label="$t('shop.qty')" prop="chose_num" align="center" min-width="90px"></el-table-column >
-					<el-table-column :label="$t('shop.productPrice')" prop="member_price" align="center" min-width="130px">
-						<template slot-scope="{row}">
-							<span>{{ $t('currency.sign') }} {{ row.member_price }}</span>
-						</template>
-					</el-table-column>
-					<el-table-column :label="$t('shop.totalPrice')" prop="member_price_plus" align="center" min-width="130px">
-						<template slot-scope="{row}">
-							<span>{{ $t('currency.sign') }} {{ row.member_price_plus }}</span>
-						</template>
-					</el-table-column>
-<!--					<el-table-column :label="$t('shop.taxRate')" prop="TAX_RATE" align="center" min-width="70px">-->
-<!--						<template slot-scope="{row}">-->
-<!--							<span>{{ row.TAX_RATE / 100 }}</span>-->
-<!--						</template>-->
-<!--					</el-table-column>-->
-<!--					<el-table-column :label="$t('shop.totalTaxAmount')" prop="tax_amount_plus" align="center" min-width="120px">-->
-<!--						<template slot-scope="{row}">-->
-<!--							<span>{{ $t('currency.sign') }} {{ row.tax_amount_plus }}</span>-->
-<!--						</template>-->
-<!--					</el-table-column>-->
-				</el-table>
-
-				<el-table :data="goods" v-else :show-header="false">
+				<el-table :data="goods" :show-header="false">
 					<el-table-column align="center">
 						<template slot-scope="{row}">
 							<el-container>
-								<el-aside width="100px" style="background-color: #ffffff; padding: 10px 0;">
+								<el-aside width="100px" style="background-color: #ffffff; padding: 0; margin-bottom: 0;">
 									<el-image style="width: 100px; height: 100px" :src="tool.getArImage(row.COVER, '/files/')" @click="handleProduct(row)"></el-image>
 								</el-aside>
-								<el-main>
-									<div style="text-align: left;">
-										<span style="font-weight: bold;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span><br />
-										<span>{{ row.GOODS_NO }}</span><br />
-										<span style="display: inline-block;">
-											<span style="float: left; color: tomato;">{{ $t('currency.sign') }} {{ row.member_price }}</span>
-										</span>
-										<span style="float: right;">
-											x {{ row.chose_num }}
-										</span><br />
-										<span>{{ $t('shop.totalPrice') }}:{{ $t('currency.sign') }} {{ row.member_price_plus }}</span>
-									</div>
+								<el-main style="padding: 10px 5px; text-align: left;">
+									<el-row :gutter="10">
+										<el-col :xs="24" :sm="9" :lg="9">
+											<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
+										</el-col>
+										<el-col :xs="24" :sm="4" :lg="4">
+											<span style="color: #9c9c9c; cursor: pointer;">{{ row.GOODS_NO }}</span>
+										</el-col>
+										<el-col :xs="20" :sm="4" :lg="4">
+											<span style="font-weight: bold;">{{ $t('currency.sign') }} {{ row.member_price }}</span>
+										</el-col>
+										<el-col :xs="4" :sm="2" :lg="2">
+											<span style="">x {{ row.chose_num }}</span>
+										</el-col>
+										<el-col :xs="24" :sm="5" :lg="5">
+											<span style="color: tomato; font-weight: bold;">{{ $t('currency.sign') }} {{ row.member_price_plus }}</span>
+										</el-col>
+									</el-row>
 								</el-main>
 							</el-container>
 						</template>
 					</el-table-column>
 				</el-table>
 
-				<div class="white-box-footer" style=" padding: 15px; line-height: 15px;">
+				<div class="white-box-footer" style="padding: 10px; line-height: 15px;">
 					<el-row :gutter="40">
 						<el-col :xs="24" :sm="24" :lg="24">
 							<!-- 订单合计 -->
@@ -147,7 +94,7 @@
 								{{ $t('shop.totalOrders') }}:
 								<div class="sum">
 									<div class="sum_box">
-										<div>{{ $t('shop.paidAmount') }}</div>
+										<div>{{ $t('shop.total') }}</div>
 										<div>{{ $t('currency.sign') }} {{ payType === "cash" ? cashSum : pointsSum }}</div>
 									</div>
 									<div class="sum_box">
@@ -389,7 +336,6 @@
 				shippingAddressList: [],
 
 				screenWidth: getScreenWidth() > 600 ? '80%' : getScreenWidth() + 'px',
-				media: getMedia(),
 				labelPosition: getScreenWidth() > 600 ? 'right' : 'top',
 				dialog: false,
 				dialogLoading: false,

+ 56 - 111
src/views/shop/villa-fund-products.vue

@@ -1,66 +1,45 @@
 <template>
 	<div class="app-container">
-		<el-table
-			:key="tableKey"
-			v-loading="listLoading"
-			:data="tableData"
-			fit
-			highlight-current-row
-			ref="multipleTable"
-			@selection-change="handleSelectionChange"
-		>
-			<el-table-column type="selection" width="50" align="center"></el-table-column>
-			<el-table-column align="center" type="index" width="50"></el-table-column>
-			<el-table-column :label="$t('shop.qty')" min-width="150" align="center">
+		<el-table :data="tableData" :show-header="false" :key="tableKey" v-loading="listLoading" fit ref="multipleTable" @selection-change="handleSelectionChange">
+			<el-table-column type="selection" width="30" align="center"></el-table-column>
+			<el-table-column align="center">
 				<template slot-scope="{row, $index}">
-					<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.productName')" min-width="140" align="center" prop="GOODS_NAME">
-				<template slot-scope="{row}">
-					<span style="word-break: keep-all;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.productPicture')" align="center" min-width="80px" prop="GOODS_NAME">
-				<template slot-scope="{row}">
-					<el-image
-						style="width: 80px; height: 80px"
-						:src="tool.getArImage(row.COVER, '/files/')"
-						:preview-src-list="[tool.getArImage(row.COVER, '/files/')]"
-					>
-					</el-image>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.productPrice')" align="center" prop="SELL_PRICE" min-width="120px">
-				<template slot-scope="{row}">
-					<span>{{ row.SELL_PRICE | amountFilter }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.taxRate')" align="center" prop="TAX_RATE" min-width="100px">
-				<template slot-scope="{row}">
-					<span>{{ row.TAX_RATE / 100  }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.taxAmount')" align="center" min-width="120px">
-				<template slot-scope="{row}">
-					<span>{{ row | taxAmountFilter | amountFilter }}</span>
-				</template>
-			</el-table-column>
-			<el-table-column :label="$t('shop.inventory')" align="center" prop="STORE_NUMS" min-width="120px">
-				<template slot-scope="{row}">
-					<span>{{ row.STORE_NUMS }}</span>
+					<el-container>
+						<el-aside width="80px" style="background-color: #ffffff; padding: 0; margin-bottom: 0;">
+							<el-image style="width: 80px; height: 80px" :src="tool.getArImage(row.COVER, '/files/')" @click="handleProduct(row)"></el-image>
+						</el-aside>
+						<el-main style="padding: 5px 5px; text-align: left;">
+							<el-row :gutter="10">
+								<el-col :xs="24" :sm="24" :lg="6">
+									<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
+								</el-col>
+								<el-col :xs="24" :sm="24" :lg="4">
+									<span style="color: #9c9c9c; cursor: pointer;">{{ row.GOODS_NO }}</span>
+								</el-col>
+								<el-col :xs="16" :sm="8" :lg="5">
+									<span style="font-weight: bold; color: tomato;">{{ $t('shop.productPrice') }}:{{ row.SELL_PRICE | amountFilter }}</span>
+								</el-col>
+								<el-col :xs="8" :sm="8" :lg="4">
+									<span style="font-size: 13px;">{{ $t('shop.inventory') }}:{{ row.STORE_NUMS }}</span>
+								</el-col>
+								<el-col :xs="24" :sm="8" :lg="5">
+									<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
+								</el-col>
+							</el-row>
+						</el-main>
+					</el-container>
 				</template>
 			</el-table-column>
 		</el-table>
 
 		<pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
 
-		<div class="white-box-footer" style="margin-top: 15px;">
-			<div class="flex data" style="float: left; display: inline-block; margin-top: 20px;">
-				<el-button type="primary" size="small" @click="settlement()" style="float: left;">{{ $t('shop.checkOut') }}</el-button>
+		<div class="white-box-footer" style="margin-top: 5px;">
+			<div class="flex data" style="float: left; display: inline-block; margin-top: 10px;">
+				<el-button type="primary" size="mini" @click="settlement()" style="float: left;">{{ $t('shop.checkOut') }}</el-button>
 			</div>
-			<div class="flex data" style="float: right; display: inline-block; line-height: 35px; font-size: 14px; margin-top: 20px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
-				<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ sellPriceSum }}</div>
+			<div class="flex data" style="float: right; display: inline-block; line-height: 28px; font-size: 14px; margin-top: 10px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
+				<div style="margin-right: 1rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ sellPriceSum }}</div>
 				<div style="display: inline-block;">{{ $t('shop.taxAmount') }}:{{ taxSum }}</div>
 			</div>
 		</div>
@@ -69,63 +48,31 @@
 		<el-dialog :title="$t('shop.productsSettlement')" :visible.sync="visibleShoppingCart" :width="screenWidth" style="margin-top: -95px;">
 			<div v-loading="loading">
 				<div class="white-box">
-					<el-table :data="goods" style="width: 100%" v-if="media === 'medium'" show-summary :summary-method="getSummaries">
-						<el-table-column :label="$t('shop.productPicture')" align="center" min-width="90px">
-							<template slot-scope="{row}">
-								<el-image
-									style="width: 80px; height: 80px"
-									:src="tool.getArImage(row.COVER, '/files/')"
-									:preview-src-list="[tool.getArImage(row.COVER, '/files/')]" @click="handleProduct(row)">
-								</el-image>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.productName')" prop="GOODS_NAME" align="center" min-width="130px">
-							<template slot-scope="{row}">
-								<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.qty')" prop="chose_num" align="center" min-width="90px"></el-table-column >
-						<el-table-column :label="$t('shop.productPrice')" prop="member_price" align="center" min-width="130px">
-							<template slot-scope="{row}">
-								<span>{{ row.member_price }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.totalPrice')" prop="member_price_plus" align="center" min-width="130px">
-							<template slot-scope="{row}">
-								<span>{{ row.member_price_plus }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.taxRate')" prop="TAX_RATE" align="center" min-width="70px">
-							<template slot-scope="{row}">
-								<span>{{ row.TAX_RATE / 100 }}</span>
-							</template>
-						</el-table-column>
-						<el-table-column :label="$t('shop.totalTaxAmount')" prop="tax_amount_plus" align="center" min-width="120px">
-							<template slot-scope="{row}">
-								<span>{{ row.tax_amount_plus }}</span>
-							</template>
-						</el-table-column>
-					</el-table>
-
-					<el-table :data="goods" v-else :show-header="false">
+					<el-table :data="goods" :show-header="false">
 						<el-table-column align="center">
 							<template slot-scope="{row}">
 								<el-container>
-									<el-aside width="100px" style="background-color: #ffffff; padding: 10px 0;">
-										<el-image style="width: 100px; height: 100px" :src="tool.getArImage(row.COVER, '/files/')" :preview-src-list="false"></el-image>
+									<el-aside width="100px" style="background-color: #ffffff; padding: 0; margin-bottom: 0;">
+										<el-image style="width: 100px; height: 100px" :src="tool.getArImage(row.COVER, '/files/')" @click="handleProduct(row)"></el-image>
 									</el-aside>
-									<el-main>
-										<div style="text-align: left;">
-											<span style="font-weight: bold;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span><br />
-											<span>{{ row.GOODS_NO }}</span><br />
-											<span style="display: inline-block;">
-											<span style="float: left; color: tomato;">{{ $t('currency.sign') }} {{ row.member_price }}</span>
-										</span>
-											<span style="float: right;">
-											x {{ row.chose_num }}
-										</span><br />
-											<span>{{ $t('shop.totalPrice') }}:{{ $t('currency.sign') }} {{ row.member_price_plus }}</span>
-										</div>
+									<el-main style="padding: 10px 5px; text-align: left;">
+										<el-row :gutter="10">
+											<el-col :xs="24" :sm="9" :lg="9">
+												<span style="cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span>
+											</el-col>
+											<el-col :xs="24" :sm="4" :lg="4">
+												<span style="color: #9c9c9c; cursor: pointer;">{{ row.GOODS_NO }}</span>
+											</el-col>
+											<el-col :xs="20" :sm="4" :lg="4">
+												<span style="font-weight: bold;">{{ $t('shop.productPrice') }}:{{ row.member_price }}</span>
+											</el-col>
+											<el-col :xs="4" :sm="2" :lg="2">
+												<span style="">x {{ row.chose_num }}</span>
+											</el-col>
+											<el-col :xs="24" :sm="5" :lg="5">
+												<span style="color: tomato; font-weight: bold;">{{ $t('shop.totalPrice') }}:{{ row.member_price_plus }}</span>
+											</el-col>
+										</el-row>
 									</el-main>
 								</el-container>
 							</template>
@@ -140,7 +87,7 @@
 									{{ $t('shop.totalOrders') }}:
 									<div class="sum">
 										<div class="sum_box">
-											<div>{{ $t('shop.paidAmount') }}</div>
+											<div>{{ $t('shop.total') }}</div>
 											<div>{{ pointsSum }}</div>
 										</div>
 										<div class="sum_box">
@@ -216,10 +163,9 @@
 					<div style="text-align: left; line-height: 50px; font-size: 16px;">
 						<span style="font-weight: bold; font-size: 20px;">{{ product.GOODS_NAME }}</span><br />
 						<span style="font-weight: bold; font-size: 15px;">{{ $t('shop.productCode') }}:{{ product.GOODS_NO }}</span><br />
-						<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ product.SELL_PRICE }}</span><br />
-						<span>{{ $t('shop.productBV') }}:{{ product.PRICE_PV }}</span><br />
+						<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ product.SELL_PRICE }}</span><br />
 						<span>{{ $t('shop.taxRate') }}:{{ product.TAX_RATE / 100 }}</span><br />
-						<span>{{ $t('shop.taxAmount') }}:{{ $t('currency.sign') }} {{ product.taxAmount }}</span><br />
+						<span>{{ $t('shop.taxAmount') }}:{{ product.taxAmount }}</span><br />
 						<span>{{ $t('shop.inventory') }}:{{ product.STORE_NUMS }}</span>
 					</div>
 				</el-col>
@@ -309,7 +255,6 @@ export default {
 
 			screenWidth: getScreenWidth() > 600 ? '80%' : getScreenWidth() + 'px',
 			labelPosition: getScreenWidth() > 600 ? 'right' : 'top',
-			media: getMedia(),
 
 			visibleProduct: false,
 			product: {

+ 10 - 7
src/views/user/brand-ambassador.vue

@@ -19,16 +19,16 @@
 							<el-tabs type="border-card" v-model="decWay" style="position: relative; width: 100%;">
 								<el-tab-pane :label="$t('shop.product')" name="2">
 									<el-table :data="tableData" :show-header="false" @selection-change="handleSelectionChange">
-										<el-table-column type="selection" width="50" align="center"></el-table-column>
+										<el-table-column type="selection" width="30" align="center" style="top: -30px;"></el-table-column>
 										<el-table-column align="center">
 											<template slot-scope="{row, $index}">
 												<el-container>
-													<el-aside width="80px" style="background-color: #ffffff; padding: 10px 0;">
+													<el-aside width="80px" style=" padding: 0; margin-bottom: 0; background-color: #ffffff;">
 														<el-image style="width: 80px; height: 80px" :src="tool.getArImage(row.COVER, '/files/')"></el-image>
 													</el-aside>
 													<el-main style="padding: 0;">
 														<div style="text-align: left; line-height: 25px;">
-															<span style="font-weight: bold;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span><br />
+															<span style="font-weight: bold; cursor: pointer;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span><br />
 															<span>{{ row.GOODS_NO }}</span><br />
 															<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ row.SELL_PRICE }}</span><br />
 															<span>{{ $t('shop.productBV') }}:{{ $t('currency.sign') }} {{ row.PRICE_PV }}</span><br />
@@ -44,9 +44,9 @@
 									</el-table>
 
 									<div class="white-box-footer">
-										<div class="flex data" style="float: right; display: inline-block; line-height: 35px; font-size: 14px; margin-top: 20px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
-											<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ sellPriceSum }}</div>
-											<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productBV') }}:{{ $t('currency.sign') }} {{ pricePvSum }}</div>
+										<div class="flex data" style="float: right; display: inline-block; line-height: 30px; font-size: 14px; margin-top: 15px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 5px;">
+											<div style="margin-right: 1rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ sellPriceSum }}</div>
+											<div style="margin-right: 1rem; display: inline-block;">{{ $t('shop.productBV') }}:{{ $t('currency.sign') }} {{ pricePvSum }}</div>
 											<div style="display: inline-block;">{{ $t('shop.taxAmount') }}:{{ $t('currency.sign') }} {{ taxSum }}</div>
 										</div>
 									</div>
@@ -300,7 +300,7 @@ export default {
 						{
 							display_name: 'orderType',
 							variable_name: 'orderType',
-							value: 'userOrder'
+							value: 'baDec'
 						},
 					]
 				},
@@ -658,4 +658,7 @@ export default {
 	word-break: keep-all;
 	white-space: pre-wrap;
 }
+.el-tabs--border-card > .el-tabs__content {
+	padding: 5px;
+}
 </style>

+ 651 - 0
src/views/user/member-upgrade.vue

@@ -0,0 +1,651 @@
+<template>
+	<div v-loading="loading">
+		<div class="white-box">
+			<el-row :gutter="20">
+				<el-col :xs="24" :sm="14" :lg="14">
+					<el-form :model="form" ref="form" :label-position="labelPosition" class="form-page">
+						<el-divider content-position="left">{{ $t('user.memberInformation') }}</el-divider>
+					<el-form-item :label="$t('shop.memberCode')" prop="insertUserName">
+						<el-input
+							v-model="form.insertUserName"
+							:placeholder="$t('shop.enterMemberCode')"
+							:rules="{ required: true, message: $t('shop.enterMemberCode'), trigger: 'blur' }"
+							@blur="fetchUpgrade"
+						>
+						</el-input>
+					</el-form-item>
+					<el-form-item label="Member level"><!-- 会员级别 -->
+						<el-input v-model="form.userDecName" disabled></el-input>
+					</el-form-item>
+					<el-form-item label="Member name"><!-- 会员姓名 -->
+						<el-input v-model="form.userRealName" disabled></el-input>
+					</el-form-item>
+					<el-form-item label="Joining date"><!-- 加入日期 -->
+						<el-input v-model="form.addAt" disabled></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax" label="Upgrade way"><!-- 升级方式 -->
+						<el-input v-model="form.upgradeFunc" disabled></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax" label="To upgrade level  " prop="upgradeValue"><!-- 升级级别 -->
+						<el-select v-model="form.upgradeValue" placeholder="Please select a level" @change="changeLevel"><!-- 请选择级别 -->
+							<el-option
+								v-for="item in upgradeOption"
+								:key="item.ID"
+								:label="item.LEVEL_NAME"
+								:value="{value:item.ID, diffPv:item.REPAIR_PV}">
+							</el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item v-if="!isMax" label="Top Up(BV)"><!-- 升级补差业绩 -->
+						<el-input v-model="needDiffPv" disabled></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax">
+						<template slot="label">
+							Upgrade purchase product<!-- 升级购买商品 -->
+						</template>
+						<el-tabs type="border-card" v-model="decWay" style="position: relative;width: 100%;">
+							<el-tab-pane label="product" name="2"><!-- 商品 -->
+								<el-tab-pane :label="$t('shop.product')" name="2">
+									<el-table :data="tableData" :show-header="false" @selection-change="handleSelectionChange">
+										<el-table-column type="selection" width="50" align="center"></el-table-column>
+										<el-table-column align="center">
+											<template slot-scope="{row, $index}">
+												<el-container>
+													<el-aside width="80px" style="background-color: #ffffff; padding: 10px 0;">
+														<el-image style="width: 80px; height: 80px" :src="tool.getArImage(row.COVER, '/files/')"></el-image>
+													</el-aside>
+													<el-main style="padding: 0;">
+														<div style="text-align: left; line-height: 25px;">
+															<span style="font-weight: bold;" @click="handleProduct(row)">{{ row.GOODS_NAME }}</span><br />
+															<span>{{ row.GOODS_NO }}</span><br />
+															<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ row.SELL_PRICE }}</span><br />
+															<span>{{ $t('shop.productBV') }}:{{ $t('currency.sign') }} {{ row.PRICE_PV }}</span><br />
+															<span style="display: inline-block; float: right; ">
+																	<el-input-number size="mini" v-model="storeNums[$index]" :min="1" :max="Number(row.STORE_NUMS)" @change="handleInputNumber($event, row)"></el-input-number>
+																</span>
+															<br />
+														</div>
+													</el-main>
+												</el-container>
+											</template>
+										</el-table-column>
+									</el-table>
+
+									<div class="white-box-footer">
+										<div class="flex data" style="float: right; display: inline-block; line-height: 35px; font-size: 14px; margin-top: 20px; border: 1px solid #dcdfe6; border-radius: 4px; padding: 0 15px;">
+											<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ sellPriceSum }}</div>
+											<div style="margin-right: 2rem; display: inline-block;">{{ $t('shop.productBV') }}:{{ $t('currency.sign') }} {{ pricePvSum }}</div>
+											<div style="display: inline-block;">{{ $t('shop.taxAmount') }}:{{ $t('currency.sign') }} {{ taxSum }}</div>
+										</div>
+									</div>
+								</el-tab-pane>
+							</el-tab-pane>
+						</el-tabs>
+					</el-form-item>
+					<el-form-item v-if="!isMax">
+						<template slot="label">
+							Recipient name<!-- 收货人 -->
+						</template>
+						<el-input v-model="form.consignee"></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax">
+						<template slot="label">
+							Phone Number<!-- 收货人手机 -->
+						</template>
+						<el-input v-model="form.acceptMobile"></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax" prop="areaSelected">
+						<template slot="label">
+							State<!-- 地区 -->
+						</template>
+<!--						<el-cascader-->
+<!--							size="large"-->
+<!--							:options="regionData"-->
+<!--							v-model="form.areaSelected">-->
+<!--						</el-cascader>-->
+						<el-select v-model="form.areaSelected" class="filter-item" style="width: 100%;">
+							<el-option v-for="item in regionData" :key="item.id" :label="item.address" :value="item.id" />
+						</el-select>
+					</el-form-item>
+					<el-form-item v-if="!isMax">
+						<template slot="label">
+							Local Government Area
+						</template>
+						<el-input v-model="form.lgaName"></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax">
+						<template slot="label">
+							City
+						</template>
+						<el-input v-model="form.cityName"></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax">
+						<template slot="label">
+							Detailed address<!-- 详细地址 -->
+						</template>
+						<el-input v-model="form.address"></el-input>
+					</el-form-item>
+					<el-form-item v-if="!isMax" label="note"><!-- 备注 -->
+						<el-input type="textarea" v-model="form.remark"></el-input>
+					</el-form-item>
+
+					<el-form-item v-if="!isMax" label="Payment method" required><!-- 支付方式 -->
+						<el-radio-group v-model="form.payType" @change="payMethodChange">
+							<el-radio v-for="(item, index) in payList" :key='index' :label="item.label">{{ item.name }}</el-radio>
+						</el-radio-group>
+					</el-form-item>
+
+					<el-form-item v-if="!isMax">
+						<el-button type="primary" @click="onSubmit" :loading="submitButtonStat">SAVE<!-- 保存 --></el-button>
+					</el-form-item>
+				</el-form>
+				</el-col>
+			</el-row>
+		</div>
+
+		<!-- payStack模态框 -->
+		<el-dialog :title="$t('shop.goPay')" :visible.sync="visible" :width="payStackScreenWidth" v-loading="payStackLoading" :before-close="handleClose">
+			<section>
+				<el-form :model="payForm">
+					<el-form-item :label="$t('user.email')" label-width="100px" required>
+						<el-input v-model="payForm.email" autocomplete="off"></el-input>
+					</el-form-item>
+					<el-form-item :label="$t('shop.amount')" label-width="100px" required>
+						<el-input v-model="payForm.amount" autocomplete="off" readonly></el-input>
+					</el-form-item>
+				</el-form>
+			</section>
+			<paystack
+				:firstname="payForm.firstname"
+				:lastname="payForm.lastname"
+				:amount="payForm.amount * 100"
+				:email="payForm.email"
+				:metadata="payForm.metadata"
+				:currency="payForm.currency"
+				:paystackkey="payForm.publicKey"
+				:reference="reference"
+				:channels="channels"
+				:callback="processPayment"
+				:close="handleClose"
+			>
+				<el-button type="primary" size="small">{{ $t('shop.goPay') }}</el-button>
+			</paystack>
+			<el-button type="danger" size="small" class="cancelButton" @click="handleClose" style="margin-left: 10px;">{{ $t('common.cancel') }}</el-button>
+		</el-dialog>
+
+		<!-- 倒计时页面 -->
+		<el-dialog :title="$t('common.hint')" :visible.sync="payDialog" :width="payStackScreenWidth" :show-close="false" :close="handleOrderList">
+			<el-card shadow="always">
+				<el-result icon="success" :title="$t('common.successfully')" :subTitle="$t('shop.successOrderTips')">
+					<template slot="extra">
+						<el-button type="primary" size="medium" @click="handleOrderList">{{ $t('shop.goBack') }}({{ countdown }})</el-button>
+					</template>
+				</el-result>
+			</el-card>
+		</el-dialog>
+
+		<!-- 商品详情 -->
+		<el-dialog :title="product.GOODS_NO" :visible.sync="visibleProduct" :width="screenWidth" style="margin-top: -95px;">
+			<el-row :gutter="20">
+				<el-col :xs="24" :sm="12" :lg="12">
+					<el-image style="width: 100%; height: 100%" :style="imageStyle" :src="tool.getArImage(product.COVER, '/files/')"></el-image>
+				</el-col>
+				<el-col :xs="24" :sm="12" :lg="12">
+					<div style="text-align: left; line-height: 50px; font-size: 16px;">
+						<span style="font-weight: bold; font-size: 20px;">{{ product.GOODS_NAME }}</span><br />
+						<span style="font-weight: bold; font-size: 15px;">{{ $t('shop.productCode') }}:{{ product.GOODS_NO }}</span><br />
+						<span style="color: tomato;">{{ $t('shop.productPrice') }}:{{ $t('currency.sign') }} {{ product.SELL_PRICE }}</span><br />
+						<span>{{ $t('shop.productBV') }}:{{ product.PRICE_PV }}</span><br />
+						<span>{{ $t('shop.taxRate') }}:{{ product.TAX_RATE / 100 }}</span><br />
+						<span>{{ $t('shop.taxAmount') }}:{{ $t('currency.sign') }} {{ product.taxAmount }}</span><br />
+						<span>{{ $t('shop.inventory') }}:{{ product.STORE_NUMS }}</span>
+					</div>
+				</el-col>
+			</el-row>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import {createBrandAmbassador, fetchFullInfo, fetchUpgrade} from '@/api/user'
+import waves from '@/directive/waves'
+import {formatAmount, getScreenWidth} from "@/utils"
+import Pagination from '@/components/Pagination'
+import paystack from 'vue-paystack'
+import tool from "@/utils/tool"
+import {deleteApproachOrder} from "@/api/shop"
+import {mapGetters} from "vuex"
+import userInfo from "@/utils/usersInfo"
+import usersInfo from "@/utils/usersInfo";
+
+export default {
+  name: 'upgradeManagement',
+  components: { Pagination, paystack },
+  directives: { waves },
+	filters: {
+		bvFilter(row) {
+			return tool.calculateBV(row.REAL_PV, row.BUY_NUMS)
+		},
+		taxAmountFilter(row) {
+			return tool.calculateTax(row.REAL_PRICE, row.BUY_NUMS)
+		},
+		priceAmountFilter(row) {
+			return tool.formatPrice(row.REAL_PRICE, row.BUY_NUMS)
+		},
+		amountFilter(amount) {
+			return formatAmount(amount)
+		},
+		statusFilter(status) {
+			const statusMap = {
+				Unpaid: 'info',
+				Paid: 'success'
+			}
+			return statusMap[status]
+		}
+	},
+	computed: {
+		...mapGetters([
+			'regionInfo',
+		]),
+		// PayStack混淆串
+		reference() {
+			let text = ''
+			let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
+			for (let i = 0; i < 10; i++) {
+				text += possible.charAt(Math.floor(Math.random() * possible.length))
+			}
+			return text
+		}
+	},
+  data() {
+		return {
+			nowPerf: '',
+			nextPerf: '',
+			decUserName: '',
+			needDiffPv: '',
+			isMax: true,
+			upgradeOption: [],
+			toLevel: '',
+			currentRow: null,
+			decWay: '2',
+			// TODO: 地区需处理
+			regionData: [
+				{
+					id: '10600',
+					address: 'test1',
+				},
+				{
+					id: '10601',
+					address: 'test2',
+				},
+			],
+			form: {
+				address: '',
+				areaSelected:[],
+				consignee: '',
+				upgradeFunc: '',
+				upgradeValue: '',
+				addAt: '',
+				userRealName: '',
+				userDecName: '',
+				remark: '',
+				realName: '',
+				decLv: '',
+				insertUserName: '',
+				decUserName: '',
+				recUserName: '',
+				conUserName: '',
+				insertUserIdCard: '',
+				packageId: '',
+				goodsId:[],
+				goodsNum:[],
+				province: '',
+				// city: '',
+				// county: '',
+				lgaName: '',
+				cityName: '',
+				acceptMobile: '',
+				payType: '',
+			},
+			num: 1,
+			allDecPackage: {},
+			loading: false,
+			submitButtonStat: false,
+			submitButton: false,
+			allGoods: [],
+			multipleSelection: [],
+			goodsNums: [],
+			numList: [],
+			sell_price_sum: 0.00,
+			price_pv_sum: 0.00,
+			payList: [],
+			sn: '',
+			payDialog: false,
+			countdown: 5,
+			visible: false,
+			payStackLoading: false,
+			channels: ['card', 'bank', 'ussd', 'qr'], // eft(南非)  mobile_money(加纳)
+			payForm: {
+				publicKey: process.env.VUE_APP_BASE_PAY_STACK_PUBLIC_KEY,
+				currency: 'NGN',
+				firstname: usersInfo.userName(),
+				lastname: '',
+				email: userInfo.userEmail(),
+				amount: 0, // kobo
+				orderSn: '',
+				metadata: {
+					cart_id: '',
+					custom_fields: [
+						{
+							display_name: 'orderSn',
+							variable_name: 'orderSn',
+							value: this.sn
+						},
+						{
+							display_name: 'orderType',
+							variable_name: 'orderType',
+							value: 'userUpgrade'
+						},
+					]
+				},
+			},
+
+			storeNums: [],
+			tableData: null,
+			payAmount: 0.00,
+
+			addressId: '',
+			selfPickUpAddressId: '100000000000000000',
+			shippingAddressList: [],
+
+			visibleProduct: false,
+			product: {
+				GOODS_NAME: '',
+				GOODS_NO: '',
+				COVER: '',
+				SELL_PRICE: '',
+				PRICE_PV: '',
+				TAX_RATE: '',
+				taxAmount: '',
+			},
+			imageStyle: 'margin-top: -50px;',
+
+			screenWidth: getScreenWidth() > 600 ? '500px' : getScreenWidth() + 'px',
+			labelPosition: getScreenWidth() > 600 ? 'right' : 'top',
+			payStackScreenWidth: getScreenWidth() > 500 ? '450px' : getScreenWidth() + 'px',
+		}
+  },
+  created() {
+			let regionInfo = this.$store.getters.regionInfo
+		// console.log(this.$store.state.region)
+    this.fetchUpgrade()
+  },
+	mounted() {
+	},
+  methods: {
+		fetchUpgrade() {
+			this.loading = true
+			fetchUpgrade().then(response => {
+				this.loading = false
+
+				this.decUserName = response.data.decUserName
+				this.allDecPackage = response.data.allDecPackage
+				this.allGoods = response.data.allGoods
+				let settingObj = this.allDecPackage
+				this.tableData = Object.keys(settingObj).map(key => {
+					return settingObj[key]
+				})
+				let settingObj1 = this.allGoods;
+				for (let i in settingObj1) {
+					this.numList[i] = 1
+					settingObj1[i].goodsNum= 1
+				}
+				this.tableDatas=settingObj1
+
+				// 支付方式
+				this.payList = response.data.sellType[0]['sell_type']
+				// 支付方式的第一项默认选中
+				this.form.payType = Object.values(this.payList)[1]['label']
+
+        setTimeout(() => {
+          this.loading = false
+        }, 0.5 * 1000)
+      })
+    },
+		// 商品详情
+		handleProduct(row) {
+			this.product = row
+			this.product.taxAmount = tool.calculateTax(row.SELL_PRICE, row.TAX_RATE)
+			this.visibleProduct = true
+		},
+		// 选择商品计数
+		handleInputNumber(current, row){
+			let pageList = this.multipleSelection
+			let selectStatus = false
+			for (let i in pageList) {
+				if (pageList[i].ID === row.ID) {
+					pageList[i].goodsNum = current
+					selectStatus = true
+					break
+				}
+			}
+			if (selectStatus) {
+				this.multipleSelection = pageList
+				this.handleSureChange()
+			}
+		},
+		// 统计商品
+		handleSureChange() {
+			if (this.multipleSelection.length > 0) {
+				let accumulatorSellPrice = 0, accumulatorPricePv = 0, accumulatorTax = 0
+				this.multipleSelection.forEach(accumulator => {
+					accumulatorSellPrice += accumulator.SELL_PRICE * accumulator.goodsNum;
+					accumulatorPricePv += Number(accumulator.PRICE_PV) * Number(accumulator.goodsNum);
+					accumulatorTax += tool.calculateTax(Number(accumulator.SELL_PRICE), Number(accumulator.TAX_RATE), Number(accumulator.goodsNum));
+				})
+
+				this.sellPriceSum = tool.formatPrice(accumulatorSellPrice)
+				this.pricePvSum = tool.formatPrice(accumulatorPricePv)
+				this.taxSum = tool.formatPrice(accumulatorTax)
+
+				this.display = true
+			} else {
+				this.sellPriceSum = this.pricePvSum = this.taxSum = 0.00
+				this.display = true
+			}
+		},
+		// 选择商品
+		handleSelectionChange(val) {
+			let idx = -1, num
+			for (let i in this.tableData) {
+				for (let v in val){
+					if (val[v].ID === this.tableData[i].ID) {
+						idx = i
+						num = this.storeNums[idx]
+						val[v]['goodsNum'] = num
+						break
+					}
+				}
+			}
+			this.multipleSelection = val
+			// 计算统计
+			this.handleSureChange()
+		},
+		// 选择收货地址
+		choseAddress (addressId) {
+			this.addressId = addressId
+			// 设置运费
+			this.setFreight()
+			// 计算价格
+			this.getSumMoney()
+		},
+		// 切换支付方式
+		chosePayType(type) {
+			this.payType = type
+		},
+		// 关闭支付回调
+		handleClose() {
+			this.$confirm(this.$t('shop.confirmClose')).then(_ => {
+				deleteApproachOrder({ orderSn: this.form.orderSn }).then(() => {
+					// 关闭支付模态框
+					this.visible = false
+					// 关闭购物车
+					this.visibleShoppingCart = false
+					this.submitButtonStat = false
+				})
+			})
+		},
+		// 支付成功回调
+		processPayment() {
+			// 关闭支付页面
+			this.visible = false
+			this.payStackLoading = false
+			// 显示支付成功模态框
+			this.payDialog = true;
+			// 启动支付成功倒计时
+			this.handleCountdown()
+		},
+		// 倒计时结束跳转
+		handleOrderList () {
+			this.$router.push({path: `/shop/order-list`})
+		},
+		// 启动倒计时
+		handleCountdown () {
+			// 创建定时器
+			setInterval(() => {
+				// 每隔1秒把time的值减一,赋值给span标签
+				this.countdown--
+				if (this.countdown === 0) {
+					// 倒计时结束,跳转到订单列表
+					this.$router.push({path: `/shop/order-list`});
+				}
+			}, 1000)
+		},
+		// 会员查询
+		handleChkRecUser () {
+			this.form.conUserName = ''
+			this.conRealName = '-'
+			this.form.autoPlace = ''
+			if (this.form.recUserName) {
+				this.loading = true
+				fetchFullInfo({ userName: this.form.recUserName }).then(response => {
+					this.recRealName = response.data.REAL_NAME
+					this.loading = false
+				}).catch(() => {
+					this.recRealName = '-'
+					this.loading = false
+				})
+			}
+		},
+		// 返回方式
+		wayChange () {
+			if (this.form.way === 'pickup') {
+				this.areaDisabled = true
+				this.addressDisabled = true
+			} else {
+				this.areaDisabled = false
+				this.addressDisabled = false
+			}
+		},
+		// 创建BA会员
+		onSubmit () {
+			// 已选择商品
+			this.selectProduct()
+			if (this.multipleSelection.length <= 0) {
+				this.$message.error(this.$t('shop.chooseTips'))
+				return false
+			}
+			// 余额
+			let amountBalance = this.userBalance[this.form.payType] || 0
+			// 账户类型提示信息
+			let accountType = this.currency[this.form.payType].name || ''
+			// 余额是否充足
+			if ((this.form.payType === 'cash') && ((amountBalance - this.payAmount) < 0)) {
+				this.$message({
+					message: accountType + this.$t('shop.balanceNotAllow'),
+					type: 'error'
+				})
+				return false
+			}
+
+			this.submitButtonStat = true
+
+			let params = {
+				consignee: this.form.consignee,
+				acceptMobile: this.form.acceptMobile,
+				province: this.form.areaSelected[0] ? this.form.areaSelected[0] : '',
+				city: this.form.areaSelected[1] ? this.form.areaSelected[1] : '',
+				county: this.form.areaSelected[2] ? this.form.areaSelected[2] : '',
+				address: this.form.address,
+				insertUserName: this.form.insertUserName,
+				decLv: this.form.decLv,
+				realName: this.form.realName,
+				decUserName: this.form.decUserName,
+				conUserName: this.form.conUserName,
+				recUserName: this.form.recUserName,
+				insertUserIdCard: this.form.insertUserIdCard,
+				openBank: this.form.openBank,
+				bankAddress: this.form.bankAddress,
+				mobile: this.form.mobile,
+				email: this.form.email,
+				cityName: this.form.cityName,
+				lgaName: this.form.lgaName,
+
+				bankProvince: this.form.bankAreaSelected[0] ? this.form.bankAreaSelected[0] : '',
+				bankCity: this.form.bankAreaSelected[1] ? this.form.bankAreaSelected[1] : '',
+				bankCounty: this.form.bankAreaSelected[2] ? this.form.bankAreaSelected[2] : '',
+
+				bankNo: this.form.bankNo,
+				password: this.form.password,
+				payPassword: this.form.payPassword,
+				packageId: this.form.packageId,
+				goodsId: this.form.goodsId,
+				goodsNum: this.form.goodsNum,
+				location: this.form.location,
+				decWay: this.decWay,
+				payType: this.form.payType
+			}
+			createBrandAmbassador(params).then(response => {
+				if (this.form.payType !== 'pay_stack') {
+					// 余额支付
+					this.$message({
+						message: this.$t('common.successfully'),
+						type: 'success'
+					})
+					this.submitButtonStat = false
+					this.$router.push({path: `/shop/ba-dec-order-list`})
+				} else {
+					// PayStack支付
+					this.submitButtonStat = false
+					this.payForm.orderSn = response.data.SN
+					this.payForm.amount = response.data.ORDER_AMOUNT
+					this.payForm.metadata.custom_fields[0].value = response.data.SN
+					this.visible = true
+				}
+			})
+		},
+		// 已选择商品
+		selectProduct() {
+			this.payAmount = 0
+			this.form.goodsId = []
+			this.form.goodsNum = []
+			this.multipleSelection.map((item) => {
+				this.form.goodsId.push(item.ID)
+				this.form.goodsNum.push(item.goodsNum)
+				this.payAmount += item.goodsNum * item.SELL_PRICE
+			})
+		},
+  }
+}
+</script>
+
+<style>
+.el-table th.el-table__cell > .cell {
+	white-space: nowrap;
+}
+
+.el-table td.el-table__cell > .cell {
+	word-break: keep-all;
+	white-space: pre-wrap;
+}
+</style>