002201 2 jaren geleden
bovenliggende
commit
7bc4af7762

+ 8 - 0
src/api/business/purchase/contract.js

@@ -24,6 +24,14 @@ export function EXPORT(data) {
   });
 }
 
+export function IMPORT(params) {
+  return request({
+    url: "/pu/contract/importData",
+    method: "GET",
+    params: params,
+  });
+}
+
 export function EDIT(data) {
   return request({
     url: "/pu/contract/edit",

+ 48 - 17
src/components/FileUpload/index.vue

@@ -1,6 +1,7 @@
 <template>
   <div class="upload-file">
     <el-upload
+      drag
       multiple
       :action="uploadFileUrl"
       :before-upload="handleBeforeUpload"
@@ -15,7 +16,12 @@
       ref="fileUpload"
     >
       <!-- 上传按钮 -->
-      <el-button size="mini" type="primary">选取文件</el-button>
+      <!-- <el-button size="mini" type="primary">选取文件</el-button> -->
+      <i class="el-icon-upload"></i>
+      <div class="el-upload__text">
+        将文件拖到此处,或
+        <em>点击上传</em>
+      </div>
       <!-- 上传提示 -->
       <div class="el-upload__tip" slot="tip" v-if="showTip">
         请上传
@@ -41,11 +47,12 @@
         v-for="(file, index) in fileList"
       >
         <el-link
-          :href="`${baseUrl}${file.url}`"
+          :href="`${baseUrl}?id=${file.id}`"
           :underline="false"
           target="_blank"
         >
-          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
+          <!-- <span class="el-icon-document"> {{ getFileName(file.name) }} </span> -->
+          <span class="el-icon-document"> {{ file.name }} </span>
         </el-link>
         <div class="ele-upload-list__item-content-action">
           <el-link :underline="false" @click="handleDelete(index)" type="danger"
@@ -89,9 +96,10 @@ export default {
   data() {
     return {
       number: 0,
+      separator: ";",
       uploadList: [],
-      baseUrl: process.env.VUE_APP_BASE_API,
-      uploadFileUrl: process.env.VUE_APP_BASE_API + "/pu/contract/upload", // 上传文件服务器地址
+      baseUrl: "https://sy.derom.com/document-center/fastdfs/download",
+      uploadFileUrl: "/drp-file/document-center/fastdfs/upload",
       headers: {
         Authorization: "Bearer " + getToken(),
       },
@@ -104,15 +112,27 @@ export default {
         if (val) {
           let temp = 1;
           // 首先将值转为数组
-          const list = Array.isArray(val) ? val : this.value.split(",");
-          console.log("list", list);
+          const list = Array.isArray(val)
+            ? val
+            : this.value.split(this.separator);
           // 然后将数组转为对象数组
+          // this.fileList = list.map((item) => {
+          //   if (typeof item === "string") {
+          //     item = { name: item, url: item };
+          //   }
+          //   item.uid = item.uid || new Date().getTime() + temp++;
+          //   return item;
+          // });
           this.fileList = list.map((item) => {
-            if (typeof item === "string") {
-              item = { name: item, url: item };
-            }
-            item.uid = item.uid || new Date().getTime() + temp++;
-            return item;
+            item = JSON.parse(item);
+            console.log({
+              ...item,
+              uid: item.uid || new Date().getTime() + temp++,
+            });
+            return {
+              ...item,
+              uid: item.uid || new Date().getTime() + temp++,
+            };
           });
         } else {
           this.fileList = [];
@@ -167,8 +187,12 @@ export default {
     },
     // 上传成功回调
     handleUploadSuccess(res, file) {
-      if (res.code === 200) {
-        this.uploadList.push({ name: res.fileName, url: res.fileName });
+      if (res.code * 1 === 200) {
+        this.uploadList.push({
+          id: res.id,
+          url: res.filepath,
+          name: res.filename,
+        });
         this.uploadedSuccessfully();
       } else {
         this.number--;
@@ -181,7 +205,7 @@ export default {
     // 删除文件
     handleDelete(index) {
       this.fileList.splice(index, 1);
-      this.$emit("input", this.listToString(this.fileList));
+      this.$emit("input", this.listToString(this.fileList, this.separator));
     },
     // 上传结束处理
     uploadedSuccessfully() {
@@ -189,7 +213,7 @@ export default {
         this.fileList = this.fileList.concat(this.uploadList);
         this.uploadList = [];
         this.number = 0;
-        this.$emit("input", this.listToString(this.fileList));
+        this.$emit("input", this.listToString(this.fileList, this.separator));
         this.$modal.closeLoading();
       }
     },
@@ -203,10 +227,17 @@ export default {
     },
     // 对象转成指定字符串分隔
     listToString(list, separator) {
+      list = list.map((file) =>
+        JSON.stringify({
+          id: file.id,
+          url: file.url,
+          name: file.name,
+        })
+      );
       let strs = "";
       separator = separator || ",";
       for (let i in list) {
-        strs += list[i].url + separator;
+        strs += list[i] + separator;
       }
       return strs != "" ? strs.substr(0, strs.length - 1) : "";
     },

+ 40 - 0
src/utils/request.js

@@ -128,6 +128,7 @@ service.interceptors.response.use(
       // Message({ message: msg, type: "warning" });
       return Promise.reject("error");
     } else if (code !== 200) {
+      console.log("code", code);
       Notification.error({ title: msg });
       return Promise.reject("error");
     } else {
@@ -188,4 +189,43 @@ export function download(url, params, filename, config) {
     });
 }
 
+// // 通用上传方法
+// export function upload(url, params, filename, config) {
+//   downloadLoadingInstance = Loading.service({
+//     text: "正在上传数据,请稍候",
+//     spinner: "el-icon-loading",
+//     background: "rgba(255, 255, 255, 0.7)",
+//   });
+//   return service
+//     .post(url, params, {
+//       transformRequest: [
+//         (params) => {
+//           return tansParams(params);
+//         },
+//       ],
+//       headers: { "Content-Type": "application/x-www-form-urlencoded" },
+//       responseType: "blob",
+//       ...config,
+//     })
+//     .then(async (data) => {
+//       const isBlob = blobValidate(data);
+//       if (isBlob) {
+//         const blob = new Blob([data]);
+//         saveAs(blob, filename);
+//       } else {
+//         const resText = await data.text();
+//         const rspObj = JSON.parse(resText);
+//         const errMsg =
+//           errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
+//         Message.error(errMsg);
+//       }
+//       downloadLoadingInstance.close();
+//     })
+//     .catch((r) => {
+//       console.error(r);
+//       Message.error("下载文件出现错误,请联系管理员!");
+//       downloadLoadingInstance.close();
+//     });
+// }
+
 export default service;

+ 68 - 54
src/utils/ruoyi.js

@@ -1,5 +1,3 @@
-
-
 /**
  * 通用js方法封装处理
  * Copyright (c) 2019 ruoyi
@@ -8,22 +6,25 @@
 // 日期格式化
 export function parseTime(time, pattern) {
   if (arguments.length === 0 || !time) {
-    return null
+    return null;
   }
-  const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
-  let date
-  if (typeof time === 'object') {
-    date = time
+  const format = pattern || "{y}-{m}-{d} {h}:{i}:{s}";
+  let date;
+  if (typeof time === "object") {
+    date = time;
   } else {
-    if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
-      time = parseInt(time)
-    } else if (typeof time === 'string') {
-      time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
+    if (typeof time === "string" && /^[0-9]+$/.test(time)) {
+      time = parseInt(time);
+    } else if (typeof time === "string") {
+      time = time
+        .replace(new RegExp(/-/gm), "/")
+        .replace("T", " ")
+        .replace(new RegExp(/\.[\d]{3}/gm), "");
     }
-    if ((typeof time === 'number') && (time.toString().length === 10)) {
-      time = time * 1000
+    if (typeof time === "number" && time.toString().length === 10) {
+      time = time * 1000;
     }
-    date = new Date(time)
+    date = new Date(time);
   }
   const formatObj = {
     y: date.getFullYear(),
@@ -32,18 +33,20 @@ export function parseTime(time, pattern) {
     h: date.getHours(),
     i: date.getMinutes(),
     s: date.getSeconds(),
-    a: date.getDay()
-  }
+    a: date.getDay(),
+  };
   const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
-    let value = formatObj[key]
+    let value = formatObj[key];
     // Note: getDay() returns 0 on Sunday
-    if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] }
+    if (key === "a") {
+      return ["日", "一", "二", "三", "四", "五", "六"][value];
+    }
     if (result.length > 0 && value < 10) {
-      value = '0' + value
+      value = "0" + value;
     }
-    return value || 0
-  })
-  return time_str
+    return value || 0;
+  });
+  return time_str;
 }
 
 // 表单重置
@@ -56,14 +59,19 @@ export function resetForm(refName) {
 // 添加日期范围
 export function addDateRange(params, dateRange, propName) {
   let search = params;
-  search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
+  search.params =
+    typeof search.params === "object" &&
+    search.params !== null &&
+    !Array.isArray(search.params)
+      ? search.params
+      : {};
   dateRange = Array.isArray(dateRange) ? dateRange : [];
-  if (typeof (propName) === 'undefined') {
-    search.params['beginTime'] = dateRange[0];
-    search.params['endTime'] = dateRange[1];
+  if (typeof propName === "undefined") {
+    search.params["beginTime"] = dateRange[0];
+    search.params["endTime"] = dateRange[1];
   } else {
-    search.params['begin' + propName] = dateRange[0];
-    search.params['end' + propName] = dateRange[1];
+    search.params["begin" + propName] = dateRange[0];
+    search.params["end" + propName] = dateRange[1];
   }
   return search;
 }
@@ -75,20 +83,20 @@ export function selectDictLabel(datas, value) {
   }
   var actions = [];
   Object.keys(datas).some((key) => {
-    if (datas[key].value == ('' + value)) {
+    if (datas[key].value == "" + value) {
       actions.push(datas[key].label);
       return true;
     }
-  })
+  });
   if (actions.length === 0) {
     actions.push(value);
   }
-  return actions.join('');
+  return actions.join("");
 }
 
 // 回显数据字典(字符串、数组)
 export function selectDictLabels(datas, value, separator) {
-  if (value === undefined || value.length ===0) {
+  if (value === undefined || value.length === 0) {
     return "";
   }
   if (Array.isArray(value)) {
@@ -100,30 +108,32 @@ export function selectDictLabels(datas, value, separator) {
   Object.keys(value.split(currentSeparator)).some((val) => {
     var match = false;
     Object.keys(datas).some((key) => {
-      if (datas[key].value == ('' + temp[val])) {
+      if (datas[key].value == "" + temp[val]) {
         actions.push(datas[key].label + currentSeparator);
         match = true;
       }
-    })
+    });
     if (!match) {
       actions.push(temp[val] + currentSeparator);
     }
-  })
-  return actions.join('').substring(0, actions.join('').length - 1);
+  });
+  return actions.join("").substring(0, actions.join("").length - 1);
 }
 
 // 字符串格式化(%s )
 export function sprintf(str) {
-  var args = arguments, flag = true, i = 1;
+  var args = arguments,
+    flag = true,
+    i = 1;
   str = str.replace(/%s/g, function () {
     var arg = args[i++];
-    if (typeof arg === 'undefined') {
+    if (typeof arg === "undefined") {
       flag = false;
-      return '';
+      return "";
     }
     return arg;
   });
-  return flag ? str : '';
+  return flag ? str : "";
 }
 
 // 转换字符串,undefined,null等转化为""
@@ -148,7 +158,7 @@ export function mergeRecursive(source, target) {
     }
   }
   return source;
-};
+}
 
 /**
  * 构造树型结构数据
@@ -159,9 +169,9 @@ export function mergeRecursive(source, target) {
  */
 export function handleTree(data, id, parentId, children) {
   let config = {
-    id: id || 'id',
-    parentId: parentId || 'parentId',
-    childrenList: children || 'children'
+    id: id || "id",
+    parentId: parentId || "parentId",
+    childrenList: children || "children",
   };
 
   var childrenListMap = {};
@@ -202,19 +212,23 @@ export function handleTree(data, id, parentId, children) {
 }
 
 /**
-* 参数处理
-* @param {*} params  参数
-*/
+ * 参数处理
+ * @param {*} params  参数
+ */
 export function tansParams(params) {
-  let result = ''
+  let result = "";
   for (const propName of Object.keys(params)) {
     const value = params[propName];
     var part = encodeURIComponent(propName) + "=";
-    if (value !== null && value !== "" && typeof (value) !== "undefined") {
-      if (typeof value === 'object') {
+    if (value !== null && value !== "" && typeof value !== "undefined") {
+      if (typeof value === "object") {
         for (const key of Object.keys(value)) {
-          if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') {
-            let params = propName + '[' + key + ']';
+          if (
+            value[key] !== null &&
+            value[key] !== "" &&
+            typeof value[key] !== "undefined"
+          ) {
+            let params = propName + "[" + key + "]";
             var subPart = encodeURIComponent(params) + "=";
             result += subPart + encodeURIComponent(value[key]) + "&";
           }
@@ -224,10 +238,10 @@ export function tansParams(params) {
       }
     }
   }
-  return result
+  return result;
 }
 
 // 验证是否为blob格式
 export function blobValidate(data) {
-  return data.type !== 'application/json'
+  return data.type !== "application/json";
 }

+ 34 - 12
src/views/purchase/contract/import/index.vue

@@ -1,5 +1,6 @@
 <script>
-import { REMOVE } from "@/api/business/purchase/contract";
+import { getToken } from "@/utils/auth";
+import { IMPORTTEMPLATE } from "@/api/business/purchase/contract";
 export default {
   name: "ImportDialog",
   data() {
@@ -12,10 +13,10 @@ export default {
         updateSupport: 0,
         // 设置上传的请求头部
         headers: {
-          // Authorization: "Bearer " + getToken()
+          Authorization: "Bearer " + getToken(),
         },
         // 上传的地址
-        url: process.env.VUE_APP_BASE_API + "/system/user/importData",
+        url: "/drp-file/document-center/fastdfs/upload",
       },
     };
   },
@@ -30,22 +31,35 @@ export default {
     hide() {
       this.visible = false;
     },
-    /** 下载模板操作 */
-    importTemplate() {
-      importTemplate().then((response) => {
-        this.download(response.msg);
-      });
+    //
+    async importTemplate() {
+      try {
+        const { msg, code } = await IMPORTTEMPLATE();
+        if (code === 200) {
+          this.download(msg, {});
+        } else {
+          this.$notify.warning({ title: msg });
+        }
+      } catch (err) {
+        // catch
+      } finally {
+        // finally
+      }
     },
     // 文件上传中处理
     progress(event, file, fileList) {
+      console.log(event, file, fileList);
       this.upload.isUploading = true;
     },
     // 文件上传成功处理
     success(response, file, fileList) {
+      const { message: msg } = response;
       this.upload.open = false;
       this.upload.isUploading = false;
       this.$refs.upload.clearFiles();
-      this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
+      this.$alert(msg, "导入结果", {
+        dangerouslyUseHTMLString: true,
+      });
       this.getList();
     },
     //
@@ -77,11 +91,19 @@ export default {
         将文件拖到此处,或
         <em>点击上传</em>
       </div>
-      <div class="el-upload__tip" slot="tip">
+      <div
+        class="el-upload__tip"
+        slot="tip"
+        style="display: flex; align-items: center"
+      >
         <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
-        <el-link type="info" style="font-size: 12px" @click="importTemplate"
-          >下载模板</el-link
+        <el-link
+          type="info"
+          style="font-size: 12px; margin-left: 10px"
+          @click="importTemplate"
         >
+          下载模板
+        </el-link>
       </div>
       <div class="el-upload__tip" style="color: red" slot="tip">
         提示:仅允许导入“xls”或“xlsx”格式文件!

+ 8 - 8
vue.config.js

@@ -37,7 +37,7 @@ module.exports = {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://172.16.100.107:8080/drp-admin`, //测试
-        target: `http://test-sy.derom.com/drp-admin`, //测试
+        // target: `http://test-sy.derom.com/drp-admin`, //测试
         // target: `http://release-sy.derom.com/drp-admin`, //预发
         // target: `http://sy.derom.com/drp-admin`, //生产
         // target: `http://172.16.63.202:8000/drp-admin`, // D本地
@@ -51,10 +51,10 @@ module.exports = {
           ["^" + process.env.VUE_APP_BASE_API]: "",
         },
       },
-      "/drp-admin/mock34": {
-        target: `http://172.16.100.123:3030/mock/34`,
+      "/drp-file": {
+        target: `https://sy.derom.com`,
         changeOrigin: true,
-        pathRewrite: { [`^/drp-admin/mock34`]: "" },
+        pathRewrite: { [`^/drp-file`]: "" },
       },
     },
     disableHostCheck: true,
@@ -137,10 +137,10 @@ module.exports = {
         },
       });
       config.optimization.runtimeChunk("single"),
-      {
-        from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
-        to: "./", //到根目录下
-      };
+        {
+          from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
+          to: "./", //到根目录下
+        };
     });
   },
 };