lilei 2 лет назад
Родитель
Сommit
316f231390

+ 1 - 1
public/version.json

@@ -1,5 +1,5 @@
 {
   "message": "发现有新版本发布,确定更新系统?",
   "vendorJsVersion": "",
-  "version": 1678151237231
+  "version": 1678183886020
 }

+ 4 - 2
src/views/salesManagement/salesQueryNew/chooseProductModal.vue

@@ -9,7 +9,7 @@
     :wrap-style="{ position: 'absolute' }"
     @close="onClose"
     wrapClassName="chooseProduct-drawer jg-drawer-wrap">
-    <a-spin :spinning="spinning" tip="Loading...">
+    <a-spin :spinning="spinning||newLoading" tip="Loading...">
     <!-- 搜索条件 -->
     <div ref="searchBox" class="table-page-search-wrapper">
       <a-form-model
@@ -474,7 +474,9 @@ export default {
     },
     // 双击列表
     handleClickRow (record) {
-      this.$emit('add', record)
+      if(!this.hasChecked(record)){
+        this.$emit('add', record)
+      }
     },
     //  重置
     resetSearchForm (flag) {

+ 6 - 3
src/views/salesManagement/salesQueryNew/edit.vue

@@ -1,5 +1,5 @@
 <template>
-  <div v-if="showPage" class="jg-page-wrap salesEdit-wrap">
+  <div v-if="showPage" class="jg-page-wrap salesEdit-news-wrap">
       <a-page-header :ghost="false" :backIcon="false" class="header-bar">
         <!-- 自定义的二级文字标题 -->
         <template slot="subTitle">
@@ -272,6 +272,7 @@
     <!-- 添加产品 -->
     <chooseProductModal
       ref="partQuery"
+      :newLoading="isInster"
       :showModal="openChooseProduct"
       :checkedList = "checkedProductList"
       @viewRecord="hanldSalesRecord" 
@@ -469,8 +470,10 @@ export default {
     },
     // 查询已选所以产品
     getChoosedList(params){
+      this.isInster = true
       queryCheckedList(params).then(res => {
         this.checkedProductList = res.data || []
+        this.isInster = false
       })
     },
     // 更新产品列表
@@ -725,8 +728,8 @@ export default {
             this.showSearch = true
             this.$refs.table.refresh(true)
           }
+          this.isInster = false
         }
-        this.isInster = false
         // this.spinning = false
       })
     },
@@ -905,7 +908,7 @@ export default {
 </script>
 
 <style lang="less">
-  .salesEdit-wrap{
+  .salesEdit-news-wrap{
     position: relative;
     height: 100%;
     box-sizing: border-box;

+ 0 - 507
src/views/salesManagement/salesQueryNew/queryPart.vue

@@ -1,507 +0,0 @@
-<template>
-  <div class="productInfoList-wrap">
-    <!-- 搜索条件 -->
-    <div class="table-page-search-wrapper">
-      <a-form-model
-        ref="ruleForm"
-        class="form-model-con"
-        layout="inline"
-        :rules="rules"
-        :model="queryParam"
-        @keyup.enter.native="$refs.table.refresh(true)" >
-        <a-row type="flex" :gutter="5">
-          <a-col :lg="4" :md="6" :sm="12">
-            <a-form-model-item label="产品编码">
-              <a-input id="productInfoList-code" ref="searchProductCode" v-model.trim="queryParam.productCode" allowClear placeholder="请输入产品编码"/>
-            </a-form-model-item>
-          </a-col>
-          <a-col :lg="4" :md="6" :sm="12">
-            <a-form-model-item label="产品名称">
-              <a-input id="productInfoList-name" v-model.trim="queryParam.productName" allowClear placeholder="请输入产品名称"/>
-            </a-form-model-item>
-          </a-col>
-          <a-col :lg="4" :md="6" :sm="12">
-            <a-form-model-item label="原厂编码">
-              <a-input id="productInfoList-origCode" v-model.trim="queryParam.productOrigCode" allowClear placeholder="请输入原厂编码"/>
-            </a-form-model-item>
-          </a-col>
-          <a-col :lg="4" :md="6" :sm="12">
-            <a-form-model-item label="产品分类">
-              <ProductType id="productInfoList-productType" :isDealer="true" @change="changeProductType" v-model="productType"></ProductType>
-            </a-form-model-item>
-          </a-col>
-          <template v-if="advanced">
-            <a-col :lg="4" :md="6" :sm="12">
-              <a-form-model-item label="产品品牌">
-                <ProductBrand id="productInfoList-productBrandSn" v-model="queryParam.brandSn"></ProductBrand>
-              </a-form-model-item>
-            </a-col>
-            <a-col :lg="4" :md="6" :sm="12">
-              <a-form-model-item label="仓库">
-                <a-select
-                  placeholder="请选择仓库"
-                  id="productInfoList-warehouseSn"
-                  allowClear
-                  v-model="queryParam.warehouseSn"
-                  :showSearch="true"
-                  option-filter-prop="children"
-                  :filter-option="filterOption">
-                  <a-select-option v-for="item in warehouseList" :key="item.warehouseSn" :value="item.warehouseSn">{{ item.name }}</a-select-option>
-                </a-select>
-              </a-form-model-item>
-            </a-col>
-            <a-col :lg="6" :md="8" :sm="12" v-if="$hasPermissions('B_salerVinFindProduct')">
-              <a-form-model-item label="车架号(VIN)" prop="vinCode">
-                <a-input id="productInfoList-vinCode" v-model.trim="queryParam.vinCode" allowClear placeholder="请输入车架号(VIN)">
-                  <a-icon @click="uploadFun" :type="vinLoading?'loading':'camera'" slot="addonAfter" :style="{ fontSize: '18px', verticalAlign: 'bottom' }" />
-                </a-input>
-                <input type="file" id="filed" accept="image/jpeg,image/png" hidden="" @change="filePreview">
-              </a-form-model-item>
-            </a-col>
-            <a-col :md="6" :sm="24">
-              <a-form-item label="是否有库存">
-                <a-select @change="handleHasQty" allowClear :value="queryParam.existStockFlag" placeholder="请选择查看是否有库存">
-                  <a-select-option value="1">
-                    是
-                  </a-select-option>
-                  <a-select-option value="0">
-                    否
-                  </a-select-option>
-                </a-select>
-              </a-form-item>
-            </a-col>
-          </template>
-          <a-col flex="200px" style="margin-bottom: 10px;">
-            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="productInfoList-refresh">查询</a-button>
-            <a-button style="margin-left: 5px" @click="resetSearchForm" id="productInfoList-reset">重置</a-button>
-            <a @click="advanced=!advanced" style="margin:0 0 0 10px">
-              {{ advanced ? '收起' : '展开' }}
-              <a-icon :type="advanced ? 'up' : 'down'"/>
-            </a>
-          </a-col>
-          <a-col flex="auto" style="margin-bottom: 15px;display:flex;align-items:center;">
-            <a-checkbox v-model="cost" v-if="$hasPermissions('M_ShowAllCost')" id="salesQuery-cost">成本价</a-checkbox>
-            <a-checkbox v-model="cityPrice" id="salesQuery-cityPrice">市级价</a-checkbox>
-            <a-checkbox v-model="tyuePrice" v-if="$store.state.user.isShowSpecialPrice==1" id="salesQuery-tyuePrice">特约价</a-checkbox>
-            <a-checkbox v-model="zdPrice" id="salesQuery-zdPrice">终端价</a-checkbox>
-          </a-col>
-        </a-row>
-      </a-form-model>
-    </div>
-    <a-alert type="error" style="margin-bottom: 10px;" v-if="vinInfoData&&!vinInfoData.vinInfo">
-      <template slot="message"><a-icon type="exclamation-circle" theme="filled" :style="{ color: '#E70012', fontSize: '15px', verticalAlign: 'sub', marginRight: '3px' }" />抱歉!暂未找到匹配VIN码的车型!</template>
-    </a-alert>
-    <a-alert type="warning" style="margin-bottom: 10px;cursor: pointer;" v-if="vinInfoData&&vinInfoData.vinInfo" @click="openCarInfoModal=true">
-      <template slot="message">
-        <div style="display: flex;justify-content: space-between;align-items: center;" @click="openCarInfoModal=true">
-          <div>
-            <img :src="vinInfoData.vinInfo && vinInfoData.vinInfo.icon?(vinInfoData.vinInfo.icon+'?x-oss-process=image/resize,h_30,m_lfit'):defImg" width="30" height="30" class="imageUrl" style="border-radius: 50%;vertical-align: middle;margin-right: 3px;" />
-            <span style="vertical-align: middle;">{{ vinInfoData.vinInfo.text }}</span>
-          </div>
-          <div style="color: #f90;">
-            <span>查看更多</span> >
-          </div>
-        </div>
-      </template>
-    </a-alert>
-    <!-- 列表 -->
-    <s-table
-      class="sTable"
-      ref="table"
-      size="small"
-      :rowKey="(record) => record.no"
-      rowKeyName="no"
-      :columns="columns"
-      :data="loadData"
-      @dblclick="handleClickRow"
-      :defaultLoadData="false"
-      :pageSize="10"
-      :scroll="{ y: 149 }"
-      bordered>
-      <div slot="costTitle">
-        <a-tooltip placement="top">
-          <template slot="title">
-            产品所在仓库仓位的最近一次入库成本,不包含盘盈入库和仓库调拨入库。
-          </template>
-          <span style="margin-right: 5px;">参考成本价</span> <a-icon type="question-circle" />
-        </a-tooltip>
-      </div>
-      <!-- 售价 -->
-      <template slot="salePrice" slot-scope="text, record">
-        <div style="display: flex;align-items: center;" @dblclick.stop>
-          <a-input-number
-            size="small"
-            v-model="record.price"
-            :precision="2"
-            :min="0"
-            :max="999999"
-            style="width: 100%;"
-            placeholder="请输入" />
-          <span style="color: red;margin: 0 2px;font-size: 14px;" v-if="record.origSalePriceFlag == 1">原</span>
-          <span v-else>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
-        </div>
-      </template>
-      <!-- 销售数量 -->
-      <template slot="nums" slot-scope="text, record">
-        <div @dblclick.stop>
-          <a-input-number
-            size="small"
-            v-model="record.salesNums"
-            :precision="0"
-            :min="0"
-            :max="999999"
-            style="width: 100%;"
-            placeholder="请输入" />
-        </div>
-      </template>
-      <!-- 操作 -->
-      <template slot="action" slot-scope="text, record">
-        <a-button
-          size="small"
-          type="link"
-          class="button-primary"
-          @click="handleAdd(record)"
-          id="productInfoList-edit-btn">添加</a-button>
-        <a-button
-          size="small"
-          type="link"
-          class="button-primary"
-          @click="handleDetail(record)"
-          id="productInfoList-detail-btn"
-          style="margin-left: 5px;">销售记录</a-button>
-      </template>
-    </s-table>
-    <!-- 销售记录 -->
-    <product-salesRecord-modal ref="salseRecord" :openModal="openModal" @close="closeModal" />
-    <!-- 查看车辆信息 -->
-    <car-info-modal ref="carInfoModal" :openModal="openCarInfoModal" :infoData="vinInfoData&&vinInfoData.vinInfo" @close="openCarInfoModal=false" />
-  </div>
-</template>
-
-<script>
-import { commonMixin } from '@/utils/mixin'
-import { querySumByProductLocation } from '@/api/stock'
-import { warehouseAllList } from '@/api/warehouse'
-import productSalesRecordModal from './productSalesRecordModal.vue'
-import carInfoModal from './carInfoModal.vue'
-import ProductType from '../../common/productType.js'
-import ProductBrand from '../../common/productBrand.js'
-import { STable, VSelect, Upload } from '@/components'
-import { supperCodeByVin, vinCodeParse } from '@/api/sales'
-import defImg from '@/assets/def_img@2x.png'
-export default {
-  name: 'QueryPart',
-  components: { STable, VSelect, Upload, productSalesRecordModal, carInfoModal, ProductType, ProductBrand },
-  mixins: [commonMixin],
-  props: {
-    newLoading: Boolean
-  },
-  data () {
-    return {
-      advanced: false, // 高级搜索 展开/关闭
-      vinLoading: false,
-      productType: [],
-      defImg,
-      queryParam: { //  查询条件
-        customerSn: '',
-        salesBillSn: '',
-        salePriceType: '',
-        productCode: '', //  产品编码
-        productName: '', //  产品名称
-        productOrigCode: '', //  原厂编码
-        vinCode: '',
-        productCodeList: undefined, //  车架号
-        brandSn: undefined, //  产品品牌
-        productTypeSn1: '', //  产品一级分类
-        productTypeSn2: '', //  产品二级分类
-        productTypeSn3: '', //  产品三级分类
-        warehouseSn: undefined, //  仓库、
-        enableFlag: '1',
-        existStockFlag: undefined
-      },
-      priceType: '',
-      buyerSn: '',
-      rules: {
-        vinCode: [ { len: 17, message: '请输入正确的车架号(VIN)', trigger: 'change' } ]
-      },
-      disabled: false, //  查询、重置按钮是否可操作
-      warehouseList: [], // 仓库列表
-      vinInfoData: null,
-      // 加载数据方法 必须为 Promise 对象
-      loadData: parameter => {
-        const _this = this
-        _this.queryParam.salePriceType = _this.priceType
-        _this.queryParam.customerSn = _this.buyerSn
-        // 排序
-        if (parameter.sortField == 'productCode') {
-          parameter.sortField = 'code'
-          parameter.sortAlias = 'product '
-        }
-        if (parameter.sortField == 'brandName') {
-          parameter.sortField = 'firstChar'
-          parameter.sortAlias = 'brand'
-        }
-        if (parameter.sortField == 'warehouseName') {
-          parameter.sortField = 'warehouseSn'
-          parameter.sortAlias = 'sd'
-        }
-        const params = Object.assign(parameter, _this.queryParam)
-        if (_this.queryParam.vinCode && _this.queryParam.vinCode.length == 17 && !this.onlyList) { //  输入vin,查出vin码信息后请求列表数据
-          _this.disabled = true
-          return supperCodeByVin({ vin: _this.queryParam.vinCode }).then(res => {
-            if (res.status == 200) {
-              _this.vinInfoData = res.data
-              params.productCodeList = res.data.partCodeList || []
-              return _this.getList(params)
-            } else {
-              _this.vinInfoData = null
-              _this.$refs.table.localLoading = false
-              _this.$refs.table.clearTable()
-            }
-          })
-        } else if (_this.queryParam.vinCode && _this.queryParam.vinCode.length < 17 && !this.onlyList) { // 输入vin,但vin码不符合标准,不查vin码信息,不请求列表数据
-          _this.$refs.table.localLoading = false
-          _this.$refs.table.clearTable()
-        } else if (this.onlyList) {
-          _this.disabled = true
-          if (_this.queryParam.vinCode && _this.vinInfoData) {
-            return _this.getList(Object.assign(params, { productCodeList: _this.vinInfoData.partCodeList }))
-          } else {
-            return _this.getList(params)
-          }
-        } else { //  未输入vin码信息,只查列表数据
-          _this.disabled = true
-          return _this.getList(params)
-        }
-      },
-      openModal: false, //  查看客户详情  弹框
-      cost: false, // 成本价
-      cityPrice: false, // 城市价
-      tyuePrice: false, // 特约价
-      zdPrice: false, // 终端价
-      openCarInfoModal: false,
-      onlyList: false
-    }
-  },
-  computed: {
-    columns () {
-      const _this = this
-      const arr = [
-        { title: '产品编码', dataIndex: 'productCode', width: '15%', align: 'center', sorter: true, customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'productName', width: '18%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
-        { title: '原厂编码', dataIndex: 'productOrigCode', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '品牌', dataIndex: 'brandName', width: '11%', align: 'center', sorter: true, customRender: function (text) { return text || '--' } },
-        { title: '仓库', dataIndex: 'warehouseName', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '仓位', dataIndex: 'warehouseLocationName', width: '8%', align: 'center', customRender: function (text) { return text || '--' } }
-      ]
-      if (this.cost) {
-        arr.push({ slots: { title: 'costTitle' }, dataIndex: 'putCost', width: '8%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
-      }
-      if (this.cityPrice) {
-        arr.push({ title: '市级价', dataIndex: 'dealerProduct.cityPrice', width: '5%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
-      }
-      if (this.tyuePrice) {
-        arr.push({ title: '特约价', dataIndex: 'dealerProduct.specialPrice', width: '5%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
-      }
-      if (this.zdPrice) {
-        arr.push({ title: '终端价', dataIndex: 'dealerProduct.terminalPrice', width: '5%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
-      }
-
-      return arr.concat([
-        { title: '单位', dataIndex: 'unit', width: '4%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '售价', dataIndex: 'salePrice', scopedSlots: { customRender: 'salePrice' }, width: '7%', align: 'center' },
-        { title: '销售数量', dataIndex: 'salesNums', scopedSlots: { customRender: 'nums' }, width: '6%', align: 'center' },
-        { title: '库存数量', dataIndex: 'currentQty', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '操作', dataIndex: 'action', scopedSlots: { customRender: 'action' }, width: '10%', align: 'center' }
-      ])
-    }
-  },
-  created () {
-    // 仓库
-    if (this.warehouseList.length == 0) {
-      this.getWarehouse()
-    }
-  },
-  methods: {
-    getList (params) {
-      const _this = this
-      return querySumByProductLocation(params).then(res => {
-        let data
-        this.onlyList = false
-        if (res.status == 200) {
-          data = res.data
-          data.list = data.list.filter(item => item != null)
-          const no = (data.pageNo - 1) * data.pageSize
-          for (var i = 0; i < data.list.length; i++) {
-            data.list[i].no = data.list[i].productSn + '_' + (no + i + 1)
-            data.list[i].salesNums = 1
-            data.list[i].currentQty = data.list[i].currentQty || 0
-            data.list[i].price = data.list[i].origSalePriceFlag == 0 ? data.list[i].lastSalePrice : data.list[i].origSalePriceFlag == 1 ? data.list[i].salePrice : data.list[i].selfSaleprice
-            data.list[i].productOrigCode = data.list[i].productOrigCode ? data.list[i].productOrigCode.trim() : ''
-          }
-          if (!params.vinCode) {
-            _this.vinInfoData = null
-          }
-        } else {
-          data = {
-            list: [],
-            pageNo: 1,
-            pageSize: 10
-          }
-        }
-        _this.disabled = false
-        console.log(data)
-        return data
-      })
-    },
-    // vin  change
-    vinCodeChange (e) {
-      if (e.target.value.length == 17) {
-        supperCodeByVin({ vin: e.target.value }).then(res => {
-          if (res.status == 200) {
-            this.queryParam.productCodeList = res.data
-          } else {
-            this.queryParam.productCodeList = undefined
-          }
-        })
-      } else {
-        this.queryParam.productCodeList = undefined
-      }
-    },
-    // 双击列表
-    handleClickRow (record) {
-      this.$emit('add', record)
-    },
-    //  重置
-    resetSearchForm () {
-      this.queryParam.productCode = ''
-      this.queryParam.productName = ''
-      this.queryParam.productOrigCode = ''
-      this.queryParam.brandSn = undefined
-      this.queryParam.productTypeSn1 = ''
-      this.queryParam.productTypeSn2 = ''
-      this.queryParam.productTypeSn3 = ''
-      this.queryParam.warehouseSn = undefined
-      this.queryParam.productCodeList = undefined
-      this.queryParam.existStockFlag = undefined
-      this.queryParam.vinCode = ''
-      this.productType = []
-      this.$refs.ruleForm.resetFields()
-      this.$refs.table.refresh(true)
-      this.vinInfoData = null
-    },
-    pageInit (buyerSn, priceType, salesBillSn) {
-      this.priceType = priceType || ''
-      this.buyerSn = buyerSn || ''
-      this.queryParam.salesBillSn = salesBillSn || ''
-      if (this.onlyList) { // 不清空查询条件
-        this.$refs.table.refresh()
-      } else {
-        this.resetSearchForm()
-      }
-      this.$refs.searchProductCode.focus()
-    },
-    // 刷新当前页面
-    resetCurForm () {
-      this.$refs.table.refresh()
-    },
-    // 清空数据
-    clearTable () {
-      this.vinInfoData = null
-      this.$refs.ruleForm.resetFields()
-      this.$refs.table.clearTable()
-    },
-    filterOption (input, option) {
-      return (
-        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
-      )
-    },
-    // 选择配件
-    handleAdd (row) {
-      const _this = this
-      console.log(row.price, row.lastSalePrice, row.salePrice, row.lastSalePrice < row.salePrice)
-      if (row.lastSalePrice && (row.price < row.salePrice)) {
-        _this.$confirm({
-          title: '提示',
-          content: '售价低于定价,是否仍继续添加?',
-          centered: true,
-          closable: true,
-          onOk () {
-            _this.$emit('add', row)
-          }
-        })
-      } else {
-        _this.$emit('add', row)
-      }
-    },
-    // 销售记录
-    handleDetail (row) {
-      this.openModal = true
-      this.$refs.salseRecord.getDetail(this.buyerSn, row.productSn, row)
-    },
-    //  关闭弹框
-    closeModal () {
-      this.openModal = false
-    },
-    uploadFun () {
-      document.getElementById('filed').click()
-    },
-    filePreview (e) {
-      const _this = this
-      var files = e.target.files[0]
-      const formData = new FormData()
-      formData.append('savePathType', 'local')
-      formData.append('file', files)
-      this.vinLoading = true
-      vinCodeParse(formData).then(res => {
-        if (res.type == 'application/json') {
-          var reader = new FileReader()
-          reader.addEventListener('loadend', function () {
-            const obj = JSON.parse(reader.result)
-            if (obj.status == 200) {
-              _this.queryParam.vinCode = obj.data || ''
-              // 移除表单项的校验结果
-              _this.$refs.ruleForm.clearValidate('vinCode')
-            } else {
-              _this.$notification.error({
-                message: '提示',
-                description: obj.message
-              })
-            }
-            _this.vinLoading = false
-            document.getElementById('filed').value = ''
-          })
-          reader.readAsText(res)
-        } else {
-          _this.vinLoading = false
-        }
-      })
-    },
-    // 仓库
-    getWarehouse () {
-      warehouseAllList({}).then(res => {
-        if (res.status == 200) {
-          this.warehouseList = res.data
-        } else {
-          this.warehouseList = []
-        }
-      })
-    },
-    //  产品分类  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] : ''
-    },
-    // 查看是否有库存、
-    handleHasQty (val) {
-      this.queryParam.existStockFlag = val
-    }
-  },
-  watch: {
-    cost (newValue, oldValue) {
-      this.$emit('isCost', newValue)
-    }
-  }
-}
-</script>