瀏覽代碼

fix(CustomTable、使用Pid及Aid的组件): 修复表格不能正确处理下载文件的BUG;修改Pid及Aid的传输类型

fxs 6 月之前
父節點
當前提交
894ac62ee7

+ 9 - 1
src/components/dataAnalysis/TemporalTrend.vue

@@ -1,4 +1,12 @@
 <!--
+ * @Author: fxs bjnsfxs@163.com
+ * @Date: 2024-08-26
+ * @LastEditors: fxs bjnsfxs@163.com
+ * @LastEditTime: 2024-12-04
+ * @Description: 
+ * 
+-->
+<!--
 
 * @FileDescription: 时间趋势图
 
@@ -405,7 +413,7 @@ onMounted(() => {
             /></el-icon>
           </span>
         </span>
-        <span class="toolItem" v-if="needDownload">
+        <span class="toolItem" v-if="props.needDownload">
           <el-icon :size="iconSize"><Download /></el-icon>
         </span>
       </div>

+ 4 - 16
src/components/table/CustomTable.vue

@@ -11,12 +11,12 @@ import type { PropsParams, TableFieldInfo, TablePaginationSetting } from '@/type
 import type { ReqConfig } from '@/types/dataAnalysis.ts'
 import { FieldSpecialEffectType } from '@/types/tableText.ts'
 
-import { initLoadResource } from '@/utils/resource'
-import { fuzzySearch, throttleFunc } from '@/utils/common'
+import { fuzzySearch, generateRandomFileName, throttleFunc } from '@/utils/common'
 
 import { useTable } from '@/hooks/useTable.ts'
 import { useRequest } from '@/hooks/useRequest.ts'
 import { computed, onMounted, reactive, ref, toRaw, watch } from 'vue'
+import { downLoadData } from '@/utils/table/table'
 
 import TableFilterForm from '@/components/table/TableFilterForm/TableFilterForm.vue'
 import axiosInstance from '@/utils/axios/axiosInstance.ts'
@@ -70,14 +70,6 @@ const reqConfig = reactive<ReqConfig>({
   otherOptions: {}
 })
 
-// 资源的加载路径
-const resourceInfo: Record<string, string> = {
-  defaultHead: `/img/default/defaultHead.png`
-}
-
-// 使用blob的资源路径信息
-const blobUrlInfo = reactive<Record<string, string>>({})
-
 // 一些公用方法
 const { getTableData } = useTable(tableData, paginationConfig)
 
@@ -259,7 +251,7 @@ const getDecimalFromRange = (number: number) => {
 /**
  * @description: 单独处理拥有均值行的表格每个单元格的样式,均值字段均加粗,其他需要比较的字段根据自身百分比显示颜色
  *              其中使用row-style无效,scope会导致无法覆盖样式
- *               同时由于自定义了表格内容,哪里的样式会覆盖row的样式,所以只能单独对单元格设置
+ *               同时由于自定义了表格内容,哪里的样式会覆盖row的样式,所以只能单独对单元格设置
  * @param {*} info  每个单元格的信息
  */
 const tableCellStyle = (info: any) => {
@@ -432,7 +424,7 @@ const deleteRow = (url: string, fieldsInfo: any) => {
  * @description: 下载表格数据
  */
 const downLoadTable = () => {
-  emits('downLoad', JSON.parse(JSON.stringify(tableData)))
+  downLoadData(generateRandomFileName(), JSON.parse(JSON.stringify(tableData)))
 }
 
 /**
@@ -455,10 +447,6 @@ onMounted(() => {
   initPageConfig()
   initReqConfig()
   loading.value = props.loadingState
-  // 去加载所有需要的资源
-  initLoadResource(resourceInfo).then((data) => {
-    Object.assign(blobUrlInfo, data)
-  })
 })
 </script>
 

+ 1 - 3
src/types/dataAnalysis.ts

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-23 14:58:29
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-11-29
+ * @LastEditTime: 2024-12-03
  * @FilePath: \Game-Backstage-Management-System\src\types\dataAnalysis.ts
  * @Description:用于dataAnalysis相关组件的type
  *
@@ -86,8 +86,6 @@ export interface TrendTableField {
 
 // 时间趋势组件所需要的props
 export interface TemporalTrendProps {
-  needDownload?: boolean // 是否需要下载
-
   tabInfo?: Array<TabInfo> // 用于切换的tab的信息
 
   type?: number // 趋势组件的类型,1为小时段,2为日期统计

+ 9 - 0
src/utils/common/index.ts

@@ -209,3 +209,12 @@ export const fuzzySearch = (pattern: string, text: string, matchCase: boolean =
   const regex = new RegExp(pattern, matchCase ? 'i' : '') // 'i' 标志表示忽略大小写
   return regex.test(text)
 }
+
+/**
+ * 生成一个随机文件名,以当前时间为种子,生成16位随机字符串
+ */
+export const generateRandomFileName = () => {
+  const timestamp = Date.now().toString(36) // 将时间戳转换为36进制字符串
+  const randomString = Math.random().toString(36).substring(2, 8) // 生成8位随机字符串
+  return timestamp + randomString
+}

+ 0 - 1
src/views/AppManage/EventDetailsView.vue

@@ -490,7 +490,6 @@ onUnmounted(() => {
         :pagination-config="pageConfig"
         :table-fields-info="tableFieldConfig"
         :request-config="tableReqConfig"
-        :need-download="false"
         @add-new-item="addNewAttr"
         ref="optionTableRef"
       >

+ 35 - 5
src/views/AppManage/UserConversionDetail.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-11-06
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-12-03
+ * @LastEditTime: 2024-12-04
  * @Description: 
  * 
 -->
@@ -91,13 +91,13 @@ const fieldsInfo: Array<FormField> = [
     name: 'aid',
     cnName: '广告ID',
     type: FormFieldType.INPUT,
-    valueType: 'int'
+    valueType: 'string'
   },
   {
     name: 'pid',
     cnName: '广告父ID',
     type: FormFieldType.INPUT,
-    valueType: 'int'
+    valueType: 'string'
   },
 
   {
@@ -195,6 +195,34 @@ const rules = reactive<FormRules<FormData>>({
 const disableEditField = ['pid', 'gid', 'aid', 'type']
 
 /**
+ * 判断是否在安全整数范围内且不为NaN
+ *
+ * @param val 输入的数字
+ */
+const isSafeInteger = (val: number) => {
+  return val >= Number.MIN_SAFE_INTEGER && val <= Number.MAX_SAFE_INTEGER && !isNaN(val)
+}
+
+/**
+ * 格式化数字输入
+ *
+ * 对于超出精度或者NaN的数字,自动设置为最大值
+ *
+ * @param val 输入的值
+ */
+const formatInputNum = (val: string | number): number => {
+  console.log(val)
+  if (typeof val === 'number') return val
+  let number = parseInt(val)
+
+  if (!isSafeInteger(number)) {
+    ElMessage.warning('超出安全整数范围,已自动设置为最大值')
+    number = Number.MAX_SAFE_INTEGER
+  }
+  return number
+}
+
+/**
  * 格式化输入
  * @param val 值
  * @param valueType 值类型
@@ -203,8 +231,7 @@ const formatInput = (val: any, valueType: ValueTypes | undefined): any => {
   let newVal: any = ''
   if (valueType === 'int') {
     // 格式化为整数
-    const intValue = parseInt(val, 10)
-    newVal = isNaN(intValue) ? 0 : intValue // 如果转换失败,则返回 null
+    newVal = formatInputNum(val)
   }
 
   if (valueType === 'float') {
@@ -268,6 +295,7 @@ const initFormData = () => {
   let query = route.query
   if (Object.keys(query).length > 0) {
     for (let [k, v] of Object.entries(query)) {
+      console.log(v)
       if (k !== 'head')
         formData.value[k] = formatInput(v, fieldsInfo.find((item) => item.name === k)?.valueType)
     }
@@ -321,10 +349,12 @@ initFormData()
               :disabled="(disableEditField.includes(item.name) && isEdit) || item.name === 'gid'"
               v-model="formData[item.name]"
             />
+
             <el-input
               v-else
               :disabled="(disableEditField.includes(item.name) && isEdit) || item.name === 'gid'"
               v-model.number="formData[item.name]"
+              :formatter="formatInputNum"
             />
           </el-form-item>
           <el-form-item

+ 5 - 5
src/views/AppManage/UserConversionTable.vue

@@ -2,7 +2,7 @@
  * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-11-06
  * @LastEditors: fxs bjnsfxs@163.com
- * @LastEditTime: 2024-12-03
+ * @LastEditTime: 2024-12-04
  * @Description: 
  * 
 -->
@@ -131,16 +131,16 @@ const queryInfo: Array<QueryInfo> = [
     label: '父级ID',
     type: FilterType.INPUT,
     placeholder: '请输入父级ID',
-    valueType: 'int',
-    default: 0
+    valueType: 'string',
+    default: ''
   },
   {
     name: 'aid',
     label: '广告ID',
     type: FilterType.INPUT,
     placeholder: '请输入广告ID',
-    default: 0,
-    valueType: 'int'
+    default: '',
+    valueType: 'string'
   },
   {
     name: 'type',

+ 1 - 2
src/views/Home/AdvertisingData/AdvertisingList.vue

@@ -58,7 +58,7 @@ const tableToolsConfig: TableToolsConfig = {
   add: false,
   filterFields: true,
   refresh: true,
-  download: false
+  download: true
 }
 
 const tableFieldsInfo = reactive<Array<TableFieldInfo>>([
@@ -201,7 +201,6 @@ const queryInfo = reactive<Array<QueryInfo>>([
 ])
 
 const headerCardInfo: HeaderCardProps = {
-  //   title: '广告数据',
   title: '广告数据(正式服数据)',
   openDateSelect: true
 }

+ 4 - 4
src/views/Home/Analysis/AdvertisingUsers.vue

@@ -55,16 +55,16 @@ const filterInfo: Array<QueryInfo> = [
     label: '广告父级ID',
     type: FilterType.INPUT,
     placeholder: '请输入广告父级ID',
-    valueType: 'int',
-    default: 0
+    valueType: 'string',
+    default: ''
   },
   {
     name: 'aid',
     label: '广告ID',
     type: FilterType.INPUT,
     placeholder: '请输入广告ID',
-    valueType: 'int',
-    default: 0
+    valueType: 'string',
+    default: ''
   },
   {
     name: 'cid',

+ 8 - 0
src/views/IndexView.vue

@@ -1,5 +1,13 @@
 <!--
  * @Author: fxs bjnsfxs@163.com
+ * @Date: 2024-09-18
+ * @LastEditors: fxs bjnsfxs@163.com
+ * @LastEditTime: 2024-12-04
+ * @Description: 
+ * 
+-->
+<!--
+ * @Author: fxs bjnsfxs@163.com
  * @Date: 2024-08-20 14:06:49
  * @LastEditors: fxs bjnsfxs@163.com
  * @LastEditTime: 2024-11-29