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.

341 lines
7.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="container">
<HeaderCustom title='企业修改' :showBack="true"></HeaderCustom>
<div class="formBox">
<uv-form labelPosition="left" :model="formField" labelWidth="100" :rules="rules" ref="form">
<uv-form-item required label="企业名称" prop="company_name">
<uv-input v-model="formField.company_name" border="none"
placeholder="请输入企业名称">
</uv-input>
</uv-form-item>
<uv-form-item required label="姓名" prop="contact_person">
<uv-input v-model="formField.contact_person" border="none"
placeholder="请输入姓名">
</uv-input>
</uv-form-item>
<uv-form-item required label="手机号码" prop="contact_phone">
<uv-input v-model="formField.contact_phone" border="none"
placeholder="请输入手机号码">
</uv-input>
</uv-form-item>
<uv-form-item required label="邮箱" prop="contact_email">
<uv-input v-model="formField.contact_email" border="none"
placeholder="请输入邮箱">
</uv-input>
</uv-form-item>
<uv-form-item required label="地址" prop="address" @click="openAddressPicker">
<uv-input v-model="formField.address" readonly border="none"
placeholder="请选择地址">
</uv-input>
<uv-picker ref="addressPicker" :columns="addressList" keyName="name" @change="addressChange"
@confirm="confirm">
</uv-picker>
</uv-form-item>
<uv-button type="primary" text="提交" customStyle="margin-top: 10px"
@click="submit"></uv-button>
</uv-form>
</div>
</view>
</template>
<script setup>
import {
computed,
onMounted,
ref
} from "vue";
import {
onShow
} from "@dcloudio/uni-app";
import {
useAuthStore,
useUserStore
} from "@/store";
import {
regions
} from '/static/json/regions.js'
import HeaderCustom from '/components/HeaderCustom/HeaderCustom.vue'
import RPC from "@/utils/request";
const authStore = useAuthStore()
const userStore = useUserStore()
const props = defineProps({
id: [String],
});
if (props.id && props.id !== 'null') {
RPC.post("/enterprise/detail", {
id: Number(props.id),
}).then((res) => {
formField.value = {
...res.enterprise || {}
};
});
}
function copyText(text) {
uni.setClipboardData({
data: text,
success: function() {
uni.showToast({
title: '复制成功',
icon: 'success',
});
},
fail: function() {
uni.showToast({
title: '复制失败',
icon: 'none',
});
},
})
}
onShow(() => {
if (!authStore?.isLoggedIn) {
uni.switchTab({
url: `/pages/index/index`,
});
uni.showToast({
title: "请先登录",
icon: "none",
})
return
}
})
const form = ref(null)
const formField = ref({
contact_person: '',
phone: '',
email: '',
address: '',
company_name: '',
})
const pickType = type => {
const index = formField.value.type.findIndex(item => item === type)
if (index >= 0) {
formField.value.type.splice(index, 1)
} else {
formField.value.type.push(type)
}
}
const rules = {
'company_name': {
type: 'string',
required: true,
message: '请填写企业名称',
trigger: ['blur', 'change']
},
'name': {
type: 'string',
required: true,
message: '请填写姓名',
trigger: ['blur', 'change']
},
'contact_phone': {
type: 'string',
required: true,
message: '请填写手机号码',
trigger: ['blur', 'change']
},
'contact_email': {
type: 'string',
required: true,
message: '请填写邮箱',
trigger: ['blur', 'change']
},
'address': {
type: 'string',
required: true,
message: '请选择地址',
trigger: ['blur', 'change']
}
}
const submit = () => {
// 如果有错误会在catch中返回报错信息数组校验通过则在then中返回true
form.value.validate().then(res => {
// uni.showToast({
// icon: 'success',
// title: '校验通过'
// })
RPC.post('/enterprise/update', formField.value).then(res => {
uni.showToast({
icon: 'success',
title: '操作成功'
})
setTimeout(() => {
uni.navigateBack()
}, 1000)
})
}).catch(errors => {
// uni.showToast({
// icon: 'error',
// title: '校验失败'
// })
})
}
const provinces = ref([])
const citys = ref([])
const areas = ref([])
const addressList = computed(() => [provinces.value, citys.value, areas.value])
const addressPicker = ref(null)
const pickerValue = ref(['0', '0', '0'])
const defaultValue = ref(['3442', '1', '2'])
const addressChange = e => {
const {
columnIndex,
index,
indexs
} = e
// 改变了省
if (columnIndex === 0) {
citys.value = provinces.value[index]?.children || []
areas.value = citys.value[0]?.children || []
addressPicker.value.setIndexs([index, 0, 0], true)
} else if (columnIndex === 1) {
areas.value = citys.value[index]?.children || []
addressPicker.value.setIndexs(indexs, true)
}
}
const confirm = e => {
// console.log('确认选择的地区:', e);
// uni.showToast({
// icon: 'none',
// title: `${e.value[0].name}/${e.value[1].name}/${e.value[2].name}`
// })
formField.value.address = `${e.value[0].name}/${e.value[1].name}/${e.value[2].name}`
}
const handlePickValueDefault = () => {
pickerValue.value[0] = provinces.value.findIndex(item => Number(item.id) == defaultValue.value[0]);
// 设置市
citys.value = provinces.value[pickerValue.value[0]]?.children || [];
pickerValue.value[1] = citys.value.findIndex(item => Number(item.id) == defaultValue.value[1]);
// 设置区
areas.value = citys.value[pickerValue.value[1]]?.children || [];
pickerValue.value[2] = areas.value.findIndex(item => Number(item.id) == defaultValue.value[2]);
// 重置下位置
addressPicker.value.setIndexs([pickerValue.value[0], pickerValue.value[1], pickerValue.value[2]], true);
}
const openAddressPicker = () => {
addressPicker.value.open()
handlePickValueDefault()
}
const getData = () => {
provinces.value = regions.sort((left, right) => (Number(left.code) > Number(right.code) ?
1 : -1));
handlePickValueDefault()
}
onMounted(() => {
getData()
})
</script>
<style lang="scss" scoped>
.container {
font-size: 14px;
min-height: 100vh;
background-color: #f8f8f8;
}
.titleBox {
background-color: #fff;
padding: 20px 4vw;
.title {
font-size: 16px;
font-weight: 700;
}
.line {
width: 5vw;
height: 2px;
background-color: #3F70FF;
margin-top: 4px;
margin-bottom: 8px;
}
.desc {
font-size: 12px;
font-weight: 500;
line-height: 18px;
}
}
.formBox {
padding: 10px;
:deep(.uv-form) {
background-color: #fff;
padding: 10px;
border-radius: 10px;
.uv-form-item {
background-color: #F4F4F4;
margin-bottom: 10px;
border-radius: 10px;
padding-left: 20px;
}
}
.type_select_box {
display: flex;
flex-wrap: wrap;
gap: 15px;
padding-right: 20px;
margin-top: 10px;
.item {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #fff;
font-size: 12px;
width: 90px;
height: 70px;
border-radius: 6px;
.img {
width: 20px;
height: 20px;
margin-bottom: 6px;
}
&.selected {
border: 1px solid #3F70FF;
background-color: rgba(63, 112, 255, 0.1);
}
}
}
}
.infoBox {
margin-top: 20px;
padding: 10px 5vw;
background-color: #fff;
border-radius: 10px;
font-size: 16px;
.line {
display: flex;
margin: 10px 0;
.key {
width: 70px;
font-weight: 700;
}
}
}
</style>