mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-ui.git
synced 2026-11-13 12:28:54 +08:00
refactor: 四端完成 Options API → script setup + vuex → pinia 迁移
- buyer(95) / seller(169) / im(53) / manager(280) 共 597 个组件全部从 Options API 转换为 <script setup> - 四端 vuex 全部移除,状态管理统一迁移至 pinia 4(stores/ 目录) - util.js 等基础设施去除 vm 首参依赖;全局属性($Message/$filters 等)在 script 内改为具名导入 - 被外部 ref 访问的公共组件均已补齐 defineExpose(清单见各端 MIGRATION-VUE3.md) - 各端 eslint 启用 vue/component-api-style 防止新代码回退 Options API - 四端 yarn build 全部通过;迁移约定与注意事项已更新至各端 MIGRATION-VUE3.md
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<el-dialog v-model="showAddr" width="800" title="收件人地址">
|
||||
<el-form
|
||||
:model="formData"
|
||||
ref="form"
|
||||
ref="formRef"
|
||||
label-position="left"
|
||||
label-width="100px"
|
||||
:rules="ruleInline"
|
||||
@@ -13,7 +13,7 @@
|
||||
</el-form-item>
|
||||
<el-form-item label="收件地区" prop="address">
|
||||
{{ formData.address || '暂无地址' }}
|
||||
<el-button type="primary" style="margin-left: 10px;" size="small" @click="$refs.map.open()">选择</el-button>
|
||||
<el-button type="primary" style="margin-left: 10px;" size="small" @click="mapRef.open()">选择</el-button>
|
||||
</el-form-item>
|
||||
<el-form-item label="详细地址" prop="detail">
|
||||
<el-input v-model="formData.detail" style="width: 600px"></el-input>
|
||||
@@ -39,11 +39,12 @@
|
||||
<el-button type="primary" class="mr_10" :loading="loading" @click="save">保存收货地址</el-button>
|
||||
</div></template>
|
||||
</el-dialog>
|
||||
<multipleMap ref="map" @callback="getAddress"></multipleMap>
|
||||
<multipleMap ref="mapRef" @callback="getAddress"></multipleMap>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
<script setup>
|
||||
import { ref, watch } from "vue";
|
||||
import { Message } from "@/utils/message";
|
||||
import multipleMap from "@/components/map/multiple-map";
|
||||
import {
|
||||
@@ -51,122 +52,126 @@ import {
|
||||
editMemberAddress,
|
||||
getAddrDetail
|
||||
} from '@/api/address';
|
||||
export default {
|
||||
name: 'addressManage',
|
||||
props: {
|
||||
id: { // 传入的地址id
|
||||
defalut: '',
|
||||
type: String
|
||||
}
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
showAddr: false, // 控制模态框显隐
|
||||
formData: { // 表单数据
|
||||
isDefault: false
|
||||
},
|
||||
ruleInline: { // 验证规则
|
||||
name: [{ required: true, message: '请输入收件人姓名', trigger: 'blur' }],
|
||||
address: [{ required: true, message: '请输入地址', trigger: 'change' }],
|
||||
detail: [
|
||||
{ required: true, message: '请输入详细地址', trigger: 'blur' }
|
||||
],
|
||||
mobile: [
|
||||
{ required: true, message: '手机号不能为空', trigger: 'blur' },
|
||||
{
|
||||
type: 'string',
|
||||
pattern: /^1[3|4|5|6|7|8][0-9]{9}$/,
|
||||
message: '手机号格式出错',
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
},
|
||||
loading: false, // 提交的加载状态
|
||||
mapMsg: {} // 地图信息
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
save () { // 保存地址
|
||||
this.$refs.form.validate((valid) => {
|
||||
if (valid) {
|
||||
const params = JSON.parse(JSON.stringify(this.formData));
|
||||
params.consigneeAddressPath = params.address.replace(/\s/g, ',');
|
||||
delete params.address;
|
||||
this.loading = true;
|
||||
if (this.id) {
|
||||
editMemberAddress(params).then((res) => {
|
||||
this.loading = false;
|
||||
if (res.success) {
|
||||
Message.success('编辑地址成功');
|
||||
this.$emit('change', true);
|
||||
this.hide();
|
||||
}
|
||||
}).catch(() => { this.loading = false; });
|
||||
} else {
|
||||
newMemberAddress(params).then((res) => {
|
||||
this.loading = false;
|
||||
if (res.success) {
|
||||
Message.success('新增地址成功');
|
||||
this.$emit('change', true);
|
||||
this.hide();
|
||||
}
|
||||
}).catch(() => { this.loading = false; });
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
getAddrById (id) {
|
||||
// 获取地址详情
|
||||
getAddrDetail(id).then((res) => {
|
||||
if (res.success) {
|
||||
const data = res.result;
|
||||
data.address = res.result.consigneeAddressPath.replace(/,/g, ' ');
|
||||
this.formData = data;
|
||||
}
|
||||
});
|
||||
},
|
||||
getAddress (val) {
|
||||
// 获取地图选择信息
|
||||
if(val.type === 'select'){
|
||||
const paths = val.data.map(item => item.name).join(',')
|
||||
const ids = val.data.map(item => item.id).join(',')
|
||||
this.formData['address'] = paths
|
||||
this.formData['consigneeAddressIdPath'] = ids
|
||||
const coord = val.data[val.data.length - 1].center.split(',')
|
||||
this.formData.lat = coord[1]
|
||||
this.formData.lon = coord[0]
|
||||
}else{
|
||||
this.formData["address"] = val.data.addr;
|
||||
this.formData["consigneeAddressIdPath"] = val.data.addrId;
|
||||
this.formData["detail"] = val.data.address;
|
||||
this.formData.lat = val.data.position.lat;
|
||||
this.formData.lon = val.data.position.lng;
|
||||
}
|
||||
|
||||
},
|
||||
show () { // 地址模态框显示
|
||||
this.showAddr = true;
|
||||
},
|
||||
hide () { // 地址模态框隐藏
|
||||
this.showAddr = false;
|
||||
defineOptions({ name: 'addressManage' });
|
||||
|
||||
const props = defineProps({
|
||||
id: { // 传入的地址id
|
||||
defalut: '',
|
||||
type: String
|
||||
}
|
||||
});
|
||||
|
||||
const emit = defineEmits(['change']);
|
||||
|
||||
const showAddr = ref(false); // 控制模态框显隐
|
||||
const formData = ref({ // 表单数据
|
||||
isDefault: false
|
||||
});
|
||||
const ruleInline = { // 验证规则
|
||||
name: [{ required: true, message: '请输入收件人姓名', trigger: 'blur' }],
|
||||
address: [{ required: true, message: '请输入地址', trigger: 'change' }],
|
||||
detail: [
|
||||
{ required: true, message: '请输入详细地址', trigger: 'blur' }
|
||||
],
|
||||
mobile: [
|
||||
{ required: true, message: '手机号不能为空', trigger: 'blur' },
|
||||
{
|
||||
type: 'string',
|
||||
pattern: /^1[3|4|5|6|7|8][0-9]{9}$/,
|
||||
message: '手机号格式出错',
|
||||
trigger: 'blur'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
id: { // 传入的地址id
|
||||
handler: function (v) {
|
||||
if (v) {
|
||||
this.getAddrById(v);
|
||||
} else {
|
||||
this.formData = {isDefault: false}
|
||||
this.$refs.form.resetFields();
|
||||
}
|
||||
]
|
||||
};
|
||||
const loading = ref(false); // 提交的加载状态
|
||||
const mapMsg = ref({}); // 地图信息
|
||||
|
||||
const formRef = ref(null);
|
||||
const mapRef = ref(null);
|
||||
|
||||
function save () { // 保存地址
|
||||
formRef.value.validate((valid) => {
|
||||
if (valid) {
|
||||
const params = JSON.parse(JSON.stringify(formData.value));
|
||||
params.consigneeAddressPath = params.address.replace(/\s/g, ',');
|
||||
delete params.address;
|
||||
loading.value = true;
|
||||
if (props.id) {
|
||||
editMemberAddress(params).then((res) => {
|
||||
loading.value = false;
|
||||
if (res.success) {
|
||||
Message.success('编辑地址成功');
|
||||
emit('change', true);
|
||||
hide();
|
||||
}
|
||||
}).catch(() => { loading.value = false; });
|
||||
} else {
|
||||
newMemberAddress(params).then((res) => {
|
||||
loading.value = false;
|
||||
if (res.success) {
|
||||
Message.success('新增地址成功');
|
||||
emit('change', true);
|
||||
hide();
|
||||
}
|
||||
}).catch(() => { loading.value = false; });
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
multipleMap
|
||||
});
|
||||
}
|
||||
|
||||
function getAddrById (id) {
|
||||
// 获取地址详情
|
||||
getAddrDetail(id).then((res) => {
|
||||
if (res.success) {
|
||||
const data = res.result;
|
||||
data.address = res.result.consigneeAddressPath.replace(/,/g, ' ');
|
||||
formData.value = data;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getAddress (val) {
|
||||
// 获取地图选择信息
|
||||
if(val.type === 'select'){
|
||||
const paths = val.data.map(item => item.name).join(',')
|
||||
const ids = val.data.map(item => item.id).join(',')
|
||||
formData.value['address'] = paths
|
||||
formData.value['consigneeAddressIdPath'] = ids
|
||||
const coord = val.data[val.data.length - 1].center.split(',')
|
||||
formData.value.lat = coord[1]
|
||||
formData.value.lon = coord[0]
|
||||
}else{
|
||||
formData.value["address"] = val.data.addr;
|
||||
formData.value["consigneeAddressIdPath"] = val.data.addrId;
|
||||
formData.value["detail"] = val.data.address;
|
||||
formData.value.lat = val.data.position.lat;
|
||||
formData.value.lon = val.data.position.lng;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
function show () { // 地址模态框显示
|
||||
showAddr.value = true;
|
||||
}
|
||||
|
||||
function hide () { // 地址模态框隐藏
|
||||
showAddr.value = false;
|
||||
}
|
||||
|
||||
defineExpose({ show, hide });
|
||||
|
||||
watch(
|
||||
() => props.id, // 传入的地址id
|
||||
(v) => {
|
||||
if (v) {
|
||||
getAddrById(v);
|
||||
} else {
|
||||
formData.value = {isDefault: false}
|
||||
formRef.value.resetFields();
|
||||
}
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
Reference in New Issue
Block a user