| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 | <template>  <view class="uni-popup-dialog">    <view class="uni-dialog-title">      <text class="uni-dialog-title-text" :class="['uni-popup__'+dialogType]">{{ titleText }}</text>    </view>    <view v-if="mode === 'base'" class="uni-dialog-content">      <slot>        <text class="uni-dialog-content-text">{{ content }}</text>      </slot>    </view>    <view v-else class="uni-dialog-content">      <slot>        <input class="uni-dialog-input" v-model="val" type="text" :placeholder="placeholderText" :focus="focus">      </slot>    </view>    <view class="uni-dialog-button-group">      <view class="uni-dialog-button" @click="closeDialog">        <text class="uni-dialog-button-text">{{ cancelText }}</text>      </view>      <view class="uni-dialog-button uni-border-left" @click="onOk">        <text class="uni-dialog-button-text uni-button-color">{{ okText }}</text>      </view>    </view>  </view></template><script>import popup from '../uni-popup/popup.js'import {initVueI18n} from '@dcloudio/uni-i18n'import messages from '../uni-popup/i18n/index.js'const {t} = initVueI18n(messages)/** * PopUp 弹出层-对话框样式 * @description 弹出层-对话框样式 * @tutorial https://ext.dcloud.net.cn/plugin?id=329 * @property {String} value input 模式下的默认值 * @property {String} placeholder input 模式下输入提示 * @property {String} type = [success|warning|info|error] 主题样式 *  @value success 成功 *  @value warning 提示 *  @value info 消息 *  @value error 错误 * @property {String} mode = [base|input] 模式、 *  @value base 基础对话框 *  @value input 可输入对话框 * @property {String} content 对话框内容 * @property {Boolean} beforeClose 是否拦截取消事件 * @event {Function} confirm 点击确认按钮触发 * @event {Function} close 点击取消按钮触发 */export default {  name: "uniPopupDialog",  mixins: [popup],  emits: ['confirm', 'close'],  props: {    value: {      type: [String, Number],      default: ''    },    placeholder: {      type: [String, Number],      default: ''    },    type: {      type: String,      default: 'error'    },    mode: {      type: String,      default: 'base'    },    title: {      type: String,      default: ''    },    content: {      type: String,      default: ''    },    beforeClose: {      type: Boolean,      default: false    }  },  data() {    return {      dialogType: 'error',      focus: false,      val: ""    }  },  computed: {    okText() {      return t("uni-popup.ok")    },    cancelText() {      return t("uni-popup.cancel")    },    placeholderText() {      return this.placeholder || t("uni-popup.placeholder")    },    titleText() {      return this.title || t("uni-popup.title")    }  },  watch: {    type(val) {      this.dialogType = val    },    mode(val) {      if (val === 'input') {        this.dialogType = 'info'      }    },    value(val) {      this.val = val    }  },  created() {    // 对话框遮罩不可点击    this.popup.disableMask()    // this.popup.closeMask()    if (this.mode === 'input') {      this.dialogType = 'info'      this.val = this.value    } else {      this.dialogType = this.type    }  },  mounted() {    this.focus = true  },  methods: {    /**     * 点击确认按钮     */    onOk() {      if (this.mode === 'input') {        this.$emit('confirm', this.val)      } else {        this.$emit('confirm')      }      if (this.beforeClose) return      this.popup.close()    },    /**     * 点击取消按钮     */    closeDialog() {      this.$emit('close')      if (this.beforeClose) return      this.popup.close()    },    close() {      this.popup.close()    }  }}</script><style lang="scss">.uni-popup-dialog {  width: 300px;  border-radius: 11px;  background-color: #fff;}.uni-dialog-title {  /* #ifndef APP-NVUE */  display: flex;  /* #endif */  flex-direction: row;  justify-content: center;  padding-top: 25px;}.uni-dialog-title-text {  font-size: 16px;  font-weight: 500;}.uni-dialog-content {  /* #ifndef APP-NVUE */  display: flex;  /* #endif */  flex-direction: row;  justify-content: center;  align-items: center;  padding: 20px;}.uni-dialog-content-text {  font-size: 14px;  color: #6C6C6C;}.uni-dialog-button-group {  /* #ifndef APP-NVUE */  display: flex;  /* #endif */  flex-direction: row;  border-top-color: #f5f5f5;  border-top-style: solid;  border-top-width: 1px;}.uni-dialog-button {  /* #ifndef APP-NVUE */  display: flex;  /* #endif */  flex: 1;  flex-direction: row;  justify-content: center;  align-items: center;  height: 45px;}.uni-border-left {  border-left-color: #f0f0f0;  border-left-style: solid;  border-left-width: 1px;}.uni-dialog-button-text {  font-size: 16px;  color: #333;}.uni-button-color {  color: #007aff;}.uni-dialog-input {  flex: 1;  font-size: 14px;  border: 1px #eee solid;  height: 40px;  padding: 0 10px;  border-radius: 5px;  color: #555;}.uni-popup__success {  color: #4cd964;}.uni-popup__warn {  color: #f0ad4e;}.uni-popup__error {  color: #dd524d;}.uni-popup__info {  color: #909399;}</style>
 |