Prechádzať zdrojové kódy

test merge work 代码

jiayufei 3 rokov pred
rodič
commit
763c929d26
57 zmenil súbory, kde vykonal 4551 pridanie a 26636 odobranie
  1. 264 0
      package-lock.json
  2. 3 2
      package.json
  3. 0 8643
      public/ckplayer/ckplayer.js
  4. 0 120
      public/ckplayer/ckplayer.min.js
  5. 0 110
      public/ckplayer/ckplayer.xml
  6. 0 28
      public/ckplayer/hls/LICENSE
  7. 0 15403
      public/ckplayer/hls/hls.js
  8. 0 7
      public/ckplayer/hls/hls.min.js
  9. 0 46
      public/ckplayer/language.xml
  10. 0 739
      public/ckplayer/style.xml
  11. 1 1
      public/index.html
  12. 12 3
      src/components/DatePicker.vue
  13. 19 15
      src/components/uploadFile.vue
  14. 1 0
      src/filters.js
  15. 405 0
      src/mixins/videoMaterialMixin.js
  16. 0 2
      src/utils/request.js
  17. 4 1
      src/views/modules/BatchCreate/TouTiaoBatch.vue
  18. 1 1
      src/views/modules/BatchCreate/components/Treeselect.vue
  19. 4 1
      src/views/modules/BatchCreate/directedPackage.vue
  20. 4 1
      src/views/modules/BatchCreate/newGroup.vue
  21. 1 1
      src/views/modules/LaunchHousekeeper/LaunchHousekeeperList.vue
  22. 4 1
      src/views/modules/Statistics/KSAccountReport.vue
  23. 4 2
      src/views/modules/Statistics/accountReport.vue
  24. 24 7
      src/views/modules/Statistics/change-face/change-face.vue
  25. 1 1
      src/views/modules/Statistics/components/Treeselect.vue
  26. 5 0
      src/views/modules/Statistics/components/datePick.vue
  27. 10 2
      src/views/modules/Statistics/newHome.vue
  28. 889 894
      src/views/modules/Statistics/newPlanStatic/newPlanStatic.vue
  29. 1 1
      src/views/modules/Statistics/videoStatics/KSvideoStatics.vue
  30. 65 13
      src/views/modules/account-config/components/configuration-copy.vue
  31. 65 20
      src/views/modules/account-config/components/configuration-modal.vue
  32. 121 0
      src/views/modules/autoLaunch/auto-copy-library/auto-copy-library.less
  33. 486 0
      src/views/modules/autoLaunch/auto-copy-library/auto-copy-library.vue
  34. 29 18
      src/views/modules/autoLaunch/configLaunchInfo.vue
  35. 4 2
      src/views/modules/autoLaunch/createStrategy.vue
  36. 12 14
      src/views/modules/autoLaunch/material-pool/material.vue
  37. 4 0
      src/views/modules/autoLaunch/material-test/creatMaterialTest.vue
  38. 4 2
      src/views/modules/autoLaunch/material-test/treeSelectAccount.vue
  39. 4 2
      src/views/modules/autoLaunch/newAppId.vue
  40. 1 1
      src/views/modules/headline-view/headline-view-server.js
  41. 2 2
      src/views/modules/kuaishouapp/account/stepForm/Step3.vue
  42. 2 2
      src/views/modules/kuaishouapp/account/stepForm/Step4.vue
  43. 16 1
      src/views/modules/kuaishouapp/batchCreation/creat/creatUnit.vue
  44. 2 2
      src/views/modules/kuaishouapp/creativeCreate.vue
  45. 3 5
      src/views/modules/material/accountCheck.vue
  46. 678 12
      src/views/modules/material/videoMaterial.vue
  47. 9 12
      src/views/modules/onlineTraining/onlineTrainingList.vue
  48. 4 4
      src/views/modules/policy-management/policy-management-server.js
  49. 104 1
      src/views/modules/policy-management/policy-management.less
  50. 180 69
      src/views/modules/policy-management/policy-management.vue
  51. 11 0
      src/views/modules/settlement-account/settlement-account-server.js
  52. 409 195
      src/views/modules/settlement-account/settlement-account.vue
  53. 2 2
      src/views/modules/settlement-information/settlement-information-server.js
  54. 1 1
      src/views/modules/settlement-information/settlement-information.less
  55. 597 172
      src/views/modules/settlement-information/settlement-information.vue
  56. 2 2
      src/views/modules/user-manage-operation/user-manage-operation-server.js
  57. 77 50
      vue.config.js

+ 264 - 0
package-lock.json

@@ -1252,6 +1252,21 @@
         "to-fast-properties": "^2.0.0"
       }
     },
+    "@femessage/img-preview": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@femessage/img-preview/-/img-preview-1.5.0.tgz",
+      "integrity": "sha512-omjNTkU5tVGp9EahcMq5QeL/Va9O4bcddKy4p94aYo5Zr7R6cE8UCqLVl18uLbUfwGLuxBeIG225t1CHjCAgOw=="
+    },
+    "@femessage/upload-to-ali": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@femessage/upload-to-ali/-/upload-to-ali-1.9.2.tgz",
+      "integrity": "sha512-ej83NZ8UqcAcJhu+ym6qrIy+YGIg24FhJqDLiPiLVF5NTTcKtqIN2Rj9r6zjVO6QU2bdkirAzJKit/nyxQbO4A==",
+      "requires": {
+        "@femessage/img-preview": "^1.2.0",
+        "ali-oss": "^6.0.1",
+        "image-compressor.js": "^1.1.4"
+      }
+    },
     "@hapi/address": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz",
@@ -1375,6 +1390,33 @@
       "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
       "dev": true
     },
+    "@npmcli/move-file": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+      "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+      "dev": true,
+      "requires": {
+        "mkdirp": "^1.0.4",
+        "rimraf": "^3.0.2"
+      },
+      "dependencies": {
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        },
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        }
+      }
+    },
     "@riophae/vue-treeselect": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/@riophae/vue-treeselect/-/vue-treeselect-0.4.0.tgz",
@@ -3588,6 +3630,24 @@
         "humanize-ms": "^1.2.1"
       }
     },
+    "aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+      "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+      "dev": true,
+      "requires": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
+      },
+      "dependencies": {
+        "indent-string": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+          "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+          "dev": true
+        }
+      }
+    },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -4998,6 +5058,11 @@
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
     },
+    "blueimp-canvas-to-blob": {
+      "version": "3.28.0",
+      "resolved": "https://registry.npmjs.org/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.28.0.tgz",
+      "integrity": "sha512-5q+YHzgGsuHQ01iouGgJaPJXod2AzTxJXmVv90PpGrRxU7G7IqgPqWXz+PBmt3520jKKi6irWbNV87DicEa7wg=="
+    },
     "blueimp-md5": {
       "version": "2.18.0",
       "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz",
@@ -5580,6 +5645,12 @@
         "source-map": "~0.6.0"
       }
     },
+    "clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+      "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+      "dev": true
+    },
     "cli-cursor": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
@@ -6005,6 +6076,114 @@
         }
       }
     },
+    "compression-webpack-plugin": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-5.0.2.tgz",
+      "integrity": "sha512-F2G4cQfsMZ6CiPlG22Q5EDUCqnfyZqTjyJP5cMgNYUbBg/dUzV3hto8yTFFIogDCTWooVbePHQE0qL6FrJUSsA==",
+      "dev": true,
+      "requires": {
+        "cacache": "^15.0.5",
+        "find-cache-dir": "^3.3.1",
+        "schema-utils": "^2.7.0",
+        "serialize-javascript": "^4.0.0",
+        "webpack-sources": "^1.4.3"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "15.2.0",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz",
+          "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==",
+          "dev": true,
+          "requires": {
+            "@npmcli/move-file": "^1.0.1",
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "glob": "^7.1.4",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^6.0.0",
+            "minipass": "^3.1.1",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^1.0.3",
+            "p-map": "^4.0.0",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^3.0.2",
+            "ssri": "^8.0.1",
+            "tar": "^6.0.2",
+            "unique-filename": "^1.1.1"
+          }
+        },
+        "chownr": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+          "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+          "dev": true
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "mkdirp": {
+          "version": "1.0.4",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+          "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+          "dev": true
+        },
+        "p-map": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+          "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+          "dev": true,
+          "requires": {
+            "aggregate-error": "^3.0.0"
+          }
+        },
+        "rimraf": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+          "dev": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "ssri": {
+          "version": "8.0.1",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+          "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
+          "dev": true,
+          "requires": {
+            "minipass": "^3.1.1"
+          }
+        },
+        "tar": {
+          "version": "6.1.10",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.10.tgz",
+          "integrity": "sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA==",
+          "dev": true,
+          "requires": {
+            "chownr": "^2.0.0",
+            "fs-minipass": "^2.0.0",
+            "minipass": "^3.0.0",
+            "minizlib": "^2.1.1",
+            "mkdirp": "^1.0.3",
+            "yallist": "^4.0.0"
+          }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -9681,6 +9860,15 @@
         "universalify": "^0.1.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs-write-stream-atomic": {
       "version": "1.0.10",
       "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@@ -10559,6 +10747,15 @@
       "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
       "dev": true
     },
+    "image-compressor.js": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/image-compressor.js/-/image-compressor.js-1.1.4.tgz",
+      "integrity": "sha512-DF1YFSw+m6FqpXsleD4+q9eu/wFFkm8sHuYhgYy5GWFVencXeuB1/UqC12xz+dCZooPetf5LIb8JOGkgEWmlcg==",
+      "requires": {
+        "blueimp-canvas-to-blob": "^3.14.0",
+        "is-blob": "^1.0.0"
+      }
+    },
     "image-size": {
       "version": "0.5.5",
       "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
@@ -10878,6 +11075,11 @@
         "binary-extensions": "^2.0.0"
       }
     },
+    "is-blob": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-blob/-/is-blob-1.0.0.tgz",
+      "integrity": "sha1-o9fZb+HD/wZex84nwsIea6ksGDI="
+    },
     "is-boolean-object": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz",
@@ -12285,6 +12487,68 @@
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
     },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
+      "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
+    "minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+      "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+      "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+      "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minizlib": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+      "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0",
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
+        }
+      }
+    },
     "mississippi": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",

+ 3 - 2
package.json

@@ -75,6 +75,7 @@
     "@vue/eslint-config-standard": "^4.0.0",
     "babel-eslint": "^10.0.1",
     "babel-plugin-component": "^1.1.1",
+    "compression-webpack-plugin": "^5.0.1",
     "eslint": "^5.16.0",
     "eslint-plugin-vue": "^5.1.0",
     "html-webpack-plugin": "^3.2.0",
@@ -82,9 +83,9 @@
     "less-loader": "^4.1.0",
     "node-sass": "^4.11.0",
     "sass-loader": "^7.0.1",
-    "vue-template-compiler": "^2.6.10",
     "style-resources-loader": "^1.3.2",
-    "vue-cli-plugin-style-resources-loader": "^0.1.3"
+    "vue-cli-plugin-style-resources-loader": "^0.1.3",
+    "vue-template-compiler": "^2.6.10"
   },
   "eslintConfig": {
     "root": true,

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 8643
public/ckplayer/ckplayer.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 120
public/ckplayer/ckplayer.min.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 110
public/ckplayer/ckplayer.xml


+ 0 - 28
public/ckplayer/hls/LICENSE

@@ -1,28 +0,0 @@
-Copyright (c) 2017 Dailymotion (http://www.dailymotion.com)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-src/remux/mp4-generator.js and src/demux/exp-golomb.js implementation in this project
-are derived from the HLS library for video.js (https://github.com/videojs/videojs-contrib-hls)
-
-That work is also covered by the Apache 2 License, following copyright:
-Copyright (c) 2013-2015 Brightcove
-
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 15403
public/ckplayer/hls/hls.js


Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 7
public/ckplayer/hls/hls.min.js


+ 0 - 46
public/ckplayer/language.xml

@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-	<language>
-		<adCountdown>[$second]</adCountdown><!--广告播放结束倒计时-->
-		<skipDelay>[$second]</skipDelay>
-		<buttonOver>
-			<play>点击播放</play>
-			<pause>暂停播放</pause>
-			<mute>静音</mute>
-			<escMute>恢复音量</escMute>
-			<full>全屏</full>
-			<escFull>退出全屏</escFull>
-			<previousPage>上一集</previousPage>
-			<nextPage>下一集</nextPage>
-			<definition>点击选择清晰度</definition>
-			<subtitle>选择字幕</subtitle>
-		</buttonOver>
-		<volumeSliderOver>
-			音量:[$volume]%
-		</volumeSliderOver>
-		<buffer>[$percentage]%</buffer>
-		<timeSliderOver><!--鼠标经过进度条显示的时间格式-->
-			[$timeh]:[$timei]:[$times]
-		</timeSliderOver>
-		<liveAndVod>
-			[$timeh]:[$timei]:[$times]
-		</liveAndVod>
-		<live>
-			直播中 [$liveTimeY]-[$liveTimem]-[$liveTimed] [$liveTimeh]:[$liveTimei]:[$liveTimes]
-		</live>
-		<m3u8Definition>
-			<name>流畅</name>
-			<name>低清</name>
-			<name>标清</name>
-			<name>高清</name>
-			<name>超清</name>
-			<name>蓝光</name>
-			<name>未知</name>
-		</m3u8Definition>
-		<error>
-			<cannotFindUrl>视频地址不存在</cannotFindUrl>
-			<streamNotFound>加载失败</streamNotFound>
-			<formatError>视频格式错误</formatError>
-		</error>
-		<definition>自动</definition>
-		<subtitle>默认</subtitle>
-	</language>

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 0 - 739
public/ckplayer/style.xml


+ 1 - 1
public/index.html

@@ -311,7 +311,7 @@
 <script src="<%= BASE_URL %>xlsx.full.min.js"></script>
 
 <script src="<%= BASE_URL %>export.js"></script>
-<script src="<%= BASE_URL %>ckplayer/ckplayer.js"></script>
+<!-- <script src="<%= BASE_URL %>ckplayer/ckplayer.js"></script> -->
 
 <script type="text/javascript" src="<%= BASE_URL %>cryptojs/rollups/tripledes.js"></script>
 <script type="text/javascript" src="<%= BASE_URL %>cryptojs/components/mode-ecb-min.js"></script>

+ 12 - 3
src/components/DatePicker.vue

@@ -110,7 +110,7 @@ let pickOptions = [
 ]
 
 export default {
-  props: ['openOptions', 'left','parentDate'],
+  props: ['openOptions', 'left','parentDate', 'typemain'],
   data() {
     return {
       moment,
@@ -159,8 +159,14 @@ export default {
     },
     disabledDate(current) {
       // console.log(current)
-
-      return current && current > moment().subtract(1, 'day')
+      // moment().subtract(1, 'quarters')
+      if (this.typemain && this.typemain === 'ksVideo') {
+        return (current && current < moment().subtract(1, 'quarters')) || (current && current > moment().subtract(1, 'day'))
+      }
+      else {
+        return current && current > moment().subtract(1, 'day')
+      }
+      
     },
     openChange(open) {
       // console.log(open)
@@ -174,6 +180,9 @@ export default {
     if(this.parentDate){
       this.dateValue=this.parentDate
     }
+    if (this.typemain && this.typemain === 'ksVideo') {
+      this.pickOptions = this.pickOptions.slice(0, 4);
+    }
     // console.log(this.$refs.pickOptions.style.left)
   }
 }

+ 19 - 15
src/components/uploadFile.vue

@@ -156,17 +156,17 @@ export default {
                 }
               })
             } else {
-              if (n == '') {
+              if (n === '') {
                 this.fileList = []
               } else {
-                this.fileList = [
-                  {
-                    uid: 1,
-                    name: 1,
-                    status: 'done',
-                    url: n,
-                  },
-                ]
+                this.fileList = []
+                var data = {
+                  uid: 1,
+                  name: '回显',
+                  status: 'done',
+                  url: n,
+                }
+                this.fileList.push(data)
               }
             }
           } else {
@@ -303,12 +303,16 @@ export default {
             that.$emit('overUpload', that.fileList)
 
             if (that.multiple) {
-              that.$emit(
-                'update:value',
-                that.fileList.map((item) => {
-                  return item.url
-                })
-              )
+              let urlList =  that.fileList.map((item) => {
+                return item.url
+              })
+             
+                that.$emit(
+                  'update:value',urlList
+                 
+                )
+    
+              
             } else {
               that.$emit(
                 'update:value',

+ 1 - 0
src/filters.js

@@ -160,6 +160,7 @@ const filters = {
             396: '注册优化目标',
             731: '广告观看5次',
             732: '广告观看10次',
+            773: '关键行为'
         }
         return data[sta]
     },

+ 405 - 0
src/mixins/videoMaterialMixin.js

@@ -0,0 +1,405 @@
+/**
+ * 新增修改完成调用 modalFormOk方法 编辑弹框组件ref定义为modalForm
+ * 高级查询按钮调用 superQuery方法  高级查询组件ref定义为superQueryModal
+ * data中url定义 list为查询列表  delete为删除单条记录  deleteBatch为批量删除
+ */
+ import {filterObj} from '@/utils/util';
+ import moment from 'moment'
+ import {deleteAction, getAction, downFile} from '@/api/manage'
+ import Vue from 'vue'
+ import {ACCESS_TOKEN} from "@/store/mutation-types"
+ import { transformTozTreeFormat } from '@/utils/util.js'
+ export const JeecgListMixin = {
+   data() {
+     return {
+       spinning:true,
+       //token header
+       tokenHeader: {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)},
+       /* 查询条件-请不要在queryParam中声明非字符串值的属性 */
+       queryParam: {},
+       /* 数据源 */
+       dataSource: [],
+       innerData:[],
+       /* 分页参数 */
+       ipagination: {
+         current: 1,
+         pageSize: 10,
+         pageSizeOptions: ['8', '16', '32'],
+         showTotal: (total, range) => {
+           return range[0] + "-" + range[1] + " 共" + total + "条"
+         },
+         showQuickJumper: true,
+         // showSizeChanger: true,
+         total: 0
+       },
+       /* 排序参数 */
+       isorter: {
+         column: 'createTime',
+         order: 'desc',
+       },
+       /* 筛选参数 */
+       filters: {},
+       /* table加载状态 */
+       loading: false,
+       /* table选中keys*/
+       selectedRowKeys: [],
+       /* table选中records*/
+       selectionRows: [],
+       /* 查询折叠 */
+       toggleSearchStatus: false,
+       /* 高级查询条件生效状态 */
+       superQueryFlag: false,
+       /* 高级查询条件 */
+       superQueryParams: ""
+     }
+   },
+   mounted() {
+     if(this.startList){
+ 
+     }else{
+        this.loadData();
+     }
+     //初始化字典配置 在自己页面定义
+     this.initDictConfig();
+   },
+   methods: {
+     // 二级树
+     expand(expanded,record){
+         if(this.url.listTwo){
+             var param = {}
+             param.field = this.getQueryField();
+             param.pageNo = this.ipagination.current;
+             param.pageSize = this.ipagination.pageSize;
+             param.parentId = record.id
+             if(expanded){
+                 getAction(this.url.listTwo, filterObj(param)).then((res) => {
+                     if (res.success) {
+                         record.innerData=res.result.records.map((item,index)=>{
+                             return {
+                                 ...item,
+                                 key:index
+                             }
+                         })
+                         // console.log(record.innerData)
+                         record.innerData = transformTozTreeFormat( record.innerData)
+                     }
+                     if (res.code === 510) {
+                       this.$message.warning(res.message)
+                     }
+                     this.loading = false;
+                 })
+             }else{
+                 record.innerData = []
+             }
+         }
+     },
+     async loadData(arg) {
+       this.spinning= true
+       this.dataSource = []
+       if (!this.url.list) {
+         this.$message.error("请设置url.list属性!")
+         return
+       }
+       //加载数据 若传入参数1则加载第一页的内容
+       if (arg === 1) {
+         this.ipagination.current = 1;
+       }
+       var params = this.getQueryParams();//查询条件
+       if(params.createTime&&params.createTime.length>0){
+         // params.createTime = moment(params.createTime).format('YYYY-MM-DD')
+         params.startDate = moment(params.createTime[0]).format('YYYY-MM-DD')
+         params.endDate = moment(params.createTime[1]).format('YYYY-MM-DD')
+         params.createTime = null
+       }
+       if(params.stateDate){
+         params.stateDate = moment(params.stateDate).format('YYYY-MM-DD')
+       }
+       // if(params.endDate){
+       //   params.endDate = moment(params.endDate).format('YYYY-MM-DD')
+       // }
+ 
+       this.loading = true;
+       await getAction(this.url.list, params).then((res) => {
+         if (res.success) {
+           this.loading = false;
+           if(res.result){
+             if(res.result.records){
+               this.dataSource = res.result.records.map(item=>{
+                 return {
+                     ...item,
+                     innerData:[],
+                     showVideo:false
+                 }
+               })
+               this.ipagination.total = res.result.total;
+             }else if(res.result.list){
+               this.dataSource = res.result.list.map(item=>{
+                 return {
+                     ...item,
+                     innerData:[],
+                     showVideo:false
+                 }
+               })
+               this.ipagination.total = res.result.total;
+             }else{
+               this.dataSource = res.result.map(item=>{
+                 return {
+                     ...item,
+                     innerData:[],
+                     showVideo:false
+                 }
+               })
+               // this.ipagination = null;
+               this.ipagination.pageSize=res.result.length
+             }
+           }else if(res.data){
+             if(res.data.list){
+               this.dataSource = res.data.list.map(item=>{
+                 return {
+                     ...item,
+                     innerData:[],
+                     showVideo:false
+                 }
+               })
+               this.ipagination.total = res.data.total;
+             }
+           }
+           
+           this.spinning= false
+         }
+         if (res.code === 510) {
+           this.$message.warning(res.message)
+         }
+         this.loading = false;
+         this.spinning= false
+       })
+     },
+     initDictConfig() {
+     //   console.log("--这是一个假的方法!")
+     },
+     handleSuperQuery(arg) {
+       //高级查询方法
+       if (!arg) {
+         this.superQueryParams = ''
+         this.superQueryFlag = false
+       } else {
+         this.superQueryFlag = true
+         this.superQueryParams = JSON.stringify(arg)
+       }
+       this.loadData()
+     },
+     editDate(value) {
+       let date = new Date(value)
+       let y = date.getFullYear()
+       let MM = date.getMonth() + 1
+       MM = MM < 10 ? '0' + MM : MM
+       let d = date.getDate()
+       d = d < 10 ? '0' + d : d
+       return y + '-' + MM + '-' + d
+     },
+     getQueryParams() {
+       //获取查询条件
+       let sqp = {}
+       if (this.superQueryParams) {
+         sqp['superQueryParams'] = encodeURI(this.superQueryParams)
+       }
+       // console.log(this.queryParam)
+       var param = {...this.queryParam,...this.isorter, ...this.filters}
+       param.pageNo = this.ipagination.current;
+       param.pageSize = this.ipagination.pageSize;
+       return param
+     },
+     getQueryField() {
+       //TODO 字段权限控制
+       var str = "id,";
+       this.columns.forEach(function (value) {
+         str += "," + value.dataIndex;
+       });
+       return str;
+     },
+ 
+     onSelectChange(selectedRowKeys, selectionRows) {
+       this.selectedRowKeys = selectedRowKeys;
+       this.selectionRows = selectionRows;
+     },
+     onClearSelected() {
+       this.selectedRowKeys = [];
+       this.selectionRows = [];
+     },
+     searchQuery() {
+       this.loadData(1);
+     },
+     superQuery() {
+       this.$refs.superQueryModal.show();
+     },
+     searchReset() {
+       this.queryParam = {}
+       this.loadData(1);
+     },
+     batchDel: function () {
+       if (!this.url.deleteBatch) {
+         this.$message.error("请设置url.deleteBatch属性!")
+         return
+       }
+       if (this.selectedRowKeys.length <= 0) {
+         this.$message.warning('请选择一条记录!');
+         return;
+       } else {
+         var ids = "";
+         for (var a = 0; a < this.selectedRowKeys.length; a++) {
+           ids += this.selectedRowKeys[a] + ",";
+         }
+         var that = this;
+         this.$confirm({
+           title: "确认删除",
+           content: "是否删除选中数据?",
+           onOk: function () {
+             deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => {
+               if (res.success) {
+                 that.$message.success(res.message);
+                 that.loadData();
+                 that.onClearSelected();
+               } else {
+                 that.$message.warning(res.message);
+               }
+             });
+           }
+         });
+       }
+     },
+     handleDelete: function (id) {
+       if (!this.url.delete) {
+         this.$message.error("请设置url.delete属性!")
+         return
+       }
+       var that = this;
+       deleteAction(that.url.delete, {id: id}).then((res) => {
+         if (res.success) {
+           that.$message.success(res.message);
+           that.loadData();
+         } else {
+           that.$message.warning(res.message);
+         }
+       });
+     },
+     handleEdit: function (record,sign) {
+         // console.log(record,sign)
+       this.$refs.modalForm.edit(record,sign);
+       this.$refs.modalForm.title = "编辑";
+       this.$refs.modalForm.disableSubmit = false;
+       if(sign == 'preview'){
+         this.$refs.modalForm.title = "预览";
+       }
+     },
+     handleImagePreview: function (record) {
+         this.$refs.modalForm.imagePreview(record);
+         this.$refs.modalForm.title = "预览";
+         this.$refs.modalForm.disableSubmit = false;
+     },
+     handleAdd: function (sign) {
+       this.$refs.modalForm.add(sign);
+       this.$refs.modalForm.title = "新增";
+       this.$refs.modalForm.disableSubmit = false;
+     },
+     handleOpen: function () {
+       this.$refs.userForm.open();
+       this.$refs.userForm.title = "选择";
+       this.$refs.userForm.disableSubmit = false;
+     },
+     handleTableChange(pagination, filters, sorter) {
+       //分页、排序、筛选变化时触发
+       //TODO 筛选
+       if (Object.keys(sorter).length > 0) {
+         this.isorter.column = sorter.field;
+         this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
+       }
+       this.ipagination = pagination;
+       this.loadData();
+     },
+     handleToggleSearch() {
+       this.toggleSearchStatus = !this.toggleSearchStatus;
+     },
+     modalFormOk() {
+       // 新增/修改 成功时,重载列表
+       this.loadData(this.ipagination.current);
+     },
+     handleDetail: function (record) {
+       this.$nextTick(()=>{
+         this.$refs.modalForm.edit(record);
+         this.$refs.modalForm.title = "详情";
+         this.$refs.modalForm.disableSubmit = true;
+       })
+       
+     },
+     /* 导出 */
+     handleExportXls2() {
+       let paramsStr = encodeURI(JSON.stringify(this.getQueryParams()));
+       let url = `${window._CONFIG['domianURL']}/${this.url.exportXlsUrl}?paramsStr=${paramsStr}`;
+       window.location.href = url;
+     },
+     handleExportXls(fileName) {
+       if (!fileName || typeof fileName != "string") {
+         fileName = "导出文件"
+       }
+       let param = {...this.queryParam};
+       if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
+         param['selections'] = this.selectedRowKeys.join(",")
+       }
+       // console.log("导出参数", param)
+       downFile(this.url.exportXlsUrl, param).then((data) => {
+         if (!data) {
+           this.$message.warning("文件下载失败")
+           return
+         }
+         if (typeof window.navigator.msSaveBlob !== 'undefined') {
+           window.navigator.msSaveBlob(new Blob([data]), fileName + '.xls')
+         } else {
+           let url = window.URL.createObjectURL(new Blob([data]))
+           let link = document.createElement('a')
+           link.style.display = 'none'
+           link.href = url
+           link.setAttribute('download', fileName + '.xls')
+           document.body.appendChild(link)
+           link.click()
+           document.body.removeChild(link); //下载完成移除元素
+           window.URL.revokeObjectURL(url); //释放掉blob对象
+         }
+       })
+     },
+     /* 导入 */
+     handleImportExcel(info) {
+       if (info.file.status !== 'uploading') {
+         // console.log(info.file, info.fileList);
+       }
+       if (info.file.status === 'done') {
+         if (info.file.response.success) {
+           this.$message.success(`${info.file.name} 文件上传成功`);
+           this.loadData();
+         } else {
+           this.$message.error(`${info.file.name} ${info.file.response.message}.`);
+         }
+       } else if (info.file.status === 'error') {
+         this.$message.error(`文件上传失败: ${info.file.msg} `);
+       }
+     },
+     /* 图片预览 */
+     getImgView(text) {
+       if (text && text.indexOf(",") > 0) {
+         text = text.substring(0, text.indexOf(","))
+       }
+       return window._CONFIG['imgDomainURL'] + "/" + text
+     },
+     /* 文件下载 */
+     uploadFile(text) {
+       if (!text) {
+         this.$message.warning("未知的文件")
+         return;
+       }
+       if (text.indexOf(",") > 0) {
+         text = text.substring(0, text.indexOf(","))
+       }
+       window.open(window._CONFIG['domianURL'] + "/sys/common/download/" + text);
+     },
+   }
+ 
+ }

+ 0 - 2
src/utils/request.js

@@ -21,8 +21,6 @@ else if (process.env.NODE_ENV === 'production') {
 	// axios.defaults.baseURL = 'http://apipre.tjyourong.com.cn/jeecg-boot'; // 预生产
     axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot';//测试
 	// axios.defaults.baseURL = 'http://api.tjyourong.com.cn/jeecg-boot'; // 生产环境
-	// axios.defaults.baseURL = 'http://gateway.tjyourong.com.cn/jeecg-boot'; // 生产环境
-	
 }
 const service = axios.create({
 	// baseURL: '/jeecg-boot', // api base_url

+ 4 - 1
src/views/modules/BatchCreate/TouTiaoBatch.vue

@@ -310,6 +310,8 @@
 
 <script>
 import moment from 'moment';
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage';
 // import { JeecgListMixin } from '@/mixins/ipagination'
 import editableCell from './editableCell'
@@ -683,6 +685,7 @@ export default {
         },
     },
     methods: {
+        ...mapGetters(['userInfo']),
         // 点击跳转
         goNextPage(item){
             console.log(item);
@@ -1520,7 +1523,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountID=undefined;
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // console.log(res);
                     if(res.result){

+ 1 - 1
src/views/modules/BatchCreate/components/Treeselect.vue

@@ -178,7 +178,7 @@
         // })
         this.options=[];
         this.accountID=undefined;
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1&userId=' + this.userInfo().id, {}).then(res => {
                 if(res.success){
                     // console.log(res);
                     if(res.result){

+ 4 - 1
src/views/modules/BatchCreate/directedPackage.vue

@@ -80,6 +80,8 @@
 
 <script>
 import moment from 'moment';
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage';
 import { JeecgListMixin } from '@/mixins/ipagination'
 import qs from 'qs'
@@ -143,6 +145,7 @@ export default {
         }
     }, 
     methods: {
+        ...mapGetters(['userInfo']),
         openDirectionalPackage(){
             this.$router.push({path:'/BatchCreate/newDirectedPackage'})
         },
@@ -167,7 +170,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountID=undefined;
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // console.log(res);
                 if(res.result){

+ 4 - 1
src/views/modules/BatchCreate/newGroup.vue

@@ -99,6 +99,8 @@
 <script>
 
 import moment from 'moment';
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage';
 import qs from 'qs'
 const formItemLayout = {
@@ -123,6 +125,7 @@ export default {
         }
     },
     methods: {
+        ...mapGetters(['userInfo']),
         tabChange(key){
             console.log(key);
             this.tabKey=key;
@@ -174,7 +177,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountID=undefined;
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // console.log(res);
                     if(res.result){

+ 1 - 1
src/views/modules/LaunchHousekeeper/LaunchHousekeeperList.vue

@@ -410,7 +410,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountIds=[];
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // console.log(res);
                     if(res.result){

+ 4 - 1
src/views/modules/Statistics/KSAccountReport.vue

@@ -275,6 +275,8 @@
 
 <script>
 import moment from 'moment';
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage';
 
 import { TreeSelect } from 'ant-design-vue';
@@ -585,6 +587,7 @@ export default {
     },
   },
   methods: {
+    ...mapGetters(['userInfo']),
     treeSearch(){
       console.log(arguments);
     },
@@ -909,7 +912,7 @@ export default {
    accountHttp(){
      this.treeData=[];
      this.treeValue=[];
-     getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2', {}).then(res => {
+     getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2&userId=' + this.userInfo().id, {}).then(res => {
        if(res.success){
             // console.log(res);
             if(res.result){

+ 4 - 2
src/views/modules/Statistics/accountReport.vue

@@ -259,6 +259,8 @@
 
 <script>
 import moment from 'moment';
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage';
 
 import { TreeSelect } from 'ant-design-vue';
@@ -523,7 +525,7 @@ export default {
     },
   },
   methods: {
-
+    ...mapGetters(['userInfo']),
     //项目改变后的事件
     treeChange(val) {
       // console.log(this.treeData)
@@ -836,7 +838,7 @@ export default {
    accountHttp(){
      this.treeData=[];
      this.treeValue=[];
-     getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1', {}).then(res => {
+     getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=1&userId=' + this.userInfo().id, {}).then(res => {
        if(res.success){
             // console.log(res);
             if(res.result){

+ 24 - 7
src/views/modules/Statistics/change-face/change-face.vue

@@ -46,6 +46,7 @@
                 </a-upload>
                 <p style="margin: 0;">1、请保证脸部无遮挡、光线充足</p>
                 <p style="margin: 0;">2、视频、照片中只能出现一张人脸</p>
+                <p style="margin: 0;">3、图片尺寸不能小于500*500</p>
             </a-form-model-item>
         </a-form-model>
         <div v-else-if="faceType === 'b'" class="face-right-div">
@@ -204,7 +205,6 @@ export default {
                     this.dataAllList = [];
                     this.dataSource = [];
                     this.totalAll = 0;
-                    this.$message.error(result.message);
                 }
             }).catch(error => {
                 console.log(error, 'eeee');
@@ -321,7 +321,7 @@ export default {
                     if (result.code === 0) {
                         this.handlePolicyOperationCancel();
                         this.$emit('sureface');
-                        this.$message.success('图片上传成功');
+                        this.$message.success('图片上传成功');l
                         this.confirmLoading = false;
                     }
                     else {
@@ -332,7 +332,6 @@ export default {
                         this.confirmLoading = false;
                     }
                 }).catch(error => {
-                    console.log(error, 'eeee');
                     this.confirmLoading = false;
                 });
             }
@@ -363,10 +362,28 @@ export default {
                 this.md5Result = '';
                 return;
             }
-            this.handleMd5(info);
-            this.cosUpload(info);
-            this.getBase64(info, imageUrl => {
-                this.imageUrl = imageUrl;
+            new Promise(function (resolve, reject) {
+                let width = 500;
+                let height = 500;
+                let _URL = window.URL || window.webkitURL;
+                let img = new Image();
+                img.onload = function () {
+                    let valid = img.width >= width && img.height >= height;
+                    valid ? resolve() : reject();
+                };
+                img.src = _URL.createObjectURL(info);
+            }).then(() => {
+                this.handleMd5(info);
+                this.cosUpload(info);
+                this.getBase64(info, imageUrl => {
+                    this.imageUrl = imageUrl;
+                });
+            }, () => {
+                this.$message.error('图片尺寸不能小于500*500');
+                this.imageUrl = '';
+                this.urlResult = '';
+                this.md5Result = '';
+                return Promise.reject();
             });
         },
         handleMd5(file) {

+ 1 - 1
src/views/modules/Statistics/components/Treeselect.vue

@@ -105,7 +105,6 @@ export default {
     $route(n, o) {},
     appId: {
       handler(n, o) {
-        console.log(n)
         if (n.length == 0) {
           if (this.multiple) {
             this.value = []
@@ -230,6 +229,7 @@ export default {
       } else if (this.reqUrl == '/ctop/projectMember/getProjectAccountByUserId') {
         getAction(this.reqUrl, {
           mediaType: this.request,
+          userId: this.userInfo().id
         }).then((res) => {
           if (res.code == 0) {
             if (res.result.length > 0) {

+ 5 - 0
src/views/modules/Statistics/components/datePick.vue

@@ -126,6 +126,11 @@ export default {
   },
   directives: { clickoutside },
   watch: {
+    type(newVal) {
+      if (newVal) {
+        this.active = newVal;
+      }
+    },
     parentDate(n,o){
         if(n[0].format('YYYY-MM-DD')!=this.mydateValue[0].format('YYYY-MM-DD')){
               this.mydateValue=n

+ 10 - 2
src/views/modules/Statistics/newHome.vue

@@ -680,9 +680,17 @@ export default {
               total.cp=(total.cost/total.click).toFixed(2)
               total.cpm=(total.cost/total.showNum*1000).toFixed(2)
               if(afterData.length>0){
-                this.tableData=[total,...afterData]
+                const defaultAfterData = afterData;
+                defaultAfterData.forEach(item => {
+                  item.clickRate = Number(item.clickRate) + '%';
+                });
+                this.tableData = [total,...defaultAfterData]
               }else{
-                this.tableData=[total,...res.result.list]
+                const defaultData = res.result.list;
+                defaultData.forEach(item => {
+                  item.clickRate = Number(item.clickRate) + '%';
+                });
+                this.tableData = [total,...defaultData]
               }
               
             }

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 889 - 894
src/views/modules/Statistics/newPlanStatic/newPlanStatic.vue


+ 1 - 1
src/views/modules/Statistics/videoStatics/KSvideoStatics.vue

@@ -9,7 +9,7 @@
         <div style="dispaly:inline-block;margin-bottom:15px;"> 
           <span>时间范围:</span>
           <span style="display: inline-block;"  @click="opendate">
-            <DatePicker :openOptions='openOptions'  :parentDate='dateValue' left='-100px'></DatePicker>
+            <DatePicker :openOptions='openOptions' :parentDate='dateValue' left='-100px' typemain="ksVideo"></DatePicker>
           </span>
         </div>
         <div style="dispaly:inline-block;margin-bottom:15px;">

+ 65 - 13
src/views/modules/account-config/components/configuration-copy.vue

@@ -158,6 +158,23 @@
                             <a-radio-button value="CPM" disabled>展示量</a-radio-button>
                         </a-radio-group>
                     </a-form-model-item>
+                    <a-form-model-item label="下载链接" prop="adDownloadUrl">
+                        <a-input
+                            class="common-input-long"
+                            v-model="configForm.adDownloadUrl"
+                            placeholder="请输入下载链接"
+                            allow-clear
+                            @change="handleDownloadLink"
+                        />
+                    </a-form-model-item>
+                    <a-form-model-item label="应用包名" prop="adPackage">
+                        <a-input
+                            class="common-input-long"
+                            v-model="configForm.adPackage"
+                            placeholder="请输入应用包名"
+                            allow-clear
+                        />
+                    </a-form-model-item>
                     <a-form-model-item label="下载方式">
                         <a-radio-group
                             v-model="configForm.adDownloadType"
@@ -168,15 +185,26 @@
                             <a-radio-button value="EXTERNAL_URL">落地页</a-radio-button>
                         </a-radio-group>
                     </a-form-model-item>
-                    <a-form-model-item v-if="configForm.adDownloadType === 'EXTERNAL_URL'" label="落地页链接" prop="adExternalUrl">
+                    <div v-if="configForm.adDownloadType === 'EXTERNAL_URL'">
+                        <a-form-model-item label="落地页链接" prop="adExternalUrl" key="arr">
+                            <a-input
+                                class="common-input-long"
+                                :disabled="modalTitle === 'edit'"
+                                v-model="configForm.adExternalUrl"
+                                placeholder="请输入落地页链接"
+                                allow-clear
+                            />
+                        </a-form-model-item>
+                    </div>
+                    <!-- <a-form-model-item v-if="configForm.adDownloadType === 'EXTERNAL_URL'" label="落地页链接" prop="adExternalUrl">
                         <a-input
                             class="common-input-long"
                             v-model="configForm.adExternalUrl"
                             placeholder="请输入落地页链接"
                             allow-clear
                         />
-                    </a-form-model-item>
-                    <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="下载链接" prop="adDownloadUrl">
+                    </a-form-model-item> -->
+                    <!-- <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="下载链接" prop="adDownloadUrl">
                         <a-input
                             class="common-input-long"
                             v-model="configForm.adDownloadUrl"
@@ -192,7 +220,7 @@
                             placeholder="请输入应用包名"
                             allow-clear
                         />
-                    </a-form-model-item>
+                    </a-form-model-item> -->
                     <a-form-model-item label="直达链接内容">
                         <a-input
                             class="common-input-long"
@@ -201,7 +229,7 @@
                             allow-clear
                         />
                     </a-form-model-item>
-                    <a-form-model-item v-if="platformLoadingType === 'APP_ANDROID'" label="应用下载详情页" prop="creativeWebUrl">
+                    <a-form-model-item v-if="platformLoadingType === 'APP_ANDROID' && configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用下载详情页" prop="creativeWebUrl">
                         <a-input
                             class="common-input-long"
                             v-model="configForm.creativeWebUrl"
@@ -211,7 +239,7 @@
                         />
                         <span style="margin-left: 10px;"><a @click="handleHaveWebUrl">使用已有</a></span>
                     </a-form-model-item>
-                    <div v-if="platformLoadingType === 'APP_ANDROID'" class="adver-position-radio">
+                    <div v-if="platformLoadingType === 'APP_ANDROID' && configForm.adDownloadType === 'DOWNLOAD_URL'" class="adver-position-radio">
                         <div class="create-web-url-class">
                             <div class="web-url-img">
                                 <img v-if="landingPageShowData.thumbnail" :src="landingPageShowData.thumbnail"/>
@@ -825,6 +853,14 @@
                                 allow-clear
                             />
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName26">
+                            <a-input
+                                class="common-input-long"
+                                placeholder="请输入应用名"
+                                v-model="configForm.creativeAppName"
+                                allow-clear
+                            />
+                        </a-form-model-item>
                         <a-form-model-item label="搭配试玩">
                             <a-radio-group v-model="configForm.collocationPlay" button-style="solid" disabled>
                                 <a-radio-button value="a">不启用</a-radio-button>
@@ -888,6 +924,14 @@
                                 allow-clear
                             />
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName27">
+                            <a-input
+                                class="common-input-long"
+                                placeholder="请输入应用名"
+                                v-model="configForm.creativeAppName"
+                                allow-clear
+                            />
+                        </a-form-model-item>
                         <a-form-model-item label="创意展现">
                             <a-radio-group v-model="configForm.creativeDisplayMode" button-style="solid">
                                 <a-radio-button value="CREATIVE_DISPLAY_MODE_CTR">优选模式</a-radio-button>
@@ -929,6 +973,14 @@
                                 allow-clear
                             />
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName28">
+                            <a-input
+                                class="common-input-long"
+                                placeholder="请输入应用名"
+                                v-model="configForm.creativeAppName"
+                                allow-clear
+                            />
+                        </a-form-model-item>
                         <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="自动生成视频素材">
                             <a-radio-group v-model="configForm.creativeIsPresentedVideo" button-style="solid">
                                 <a-radio-button :value="0">不启用</a-radio-button>
@@ -1062,7 +1114,7 @@
                                 allow-clear
                             />
                         </a-form-model-item>
-                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName">
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName29">
                             <a-input
                                 class="common-input-long"
                                 placeholder="请输入应用名"
@@ -2462,20 +2514,20 @@ export default {
             this.optimizationOption = [];
             this.landingPageShowData = {};
             this.configForm.creativeWebUrl = '';
-            this.platformLoadingType = '';
+            // this.platformLoadingType = '';
             const defaultValue = e.target.value;
             if (defaultValue === 'DOWNLOAD_URL') {
                 this.configForm.adExternalUrl = '';
                 this.configForm.adOpenUrl = '';
-                this.$refs.ruleForm.clearValidate(['adExternalUrl']);
+                // this.$refs.ruleForm.clearValidate(['adExternalUrl']);
             }
             else if (defaultValue === 'EXTERNAL_URL') {
-                this.configForm.adDownloadUrl = '';
-                this.configForm.adPackage = '';
+                // this.configForm.adDownloadUrl = '';
+                // this.configForm.adPackage = '';
                 this.configForm.adConvertId = '';
                 this.configForm.adAppType = '';
-                this.$refs.ruleForm.clearValidate(['adDownloadUrl']);
-                this.$refs.ruleForm.clearValidate(['adPackage']);
+                // this.$refs.ruleForm.clearValidate(['adDownloadUrl']);
+                // this.$refs.ruleForm.clearValidate(['adPackage']);
             }
         },
         handleCampaignCnt(e) {

+ 65 - 20
src/views/modules/account-config/components/configuration-modal.vue

@@ -157,6 +157,25 @@
                             <a-radio-button value="CPM" disabled>展示量</a-radio-button>
                         </a-radio-group>
                     </a-form-model-item>
+                    <a-form-model-item label="下载链接" prop="adDownloadUrl">
+                        <a-input
+                            class="common-input-long"
+                            :disabled="modalTitle === 'edit'"
+                            v-model="configForm.adDownloadUrl"
+                            placeholder="请输入下载链接"
+                            allow-clear
+                            @change="handleDownloadLink"
+                        />
+                    </a-form-model-item>
+                    <a-form-model-item label="应用包名" prop="adPackage">
+                        <a-input
+                            class="common-input-long"
+                            :disabled="modalTitle === 'edit'"
+                            v-model="configForm.adPackage"
+                            placeholder="请输入应用包名"
+                            allow-clear
+                        />
+                    </a-form-model-item>
                     <a-form-model-item label="下载方式">
                         <a-radio-group
                             :disabled="modalTitle === 'edit'"
@@ -168,16 +187,18 @@
                             <a-radio-button value="EXTERNAL_URL">落地页</a-radio-button>
                         </a-radio-group>
                     </a-form-model-item>
-                    <a-form-model-item v-if="configForm.adDownloadType === 'EXTERNAL_URL'" label="落地页链接" prop="adExternalUrl">
-                        <a-input
-                            class="common-input-long"
-                            :disabled="modalTitle === 'edit'"
-                            v-model="configForm.adExternalUrl"
-                            placeholder="请输入落地页链接"
-                            allow-clear
-                        />
-                    </a-form-model-item>
-                    <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="下载链接" prop="adDownloadUrl">
+                    <div v-if="configForm.adDownloadType === 'EXTERNAL_URL'">
+                        <a-form-model-item label="落地页链接" prop="adExternalUrl" key="arr">
+                            <a-input
+                                class="common-input-long"
+                                :disabled="modalTitle === 'edit'"
+                                v-model="configForm.adExternalUrl"
+                                placeholder="请输入落地页链接"
+                                allow-clear
+                            />
+                        </a-form-model-item>
+                    </div>
+                    <!-- <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="下载链接" prop="adDownloadUrl">
                         <a-input
                             class="common-input-long"
                             :disabled="modalTitle === 'edit'"
@@ -195,7 +216,7 @@
                             placeholder="请输入应用包名"
                             allow-clear
                         />
-                    </a-form-model-item>
+                    </a-form-model-item> -->
                     <a-form-model-item label="直达链接内容">
                         <a-input
                             class="common-input-long"
@@ -204,7 +225,7 @@
                             allow-clear
                         />
                     </a-form-model-item>
-                    <a-form-model-item v-if="platformLoadingType === 'APP_ANDROID'" label="应用下载详情页" prop="creativeWebUrl">
+                    <a-form-model-item v-if="platformLoadingType === 'APP_ANDROID' && configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用下载详情页" prop="creativeWebUrl">
                         <a-input
                             class="common-input-long"
                             v-model="configForm.creativeWebUrl"
@@ -215,7 +236,7 @@
                         />
                         <span style="margin-left: 10px;"><a :disabled="modalTitle === 'edit'" @click="handleHaveWebUrl">使用已有</a></span>
                     </a-form-model-item>
-                    <div v-if="platformLoadingType === 'APP_ANDROID'" class="adver-position-radio">
+                    <div v-if="platformLoadingType === 'APP_ANDROID' && configForm.adDownloadType === 'DOWNLOAD_URL'" class="adver-position-radio">
                         <div class="create-web-url-class">
                             <div class="web-url-img">
                                 <img v-if="landingPageShowData.thumbnail" :src="landingPageShowData.thumbnail"/>
@@ -835,6 +856,14 @@
                                 allow-clear
                             />
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName24">
+                            <a-input
+                                class="common-input-long"
+                                placeholder="请输入应用名"
+                                v-model="configForm.creativeAppName"
+                                allow-clear
+                            />
+                        </a-form-model-item>
                         <a-form-model-item label="搭配试玩">
                             <a-radio-group v-model="configForm.collocationPlay" button-style="solid" disabled>
                                 <a-radio-button value="a">不启用</a-radio-button>
@@ -898,6 +927,14 @@
                                 allow-clear
                             />
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName23">
+                            <a-input
+                                class="common-input-long"
+                                placeholder="请输入应用名"
+                                v-model="configForm.creativeAppName"
+                                allow-clear
+                            />
+                        </a-form-model-item>
                         <a-form-model-item label="创意展现">
                             <a-radio-group v-model="configForm.creativeDisplayMode" button-style="solid">
                                 <a-radio-button value="CREATIVE_DISPLAY_MODE_CTR">优选模式</a-radio-button>
@@ -939,6 +976,14 @@
                                 allow-clear
                             />
                         </a-form-model-item>
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName25">
+                            <a-input
+                                class="common-input-long"
+                                placeholder="请输入应用名"
+                                v-model="configForm.creativeAppName"
+                                allow-clear
+                            />
+                        </a-form-model-item>
                         <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="自动生成视频素材">
                             <a-radio-group v-model="configForm.creativeIsPresentedVideo" button-style="solid">
                                 <a-radio-button :value="0">不启用</a-radio-button>
@@ -1072,7 +1117,7 @@
                                 allow-clear
                             />
                         </a-form-model-item>
-                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName">
+                        <a-form-model-item v-if="configForm.adDownloadType === 'DOWNLOAD_URL'" label="应用名" prop="creativeAppName" key="creativeAppName26">
                             <a-input
                                 class="common-input-long"
                                 placeholder="请输入应用名"
@@ -2459,20 +2504,20 @@ export default {
             this.optimizationOption = [];
             this.landingPageShowData = {};
             this.configForm.creativeWebUrl = '';
-            this.platformLoadingType = '';
+            // this.platformLoadingType = '';
             const defaultValue = e.target.value;
             if (defaultValue === 'DOWNLOAD_URL') {
                 this.configForm.adExternalUrl = '';
                 this.configForm.adOpenUrl = '';
-                this.$refs.ruleForm.clearValidate(['adExternalUrl']);
+                // this.$refs.ruleForm.clearValidate(['adExternalUrl']);
             }
             else if (defaultValue === 'EXTERNAL_URL') {
-                this.configForm.adDownloadUrl = '';
-                this.configForm.adPackage = '';
+                // this.configForm.adDownloadUrl = '';
+                // this.configForm.adPackage = '';
                 this.configForm.adConvertId = '';
                 this.configForm.adAppType = '';
-                this.$refs.ruleForm.clearValidate(['adDownloadUrl']);
-                this.$refs.ruleForm.clearValidate(['adPackage']);
+                // this.$refs.ruleForm.clearValidate(['adDownloadUrl']);
+                // this.$refs.ruleForm.clearValidate(['adPackage']);
             }
         },
         handleCampaignCnt(e) {

+ 121 - 0
src/views/modules/autoLaunch/auto-copy-library/auto-copy-library.less

@@ -0,0 +1,121 @@
+.auto-copylibrary-content {
+    background: #fff;
+    height: calc(100vh - 320px);
+    padding: 20px;
+    overflow-y: auto;
+    .control-con-header {
+        margin-bottom: 20px;
+        position: relative;
+        .grid-form-options {
+            margin-top: 15px;
+        }
+        .common-input-long,
+        .acount-search-class {
+            width: 625px;
+        }
+        .common-input-long {
+            margin-left: 10px;
+        }
+        .reset-class {
+            margin-right: 10px !important;
+        }
+        .upload-person {
+            position: absolute;
+            right: 10px;
+            top: 0;
+        }
+    }
+    .pagin-table-class {
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+    }
+}
+/deep/ .auto-copy-library-modal {
+    width: 700px !important;
+    .ant-modal-body {
+        height: 380px !important;
+        overflow-y: auto;
+    }
+    .ad-name-tags-class {
+        width: 500px;
+        display: flex;
+        .name-tags-left {
+            width: 350px;
+        }
+    }
+    .acount-title {
+        display: flex;
+        font-size: 14px;
+        margin-top: 20px;
+        line-height: 32px;
+        .acount-title-left {
+            margin-right: 20px;
+            width: 70px;
+        }
+        .only-title-mater {
+            width: 400px;
+            .upload-prompt-information {
+                height: 20px;
+                line-height: 20px;
+            }
+            .special-number-line {
+                margin-top: 20px;
+            }
+            .select-project {
+                width: 100%;
+            }
+            .mater-list-name {
+                display: flex;
+                height: 30px;
+                margin: 0;
+                .mater-list-show {
+                    display: inline-block;
+                    width: 400px;
+                    white-space: nowrap;
+                    overflow: hidden;
+                    text-overflow: ellipsis;
+                }
+                .mater-list-icon {
+                    margin-left: 10px;
+                    color: #1890ff;
+                    cursor: pointer;
+                }
+            }
+        }
+        .examin-form-model {
+            width: 500px;
+            position: relative;
+            .examin-form-num {
+                position: absolute;
+                top: -10px;
+                right: -50px;
+            }
+            .examin-form-icon {
+                position: absolute;
+                top: 0px;
+                right: -85px;
+                font-size: 18px;
+                color: #1890ff;
+                cursor: pointer;
+            }
+        }
+        .examin-form-input {
+            width: 380px;
+        }
+    }
+    .push-plate {
+        margin-bottom: 20px;
+        .examin-select-title {
+            margin: 0 20px 0 20px;
+        }
+    }
+}
+/deep/ .reject-ideas-modal {
+    width: 900px !important;
+    .pagin-table-class {
+        display: flex;
+        justify-content: flex-end;
+        margin-top: 20px;
+    }
+}

+ 486 - 0
src/views/modules/autoLaunch/auto-copy-library/auto-copy-library.vue

@@ -0,0 +1,486 @@
+<template>
+    <div class="auto-copylibrary-content">
+        <div class="control-con-header">
+            <a-form
+                class="grid-form"
+                layout="inline"
+                hide-required-mark
+            >
+                <a-row>
+                    <a-form-item
+                        class="grid-form-item"
+                        label="账户:"
+                        :colon="false"
+                    >
+                        <acount-search
+                            class="acount-search-class"
+                            :appId.sync="configForm.acountId"
+                            :multiple="false"
+                            request="2,4"
+                        >
+                        </acount-search>
+                    </a-form-item>
+                    <a-form-item label="状态">
+                        <a-select v-model="configForm.searchStatus" style="width: 100px">
+                            <a-select-option :value="2">不限</a-select-option>
+                            <a-select-option :value="0">可投放</a-select-option>
+                            <a-select-option :value="1">已下架</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-row>
+                <a-row class="grid-form-options">
+                    <a-form-item
+                        class="grid-form-item"
+                        label="关键词:"
+                        :colon="false"
+                    >
+                        <a-input v-model="configForm.num" placeholder="请输入关键词"/>
+                    </a-form-item>
+                    <a-form-item
+                        class="grid-form-item"
+                        label="选择时间:"
+                        :colon="false"
+                    >
+                        <a-range-picker
+                            v-model="configForm.launchDateRange"
+                            format="YYYY-MM-DD"
+                            @change="handleLaunchData"
+                        />
+                    </a-form-item>
+                    <a-form-item class="form-handle-btn">
+                        <a-button type="default" class="reset-class" @click="handleResetList">重置</a-button>
+                        <a-button type="primary" class="reset-class" @click="handleQueryList">查询</a-button>
+                        <a-button type="primary" @click="handleAddAccountConfig">新增文案</a-button>
+                    </a-form-item>
+                </a-row>
+            </a-form>
+        </div>
+        <div class="control-con-table">
+            <a-table
+                ref="table"
+                size="middle"
+                bordered
+                :columns="currencyColumns"
+                :dataSource="currencyData"
+                :pagination="false"
+                :loading="controlLoading"
+            >
+                <span slot="action" slot-scope="text, record">
+                    <a @click="handleEditCopyLibrary(record)" :disabled="record.status !== 0">编辑</a>
+                    <a-divider type="vertical"/>
+                    <a @click="handleOffSheif(record)" :disabled="record.status !== 0">下架</a>
+                </span>
+                <span slot="reason" slot-scope="text, record">
+                    <a @click="handleRejectionReason(record)">被拒创意详情</a>
+                </span>
+            </a-table>
+            <a-pagination
+                class="pagin-table-class"
+                v-model="currencyPag.page"
+                :page-size="currencyPag.size"
+                :total="currencyTotalAll"
+                :show-total="total => `共 ${currencyTotalAll} 条`"
+                size="small"
+                show-size-changer
+                show-quick-jumper
+                @change="handleCurrentPage"
+                @showSizeChange="handleCurrentPage"
+            />
+        </div>
+        <a-modal
+            v-if="causeVisible"
+            :title="copywritingType === 'add' ? '新建文案' : '编辑文案'"
+            :visible="causeVisible"
+            :confirmLoading="confirmLoading"
+            dialog-class="auto-copy-library-modal"
+            @ok="handleCauseSure"
+            @cancel="handleCauseCancel"
+        >
+            <div>
+                <div class="acount-title">
+                    <div class="acount-title-left">广告账户</div>
+                    <div class="acount-title-right">
+                        <div class="only-title-mater">
+                            <acount-search :appId.sync="advertisingAccount" request="2,4"></acount-search>
+                        </div>
+                    </div>
+                </div>
+                <div v-if="copywritingType === 'add'" class="acount-title">
+                    <div class="acount-title-left">批量上传</div>
+                    <div class="acount-title-right">
+                        <div class="only-title-mater">
+                            <a-upload
+                                name="file"
+                                :file-list="fileList"
+                                :customRequest="handleCustomRequest"
+                                :remove="handleRemoveUpload"
+                            >
+                                <a-button><a-icon type="upload"/>文件上传</a-button>
+                            </a-upload>
+                            <p class="upload-prompt-information special-number-line">1、 文件格式为xls或xlsx,每行一条文案,每条文案不多于30字</p>
+                            <p class="upload-prompt-information">2、 请将文案写在Excel表的第一列,否则将无法上传</p>
+                        </div>
+                    </div>
+                </div>
+                <div v-if="copywritingType === 'edit'" class="acount-title">
+                    <div class="acount-title-left">文案</div>
+                    <div class="acount-title-right">
+                        <div class="only-title-mater">
+                            <a-input v-model="editTextShow.copy_writer" disabled/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </a-modal>
+        <a-modal
+            v-if="rejectIdeasVisible"
+            title="被拒创意详情"
+            dialog-class="reject-ideas-modal"
+            :visible="rejectIdeasVisible"
+            :footer="null"
+            @cancel="handleRejectIdeasCancel"
+        >
+            <div>
+                <a-table
+                    ref="table"
+                    size="middle"
+                    bordered
+                    :columns="rejectIdeasColumns"
+                    :dataSource="rejectIdeasData"
+                    :pagination="false"
+                >
+                </a-table>
+                <a-pagination
+                    class="pagin-table-class"
+                    v-model="rejectIdeasPag.page"
+                    size="small"
+                    :page-size="rejectIdeasPag.size"
+                    :total="rejectIdeasTotalAll"
+                    :show-total="total => `共 ${rejectIdeasTotalAll} 条`"
+                    @change="handleRejectIdeasPage"
+                    @showSizeChange="handleRejectIdeasPage"
+                />
+            </div>
+        </a-modal>
+    </div>
+</template>
+<script>
+
+import AcountSearch from '@/views/modules/Statistics/components/Treeselect.vue';
+import {getAction, postAction} from '@/api/manage';
+import {mapGetters} from 'vuex';
+
+export default {
+    name: 'autoCopyLibrary',
+    components: {
+        AcountSearch
+    },
+    data() {
+        return {
+            editShowAccountList: [],
+            confirmLoading: false,
+            controlLoading: false,
+            refusedReasonList: {},
+            rejectIdeasVisible: false,
+            rejectIdeasPag: {
+                page: 1,
+                size: 10
+            },
+            rejectIdeasTotalAll: 0,
+            rejectIdeasColumns: [
+                {
+                    title: '账户名称',
+                    align: 'center',
+                    dataIndex: 'accountName'
+                },
+                {
+                    title: '广告组ID',
+                    align: 'center',
+                    dataIndex: 'unitId'
+                },
+                {
+                    title: '创意名称',
+                    align: 'center',
+                    dataIndex: 'creativeName'
+                },
+                {
+                    title: '被拒原因',
+                    align: 'center',
+                    dataIndex: 'reviewDetail'
+                }
+            ],
+            rejectIdeasData: [],
+            editTextShow: {},
+            fileList: [],
+            advertisingAccount: [],
+            currencyData: [],
+            currencyTotalAll: 0,
+            currencyPag: {
+                page: 1,
+                size: 20
+            },
+            currencyColumns: [
+                {
+                    title: '文案',
+                    align: 'center',
+                    dataIndex: 'copy_writer'
+                },
+                {
+                    title: '相关创意数',
+                    align: 'center',
+                    dataIndex: 'relatedSize'
+                },
+                {
+                    title: '被拒创意数',
+                    align: 'center',
+                    dataIndex: 'refusedSize'
+                },
+                {
+                    title: '状态',
+                    align: 'center',
+                    dataIndex: 'status',
+                    customRender(d) {
+                        return d === 0 ? '可投放' : '已下架'
+                    }
+                },
+                {
+                    title: '操作',
+                    dataIndex: 'action',
+                    align: 'center',
+                    scopedSlots: {customRender: 'action'}
+                },
+                {
+                    title: '更多',
+                    dataIndex: 'reason',
+                    align: 'center',
+                    scopedSlots: {customRender: 'reason'}
+                }
+            ],
+            causeVisible: false,
+            copywritingType: 'add',
+            configForm: {
+                acountId: '',
+                num: '',
+                adConvertId: undefined,
+                launchDateRange: [],
+                searchStatus: 2
+            }
+        };
+    },
+    mounted() {
+        this.handleInitTable();
+    },
+    methods: {
+        ...mapGetters(['userInfo']),
+        handleInitTable() {
+            this.controlLoading = true;
+            const paramsData = {
+                accountIds: this.configForm.acountId,
+                status: this.configForm.searchStatus,
+                keywords: this.configForm.num,
+                startDate: this.configForm.launchDateRange[0] || '',
+                endDate: this.configForm.launchDateRange[1] || '',
+                pageNumber: this.currencyPag.page,
+                pageSize: this.currencyPag.size
+            };
+            getAction('/document/library/getDocumentList', paramsData).then(result => {
+                if (result.code === 0) {
+                    this.currencyData = result.result.list;
+                    this.currencyTotalAll = result.result.total;
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            }).finally(() => {
+                this.controlLoading = false;
+            });
+        },
+        handleRejectIdeasCancel() {
+            this.refusedReasonList = {};
+            this.rejectIdeasVisible = false;
+        },
+        handleRejectIdeasPage(current, pageSize) {
+            this.currencyPag = {
+                page: current,
+                size: pageSize
+            };
+            this.handleGetRefusedList(this.refusedReasonList);
+        },
+        handleCustomRequest(info) {
+            const isZip = info.file.name.indexOf('xlsx') !== -1 || info.file.name.indexOf('xls') !== -1;
+            if (!isZip) {
+                this.$message.error('文件上传格式只能是xls、xlsx !');
+                return;
+            }
+            this.fileList = [];
+            this.$nextTick(() => {
+                this.fileList.push(info.file);
+            });
+        },
+        handleRemoveUpload(data) {
+            let index = this.fileList.indexOf(data);
+            let newUploadFile = this.fileList;
+            newUploadFile.splice(index, 1);
+            this.fileList = newUploadFile;
+        },
+        handleCauseSure() {
+            if (!this.advertisingAccount.length) {
+                this.$message.error('请选择账户');
+                return;
+            }
+            // this.editShowAccountList
+            let paramsData = new FormData();
+            paramsData.append('accountIds', [...this.advertisingAccount, ...this.editShowAccountList]);
+            if (this.copywritingType === 'add') {
+                if (!this.fileList.length) {
+                    this.$message.error('请上传文件');
+                    return;
+                }
+                this.confirmLoading = true;
+                paramsData.append('file', this.fileList[0]);
+                this.handleSubmitOperation(paramsData, '/document/library/createdocument');
+            }
+            else if (this.copywritingType === 'edit') {
+                this.confirmLoading = true;
+                paramsData.append('copyWriterId', this.editTextShow.copyWriterId);
+                paramsData.append('copyWriter', this.editTextShow.copy_writer);
+                this.handleSubmitOperation(paramsData, '/document/library/updateDocument');
+            }
+        },
+        handleSubmitOperation(data, url) {
+            postAction(url, data).then(result => {
+                if (result.code === 200) {
+                    this.$message.success(result.message);
+                    this.causeVisible = false;
+                    this.currencyPag = {
+                        page: 1,
+                        size: 10
+                    };
+                    this.handleInitTable();
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            }).finally(() => {
+                this.confirmLoading = false;
+                this.editShowAccountList = [];
+            });
+        },
+        handleCauseCancel() {
+            this.advertisingAccount = [];
+            this.fileList = [];
+            this.editShowAccountList = [];
+            this.causeVisible = false;
+        },
+        handleEditCopyLibrary(list) {
+            const defaultData = list;
+            this.editTextShow = defaultData;
+            this.handleGetAcoountId(list);
+            this.copywritingType = 'edit';
+            this.$nextTick(() => {
+                this.causeVisible = true;
+            });
+        },
+        handleGetAcoountId(list) {
+            getAction('/document/library/getAcoountId', {copyWriterId: list.copyWriterId}).then(result => {
+                if (result.code === 0) {
+                    const defaultData = result.result.map(item => Number(item));
+                    this.editShowAccountList = defaultData;
+                    this.advertisingAccount = defaultData;
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
+        },
+        handleOffSheif(list) {
+            let that = this;
+            this.$confirm({
+                title: '提示',
+                content: '是否确认下架该条文案',
+                onOk() {
+                    const params = {
+                        copyWriterId: list.copyWriterId,
+                        status: 1
+                    };
+                    getAction('/document/library/updateStatus', params).then(result => {
+                        if (result.code === 200) {
+                            that.$message.success(result.message);
+                            that.handleInitTable();
+                        }
+                        else {
+                            that.$message.error(result.message);
+                        }
+                    }).catch(error => {
+                        console.log(error, 'eeee');
+                    });
+                }
+            });
+        },
+        handleCurrentPage(current, pageSize) {
+            this.currencyPag = {
+                page: current = pageSize !== this.currencyPag.size ? 1 : current,
+                size: pageSize
+            };
+            this.handleInitTable();
+        },
+        // 被拒理由的操作
+        handleRejectionReason(list) {
+            this.refusedReasonList = list;
+            this.handleGetRefusedList(list);
+            this.rejectIdeasVisible = true;
+        },
+        handleGetRefusedList(list) {
+            const paramsData = {
+                copyWriterId: list.copyWriterId,
+                pageNumber: this.rejectIdeasPag.page,
+                pageSize: this.rejectIdeasPag.size
+            };
+            getAction('/document/library/getRefusedList', paramsData).then(result => {
+                if (result.code === 0) {
+                    this.rejectIdeasData = result.result.list;
+                    this.rejectIdeasTotalAll = result.result.total;
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
+        },
+        handleAddAccountConfig() {
+            this.causeVisible = true;
+            this.copywritingType = 'add';
+        },
+        handleResetList() {
+            this.configForm = {
+                acountId: '',
+                num: '',
+                adConvertId: undefined,
+                launchDateRange: [],
+                searchStatus: 2
+            };
+            this.currencyPag = {
+                page: 1,
+                size: 20
+            };
+            this.handleInitTable();
+        },
+        handleQueryList() {
+            this.handleInitTable();
+        },
+        handleLaunchData(date, dateString) {
+            this.configForm.launchDateRange = dateString;
+        },
+    }
+}
+</script>
+<style lang="less" scoped>
+    @import "auto-copy-library";
+</style>

+ 29 - 18
src/views/modules/autoLaunch/configLaunchInfo.vue

@@ -1414,11 +1414,11 @@
                         </a-form-item>                       
                         </div>
                     </div>
-                    <!-- <div class="row-item" >
+                    <div class="row-item" v-if="getData('singleAppid') == 1">
                         <div class="hint-item"></div>
                         <div class="label-item">
                         <div class="text-item">下载详情</div>
-                        <div class="required-item"></div>
+                        <!-- <div class="required-item"></div> -->
                         </div>
                         <div class="input-item" >
                             
@@ -1439,7 +1439,7 @@
                                 </a-select>                               
                                 </a-form-item>
                         </div>
-                    </div> -->
+                    </div>
                      <div class="row-item" >
                         <div class="hint-item"></div>
                         <div class="label-item">
@@ -1492,25 +1492,26 @@
                         </a-form-item>
                         </div>
                     </div>
-                    <!-- <div class="row-item"  v-if="whiteList.actionbar_click_url_switch&&getFormData('generalTrack')==1">
+                    <!-- <div class="row-item">
                         <div class="hint-item"></div>
                         <div class="label-item">
-                        <div class="text-item">第三方ActionBar点击监控链接</div>
+                        <div class="text-item">下载详情</div>
                         <div class="required-item"></div>
                         </div>
                         <div class="input-item">
                             <a-form-item  >
-                                <a-input
-                                v-decorator="[
-                                    'actionbarClickUrl',
-                                    {
-                                        rules: [{ message: '请输入第三方点击监控链接' }],
-                                    },
-                                ]"
-                                placeholder="请输入第三方点击监控链接"
-                                >
-                                </a-input>
-                                <span style="color: red; position: relative; top: -10px">仅加白使用</span>
+                                <a-select
+                                    v-decorator="['siteId']"
+                                    showSearch
+                                    allowClear
+                                    placeholder="选择应用下载详情页"
+                                    optionFilterProp="children"
+                                    :filterOption="filterOption"
+                                    >
+                                    <a-select-option v-for="appModel in siteList" :key="appModel.siteId" :value="appModel.siteId">
+                                        {{ appModel.name }}
+                                    </a-select-option>
+                                </a-select>
                             </a-form-item>        
                         </div>
                     </div> -->
@@ -1747,6 +1748,8 @@
 
 <script>
 import moment from 'moment'
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage'
 import Treeselect from '@/views/modules/Statistics/components/Treeselect.vue'
 import { TreeSelect } from 'ant-design-vue';
@@ -2148,6 +2151,7 @@ export default {
             },
     },
     methods: {
+        ...mapGetters(['userInfo']),
         keyDown(event){
             if((event.keyCode>=96&&event.keyCode<=105)||(event.keyCode>=109&&event.keyCode<=111)||event.keyCode==46||event.keyCode==45||(event.keyCode>=48&&event.keyCode<=57)){
                 
@@ -2481,7 +2485,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountIds=[];
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // //console.log(res);
                     if(res.result){
@@ -2592,7 +2596,7 @@ export default {
         appIdChange(val){
             console.log(val)
             this.siteList=[]
-            // this.getPageList(val)
+
             if(this.getFormData('singleAppid')==0){
                 if(val&&val.findIndex(item=>item.key===0)>-1){
                     let appidArr=this.appList.map(item=>{
@@ -2649,6 +2653,7 @@ export default {
                 if(this.getFormData('campaignType')==2){
                     
                     if(this.getFormData('singleAppid')==1){
+                        this.getPageList(val.key)
                         this.getIsActivate(val.key)
                     }else{
                        
@@ -3411,6 +3416,9 @@ export default {
                             deepConversionBid:item.deep_conversion_bid?item.deep_conversion_bid/1000:null,
                         }
                     }):[]
+                    if(res.result.singleAppid){
+                        this.getPageList(JSON.parse(res.result.appIdArray)[0]) 
+                    }
                     setTimeout(()=>{                       
                         this.form.setFieldsValue({
                              ...res.result,
@@ -3440,9 +3448,12 @@ export default {
                             roiRatio:res.result.roiRatio?res.result.roiRatio:null,
                             multipleBids:res.result.multipleBids,
                             cpaBid:cpaBid,
+                            siteId:res.result.siteId,
                         })
                         
                     },100)
+
+                    
                     if((res.result.ocpxActionType == 180 || res.result.ocpxActionType == 53) && this.groupTypeData.deepConversionTypes&&this.groupTypeData.deepConversionTypes.length > 0){
                         // //console.log(1)
                         setTimeout(()=>{

+ 4 - 2
src/views/modules/autoLaunch/createStrategy.vue

@@ -99,6 +99,8 @@
 
 <script>
 import moment from 'moment'
+import {mapGetters} from 'vuex';
+
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage'
 import Treeselect from '@/views/modules/Statistics/components/Treeselect.vue'
 import { TreeSelect } from 'ant-design-vue';
@@ -175,7 +177,7 @@ export default {
         }
     },
     methods: {
-    
+        ...mapGetters(['userInfo']),
 
         //获取表单的某一个属性值
         getFormData(className) {
@@ -274,7 +276,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountIds=[];
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // console.log(res);
                     if(res.result){

+ 12 - 14
src/views/modules/autoLaunch/material-pool/material.vue

@@ -7,52 +7,50 @@
     >
         <component v-bind:is="currentTabComponent"></component>
     </a-card>
-        
-    
 </template>
-
 <script>
-import moment from 'moment';
-
 export default {
     components:{
         directional: () => import('../directional/directional'),
         person: () => import('@/views/modules/crowd-control/crowd-control.vue'),
         url: () => import('../url/url'),
         application: () => import('../application/application'),
+        autoCopyLibrary: () => import('../auto-copy-library/auto-copy-library.vue'),
     },
     data() {
         return {
-            currentTabComponent:'directional',//当前加载的组件名称
+            currentTabComponent: 'directional', // 当前加载的组件名称
             tabListNoTitle: [
                 {
                     key: 'directional',
-                    tab: '定向包管理',
+                    tab: '定向包管理'
                 },
                 {
                     key: 'person',
-                    tab: '人群包管理',
+                    tab: '人群包管理'
                 },
                 {
                     key: 'url',
-                    tab: '落地页管理',
+                    tab: '落地页管理'
                 },
                 {
                     key: 'application',
-                    tab: '应用包管理',
+                    tab: '应用包管理'
                 },
-            ], 
+                {
+                    key: 'autoCopyLibrary',
+                    tab: '文案库'
+                }
+            ]
         }
     },
     methods: {
         onTabChange(key, type) {
             this.currentTabComponent = key;
-        },
+        }
     },
     created() {
         this.currentTabComponent = 'directional';
     }
-   
 }
-
 </script>

+ 4 - 0
src/views/modules/autoLaunch/material-test/creatMaterialTest.vue

@@ -1352,6 +1352,8 @@ li.chouzhen.first:before {
 <script>
 //   import UserMenu from '../tools/UserMenu'
 //   import SMenu from '../menu/'
+import { mapGetters } from 'vuex'
+
 import Logo from '@/components/tools/Logo.vue'
 import pick from 'lodash.pick'
 import { mixin } from '@/utils/mixin.js'
@@ -1860,6 +1862,7 @@ export default {
         }
     },
     methods: {
+        ...mapGetters(['userInfo']),
         moment,
         tongbuClick() {
             this.tongbuLoading = true
@@ -2496,6 +2499,7 @@ export default {
                     if (this.$route.query.id) {
                         params.id = this.$route.query.id
                     }
+                    params.userId = this.userInfo().id;
                     this.postDataAction('/dimension/kuaiShouDimensionStrategy/insertOrUpdate', params).then(res => {
                         if (res.success) {
                             this.sumbitLoading = false

+ 4 - 2
src/views/modules/autoLaunch/material-test/treeSelectAccount.vue

@@ -210,7 +210,8 @@ export default {
                 if (this.options.length > 0) {
                     return
                 }
-                getAction('/ctop/projectMember/projectList').then(res => {
+                // 2021/9/1 蒙蒙让修改 接口增加 userId 原来的url链接并没有使用声明好的params
+                getAction('/ctop/projectMember/projectList', {userId: this.userInfo().id}).then(res => {
                     if (res.success) {
                         this.options = res.data.map(item => {
                             return {
@@ -231,7 +232,8 @@ export default {
                 })
             } else if (this.reqUrl == '/ctop/projectMember/getProjectAccountByUserId') {
                 getAction(this.reqUrl, {
-                    mediaType: this.request
+                    mediaType: this.request,
+                    userId: this.userInfo().id
                 }).then(res => {
                     if (res.code == 0) {
                         if (res.result.length > 0) {

+ 4 - 2
src/views/modules/autoLaunch/newAppId.vue

@@ -106,6 +106,8 @@
 
 <script>
 import Vue from 'vue'
+import {mapGetters} from 'vuex';
+
 import {ACCESS_TOKEN} from "@/store/mutation-types";
 import moment from 'moment'
 import { getAction, postAction, downFile, downFilePost } from '@/api/manage'
@@ -175,7 +177,7 @@ export default {
         }
     },
     methods: {
-    
+        ...mapGetters(['userInfo']),
         fileWater(file) {
             console.log(file)
             var bmf = new BMF()
@@ -242,7 +244,7 @@ export default {
         accountHttp(){
             this.treeData=[];
             this.accountIds=[];
-            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2', {}).then(res => {
+            getAction('/ctop/projectMember/getProjectAccountByUserId?mediaType=2&userId=' + this.userInfo().id, {}).then(res => {
             if(res.success){
                     // console.log(res);
                     if(res.result){

+ 1 - 1
src/views/modules/headline-view/headline-view-server.js

@@ -5,6 +5,6 @@
 
 export const urlAcount = 'http://118.24.244.213:8808'; // 线上
 // export const urlAcount = 'http://apipre.tjyourong.com.cn'; // 预生产
-// export const urlAcount = 'http://192.168.1.43:8080'; // 子安
+// export const urlAcount = 'http://192.168.1.43:8808'; // 子安
 // export const urlAcount = 'http://139.186.165.84:8808'; // 测试
 // export const urlAcount = 'http://192.168.1.8:8080'; // 学超

+ 2 - 2
src/views/modules/kuaishouapp/account/stepForm/Step3.vue

@@ -916,7 +916,7 @@ import { getAction, postAction, deleteAction } from '@/api/manage'
 import { mapGetters } from 'vuex'
 import UploadToAli from '@femessage/upload-to-ali'
 import moment from 'moment'
-import VuePreview from 'vue-preview'
+// import VuePreview from 'vue-preview'
 import jq from 'jquery'
 import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl' // 停止除当前外的其他视频播放,及停止所有视频播放的方法
 import checkMatemal from './stepModule/checkMatemal'
@@ -929,7 +929,7 @@ export default {
   name: 'BaseForm',
   components: {
     UploadToAli,
-    VuePreview,
+    // VuePreview,
     checkMatemal,
     uploadFile,
   },

+ 2 - 2
src/views/modules/kuaishouapp/account/stepForm/Step4.vue

@@ -846,7 +846,7 @@ import { getAction, postAction, deleteAction } from '@/api/manage'
 import { mapGetters } from 'vuex'
 import UploadToAli from '@femessage/upload-to-ali'
 import moment from 'moment'
-import VuePreview from 'vue-preview'
+// import VuePreview from 'vue-preview'
 import jq from 'jquery'
 import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl' // 停止除当前外的其他视频播放,及停止所有视频播放的方法
 import checkMatemal from './stepModule/checkMatemal'
@@ -875,7 +875,7 @@ export default {
   name: 'BaseForm',
   components: {
     UploadToAli,
-    VuePreview,
+    // VuePreview,
     checkMatemal,
     uploadFile,
   },

+ 16 - 1
src/views/modules/kuaishouapp/batchCreation/creat/creatUnit.vue

@@ -686,6 +686,21 @@
           itemTag.name
         }}</a-tag> -->
       </a-form-item>
+      <a-form-item label="下载详情" v-if="showSite" :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
+        :wrapperCol="{ lg: { span: 10 }, sm: { span: 17 } }">
+            <a-select
+              v-decorator="['siteId']"
+              showSearch
+              allowClear
+              placeholder="选择应用下载详情页"
+              optionFilterProp="children"
+              :filterOption="filterOption"
+            >
+              <a-select-option v-for="appModel in siteList" :key="appModel.siteId" :value="appModel.siteId">
+                {{ appModel.name }}
+              </a-select-option>
+            </a-select>
+      </a-form-item>
       <a-form-item
         label="创意分类"
         :labelCol="{ lg: { span: 7 }, sm: { span: 7 } }"
@@ -2446,7 +2461,7 @@ export default {
         viewComp: 7,
       }).then((res) => {
         if (res.success) {
-          this.siteLiRst = res.result
+          this.siteList = res.result
           if (this.siteList.length > 0) {
             this.showSite = true
           }

+ 2 - 2
src/views/modules/kuaishouapp/creativeCreate.vue

@@ -522,7 +522,7 @@ import { getAction, postAction } from '@/api/manage'
 import { mapGetters } from 'vuex'
 import UploadToAli from '@femessage/upload-to-ali'
 import moment from 'moment'
-import VuePreview from 'vue-preview'
+// import VuePreview from 'vue-preview'
 import jq from 'jquery'
 import { stopOtherVideo, closeAllVideoFun } from '@/utils/videoControl' // 停止除当前外的其他视频播放,及停止所有视频播放的方法
 import { fileCheck, fileInsert } from '@/api/actor'
@@ -531,7 +531,7 @@ export default {
   name: 'BaseForm',
   components: {
     UploadToAli,
-    VuePreview
+    // VuePreview
   },
   data() {
     return {

+ 3 - 5
src/views/modules/material/accountCheck.vue

@@ -67,17 +67,15 @@ export default {
       this.autoExpandParent = false
     },
     onCheck(checkedKeys) {
-      console.log('onCheck', checkedKeys)
       this.checkedKeys = checkedKeys
     },
     onSelect(selectedKeys, info) {
-      console.log('onSelect', info)
       this.selectedKeys = selectedKeys
     },
     handleOk(e) {
-      console.log(e)
+	  let defaultData = this.checkedKeys.filter(item => item.toString().indexOf('-') === -1);
       this.showEdit = false
-      this.$emit('synchro', this.checkedKeys)
+      this.$emit('synchro', defaultData)
     },
     close() {
       this.showEdit = false
@@ -117,7 +115,7 @@ export default {
           this.treeData = res.result.map(item=>{
             return {
               title: item.projectName,
-              key: item.projectId,
+              key: item.projectId + '-',
               children:item.userAllocationList.map(i=>{
                   return {
                     title: i.authName+'\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0'+(i.userName?i.userName:'管理员'), 

+ 678 - 12
src/views/modules/material/videoMaterial.vue

@@ -1,4 +1,7 @@
 <style lang="scss">
+/deep/ .usage-details-modal {
+	width: 750px !important;
+}
 .is-disabled .el-checkbox__inner {
   display: none !important;
 }
@@ -419,6 +422,11 @@ a {
               </a-select>
             </a-form-item>
           </a-col>
+           <a-col :md="8" :sm="8">
+            <a-form-item label="设计负责人">
+              <a-input placeholder="请输入设计负责人" v-model="queryParam.leaderName"></a-input>
+            </a-form-item>
+          </a-col>
 
           <a-col :md="8" :sm="8">
             <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
@@ -447,6 +455,12 @@ a {
         >新增</a-button
       >
       <a-button
+        @click="batchUploadVisible=true"
+        type="primary"
+        icon="plus"
+        >批量新增</a-button
+      >
+      <a-button
         @click="onCheckAllChange"
         v-if="
           queryParam.productId &&
@@ -798,10 +812,13 @@ a {
                         <a-menu-item key="5">
                           <a href="javascript:;" style="margin-right: 20px" @click="editTagList(items)">修改标签</a>
                         </a-menu-item>
+                        <a-menu-item key="6"  v-show="active !== '1'"  v-if="items.userId == userInfo().id">
+                          <a href="javascript:;" style="margin-right: 20px" @click="editMaterialName(items)">修改素材名称</a>
+                        </a-menu-item>
                       </a-menu>
                     </a-dropdown>
+					<a v-show="active === '0' || active === '1'" style="margin-right: 20px" @click="handleUsageDetails(items)">使用详情</a>
                     <a-checkbox :value="items.id" style="float: right" v-show="active == '1'"></a-checkbox>
-
                     <br />
                     {{ items.createTime }}
                   </span>
@@ -814,10 +831,13 @@ a {
               style="float: right"
               v-if="dataSource.length > 0"
               showQuickJumper
+              showSizeChanger
               :pageSize.sync="ipagination.pageSize"
               :total="ipagination.total"
               v-model="ipagination.current"
+              :pageSizeOptions="ipagination.pageSizeOptions"
               @change="getDataSource"
+              @showSizeChange="getDataSourceSize"
             />
           </div>
           <div v-else style="width: 100%; height: 400px; display: flex; justify-content: center; align-items: center">
@@ -831,6 +851,25 @@ a {
         </a-spin>
       </a-tab-pane>
     </a-tabs>
+    <a-modal title="修改素材名称" @cancel="editMaterialVisible=false" v-if="editMaterialVisible" v-model="editMaterialVisible">
+      <template slot="footer">
+        <a-button key="back" @click="editMaterialVisible=false">取消</a-button>
+        <a-button type="primary" @click="handleOkEditMaterialName" :loading="loadingEdit">确定</a-button>
+      </template>
+      <a-form :form="editMaterialform">
+        <a-form-model-item
+          label="素材名称"
+        >
+          <a-input placeholder="请填写素材名称" 
+          v-decorator="[
+              'name',
+              {
+                  rules: [{ required: true, message: '素材名称不能为空' }]
+              }
+          ]" />
+        </a-form-model-item>
+      </a-form>
+    </a-modal>
     <a-modal title="封面上传" @cancel="closeImage" @afterClose="closeImage" v-model="addImageVisible">
       <template slot="footer">
         <a-button key="back" @click="closeImage">取消</a-button>
@@ -906,6 +945,238 @@ a {
       </div>
     </a-modal>
 
+     <a-modal
+      title="批量上传素材"
+      v-model="batchUploadVisible"
+      v-if="batchUploadVisible"
+      :maskClosable="false"
+      :width="1200"
+    >
+      <template slot="footer">
+        <a-button type="primary" @click="handleOkBatch" :loading="loadingBatch">确定</a-button>
+      </template>
+      <a-form-model
+        ref="ruleForm"
+        :model="ruleForm"
+        :label-col="{ span: 4 }"
+        :wrapper-col="{ span: 14 }"
+      >
+       
+        <a-form-model-item ref="name" label="项目选择" prop="projectId" :rules="{
+          required: true,
+          message: '项目不能为空',
+          trigger: 'blur',
+        }">
+          <a-select
+            v-model="ruleForm.projectId"
+            @change="getProjectId"
+            @focus="getParticipateList"
+            showSearch
+            optionFilterProp="children"
+            :filterOption="filterOption"
+            @search="getParticipateList"
+            :disabled="!add"
+          >
+            <a-select-option :value="item.projectId" v-for="item of dataElse" :key="item.id">
+              {{ item.projectName }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{
+                item.mediaId == '1'
+                  ? '头条'
+                  : item.mediaId == '2'
+                  ? '快手'
+                  : item.mediaId == '3'
+                  ? '头条内广'
+                  : '快手内广'
+              }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ item.advertiserName }}
+            </a-select-option>
+          </a-select>
+        </a-form-model-item>
+        <a-form-model-item label="视频上传" prop="videoList"  v-if="ruleForm.projectId!=''">
+          <uploadFile
+            :checkFile="ruleFormFile"
+            :value.sync="ruleForm.urlList"
+            @overUpload="ruleFormOverUpload"
+            @removeUpload="ruleFormRemoveUpload"
+            :fileCount="10"
+            :sizeCheck="true"
+            uploadType="video"
+            :multiple="true"
+            v-if="batchUploadVisible"
+          />
+          <!-- <uploadFile
+            :checkFile="file"
+            :value.sync="urlList.url"
+            @overUpload="overUpload"
+            @removeUpload="removeUpload"
+            :fileCount="2"
+            uploadType="video"
+            :multiple="true"
+          /> -->
+        </a-form-model-item>
+
+        <a-form-model-item :wrapper-col="{ span: 14 , offset:4}">
+          <el-collapse v-model="activeCollapse" accordion v-if="ruleForm.urlList.length>0">
+            <el-collapse-item :title="'视频'+(index+1)" :name="index" v-for="(items,index) of ruleForm.urlListData" :key="index">
+              <a-form-model-item label="视频" :label-col="{ span: 4 }"
+              :wrapper-col="{ span: 14 }">
+                <video :src="items.url" style="width:150px"></video>
+              </a-form-model-item>
+              <!-- <a-form-model-item label="素材名称"  
+                :key="index"
+                :prop="'urlListData.'+index+'.materialName'" 
+                :label-col="{ span: 4 }" 
+                :wrapper-col="{ span: 14 }"
+                :rules="{
+                  required: true,
+                  message: '素材名称必填',
+                  trigger: 'blur',
+                }"
+              >
+                <a-input placeholder="请输入素材名称" v-model="items.materialName"></a-input>
+              </a-form-model-item> -->
+              
+              <a-form-model-item label="剪辑"  
+              :key="index"
+              :prop="'urlListData.'+index+'.clipId'" 
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+              :rules="{
+                required: true,
+                message: '剪辑必选',
+                trigger: 'blur',
+              }">
+                  <a-select
+                  v-model="items.clipId"
+                  showSearch
+                  optionFilterProp="children"
+                  :filterOption="filterOption"
+                >
+                  <a-select-option :value="item.userId" v-for="item of ascription.clipId" :key="item.userId">{{
+                    item.userName
+                  }}</a-select-option>
+                </a-select>
+              </a-form-model-item>
+              <a-form-model-item label="策划" 
+              :prop="'urlListData.' + index  + '.planId'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+              :rules="{
+                required: true,
+                message: '策划必选',
+                trigger: 'blur',
+              }">
+                <a-select
+                  v-model="items.planId"
+                  showSearch
+                  optionFilterProp="children"
+                  :filterOption="filterOption"
+                >
+                  <a-select-option :value="item.userId" v-for="item of ascription.planId" :key="item.userId">{{
+                    item.userName
+                  }}</a-select-option>
+                </a-select>
+                
+              </a-form-model-item>
+              <a-form-model-item label="拍摄" 
+              :prop="'urlListData.'+index+'.shotId'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }">
+                  <a-select
+                  v-model="items.shotId"
+                  showSearch
+                  optionFilterProp="children"
+                  :filterOption="filterOption"
+                >
+                  <a-select-option :value="item.userId" v-for="item of ascription.shotId" :key="item.userId">{{
+                    item.userName
+                  }}</a-select-option>
+                </a-select>
+              </a-form-model-item>
+
+              <a-form-model-item label="形式标签" 
+              :prop="'urlListData.'+index+'.modalityTagList'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+              :rules="{
+                required: true,
+                message: '形式标签必选',
+                trigger: 'blur',
+              }">
+                  <el-cascader
+                    placeholder="搜索你想要的形式标签"
+                    :options="departTreeModality"
+                    v-model="items.modalityTagList"
+                    :props="{
+                      multiple: true,
+                      value: 'id',
+                      label: 'tagName',
+                      emitPath: false,
+                      checkStrictly: true,
+                      expandTrigger: 'hover',
+                    }"
+                    filterable
+                    style="width: 100%"
+                  ></el-cascader>
+              </a-form-model-item>
+              <a-form-model-item label="场景标签" 
+              :prop="'urlListData.'+index+'.senceTagList'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+                :rules="{
+                required: true,
+                message: '场景标签必选',
+                trigger: 'blur',
+              }">
+                <el-cascader
+                  placeholder="搜索你想要的场景标签"
+                  :options="departTreeSence"
+                  v-model="items.senceTagList"
+                  :props="{
+                    multiple: true,
+                    value: 'id',
+                    label: 'tagName',
+                    emitPath: false,
+                    checkStrictly: true,
+                    expandTrigger: 'hover',
+                  }"
+                  filterable
+                  style="width: 100%"
+                ></el-cascader>
+              </a-form-model-item>
+              <a-form-model-item label="基调标签" 
+              :prop="'urlListData.'+index+'.modTagList'"  
+              :label-col="{ span: 4 }" 
+              :wrapper-col="{ span: 14 }"
+                :rules="{
+                required: true,
+                message: '基调标签必选',
+                trigger: 'blur',
+              }">
+                 <el-cascader
+                  placeholder="搜索你想要的基调标签"
+                  :options="departTreeMod"
+                  v-model="items.modTagList"
+                  :props="{
+                    multiple: true,
+                    value: 'id',
+                    label: 'tagName',
+                    emitPath: false,
+                    checkStrictly: true,
+                    expandTrigger: 'hover',
+                  }"
+                  filterable
+                  style="width: 100%"
+                ></el-cascader>
+              </a-form-model-item>
+              <a-form-model-item :wrapper-col="{ span: 14,offset:4 }" v-if="index == 0">
+                  <a-button type="primary" @click="syncDesign">剩余素材同步设计人员</a-button>
+              </a-form-model-item>
+            </el-collapse-item>
+          </el-collapse>
+        </a-form-model-item>
+      </a-form-model>
+    </a-modal>
+
+
     <a-modal
       :title="add ? '添加素材' : '修改素材'"
       v-model="visible"
@@ -1744,13 +2015,13 @@ a {
     <accountCheckBytedance ref="accountCheckBytedance" @synchro="implement" />
     <permission-modal ref="modalForm" @ok="modalFormOkElse"></permission-modal>
     <!-- 换脸模块 -->
-		<change-face
-			:status="faceTypeStatus"
-			:defaultList="faceChangeList"
-			@closeface="handleFaceCloseModal"
-			@sureface="handleFaceSureModal"
-		>
-		</change-face>
+	<change-face
+		:status="faceTypeStatus"
+		:defaultList="faceChangeList"
+		@closeface="handleFaceCloseModal"
+		@sureface="handleFaceSureModal"
+	>
+	</change-face>
     <a-modal
         v-if="faceShowStatus"
         title="换脸操作"
@@ -1802,13 +2073,97 @@ a {
           @showSizeChange="onShowSizeChange"
       />
     </a-modal>
+	<a-modal
+        v-if="usageDetailsStatus"
+        title="使用详情"
+		:width="750"
+        :visible="usageDetailsStatus"
+        dialog-class="usage-details-modal change-face-modal change-list-modal-show"
+		:footer="null"
+		@cancel="handleProfitModalnCancel"
+    >
+		<div style="overflow: hidden;">	
+			<a-tabs v-model="materiaModalType" @change="handleMateriaTabsChange">
+				<a-tab-pane key="1" tab="头条">
+					<a-table
+						class="face-right-table"
+						ref="table"
+						size="middle"
+						bordered
+						:columns="materiaColumnsToutiao"
+						:dataSource="materiaDataToutiao"
+						:pagination="false"
+						:loading="toutiaoMateriaLoading"
+					>
+						<span slot="accountStatus" slot-scope="text">
+							<span>{{ text === 0 ? '投放中' : '已暂停' }}</span>
+						</span>
+					</a-table>
+					<a-pagination
+						class="pagin-table-class"
+						:total="materiaDataTotalToutiao"
+						:show-total="total => `共 ${materiaDataTotalToutiao} 条`"
+						size="small"
+						:current="defaultCurrentToutiao"
+						:defaultPageSize="10"
+						@change="materiaDataSizeChange"
+						@showSizeChange="materiaDataSizeChange"
+					/>
+				</a-tab-pane>
+				<a-tab-pane key="2" tab="快手">
+					<a-table
+						class="face-right-table"
+						ref="table"
+						size="middle"
+						bordered
+						:columns="materiaColumnsKuaishou"
+						:dataSource="materiaDataKuaishou"
+						:pagination="false"
+						:loading="kuaishouMateriaLoading"
+					>
+						<span slot="accountStatus" slot-scope="text">
+							<span>{{ text === 0 ? '投放中' : '已暂停' }}</span>
+						</span>
+						<span slot="refuseCount" slot-scope="text, record">
+							<span>{{ record.refuseInfo.refuseCount }}</span>
+						</span>
+						<span slot="refuseDetail" slot-scope="text, record">
+							<a :disabled="!record.refuseInfo.refuseDetail" @click="handleRejectReason(record)">拒绝原因</a>
+						</span>
+					</a-table>
+					<a-pagination
+						class="pagin-table-class"
+						:total="materiaDataTotalKuaishou"
+						:show-total="total => `共 ${materiaDataTotalKuaishou} 条`"
+						size="small"
+						:current="defaultCurrentKuaishou"
+						:defaultPageSize="10"
+						@change="materiaDataSizeChangeKuaishou"
+						@showSizeChange="materiaDataSizeChangeKuaishou"
+					/>
+				</a-tab-pane>
+			</a-tabs>
+		</div>
+    </a-modal>
+	<a-modal
+        v-if="rejectReasonStatus"
+        title="审核拒绝原因"
+		:width="750"
+        :visible="rejectReasonStatus"
+		:footer="null"
+		@cancel="handleRejectReasonCancel"
+    >
+		<div>
+			<p v-for="(item, index) in rejectReasonList" :key="index + 1">{{ index + 1 }}:{{ item }}</p>
+		</div>
+	</a-modal>
   </a-card>
 </template>
 
 <script>
 import changeFace from '@/views/modules/Statistics/change-face/change-face';
 import PermissionModal from './modules/DepartModal'
-import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { JeecgListMixin } from '@/mixins/videoMaterialMixin'
 import JEllipsis from '@/components/jeecg/JEllipsis'
 import UploadToAli from '@femessage/upload-to-ali'
 import { fileCheck, fileCheckImage, fileEdit, fileEditAll, fileInsertV2 } from '@/api/actor'
@@ -1824,6 +2179,7 @@ import uploadFile from '@/components/uploadFile.vue'
 import { closeAllVideoFun, stopOtherVideo } from '@/utils/videoControl'
 import accountCheck from './accountCheck'
 import accountCheckBytedance from './accountCheckBytedance'
+let md5Arr = []
 export default {
   name: 'video-material',
   mixins: [JeecgListMixin],
@@ -1838,9 +2194,95 @@ export default {
     selectTableProject,
     changeFace
   },
-
   data() {
     return {
+		rejectReasonStatus: false,
+		defaultCurrentKuaishou: 1,
+		materiaDataTotalKuaishou: 0,
+		kuaishouMateriaLoading: false,
+		materiaDataKuaishou: [],
+		materiaColumnsKuaishou: [
+			{
+				title: '账户ID',
+				align: 'center',
+				dataIndex: 'accountId'
+			},
+			{
+				title: '账户所属人',
+				align: 'center',
+				dataIndex: 'userName'
+			},
+			{
+				title: '账户状态',
+				align: 'center',
+				dataIndex: 'accountStatus',
+				scopedSlots: {customRender: 'accountStatus'}
+			},
+			{
+				title: '视频ID',
+				align: 'center',
+				dataIndex: 'photoId'
+			},
+			{
+				title: '关联创意总数(自定义创意)',
+				align: 'center',
+				dataIndex: 'relationCount'
+			},
+			{
+				title: '审核拒绝创意数',
+				align: 'center',
+				dataIndex: 'refuseCount',
+				scopedSlots: {customRender: 'refuseCount'}
+			},
+			{
+				title: '审核拒绝原因',
+				align: 'center',
+				dataIndex: 'refuseDetail',
+				scopedSlots: {customRender: 'refuseDetail'}
+			},
+		],
+		toutiaoMateriaLoading: false,
+		defaultCurrentToutiao: 1,
+		materiaDataTotalToutiao: 0,
+		materiaDataToutiao: [],
+		materiaColumnsToutiao: [
+			{
+				title: '账户ID',
+				align: 'center',
+				dataIndex: 'accountId'
+			},
+			{
+				title: '账户归属人',
+				align: 'center',
+				dataIndex: 'userName'
+			},
+			{
+				title: '账户状态',
+				align: 'center',
+				dataIndex: 'accountStatus',
+				scopedSlots: {customRender: 'accountStatus'}
+			},
+			{
+				title: '素材ID',
+				align: 'center',
+				dataIndex: 'materialId'
+			},
+			{
+				title: '素材关联创意数',
+				align: 'center',
+				dataIndex: 'relationCount'
+			}
+		],
+		materiaModalType: '2',
+		materialUseDetailList: {},
+		usageDetailsStatus: false,
+      ruleForm:{
+        projectId:'',
+        urlList:[],
+        urlListData:[]
+      },
+      loadingBatch:false,
+      batchUploadVisible:false,
       controlLoading: false,
       defaultCurrent: 1,
       settlementColumns: [
@@ -1935,7 +2377,9 @@ export default {
           },
         },
       ],
-
+      editMaterialVisible:false,
+      editMaterialId:'',
+      loadingEdit:false,
       addImageVisible: false,
       addImageData: null,
       projectId: '',
@@ -2017,6 +2461,7 @@ export default {
       detail: false,
       form: this.$form.createForm(this),
       formPerson: this.$form.createForm(this),
+      editMaterialform: this.$form.createForm(this),
       tags: [],
       refuseFile: [],
       refuseReason: '',
@@ -2065,7 +2510,8 @@ export default {
       allDetailData: null,
       dataAllList: [],
       dataSourceFace: [],
-      totalAll: 0
+      totalAll: 0,
+      activeCollapse: 0
     }
   },
   filters: {
@@ -2181,8 +2627,220 @@ export default {
         // this.loadData()
       },
     },
+    batchUploadVisible:function(n,o){
+      if(!n){
+        md5Arr = []
+        this. ruleForm={
+          projectId:'',
+          urlList:[],
+          urlListData:[]
+        }
+      }
+    }
   },
   methods: {
+	  handleMateriaTabsChange(e) {
+		  const defaultData = this.materialUseDetailList;
+		  this.defaultCurrentToutiao = 1;
+		  this.materiaDataToutiao = defaultData['byteDance'] ? defaultData['byteDance'].slice(0, 10) : [];
+		  this.defaultCurrentKuaishou = 1;
+		  this.materiaDataKuaishou = defaultData['kuaishou'] ? defaultData['kuaishou'].slice(0, 10) : [];
+	  },
+	  handleRejectReasonCancel() {
+		this.rejectReasonStatus = false;
+	  },
+	  handleRejectReason(data) {
+		  this.rejectReasonList = data.refuseInfo.refuseDetail.split('@#');
+		  this.rejectReasonStatus = true;
+	  },
+	materiaDataSizeChange(current, pageSize) {
+		this.materiaDataToutiao = [];
+        this.defaultCurrentToutiao = current;
+        const defaultData = this.materialUseDetailList['byteDance'];
+        this.materiaDataToutiao = [...defaultData.slice(10 * current - 10, 10 * current)];
+	},
+	materiaDataSizeChangeKuaishou(current, pageSize) {
+		this.materiaDataKuaishou = [];
+        this.defaultCurrentKuaishou = current;
+        const defaultData = this.materialUseDetailList['kuaishou'];
+        this.materiaDataKuaishou = [...defaultData.slice(10 * current - 10, 10 * current)];
+	},
+	handleProfitModalnCancel() {
+		this.materialUseDetailList = {};
+		this.materiaDataToutiao = [];
+		this.materiaDataTotalToutiao = 0;
+		this.defaultCurrentToutiao = 1;
+		this.materiaDataKuaishou = [];
+		this.materiaDataTotalKuaishou = 0;
+		this.defaultCurrentKuaishou = 1;
+		this.materiaModalType = '2';
+		this.usageDetailsStatus = false;
+	},
+	handleUsageDetails(data) {
+		this.handleGetMaterialUseDetail(data.code);
+		this.usageDetailsStatus = true;
+		this.toutiaoMateriaLoading = true;
+		this.kuaishouMateriaLoading = true;
+	},
+	handleGetMaterialUseDetail(id) {
+		// 测试code '7b676546bfb50f1b992d44bd479a1536'
+		getAction('/materialUse/getMaterialUseDetail', {code: id}).then(result => {
+			if (result.success) {
+				const defaultData = result.result;
+				this.materialUseDetailList = defaultData;
+				// 头条处理数据
+				this.materiaDataToutiao = defaultData['byteDance'] ? defaultData['byteDance'].slice(0, 10) : [];
+				this.materiaDataTotalToutiao = defaultData['byteDance'] ? defaultData['byteDance'].length : 0;
+				// 快手处理数据 
+				this.materiaDataKuaishou = defaultData['kuaishou'] ? defaultData['kuaishou'].slice(0, 10) : [];
+				this.materiaDataTotalKuaishou = defaultData['kuaishou'] ? defaultData['kuaishou'].length : 0;
+			}
+			else {
+				this.$message.error(result.message);
+			}
+		}).catch(error => {
+			console.log(error, 'eeee');
+		}).finally(() => {
+			this.toutiaoMateriaLoading = false;
+			this.kuaishouMateriaLoading = false;
+		});
+	},
+    ruleFormFile(file){
+      var bmf = new BMF()
+      var that = this
+      return new Promise(function (resolve, reject) {
+        bmf.md5(file, (err, md5) => {
+          let videoInfo = {name:file.name,md5:md5}
+          if(md5Arr.findIndex(item=>item==md5)>-1){
+            reject()
+            that.$message.error('素材'+file.name+'已经上传')
+            return
+          }else{
+            md5Arr.push(md5)
+          }
+          
+          // that.ruleForm.urlList = []
+          fileCheck({
+            code: md5,
+            projectId: that.ruleForm.projectId,
+          }).then((res) => {
+            if (res.code == 0) {
+              that.$message.error('素材'+file.name+'已经上传')
+
+              reject()
+            } else {
+              resolve()
+              //   reject()
+            }
+          })
+        })
+      })
+    },
+    ruleFormOverUpload(urlAll){
+      this.ruleForm.urlListData = urlAll.map(item=>{
+        return {
+          url:item.url,
+          planId:undefined,
+          clipId:undefined,
+          shotId:undefined,
+          modTagList:[],
+          modalityTagList:[],
+          senceTagList:[],
+          materialName:''
+        }
+      })
+    },
+    ruleFormRemoveUpload(file){
+      //media-1301855440.cos.ap-chongqing.myqcloud.com/video/2021-08-16/03-1629102879421.mp4
+      let index = this.ruleForm.urlListData.findIndex(item=>item.url==file.url)
+      md5Arr = []
+      if(index>-1){
+
+        this.ruleForm.urlListData.splice(index,1)
+
+      }
+    },
+    handleOkBatch(){
+      this.$refs.ruleForm.validate(valid => {
+        if(valid){
+          if(this.ruleForm.urlListData.length == 0){
+            this.$message.error('请上传视频素材')
+            return
+          }
+          this.loadingBatch = true
+          let params = {}
+          params.projectId = this.ruleForm.projectId
+          params.videoArray = this.ruleForm.urlListData.map(item=>{
+            return {
+              ...item,
+              ascription:{
+                planId:item.planId,
+                clipId:item.clipId,
+                shotId:item.shotId,
+              }
+            }
+          })
+          postAction('/insertV3',params).then(res=>{
+            this.loadingBatch = false
+            if(res.success){
+              md5Arr = []
+              this.$message.success('上传成功')
+              this.batchUploadVisible = false
+              this.loadData(1)
+            }else{
+               this.$message.error(res.message)
+            }
+          })
+        }else{
+          this.$message.error('有必填项未填')
+        }
+
+      })
+    },
+    syncDesign(){
+      let clipId = this.ruleForm.urlListData[0].clipId
+      let planId = this.ruleForm.urlListData[0].planId
+      let shotId = this.ruleForm.urlListData[0].shotId
+      this.ruleForm.urlListData = this.ruleForm.urlListData.map(item=>{
+        return {
+          ...item,
+          clipId,
+          planId,
+          shotId
+        }
+      })
+    },
+    editMaterialName(item) {
+      this.editMaterialVisible = true
+      this.editMaterialId = item.id
+      this.$nextTick(()=>{
+        this.editMaterialform.setFieldsValue({name:item.materialName})
+      })
+
+    },
+    handleOkEditMaterialName(){
+      this.editMaterialform.validateFieldsAndScroll((err, values) => {
+        if (err) {
+          // 这里做逻辑处理
+        } else {
+          this.loadingEdit = true
+          let params={}
+          params.id = this.editMaterialId
+          params.name = values.name
+          postAction('/ctop/materialInfo/editName', params).then(res=>{
+            this.loadingEdit = false
+            if(res.success){
+              this.$message.success('修改成功')
+              this.editMaterialVisible = false
+              this.editMaterialform.resetFields()
+            }else{
+              this.$message.error(res.message)
+            }
+
+          })
+        }
+      })
+    },
     // TODO 推送操作
     handlePushData(list) {
       const paramsData = {
@@ -3443,6 +4101,14 @@ export default {
     },
     getDataSource(page, pageSize) {
       this.ipagination.current = page
+      this.ipagination.pageSize = pageSize
+      this.checkArr = []
+      this.checkAll = false
+      this.loadData()
+    },
+    getDataSourceSize(page, pageSize) {
+      this.ipagination.current = 1
+      this.ipagination.pageSize = pageSize
       this.checkArr = []
       this.checkAll = false
       this.loadData()

+ 9 - 12
src/views/modules/onlineTraining/onlineTrainingList.vue

@@ -178,20 +178,17 @@
 <script>
 import { getAction, postAction } from '@/api/manage'
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
-import moment from 'moment'
-import $ from 'jquery'
-import qs from 'qs'
 import UploadToAli from '@femessage/upload-to-ali'
 import uploadFile from '@/components/uploadFile.vue'
 import { mapActions, mapGetters, mapState } from 'vuex'
 // document.write(textDes('https://ctop-media.oss-cn-beijing.aliyuncs.com/video/2020-03-20/20网服-1584693978588.mp4'))
 // document.write('<br>' + desDecrypt('s4HMPbmUfZ0=', 'ckplayerDesKey'))
-function textDes(str) {
-  var keyCode = 'ckplayerDesKey'
-  var newText = encodeURI(desEncrypt(str, keyCode))
-  newText = (keyCode == 'ckplayerDesKey' ? 'CK:' : 'CE:') + newText
-  return newText
-}
+// function textDes(str) {
+//   var keyCode = 'ckplayerDesKey'
+//   var newText = encodeURI(desEncrypt(str, keyCode))
+//   newText = (keyCode == 'ckplayerDesKey' ? 'CK:' : 'CE:') + newText
+//   return newText
+// }
 
 function desEncrypt(word, keyCode) {
   var key = CryptoJS.enc.Utf8.parse(keyCode)
@@ -311,7 +308,7 @@ export default {
         debug: true,
         loadNext: 10,
         usehardwareeecoder: true, //硬件加速
-        video: textDes(), //视频地址(必填)
+        video: "", //视频地址(必填)
       },
       videoObjectNot: {
         container: '#videoPlay', //“#”代表容器的ID,“.”或“”代表容器的class
@@ -662,7 +659,7 @@ export default {
                 }
                 console.log(this.videoObject.video)
 
-                let player = new ckplayer(this.videoObject)
+                // let player = new ckplayer(this.videoObject)
                 console.log(player)
               } else {
                 this.startList = true
@@ -796,7 +793,7 @@ export default {
     this.$nextTick(() => {
       this.videoObject.video = ' CK:2OoC8kA6lhNFqCi2uVquDPpnuq9VcRji9nGXe5nqadA6Jey7YFFEP8pE99j58UBbLyb7YN7cpkw='
 
-      let player = new ckplayer(this.videoObject)
+      // let player = new ckplayer(this.videoObject)
 
       getAction('/sys/user/getRoleInfo', {
         userId: this.userInfo().id,

+ 4 - 4
src/views/modules/policy-management/policy-management-server.js

@@ -1,11 +1,11 @@
 /**
- * @file 账户配置API
+ * @file 政策管理模块配置API
  * @author jiayufei
  */
 
-//  export const urlAcount = 'http://118.24.244.213:8808'; // 线上
+ export const urlAcount = 'http://api.tjyourong.com.cn'; // 线上
+//  export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
+//  export const urlAcount = 'http://192.168.1.43:9999'; // 子安
 //  export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
- // export const urlAcount = 'http://192.168.1.43:8808'; // 子安
- export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
 //  export const urlAcount = 'http://192.168.1.8:9999'; // 学超
  

+ 104 - 1
src/views/modules/policy-management/policy-management.less

@@ -3,60 +3,138 @@
     height: calc(100vh - 137px);
     padding: 20px;
     overflow-y: auto;
+
     .control-con-title {
         height: 50px;
         display: flex;
         justify-content: space-between;
         align-items: center;
+
         .add-acount-policy-btn {
             margin-left: 15px;
         }
+
         .policy-export-btn {
             font-size: 18px;
             font-weight: bold;
         }
+
     }
     .control-con-header {
         margin-bottom: 20px;
         position: relative;
+
         .grid-form-options {
             margin-bottom: 10px;
         }
+
         .acount-search-class {
             width: 450px;
         }
+
         .reset-class {
             margin-right: 10px !important;
         }
+
         .upload-person {
             position: absolute;
             right: 10px;
             top: 0;
         }
+
     }
+
+    // .control-con-table {
+    //     /* 设置滚动条的样式 */
+    //     ::-webkit-scrollbar {
+    //         width:12px;
+    //         background: #fff !important;
+    //     }
+    //     /* 滚动槽 */
+    //     ::-webkit-scrollbar-track {
+    //         background: #fff !important;
+    //     }
+    //     /* 滚动条滑块 */
+    //     ::-webkit-scrollbar-thumb {
+    //         border-radius:10px;
+    //         background:#000;
+    //     }
+    //     ::-webkit-scrollbar-thumb:window-inactive {
+    //         background:#ccc;
+    //     }
+    //     ::-webkit-scrollbar-button:hover {  
+    //         /*当鼠标在水平滚动条下面的按钮上的状态*/ 
+    //         background:#f00 
+    //     }  
+    // }
+
     .pagin-table-class {
         display: flex;
         justify-content: flex-end;
         margin-top: 20px;
     }
+
 }
 /deep/ .rejection-reason-class {
     width: 600px !important;
+
+    .audit-policy-icon {
+        position: absolute;
+        right: 22px;
+        top: 20px;
+        font-size: 15px;
+        cursor: pointer;
+    }
+
+    .audit-policy-footer {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        border-top: 1px solid #e8e8e8;
+
+        .cancel-btn {
+            margin-right: 12px;
+            margin-top: 12px;
+        }
+
+    }
+
     .reason-class-header {
         margin-bottom: 18px;
         font-size: 16px;
         font-weight: bold;
     }
+
+    .reason-class-content {
+        height: 100px;
+    }
+
     .rejection-textarea-msg {
         height: 150px;
     }
+
 }
 /deep/ .audit-policy-class {
     width: 930px !important;
+
+    .audit-policy-footer {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        border-top: 1px solid #e8e8e8;
+
+        .cancel-btn {
+            margin-right: 12px;
+            margin-top: 12px;
+        }
+
+    }
+
     .ant-modal-body {
-        height: 420px;
+        height: 440px;
         overflow-y: auto;
     }
+
     .audit-policy-icon {
         position: absolute;
         right: 22px;
@@ -64,20 +142,27 @@
         font-size: 15px;
         cursor: pointer;
     }
+
     .policy-line-quen {
         display: flex;
+        height: 345px;
+        overflow-y: auto;
+
         .line-quen-left,
         .line-quen-right {
             flex: 1;
+
             .policy-line-left,
             .policy-line-right {
                 display: flex;
                 margin-bottom: 16px;
+
                 .line-left-spn {
                     display: inline-block;
                     width: 120px;
                     text-align: right;
                 }
+
                 .line-right-spn {
                     display: inline-block;
                     width: 220px;
@@ -85,8 +170,11 @@
                     white-space: nowrap;
                     text-overflow: ellipsis;
                 }
+
             }
+
         }
+
     }
 }
 /deep/ .policy-operation-class {
@@ -97,6 +185,21 @@
     }
     .policy-operation-form {
         display: flex;
+        .group-abbreviation-class {
+            display: flex;
+            .settlement-header-icon {
+                margin-left: 47px;
+                margin-top: 12px;
+            }
+        }
+        .promotion-type-class {
+            position: relative;
+            .settlement-header-icon {
+                position: absolute;
+                left: -90px;
+                top: 3px;
+            }
+        }
         .policy-operation-form-left,
         .policy-operation-form-right {
             flex: 1;

+ 180 - 69
src/views/modules/policy-management/policy-management.vue

@@ -1,10 +1,12 @@
 <template>
     <div class="policy-management-content">
         <div class="control-con-title">
-            <div><span class="policy-export-btn">销售政策列表</span></div>
+            <div>
+                <span class="policy-export-btn">销售政策列表</span>
+            </div>
             <div>
                 <span v-if="userInfo().roleName !== '财务'" class="add-acount-policy-btn">
-                    <a-button type="primary" @click="handleAddAccountPolicy">创建账户政策</a-button>
+                    <a-button type="primary" @click="handleAddAccountPolicy">新增政策</a-button>
                 </span>
             </div>
         </div>
@@ -21,24 +23,28 @@
                         label="公司名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.companyName" placeholder="请输入公司名称"/>
+                        <a-input v-model="configForm.companyName" placeholder="请输入公司名称" allow-clear/>
                     </a-form-item>
                     <a-form-item
                         class="grid-form-item"
                         label="广告主名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.adverName" placeholder="请输入广告主名称"/>
+                        <a-input v-model="configForm.adverName" placeholder="请输入广告主名称" allow-clear/>
                     </a-form-item>
                     <a-form-item
                         class="grid-form-item"
                         label="产品名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.productName" placeholder="请输入产品名称"/>
+                        <a-input v-model="configForm.productName" placeholder="请输入产品名称" allow-clear/>
                     </a-form-item>
                     <a-form-item label="媒体:">
-                        <a-select v-model="configForm.creativeMedia" style="width: 100px" allow-clear>
+                        <a-select
+                            v-model="configForm.creativeMedia"
+                            style="width: 100px"
+                            allow-clear
+                        >
                             <a-select-option
                                 v-for="item in creativeMediaOptions"
                                 :key="item.id"
@@ -49,7 +55,11 @@
                         </a-select>
                     </a-form-item>
                     <a-form-item label="返点类型:">
-                        <a-select v-model="configForm.creativeRebate" style="width: 140px" allow-clear>
+                        <a-select
+                            v-model="configForm.creativeRebate"
+                            style="width: 140px"
+                            allow-clear
+                        >
                             <a-select-option
                                 v-for="item in creativeRebateOptions"
                                 :key="item.id"
@@ -86,17 +96,17 @@
                         </a-select>
                     </a-form-item>
                     <a-form-item label="运营方式:">
-                        <a-select v-model="configForm.creativeOperate" style="width: 100px" allow-clear>
+                        <a-select
+                            v-model="configForm.creativeOperate"
+                            style="width: 100px"
+                            allow-clear
+                        >
                             <a-select-option value="no">不限</a-select-option>
                             <a-select-option :value="0">自运营</a-select-option>
                             <a-select-option :value="1">代运营</a-select-option>
                         </a-select>
                     </a-form-item>
-                    <a-form-item
-                        class="grid-form-item"
-                        label="时间:"
-                        :colon="false"
-                    >
+                    <a-form-item class="grid-form-item" label="时间:" :colon="false">
                         <a-range-picker
                             v-model="configForm.time"
                             format="YYYY-MM-DD"
@@ -104,7 +114,11 @@
                         />
                     </a-form-item>
                     <a-form-item label="状态:">
-                        <a-select v-model="configForm.searchStatus" style="width: 100px" allow-clear>
+                        <a-select
+                            v-model="configForm.searchStatus"
+                            style="width: 100px"
+                            allow-clear
+                        >
                             <a-select-option
                                 v-for="item in searchStatusOptions"
                                 :key="item.id"
@@ -150,17 +164,29 @@
                     <span>{{ text === 0 ? '否' : '是' }}</span>
                 </span>
                 <span slot="isDianPay" slot-scope="text">
-                    <span>{{ text === 0 ? '否' : '是' }}</span>
+                    <span>{{ calculationScope(text) }}</span>
                 </span>
                 <span slot="updateApprovedStatus" slot-scope="text">
                     <a>{{ text }}</a>
                 </span>
+                <span slot="dianPayCompanyName" slot-scope="text">
+                    <span>{{ text ? text : '-' }}</span>
+                </span>
+                <span slot="dianPayCompanyRebateRate" slot-scope="text">
+                    <span>{{ text ? text + '%' : '-' }}</span>
+                </span>
                 <span slot="accountingPeriod" slot-scope="text">
-                    <span>{{ text }}</span>
+                    <span>{{ text ? text + '天' : '-' }}</span>
+                </span>
+                <span slot="rebateRate" slot-scope="text">
+                    <span>{{ text ? text + '%' : '-' }}</span>
                 </span>
                 <span slot="policyStartDate" slot-scope="text, record">
                     <span>{{ text }} 至 {{ record.policyEndDate }}</span>
                 </span>
+                <span slot="remarks" slot-scope="text">
+                    <span>{{ text ? text : '-' }}</span>
+                </span>
                 <span slot="action" slot-scope="text, record">
                     <a v-if="record.updateOperation.includes('查看')" @click="handleDetail(record)">查看</a>
                     <a-divider v-if="record.updateOperation.includes('提交审核')" type="vertical"/>
@@ -191,28 +217,31 @@
         <a-modal
             v-if="rejectionReasonStatus"
             title="审核不通过"
-            :visible="rejectionReasonStatus"
             dialog-class="rejection-reason-class"
-            @ok="handleModeSure"
-            @cancel="handleModeCancel"
+            :visible="rejectionReasonStatus"
+            :footer="null"
+            :closable="false"
         >
             <div>
+                <span class="audit-policy-icon" @click="handleModeCancel"><a-icon type="close"/></span>
                 <div class="reason-class-header">审核不通过的理由:</div>
-                <div>{{ rejectionReasonList.approvalContent }}</div>
+                <div class="reason-class-content">{{ rejectionReasonList.approvalContent }}</div>
+                <div solt="footer" class="audit-policy-footer">
+                    <div></div>
+                    <div>
+                        <a-button type="default" class="cancel-btn" @click="handleModeCancel">取消</a-button>
+                    </div>
+                </div>
             </div>
         </a-modal>
         <!-- 查看详情 -->
         <a-modal
             v-if="auditPolicyStatus"
             title="审核政策"
+            dialog-class="audit-policy-class"
             :visible="auditPolicyStatus"
             :closable="false"
-            :footer="queryByIdList.updateOperation.includes('审核拒绝')"
-            okText="审核通过"
-            cancelText="审核拒绝"
-            dialog-class="audit-policy-class"
-            @ok="handleAuditSure"
-            @cancel="handleAuditCancel"
+            :footer="null"
         >
             <div>
                 <span class="audit-policy-icon" @click="handleCloseAuditPolicy"><a-icon type="close"/></span>
@@ -274,12 +303,12 @@
                         </div>
                         <div class="policy-line-right">
                             <span class="line-left-spn">返点比例:</span>
-                            <span class="line-right-spn">{{ queryByIdList.rebateRate }}</span>
+                            <span class="line-right-spn">{{ queryByIdList.rebateRate + '%' }}</span>
                         </div>
                         <div v-if="queryByIdList.advancePay === 0">
                             <div class="policy-line-right">
                                 <span class="line-left-spn">账期:</span>
-                                <span class="line-right-spn">{{ queryByIdList.accountingPeriod }}</span>
+                                <span class="line-right-spn">{{ queryByIdList.accountingPeriod && queryByIdList.accountingPeriod + '天' }}</span>
                             </div>
                             <div class="policy-line-right">
                                 <span class="line-left-spn">是否第三方垫付:</span>
@@ -292,7 +321,7 @@
                                 </div>
                                 <div class="policy-line-right">
                                     <span class="line-left-spn">垫付返点:</span>
-                                    <span class="line-right-spn">{{ queryByIdList.dianPayCompanyRebateRate }}</span>
+                                    <span class="line-right-spn">{{ queryByIdList.dianPayCompanyRebateRate && queryByIdList.dianPayCompanyRebateRate + '%' }}</span>
                                 </div>
                             </div>
                         </div>
@@ -306,14 +335,21 @@
                         </div>
                     </div>
                 </div>
+                <div v-if="queryByIdList.updateOperation.includes('审核拒绝')" solt="footer" class="audit-policy-footer">
+                    <div></div>
+                    <div>
+                        <a-button type="default" class="cancel-btn" @click="handleAuditCancel">审核拒绝</a-button>
+                        <a-button type="primary" @click="handleAuditSure">审核通过</a-button>
+                    </div>
+                </div>
             </div>
         </a-modal>
         <!-- 审核拒绝 -->
         <a-modal
             v-if="rejectAuditStatus"
             title="审核不通过"
-            :visible="rejectAuditStatus"
             dialog-class="rejection-reason-class"
+            :visible="rejectAuditStatus"
             @ok="handleRejectSure"
             @cancel="handleRejectCancel"
         >
@@ -338,9 +374,9 @@
         <!-- 新增、编辑政策 -->
         <a-modal
             v-if="policyOperationStatus"
+            dialog-class="policy-operation-class"
             :title="addType === 'add' ? '新增政策' : '编辑政策'"
             :visible="policyOperationStatus"
-            dialog-class="policy-operation-class"
             :confirmLoading="confirmLoading"
             @ok="handlePolicyOperationSure"
             @cancel="handlePolicyOperationCancel"
@@ -369,21 +405,47 @@
                                 allow-clear
                             />
                         </a-form-model-item>
-                        <div class="product-name-class" v-for="(item, index) in policyOperationForm.defaultFormList" :key="item.id">
+                        <div
+                            class="product-name-class"
+                            v-for="(item, index) in policyOperationForm.defaultFormList"
+                            :key="item.id"
+                        >
                             <a-form-model-item
                                 :label="index === 0 ? '产品名称' : ''"
                                 :class="{'isActive': index > 0 }"
                                 :prop="'defaultFormList.' + index + '.value'"
                                 :rules="changeRules"
                             >
-                                <a-input class="input-common-short" v-model="item.value" placeholder="请输入" allow-clear/>
-                                <a-icon v-if="index === 0" class="circle-icon-class circle-icon-plus" type="plus-circle" @click="handleAddOrigin"/>
-                                <a-icon v-if="policyOperationForm.defaultFormList.length > 1 && index === 0" class="circle-icon-class circle-icon-minus" type="minus-circle" @click="handleDelOrigin(item)"/>
-                                <a-icon v-if="policyOperationForm.defaultFormList.length > 1 && index > 0" class="circle-icon-class circle-icon-plus" type="minus-circle" @click="handleDelOrigin(item)"/>
+                                <a-input
+                                    class="input-common-short"
+                                    v-model="item.value"
+                                    placeholder="请输入"
+                                    allow-clear
+                                />
+                                <a-icon
+                                    v-if="index === 0"
+                                    class="circle-icon-class circle-icon-plus"
+                                    type="plus-circle"
+                                    @click="handleAddOrigin"
+                                />
+                                <a-icon
+                                    v-if="policyOperationForm.defaultFormList.length > 1 && index === 0" class="circle-icon-class circle-icon-minus"
+                                    type="minus-circle"
+                                    @click="handleDelOrigin(item)"
+                                />
+                                <a-icon
+                                    v-if="policyOperationForm.defaultFormList.length > 1 && index > 0" class="circle-icon-class circle-icon-plus"
+                                    type="minus-circle"
+                                    @click="handleDelOrigin(item)"
+                                />
                             </a-form-model-item>
                         </div>
                         <a-form-model-item label="媒体" prop="mediaType">
-                            <a-select v-model="policyOperationForm.mediaType" placeholder="请选择投放媒体" allow-clear>
+                            <a-select
+                                v-model="policyOperationForm.mediaType"
+                                placeholder="请选择投放媒体"
+                                allow-clear
+                            >
                                 <a-select-option :value="1">头条</a-select-option>
                                 <a-select-option :value="2">快手</a-select-option>
                             </a-select>
@@ -392,9 +454,9 @@
                             <a-select
                                 v-model="policyOperationForm.createUserId"
                                 style="width: 100px"
-                                :filter-option="handleFilterOption"
                                 show-search
                                 allow-clear
+                                :filter-option="handleFilterOption"
                             >
                                 <a-select-option
                                     v-for="item in saleShowOption"
@@ -406,7 +468,11 @@
                             </a-select>
                         </a-form-model-item>
                         <a-form-model-item label="区域" prop="areaInfo">
-                            <a-select v-model="policyOperationForm.areaInfo" placeholder="请选择区域" allow-clear>
+                            <a-select
+                                v-model="policyOperationForm.areaInfo"
+                                placeholder="请选择区域"
+                                allow-clear
+                            >
                                 <a-select-option
                                     v-for="item in addAreaList"
                                     :key="item"
@@ -420,9 +486,9 @@
                             <a-select
                                 v-model="policyOperationForm.companySubjectName"
                                 placeholder="请选择我司主体"
-                                :filter-option="handleFilterOption"
                                 show-search
                                 allow-clear
+                                :filter-option="handleFilterOption"
                             >
                                 <a-select-option
                                     v-for="item in addSubjectList"
@@ -433,31 +499,53 @@
                                 </a-select-option>
                             </a-select>
                         </a-form-model-item>
-                        <a-form-model-item label="运营方式" prop="promotionType">
+                        <a-form-model-item
+                            class="promotion-type-class"
+                            label="运营方式"
+                            prop="promotionType"
+                        >
                             <a-radio-group v-model="policyOperationForm.promotionType" button-style="solid">
                                 <a-radio-button :value="0">自运营</a-radio-button>
                                 <a-radio-button :value="1">代运营</a-radio-button>
                             </a-radio-group>
+                            <a-tooltip>
+                                <template slot="title">自运营是客户自己运营,代运营由我们帮助客户运营账户</template>
+                                <a-icon class="settlement-header-icon" type="question-circle"/>
+                            </a-tooltip>
                         </a-form-model-item>
-                        <a-form-model-item label="集团简称">
-                            <a-input
-                                v-model="policyOperationForm.groupAbbreviation"
-                                placeholder="请输入集团简称"
-                                allow-clear
-                                @change="handleGroupAbbreviationChange"
-                            />
-                        </a-form-model-item>
-                        <div v-if="subTitleMsgStatus" style="color: #f00;margin-left: 140px">只能输入30个汉字</div>
+                        <div class="group-abbreviation-class">
+                            <a-tooltip>
+                                <template slot="title">由销售人员自行定义的集团系列产品简称</template>
+                                <a-icon class="settlement-header-icon" type="question-circle"/>
+                            </a-tooltip>
+                            <a-form-model-item label="集团简称">
+                                <a-input
+                                    v-model="policyOperationForm.groupAbbreviation"
+                                    placeholder="请输入集团简称"
+                                    allow-clear
+                                    @change="handleGroupAbbreviationChange"
+                                />
+                            </a-form-model-item>
+                            <div v-if="subTitleMsgStatus" style="color: #f00;margin-left: 140px">只能输入30个汉字</div>
+                        </div>
                     </a-row>
                     <a-row class="policy-operation-form-right">
                         <a-form-model-item label="是否预付" prop="advancePay">
-                            <a-radio-group v-model="policyOperationForm.advancePay" button-style="solid" @change="handlePrepaidNotChange">
+                            <a-radio-group
+                                v-model="policyOperationForm.advancePay"
+                                button-style="solid"
+                                @change="handlePrepaidNotChange"
+                            >
                                 <a-radio-button :value="1">是</a-radio-button>
                                 <a-radio-button :value="0">否</a-radio-button>
                             </a-radio-group>
                         </a-form-model-item>
                         <a-form-model-item label="返点类型:" prop="rebateType">
-                            <a-select v-model="policyOperationForm.rebateType" placeholder="请选择返点类型" allow-clear>
+                            <a-select
+                                v-model="policyOperationForm.rebateType"
+                                placeholder="请选择返点类型"
+                                allow-clear
+                            >
                                 <a-select-option :value="0">返现</a-select-option>
                                 <a-select-option :value="1">返货</a-select-option>
                                 <a-select-option :value="2">返现+返货</a-select-option>
@@ -470,15 +558,20 @@
                                 :precision="2"
                             /> %
                         </a-form-model-item>
-                        <a-form-model-item v-if="policyOperationForm.advancePay === 0" label="账期" prop="accountingPeriod">
-                            <a-input-number
-                                v-model="policyOperationForm.accountingPeriod"
-                                :precision="0"
-                            /> 天
+                        <a-form-model-item
+                            v-if="policyOperationForm.advancePay === 0"
+                            label="账期"
+                            prop="accountingPeriod"
+                        >
+                            <a-input-number v-model="policyOperationForm.accountingPeriod" :precision="0"/> 天
                         </a-form-model-item>
                         <div v-if="policyOperationForm.advancePay === 0">
-                            <a-form-model-item label="是否第三方垫付" prop="isDianPay" @change="handleIsDianPayChange">
-                                <a-radio-group v-model="policyOperationForm.isDianPay" button-style="solid">
+                            <a-form-model-item label="是否第三方垫付" prop="isDianPay">
+                                <a-radio-group
+                                    v-model="policyOperationForm.isDianPay"
+                                    button-style="solid"
+                                    @change="handleIsDianPayChange"
+                                >
                                     <a-radio-button :value="1">是</a-radio-button>
                                     <a-radio-button :value="0">否</a-radio-button>
                                 </a-radio-group>
@@ -523,9 +616,10 @@
     </div>
 </template>
 <script>
+import moment from 'moment';
+
 import {getAction, postAction} from '@/api/manage';
 import {mapGetters} from 'vuex';
-import moment from 'moment';
 import {urlAcount} from './policy-management-server.js';
 
 export default {
@@ -732,7 +826,8 @@ export default {
                     title: '返点比例',
                     align: 'center',
                     dataIndex: 'rebateRate',
-                    width: 150
+                    width: 150,
+                    scopedSlots: {customRender: 'rebateRate'}
                 },
                 {
                     title: '是否垫付',
@@ -745,13 +840,15 @@ export default {
                     title: '垫付公司',
                     align: 'center',
                     dataIndex: 'dianPayCompanyName',
-                    width: 150
+                    width: 150,
+                    scopedSlots: {customRender: 'dianPayCompanyName'}
                 },
                 {
                     title: '垫付公司返点',
                     align: 'center',
                     dataIndex: 'dianPayCompanyRebateRate',
-                    width: 150
+                    width: 150,
+                    scopedSlots: {customRender: 'dianPayCompanyRebateRate'}
                 },
                 {
                     title: '运营方式',
@@ -771,7 +868,8 @@ export default {
                     title: '备注',
                     align: 'center',
                     dataIndex: 'remarks',
-                    width: 190
+                    width: 190,
+                    scopedSlots: {customRender: 'remarks'}
                 },
                 {
                     title: '操作',
@@ -799,7 +897,7 @@ export default {
                 creativeAdvance: undefined,
                 creativeSale: undefined,
                 creativeOperate: 'no',
-                time: [],
+                time: [moment().subtract(6, 'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')],
                 searchStatus: 'no'
             },
             tablePag: {
@@ -824,6 +922,20 @@ export default {
     methods: {
         ...mapGetters(['userInfo']),
         moment,
+        calculationScope(data) {
+            let defaultScope = '';
+            switch (data) {
+                case 0:
+                    defaultScope = '否';
+                    break;
+                case 1:
+                    defaultScope = '是';
+                    break;
+                default:
+                    defaultScope = '-';
+            }
+            return defaultScope;
+        },
         handleLaunchData(date, dateString) {
             this.configForm.time = dateString;
         },
@@ -991,14 +1103,14 @@ export default {
         handleIsDianPayChange(e) {
             if (e.target.value === 0) {
                 this.policyOperationForm.dianPayCompanyName = '';
-                this.policyOperationForm.dianPayCompanyRebateRate = '';
+                this.policyOperationForm.dianPayCompanyRebateRate = 0;
             }
         },
         handlePrepaidNotChange(e) {
             if (e.target.value === 1) {
                 this.policyOperationForm.accountingPeriod = '';
                 this.policyOperationForm.dianPayCompanyName = '';
-                this.policyOperationForm.dianPayCompanyRebateRate = '';
+                this.policyOperationForm.dianPayCompanyRebateRate = 0;
                 this.policyOperationForm.isDianPay = undefined;
             }
             else if (e.target.value === 0) {
@@ -1174,7 +1286,6 @@ export default {
                     this.handleRejectCancel();
                 }
                 else {
-                    console.log('error submit!!');
                     return false;
                 }
             });
@@ -1262,7 +1373,7 @@ export default {
                 creativeAdvance: undefined,
                 creativeSale: undefined,
                 creativeOperate: 'no',
-                time: [],
+                time: [moment().subtract(6, 'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')],
                 searchStatus: 'no'
             };
             this.tablePag = {

+ 11 - 0
src/views/modules/settlement-account/settlement-account-server.js

@@ -0,0 +1,11 @@
+/**
+ * @file 账户配置API
+ * @author jiayufei
+ */
+
+ export const urlAcount = 'http://api.tjyourong.com.cn'; // 线上
+//  export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
+// export const urlAcount = 'http://192.168.1.43:9999'; // 子安
+//  export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
+// export const urlAcount = 'http://192.168.1.8:9999'; // 学超
+ 

+ 409 - 195
src/views/modules/settlement-account/settlement-account.vue

@@ -12,7 +12,9 @@
                 </span>
             </div>
             <div>
-                <span class="add-acount-policy-btn"><a-button type="primary" @click="handleUploadAccount">上传账户数据</a-button></span>
+                <span v-if="userSaleList.includes(userInfo().roleName)" class="add-acount-policy-btn">
+                    <a-button type="primary" @click="handleUploadAccount">上传账户数据</a-button>
+                </span>
             </div>
         </div>
         <div class="control-con-header">
@@ -28,45 +30,53 @@
                         label="广告主名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.creativeAdvance" placeholder="请输入广告主名称"/>
+                        <a-input v-model="configForm.advertiserName" placeholder="请输入广告主名称" allow-clear/>
                     </a-form-item>
                     <a-form-item
                         class="grid-form-item"
                         label="产品名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.creativeAdvance11" placeholder="请输入产品名称"/>
+                        <a-input v-model="configForm.productName" placeholder="请输入产品名称" allow-clear/>
                     </a-form-item>
                     <a-form-item
                         class="grid-form-item"
                         label="项目名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.creativeAdvance22" placeholder="请输入项目名称"/>
+                        <a-input v-model="configForm.projectName" placeholder="请输入项目名称" allow-clear/>
                     </a-form-item>
                     <a-form-item
                         class="grid-form-item"
                         label="账户名称:"
                         :colon="false"
                     >
-                        <a-input v-model="configForm.creativeAdvance33" placeholder="请输入账户名称"/>
+                        <a-input v-model="configForm.accountName" placeholder="请输入账户名称" allow-clear/>
                     </a-form-item>
                 </a-row>
                 <a-row>
-                    <a-form-item label="销售:">
-                        <a-select v-model="configForm.creativeSale" style="width: 100px">
-                            <a-select-option :value="2">不限</a-select-option>
-                            <a-select-option value="CREATIVE_IMAGE_MODE_VIDEO_VERTICAL">竖版视频</a-select-option>
-                            <a-select-option value="CREATIVE_IMAGE_MODE_LARGE">大图横图</a-select-option>
-                            <a-select-option value="CREATIVE_IMAGE_MODE_LARGE_VERTICAL">大图竖图</a-select-option>
-                            <a-select-option value="CREATIVE_IMAGE_MODE_UNION_SPLASH">开屏</a-select-option>
+                    <a-form-item label="负责人:">
+                        <a-select
+                            v-model="configForm.createUserName"
+                            style="width: 100px"
+                            :filter-option="handleFilterOption"
+                            show-search
+                            allow-clear
+                        >
+                            <a-select-option
+                                v-for="item in allSaleListOption"
+                                :key="item.id"
+                                :value="item.realname"
+                            >
+                                {{ item.realname }}
+                            </a-select-option>
                         </a-select>
                     </a-form-item>
-                    <a-form-item label="负责人:">
-                        <a-select v-model="configForm.creativeMedia" style="width: 100px">
-                            <a-select-option :value="2">不限</a-select-option>
-                            <a-select-option value="CREATIVE_IMAGE_MODE_VIDEO_VERTICAL">快手</a-select-option>
-                            <a-select-option value="CREATIVE_IMAGE_MODE_LARGE">头条</a-select-option>
+                    <a-form-item label="媒体类型:">
+                        <a-select v-model="configForm.mediaId" style="width: 100px">
+                            <a-select-option value="no">不限</a-select-option>
+                            <a-select-option :value="1">头条</a-select-option>
+                            <a-select-option :value="2">快手</a-select-option>
                         </a-select>
                     </a-form-item>
                     <a-form-item
@@ -77,6 +87,7 @@
                         <a-range-picker
                             v-model="configForm.time"
                             format="YYYY-MM-DD"
+                            @change="handleAddTimesChange"
                         />
                     </a-form-item>
                     <a-form-item class="form-handle-btn">
@@ -95,14 +106,45 @@
                 :dataSource="dataSource"
                 :pagination="false"
                 :scroll="{x: 1800}"
+                :loading="controlLoading"
             >
-                <span slot="acountRelax" slot-scope="text, record">
+                <span slot="advertiserName" slot-scope="text">
+                    <a-tooltip placement="top">
+                        <template slot="title">
+                            <span>{{ text }}</span>
+                        </template>
+                        <span>{{ text }}</span>
+                    </a-tooltip>
+                </span>
+                <span slot="productName" slot-scope="text">
+                    <a-tooltip placement="top">
+                        <template slot="title">
+                            <span>{{ text }}</span>
+                        </template>
+                        <span>{{ text }}</span>
+                    </a-tooltip>
+                </span>
+                <span slot="accountName" slot-scope="text">
+                    <a-tooltip placement="top">
+                        <template slot="title">
+                            <span>{{ text }}</span>
+                        </template>
+                        <span>{{ text }}</span>
+                    </a-tooltip>
+                </span>
+                <span slot="mediaId" slot-scope="text">
+                    <span>{{ text === 1 ? '头条' : '快手' }}</span>
+                </span>
+                <span slot="operateType" slot-scope="text">
+                    <span>{{ text === 1 ? '自运营' : '代运营' }}</span>
+                </span>
+                <span slot="status" slot-scope="text, record">
                     <a-switch :checked="text === 0" @change="handleSwitchChang($event, record)"/>
                 </span>
                 <span slot="action" slot-scope="text, record">
                     <a @click="handleSettleDel(record)">删除</a>
                     <a-divider type="vertical"/>
-                    <a>更多</a>
+                    <a disabled>更多</a>
                 </span>
             </a-table>
             <a-pagination
@@ -116,12 +158,13 @@
                 @showSizeChange="onShowSizeChange"
             />
         </div>
-        <!-- 新增、编辑政策 -->
+        <!-- 上传账户数据 -->
         <a-modal
             v-if="policyOperationStatus"
             title="账户上传"
             :visible="policyOperationStatus"
             dialog-class="settlement-modal-class"
+            :confirmLoading="confirmLoading"
             @ok="handlePolicyOperationSure"
             @cancel="handlePolicyOperationCancel"
         >
@@ -134,47 +177,79 @@
                     :label-col="labelCol"
                     :wrapper-col="wrapperCol"
                 >
-                    <a-form-model-item label="选择广告主公司名称" prop="name6">
-                        <a-select v-model="policyOperationForm.name6" placeholder="请选择广告主公司名称">
-                            <a-select-option :value="1">快手</a-select-option>
-                            <a-select-option :value="2">头条</a-select-option>
-                        </a-select>
+                    <a-form-model-item label="选择媒体">
+                        <a-radio-group v-model="policyOperationForm.mediaId" button-style="solid" @change="handleMediaIdChange">
+                            <a-radio-button :value="1">头条</a-radio-button>
+                            <a-radio-button :value="2">快手</a-radio-button>
+                        </a-radio-group>
                     </a-form-model-item>
-                    <a-form-model-item label="选择产品名称" prop="name7">
-                        <a-select v-model="policyOperationForm.name7" placeholder="请选择产品名称">
-                            <a-select-option :value="1">快手</a-select-option>
-                            <a-select-option :value="2">头条</a-select-option>
+                    <a-form-model-item label="选择广告主公司名称" prop="advertiserId">
+                        <a-select
+                            v-model="policyOperationForm.advertiserId"
+                            placeholder="请选择广告主名称"
+                            :filter-option="handleFilterOption"
+                            show-search
+                            @change="handleAdverOptionChange"
+                        >
+                            <a-select-option
+                                v-for="item in allAdverListOption"
+                                :key="item.advertiserId"
+                                :value="item.advertiserId"
+                            >
+                                {{ item.advertiserName }}
+                            </a-select-option>
                         </a-select>
                     </a-form-model-item>
-                    <a-form-model-item label="选择项目名称" prop="name8">
-                        <a-select v-model="policyOperationForm.name8" placeholder="请选择项目名称">
-                            <a-select-option :value="1">快手</a-select-option>
-                            <a-select-option :value="2">头条</a-select-option>
+                    <a-form-model-item label="选择产品名称" prop="productId">
+                        <a-select
+                            v-model="policyOperationForm.productId"
+                            placeholder="请选择产品名称"
+                            :filter-option="handleFilterOption"
+                            show-search
+                            @change="handleProductOptionChange"
+                        >
+                            <a-select-option
+                                v-for="item in allProductListOption"
+                                :key="item.id"
+                                :value="item.id"
+                            >
+                                {{ item.productName }}
+                            </a-select-option>
                         </a-select>
                     </a-form-model-item>
-                    <a-form-model-item label="选择媒体">
-                        <a-radio-group v-model="policyOperationForm.name9" button-style="solid">
-                            <a-radio-button value="a">头条</a-radio-button>
-                            <a-radio-button value="b">快手</a-radio-button>
-                        </a-radio-group>
+                    <a-form-model-item label="选择项目名称" prop="projectId">
+                        <a-select
+                            v-model="policyOperationForm.projectId"
+                            placeholder="请选择产品名称"
+                            :filter-option="handleFilterOption"
+                            show-search
+                        >
+                            <a-select-option
+                                v-for="item in allProjectListOption"
+                                :key="item.id"
+                                :value="item.id"
+                            >
+                                {{ item.projectName }}
+                            </a-select-option>
+                        </a-select>
                     </a-form-model-item>
                     <a-form-model-item label="运营方式">
-                        <a-radio-group v-model="policyOperationForm.name10" button-style="solid">
-                            <a-radio-button value="a">自运营</a-radio-button>
-                            <a-radio-button value="b">代运营</a-radio-button>
+                        <a-radio-group v-model="policyOperationForm.operateType" button-style="solid">
+                            <a-radio-button :value="1">自运营</a-radio-button>
+                            <a-radio-button :value="2">代运营</a-radio-button>
                         </a-radio-group>
                     </a-form-model-item>
                     <a-form-model-item label="附件上传">
                         <a-upload
                             name="file"
-                            :file-list="fileList"
-                            :before-upload="beforeUpload"
-                            @change="handleChange"
+                            :file-list="policyOperationForm.fileList"
+                            :customRequest="handleCustomRequest"
+                            :remove="handleRemoveUpload"
                         >
-                            <a-button><a-icon type="upload" />文件上传</a-button>
+                            <a-button><a-icon type="upload"/>文件上传</a-button>
                         </a-upload>
                         <a class="file-down-title" @click="handleFileDownTitle">文件格式下载</a>
-                        <p class="upload-txt-rules">支持扩展名:.xlxs</p>
+                        <p class="upload-txt-rules">支持扩展名:.xlsx、.xls</p>
                     </a-form-model-item>
                 </a-form-model>
             </div>
@@ -183,67 +258,61 @@
 </template>
 <script>
 import {mapGetters} from 'vuex';
-
-import BMF from 'browser-md5-file';
-let COS = require('cos-js-sdk-v5');
-let cos = new COS({
-    SecretId: 'AKIDE6IpMi8fJQRCg1iuWzFajjRs43kbbets',
-    SecretKey: 'tXzuwMfplTTK3c9GFUyETilasvQfePu9'
-});
+import moment from 'moment';
+import {getAction, postFileAction} from '@/api/manage';
+import {urlAcount} from './settlement-account-server.js';
 
 export default {
     name: 'settlement-account',
     data() {
         return {
-            fileList: [],
+            userSaleList: ['外部销售', '销售总监', '销售', '销售助理', '销售支持经理', '销售AM', '媒介', '管理员'],
+            confirmLoading: false,
+            allProjectListOption: [],
+            allAdverListOption: [],
+            allProductListOption: [],
+            controlLoading: false,
+            allSaleListOption: [],
             labelCol: {span: 7},
             wrapperCol: {span: 14},
             policyOperationForm: {
-                name6: undefined,
-                name7: undefined,
-                name8: undefined,
-                name9: 'a',
-                name10: 'a',
+                advertiserId: undefined,
+                productId: undefined,
+                projectId: undefined,
+                mediaId: 1,
+                operateType: 1,
+                fileList: []
             },
             policyOperationRules: {
-                name6: [{required: true, message: '请选择广告主公司名称', trigger: 'change'}],
-                name7: [{required: true, message: '请选择产品名称', trigger: 'change'}],
-                name8: [{required: true, message: '请选择项目名称', trigger: 'change'}],
+                advertiserId: [{required: true, message: '请选择广告主公司名称', trigger: 'change'}],
+                productId: [{required: true, message: '请选择产品名称', trigger: 'change'}],
+                projectId: [{required: true, message: '请选择项目名称', trigger: 'change'}]
             },
             policyOperationStatus: false,
-            totalAll: 100,
-            dataSource: [
-                {
-                    status: '腾讯科技有限公司', 
-                    accountId_dictText: '腾讯科技有限公司', 
-                    creativeImageMode: '产品名称', 
-                    accountId: '快手', 
-                    createTime: '何甜甜', 
-                    validBalance: '待审核', 
-                    accountBudget: '是', 
-                    adCpaBidStr: '80天',
-                    acountRelax: 0
-                }
-            ],
+            totalAll: 0,
+            dataSource: [],
             settlementColumns: [
                 {
                     title: '广告主主体名称',
                     align: 'center',
-                    dataIndex: 'status',
-                    width: 150
+                    dataIndex: 'advertiserName',
+                    width: 240,
+                    ellipsis: true,
+                    scopedSlots: {customRender: 'advertiserName'}
                 },
                 {
                     title: '产品名称',
                     align: 'center',
-                    dataIndex: 'accountId_dictText',
-                    width: 150,
-                    scopedSlots: {customRender: 'accountId_dictText'}
+                    dataIndex: 'productName',
+                    ellipsis: true,
+                    width: 200,
+                    scopedSlots: {customRender: 'productName'}
                 },
                 {
                     title: '项目名称',
                     align: 'center',
-                    dataIndex: 'creativeImageMode',
-                    width: 150
+                    dataIndex: 'projectName',
+                    width: 180
                 },
                 {
                     title: '账户ID',
@@ -253,36 +322,38 @@ export default {
                 },
                 {
                     title: '账户名称',
-                    dataIndex: 'createTime',
+                    dataIndex: 'accountName',
                     align: 'center',
-                    width: 150
+                    width: 160,
+                    ellipsis: true,
+                    scopedSlots: {customRender: 'accountName'}
                 },
                 {
                     title: '媒体',
-                    dataIndex: 'validBalance',
+                    dataIndex: 'mediaId',
                     align: 'center',
                     width: 150,
-                    scopedSlots: {customRender: 'validBalance'}
+                    scopedSlots: {customRender: 'mediaId'}
                 },
                 {
                     title: '负责人',
-                    dataIndex: 'accountBudget',
+                    dataIndex: 'createUserName',
                     width: 180,
                     align: 'center'
                 },
                 {
                     title: '运营方式',
-                    dataIndex: 'adCpaBidStr',
+                    dataIndex: 'operateType',
                     align: 'center',
                     width: 150,
-                    scopedSlots: {customRender: 'adCpaBidStr'}
+                    scopedSlots: {customRender: 'operateType'}
                 },
                 {
                     title: '账户状态',
                     align: 'center',
-                    dataIndex: 'acountRelax',
+                    dataIndex: 'status',
                     width: 150,
-                    scopedSlots: {customRender: 'acountRelax'}
+                    scopedSlots: {customRender: 'status'}
                 },
                 {
                     title: '操作',
@@ -291,16 +362,16 @@ export default {
                     width: 250,
                     fixed: 'right',
                     scopedSlots: {customRender: 'action'}
-                },
+                }
             ],
             configForm: {
-                creativeAdvance: '',
-                creativeAdvance11: '',
-                creativeAdvance22: '',
-                creativeAdvance33: '',
+                advertiserName: '',
+                productName: '',
+                projectName: '',
+                accountName: '',
                 creativeSale: 2,
-                creativeMedia: 2,
-                time: []
+                mediaId: 'no',
+                time: [moment().subtract(7, 'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')]
             },
             tablePag: {
                 page: 1,
@@ -311,122 +382,235 @@ export default {
     created() {
         this.searchForm = this.$form.createForm(this);
     },
+    mounted() {
+        this.handleInitTable();
+        this.handleGetAllSaleList();
+        this.handleGetAllAdverList(1);
+    },
     methods: {
         ...mapGetters(['userInfo']),
-        // 文件格式下载
-        handleFileDownTitle() {
-            console.log('文件格式下载');
+        moment,
+        handleMediaIdChange(e) {
+            this.policyOperationForm.advertiserId = undefined;
+            this.policyOperationForm.productId = undefined;
+            this.policyOperationForm.projectId = undefined;
+            this.policyOperationForm.operateType = 1;
+            this.policyOperationForm.fileList = [];
+            this.handleGetAllAdverList(e.target.value)
         },
-        beforeUpload(file) {
-            this.cosUpload(file);
+        handleAddTimesChange(date, dateString) {
+            this.configForm.time = dateString;
         },
-        handleMd5(file) {
-            let bmf = new BMF();
-            let that = this;
-            return new Promise(function (resolve, reject) {
-                bmf.md5(file, (err, md5) => {
-                    getAction('kuaishouPopulationPackage/checkPopulationPackage', {signature: md5}).then(result => {
-                        if (result.code === 200) {
-                            that.personNameDisabled = false;
-                            that.personResourceDisabled = false;
-                            resolve();
-                        }
-                        else if (result.code === 201) {
-                            that.$message.error(result.message);
-                            that.personForm.name = result.result.orientationName;
-                            that.personForm.resource = result.result.type;
-                            that.personNameDisabled = true;
-                            that.personResourceDisabled = true;
-                            reject();
-                        }
-                    }).catch(error => {
-                        console.log(error, 'eeee');
-                        reject();
-                    });
-                });
+        handleProductOptionChange(e) {
+            this.policyOperationForm.projectId = undefined;
+            const paramsData = {
+                pageNo: 1,
+                pageSize: 1000,
+                mediaId: this.policyOperationForm.mediaId === 1 ? '1,3' : '2,4',
+                advertiserId: this.policyOperationForm.advertiserId,
+                productId: e
+            };
+            getAction('/ctop/project/list', paramsData).then(result => {
+                if (result.success) {
+                    this.allProjectListOption = result.result.records || [];
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
             });
         },
-        handleChange(info) {
-            this.fileList = info.fileList;
+        handleAdverOptionChange(e) {
+            this.policyOperationForm.productId = undefined;
+            this.policyOperationForm.projectId = undefined;
+            const paramsData = {
+                pageNo: 1,
+                pageSize: 1000,
+                advertiserId: e
+            };
+            getAction('/ctop/product/list', paramsData).then(result => {
+                if (result.success) {
+                    this.allProductListOption = result.result.records || [];
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
         },
-        cosUpload(file) {
-            let that = this;
-            let date = new Date();
-            let y = date.getFullYear();
-            let MM = date.getMonth() + 1;
-            MM = MM < 10 ? '0' + MM : MM;
-            let d = date.getDate();
-            d = d < 10 ? '0' + d : d;
-            let timeElse = new Date().getTime();
-            let arr = file.name.split('.');
-            let str = '';
-            for (let i = 0; i < arr.length; i++) {
-                if (i === arr.length - 1) {
+        handleFilterOption(input, option) {
+            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
+        },
+        // 获取所有的广告主列表
+        handleGetAllAdverList(type) {
+            const paramsData = {
+                userId: this.userInfo().id,
+                mediaId: type,
+                pageNo: 1,
+                pageSize: 1000
+            };
+            getAction('/ctop/projectMember/participateListV3', paramsData).then(result => {
+                if (result.success) {
+                    this.allAdverListOption = result.result || [];
                 }
                 else {
-                    if (i === arr.length - 2) {
-                        str += arr[i];
-                    }
-                    else {
-                        str += arr[i] + '.';
-                    }
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
+        },
+        // 获取所有的媒体 枚举值
+        handleGetAllSaleList() {
+            const paramsData = {
+                userId: this.userInfo().id
+            };
+            getAction(urlAcount + '/finance/settLementController/getResponsibleUserByIds', paramsData).then(result => {
+                if (result.code === 0) {
+                    this.allSaleListOption = result.result || [];
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
+        },
+        // 获取默认的列表数据
+        handleInitTable() {
+            this.controlLoading = true;
+            const paramsData = {
+                createUserId: this.userInfo().id,
+                advertiserName: this.configForm.advertiserName,
+                productName: this.configForm.productName,
+                projectName: this.configForm.projectName,
+                accountName: this.configForm.accountName,
+                createUserName: this.configForm.createUserName,
+                mediaId: this.configForm.mediaId === 'no' ? '' : this.configForm.mediaId,
+                startTime: this.configForm.time[0],
+                endTime: this.configForm.time[1],
+                pageNo: this.tablePag.page,
+                pageSize: this.tablePag.size
+            };
+            getAction(urlAcount + '/finance/settLementController/getSettlementList', paramsData).then(result => {
+                if (result.code === 0) {
+                    let defaultList = result.result.list;
+                    this.dataSource = defaultList;
+                    this.totalAll = result.result.total;
                 }
+                else {
+                    this.dataSource = [];
+                    this.totalAll = 0;
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            }).finally(() => {
+                this.controlLoading = false;
+            });
+        },
+        // 文件格式下载
+        handleFileDownTitle() {
+            const {mediaId} = this.policyOperationForm;
+            if (mediaId === 1) {
+                window.location.href = 'http://media-1301855440.cos.ap-chongqing.myqcloud.com/undefined/2021-08-17/%E5%A4%B4%E6%9D%A1%E8%B4%A6%E6%88%B7%E4%B8%8A%E4%BC%A0%E6%A8%A1%E6%9D%BF-1629185054420.xlsx';
             }
-            cos.putObject(
-                {
-                    Bucket: 'media-1301855440',
-                    Region: 'ap-chongqing',
-                    // 存储桶所在地域,必须字段
-                    Key: that.uploadType + '/' + y + '-' + MM + '-' + d + '/' + str + '-' + timeElse + '.' + arr[arr.length - 1],
-                    StorageClass: 'STANDARD',
-                    Body: file // 上传文件对象
-                },
-                function (err, data) {
-                    if (err) {
-                        that.$message.error('上传失败!!!' + err);
+            else if (mediaId === 2) {
+                window.location.href = 'http://media-1301855440.cos.ap-chongqing.myqcloud.com/undefined/2021-08-17/%E5%BF%AB%E6%89%8B%E8%B4%A6%E6%88%B7%E4%B8%8A%E4%BC%A0%E6%A8%A1%E6%9D%BF-1629185318124.xlsx';
+            }
+        },
+        handleCustomRequest(info) {
+            const isZip = info.file.name.indexOf('xlsx') !== -1 || info.file.name.indexOf('xls') !== -1;
+            if (!isZip) {
+                this.$message.error('上传模板只能是 xls、xlsx格式!');
+                return;
+            }
+            this.policyOperationForm.fileList = [];
+            this.$nextTick(() => {
+                this.policyOperationForm.fileList.push(info.file);
+            });
+        },
+        handleRemoveUpload(data) {
+            let index = this.policyOperationForm.fileList.indexOf(data);
+            let newUploadFile = this.policyOperationForm.fileList;
+            newUploadFile.splice(index, 1);
+            this.policyOperationForm.fileList = newUploadFile;
+        },
+        // 上传确定按钮操作
+        handlePolicyOperationSure() {
+            const {advertiserId, productId, projectId, mediaId, operateType, fileList} = this.policyOperationForm;
+            this.$refs.policyOperationForm.validate(valid => {
+                if (valid) {
+                    if (!fileList.length) {
+                        this.$message.error('请上传文件');
                         return;
                     }
-                    that.loadingElse = false;
-                    that.fileList.push({
-                        uid: file.name,
-                        name: file.name,
-                        status: 'done',
-                        url: '//' + data.Location
+                    let paramsData = new FormData();
+                    paramsData.append('advertiserId', advertiserId);
+                    paramsData.append('productId', productId);
+                    paramsData.append('projectId', projectId);
+                    paramsData.append('mediaId', mediaId);
+                    paramsData.append('operateType', operateType);
+                    paramsData.append('file', fileList[0]);
+                    paramsData.append('createUserId', this.userInfo().id);
+                    this.confirmLoading = true;
+                    postFileAction(urlAcount + '/finance/settLementController/settlementAccountImport', paramsData, {
+                        headers: {
+                            'Content-Type': 'multipart/form-data'
+                        }
+                    }).then(result => {
+                        if (result.code === 0) {
+                            this.$message.success(result.message);
+                            this.handlePolicyOperationCancel();
+                            this.handleInitTable();
+                        }
+                        else {
+                            this.$message.error(result.message);
+                        }
+                    }).catch(error => {
+                        console.log(error, 'eeee');
+                    }).finally(() => {
+                        this.confirmLoading = false;
                     });
-                    if (that.fileList.length > 1) {
-                        that.fileList = that.fileList.slice(-1);
-                    }
-                    const isZip = file.type.includes('xlxs');
-                    const fileOvesize = file.size > (1024 * 1024 * 1024);
-                    if (!isZip) {
-                        that.$message.error('只能上传xlxs格式的文件');
-                        return;
-                    }
-                    if (fileOvesize) {
-                        that.$message.error('文件大小不能超过1G');
-                        return;
-                    }
-                    // that.handleMd5(file);
                 }
-            );
-        },
-        // 上传确定按钮操作
-        handlePolicyOperationSure() {
-            console.log('上传确定按钮操作');
+                else {
+                    return false;
+                }
+            });
         },
         // 上传取消按钮操作
         handlePolicyOperationCancel() {
-            console.log('上传取消按钮操作');
+            this.policyOperationForm = {
+                advertiserId: undefined,
+                productId: undefined,
+                projectId: undefined,
+                mediaId: 1,
+                operateType: 1,
+                fileList: []
+            };
             this.policyOperationStatus = false;
         },
         // 删除操作
         handleSettleDel(list) {
-            console.log(list, '删除操作');
             let that = this;
             this.$confirm({
                 title: '提示',
-                content: '确认删除该条数据',
-                onOk() {}
+                content: '是否确认删除该条数据',
+                onOk() {
+                    getAction(urlAcount + '/finance/settLementController/deleteSettlementById', {id: list.id}).then(result => {
+                        if (result.code === 0) {
+                            that.handleInitTable();
+                            that.$message.success('删除成功');
+                        }
+                        else {
+                            that.$message.error(result.message);
+                        }
+                    }).catch(error => {
+                        console.log(error, 'eeee');
+                    });
+                }
             });
         },
         // 分页操作按钮
@@ -435,24 +619,54 @@ export default {
                 page: current,
                 size: pageSize
             };
-            // this.handleInitTable();
+            this.handleInitTable();
         },
         // table 开关 操作按钮
         handleSwitchChang(checked, data) {
-            console.log(checked, data, '------');
+            const paramsData = {
+                id: data.id,
+                status: checked ? 0 : 1
+            };
+            getAction(urlAcount + '/finance/settLementController/updSettlementStatusById', paramsData).then(result => {
+                if (result.code === 0) {
+                    this.$message.success(result.message);
+                    this.handleInitTable();
+                }
+                else {
+                    this.$message.error(result.message);
+                }
+            }).catch(error => {
+                console.log(error, 'eeee');
+            });
         },
         // 账户上传按钮
         handleUploadAccount() {
-            console.log('上传账户数据');
             this.policyOperationStatus = true;
         },
         // 查询的按钮
         handleQueryList() {
-            console.log(this.configForm, '搜索的按钮');
+            this.tablePag = {
+                page: 1,
+                size: 10
+            };
+            this.handleInitTable();
         },
         // 重置的按钮
         handleResetList() {
-            console.log(this.configForm, '重置的按钮');
+            this.configForm = {
+                advertiserName: '',
+                productName: '',
+                projectName: '',
+                accountName: '',
+                creativeSale: 2,
+                mediaId: 'no',
+                time: [moment().subtract(7, 'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')]
+            };
+            this.tablePag = {
+                page: 1,
+                size: 10
+            };
+            this.handleInitTable();
         }
     }
 };

+ 2 - 2
src/views/modules/settlement-information/settlement-information-server.js

@@ -3,9 +3,9 @@
  * @author jiayufei
  */
 
-//  export const urlAcount = 'http://118.24.244.213:8808'; // 线上
+ export const urlAcount = 'http://api.tjyourong.com.cn'; // 线上
 //  export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
- // export const urlAcount = 'http://192.168.1.43:8808'; // 子安
+//  export const urlAcount = 'http://192.168.1.43:9999'; // 子安
 //  export const urlAcount = 'http://gateway.tjyourong.com.cn'; // 测试
 // export const urlAcount = 'http://192.168.1.8:9999'; // 学超
  

+ 1 - 1
src/views/modules/settlement-information/settlement-information.less

@@ -46,7 +46,7 @@
     }
 }
 /deep/ .information-modal-class {
-    width: 700px !important;
+    width: 750px !important;
     .upload-txt-rules {
         margin: 0;
     }

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 597 - 172
src/views/modules/settlement-information/settlement-information.vue


+ 2 - 2
src/views/modules/user-manage-operation/user-manage-operation-server.js

@@ -5,6 +5,6 @@
 
  export const urlAcount = 'http://118.24.244.213:8808'; // 线上
  // export const urlAcount = 'http://apipre.tjyourong.com.cn'; // 预生产
-//  export const urlAcount = 'http://192.168.1.43:8080'; // 子安
+//  export const urlAcount = 'http://192.168.1.43:'; // 子安
 //  export const urlAcount = 'http://139.186.165.84:8808'; // 测试
-//  export const urlAcount = 'http://192.168.1.8:8080'; // 学超
+//  export const urlAcount = 'http://192.168.1.8:9999'; // 学超

+ 77 - 50
vue.config.js

@@ -1,5 +1,6 @@
 const path = require('path')
-
+const CompressionPlugin = require('compression-webpack-plugin')
+const TerserPlugin = require("terser-webpack-plugin");
 function resolve(dir) {
   return path.join(__dirname, dir)
 }
@@ -22,7 +23,32 @@ module.exports = {
     }
   },
   */
-  configureWebpack: {},
+  configureWebpack: config => {
+    if (process.env.NODE_ENV === 'production') {
+      return {
+        plugins: [new CompressionPlugin({
+          test: /\.js$|\.html$|\.css/,
+          threshold: 10240,
+          deleteOriginalAssets: false
+        }), new TerserPlugin({
+          cache: true,//降版本后添加
+          sourceMap: false,//降版本后添加
+          // 多进程
+          parallel: true,//降版本后添加
+          terserOptions: {
+            ecma: undefined,
+            warnings: false,
+            parse: {},
+            compress: {
+              drop_console: true,
+              drop_debugger: false,
+              pure_funcs: ['console.log'], // 移除console
+            },
+          },
+        }),]
+      }
+    }
+  },
 
   chainWebpack: (config) => {
     config.resolve.alias
@@ -33,7 +59,8 @@ module.exports = {
       .set('@comp', resolve('src/components'))
       .set('@views', resolve('src/views'))
       .set('@layout', resolve('src/layout'))
-      .set('@static', resolve('src/static'))
+      .set('@static', resolve('src/static'));
+    config.plugins.delete('prefetch')
   },
   pluginOptions: {
     'style-resources-loader': {
@@ -61,58 +88,58 @@ module.exports = {
     }
   },
 
-	devServer: {
-		hot:true,
-		// inline: true,
-		port: 8080,
-		open : true,
-		proxy: {
-			'/jeecg-boot': {
-				// target: 'http://192.168.1.8:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
-				// target: 'http://192.168.1.3:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+  devServer: {
+    hot: true,
+    // inline: true,
+    port: 3000,
+    open: true,
+    proxy: {
+      '/jeecg-boot': {
+        // target: 'http://192.168.1.8:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
+        // target: 'http://192.168.1.3:8080', //请求本地 需要jeecg-boot后台项目  蒙蒙
         // target: 'http://192.168.1.3:7001', //请求本地 需要jeecg-boot后台项目  蒙蒙
-				// target: 'http://192.168.0.59:8088', //请求本地 需要jeecg-boot后台项目  英豪
-				// target: 'http://192.168.1.62:7001', //请求本地 需要jeecg-boot后台项目  英豪
-				// target: 'http://192.168.6.162:9806', //请求本地 需要jeecg-boot后台项目  祚云
-				// target: 'http://192.168.1.43:8098', //请求本地 需要jeecg-boot后台项目  毕洁泉
-				// target: 'http://192.168.1.43:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉
-				// target: 'http://192.168.1.43:8806', //请求本地 需要jeecg-boot后台项目  毕洁泉
-				// target: 'http://192.168.0.252:8098', //请求本地 需要jeecg-boot后台项目  毕洁泉
-				// target: 'http://192.168.1.219:8081', //请求本地 需要jeecg-boot后台项目  赵西安
-				// target: 'http://192.168.1.193:8080', //请求本地 需要jeecg-boot后台项目  李煜一
-				// target: 'http://192.168.1.193:31012', //请求本地 需要jeecg-boot后台项目  李煜一
-				//  target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
-				// target: 'https://trac.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
-				// target: 'http://39.106.184.70:8088/', //请求本地 需要jeecg-boot后台项目
-				//  target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要jeecg-boot后台项目
-				// target: 'http://192.168.1.251/', //请求本地 需要jeecg-boot后台项目
-				// target:'http://118.24.244.213:8804',
-				// target: 'http://192.168.1.43:9090', // 子安
-				// target: 'http://192.168.1.8:9999', // 学超
-				target:'http://gateway.tjyourong.com.cn', //测试
-				// target:'http://apipre.tjyourong.com.cn', //预生产
-        // target: 'http://192.168.1.134:8080', //请求本地 需要jeecg-boot后台项目  周泽宇
+        // target: 'http://192.168.0.59:8088', //请求本地 需要jeecg-boot后台项目  英豪
+        // target: 'http://192.168.1.62:7001', //请求本地 需要jeecg-boot后台项目  英豪
+        // target: 'http://192.168.6.162:9806', //请求本地 需要jeecg-boot后台项目  祚云
+        // target: 'http://192.168.1.43:8098', //请求本地 需要jeecg-boot后台项目  毕洁泉
+        // target: 'http://192.168.1.43:8088', //请求本地 需要jeecg-boot后台项目  毕洁泉
+        // target: 'http://192.168.1.43:8806', //请求本地 需要jeecg-boot后台项目  毕洁泉
+        // target: 'http://192.168.0.252:8098', //请求本地 需要jeecg-boot后台项目  毕洁泉
+        // target: 'http://192.168.1.219:8081', //请求本地 需要jeecg-boot后台项目  赵西安
+        // target: 'http://192.168.1.193:8080', //请求本地 需要jeecg-boot后台项目  李煜一
+        // target: 'http://192.168.1.193:31012', //请求本地 需要jeecg-boot后台项目  李煜一
+        // target: 'http://api.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
+        // target: 'https://trac.tjyourong.com.cn', //请求本地 需要jeecg-boot后台项目
+        // target: 'http://39.106.184.70:8088/', //请求本地 需要jeecg-boot后台项目
+        //  target: 'http://adsp.tjyourong.com.cn/', //请求本地 需要jeecg-boot后台项目
+        // target: 'http://192.168.1.251/', //请求本地 需要jeecg-boot后台项目
+        // target:'http://118.24.244.213:8804',
+        // target: 'http://192.168.1.43:9999', // 子安
+        // target: 'http://192.168.1.8:8806', // 学超
+        // target:'http://gateway.tjyourong.com.cn', //测试
+        // target:'http://apipre.tjyourong.com.cn', //预生产
+        target: 'http://192.168.1.134:7001', //请求本地 需要jeecg-boot后台项目  周泽宇
 
         // target:'http://gateway.tjyourong.com.cn/',//测试
 
-				ws: false,
+        ws: false,
 
-				// changeOrigin: true,
-				// pathRewrite: {
-				//     '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
-				// }
-			},
-		},
-		// before(app) {
-		//     app.get('/seller', (req, res) => {
-		//         res.json({
-		//           errno: 0,
-		//           data: appData
-		//         })//接口返回json数据,上面配置的数据seller就赋值给data请求后调用
-		//     })
-		// }
-	},
+        // changeOrigin: true,
+        // pathRewrite: {
+        //     '/jeecg-boot': ''  //默认所有请求都加了jeecg-boot前缀,需要去掉
+        // }
+      },
+    },
+    // before(app) {
+    //     app.get('/seller', (req, res) => {
+    //         res.json({
+    //           errno: 0,
+    //           data: appData
+    //         })//接口返回json数据,上面配置的数据seller就赋值给data请求后调用
+    //     })
+    // }
+  },
 
   lintOnSave: undefined,
-//   publicPath:'./',
+  //   publicPath:'./',
 }