liyongli 3 månader sedan
förälder
incheckning
68383cbb28

+ 1 - 0
.gitignore

@@ -30,3 +30,4 @@ coverage
 *.tsbuildinfo
 *.tsbuildinfo
 
 
 upServer.cjs
 upServer.cjs
+buildSdk.js

+ 41 - 38
package.json

@@ -1,39 +1,42 @@
 {
 {
-  "name": "ad",
-  "version": "0.0.0",
-  "private": true,
-  "type": "module",
-  "scripts": {
-    "dev": "vite",
-    "build": "run-p type-check \"build-only {@}\" --",
-    "preview": "vite preview",
-    "build-only": "vite build",
-    "type-check": "vue-tsc --build --force",
-    "lint": "eslint . --fix",
-    "format": "prettier --write src/"
-  },
-  "dependencies": {
-    "axios": "^1.7.7",
-    "element-plus": "^2.8.7",
-    "vue": "^3.5.12",
-    "vue-router": "^4.4.5"
-  },
-  "devDependencies": {
-    "@tsconfig/node20": "^20.1.4",
-    "@types/node": "^20.17.6",
-    "@vitejs/plugin-vue": "^5.1.4",
-    "@vue/eslint-config-prettier": "^10.1.0",
-    "@vue/eslint-config-typescript": "^14.1.3",
-    "@vue/tsconfig": "^0.5.1",
-    "eslint": "^9.14.0",
-    "eslint-plugin-vue": "^9.30.0",
-    "npm-run-all2": "^7.0.1",
-    "prettier": "^3.3.3",
-    "ssh2": "^1.16.0",
-    "typescript": "~5.6.3",
-    "unplugin-auto-import": "^0.18.3",
-    "unplugin-vue-components": "^0.27.4",
-    "vite": "^5.4.10",
-    "vue-tsc": "^2.1.10"
-  }
-}
+    "name": "ad",
+    "version": "0.0.0",
+    "private": true,
+    "type": "module",
+    "scripts": {
+        "dev": "vite",
+        "build": "run-p type-check \"build-only {@}\" --",
+        "preview": "vite preview",
+        "build-only": "vite build",
+        "type-check": "vue-tsc --build --force",
+        "lint": "eslint . --fix",
+        "format": "prettier --write src/",
+        "build:sdk": "node ./buildSdk.js"
+    },
+    "dependencies": {
+        "axios": "^1.7.7",
+        "element-plus": "^2.8.7",
+        "vue": "^3.5.12",
+        "vue-router": "^4.4.5"
+    },
+    "devDependencies": {
+        "@tsconfig/node20": "^20.1.4",
+        "@types/node": "^20.17.6",
+        "@vitejs/plugin-vue": "^5.1.4",
+        "@vue/eslint-config-prettier": "^10.1.0",
+        "@vue/eslint-config-typescript": "^14.1.3",
+        "@vue/tsconfig": "^0.5.1",
+        "eslint": "^9.14.0",
+        "eslint-plugin-vue": "^9.30.0",
+        "npm-run-all2": "^7.0.1",
+        "oss-sdk": "^1.0.0",
+        "prettier": "^3.3.3",
+        "ssh2": "^1.16.0",
+        "terser": "^5.37.0",
+        "typescript": "~5.6.3",
+        "unplugin-auto-import": "^0.18.3",
+        "unplugin-vue-components": "^0.27.4",
+        "vite": "^5.4.10",
+        "vue-tsc": "^2.1.10"
+    }
+}

+ 91 - 5
pnpm-lock.yaml

@@ -29,7 +29,7 @@ importers:
         version: 20.17.6
         version: 20.17.6
       '@vitejs/plugin-vue':
       '@vitejs/plugin-vue':
         specifier: ^5.1.4
         specifier: ^5.1.4
-        version: 5.1.4(vite@5.4.10(@types/node@20.17.6))(vue@3.5.12(typescript@5.6.3))
+        version: 5.1.4(vite@5.4.10(@types/node@20.17.6)(terser@5.37.0))(vue@3.5.12(typescript@5.6.3))
       '@vue/eslint-config-prettier':
       '@vue/eslint-config-prettier':
         specifier: ^10.1.0
         specifier: ^10.1.0
         version: 10.1.0(eslint@9.14.0)(prettier@3.3.3)
         version: 10.1.0(eslint@9.14.0)(prettier@3.3.3)
@@ -48,12 +48,18 @@ importers:
       npm-run-all2:
       npm-run-all2:
         specifier: ^7.0.1
         specifier: ^7.0.1
         version: 7.0.1
         version: 7.0.1
+      oss-sdk:
+        specifier: ^1.0.0
+        version: 1.0.0
       prettier:
       prettier:
         specifier: ^3.3.3
         specifier: ^3.3.3
         version: 3.3.3
         version: 3.3.3
       ssh2:
       ssh2:
         specifier: ^1.16.0
         specifier: ^1.16.0
         version: 1.16.0
         version: 1.16.0
+      terser:
+        specifier: ^5.37.0
+        version: 5.37.0
       typescript:
       typescript:
         specifier: ~5.6.3
         specifier: ~5.6.3
         version: 5.6.3
         version: 5.6.3
@@ -65,7 +71,7 @@ importers:
         version: 0.27.4(@babel/parser@7.26.2)(rollup@4.24.4)(vue@3.5.12(typescript@5.6.3))
         version: 0.27.4(@babel/parser@7.26.2)(rollup@4.24.4)(vue@3.5.12(typescript@5.6.3))
       vite:
       vite:
         specifier: ^5.4.10
         specifier: ^5.4.10
-        version: 5.4.10(@types/node@20.17.6)
+        version: 5.4.10(@types/node@20.17.6)(terser@5.37.0)
       vue-tsc:
       vue-tsc:
         specifier: ^2.1.10
         specifier: ^2.1.10
         version: 2.1.10(typescript@5.6.3)
         version: 2.1.10(typescript@5.6.3)
@@ -302,9 +308,27 @@ packages:
     resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
     resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==}
     engines: {node: '>=18.18'}
     engines: {node: '>=18.18'}
 
 
+  '@jridgewell/gen-mapping@0.3.8':
+    resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
+    engines: {node: '>=6.0.0'}
+
+  '@jridgewell/resolve-uri@3.1.2':
+    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+    engines: {node: '>=6.0.0'}
+
+  '@jridgewell/set-array@1.2.1':
+    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+    engines: {node: '>=6.0.0'}
+
+  '@jridgewell/source-map@0.3.6':
+    resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+
   '@jridgewell/sourcemap-codec@1.5.0':
   '@jridgewell/sourcemap-codec@1.5.0':
     resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
     resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
 
 
+  '@jridgewell/trace-mapping@0.3.25':
+    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+
   '@nodelib/fs.scandir@2.1.5':
   '@nodelib/fs.scandir@2.1.5':
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
     engines: {node: '>= 8'}
@@ -664,6 +688,9 @@ packages:
     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
     resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
     engines: {node: '>=8'}
     engines: {node: '>=8'}
 
 
+  buffer-from@1.1.2:
+    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
   buildcheck@0.0.6:
   buildcheck@0.0.6:
     resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==}
     resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==}
     engines: {node: '>=10.0.0'}
     engines: {node: '>=10.0.0'}
@@ -691,6 +718,9 @@ packages:
     resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
     resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
     engines: {node: '>= 0.8'}
     engines: {node: '>= 0.8'}
 
 
+  commander@2.20.3:
+    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
   concat-map@0.0.1:
   concat-map@0.0.1:
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
     resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
 
 
@@ -1087,6 +1117,9 @@ packages:
     resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
     resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
     engines: {node: '>= 0.8.0'}
     engines: {node: '>= 0.8.0'}
 
 
+  oss-sdk@1.0.0:
+    resolution: {integrity: sha512-y4Hyn6drGOoCyXdrgp8dA64xg/XPFtZTriCyAyPvZqgV36v6JPCCH3Oj2pKBGRoMXRR/hnRgenQHY6DorO68kg==}
+
   p-limit@3.1.0:
   p-limit@3.1.0:
     resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
     resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
     engines: {node: '>=10'}
     engines: {node: '>=10'}
@@ -1213,6 +1246,13 @@ packages:
     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
     resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
     engines: {node: '>=0.10.0'}
     engines: {node: '>=0.10.0'}
 
 
+  source-map-support@0.5.21:
+    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+  source-map@0.6.1:
+    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    engines: {node: '>=0.10.0'}
+
   ssh2@1.16.0:
   ssh2@1.16.0:
     resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==}
     resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==}
     engines: {node: '>=10.16.0'}
     engines: {node: '>=10.16.0'}
@@ -1232,6 +1272,11 @@ packages:
     resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
     resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
     engines: {node: ^14.18.0 || >=16.0.0}
     engines: {node: ^14.18.0 || >=16.0.0}
 
 
+  terser@5.37.0:
+    resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==}
+    engines: {node: '>=10'}
+    hasBin: true
+
   text-table@0.2.0:
   text-table@0.2.0:
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
     resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
 
 
@@ -1572,8 +1617,28 @@ snapshots:
 
 
   '@humanwhocodes/retry@0.4.1': {}
   '@humanwhocodes/retry@0.4.1': {}
 
 
+  '@jridgewell/gen-mapping@0.3.8':
+    dependencies:
+      '@jridgewell/set-array': 1.2.1
+      '@jridgewell/sourcemap-codec': 1.5.0
+      '@jridgewell/trace-mapping': 0.3.25
+
+  '@jridgewell/resolve-uri@3.1.2': {}
+
+  '@jridgewell/set-array@1.2.1': {}
+
+  '@jridgewell/source-map@0.3.6':
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.8
+      '@jridgewell/trace-mapping': 0.3.25
+
   '@jridgewell/sourcemap-codec@1.5.0': {}
   '@jridgewell/sourcemap-codec@1.5.0': {}
 
 
+  '@jridgewell/trace-mapping@0.3.25':
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.2
+      '@jridgewell/sourcemap-codec': 1.5.0
+
   '@nodelib/fs.scandir@2.1.5':
   '@nodelib/fs.scandir@2.1.5':
     dependencies:
     dependencies:
       '@nodelib/fs.stat': 2.0.5
       '@nodelib/fs.stat': 2.0.5
@@ -1751,9 +1816,9 @@ snapshots:
       '@typescript-eslint/types': 8.13.0
       '@typescript-eslint/types': 8.13.0
       eslint-visitor-keys: 3.4.3
       eslint-visitor-keys: 3.4.3
 
 
-  '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@20.17.6))(vue@3.5.12(typescript@5.6.3))':
+  '@vitejs/plugin-vue@5.1.4(vite@5.4.10(@types/node@20.17.6)(terser@5.37.0))(vue@3.5.12(typescript@5.6.3))':
     dependencies:
     dependencies:
-      vite: 5.4.10(@types/node@20.17.6)
+      vite: 5.4.10(@types/node@20.17.6)(terser@5.37.0)
       vue: 3.5.12(typescript@5.6.3)
       vue: 3.5.12(typescript@5.6.3)
 
 
   '@volar/language-core@2.4.8':
   '@volar/language-core@2.4.8':
@@ -1953,6 +2018,8 @@ snapshots:
     dependencies:
     dependencies:
       fill-range: 7.1.1
       fill-range: 7.1.1
 
 
+  buffer-from@1.1.2: {}
+
   buildcheck@0.0.6:
   buildcheck@0.0.6:
     optional: true
     optional: true
 
 
@@ -1985,6 +2052,8 @@ snapshots:
     dependencies:
     dependencies:
       delayed-stream: 1.0.0
       delayed-stream: 1.0.0
 
 
+  commander@2.20.3: {}
+
   concat-map@0.0.1: {}
   concat-map@0.0.1: {}
 
 
   confbox@0.1.8: {}
   confbox@0.1.8: {}
@@ -2400,6 +2469,8 @@ snapshots:
       type-check: 0.4.0
       type-check: 0.4.0
       word-wrap: 1.2.5
       word-wrap: 1.2.5
 
 
+  oss-sdk@1.0.0: {}
+
   p-limit@3.1.0:
   p-limit@3.1.0:
     dependencies:
     dependencies:
       yocto-queue: 0.1.0
       yocto-queue: 0.1.0
@@ -2516,6 +2587,13 @@ snapshots:
 
 
   source-map-js@1.2.1: {}
   source-map-js@1.2.1: {}
 
 
+  source-map-support@0.5.21:
+    dependencies:
+      buffer-from: 1.1.2
+      source-map: 0.6.1
+
+  source-map@0.6.1: {}
+
   ssh2@1.16.0:
   ssh2@1.16.0:
     dependencies:
     dependencies:
       asn1: 0.2.6
       asn1: 0.2.6
@@ -2539,6 +2617,13 @@ snapshots:
       '@pkgr/core': 0.1.1
       '@pkgr/core': 0.1.1
       tslib: 2.8.1
       tslib: 2.8.1
 
 
+  terser@5.37.0:
+    dependencies:
+      '@jridgewell/source-map': 0.3.6
+      acorn: 8.14.0
+      commander: 2.20.3
+      source-map-support: 0.5.21
+
   text-table@0.2.0: {}
   text-table@0.2.0: {}
 
 
   to-regex-range@5.0.1:
   to-regex-range@5.0.1:
@@ -2642,7 +2727,7 @@ snapshots:
 
 
   util-deprecate@1.0.2: {}
   util-deprecate@1.0.2: {}
 
 
-  vite@5.4.10(@types/node@20.17.6):
+  vite@5.4.10(@types/node@20.17.6)(terser@5.37.0):
     dependencies:
     dependencies:
       esbuild: 0.21.5
       esbuild: 0.21.5
       postcss: 8.4.47
       postcss: 8.4.47
@@ -2650,6 +2735,7 @@ snapshots:
     optionalDependencies:
     optionalDependencies:
       '@types/node': 20.17.6
       '@types/node': 20.17.6
       fsevents: 2.3.3
       fsevents: 2.3.3
+      terser: 5.37.0
 
 
   vscode-uri@3.0.8: {}
   vscode-uri@3.0.8: {}
 
 

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
sdk/adList.min.js


+ 14 - 6
src/views/ReportFormsMonthPage.vue

@@ -86,6 +86,9 @@
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="clickCount" label="点击数" />
       <el-table-column prop="clickCount" label="点击数" />
+      <el-table-column prop="clickCount" label="点击率">
+        <template #default="scope"> {{ scope.row.lv }}% </template>
+      </el-table-column>
       <el-table-column prop="uvCount" label="用户数" />
       <el-table-column prop="uvCount" label="用户数" />
     </el-table>
     </el-table>
     <br />
     <br />
@@ -108,7 +111,6 @@ import {
   getAdvertiserList,
   getAdvertiserList,
   getOriginalityList,
   getOriginalityList,
   getMaterialList,
   getMaterialList,
-  getAdvertiserReport,
   getAdvertiserMonthReport,
   getAdvertiserMonthReport,
   getProvinceCity,
   getProvinceCity,
 } from '@/api/index'
 } from '@/api/index'
@@ -196,12 +198,18 @@ const onSubmit = (isExport = false) => {
     pageNum: pages.pageNum,
     pageNum: pages.pageNum,
     pageSize: isExport ? 999999 : pages.pageSize,
     pageSize: isExport ? 999999 : pages.pageSize,
   }
   }
-  const Func = pages.type == 'day' ? getAdvertiserReport : getAdvertiserMonthReport
+  const Func = getAdvertiserMonthReport
   loading.value = true
   loading.value = true
   Func(p).then(({ data }) => {
   Func(p).then(({ data }) => {
+    const list = (data.records || []).map((v: IReportItem) => {
+      return {
+        ...v,
+        lv: (v.clickCount / v.exposureCount).toFixed(2) - 0,
+      }
+    })
     if (!isExport) {
     if (!isExport) {
       loading.value = false
       loading.value = false
-      tableData.value = data.records
+      tableData.value = list
       pages.total = data.total
       pages.total = data.total
       return
       return
     }
     }
@@ -210,9 +218,9 @@ const onSubmit = (isExport = false) => {
       return
       return
     }
     }
     // 生成数据
     // 生成数据
-    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,用户数\r\n'
-    ;(data.records || []).map((v: IReportItem) => {
-      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.uvCount},\r\n`
+    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,点击率,用户数\r\n'
+    list.map((v: IReportItem) => {
+      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.lv}%,${v.uvCount},\r\n`
     })
     })
     // 导出
     // 导出
     let link: HTMLAnchorElement | undefined = document.createElement('a')
     let link: HTMLAnchorElement | undefined = document.createElement('a')

+ 14 - 6
src/views/ReportFormsPage.vue

@@ -86,6 +86,9 @@
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="clickCount" label="点击数" />
       <el-table-column prop="clickCount" label="点击数" />
+      <el-table-column prop="clickCount" label="点击率">
+        <template #default="scope"> {{ scope.row.lv }}% </template>
+      </el-table-column>
       <el-table-column prop="uvCount" label="用户数" />
       <el-table-column prop="uvCount" label="用户数" />
     </el-table>
     </el-table>
     <br />
     <br />
@@ -109,7 +112,6 @@ import {
   getOriginalityList,
   getOriginalityList,
   getMaterialList,
   getMaterialList,
   getAdvertiserReport,
   getAdvertiserReport,
-  getAdvertiserMonthReport,
   getProvinceCity,
   getProvinceCity,
 } from '@/api/index'
 } from '@/api/index'
 import { formatDate } from '@/tool/index'
 import { formatDate } from '@/tool/index'
@@ -196,12 +198,18 @@ const onSubmit = (isExport = false) => {
     pageNum: pages.pageNum,
     pageNum: pages.pageNum,
     pageSize: isExport ? 999999 : pages.pageSize,
     pageSize: isExport ? 999999 : pages.pageSize,
   }
   }
-  const Func = pages.type == 'day' ? getAdvertiserReport : getAdvertiserMonthReport
+  const Func = getAdvertiserReport
   loading.value = true
   loading.value = true
   Func(p).then(({ data }) => {
   Func(p).then(({ data }) => {
+    const list = (data.records || []).map((v: IReportItem) => {
+      return {
+        ...v,
+        lv: (v.clickCount / v.exposureCount).toFixed(2) - 0,
+      }
+    })
     if (!isExport) {
     if (!isExport) {
       loading.value = false
       loading.value = false
-      tableData.value = data.records
+      tableData.value = list
       pages.total = data.total
       pages.total = data.total
       return
       return
     }
     }
@@ -210,9 +218,9 @@ const onSubmit = (isExport = false) => {
       return
       return
     }
     }
     // 生成数据
     // 生成数据
-    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,用户数\r\n'
-    ;(data.records || []).map((v: IReportItem) => {
-      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.uvCount},\r\n`
+    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,点击率,用户数\r\n'
+    list.map((v: IReportItem) => {
+      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.lv}%,${v.uvCount},\r\n`
     })
     })
     // 导出
     // 导出
     let link: HTMLAnchorElement | undefined = document.createElement('a')
     let link: HTMLAnchorElement | undefined = document.createElement('a')

+ 15 - 6
src/views/ReportSpaceFormsMonthPage.vue

@@ -59,6 +59,9 @@
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="clickCount" label="点击数" />
       <el-table-column prop="clickCount" label="点击数" />
+      <el-table-column prop="lv" label="点击率">
+        <template #default="scope"> {{ scope.row.lv }}% </template>
+      </el-table-column>
       <el-table-column prop="uvCount" label="用户数" />
       <el-table-column prop="uvCount" label="用户数" />
     </el-table>
     </el-table>
     <br />
     <br />
@@ -76,7 +79,7 @@ import type { Pages } from '@/types/Tool'
 import type { IReportItem } from '@/types/Report'
 import type { IReportItem } from '@/types/Report'
 import type { SiteList } from '@/types/Site'
 import type { SiteList } from '@/types/Site'
 import type { AsSpaceItem } from '@/types/AsSpace'
 import type { AsSpaceItem } from '@/types/AsSpace'
-import { getMediaReport, getMediaMonthReport, getSiteList, getAsSpaceList } from '@/api/index'
+import { getMediaMonthReport, getSiteList, getAsSpaceList } from '@/api/index'
 import { formatDate } from '@/tool/index'
 import { formatDate } from '@/tool/index'
 import { reactive, ref } from 'vue'
 import { reactive, ref } from 'vue'
 const tableData = ref<IReportItem[]>([])
 const tableData = ref<IReportItem[]>([])
@@ -121,11 +124,17 @@ const onSubmit = (isExport = false) => {
     pageNum: pages.pageNum,
     pageNum: pages.pageNum,
     pageSize: isExport ? 999999 : pages.pageSize,
     pageSize: isExport ? 999999 : pages.pageSize,
   }
   }
-  const Func = pages.type == 'day' ? getMediaReport : getMediaMonthReport
+  const Func = getMediaMonthReport
   Func(p).then(({ data }) => {
   Func(p).then(({ data }) => {
+    const list = (data.records || []).map((v: IReportItem) => {
+      return {
+        ...v,
+        lv: (v.clickCount / v.exposureCount).toFixed(2) - 0,
+      }
+    })
     if (!isExport) {
     if (!isExport) {
       loading.value = false
       loading.value = false
-      tableData.value = data.records
+      tableData.value = list
       pages.total = data.total
       pages.total = data.total
       return
       return
     }
     }
@@ -134,9 +143,9 @@ const onSubmit = (isExport = false) => {
       return
       return
     }
     }
     // 生成数据
     // 生成数据
-    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,用户数\r\n'
-    ;(data.records || []).map((v: IReportItem) => {
-      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.uvCount},\r\n`
+    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,点击率,用户数\r\n'
+    list.map((v: IReportItem) => {
+      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.lv}%,${v.uvCount},\r\n`
     })
     })
     // 导出
     // 导出
     let link: HTMLAnchorElement | undefined = document.createElement('a')
     let link: HTMLAnchorElement | undefined = document.createElement('a')

+ 15 - 6
src/views/ReportSpaceFormsPage.vue

@@ -59,6 +59,9 @@
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="sdate" label="日期" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="exposureCount" label="曝光数" />
       <el-table-column prop="clickCount" label="点击数" />
       <el-table-column prop="clickCount" label="点击数" />
+      <el-table-column prop="lv" label="点击率">
+        <template #default="scope"> {{ scope.row.lv }}% </template>
+      </el-table-column>
       <el-table-column prop="uvCount" label="用户数" />
       <el-table-column prop="uvCount" label="用户数" />
     </el-table>
     </el-table>
     <br />
     <br />
@@ -76,7 +79,7 @@ import type { Pages } from '@/types/Tool'
 import type { IReportItem } from '@/types/Report'
 import type { IReportItem } from '@/types/Report'
 import type { SiteList } from '@/types/Site'
 import type { SiteList } from '@/types/Site'
 import type { AsSpaceItem } from '@/types/AsSpace'
 import type { AsSpaceItem } from '@/types/AsSpace'
-import { getMediaReport, getMediaMonthReport, getSiteList, getAsSpaceList } from '@/api/index'
+import { getMediaReport, getSiteList, getAsSpaceList } from '@/api/index'
 import { formatDate } from '@/tool/index'
 import { formatDate } from '@/tool/index'
 import { reactive, ref } from 'vue'
 import { reactive, ref } from 'vue'
 const tableData = ref<IReportItem[]>([])
 const tableData = ref<IReportItem[]>([])
@@ -121,11 +124,17 @@ const onSubmit = (isExport = false) => {
     pageNum: pages.pageNum,
     pageNum: pages.pageNum,
     pageSize: isExport ? 999999 : pages.pageSize,
     pageSize: isExport ? 999999 : pages.pageSize,
   }
   }
-  const Func = pages.type == 'day' ? getMediaReport : getMediaMonthReport
+  const Func = getMediaReport
   Func(p).then(({ data }) => {
   Func(p).then(({ data }) => {
+    const list = (data.records || []).map((v: IReportItem) => {
+      return {
+        ...v,
+        lv: (v.clickCount / v.exposureCount).toFixed(2) - 0,
+      }
+    })
     if (!isExport) {
     if (!isExport) {
       loading.value = false
       loading.value = false
-      tableData.value = data.records
+      tableData.value = list
       pages.total = data.total
       pages.total = data.total
       return
       return
     }
     }
@@ -134,9 +143,9 @@ const onSubmit = (isExport = false) => {
       return
       return
     }
     }
     // 生成数据
     // 生成数据
-    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,用户数\r\n'
-    ;(data.records || []).map((v: IReportItem) => {
-      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.uvCount},\r\n`
+    let strcsv = 'data:text/csv;charset=utf-8,\uFEFF日期,曝光数,点击数,点击率,用户数\r\n'
+    list.map((v: IReportItem) => {
+      strcsv += `${v.sdate},${v.exposureCount},${v.clickCount},${v.lv}%,${v.uvCount},\r\n`
     })
     })
     // 导出
     // 导出
     let link: HTMLAnchorElement | undefined = document.createElement('a')
     let link: HTMLAnchorElement | undefined = document.createElement('a')

Vissa filer visades inte eftersom för många filer har ändrats