|
@@ -0,0 +1,404 @@
|
|
|
+<template>
|
|
|
+ <div class="productInfoList-wrap">
|
|
|
+ <!-- alert -->
|
|
|
+ <div style="margin-bottom: 10px;display: flex;align-items: center;">
|
|
|
+ <div style="display: flex;align-items: center;">
|
|
|
+ <a-button type="primary" :disabled="newLoading" class="button-info" @click="handlePlAdd">批量删除</a-button>
|
|
|
+ <span style="margin-left: 10px;" v-if="selectedRowKeys.length">已选 {{ selectedRowKeys.length }} 项</span>
|
|
|
+ </div>
|
|
|
+ <div style="padding-left: 20px;" v-if="detailData">
|
|
|
+ 本次下推款数:<strong>{{ detailData&&(detailData.totalQty || detailData.totalQty==0) ? detailData.totalQty : '--' }}</strong>;
|
|
|
+ 本次下推数量:<strong>{{ detailData&&(detailData.totalCancelQty || detailData.totalCancelQty==0) ? detailData.totalCancelQty : '--' }}</strong>;
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <a-spin :spinning="spinning" tip="Loading...">
|
|
|
+ <ve-table
|
|
|
+ border-y
|
|
|
+ v-show="!showEmpty"
|
|
|
+ :scroll-width="0"
|
|
|
+ :max-height="tableHeight"
|
|
|
+ :show-header="showTableHead"
|
|
|
+ :row-style-option="{clickHighlight: true}"
|
|
|
+ :cellSelectionOption="{enable: false}"
|
|
|
+ :virtual-scroll-option="{enable: true}"
|
|
|
+ :columns="columns"
|
|
|
+ :table-data="dataSource"
|
|
|
+ row-key-field-name="id"
|
|
|
+ :cell-style-option="cellStyleOption"
|
|
|
+ :cell-span-option="cellSpanOption"
|
|
|
+ :column-width-resize-option="columnWidthResizeOption"
|
|
|
+ :checkbox-option="checkboxOption"
|
|
|
+ />
|
|
|
+ <div v-show="showEmpty" class="empty-data">暂无数据</div>
|
|
|
+ </a-spin>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <script>
|
|
|
+ import { commonMixin } from '@/utils/mixin'
|
|
|
+ import { deleteBatch, waitDispatchDetailAllList, updateQty } from '@/api/waitDispatchDetail'
|
|
|
+ import { findBySalesBillSn } from '@/api/dispatch'
|
|
|
+
|
|
|
+ import { STable, VSelect } from '@/components'
|
|
|
+ import chooseWarehouse from '@/views/common/chooseWarehouse'
|
|
|
+ export default {
|
|
|
+ name: 'DetailProductList',
|
|
|
+ mixins: [commonMixin],
|
|
|
+ components: { STable, VSelect, chooseWarehouse },
|
|
|
+ props: {
|
|
|
+ newLoading: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false
|
|
|
+ },
|
|
|
+ maxHeight:{
|
|
|
+ type: [String,Number],
|
|
|
+ default: '300'
|
|
|
+ },
|
|
|
+ showHeader: {
|
|
|
+ type: Boolean,
|
|
|
+ default: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data () {
|
|
|
+ return {
|
|
|
+ queryParam: {
|
|
|
+ dispatchBillSn
|
|
|
+ },
|
|
|
+ disabled: false, // 查询、重置按钮是否可操作
|
|
|
+ spinning: false,
|
|
|
+ dataSource: [],
|
|
|
+ tableHeight: this.maxHeight,
|
|
|
+ cellStyleOption: {
|
|
|
+ bodyCellClass: ({ row, column, rowIndex }) => {
|
|
|
+ if (row.id.indexOf('promo-')>=0 && column.field === "no") {
|
|
|
+ return "table-body-cell-no";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+ columnWidthResizeOption: {
|
|
|
+ // default false
|
|
|
+ enable: true,
|
|
|
+ // column resize min width
|
|
|
+ minWidth: 50
|
|
|
+ },
|
|
|
+ cellSpanOption: {
|
|
|
+ bodyCellSpan: this.bodyCellSpan,
|
|
|
+ },
|
|
|
+ showEmpty: false,
|
|
|
+ showTableHead: true,
|
|
|
+ disableSelectedRowKeys: [],
|
|
|
+ selectedRowKeys: []
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ checkboxOption () {
|
|
|
+ return {
|
|
|
+ disableSelectedRowKeys: this.disableSelectedRowKeys,
|
|
|
+ selectedRowKeys: this.selectedRowKeys,
|
|
|
+ // 行选择改变事件
|
|
|
+ selectedRowChange: ({ row, isSelected, selectedRowKeys }) => {
|
|
|
+ this.selectedRowChange({ row, isSelected, selectedRowKeys })
|
|
|
+ },
|
|
|
+ // 全选改变事件
|
|
|
+ selectedAllChange: ({ isSelected, selectedRowKeys }) => {
|
|
|
+ this.selectedAllChange({ isSelected, selectedRowKeys })
|
|
|
+ },
|
|
|
+ }
|
|
|
+ },
|
|
|
+ columns () {
|
|
|
+ const _this = this
|
|
|
+ const priceFormat = function(data){
|
|
|
+ return _this.toThousands(data) || '--'
|
|
|
+ }
|
|
|
+ const numsFormat = function(data){
|
|
|
+ return data || data == 0 ? data : '--'
|
|
|
+ }
|
|
|
+ const codeFormat = function(record,data,h){
|
|
|
+ let ftext = ''
|
|
|
+ let fcolor = ''
|
|
|
+ if(record.promotionFlag == 'GIFT'){
|
|
|
+ ftext = '促'
|
|
|
+ fcolor = '#52c41a'
|
|
|
+ }
|
|
|
+ if(record.promotionFlag == 'REGULAR'){
|
|
|
+ ftext = '正'
|
|
|
+ fcolor = '#108ee9'
|
|
|
+ }
|
|
|
+ if(record.promotionFlag == 'DISCOUNT'){
|
|
|
+ ftext = '特'
|
|
|
+ fcolor = '#faad14'
|
|
|
+ }
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <span style="padding-right: 15px;">{data}</span>
|
|
|
+ {ftext?(<a-badge count={ftext} number-style={{ backgroundColor: fcolor, zoom:'80%' }}></a-badge>):''}
|
|
|
+ {Number(record.stockQty||0) < Number(record.unpushedQty||0)?(<a-badge count="缺" number-style={{ zoom:'80%' }}></a-badge>):''}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ // 输入框
|
|
|
+ const inputFormat = function(record,data,h) {
|
|
|
+ if(record.surplusQty>0){
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <a-input-number
|
|
|
+ size="small"
|
|
|
+ vModel={record.cancelNums}
|
|
|
+ precision={0}
|
|
|
+ min={0}
|
|
|
+ max={record.surplusQty}
|
|
|
+ style="width: 100%;"
|
|
|
+ placeholder="请输入" />
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return '--'
|
|
|
+ }
|
|
|
+ // 操作按钮
|
|
|
+ const actionFormat = function(record,data,h) {
|
|
|
+ if(record.surplusQty>0){
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ <a-button
|
|
|
+ size="small"
|
|
|
+ type="link"
|
|
|
+ class="button-info"
|
|
|
+ onClick={()=>_this.handleAdd(record)}
|
|
|
+ >添加</a-button>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ return '--'
|
|
|
+ }
|
|
|
+ // 编号,并且格式化活动分类行
|
|
|
+ const noFormat = function(record,data,h){
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ {record.id.indexOf('promo-')>=0 ? (
|
|
|
+ <div class="active-title">
|
|
|
+ {record.promo?(
|
|
|
+ <div>
|
|
|
+ <strong style="margin-right:10px;font-size:14px;">{record.promo.promotion.title} ({record.promo.promotionRule.description})</strong>
|
|
|
+ <span style="margin-left:10px;color:#00aaff;cursor: pointer;" onClick={()=>this.showDesc(record)}>
|
|
|
+ <a-icon title="查看活动详情" type="eye"/> 活动详情
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ ):(<div></div>)}
|
|
|
+ <div>
|
|
|
+ 总售价:<strong>12333</strong>;
|
|
|
+ 总款数:<strong>22</strong>;
|
|
|
+ 总数量:<strong>134</strong>;
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ ):(<span>{data}</span>)}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ let arr= [
|
|
|
+ { title: "", field: "", key: "acheck", type: "checkbox", align: "center" },
|
|
|
+ { title: '序号', field: 'no',key: "a", width: 50, align: 'center', operationColumn: false,renderBodyCell: ({ row, column, rowIndex }, h) => { return noFormat(row,row[column.field],h)} },
|
|
|
+ { title: '产品编码', field: 'productCode',key: "b", width: 150, align: 'center',operationColumn: false,renderBodyCell: ({ row, column, rowIndex }, h) => { return codeFormat(row,row[column.field],h)} },
|
|
|
+ { title: '产品名称', field: 'productName',key: "c", width: 250, align: 'center',operationColumn: false , ellipsis: { showTitle: true },renderBodyCell: ({ row, column, rowIndex }, h) => { return row[column.field] || '--'}},
|
|
|
+ { title: '原厂编码', field: 'productOrigCode',key: "d", width: 150, align: 'center',operationColumn: false,ellipsis: { showTitle: true },renderBodyCell: ({ row, column, rowIndex }, h) => { return row[column.field] || '--'} },
|
|
|
+ { title: '出库仓库', field: 'warehouseName',key: "e", width: 100, align: 'center',operationColumn: false,renderBodyCell: ({ row, column, rowIndex }, h) => { return row[column.field] || '--'}}
|
|
|
+ ]
|
|
|
+ if (this.$hasPermissions('B_salesDispatch_salesPrice')) { // 售价权限
|
|
|
+ arr.push({ title: '销售价', field: 'price', width: 80,key: "f", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return priceFormat(row[column.field])} })
|
|
|
+ }
|
|
|
+ if (this.$hasPermissions('B_salesDispatch_costPrice')) {
|
|
|
+ arr.push({ title: '成本价', field: 'showCost', width: 80,key: "g", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return priceFormat(row[column.field])} })
|
|
|
+ }
|
|
|
+ arr = arr.concat([
|
|
|
+ { title: '出库仓库', field: 'warehouseName',key: "h", width: 100, align: 'center',operationColumn: false,renderBodyCell: ({ row, column, rowIndex }, h) => { return row[column.field] || '--'}},
|
|
|
+ { title: '单位', field: 'productOrigUnit',key: "i", width: 80, align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return row[column.field] || '--'}},
|
|
|
+ { title: '可用库存', field: 'stockQty', width: 80,key: "j", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return numsFormat(row[column.field])} },
|
|
|
+ { title: '销售数量', field: 'qty', width: 80,key: "k", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return numsFormat(row[column.field])} },
|
|
|
+ { title: '已取消', field: 'cancelQty', width: 80,key: "o", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return numsFormat(row[column.field])} },
|
|
|
+ { title: '已下推', field: 'pushedQty', width: 80,key: "p", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return numsFormat(row[column.field])} },
|
|
|
+ { title: '待下推', field: 'surplusQty', width: 80,key: "q", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return numsFormat(row[column.field])} },
|
|
|
+ { title: '取消数量', field: 'surplusQty', width: 80,key: "r", align: 'center',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return inputFormat(row,row[column.field],h)} },
|
|
|
+ { title: '操作', field: 'action', width: 80,key: "s", align: 'center',fixed: 'right',operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return actionFormat(row,row[column.field],h)} },
|
|
|
+ ])
|
|
|
+
|
|
|
+ return arr
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 产品分类 change
|
|
|
+ changeProductType (val, opt) {
|
|
|
+ this.queryParam.productTypeSn1 = val[0] ? val[0] : ''
|
|
|
+ this.queryParam.productTypeSn2 = val[1] ? val[1] : ''
|
|
|
+ this.queryParam.productTypeSn3 = val[2] ? val[2] : ''
|
|
|
+ },
|
|
|
+ // 合并活动分类单元格
|
|
|
+ bodyCellSpan({ row, column, rowIndex }) {
|
|
|
+ if (row.id.indexOf('promo-')>=0) {
|
|
|
+ if(column.field=='no'){
|
|
|
+ return {
|
|
|
+ rowspan: 1,
|
|
|
+ colspan: 17,
|
|
|
+ };
|
|
|
+ }else{
|
|
|
+ return {
|
|
|
+ rowspan: 0,
|
|
|
+ colspan: 0,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 选择单元格
|
|
|
+ selectedRowChange({ row, isSelected, selectedRowKeys }){
|
|
|
+ // console.log(row, isSelected, selectedRowKeys);
|
|
|
+ this.selectedRowKeys = selectedRowKeys;
|
|
|
+ },
|
|
|
+ // 全选行
|
|
|
+ selectedAllChange({ isSelected, selectedRowKeys }){
|
|
|
+ // console.log(isSelected, selectedRowKeys);
|
|
|
+ this.selectedRowKeys = selectedRowKeys;
|
|
|
+ },
|
|
|
+ // 获取销售单参与的活动列表
|
|
|
+ getActiveList(){
|
|
|
+ salesPromoQueryList({ salesBillSn: this.salesBillSn }).then(res => {
|
|
|
+ if(res.status == 200){
|
|
|
+ this.activeList = res.data || []
|
|
|
+ }
|
|
|
+ this.$nextTick(()=>{
|
|
|
+ this.searchTable()
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ async searchTable(){
|
|
|
+ this.selectedRowKeys = []
|
|
|
+ this.disableSelectedRowKeys = []
|
|
|
+ this.dataSource = []
|
|
|
+ this.disabled = true
|
|
|
+ this.spinning = true
|
|
|
+ this.queryParam.salesBillSn = this.salesBillSn
|
|
|
+ this.queryParam.showStock = true
|
|
|
+ const params = this.queryParam
|
|
|
+ // 正常产品
|
|
|
+ const listData = await waitDispatchDetailAllList(params).then(res => res.data)
|
|
|
+ const countData = await findBySalesBillSn({salesBillSn: this.salesBillSn}).then(res => res.data)
|
|
|
+ console.log(listData)
|
|
|
+ this.dataSource = listData
|
|
|
+
|
|
|
+ // 格式化数据
|
|
|
+ let f = 0
|
|
|
+ this.dataSource.map((item,i) => {
|
|
|
+ if(item.id.indexOf('promo-')>=0){f = f - 1}
|
|
|
+ item.no = i + 1 + f
|
|
|
+ const productCode = (item.productEntity && item.productEntity.code) || (item.dealerProductEntity && item.dealerProductEntity.code)
|
|
|
+ const productName = (item.productEntity && item.productEntity.name) || (item.dealerProductEntity && item.dealerProductEntity.name)
|
|
|
+ const productOrigCode = (item.productEntity && item.productEntity.origCode) || (item.dealerProductEntity && item.dealerProductEntity.origCode)
|
|
|
+ const productOrigUnit = (item.productEntity && item.productEntity.unit) || (item.dealerProductEntity && item.dealerProductEntity.unit)
|
|
|
+ item.productCode = productCode || '--'
|
|
|
+ item.productName = productName || '--'
|
|
|
+ item.productOrigCode = productOrigCode == ' ' ? '--' : productOrigCode
|
|
|
+ item.productOrigUnit = productOrigUnit || '--'
|
|
|
+ if(item.stockQty<0 || !item.stockQty){
|
|
|
+ this.disableSelectedRowKeys.push(item.id)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.tableHeight = (this.showEmpty ? 200 : this.maxHeight) + 'px'
|
|
|
+ this.spinning = false
|
|
|
+ this.disabled = false
|
|
|
+ },
|
|
|
+ // 重置
|
|
|
+ resetSearchForm () {
|
|
|
+ this.queryParam.ptype = '0'
|
|
|
+ this.queryParam.productCode = ''
|
|
|
+ this.queryParam.productName = ''
|
|
|
+ this.queryParam.promotionFlag = undefined
|
|
|
+ this.queryParam.brandSn = undefined
|
|
|
+ this.queryParam.productTypeSn1 = ''
|
|
|
+ this.queryParam.productTypeSn2 = ''
|
|
|
+ this.queryParam.productTypeSn3 = ''
|
|
|
+ this.queryParam.warehouseSn = undefined
|
|
|
+ this.productType = []
|
|
|
+ this.dataSource = []
|
|
|
+ this.searchTable()
|
|
|
+ },
|
|
|
+ pageInit (salesBillSn, detailData) {
|
|
|
+ this.salesBillSn = salesBillSn
|
|
|
+ this.detailData = detailData
|
|
|
+ // 获取活动列表
|
|
|
+ this.getActiveList()
|
|
|
+ },
|
|
|
+ // 清空选项
|
|
|
+ clearSelectTable () {
|
|
|
+ this.selectedRowKeys = []
|
|
|
+ },
|
|
|
+ // 添加
|
|
|
+ handleAdd (row) {
|
|
|
+ if (row.stockQty > 0) { // 可用库存大于0才可添加
|
|
|
+ this.$emit('addProduct', [row.salesBillDetailSn])
|
|
|
+ } else {
|
|
|
+ this.$message.warning('库存为0,不可添加!')
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 批量添加
|
|
|
+ handlePlAdd () {
|
|
|
+ const _this = this
|
|
|
+ const chooseList = this.selectedRowKeys
|
|
|
+ if (chooseList.length == 0) {
|
|
|
+ _this.$message.warning('请先选择产品!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const chooseRow = this.dataSource.filter(item => chooseList.includes(item.id) && item.id.indexOf('promo-')<0)
|
|
|
+ const obj = []
|
|
|
+ chooseRow && chooseRow.map(item => {
|
|
|
+ if (item.stockQty > 0) {
|
|
|
+ obj.push(item.salesBillDetailSn)
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ this.$confirm({
|
|
|
+ title: '提示',
|
|
|
+ content: '确认要批量添加到待下推列表吗?',
|
|
|
+ centered: true,
|
|
|
+ closable: true,
|
|
|
+ onOk () {
|
|
|
+ _this.$emit('addProduct', obj)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 批量取消
|
|
|
+ handlePlCancel () {
|
|
|
+ const _this = this
|
|
|
+ const chooseList = this.selectedRowKeys
|
|
|
+ if (chooseList.length == 0) {
|
|
|
+ _this.$message.warning('请先选择产品!')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const chooseRow = this.dataSource.filter(item => chooseList.includes(item.id) && item.id.indexOf('promo-')<0)
|
|
|
+ const obj = []
|
|
|
+ chooseRow && chooseRow.map(item => {
|
|
|
+ obj.push({
|
|
|
+ 'cancelQty': item.cancelNums,
|
|
|
+ 'salesBillDetailSn': item.salesBillDetailSn
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
+ this.$emit('cancelProduct', obj)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ </script>
|
|
|
+ <style lang="less">
|
|
|
+ .ve-table-body-td{
|
|
|
+ .active-title{
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 10px;
|
|
|
+ background: #f3f8fa;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .ve-table .ve-table-container .ve-table-content-wrapper table.ve-table-content tbody.ve-table-body tr.ve-table-body-tr td.table-body-cell-no,
|
|
|
+ .ve-table .ve-table-container .ve-table-content-wrapper table.ve-table-content tbody.ve-table-body tr.ve-table-expand-tr td.table-body-cell-no{
|
|
|
+ padding: 0;
|
|
|
+ }
|
|
|
+ </style>
|