修复BUG

This commit is contained in:
qijq 2025-08-06 10:11:54 +08:00
parent 73d79e54a9
commit 018f84a808
9 changed files with 494 additions and 295 deletions

View File

@ -16,6 +16,7 @@
}}前送达 }}前送达
</view> </view>
<u-icon <u-icon
v-if="currOrderItem.sf_order_info.feed && !isErrorOrder"
class="icon" class="icon"
name="arrow-right" name="arrow-right"
color="#000" color="#000"
@ -434,20 +435,25 @@
closeable closeable
@close="showSfFlowPopup = false" @close="showSfFlowPopup = false"
> >
<!-- <view class="SfFlow-popup-content"> <view class="SfFlow-popup-content">
<view class="SfFlow-popup-title">顺丰轨迹</view> <view class="SfFlow-popup-title">同城轨迹</view>
<view class="SfFlow-content"> <view class="SfFlow-content">
<u-steps current="0" direction="column"> <u-steps
:current="
currOrderItem.sf_order_info.feed
? currOrderItem.sf_order_info.feed.length
: 0
"
direction="column"
>
<u-steps-item <u-steps-item
title="已下单" v-for="(item, index) of currOrderItem.sf_order_info.feed"
desc="10:30" :title="item.content"
v-for="(item, index) of sf_order_info.feed" :desc="item.create_time"
></u-steps-item> ></u-steps-item>
<u-steps-item title="" desc="10:35"></u-steps-item>
<u-steps-item title="运输中" desc="11:40"></u-steps-item>
</u-steps> </u-steps>
</view> </view>
</view> --> </view>
</u-popup> </u-popup>
<u-toast ref="uToast"></u-toast> <u-toast ref="uToast"></u-toast>
</view> </view>
@ -549,6 +555,9 @@ export default {
showOrderPickingPopup: false, showOrderPickingPopup: false,
currOrderItem: { currOrderItem: {
order_items: [], order_items: [],
sf_order_info: {
feed: null,
},
}, },
isRefreshing: false, isRefreshing: false,
refreshInterval: null, // refreshInterval: null, //
@ -574,6 +583,13 @@ export default {
}, },
created() { created() {
this.currOrderItem = JSON.parse(JSON.stringify(this.orderItem)); this.currOrderItem = JSON.parse(JSON.stringify(this.orderItem));
if (this.currOrderItem.sf_order_info.feed) {
this.currOrderItem.sf_order_info.feed = JSON.parse(
this.currOrderItem.sf_order_info.feed
);
console.log("有值feed", this.currOrderItem.sf_order_info);
}
}, },
mounted() { mounted() {
// 1 // 1

View File

@ -19,7 +19,9 @@
@click="pageBack()" @click="pageBack()"
></u-icon> ></u-icon>
</block> </block>
<block slot="right" v-if="!isAdd">删除</block> <block slot="right" v-if="!isAdd">
<text @click="delectCommodity">删除</text>
</block>
</navBar> </navBar>
<view class="addAndEditProduct-content"> <view class="addAndEditProduct-content">
<u--form <u--form
@ -316,9 +318,9 @@
</view> </view>
<u-popup <u-popup
class="right-popup" class="right-popup"
zIndex="998" zIndex="1200"
:overlay="false" :overlay="false"
:show="showRightPopup" :show="showRightPecificationOfGoodPopup"
mode="right" mode="right"
> >
<specificationOfGood <specificationOfGood
@ -327,7 +329,7 @@
:productInfoByPid="productInfoByPid" :productInfoByPid="productInfoByPid"
:typeId="typeId" :typeId="typeId"
@handerSpecificationInfoList="handerSpecificationInfoList" @handerSpecificationInfoList="handerSpecificationInfoList"
@pageBack="showRightPopup = false" @pageBack="showRightPecificationOfGoodPopup = false"
:isAdd="isAdd" :isAdd="isAdd"
></specificationOfGood> ></specificationOfGood>
</u-popup> </u-popup>
@ -364,6 +366,39 @@
</view> </view>
</view> </view>
</u-popup> </u-popup>
<u-popup
class="affirm-popup"
zIndex="10077"
:show="showDelectPopup"
mode="center"
>
<view class="affirm-popup-content">
<view class="affirm-popup-title">确认删除</view>
<view class="affirm-popup-tips">
确定删除{{ productItem.product_name }}这个商品
</view>
<view class="popup-btn-list">
<u-button
class="btn-item"
:hairline="true"
:plain="true"
shape="circle"
@click="showDelectPopup = false"
>
取消
</u-button>
<u-button
class="btn-item btn-item-2"
:hairline="true"
:plain="true"
shape="circle"
@click="handerDelectCommodity"
>
删除
</u-button>
</view>
</view>
</u-popup>
<tki-tree <tki-tree
ref="tkitree" ref="tkitree"
:range="baTreePickerList" :range="baTreePickerList"
@ -403,6 +438,7 @@ import {
GetClassifyInfo, GetClassifyInfo,
GetCommoditSpecificationBaseInfo, GetCommoditSpecificationBaseInfo,
} from "@/api/warehouse/commodity"; } from "@/api/warehouse/commodity";
import { DelectCommodity } from "@/api/warehouse/productList";
import tkiTree from "./components/tree/tree"; import tkiTree from "./components/tree/tree";
import specificationOfGood from "./specificationOfGood.vue"; import specificationOfGood from "./specificationOfGood.vue";
import store from "../../../store"; import store from "../../../store";
@ -534,7 +570,7 @@ export default {
showSaleTime: false, showSaleTime: false,
productSaleTime: Number(new Date()), productSaleTime: Number(new Date()),
baTreePickerList: [], baTreePickerList: [],
showRightPopup: false, showRightPecificationOfGoodPopup: false,
commoditSpecificationBaseInfo: {}, commoditSpecificationBaseInfo: {},
selectCommodisItems: [], selectCommodisItems: [],
typeId: 0, typeId: 0,
@ -549,6 +585,8 @@ export default {
shop_product_index: {}, shop_product_index: {},
shop_product_info: {}, shop_product_info: {},
}, },
showDelectPopup: false,
cheboxList: [],
}; };
}, },
computed: { computed: {
@ -662,6 +700,20 @@ export default {
} }
this.loadingClassIfy = false; this.loadingClassIfy = false;
}, },
delectCommodity() {
this.showDelectPopup = true;
},
async handerDelectCommodity() {
let params = {
product_ids: this.productItem.product_id.toString(),
};
let res = await DelectCommodity(params);
if (res && res.status == 200) {
uni.$u.toast("删除成功");
this.handerPageBack();
}
},
async getCommoditSpecification() { async getCommoditSpecification() {
let params = { let params = {
product_id: this.productItem.product_id, product_id: this.productItem.product_id,
@ -672,16 +724,16 @@ export default {
this.selectCommodisItems = res.data; this.selectCommodisItems = res.data;
// 1. // 1.
let productSpec = this.productInfoByPid.shop_product_info.product_spec; this.productSpec = this.productInfoByPid.shop_product_info.product_spec;
try { try {
productSpec = JSON.parse(productSpec); this.productSpec = JSON.parse(this.productSpec);
if (!Array.isArray(productSpec)) { if (!Array.isArray(this.productSpec)) {
productSpec = [productSpec]; // this.productSpec = [this.productSpec]; //
} }
// 2. {itemId: } // 2. {itemId: }
const specItemMap = []; const specItemMap = [];
productSpec.forEach((specGroup) => { this.productSpec.forEach((specGroup) => {
if (specGroup.item && Array.isArray(specGroup.item)) { if (specGroup.item && Array.isArray(specGroup.item)) {
specGroup.item.forEach((item) => { specGroup.item.forEach((item) => {
specItemMap.push(item.id); specItemMap.push(item.id);
@ -797,7 +849,7 @@ export default {
return; return;
} }
this.showRightPopup = true; this.showRightPecificationOfGoodPopup = true;
}, },
treeConfirm(list) { treeConfirm(list) {
if (list.length > 1) { if (list.length > 1) {
@ -819,9 +871,9 @@ export default {
treeCancel() { treeCancel() {
this.$refs.tkitree._hide(); this.$refs.tkitree._hide();
}, },
handerSpecificationInfoList(specificationInfoList) { handerSpecificationInfoList(specificationInfoList, cheboxList) {
this.specificationInfoList = specificationInfoList; this.specificationInfoList = specificationInfoList;
this.cheboxList = cheboxList;
console.log(this.specificationInfoList); console.log(this.specificationInfoList);
}, },
handerAddAndEditPopup() { handerAddAndEditPopup() {
@ -838,7 +890,7 @@ export default {
if (this.specificationInfoList.length <= 0) { if (this.specificationInfoList.length <= 0) {
this.$refs.uToast.show({ this.$refs.uToast.show({
message: "请选择选择规格", message: "请选择填写售卖规格信息",
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
@ -851,7 +903,7 @@ export default {
const key2 = String(item.spec_id) + "_" + String(item.spec_item_id); const key2 = String(item.spec_id) + "_" + String(item.spec_item_id);
const color_img = this.viceImg.map((item) => item.url); const color_img = this.viceImg.map((item) => item.url);
const mainMColorimg = this.primaryImg.map((item) => item.url); const mainMColorimg = this.primaryImg.map((item) => item.url);
let obj = { var obj = {
color_img: color_img, color_img: color_img,
item_is_default: item.item_is_default, item_is_default: item.item_is_default,
item_market_price: item_market_price:
@ -861,22 +913,23 @@ export default {
item_unit_points: "0", // item_unit_points: "0", //
item_unit_price: item.item_unit_price_2 || item.item_unit_price, item_unit_price: item.item_unit_price_2 || item.item_unit_price,
main_color_img: mainMColorimg.toString(), main_color_img: mainMColorimg.toString(),
product_spec:
item.spec_item_id > 0
? JSON.stringify([
{
id: item.spec_id,
name: this.commoditSpecificationBaseInfo.specs[0]
.spec_name,
item: {
id: item.spec_item_id,
name: item.spec_item_name,
},
},
])
: "[]",
}; };
if (this.cheboxList.length > 0 || this.productSpec.length > 0) {
obj.product_spec = JSON.stringify([
{
id: item.spec_id,
name: this.commoditSpecificationBaseInfo.specs[0].spec_name,
item: {
id: item.spec_item_id,
name: item.spec_item_name,
},
},
]);
} else {
obj.product_spec = "[]";
}
if (this.isAdd) { if (this.isAdd) {
obj.category_id = this.form.category_id; obj.category_id = this.form.category_id;
obj.siid = String(item.spec_item_id || ""); obj.siid = String(item.spec_item_id || "");
@ -911,28 +964,33 @@ export default {
return obj; return obj;
}); });
const productSpec = this.specificationInfoList.reduce((acc, item) => { var productSpec = this.productSpec;
const existingSpec = acc.find((spec) => spec.id === item.spec_id);
if (existingSpec) { if (this.cheboxList.length > 0 || productSpec.length > 0) {
existingSpec.item.push({ productSpec = this.specificationInfoList.reduce((acc, item) => {
id: item.spec_item_id, const existingSpec = acc.find((spec) => spec.id === item.spec_id);
name: item.spec_item_name,
});
} else {
acc.push({
id: item.spec_id,
item: [
{
id: item.spec_item_id,
name: item.spec_item_name,
},
],
});
}
return acc; if (existingSpec) {
}, []); existingSpec.item.push({
id: item.spec_item_id,
name: item.spec_item_name,
});
} else {
acc.push({
id: item.spec_id,
name: this.commoditSpecificationBaseInfo.specs[0].spec_name,
item: [
{
id: item.spec_item_id,
name: item.spec_item_name,
},
],
});
}
return acc;
}, []);
}
console.log(this.form.product_param); console.log(this.form.product_param);

View File

@ -34,7 +34,7 @@
scroll-with-animation scroll-with-animation
class="tab-view" class="tab-view"
:scroll-into-view="scrollViewId" :scroll-into-view="scrollViewId"
:style="{ top: top + 'px' }" :style="{ top: top + 'px' }"
> >
<block v-for="(item, index) of tabbar" :key="index"> <block v-for="(item, index) of tabbar" :key="index">
<tui-collapse <tui-collapse
@ -75,7 +75,7 @@
ref="tabsRef" ref="tabsRef"
:list="commodityStatusList" :list="commodityStatusList"
@click="handerCommodityStatus" @click="handerCommodityStatus"
itemStyle="padding:0 15px;height: 44px;" itemStyle="padding:0 15px;height: 44px;"
activeStyle="color: #222;" activeStyle="color: #222;"
inactiveStyle="color:#666;" inactiveStyle="color:#666;"
lineColor="#FE411B" lineColor="#FE411B"
@ -103,8 +103,8 @@
<u-checkbox <u-checkbox
class="commodity-checkbox" class="commodity-checkbox"
:name="'select-all'" :name="'select-all'"
iconSize="14" iconSize="14"
size="14" size="14"
></u-checkbox> ></u-checkbox>
</u-checkbox-group> </u-checkbox-group>
<view class="checkbox-all-name"> <view class="checkbox-all-name">
@ -131,8 +131,8 @@
@change="handleSelectAll($event, false)" @change="handleSelectAll($event, false)"
> >
<u-checkbox <u-checkbox
size="14" size="14"
iconSize="14" iconSize="14"
class="commodity-checkbox" class="commodity-checkbox"
:name="'select-all'" :name="'select-all'"
></u-checkbox> ></u-checkbox>
@ -158,7 +158,7 @@
<scroll-view <scroll-view
v-if="commodityList.length > 0 && !loadingCommodityData" v-if="commodityList.length > 0 && !loadingCommodityData"
scroll-y scroll-y
:style="{ height: height - 230 + 'px' }" :style="{ height: height - 180 + 'px' }"
:show-scrollbar="false" :show-scrollbar="false"
@scrolltolower="handerScrolltolower" @scrolltolower="handerScrolltolower"
refresher-enabled refresher-enabled
@ -184,9 +184,8 @@
class="commodity-checkbox" class="commodity-checkbox"
:key="index" :key="index"
:name="item.product_id" :name="item.product_id"
iconSize="14" iconSize="14"
size="14" size="14"
></u-checkbox> ></u-checkbox>
<view class="commodity-info"> <view class="commodity-info">
<view <view
@ -237,9 +236,8 @@
class="commodity-checkbox" class="commodity-checkbox"
:key="index" :key="index"
:name="item.product_id" :name="item.product_id"
iconSize="14" iconSize="14"
size="14" size="14"
></u-checkbox> ></u-checkbox>
<view class="commodity-info"> <view class="commodity-info">
<view <view
@ -292,7 +290,10 @@
</view> </view>
<view <view
class="productList-bottom" class="productList-bottom"
:class="['productList-bottom-2', { 'productList-bottom-2': selectCommodityList.length > 0 }]" :class="[
'productList-bottom-2',
{ 'productList-bottom-2': selectCommodityList.length > 0 },
]"
> >
<view class="commodity-btn-content"> <view class="commodity-btn-content">
<view <view
@ -302,7 +303,8 @@
shape="circle" shape="circle"
@click="updateProductPutaway(1001)" @click="updateProductPutaway(1001)"
> >
<u-icon name="arrow-upward" color="#666" size="14"></u-icon> <u-icon name="arrow-upward" color="#666" size="14"></u-icon>
上架
</view> </view>
<view <view
class="commodity-btn-item" class="commodity-btn-item"
@ -311,7 +313,8 @@
shape="circle" shape="circle"
@click="updateProductPutaway(1002)" @click="updateProductPutaway(1002)"
> >
<u-icon name="arrow-downward" color="#666" size="14"></u-icon> <u-icon name="arrow-downward" color="#666" size="14"></u-icon>
下架
</view> </view>
<view <view
class="commodity-btn-item commodity-btn-item-2" class="commodity-btn-item commodity-btn-item-2"
@ -320,11 +323,14 @@
shape="circle" shape="circle"
@click="delectCommodity" @click="delectCommodity"
> >
<u-icon name="trash" color="#666" size="14"></u-icon> <u-icon name="trash" color="#666" size="14"></u-icon>
删除
</view> </view>
</view> </view>
<view class="product-tips"> <view class="product-tips">
共选择 <text>{{ selectCommodityList.length }}</text>/100 共选择
<text>{{ selectCommodityList.length }}</text>
/100
<text class="product-tips-check" @click="showPopup = true"> <text class="product-tips-check" @click="showPopup = true">
查看 查看
<u-icon class="icon-up" size="8" name="arrow-up"></u-icon> <u-icon class="icon-up" size="8" name="arrow-up"></u-icon>
@ -376,54 +382,53 @@
}" }"
> >
<view class="commodity-list"> <view class="commodity-list">
<view
class="commodity-item"
v-for="(item, index) of selectCommodityList"
:key="index"
>
<view class="commodity-info">
<view
:class="[
'commodity-img',
{
'commodity-img-sold-out': item.product_state_id == 1002,
},
]"
>
<u--image
:src="item.product_image"
radius="8"
width="60px"
height="60px"
@click="handlerShowImg(item.product_image)"
></u--image>
</view>
<view class="commodity-info-box">
<view class="commodity-name">
{{ item.product_name }}
</view>
<view class="commodity-inventory">
库存{{ item.itemQuantity }}
</view>
<view class="commodity-price">
<block class="currency">¥</block>
{{ item.product_unit_price }}
</view>
</view>
</view>
<view <view
class="icon-content" class="commodity-item"
@click="delectSelectCommodity(item, index)" v-for="(item, index) of selectCommodityList"
:key="index"
> >
<u-icon <view class="commodity-info">
class="u-icon-jianhao" <view
custom-prefix="custom-icon-jianhao_fangxing custom-icon" :class="[
size="22" 'commodity-img',
></u-icon> {
'commodity-img-sold-out': item.product_state_id == 1002,
},
]"
>
<u--image
:src="item.product_image"
radius="8"
width="60px"
height="60px"
@click="handlerShowImg(item.product_image)"
></u--image>
</view>
<view class="commodity-info-box">
<view class="commodity-name">
{{ item.product_name }}
</view>
<view class="commodity-inventory">
库存{{ item.itemQuantity }}
</view>
<view class="commodity-price">
<block class="currency">¥</block>
{{ item.product_unit_price }}
</view>
</view>
</view>
<view
class="icon-content"
@click="delectSelectCommodity(item, index)"
>
<u-icon
class="u-icon-jianhao"
custom-prefix="custom-icon-jianhao_fangxing custom-icon"
size="22"
></u-icon>
</view>
</view> </view>
</view> </view>
</view>
</scroll-view> </scroll-view>
</view> </view>
</view> </view>
@ -896,7 +901,7 @@ export default {
return item; return item;
}); });
await this.updateCommodityStatistics(); await this.getProductList();
this.clearCheckboxLists(this.tabbar); this.clearCheckboxLists(this.tabbar);
this.selectCommodityList = []; this.selectCommodityList = [];
@ -1367,7 +1372,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/styles/variables.scss"; @import "@/styles/variables.scss";
page{ page {
background: #f5f6fa; background: #f5f6fa;
} }
@ -1430,7 +1435,7 @@ page{
.tui-search-text { .tui-search-text {
padding-left: 16rpx; padding-left: 16rpx;
} }
.tab-view { .tab-view {
/* height: 100%; */ /* height: 100%; */
width: 210rpx; width: 210rpx;
@ -1457,7 +1462,7 @@ page{
word-break: break-all; word-break: break-all;
} }
::v-deep .tui-icon-arrow{ ::v-deep .tui-icon-arrow {
left: 8rpx; left: 8rpx;
} }
.active { .active {
@ -1467,7 +1472,7 @@ page{
} }
.tab-bar-item-2 { .tab-bar-item-2 {
min-height: 96rpx; min-height: 96rpx;
font-size: 24rpx; font-size: 24rpx;
background: #fff !important; background: #fff !important;
} }
@ -1479,7 +1484,7 @@ page{
.active::before { .active::before {
content: ""; content: "";
position: absolute; position: absolute;
border-left: 4rpx solid #FE411B; border-left: 4rpx solid #fe411b;
height: 30rpx; height: 30rpx;
left: 0; left: 0;
top: 50%; top: 50%;
@ -1655,7 +1660,7 @@ page{
padding-left: 24rpx; padding-left: 24rpx;
} }
.checkbox-all-name{ .checkbox-all-name {
font-size: 28rpx; font-size: 28rpx;
} }
@ -1665,13 +1670,14 @@ page{
.commodity-item { .commodity-item {
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 24rpx;
width: 100%; width: 100%;
.commodity-checkbox { .commodity-checkbox {
margin-right: 20rpx; margin-right: 20rpx;
} }
.commodity-info { .commodity-info {
display: flex; display: flex;
.commodity-img { .commodity-img {
@ -1716,7 +1722,7 @@ page{
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; /* 超出部分显示省略号 */ text-overflow: ellipsis; /* 超出部分显示省略号 */
color: #000; color: #000;
} }
.commodity-inventory { .commodity-inventory {
@ -1725,7 +1731,7 @@ page{
.commodity-price { .commodity-price {
font-size: 28rpx; font-size: 28rpx;
color: #FE411B; color: #fe411b;
.currency { .currency {
margin-right: 4px; margin-right: 4px;
@ -1766,34 +1772,33 @@ page{
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.commodity-btn-item { .commodity-btn-item {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
padding: 8rpx 12rpx; padding: 8rpx 12rpx;
font-size: 24rpx; font-size: 24rpx;
border: 2rpx solid #d2d2d2; border: 2rpx solid #d2d2d2;
color: #333; color: #333;
text-align: center; text-align: center;
margin-right: 24rpx; margin-right: 24rpx;
border-radius: 40rpx; border-radius: 40rpx;
line-height: 1; line-height: 1;
} }
.commodity-btn-item-2 { .commodity-btn-item-2 {
color: $base-color; color: $base-color;
border-color: $base-color; border-color: $base-color;
::v-deep .u-icon__icon{ ::v-deep .u-icon__icon {
color: $base-color !important; color: $base-color !important;
}
} }
}
.product-tips { .product-tips {
font-size: 24rpx; font-size: 24rpx;
color: #666; color: #666;
text{ text {
color: $base-color; color: $base-color;
} }
.product-tips-check { .product-tips-check {
@ -1814,10 +1819,10 @@ page{
} }
} }
.commodity-btn-content{ .commodity-btn-content {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.bottom-item { .bottom-item {
@ -1825,10 +1830,10 @@ page{
align-items: center; align-items: center;
justify-content: center; justify-content: center;
.bottom-item-name{ .bottom-item-name {
font-size: 28rpx; font-size: 28rpx;
color: #222; color: #222;
} }
.u-icon { .u-icon {
margin-right: 8rpx; margin-right: 8rpx;
@ -1899,71 +1904,71 @@ page{
} }
.commodity-info { .commodity-info {
display: flex; display: flex;
margin-bottom: 24rpx; margin-bottom: 24rpx;
.commodity-img { .commodity-img {
position: relative; position: relative;
margin-right: 20rpx; margin-right: 20rpx;
width: 128rpx; width: 128rpx;
height: 128rpx; height: 128rpx;
border: 1px solid $uni-border-color; border: 1px solid $uni-border-color;
border-radius: 24rpx; border-radius: 24rpx;
} }
.commodity-img-sold-out { .commodity-img-sold-out {
&::before { &::before {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
height: 20px; height: 20px;
line-height: 20px; line-height: 20px;
content: "已下架"; content: "已下架";
text-align: center; text-align: center;
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
color: #fff; color: #fff;
z-index: 99; z-index: 99;
font-size: 24rpx; font-size: 24rpx;
border-bottom-left-radius: 16rpx; border-bottom-left-radius: 16rpx;
border-bottom-right-radius: 16rpx; border-bottom-right-radius: 16rpx;
} }
} }
.commodity-info-box { .commodity-info-box {
display: flex; display: flex;
flex-flow: column; flex-flow: column;
justify-content: space-between; justify-content: space-between;
color: #666; color: #666;
.commodity-name { .commodity-name {
font-size: 28rpx; font-size: 28rpx;
word-break: break-all; /* 允许在任意字符间断行 */ word-break: break-all; /* 允许在任意字符间断行 */
overflow-wrap: break-word; /* 优先在单词间断行 */ overflow-wrap: break-word; /* 优先在单词间断行 */
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; /* 限制最多2行 */ -webkit-line-clamp: 2; /* 限制最多2行 */
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; /* 超出部分显示省略号 */ text-overflow: ellipsis; /* 超出部分显示省略号 */
color: #000; color: #000;
} }
.commodity-inventory { .commodity-inventory {
font-size: 24rpx; font-size: 24rpx;
} }
.commodity-price { .commodity-price {
font-size: 28rpx; font-size: 28rpx;
color: #FE411B; color: #fe411b;
.currency { .currency {
margin-right: 4px; margin-right: 4px;
font-size: 24rpx; font-size: 24rpx;
}
}
} }
} }
} }
} }
}
}
} }
} }

View File

@ -44,10 +44,10 @@
</view> </view>
<view <view
class="classify-btn-content" class="classify-btn-content"
@click.stop="handerSetting($event, item)" @click.stop="handerSetting($event, item, false)"
> >
<view class="classify-btn-item"> <view class="classify-btn-item">
<u-icon name="edit-pen" size="16"> </u-icon> <u-icon name="edit-pen" size="16"></u-icon>
设置 设置
</view> </view>
</view> </view>
@ -57,7 +57,6 @@
<view <view
class="second-level-item" class="second-level-item"
v-for="(group, index2) of item.sub" v-for="(group, index2) of item.sub"
@click="handerCollApseChildren(group)"
> >
<view <view
class="second-level-item-info" class="second-level-item-info"
@ -75,8 +74,11 @@
</view> </view>
</view> </view>
<view class="classify-btn-content"> <view class="classify-btn-content">
<view class="classify-btn-item"> <view
<u-icon name="edit-pen" size="16"> </u-icon> class="classify-btn-item"
@click.stop="handerSetting($event, item, true)"
>
<u-icon name="edit-pen" size="16"></u-icon>
设置 设置
</view> </view>
</view> </view>
@ -137,7 +139,11 @@
已有商品类型无法修改 已有商品类型无法修改
</view> </view>
</view> </view>
<view class="stair-bottom-item" @click="handerShowRightAddSecondLevel"> <view
class="stair-bottom-item"
@click="handerShowRightAddSecondLevel"
v-if="!isSubclassification"
>
新增二级分类 新增二级分类
</view> </view>
<view <view
@ -292,11 +298,11 @@
<text class="u-loadmore-tips">正在加载...</text> <text class="u-loadmore-tips">正在加载...</text>
</view> </view>
</block> </block>
<!-- <block v-else> <block v-else>
<view class="u-loadmore u-loadmore-line"> <view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">没有更多商品类型了 ~</text> <text class="u-loadmore-tips">没有更多商品类型了 ~</text>
</view> </view>
</block> --> </block>
</view> </view>
</scroll-view> </scroll-view>
<view class="popup-btn-list"> <view class="popup-btn-list">
@ -331,12 +337,13 @@
> >
<view class="add-popup-content"> <view class="add-popup-content">
<view class="add-popup-title">新建分类</view> <view class="add-popup-title">新建分类</view>
<u-alert <u-alert
:closable="true" :closable="true"
fontSize="12" fontSize="12"
title="注意,确认商品类型后不可修改名称,商品类型,虚拟商品!" title="注意,确认商品类型后不可修改名称,商品类型,虚拟商品!"
type="warning" :show-icon="true" type="warning"
></u-alert> :show-icon="true"
></u-alert>
<u--form <u--form
labelPosition="left" labelPosition="left"
:model="form" :model="form"
@ -356,7 +363,7 @@
count count
autoHeight autoHeight
maxlength="8" maxlength="8"
placeholder="请输入二级分类名称" placeholder="请输入分类名称"
></u--textarea> ></u--textarea>
</u-form-item> </u-form-item>
<u-form-item <u-form-item
@ -394,7 +401,7 @@
:activeValue="1" :activeValue="1"
:inactiveValue="0" :inactiveValue="0"
activeColor="#fe411b" activeColor="#fe411b"
inactiveColor="#ccc" inactiveColor="#ccc"
></u-switch> ></u-switch>
</u-form-item> </u-form-item>
</u--form> </u--form>
@ -404,7 +411,7 @@
:hairline="true" :hairline="true"
:plain="true" :plain="true"
shape="circle" shape="circle"
@click="showAddStairClassifyPopup = false" @click="handerCancelEditPopup"
> >
取消 取消
</u-button> </u-button>
@ -454,11 +461,13 @@ import {
import { GetTypeManageList } from "@/api/warehouse/typeManage"; import { GetTypeManageList } from "@/api/warehouse/typeManage";
import tuiCollapse from "../manage/components/tui-collapse/classify-collapse.vue"; import tuiCollapse from "../manage/components/tui-collapse/classify-collapse.vue";
import editClassify from "../manage/editClassify.vue"; import editClassify from "../manage/editClassify.vue";
import favoriteLoading from "@/components/favorite-loading/favorite-loading.vue";
export default { export default {
name: "classifyList", name: "classifyList",
components: { components: {
tuiCollapse, tuiCollapse,
editClassify, editClassify,
favoriteLoading,
}, },
data() { data() {
return { return {
@ -517,6 +526,7 @@ export default {
}, },
], ],
}, },
isSubclassification: false,
}; };
}, },
computed: {}, computed: {},
@ -569,6 +579,7 @@ export default {
if (this.typeManageList.length <= 0) { if (this.typeManageList.length <= 0) {
this.isNotypeManageData = true; this.isNotypeManageData = true;
return;
} }
} }
this.loadingDownTypeManageData = false; this.loadingDownTypeManageData = false;
@ -610,10 +621,11 @@ export default {
handerCollApse(e, item, isStair) { handerCollApse(e, item, isStair) {
this.current = this.current == e.index ? -1 : e.index; this.current = this.current == e.index ? -1 : e.index;
}, },
handerSetting(event, item) { handerSetting(event, item, isSubclassification) {
event.stopPropagation(); event.stopPropagation();
this.currStairItem = item; this.currStairItem = item;
this.showBottomStairPopup = true; this.showBottomStairPopup = true;
this.isSubclassification = isSubclassification;
}, },
handerCloseTypePopup() { handerCloseTypePopup() {
this.showCommodityTypePopup = false; this.showCommodityTypePopup = false;
@ -634,6 +646,11 @@ export default {
this.showBottomStairPopup = false; this.showBottomStairPopup = false;
this.showRightPopup = true; this.showRightPopup = true;
}, },
handerCancelEditPopup() {
this.loadingDownTypeManageData = false;
this.isNoDownTypeManageData = false;
this.showAddStairClassifyPopup = false;
},
hadnerShowCommodityTypePopup() { hadnerShowCommodityTypePopup() {
this.showCommodityTypePopup = true; this.showCommodityTypePopup = true;
}, },
@ -978,8 +995,8 @@ export default {
.btn-item { .btn-item {
width: 46%; width: 46%;
height: 64rpx; height: 64rpx;
border-color: #909193; border-color: #909193;
&::after { &::after {
border: none; border: none;
@ -1033,7 +1050,7 @@ export default {
.btn-item { .btn-item {
width: 46%; width: 46%;
height: 64rpx; height: 64rpx;
border-color: #909193; border-color: #909193;
&::after { &::after {
@ -1080,7 +1097,7 @@ export default {
.btn-item { .btn-item {
width: 46%; width: 46%;
height: 64rpx; height: 64rpx;
border-color: #909193; border-color: #909193;
&::after { &::after {

View File

@ -24,6 +24,7 @@
placeholder="搜索你想要的商品" placeholder="搜索你想要的商品"
:showAction="false" :showAction="false"
bgColor="#fff" bgColor="#fff"
@focus.native.stop="handleNoFocus"
:disabled="true" :disabled="true"
@click="skipuSearch" @click="skipuSearch"
></u-search> ></u-search>
@ -306,7 +307,7 @@
mode="right" mode="right"
> >
<addAndEditProduct <addAndEditProduct
@pageBack="showRightPopup = false" @pageBack="handerAddAndEditProductPageBanck"
:productItem="productItem" :productItem="productItem"
:isAdd="isAdd" :isAdd="isAdd"
></addAndEditProduct> ></addAndEditProduct>
@ -453,6 +454,11 @@ export default {
this.scrollViewId = `id_0`; this.scrollViewId = `id_0`;
} }
}, },
handleNoFocus() {
e.target.blur(); //
//
e.preventDefault();
},
handerClosePopup() { handerClosePopup() {
this.showBottomPopup = false; this.showBottomPopup = false;
}, },
@ -465,10 +471,15 @@ export default {
if (res && res.status == 200) { if (res && res.status == 200) {
this.selectCommodisItems = res.data; this.selectCommodisItems = res.data;
console.log(item.product_spec);
// 1. // 1.
let productSpec = JSON.parse(JSON.stringify(item.product_spec)); let productSpec = JSON.parse(JSON.stringify(item.product_spec));
if (productSpec.length > 0) { if (!Array.isArray(productSpec)) {
productSpec = JSON.parse(productSpec); productSpec = JSON.parse(productSpec);
}
if (productSpec.length > 0) {
if (!Array.isArray(productSpec)) { if (!Array.isArray(productSpec)) {
productSpec = [productSpec]; // productSpec = [productSpec]; //
} }
@ -633,23 +644,7 @@ export default {
openCount: true, openCount: true,
}; };
let result = await GetProductList(params); this.getProductList();
if (result && result.status == 200) {
var {
allRecords,
normalRecords,
offRecords,
illegalRecords,
unCheckedRecords,
} = result.data;
this.commodityStatusList[0].badge.value = allRecords;
this.commodityStatusList[1].badge.value = normalRecords;
this.commodityStatusList[2].badge.value = offRecords;
this.commodityStatusList[3].badge.value = illegalRecords;
this.commodityStatusList[4].badge.value = unCheckedRecords;
}
} }
}, 500); }, 500);
}, },
@ -718,6 +713,10 @@ export default {
this.getProductList(); this.getProductList();
} }
}, },
handerAddAndEditProductPageBanck() {
this.showRightPopup = false;
this.getProductList();
},
detail(e) { detail(e) {
uni.navigateTo({ uni.navigateTo({
url: "../productDetail/productDetail", url: "../productDetail/productDetail",
@ -850,6 +849,19 @@ page {
padding-left: 16rpx; padding-left: 16rpx;
} }
.search {
::v-deep.u-search__content__input {
outline: none !important;
box-shadow: none !important;
border-color: transparent !important;
background-color: transparent !important;
}
::v-deep.uni-input-form {
display: none;
}
}
.tab-view { .tab-view {
/* height: 100%; */ /* height: 100%; */
width: 210rpx; width: 210rpx;

View File

@ -394,6 +394,11 @@ export default {
this.showBottomPopup = false; this.showBottomPopup = false;
}, },
handerSearch(e) { handerSearch(e) {
if (!this.inputSearch) {
this.commodityList = [];
return;
}
clearTimeout(this.time3); clearTimeout(this.time3);
this.time3 = setTimeout(() => { this.time3 = setTimeout(() => {
this.getProductList(); this.getProductList();
@ -410,8 +415,11 @@ export default {
// 1. // 1.
let productSpec = JSON.parse(JSON.stringify(item.product_spec)); let productSpec = JSON.parse(JSON.stringify(item.product_spec));
if (productSpec.length > 0) { if (!Array.isArray(productSpec)) {
productSpec = JSON.parse(productSpec); productSpec = JSON.parse(productSpec);
}
if (productSpec.length > 0) {
if (!Array.isArray(productSpec)) { if (!Array.isArray(productSpec)) {
productSpec = [productSpec]; // productSpec = [productSpec]; //
} }
@ -561,32 +569,7 @@ export default {
this.commodityList[index].product_state_id = type; this.commodityList[index].product_state_id = type;
let params = { this.getProductList();
kind_id: "1201,1202,1203",
pageNum: this.pageNum,
pageSize: this.pageSize,
product_state_id: this.currProductStateId,
category_id: this.currCategoryId,
openCount: true,
};
let result = await GetProductList(params);
if (result && result.status == 200) {
var {
allRecords,
normalRecords,
offRecords,
illegalRecords,
unCheckedRecords,
} = result.data;
this.commodityStatusList[0].badge.value = allRecords;
this.commodityStatusList[1].badge.value = normalRecords;
this.commodityStatusList[2].badge.value = offRecords;
this.commodityStatusList[3].badge.value = illegalRecords;
this.commodityStatusList[4].badge.value = unCheckedRecords;
}
} }
}, 500); }, 500);
}, },
@ -605,7 +588,6 @@ export default {
this.isNoDownCommodityData = false; this.isNoDownCommodityData = false;
this.isNoCommodityData = false; this.isNoCommodityData = false;
this.currProductStateId = e.value; this.currProductStateId = e.value;
this.commodityList = [];
this.getProductList(); this.getProductList();
}, },
handerCollApse(e) { handerCollApse(e) {

View File

@ -1,5 +1,16 @@
<template> <template>
<view class="specification-container"> <view class="specification-container">
<u-search
class="u-search"
:showAction="true"
actionText="搜索"
:animation="true"
placeholder="请输入订单号搜索"
bgColor="#fff"
v-model="inputKeyword"
@custom="handerSearch"
@input="handerInputSearch"
></u-search>
<view class="specification-content"> <view class="specification-content">
<favorite-loading <favorite-loading
class="specification-loading" class="specification-loading"
@ -274,6 +285,7 @@ export default {
loadingDownSpecificationData: false, loadingDownSpecificationData: false,
isNoDownSpecificationData: false, isNoDownSpecificationData: false,
time: null, time: null,
inputKeyword: "",
}; };
}, },
computed: {}, computed: {},
@ -322,6 +334,10 @@ export default {
pageSize: this.pageSize, pageSize: this.pageSize,
}; };
if (this.inputKeyword) {
params.spec_name = this.inputKeyword;
}
let res = await GetSpecificationList(params); let res = await GetSpecificationList(params);
if (res && res.status == 200) { if (res && res.status == 200) {
if (this.loadingDownSpecificationData) { if (this.loadingDownSpecificationData) {
@ -346,6 +362,17 @@ export default {
this.isRefreshing = false; this.isRefreshing = false;
this.loadingDownSpecificationData = false; this.loadingDownSpecificationData = false;
}, },
handerInputSearch() {
if (this.inputKeyword.length == 0) {
this.getSpecificationList();
}
},
handerSearch() {
if (this.inputKeyword) {
this.pageNum = 1;
this.getSpecificationList();
}
},
handerScrolltolower() { handerScrolltolower() {
clearTimeout(this.time); clearTimeout(this.time);
if (this.isNoDownTypeManageData) return; if (this.isNoDownTypeManageData) return;
@ -509,10 +536,16 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/styles/variables.scss"; @import "@/styles/variables.scss";
.specification-container { .specification-container {
overflow: hidden;
.u-search {
margin: 40rpx 40rpx 20rpx !important;
}
.specification-scroll { .specification-scroll {
-ms-overflow-style: none; /* IE和Edge */ -ms-overflow-style: none; /* IE和Edge */
scrollbar-width: none; /* Firefox */ scrollbar-width: none; /* Firefox */
height: calc(100vh - 300rpx); height: calc(100vh - 384rpx);
} }
.specification-loading { .specification-loading {

View File

@ -710,7 +710,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
@ -720,7 +720,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
@ -730,7 +730,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
} }
@ -744,7 +744,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
@ -754,7 +754,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
@ -764,7 +764,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
@ -774,7 +774,7 @@ export default {
type: "error", type: "error",
duration: 1000, duration: 1000,
}); });
this.isVerify = false; isVerify = false;
break; break;
} }
} }
@ -782,7 +782,11 @@ export default {
if (!isVerify) return; if (!isVerify) return;
this.$emit("handerSpecificationInfoList", this.specificationInfoList); this.$emit(
"handerSpecificationInfoList",
this.specificationInfoList,
this.checkboxValue
);
this.pageBack(true); this.pageBack(true);
}, },
}, },

View File

@ -1,12 +1,33 @@
<template> <template>
<view class="typeManagement-container"> <view class="typeManagement-container">
<u-search
class="u-search"
:showAction="true"
actionText="搜索"
:animation="true"
placeholder="请输入订单号搜索"
bgColor="#fff"
v-model="inputKeyword"
@custom="handerSearch"
@input="handerInputSearch"
></u-search>
<view class="typeManagement-content"> <view class="typeManagement-content">
<view class="no-commodity-type" v-if="typeManageList.length <= 0"> <favorite-loading
class="favorite-loading"
v-show="loading"
:color="'#fe4119'"
text=""
animation="spinner15"
></favorite-loading>
<view
class="no-commodity-type"
v-if="typeManageList.length <= 0 && !loading"
>
<view class="no-commodity-type-bg"></view> <view class="no-commodity-type-bg"></view>
<view class="no-commodity-type-tips">暂无商品类型</view> <view class="no-commodity-type-tips">暂无商品类型</view>
</view> </view>
<scroll-view <scroll-view
v-if="typeManageList.length > 0" v-if="typeManageList.length > 0 && !loading"
scroll-y scroll-y
class="typeManagement-scroll" class="typeManagement-scroll"
:show-scrollbar="false" :show-scrollbar="false"
@ -54,7 +75,6 @@
</view> </view>
</view> </view>
</view> </view>
<view <view
class="m-loading-box" class="m-loading-box"
v-if="typeManageList.length > 0 && !isNotypeManageData" v-if="typeManageList.length > 0 && !isNotypeManageData"
@ -315,10 +335,12 @@ import {
} from "@/api/warehouse/typeManage"; } from "@/api/warehouse/typeManage";
import { GetProductCategoryTree } from "@/api/warehouse/productList"; import { GetProductCategoryTree } from "@/api/warehouse/productList";
import tkiTree from "./components/tree/tree"; import tkiTree from "./components/tree/tree";
import favoriteLoading from "@/components/favorite-loading/favorite-loading.vue";
export default { export default {
name: "typeManagement", name: "typeManagement",
components: { components: {
tkiTree, tkiTree,
favoriteLoading,
}, },
data() { data() {
return { return {
@ -341,6 +363,7 @@ export default {
checkboxList: [], checkboxList: [],
specsCheckboxList: [], specsCheckboxList: [],
currDelectItem: {}, currDelectItem: {},
time: null,
form: { form: {
type_name: "", type_name: "",
type_category_id: "", type_category_id: "",
@ -371,6 +394,7 @@ export default {
}, },
], ],
}, },
inputKeyword: "",
}; };
}, },
computed: {}, computed: {},
@ -410,6 +434,26 @@ export default {
console.log(this.allSpecificationList); console.log(this.allSpecificationList);
} }
}, },
handerScrolltolower() {
clearTimeout(this.time);
if (this.isNoDownTypeManageData) return;
this.loadingDownTypeManageData = true;
this.pageNum = this.pageNum + 1;
this.time = setTimeout(() => {
this.getTypeManageList();
}, 500);
},
handerInputSearch() {
if (this.inputKeyword.length == 0) {
this.getTypeManageList();
}
},
handerSearch() {
if (this.inputKeyword) {
this.pageNum = 1;
this.getTypeManageList();
}
},
findLabelInClassifyList(classifyList, targetId) { findLabelInClassifyList(classifyList, targetId) {
for (const category of classifyList) { for (const category of classifyList) {
if (category.id === targetId) { if (category.id === targetId) {
@ -493,9 +537,14 @@ export default {
return item; return item;
}); });
}, },
handleRefresh() {
this.isRefreshing = true;
this.pageNum = 1;
this.getTypeManageList();
},
async getTypeManageList() { async getTypeManageList() {
if (!this.loadingDownTypeManageData) { if (!this.loadingDownTypeManageData) {
this.loding = true; this.loading = true;
} }
if (this.isRefreshing) { if (this.isRefreshing) {
@ -509,6 +558,10 @@ export default {
pageSize: this.pageSize, pageSize: this.pageSize,
}; };
if (this.inputKeyword) {
params.type_name = this.inputKeyword;
}
let res = await GetTypeManageList(params); let res = await GetTypeManageList(params);
if (res && res.status == 200) { if (res && res.status == 200) {
if (this.loadingDownTypeManageData) { if (this.loadingDownTypeManageData) {
@ -525,6 +578,9 @@ export default {
if (this.typeManageList.length <= 0) { if (this.typeManageList.length <= 0) {
this.isNotypeManageData = true; this.isNotypeManageData = true;
this.isRefreshing = false;
this.loading = false;
return;
} }
if (this.typeManageList.length > 0) { if (this.typeManageList.length > 0) {
@ -537,6 +593,7 @@ export default {
}); });
} }
} }
this.loading = false;
this.loadingDownTypeManageData = false; this.loadingDownTypeManageData = false;
this.isRefreshing = false; this.isRefreshing = false;
}, },
@ -680,6 +737,12 @@ export default {
@import "@/styles/variables.scss"; @import "@/styles/variables.scss";
.typeManagement-container { .typeManagement-container {
overflow: hidden;
.u-search {
margin: 40rpx 40rpx 20rpx !important;
}
.tab-hander { .tab-hander {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
@ -694,6 +757,15 @@ export default {
font-size: 28rpx; font-size: 28rpx;
} }
.typeManagement-scroll {
height: calc(100vh - 170px);
}
.favorite-loading {
margin: 70% auto;
display: flex;
}
.typeManagement_list { .typeManagement_list {
margin: 24rpx; margin: 24rpx;
padding: 24rpx; padding: 24rpx;