فهرست منبع

Merge branch 'V0.0.2' of http://10.87.10.227:4000/jzyd_yyds/soc_web into V0.0.2

luojun 2 سال پیش
والد
کامیت
19bc489c32
4فایلهای تغییر یافته به همراه342 افزوده شده و 40 حذف شده
  1. 1 1
      src/api/system/public.js
  2. 290 0
      src/components/ImgsUpload/index.vue
  3. 1 2
      src/views/system/dept/dialog.edit.vue
  4. 50 37
      src/views/system/dept/extend.vue

+ 1 - 1
src/api/system/public.js

@@ -37,7 +37,7 @@ export function businessTreeSelect(para) {
 }
 
 
-export function wholeTreeSelect(para) {  
+export function wholeTreeSelect(para) {
   if(!para) {
     para={
       orgId:"",

+ 290 - 0
src/components/ImgsUpload/index.vue

@@ -0,0 +1,290 @@
+<template>
+  <div class="component-upload-image">
+    <el-upload
+      :multiple="limit> 1"
+      action="#"
+      list-type="picture-card"
+      :on-success="handleUploadSuccess"
+      :before-upload="handleBeforeUpload"
+      :limit="limit"
+      :on-error="handleUploadError"
+      :on-exceed="handleExceed"
+      ref="imageUpload"
+      :on-remove="handleDelete"
+      :show-file-list="true"
+      :headers="headers"
+      :file-list="fileList"
+      :on-preview="handlePictureCardPreview"
+      :http-request="uploadImage"
+      :class="{ hide: fileList.length >= limit }"
+    >
+      <i class="el-icon-plus"></i>
+      <!-- 上传提示 -->
+      <div class="el-upload__tip" slot="tip" v-if="showTip">
+        请上传
+        <template v-if="fileSize">
+          大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
+        </template>
+        <template v-if="fileType">
+          格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+        </template>
+        的文件
+      </div>
+    </el-upload>
+
+    <DialogCom
+      :visible.sync="dialogVisible"
+      title="预览"
+      width="800"
+      append-to-body
+    >
+      <img
+        :src="dialogImageUrl"
+        style="display: block; max-width: 100%; margin: 0 auto"
+      />
+    </DialogCom>
+  </div>
+</template>
+
+<script>
+import { getToken } from "@/utils/auth";
+import { upload } from "@/api/system/public";
+import {imageUrl} from "@/utils/ruoyi";
+
+export default {
+  props: {
+    value: [String, Object, Array],
+    limit: {
+      type: Number,
+      default: 5,
+    },
+    // 大小限制(MB)
+    fileSize: {
+      type: Number,
+      default: 5,
+    },
+    // 文件类型, 例如['png', 'jpg', 'jpeg']
+    fileType: {
+      type: Array,
+      default: () => ["png", "jpg", "jpeg"],
+    },
+    // 是否显示提示
+    isShowTip: {
+      type: Boolean,
+      default: true,
+    },
+  },
+  data() {
+    return {
+      number: 0,
+      uploadList: [],
+      dialogImageUrl: "",
+      dialogVisible: false,
+      hideUpload: false,
+      uploadImgUrl:
+        process.env.NODE_ENV === "development"
+          ? "/dev-api" + "/file/file/upload"
+          : process.env.VUE_APP_BASE_API + "/file/file/upload", // 上传的图片服务器地址
+      headers: {
+        Authorization: "Bearer " + getToken(),
+      },
+      fileList: [],
+      file: null,
+      baseUrl:process.env.NODE_ENV === "development"
+              ? process.env.VUE_APP_BASE_API
+              : window.origin
+    };
+  },
+  watch: {
+    value: {
+      handler(val) {
+        console.log(val,'1111val')
+        if (val) {
+          // 首先将值转为数组
+          const list = Array.isArray(val) ? val : this.value.split(",");
+          // 然后将数组转为对象数组
+          this.fileList = list.map((item) => {
+            if (typeof item === "string") {
+              item = { name: item, url: this.imageUrl(item)  };
+            }
+            return item;
+          });
+        } else {
+          this.fileList = [];
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  computed: {
+    // 是否显示提示
+    showTip() {
+      return this.isShowTip && (this.fileType || this.fileSize);
+    },
+  },
+  mode:{
+    prop:'value',
+    event:'input'
+  },
+  methods: {
+    //自定义上传方式(自带的成功回调及失败回调会失效)
+    uploadImage(fileObj) {
+      let formData = new FormData();
+      formData.append("file", fileObj.file);
+      upload(formData, "image")
+        .then((res) => {
+          /*上传成功*/
+          this.$modal.closeLoading();
+          let imgUrl = this.imageUrl(res.data.url); //拼接完整图片URL路径
+          let arr = [];
+          arr.push({ name: res.data.name, imgUrl: res.data.url,url: imgUrl, });
+          this.fileList = this.fileList.concat(arr);
+          console.log(arr,this.fileList,'fileList')
+          this.$emit("input", this.listToString(this.fileList));
+        })
+        .catch((err) => {
+          /*上传失败*/
+          this.$modal.closeLoading();
+          //this.$modal.msgError(res.msg);
+          this.$refs.imageUpload.handleRemove(fileObj.file);
+          //this.uploadedSuccessfully();
+        });
+    },
+    // 上传前loading加载
+    handleBeforeUpload(file) {
+      let isImg = false;
+      if (this.fileType.length) {
+        let fileExtension = "";
+        if (file.name.lastIndexOf(".") > -1) {
+          fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
+        }
+        isImg = this.fileType.some((type) => {
+          if (file.type.indexOf(type) > -1) return true;
+          if (fileExtension && fileExtension.indexOf(type) > -1) return true;
+          return false;
+        });
+      } else {
+        isImg = file.type.indexOf("image") > -1;
+      }
+
+      if (!isImg) {
+        this.$modal.msgError(
+          `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`
+        );
+        return false;
+      }
+      if (this.fileSize) {
+        const isLt = file.size / 1024 / 1024 < this.fileSize;
+        if (!isLt) {
+          this.$modal.msgError(`上传图片大小不能超过 ${this.fileSize} MB!`);
+          return false;
+        }
+      }
+      this.$modal.loading("正在上传图片,请稍候...");
+      this.number++;
+      this.file = file;
+    },
+    // 文件个数超出
+    handleExceed() {
+      this.$modal.msgError(`上传文件数量不能超过 ${this.limit} 个!`);
+    },
+    // 上传成功回调
+    handleUploadSuccess(res, file,fileList) {
+      console.log("handleUploadSuccess",res,file,fileList);
+      if (res.code === 200) {
+        let imgUrl = process.env.VUE_APP_BASE_API + res.data.url;
+        this.uploadList.push({ name: res.data.name,url: imgUrl });
+        this.uploadedSuccessfully();
+
+        // let str = res.data.code;
+        // let blob = new Blob([str],{type:'image/jpeg'});
+        // let imgUrl = window.URL.createObjectURL(blob);
+        // debugger
+      } else {
+        this.number--;
+        this.$modal.closeLoading();
+        this.$modal.msgError(res.msg);
+        this.$refs.imageUpload.handleRemove(file);
+        this.uploadedSuccessfully();
+      }
+    },
+    // 删除图片
+    handleDelete(file) {
+      const findex = this.fileList.map((f) => f.name).indexOf(file.name);
+      if (findex > -1) {
+        this.fileList.splice(findex, 1);
+        this.$emit("input", this.listToString(this.fileList));
+      }
+      console.log(this.listToString(this.fileList), "删除图片");
+    },
+    // 上传失败
+    handleUploadError() {
+      this.$modal.msgError("上传图片失败,请重试");
+      this.$modal.closeLoading();
+    },
+    // 预览
+    handlePictureCardPreview(file) {
+      this.dialogImageUrl = file.url;
+      this.dialogVisible = true;
+    },
+    // 对象转成指定字符串分隔
+    listToString(list, separator) {
+      let strs = "";
+      separator = separator || ",";
+      for (let i in list) {
+        if (list[i].url) {
+          strs += list[i].url.replace(this.baseUrl, "") + separator;
+        }
+      }
+      return strs != "" ? strs.substr(0, strs.length - 1) : "";
+    },
+    // 删除文件
+    clearFiles(){
+        this.$refs["imageUpload"].clearFiles();
+      },
+  },
+};
+</script>
+<style scoped lang="scss">
+// .el-upload--picture-card 控制加号部分
+::v-deep .hide .el-upload--picture-card {
+  display: none !important;
+}
+// 去掉动画效果
+::v-deep .el-list-enter-active,
+::v-deep .el-list-leave-active {
+  transition: all 0s;
+}
+
+::v-deep .el-list-enter,
+.el-list-leave-active {
+  opacity: 0;
+  transform: translateY(0);
+}
+.img-box {
+  width: 100%;
+  height: 100%;
+  position: relative;
+  .img-model {
+    width: 100%;
+    display: none;
+    position: absolute;
+    left: 0;
+    top: 0;
+    align-items: center;
+    > span {
+      background-color: rgba(30, 30, 30, 0.3);
+      display: block;
+      padding: 5px;
+      color: #fff;
+      text-shadow: 0 0 2px #1e1e1e;
+    }
+  }
+  &:hover {
+    .img-model {
+      display: block;
+    }
+  }
+}
+</style>

+ 1 - 2
src/views/system/dept/dialog.edit.vue

@@ -24,7 +24,7 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="机构名称" prop="name">
-                <el-input v-model="form.name" placeholder="请输入机构名称" />
+                <el-input v-model="form.name" placeholder="请输入机构名称" maxlength="5" />
               </el-form-item>
             </el-col>
           </el-row>
@@ -310,7 +310,6 @@ export default {
       },
       // 机构树选项
       deptOptions: [],
-      id: "",
       pId: 0,
       orgid: "",
       // 表单参数

+ 50 - 37
src/views/system/dept/extend.vue

@@ -735,7 +735,9 @@
         >取消</el-button
       >
     </div>
-    <!-- 添加或编辑业务库物防建设对话框 -->
+
+
+
     <DialogCom
       :title="Businesstitle"
       :visible.sync="Businessopen"
@@ -820,7 +822,7 @@
         <el-button @click="Businesscancel">取 消</el-button>
       </div>
     </DialogCom>
-    <!-- 添加或编辑银行物防建设对话框 -->
+
     <DialogCom
       :title="Banktitle"
       :visible.sync="Bankopen"
@@ -987,7 +989,7 @@
         <el-button @click="orgcancel">取 消</el-button>
       </div>
     </DialogCom>
-    <!-- 添加或编辑离行物防建设对话框 -->
+
     <DialogCom
       :title="detachedtitle"
       :visible.sync="detachedopen"
@@ -996,7 +998,7 @@
     >
       <el-form
         ref="detachedform"
-        :model="detachedform"
+        :model="formData"
         label-width="80px"
         :rules="rules"
       >
@@ -1005,7 +1007,7 @@
           <el-select
             prop="planType"
             label="标准"
-            v-model="detachedform.standard"
+            v-model="formData.standard"
             placeholder="请选择标准"
             clearable
           >
@@ -1020,7 +1022,7 @@
         <el-form-item label="达标日期" prop="dateOfCompliance">
           <el-date-picker
             clearable
-            v-model="detachedform.dateOfCompliance"
+            v-model="formData.dateOfCompliance"
             type="date"
             value-format="yyyy-MM-dd HH:mm:ss"
             placeholder="请选择达标日期"
@@ -1033,16 +1035,17 @@
             placeholder="请输入证书佐证"
           /> -->
           <el-switch
-            v-model="detachedform.certificateEvidence"
+            v-model="certificate"
             active-text
             :active-value="1"
             :inactive-value="0"
           ></el-switch>
         </el-form-item>
         <el-form-item
-          v-if="detachedform.certificateEvidence"
+          v-if="certificate"
           label="证书"
-          prop="certificate"
+          required
+          prop="certificateImgs"
         >
           <!-- <el-input
             v-if="false"
@@ -1052,15 +1055,14 @@
           <div
             class="image-container"
             style="margin-left: 20px"
-            v-if="detachedform.certificateEvidence"
+            v-if="certificate"
           >
-            <p style="font-size: 12px; color: #999">上传证书</p>
-            <image-upload
+<!--            <p style="font-size: 12px; color: #999">上传证书</p>-->
+            <img-upload
               :limit="5"
               :fileSize="2"
-              :value="detachedform.certificate"
-              @input="uploaddetachedSuccess"
-            ></image-upload>
+              v-model="formData.certificateImgs"
+            ></img-upload>
           </div>
         </el-form-item>
         <el-form-item v-if="false" label="佐证" prop="evidence">
@@ -1083,6 +1085,7 @@ import uploadpng from "@/assets/images/upload.png";
 import uplpng from "@/assets/images/upl.png";
 import request from "@/utils/request";
 import { statusOptions, getLabel } from "./../../commonOption";
+import ImgUpload from "@/components/ImgsUpload";
 import {
   listExtend,
   getExtend,
@@ -1111,6 +1114,7 @@ import {
 } from "@/api/system/OrgPhysicalDefenseConstruction";
 import { selectCityInfoVoList } from "@/api/core/weather";
 import TreeNodeDialogVue from "../../tool/build/TreeNodeDialog.vue";
+import {formatDate} from "@/utils";
 
 export default {
   dicts: [
@@ -1128,10 +1132,27 @@ export default {
     "property_situation",
   ],
   props: [],
-  components: {},
+  components: {ImgUpload},
   data() {
+     let formatRule = function(rule, value, callback) {
+      console.log(value,'value')
+      if (!value.length) {
+        callback(new Error("证书为必填项"));
+      } else {
+        callback();
+      }
+    };
     return {
+      //证书佐证
+      certificate:false,
       reqmsg: false,
+      formData:{
+      standard:null,
+      dateOfCompliance:null,
+      certificateEvidence:null,
+      certificate:null,  //回显时使用
+      certificateImgs:[],  //实际获取到的图片地址
+    },
       //表单验证
       rules: {
         standard: [{ required: true, message: "请输入标准", trigger: "blur" }],
@@ -1142,9 +1163,9 @@ export default {
             trigger: "blur",
           },
         ],
-        // certificate: [
-        //   { validator: this.isreq, message: "请选择图片", trigger: "blur" },
-        // ],
+        certificateImgs: [
+          { validator: formatRule, message: "请选择图片", trigger: "blur" },
+        ],
       },
 
       //基础信息key
@@ -1318,13 +1339,6 @@ export default {
   },
   mounted() {},
   methods: {
-    isreq(rule, value, callback) {
-      if (this.reqmsg) {
-        callback(new Error("证书为必填项"));
-      } else {
-        callback();
-      }
-    },
     // getImgUrl(fileList) {
     //   let matchResult = fileList.match(/\/statics(.*)/);
     //   if (matchResult) {
@@ -1365,7 +1379,7 @@ export default {
       this.orgimgs.push(img);
     },
     uploaddetachedSuccess(img) {
-      this.detachedimgs.push(img);
+      this.formData.certificateImgs.push(img);
     },
 
     handleInput() {
@@ -1539,7 +1553,7 @@ export default {
       if(this.Businessimgs.length>1){
         this.Businessform.certificate= this.Businessimgs[this.Businessimgs.length - 1].toString(",");
       }
-     
+
       this.$refs.Businessform.validate((valid) => {
         if (valid) {
           // 表单验证通过,提交数据或执行其他操作
@@ -1643,7 +1657,7 @@ export default {
         this.Bankform.certificate= this.Bankimgs[this.Bankimgs.length - 1].toString(",");
       }
 
-      
+
       this.$refs.Bankform.validate((valid) => {
         if (valid) {
           // 表单验证通过,提交数据或执行其他操作
@@ -1740,17 +1754,16 @@ export default {
     },
     /** 提交按钮 */
     submitdetachedForm() {
-      if(this.detachedimgs.length>1){
-        this.detachedform.certificate= this.detachedimgs[this.detachedimgs.length - 1].toString(",");
-      }
-
-     
+      // if(this.detachedimgs.length>1){
+      //   this.detachedform.certificate= this.detachedimgs[this.detachedimgs.length - 1].toString(",");
+      // }
+      //
       this.$refs.detachedform.validate((valid) => {
         if (valid) {
           // 表单验证通过,提交数据或执行其他操作
           this.detachedform.orgId = this.$route.params.id;
           this.detachedform.type = 4;
- 
+
           if (this.detachedform.id != null) {
             updateOrgPhysicalDefenseConstruction(this.detachedform).then(
               (response) => {
@@ -1845,13 +1858,13 @@ export default {
       if(this.orgimgs.length>1){
         this.orgform.certificate= this.orgimgs[this.orgimgs.length - 1].toString(",");
       }
-      
+
       this.$refs.orgform.validate((valid) => {
         if (valid) {
           // 表单验证通过,提交数据或执行其他操作
           this.orgform.orgId = this.$route.params.id;
           this.orgform.type = 1;
-  
+
           if (this.orgform.id != null) {
             updateOrgPhysicalDefenseConstruction(this.orgform).then(
               (response) => {