Bladeren bron

update:代服导入发货

ct 1 dag geleden
bovenliggende
commit
eb7bf7aa36

+ 7 - 0
src/api/hisStore/storeOrder.js

@@ -386,3 +386,10 @@ export function healthExportShippingOrder(query) {
     params: query
   })
 }
+
+export function importExpressTemplate() {
+  return request({
+    url: '/store/store/storeOrder/importTemplateDeliver',
+    method: 'get'
+  })
+}

+ 106 - 44
src/views/hisStore/storeOrder/healthStoreList.vue

@@ -304,25 +304,35 @@
         >导出订单明细(明文)
         </el-button>
       </el-col>
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          icon="el-icon-s-order"-->
+<!--          size="mini"-->
+<!--          type="warning"-->
+<!--          @click="openDeliveryNote"-->
+<!--        >批量导入物流单号-->
+<!--        </el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
-          icon="el-icon-s-order"
-          size="mini"
-          type="warning"
-          @click="openDeliveryNote"
-        >批量导入物流单号
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          v-hasPermi="['store:storeOrder:healthExportShippingOrder']"
-          icon="el-icon-tickets"
+          type="info"
+          plain
+          icon="el-icon-upload2"
           size="mini"
-          type="success"
-          @click="handleExportShippingOrder"
-        >导出发货单
-        </el-button>
+          @click="handleImportDeliver"
+          v-hasPermi="['store:healthStoreOrder:exportDeliver']"
+        >导入发货</el-button>
       </el-col>
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          v-hasPermi="['store:storeOrder:healthExportShippingOrder']"-->
+<!--          icon="el-icon-tickets"-->
+<!--          size="mini"-->
+<!--          type="success"-->
+<!--          @click="handleExportShippingOrder"-->
+<!--        >导出发货单-->
+<!--        </el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -960,6 +970,34 @@
         >确认导出</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog :title="uploadDeliver.title" :visible.sync="uploadDeliver.open" width="400px" append-to-body>
+      <el-upload
+        ref="uploadDeliver"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="uploadDeliver.headers"
+        :action="uploadDeliver.url + '?updateSupport=' + uploadDeliver.updateSupport"
+        :disabled="uploadDeliver.isUploading"
+        :on-progress="handleFileUploadProgressDeliver"
+        :on-success="handleFileSuccessDeliver"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplateExpress">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileFormDeliver">确 定</el-button>
+        <el-button @click="uploadDeliver.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -974,9 +1012,17 @@ import {
   delStoreOrder,
   addStoreOrder,
   updateStoreOrder,
-  exportHealthStoreOrder, exportHealthStoreOrderDetails, exportHealthStoreOrderItemsDetails,getErpAccount,healthExportShippingOrder,
+  exportHealthStoreOrder,
+  exportHealthStoreOrderDetails,
+  exportHealthStoreOrderItemsDetails,
+  getErpAccount,
+  healthExportShippingOrder,
   queryErpPhone,
-  saveErpPhone,editErpPhone,batchCreateErpOrder,batchSetErpOrder
+  saveErpPhone,
+  editErpPhone,
+  batchCreateErpOrder,
+  batchSetErpOrder,
+  importExpressTemplate
 } from '@/api/hisStore/storeOrder'
 import { getUserList } from '@/api/hisStore/user'
 import { getAddressList } from '@/api/hisStore/userAddress'
@@ -1004,6 +1050,19 @@ export default {
   },
   data() {
     return {
+      uploadDeliver:{
+        open:false,
+        title:"导入发货",
+        // 是否显示弹出层
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/store/store/storeOrder/importDeliverData"
+      },
       orderStatus:null,
       productInfo:"",
       payPriceTotal:"0",
@@ -1299,6 +1358,34 @@ export default {
     this.getAppMallOptions();
   },
   methods: {
+    // 提交上传文件
+    submitFileFormDeliver() {
+      console.log("submitFileFormDeliver");
+      this.$refs.uploadDeliver.submit();
+    },
+    /** 下载模板操作 */
+    importTemplateExpress() {
+      importExpressTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgressDeliver(event, file, fileList) {
+      this.uploadDeliver.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccessDeliver(response, file, fileList) {
+      this.uploadDeliver.open = false;
+      this.uploadDeliver.isUploading = false;
+      this.$refs.uploadDeliver.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    //下载导入发货模板
+    handleImportDeliver(){
+      this.uploadDeliver.title = "导入";
+      this.uploadDeliver.open = true;
+    },
     // 新增排序处理方法
     handleSortChange({ column, prop, order }) {
       console.log('排序变化:', { column, prop, order });
@@ -1552,7 +1639,8 @@ export default {
 
       try {
         let param = {
-          loginAccount: this.erpAccountForm.selectedAccount
+          loginAccount: this.erpAccountForm.selectedAccount,
+          notHealth:0
         };
 
         if (this.ids.length > 0) {
@@ -1560,32 +1648,6 @@ export default {
           param.orderIds = this.ids;
         } else {
           // 如果没有选中订单,推送查询条件下的所有订单
-          if (this.payTypeArr.length > 0) {
-            this.queryParams.payType = this.payTypeArr.toString();
-          } else {
-            this.queryParams.payType = null;
-          }
-          if (this.scheduleIdArr.length > 0) {
-            this.queryParams.scheduleId = this.scheduleIdArr.toString();
-          } else {
-            this.queryParams.scheduleId = null;
-          }
-          if (this.buyTypeArr.length > 0) {
-            this.queryParams.orderBuyType = this.buyTypeArr.toString();
-          } else {
-            this.queryParams.orderBuyType = null;
-          }
-          if (this.channelArr.length > 0) {
-            this.queryParams.orderChannel = this.channelArr.toString();
-          } else {
-            this.queryParams.orderChannel = null;
-          }
-          if (this.qwSubjectArr.length > 0) {
-            this.queryParams.qwSubject = this.qwSubjectArr.toString();
-          } else {
-            this.queryParams.qwSubject = null;
-          }
-
           // 合并查询参数
           param = { ...param, ...this.queryParams };
         }

+ 90 - 10
src/views/hisStore/storeOrder/index.vue

@@ -308,14 +308,14 @@
           v-hasPermi="['store:storeOrder:exportItems']"
         >导出订单明细</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-s-order"
-          size="mini"
-          @click="openDeliveryNote"
-        >批量导入物流单号</el-button>
-      </el-col>
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          type="warning"-->
+<!--          icon="el-icon-s-order"-->
+<!--          size="mini"-->
+<!--          @click="openDeliveryNote"-->
+<!--        >批量导入物流单号</el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"
@@ -346,6 +346,16 @@
         >删除
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="info"
+          plain
+          icon="el-icon-upload2"
+          size="mini"
+          @click="handleImportDeliver"
+          v-hasPermi="['store:storeOrder:exportDeliver']"
+        >导入发货</el-button>
+      </el-col>
       <el-col :span="1.5" v-if="SFDFopen && orderStatus == 6"> <!--待推送erp-->
         <el-tooltip content="默认erp推送手机号" placement="top">
           <el-button
@@ -1005,6 +1015,34 @@
       </div>
     </el-dialog>
 
+    <el-dialog :title="uploadDeliver.title" :visible.sync="uploadDeliver.open" width="400px" append-to-body>
+      <el-upload
+        ref="uploadDeliver"
+        :limit="1"
+        accept=".xlsx, .xls"
+        :headers="uploadDeliver.headers"
+        :action="uploadDeliver.url + '?updateSupport=' + uploadDeliver.updateSupport"
+        :disabled="uploadDeliver.isUploading"
+        :on-progress="handleFileUploadProgressDeliver"
+        :on-success="handleFileSuccessDeliver"
+        :auto-upload="false"
+        drag
+      >
+        <i class="el-icon-upload"></i>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <div class="el-upload__tip text-center" slot="tip">
+          <div class="el-upload__tip" slot="tip">
+          </div>
+          <span>仅允许导入xls、xlsx格式文件。</span>
+          <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplateExpress">下载模板</el-link>
+        </div>
+      </el-upload>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitFileFormDeliver">确 定</el-button>
+        <el-button @click="uploadDeliver.open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+
   </div>
 </template>
 
@@ -1022,7 +1060,7 @@ import {
   getOrderItemsNum,
   importDeliveryNoteExpressTemplate, exportStoreOrderDetails, exportStoreOrderItemsDetails,getErpAccount,
   queryErpPhone,
-  saveErpPhone,editErpPhone,batchCreateErpOrder,batchSetErpOrder
+  saveErpPhone,editErpPhone,batchCreateErpOrder,batchSetErpOrder,importExpressTemplate
 } from '@/api/hisStore/storeOrder'
 import { getUserList } from "@/api/hisStore/user";
 import { getAddressList } from "@/api/hisStore/userAddress";
@@ -1051,6 +1089,19 @@ export default {
   },
   data() {
     return {
+      uploadDeliver:{
+        open:false,
+        title:"导入发货",
+        // 是否显示弹出层
+        // 是否禁用上传
+        isUploading: false,
+        // 是否更新已经存在的用户数据
+        updateSupport: 0,
+        // 设置上传的请求头部
+        headers: { Authorization: "Bearer " + getToken() },
+        // 上传的地址
+        url: process.env.VUE_APP_BASE_API + "/store/store/storeOrder/importDeliverData"
+      },
       orderStatus:null,
       productInfo:"",
       payPriceTotal:"0",
@@ -1374,6 +1425,34 @@ export default {
     this.getAppMallOptions();
   },
   methods: {
+    // 提交上传文件
+    submitFileFormDeliver() {
+      console.log("submitFileFormDeliver");
+      this.$refs.uploadDeliver.submit();
+    },
+    /** 下载模板操作 */
+    importTemplateExpress() {
+      importExpressTemplate().then(response => {
+        this.download(response.msg);
+      });
+    },
+    // 文件上传中处理
+    handleFileUploadProgressDeliver(event, file, fileList) {
+      this.uploadDeliver.isUploading = true;
+    },
+    // 文件上传成功处理
+    handleFileSuccessDeliver(response, file, fileList) {
+      this.uploadDeliver.open = false;
+      this.uploadDeliver.isUploading = false;
+      this.$refs.uploadDeliver.clearFiles();
+      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.getList();
+    },
+    //下载导入发货模板
+    handleImportDeliver(){
+      this.uploadDeliver.title = "导入";
+      this.uploadDeliver.open = true;
+    },
     // 新增排序处理方法
     handleSortChange({ column, prop, order }) {
       console.log('排序变化:', { column, prop, order });
@@ -1628,7 +1707,8 @@ export default {
 
       try {
         let param = {
-          loginAccount: this.erpAccountForm.selectedAccount
+          loginAccount: this.erpAccountForm.selectedAccount,
+          notHealth:1
         };
 
         if (this.ids.length > 0) {

+ 8 - 74
src/views/hisStore/storeProductPackage/index.vue

@@ -108,24 +108,7 @@
               <el-tag prop="cateId" v-for="(item, index) in cateOptions"    v-if="scope.row.cateId==item.dictValue">{{item.dictLabel}}</el-tag>
           </template>
       </el-table-column>
-      <el-table-column label="所属公司" align="center" width="220px">
-        <template slot-scope="scope">
-          <div v-if="scope.row.companyIds">
-            <el-tag
-              v-for="company in companyOptions.filter(company => {
-          if (!scope.row.companyIds) return false;
-          const ids = scope.row.companyIds.split(',').map(id => id.trim());
-          return ids.includes(String(company.companyId));
-        })"
-              :key="company.companyId"
-              size="small"
-              style="margin: 2px;"
-            >
-              {{ company.companyName }}
-            </el-tag>
-          </div>
-        </template>
-      </el-table-column>
+      <el-table-column label="所属公司" align="center" prop="companyName" />
       <el-table-column label="标题" align="center" prop="title" show-overflow-tooltip />
       <el-table-column label="描述" align="center" prop="descs" show-overflow-tooltip />
       <el-table-column label="原价" align="center"  >
@@ -232,8 +215,8 @@
                     />
             </el-select>
         </el-form-item>
-        <el-form-item label="所属公司" prop="companyIds">
-          <el-select style="width: 240px" v-model="form.companyIds" filterable multiple @change="handleCompanyChange" placeholder="请选择企业" clearable size="small">
+        <el-form-item label="所属公司" prop="companyId">
+          <el-select style="width: 240px" v-model="form.companyId"  placeholder="请选择企业" clearable size="small" @change="handleCompanyChange">
             <el-option
               v-for="item in companyOptions"
               :key="item.companyId"
@@ -345,13 +328,13 @@
     </el-dialog>
 
     <el-dialog :title="product.title" v-if="product.open"  :visible.sync="product.open" width="1000px" append-to-body>
-        <product-attr-value-select  ref="product"  @selectProduct="selectProduct" :company-ids="form.companyIds"/>
+        <product-attr-value-select  ref="product"  @selectProduct="selectProduct" :company-id="form.companyId"/>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { listStoreProductPackage, getStoreProductPackage, delStoreProductPackage, addStoreProductPackage, updateStoreProductPackage, exportStoreProductPackage,modifyStoreProductPackages,getProductsCompanyIds } from "@/api/hisStore/storeProductPackage";
+import { listStoreProductPackage, getStoreProductPackage, delStoreProductPackage, addStoreProductPackage, updateStoreProductPackage, exportStoreProductPackage,modifyStoreProductPackages } from "@/api/hisStore/storeProductPackage";
 import Editor from '@/components/Editor/wang';
 import productAttrValueSelect from "../components/productAttrValueSelect";
 import Material from '@/components/Material'
@@ -478,43 +461,8 @@ export default {
   },
   methods: {
     handleCompanyChange(){
-      if (!this.products || this.products.length === 0) {
-        this.$message.warning('请先选择商品');
-        return;
-      }
-      const productIds = this.products
-        .map(item => {
-          const id = item.productId
-          return id ? Number(id) : null;
-        })
-        .filter(id => id != null && !isNaN(id));
-
-      if (productIds.length === 0) {
-        this.$message.warning('没有有效的商品ID');
-        return;
-      }
-      // 查询所选公司是否有该商品
-      getProductsCompanyIds(productIds).then(response => {
-          const availableCompanyIds = (response.companyIds || [])
-            .map(id => {
-              const numId = Number(id);
-              return !isNaN(numId) ? Math.floor(numId) : null;
-            })
-            .filter(id => id != null);
-          const selectedCompanyIds = this.form.companyIds || [];
-          // 找出不在可用范围内的公司ID
-          const invalidCompanyIds = selectedCompanyIds.filter(
-            selectedId => !availableCompanyIds.includes(selectedId)
-          );
-
-          if (invalidCompanyIds.length > 0) {
-            this.$message.warning(`以下公司无法使用当前商品:${invalidCompanyIds.join(', ')},已自动移除`);
-
-            this.form.companyIds = selectedCompanyIds.filter(
-              selectedId => availableCompanyIds.includes(selectedId)
-            );
-          }
-        })
+      // 清除套餐商品
+      this.products = [];
     },
     /** 获取公司下拉列表*/
     getCompanyList() {
@@ -653,16 +601,6 @@ export default {
       const packageId = row.packageId || this.ids
       getStoreProductPackage(packageId).then(response => {
         this.form = response.data;
-        let companyIds = [];
-        if (response.data.companyIds && response.data.companyIds !== '') {
-          // 拆分成数组,并转换为数字类型
-          companyIds = response.data.companyIds
-            .split(',')
-            .map(item => item.trim())
-            .filter(item => item !== '')
-            .map(id => Number(id));  // 转换为数字
-        }
-        this.form.companyIds = companyIds;
         this.open = true;
         this.title = "修改商品组合套餐";
         this.products=this.form.productList;
@@ -702,11 +640,7 @@ export default {
       if (this.form.integral==null || this.form.integral<0){
         this.form.integral = 0;
       }
-      const companyIds = this.form.companyIds
-      if (companyIds!=null && companyIds.length>0){
-        this.form.companyIds = companyIds.join(',');
-      }
-      console.log(this.form)
+      // console.log(this.form)
       // return;
       this.$refs["form"].validate(valid => {
         if (valid) {