Rename.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <script setup lang="ts">
  2. import config from '@/api/config'
  3. import NodeSelector from '@/components/NodeSelector/NodeSelector.vue'
  4. import use2FAModal from '@/components/TwoFA/use2FAModal'
  5. import { message } from 'ant-design-vue'
  6. const emit = defineEmits(['renamed'])
  7. const visible = ref(false)
  8. const isDirFlag = ref(false)
  9. const data = ref({
  10. basePath: '',
  11. orig_name: '',
  12. new_name: '',
  13. sync_node_ids: [] as number[],
  14. })
  15. // eslint-disable-next-line vue/require-typed-ref
  16. const refForm = ref()
  17. function open(basePath: string, origName: string, isDir: boolean) {
  18. visible.value = true
  19. data.value.orig_name = origName
  20. data.value.new_name = origName
  21. data.value.basePath = basePath
  22. isDirFlag.value = isDir
  23. }
  24. defineExpose({
  25. open,
  26. })
  27. function ok() {
  28. refForm.value.validate().then(() => {
  29. const { basePath, orig_name, new_name, sync_node_ids } = data.value
  30. const otpModal = use2FAModal()
  31. otpModal.open().then(() => {
  32. config.rename(basePath, orig_name, new_name, sync_node_ids).then(() => {
  33. visible.value = false
  34. message.success($gettext('Rename successfully'))
  35. emit('renamed')
  36. }).catch(e => {
  37. message.error(`${$gettext('Server error')} ${e?.message}`)
  38. })
  39. })
  40. })
  41. }
  42. </script>
  43. <template>
  44. <AModal
  45. v-model:open="visible"
  46. :mask="false"
  47. :title="$gettext('Rename')"
  48. @ok="ok"
  49. >
  50. <AForm
  51. ref="refForm"
  52. layout="vertical"
  53. :model="data"
  54. :rules="{
  55. new_name: [
  56. { required: true, message: $gettext('Please input a filename') },
  57. { pattern: /^[^\\/]+$/, message: $gettext('Invalid filename') },
  58. ],
  59. }"
  60. >
  61. <AFormItem :label="$gettext('Original name')">
  62. <p>{{ data.orig_name }}</p>
  63. </AFormItem>
  64. <AFormItem
  65. :label="$gettext('New name')"
  66. name="new_name"
  67. >
  68. <AInput v-model:value="data.new_name" />
  69. </AFormItem>
  70. <AFormItem
  71. v-if="isDirFlag"
  72. :label="$gettext('Sync')"
  73. >
  74. <NodeSelector
  75. v-model:target="data.sync_node_ids"
  76. hidden-local
  77. />
  78. </AFormItem>
  79. </AForm>
  80. </AModal>
  81. </template>
  82. <style scoped lang="less">
  83. </style>