1
0

prompt_modal.html 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. {{define "promptModal"}}
  2. <a-modal id="prompt-modal" v-model="promptModal.visible" :title="promptModal.title"
  3. :closable="true" @ok="promptModal.ok" :mask-closable="false"
  4. :class="themeSwitcher.darkCardClass"
  5. :ok-text="promptModal.okText" cancel-text='{{ i18n "cancel" }}'>
  6. <a-input id="prompt-modal-input" :type="promptModal.type"
  7. v-model="promptModal.value"
  8. :autosize="{minRows: 10, maxRows: 20}"
  9. @keydown.enter.native="promptModal.keyEnter"
  10. @keydown.ctrl.83="promptModal.ctrlS"></a-input>
  11. </a-modal>
  12. <script>
  13. const promptModal = {
  14. title: '',
  15. type: '',
  16. value: '',
  17. okText: '{{ i18n "sure"}}',
  18. visible: false,
  19. keyEnter(e) {
  20. if (this.type !== 'textarea') {
  21. e.preventDefault();
  22. this.ok();
  23. }
  24. },
  25. ctrlS(e) {
  26. if (this.type === 'textarea') {
  27. e.preventDefault();
  28. promptModal.confirm(promptModal.value);
  29. }
  30. },
  31. ok() {
  32. promptModal.close();
  33. promptModal.confirm(promptModal.value);
  34. },
  35. confirm() {},
  36. open({
  37. title = '',
  38. type = 'text',
  39. value = '',
  40. okText = '{{ i18n "sure"}}',
  41. confirm = () => {},
  42. }) {
  43. this.title = title;
  44. this.type = type;
  45. this.value = value;
  46. this.okText = okText;
  47. this.confirm = confirm;
  48. this.visible = true;
  49. promptModalApp.$nextTick(() => {
  50. document.querySelector('#prompt-modal-input').focus();
  51. });
  52. },
  53. close() {
  54. this.visible = false;
  55. }
  56. };
  57. const promptModalApp = new Vue({
  58. el: '#prompt-modal',
  59. data: {
  60. promptModal: promptModal,
  61. },
  62. });
  63. </script>
  64. {{end}}