Dialog.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <a-modal
  3. title="重命名文件"
  4. v-model:visible="visible"
  5. :maskClosable="false"
  6. width="550px"
  7. @afterVisibleChange="handleVisibleChange"
  8. @cancel="handleDialogClose"
  9. >
  10. <a-form class="rename-file-form" ref="renameFileFormRef" :model="form" :rules="formRules" layout="vertical">
  11. <a-form-item label="文件名称" name="fileName">
  12. <a-textarea
  13. v-model:value="form.fileName"
  14. placeholder="请输入文件名称"
  15. :auto-size="{ minRows: 1 }"
  16. :maxLength="255"
  17. />
  18. </a-form-item>
  19. </a-form>
  20. <template #footer>
  21. <a-button @click="handleDialogClose">取 消</a-button>
  22. <a-button type="primary" :loading="sureBtnLoading" @click="handleDialogSure"> 确 定 </a-button>
  23. </template>
  24. </a-modal>
  25. </template>
  26. <script setup>
  27. import { ref, reactive } from 'vue'
  28. import { message } from 'ant-design-vue'
  29. import { renameFile } from '@/api/myResource/file'
  30. const props = defineProps({
  31. oldFileName: String,
  32. userFileId: String,
  33. callback: Function
  34. })
  35. const visible = ref(false)
  36. const sureBtnLoading = ref(false)
  37. const renameFileFormRef = ref(null)
  38. const form = reactive({
  39. fileName: ''
  40. })
  41. const formRules = {
  42. fileName: [{ required: true, message: '请输入文件名称', trigger: 'blur' }]
  43. }
  44. const handleVisibleChange = (visible) => {
  45. if (visible) {
  46. form.fileName = props.oldFileName
  47. }
  48. }
  49. const handleDialogClose = () => {
  50. renameFileFormRef.value?.resetFields()
  51. visible.value = false
  52. props.callback('cancel')
  53. }
  54. const handleDialogSure = async () => {
  55. try {
  56. sureBtnLoading.value = true
  57. await renameFileFormRef.value.validate()
  58. const res = await renameFile({
  59. userFileId: props.userFileId,
  60. fileName: form.fileName
  61. })
  62. if (res.success) {
  63. message.success('重命名成功')
  64. renameFileFormRef.value.resetFields()
  65. visible.value = false
  66. props.callback('confirm')
  67. } else {
  68. message.error(res.message)
  69. }
  70. } catch (error) {
  71. console.error(error)
  72. } finally {
  73. sureBtnLoading.value = false
  74. }
  75. }
  76. defineExpose({
  77. visible
  78. })
  79. </script>
  80. <style lang="less" scoped>
  81. @import '@/style/myResource/varibles.less';
  82. .ant-btn-primary {
  83. &,
  84. &:hover,
  85. &:focus {
  86. background-color: @primary-color;
  87. border-color: @primary-color;
  88. }
  89. }
  90. .ant-btn {
  91. &:hover,
  92. &:focus {
  93. background-color: @hover-color;
  94. border-color: @hover-color;
  95. color: white;
  96. }
  97. }
  98. </style>