Skip to content
官方QQ交流群
pc端ui:468705115   点此加入
移动端ui:468217742   点此加入
技术交流1:87208295   点此加入
技术交流2:787747122   点此加入
官网
云控制台
开放平台
关注微信公众号
代码仓库: 码云

cv-table-editor 商品表格

简要

  • 商品开单用

示例

::: demo

vue
<template>
  <div>
    <div style="margin: 20px auto">
      <cvTableEditor v-model="tableEditData" :tableConfig="tableEditConfig" show-summary :summary-method="getSummaries">
        <cvTbColumnIndex />
        <cvTbEditOpt :tableData="tableEditData" />
        <cvTbEditSearch label="商品" prop="row_name" width="250" @apiFunc="searchApiFunc">
          <template v-slot="{ item }">
            <div class="droplist-item">
              <div class="name">
                {{ item.row_name }}
                <div class="attr" v-if="item.row_attr">[ {{ item.row_attr }}]</div>
              </div>
              <div class="price">¥ {{ item.row_price }}</div>
              <div class="rest">{{ item.attr_stock }}</div>
            </div>
          </template>
        </cvTbEditSearch>
        <cvTbColumnText label="仓库" prop="row_store" width="80" align="center" />
        <cvTbColumnText label="计量单位" prop="unit_name" width="80" align="center" />
        <cvTbEditText label="单价" prop="row_price" width="90" align="right" toFixed="2" />
        <cvTbEditText label="数量" prop="row_num" width="80" align="right" sortable="true" />
        <cvTbEditText label="赠送数量" prop="row_givenum" width="70" align="right" />
        <cvTbColumnText label="金额" prop="row_amount" width="105" align="right" />
        <cvTbEditText label="商品折扣" prop="row_discount" width="75" align="right" />
        <cvTbColumnText label="折扣额" prop="row_disamount" width="105" align="right" />
        <cvTbEditText label="商品优惠金额" prop="row_youhui" width="120" align="right" />
        <cvTbEditText label="税率(%)" prop="row_tax" width="75" align="right" />
        <cvTbColumnText label="税额" prop="row_taxrate" width="100" align="right" />
        <cvTbColumnText label="合计" prop="row_heji" width="105" align="right" fixed="right" />
      </cvTableEditor>
      <div style="height: 20px"></div>
      <cv-form-inline label-width="120px">
        <cv-row>
          <cv-form-item label="订单折扣">
            <cv-input-number v-model="ftfData.pay_discount">
              <template #append>%</template>
            </cv-input-number>
          </cv-form-item>
          <cv-form-item label="订单折扣金额">
            <cv-input-number v-model="ftfData.pay_zhekou">
              <template #prepend>¥</template>
            </cv-input-number>
          </cv-form-item>
          <cv-form-item label="订单优惠金额">
            <cv-input-number v-model="ftfData.pay_youhui">
              <template #prepend>¥</template>
            </cv-input-number>
          </cv-form-item>
        </cv-row>
        <cv-row>
          <cv-form-item label="订单税率">
            <cv-input-number>
              <template #append>%</template>
            </cv-input-number>
          </cv-form-item>
          <cv-form-item label="订单税额">
            <cv-input-number>
              <template #prepend>¥</template>
            </cv-input-number>
          </cv-form-item>
        </cv-row>
        <!-- htmls += '<div class="item-warp cto-clear">';
      htmls += ' <div class="item" style="width:170px"><label>:</label>';
      var initData = this.settings.payInitData;
      var pay_discount = initData.pay_discount || 0;
      pay_discount = parseFloat(pay_discount).toFixed(2);
      var pay_youhui = initData.pay_youhui || 0;
      pay_youhui = parseFloat(pay_youhui).toFixed(2); -->

        <!-- 总报价、总折扣、总优惠 -->
        <cv-form-item label="总报价金额">
          <cv-input-number :value="ftfData.pay_allbaojia" disabled>
            <template #prepend>¥</template>
          </cv-input-number>
        </cv-form-item>
        <cv-form-item label="总折扣金额">
          <cv-input-number :value="ftfData.pay_allzhekou" disabled>
            <template #prepend>¥</template>
          </cv-input-number>
        </cv-form-item>
        <cv-form-item label="总优惠金额">
          <cv-input-number :value="ftfData.pay_allyouhui" disabled>
            <template #prepend>¥</template>
          </cv-input-number>
        </cv-form-item>
        <cv-form-item label="最终合计">
          <cv-input-number :value="ftfData.pay_total" disabled>
            <template #prepend>¥</template>
          </cv-input-number>
        </cv-form-item>
      </cv-form-inline>
    </div>
  </div>
</template>
<script>
var testList = {
  msg: '请求mock数据成功',
  status: 200,
  pagesize: 10,
  page: 1,
  pagemax: 5,
  total: 50,
  data: [
    { row_name: '商品名称', row_store: '仓库A', unit_name: '个', row_price: '12.00', row_num: '3' },
    { row_name: '物料1', row_store: '仓库B', unit_name: '个' },
    { row_name: '物料2', row_store: '仓库C', unit_name: '片' },
    { row_name: '物料3', row_store: '仓库D', unit_name: '条' },
    { row_name: '物料4', row_store: '仓库E', unit_name: '箱' },
    { row_name: '物料5', row_store: '仓库C', unit_name: '个' },
    { row_name: '物料6', row_store: '仓库B', unit_name: '个' }
  ]
};
export default {
  data() {
    return {
      //折上折开启,开启总报价,订单据折扣,订单优惠
      openPayAllCalc: true,
      // 折上折
      ftfData: {
        pay_discount: '0.00',
        pay_zhekou: '0.00',
        pay_youhui: '0.00',
        pay_allbaojia: '0.00',
        pay_allzhekou: '0.00',
        pay_allyouhui: '0.00',
        pay_total: '0.00'
      },

      formData: {},
      tableEditData: testList.data,
      tableEditConfig: {
        apiUrl: '',
        where: {},
        priceOpen: true,
        // 修改价格
        priceFunc: '/comgoods/goodsapi/getAjaxGoodsHistoryPrice',
        priceParam: {
          order_allsign: 'StoreBuy',
          price_type: 'goods_price_cost'
        },
        priceChangeUrl: '/comgoods/goodsapi/pricechangeupdate'
      },
      // searchFunc: this.$request.flagGet('BV4_GOODS_ATTRSKU'),
      searchParam: {},
      searchField: {
        row_price: 'attr_price_market',
        row_stock: 'attr_stock',
        row_unit: 'units_name',
        row_attr: 'attr_value',
        row_name: 'goods_name',
        row_id: 'attr_id',
        row_sn: 'goods_sn'
      }
    };
  },
  watch: {
    tableEditData(newVal) {
      console.log('----tableEditData-----最后的数据:', newVal);
      // this.parseData();
    }
  },
  created() {
    // if (initData != "") {
    //   initData = $.parseJSON(initData);
    // }
  },
  methods: {
    searchApiFunc() {
      // this.$request.flagGet()
    },
    /**
     * 商品合计
     */
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      //   console.log(data);
      columns.forEach((column, index) => {
        let columnProp = column.property || '';
        const values = data.map((item) => Number(item[column.property]));
        switch (columnProp) {
          case 'row_name':
            sums[index] = '总计:';
            break;
          case 'row_num':
            sums[index] = this.doJisuanDantiao(values);
            break;
          case 'row_amount':
          case 'row_disamount':
          case 'row_youhui':
          case 'row_taxrate':
          case 'row_heji':
            sums[index] = this.doJisuanDantiao(values);
            sums[index] = parseFloat(sums[index]).toFixed(2);
            break;
          default:
            sums[index] = '';
            break;
        }
      });
      return sums;
    },
    doJisuanDantiao(values) {
      let jieguo = '';
      if (!values.every((value) => isNaN(value))) {
        jieguo = values.reduce((prev, curr) => {
          const value = Number(curr);
          if (!isNaN(value)) {
            return prev + curr;
          } else {
            return prev;
          }
        }, 0);
        // jieguo += ' 元';
      } else {
        jieguo = 'N/A';
      }
      return jieguo;
    },
    parseData() {
      let lastData = [];
      let newData = [];
      for (let i in this.localTableData) {
        let newItem = this.localTableData[i];
        newItem['row_num'] = parseInt(newItem['row_num']);
        let row_amount = parseFloat(newItem['row_num'] * newItem['row_price']).toFixed(2);
        newItem['row_amount'] = row_amount;
        let row_youhui = 0;
        let row_disamount = 0;
        newItem['row_heji'] = parseFloat(row_amount - row_youhui - row_disamount).toFixed(2);

        newData.push(newItem);
        console.log(newItem.row_id);
        if (newItem.row_id) {
          lastData.push(newItem);
        }
      }
      this.localTableData = newData;
    }
  }
};
</script>

:::

Copyright © 2017 10yun.com | 十云提供计算服务-IPV6 | ctocode组开发