From cf65a7d789f8887a407ca1060da9f0810b40ac3b Mon Sep 17 00:00:00 2001
From: wente <329538422@qq.com>
Date: 星期四, 23 十一月 2023 11:06:58 +0800
Subject: [PATCH] 项目表

---
 web/src/components/table-uploader/index.js                                |    7 +
 web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue |   52 ++++++++----
 web/src/main.js                                                           |    2 
 web/src/components/table-uploader/src/table-uploader.vue                  |  118 +++++++++++++++++++++++++++++
 web/src/views/modules/project/Environ-AddOrUpdate.vue                     |   28 ------
 web/src/assets/css/custom.css                                             |   27 ++++++
 6 files changed, 190 insertions(+), 44 deletions(-)

diff --git a/web/src/assets/css/custom.css b/web/src/assets/css/custom.css
index 6c180e6..ec16e5c 100644
--- a/web/src/assets/css/custom.css
+++ b/web/src/assets/css/custom.css
@@ -327,3 +327,30 @@
 .el-border-bottom {
   border-bottom: 1px solid rgba(0, 0, 0, .2);
 }
+.table-container {
+  position: relative;
+}
+.table-container:hover .icon-container {
+  opacity: 1; /* 榧犳爣鎮仠鏃舵樉绀哄浘鏍� */
+}
+.icon-container {
+  z-index: 1;
+  position: absolute;
+  bottom: -20px;
+  left: 50%;
+  width: 40px;
+  height: 30px;
+  text-align: center;
+  line-height: 30px;
+  transform: translate3d(-50%, 0, -20px);
+  border: 1px solid #EBEEF5;
+  background-color: #fafafa;
+  box-shadow: 0 3px 6px 0 rgba(72, 119, 232, 0.14);
+  border-radius: 2px;
+  transition: transform 0.3s ease,box-shadow 0.3s ease,opacity 0.3s ease;
+  opacity: 0;
+}
+.icon-container:hover{
+  transform: translate3d(-50%, 0, 0);
+  box-shadow: 0 10px 10px 0 rgba(72, 119, 232, 0.34)
+}
diff --git a/web/src/components/table-uploader/index.js b/web/src/components/table-uploader/index.js
new file mode 100644
index 0000000..18f80bb
--- /dev/null
+++ b/web/src/components/table-uploader/index.js
@@ -0,0 +1,7 @@
+import comp from './src/table-uploader'
+
+comp.install = function (Vue) {
+  Vue.component(comp.name, comp)
+}
+
+export default comp
diff --git a/web/src/components/table-uploader/src/table-uploader.vue b/web/src/components/table-uploader/src/table-uploader.vue
new file mode 100644
index 0000000..dfde297
--- /dev/null
+++ b/web/src/components/table-uploader/src/table-uploader.vue
@@ -0,0 +1,118 @@
+<template>
+  <div>
+    <div class="config-uploader" >
+      <div v-for="group in (oss.groups || [])" :key="group.busiFieldGroup">
+         <zt-form-item v-for="field in group.fields" :prop="field.busiField"
+                       :key="field.busiField" :rules="field.isRequired ? 'required':''" style="width: 100%;margin-bottom: 0">
+           <zt-uploader v-model="dataForm[field.busiField]" multiple :limit="field.fileLimit" :file-type="field.fileType"
+                        :accept="field.accept" :file-size="field.fileSize" @input="change(field.busiField)"/>
+         </zt-form-item>
+<!--        <el-table :data="group.fields" :show-header="false">-->
+<!--          <el-table-column width="250" style="text-align: left;white-space:nowrap;">-->
+<!--            <template slot-scope="scope">-->
+<!--              <span v-html="scope.row.busiFieldName"></span>-->
+<!--            </template>-->
+<!--          </el-table-column>-->
+<!--          <el-table-column align="left">-->
+<!--            <template slot-scope="scope">-->
+<!--              <zt-uploader v-model="dataForm[scope.row.busiField]" multiple :limit="scope.row.fileLimit" :file-type="scope.row.fileType"-->
+<!--                           :accept="scope.row.accept" :file-size="scope.row.fileSize" @getUploaderImg="getUploaderImg" @input="change(scope.row.busiField)"/>-->
+<!--            </template>-->
+<!--          </el-table-column>-->
+<!--        </el-table>-->
+      </div>
+    </div>
+  </div>
+
+</template>
+<script>
+
+export default {
+  name: 'TableUploader',
+  components: {},
+  props: {
+    value: Object,
+    dataForm: Object,
+    image:false,
+    busiType: String // 涓氬姟绫诲瀷
+  },
+  data() {
+    return {
+      activeNames: ['1'],
+      oss: null
+    }
+  },
+  computed: {
+    fields() {
+      let arr = []
+      if (this.dataForm.files && this.dataForm.files.groups) {
+        this.dataForm.files.groups.forEach(group => {
+          group.fields.forEach(field => arr.push(field))
+        })
+      }
+      return arr
+    }
+  },
+  watch: {
+    value(val, oldval) {
+      if (JSON.stringify(val) !== JSON.stringify(oldval)) {
+        this.oss = {
+          ...this.getOss(),
+          ...(val || {})
+        }
+        // this.dataForm.files = this.oss
+        this.$set(this.dataForm, 'files', this.oss)
+
+        // 鍒嗚В鍒版瘡涓瓧娈电粰dataForm璧嬪��
+        this.fields.forEach(field => {
+          // this.dataForm[field.busiField] = field.files
+          this.$set(this.dataForm, field.busiField, field.files)
+        })
+      }
+    }
+  },
+  mounted() {
+    this.oss = this.getOss()
+    if (this.oss) {
+      this.oss.groups.forEach(group => {
+        this.activeNames.push(group.busiFieldGroup)
+      })
+      // this.dataForm.files = this.oss
+      this.$set(this.dataForm, 'files', this.oss)
+    }
+  },
+  methods: {
+    getOss() {
+      let arr = (this.$store.state.oss.configs || []).filter(config => config.busiType === this.busiType)
+      if (arr.length > 0) {
+        return JSON.parse(JSON.stringify(arr[0]))
+      }
+      return null
+    },
+    change(busiField) {
+      console.log(busiField,'busiField busiField')
+      this.fields.forEach(field => {
+        if (field.busiField === busiField) {
+          field.files.length = 0
+          this.dataForm[busiField].forEach(file => field.files.push(file))
+        }
+      })
+    },
+    getUploaderImg(list){
+      // this.imageList = list
+      if(list[0].url){
+        this.$emit('getImageUrl',list[0].url)
+      }
+
+    }
+  }
+}
+</script>
+<style>
+.config-uploader label {
+  width: 260px !important;
+}
+.zt .el-upload-list__item .el-progress{
+  top:15px !important;
+}
+</style>
diff --git a/web/src/main.js b/web/src/main.js
index 5ac5f6f..dd63816 100644
--- a/web/src/main.js
+++ b/web/src/main.js
@@ -41,6 +41,7 @@
 import ColumnSelect from './components/column-select'
 import ZtEquipmentConfig from './components/zt-equipment-config'
 import ZtEquipmentSelect from './components/zt-equipment-select'
+import TableUploader from './components/table-uploader'
 import scroll from 'vue-seamless-scroll'
 import adaptive from './directive/el-table'
 import './directive/dialogDrag'
@@ -79,6 +80,7 @@
 Vue.use(ColumnSelect)
 Vue.use(ZtEquipmentConfig)
 Vue.use(ZtEquipmentSelect)
+Vue.use(TableUploader)
 Vue.config.productionTip = false
 
 Vue.directive('loadmore', {
diff --git a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
index b83ab23..f70a834 100644
--- a/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
+++ b/web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -31,53 +31,61 @@
           <div style="padding-left:5px;padding-right:5px;">
             <div style="padding: 5px">鐗╁搧鎶�鏈祫鏂欏強鏁伴噺锛�</div>
             <div class="table-container">
-              <el-table ref="tableSoftwareList" class="el-software el-margin-top-bot" border :data="dataForm.technicalList"
+              <el-table ref="tableCirculatOrderList" class="el-software el-margin-top-bot" border :data="dataForm.technicalList"
                         stripe>
-                <el-table-column prop="no" align="center" width="80" label="搴忓彿">
+                <el-table-column prop="no" align="center" width="60" label="搴忓彿">
                   <template slot-scope="scope">
                     <span v-html="indexFormat(scope.$index)"></span>
                   </template>
                 </el-table-column>
-                <el-table-column prop="infoName" min-width="300" label="鎶�鏈祫鏂欏悕绉�">
+                <el-table-column prop="Name" min-width="180" label="鎶�鏈祫鏂欏悕绉�">
                   <template v-slot="{ row }">
-                    <el-input v-model="row.name" placeholder="鎶�鏈祫鏂欏悕绉�"></el-input>
+                    <el-input v-model="row.Name" placeholder="鎶�鏈祫鏂欏悕绉�"></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column prop="identify" align="center" width="180" label="鏍囪瘑">
+                <el-table-column prop="identify" align="center" width="150" label="鏍囪瘑">
                   <template v-slot="{ row }">
-                    <el-input v-model="row.version" placeholder="鏍囪瘑"></el-input>
+                    <el-input v-model="row.identify" placeholder="鏍囪瘑"></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column prop="version" align="center" width="180" label="鐗堟湰">
+                <el-table-column prop="version" align="center" width="120" label="鐗堟湰">
                   <template v-slot="{ row }">
-                    <el-input v-model="row.identify" placeholder="鐗堟湰"></el-input>
+                    <el-input v-model="row.version" placeholder="鐗堟湰"></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column prop="secretClass" label="瀵嗙骇" width="180"  align="center">
+                <el-table-column prop="secretClass" label="瀵嗙骇" width="100"  align="center">
                   <template v-slot="{ row }">
-                    <el-input v-model="row.secretClass" placeholder="瀵嗙骇"></el-input>
+<!--                    <el-input v-model="row.secretClass" placeholder="瀵嗙骇"></el-input>-->
+                    <zt-dict v-model="row.secretClass" dict="secret_class"></zt-dict>
                   </template>
                 </el-table-column>
-                <el-table-column prop="medium" label="浠嬭川" width="180"  align="center">
+                <el-table-column prop="medium" label="浠嬭川" width="100"  align="center">
                   <template v-slot="{ row }">
                     <el-input v-model="row.medium" placeholder="浠嬭川"></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column prop="amount" label="鏁伴噺" width="180"  align="center">
+                <el-table-column prop="amount" label="鏁伴噺" width="80"  align="center">
                   <template v-slot="{ row }">
                     <el-input v-model="row.amount" placeholder="鏁伴噺"></el-input>
                   </template>
                 </el-table-column>
-                <el-table-column prop="remark" label="澶囨敞" width="180"  align="center">
+                <el-table-column prop="remark" label="澶囨敞" width="100"  align="center">
                   <template v-slot="{ row }">
                     <el-input v-model="row.remark" placeholder="澶囨敞"></el-input>
                   </template>
                 </el-table-column>
+                <el-table-column fixed="right" prop="files" label="涓婁紶闄勪欢" width="80"  align="center">
+                  <template v-slot="{ row }">
+<!--                    <zt-table-button @click="files(row.id)">涓婁紶闄勪欢</zt-table-button>-->
+                    <table-uploader busi-type="test_order" model-name="dataForm" :dataForm="dataForm"
+                                     v-model="row.files"/>
+                  </template>
+                </el-table-column>
               </el-table>
-<!--              <div class="icon-container" @click="addSoftwareRow()">-->
-<!--                &lt;!&ndash; 鏀剧疆鍥哄畾鐨勫浘鏍� &ndash;&gt;-->
-<!--                <i class="el-icon-plus"></i>-->
-<!--              </div>-->
+              <div class="icon-container" @click="addCirculatRow()">
+                <!-- 鏀剧疆鍥哄畾鐨勫浘鏍� -->
+                <i class="el-icon-plus"></i>
+              </div>
             </div>
           </div>
         </div>
@@ -179,6 +187,9 @@
       }
     },
     methods: {
+      indexFormat(index){
+        return index += 1
+      },
       init(id,row){
         this.dataForm.id = row.id
         this.dataForm.projectId = row.projectId
@@ -186,6 +197,13 @@
         this.getInfo()
         console.log(this.dataForm.id,this.dataForm.projectId,'params params')
       },
+      addCirculatRow(){
+        this.dataForm.technicalList.push({})
+        this.$nextTick(()=>{
+          const tableBody=this.$refs.tableCirculatOrderList.$el.querySelector('.el-table__body-wrapper')
+          tableBody.scrollTop = tableBody.scrollHeight;
+        })
+      },
       // 鑾峰彇淇℃伅
       async getInfo() {
         let params = {
diff --git a/web/src/views/modules/project/Environ-AddOrUpdate.vue b/web/src/views/modules/project/Environ-AddOrUpdate.vue
index 5ce1f80..343c843 100644
--- a/web/src/views/modules/project/Environ-AddOrUpdate.vue
+++ b/web/src/views/modules/project/Environ-AddOrUpdate.vue
@@ -374,31 +374,5 @@
   margin-top: 0 !important;
   margin-bottom: 10px !important;
 }
-.table-container {
-  position: relative;
-}
-.table-container:hover .icon-container {
-  opacity: 1; /* 榧犳爣鎮仠鏃舵樉绀哄浘鏍� */
-}
-.icon-container {
-  z-index: 1;
-  position: absolute;
-  bottom: -20px;
-  left: 50%;
-  width: 40px;
-  height: 30px;
-  text-align: center;
-  line-height: 30px;
-  transform: translate3d(-50%, 0, -20px);
-  border: 1px solid #EBEEF5;
-  background-color: #fafafa;
-  box-shadow: 0 3px 6px 0 rgba(72, 119, 232, 0.14);
-  border-radius: 2px;
-  transition: transform 0.3s ease,box-shadow 0.3s ease,opacity 0.3s ease;
-  opacity: 0;
-}
-.icon-container:hover{
-  transform: translate3d(-50%, 0, 0);
-  box-shadow: 0 10px 10px 0 rgba(72, 119, 232, 0.34)
-}
+
 </style>

--
Gitblit v1.9.1