confirm.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <ui-dialog>
  3. <template #header>
  4. <span>{{ title }}</span>
  5. <i class="iconfont icon-close" @click="close('no')"></i>
  6. </template>
  7. <template v-if="$slots.content">
  8. <slot name="content"></slot>
  9. </template>
  10. <template v-else>
  11. <div class="message" v-html="content"></div>
  12. </template>
  13. <template #footer v-if="!hideFoot">
  14. <ui-button v-if="!single" type="cancel" @click="close('no')">{{ noText }}</ui-button>
  15. <ui-button type="primary" @click="close('ok')">{{ okText }}</ui-button>
  16. </template>
  17. </ui-dialog>
  18. </template>
  19. <script lang="ts">
  20. import { defineComponent } from 'vue'
  21. import { isFunction, omit } from '@kankan/utils'
  22. export default defineComponent({
  23. name: 'UIConfirm',
  24. props: {
  25. title: {
  26. type: String,
  27. default: '提示',
  28. },
  29. okText: {
  30. type: String,
  31. default: '确定',
  32. },
  33. noText: {
  34. type: String,
  35. default: '取消',
  36. },
  37. single: {
  38. type: Boolean,
  39. default: false,
  40. },
  41. hideFoot: {
  42. type: Boolean,
  43. default: false,
  44. },
  45. func: Function,
  46. content: String,
  47. destroy: Function,
  48. },
  49. setup: function (props, _) {
  50. const close = result => {
  51. if (isFunction(props.func) && props.func(result) === false) {
  52. return
  53. }
  54. isFunction(props.destroy) && props.destroy()
  55. }
  56. return {
  57. ...omit(props, 'destroy', 'func'),
  58. close,
  59. }
  60. },
  61. })
  62. </script>