Browse Source

Merge branch 'dev'

# Conflicts:
#	dist/200.html
#	dist/_nuxt/036ce61.js
#	dist/_nuxt/0422993.js
#	dist/_nuxt/052940c.js
#	dist/_nuxt/06e61b2.js
#	dist/_nuxt/0d23516.js
#	dist/_nuxt/165b4b3.js
#	dist/_nuxt/16ed0f4.js
#	dist/_nuxt/170fa65.js
#	dist/_nuxt/1909ee5.js
#	dist/_nuxt/19db801.js
#	dist/_nuxt/28b4d66.js
#	dist/_nuxt/34ed62f.js
#	dist/_nuxt/3652a7f.js
#	dist/_nuxt/389f7bb.js
#	dist/_nuxt/3c6f512.js
#	dist/_nuxt/3ff02b7.js
#	dist/_nuxt/41df04f.js
#	dist/_nuxt/43fd403.js
#	dist/_nuxt/4578138.js
#	dist/_nuxt/479490d.js
#	dist/_nuxt/4b23da5.js
#	dist/_nuxt/4c29dfae5501265d7793.js
#	dist/_nuxt/512a15c.js
#	dist/_nuxt/53d22c0.js
#	dist/_nuxt/6ad811f.js
#	dist/_nuxt/6e8760f.js
#	dist/_nuxt/723c033.js
#	dist/_nuxt/7486683.js
#	dist/_nuxt/79e9362.js
#	dist/_nuxt/7b8408e.js
#	dist/_nuxt/7be631e.js
#	dist/_nuxt/7c1c6d6.js
#	dist/_nuxt/7cb989f.js
#	dist/_nuxt/8295491.js
#	dist/_nuxt/85dc148.js
#	dist/_nuxt/89bdddb.js
#	dist/_nuxt/8d3373a.js
#	dist/_nuxt/94d8322.js
#	dist/_nuxt/9703729.js
#	dist/_nuxt/9875f26.js
#	dist/_nuxt/99151c435603e32afcf2.js
#	dist/_nuxt/995e580.js
#	dist/_nuxt/9970f52.js
#	dist/_nuxt/9acb88d.js
#	dist/_nuxt/9c3664a.js
#	dist/_nuxt/a0341a6.js
#	dist/_nuxt/a48406ae733a08fc8172.js
#	dist/_nuxt/ae7c841.js
#	dist/_nuxt/afe5a16.js
#	dist/_nuxt/ca678fd.js
#	dist/_nuxt/caaf650.js
#	dist/_nuxt/ceb9919.js
#	dist/_nuxt/e6d7582.js
#	dist/_nuxt/e783336.js
#	dist/_nuxt/e7e81a7.js
#	dist/_nuxt/e86efc9.js
#	dist/_nuxt/ec116e5.js
#	dist/_nuxt/ef93a5e.js
#	dist/_nuxt/f456872.js
#	dist/_nuxt/f64627d.js
#	dist/_nuxt/f7c179f.js
#	dist/_nuxt/f82ad52.js
#	dist/_nuxt/f8542f8.js
#	dist/_nuxt/f87e584.js
#	dist/_nuxt/fa33e94.js
#	dist/_nuxt/fe829da.js
#	dist/index.html
#	dist/login/index.html
#	dist/main/404/index.html
#	dist/main/account_manager/index.html
#	dist/main/admin_user/index.html
#	dist/main/artificial_order/index.html
#	dist/main/artificial_orders/index.html
#	dist/main/balance_change/index.html
#	dist/main/cancel_account/index.html
#	dist/main/card_conf/index.html
#	dist/main/cash_form/index.html
#	dist/main/cats/index.html
#	dist/main/cert_check/index.html
#	dist/main/cert_edit/index.html
#	dist/main/cert_pro/index.html
#	dist/main/chat_users/index.html
#	dist/main/cloud_balance/index.html
#	dist/main/cloud_developer/index.html
#	dist/main/cloud_job/index.html
#	dist/main/company_vip/index.html
#	dist/main/cps_manage/index.html
#	dist/main/cunxinbao/index.html
#	dist/main/dev_check/index.html
#	dist/main/dev_check_detail/index.html
#	dist/main/dev_show/index.html
#	dist/main/free_work/index.html
#	dist/main/gongmall/index.html
#	dist/main/group/index.html
#	dist/main/group_list/index.html
#	dist/main/index.html
#	dist/main/invoice_audit/index.html
#	dist/main/jishuquan/index.html
#	dist/main/job/index.html
#	dist/main/jobs/index.html
#	dist/main/jobs_behalf_post/index.html
#	dist/main/jobs_publish_company/index.html
#	dist/main/js/admin_user/index.html
#	dist/main/js/group/index.html
#	dist/main/js/sale/index.html
#	dist/main/js/sale_order/index.html
#	dist/main/js/user_workfile_list/index.html
#	dist/main/kaifabao/index.html
#	dist/main/kaifawu_contact/index.html
#	dist/main/occupation_setting/index.html
#	dist/main/orders/index.html
#	dist/main/orders_detail/index.html
#	dist/main/orders_frozen/index.html
#	dist/main/outsource_bill/index.html
#	dist/main/persona/index.html
#	dist/main/present_job_apply/index.html
#	dist/main/project_form/index.html
#	dist/main/publish_present/index.html
#	dist/main/publish_recruit/index.html
#	dist/main/qingtuanbao/index.html
#	dist/main/quick_manage/index.html
#	dist/main/recruit_manage/index.html
#	dist/main/recuit_purchase_conf/index.html
#	dist/main/remark_list/index.html
#	dist/main/report_business/index.html
#	dist/main/report_cash/index.html
#	dist/main/sale/index.html
#	dist/main/sale_detail/index.html
#	dist/main/sale_order/index.html
#	dist/main/solution/index.html
#	dist/main/solution_detail/index.html
#	dist/main/solution_manage/index.html
#	dist/main/stats/index.html
#	dist/main/user_bills/index.html
#	dist/main/user_cards_list/index.html
#	dist/main/user_credit_item/index.html
#	dist/main/user_credit_list/index.html
#	dist/main/user_credit_setting/index.html
#	dist/main/user_homepwd/index.html
#	dist/main/user_namecard/index.html
#	dist/main/user_search/index.html
#	dist/main/user_workfile_list/index.html
#	dist/main/vip_info/index.html
#	dist/main/vip_manager/index.html
#	dist/main/vip_order/index.html
#	dist/main/vip_setting/index.html
#	dist/main/wage_details/index.html
#	dist/main/wage_settlement/index.html
#	dist/main/wait_expend/index.html
#	dist/main/weight_restore/index.html
#	dist/main/withdraw/index.html
#	dist/main/work_bill/index.html
#	dist/main/work_statistics/index.html
#	dist/main/workorder/index.html
liyangzhi 4 years ago
parent
commit
a315769de0
100 changed files with 946 additions and 7 deletions
  1. 7 0
      assets/js/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js
  2. 20 0
      assets/js/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js
  3. 1 0
      assets/js/aliyun-upload-sdk/lib/es6-promise.min.js
  4. 7 0
      components/videoUpload/lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js
  5. 20 0
      components/videoUpload/lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js
  6. 1 0
      components/videoUpload/lib/aliyun-upload-sdk/lib/es6-promise.min.js
  7. 80 0
      components/videoUpload/src/App.vue
  8. 213 0
      components/videoUpload/src/STSToken.vue
  9. 222 0
      components/videoUpload/src/UploadAuth.vue
  10. 225 0
      components/videoUpload/src/UploadAuth3.vue
  11. 21 0
      components/videoUpload/src/index.html
  12. 29 0
      components/videoUpload/src/main.js
  13. 4 4
      dist/200.html
  14. 1 0
      dist/_nuxt/036ce61.js
  15. 1 0
      dist/_nuxt/0422993.js
  16. 1 0
      dist/_nuxt/051da56.js
  17. 1 0
      dist/_nuxt/052940c.js
  18. 1 0
      dist/_nuxt/06e61b2.js
  19. 1 0
      dist/_nuxt/094b0b3.js
  20. 1 0
      dist/_nuxt/0d23516.js
  21. 2 0
      dist/_nuxt/1441f0e.js
  22. 1 0
      dist/_nuxt/165b4b3.js
  23. 1 0
      dist/_nuxt/16bb196.js
  24. 1 0
      dist/_nuxt/16ed0f4.js
  25. 1 0
      dist/_nuxt/170fa65.js
  26. 1 0
      dist/_nuxt/1909ee5.js
  27. 1 0
      dist/_nuxt/19db801.js
  28. 1 0
      dist/_nuxt/1c62e3a.js
  29. 1 0
      dist/_nuxt/1fb57f7.js
  30. 1 0
      dist/_nuxt/2844f26.js
  31. 1 0
      dist/_nuxt/28b2e9a.js
  32. 1 0
      dist/_nuxt/28b4d66.js
  33. 1 0
      dist/_nuxt/2b1bedf.js
  34. 1 0
      dist/_nuxt/3252bd4.js
  35. 1 0
      dist/_nuxt/34ed62f.js
  36. 1 0
      dist/_nuxt/3652a7f.js
  37. 1 0
      dist/_nuxt/389f7bb.js
  38. 1 0
      dist/_nuxt/3c6f512.js
  39. 1 0
      dist/_nuxt/3c90b43.js
  40. 1 0
      dist/_nuxt/3ff02b7.js
  41. 1 0
      dist/_nuxt/4109617.js
  42. 1 0
      dist/_nuxt/41df04f.js
  43. 1 0
      dist/_nuxt/43a5441.css
  44. 1 0
      dist/_nuxt/43fd403.js
  45. 1 0
      dist/_nuxt/4578138.js
  46. 1 0
      dist/_nuxt/479490d.js
  47. 2 0
      dist/_nuxt/49f924e.js
  48. 1 0
      dist/_nuxt/4b23da5.js
  49. 0 1
      dist/_nuxt/4c29dfae5501265d7793.js
  50. 1 0
      dist/_nuxt/4de955d.js
  51. 1 0
      dist/_nuxt/512a15c.js
  52. 1 0
      dist/_nuxt/51393dc.js
  53. 1 0
      dist/_nuxt/53d22c0.js
  54. 1 0
      dist/_nuxt/55d8d75.css
  55. 1 0
      dist/_nuxt/5700a26.js
  56. 1 0
      dist/_nuxt/5de834b.css
  57. 1 0
      dist/_nuxt/6ca8737.js
  58. 1 0
      dist/_nuxt/6cc19df.js
  59. 1 0
      dist/_nuxt/6cf340a.js
  60. 1 0
      dist/_nuxt/6e8760f.js
  61. 1 0
      dist/_nuxt/6ffcbae.js
  62. 1 0
      dist/_nuxt/723c033.js
  63. 1 0
      dist/_nuxt/7486683.js
  64. 1 0
      dist/_nuxt/79e9362.js
  65. 1 0
      dist/_nuxt/7b8408e.js
  66. 1 0
      dist/_nuxt/7be631e.js
  67. 1 0
      dist/_nuxt/7c1c6d6.js
  68. 1 0
      dist/_nuxt/7cb989f.js
  69. 1 0
      dist/_nuxt/7e960bd.js
  70. 1 0
      dist/_nuxt/7f775a5.js
  71. 1 0
      dist/_nuxt/8295491.js
  72. 1 0
      dist/_nuxt/89bdddb.js
  73. 1 0
      dist/_nuxt/8bf7a24.css
  74. 1 0
      dist/_nuxt/8d3373a.js
  75. 1 0
      dist/_nuxt/94d8322.js
  76. 1 0
      dist/_nuxt/9703729.js
  77. 1 0
      dist/_nuxt/9875f26.js
  78. 0 1
      dist/_nuxt/99151c435603e32afcf2.js
  79. 1 0
      dist/_nuxt/995e580.js
  80. 1 0
      dist/_nuxt/996e908.css
  81. 1 0
      dist/_nuxt/9970f52.js
  82. 1 0
      dist/_nuxt/9acb88d.js
  83. 1 0
      dist/_nuxt/9c3664a.js
  84. 1 0
      dist/_nuxt/9d38f0c.js
  85. 8 0
      dist/_nuxt/LICENSES
  86. 1 0
      dist/_nuxt/a0341a6.js
  87. 1 0
      dist/_nuxt/a0d1aa4.js
  88. 1 0
      dist/_nuxt/a3d682d.js
  89. 1 0
      dist/_nuxt/a3dd612.js
  90. 0 1
      dist/_nuxt/a48406ae733a08fc8172.js
  91. 1 0
      dist/_nuxt/ac9bd5b.js
  92. 1 0
      dist/_nuxt/ae7c841.js
  93. 1 0
      dist/_nuxt/afe5a16.js
  94. 1 0
      dist/_nuxt/c927b48.js
  95. 1 0
      dist/_nuxt/ca678fd.js
  96. 1 0
      dist/_nuxt/caaf650.js
  97. 5 0
      dist/_nuxt/ceb9919.js
  98. 1 0
      dist/_nuxt/d36bfea.js
  99. 1 0
      dist/_nuxt/decd808.js
  100. 0 0
      dist/_nuxt/e3c1d6b.js

File diff suppressed because it is too large
+ 7 - 0
assets/js/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js


File diff suppressed because it is too large
+ 20 - 0
assets/js/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js


File diff suppressed because it is too large
+ 1 - 0
assets/js/aliyun-upload-sdk/lib/es6-promise.min.js


File diff suppressed because it is too large
+ 7 - 0
components/videoUpload/lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js


File diff suppressed because it is too large
+ 20 - 0
components/videoUpload/lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js


File diff suppressed because it is too large
+ 1 - 0
components/videoUpload/lib/aliyun-upload-sdk/lib/es6-promise.min.js


+ 80 - 0
components/videoUpload/src/App.vue

@@ -0,0 +1,80 @@
+<template>
+  <div class="uploader">
+    <div class="upload-type-switch">
+      <input type="radio" id="one" value="one" v-model="picked">
+      <label for="one" style="margin-right: 100px;">使用 UploadAuth 上传</label>
+      <input type="radio" id="two" value="two" v-model="picked">
+      <label for="two">使用 STSToken 上传</label>
+    </div>
+    <UploadAuth v-show="picked === 'one'" />
+    <STSToken v-show="picked === 'two'" />
+  </div>
+</template>
+<script>
+  import axios from 'axios'
+  import STSToken from './STSToken'
+  import UploadAuth from './UploadAuth'
+
+  export default {
+    components: {
+      STSToken,
+      UploadAuth
+    },
+    data () {
+      return {
+        picked: 'one'
+      }
+    }
+  }
+</script>
+<style>
+  .upload-type-switch {
+    text-align: center;
+  }
+  .container {
+    width: 1200px;
+    margin: 0 auto;
+  }
+  .input-control {
+    margin: 5px 0;
+  }
+  .input-control label {
+    font-size: 14px;
+    color: #333;
+    width: 30%;
+    text-align: right;
+    display: inline-block;
+    vertical-align: middle;
+    margin-right: 10px;
+  }
+  .input-control input {
+    width: 30%;
+    height: 30px;
+    padding: 0 5px;
+  }
+  .upload {
+    padding: 30px 50px;
+  }
+  .progress {
+    font-size: 14px;
+  }
+  .progress i {
+    font-style: normal;
+  }
+  .upload-type {
+    color: #666;
+    font-size: 12px;
+    padding: 10px 0;
+  }
+  .upload-type button {
+    margin: 0 10px 0 20px;
+  }
+  .status {
+    font-size: 14px;
+    margin-left: 30px;
+  }
+  .info {
+    font-size: 14px;
+    padding-left: 30px;
+  }
+</style>

+ 213 - 0
components/videoUpload/src/STSToken.vue

@@ -0,0 +1,213 @@
+<template>
+  <div class="container">
+    <div class="setting">
+      <div class="input-control">
+        <label for="timeout">请求过期时间(构造参数 timeout, 默认 60000):</label>
+        <input type="text" id="timeout" v-model="timeout" placeholder="输入过期时间, 单位毫秒">
+      </div>
+
+      <div class="input-control">
+        <label for="partSize">分片大小(构造参数 partSize, 默认 1048576):</label>
+        <input type="text" class="form-control" id="partSize" v-model="partSize" placeholder="输入分片大小, 单位bit, 最小100k">
+      </div>
+
+      <div class="input-control">
+        <label for="parallel">上传分片数(构造参数 parallel, 默认 5):</label>
+        <input type="text" class="form-control" id="parallel" v-model="parallel" placeholder="输入并行上传分片个数, 默认为5">
+      </div>
+
+      <div class="input-control">
+        <label for="retryCount">网络失败重试次数(构造参数 retryCount, 默认 3):</label>
+        <input type="text" class="form-control" id="retryCount" v-model="retryCount" placeholder="输入网络失败重试次数, 默认为3">
+      </div>
+
+      <div class="input-control">
+        <label for="retryDuration">网络失败重试间隔(构造参数 retryDuration, 默认 2):</label>
+        <input type="text" class="form-control" id="retryDuration" v-model="retryDuration" placeholder="输入网络失败重试间隔, 默认2秒">
+      </div>
+
+      <div class="input-control">
+        <label for="region">配置项 region, 默认 cn-shanghai:</label>
+        <select v-model="region">
+          <option>cn-shanghai</option>
+          <option>eu-central-1</option>
+          <option>ap-southeast-1</option>
+        </select>
+      </div>
+
+      <div class="input-control">
+        <label for="userId">阿里云账号ID</label>
+        <input type="text" class="form-control" v-model="userId" disabled placeholder="输入阿里云账号ID">
+        userId必填,只需要有值即可
+      </div>
+
+    </div>
+
+    <div class="upload">
+      <div>
+        <input type="file" id="fileUpload" @change="fileChange($event)">
+        <label class="status">上传状态: <span>{{statusText}}</span></label>
+      </div>
+      <div class="upload-type">
+        上传方式二, 使用 STSToken 上传:
+        <button @click="stsUpload" :disabled="uploadDisabled">开始上传</button>
+        <button @click="pauseUpload" :disabled="pauseDisabled">暂停</button>
+        <button :disabled="resumeDisabled" @click="resumeUpload">恢复上传</button>
+        <span class="progress">上传进度: <i id="sts-progress">{{stsProgress}}</i> %</span>
+      </div>
+    </div>
+    <div class="info">点播STS参数如何获取,请查阅<a href="https://help.aliyun.com/document_detail/57114.html" target="_blakn">获取STS</a></div>
+  </div>
+</template>
+<script>
+  import axios from 'axios'
+
+  export default {
+    data () {
+      return {
+        timeout: '',
+        partSize: '',
+        parallel: '',
+        retryCount: '',
+        retryDuration: '',
+        region: 'cn-shanghai',
+        userId: '1303984639806000',        
+        file: null,
+        stsProgress: 0,
+        uploadDisabled: true,
+        resumeDisabled: true,
+        pauseDisabled: true,
+        statusText: '',
+        pauseDisabled: true,
+        uploader: null
+      }
+    },
+    methods: {
+      fileChange (e) {
+        this.file = e.target.files[0]
+        if (!this.file) {
+          alert("请先选择需要上传的文件!")
+          return
+        }
+        var Title = this.file.name
+        var userData = '{"Vod":{}}'
+        if (this.uploader) {
+          this.uploader.stopUpload()
+          this.authProgress = 0
+          this.statusText = ""
+        }
+        this.uploader = this.createUploader()
+        // 首先调用 uploader.addFile(event.target.files[i], null, null, null, userData)
+        console.log(userData)
+        this.uploader.addFile(this.file, null, null, null, userData)
+        this.uploadDisabled = false
+        this.pauseDisabled = true
+        this.resumeDisabled = false
+      },
+      // 开始上传
+      stsUpload () {
+        // 然后调用 startUpload 方法, 开始上传
+        if (this.uploader !== null) {
+          this.uploader.startUpload()
+          this.uploadDisabled = true
+          this.pauseDisabled = false
+        }
+      },
+      // 暂停上传
+      pauseUpload () {
+        if (this.uploader !== null) {
+          this.uploader.stopUpload()
+          this.resumeDisabled = false
+          this.pauseDisabled = true
+        }
+      },
+      // 恢复上传
+      resumeUpload () {
+        if (this.uploader !== null) {
+          this.uploader.startUpload()
+          this.resumeDisabled = true
+          this.pauseDisabled = false
+        }
+      },
+      createUploader () {
+        let self = this
+        let uploader = new AliyunUpload.Vod({
+          timeout: self.timeout || 60000,
+          partSize: self.partSize || 1048576,
+          parallel: self.parallel || 5,
+          retryCount: self.retryCount || 3,
+          retryDuration: self.retryDuration || 2,
+          region: self.region,
+          userId: self.userId,
+          // 添加文件成功
+          addFileSuccess: function (uploadInfo) {
+            self.uploadDisabled = false
+            self.resumeDisabled = false
+            self.statusText = '添加文件成功, 等待上传...'
+            console.log("addFileSuccess: " + uploadInfo.file.name)
+          },
+          // 开始上传
+          onUploadstarted: function (uploadInfo) {
+            // 如果是 STSToken 上传方式, 需要调用 uploader.setUploadAuthAndAddress 方法
+            // 用户需要自己获取 accessKeyId, accessKeySecret,secretToken
+            // 下面的 URL 只是测试接口, 用于获取 测试的 accessKeyId, accessKeySecret,secretToken
+            let stsUrl = 'http://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateSecurityToken?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=67999yyuuuy&AppVersion=1.0.0'
+            axios.get(stsUrl).then(({data}) => {
+              let info = data.SecurityTokenInfo
+              let accessKeyId = info.AccessKeyId
+              let accessKeySecret = info.AccessKeySecret
+              let secretToken = info.SecurityToken
+              uploader.setSTSToken(uploadInfo, accessKeyId, accessKeySecret, secretToken)
+            })
+            self.statusText = '文件开始上传...'
+            console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
+          },
+          // 文件上传成功
+          onUploadSucceed: function (uploadInfo) {
+            console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
+            self.statusText = '文件上传成功!'
+          },
+          // 文件上传失败
+          onUploadFailed: function (uploadInfo, code, message) {
+            console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
+            self.statusText = '文件上传失败!'
+          },
+          // 取消文件上传
+          onUploadCanceled: function (uploadInfo, code, message) {
+            console.log("Canceled file: " + uploadInfo.file.name + ", code: " + code + ", message:" + message)
+            self.statusText = '文件已暂停上传'
+          },
+          // 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上
+          onUploadProgress: function (uploadInfo, totalSize, progress) {
+            console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%")
+            let progressPercent = Math.ceil(progress * 100)
+            self.stsProgress = progressPercent
+            self.statusText = '文件上传中...'
+          },
+          // 上传凭证超时
+          onUploadTokenExpired: function (uploadInfo) {
+            // 如果是上传方式二即根据 STSToken 实现时,从新获取STS临时账号用于恢复上传
+            // 上传文件过大时可能在上传过程中 sts token 就会失效, 所以需要在 token 过期的回调中调用 resumeUploadWithSTSToken 方法
+            // 这里是测试接口, 所以我直接获取了 STSToken
+            let stsUrl = 'http://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateSecurityToken?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=67999yyuuuy&AppVersion=1.0.0'
+            axios.get(stsUrl).then(({data}) => {
+              let info = data.SecurityTokenInfo
+              let accessKeyId = info.AccessKeyId
+              let accessKeySecret = info.AccessKeySecret
+              let secretToken = info.SecurityToken
+              let expiration = info.Expiration
+              uploader.resumeUploadWithSTSToken(accessKeyId, accessKeySecret, secretToken, expiration)
+            })
+            self.statusText = '文件超时...'
+          },
+          // 全部文件上传结束
+          onUploadEnd: function (uploadInfo) {
+            console.log("onUploadEnd: uploaded all the files")
+            self.statusText = '文件上传完毕'
+          }
+        })
+        return uploader
+      }
+    }
+  }
+</script>

+ 222 - 0
components/videoUpload/src/UploadAuth.vue

@@ -0,0 +1,222 @@
+<template>
+  <div class="container">
+    <div class="setting">
+      <div class="input-control">
+        <label for="timeout">请求过期时间(构造参数 timeout, 默认 60000):</label>
+        <input type="text" id="timeout" v-model="timeout" placeholder="输入过期时间, 单位毫秒">
+      </div>
+
+      <div class="input-control">
+        <label for="partSize">分片大小(构造参数 partSize, 默认 1048576):</label>
+        <input type="text" class="form-control" id="partSize" v-model="partSize" placeholder="输入分片大小, 单位bit, 最小100k">
+      </div>
+
+      <div class="input-control">
+        <label for="parallel">上传分片数(构造参数 parallel, 默认 5):</label>
+        <input type="text" class="form-control" id="parallel" v-model="parallel" placeholder="输入并行上传分片个数, 默认为5">
+      </div>
+
+      <div class="input-control">
+        <label for="retryCount">网络失败重试次数(构造参数 retryCount, 默认 3):</label>
+        <input type="text" class="form-control" id="retryCount" v-model="retryCount" placeholder="输入网络失败重试次数, 默认为3">
+      </div>
+
+      <div class="input-control">
+        <label for="retryDuration">网络失败重试间隔(构造参数 retryDuration, 默认 2):</label>
+        <input type="text" class="form-control" id="retryDuration" v-model="retryDuration" placeholder="输入网络失败重试间隔, 默认2秒">
+      </div>
+
+      <div class="input-control">
+        <label for="region">配置项 region, 默认 cn-shanghai:</label>
+        <select v-model="region">
+          <option>cn-shanghai</option>
+          <option>eu-central-1</option>
+          <option>ap-southeast-1</option>
+        </select>
+      </div>
+
+      <div class="input-control">
+        <label for="userId">阿里云账号ID</label>
+        <input type="text" class="form-control" v-model="userId" disabled placeholder="输入阿里云账号ID">
+        
+      </div>
+
+    </div>
+
+    <div class="upload">
+      <div>
+        <input type="file" id="fileUpload" @change="fileChange($event)">
+        <label class="status">上传状态: <span>{{statusText}}</span></label>
+      </div>
+      <div class="upload-type">
+        上传方式一, 使用 UploadAuth 上传:
+        <button @click="authUpload" :disabled="uploadDisabled">开始上传</button>
+        <button @click="pauseUpload" :disabled="pauseDisabled">暂停</button>
+        <button :disabled="resumeDisabled" @click="resumeUpload">恢复上传</button>
+        <span class="progress">上传进度: <i id="auth-progress">{{authProgress}}</i> %</span>
+      </div>
+    </div>
+    <div class="info">uploadAuth及uploadAddress参数请查看<a href="https://help.aliyun.com/document_detail/55407.html" target="_blank">获取上传地址和凭证</a></div>
+  </div>
+</template>
+
+<script>
+  import '../lib/aliyun-upload-sdk/lib/es6-promise.min.js'
+  import '../lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js'
+  import '../lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js'
+  import axios from 'axios'
+
+  export default {
+    data () {
+      return {
+        timeout: '',
+        partSize: '',
+        parallel: '',
+        retryCount: '',
+        retryDuration: '',
+        region: 'cn-shanghai',
+        userId: '1303984639806000',
+        file: null,
+        authProgress: 0,
+        uploadDisabled: true,
+        resumeDisabled: true,
+        pauseDisabled: true,
+        uploader: null,
+        statusText: '',
+      }
+    },
+    props: {
+      getUserData: {
+        type: Function
+      }
+    },
+    methods: {
+      fileChange (e) {
+        this.file = e.target.files[0]
+        if (!this.file) {
+          alert("请先选择需要上传的文件!")
+          return
+        }
+        var title = this.file.name;
+        var that = this;
+        this.getUserData(title, function (userData) {
+          if (that.uploader) {
+            that.uploader.stopUpload()
+            that.authProgress = 0
+            that.statusText = ""
+          }
+          that.uploader = that.createUploader()
+          
+          that.uploader.addFile(that.file, null, null, null)
+          that.uploadDisabled = false
+          that.pauseDisabled = true
+          that.resumeDisabled = true
+        });
+
+      },
+      authUpload () {
+        // 然后调用 startUpload 方法, 开始上传
+        if (this.uploader !== null) {
+          this.uploader.startUpload()
+          this.uploadDisabled = true
+          this.pauseDisabled = false
+        }
+      },
+      // 暂停上传
+      pauseUpload () {
+        if (this.uploader !== null) {
+          this.uploader.stopUpload()
+          this.resumeDisabled = false
+          this.pauseDisabled = true
+        }
+      },
+      // 恢复上传
+      resumeUpload () {
+        if (this.uploader !== null) {
+          this.uploader.startUpload()
+          this.resumeDisabled = true
+          this.pauseDisabled = false
+        }
+      },
+      createUploader (type) {
+        let self = this
+        let uploader = new AliyunUpload.Vod({
+          timeout: self.timeout || 60000,
+          partSize: self.partSize || 1048576,
+          parallel: self.parallel || 5,
+          retryCount: self.retryCount || 3,
+          retryDuration: self.retryDuration || 2,
+          region: self.region,
+          userId: self.userId,
+          // 添加文件成功
+          addFileSuccess: function (uploadInfo) {
+            self.uploadDisabled = false
+            self.resumeDisabled = false
+            self.statusText = '添加文件成功, 等待上传...'
+            console.log("addFileSuccess: " + uploadInfo.file.name)
+          },
+          // 开始上传
+          onUploadstarted: function (uploadInfo) {
+
+            self.$post("/api/admin/upload/video", {filename: uploadInfo.file.name}).then(({data}) => {
+              console.log(data);
+              let uploadAuth = data.UploadAuth
+              let uploadAddress = data.UploadAddress
+              let videoId = data.VideoId
+              uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId);
+               self.statusText = '文件开始上传...'
+              console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)            
+            })
+           
+          
+            // let uploadAuth = uploadInfo.videoInfo.UploadAuth;
+            // let uploadAddress = uploadInfo.videoInfo.UploadAddress;
+            // let videoId = uploadInfo.videoInfo.VideoId;
+            // uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
+          },
+          // 文件上传成功
+          onUploadSucceed: function (uploadInfo) {
+            console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
+            self.statusText = '文件上传成功!'
+          },
+          // 文件上传失败
+          onUploadFailed: function (uploadInfo, code, message) {
+            console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
+            self.statusText = '文件上传失败!'
+          },
+          // 取消文件上传
+          onUploadCanceled: function (uploadInfo, code, message) {
+            console.log("Canceled file: " + uploadInfo.file.name + ", code: " + code + ", message:" + message)
+            self.statusText = '文件已暂停上传'
+          },
+          // 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上
+          onUploadProgress: function (uploadInfo, totalSize, progress) {
+            console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%")
+            let progressPercent = Math.ceil(progress * 100)
+            self.authProgress = progressPercent
+            self.statusText = '文件上传中...'
+          },
+          // 上传凭证超时
+          onUploadTokenExpired: function (uploadInfo) {
+            // 上传大文件超时, 如果是上传方式一即根据 UploadAuth 上传时
+            // 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)重新获取 UploadAuth
+            // 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth
+            let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
+            axios.get(refreshUrl).then(({data}) => {
+              let uploadAuth = data.UploadAuth
+              uploader.resumeUploadWithAuth(uploadAuth)
+              console.log('upload expired and resume upload with uploadauth ' + uploadAuth)
+            })
+            self.statusText = '文件超时...'
+          },
+          // 全部文件上传结束
+          onUploadEnd: function (uploadInfo) {
+            console.log("onUploadEnd: uploaded all the files")
+            self.statusText = '文件上传完毕'
+          }
+        })
+        return uploader
+      }
+    }
+  }
+</script>

+ 225 - 0
components/videoUpload/src/UploadAuth3.vue

@@ -0,0 +1,225 @@
+<template>
+  <div class="container">
+    <div class="setting">
+      <div class="input-control">
+        <label for="timeout">请求过期时间(构造参数 timeout, 默认 60000):</label>
+        <input type="text" id="timeout" v-model="timeout" placeholder="输入过期时间, 单位毫秒">
+      </div>
+
+      <div class="input-control">
+        <label for="partSize">分片大小(构造参数 partSize, 默认 1048576):</label>
+        <input type="text" class="form-control" id="partSize" v-model="partSize" placeholder="输入分片大小, 单位bit, 最小100k">
+      </div>
+
+      <div class="input-control">
+        <label for="parallel">上传分片数(构造参数 parallel, 默认 5):</label>
+        <input type="text" class="form-control" id="parallel" v-model="parallel" placeholder="输入并行上传分片个数, 默认为5">
+      </div>
+
+      <div class="input-control">
+        <label for="retryCount">网络失败重试次数(构造参数 retryCount, 默认 3):</label>
+        <input type="text" class="form-control" id="retryCount" v-model="retryCount" placeholder="输入网络失败重试次数, 默认为3">
+      </div>
+
+      <div class="input-control">
+        <label for="retryDuration">网络失败重试间隔(构造参数 retryDuration, 默认 2):</label>
+        <input type="text" class="form-control" id="retryDuration" v-model="retryDuration" placeholder="输入网络失败重试间隔, 默认2秒">
+      </div>
+
+      <div class="input-control">
+        <label for="region">配置项 region, 默认 cn-shanghai:</label>
+        <select v-model="region">
+          <option>cn-shanghai</option>
+          <option>eu-central-1</option>
+          <option>ap-southeast-1</option>
+        </select>
+      </div>
+
+      <div class="input-control">
+        <label for="userId">阿里云账号ID</label>
+        <input type="text" class="form-control" v-model="userId" disabled placeholder="输入阿里云账号ID">
+        
+      </div>
+
+    </div>
+
+    <div class="upload">
+      <div>
+        <input type="file" id="fileUpload" @change="fileChange($event)">
+        <label class="status">上传状态: <span>{{statusText}}</span></label>
+      </div>
+      <div class="upload-type">
+        上传方式一, 使用 UploadAuth 上传:
+        <button @click="authUpload" :disabled="uploadDisabled">开始上传</button>
+        <button @click="pauseUpload" :disabled="pauseDisabled">暂停</button>
+        <button :disabled="resumeDisabled" @click="resumeUpload">恢复上传</button>
+        <span class="progress">上传进度: <i id="auth-progress">{{authProgress}}</i> %</span>
+      </div>
+    </div>
+    <div class="info">uploadAuth及uploadAddress参数请查看<a href="https://help.aliyun.com/document_detail/55407.html" target="_blank">获取上传地址和凭证</a></div>
+  </div>
+</template>
+<script>
+  import '../lib/aliyun-upload-sdk/lib/es6-promise.min.js'
+  import '../lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js'
+  import '../lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js'
+  import axios from 'axios'
+
+  export default {
+    data () {
+      return {
+        timeout: '',
+        partSize: '',
+        parallel: '',
+        retryCount: '',
+        retryDuration: '',
+        region: 'cn-shanghai',
+        userId: '1303984639806000',
+        file: null,
+        authProgress: 0,
+        uploadDisabled: true,
+        resumeDisabled: true,
+        pauseDisabled: true,
+        uploader: null,
+        statusText: '',
+      }
+    },
+    methods: {
+      fileChange (e) {
+        this.file = e.target.files[0]
+        if (!this.file) {
+          alert("请先选择需要上传的文件!")
+          return
+        }
+        var Title = this.file.name
+        var userData = '{"Vod":{}}'
+        if (this.uploader) {
+          this.uploader.stopUpload()
+          this.authProgress = 0
+          this.statusText = ""
+        }
+        this.uploader = this.createUploader()
+        console.log(userData)
+        this.uploader.addFile(this.file, null, null, null, userData)
+        this.uploadDisabled = false
+        this.pauseDisabled = true
+        this.resumeDisabled = true
+      },
+      authUpload () {
+        // 然后调用 startUpload 方法, 开始上传
+        if (this.uploader !== null) {
+          this.uploader.startUpload()
+          this.uploadDisabled = true
+          this.pauseDisabled = false
+        }
+      },
+      // 暂停上传
+      pauseUpload () {
+        if (this.uploader !== null) {
+          this.uploader.stopUpload()
+          this.resumeDisabled = false
+          this.pauseDisabled = true
+        }
+      },
+      // 恢复上传
+      resumeUpload () {
+        if (this.uploader !== null) {
+          this.uploader.startUpload()
+          this.resumeDisabled = true
+          this.pauseDisabled = false
+        }
+      },
+      createUploader (type) {
+        let self = this
+        let uploader = new AliyunUpload.Vod({
+          timeout: self.timeout || 60000,
+          partSize: self.partSize || 1048576,
+          parallel: self.parallel || 5,
+          retryCount: self.retryCount || 3,
+          retryDuration: self.retryDuration || 2,
+          region: self.region,
+          userId: self.userId,
+          // 添加文件成功
+          addFileSuccess: function (uploadInfo) {
+            self.uploadDisabled = false
+            self.resumeDisabled = false
+            self.statusText = '添加文件成功, 等待上传...'
+            console.log("addFileSuccess: " + uploadInfo.file.name)
+          },
+          // 开始上传
+          onUploadstarted: function (uploadInfo) {
+            // 如果是 UploadAuth 上传方式, 需要调用 uploader.setUploadAuthAndAddress 方法
+            // 如果是 UploadAuth 上传方式, 需要根据 uploadInfo.videoId是否有值,调用点播的不同接口获取uploadauth和uploadAddress
+            // 如果 uploadInfo.videoId 有值,调用刷新视频上传凭证接口,否则调用创建视频上传凭证接口
+            // 注意: 这里是测试 demo 所以直接调用了获取 UploadAuth 的测试接口, 用户在使用时需要判断 uploadInfo.videoId 存在与否从而调用 openApi
+            // 如果 uploadInfo.videoId 存在, 调用 刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)
+            // 如果 uploadInfo.videoId 不存在,调用 获取视频上传地址和凭证接口(https://help.aliyun.com/document_detail/55407.html)
+            if (!uploadInfo.videoId) {
+              let createUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateUploadVideo?Title=testvod1&FileName=aa.mp4&BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&VideoId=5bfcc7864fc14b96972842172207c9e6'
+              self.$post("/api/admin/upload/video", {filename: uploadInfo.file.name}).then(({data}) => {
+                console.log(data);
+                let uploadAuth = data.UploadAuth
+                let uploadAddress = data.UploadAddress
+                let videoId = data.VideoId
+                uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)                
+              })
+              self.statusText = '文件开始上传...'
+              console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
+            } else {
+              // 如果videoId有值,根据videoId刷新上传凭证
+              // https://help.aliyun.com/document_detail/55408.html?spm=a2c4g.11186623.6.630.BoYYcY
+              let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
+              axios.get(refreshUrl).then(({data}) => {
+                let uploadAuth = data.UploadAuth
+                let uploadAddress = data.UploadAddress
+                let videoId = data.VideoId
+                uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
+              })
+            }
+          },
+          // 文件上传成功
+          onUploadSucceed: function (uploadInfo) {
+            console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
+            self.statusText = '文件上传成功!'
+          },
+          // 文件上传失败
+          onUploadFailed: function (uploadInfo, code, message) {
+            console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
+            self.statusText = '文件上传失败!'
+          },
+          // 取消文件上传
+          onUploadCanceled: function (uploadInfo, code, message) {
+            console.log("Canceled file: " + uploadInfo.file.name + ", code: " + code + ", message:" + message)
+            self.statusText = '文件已暂停上传'
+          },
+          // 文件上传进度,单位:字节, 可以在这个函数中拿到上传进度并显示在页面上
+          onUploadProgress: function (uploadInfo, totalSize, progress) {
+            console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%")
+            let progressPercent = Math.ceil(progress * 100)
+            self.authProgress = progressPercent
+            self.statusText = '文件上传中...'
+          },
+          // 上传凭证超时
+          onUploadTokenExpired: function (uploadInfo) {
+            // 上传大文件超时, 如果是上传方式一即根据 UploadAuth 上传时
+            // 需要根据 uploadInfo.videoId 调用刷新视频上传凭证接口(https://help.aliyun.com/document_detail/55408.html)重新获取 UploadAuth
+            // 然后调用 resumeUploadWithAuth 方法, 这里是测试接口, 所以我直接获取了 UploadAuth
+            let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
+            axios.get(refreshUrl).then(({data}) => {
+              let uploadAuth = data.UploadAuth
+              uploader.resumeUploadWithAuth(uploadAuth)
+              console.log('upload expired and resume upload with uploadauth ' + uploadAuth)
+            })
+            self.statusText = '文件超时...'
+          },
+          // 全部文件上传结束
+          onUploadEnd: function (uploadInfo) {
+            console.log("onUploadEnd: uploaded all the files")
+            self.statusText = '文件上传完毕'
+          }
+        })
+        return uploader
+      }
+    }
+  }
+</script>

+ 21 - 0
components/videoUpload/src/index.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8">
+    <title>阿里云点播上传demo (使用vue)</title>
+    <meta name="description" content="">
+    <meta name="keywords" content="">
+    <meta http-equiv="Cache-Control" content="no-siteapp">
+    <meta http-equiv="cleartype" content="on">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
+    <meta name="HandheldFriendly" content="True">
+    <meta name="MobileOptimized" content="320">
+    <script src="/lib/aliyun-upload-sdk/lib/es6-promise.min.js"></script>
+    <script src="/lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.13.0.min.js"></script>
+    <script src="/lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.2.min.js"></script>
+  </head>
+  <body>
+    <div id="app"></div>
+  </body>
+</html>

+ 29 - 0
components/videoUpload/src/main.js

@@ -0,0 +1,29 @@
+import Vue from 'vue'
+import App from './App.vue'
+import "@babel/polyfill"
+import axios from 'axios'
+//兼容IE11
+if (!FileReader.prototype.readAsBinaryString) {
+    FileReader.prototype.readAsBinaryString = function (fileData) {
+       var binary = "";
+       var pt = this;
+       var reader = new FileReader();      
+       reader.onload = function (e) {
+           var bytes = new Uint8Array(reader.result);
+           var length = bytes.byteLength;
+           for (var i = 0; i < length; i++) {
+               binary += String.fromCharCode(bytes[i]);
+           }
+        //pt.result  - readonly so assign binary
+        pt.content = binary;
+        pt.onload()
+    }
+    reader.readAsArrayBuffer(fileData);
+    }
+}
+
+new Vue({
+  el: '#app',
+  template: '<App/>',
+  components: { App }
+})

File diff suppressed because it is too large
+ 4 - 4
dist/200.html


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/036ce61.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/0422993.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/051da56.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/052940c.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/06e61b2.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/094b0b3.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/0d23516.js


File diff suppressed because it is too large
+ 2 - 0
dist/_nuxt/1441f0e.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/165b4b3.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/16bb196.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/16ed0f4.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/170fa65.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/1909ee5.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/19db801.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/1c62e3a.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/1fb57f7.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/2844f26.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/28b2e9a.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/28b4d66.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/2b1bedf.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/3252bd4.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/34ed62f.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/3652a7f.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/389f7bb.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/3c6f512.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/3c90b43.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/3ff02b7.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/4109617.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/41df04f.js


+ 1 - 0
dist/_nuxt/43a5441.css

@@ -0,0 +1 @@
+.pform-head{text-align:center}.pform-body{margin:20px 200px}.file-upload{width:300px}

File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/43fd403.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/4578138.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/479490d.js


File diff suppressed because it is too large
+ 2 - 0
dist/_nuxt/49f924e.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/4b23da5.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/4c29dfae5501265d7793.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/4de955d.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/512a15c.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/51393dc.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/53d22c0.js


+ 1 - 0
dist/_nuxt/55d8d75.css

@@ -0,0 +1 @@
+.page[data-v-47aaaac7]{margin-top:10px}.el-form-item[data-v-47aaaac7]{margin-bottom:0}.filter-form[data-v-47aaaac7]{margin-bottom:10px}.mainTableTagbox[data-v-47aaaac7]{margin-bottom:15px}.status-1[data-v-47aaaac7]{color:#409eff}.status-2[data-v-47aaaac7]{color:#909399}

File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/5700a26.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/5de834b.css


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/6ca8737.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/6cc19df.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/6cf340a.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/6e8760f.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/6ffcbae.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/723c033.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7486683.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/79e9362.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7b8408e.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7be631e.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7c1c6d6.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7cb989f.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7e960bd.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/7f775a5.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/8295491.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/89bdddb.js


+ 1 - 0
dist/_nuxt/8bf7a24.css

@@ -0,0 +1 @@
+.pform-head{text-align:center}.pform-body{margin:20px 200px}.img-uploader .el-upload{border:1px dashed #d9d9d9;border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.img-uploader .el-upload:hover{border-color:#409eff}.img-uploader-icon{font-size:28px;color:#8c939d;width:178px;height:178px;line-height:178px;text-align:center}.img{width:270px;height:190px;display:block}.file-upload{width:300px}

File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/8d3373a.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/94d8322.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/9703729.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/9875f26.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/99151c435603e32afcf2.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/995e580.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/996e908.css


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/9970f52.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/9acb88d.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/9c3664a.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/9d38f0c.js


+ 8 - 0
dist/_nuxt/LICENSES

@@ -107,3 +107,11 @@
  * @author	owenm    <owen23355@gmail.com>
  * @license MIT
  */
+
+
+/*!
+    * The buffer module from node.js, for the browser.
+    *
+    * @author   Feross Aboukhadijeh <http://feross.org>
+    * @license  MIT
+    */

File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/a0341a6.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/a0d1aa4.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/a3d682d.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/a3dd612.js


File diff suppressed because it is too large
+ 0 - 1
dist/_nuxt/a48406ae733a08fc8172.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/ac9bd5b.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/ae7c841.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/afe5a16.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/c927b48.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/ca678fd.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/caaf650.js


File diff suppressed because it is too large
+ 5 - 0
dist/_nuxt/ceb9919.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/d36bfea.js


File diff suppressed because it is too large
+ 1 - 0
dist/_nuxt/decd808.js


+ 0 - 0
dist/_nuxt/e3c1d6b.js


Some files were not shown because too many files changed in this diff