Bladeren bron

页面优化

wangbin 3 jaren geleden
bovenliggende
commit
08f7c58080
3 gewijzigde bestanden met toevoegingen van 141 en 16 verwijderingen
  1. 47 0
      src/api/task.js
  2. 80 11
      src/view/gameTarget/target.vue
  3. 14 5
      src/view/gameTask/list.vue

+ 47 - 0
src/api/task.js

@@ -126,4 +126,51 @@ export const createGameTask = (data) => {
       method: 'post',
       data
     })
+  }
+
+  const handleFileError = (res, fileName) => {
+    if (typeof (res.data) !== 'undefined') {
+      if (res.data.type === 'application/json') {
+        const reader = new FileReader()
+        reader.onload = function() {
+          const message = JSON.parse(reader.result).msg
+          ElMessage({
+            showClose: true,
+            message: message,
+            type: 'error'
+          })
+        }
+        reader.readAsText(new Blob([res.data]))
+      }
+    } else {
+      var downloadUrl = window.URL.createObjectURL(new Blob([res]))
+      var a = document.createElement('a')
+      a.style.display = 'none'
+      a.href = downloadUrl
+      a.download = fileName
+      var event = new MouseEvent('click')
+      a.dispatchEvent(event)
+    }
+  }
+  
+  // @Tags excel
+  // @Summary 导出Excel
+  // @Security ApiKeyAuth
+  // @accept application/json
+  // @Produce  application/octet-stream
+  // @Param data body model.ExcelInfo true "导出Excel文件信息"
+  // @Success 200
+  // @Router /gameTask/taskTargetExport [post]
+  export const taskTargetExport = (tableData, fileName) => {
+    service({
+      url: '/gameTask/taskTargetExport',
+      method: 'post',
+      data: {
+        fileName: fileName,
+        infoList: tableData
+      },
+      responseType: 'blob'
+    }).then((res) => {
+      handleFileError(res, fileName)
+    })
   }

+ 80 - 11
src/view/gameTarget/target.vue

@@ -15,6 +15,17 @@
               />
             </el-select>
           </el-form-item>
+          <el-form-item label="游戏端口">
+            <el-select v-model="searchInfo.game_port_id" placeholder="请选择" style="width:100%">
+                  <el-option
+                    v-for="item in GamePortOptions"
+                    :key="item.id"
+                    :label="`${item.name}`"
+                    :value="item.id"
+                  />
+                </el-select>
+          </el-form-item>
+          
           <el-form-item label="状态">
           <el-select v-model="searchInfo.is_complete" placeholder="是否完成" >
               <el-option
@@ -26,24 +37,28 @@
               />
             </el-select>
         </el-form-item>
-          <el-form-item label="日期" prop="create_date">
-          <el-date-picker
-            v-model="searchInfo.create_date"
-            popper-class="picker-popovers"
-            class="timefilter"
-            type="datetime"
-            placeholder="选择日期时间"
-            value-format="YYYY-MM-DD"
-          >
-          </el-date-picker>
-        </el-form-item>
+        <el-form-item label="日期" prop="date">
+            <el-date-picker
+              v-model="searchInfo.date"
+              size="default"
+              type="daterange"
+              unlink-panels
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :disabled-date="disabledDate"
+              :shortcuts="shortcuts"
+            />
+          </el-form-item>
           <el-form-item>
             <el-button size="small" type="primary" icon="search" @click="onSubmit">查询</el-button>
             <el-button size="small" icon="refresh" @click="onReset">重置</el-button>
+            <el-button class="excel-btn" size="small" type="primary" icon="download" @click="handleExcelExport">导出</el-button>
           </el-form-item>
         </el-form>
       </div>
       <div class="gva-table-box">
+        
         <el-table :data="tableData" border @sort-change="sortChange" @selection-change="handleSelectionChange" style="width: 100%">
           <el-table-column label="任务ID" width="70" prop="task_id" sortable="custom" />
           <el-table-column label="任务日期" min-width="100" prop="create_date" />
@@ -275,6 +290,7 @@
     getGameTaskTargetList,
     taskResetFee,
     getFeeAccountList,
+    taskTargetExport
   } from '@/api/task'
   import {
     selectResponsiblePerson,
@@ -282,6 +298,7 @@
   import { toSQLLine } from '@/utils/stringFun'
   import warningBar from '@/components/warningBar/warningBar.vue'
   import { ref } from 'vue'
+  import dayjs from "dayjs";
   import { ElMessage, ElMessageBox } from 'element-plus'
 
   const statusFiletr = (value) => {
@@ -523,6 +540,14 @@ const deleteBtn = async(btns, index) => {
     page.value = 1
     pageSize.value = 10
     searchInfo.value.task_id = Number(searchInfo.value.task_id)
+    if (typeof searchInfo.value.date != "undefined") {
+      searchInfo.value.date[0] = dayjs(searchInfo.value.date[0]).format(
+        "YYYY-MM-DD"
+      );
+      searchInfo.value.date[1] = dayjs(searchInfo.value.date[1]).format(
+        "YYYY-MM-DD"
+      );
+  }
     getTableData()
   }
   
@@ -574,6 +599,50 @@ const deleteBtn = async(btns, index) => {
   const handleSelectionChange = (val) => {
     apis.value = val
   }
+
+  const handleExcelExport = async() => {
+    var fileName = Date.parse(new Date()) + "-task.xlsx"
+    if(searchInfo.value.create_date == null){
+      let dt = new Date()
+            var y = dt.getFullYear()
+            var mt = (dt.getMonth() + 1).toString().padStart(2,'0')
+            var day = dt.getDate().toString().padStart(2,'0')
+            var timeStr = y + "-" + mt + "-" + day
+      fileName = timeStr + "-task.xlsx"
+    }else{
+      fileName = searchInfo.value.create_date + "-task.xlsx"
+    }
+    taskTargetExport({ page: page.value, pageSize: pageSize.value, ...searchInfo.value },fileName)
+}
+
+  const shortcuts = [
+  {
+    text: "今日",
+    value: () => {
+      const end = new Date();
+      const start = new Date();
+      return [start, end];
+    },
+  },
+  {
+    text: "最近一周",
+    value: () => {
+      const end = new Date();
+      const start = new Date();
+      start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+      return [start, end];
+    },
+  },
+  {
+    text: "最近一月",
+    value: () => {
+      const end = new Date();
+      const start = new Date();
+      start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+      return [start, end];
+    },
+  },
+];
   
   const deleteVisible = ref(false)
   

+ 14 - 5
src/view/gameTask/list.vue

@@ -123,7 +123,14 @@
             <el-input v-model="form.task_name" autocomplete="off"/>
           </el-form-item>
           <el-form-item label="负责人" prop="user" >
-            <el-input v-model="form.user" autocomplete="off"/>
+            <el-select v-model="form.user" placeholder="请选择" style="width:100%">
+                  <el-option
+                    v-for="item in ResponsiblePerson"
+                    :key="item.id"
+                    :label="`${item.name}`"
+                    :value="item.name"
+                  />
+                </el-select>
           </el-form-item>
           <el-form-item label="重要参数">
             <el-radio-group v-model="form.new_retained">
@@ -707,9 +714,10 @@
                   message: '添加成功',
                   showClose: true
                 })
+                getTableData()
+                closeDialog()
               }
-              getTableData()
-              closeDialog()
+              
             }
   
             break
@@ -722,9 +730,10 @@
                   message: '编辑成功',
                   showClose: true
                 })
+                getTableData()
+                closeDialog()
               }
-              getTableData()
-              closeDialog()
+              
             }
             break
           default: