From d83518593352aecde3aaa95cc300a508963f5400 Mon Sep 17 00:00:00 2001
From: xzg <4727863@qq.com>
Date: Tue, 19 Mar 2024 15:18:47 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85=E6=B6=88=E6=81=AF=E5=87=BD?=
 =?UTF-8?q?=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/api/basicdata/basicdataFreight.js         |  13 +-
 src/utils/poptxt.js                           |  67 ++++++++++
 .../basicdata/brand/basicdataFreight.vue      | 120 ++++++++++++++----
 .../basicdata/brand/basicdataFreightFrom.vue  |  67 +++++++---
 4 files changed, 229 insertions(+), 38 deletions(-)
 create mode 100644 src/utils/poptxt.js

diff --git a/src/api/basicdata/basicdataFreight.js b/src/api/basicdata/basicdataFreight.js
index e51447b8..701842f9 100644
--- a/src/api/basicdata/basicdataFreight.js
+++ b/src/api/basicdata/basicdataFreight.js
@@ -85,4 +85,15 @@ export const $_getDeptLazyTree = params => {
     method: 'get',
     params
   });
-};
\ No newline at end of file
+};
+
+
+
+
+export const $_basicdataFreight = (row) => {
+  return request({
+    url: '/api/logpm-basicdata/basicdataFreight/import',
+    method: 'post',
+    data: row
+  })
+}
\ No newline at end of file
diff --git a/src/utils/poptxt.js b/src/utils/poptxt.js
new file mode 100644
index 00000000..98023724
--- /dev/null
+++ b/src/utils/poptxt.js
@@ -0,0 +1,67 @@
+import { ElMessage } from 'element-plus' // 引入 ElMessage 组件
+export function popmsg(res) {
+    // 显示成功消息
+    if (res.msg == '导入成功') {
+      ElMessage({
+        message: res.msg,
+        type: 'success',
+      });
+      return;
+    }else{
+
+   
+    // 创建包含 p 标签的内容的 div 元素
+    var fragment = document.createDocumentFragment();
+    var div = document.createElement('div');
+    div.id = 'createdDiv';
+    var timeout; // 用于设置定时器
+    // 设置 div 样式
+    div.style.zIndex = '9999';
+    div.style.position = 'fixed';
+    div.style.fontSize = '16px';
+    div.style.top = '50%';
+    div.style.left = '50%';
+    div.style.transform = 'translate(-50%, -50%)';
+    div.style.width = '50%';
+    div.style.height = '200px';
+    div.style.backgroundColor = '#ffffff';
+    div.style.borderRadius = '4px';
+    div.style.overflow = 'scroll';
+    div.style.border = '1px solid #ccc';
+    div.style.padding = '10px';
+    // 将后端返回的内容作为 HTML 插入到 div 中
+    div.innerHTML = res.msg;
+    // 遍历所有的 <p> 标签并设置首行缩进
+    var pTags = div.querySelectorAll('p');
+    pTags.forEach(function (pTag) {
+      pTag.style.textIndent = '2em';
+    });
+    fragment.appendChild(div);
+    // 添加鼠标事件监听
+    // div.addEventListener('mouseover', function () {
+    //   clearTimeout(timeout); // 清除自动消失的定时器
+    // });
+
+    // div.addEventListener('mouseout', function () {
+    //   timeout = setTimeout(function () {
+    //     div.remove(); // 3 秒后自动消失
+    //   }, 3000);
+    // });
+
+    document.body.appendChild(fragment);
+
+    // 初始化定时器
+    // timeout = setTimeout(function () {
+    //   div.remove(); // 自动消失
+    // }, 3000);
+    function closePopupOnClickOutside(event) {
+      if (div && !div.contains(event.target)) {
+        div.remove(); // 点击弹窗之外的地方,移除弹窗
+        document.removeEventListener('click', closePopupOnClickOutside); // 移除监听器
+      }
+    }
+
+    // 添加点击事件监听
+    document.addEventListener('click', closePopupOnClickOutside);
+  }
+  }
\ No newline at end of file
diff --git a/src/views/basicdata/brand/basicdataFreight.vue b/src/views/basicdata/brand/basicdataFreight.vue
index c9bb258a..39f68c52 100644
--- a/src/views/basicdata/brand/basicdataFreight.vue
+++ b/src/views/basicdata/brand/basicdataFreight.vue
@@ -10,6 +10,7 @@
       :permission="permissionList"
       :before-open="beforeOpen"
       ref="crud"
+      :upload-after="uploadAfter"
       @row-update="rowUpdate"
       @row-save="rowSave"
       @row-del="rowDel"
@@ -38,8 +39,14 @@
           @click="handleDelete"
           >删 除
         </el-button>
-       <el-button icon="UploadFilled" type="danger" plain @click="handleImport">导 入 </el-button>
-
+        <el-button type="danger" plain @click="UploadTemplate">导入数据</el-button>
+        <el-button type="danger" plain @click="DownloadTemplate">下载模板</el-button>
+        <!-- <el-button
+          type="danger"
+          plain
+          @click="ExportPrice"
+          >导 出
+        </el-button> -->
         <!-- <el-button type="warning"
                           plain
                           icon="el-icon-download"
@@ -150,15 +157,27 @@
       </template>
     </el-dialog>
 
-    <el-dialog title="用户基础价格导入" append-to-body v-model="excelBox" width="555px">
-      <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
-        <template #excelTemplate>
-          <el-button type="primary" @click="handleTemplate">
-            点击下载<i class="el-icon-download el-icon--right"></i>
-          </el-button>
-        </template>
-      </avue-form>
+
+
+    <el-dialog v-model="SCdialogVisible" title="数据导入" width="500">
+      <el-upload
+        class="upload-demo"
+        drag
+        action="/api/logpm-basicdata/basicdataFreight/import"
+        multiple
+        :headers="doubledCount"
+        :on-success="doubledCountSuce"
+      >
+        <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+        <div class="el-upload__text">上传EXCEL文档 <em>click to upload</em></div>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="SCdialogVisible = false">关闭</el-button>
+        </div>
+      </template>
     </el-dialog>
+    <div id="content"></div>
   </basic-container>
 </template>
 
@@ -173,17 +192,20 @@ import {
   $_brand,
   $_category,
   $_getDeptLazyTree,
+  $_basicdataFreight,
 } from '@/api/basicdata/basicdataFreight';
 // import option from "@/option/basicdata/basicdataFreight";
+import { ElMessage } from 'element-plus';
 import { mapGetters } from 'vuex';
 import { exportBlob } from '@/api/common';
 import { getDictionaryBiz } from '@/api/system/dict'; //字典
 import { getToken } from '@/utils/auth';
+import { popmsg } from '@/utils/poptxt';
 import { downloadXls } from '@/utils/util';
 import { dateNow } from '@/utils/date';
 import NProgress from 'nprogress';
 import 'nprogress/nprogress.css';
-
+import { ElNotification } from 'element-plus';
 export default {
   data() {
     return {
@@ -193,6 +215,7 @@ export default {
       excelBox: false,
       excelForm: {},
       loading: true,
+      SCdialogVisible: false,
       Detailspop: false,
       excelOption: {
         submitBtn: false,
@@ -209,7 +232,7 @@ export default {
               res: 'data',
             },
             tip: '请上传 .xls,.xlsx 标准格式文件',
-            action: '/api/logpm-basicdata/driverArtery/import-stockArticle',
+            action: '/api/logpm-basicdata/basicdataFreight/import',
           },
           {
             label: '模板下载',
@@ -639,6 +662,7 @@ export default {
       data: [],
     };
   },
+
   created() {
     // 字典公共函数
     //   updateDictionary(targetArray, dictionaryType) {
@@ -702,25 +726,30 @@ export default {
       });
       return ids.join(',');
     },
+    doubledCount() {
+      return { 'Blade-Auth': 'Bearer ' + getToken() };
+    },
   },
   methods: {
+    // 上传成功
+    doubledCountSuce(res) {
+      popmsg(res);
+    },
     uploadAfter(res, done, loading, column) {
+      console.log('121221');
       window.console.log(column);
+      console.log(res, 'res');
+
       this.excelBox = false;
       this.refreshChange();
       done();
+      this.$message.success('上传成功');
     },
-    //下载模板
-    handleTemplate() {
-      console.log('下载模板!!!');
-      exportBlob(
-        `/api/logpm-basicdata/driverArtery/export-basicdataDriverArteryMb?${
-          this.website.tokenHeader
-        }=${getToken()}`
-      ).then(res => {
-        downloadXls(res.data, '用户基础价格导入模板.xlsx');
-      });
+    success(res) {
+      console.log(res);
     },
+    //下载模板
+    handleTemplate() {},
     fuzhi(led, ed) {
       // console.log(">>>>",led,ed);
       this.option.column[27].dicData = led;
@@ -957,6 +986,36 @@ export default {
     handleImport() {
       this.excelBox = true;
     },
+    // 上传模板
+    UploadTemplate() {
+      this.SCdialogVisible = true;
+      // $_basicdataFreight().then(res=>{
+      //   console.log(res,'上传成功');
+      // })
+    },
+    // 下载模板
+    DownloadTemplate() {
+      var notification =  ElNotification({
+        title: '下载通知',
+        message: '正在下载中',
+        type: 'info',
+      });
+      console.log('下载模板!!!');
+      exportBlob(
+        `/api/logpm-basicdata/basicdataFreight/export-basicdataFreight?${
+          this.website.tokenHeader
+        }=${getToken()}&templateFlag=1`
+      ).then(res => {
+        ElMessage({
+          message: '下载成功',
+          type: 'success',
+        });
+        notification.close();
+        downloadXls(res.data, '用户基础价格导入模板.xlsx');
+      });
+    },
+    // 导出
+    ExportPrice() {},
     onLoad(page, params = {}) {
       this.loading = true;
 
@@ -1074,4 +1133,21 @@ export default {
   flex-direction: row;
   flex-wrap: nowrap !important;
 }
+#createdDiv {
+  z-index: 9999;
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%, -50%);
+  width: 50%;
+  height: 200px;
+  background-color: #ffffff;
+  overflow: scroll;
+  padding: 10px;
+  border-radius: 4px;
+  font-size: 16px;
+  br {
+    margin-top: 10px;
+  }
+}
 </style>
diff --git a/src/views/basicdata/brand/basicdataFreightFrom.vue b/src/views/basicdata/brand/basicdataFreightFrom.vue
index e33de3b6..f96164e6 100644
--- a/src/views/basicdata/brand/basicdataFreightFrom.vue
+++ b/src/views/basicdata/brand/basicdataFreightFrom.vue
@@ -4,7 +4,7 @@
       <el-form :disabled="view" ref="form" :model="form" label-width="120px" :rules="rules">
         <el-row :gutter="20">
           <el-col :span="10">
-            <el-form-item label="客户名称" prop="province">
+            <el-form-item label="客户名称" prop="clientIds">
               <el-select
                 style="width: 100%"
                 v-model="form.clientIds"
@@ -26,7 +26,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="10">
-            <el-form-item label="品牌" prop="goalGranary">
+            <el-form-item label="品牌" prop="brand">
               <el-select
                 style="width: 100%"
                 v-model="form.brand"
@@ -93,7 +93,7 @@
             </el-form-item>
           </el-col> -->
           <el-col :span="10" v-if="buyNow && eachRide">
-            <el-form-item label="品类" prop="brand">
+            <el-form-item label="品类" prop="category">
               <el-cascader
                 :props="propsType"
                 :show-all-levels="false"
@@ -104,10 +104,10 @@
             </el-form-item>
           </el-col>
           <el-col :span="10">
-          <el-form-item label="发货单位" prop="province">
+          <el-form-item label="发货单位" prop="forwardingUnitId">
               <el-select
                 style="width: 100%"
-                v-model="form.forwarding"
+                v-model="form.forwardingUnitId"
                 filterable
                 remote
                 reserve-keyword
@@ -126,7 +126,7 @@
             </el-form-item>
             </el-col>
           <el-col :span="10" v-if="buyNow && eachRide">
-            <el-form-item label="生效时间" prop="brand">
+            <el-form-item label="生效时间" prop="effectiveTime">
               <el-date-picker
                 style="width: 100%"
                 v-model="form.effectiveTime"
@@ -138,7 +138,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="10" v-if="buyNow && eachRide">
-            <el-form-item label="截止时间" prop="brand">
+            <el-form-item label="截止时间" prop="expirationTime">
               <el-date-picker
                 style="width: 100%"
                 v-model="form.expirationTime"
@@ -151,7 +151,7 @@
           </el-col>
 
           <el-col :span="10" v-if="buyNow && eachRide">
-            <el-form-item label="服务类型" prop="goalGranary">
+            <el-form-item label="服务类型" prop="typeService">
               <el-select
                 v-model="form.typeService"
                 multiple
@@ -323,7 +323,7 @@ import { mapGetters } from 'vuex';
 import { getDetail, add, update } from '@/api/basicdata/basicdataFreight';
 
 export default {
-  name: 'basicdataFreightFrom',
+  name: 'forwardingUnitId',
   data() {
     return {
       able: '',
@@ -379,10 +379,36 @@ export default {
       // 表单数据
       form: {},
       rules: {
-        // province: [
-        //   { required: true, message: '请选择地址', trigger: 'blur' },
-        //   // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
-        // ],
+        clientIds: [
+          { required: true, message: '请输入客户名称', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        forwardingUnitId: [
+          { required: true, message: '请输入发货单位', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        brand: [
+          { required: true, message: '请输入品牌', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        category: [
+          { required: true, message: '请选择品类', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+
+        effectiveTime: [
+          { required: true, message: '请选择生效时间', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        expirationTime: [
+          { required: true, message: '请选择截至时间', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        typeService: [
+          { required: true, message: '请选择服务类型', trigger: 'blur' },
+          // { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
+        ],
+        
       },
       propsType: {
         lazy: true,
@@ -531,12 +557,15 @@ export default {
         }).filter(item => item !== null);  // 过滤掉任何未匹配的值(null)
         console.log(matchedData,'筛选出来的值');
         this.form.categoryName = matchedData.map(res=>res.name).join(',')
- 
+        console.log(this.sendgoods,'发货单位');
+        console.log(this.form.forwardingUnitId,'当前发货单位');
+  
         this.form.name =  this.CustomerName.find(res=>res.id==this.form.clientIds).clientName;//客户名称
-        this.form.sendgoods=this.sendgoods.find(res=>res.id==this.form.forwarding).clientName;//发货单位名称
+        this.form.forwardingUnitName=this.sendgoods.find(res=>res.id==this.form.forwardingUnitId).clientName;//发货单位名称
         this.form.brandName= this.brandList.find(res=>res.brandId==this.form.brand).brandName;//品牌名称
         this.form.fixedPrice='0'
         console.log('提交的数据》》》', this.form);
+     
             add(this.form).then(() => {
               this.$store.commit('DEL_TAG_CURRENT'); //关闭当前页面
               this.$router.push('/basicdata/brand/basicdataFreight'); //添加成功跳转到列表
@@ -620,6 +649,14 @@ export default {
         this.buyNow = true;
       }
     },
+//     // 图片上传必须携带TOKEN
+// const headers = computed(() => {
+//   return { 'Blade-Auth': 'Bearer ' + getToken() };
+// });
+// // 图片上传接口
+// const doubledCount = computed(() => {
+//   return '/api/blade-resource/oss/endpoint/put-file';
+// });
     choiceRide(a) {
       //一口价选择
       console.log(a);