|
|
@@ -0,0 +1,405 @@
|
|
|
+import { getGoodsDataApi } from "@/api/product/index";
|
|
|
+import { mapGetters, mapActions } from "vuex";
|
|
|
+import { copyObject } from "@/utils/util";
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ pageType: "bill", //选择商品页面类别 用于区分不同功能的数据
|
|
|
+
|
|
|
+ suitInfo: [], //成品-商品信息
|
|
|
+ suitClassIndex: 0, //成品-当前商品类别下标
|
|
|
+
|
|
|
+ py: "", //拼音搜索条件
|
|
|
+ type: "", //库存预警时,固定为waring,其他情况不传或者传空
|
|
|
+ autoLoad: true, //自动获取商品信息
|
|
|
+ isLimit: true //选择数量不能大于库存限制
|
|
|
+ };
|
|
|
+ },
|
|
|
+ onLoad(options) {
|
|
|
+ const { pageType } = options;
|
|
|
+ if (pageType) {
|
|
|
+ this.pageType = pageType;
|
|
|
+ }
|
|
|
+ if (this.autoLoad) {
|
|
|
+ this.initGoodsData();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onUnload() {},
|
|
|
+ computed: {
|
|
|
+ ...mapGetters(["getSelectInfo"]),
|
|
|
+ /**
|
|
|
+ * 搜索、初始化数据
|
|
|
+ * */
|
|
|
+ suitFilterProductInfo() {
|
|
|
+ let list = copyObject(this.suitInfo);
|
|
|
+ if (this.py) {
|
|
|
+ let commonList = list.find(ele => {
|
|
|
+ //在常用中过滤
|
|
|
+ return ele.classId == -2;
|
|
|
+ });
|
|
|
+ if (commonList) {
|
|
|
+ let commonChildList = [];
|
|
|
+ if (!this.$util.isEmpty(commonList.child)) {
|
|
|
+ commonList.child.forEach(ele => {
|
|
|
+ let hasName = ele.itemName && ele.itemName.indexOf(this.py) >= 0;
|
|
|
+ let elePy = (ele.py && ele.py.toLocaleUpperCase()) || "";
|
|
|
+ let hasPy = elePy.indexOf(this.py.toLocaleUpperCase()) >= 0;
|
|
|
+ if (hasName || hasPy) {
|
|
|
+ commonChildList.push(ele);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ commonList.child = commonChildList;
|
|
|
+ list = [commonList];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 当前页面选中的商品列表
|
|
|
+ */
|
|
|
+ // selectList() {
|
|
|
+ // return this.getSelectInfo[this.pageType] || [];
|
|
|
+ // },
|
|
|
+ /**
|
|
|
+ * 描点-定位分类
|
|
|
+ * */
|
|
|
+ suitScrollClassId() {
|
|
|
+ const curClass = this.suitInfo[this.suitClassIndex];
|
|
|
+ if (curClass) {
|
|
|
+ return `class_${curClass.classId}`;
|
|
|
+ }
|
|
|
+
|
|
|
+ return "";
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ //选择商品总价
|
|
|
+ // allPrice() {
|
|
|
+ // let price = 0;
|
|
|
+ //
|
|
|
+ // if (this.selectList) {
|
|
|
+ // for (const item of this.selectList) {
|
|
|
+ // const itemInfo = this.getSelectItemById(item.id, item.classId);
|
|
|
+ // if (
|
|
|
+ // itemInfo &&
|
|
|
+ // !this.$util.isEmpty(itemInfo.bigPrice) &&
|
|
|
+ // !this.$util.isEmpty(itemInfo.smallPrice)
|
|
|
+ // ) {
|
|
|
+ // price += item.bigCount * Number(itemInfo.bigPrice);
|
|
|
+ // price += item.smallCount * Number(itemInfo.smallPrice);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // return Math.round(price * 100) / 100;
|
|
|
+ // },
|
|
|
+ //选择商品总数
|
|
|
+ // allCount() {
|
|
|
+ // console.log(444444, this.selectList);
|
|
|
+ // return this.selectList.length;
|
|
|
+ // },
|
|
|
+ /**
|
|
|
+ * 当前选中商品列表中是否有没有库存的商品
|
|
|
+ */
|
|
|
+ // hasNoStock() {
|
|
|
+ // let has = false;
|
|
|
+ // if (this.selectList) {
|
|
|
+ // for (const item of this.selectList) {
|
|
|
+ // const {
|
|
|
+ // bigCount,
|
|
|
+ // smallCount,
|
|
|
+ // bigNum,
|
|
|
+ // bigUnit,
|
|
|
+ // smallNum,
|
|
|
+ // smallUnit,
|
|
|
+ // ratio
|
|
|
+ // } = item;
|
|
|
+ // const ratioNum = Number(ratio);
|
|
|
+ // if (
|
|
|
+ // Number(bigCount) * ratioNum + Number(smallCount) >
|
|
|
+ // Number(bigNum) * ratioNum + Number(smallNum)
|
|
|
+ // ) {
|
|
|
+ // has = true;
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // return has;
|
|
|
+ // }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ ...mapActions(["setSelectInfoByType", "resetSelectInfoByType"]),
|
|
|
+ /**
|
|
|
+ * 成品-请求商品数据
|
|
|
+ */
|
|
|
+ async initGoodsData(extendInfo) {
|
|
|
+ //extendInfo调用时的扩展参数 如 shopId
|
|
|
+ try {
|
|
|
+ let params = {
|
|
|
+ py: this.py,
|
|
|
+ type: this.type
|
|
|
+ };
|
|
|
+ if (extendInfo) {
|
|
|
+ params = { ...params, ...extendInfo };
|
|
|
+ }
|
|
|
+ const { data } = await getGoodsDataApi(params);
|
|
|
+ data.forEach(element => {
|
|
|
+ element.child &&
|
|
|
+ element.child.forEach(child => {
|
|
|
+ child.classId = element.classId;
|
|
|
+ child.className = element.className;
|
|
|
+ });
|
|
|
+ });
|
|
|
+ this.suitInfo = data;
|
|
|
+ this.suitClassIndex = 0;
|
|
|
+ } catch (error) {
|
|
|
+ } finally {
|
|
|
+ uni.hideLoading();
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前选中商品总价
|
|
|
+ */
|
|
|
+ // getSelectItemPrice(item) {
|
|
|
+ // let price = 0;
|
|
|
+ // const { bigCount, smallCount, bigPrice, smallPrice } = item;
|
|
|
+ // let sum =
|
|
|
+ // Number(bigCount) * Number(bigPrice) +
|
|
|
+ // Number(smallCount) * Number(smallPrice);
|
|
|
+ // price = Math.round(sum * 100) / 100;
|
|
|
+ // return price;
|
|
|
+ // },
|
|
|
+ /**
|
|
|
+ * 通过id获取当前选中的商品信息
|
|
|
+ */
|
|
|
+ // getSelectItemById(id, classId) {
|
|
|
+ // let info = {
|
|
|
+ // bigCount: 0, //扎数
|
|
|
+ // smallCount: 0, //支数
|
|
|
+ // autoPrice: 0, //调价价格
|
|
|
+ // itemPrice: 0 //调价价格
|
|
|
+ // };
|
|
|
+ // const item =
|
|
|
+ // this.selectList &&
|
|
|
+ // this.selectList.find(ele => {
|
|
|
+ // return ele.id == id && ele.classId == classId;
|
|
|
+ // });
|
|
|
+ // if (item) {
|
|
|
+ // info = {
|
|
|
+ // ...item,
|
|
|
+ // bigCount: Number(item.bigCount),
|
|
|
+ // smallCount: Number(item.smallCount),
|
|
|
+ // autoPrice: Number(item.autoPrice),
|
|
|
+ // itemPrice: Number(item.itemPrice),
|
|
|
+ // };
|
|
|
+ // }
|
|
|
+ // return info;
|
|
|
+ // },
|
|
|
+ /**
|
|
|
+ * 通过id获取当前选中的商品类别信息 左边菜单角标 当前选中该类别商品多少件
|
|
|
+ */
|
|
|
+ getSuitSelectClassById(classId) {
|
|
|
+ let info = {
|
|
|
+ bigCount: 0, //扎数
|
|
|
+ smallCount: 0 //支数
|
|
|
+ };
|
|
|
+
|
|
|
+ const productItem =
|
|
|
+ this.suitInfo &&
|
|
|
+ this.suitInfo.find(ele => {
|
|
|
+ return ele.classId == classId;
|
|
|
+ });
|
|
|
+ if (productItem && productItem.child) {
|
|
|
+ for (const item of productItem.child) {
|
|
|
+ for (const selectItem of this.selectList) {
|
|
|
+ if (item.id == selectItem.id && item.classId == selectItem.classId) {
|
|
|
+ info.bigCount += Number(selectItem.bigCount);
|
|
|
+ info.smallCount += Number(selectItem.smallCount);
|
|
|
+ info.itemPrice += selectItem.itemPrice?Number(selectItem.itemPrice):'';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return info;
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加商品
|
|
|
+ */
|
|
|
+ suitAddEvent(item) {
|
|
|
+ const list = this.selectList;
|
|
|
+
|
|
|
+ let has = false;
|
|
|
+ for (let index = 0; index < list.length; index++) {
|
|
|
+ const element = list[index];
|
|
|
+ if (element.id == item.id && element.classId == item.classId) {
|
|
|
+ has = true;
|
|
|
+ list[index] = { ...element, bigCount: ++element.bigCount };
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!has) {
|
|
|
+ let info = { classId: item.classId, id: item.id };
|
|
|
+
|
|
|
+ const classInfo =
|
|
|
+ this.suitInfo &&
|
|
|
+ this.suitInfo.find(element => {
|
|
|
+ return element.classId == item.classId && element.child;
|
|
|
+ });
|
|
|
+ if (classInfo) {
|
|
|
+ info = classInfo.child.find(ele => {
|
|
|
+ return ele.id == item.id;
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ let params = {
|
|
|
+ ...info,
|
|
|
+ bigCount: 1, //扎数
|
|
|
+ smallCount: 0, //支数
|
|
|
+ autoPrice: 0 //调价价格
|
|
|
+ };
|
|
|
+ list.push(params);
|
|
|
+
|
|
|
+ // if (info.bigNum && info.bigNum > 0) {
|
|
|
+ // } else {
|
|
|
+ // this.$msg("库存不足");
|
|
|
+ // }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.setSelectInfoByType({ type: this.pageType, info: list });
|
|
|
+ // this.$forceUpdate();
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 减去商品
|
|
|
+ */
|
|
|
+ // delEvent(item) {
|
|
|
+ // const list = this.selectList;
|
|
|
+ // let has = false;
|
|
|
+ // for (let index = 0; index < list.length; index++) {
|
|
|
+ // const element = list[index];
|
|
|
+ // if (element.id == item.id && element.classId == item.classId) {
|
|
|
+ // has = true;
|
|
|
+ //
|
|
|
+ // if (element.bigCount > 0) {
|
|
|
+ // list[index] = { ...element, bigCount: --element.bigCount };
|
|
|
+ // } else if (element.smallCount > 0) {
|
|
|
+ // list[index] = { ...element, smallCount: 0 };
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // if (this.isLimit) {
|
|
|
+ // const { bigCount, smallCount } = list[index];
|
|
|
+ // //超过库存时 设置为库存最大值
|
|
|
+ // const ratio = Number(item.ratio);
|
|
|
+ // if (
|
|
|
+ // Number(bigCount) * ratio + Number(smallCount) >
|
|
|
+ // Number(item.bigNum) * ratio + Number(item.smallNum)
|
|
|
+ // ) {
|
|
|
+ // list[index].bigCount = Number(item.bigNum);
|
|
|
+ // list[index].smallCount = Number(item.smallNum);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (element.bigCount == 0 && element.smallCount == 0) {
|
|
|
+ // list.splice(index, 1);
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if (!has) {
|
|
|
+ // let info = { classId: item.classId, id: item.id };
|
|
|
+ //
|
|
|
+ // const classInfo =
|
|
|
+ // this.productInfo &&
|
|
|
+ // this.productInfo.find(element => {
|
|
|
+ // return element.classId == item.classId && element.child;
|
|
|
+ // });
|
|
|
+ // if (classInfo) {
|
|
|
+ // info = classInfo.child.find(ele => {
|
|
|
+ // return ele.id == item.id;
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // let params = {
|
|
|
+ // ...info,
|
|
|
+ // bigCount: 1, //扎数
|
|
|
+ // smallCount: 0, //支数
|
|
|
+ // autoPrice: 0 //调价价格
|
|
|
+ // };
|
|
|
+ //
|
|
|
+ // list.push(params);
|
|
|
+ // }
|
|
|
+ // this.setSelectInfoByType({ type: this.pageType, info: list });
|
|
|
+ // // this.$forceUpdate();
|
|
|
+ // },
|
|
|
+ //减去所有商品
|
|
|
+ // delAllEvent(item) {
|
|
|
+ // const list = this.selectList;
|
|
|
+ // for (let index = 0; index < list.length; index++) {
|
|
|
+ // const element = list[index];
|
|
|
+ // if (element.id == item.id ) {
|
|
|
+ //
|
|
|
+ // list.splice(index, 1);
|
|
|
+ //
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // this.setSelectInfoByType({ type: this.pageType, info: list });
|
|
|
+ // },
|
|
|
+ /**
|
|
|
+ * 更新商品
|
|
|
+ */
|
|
|
+ // updateItemEvent(item) {
|
|
|
+ // const list = this.selectList;
|
|
|
+ // for (let index = 0; index < list.length; index++) {
|
|
|
+ // const element = list[index];
|
|
|
+ // if (element.id == item.id && element.classId == item.classId) {
|
|
|
+ // const { bigCount, smallCount } = list[index];
|
|
|
+ // //超过库存时 设置为库存最大值
|
|
|
+ // const ratio = Number(item.ratio);
|
|
|
+ // if (this.isLimit) {
|
|
|
+ // if (
|
|
|
+ // Number(bigCount) * ratio + Number(smallCount) >
|
|
|
+ // Number(item.bigNum) * ratio + Number(item.smallNum)
|
|
|
+ // ) {
|
|
|
+ // list[index].bigCount = Number(item.bigNum);
|
|
|
+ // list[index].smallCount = Number(item.smallNum);
|
|
|
+ // list[index].itemPrice = item.itemPrice?Number(item.itemPrice):'';
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // list[index] = {
|
|
|
+ // ...element,
|
|
|
+ // bigCount: Number(item.bigCount),
|
|
|
+ // smallCount: Number(item.smallCount),
|
|
|
+ // itemPrice: item.itemPrice?Number(item.itemPrice):''
|
|
|
+ // };
|
|
|
+ //
|
|
|
+ // break;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // this.setSelectInfoByType({ type: this.pageType, info: list });
|
|
|
+ // // this.$forceUpdate();
|
|
|
+ // },
|
|
|
+ /**
|
|
|
+ * 切换左侧商品类别
|
|
|
+ */
|
|
|
+ suitSwichClass(e) {
|
|
|
+ let cur = e.currentTarget.dataset.current;
|
|
|
+ if (this.suitClassIndex == cur) {
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ this.suitClassIndex = cur;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 搜索对应花材
|
|
|
+ */
|
|
|
+ searchFn() {},
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+};
|