| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 | <template>  <su-popup :show="show" class="add-bank-wrap" @close="hideModal">    <view class="ss-modal-box bg-white ss-flex-col">      <view class="modal-header ss-flex-col ss-col-left">        <text v-if="props.modelValue.type === 'bank'" class="modal-title ss-m-b-20">          绑定银行卡        </text>        <text v-if="props.modelValue.type === 'wechat'" class="modal-title ss-m-b-20">          绑定微信        </text>        <text v-if="props.modelValue.type === 'alipay'" class="modal-title ss-m-b-20">          绑定支付宝        </text>      </view>      <view class="modal-content ss-flex-1 ss-p-b-100">        <block v-if="props.modelValue.type === 'bank'">          <uni-forms            ref="form"            :model="state.bank.model"            :rules="state.bank.rules"            validateTrigger="bind"            labelWidth="160"            labelAlign="center"            border            :labelStyle="{ fontWeight: 'bold' }"          >            <uni-forms-item name="account_name" label="持卡人">              <uni-easyinput                :inputBorder="false"                placeholder="请输入持卡人"                v-model="state.bank.model.account_name"              />            </uni-forms-item>            <uni-forms-item name="account_header" label="开户行">              <uni-easyinput                :inputBorder="false"                placeholder="请输入开户行"                v-model="state.bank.model.account_header"              />            </uni-forms-item>            <uni-forms-item name="account_no" label="银行卡号">              <uni-easyinput                type="number"                :inputBorder="false"                placeholder="请输入银行卡号"                v-model="state.bank.model.account_no"              />            </uni-forms-item>          </uni-forms>        </block>        <block v-if="props.modelValue.type === 'wechat'">          <uni-forms            ref="form"            :model="state.wechat.model"            :rules="state.wechat.rules"            validateTrigger="bind"            labelWidth="160"            labelAlign="center"            border            :labelStyle="{ fontWeight: 'bold' }"          >            <uni-forms-item name="account_name" label="真实姓名">              <uni-easyinput                :inputBorder="false"                placeholder="请输入您的真实姓名"                v-model="state.wechat.model.account_name"              />            </uni-forms-item>          </uni-forms>        </block>        <block v-if="props.modelValue.type === 'alipay'">          <uni-forms            ref="form"            :model="state.alipay.model"            :rules="state.alipay.rules"            validateTrigger="bind"            labelWidth="160"            labelAlign="center"            border            :labelStyle="{ fontWeight: 'bold' }"          >            <uni-forms-item name="account_name" label="真实姓名">              <uni-easyinput                :inputBorder="false"                placeholder="请输入您的真实姓名"                v-model="state.alipay.model.account_name"              />            </uni-forms-item>            <uni-forms-item name="account_no" label="支付宝">              <uni-easyinput                :inputBorder="false"                placeholder="请输入支付宝 邮箱/手机号"                v-model="state.alipay.model.account_no"              />            </uni-forms-item>          </uni-forms>        </block>      </view>      <view class="modal-footer ss-flex ss-row-center ss-col-center">        <button class="ss-reset-button save-btn" @tap="onSave">保存</button>      </view>    </view>  </su-popup></template><script setup>  import { ref, reactive, unref, watchPostEffect, watch } from 'vue';  import sheep from '@/sheep';  import { realName, bankName, bankCode, alipayAccount } from '@/sheep/validate/form';  const form = ref(null);  const props = defineProps({    modelValue: {      type: Object,      default() {},    },    show: {      type: Boolean,      default: false,    },  });  watch(    () => props.modelValue,    (newValue, oldValue) => {      setModelValue(newValue);    },  );  function setModelValue(modelValue) {    Object.keys(state[modelValue.type].model).forEach((key) => {      state[modelValue.type].model[key] = modelValue[key];    });  }  const emits = defineEmits(['update:modelValue', 'close']);  // 数据  const state = reactive({    bank: {      model: {        account_name: '',        account_header: '',        account_no: '',      },      rules: {        account_name: realName,        account_header: bankName,        account_no: bankCode,      },    },    alipay: {      model: {        account_name: '',        account_no: '',      },      rules: {        account_name: realName,        account_no: alipayAccount,      },    },    wechat: {      model: {        account_name: '',      },      rules: {        account_name: realName,      },    },  });  setModelValue(props.modelValue);  const hideModal = () => {    emits('close');  };  const onSave = async () => {    const validate = await unref(form)      .validate()      .catch((error) => {        'error: ', error;      });    if (!validate) return;    let data = {      type: props.modelValue.type,      account_header: state[props.modelValue.type].model.account_header,      account_name: state[props.modelValue.type].model.account_name,      account_no: state[props.modelValue.type].model.account_no,    };    let res = await sheep.$api.user.account.save(data);    if (res.error === 0) {      emits('update:modelValue', res.data);      hideModal();    }  };</script><style lang="scss" scoped>  .ss-modal-box {    border-radius: 30rpx 30rpx 0 0;    max-height: 1000rpx;    .modal-header {      position: relative;      padding: 60rpx 40rpx 40rpx;      .modal-title {        font-size: 32rpx;        font-weight: bold;      }      .close-icon {        position: absolute;        top: 10rpx;        right: 20rpx;        font-size: 46rpx;        opacity: 0.2;      }    }    .modal-content {      overflow-y: auto;    }    .modal-footer {      height: 120rpx;      .save-btn {        width: 710rpx;        height: 80rpx;        border-radius: 40rpx;        background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));        color: $white;      }    }  }</style>
 |