<template> <!-- 添加联系人页面 --> <view class="flex-row relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }"> <text class="text pos_2">{{ templateString }}</text> <image class="image pos" :src="mineUrl + '/component/cha.png'" @click="closePop()"/> <view class="flex-col section_2 pos_3"> <view class="flex-row items-center group"> <text class="font_2 text_2">姓名  </text> <input class="section_1 ml-20" placeholder="请输入姓名" v-model="contactParam.name"/> </view> <view class="flex-row items-center group_1"> <text class="font_2">手机号码</text> <input class="view_2 ml-20" placeholder="输入手机号码" type="tel" maxlength="11" v-model="contactParam.phone"/> </view> <view class="flex-row justify-between items-center group_2"> <text class="font_2 text_5">设为默认联系人</text> <radio-group> <radio @click="changeState" class="radius" color="#E79EA1" :checked="checked"/> </radio-group> </view> </view> <view class="flex-col justify-start items-center text-wrapper_2 pos_4" @click="newContact"><text class="text_6">保存联系人</text></view> </view> </template> <script setup> import {ref , onMounted, onUnmounted} from 'vue' import { testUrl , baseUrl , suiUrl } from '../../../api/request'; import { onLoad, onShow } from '@dcloudio/uni-app'; import { getFonts } from '../../../common/globalFont'; import emitter from '../../../utils/emitter'; import { mineUrl,bkgPubilcPath } from '../../../common/globalImagesUrl'; import { JudgeIsNullity } from '../../../common/globalFunction'; onLoad(() => { getFonts() }) const bkgUrl = ref(mineUrl + '/component/bkg.png') const isUpdate = ref(false) const templateString = ref('') const checked = ref(false) const contactParam = ref({}) const changeState = () => { console.log(checked.value) checked.value = !checked.value } const contactInfoHandler = (val) => { if (val === null) { templateString.value = '添加联系人' checked.value = false contactParam.value = {} isUpdate.value = false } else { templateString.value = '编辑联系人' contactParam.value = JSON.parse(JSON.stringify(val)) console.log(contactParam.value) checked.value = val.isDefault === 0 ? false : true isUpdate.value = true } console.log(isUpdate.value) } onMounted(()=>{ emitter.on('contactInfo', contactInfoHandler) }) onUnmounted(() => { emitter.off('contactInfo', contactInfoHandler) }) //发送添加新增联系人的请求 const newContact = async () => { const values = Object.values(contactParam.value); // 使用some()方法来检查是否有任何值为空 if (values.some(value => value === null || value === undefined || value === '')) { await uni.showToast({ icon: 'error', title: "字段不能为空" }) return; } contactParam.value.isDefault = checked.value ? 1 : 0 // console.log(contactParam.value) if(isUpdate.value) { const res = await uni.request({ url: baseUrl + '/contacts/update', method: 'POST', header: { 'cookie': wx.getStorageSync('cookie') }, data: { ...contactParam.value } }) sucRes(res.data.code) } else { const res = await uni.request({ url: baseUrl + '/contacts/add', method: 'POST', header: { 'cookie': wx.getStorageSync('cookie') }, data: { ...contactParam.value } }) sucRes(res.data.code) } } const sucRes =(res)=>{ //请求成功执行的方法 if(res === 1) { if (isUpdate.value) { emitter.emit('updateContactObj', contactParam.value) closePop() } emitter.emit('updateInfo') emitter.emit('closeContactPop') closePop() } else { uni.showToast({ icon: 'error', title: '新增联系人失败' }) return; } } const closePop = () =>{ //关闭弹窗方法 contactParam.value.name = "" contactParam.value.phone = "" contactParam.value.isDefault = 0 emitter.emit('closeContactPop') } </script> <style lang="scss" scoped> .ml-13 { margin-left: 24.38rpx; } .page { padding: 18.75rpx 24.38rpx 30rpx 31.88rpx; background-color: #ffffff; background-size: 100% 100%; background-repeat: no-repeat; height: 100vh; width: 100%; overflow-y: auto; overflow-x: hidden; } .text { color: #323232; font-size: 37.5rpx; font-family: FangZhengFonts; line-height: 36.47rpx; } .pos_2 { position: absolute; right: 274.86rpx; top: 28.5rpx; } .image { width: 52.5rpx; height: 52.5rpx; } .pos { position: absolute; right: 24.38rpx; top: 18.75rpx; } .section_2 { padding: 12.19rpx 16.88rpx 0; background-color: #ffffff; border-radius: 9.38rpx; } .pos_3 { position: absolute; left: 31.88rpx; right: 31.88rpx; top: 101.25rpx; } .group { padding: 14.06rpx 4.58rpx 12.19rpx; border-bottom: solid 1.88rpx #efefef; } .font_2 { font-size: 26.25rpx; font-family: FangZhengFonts; line-height: 24.62rpx; color: #323232; } .text_2 { line-height: 23.17rpx; } .section_1 { flex: 1 1 0; margin-right: 34.8rpx; } .group_1 { padding: 14.06rpx 4.26rpx 12.19rpx; border-bottom: solid 1.88rpx #efefef; } .view_2 { flex: 1 1 0; margin-right: 35.12rpx; } .group_2 { padding: 15.47rpx 5.29rpx 22.03rpx; } .text_5 { line-height: 25.54rpx; } .image_2 { margin-right: 17.63rpx; width: 33.75rpx; height: 33.75rpx; } .text-wrapper_2 { padding: 26.03rpx 0 29.27rpx; background-color: #ffb6b9; border-radius: 75rpx; width: 639.38rpx; } .pos_4 { position: absolute; left: 50%; top: 370.63rpx; transform: translateX(-50%); } .text_6 { color: #ffffff; font-size: 33.75rpx; font-family: FangZhengFonts; line-height: 32.83rpx; } .radius { transform: scale(0.7); width: 37.5rpx; height: 37.5rpx; } @import url(../../../common/css/global.css); </style>