prompt_modal.html 1.9 KB

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