From 66ff30cd4deee3dbfce6751e31392c072bf15dfc Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期二, 18 三月 2025 18:04:41 +0800
Subject: [PATCH] art:设备管理-基础数据-附件管理,工艺参数,精度参数 新增

---
 src/views/eam/base/EamPrecisionParametersList.vue          |  170 ++++++
 src/views/eam/base/modules/EamSysFilesModal.vue            |  129 ++++
 src/components/jeecg/index.js                              |    4 
 src/views/eam/base/EamSysFilesList.vue                     |  204 +++++++
 src/components/jeecg/LxUpload.vue                          |  452 +++++++++++++++++
 src/views/eam/base/EamProcessParametersList.vue            |  190 +++++++
 src/views/eam/base/modules/EamProcessParametersModal.vue   |  123 ++++
 src/views/eam/base/modules/EamPrecisionParametersModal.vue |  117 ++++
 src/components/jeecg/LxFilePreview.vue                     |  119 ++++
 9 files changed, 1,508 insertions(+), 0 deletions(-)

diff --git a/src/components/jeecg/LxFilePreview.vue b/src/components/jeecg/LxFilePreview.vue
new file mode 100644
index 0000000..6017a26
--- /dev/null
+++ b/src/components/jeecg/LxFilePreview.vue
@@ -0,0 +1,119 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    :footer="null"
+    cancelText="鍏抽棴">
+    <a-spin :spinning="confirmLoading">
+      <img v-if="isImage" :src="fileUrl" width="100%" height="100%" alt="鍥剧墖棰勮" />
+      <iframe v-else-if="isPdf" :src="fileUrl" width="100%" height="600px"></iframe>
+      <video v-else-if="isVideo" controls>
+        <source :src="fileUrl" type="video/mp4">
+        鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 video 鏍囩銆�
+      </video>
+      <pre v-else-if="isText">{{ textContent }}</pre>
+      <h1 v-else>涓嶆敮鎸侀瑙堬紝璇蜂笅杞藉悗鏌ョ湅</h1>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { getFileAccessHttpUrl } from '@/api/manage'
+
+export default {
+  props: {
+    fileUrl: String
+  },
+  data() {
+    return {
+      title: '棰勮',
+      textContent: '',
+      confirmLoading: false,
+      visible: false
+    }
+  },
+  computed: {
+    isImage() {
+      return /\.(jpeg|jpg|png|gif|bmp|webp)$/i.test(this.fileUrl)
+    },
+    isPdf() {
+      return /\.pdf$/i.test(this.fileUrl)
+    },
+    isVideo() {
+      return /\.(mp4|webm|ogg)$/i.test(this.fileUrl)
+    },
+    isText() {
+      return /\.(txt|md|json|xml|yaml|yml)$/i.test(this.fileUrl)
+    }
+  },
+  watch: {
+    fileUrl: 'fetchTextContent'
+  },
+  mounted() {
+    if (this.isText) {
+      this.fetchTextContent()
+    }
+  },
+  methods: {
+    async fetchTextContent() {
+      try {
+        const response = await fetch(this.fileUrl)
+        if (!response.ok) throw new Error('缃戠粶鍝嶅簲涓嶆槸OK')
+        const text = await response.text()
+        this.textContent = text
+      } catch (error) {
+        console.error('鑾峰彇鏂囨湰鍐呭澶辫触:', error)
+        this.textContent = '鏃犳硶鍔犺浇鏂囨湰鍐呭'
+      }
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+    preview(fileUrl) {
+      let url = getFileAccessHttpUrl(fileUrl)
+      this.visible = true
+      this.fileUrl = url
+    },
+    handleOk() {
+      this.close()
+    },
+    handleCancel() {
+      this.close()
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+/deep/ .ant-modal {
+  height: 80%;
+  /* 婊氬姩鏉′紭鍖� start */
+  ::-webkit-scrollbar{
+    width:8px;
+    height:8px;
+  }
+
+  .ant-modal-content {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+
+    .ant-modal-body {
+      flex: 1;
+      overflow: auto;
+    }
+  }
+}
+
+pre {
+  overflow: visible;
+}
+
+
+</style>
\ No newline at end of file
diff --git a/src/components/jeecg/LxUpload.vue b/src/components/jeecg/LxUpload.vue
new file mode 100644
index 0000000..6f47e6f
--- /dev/null
+++ b/src/components/jeecg/LxUpload.vue
@@ -0,0 +1,452 @@
+<template>
+  <div :id="containerId" style="position: relative">
+
+    <!--  ---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- -->
+    <div class="movety-container" :style="{top:top+'px',left:left+'px',display:moveDisplay}"
+         style="padding:0 8px;position: absolute;z-index: 91;height: 32px;width: 104px;text-align: center;">
+      <div :id="containerId+'-mover'" :class="showMoverTask?'uploadty-mover-mask':'movety-opt'"
+           style="margin-top: 12px">
+        <a @click="moveLast" style="margin: 0 5px;">
+          <a-icon type="arrow-left" style="color: #fff;font-size: 16px" />
+        </a>
+        <a @click="moveNext" style="margin: 0 5px;">
+          <a-icon type="arrow-right" style="color: #fff;font-size: 16px" />
+        </a>
+      </div>
+    </div>
+    <!--  ---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- -->
+
+    <a-upload
+      name="file"
+      :multiple="multiple"
+      :action="uploadAction"
+      :headers="headers"
+      :data="{'biz':bizPath}"
+      :fileList="fileList"
+      :beforeUpload="doBeforeUpload"
+      @change="handleChange"
+      :disabled="disabled"
+      :listType="complistType"
+      @preview="handlePreview"
+      :class="{'uploadty-disabled':disabled}">
+      <template>
+        <div v-if="isImageComp">
+          <a-icon type="plus" />
+          <div class="ant-upload-text">{{ text }}</div>
+        </div>
+        <a-button v-else-if="buttonVisible">
+          <a-icon type="upload" />
+          {{ text }}
+        </a-button>
+      </template>
+    </a-upload>
+    <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
+      <img alt="example" style="width: 100%" :src="previewImage" />
+    </a-modal>
+  </div>
+</template>
+
+<script>
+
+import Vue from 'vue'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import { getFileAccessHttpUrl } from '@/api/manage'
+
+const FILE_TYPE_ALL = 'all'
+const FILE_TYPE_IMG = 'image'
+const FILE_TYPE_TXT = 'file'
+const uidGenerator = () => {
+  return '-' + parseInt(Math.random() * 10000 + 1, 10)
+}
+const getFileName = (path) => {
+  if (path.lastIndexOf('\\') >= 0) {
+    let reg = new RegExp('\\\\', 'g')
+    path = path.replace(reg, '/')
+  }
+  return path.substring(path.lastIndexOf('/') + 1)
+}
+export default {
+  name: 'LXUpload',
+  data() {
+    return {
+      uploadAction: window._CONFIG['domianURL'] + '/eam/sysFiles/upload',
+      headers: {},
+      fileList: [],
+      newFileList: [],
+      uploadGoOn: true,
+      previewVisible: false,
+      //---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+      previewImage: '',
+      containerId: '',
+      top: '',
+      left: '',
+      moveDisplay: 'none',
+      showMoverTask: false,
+      moverHold: false,
+      currentImg: ''
+      //---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+    }
+  },
+  props: {
+    text: {
+      type: String,
+      required: false,
+      default: '鐐瑰嚮涓婁紶'
+    },
+    fileType: {
+      type: String,
+      required: false,
+      default: FILE_TYPE_ALL
+    },
+    /*杩欎釜灞炴�х敤浜庢帶鍒舵枃浠朵笂浼犵殑涓氬姟璺緞*/
+    bizPath: {
+      type: String,
+      required: false,
+      default: 'temp'
+    },
+    value: {
+      type: [String, Array],
+      required: false
+    },
+    // update-begin- --- author:wangshuai ------ date:20190929 ---- for:Jupload缁勪欢澧炲姞鏄惁鑳藉鐐瑰嚮
+    disabled: {
+      type: Boolean,
+      required: false,
+      default: false
+    },
+    // update-end- --- author:wangshuai ------ date:20190929 ---- for:Jupload缁勪欢澧炲姞鏄惁鑳藉鐐瑰嚮
+    //姝ゅ睘鎬ц搴熷純浜�
+    triggerChange: {
+      type: Boolean,
+      required: false,
+      default: false
+    },
+    /**
+     * update -- author:lvdandan -- date:20190219 -- for:Jupload缁勪欢澧炲姞鏄惁杩斿洖url锛�
+     * true锛氫粎杩斿洖url
+     * false锛氳繑鍥瀎ileName filePath fileSize
+     */
+    // returnUrl: {
+    //   type: Boolean,
+    //   required: false,
+    //   default: true
+    // },
+    number: {
+      type: Number,
+      required: false,
+      default: 0
+    },
+    buttonVisible: {
+      type: Boolean,
+      required: false,
+      default: true
+    },
+    multiple: {
+      type: Boolean,
+      default: true
+    },
+    beforeUpload: {
+      type: Function
+    }
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler() {
+        let val = this.value
+        if (val instanceof Array) {
+          this.initFileListArr(val)
+        } else {
+          this.initFileList(val)
+        }
+      }
+    }
+  },
+  computed: {
+    isImageComp() {
+      return this.fileType === FILE_TYPE_IMG
+    },
+    complistType() {
+      return this.fileType === FILE_TYPE_IMG ? 'picture-card' : 'text'
+    }
+  },
+  created() {
+    const token = Vue.ls.get(ACCESS_TOKEN)
+    //---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+    this.headers = { 'X-Access-Token': token }
+    this.containerId = 'container-ty-' + new Date().getTime()
+    //---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+  },
+
+  methods: {
+    initFileListArr(val) {
+      if (!val || val.length == 0) {
+        this.fileList = []
+        return
+      }
+      let fileList = []
+      for (var a = 0; a < val.length; a++) {
+        let url = getFileAccessHttpUrl(val[a].filePath)
+        fileList.push({
+          uid: uidGenerator(),
+          name: val[a].fileName,
+          status: 'done',
+          url: url,
+          response: {
+            status: 'history',
+            message: val[a].filePath
+          }
+        })
+      }
+      this.fileList = fileList
+    },
+    initFileList(paths) {
+      if (!paths || paths.length == 0) {
+        //return [];
+        // update-begin- --- author:os_chengtgen ------ date:20190729 ---- for:issues:326,Jupload缁勪欢鍒濆鍖朾ug
+        this.fileList = []
+        return
+        // update-end- --- author:os_chengtgen ------ date:20190729 ---- for:issues:326,Jupload缁勪欢鍒濆鍖朾ug
+      }
+      let fileList = []
+      let arr = paths.split(',')
+      for (var a = 0; a < arr.length; a++) {
+        let 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
+    },
+    doBeforeUpload(file) {
+      this.uploadGoOn = true
+      var fileType = file.type
+      if (this.fileType === FILE_TYPE_IMG) {
+        if (fileType.indexOf('image') < 0) {
+          this.$message.warning('璇蜂笂浼犲浘鐗�')
+          this.uploadGoOn = false
+          return false
+        }
+      }
+      // 鎵╁睍 beforeUpload 楠岃瘉
+      if (typeof this.beforeUpload === 'function') {
+        return this.beforeUpload(file)
+      }
+      return true
+    },
+    handleChange(info) {
+      console.log('--鏂囦欢鍒楄〃鏀瑰彉--')
+      if (!info.file.status && this.uploadGoOn === false) {
+        info.fileList.pop()
+      }
+      let fileList = info.fileList
+      if (info.file.status === 'done') {
+        if (this.number > 0) {
+          fileList = fileList.slice(-this.number)
+        }
+        if (info.file.response.success) {
+          fileList = fileList.map((file) => {
+            if (file.response) {
+              let reUrl = file.response.result.filePath;
+              file.url = getFileAccessHttpUrl(reUrl)
+            }
+            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') {
+        //returnUrl涓篺alse鏃惰繑鍥炴枃浠跺悕绉般�佹枃浠惰矾寰勫強鏂囦欢澶у皬
+        this.newFileList = []
+        for (var a = 0; a < fileList.length; a++) {
+          // update-begin-author:lvdandan date:20200603 for:銆怲ESTA-514銆戙�愬紑婧恑ssue銆戝涓枃浠跺悓鏃朵笂浼犳椂锛屾帶鍒跺彴鎶ラ敊
+          if (fileList[a].status === 'done') {
+            let fileJson = {
+              fileName: fileList[a].name,
+              filePath: fileList[a].response.result.filePath,
+              fileSize: fileList[a].size,
+              fileEncodeName: fileList[a].response.result.fileEncodeName,
+              fileSuffix: fileList[a].response.result.fileSuffix,
+            }
+            this.newFileList.push(fileJson)
+          } else {
+            return
+          }
+          // update-end-author:lvdandan date:20200603 for:銆怲ESTA-514銆戙�愬紑婧恑ssue銆戝涓枃浠跺悓鏃朵笂浼犳椂锛屾帶鍒跺彴鎶ラ敊
+        }
+        this.$emit('change', this.newFileList)
+      }
+    },
+    handleDelete(file) {
+      //濡傛湁闇�瑕佹柊澧� 鍒犻櫎閫昏緫
+      console.log(file)
+    },
+    handlePreview(file) {
+      if (this.fileType === FILE_TYPE_IMG) {
+        this.previewImage = file.url || file.thumbUrl
+        this.previewVisible = true
+      } else {
+        location.href = file.url
+      }
+    },
+    handleCancel() {
+      this.previewVisible = false
+    },
+    //---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+    moveLast() {
+      //console.log(ev)
+      //console.log(this.fileList)
+      //console.log(this.currentImg)
+      let index = this.getIndexByUrl()
+      if (index == 0) {
+        this.$message.warn('鏈煡鐨勬搷浣�')
+      } else {
+        let curr = this.fileList[index].url
+        let last = this.fileList[index - 1].url
+        let arr = []
+        for (let i = 0; i < this.fileList.length; i++) {
+          if (i == index - 1) {
+            arr.push(curr)
+          } else if (i == index) {
+            arr.push(last)
+          } else {
+            arr.push(this.fileList[i].url)
+          }
+        }
+        this.currentImg = last
+        this.$emit('change', arr.join(','))
+      }
+    },
+    moveNext() {
+      let index = this.getIndexByUrl()
+      if (index == this.fileList.length - 1) {
+        this.$message.warn('宸插埌鏈�鍚巭')
+      } else {
+        let curr = this.fileList[index].url
+        let next = this.fileList[index + 1].url
+        let arr = []
+        for (let i = 0; i < this.fileList.length; i++) {
+          if (i == index + 1) {
+            arr.push(curr)
+          } else if (i == index) {
+            arr.push(next)
+          } else {
+            arr.push(this.fileList[i].url)
+          }
+        }
+        this.currentImg = next
+        this.$emit('change', arr.join(','))
+      }
+    },
+    getIndexByUrl() {
+      for (let i = 0; i < this.fileList.length; i++) {
+        if (this.fileList[i].url === this.currentImg || encodeURI(this.fileList[i].url) === this.currentImg) {
+          return i
+        }
+      }
+      return -1
+    }
+  },
+  mounted() {
+    const moverObj = document.getElementById(this.containerId + '-mover')
+    if (moverObj) {
+      moverObj.addEventListener('mouseover', () => {
+        this.moverHold = true
+        this.moveDisplay = 'block'
+      })
+      moverObj.addEventListener('mouseout', () => {
+        this.moverHold = false
+        this.moveDisplay = 'none'
+      })
+    }
+
+    let picList = document.getElementById(this.containerId) ? document.getElementById(this.containerId).getElementsByClassName('ant-upload-list-picture-card') : []
+    if (picList && picList.length > 0) {
+      picList[0].addEventListener('mouseover', (ev) => {
+        ev = ev || window.event
+        let target = ev.target || ev.srcElement
+        if ('ant-upload-list-item-info' == target.className) {
+          this.showMoverTask = false
+          let item = target.parentElement
+          this.left = item.offsetLeft
+          this.top = item.offsetTop + item.offsetHeight - 50
+          this.moveDisplay = 'block'
+          this.currentImg = target.getElementsByTagName('img')[0].src
+        }
+
+      })
+
+      picList[0].addEventListener('mouseout', (ev) => {
+        ev = ev || window.event
+        let target = ev.target || ev.srcElement
+        //console.log('绉婚櫎',target)
+        if ('ant-upload-list-item-info' == target.className) {
+          this.showMoverTask = true
+          setTimeout(() => {
+            if (this.moverHold === false) {
+              this.moveDisplay = 'none'
+            }
+          }, 100)
+        }
+        if ('ant-upload-list-item ant-upload-list-item-done' == target.className || 'ant-upload-list ant-upload-list-picture-card' == target.className) {
+          this.moveDisplay = 'none'
+        }
+      })
+      //---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+    }
+  },
+  model: {
+    prop: 'value',
+    event: 'change'
+  }
+}
+</script>
+
+<style lang="less">
+.uploadty-disabled {
+  .ant-upload-list-item {
+    .anticon-close {
+      display: none;
+    }
+
+    .anticon-delete {
+      display: none;
+    }
+  }
+
+  /*update-begin-author:taoyan date:2022-12-5 for: issues/4250 寤鸿JUpload缁勪欢锛宒isabled涓簍rue鐨勬椂鍊欎笂浼燽utton鑳藉鍙樼伆鎴栬�呭叾浠栨牱寮忓浘妗堬紝渚夸簬鐭ユ檽鏃犳硶鍐嶇偣鍑讳笂浼�*/
+
+  .ant-btn, .ant-upload-disabled {
+    cursor: not-allowed;
+    color: rgba(0, 0, 0, 0.25);
+    background-color: #f5f5f5;
+    border-color: #d9d9d9;
+  }
+
+  /*update-end-author:taoyan date:2022-12-5 for: issues/4250 寤鸿JUpload缁勪欢锛宒isabled涓簍rue鐨勬椂鍊欎笂浼燽utton鑳藉鍙樼伆鎴栬�呭叾浠栨牱寮忓浘妗堬紝渚夸簬鐭ユ檽鏃犳硶鍐嶇偣鍑讳笂浼�*/
+
+}
+
+//---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+.uploadty-mover-mask {
+  background-color: rgba(0, 0, 0, 0.5);
+  opacity: .8;
+  color: #fff;
+  height: 28px;
+  line-height: 28px;
+}
+
+//---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� -------------------------------------
+</style>
\ No newline at end of file
diff --git a/src/components/jeecg/index.js b/src/components/jeecg/index.js
index 166f423..c7974d5 100644
--- a/src/components/jeecg/index.js
+++ b/src/components/jeecg/index.js
@@ -27,6 +27,8 @@
 import JTime from './JTime.vue'
 import JTreeTable from './JTreeTable.vue'
 import JEasyCron from '@/components/jeecg/JEasyCron'
+import LxUpload from './LxUpload.vue'
+import LxFilePreview from './LxFilePreview.vue'
 //jeecgbiz
 import JSelectDepart from '../jeecgbiz/JSelectDepart.vue'
 import JSelectMultiUser from '../jeecgbiz/JSelectMultiUser.vue'
@@ -71,6 +73,8 @@
     Vue.component('JTreeSelect', JTreeSelect)
     Vue.component('JTreeTable', JTreeTable)
     Vue.component('JUpload', JUpload)
+    Vue.component('LxUpload', LxUpload)
+    Vue.component('LxFilePreview', LxFilePreview)
 
     //jeecgbiz
     Vue.component('JSelectDepart', JSelectDepart)
diff --git a/src/views/eam/base/EamPrecisionParametersList.vue b/src/views/eam/base/EamPrecisionParametersList.vue
new file mode 100644
index 0000000..b5df8ab
--- /dev/null
+++ b/src/views/eam/base/EamPrecisionParametersList.vue
@@ -0,0 +1,170 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍒犻櫎鏍囪">
+              <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍙傛暟缂栫爜">
+              <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="queryParam.parameterCode"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="妫�娴嬮」鐩�">
+              <a-input placeholder="璇疯緭鍏ユ娴嬮」鐩�" v-model="queryParam.parameterName"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('绮惧害鍙傛暟缁存姢')">瀵煎嚭</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">瀵煎叆</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        class="j-table-force-nowrap"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">缂栬緫</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+
+    <!-- 琛ㄥ崟鍖哄煙 -->
+    <eamPrecisionParameters-modal ref="modalForm" @ok="modalFormOk"></eamPrecisionParameters-modal>
+  </a-card>
+</template>
+
+<script>
+  import '@/assets/less/TableExpand.less'
+  import EamPrecisionParametersModal from './modules/EamPrecisionParametersModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "EamPrecisionParametersList",
+    mixins:[JeecgListMixin],
+    components: {
+      EamPrecisionParametersModal
+    },
+    data () {
+      return {
+        description: '绮惧害鍙傛暟缁存姢绠$悊椤甸潰',
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '鍒犻櫎鏍囪',
+            align:"center",
+            dataIndex: 'delFlag'
+           },
+		   {
+            title: '鍙傛暟缂栫爜',
+            align:"center",
+            dataIndex: 'parameterCode'
+           },
+		   {
+            title: '妫�娴嬮」鐩�',
+            align:"center",
+            dataIndex: 'parameterName'
+           },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/eam/eamPrecisionParameters/list",
+          delete: "/eam/eamPrecisionParameters/delete",
+          deleteBatch: "/eam/eamPrecisionParameters/deleteBatch",
+          exportXlsUrl: "eam/eamPrecisionParameters/exportXls",
+          importExcelUrl: "eam/eamPrecisionParameters/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/eam/base/EamProcessParametersList.vue b/src/views/eam/base/EamProcessParametersList.vue
new file mode 100644
index 0000000..7edfde9
--- /dev/null
+++ b/src/views/eam/base/EamProcessParametersList.vue
@@ -0,0 +1,190 @@
+<template>
+  <a-card :bordered="false">
+
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍒犻櫎鏍囪">
+              <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍙傛暟缂栫爜">
+              <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="queryParam.parameterCode"></a-input>
+            </a-form-item>
+          </a-col>
+        <template v-if="toggleSearchStatus">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍙傛暟鍚嶇О">
+              <a-input placeholder="璇疯緭鍏ュ弬鏁板悕绉�" v-model="queryParam.parameterName"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鍙傛暟鍒嗙被">
+              <a-input placeholder="璇疯緭鍏ュ弬鏁板垎绫�" v-model="queryParam.parameterCategory"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="璁¢噺鍗曚綅">
+              <a-input placeholder="璇疯緭鍏ヨ閲忓崟浣�" v-model="queryParam.parameterUnit"></a-input>
+            </a-form-item>
+          </a-col>
+          </template>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+              <a @click="handleToggleSearch" style="margin-left: 8px">
+                {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }}
+                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('宸ュ簭鍙傛暟缁存姢')">瀵煎嚭</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">瀵煎叆</a-button>
+      </a-upload>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        class="j-table-force-nowrap"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">缂栬緫</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+
+    <!-- 琛ㄥ崟鍖哄煙 -->
+    <eamProcessParameters-modal ref="modalForm" @ok="modalFormOk"></eamProcessParameters-modal>
+  </a-card>
+</template>
+
+<script>
+  import '@/assets/less/TableExpand.less'
+  import EamProcessParametersModal from './modules/EamProcessParametersModal'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+  export default {
+    name: "EamProcessParametersList",
+    mixins:[JeecgListMixin],
+    components: {
+      EamProcessParametersModal
+    },
+    data () {
+      return {
+        description: '宸ュ簭鍙傛暟缁存姢绠$悊椤甸潰',
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+           },
+		   {
+            title: '鍒犻櫎鏍囪',
+            align:"center",
+            dataIndex: 'delFlag'
+           },
+		   {
+            title: '鍙傛暟缂栫爜',
+            align:"center",
+            dataIndex: 'parameterCode'
+           },
+		   {
+            title: '鍙傛暟鍚嶇О',
+            align:"center",
+            dataIndex: 'parameterName'
+           },
+		   {
+            title: '鍙傛暟鍒嗙被',
+            align:"center",
+            dataIndex: 'parameterCategory'
+           },
+		   {
+            title: '璁¢噺鍗曚綅',
+            align:"center",
+            dataIndex: 'parameterUnit'
+           },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            align:"center",
+            scopedSlots: { customRender: 'action' },
+          }
+        ],
+		url: {
+          list: "/eam/eamProcessParameters/list",
+          delete: "/eam/eamProcessParameters/delete",
+          deleteBatch: "/eam/eamProcessParameters/deleteBatch",
+          exportXlsUrl: "eam/eamProcessParameters/exportXls",
+          importExcelUrl: "eam/eamProcessParameters/importExcel",
+       },
+    }
+  },
+  computed: {
+    importExcelUrl: function(){
+      return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+    }
+  },
+    methods: {
+     
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/eam/base/EamSysFilesList.vue b/src/views/eam/base/EamSysFilesList.vue
new file mode 100644
index 0000000..f1c6ae6
--- /dev/null
+++ b/src/views/eam/base/EamSysFilesList.vue
@@ -0,0 +1,204 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <a-form-item label="鏂囦欢鍚嶇О">
+              <j-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="queryParam.fileName"></j-input>
+            </a-form-item>
+          </a-col>
+          <a-col :xl="6" :lg="7" :md="8" :sm="24">
+            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button>
+            </span>
+          </a-col>
+
+        </a-row>
+      </a-form>
+    </div>
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel">
+            <a-icon type="delete" />
+            鍒犻櫎
+          </a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔
+          <a-icon type="down" />
+        </a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a
+        style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�
+        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        class="j-table-force-nowrap"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">缂栬緫</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                 <a @click="handlePreview(record)">棰勮</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="纭畾涓嬭浇鏂囦欢鍚�?" @confirm="() => handleDownload(record)">
+                  <a>涓嬭浇</a>
+                </a-popconfirm>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+    <!-- table鍖哄煙-end -->
+
+    <!-- 琛ㄥ崟鍖哄煙 -->
+    <eamSysFiles-modal ref="modalForm" @ok="modalFormOk"></eamSysFiles-modal>
+    <lx-file-preview ref="lxFilePreview" :fileUrl="fileUrl"></lx-file-preview>
+  </a-card>
+</template>
+
+<script>
+import '@/assets/less/TableExpand.less'
+import EamSysFilesModal from './modules/EamSysFilesModal'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { downFile } from '@/api/manage';
+
+export default {
+  name: 'EamSysFilesList',
+  mixins: [JeecgListMixin],
+  components: {
+    EamSysFilesModal
+  },
+  data() {
+    return {
+      description: '璁惧闄勪欢绠$悊绠$悊椤甸潰',
+      fileUrl: '',
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          }
+        },
+        {
+          title: '鏂囦欢鍔犲瘑鍚�',
+          align: 'center',
+          dataIndex: 'fileEncodeName',
+          ellipsis: true,
+        },
+        {
+          title: '鏂囦欢鍚嶇О',
+          align: 'center',
+          dataIndex: 'fileName',
+          ellipsis: true,
+        },
+        {
+          title: '鏂囦欢璺緞',
+          align: 'center',
+          dataIndex: 'filePath',
+          ellipsis: true,
+        },
+        {
+          title: '鏂囦欢鍚庣紑鍚�',
+          align: 'center',
+          dataIndex: 'fileSuffix'
+        },
+        {
+          title: '鏂囦欢澶у皬',
+          align: 'center',
+          dataIndex: 'fileSize'
+        },
+        {
+          title: '鎻忚堪',
+          align: 'center',
+          dataIndex: 'description',
+          ellipsis: true,
+        },
+        {
+          title: '鎿嶄綔',
+          dataIndex: 'action',
+          align: 'center',
+          scopedSlots: { customRender: 'action' }
+        }
+      ],
+      url: {
+        list: '/eam/sysFiles/list',
+        delete: '/eam/sysFiles/delete',
+        deleteBatch: '/eam/sysFiles/deleteBatch',
+        download: '/eam/sysFiles/downloadFile',
+      }
+    }
+  },
+  computed: {},
+  methods: {
+    handleDownload(record) {
+      downFile(this.url.download, { id: record.id }).then((res) => {
+        if (!res) {
+          this.$message.warning('鏂囦欢涓嬭浇澶辫触')
+          return
+        } else {
+          let fileName = record.fileName;
+          if (typeof window.navigator.msSaveBlob !== 'undefined') {
+            window.navigator.msSaveBlob(new Blob([res]), fileName);
+          } else {
+            let url = window.URL.createObjectURL(new Blob([res]));
+            let link = document.createElement('a');
+            link.style.display = 'none';
+            link.href = url;
+            link.setAttribute('download', fileName);
+            document.body.appendChild(link);
+            link.click()
+            document.body.removeChild(link) //涓嬭浇瀹屾垚绉婚櫎鍏冪礌
+            window.URL.revokeObjectURL(url) //閲婃斁鎺塨lob瀵硅薄
+          }
+        }
+      })
+    },
+    handlePreview: function (record) {
+      this.$refs.lxFilePreview.preview(record.filePath);
+    },
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/eam/base/modules/EamPrecisionParametersModal.vue b/src/views/eam/base/modules/EamPrecisionParametersModal.vue
new file mode 100644
index 0000000..4ce96f6
--- /dev/null
+++ b/src/views/eam/base/modules/EamPrecisionParametersModal.vue
@@ -0,0 +1,117 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+      
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
+          <a-input-number v-model="model.delFlag"/>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterCode" label="鍙傛暟缂栫爜">
+          <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="model.parameterCode" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterName" label="妫�娴嬮」鐩�">
+          <a-input placeholder="璇疯緭鍏ユ娴嬮」鐩�" v-model="model.parameterName" />
+        </a-form-model-item>
+		
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import moment from "moment"
+
+  export default {
+    name: "EamPrecisionParametersModal",
+    data () {
+      return {
+        title:"鎿嶄綔",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules:{
+        },
+        url: {
+          add: "/eam/eamPrecisionParameters/add",
+          edit: "/eam/eamPrecisionParameters/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        //鍒濆鍖栭粯璁ゅ��
+        this.edit({});
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+         this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false;
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/eam/base/modules/EamProcessParametersModal.vue b/src/views/eam/base/modules/EamProcessParametersModal.vue
new file mode 100644
index 0000000..de2031a
--- /dev/null
+++ b/src/views/eam/base/modules/EamProcessParametersModal.vue
@@ -0,0 +1,123 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+      
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
+          <a-input-number v-model="model.delFlag"/>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterCode" label="鍙傛暟缂栫爜">
+          <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="model.parameterCode" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterName" label="鍙傛暟鍚嶇О">
+          <a-input placeholder="璇疯緭鍏ュ弬鏁板悕绉�" v-model="model.parameterName" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterCategory" label="鍙傛暟鍒嗙被">
+          <a-input placeholder="璇疯緭鍏ュ弬鏁板垎绫�" v-model="model.parameterCategory" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterUnit" label="璁¢噺鍗曚綅">
+          <a-input placeholder="璇疯緭鍏ヨ閲忓崟浣�" v-model="model.parameterUnit" />
+        </a-form-model-item>
+		
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+  import { httpAction } from '@/api/manage'
+  import moment from "moment"
+
+  export default {
+    name: "EamProcessParametersModal",
+    data () {
+      return {
+        title:"鎿嶄綔",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+
+        confirmLoading: false,
+        validatorRules:{
+        },
+        url: {
+          add: "/eam/eamProcessParameters/add",
+          edit: "/eam/eamProcessParameters/edit",
+        },
+      }
+    },
+    created () {
+    },
+    methods: {
+      add () {
+        //鍒濆鍖栭粯璁ゅ��
+        this.edit({});
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+        this.$refs.form.clearValidate();
+      },
+      handleOk () {
+        const that = this;
+        // 瑙﹀彂琛ㄥ崟楠岃瘉
+         this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+              that.close();
+            })
+          }else{
+             return false;
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      },
+
+
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file
diff --git a/src/views/eam/base/modules/EamSysFilesModal.vue b/src/views/eam/base/modules/EamSysFilesModal.vue
new file mode 100644
index 0000000..55c321f
--- /dev/null
+++ b/src/views/eam/base/modules/EamSysFilesModal.vue
@@ -0,0 +1,129 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="800"
+    :visible="visible"
+    :confirmLoading="confirmLoading"
+    switchFullscreen
+    @ok="handleOk"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+
+    <a-spin :spinning="confirmLoading">
+      <a-form-model ref="form" :model="model" :rules="validatorRules">
+        <a-form-model-item
+          label="涓婁紶"
+          :labelCol="labelCol"
+          :wrapperCol="wrapperCol"
+          v-if="!editable"
+          prop="fileList">
+         <lx-upload :returnUrl="false"
+                    :isMultiple="false"
+                    v-model="model.fileList"
+                    biz="test">
+         </lx-upload>
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fileName" label="鏂囦欢鍚嶇О" v-if="editable">
+          <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="model.fileName" />
+        </a-form-model-item>
+        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="description" label="鎻忚堪">
+          <a-textarea placeholder="璇疯緭鍏ユ弿杩�" v-model="model.description" />
+        </a-form-model-item>
+      </a-form-model>
+    </a-spin>
+  </j-modal>
+</template>
+
+<script>
+import { httpAction } from '@/api/manage'
+
+export default {
+  name: 'EamSysFilesModal',
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+
+      confirmLoading: false,
+      validatorRules: {
+        fileName: [
+          { required: true, message: '璇疯緭鍏ユ枃浠跺悕绉�!' }
+        ]
+      },
+      url: {
+        add: '/eam/sysFiles/add',
+        edit: '/eam/sysFiles/edit',
+      },
+      editable: false,
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+      this.editable = false;
+      //鍒濆鍖栭粯璁ゅ��
+      this.model = {};
+      this.visible = true
+    },
+    edit(record) {
+      this.editable = true;
+      this.model = Object.assign({}, record)
+      this.visible = true
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    handleOk() {
+      const that = this
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          that.confirmLoading = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          httpAction(httpurl, this.model, method).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.$emit('ok')
+              that.close()
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+    handleCancel() {
+      this.close()
+    },
+
+  }
+}
+</script>
+
+<style lang="less" scoped>
+
+</style>
\ No newline at end of file

--
Gitblit v1.9.3