修改配送区域管理

This commit is contained in:
Anyon 2020-09-18 11:00:18 +08:00
parent 05711afcdc
commit d073d692b7
3 changed files with 96 additions and 43 deletions

View File

@ -39,13 +39,19 @@ class ShopTruckTemplate extends Controller
* 配送区域管理
* @auth true
* @menu true
* @throws \think\db\exception\DbException
*/
public function region()
{
if ($this->request->isGet()) {
$this->title = '配送区域管理';
$this->citys = TruckService::instance()->region(3);
$this->citys = TruckService::instance()->region(3, null);
$this->fetch('form_region');
} else {
$data = $this->_vali(['nos.default' => '', 'oks.default' => '']);
if ($data['nos']) $this->app->db->name('ShopTruckRegion')->whereIn('id', explode(',', $data['nos']))->update(['status' => 0]);
if ($data['oks']) $this->app->db->name('ShopTruckRegion')->whereIn('id', explode(',', $data['oks']))->update(['status' => 1]);
$this->success('修改配送区域成功!');
}
}
@ -85,7 +91,7 @@ class ShopTruckTemplate extends Controller
$data['code'] = CodeExtend::uniqidDate(12, 'T');
}
if ($this->request->isGet()) {
$this->citys = TruckService::instance()->region(2);
$this->citys = TruckService::instance()->region(2, 1);
}
}

View File

@ -14,28 +14,38 @@ use think\admin\service\InterfaceService;
class TruckService extends Service
{
/**
* 楚才开放平台接口账号
* 测试的账号及密钥,随时可能会变更,请联系客服获取自己的账号和密钥
* @var string
* 模拟计算快递费用
* @return string
*/
protected $appid = '6998081316132228';
/**
* 楚才开放平台接口密钥
* 测试的账号及密钥,随时可能会变更,请联系客服获取自己的账号和密钥
* @var string
*/
protected $appkey = '193fc1d9a2aac78475bc8dbeb9a5feb1';
public function amount()
{
return '0.00';
}
public function region($level = 3)
/**
* 配送区域树型数据
* @param integer $level 最大级别
* @param integer $status 状态筛选
* @return array
*/
public function region($level = 3, $status = null)
{
$items = $this->app->db->name('ShopTruckRegion')->where('level', '<=', $level)->column('id,pid,name,status', 'id');
return DataExtend::arr2tree($items, 'id', 'pid', 'subs');
$query = $this->app->db->name('ShopTruckRegion');
if (is_numeric($level)) $query->where('level', '<=', $level);
if (is_numeric($status)) $query->where(['status' => $status]);
$items = DataExtend::arr2tree($query->column('id,pid,name,status', 'id'), 'id', 'pid', 'subs');
// 排序子集为空的省份和城市
foreach ($items as $ik => $item) {
foreach ($item['subs'] as $ck => $city) {
if (isset($city['subs']) && empty($city['subs'])) {
unset($items[$ik]['subs'][$ck]);
}
}
if (isset($item['subs']) && empty($item['subs'])) {
unset($items[$ik]);
}
}
return $items;
}
/**
@ -47,9 +57,7 @@ class TruckService extends Service
*/
public function query($code, $number)
{
$service = InterfaceService::instance();
$service->setAuth($this->appid, $this->appkey);
return $service->doRequest('https://open.cuci.cc/user/api.auth.express/query', [
return $this->_getInterface()->doRequest('https://open.cuci.cc/user/api.auth.express/query', [
'type' => 'free', 'express' => $code, 'number' => $number,
]);
}
@ -60,10 +68,20 @@ class TruckService extends Service
* @throws \think\admin\Exception
*/
public function company()
{
return $this->_getInterface()->doRequest('https://open.cuci.cc/user/api.auth.express/getCompany');
}
/**
* 获取楚才开放平台接口实例
* @return InterfaceService
*/
private function _getInterface(): InterfaceService
{
$service = InterfaceService::instance();
$service->setAuth($this->appid, $this->appkey);
return $service->doRequest('https://open.cuci.cc/user/api.auth.express/getCompany');
// 测试的账号及密钥,随时可能会变更,请联系客服获取自己的账号和密钥
$service->setAuth("6998081316132228", "193fc1d9a2aac78475bc8dbeb9a5feb1");
return $service;
}
}

View File

@ -4,36 +4,33 @@
<div class="think-box-shadow" id="TruckForm">
<div class="padding-40">
<div class="layui-card">
<div class="layui-card-header">配送区域</div>
<div class="layui-card-header layui-bg-gray">配送区域</div>
<div class="layui-card-body">
<div ng-repeat="x in items" ng-click="SetActiveProvince(x)" ng-class="{false:'layui-btn-warm'}[x.status]" class="layui-btn layui-btn-radius margin-left-0 margin-right-5 margin-bottom-5">
<label class="think-checkbox margin-right-0"><input ng-change="SetChangeCity(x,x.status)" type="checkbox" ng-model="x.status"></label>
<span ng-bind="x.name"></span>
<div ng-repeat="x in items" ng-click="SetActiveProvince(x)" ng-class="{true:'layui-btn-normal',false:'layui-btn-warm'}[x.status]" class="layui-btn layui-btn-radius margin-left-0 margin-right-5 margin-bottom-5">
<label class="think-checkbox margin-right-0"><input ng-change="SetChangeCity(x,x.status)" type="checkbox" ng-model="x.status"></label><span ng-bind="x.name"></span>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header"><b class="color-green">{{province.name}}</b> 可选区域</div>
<div class="layui-card-header layui-bg-gray"><b class="color-green" ng-bind="province.name"></b> 可选区域</div>
<div class="layui-card-body">
<div ng-repeat="x in province.subs" ng-click="SetActiveCity(x)" ng-class="{false:'layui-btn-warm'}[x.status]" class="layui-btn layui-btn-radius margin-left-0 margin-right-5 margin-bottom-5">
<label class="think-checkbox margin-right-0"><input ng-change="SetChangeCity(x,x.status)" type="checkbox" ng-model="x.status"></label>
<span ng-bind="x.name"></span>
<div ng-repeat="x in province.subs" ng-click="SetActiveCity(x)" ng-class="{true:'layui-btn-normal',false:'layui-btn-warm'}[x.status]" class="layui-btn layui-btn-radius margin-left-0 margin-right-5 margin-bottom-5">
<label class="think-checkbox margin-right-0"><input ng-change="SetChangeCity(x,x.status)" type="checkbox" ng-model="x.status"></label><span ng-bind="x.name"></span>
</div>
</div>
</div>
<div class="layui-card">
<div class="layui-card-header"><b class="color-green">{{city.name}}</b> 可选区域</div>
<div class="layui-card-header layui-bg-gray"><b class="color-green" ng-bind="city.name"></b> 可选区域</div>
<div class="layui-card-body">
<div ng-repeat="x in city.subs" ng-class="{false:'layui-btn-warm'}[x.status]" class="layui-btn layui-btn-radius margin-left-0 margin-right-5 margin-bottom-5">
<label class="think-checkbox margin-right-0"><input ng-change="SetChangeCity(x,x.status)" type="checkbox" ng-model="x.status"></label>
<span ng-bind="x.name"></span>
<div ng-repeat="x in city.subs" ng-class="{true:'layui-btn-normal',false:'layui-btn-warm'}[x.status]" class="layui-btn layui-btn-radius margin-left-0 margin-right-5 margin-bottom-5">
<label class="think-checkbox margin-right-0"><input type="checkbox" ng-model="x.status"></label><span ng-bind="x.name"></span>
</div>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" ng-click="SetRuleItem()">确定修改</button>
</div>
</div>
<div class="hr-line-dashed margin-top-40"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" ng-click="Confirm()">确定修改</button>
</div>
</div>
@ -43,11 +40,14 @@
<script>
require(['angular'], function () {
var app = angular.module("TruckForm", []).run(callback);
var _data = document.getElementById('RegionData').value || '[]';
var data = document.getElementById('RegionData').value || '[]';
angular.bootstrap(document.getElementById(app.name), [app.name]);
function callback($rootScope) {
$rootScope.items = angular.fromJson(_data);
$rootScope.items = angular.fromJson(data);
$rootScope.province = $rootScope.items[0];
$rootScope.city = $rootScope.province.subs[0];
/*! 数据显示状态转换 */
$rootScope.items.forEach(function (province) {
province.status = !!province.status;
if (province.subs) province.subs.forEach(function (city) {
@ -57,8 +57,7 @@
});
});
});
$rootScope.province = $rootScope.items[0];
$rootScope.city = $rootScope.province.subs[0];
/*! 切换下级区域选中状态 */
$rootScope.SetChangeCity = function (item, status) {
if (item.subs) item.subs.forEach(function (item) {
item.status = status;
@ -67,13 +66,43 @@
})
});
};
/*! 切换显示省份对象 */
$rootScope.SetActiveProvince = function (province) {
$rootScope.city = province.subs[0];
$rootScope.province = province;
};
/*! 切换显示城市对象 */
$rootScope.SetActiveCity = function (city) {
$rootScope.city = city;
}
/*! 数据监听切换同步 */
$rootScope.$watch('province', function () {
$rootScope.province.status = $rootScope.province.subs.some(function (city) {
if (city.status) return true;
});
}, true);
$rootScope.$watch('city', function () {
$rootScope.city.status = $rootScope.city.subs.some(function (area) {
if (area.status) return true;
});
}, true);
/*! 确认并更新到数据库 */
$rootScope.Confirm = function () {
var nos = [], oks = [];
$rootScope.items.forEach(function (province) {
province.status ? oks.push(province.id) : nos.push(province.id);
if (province.subs) province.subs.forEach(function (city) {
city.status ? oks.push(city.id) : nos.push(city.id);
if (city.subs) city.subs.forEach(function (area) {
area.status ? oks.push(area.id) : nos.push(area.id);
});
});
});
/*! 提交数据并返回结果 */
$.form.load('{:url("region")}', {nos: nos.join(','), oks: oks.join(',')}, 'post', function (ret) {
return ret.code ? $.msg.success(ret.info) : $.msg.error(ret.info), false;
});
};
}
});
</script>