ObjectsCreateUrl.vue 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{this.params.title}}</div>
  4. <div slot="body">
  5. <a-form :form="form.fc" v-bind="formItemLayout">
  6. <a-form-item :label="$t('storage.text_103')" v-if="isPrivate">
  7. <a-input class="w-50" @change="getUrl" v-decorator="decorators.expire_seconds" :placeholder="$t('storage.text_104')">
  8. <span slot="addonAfter">{{$t('storage.text_105')}}</span>
  9. </a-input>
  10. <span slot="extra">{{$t('storage.text_106')}}</span>
  11. </a-form-item>
  12. <a-form-item label="URL">
  13. <a-textarea :value="url || $t('storage.text_107')" :disabled="true" autosize />
  14. <a style="font-size: 12px" v-clipboard:copy="url">{{$t('storage.text_108')}}<copy v-if="url" class="ml-1" :message="url" /></a>
  15. </a-form-item>
  16. </a-form>
  17. </div>
  18. <div slot="footer">
  19. <a-button type="primary" @click="cancelDialog" :loading="loading">{{ $t("dialog.ok") }}</a-button>
  20. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  21. </div>
  22. </base-dialog>
  23. </template>
  24. <script>
  25. import { formItemLayout } from '@Storage/constants/index.js'
  26. import { objectsModel } from '@Storage/views/bucket/utils/controller.js'
  27. import DialogMixin from '@/mixins/dialog'
  28. import WindowsMixin from '@/mixins/windows'
  29. export default {
  30. name: 'ObjectsCreateUrlDialog',
  31. mixins: [DialogMixin, WindowsMixin],
  32. data () {
  33. return {
  34. loading: false,
  35. formItemLayout,
  36. fileList: [],
  37. url: '',
  38. form: {
  39. fc: this.$form.createForm(this),
  40. },
  41. }
  42. },
  43. provide () {
  44. return {
  45. form: this.form,
  46. }
  47. },
  48. computed: {
  49. decorators () {
  50. return {
  51. expire_seconds: ['expire_seconds', {
  52. initialValue: 7200,
  53. validateFirst: true,
  54. rules: [
  55. { type: 'integer', message: this.$t('storage.text_104'), transform: (v) => parseFloat(v) },
  56. ],
  57. }],
  58. }
  59. },
  60. isPrivate () {
  61. return this.params.data[0].acl === 'private'
  62. },
  63. },
  64. mounted () {
  65. this.getUrl()
  66. },
  67. methods: {
  68. async getUrl (e) {
  69. try {
  70. await this.form.fc.validateFields()
  71. let seconds = 7200
  72. if (e && e.target) {
  73. seconds = parseInt(e.target.value) || 0
  74. }
  75. const { data, resId, accessUrl } = this.params
  76. const row = data && data.length > 0 ? data[0] : {}
  77. const url = await objectsModel.getUrl(Object.assign({}, row, { expire_seconds: seconds }), resId, accessUrl)
  78. this.url = url
  79. } catch (err) {
  80. throw err
  81. }
  82. },
  83. // handleConfirm () {
  84. // },
  85. },
  86. }
  87. </script>