Browse Source

退货对接

lilei 2 years ago
parent
commit
479ba0ff54

+ 1 - 1
public/version.json

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

+ 109 - 0
src/api/purchaseReturnApply.js

@@ -0,0 +1,109 @@
+import { axios } from '@/utils/request'
+
+//  采购退货申请单列表  分页
+export const purchaseReturnList = (params) => {
+  const url = `/purchaseReturnApply/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+// 申请单新增
+export const purchaseReturnSave = (params) => {
+  return axios({
+    url: '/purchaseReturnApply/create',
+    data: params,
+    method: 'post'
+  })
+}
+//  采购退货申请单 删除
+export const purchaseReturnDel = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/delete`,
+    data: params,
+    method: 'post'
+  })
+}
+// 生成采购退货单
+export const createPurchaseReturnBill = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/createPurchaseReturnBill`,
+    data: params,
+    method: 'post'
+  })
+}
+//  采购退货 详情 添加产品
+export const purchaseReturnDetailSave = (params) => {
+  return axios({
+    url: '/purchaseReturnApply/detail/create',
+    data: params,
+    method: 'post'
+  })
+}
+//  采购退货申请单 详情 删除
+export const purchaseReturnDetailDel = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/detail/delete`,
+    data: params,
+    method: 'post'
+  })
+}
+//  采购退货 详情 全部删除
+export const purchaseReturnDetailDelAll = (params) => {
+  return axios({
+    url: `/purchaseReturn/detail/deleteAll`,
+    data: params,
+    method: 'post'
+  })
+}
+// 申请单详情修改数量
+export const purchaseReturnModifyQty = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/detail/modifyQty`,
+    data: params,
+    method: 'post'
+  })
+}
+// 申请单详情修改退货原因
+export const modifyReturnReason = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/detail/modifyReturnReason`,
+    data: params,
+    method: 'post'
+  })
+}
+//  申请单详情列表  分页
+export const purchaseReturnDetailList = (params) => {
+  const url = `/purchaseReturnApply/detail/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  获取采购退货申请单 详情
+export const purchaseReturnDetail = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/findBySn/${params.sn}`,
+    method: 'get'
+  })
+}
+// 采购退货申请单提交
+export const purchaseReturnSubmit = (params) => {
+  return axios({
+    url: `/purchaseReturnApply/submit/${params.sn}`,
+    method: 'get'
+  })
+}
+// 采购退货申请单再次编辑
+export const purchaseReturnAgainCreate = (params) => {
+ return axios({
+   url: `/purchaseReturnApply/againCreate/${params.sn}`,
+   method: 'get'
+ })
+}

+ 23 - 23
src/config/router.config.js

@@ -719,59 +719,59 @@ export const asyncRouterMap = [
             ]
           },
           {
-            path: '/purchasingManagement/purchaseReturn',
-            redirect: '/purchasingManagement/purchaseReturn/list',
-            name: 'purchaseReturn',
+            path: '/purchasingManagement/purchaseReturnApplyForm',
+            redirect: '/purchasingManagement/purchaseReturnApplyForm/list',
+            name: 'purchaseReturnApplyForm',
             component: BlankLayout,
             meta: {
-              title: '采购退货',
+              title: '采购退货申请单',
               icon: 'money-collect',
-              permission: 'M_purchaseReturnList'
+              // permission: 'M_purchaseReturnApplyFormList'
             },
             hideChildrenInMenu: true,
             children: [
               {
                 path: 'list',
-                name: 'purchaseReturnList',
-                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturn/list.vue'),
+                name: 'purchaseReturnApplyFormList',
+                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturnApplyForm/list.vue'),
                 meta: {
-                  title: '采购退货列表',
+                  title: '采购退货申请单列表',
                   icon: 'money-collect',
                   hidden: true,
-                  permission: 'M_purchaseReturnList'
+                  // permission: 'M_purchaseReturnApplyFormList'
                 }
               },
               {
                 path: 'add/:id/:sn/:name',
-                name: 'purchaseReturnAdd',
-                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturn/edit.vue'),
+                name: 'purchaseReturnApplyFormAdd',
+                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturnApplyForm/edit.vue'),
                 meta: {
-                  title: '新增采购退货单',
+                  title: '新增采购退货申请单',
                   icon: 'money-collect',
                   hidden: true,
-                  permission: 'B_purchaseReturnNew'
+                  // permission: 'B_purchaseReturnApplyFormNew'
                 }
               },
               {
                 path: 'edit/:id/:sn/:name',
-                name: 'purchaseReturnEdit',
-                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturn/edit.vue'),
+                name: 'purchaseReturnApplyFormEdit',
+                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturnApplyForm/edit.vue'),
                 meta: {
-                  title: '编辑采购退货单',
+                  title: '编辑采购退货申请单',
                   icon: 'money-collect',
                   hidden: true,
-                  permission: 'B_purchaseReturnEdit'
+                  // permission: 'B_purchaseReturnApplyFormEdit'
                 }
               },
               {
                 path: 'detail/:sn',
-                name: 'purchaseReturnDetail',
-                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturn/detail.vue'),
+                name: 'purchaseReturnApplyFormDetail',
+                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturnApplyForm/detail.vue'),
                 meta: {
-                  title: '采购退货详情',
+                  title: '采购退货申请单详情',
                   icon: 'money-collect',
                   hidden: true,
-                  permission: 'B_purchaseReturnDetail'
+                  // permission: 'B_purchaseReturnApplyFormDetail'
                 }
               }
             ]
@@ -783,7 +783,7 @@ export const asyncRouterMap = [
             name: 'purchaseReturnOutSync',
             component: BlankLayout,
             meta: {
-              title: '采购退货',
+              title: '采购退货',
               icon: 'money-collect',
               permission: 'M_purchaseReturn_outSnycList'
             },
@@ -794,7 +794,7 @@ export const asyncRouterMap = [
                 name: 'purchaseReturnOutSyncList',
                 component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReturnOutSync/list.vue'),
                 meta: {
-                  title: '采购退货列表',
+                  title: '采购退货列表',
                   icon: 'money-collect',
                   hidden: true,
                   permission: 'M_purchaseReturn_outSnycList'

+ 191 - 0
src/views/purchasingManagement/purchaseReturnApplyForm/detail.vue

@@ -0,0 +1,191 @@
+<template>
+  <div class="purchaseReturnDetail-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <a-page-header :ghost="false" :backIcon="false" class="purchaseReturnDetail-cont" :style="{ padding: !outBizSn ? '16px 24px' : '0px 24px' }" >
+        <!-- 自定义的二级文字标题 -->
+        <template slot="subTitle" v-if="!outBizSn">
+          <a id="purchaseReturnDetail-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
+          <a-button
+            v-if="isEdit"
+            type="primary"
+            size="small"
+            style="background-color: #1890ff;margin-left: 20px;border: #1890ff;"
+            id="purchaseReturnDetail-edit-btn"
+            @click.stop="handleEdit">编辑</a-button>
+        </template>
+        <!-- 操作区,位于 title 行的行尾 -->
+        <template slot="extra" v-if="$hasPermissions('B_purchaseReturnPrint')">
+          <Print :disabled="dataSource.length==0" @handlePrint="handlePrint"></Print>
+        </template>
+      </a-page-header>
+      <!-- 基础信息 -->
+      <a-card size="small" :bordered="false" class="purchaseReturnDetail-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1" header="基础信息">
+            <a-descriptions :column="3">
+              <a-descriptions-item label="供应商">{{ basicInfoData&&basicInfoData.returnTargetName || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="采退单号">{{ basicInfoData&&basicInfoData.purchaseReturnNo || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="创建时间">{{ basicInfoData&&basicInfoData.createDate || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="退货数量">{{ basicInfoData&&(basicInfoData.totalQty || basicInfoData.totalQty==0) ? basicInfoData.totalQty : '--' }}</a-descriptions-item>
+              <a-descriptions-item label="坏件数量">{{ basicInfoData&&(basicInfoData.totalBadQty || basicInfoData.totalBadQty == 0) ? basicInfoData.totalBadQty : '--' }}</a-descriptions-item>
+              <a-descriptions-item label="返库数量">{{ basicInfoData&&(basicInfoData.totalBackStockQty || basicInfoData.totalBackStockQty == 0) ? basicInfoData.totalBackStockQty : '--' }}</a-descriptions-item>
+              <a-descriptions-item label="退货金额" v-if="$hasPermissions('M_ShowAllCost')">{{ basicInfoData&&(basicInfoData.totalAmount || basicInfoData.totalAmount == 0) ? basicInfoData.totalAmount : '--' }}</a-descriptions-item>
+            </a-descriptions>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+      <!-- 产品详情 -->
+      <a-card size="small" :bordered="false" class="purchaseReturnDetail-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1" header="产品详情">
+            <!-- 列表 -->
+            <s-table
+              class="sTable"
+              ref="table"
+              size="small"
+              :rowKey="(record) => record.id"
+              :columns="columns"
+              :data="loadData"
+              :defaultLoadData="false"
+              bordered>
+            </s-table>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+    </a-spin>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import Print from '@/views/common/print.vue'
+import { hdPrint } from '@/libs/JGPrint'
+import { getOperationalPrecision } from '@/libs/tools.js'
+import { purchaseReturnDetailSn, purchaseReturnDetailList, purchaseReturnDetailPrint, purchaseReturnDetailExport } from '@/api/purchaseReturn'
+export default {
+  name: 'PurchaseReturnDetail',
+  components: { STable, VSelect, Print },
+  mixins: [commonMixin],
+  props: {
+    outBizSn: { //  有值则为弹框,无值则为页面
+      type: [Number, String],
+      default: ''
+    }
+  },
+  data () {
+    return {
+      spinning: false,
+      dataSource: [],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return purchaseReturnDetailList(Object.assign(parameter, { purchaseReturnSn: this.outBizSn || this.$route.params.sn })).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+              // 采购金额  由于数据库内小数位数为4位,页面则需显示2位。因此会做小数运算精度处理
+              data.list[i].purchaseReturnAmount = getOperationalPrecision(data.list[i].cost, data.list[i].qty)
+            }
+            this.disabled = false
+            this.dataSource = data.list
+          }
+          return data
+        })
+      },
+      basicInfoData: null //  基本信息
+    }
+  },
+  computed: {
+    isEdit () {
+      return ((this.basicInfoData && this.basicInfoData.state == 'WAIT_SUBMIT') || (this.basicInfoData && this.basicInfoData.state == 'AUDIT_REJECT')) && this.$hasPermissions('B_purchaseReturnEdit')
+    },
+    columns () {
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '采购单号', dataIndex: 'purchaseBillNo', width: '17%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品编码', dataIndex: 'dealerProductEntity.code', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'dealerProductEntity.name', width: '14%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        // { title: '售价', dataIndex: 'cost', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '退货数量', dataIndex: 'qty', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '坏件数量', dataIndex: 'badQty', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '返库数量', dataIndex: 'backStockQty', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'dealerProductEntity.unit', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
+        // { title: '退货金额小计', dataIndex: 'purchaseReturnAmount', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '退货原因', dataIndex: 'remarks', width: '12%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true }
+      ]
+      if (this.$hasPermissions('M_ShowAllCost')) {
+        arr.splice(4, 0, { title: '售价', dataIndex: 'cost', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+        arr.splice(9, 0, { title: '退货金额小计', dataIndex: 'purchaseReturnAmount', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+      }
+      return arr
+    }
+  },
+  methods: {
+    // 打印预览/快捷打印
+    handlePrint (type, printerType) {
+      const _this = this
+      _this.spinning = true
+      let url = purchaseReturnDetailPrint
+      const params = { sn: this.$route.params.sn || this.outBizSn }
+      params.showFlag = this.$hasPermissions('M_ShowAllCost') ? 1 : 0
+      if (type == 'export') { //  导出
+        url = purchaseReturnDetailExport
+      }
+      // 打印或导出
+      hdPrint(printerType, type, url, params, '采购退货单', function () {
+        _this.spinning = false
+      })
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/purchasingManagement/purchaseReturn/list' })
+    },
+    // 基本信息
+    getDetail () {
+      purchaseReturnDetailSn({ sn: this.outBizSn || this.$route.params.sn }).then(res => {
+        if (res.status == 200) {
+          this.basicInfoData = res.data
+        } else {
+          this.basicInfoData = null
+        }
+      })
+    },
+    //  编辑
+    handleEdit () {
+      this.$router.push({ path: `/purchasingManagement/purchaseReturn/edit/${this.basicInfoData.id}/${this.basicInfoData.purchaseReturnSn}/${this.basicInfoData.returnTargetName}` })
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab || this.outBizSn) { // 页签刷新 或 为弹框时调用
+      this.$refs.table.refresh(true)
+      this.getDetail()
+    }
+  },
+  activated () {
+    // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
+    if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
+      this.$refs.table.refresh(true)
+      this.getDetail()
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>
+
+<style lang="less">
+  .purchaseReturnDetail-cont{
+    margin-bottom: 10px;
+    .timeline-box{
+      margin-top: 30px;
+      .auxiliary-txt{
+        color: #808695;
+      }
+    }
+  }
+</style>

+ 448 - 0
src/views/purchasingManagement/purchaseReturnApplyForm/edit.vue

@@ -0,0 +1,448 @@
+<template>
+  <div class="purchaseReturnEdit-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <a-page-header :ghost="false" :backIcon="false" class="purchaseReturnEdit-back" >
+        <!-- 自定义的二级文字标题 -->
+        <template slot="subTitle">
+          <a id="purchaseReturnEdit-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
+          <span style="margin: 0 15px;color: #666;">供应商名称:{{ $route.params.name || '--' }}</span>
+        </template>
+        <!-- 操作区,位于 title 行的行尾 -->
+        <template slot="extra" v-if="$hasPermissions('B_purchaseReturnPrint')">
+          <Print :disabled="dataSource.length==0" @handlePrint="handlePrint"></Print>
+        </template>
+      </a-page-header>
+      <!-- 选择产品 -->
+      <div class="purchaseReturnEdit-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1" header="选择产品">
+            <!-- 筛选条件 -->
+            <div class="table-page-search-wrapper">
+              <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+                <a-row :gutter="15">
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="采购单号" prop="purchaseBillNo">
+                      <a-input id="purchaseReturnEdit-purchaseBillNo" v-model.trim="queryParam.purchaseBillNo" placeholder="请输入采购单号" allowClear />
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品编码" prop="productCode">
+                      <a-input id="purchaseReturnEdit-productCode" v-model.trim="queryParam.productCode" placeholder="请输入产品编码" allowClear />
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品名称" prop="productName">
+                      <a-input id="purchaseReturnEdit-productName" v-model.trim="queryParam.productName" placeholder="请输入产品名称" allowClear />
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
+                    <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="purchaseReturnList-refresh">查询</a-button>
+                    <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="purchaseReturnList-reset">重置</a-button>
+                  </a-col>
+                </a-row>
+              </a-form>
+            </div>
+            <!-- 列表 -->
+            <s-table
+              class="sTable"
+              ref="table"
+              size="small"
+              :rowKey="(record) => record.id"
+              :columns="columns"
+              :data="loadData"
+              :defaultLoadData="false"
+              :pageSize="10"
+              :scroll="{ y: 149 }"
+              bordered>
+              <!-- 自定义表头 -->
+              <template slot="refundableQtyTitle">
+                <a-tooltip placement="top">
+                  <template slot="title">
+                    <span>同一个采购单,可多次退货,所以可退数量=采购数量-已退货数量</span>
+                  </template>
+                  可退数量<a-icon type="question-circle" :style="{ marginLeft: '3px' }" />
+                </a-tooltip>
+              </template>
+              <!-- 数量 -->
+              <template slot="returnQty" slot-scope="text, record">
+                <a-input-number
+                  size="small"
+                  id="purchaseReturnEdit-returnQty"
+                  v-model="record.returnQty"
+                  :precision="0"
+                  :min="1"
+                  :max="record.refundableQty"
+                  placeholder="请输入"
+                  style="width: 100%;" />
+              </template>
+              <!-- 操作 -->
+              <template slot="action" slot-scope="text, record">
+                <span v-if="record.refundableQty==0">--</span>
+                <a-button
+                  v-else
+                  size="small"
+                  type="link"
+                  class="button-primary"
+                  @click="handleAdd(record)"
+                  id="purchaseReturnEdit-add-btn">添加</a-button>
+              </template>
+            </s-table>
+          </a-collapse-panel>
+        </a-collapse>
+      </div>
+      <!-- 已选产品 -->
+      <a-card size="small" :bordered="false" class="purchaseReturnEdit-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1">
+            <template slot="header">
+              已选产品
+              <a-button
+                size="small"
+                type="primary"
+                class="button-error"
+                id="purchaseReturnEdit-delAll-btn"
+                @click.stop="handleDel('', 'all')"
+                style="margin-right: 10px;float: right;">整单删除</a-button>
+            </template>
+            <!-- 列表 -->
+            <s-table
+              class="sTable"
+              ref="chooseTable"
+              size="small"
+              :rowKey="(record) => record.id"
+              :columns="chooseColumns"
+              :data="chooseLoadData"
+              :defaultLoadData="false"
+              :pageSize="10"
+              :scroll="{ y: 149 }"
+              bordered>
+              <!-- 退货数量 -->
+              <template slot="qty" slot-scope="text, record">
+                <a-input-number
+                  size="small"
+                  id="purchaseReturnEdit-qty"
+                  v-model="record.qty"
+                  :precision="0"
+                  :min="1"
+                  placeholder="请输入"
+                  @blur="e => qtyBlur(e.target.value, record)"
+                  style="width: 100%;" />
+              </template>
+              <!-- 退货原因 -->
+              <template slot="remarks" slot-scope="text, record">
+                <a-input
+                  size="small"
+                  id="purchaseReturnEdit-remarks"
+                  v-model.trim="record.remarks"
+                  :maxLength="30"
+                  placeholder="退货原因(最多30个字符)"
+                  @blur="e => remarksBlur(e.target.value, record)"
+                  style="width: 100%;" />
+              </template>
+              <!-- 操作 -->
+              <template slot="action" slot-scope="text, record">
+                <a-button size="small" type="link" class="button-error" @click="handleDel(record)" id="purchaseReturnEdit-del-btn">删除</a-button>
+              </template>
+            </s-table>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+    </a-spin>
+    <a-card size="small" :bordered="false" class="affix-cont">
+      <a-button
+        type="primary"
+        id="purchaseReturnEdit-submit"
+        size="large"
+        :disabled="spinning"
+        class="button-primary"
+        @click="handleSubmit"
+        style="padding: 0 60px;">提交</a-button>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import Print from '@/views/common/print.vue'
+import { hdPrint } from '@/libs/JGPrint'
+import {
+  purchaseReturnPurchaseBillDetailList,
+  purchaseReturnDetailList,
+  purchaseReturnDetailSave,
+  purchaseReturnDetailDel,
+  purchaseReturnSubmit,
+  purchaseReturnDelAll,
+  purchaseReturnDetailPrint,
+  purchaseReturnDetailExport } from '@/api/purchaseReturn'
+export default {
+  name: 'PurchaseReturnEdit',
+  components: { STable, VSelect, Print },
+  mixins: [commonMixin],
+  data () {
+    return {
+      spinning: false,
+      queryParam: {
+        purchaseBillNo: '',
+        productCode: '',
+        productName: ''
+      },
+      dataSource: [],
+      disabled: false, //  查询、重置按钮是否可操作
+      advanced: false, // 高级搜索 展开/关闭
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return purchaseReturnPurchaseBillDetailList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      },
+      // 加载数据方法 必须为 Promise 对象
+      chooseLoadData: parameter => {
+        return purchaseReturnDetailList(Object.assign(parameter, { purchaseReturnSn: this.$route.params.sn, orderBy: 'qpls_purchase_return_bill_detail.CREATE_DATE desc' })).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+            data.list[i].qtyBackups = data.list[i].qty
+            data.list[i].remarksBackups = data.list[i].remarks
+            data.list[i].refundableQty = data.list[i].purchaseBillRefundableQty + data.list[i].qty
+          }
+          this.dataSource = data.list
+          return data
+        })
+      }
+    }
+  },
+  computed: {
+    columns () {
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '采购单号', dataIndex: 'purchaseBillNo', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品编码', dataIndex: 'dealerProductEntity.code', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'dealerProductEntity.name', width: '13%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '采购总数', dataIndex: 'qty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { slots: { title: 'refundableQtyTitle' }, dataIndex: 'refundableQty', width: '9%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存数量', dataIndex: 'stock.currentStockQty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '缺货数量', dataIndex: 'cancelQty', width: '7%', align: 'center' },
+        { title: '退货数量', scopedSlots: { customRender: 'returnQty' }, width: '8%', align: 'center' },
+        // { title: '采购价', dataIndex: 'price', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'dealerProductEntity.unit', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '7%', align: 'center' }
+      ]
+      if (this.$hasPermissions('M_ShowAllCost')) {
+        arr.splice(9, 0, { title: '采购价', dataIndex: 'price', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+      }
+      return arr
+    },
+    chooseColumns () {
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '采购单号', dataIndex: 'purchaseBillNo', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品编码', dataIndex: 'dealerProductEntity.code', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'dealerProductEntity.name', width: '15%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '采购总数', dataIndex: 'purchaseBillQty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '退货数量', scopedSlots: { customRender: 'qty' }, width: '10%', align: 'center' },
+        // { title: '采购价', dataIndex: 'cost', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'dealerProductEntity.unit', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '退货原因', scopedSlots: { customRender: 'remarks' }, width: '15%', align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '8%', align: 'center' }
+      ]
+      if (this.$hasPermissions('M_ShowAllCost')) {
+        arr.splice(6, 0, { title: '采购价', dataIndex: 'cost', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+      }
+      return arr
+    }
+  },
+  methods: {
+    // 打印预览/快捷打印
+    handlePrint (type, printerType) {
+      const _this = this
+      _this.spinning = true
+      let url = purchaseReturnDetailPrint
+      const params = { sn: this.$route.params.sn }
+      params.showFlag = this.$hasPermissions('M_ShowAllCost') ? 1 : 0
+      if (type == 'export') { //  导出
+        url = purchaseReturnDetailExport
+      }
+      // 打印或导出
+      hdPrint(printerType, type, url, params, '采购退货单', function () {
+        _this.spinning = false
+      })
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.purchaseBillNo = ''
+      this.queryParam.productCode = ''
+      this.queryParam.productName = ''
+      this.$refs.table.refresh(true)
+    },
+    //  添加/编辑
+    handleAdd (row, isEdit) {
+      // 添加时退货数量字段名为returnQty,编辑时退货数量字段名为qty
+      if (!isEdit && !row.returnQty) {
+        this.$message.warning('请输入退货数量')
+        return
+      }
+      const params = {
+        id: isEdit ? row.id : undefined,
+        purchaseReturnSn: this.$route.params.sn,
+        purchaseBillSn: row.purchaseBillSn,
+        purchaseBillNo: row.purchaseBillNo,
+        purchaseBillDetailSn: row.purchaseBillDetailSn,
+        qty: isEdit ? row.qty : row.returnQty, //  退货数量
+        productSn: row.productSn,
+        cost: row.price,
+        remarks: row.remarks,
+        promotionFlag: row.promotionFlag
+      }
+      if (isEdit) { // 编辑
+        // 清空退货数量时,值应保持未清空前的值,因退货数量都不可为空
+        if (!row.qty) {
+          row.qty = row.qtyBackups
+          return
+        }
+      }
+      this.spinning = true
+      purchaseReturnDetailSave(params).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+          if (isEdit) {
+            this.$refs.table.refresh()
+          }
+          this.$refs.chooseTable.refresh()
+          this.spinning = false
+        } else {
+          this.spinning = false
+        }
+      })
+    },
+    // 双击快速添加
+    handleClickRow (record) {
+      return {
+        on: {
+          dblclick: (event) => {
+            event.stopPropagation()
+            this.handleAdd(record)
+          }
+        }
+      }
+    },
+    // 导入明细
+    handleImport () {},
+    //  删除
+    handleDel (row, isAll) {
+      const _this = this
+      const content = isAll ? '删除后不可恢复,确定要进行整单删除吗?' : '删除后不可恢复,确定要进行删除吗?'
+      this.$confirm({
+        title: '提示',
+        content: content,
+        centered: true,
+        onOk () {
+          if (isAll) { //  整单删除
+            _this.spinning = true
+            purchaseReturnDelAll({ purchaseReturnSn: _this.$route.params.sn }).then(res => {
+              if (res.status == 200) {
+                _this.$message.success(res.message)
+                _this.$refs.table.refresh()
+                _this.$refs.chooseTable.refresh()
+                _this.spinning = false
+              } else {
+                _this.spinning = false
+              }
+            })
+          } else { //  单个删除
+            _this.spinning = true
+            purchaseReturnDetailDel({ id: row.id }).then(res => {
+              if (res.status == 200) {
+                _this.$message.success(res.message)
+                _this.$refs.table.refresh()
+                _this.$refs.chooseTable.refresh()
+                _this.spinning = false
+              } else {
+                _this.spinning = false
+              }
+            })
+          }
+        }
+      })
+    },
+    //  提交
+    handleSubmit () {
+      const _this = this
+      _this.spinning = true
+      purchaseReturnSubmit({ id: this.$route.params.id }).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+          setTimeout(() => {
+            _this.handleBack()
+            _this.spinning = false
+          }, 1000)
+        } else {
+          _this.spinning = false
+        }
+      })
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/purchasingManagement/purchaseReturn/list' })
+    },
+    // 已选产品 退货数量  blur
+    qtyBlur (val, record) {
+      //  光标移出,值发生改变再调用编辑接口
+      if (val != record.qtyBackups) {
+        this.handleAdd(record, 'edit')
+      }
+    },
+    // 已选产品 退货原因  blur
+    remarksBlur (val, record) {
+      if (val && (val != record.remarksBackups)) {
+        this.handleAdd(record, 'edit')
+      }
+    },
+    filterOption (input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      )
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.$refs.chooseTable.refresh(true)
+      this.resetSearchForm()
+    }
+  },
+  activated () {
+    // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
+    if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
+      this.$refs.chooseTable.refresh(true)
+      this.resetSearchForm()
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>
+
+<style lang="less">
+  .purchaseReturnEdit-wrap{
+    position: relative;
+    height: 100%;
+    padding-bottom: 51px;
+    box-sizing: border-box;
+    >.ant-spin-nested-loading{
+      overflow-y: auto;
+      height: 100%;
+    }
+    .purchaseReturnEdit-back, .purchaseReturnEdit-cont{
+      margin-bottom: 10px;
+    }
+  }
+</style>

+ 410 - 0
src/views/purchasingManagement/purchaseReturnApplyForm/list.vue

@@ -0,0 +1,410 @@
+<template>
+  <a-card size="small" :bordered="false" class="purchaseReturnList-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <!-- 搜索条件 -->
+      <div ref="tableSearch" class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="创建时间">
+                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="单据来源">
+                <v-select
+                  v-model="queryParam.billSource"
+                  ref="billSource"
+                  id="purchaseReturnList-billSource"
+                  code="RETURN_APPLY_BILL_SOURCE"
+                  placeholder="请选择单据来源"
+                  allowClear></v-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="采购退货申请单号">
+                <a-input id="purchaseReturnList-purchaseReturnApplyNo" v-model.trim="queryParam.purchaseReturnApplyNo" allowClear placeholder="请输入采购退货申请单号"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="业务状态">
+                <v-select
+                  v-model="queryParam.billStatus"
+                  ref="billStatus"
+                  id="purchaseReturnList-billStatus"
+                  code="RETURN_APPLY_BILL_STATUS"
+                  placeholder="请选择业务状态"
+                  allowClear
+                ></v-select>
+              </a-form-item>
+            </a-col>
+            <template v-if="advanced">
+              <a-col :md="6" :sm="24">
+                <a-form-item label="客服审核时间">
+                  <rangeDate ref="auditDate" :value="auditTime" @change="auditDateChange" />
+                </a-form-item>
+              </a-col>
+            </template>
+            <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="purchaseReturnList-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="purchaseReturnList-reset">重置</a-button>
+              <a @click="advanced=!advanced" style="margin-left: 8px">
+                {{ advanced ? '收起' : '展开' }}
+                <a-icon :type="advanced ? 'up' : 'down'"/>
+              </a>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 操作按钮 -->
+      <div class="table-operator">
+        <a-button id="purchaseReturnList-add" type="primary" class="button-error" @click="handleEdit()">新增</a-button>
+      </div>
+      <!-- 列表 -->
+      <s-table
+        class="sTable fixPagination"
+        ref="table"
+        :style="{ height: tableHeight+84.5+'px' }"
+        size="small"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ y: tableHeight }"
+        :defaultLoadData="false"
+        bordered>
+        <!-- 采退单号 -->
+        <template slot="purchaseReturnApplyNo" slot-scope="text, record">
+          <span class="table-td-link" @click="handleDetail(record)">{{ record.purchaseReturnApplyNo }}</span>
+          <!-- <span v-else>{{ record.purchaseReturnApplyNo }}</span> -->
+        </template>
+        <!-- 审核 -->
+        <template slot="audit" slot-scope="text, record">
+          <stateIcon :title="record.billStatusDictValue" v-if="record.billStatus!='AUDIT_REJECT'" :state="record.billStatus == 'WAIT_BACK'||record.billStatus=='CHECKED'||record.billStatus == 'FINISH'?'1':'2'"></stateIcon>
+          <stateIcon :title="record.billStatusDictValue" v-else :state="0"></stateIcon>
+        </template>
+        <!-- 出库 -->
+        <template slot="waitOut" slot-scope="text, record">
+          <stateIcon :state="record.hasStockBill == '1'?'1':'2'"></stateIcon>
+        </template>
+        <!-- 收款 -->
+        <template slot="financial" slot-scope="text, record">
+          <stateIcon :title="record.settleStateDictValue" :state="record.settleState == 'FINISH'&&record.billStatus!='CANCEL'?'1':'2'"></stateIcon>
+        </template>
+        <!-- 操作 -->
+        <template slot="action" slot-scope="text, record">
+          <a-button
+            size="small"
+            type="link"
+            class="button-primary"
+            v-if="(record.billStatus == 'WAIT_SUBMIT' || record.billStatus == 'AUDIT_REJECT')"
+            @click="handleEdit(record)"
+            id="purchaseReturnList-edit-btn">编辑</a-button>
+          <a-button
+            size="small"
+            type="link"
+            v-else-if="(record.hasStockBill == '0' && (record.billStatus == 'CHECKED'||record.billStatus == 'FINISH'))"
+            @click="handleWarehouse(record)"
+            class="button-primary"
+            id="bulkReturnGoodsList-warehouse-btn">生成出库单</a-button>
+          <a-button
+            size="small"
+            type="link"
+            v-else-if="record.billStatus == 'CHECKED'"
+            @click="handleFinishBill(record)"
+            class="button-primary"
+            id="bulkReturnGoodsList-warehouse-btn">完结单据</a-button>
+          <a-button
+            size="small"
+            type="link"
+            class="button-error"
+            v-else-if="(record.billStatus == 'WAIT_SUBMIT' || record.billStatus == 'AUDIT_REJECT')"
+            @click="handleDel(record)"
+            id="purchaseReturnList-del-btn">删除</a-button>
+          <span v-else>--</span>
+        </template>
+      </s-table>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import rangeDate from '@/views/common/rangeDate.vue'
+import { purchaseTargetList } from '@/api/purchase'
+import getDate from '@/libs/getDate.js'
+import stateIcon from '@/views/common/stateIcon'
+import { purchaseReturnList, purchaseReturnSave, purchaseReturnDel, purchaseReturnOutStockBill, purchaseReturnFinishBill } from '@/api/purchaseReturnApply'
+export default {
+  name: 'PurchaseReturnList',
+  components: { STable, VSelect, rangeDate, stateIcon },
+  mixins: [commonMixin],
+  data () {
+    return {
+      spinning: false,
+      advanced: true, // 高级搜索 展开/关闭
+      time: [
+        getDate.getCurrMonthDays().starttime,
+        getDate.getCurrMonthDays().endtime
+      ],
+      auditTime: [],
+      queryParam: { //  查询条件
+        beginDate: getDate.getCurrMonthDays().starttime,
+        endDate: getDate.getCurrMonthDays().endtime,
+        purchaseReturnApplyNo: '', //  退货单号
+        billStatus: undefined, //  业务状态
+        billSource: undefined, // 单据来源
+        beginAuditDate: '', // 审核时间
+        endAuditDate: ''
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      tableHeight: 0,
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        return purchaseReturnList(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      },
+      purchaseTragetType: []
+    }
+  },
+  computed: {
+    columns () {
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '6%', align: 'center' },
+        { title: '单据来源', dataIndex: 'billSourceDictValue', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '采购退货申请单号', scopedSlots: { customRender: 'purchaseReturnApplyNo' }, width: '16%', align: 'center' },
+        { title: '供应商', dataIndex: 'returnTargetName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '申请退货数量', dataIndex: 'totalQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总公司实收数量', dataIndex: 'totalReceiveQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '业务状态', dataIndex: 'billStatusDictValue', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '创建时间', dataIndex: 'createDate', width: '12%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '客服审核时间', dataIndex: 'auditTime', width: '12%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '12%', align: 'center' }
+      ]
+      return arr
+    }
+  },
+  methods: {
+    //  时间  change
+    dateChange (date) {
+      this.queryParam.beginDate = date[0]
+      this.queryParam.endDate = date[1]
+    },
+    // 审核时间
+    auditDateChange (date) {
+      this.queryParam.beginAuditDate = date[0]
+      this.queryParam.endAuditDate = date[1]
+    },
+    //  重置
+    resetSearchForm () {
+      this.resetData()
+      this.$refs.table.refresh(true)
+    },
+    // 重置数据
+    resetData (flag) {
+      this.$refs.rangeDate.resetDate(flag ? '' : this.time)
+      this.queryParam.beginDate = flag ? '' : getDate.getCurrMonthDays().starttime
+      this.queryParam.endDate = flag ? '' : getDate.getCurrMonthDays().endtime
+      this.queryParam.purchaseReturnApplyNo = ''
+      this.queryParam.billStatus = undefined
+      this.queryParam.billSource = undefined
+      this.auditTime = []
+      this.$refs.auditDate.resetDate(this.auditTime)
+      this.queryParam.beginAuditDate = ''
+      this.queryParam.endAuditDate = ''
+      if (!flag) {
+        this.setIsHomeNav(this.$route.name, null)
+      }
+    },
+    //  删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '删除后不可恢复,确定要进行删除吗?',
+        centered: true,
+        onOk () {
+          _this.spinning = true
+          purchaseReturnDel({ id: row.id }).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$refs.table.refresh()
+              _this.spinning = false
+            } else {
+              _this.spinning = false
+            }
+          })
+        }
+      })
+    },
+    //  详情
+    handleDetail (row) {
+      this.$router.push({ path: `/purchasingManagement/purchaseReturn/detail/${row.purchaseReturnSn}` })
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      const _this = this
+      if (row) { //  编辑
+        _this.$router.push({ path: `/purchasingManagement/purchaseReturn/edit/${row.id}/${row.purchaseReturnSn}/${row.returnTargetName}` })
+      } else { //  新增
+        let content
+        if (this.purchaseTragetType.length > 0) {
+          content = '退货供应商:' + this.purchaseTragetType[0].purchaseTargetName
+        } else {
+          content = '退货供应商:--'
+        }
+        this.$confirm({
+          title: '提示',
+          content: content,
+          centered: true,
+          onOk () {
+            const params = {
+              returnTargetSn: _this.purchaseTragetType[0].purchaseTargetSn,
+              returnTargetName: _this.purchaseTragetType[0].purchaseTargetName,
+              returnTargetType: _this.purchaseTragetType[0].purchaseTargetType
+            }
+            _this.spinning = true
+            purchaseReturnSave(params).then(res => {
+              if (res.status == 200) {
+                const data = res.data
+                _this.spinning = false
+                // 重置查询条件
+                _this.resetData()
+                _this.$router.push({ path: `/purchasingManagement/purchaseReturn/add/${data.id}/${data.purchaseReturnSn}/${data.returnTargetName}` })
+              } else {
+                _this.spinning = false
+              }
+            })
+          }
+        })
+      }
+    },
+    //  生成出库单
+    handleWarehouse (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确定要生成出库单吗?',
+        centered: true,
+        onOk () {
+          _this.spinning = true
+          purchaseReturnOutStockBill({ sn: row.purchaseReturnSn }).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$refs.table.refresh()
+              _this.spinning = false
+            } else {
+              _this.spinning = false
+            }
+          })
+        }
+      })
+    },
+    //  完结单据
+    handleFinishBill (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确定要完结该单据吗?',
+        centered: true,
+        onOk () {
+          _this.spinning = true
+          purchaseReturnFinishBill({ sn: row.purchaseReturnSn }).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$refs.table.refresh()
+              _this.spinning = false
+            } else {
+              _this.spinning = false
+            }
+          })
+        }
+      })
+    },
+    getParentDealer () {
+      purchaseTargetList({ purchaseTargetType: 'SUPPLIER_SYS' }).then(res => {
+        if (res.status == 200) {
+          this.purchaseTragetType = res.data
+        } else {
+          this.purchaseTragetType = []
+        }
+      })
+    },
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+      this.getParentDealer()
+
+      // 是否打开的页签
+      const a = this.$store.state.app.isNewTab
+      // 是否要刷新列表
+      const b = this.$store.state.app.updateList
+      // 是否从首页点击进入
+      const isHomeNav = this.getIsHomeNav()[this.$route.name]
+      console.log(a, b, this.getIsHomeNav(), isHomeNav, this.$route.name)
+
+      // 从首页进入,判断式新建还式待办查询
+      if (isHomeNav) {
+        // 新增
+        if (isHomeNav.type == 'new') {
+          this.resetSearchForm()
+          this.openModal = true
+        }
+        // 待办
+        if (isHomeNav.type == 'todo') {
+          this.resetData(true)
+          this.queryParam = Object.assign(this.queryParam, isHomeNav.pageParams)
+          this.$refs.rangeDate.resetDate([this.queryParam.beginDate, this.queryParam.endDate])
+          this.$refs.table.refresh(true)
+        }
+      } else {
+        // 如果是新页签打开,则重置当前页面
+        if (a && !b) {
+          this.resetSearchForm()
+        }
+      }
+      // 仅刷新列表,不重置页面
+      if (b || a == b) {
+        this.$refs.table.refresh()
+      }
+    },
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 235
+    }
+  },
+  watch: {
+    advanced (newValue, oldValue) {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    },
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  mounted () {},
+  activated () {
+    this.pageInit()
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>

+ 2 - 2
vue.config.js

@@ -211,8 +211,8 @@ const vueConfig = {
     // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
     proxy: {
       '/api': {
-        // target: 'http://192.168.0.215:8076/qpls-md',
-        target: 'http://p.iscm.360arrow.com/qpls-md',
+        target: 'http://192.168.0.215:8076/qpls-md',
+        // target: 'http://p.iscm.360arrow.com/qpls-md',
         // ws: false,
         ws: true,
         changeOrigin: true,