chenrui před 3 roky
rodič
revize
84f8f94e62

+ 16 - 2
api/sales.js

@@ -92,7 +92,22 @@ export const salesDetailDel = (params) => {
     method: 'get'
   })
 }
-
+//  销售详情 新增配件
+export const salesDetailInsert = (params) => {
+  return axios.request({
+    url: 'salesDetail/insert',
+    data: params,
+    method: 'post'
+  })
+}
+//  销售详情 编辑已选产品信息
+export const salesDetailUpdate = (params) => {
+  return axios.request({
+    url: 'salesDetail/update',
+    data: params,
+    method: 'post'
+  })
+}
 // 销售单新增
 export const salesSave = (params) => {
   const url = 'sales/save'
@@ -102,7 +117,6 @@ export const salesSave = (params) => {
     method: 'post'
   })
 }
-
 //  仓库列表  无分页
 export const warehouseAllList = (params) => {
   const url = 'warehouse/queryList'

+ 9 - 0
api/stock.js

@@ -51,4 +51,13 @@ export const querySumByProductLocation = (params) => {
     data: params,
     method: 'post'
   })
+}
+//  出入库明细  列表  合计
+export const stockByProductSn = (params) => {
+  const url = `stock/findByProductSn/${params.productSn}`
+  return axios.request({
+    url: url,
+    data: params,
+    method: 'post'
+  })
 }

+ 181 - 53
pages/sales/chooseProduct.vue

@@ -1,11 +1,5 @@
 <template>
 	<view class="chooseProduct-wrap">
-		<!-- 标题 -->
-		<u-navbar title="选择产品" :safeAreaInsetTop="false" :border-bottom="true">
-			<view class="u-nav-slot" slot="right" style="padding-right: 40rpx;">
-				<u-icon name="search" color="#999" size="28" @click="openModal=true"></u-icon>查询
-			</view>
-		</u-navbar>
 		<!-- 产品列表 -->
 		<view class="product-list-box">
 			<scroll-view class="product-list-con" :style="{height: scrollH+'upx'}" scroll-y @scrolltolower="onreachBottom">
@@ -14,19 +8,30 @@
 						<view class="item-tit ellipsis-one" :style="{borderColor: $config('primaryColor')}">{{item.productName}}</view>
 					</view>
 					<view class="list-item-con flex align_center justify_between">
-						<view class="pimgs">
-							<u-image :src="item.productMainPic&&item.productMainPic.imageUrl?item.productMainPic.imageUrl:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
-						</view>
-						<view class="flex_1">
-							<view>产品编码:{{item.productCode || '--'}}</view>
-							<view class="padding_3 flex align_center justify_between">
-								<view>原厂编码:{{item.productOrigCode || '--'}}</view>
-								<u-icon name="plus-circle" :color="$config('primaryColor')" size="40" class="close-circle" @click="handleAdd(item, 'add')"></u-icon>
+						<view class="flex align_center justify_between flex_1">
+							<view class="pimgs">
+								<u-image :src="item.productMainImage?item.productMainImage:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
+							</view>
+							<view class="flex_1">
+								<view>产品编码:{{item.productCode || '--'}}</view>
+								<view class="padding_3">原厂编码:{{item.productOrigCode || '--'}}</view>
+								<view v-if="item.warehouseName || item.warehouseLocationName">仓库仓位:{{item.warehouseName}} > {{item.warehouseLocationName}}</view>
 							</view>
-							<view v-if="item.warehouseName || item.warehouseLocationName">仓库仓位:{{item.warehouseName}} > {{item.warehouseLocationName}}</view>
+						</view>
+						<view class="list-item-btn">
+							<u-icon class="item-btn-add" v-if="!item.saleQty" name="plus-circle" :color="$config('primaryColor')" size="40" @click="handleAdd(item, 'add')"></u-icon>
+							<u-tag v-else text="已添加" type="info" mode="light" shape="circle" size="mini" style="vertical-align: text-top;" />
 						</view>
 					</view>
 					<view class="list-item-footer flex align_center justify_between">
+						<view class="footer-item" v-if="searchParams && searchParams.cost">
+							<view>{{toThousands(item.putCost||0, 2)}}</view>
+							<view class="color_6">成本价</view>
+						</view>
+						<view class="footer-item" v-if="searchParams && searchParams.cityPrice">
+							<view>{{toThousands(item.dealerProduct && item.dealerProduct.cityPrice || 0, 2)}}</view>
+							<view class="color_6">市级价</view>
+						</view>
 						<view class="footer-item">
 							<view>{{toThousands(item.currentQty||0)}}{{item.unit}}</view>
 							<view class="color_6">库存数量</view>
@@ -56,11 +61,11 @@
 		<!-- 查询右侧弹框 -->
 		<productSearch :openModal="openModal" :defaultParams="searchParams" @refresh="refresh" @close="openModal=false" />
 		<!-- 添加/编辑产品 -->
-		<productModal :openModal="openProductModal" :infoData="productData" @confirm="productConfirm" @close="openProductModal=false" />
+		<productModal :openModal="openProductModal" :infoData="productInfo" @confirm="productConfirm" @close="openProductModal=false" />
 		<!-- 已选产品 -->
-		<selectedProductsModal :openModal="openSelectedModal" :nowData="detailData" @confirm="handleChoose" @refreshTotal="selectedProductTotal" @close="openSelectedModal=false" />
+		<selectedProductsModal ref="selectedProducts" :openModal="openSelectedModal" :nowData="detailData" @edit="handleEdit" @confirm="handleChoose" @refreshTotal="selectedProductTotal" @close="openSelectedModal=false" />
 		<!-- 弹框 -->
-		<common-modal :openModal="commonModal" :content="modalText" @confirm="handleCommon" @close="commonModal=false" />
+		<common-modal :openModal="commonModal" :content="modalText" @confirm="handleCommon" @cancel="handleCancel" @close="commonModal=false" />
 	</view>
 </template>
 
@@ -70,8 +75,8 @@
 	import SelectedProductsModal from './selectedProductsModal.vue'
 	import commonModal from '@/pages/common/commonModal.vue'
 	import { toThousands } from '@/libs/tools'
-	import { querySumByProductLocation } from '@/api/stock'
-	import { salesDetail, supperCodeByVin } from '@/api/sales'
+	import { querySumByProductLocation, stockByProductSn } from '@/api/stock'
+	import { salesDetail, supperCodeByVin, salesDetailInsert, salesDetailUpdate } from '@/api/sales'
 	export default{
 		components: { ProductSearch, ProductModal, SelectedProductsModal, commonModal },
 		data(){
@@ -82,19 +87,21 @@
 				pageSize: 6,
 				totalNum: 0,
 				noDataText: '暂无数据',
-				searchParams: {},
+				searchParams: null,
 				openModal: false,
 				theme: '',
 				salesInfo: null,  // 销售单信息
 				scrollH: 0,
 				openProductModal: false,  // 编辑产品信息弹框是否显示
 				productData: null,  // 当前操作的产品信息
+				productInfo: null,  // 添加/编辑产品需要的参数
 				chooseType: 'add',  // 添加产品add,编辑产品edit
 				commonModal: false,  // 公共弹框是否显示
 				modalText: '',  // 公共弹框提示语
-				commonType: 1,  // 公共弹框类型  1为添加产品时库存不足,2为编辑产品时库存不足,
+				commonType: 1,  // 公共弹框类型  1为添加产品时库存不足,2为编辑产品时库存不足,3为售价低于定价,4为售价低于成本价
 				openSelectedModal: false,  // 已选产品弹框是否显示
-				detailData: null  // 销售单详情数据
+				detailData: null,  // 销售单详情数据
+				editInfo: null,  // 添加/编辑 提交的值
 			}
 		},
 		onNavigationBarButtonTap(e){  // 标题栏 按钮操作
@@ -149,10 +156,15 @@
 					pageSize: this.pageSize
 				}
 				let searchParams = JSON.parse(JSON.stringify(this.searchParams))
-				searchParams.brandName = undefined
-				searchParams.nowData = undefined
-				searchParams.warehouseName = undefined
-				querySumByProductLocation(Object.assign(params, searchParams, { customerSn: this.salesInfo.buyerSn })).then(res => {
+				console.log(searchParams)
+				if(searchParams){
+					searchParams.brandName = undefined
+					searchParams.nowData = undefined
+					searchParams.warehouseName = undefined
+					searchParams.cost = undefined
+					searchParams.cityPrice = undefined
+				}
+				querySumByProductLocation(Object.assign(params, searchParams, { customerSn: this.salesInfo.buyerSn, salePriceType: this.salesInfo.priceType, salesBillSn: this.salesInfo.salesBillSn })).then(res => {
 					if (res.status == 200) {
 						if(res.data && res.data.list){
 							res.data.list.map(item => {
@@ -183,10 +195,39 @@
 			},
 			// 添加/编辑产品
 			handleAdd(data, type){
+				console.log(data)
+				if(type == 'add'){
+					this.productInfo = {
+						productName: data.productName,
+						productMainImage: data.productMainImage,
+						productCode: data.productCode,
+						productOrigCode: data.productOrigCode,
+						warehouseName: data.warehouseName,
+						warehouseLocationName: data.warehouseLocationName,
+						price: data.price,
+						qty: 1
+					}
+				}else if(type == 'edit'){
+					this.productInfo = {
+						productName: data.productName,
+						productMainImage: data.productMainImage,
+						productCode: data.productCode,
+						productOrigCode: data.productOrigCode,
+						warehouseName: data.warehouseEntity && data.warehouseEntity.name,
+						warehouseLocationName: data.warehouseLocationEntity && data.warehouseLocationEntity.name,
+						price: data.price,
+						qty: data.qty
+					}
+				}
 				this.openProductModal = true
 				this.chooseType = type
 				this.productData = data
 			},
+			// 已选产品  编辑
+			handleEdit(data){
+				console.log(data)
+				this.handleAdd(data, 'edit')
+			},
 			// 选好了
 			handleChoose(){
 				uni.redirectTo({ url: '/pages/sales/edit?pageType=edit&data='+JSON.stringify(this.detailData) })
@@ -197,43 +238,125 @@
 			},
 			// 确认产品信息
 			productConfirm(data){
-				console.log('form',data)
-				console.log('info',this.productData)
-				if (this.productData.lastSalePrice && (this.productData.price < this.productData.salePrice)) {  // 售价低于定价
-					
-				}
+				this.editInfo = data
 				if(this.chooseType == 'add'){
-					// 库存不足时
-					if (this.productData.currentQty < data.qty) {
-						this.commonType = 1
-						this.modalText = '库存不足,将产生急件,确认要添加吗?'
-						this.commonModal = true
-					}else{
-						
-					}
+					this.validatePrice()  //验证  售价是否低于定价
 				}else if(this.chooseType == 'edit'){
-					// 库存不足时
-					if (this.productData.currentQty < this.productData.salesNums) {
+					this.validateStock()  //验证  库存是否不足
+				}
+			},
+			// 售价低于定价
+			validatePrice(){
+				if (this.productData.lastSalePrice && (this.editInfo.price < this.productData.salePrice)) {  // 售价低于定价
+					this.commonType = 1
+					this.modalText = '售价低于定价,确认要添加吗?'
+					this.commonModal = true
+				}else{
+					this.validateStock()  //验证  库存是否不足
+				}
+			},
+			// 库存不足
+			validateStock(){
+				if(this.chooseType == 'add'){  // 添加产品
+					if (this.productData.currentQty < this.editInfo.qty) {
 						this.commonType = 2
-						this.modalText = '库存不足,将产生急件,确认修改吗?'
+						this.modalText = '库存不足,将产生急件,确认要添加吗?'
 						this.commonModal = true
 					}else{
-						
+						this.validateCost()  //验证  售价是否低于成本价
 					}
+				}else if(this.chooseType == 'edit'){  // 编辑产品
+					//  校验库存
+					stockByProductSn({ productSn: this.productData.productSn }).then(res => {
+						if (res.status == 200) {
+							console.log(!res.data.currentStockQty, this.editInfo.qty <= res.data.currentStockQty)
+							console.log(!res.data.currentStockQty || this.editInfo.qty <= res.data.currentStockQty)
+							if (res.data && (!res.data.currentStockQty || this.editInfo.qty <= res.data.currentStockQty)) {
+								this.editProduct()
+							} else {  // 库存不足
+								this.commonType = 3
+								this.modalText = '库存不足,将产生急件,确认修改吗?'
+								this.commonModal = true
+							}
+						}
+					})
 				}
-				// this.openProductModal = false
 			},
-			addProduct(data){
-				
+			// 售价低于成本价
+			validateCost(){
+				if (this.productData.putCost > this.editInfo.price) {
+					this.commonType = 4
+					this.modalText = '售价低于成本价,确认要添加吗?'
+					this.commonModal = true
+				}else{
+					this.addProduct()
+				}
 			},
-			// 公共弹框
+			// 添加产品
+			addProduct(){
+				let params = {
+					buyerSn: this.detailData.buyerSn,
+					productSn: this.productData.productSn,
+					cost: this.productData.putCost,
+					price: this.editInfo.price,
+					qty: this.editInfo.qty,
+					salesBillSn: this.detailData.salesBillSn,
+					salesBillNo: this.detailData.salesBillNo,
+					warehouseSn: this.productData.warehouseSn,
+					warehouseLocationSn: this.productData.warehouseLocationSn,
+					stockSn: this.productData.stockSn
+				}
+				salesDetailInsert(params).then(res => {
+					if(res.status == 200){
+						this.changeList(params)  // 变更  列表产品可选状态
+						this.selectedProductTotal()  // 已选产品合计
+						this.commonModal = false
+						this.openProductModal = false
+					}
+				})
+			},
+			// 编辑产品
+			editProduct(){
+				let params = {
+					id: this.productData.id,
+					qty: this.editInfo.qty,
+					price: this.editInfo.price,
+					productSn: this.productData.productSn,
+					salesBillSn: this.detailData.salesBillSn,
+				}
+				salesDetailUpdate(params).then(res => {
+					if(res.status == 200){
+						this.$refs.selectedProducts.getList(1)
+						this.selectedProductTotal()  // 已选产品合计
+						this.commonModal = false
+						this.openProductModal = false
+					}
+				})
+			},
+			// 更改产品列表参数
+			changeList(params){
+				this.listData.map(item => {
+					if((item.stockSn == params.stockSn) && (item.warehouseLocationSn == params.warehouseLocationSn)){
+						item.saleQty = 1  // 非0即可,用于判断是否显示添加产品按钮
+					}
+				})
+			},
+			// 公共弹框  确定
 			handleCommon(){
-				if(this.commonType == 1){  // 添加产品时库存不足
-					
-				}else if(this.commonType == 2){  // 编辑产品时库存不足
-					
+				if(this.commonType == 1){  // 添加产品时售价低于定价
+					this.validateStock()  //验证  库存是否不足
+				}else if(this.commonType == 2){  // 添加产品时库存不足
+					this.validateCost()  //验证  售价是否低于成本价
+				}else if(this.commonType == 3){  // 编辑产品时库存不足
+					this.editProduct()
+				}else if(this.commonType == 4){  // 添加产品时售价低于成本价
+					this.addProduct()
 				}
 			},
+			// 公共弹框  取消
+			handleCancel(){
+				this.openProductModal = false
+			},
 			// 已选产品  提交
 			selectedConfirm(){},
 			// 已选产品合计
@@ -282,11 +405,16 @@
 						}
 					}
 					.list-item-con{
-						padding: 14upx 14upx 16upx;
+						padding: 14upx 0 16upx;
 						font-size: 26upx;
 						.pimgs{
 							margin-right: 16upx;
 						}
+						.list-item-btn{
+							.item-btn-add{
+								padding: 30upx 30upx;
+							}
+						}
 					}
 					.list-item-footer{
 						border-top: 1px solid #e4e7ed;

+ 2 - 2
pages/sales/edit.vue

@@ -51,7 +51,7 @@
 				<scroll-view class="sales-list-con" :style="{height: scrollH+'upx'}" scroll-y @scrolltolower="onreachBottom">
 					<view class="sales-list-item border-b font_13 flex justify_between" v-for="(item, index) in listData" :key="item.id">
 						<view class="pimgs">
-							<u-image :src="item.productMainMsg?item.productMainMsg:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
+							<u-image :src="item.productMainImage?item.productMainImage:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
 							<view v-if="item.oosFlag == 1" class="sign" :style="{backgroundColor: $config('errorColor')}">急</view>
 							<view v-if="item.price < item.cost" class="sign" :style="{backgroundColor: $config('errorColor')}">亏</view>
 							<view v-if="item.price == 0" class="sign" :style="{backgroundColor: $config('errorColor')}">赠</view>
@@ -247,7 +247,7 @@
 					if (res.status == 200) {
 						if(this.dataInfo){  // 删除产品
 							this.toashMsg(res.message)
-							this.getList(1)
+							this.init()
 						}else{  // 整单删除
 							this.toashMsg(res.message)
 							uni.$emit('refreshBL')

+ 6 - 2
pages/sales/productModal.vue

@@ -7,7 +7,7 @@
 				</view>
 				<view class="list-item-con flex align_center justify_between">
 					<view class="pimgs">
-						<u-image :src="infoData && infoData.productMainPic && infoData.productMainPic.imageUrl?infoData.productMainPic.imageUrl:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
+						<u-image :src="infoData && infoData.productMainImage?infoData.productMainImage:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
 					</view>
 					<view class="flex_1">
 						<view>产品编码:{{infoData && infoData.productCode || '--'}}</view>
@@ -58,7 +58,7 @@
 					qty: 1,
 				},
 				rules: {
-					price: [ { required: true, message: '请输入销售单价', trigger: ['change','blur'] } ],
+					price: [ { required: true, type: 'number', message: '请输入销售单价', trigger: ['change','blur'] } ],
 					qty: [ { required: true, type: 'number', message: '请输入销售数量', trigger: 'blur' } ]
 				},
 			}
@@ -70,6 +70,7 @@
 		methods: {
 			// 确认
 			handleConfirm(){
+				console.log(this.form)
 				this.$refs.uForm.validate(valid => {
 					if (valid) {
 						console.log('验证通过')
@@ -110,6 +111,9 @@
 			isShow (newValue, oldValue) {
 				if (!newValue) {
 					this.$emit('close')
+				}else{
+					this.form.price = this.infoData && this.infoData.price || null
+					this.form.qty = this.infoData && this.infoData.qty || 1
 				}
 			}
 		}

+ 16 - 16
pages/sales/productSearch.vue

@@ -65,7 +65,7 @@
 			defaultParams: {  //  默认查询条件
 				type: Object,
 				default: () => {
-					return {}
+					return null
 				}
 			}
 		},
@@ -120,19 +120,19 @@
 			//  初始化数据
 			init(){
 				console.log(this.defaultParams)
-				this.form.vinCode = this.defaultParams.vinCode || ''
-				this.form.productCode = this.defaultParams.productCode || ''
-				this.form.productName = this.defaultParams.productName || ''
-				this.form.productOrigCode = this.defaultParams.productOrigCode || ''
-				this.form.productBrandSn = this.defaultParams.productBrandSn || undefined
-				this.form.productTypeSn1 = this.defaultParams.productTypeSn1 || undefined
-				this.form.productTypeSn2 = this.defaultParams.productTypeSn2 || undefined
-				this.form.productTypeSn3 = this.defaultParams.productTypeSn3 || undefined
-				this.form.warehouseSn = this.defaultParams.warehouseSn || undefined
-				this.form.cost = this.defaultParams.cost || false
-				this.form.cityPrice = this.defaultParams.cityPrice || false
-				this.brandName = this.defaultParams.brandName || ''
-				if(this.defaultParams.nowData){
+				this.form.vinCode = this.defaultParams && this.defaultParams.vinCode || ''
+				this.form.productCode = this.defaultParams && this.defaultParams.productCode || ''
+				this.form.productName = this.defaultParams && this.defaultParams.productName || ''
+				this.form.productOrigCode = this.defaultParams && this.defaultParams.productOrigCode || ''
+				this.form.productBrandSn = this.defaultParams && this.defaultParams.productBrandSn || undefined
+				this.form.productTypeSn1 = this.defaultParams && this.defaultParams.productTypeSn1 || undefined
+				this.form.productTypeSn2 = this.defaultParams && this.defaultParams.productTypeSn2 || undefined
+				this.form.productTypeSn3 = this.defaultParams && this.defaultParams.productTypeSn3 || undefined
+				this.form.warehouseSn = this.defaultParams && this.defaultParams.warehouseSn || undefined
+				this.form.cost = this.defaultParams && this.defaultParams.cost || false
+				this.form.cityPrice = this.defaultParams && this.defaultParams.cityPrice || false
+				this.brandName = this.defaultParams && this.defaultParams.brandName || ''
+				if(this.defaultParams && this.defaultParams.nowData){
 					this.nowData = this.defaultParams.nowData
 				}else{
 					this.nowData = {
@@ -141,7 +141,7 @@
 						nowInd: 0
 					}
 				}
-				this.warehouseName = this.defaultParams.warehouseName || ''
+				this.warehouseName = this.defaultParams && this.defaultParams.warehouseName || ''
 			},
 			// 查询
 			handleSearch() {
@@ -223,7 +223,7 @@
 					if(res.status == 200 && res.data){
 						this.warehouseList = res.data
 						// 仓库有值时,匹配对应name
-						if(this.defaultParams.warehouseSn || this.defaultParams.warehouseSn==0){
+						if(this.defaultParams && (this.defaultParams.warehouseSn || this.defaultParams.warehouseSn==0)){
 							this.warehouseList.map(item => {
 								if(item.warehouseSn == this.defaultParams.warehouseSn){
 									this.warehouseName = item.name

+ 14 - 15
pages/sales/selectedProductsModal.vue

@@ -4,13 +4,13 @@
 			<!-- 已选产品 -->
 			<scroll-view class="product-list-con" scroll-y @scrolltolower="onreachBottom">
 				<view class="product-list-item flex align_center justify_between" v-for="(item, index) in listData" :key="item.id">
-					<view class="product-item-main font_13 flex_1">
+					<view class="product-item-main font_13 flex_1" @click="handleEdit(item)">
 						<view class="flex align_center justify_between">
 							<view>{{item.productCode || '--'}}</view>
 							<view class="color_6" style="font-size: 24upx;" v-if="item.warehouseEntity&&item.warehouseEntity.name || item.warehouseLocationEntity&&item.warehouseLocationEntity.name">{{item.warehouseEntity&&item.warehouseEntity.name}} > {{item.warehouseLocationEntity&&item.warehouseLocationEntity.name}}</view>
 							<u-tag v-if="item.oosFlag==1" text="急件" type="error" mode="light" shape="circle" size="mini" style="vertical-align: text-top;" />
 						</view>
-						<view class="product-item-name ellipsis-one">{{item.productName || '--'}}</view>
+						<view class="product-item-name">{{item.productName || '--'}}</view>
 						<view class="product-item-priceInfo">
 							<view :style="{color: $config('errorColor'), display: 'inline-block'}">¥<text style="font-size: 30upx;">{{toThousands(item.price||0, 2)}}</text></view>
 							<text style="display: inline-block;margin: 0 10upx;">*</text> 
@@ -79,8 +79,6 @@
 		methods: {
 			// 列表
 			getList(pageNo){
-				console.log(this.nowData,'++')
-				console.log(this.nowData.salesBillSn,'--++')
 				const _this = this
 				if (pageNo) {
 					this.pageNo = pageNo
@@ -121,6 +119,10 @@
 					this.getList()
 				}
 			},
+			// 编辑产品
+			handleEdit(data){
+				this.$emit('edit', data)
+			},
 			// 已选产品  删除
 			handleDel(data, ind){
 				this.infoData = data
@@ -162,17 +164,8 @@
 				if (!newValue) {
 					this.$emit('close')
 				}else{
-					this.getList()  // 已选产品列表
+					this.getList(1)  // 已选产品列表
 				}
-			},
-			nowData: {
-				handler (newValue, oldValue) {
-					console.log(newValue,'---nowData')
-					if (this.isShow && newValue) {
-						
-					}
-				},
-				deep: true
 			}
 		}
 	}
@@ -190,10 +183,16 @@
 				.product-item-main{
 					.product-item-name{
 						padding: 6upx 0;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						-webkit-line-clamp: 1;
+						line-clamp: 1;
+						-webkit-box-orient: vertical;
 					}
 				}
 				.btn-box{
-					padding: 0 30upx;
+					padding: 30upx 30upx;
 				}
 			}
 			.product-list-item:last-child{