Browse Source

feat(zhjw): 添加地区树形结构接口并优化销售编辑页面

- 新增 getAreaTree 接口,用于获取地区树形结构数据
- 在销售编辑页面使用级联选择器替换原有的省市区选择
- 重构部分后端代码,创建 CommonService 类以支持公共接口
- 更新路由配置,添加新的 common 控制器
master
liutong 1 year ago
parent
commit
70cb12491d
  1. 11
      admin/src/addon/zhjw/api/common.ts
  2. 109
      admin/src/addon/zhjw/views/sales/sales_edit.vue
  3. 47
      niucloud/addon/zhjw/app/adminapi/controller/common/Common.php
  4. 16
      niucloud/addon/zhjw/app/adminapi/controller/orders/Orders.php
  5. 15
      niucloud/addon/zhjw/app/adminapi/route/route.php
  6. 71
      niucloud/addon/zhjw/app/service/admin/common/CommonService.php

11
admin/src/addon/zhjw/api/common.ts

@ -0,0 +1,11 @@
import request from '@/utils/request'
/**
*
*/
// 获取地区树形结构
export function getAreaTree() {
return request.get(`zhjw/common/getAreaTree`)
}

109
admin/src/addon/zhjw/views/sales/sales_edit.vue

@ -108,42 +108,17 @@
class="input-width"/>
</el-form-item>
<el-form-item :label="t('provinceId')">
<el-select class="input-width" v-model="formData.province_id" clearable
:placeholder="t('provinceIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in provinceIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('cityId')">
<el-select class="input-width" v-model="formData.city_id" clearable :placeholder="t('cityIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in cityIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('districtId')">
<el-select class="input-width" v-model="formData.district_id" clearable
:placeholder="t('districtIdPlaceholder')">
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in districtIdList"
:key="index"
:label="item['name']"
:value="item['id']"
/>
</el-select>
<el-form-item :label="t('所在地区')">
<el-cascader
class="input-width"
v-model="formData.full_address_id"
:options="options_area"
:props="{
label: 'name', //
value: 'id', //
children: 'children' //
}"
@change="changeArea"></el-cascader>
</el-form-item>
<el-form-item :label="t('communityName')">
@ -180,6 +155,7 @@ import {t} from '@/lang'
import {useDictionary} from '@/app/api/dict'
import type {FormInstance} from 'element-plus'
import {getSalesInfo, addSales, editSales, getWithStaffList, getWithSysAreaList} from '@/addon/zhjw/api/sales';
import {getAreaTree} from '@/addon/zhjw/api/common';
import {useRoute} from 'vue-router'
const route = useRoute()
@ -210,10 +186,54 @@ const initialFormData = {
district_id: '',
community_name: '',
customer_tags: '',
full_address: '',
full_address_id: [],// =[130000,130300,130304]
}
const formData: Record<string, any> = reactive({...initialFormData})
//
const options_area = ref([]);//
//
const getAreaTreeArr = async () => {
options_area.value = await (await getAreaTree()).data
}
getAreaTreeArr()
//
const changeArea = (selectedValues: any[]) => {
console.log('用户选择的地址值:', selectedValues);
// formData
if (selectedValues.length >= 1) {
formData.province_id = selectedValues[0]; // ID
}
if (selectedValues.length >= 2) {
formData.city_id = selectedValues[1]; // ID
}
if (selectedValues.length >= 3) {
formData.district_id = selectedValues[2]; // ID
}
//
const province = options_area.value.find((item: any) => item.id == selectedValues[0]);
const city = province?.children?.find((item: any) => item.id == selectedValues[1]);
const district = city?.children?.find((item: any) => item.id == selectedValues[2]);
// --
let full_address = `${province?.name || ''}-${city?.name || ''}-${district?.name || ''}`;
formData.full_address = full_address;
console.log('更新后的 formData:', formData,formData.full_address_id);
};
const setFormData = async (id: number = 0) => {
Object.assign(formData, initialFormData)
const data = await (await getSalesInfo(id)).data
@ -269,21 +289,8 @@ const setGetStaffIdList = async () => {
getStaffIdList.value = await (await getWithStaffList({})).data
}
setGetStaffIdList()
const provinceIdList = ref([] as any[])
const setProvinceIdList = async () => {
provinceIdList.value = await (await getWithSysAreaList({})).data
}
setProvinceIdList()
const cityIdList = ref([] as any[])
const setCityIdList = async () => {
cityIdList.value = await (await getWithSysAreaList({})).data
}
setCityIdList()
const districtIdList = ref([] as any[])
const setDistrictIdList = async () => {
districtIdList.value = await (await getWithSysAreaList({})).data
}
setDistrictIdList()
//
const formRules = computed(() => {
return {

47
niucloud/addon/zhjw/app/adminapi/controller/common/Common.php

@ -0,0 +1,47 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\zhjw\app\adminapi\controller\common;
use addon\zhjw\app\service\admin\common\CommonService;
use app\model\sys\SysArea;
use core\base\BaseAdminController;
use think\Response;
class Common extends BaseAdminController
{
/**
* Hello World
* @return Response
*/
public function index()
{
return success('SUCCESS', 'Hello World');
}
public function getAreaTree()
{
// 获取所有地址数据
$areas = SysArea::where('status', 1)
->order('sort', 'asc')
->select()
->toArray();
// 构建树形结构
$tree = (new CommonService())->areaBuildTree($areas);
return success($tree);
}
}

16
niucloud/addon/zhjw/app/adminapi/controller/orders/Orders.php

@ -12,7 +12,7 @@
namespace addon\zhjw\app\adminapi\controller\orders;
use core\base\BaseAdminController;
use addon\zhjw\app\service\admin\orders\OrdersService;
use addon\zhjw\app\service\admin\orders\CommonService;
/**
@ -37,7 +37,7 @@ class Orders extends BaseAdminController
["payment_time",["",""]],
["create_time",["",""]]
]);
return success((new OrdersService())->getPage($data));
return success((new CommonService())->getPage($data));
}
/**
@ -46,7 +46,7 @@ class Orders extends BaseAdminController
* @return \think\Response
*/
public function info(int $id){
return success((new OrdersService())->getInfo($id));
return success((new CommonService())->getInfo($id));
}
/**
@ -65,7 +65,7 @@ class Orders extends BaseAdminController
]);
$this->validate($data, 'addon\zhjw\app\validate\orders\Orders.add');
$id = (new OrdersService())->add($data);
$id = (new CommonService())->add($data);
return success('ADD_SUCCESS', ['id' => $id]);
}
@ -86,7 +86,7 @@ class Orders extends BaseAdminController
]);
$this->validate($data, 'addon\zhjw\app\validate\orders\Orders.edit');
(new OrdersService())->edit($id, $data);
(new CommonService())->edit($id, $data);
return success('EDIT_SUCCESS');
}
@ -96,17 +96,17 @@ class Orders extends BaseAdminController
* @return \think\Response
*/
public function del(int $id){
(new OrdersService())->del($id);
(new CommonService())->del($id);
return success('DELETE_SUCCESS');
}
public function getStudentsAll(){
return success(( new OrdersService())->getStudentsAll());
return success(( new CommonService())->getStudentsAll());
}
public function getContractsAll(){
return success(( new OrdersService())->getContractsAll());
return success(( new CommonService())->getContractsAll());
}
}

15
niucloud/addon/zhjw/app/adminapi/route/route.php

@ -29,6 +29,21 @@ Route::group('zhjw', function () {
AdminLog::class
]);
// USER_CODE_BEGIN -- 公共控制器
Route::group('zhjw/common', function () {
//班级管理列表
Route::get('getAreaTree', 'addon\zhjw\app\adminapi\controller\common\Common@getAreaTree');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
// USER_CODE_END -- 公共控制器

71
niucloud/addon/zhjw/app/service/admin/common/CommonService.php

@ -0,0 +1,71 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace addon\zhjw\app\service\admin\common;
use addon\zhjw\app\model\orders\Orders;
use addon\zhjw\app\model\students\Students;
use addon\zhjw\app\model\contracts\Contracts;
use core\base\BaseAdminService;
/**
* 公共接口服务层
* Class OrdersService
* @package addon\zhjw\app\service\admin\orders
*/
class CommonService extends BaseAdminService
{
public function __construct()
{
parent::__construct();
}
/**
* 获取订单管理列表
* @param array $where
* @return array
*/
public function getPage(array $where = [])
{
$field = 'id,student_id,contract_id,amount,order_type,pay_type,payment_status,payment_time,create_time,update_time,is_deleted,created_by,created_role,updated_by,updated_role';
$order = 'id desc';
$search_model = $this->model->withSearch(["student_id","contract_id","amount","order_type","pay_type","payment_status","payment_time","create_time"], $where)->with(['students','contracts'])->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
}
/**
* 构建树形结构
* @param array $areas 所有地址数据
* @param int $pid 父级ID
* @return array
*/
public function areaBuildTree(array $areas, int $pid = 0)
{
$tree = [];
foreach ($areas as $area) {
if ($area['pid'] == $pid) {
$children = $this->areaBuildTree($areas, $area['id']);
if ($children) {
$area['children'] = $children;
}
$tree[] = $area;
}
}
return $tree;
}
}
Loading…
Cancel
Save