zcy 4 سال پیش
والد
کامیت
e956079eac

+ 7 - 1
src/api/request.js

@@ -21,7 +21,13 @@ export function getAction(url, parameter) {
 
   })
 }
-
+export function getDetaie(url, parameter) {
+  debugger
+  return request({
+    url: url + parameter,
+    method: 'get'
+  })
+}
 export function postAction(url, parameter) {
   return request({
     url: url,

+ 240 - 0
src/components/JImageUpload/index.vue

@@ -0,0 +1,240 @@
+<template>
+  <div class="img">
+    <a-upload
+      name="file"
+      list-type="picture-card"
+      :multiple="isMultiple"
+      :action="uploadAction"
+      :headers="headers"
+      :data="{}"
+      :file-list="fileList"
+      :before-upload="beforeUpload"
+      :disabled="disabled"
+      :is-multiple="isMultiple"
+
+      :class="[!isMultiple?'imgupload':'', (!isMultiple && picUrl)?'image-upload-single-over':'' ]"
+      @change="handleChange"
+      @preview="handlePreview"
+    >
+      <div>
+        <!--<img v-if="!isMultiple && picUrl" :src="getAvatarView()" style="width:100%;height:100%"/>-->
+        <div class="iconp">
+          <a-icon :type="uploadLoading ? 'loading' : 'plus'" />
+          <div class="ant-upload-text">{{ text }}</div>
+        </div>
+      </div>
+      <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel()">
+        <img alt="example" style="width: 100%" :src="previewImage">
+      </a-modal>
+    </a-upload>
+  </div>
+</template>
+
+<script>
+import Vue from 'vue'
+import { getToken } from '@/utils/auth'
+
+import { getFileAccessHttpUrl } from '@/utils/util'
+
+const uidGenerator = () => {
+  return '-' + parseInt(Math.random() * 10000 + 1, 10)
+}
+const getFileName = (path) => {
+  if (path.lastIndexOf('\\') >= 0) {
+    const reg = new RegExp('\\\\', 'g')
+    path = path.replace(reg, '/')
+  }
+  return path.substring(path.lastIndexOf('/') + 1)
+}
+export default {
+  name: 'JImageUpload',
+  model: {
+    prop: 'value',
+    event: 'change'
+  },
+  props: {
+    text: {
+      type: String,
+      required: false,
+      default: '上传'
+    },
+    /* 这个属性用于控制文件上传的业务路径*/
+    bizPath: {
+      type: String,
+      required: false,
+      default: 'temp'
+    },
+    value: {
+      type: [String, Array],
+      required: false
+    },
+    disabled: {
+      type: Boolean,
+      required: false,
+      default: false
+    },
+    isMultiple: {
+      type: Boolean,
+      required: false,
+      default: false
+    },
+    // update-begin-author:wangshuai date:20201021 for:LOWCOD-969 新增number属性,用于判断上传数量
+    number: {
+      type: Number,
+      required: false,
+      default: 0
+    }
+    // update-end-author:wangshuai date:20201021 for:LOWCOD-969 新增number属性,用于判断上传数量
+  },
+  data() {
+    return {
+      uploadAction: process.env.VUE_APP_BASE_API + '/common/upload',
+      uploadLoading: false,
+      picUrl: false,
+      headers: {},
+      fileList: [],
+      previewImage: '',
+      previewVisible: false
+    }
+  },
+  watch: {
+    value: {
+      handler(val, oldValue) {
+        if (val instanceof Array) {
+          this.initFileList(val.join(','))
+        } else {
+          this.initFileList(val)
+        }
+        if (!val || val.length == 0) {
+          this.picUrl = false
+        }
+      },
+      // 立刻执行handler
+      immediate: true
+    }
+  },
+  created() {
+    this.headers['Authorization'] = getToken()
+  },
+  methods: {
+    initFileList(paths) {
+      if (!paths || paths.length == 0) {
+        this.fileList = []
+        return
+      }
+      this.picUrl = true
+      const fileList = []
+      const arr = paths.split(',')
+      for (var a = 0; a < arr.length; a++) {
+        const url = getFileAccessHttpUrl(arr[a])
+        fileList.push({
+          uid: uidGenerator(),
+          name: getFileName(arr[a]),
+          status: 'done',
+          url: url,
+          response: {
+            status: 'history',
+            message: arr[a]
+          }
+        })
+      }
+      this.fileList = fileList
+    },
+    beforeUpload: function(file) {
+      var fileType = file.type
+      if (fileType.indexOf('image') < 0) {
+        this.$message.warning('请上传图片')
+        return false
+      }
+    },
+    handleChange(info) {
+      this.picUrl = false
+      let fileList = info.fileList
+      // update-begin-author:wangshuai date:20201022 for:LOWCOD-969 判断number是否大于0和是否多选,返回选定的元素。
+      if (this.number > 0 && this.isMultiple) {
+        fileList = fileList.slice(-this.number)
+      }
+      // update-end-author:wangshuai date:20201022 for:LOWCOD-969 判断number是否大于0和是否多选,返回选定的元素。
+      if (info.file.status === 'done') {
+        if (info.file.response.code === 200) {
+          this.picUrl = true
+          fileList = fileList.map((file) => {
+            if (file.response) {
+              file.url = file.response.url
+            }
+            return file
+          })
+        }
+        // this.$message.success(`${info.file.name} 上传成功!`);
+      } else if (info.file.status === 'error') {
+        this.$message.error(`${info.file.name} 上传失败.`)
+      } else if (info.file.status === 'removed') {
+        this.handleDelete(info.file)
+      }
+      this.fileList = fileList
+      if (info.file.status === 'done' || info.file.status === 'removed') {
+        this.handlePathChange()
+      }
+    },
+    // 预览
+    handlePreview(file) {
+      this.previewImage = file.url || file.thumbUrl
+      this.previewVisible = true
+    },
+    getAvatarView() {
+      if (this.fileList.length > 0) {
+        const url = this.fileList[0].url
+        return getFileAccessHttpUrl(url)
+      }
+    },
+    handlePathChange() {
+      const uploadFiles = this.fileList
+      let path = ''
+      if (!uploadFiles || uploadFiles.length == 0) {
+        path = ''
+      }
+      const arr = []
+      if (!this.isMultiple && uploadFiles.length > 0) {
+        arr.push(uploadFiles[uploadFiles.length - 1].response.url)
+      } else {
+        for (let a = 0; a < uploadFiles.length; a++) {
+          // update-begin-author:taoyan date:20200819 for:【开源问题z】上传图片组件 LOWCOD-783
+          if (uploadFiles[a].status === 'done') {
+            arr.push(uploadFiles[a].response.url)
+          } else {
+            return
+          }
+          // update-end-author:taoyan date:20200819 for:【开源问题z】上传图片组件 LOWCOD-783
+        }
+      }
+      if (arr.length > 0) {
+        path = arr.join(',')
+      }
+      this.$emit('change', path)
+    },
+    handleDelete(file) {
+      // 如有需要新增 删除逻辑
+      console.log(file)
+    },
+    handleCancel() {
+      this.close()
+      this.previewVisible = false
+    },
+    close() {
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+  /* update--begin--autor:lvdandan-----date:20201016------for:j-image-upload图片组件单张图片详情回显空白
+  * https://github.com/zhangdaiscott/jeecg-boot/issues/1810
+  * https://github.com/zhangdaiscott/jeecg-boot/issues/1779
+  */
+
+  /deep/ .imgupload .iconp{padding:20px;}
+  /* update--end--autor:lvdandan-----date:20201016------for:j-image-upload图片组件单张图片详情回显空白*/
+
+  /deep/ .image-upload-single-over .ant-upload-select{display: none}
+</style>

+ 35 - 0
src/mixin/detaile.js

@@ -0,0 +1,35 @@
+/**
+ * 新增修改完成调用 modalFormOk方法 编辑弹框组件ref定义为modalForm
+ * 高级查询按钮调用 superQuery方法  高级查询组件ref定义为superQueryModal
+ * data中url定义 list为查询列表  delete为删除单条记录  deleteBatch为批量删除
+ */
+import { getDetaie } from '@/api/request'
+
+export const detaileMixin = {
+  data() {
+    return {
+      model: {}
+    }
+  },
+  created() {
+  },
+  computed: {},
+  methods: {
+    getDetaile(id) {
+      debugger
+      getDetaie(this.url.detaile, id).then((res) => {
+        debugger
+        if (res.code === 200) {
+          debugger
+          if (this.model.pics) {
+            this.model.pics = this.setPicsStr(this.model.pics)
+          } else {
+            this.model.pics = []
+          }
+        } else {
+          this.$message.warning(res.msg)
+        }
+      })
+    }
+  }
+}

+ 20 - 1
src/utils/util.js

@@ -76,5 +76,24 @@ export function formatDate(value, fmt) {
   }
 }
 
-
+/**
+ * 获取文件服务访问路径
+ * @param avatar
+ * @param subStr
+ * @returns {*}
+ */
+export function getFileAccessHttpUrl(avatar, subStr) {
+  if (!subStr) subStr = 'http'
+  try {
+    if (avatar && avatar.startsWith(subStr)) {
+      return avatar
+    } else {
+      if (avatar && avatar.length > 0 && avatar.indexOf('[') == -1) {
+        return window._CONFIG['staticDomainURL'] + '/' + avatar
+      }
+    }
+  } catch (err) {
+    return
+  }
+}
 

+ 58 - 45
src/views/catenary/fault/CheckAndEditModel.vue

@@ -1,4 +1,3 @@
-<script src="../../../permission.js"></script>
 <template>
   <j-modal
     :title="title"
@@ -9,62 +8,48 @@
     @close="close"
   >
     <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :rules="validatorRules" :model="model">
-      <a-form-model-item label="支柱号" prop="zzh">
-        <a-input v-model="model.zzh" />
-      </a-form-model-item>
-      <a-form-model-item label="所属部门" prop="bm" />
-      <a-form-model-item label="线别" prop="xb">
-        <j-dict-select-tag
-          v-model="model.xb"
+      <a-form-model-item label="线别" prop="lineId">
+        <j-list-select-tag
+          v-model="model.lineId"
+          placeholder="选择线别"
           dict-code="line"
         />
       </a-form-model-item>
-      <a-form-model-item label="站场区间" prop="qj">
-        <j-dict-select-tag
-          v-model="model.qj"
-          dict-code="station"
+      <a-form-model-item label="所别" prop="substationId">
+        <j-list-select-tag
+          v-model="model.substationId"
+          placeholder="选择所别"
+          dict-code="substation"
         />
       </a-form-model-item>
-      <a-form-model-item label="行别" prop="hb">
+      <a-form-model-item label="行别" prop="xingbie">
         <j-dict-select-tag
-          v-model="model.hb"
-          type="radioButton"
-          dict-code="word_type"
+          v-model="model.xingbie"
+          placeholder="选择行别"
+          dict-code="xingbie"
         />
       </a-form-model-item>
       <a-form-model-item label="公里标" prop="glb">
         <a-input v-model="model.glb" />
       </a-form-model-item>
-      <a-form-model-item label="支柱类型" prop="zzlx">
-        <j-dict-select-tag
-          v-model="model.zzlx"
-          dict-code="zzlx"
-        />
-      </a-form-model-item>
-      <a-form-model-item label="支柱型号" prop="zzxh">
-        <j-dict-select-tag
-          v-model="model.zzxh"
-          dict-code="zzxh"
-        />
-      </a-form-model-item>
-      <a-form-model-item label="支柱用途" prop="zzyt">
+      <a-form-model-item label="原因类型" prop="yylx">
         <j-dict-select-tag
-          v-model="model.zzyt"
-          dict-code="zzyt"
+          v-model="model.yylx"
+          placeholder="选择原因类型"
+          dict-code="gzyy"
         />
       </a-form-model-item>
-      <a-form-model-item label="材质" prop="cz">
-        <j-dict-select-tag
-          v-model="model.cz"
-          dict-code="cz"
+      <a-form-model-item label="日期" prop="jlrq">
+        <a-date-picker
+          v-model="model.jlrq"
+          style="width: 100%"
+          format="YYYY-MM-DD"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择"
         />
       </a-form-model-item>
-      <a-form-model-item label="直线/曲外/曲内" prop="zxqwqn">
-        <j-dict-select-tag
-          v-model="model.zxqwqn"
-          type="radioButton"
-          dict-code="word_type"
-        />
+      <a-form-model-item label="图片上传" prop="imgList">
+        <j-image-upload v-model="model.pics" :is-multiple="true" biz-path="scott/pic" />
       </a-form-model-item>
     </a-form-model>
   </j-modal>
@@ -72,11 +57,16 @@
 <script>
 import { httpAction } from '@/api/request'
 import JModal from '@/components/JModal'
+import JImageUpload from '@/components/JImageUpload'
+import { detaileMixin } from '@/mixin/detaile'
+
 export default {
   name: 'CheckAndEditModel',
   components: {
-    JModal
+    JModal,
+    JImageUpload
   },
+  mixins: [detaileMixin],
   data() {
     return {
       labelCol: { span: 4 },
@@ -87,12 +77,18 @@ export default {
       isCheck: false,
       model: {},
       validatorRules: {
-        name: [{ required: true, message: '请输入' }],
-        type: [{ required: true, message: '请选择' }]
+        lineId: [{ required: true, message: '请选择' }],
+        substationId: [{ required: true, message: '请选择' }],
+        xingbie: [{ required: true, message: '请选择' }],
+        glb: [{ required: true, message: '请输入' }],
+        yylx: [{ required: true, message: '请选择' }],
+        jlrq: [{ required: true, message: '请选择' }]
+
       },
       url: {
         add: '/business/catenary/bus/jlgz/add',
-        edit: '/business/catenary/bus/jlgz/update'
+        edit: '/business/catenary/bus/jlgz/update',
+        detaile: '/business/catenary/bus/jlgz/'
       }
     }
   },
@@ -105,6 +101,7 @@ export default {
     },
     edit(record) {
       this.model = Object.assign({}, record)
+      this.getDetaile(this.model.id)
       this.visible = true
     },
     close(isSubmit) {
@@ -132,6 +129,7 @@ export default {
         url = this.url.edit
         type = 'put'
       }
+      this.model.pics = this.setPicsArr(this.model.pics)
       httpAction(url, this.model, type).then((res) => {
         if (res.code === 200) {
           this.$message.success(res.msg)
@@ -141,6 +139,21 @@ export default {
           console.log(res)
         }
       })
+    },
+    setPicsArr(pics) {
+      const obj = []
+      const arr = pics.split(',')
+      for (const item of arr) {
+        obj.push({ url: item })
+      }
+      return obj
+    },
+    setPicsStr(pics) {
+      const Arr = []
+      for (const item of pics) {
+        Arr.push(item.url)
+      }
+      return Arr.toString()
     }
   }
 }

+ 14 - 14
src/views/catenary/fault/index.vue

@@ -4,35 +4,35 @@
     <div class="table-page-search-wrapper">
       <a-form layout="inline" @keyup.enter.native="searchQuery">
         <a-form-item>
-          <j-dict-select-tag
-            v-model="queryParam.xb"
+          <j-list-select-tag
+            v-model="queryParam.lineId"
             style="width: 150px"
             placeholder="选择线别"
-            dict-code="sj_plan_status"
+            dict-code="line"
           />
         </a-form-item>
         <a-form-item>
-          <j-dict-select-tag
-            v-model="queryParam.sb"
+          <j-list-select-tag
+            v-model="queryParam.substationId"
             style="width: 150px"
             placeholder="选择所别"
-            dict-code="sj_plan_status"
+            dict-code="substation"
           />
         </a-form-item>
         <a-form-item>
           <j-dict-select-tag
-            v-model="queryParam.hb"
+            v-model="queryParam.xingbie"
             style="width: 150px"
             placeholder="选择行别"
-            dict-code="sj_plan_status"
+            dict-code="xingbie"
           />
         </a-form-item>
         <a-form-item>
           <j-dict-select-tag
-            v-model="queryParam.yy"
+            v-model="queryParam.yylx"
             style="width: 150px"
             placeholder="选择原因类型"
-            dict-code="sj_plan_status"
+            dict-code="gzyy"
           />
         </a-form-item>
         <a-form-item>
@@ -42,10 +42,10 @@
             placeholder="输入公里标"
           />
         </a-form-item>
-        <a-form-item>
-          <a-date-picker v-model="queryParam.date1" format="YYYY/MM/DD" placeholder="时间范围" />-
-          <a-date-picker v-model="queryParam.date2" format="YYYY/MM/DD" placeholder="时间范围" />
-        </a-form-item>
+<!--        <a-form-item>-->
+<!--          <a-date-picker v-model="queryParam.date1" format="YYYY/MM/DD" placeholder="时间范围" /> - -->
+<!--          <a-date-picker v-model="queryParam.date2" format="YYYY/MM/DD" placeholder="时间范围" />-->
+<!--        </a-form-item>-->
         <a-form-item>
           <a-button type="primary" @click="searchQuery">查询</a-button>
           <a-button style="margin-left: 8px" @click="searchReset">重置</a-button>