| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- // import { getProductDataApi } from "@/api/product/index";
- import { getProductDataApi,getAllProductDataApi } from "@/api/product/index";
- import { mapGetters, mapActions } from "vuex";
- import { copyObject } from "@/utils/util";
- export default {
- data() {
- return {
- pageType: "bill", //选择商品页面类别 用于区分不同功能的数据
- productInfo: [], //商品信息
- classIndex: 0, //当前商品类别下标
- py: "", //拼音搜索条件
- type: "", //库存预警时,固定为waring,其他情况不传或者传空
- autoLoad: true, //自动获取商品信息
- isLimit: true //选择数量不能大于库存限制
- };
- },
- onLoad(options) {
- const { pageType } = options;
- if (pageType) {
- this.pageType = pageType;
- }
- if (this.autoLoad) {
- this.initDataContrapose();
- }
- },
- onUnload() {},
- computed: {
- ...mapGetters(["getSelectInfo"]),
- filterProductInfoContrapose() {
- let list = copyObject(this.productInfo);
- return list;
- },
- /**
- * 当前页面选中的商品列表
- */
- selectList() {
- return this.getSelectInfo[this.pageType] || [];
- },
- scrollClassId() {
- const curClass = this.productInfo[this.classIndex];
- 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 initDataContrapose(extendInfo) {
- //extendInfo调用时的扩展参数 如 shopId
- try {
- let params = {
- py: this.py,
- type: this.type
- };
- if (extendInfo) {
- params = { ...params, ...extendInfo };
- }
- // const { data } = await getProductDataApi(params);
- const { data } = await getAllProductDataApi(params);
- // data.forEach(element => {
- // element.child && element.child.forEach(child => {
- // child.classId = element.classId;
- // child.className = element.className;
- // });
- // });
- this.productInfo = data.list;
- this.classIndex = 0;
- uni.stopPullDownRefresh();
- } 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) {
- let info = {
- bigCount: 0, //扎数
- smallCount: 0, //支数
- autoPrice: 0 //调价价格
- };
- const item =
- this.selectList && this.selectList.find(ele => {
- return ele.id == id;
- });
- if (item) {
- info = {
- ...item,
- bigCount: Number(item.bigCount),
- smallCount: Number(item.smallCount),
- autoPrice: Number(item.autoPrice)
- };
- }
- return info;
- },
- /**
- * 通过id获取当前选中的商品类别信息 左边菜单角标 当前选中该类别商品多少件
- */
- getSelectClassById(classId) {
- let info = {
- bigCount: 0, //扎数
- smallCount: 0 //支数
- };
- const productItem =
- this.productInfo &&
- this.productInfo.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);
- }
- }
- }
- }
- return info;
- },
- /**
- * 添加商品
- */
- addEvent(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) {
- has = true;
- if (this.isLimit) {
- if (element.bigCount < item.bigNum) {
- list[index] = { ...element, bigCount: ++element.bigCount };
- }
- // else if (element.smallCount < item.smallNum) {
- // list[index] = { ...element, smallCount: ++element.smallCount };
- // }
- } else {
- list[index] = { ...element, bigCount: ++element.bigCount };
- }
- 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);
- this.$msg("库存不足");
- }
- }
- break;
- }
- }
- if (!has) {
- let info = {};
- info =
- this.productInfo && this.productInfo.find(element => {
- return element.id == item.id;
- });
- let params = {
- ...info,
- bigCount: 1, //扎数
- smallCount: 0, //支数
- autoPrice: 0 //调价价格
- };
- if (info.bigNum && info.bigNum > 0) {
- list.push(params);
- } else {
- this.$msg("库存不足");
- }
- }
- this.setSelectInfoByType({ type: this.pageType, info: list });
- },
- /**
- * 减去商品
- */
- 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();
- },
- // /**
- // * 删除商品
- // */
- // removeEvent(item) {
- // const list = this.selectList;
- // for (let index = list.length - 1; index >= 0; index--) {
- // const element = list[index];
- // if (element.id == item.id && element.classId == item.classId) {
- // list.splice(index, 1);
- // break;
- // }
- // }
- // this.setSelectInfoByType({ type: this.pageType, info: list });
- // // this.$forceUpdate();
- // },
- /**
- * 更新商品
- */
- 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] = {
- ...element,
- bigCount: Number(item.bigCount),
- smallCount: Number(item.smallCount)
- };
- break;
- }
- }
- this.setSelectInfoByType({ type: this.pageType, info: list });
- // this.$forceUpdate();
- },
- /**
- * 切换左侧商品类别
- */
- swichClass(e) {
- let cur = e.currentTarget.dataset.current;
- if (this.classIndex == cur) {
- return false;
- } else {
- this.classIndex = cur;
- }
- },
- /**
- * 搜索对应花材
- */
- searchFn() {}
- }
- };
|