猫妈狗爸伴宠师小程序前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

318 lines
6.0 KiB

<template>
<view class="containers po-r">
<image src="" mode="" class="mainBg"></image>
<view class="w-100 po-a content">
<stepProgress :step="1"></stepProgress>
<view class="bg-fff mt22 form ">
<view class="title fw700 size-30 flex-rowl">
基本信息
</view>
<dForm ref="formRef" :list="state.list" labelWidth="220rpx" :isFooter="false" @input="onFormInput"></dForm>
</view>
<view class="license__view" v-if="form.license">
<view class="license">
<up-checkbox-group
v-model="licenseData.selected"
shape="circle"
activeColor="#FFBF60"
labelColor="#000000"
labelSize="26rpx"
>
<view class="license-options">
<up-checkbox
v-for="item in LICENSE_OPTIONS"
:key="`license-${item.value}`"
:label="item.label"
:name="item.value"
>
</up-checkbox>
</view>
</up-checkbox-group>
<view class="tips">
温馨提示:上传专业执照将大大增加通过概率,且会快速晋升为高级伴宠师获取更高报酬
</view>
<up-upload
:fileList="licenseData.fileList"
@afterRead="afterRead"
@delete="deletePic"
multiple
>
<image src="../static/list/icon-upload.png" style="width: 144rpx;height: 144rpx;"></image>
</up-upload>
</view>
</view>
<view class="bg-fff mt22 form bt120">
<view class="title fw700 size-30 flex-rowl">
个人宠物类型
</view>
<view class="flex-between wrap mt32">
<view class="type">
<image src="../static/list/cat.png" mode="widthFix" @click="onSelectPet('cat')"></image>
<image class="active" v-if="petType === 'cat'" src="../static/list/cat-active.png" mode="widthFix"></image>
</view>
<view class="type">
<image src="../static/list/dog.png" mode="widthFix" @click="onSelectPet('dog')"></image>
<image class="active" v-if="petType === 'dog'" src="../static/list/dog-active.png" mode="widthFix"></image>
</view>
<view class="type">
<image src="../static/list/special-pet.png" mode="widthFix" @click="onSelectPet('special-pet')"></image>
<image class="active" v-if="petType === 'special-pet'" src="../static/list/special-pet-active.png" mode="widthFix"></image>
</view>
</view>
</view>
<view class="footer-btn" @click="toNext">
<view class="btn">
下一步
</view>
</view>
</view>
</view>
</template>
<script setup>
import { ref, reactive } from "vue";
import dForm from "@/components/dForm/index.vue"
import stepProgress from '../components/stepProgress.vue';
const state = reactive({
list: [{
type: "input",
label: "姓名",
key: "name",
placeholder: "请输入您的真实姓名",
},
{
type: "input",
label: "身份证号",
key: "idCard",
placeholder: "请输入您的真实身份证号",
},
{
type: "radio",
label: "性别",
key: "sex",
options: [{
name: "男",
value: 0,
},
{
name: "女",
value: 1,
}
]
},
{
type: "input",
label: "年龄",
key: "gender",
placeholder: "请输入您的年龄",
},
{
type: "input",
label: "养宠经验",
key: "shij",
placeholder: "请输入您的养宠年限",
unit: "年"
},
{
type: "radio",
label: "是否有专业执照",
key: "license",
placeholder: "请选择",
options: [{
name: "是",
value: 1,
}, {
name: "没有",
value: 0,
}]
},
]
})
const formRef = ref()
const form = ref({})
const onFormInput = (e) => {
form.value = e
}
const licenseData = reactive({
selected: [],
fileList: []
})
const LICENSE_OPTIONS = [
{
label: '兽医职称专业执照',
value: 0,
},
{
label: '宠物美容洗护专业执照',
value: 1,
},
{
label: '宠物康复护理专业执照',
value: 2,
},
{
label: '宠物膳食管理专业执照',
value: 3,
},
{
label: '其他专业执照',
value: 4,
},
]
const afterRead = () => {
// todo
}
const deletePic = (event) => {
licenseData.fileList.splice(event.index, 1);
};
const petType = ref()
const onSelectPet = (type) => {
petType.value = type
}
const toNext = () => {
// todo: save data
const data = {
...form.value,
...licenseData,
petType: petType.value,
}
console.log('--data', data)
uni.navigateTo({
url: "/otherPages/authentication/examination/start"
})
}
</script>
<style lang="scss" scoped>
.bt120 {
margin-bottom: 120rpx;
width: 716rpx;
box-sizing: border-box;
}
.footer-btn {
width: 100vw;
height: 144rpx;
background-color: #fff;
display: flex;
justify-content: center;
position: fixed;
bottom: 0;
left: 0;
align-items: center;
.btn {
font-size: 30rpx;
color: #fff;
display: flex;
justify-content: center;
align-items: center;
width: 574rpx;
height: 94rpx;
border-radius: 94rpx;
background-color: #FFBF60;
}
}
.type {
width: 190rpx;
margin-bottom: 74rpx;
position: relative;
image {
width: 100%;
}
.active {
position: absolute;
top: 0;
left: 0;
}
}
.form {
padding: 40rpx 32rpx;
box-sizing: border-box;
width: 716rpx;
}
.title {
&::before {
content: "";
display: block;
width: 9rpx;
height: 33rpx;
background-color: #FFBF60;
margin-right: 7rpx;
}
}
.mb6 {
margin-bottom: 6rpx;
}
.containers {
.mainBg {
width: 100vw;
height: 442rpx;
background-image: linear-gradient(to bottom, #FFBF60, #f5f5f5);
}
.content {
top: 0;
left: 0;
padding: 16rpx;
}
}
.license__view {
width: 716rpx;
padding-bottom: 40rpx;
box-sizing: border-box;
background-color: #FFFFFF;
.license {
width: 100%;
padding: 13rpx 16rpx;
box-sizing: border-box;
background-color: #FFFCF1;
&-options {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
}
.tips {
margin: 22rpx 0 24rpx 0;
color: #FFBF60;
font-size: 22rpx;
width: 100%;
word-break: break-all;
}
}
</style>