cultivationApp/pages/plantAdmin/addHouse.vue

414 lines
11 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<view class="cards">
<up-form labelWidth='130' :model="data.formData" ref="form1">
<view class="c-title">栏舍信息</view>
<view class="c-box">
<up-form-item label="栏舍名称" prop="fence_house_name" borderBottom required>
<up-input input-align="right" placeholder="请输入栏舍名称" border="none"
v-model="data.formData.fence_house_name"></up-input>
</up-form-item>
<up-form-item label="栏舍类型" prop="fence_house_type" borderBottom required @click="isshow">
<up-input input-align="right" placeholder="请选择栏舍类型" suffixIcon="arrow-down"
suffix-icon-style="color: #b6b6b6;" border="none" v-model="fence_house_type" readonly
style="pointer-events: none;"></up-input>
</up-form-item>
<up-form-item label="动物名称" prop="animal_name" borderBottom required>
<up-input input-align="right" placeholder="请输入动物名称" border="none"
v-model="data.formData.animal_name"></up-input>
</up-form-item>
<up-form-item label="动物类型" prop="animal_type" borderBottom required @click="isshow1">
<up-input input-align="right" placeholder="请选择动物类型" suffixIcon="arrow-down"
suffix-icon-style="color: #b6b6b6;" border="none" v-model="animal_type" readonly
style="pointer-events: none;"></up-input>
</up-form-item>
<up-form-item label="容量" prop="capacity" borderBottom required>
<up-input input-align="right" placeholder="请输入栏舍容量" border="none"
v-model="data.formData.capacity"></up-input>
</up-form-item>
<up-form-item label="负责人" prop="master" borderBottom required>
<up-input input-align="right" placeholder="请输入负责人姓名" border="none"
v-model="data.formData.master"></up-input>
</up-form-item>
<up-form-item label="负责人电话" prop="master_phone" borderBottom required>
<up-input input-align="right" placeholder="请输入负责人电话" type="number" border="none"
v-model="data.formData.master_phone"></up-input>
</up-form-item>
</view>
<view class="card-li">
<view class="c-title">栏舍图片</view>
<view class="c-box c-box-p">
<view class="code-img1">
<view class="" v-if="pic.length>0"
style="display: flex;flex-direction: row;flex-wrap: wrap;margin-bottom: 30rpx;">
<view class="" v-for="(item,i) in pic" style="margin-right: 30rpx;">
<view class="">
<u-icon name="close" size="15" style="margin-left:120.85rpx;" @click="delimg(i)"></u-icon>
<u-image :src="item" width="150.85rpx" height="150.85rpx"></u-image>
</view>
</view>
</view>
</view>
<view class="code-img">
<view class="" @click="updateImgFn">
<view class="carime-icon">
<u-image src="/static/img/DJSC.png" width="91.12rpx" height="91.12rpx"></u-image>
<view class="">
点击上传图片
</view>
</view>
</view>
</view>
</view>
</view>
</up-form>
<u-action-sheet :show="show" keyName="name" closeOnClickOverlay :actions="fence_house_type_lists" title="请选择"
@close="show = false" @select="leavaType">
</u-action-sheet>
<u-action-sheet :show="show1" keyName="name" :actions="animal_type_lists" title="请选择" @close="show1 = false"
@select="leavaType1">
</u-action-sheet>
<u-button class="btn" @click="submit">提交</u-button>
</view>
</view>
</template>
<script setup>
import {
ref,
reactive,
onMounted,
unref,
computed,
watch
} from 'vue';
import {
animalTypeLists,
fenceHouseTypeLists
} from "@/api/dict.js"
import {
fenceHouseAdd
} from "@/api/manage.js"
import {
onLoad,
onReady
} from '@dcloudio/uni-app';
import {
Uploads
} from "@/api/upload.js"
import store from "@/store/index.js"
const form1 = ref(null);
const data = reactive({
formData: {
fence_house_name: '',
fence_house_type: '',
animal_name: '',
animal_type: '',
capacity: '',
master: '',
master_phone: '',
pic: ['https://img0.baidu.com/it/u=1717510975,3258230326&fm=253&fmt=auto?w=120&h=80',
'https://img0.baidu.com/it/u=1717510975,3258230326&fm=253&fmt=auto?w=120&h=80'
]
},
rules: {
fence_house_name: [{
type: 'string',
required: true,
message: '请填写栏舍名称',
trigger: ['blur', 'change']
}],
fence_house_type: [{
type: 'string',
required: true,
message: '请选择栏舍类型',
trigger: ['blur', 'change']
}],
animal_name: [{
type: 'string',
required: true,
message: '请输入动物名称',
trigger: ['blur', 'change']
}],
animal_type: [{
type: 'string',
required: true,
message: '请输入动物类型',
trigger: ['blur', 'change']
}],
capacity: [{
type: 'string',
required: true,
message: '请输入栏舍容量',
trigger: ['blur', 'change']
}],
master: [{
type: 'string',
required: true,
message: '请输入负责人姓名',
trigger: ['blur', 'change']
}],
master_phone: [{
required: true,
message: '请输入手机号',
trigger: ['change', 'blur'],
},
{
validator: (rule, value, callback) => {
// 上面有说返回true表示校验通过返回false表示不通过
// uni.$u.test.mobile()就是返回true或者false的
return uni.$u.test.mobile(value);
},
message: '手机号码不正确',
// 触发器可以同时用blur和change
trigger: ['change', 'blur'],
}
],
}
});
const pic = reactive([]);
const show = ref(false)
const show1 = ref(false)
//图片删除
const delimg = (i) => {
pic.splice(i, 1);
}
//图片上传
const updateImgFn = async () => {
uni.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
Uploads(res.tempFilePaths[0], 'img').then(res => {
// console.log(res)
if (res.code == 1) {
pic.push(res.data.url)
console.log(data.formData)
uni.$u.toast('上传成功')
}
}).catch(err => {
//console.log('err', err);
// uni.$u.toast('上传失败')
})
},
fail: function(err) {
//console.log('choose失败');
uni.$u.toast('添加失败')
}
});
// let res = await Uploads()
// data.formData.pic = res.data.image
}
const isshow = () => {
show.value = true
}
const isshow1 = () => {
show1.value = true
}
const fence_house_type = ref('');
const animal_type = ref('');
const leavaType = (e) => {
fence_house_type.value = e.name;
data.formData.fence_house_type = e.value;
}
const leavaType1 = (e) => {
animal_type.value = e.name;
data.formData.animal_type = e.value;
}
onReady(() => {
form1.value.setRules(data.rules);
});
const animal_type_lists = ref([]);
const initAnimalTypeLists = ()=>{
animalTypeLists().then(res=>{
animal_type_lists.value = res.data;
})
}
initAnimalTypeLists();
const fence_house_type_lists = ref([]);
const initFenceHouseTypeLists = ()=>{
fenceHouseTypeLists().then(res=>{
fence_house_type_lists.value = res.data;
})
}
initFenceHouseTypeLists();
const submit = async () => {
try {
const valid = await form1.value.validate();
if (valid) {
// console.log('表单通过', data.formData);
if (pic.length == 0) {
uni.$u.toast('请上传图片')
return
}
data.formData.pic = JSON.stringify(pic)
data.formData.farm_id = store.state.farm.id
// 表单验证通过,执行提交操作
fenceHouseAdd(data.formData).then((res) => {
console.log(res)
if (res.code == 1) {
uni.navigateBack({
delta: 1
})
uni.$u.toast(res.msg)
// console.log('提交通过');
}
})
} else {
// 表单验证不通过
console.log('表单验证未通过');
}
} catch (error) {
// 捕获验证过程中的错误
console.error(error);
}
}
onLoad((options) => {
})
</script>
<style lang="scss">
page {
background-color: #fffcf5;
}
.cards {
background-color: #fffcf5;
padding: 0;
padding-bottom: 80rpx;
.c-title {
font-weight: bold;
display: flex;
align-items: center;
padding: 30rpx;
padding-bottom: 15rpx;
&:before {
content: '';
display: inline-block;
height: 0.8rem;
width: 6rpx;
margin-top: 0.2rem;
margin-right: 10rpx;
background-color: #feb048;
border-radius: 6rpx;
}
}
.c-box {
background-color: #fff;
padding-left: 30rpx;
padding-right: 20rpx;
padding-bottom: 20rpx;
box-shadow: 0px 2px 8px rgba(0, 0, 0, 0.1);
}
.c-box-p {
padding: 20rpx;
}
.btn {
margin: 20rpx auto;
width: 694rpx;
height: 80rpx;
border-radius: 80rpx;
background-color: #ffb049;
color: #fff;
}
}
.card-li-tit {
position: relative;
span {
position: absolute;
left: -9px;
color: #f56c6c;
line-height: 20px;
font-size: 20px;
top: 3px;
}
margin-bottom: 20rpx;
}
.confim-btn {
margin: 0 auto;
width: 196.26rpx;
height: 66.59rpx;
/* border: ; */
border: #00A15E 1px solid;
color: #00A15E;
display: flex;
align-items: center;
justify-content: center;
border-radius: 42.06rpx 42.06rpx 42.06rpx 42.06rpx;
}
.up-img {
width: 341.71rpx
}
.today-btn {
width: 588.79rpx;
background-color: #00A15E;
color: white;
position: fixed;
bottom: 40rpx;
/* transform: ; */
left: 50%;
transform: translateX(-50%);
background: linear-gradient(to right, #00A15E, #4CC593);
/* margin: 0 auto; */
}
.code-img {
background-color: #F4F4F4;
height: 350.47rpx;
position: relative;
.carime-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
}
}
</style>