|
|
- <template>
- <view class="">
- <view class="personal-pet-basic-info">
- <view class="personal-pet-info-title border-bottom">
- 宠物基本信息
- </view>
- <u--form labelPosition="left" :model="model" ref="uForm">
- <u-form-item required label="昵称" prop="petBaseInfo.name" labelWidth="80" borderBottom>
- <u--input v-model="petBaseInfo.name" placeholder="请输入宠物昵称" @change="nameChange"
- placeholderStyle="text-align:right;color:#AAA" border="none" inputAlign="right"></u--input>
- </u-form-item>
- <u-form-item label="性别" prop="petBaseInfo.gender" labelWidth="80" borderBottom @click="showSex = true">
- <u--input v-model="petBaseInfo.gender" disabled disabledColor="#ffffff" placeholder="请选择"
- placeholderStyle="text-align:right;color:#AAA" border="none" inputAlign="right"></u--input>
- <u-icon slot="right" name="arrow-right" color="#AAA"></u-icon>
- </u-form-item>
- <u-form-item required label="品种" prop="petBaseInfo.breed" labelWidth="80" borderBottom @click="breedSelectOpen">
- <u--input v-model="petBaseInfo.breed" disabled disabledColor="#ffffff" placeholder="请选择"
- placeholderStyle="text-align:right;color:#AAA" border="none" inputAlign="right"></u--input>
- <u-icon slot="right" name="arrow-right" color="#AAA"></u-icon>
- </u-form-item>
- <u-form-item required label="体重" prop="petBaseInfo.bodyType" labelWidth="80" borderBottom @click="showWeight = true"
- ref="item1">
- <u--input v-model="petBaseInfo.bodyType" disabled disabledColor="#ffffff" placeholder="请选择"
- placeholderStyle="text-align:right;color:#AAA" border="none" inputAlign="right"></u--input>
- <u-icon slot="right" name="arrow-right" color="#AAA"></u-icon>
- </u-form-item>
- <u-form-item label="出生年月" prop="petBaseInfo.birthDate" labelWidth="80" borderBottom @click="yearMonthOpen">
- <u--input v-model="petBaseInfo.birthDate" disabled disabledColor="#ffffff" placeholder="请选择"
- placeholderStyle="text-align:right;color:#AAA" border="none" inputAlign="right"></u--input>
- <u-icon slot="right" name="arrow-right" color="#AAA"></u-icon>
- </u-form-item>
- <u-form-item required label="性格" prop="petBaseInfo.personality" labelWidth="80" borderBottom
- @click="dispositionSelectOpen">
- <u--input v-model="petBaseInfo.personality" disabled disabledColor="#ffffff" placeholder="请选择"
- placeholderStyle="text-align:right;color:#AAA" border="none" inputAlign="right"></u--input>
- <u-icon slot="right" name="arrow-right" color="#AAA"></u-icon>
- </u-form-item>
- </u--form>
- </view>
- <view style="background-color: #fffcf2;padding: 10px 20px;" v-show="showDisposition">
- <view style="height: 85%;">
- <u-checkbox-group
- v-model="petBaseInfo.personality"
- @change="checkboxChange"
- iconPlacement="left"
- placement="row"
- style="flex-wrap: wrap;"
- activeColor="#ffbf60">
- <u-checkbox :customStyle="{margin: '8px'}" v-for="(item, index) in dispositionActions"
- :key="item" :label="item" :name="item">
- </u-checkbox>
- </u-checkbox-group>
- </view>
- </view>
- <u-picker :show="showSex" :showToolbar='false' :columns="sexActions" @cancel="showSex = false" :immediateChange="true"
- @confirm="sexSelect"></u-picker>
- <u-picker :show="showWeight" :showToolbar='false' :columns="weightActions" @cancel="showWeight = false" :immediateChange="true"
- @confirm="weightSelect"></u-picker>
-
- <u-overlay :show="showBreed">
- <view class="breed-select" style="height: 60%;">
- <u-search shape="round" :show-action="false" v-model="searchValue" @change="searchBreed"></u-search>
- <view style="padding: 10px;height: 80%;overflow: auto;">
- <u-radio-group v-model="tempBreed" placement="column">
- <u-radio v-for="(item,index) in searchBreedData" :customStyle="{marginBottom: '8px'}"
- activeColor="#ffbf60" :label="item" :name="item" :key="item"></u-radio>
- </u-radio-group>
- </view>
-
- <view class="personal-pet-breed-btns">
- <view class="personal-pet-breed-btn">
- <u-button color="#FFF4E4" @click="breedSelectClose">
- <view style="color: #FFAA48;">
- 取消
- </view>
- </u-button>
- </view>
- <view class="personal-pet-breed-btn" @click="breedSelectConfirm">
- <u-button color="#FFBF60">
- <view style="color: #fff;">
- 确定
- </view>
- </u-button>
- </view>
- </view>
-
-
- </view>
- </u-overlay>
- <u-datetime-picker :maxDate='getMaxDate()' :minDate="getMinDate()" :show="showBirthday" v-model="tempBirthday" mode="year-month" @confirm="yearMonthConfirm"
- @cancel="yearMonthClose"></u-datetime-picker>
-
-
-
- </view>
- </template>
-
- <script>
- import { getDictList } from "@/api/system/user"
- export default {
- data() {
- return {
- showSex: false,
- showBreed: false,
- showWeight: false,
- showBirthday: false,
- showDisposition: false,
- sexActions: [['男生','女生']],
- weightActions: [['小型(<10 KG)','中型(10~20KG)', '大型(20KG以上)']],
- dispositionActions: [],
-
- breedData: [],
- searchBreedData:[],
- tempBreed: '',
- searchValue: '',
- tempBirthday: '',
- tempDisposition: ''
- }
- },
- props:{
- petType: {
- type: String,
- default: 'dog'
- },
- petBaseInfo:{
- type: Object,
- default: ()=> ({
- name: '',
- gender: '',
- breed: '',
- bodyType: '',
- birthDate: '',
- personality: ''
- })
- }
- },
- mounted() {
- this.getPersonalityDataList()
- this.getPetBreed()
- },
- methods: {
- nameChange(){
- this.updatePetBaseInfo()
- },
- sexSelect(e) {
- this.petBaseInfo.gender = e.value[0];
- this.showSex = false;
- this.updatePetBaseInfo()
- },
- weightSelect(e) {
- this.petBaseInfo.bodyType = e.value[0];
- this.showWeight=false;
- this.updatePetBaseInfo()
- },
- breedSelectOpen() {
- this.searchBreedData=this.breedData;
- this.searchValue='';
- this.tempBreed = this.petBaseInfo.breed;
- this.showBreed = true;
- },
- searchBreed(){
- if(this.searchValue&&this.searchValue!=''){
- this.searchBreedData=this.breedData.filter(e=>e.includes(this.searchValue));
- }else{
- this.searchBreedData=this.breedData
- }
-
- },
- breedSelectClose() {
- this.tempBreed = '';
- this.showBreed = false;
- },
- breedSelectConfirm() {
- this.petBaseInfo.breed = this.tempBreed;
- this.showBreed = false;
- this.updatePetBaseInfo()
- },
- yearMonthOpen() {
- if (this.petBaseInfo.birthDate) {
- this.tempBirthday = Number(new Date(this.petBaseInfo.birthDate))
- } else {
- this.tempBirthday = Number(new Date())
- }
- this.showBirthday = true;
- },
- yearMonthClose() {
- this.showBirthday = false;
- },
- yearMonthConfirm(e) {
- const timeFormat = uni.$u.timeFormat;
- this.petBaseInfo.birthDate = timeFormat(e.value, 'yyyy-mm');
- this.showBirthday = false;
- this.updatePetBaseInfo()
- },
- dispositionSelectOpen() {
- this.tempDisposition = this.petBaseInfo.personality;
- this.showDisposition = true;
- },
- dispositionSelectClose() {
- this.tempDisposition = '';
- this.showDisposition = false;
- },
- dispositionSelectConfirm() {
- this.petBaseInfo.personality = this.tempDisposition;
- this.showDisposition = false;
- this.updatePetBaseInfo()
- },
- checkboxChange(n) {
- console.log('change', n);
- this.updatePetBaseInfo();
- },
- updatePetBaseInfo() {
- // 触发 update 事件,将修改后的 petBaseInfo 对象发送给父组件
- this.$emit('update:petBaseInfo', this.petBaseInfo);
- },
- getPersonalityDataList(){
- getDictList('pet_personality').then(res=>{
- if (res.code == 200) {
- this.dispositionActions = Array.from(new Set(res.data.map(e=>e.dictLabel)))
- } else {
- this.$modal.showToast('获取性格失败')
- }
- })
- },
- getPetBreed(){
- let petBreedType = this.petType=='cat'?'pet_brand_cat':'pet_brand_dog'
- getDictList(petBreedType).then(res=>{
- if (res.code == 200) {
- this.breedData =Array.from(new Set(res.data.map(e=>e.dictLabel)))
- } else {
- this.$modal.showToast('获取种类失败')
- }
- })
- },
- getMaxDate(){
- return Date.now()
- },
- getMinDate(){
- let dt = new Date();
- dt.setFullYear(dt.getFullYear() - 30)
- return Date.parse(dt)
- }
- }
- }
- </script>
-
- <style >
- .personal-pet-basic-info{
- background-color: #fff;
- margin-top: 10px;
- padding: 10px 20px;
- }
- .personal-pet-breed-btns{
- display: flex;
- justify-content: space-around;
- align-items: center;
- flex-wrap: nowrap;
- flex-direction: row;
- }
- .personal-pet-breed-btn{
- width: 40%;
- }
- </style>
|