瀏覽代碼

导出排序

wuhb 4 月之前
父節點
當前提交
2e707bb01a

+ 6 - 5
ygtx-common/src/main/java/com/ygtx/common/utils/poi/ExcelUtil.java

@@ -1569,11 +1569,12 @@ public class ExcelUtil<T>
         tempFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
         if (StringUtils.isNotEmpty(includeFields))
         {
-            for (Field field : tempFields)
-            {
-                if (ArrayUtils.contains(this.includeFields, field.getName()) || field.isAnnotationPresent(Excels.class))
-                {
-                    addField(fields, field);
+            for (String fieldName : this.includeFields) {
+                for (Field field : tempFields) {
+                    if (field.getName().equals(fieldName) || field.isAnnotationPresent(Excels.class)) {
+                        addField(fields, field);
+                        break; // 找到后跳出内层循环
+                    }
                 }
             }
         }

+ 48 - 1
ygtx-ui/src/views/gxt/equipment/index.vue

@@ -280,13 +280,19 @@
     
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+      <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer 
         v-model="exportFieldsSelected" 
         :data="exportFieldsData" 
         :titles="['可选字段', '导出字段']"
+        target-order = "push"
         show-checkbox
         filterable
-        filter-placeholder="请输入字段名称">
+        filter-placeholder="请输入字段名称"
+        @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -826,6 +832,47 @@ function onMultiEquipmentSelected(rows) {
   multiEquipmentSelectVisible.value = false
 }
 
+
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
+
 getMaintenanceCenterAndStationList()
 getBrandList()
 getList()

+ 48 - 1
ygtx-ui/src/views/gxt/fanInspectionScore/index.vue

@@ -191,13 +191,19 @@
     
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+      <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer 
         v-model="exportFieldsSelected" 
         :data="exportFieldsData" 
         :titles="['可选字段', '导出字段']"
+        target-order = "push"
         show-checkbox
         filterable
-        filter-placeholder="请输入字段名称">
+        filter-placeholder="请输入字段名称"
+        @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -443,6 +449,47 @@ function getExportFieldsData() {
   });
 }
 
+
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
+
 onMounted(() => {
   getList();
   getFanTypeList();

+ 48 - 1
ygtx-ui/src/views/gxt/gxtOrder/index.vue

@@ -1557,13 +1557,19 @@
     <equipment-select-single v-model="equipmentSelectVisible" @onSelected="onEquipmentSelected"></equipment-select-single>
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+      <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer
           v-model="exportFieldsSelected"
           :data="exportFieldsData"
           :titles="['可选字段', '导出字段']"
+          target-order = "push"
           show-checkbox
           filterable
-          filter-placeholder="请输入字段名称">
+          filter-placeholder="请输入字段名称"
+          @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -3201,6 +3207,47 @@ const workPermitNumProxy = computed({
     form.value.workPermitNum = trimmed
   }
 })
+
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
+
 getList()
 </script>
 <style scoped>

+ 46 - 1
ygtx-ui/src/views/gxt/repairOrder/index.vue

@@ -605,13 +605,19 @@
 
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+       <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer
           v-model="exportFieldsSelected"
           :data="exportFieldsData"
           :titles="['可选字段', '导出字段']"
+          target-order = "push"
           show-checkbox
           filterable
-          filter-placeholder="请输入字段名称">
+          filter-placeholder="请输入字段名称"
+          @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -4000,6 +4006,45 @@ async function submitInvalidate() {
   });
 }
 
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
 
 /** 作废操作 */
 function handleInvalidate(row) {

+ 47 - 1
ygtx-ui/src/views/gxt/scoreRuntime/index.vue

@@ -133,13 +133,19 @@
     
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+      <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer 
         v-model="exportFieldsSelected" 
         :data="exportFieldsData" 
         :titles="['可选字段', '导出字段']"
+        target-order = "push"
         show-checkbox
         filterable
-        filter-placeholder="请输入字段名称">
+        filter-placeholder="请输入字段名称"
+        @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -360,5 +366,45 @@ function parseTime(time) {
   return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
 }
 
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
+
 getList()
 </script>

+ 48 - 1
ygtx-ui/src/views/gxt/scoreproject/index.vue

@@ -144,13 +144,19 @@
     
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+      <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer 
         v-model="exportFieldsSelected" 
         :data="exportFieldsData" 
         :titles="['可选字段', '导出字段']"
+        target-order = "push"
         show-checkbox
         filterable
-        filter-placeholder="请输入字段名称">
+        filter-placeholder="请输入字段名称"
+        @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -372,5 +378,46 @@ function handleMaintenanceTypeChange(value) {
   }
 }
 
+
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
+
 getList();
 </script>

+ 47 - 1
ygtx-ui/src/views/system/user/index.vue

@@ -264,13 +264,19 @@
     
     <!-- 字段选择对话框 -->
     <el-dialog title="选择导出字段" v-model="showExportFieldsDialog" width="600px" append-to-body>
+      <div style="position: absolute;bottom: 65px;right: 38%;">
+        <el-button type="primary" icon="upload" size="mini" style="width:5px;" @click="upDown('up')" /><br/>
+        <el-button type="primary" icon="download" size="mini" style="margin-top:3px;width:5px;" @click="upDown('down')" />
+      </div>
       <el-transfer 
         v-model="exportFieldsSelected" 
         :data="exportFieldsData" 
         :titles="['可选字段', '导出字段']"
+        target-order = "push"
         show-checkbox
         filterable
-        filter-placeholder="请输入字段名称">
+        filter-placeholder="请输入字段名称"
+        @right-check-change="rightCheckHandler">
       </el-transfer>
       <template #footer>
         <div class="dialog-footer">
@@ -777,6 +783,46 @@ function checkPassword(password) {
     return regex.test(password);
 }
 
+const rightChecks = ref([])
+function rightCheckHandler(val) {
+  rightChecks.value = exportFieldsSelected.value
+    .filter(item => val.includes(item))
+  console.log(rightChecks.value, "rightCheckHandler")
+}
+
+function upDown(direction) {
+   // 找出最小和最大索引
+  const indices = rightChecks.value
+    .map(i => exportFieldsSelected.value.indexOf(i))
+    .filter(i => i !== -1)
+  const minIndex = Math.min(...indices)
+  const maxIndex = Math.max(...indices)
+  // 边界检查
+  if (direction === 'up' && minIndex === 0) {
+    console.log('已到顶部')
+    return
+  }
+  if (direction === 'down' && maxIndex === exportFieldsSelected.value.length - 1) {
+    console.log('已到底部')
+    return
+  }
+  if (direction === 'up') {
+    rightChecks.value.map(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      exportFieldsSelected.value.splice(index, 1);
+      exportFieldsSelected.value.splice(index - 1, 0, i);
+    })
+  } else {
+    rightChecks.value.slice().reverse().forEach(i => {
+      const index = exportFieldsSelected.value.findIndex(t => t == i)
+      if (index < exportFieldsSelected.value.length - 1) {
+        exportFieldsSelected.value.splice(index, 1)
+        exportFieldsSelected.value.splice(index + 1, 0, i)
+      }
+    })
+  }
+}
+
 onMounted(() => {
   getDeptTree()
   getList()