优化前端地址

This commit is contained in:
闵宪瑞 2025-02-24 15:49:27 +08:00
parent c8eda585cb
commit 392474f731

View File

@ -1,169 +1,226 @@
<!--用户详情-->
<template> <template>
<el-tabs v-model="state.page.orderStatus" @tab-click="handleClick"> <div>
<el-tab-pane v-for="status in state.getOrderStatus" :label="status.name" :name="status.status"> <!--查交易记录的按钮-->
<el-table <el-button type="primary" round @click="openAddDialog" size="small">添加</el-button>
:data="state.getList"
style="width: 100%" <!--表格-->
> <el-row>
<el-table-column prop="id" label="编号" /> <el-col :span="24">
<el-table-column prop="item.title" label="商品名称" /> <el-table v-loading="loading" :data="state.getList">
<el-table-column prop="price" label="图片" > <!-- 列表结开始-->
<template #default="{ row }"> <el-table-column prop="recipientName" label="收货人" align="center" />
<img :src="row.item.image" style="width: 100px; height: 100px;"> <el-table-column prop="phone" label="电话/手机" align="center" />
<el-table-column prop="city" label="所在地区" align="center" />
<el-table-column prop="address" label="详细地址" align="center" />
<!--列表结束-->
<el-table-column label="操作" align="center" >
<template #default="scope">
<el-button @click="del(scope.row.id)" type="danger" size="small">删除</el-button>
</template>
</el-table-column>
<template v-slot:empty>
<el-empty description="数据去外太空了~" />
</template> </template>
</el-table-column> </el-table>
<el-table-column prop="price" label="购买单价" /> <!-- 分页控件 -->
<el-table-column prop="quantity" label="购买数量" /> <el-pagination
<el-table-column prop="totalAmount" label="成交总价" /> v-if="state.query.total > 0"
<el-table-column prop="createdTime" label="购买时间" width="220" /> :current-page="state.query.page"
<el-table-column prop="addressDTO.city" label="收货地址" width="220" /> :page-size="state.query.limit"
<el-table-column label="操作" min-width="120"> :total="state.query.total"
<template #default="scope" > background layout="prev, pager, next"
<el-button link type="primary" size="small" v-if="state.page.orderStatus == 0" @click="update(scope.row,1)">开始发货</el-button> @current-change="handlePageChange"
<el-button link type="primary" size="small" v-if="state.page.orderStatus == 1" @click="update(scope.row,2)">确认收货</el-button> />
<el-button link type="primary" size="small" v-if="state.page.orderStatus == 2" @click="update(scope.row,3)">我要评价</el-button> </el-col>
<el-button link type="primary" size="small" v-if="state.page.orderStatus == 3" @click="del(scope.row.id)">删除订单</el-button> </el-row>
</template> <!-- 新增/编辑对话框 -->
</el-table-column> <el-dialog v-model="state.dialogVisible" title="新增" width="50%">
</el-table> <el-form
</el-tab-pane> :model="state.formData"
</el-tabs> ref="formRef"
label-width="100px"
<el-dialog
v-model="dialogVisible"
title="我要评价"
width="500"
>
<el-form
ref="formRef"
style="max-width: 600px"
:model="state.orderForm"
label-width="auto"
label-position="top"
>
<el-form-item
prop="evaluate"
label="评论内容"
:rules="[
{
required: true,
message: '评论内容不能为空',
trigger: 'blur',
},
]"
> >
<el-input v-model="state.orderForm.evaluate" :rows="4" <!-- 表单开始===============================================================================================================================-->
type="textarea"/> <el-form-item label="收货人" prop="recipientName" :rules="[{ required: true, message: '请输入收货人', trigger: 'blur' }]">
</el-form-item> <el-input v-model="state.formData.recipientName"/>
<el-form-item </el-form-item>
prop="score" <el-form-item label="电话/手机" prop="phone" :rules="[{ required: true, message: '请输入电话/手机', trigger: 'blur' }]">
label="评分" <el-input v-model="state.formData.phone"/>
> </el-form-item>
<el-rate v-model="state.orderForm.score" /> <el-form-item label="所在地区" prop="city" :rules="[{ required: true, message: '请输入所在地区', trigger: 'blur' }]">
</el-form-item> <!-- <el-input v-model.number="state.formData.city"/>-->
<el-cascader
style="width: 260px"
</el-form> v-model="value"
<template #footer> :options="state.options"
<div class="dialog-footer"> :props="props"
<el-button type="primary" @click="review(formRef)" > @change="handleChange"
/>
</el-button> </el-form-item>
<el-form-item label="详细地址" prop="address" :rules="[{ required: true, message: '请输入详细地址', trigger: 'blur' }]">
<el-input v-model="state.formData.address"/>
</el-form-item>
<!--表单结束===============================================================================================================================-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="state.dialogVisible = false">取消</el-button>
<el-button type="primary" @click="saveTransaction(formRef)">保存</el-button>
</div> </div>
</template> </el-dialog>
</el-dialog> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive } from 'vue' //
import { FormInstance, TabsPaneContext } from 'element-plus' import type {FormInstance, TabsPaneContext} from 'element-plus'
const formRef = ref<FormInstance>() const formRef = ref<FormInstance>()
const state = reactive({ const loading = ref(true)
getOrderStatus:[ const state = reactive(<any>{
{name:"未发货",status:0}, route:"api/address",
{name:"已发货",status:1}, dialogVisible:false,
{name:"未评价",status:2}, getList: [],//
{name:"已完成",status:3}, query:{
], total: 0, //
getList:[], page: 1, //
orderForm:{ limit: 5, //
score: 0 title:"",
status:0,
}, },
page:{ formData:{},
page:1, cateList:[],
limit:10, options:[],
order:'desc', })
orderStatus:0, const value = ref('')
const props = {
expandTrigger: 'hover' as const,
}
/**
* 转成列表
* @param value
*/
const handleChange = (value:any) => {
const labels = getLabelsFromValue(value, state.options);
state.formData.city = labels
}
// label
const getLabelsFromValue = (value:any, options:any) => {
const labels:any = [];
const findLabels = (value:any, options:any) => {
for (const item of options) {
if (item.value === value[0]) {
labels.push(item.label);
if (value.length > 1 && item.children) {
findLabels(value.slice(1), item.children);
}
break;
}
}
};
findLabels(value, options);
return labels;
};
//
const init = () => {
frontRequest.get(`${state.route}/page`, {
params: state.query
}).then((res:any) => {
state.getList = res.data.list
state.query.total = res.data.total
}).finally(() => {
loading.value = false
})
}
//
const openAddDialog = () => {
state.formData = {
sort:1
} }
}) state.dialogVisible = true
const dialogVisible = ref(false)
/**
* 删除订单
* @param id
*/
const del = (id:any) => {
frontRequest.delete(`/sys/order/${id}`).then(res =>{
toast.success("删除成功~")
getList()
})
} }
//
/** const edit = (row: any) => {
* 获取列表数据 state.formData = row
*/ state.dialogVisible = true
function getList() {
adminRequest.get("/sys/order/page",{ params: state.page}).then(res =>{
state.getList = res.data.list;
})
} }
const handleClick = (tab: TabsPaneContext, event: Event) => { //
const selectedStatus = state.getOrderStatus[tab.index].status; const saveTransaction = async (formEl: FormInstance | undefined) => {
state.page.orderStatus = selectedStatus;
getList()
}
const update = (data:any,status:number) => {
// if(status === 4){
// dialogVisible.value = true
// state.orderForm = {...data,evaluate:''}
// state.orderForm.status = 4
// return
// }
data.orderStatus = status
adminRequest.put("/sys/order",data).then(() =>{
toast.success("修改成功~")
getList()
})
}
onMounted(()=>{
getList()
})
const review = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return
formEl.validate((valid) => { formEl.validate((valid) => {
if (valid) { if (valid) {
updateOrderItemApi(state.orderForm).then(res =>{ state.formData.city = state.formData.city.toString()
toast.success("修改成功~") if (state.formData.id) {
dialogVisible.value = false //
getList() frontRequest.put(`${state.route}`, state.formData).then(() =>{
}) init()
state.dialogVisible = false
ElMessage.success("提交成功~")
})
} else {
//
frontRequest.post(`${state.route}`, state.formData).then(() =>{
init()
state.dialogVisible = false
ElMessage.success("提交成功~")
})
}
} }
}) })
} }
//
const del = async (id: number) => {
try {
await frontRequest.delete(`${state.route}/${id}`)
init()
ElMessage.success("删除成功~")
} catch (error) {
ElMessage.error("删除失败~")
}
}
//
const handlePageChange = (page: number) => {
state.query.page = page
init()
}
const handleClick = (tab: TabsPaneContext, event: Event) => {
// tab name
const selectedStatus = state.getStatus[tab.index].status;
state.query.status = selectedStatus;
init();
};
//
onMounted(() => {
init()
frontRequest.get(`/api/area/tree`).then((res:any) => {
console.log(res)
state.options = res.data
})
})
</script> </script>
<style scoped> <style scoped>
.dialog-footer {
text-align: right;
}
:deep(.el-upload) {
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
:deep(.el-upload:hover) {
border-color: var(--el-color-primary);
}
</style> </style>
<route lang="json"> <route lang="json">