update 订单

This commit is contained in:
qijq 2025-08-05 11:56:55 +08:00
parent 2cea3d2187
commit 9d9745e6c2
14 changed files with 2802 additions and 1886 deletions

View File

@ -72,7 +72,7 @@ export function GetSalesReturnOrderDetails(params) {
}
/**
* 退货订单不通过
* 退货订单拒绝退款
* @author Seven
* @data 2025-3-28
* @param {
@ -93,7 +93,7 @@ export function GetSalesReturnOrderNoPass(params) {
}
/**
* 退货订单不通过
* 退货订单同意退款
* @author Seven
* @data 2025-3-28
* @param {
@ -124,6 +124,26 @@ export function GetInitiativeOrderRefund(params) {
});
}
/**
* 催单
* @author Seven
* @data 2025-3-28
* @param {
* order_id : "DD-20241206-13"
* }
* @returns { }
* @see https://mall.gpxscs.cn/api/admin/shop/shop-order-info/picking/completed
*/
export function GetExpediteSFOrder(params) {
return http({
url: "/shop/sf-express/reminder-order",
method: "post",
params,
baseURL: config.apiMobile,
});
}
/**
* 拣货完成
* @author Seven

View File

@ -1,346 +1,382 @@
<template>
<view class="tui-tabs-view"
:class="[isFixed ? 'tui-tabs-fixed' : 'tui-tabs-relative', unlined ? 'tui-unlined' : '']" :style="{
width: tabsWidth + 'px',
height: height + 'rpx',
padding: `0 ${padding}rpx`,
background: backgroundColor,
top: isFixed ? top + 'px' : 'auto',
zIndex: isFixed ? zIndex : 'auto'
}" v-if="tabsWidth>0">
<view v-for="(item, index) in tabs" :key="index" :class="['tui-tabs-item', { 'tui__tab_current': currentTab==index}]"
:style="{ width: getItemWidth,height: height + 'rpx' }" @tap.stop="swichTabs(index)">
<view class="tui-tabs-title" :class="{'tui-tabs-disabled': item.disabled }" :style="{
color: currentTab == index ? getSelectedColor : color,
fontSize: size + 'rpx',
fontWeight: bold && currentTab == index ? 'bold' : 'normal',transform:`scale(${currentTab == index?scale:1})`
}">
{{ item[field] }}
<view :class="[item.isDot ? 'tui-badge__dot' : 'tui-tabs__badge']"
:style="{ color: badgeColor, backgroundColor: getBadgeBgColor }"
v-if="item[badgeField] || item.isDot">
{{ item.isDot ? '' : item[badgeField] }}
</view>
</view>
</view>
<view v-if="isSlider" class="tui-tabs-slider" :style="{
transform: 'translateX(' + scrollLeft + 'px)',
width: sliderWidth + 'rpx',
height: sliderHeight + 'rpx',
borderRadius: sliderRadius,
bottom: bottom,
background: getSliderBgColor,
marginBottom: bottom == '50%' ? '-' + sliderHeight / 2 + 'rpx' : 0
}"></view>
</view>
<view
class="tui-tabs-view"
:class="[
isFixed ? 'tui-tabs-fixed' : 'tui-tabs-relative',
unlined ? 'tui-unlined' : '',
]"
:style="{
width: tabsWidth + 'px',
height: height + 'rpx',
padding: `0 ${padding}rpx`,
background: backgroundColor,
top: isFixed ? top + 'px' : 'auto',
zIndex: isFixed ? zIndex : 'auto',
}"
v-if="tabsWidth > 0"
>
<view
v-for="(item, index) in tabs"
:key="index"
:class="['tui-tabs-item', { tui__tab_current: currentTab == index }]"
:style="{ width: getItemWidth, height: height + 'rpx' }"
@tap.stop="swichTabs(index)"
>
<view
class="tui-tabs-title"
:class="{ 'tui-tabs-disabled': item.disabled }"
:style="{
color: currentTab == index ? getSelectedColor : color,
fontSize: size + 'rpx',
fontWeight: bold && currentTab == index ? 'bold' : 'normal',
transform: `scale(${currentTab == index ? scale : 1})`,
}"
>
{{ item[field] }}
<view
:class="[item.isDot ? 'tui-badge__dot' : 'tui-tabs__badge']"
:style="{ color: badgeColor, backgroundColor: getBadgeBgColor }"
v-if="item[badgeField] || item.isDot"
>
{{ item.isDot ? "" : item[badgeField] }}
</view>
</view>
</view>
<view
v-if="isSlider"
class="tui-tabs-slider"
:style="{
transform: 'translateX(' + scrollLeft + 'px)',
width: sliderWidth + 'rpx',
height: sliderHeight + 'rpx',
borderRadius: sliderRadius,
bottom: bottom,
background: getSliderBgColor,
marginBottom: bottom == '50%' ? '-' + sliderHeight / 2 + 'rpx' : 0,
}"
></view>
</view>
</template>
<script>
export default {
name: 'tuiTabs',
emits: ['change'],
props: {
//
tabs: {
type: Array,
default () {
return [];
}
},
//
field: {
type: String,
default: 'name'
},
badgeField: {
type: String,
default: 'num'
},
//tabs使windowWidthpx
width: {
type: [Number, String],
default: 0
},
//rpx
height: {
type: Number,
default: 80
},
//rpx padding0
padding: {
type: Number,
default: 30
},
//
backgroundColor: {
type: String,
default: '#FFFFFF'
},
//
isFixed: {
type: Boolean,
default: false
},
//px
top: {
type: Number,
// #ifndef H5
default: 0,
// #endif
// #ifdef H5
default: 44
// #endif
},
//线
unlined: {
type: Boolean,
default: false
},
//
currentTab: {
type: Number,
default: 0
},
isSlider: {
type: Boolean,
default: true
},
//
sliderWidth: {
type: Number,
default: 68
},
//
sliderHeight: {
type: Number,
default: 6
},
//
sliderBgColor: {
type: String,
default: ''
},
sliderRadius: {
type: String,
default: '50rpx'
},
//bottom
bottom: {
type: String,
default: '0'
},
//
itemWidth: {
type: String,
default: ''
},
//
color: {
type: String,
default: '#666'
},
//
selectedColor: {
type: String,
default: ''
},
//
size: {
type: Number,
default: 28
},
//
bold: {
type: Boolean,
default: false
},
//2.3.0+
scale: {
type: [Number, String],
default: 1
},
//
badgeColor: {
type: String,
default: '#fff'
},
//
badgeBgColor: {
type: String,
default: ''
},
zIndex: {
type: [Number, String],
default: 996
}
},
watch: {
currentTab() {
this.checkCor();
},
tabs() {
this.checkCor();
},
width(val) {
this.tabsWidth = val;
this.checkCor();
}
},
computed: {
getItemWidth() {
let width = 100 / (this.tabs.length || 4) + '%'
return this.itemWidth ? this.itemWidth : width
},
getSliderBgColor() {
return this.sliderBgColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
},
getSelectedColor() {
return this.selectedColor || (uni && uni.$tui && uni.$tui.color.primary) || '#5677fc';
},
getBadgeBgColor() {
return this.badgeBgColor || (uni && uni.$tui && uni.$tui.color.pink) || '#f74d54';
}
},
created() {
//
setTimeout(() => {
uni.getSystemInfo({
success: res => {
this.winWidth = res.windowWidth;
this.tabsWidth = this.width == 0 ? this.winWidth : Number(this.width);
this.checkCor();
}
});
}, 0);
},
data() {
return {
winWidth: 0,
tabsWidth: 0,
scrollLeft: 0
};
},
methods: {
checkCor: function() {
let tabsNum = this.tabs.length;
let padding = uni.upx2px(Number(this.padding));
let width = this.tabsWidth - padding * 2;
let left = (width / tabsNum - uni.upx2px(Number(this.sliderWidth))) / 2 + padding;
let scrollLeft = left;
if (this.currentTab > 0) {
scrollLeft = scrollLeft + (width / tabsNum) * this.currentTab;
}
this.scrollLeft = scrollLeft;
},
//
swichTabs: function(index) {
let item = this.tabs[index];
if (item && item.disabled) return;
if (this.currentTab == index) {
return false;
} else {
this.$emit('change', {
index: Number(index),
item: item
});
}
}
}
};
export default {
name: "tuiTabs",
emits: ["change"],
props: {
//
tabs: {
type: Array,
default() {
return [];
},
},
//
field: {
type: String,
default: "name",
},
badgeField: {
type: String,
default: "num",
},
//tabs使windowWidthpx
width: {
type: [Number, String],
default: 0,
},
//rpx
height: {
type: Number,
default: 80,
},
//rpx padding0
padding: {
type: Number,
default: 30,
},
//
backgroundColor: {
type: String,
default: "#FFFFFF",
},
//
isFixed: {
type: Boolean,
default: false,
},
//px
top: {
type: Number,
// #ifndef H5
default: 0,
// #endif
// #ifdef H5
default: 44,
// #endif
},
//线
unlined: {
type: Boolean,
default: false,
},
//
currentTab: {
type: Number,
default: 0,
},
isSlider: {
type: Boolean,
default: true,
},
//
sliderWidth: {
type: Number,
default: 68,
},
//
sliderHeight: {
type: Number,
default: 6,
},
//
sliderBgColor: {
type: String,
default: "",
},
sliderRadius: {
type: String,
default: "50rpx",
},
//bottom
bottom: {
type: String,
default: "0",
},
//
itemWidth: {
type: String,
default: "",
},
//
color: {
type: String,
default: "#666",
},
//
selectedColor: {
type: String,
default: "",
},
//
size: {
type: Number,
default: 28,
},
//
bold: {
type: Boolean,
default: false,
},
//2.3.0+
scale: {
type: [Number, String],
default: 1,
},
//
badgeColor: {
type: String,
default: "#fff",
},
//
badgeBgColor: {
type: String,
default: "",
},
zIndex: {
type: [Number, String],
default: 996,
},
},
watch: {
currentTab() {
this.checkCor();
},
tabs() {
this.checkCor();
},
width(val) {
this.tabsWidth = val;
this.checkCor();
},
},
computed: {
getItemWidth() {
let width = 100 / (this.tabs.length || 4) + "%";
return this.itemWidth ? this.itemWidth : width;
},
getSliderBgColor() {
return (
this.sliderBgColor ||
(uni && uni.$tui && uni.$tui.color.primary) ||
"#5677fc"
);
},
getSelectedColor() {
return (
this.selectedColor ||
(uni && uni.$tui && uni.$tui.color.primary) ||
"#5677fc"
);
},
getBadgeBgColor() {
return (
this.badgeBgColor ||
(uni && uni.$tui && uni.$tui.color.pink) ||
"#f74d54"
);
},
},
created() {
//
setTimeout(() => {
uni.getSystemInfo({
success: (res) => {
this.winWidth = res.windowWidth;
this.tabsWidth = this.width == 0 ? this.winWidth : Number(this.width);
this.checkCor();
},
});
}, 0);
},
data() {
return {
winWidth: 0,
tabsWidth: 0,
scrollLeft: 0,
};
},
methods: {
checkCor: function () {
let tabsNum = this.tabs.length;
let padding = uni.upx2px(Number(this.padding));
let width = this.tabsWidth - padding * 2;
let left =
(width / tabsNum - uni.upx2px(Number(this.sliderWidth))) / 2 + padding;
let scrollLeft = left;
if (this.currentTab > 0) {
scrollLeft = scrollLeft + (width / tabsNum) * this.currentTab;
}
this.scrollLeft = scrollLeft;
},
//
swichTabs: function (index) {
let item = this.tabs[index];
if (item && item.disabled) return;
if (this.currentTab == index) {
return false;
} else {
this.$emit("change", {
index: Number(index),
item: item,
});
}
},
},
};
</script>
<style scoped>
.tui-tabs-view {
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
}
.tui-tabs-view {
width: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
}
.tui-tabs-relative {
position: relative;
}
.tui-tabs-relative {
position: relative;
}
.tui-tabs-fixed {
position: fixed;
left: 0;
}
.tui-tabs-fixed {
position: fixed;
left: 0;
}
.tui-tabs-fixed::before,
.tui-tabs-relative::before {
content: '';
position: absolute;
border-bottom: 1rpx solid #eaeef1;
-webkit-transform: scaleY(0.5) translateZ(0);
transform: scaleY(0.5) translateZ(0);
transform-origin: 0 100%;
bottom: 0;
right: 0;
left: 0;
}
.tui-tabs-fixed::before,
.tui-tabs-relative::before {
content: "";
position: absolute;
border-bottom: 1rpx solid #eaeef1;
-webkit-transform: scaleY(0.5) translateZ(0);
transform: scaleY(0.5) translateZ(0);
transform-origin: 0 100%;
bottom: 0;
right: 0;
left: 0;
}
.tui-unlined::before {
border-bottom: 0 !important;
}
.tui-unlined::before {
border-bottom: 0 !important;
}
.tui-tabs-item {
display: flex;
align-items: center;
justify-content: center;
overflow: visible;
/* #ifdef H5 */
cursor: pointer;
/* #endif */
}
.tui-tabs-item {
display: flex;
align-items: center;
justify-content: center;
overflow: visible;
/* #ifdef H5 */
cursor: pointer;
/* #endif */
}
.tui-tabs-disabled {
opacity: 0.6;
}
.tui-tabs-disabled {
opacity: 0.6;
}
.tui-tabs-title {
display: flex;
align-items: center;
justify-content: center;
position: relative;
z-index: 3;
overflow: visible;
transition: all 0.15s ease-in-out;
}
.tui-tabs-title {
display: flex;
align-items: center;
justify-content: center;
position: relative;
z-index: 3;
overflow: visible;
transition: all 0.15s ease-in-out;
}
.tui-tabs-slider {
position: absolute;
left: 0;
transition: all 0.3s ease-in-out;
z-index: 1;
transform-style: preserve-3d;
}
.tui-tabs-slider {
position: absolute;
left: 0;
transition: all 0.3s ease-in-out;
z-index: 1;
transform-style: preserve-3d;
}
.tui-tabs__badge {
position: absolute;
font-size: 24rpx;
height: 32rpx;
min-width: 20rpx;
padding: 0 6rpx;
border-radius: 40rpx;
right: 0;
top: 0;
transform: translate(88%, -50%);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
z-index: 4;
font-weight: normal !important;
}
.tui-tabs__badge {
position: absolute;
font-size: 24rpx;
height: 32rpx;
min-width: 20rpx;
padding: 0 6rpx;
border-radius: 40rpx;
right: 0;
top: 0;
transform: translate(88%, -50%);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
z-index: 4;
font-weight: normal !important;
}
.tui-badge__dot {
position: absolute;
height: 16rpx;
width: 16rpx;
border-radius: 50%;
right: -10rpx;
top: -10rpx;
z-index: 4;
}
</style>
.tui-badge__dot {
position: absolute;
height: 16rpx;
width: 16rpx;
border-radius: 50%;
right: -10rpx;
top: -10rpx;
z-index: 4;
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -234,7 +234,7 @@
>
<view class="total-content">
<view class="total-name">
{{ specificationInfoList.length }}个规格
{{ specificationInfoList.length || 1 }}个规格
</view>
<u-icon name="arrow-right"></u-icon>
</view>
@ -748,6 +748,9 @@ export default {
return item; // item
});
if (this.specificationInfoList.length == 0) {
debugger;
}
console.log(this.specificationInfoList);
} catch (e) {
console.error("解析productSpec失败:", e);

View File

@ -359,7 +359,6 @@ export default {
} else {
this.loadingCommodityData = true;
}
if (this.isRefreshing) {
this.pageNum = 1;
this.isNoCommodityData = false;

View File

@ -521,7 +521,7 @@ export default {
item_quantity: item.itemQuantity,
item_quantity_2: "",
item_unit_price: item.product_unit_price,
item_quantity_2: "",
item_unit_price_2: "",
},
];
}
@ -740,7 +740,7 @@ export default {
item_id: item.item_id,
product_id: item.product_id,
item_quantity: item.item_quantity_2 || item.item_quantity,
item_unit_price: item.item_quantity_2 || item.item_unit_price,
item_unit_price: item.item_unit_price_2 || item.item_unit_price,
};
});

View File

@ -342,6 +342,7 @@ export default {
productItem: {},
isAdd: true,
selectCommodisItems: [],
inputSearch: "",
};
},
computed: {},
@ -409,60 +410,71 @@ export default {
// 1.
let productSpec = JSON.parse(JSON.stringify(item.product_spec));
productSpec = JSON.parse(productSpec);
if (!Array.isArray(productSpec)) {
productSpec = [productSpec]; //
}
const specItemMap = [];
productSpec.forEach((specGroup) => {
if (specGroup.item && Array.isArray(specGroup.item)) {
specGroup.item.forEach((item) => {
specItemMap.push(item.id);
});
if (productSpec.length > 0) {
productSpec = JSON.parse(productSpec);
if (!Array.isArray(productSpec)) {
productSpec = [productSpec]; //
}
});
this.currSpecificationList = this.selectCommodisItems
.map((item) => {
try {
//
const itemSpec =
typeof item.item_spec === "string"
? JSON.parse(item.item_spec)
: item.item_spec;
const specItemMap = [];
if (Array.isArray(itemSpec) && itemSpec.length > 0) {
const firstSpec = itemSpec[0];
productSpec.forEach((specGroup) => {
if (specGroup.item && Array.isArray(specGroup.item)) {
specGroup.item.forEach((item) => {
specItemMap.push(item.id);
});
}
});
//
if (firstSpec.item && firstSpec.item.id) {
const matchedSpec = specItemMap.find(
(id) => id == firstSpec.item.id
);
this.currSpecificationList = this.selectCommodisItems
.map((item) => {
try {
//
const itemSpec =
typeof item.item_spec === "string"
? JSON.parse(item.item_spec)
: item.item_spec;
if (matchedSpec) {
return {
...item,
spec_item_id: matchedSpec,
item_is_default: Boolean(item.item_is_default),
//
};
if (Array.isArray(itemSpec) && itemSpec.length > 0) {
const firstSpec = itemSpec[0];
//
if (firstSpec.item && firstSpec.item.id) {
const matchedSpec = specItemMap.find(
(id) => id == firstSpec.item.id
);
if (matchedSpec) {
return {
...item,
spec_item_id: matchedSpec,
item_is_default: Boolean(item.item_is_default),
//
};
}
}
}
} catch (e) {
console.error(`处理商品 ${item.item_id} 时出错:`, e);
}
} catch (e) {
console.error(`处理商品 ${item.item_id} 时出错:`, e);
}
})
.filter((item) => item != undefined);
console.log(this.currSpecificationList);
})
.filter((item) => item != undefined);
} else {
this.currSpecificationList = [
{
...item,
item_quantity: item.itemQuantity,
item_quantity_2: "",
item_unit_price: item.product_unit_price,
item_unit_price_2: "",
},
];
}
this.showBottomPopup = true;
console.log(this.currSpecificationList);
}
},
async getProductList(inputSearch) {
async getProductList() {
if (this.loadingDownCommodityData) {
this.loadingCommodityData = false;
} else {
@ -484,9 +496,9 @@ export default {
openCount: true,
};
if (inputSearch) {
if (this.inputSearch) {
this.pageNum = 1;
params.product_name = inputSearch;
params.product_name = this.inputSearch;
}
let res = await GetProductList(params);
@ -660,30 +672,26 @@ export default {
});
},
async updateCommodityPriceAndQuantity(item) {
let params = {};
let params = this.currSpecificationList.map((item) => {
return {
item_id: item.item_id,
product_id: item.product_id,
item_quantity: item.item_quantity_2 || item.item_quantity,
item_unit_price: item.item_unit_price_2 || item.item_unit_price,
};
});
debugger;
let res = await UpdateCommodityPriceAndQuantity(params);
if (res && res.status) {
this.showBottomPopup = false;
this.$refs.uToast.show({
message: "修改成功",
type: "succeed",
duration: 1000,
});
//
let listParams = {
kind_id: "1201,1202,1203",
pageNum: 9999,
pageSize: this.pageSize,
product_state_id: this.currProductStateId,
category_id: this.currCategoryId,
openCount: true,
};
let result = await GetProductList(listParams);
if (result && result.status == 200) {
this.commodityList = res.data.items;
}
await this.getProductList();
}
this.showBottomPopup = false;
},

View File

@ -21,6 +21,10 @@
-moz-osx-font-smoothing: grayscale;
}
.custom-icon-a-Frame3:before {
content: "\e60c";
}
.custom-icon-jianhao_fangxing:before {
content: "\e728";
}

View File

@ -52,8 +52,6 @@ service.interceptors.response.use(
// });
}
console.log(res);
if (res && res.code == 30) {
uni.$u.toast(`token已经过期需要重新登录`);