Browse Source

提交修复

luobang 2 năm trước cách đây
mục cha
commit
466caaad83

+ 1 - 1
build/utils.js

@@ -15,7 +15,7 @@ const devPathSrc = path.resolve(__dirname, '../../../src') // node_modules应用
 // ['index','appoint','configManager','homepage',''inward,'queue','RMS','sale','serviceManager','SporadicManage'
 //       统计报表       组织机构/系统管理 采购  仓储
 //  'statisticalReport','systemConfig','TMS','WMS','workFlow','ADMINISTRATORS']
-// let devModules = ['index', 'statisticalReport', 'inward']
+// let devModules = ['index', 'statisticalReport', 'queue']
 let devModules = ['all']
 //let devModules=['index']
 if (pathSrc.indexOf('node_modules') > -1) {

+ 105 - 104
src/components/DilCommonUI/packages/table/src/table.js

@@ -1,4 +1,4 @@
-import Sortablejs from "sortablejs";
+import Sortablejs from 'sortablejs'
 export default {
   data() {
     return {
@@ -21,17 +21,17 @@ export default {
       // 保存表格所有页面所选中的数据
       dataRadioId: [],
       // 保存表格单选的数据 保存数据的id
-      dataRadioId: ""
-    };
+      dataRadioId: ''
+    }
   },
   created() {
     if (this.isHeigth) {
-      window.addEventListener("resize", this.getHeight);
-      this.getHeight();
+      window.addEventListener('resize', this.getHeight)
+      this.getHeight()
     }
-    this.dataCurrentPage = this.currentPage;
-    this.dataPageSize = this.pageSize;
-    this.requestData();
+    this.dataCurrentPage = this.currentPage
+    this.dataPageSize = this.pageSize
+    this.requestData()
   },
   mounted() {
     //行拖拽
@@ -41,37 +41,37 @@ export default {
   },
   methods: {
     getHeight() {
-      this.height = window.innerHeight - this.shiyHeigth;
+      this.height = window.innerHeight - this.shiyHeigth
     },
     // 通过请求获取数据
     requestData(options) {
-      let pageNum = undefined;
-      let pageSize = undefined;
+      let pageNum = undefined
+      let pageSize = undefined
 
       if (options) {
-        pageNum = options.pageNum;
-        pageSize = options.pageSize;
+        pageNum = options.pageNum
+        pageSize = options.pageSize
       }
 
       if (this.requestUrl) {
         // 处理请求地址逻辑
-        let url;
-        if (this.requestUrl.indexOf("//") > -1) {
-          url = this.requestUrl;
+        let url
+        if (this.requestUrl.indexOf('//') > -1) {
+          url = this.requestUrl
         } else {
-          url = this.requestUrl;
+          url = this.requestUrl
         }
         // 判断是否需要在请求体中放入参数
         if (this.requestQuery) {
-          this.dataRequestQuery = this.requestQuery;
+          this.dataRequestQuery = this.requestQuery
         }
-        let data = undefined;
+        let data = undefined
         for (const key in this.dataRequestQuery) {
-          const val = this.dataRequestQuery[key];
+          const val = this.dataRequestQuery[key]
 
           if (val || val == 0) {
-            if (!data) data = {};
-            data[key] = val;
+            if (!data) data = {}
+            data[key] = val
           }
         }
         //判断是否是带分页查询
@@ -86,16 +86,17 @@ export default {
               }
             })
             .then(response => {
-              let d = response.data.data;
-              this.dataTabel = d.list;
-              this.dataTotal = d.total;
+              let d = response.data.data
+              this.dataTabel = d.list
+              this.dataTotal = d.total
               //执行成功的回调
-              this.$emit("func", response.data.data);
-              this.refreshColumnData(d.columnData);
+              this.$emit('func', response.data.data)
+              this.refreshColumnData(d.columnData)
               //this.$refs.mainTable.getTableConfig();
-              this.isShow = true;
-            });
+              this.isShow = true
+            })
         } else {
+          this.dataCurrentPage = 1
           // 发送请求
           this.axios
             .post(url, data, {
@@ -106,27 +107,27 @@ export default {
               }
             })
             .then(response => {
-              let d = response.data.data;
-              this.dataTabel = d.list;
-              this.dataTotal = d.total;
+              let d = response.data.data
+              this.dataTabel = d.list
+              this.dataTotal = d.total
               //执行成功的回调
-              this.$emit("func", response.data.data);
-              this.refreshColumnData(d.columnData);
+              this.$emit('func', response.data.data)
+              this.refreshColumnData(d.columnData)
               //this.$refs.mainTable.getTableConfig();
-              this.isShow = true;
-            });
+              this.isShow = true
+            })
         }
       } else {
-        console.warn("requestUrl 参数不能为 null");
+        console.warn('requestUrl 参数不能为 null')
       }
     },
     // 刷新表头显示数据
     refreshColumnData(columnData) {
       // 如果前端有写表头,则加在后端表头前面
-      const d = this.columnData.concat(columnData);
+      const d = this.columnData.concat(columnData)
       // 把操作列拼接到最后一列
-      this.dataColumnData = d;
-      this.dataDropColumn = [].concat(this.dataColumnData);
+      this.dataColumnData = d
+      this.dataDropColumn = [].concat(this.dataColumnData)
     },
     // 排序回调
     sortChange({ column, prop, order }) {
@@ -151,108 +152,108 @@ export default {
 
       // 后端排序
       let s = {
-        ascending: "asc",
-        descending: "desc"
-      };
+        ascending: 'asc',
+        descending: 'desc'
+      }
 
       let value = {
         orderType: s[order] || undefined,
         orderField: order ? prop : undefined
-      };
+      }
 
-      this.setDataRequestQuery(value);
+      this.setDataRequestQuery(value)
     },
     // 更新请求参数
     setDataRequestQuery(value) {
-      let q = this.dataRequestQuery;
+      let q = this.dataRequestQuery
       for (const key in value) {
-        q[key] = value[key];
+        q[key] = value[key]
       }
-      this.requestData(q);
-      this.$emit("update:requestQuery", q);
-      this.dataRequestQuery = q;
+      this.requestData(q)
+      this.$emit('update:requestQuery', q)
+      this.dataRequestQuery = q
     },
     // 格式化字符串
     getString(str) {
       if (str != null && str != undefined && str.toString) {
-        return str.toString();
+        return str.toString()
       } else {
-        return str || "";
+        return str || ''
       }
     },
     // 当某一行被点击时会触发该事件
     rowClick(row, column, event) {
-      if (this.selectionType == "radio") {
+      if (this.selectionType == 'radio') {
         if (this.dataRadioId == row.ROW_ID) {
-          this.dataRadioId = "";
-          row = {};
+          this.dataRadioId = ''
+          row = {}
         } else {
-          this.dataRadioId = row.ROW_ID;
+          this.dataRadioId = row.ROW_ID
         }
-        this.$emit("radio-change", row);
+        this.$emit('radio-change', row)
       }
     },
     // 多选的选中行改变回调
     selectionChange(selection) {
       // this.dataSelection = selection;
       // 将多选中的数据抛出
-      this.$emit("selection-change", selection);
+      this.$emit('selection-change', selection)
     },
     // 当表格的筛选条件发生变化的时候会触发该事件,
     // 参数的值是一个对象,对象的 key 是 column 的 columnKey,对应的 value 为用户选择的筛选条件的数组。
     filterChange(filters) {
-      let value = {};
+      let value = {}
       for (const key in filters) {
-        value[key] = filters[key].length > 0 ? filters[key] : undefined;
+        value[key] = filters[key].length > 0 ? filters[key] : undefined
       }
       // 每次筛选时,都默认将页面改为第一页,避免数据过少时,显示没有数据
-      this.currentChange(1, false);
-      this.setDataRequestQuery(value);
+      this.currentChange(1, false)
+      this.setDataRequestQuery(value)
     },
     // 行拖拽
     rowDrop() {
-      const tbody = document.querySelector(".el-table__body-wrapper tbody");
-      const _this = this;
+      const tbody = document.querySelector('.el-table__body-wrapper tbody')
+      const _this = this
       Sortablejs.create(tbody, {
         onEnd({ newIndex, oldIndex }) {
-          const currRow = _this.dataTabel.splice(oldIndex, 1)[0];
-          _this.dataTabel.splice(newIndex, 0, currRow);
+          const currRow = _this.dataTabel.splice(oldIndex, 1)[0]
+          _this.dataTabel.splice(newIndex, 0, currRow)
         }
-      });
+      })
     },
     // 列拖拽
     columnDrop() {
-      const wrapperTr = document.querySelector(".el-table__header-wrapper tr");
+      const wrapperTr = document.querySelector('.el-table__header-wrapper tr')
       this.sortablejs = Sortablejs.create(wrapperTr, {
         animation: 180,
         delay: 0,
-        handle: ".allowDrag",
+        handle: '.allowDrag',
         onEnd: evt => {
           // 因为序号列和单多选列不在数组中,所以需要进行偏移计算
-          const offset = this.dragColumnOffset;
-          evt.oldIndex -= offset;
-          evt.newIndex -= offset;
+          const offset = this.dragColumnOffset
+          evt.oldIndex -= offset
+          evt.newIndex -= offset
           // 换列
-          const oldItem = this.dataDropColumn[evt.oldIndex];
-          this.dataDropColumn.splice(evt.oldIndex, 1);
-          this.dataDropColumn.splice(evt.newIndex, 0, oldItem);
+          const oldItem = this.dataDropColumn[evt.oldIndex]
+          this.dataDropColumn.splice(evt.oldIndex, 1)
+          this.dataDropColumn.splice(evt.newIndex, 0, oldItem)
         }
-      });
+      })
     },
     // current-page 改变时会触发
     currentChange(val, isRequest = true) {
       if (isRequest) {
-        this.requestData({ pageNum: val });
+        this.requestData({ pageNum: val })
       }
       // 最后通知父节点页面改变
-      this.dataCurrentPage = val;
-      this.$emit("update:current-page", val);
+      this.dataCurrentPage = val
+      this.$emit('update:current-page', val)
     },
     // pageSize 改变时会触发
     sizeChange(val) {
-      this.dataPageSize = val;
-      this.requestData({});
-      this.$emit("update:size-change", val);
+      this.dataPageSize = val
+      this.requestData({})
+      this.$emit('update:size-change', val)
     }
   },
   computed: {
@@ -260,53 +261,53 @@ export default {
     dataSortable() {
       return function(item) {
         if (item.template) {
-          return false;
+          return false
         } else if (item.sortable) {
-          return item.sortable;
+          return item.sortable
         } else {
-          return this.sortable;
+          return this.sortable
         }
-      };
+      }
     },
     // 计算每列的最小宽度
     dataColumnMinWidth() {
       return function(item) {
-        let mw = 0;
+        let mw = 0
         if (this.dataSortable(item)) {
           // 如果使用排序功能
-          mw += 30;
+          mw += 30
         }
 
         if (item.filters && item.filters.length > 0) {
-          mw += 20;
+          mw += 20
         }
         if (item.label) {
-          mw += item.label.toString().length * 30;
+          mw += item.label.toString().length * 30
         }
-        return mw;
-      };
+        return mw
+      }
     },
     // 计算拖拽列的偏移差
     dragColumnOffset() {
-      let o = 0;
+      let o = 0
       if (this.showIndex) {
-        o++;
+        o++
       }
-      if (this.selectionType != "") {
-        o++;
+      if (this.selectionType != '') {
+        o++
       }
-      return o;
+      return o
     }
   },
   watch: {
     requestQuery: {
       deep: true,
       handler(val, oldVal) {
-        let q = this.dataRequestQuery;
+        let q = this.dataRequestQuery
         for (const key in val) {
-          q[key] = val[key] ? val[key] : undefined;
+          q[key] = val[key] ? val[key] : undefined
         }
-        this.setDataRequestQuery(q);
+        this.setDataRequestQuery(q)
       }
     }
   },
@@ -316,18 +317,18 @@ export default {
     componentProxy: {
       props: {
         html: {
-          default: ""
+          default: ''
         },
         scope: {
           default() {
-            return {};
+            return {}
           }
         }
       },
       template: ``,
       created() {
-        this.$options.template = this.html;
+        this.$options.template = this.html
       }
     }
   }
-};
+}

+ 60 - 0
src/utils/base64ToBlob.js

@@ -0,0 +1,60 @@
+/**
+ * desc: base64对象转blob文件对象
+ * @param urlData  :数据的base64对象
+ * @param type  :类型 png,pdf,doc,mp3等;
+ * @returns {Blob}:Blob文件对象
+ */
+function base64ToBlob(urlData, type) {
+  let arr = urlData.split(',')
+  let array = arr[0].match(/:(.*?);/)
+  let mime = (array && array.length > 1 ? array[1] : type) || type
+  // 去掉url的头,并转化为byte
+  let bytes = window.atob(arr[1])
+  // 处理异常,将ascii码小于0的转换为大于0
+  let ab = new ArrayBuffer(bytes.length)
+  // 生成视图(直接针对内存):8位无符号整数,长度1个字节
+  let ia = new Uint8Array(ab)
+  for (let i = 0; i < bytes.length; i++) {
+    ia[i] = bytes.charCodeAt(i)
+  }
+  return new Blob([ab], {
+    type: mime
+  })
+}
+
+/**
+ * desc: 下载导出文件
+ * @param blob  :返回数据的blob对象或链接
+ * @param fileName  :下载后文件名标记
+ * @param fileType  :文件类 word(docx) excel(xlsx) ppt等
+ */
+function downloadExportFile(blob, fileName, fileType) {
+  let downloadElement = document.createElement('a')
+  let href = blob
+
+  if (typeof blob == 'string') {
+    downloadElement.target = '_blank'
+  } else {
+    href = window.URL.createObjectURL(blob) //创建下载的链接
+  }
+  console.log(href, 'href')
+  downloadElement.href = href
+  downloadElement.download = fileName + '.' + fileType //下载后文件名
+  document.body.appendChild(downloadElement)
+  downloadElement.click() //触发点击下载
+  document.body.removeChild(downloadElement) //下载完成移除元素
+  if (typeof blob != 'string') {
+    window.URL.revokeObjectURL(href) //释放掉blob对象
+  }
+}
+
+/**
+ * desc: base64转文件并下载
+ * @param base64 {String} : base64数据
+ * @param fileType {String} : 要导出的文件类型png,pdf,doc,mp3等
+ * @param fileName {String} : 文件名
+ */
+export function downloadFile(base64, fileName, fileType) {
+  let blob = base64ToBlob(base64, fileType) // 转成blob对象
+  downloadExportFile(blob, fileName, fileType) // 下载文件
+}

+ 45 - 42
src/views/statisticalReport/components/salesLogisticsStatistics/saleSteelReports.vue

@@ -370,22 +370,18 @@
     </div>
     <div>
       <vxe-modal
-        width="549px"
-        height="731px"
+        width="80%"
+        height="80%"
         v-model="isShow3"
         show-footer
         class="vxeModal"
       >
-          <div
-          class="demo-image__preview"
-          v-for="item in srcList"
-          :key="item.src"
-        >
+        <div class="demo-image__preview" v-for="(item, i) in srcList" :key="i">
           <span>{{ item.title }}</span>
           <el-image
-            style="height:731px;text-align:center"
             :src="item.src"
-            @click="receiveClick(item.src)"
+            fit="fill"
+            @click.prevent.right="receiveClick(item.src, '抵达')"
           >
             <div slot="error" class="image-slot">
               <span>司机未上传图片</span>
@@ -393,17 +389,12 @@
           </el-image>
         </div>
       </vxe-modal>
-      <vxe-modal width="549px" height="731px" v-model="isShow4" show-footer>
-        <div
-          class="demo-image__preview"
-          v-for="item in srcList2"
-          :key="item.src"
-        >
-          <span>{{ item.title }}</span>
+      <vxe-modal width="80%" height="80%" v-model="isShow4">
+        <div class="demo-image__preview" v-for="(item, i) in srcList2" :key="i">
           <el-image
-            style="height:731px;text-align:center"
             :src="item.src"
-            @click="receiveClick(item.src)"
+            fit="fill"
+            @click.prevent.right="receiveClick(item.src, '签收')"
           >
             <div slot="error" class="image-slot">
               <span>司机未上传图片</span>
@@ -771,17 +762,20 @@
           >
             <div class="demo-image__preview">
               <div
-              class="demo-image__preview"
-              v-for="(item, index) in srcList"
-              :key="index"
-            >
-              <span>{{ item.title }}</span>
-              <el-image style="height:731px;text-align:center" :src="item.src">
-                <div slot="error" class="image-slot">
-                  <span>司机未上传抵达图片</span>
-                </div>
-              </el-image>
-            </div>
+                class="demo-image__preview"
+                v-for="(item, index) in srcList"
+                :key="index"
+              >
+                <span>{{ item.title }}</span>
+                <el-image
+                  style="height:731px;text-align:center"
+                  :src="item.src"
+                >
+                  <div slot="error" class="image-slot">
+                    <span>司机未上传抵达图片</span>
+                  </div>
+                </el-image>
+              </div>
             </div>
           </vxe-modal>
           <vxe-modal
@@ -999,7 +993,7 @@
       :visible.sync="arrivalReceiving"
       :before-close="closeUpload"
     >
-      <el-form  style="margin-left:20%">
+      <el-form style="margin-left:20%">
         <el-form-item label="车牌号码">
           <el-input
             v-model="capacityNumber"
@@ -1060,6 +1054,7 @@ import { sjTime, isVehicleNumber } from '@/utils/sharedJsFile'
 import { getCookie } from '@/utils/util.js'
 import PathView from './mapTest.vue'
 import currentLocation from './currentLocation.vue'
+import { downloadFile } from '@/utils/base64ToBlob.js'
 export default {
   components: {
     PathView,
@@ -1268,6 +1263,7 @@ export default {
       originalPriceValue: null,
       originalAddress: null,
       aaadrawer: false,
+      downloadCapacityNo: null,
       ops: {
         vuescroll: {},
         scrollPanel: {},
@@ -1378,9 +1374,10 @@ export default {
   },
   computed: {},
   methods: {
-    receiveClick(src) {
-      this.dialogImageUrl = src
-      this.dialogVisible = true
+    receiveClick(src, title) {
+      // this.dialogImageUrl = src
+      downloadFile(src, `${this.downloadCapacityNo}${title}照片`, '.jpg')
+      // this.dialogVisible = true
     },
     selectAddresClick() {
       if (this.addresText) {
@@ -1542,7 +1539,7 @@ export default {
       this.isLoading = true
       //上传抵达
       let formData = new window.FormData()
-      formData.append('file1', this.fileListArrival[0].raw);
+      formData.append('file1', this.fileListArrival[0].raw)
       formData.append('file2', this.fileListArrival[1].raw)
       formData.append('orderNumber', this.orderNumber)
       formData.append('resultArrivalAddress', this.location)
@@ -1895,11 +1892,13 @@ export default {
       console.log(row)
       if (column.property == 'arrivalAddress') {
         if (row.orderNo && row.arrivalAddress) {
+          this.downloadCapacityNo = row.capacityNo
           this.toPhotoClick(row.orderNo, 1)
         }
       }
       if (column.property == 'receiptAddress') {
         if (row.orderNo && row.receiptAddress) {
+          this.downloadCapacityNo = row.capacityNo
           this.receipctPhotoClick(row.orderNo, 1)
         }
       }
@@ -1945,14 +1944,14 @@ export default {
         .post('/api/v1/otms/getArrivalPhoto?orderNumber=' + orderNo)
         .then(res => {
           this.srcList = []
-           this.srcList.push({
-              title: '车头照片',
-              src: res.data[0]
-            });
-            this.srcList.push({
-              title: '满货箱照片',
-              src: res.data[1]
-            });
+          this.srcList.push({
+            title: '车头照片',
+            src: res.data[0]
+          })
+          this.srcList.push({
+            title: '满货箱照片',
+            src: res.data[1]
+          })
           if (num == 1) {
             this.isShow3 = true
           } else {
@@ -2925,6 +2924,10 @@ export default {
       background-color: transparent;
     }
   }
+  .demo-image__preview {
+    // width: 100%;
+    // height: 100%;
+  }
   .dialog {
     .steelMapClass {
       .steelMapClass1 {