添加:代客下单功能

This commit is contained in:
wuhui_zzw 2024-04-10 14:58:51 +08:00
parent 1cff04e30a
commit 30426a5319
31 changed files with 5219 additions and 0 deletions

View File

@ -0,0 +1 @@
## Yunshop 插件开发简易文档

View File

@ -0,0 +1,17 @@
<?php
return [
app\common\events\PluginWasEnabled::class => function (app\common\services\PluginManager $manager, $plugins) {
// 你也可以在回调函数的参数列表中使用类型提示Laravel 服务容器将会自动进行依赖注入
\Artisan::call('migrate', ['--path' => 'plugins/help-user-buying/migrations', '--force' => true]);
Log::info('[ExamplePlugin] 示例插件已启用IoC 容器自动为我注入了 PluginManager 实例:', compact('manager'));
},
app\common\events\PluginWasDisabled::class => function ($plugin) {
// 回调函数被调用时 Plugin 实例会被传入作为参数
Log::info('[help-user-buying] 示例插件已禁用,我拿到了插件实例', ['instance' => $plugin]);
},
app\common\events\PluginWasDeleted::class => function () {
\Artisan::call('migrate:rollback', ['--path' => 'plugins/help-user-buying/migrations']);
Log::info('[help-user-buying] 啊啊啊啊啊啊啊我被删除啦 QwQ');
}
];

View File

@ -0,0 +1,11 @@
{
"name": "help-user-buying",
"terminal": "",
"version": "2.0.26",
"title": "代客下单",
"description": "代替客户在后台下单,支持自营,门店,供应商。",
"author": "blank",
"url": "https://www.yunzshop.com/",
"namespace": "Yunshop\\HelpUserBuying",
"config": "config.tpl"
}

View File

@ -0,0 +1,20 @@
<?php
namespace Yunshop\ExamplePlugin\Listener;
use Illuminate\Contracts\Events\Dispatcher;
class SeparatedTestListener
{
/**
* 在这个方法里你可以做任何可以在 bootstrap.php 内做的事情
*
* @param Dispatcher $events
* @return mixed
*/
public function subscribe(Dispatcher $events)
{
// do nothing
}
}

View File

@ -0,0 +1,240 @@
<?php
namespace Yunshop\HelpUserBuying;
class PluginApplication extends \app\common\services\PluginApplication
{
protected function setConfig()
{
}
protected function setMenuConfig()
{
\app\backend\modules\menu\Menu::current()->setPluginMenu('help_user_buying', [
'name' => '代客下单',
'type' => 'industry',
'url' => 'plugin.help-user-buying.admin.index.index', //url 可以填写http 也可以直接写路由
'url_params' => '',//如果是url填写的是路由则启用参数否则不启用
'permit' => 1,//如果不设置则不会做权限检测
'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示
'top_show' => 0,
'left_first_show' => 0,
'left_second_show' => 0,
'icon' => '',//菜单图标
'list_icon' => 'help_user_buying',
'parents' => [],
'child' => [
// 'help-user-buying-select' => [
// 'name' => '选择基地',
// 'permit' => 1,
// 'menu' => 1,
// 'icon' => '',
// 'url' => 'plugin.help-user-buying.admin.home.select',
// 'url_params'=> '',
// 'parents' => ['help_user_buying'],
// 'child' => []
// ],
'help-user-buying-index' => [
'name' => '选择订单类型',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-order' => [
'name' => '下单页',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.set-member-id',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-shop-index' => [
'name' => '商城商品下单',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.shop-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-shop-goods-list' => [
'name' => '商城商品列表',
'url' => 'plugin.help-user-buying.admin.index.shopGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
'help-user-buying-shop-goods-buy' => [
'name' => '商城订单预下单',
'url' => 'plugin.help-user-buying.shop.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
'help-user-buying-shop-create' => [
'name' => '商城订单下单',
'url' => 'plugin.help-user-buying.shop.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
]
],
'help-user-buying-store-index' => [
'name' => '门店商品下单',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.store-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-store-goods-list' => [
'name' => '门店商品列表',
'url' => 'plugin.help-user-buying.admin.index.storeGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-store-goods-buy' => [
'name' => '门店订单预下单',
'url' => 'plugin.help-user-buying.store.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-store-create' => [
'name' => '门店订单下单',
'url' => 'plugin.help-user-buying.store.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
]
],
'help-user-buying-supplier-index' => [
'name' => '供应商商品下单',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.supplier-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-supplier-goods-list' => [
'name' => '供应商商品列表',
'url' => 'plugin.help-user-buying.admin.index.supplierGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-supplier-index'],
],
]
],
'help-user-buying-goods-increase' => [
'name' => '商品加减',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.goods-increase',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-get-search-member' => [
'name' => '获取搜索会员',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.getSearchMember',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-user-merge-pay' => [
'name' => '支付',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-user-merge-pay-credit2' => [
'name' => '余额支付',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.credit2',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
'help-user-buying-user-merge-pay-COD' => [
'name' => '货到付款',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.COD',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
'help-user-buying-user-merge-pay-confirmPay' => [
'name' => '确认支付',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.confirmPay',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
]
],
'help-user-buying-address' => [
'name' => '获取地址数据',
'permit' => 0,
'menu' => 0,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.member-address.get-address',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-editMemberAddress' => [
'name' => '编辑收货地址',
'permit' => 0,
'menu' => 0,
'url' => 'plugin.help-user-buying.admin.member-address.edit-member-address',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-createMemberAddress' => [
'name' => '新增收货地址',
'permit' => 0,
'menu' => 0,
'url' => 'plugin.help-user-buying.admin.member-address.create-member-address',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-search-source' => [
'name' => '搜索',
'permit' => 0,
'menu' => 0,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.get-source',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
]
]
]);
}
public function boot()
{
}
}

View File

@ -0,0 +1,209 @@
<?php
namespace Yunshop\HelpUserBuying\admin;
use app\common\components\BaseController;
use app\common\exceptions\ShopException;
use app\common\helpers\Url;
use app\common\models\Address;
use app\common\models\Member;
use app\common\models\MemberAddress;
use app\common\models\Street;
use app\common\models\YzMemberAddress;
use app\common\services\Session;
use app\backend\modules\goods\services\CategoryService;
use Yunshop\HelpUserBuying\models\Goods;
use Yunshop\HelpUserBuying\store\models\Store;
use Yunshop\HelpUserBuying\store\models\StoreGoods;
class HomeController extends BaseController
{
protected $store_id;
protected $plugin_id = [0];
public function shopIndex()
{
$member_id = $this->setMemberId();
$member = Member::getMemberById($member_id);
$member_address = $this->getMemberAddress($member_id);
$catetory_menus = CategoryService::getCategoryMultiMenuSearch(['catlevel' => \Setting::get('shop.category')['cat_level']]);
if (app('plugins')->isEnabled('supplier')) {
$this->plugin_id[] = 92;
}
if (app('plugins')->isEnabled('net-car')) {
$this->plugin_id[] = 41;
}
$list = Goods::where('stock', '>', 0)->where('status', 1)->whereIn('plugin_id', $this->plugin_id)
->with('hasManyGoodsCategory')->get();
if ($list->isEmpty()) {
throw new ShopException('无商品');
}
$list = $this->goodsMap($list, 'shop');
return view('Yunshop\HelpUserBuying::admin.index', [
'goodsList' => $list->toArray(),
'catetory_menus' => $catetory_menus,
'store' => [],
'member' => $member,
'member_address' => $member_address,
'route_url' => yzWebUrl('plugin.help-user-buying.admin.home.shop-index'),
'order_url' => [
'create_url' => yzWebUrl('plugin.help-user-buying.shop.controller.create.index'),
'pre_url' => yzWebUrl('plugin.help-user-buying.shop.controller.goods-buy.index'),
],
]);
}
public function storeIndex()
{
$member_id = $this->setMemberId();
$store_id = intval(request()->input('store_id'));
$member = Member::getMemberById($member_id);
$member_address = $this->getMemberAddress($member_id);
$store = Store::uniacid()->whereId($store_id)->first();
//$is_goods = StoreGoods::whereStoreId($store_id)->get()->toArray();
$catetory_menus = \Yunshop\StoreCashier\common\services\CategoryService::getCategoryMenu(
[
'store_id' => $store_id,
'catlevel' => 2,
'ids' => [],
]
);
$list = StoreGoods::getGoodsList([], $this->store_id)->pluginId()->where('stock', '>', 0)->where('status', 1)
->with('hasOneCategory')->where('stock', '>', 0)->get();
if ($list->isEmpty()) {
throw new ShopException('无商品');
}
$list = $this->goodsMap($list, 'store');
return view('Yunshop\HelpUserBuying::admin.index', [
'goodsList' => $list->toArray(),
'catetory_menus' => $catetory_menus,
'store' => $store,
'member' => $member,
'member_address' => $member_address,
'route_url' => yzWebUrl('plugin.help-user-buying.admin.home.store-index'),
'order_url' => [
'create_url' => yzWebUrl('plugin.help-user-buying.store.controller.create.index'),
'pre_url' => yzWebUrl('plugin.help-user-buying.store.controller.goods-buy.index'),
],
]);
}
protected function goodsMap($list, $style = 'shop')
{
$list->map(function($goods) use ($style) {
$goods->thumb = yz_tomedia($goods->thumb);
if ($style == 'store') {
$goods->category_ids = $goods->hasOneCategory->category_ids;
} elseif ($style == 'shop') {
$goods->category_ids = $goods->hasManyGoodsCategory->implode('category_ids', ',');
}
});
return $list;
}
protected function setMemberId()
{
$member_id = intval(request()->input('uid'));
if (empty($member_id)) {
throw new ShopException('用户不存在');
}
Session::set('member_id', $member_id);
return $member_id;
}
public function getMemberAddress($uid)
{
if(\Setting::get('shop.trade.is_street')) {
$member_address = YzMemberAddress::uniacid()->whereUid($uid)->where('isdefault',1)->first();
if ($member_address) {
$member_address->province_id = Address::where('areaname',$member_address->province)->value('id');
$member_address->city_id = Address::where('areaname',$member_address->city)->value('id');
$member_address->district_id = Address::where('areaname',$member_address->district)->where('parentid', $member_address->city_id)->value('id');
$member_address->street_id = Street::where('parentid', $member_address->district_id)->where('areaname',$member_address->street)->value('id');
}
} else{
$member_address = MemberAddress::uniacid()->whereUid($uid)->where('isdefault',1)->first();
if ($member_address) {
$member_address->province_id = Address::where('areaname',$member_address->province)->value('id');
$member_address->city_id = Address::where('areaname',$member_address->city)->value('id');
$member_address->district_id = Address::where('areaname',$member_address->district)->where('parentid', $member_address->city)->value('id');
}
}
return !empty($member_address) ? $member_address : [];
}
public function select()
{
if (app('plugins')->isEnabled('store-cashier')) {
$store = \Yunshop\StoreCashier\common\models\Store::uniacid()->get()->toArray();
}
//预防万一先清空会员的member_id Session
Session::clear('member_id');
return view('Yunshop\HelpUserBuying::admin.select',[
'store' => isset($store)?$store:[],
])->render();
}
public function goodsIncrease()
{
$id = intval(\YunShop::request()->id);
$num = intval(\YunShop::request()->num);
$type = intval(\YunShop::request()->type);
$goods = Goods::where('status', 1)->find($id);
if (empty($goods)) {
return $this->errorJson('商品不存在或以下架',['code'=> 2]);
}
$new_num = $type ? $num : $num + 1;
if ($goods->stock < $new_num) {
return $this->successJson('最大',['data' => $goods->stock]);
}
return $this->successJson('ok',['data' => $new_num]);
}
}

View File

@ -0,0 +1,437 @@
<?php
namespace Yunshop\HelpUserBuying\admin;
use app\common\components\BaseController;
use app\common\exceptions\AppException;
use app\common\exceptions\ShopException;
use app\common\helpers\Url;
use app\common\models\DispatchType;
use app\common\models\Member;
use app\common\services\Session;
use app\common\models\GoodsSpecItem;
use Illuminate\Http\Request;
use Yunshop\HelpUserBuying\common\CategoryFactory;
use Yunshop\HelpUserBuying\models\Goods;
use Yunshop\HelpUserBuying\models\GoodsOption;
use Yunshop\HelpUserBuying\store\models\Store;
use Yunshop\HelpUserBuying\store\models\StoreGoods;
use Yunshop\HelpUserBuying\supplier\models\SupplierGoods;
class IndexController extends BaseController
{
protected $order_type = [
0 => 'shop',
32 => 'store',
92 => 'supplier',
];
protected $plugin_id = [0];
public function index()
{
return view('Yunshop\HelpUserBuying::buying.select',[
'store_enabled' => app('plugins')->isEnabled('store-cashier') ? 1 : 0,
'supplier_enabled' => app('plugins')->isEnabled('supplier') ? 1 : 0,
])->render();
}
public function getSource(Request $request)
{
if ($request->get('source') == 'store-cashier' && $request->get('source_input')){
$store = \Yunshop\StoreCashier\common\models\Store::uniacid()
->select('id', 'store_name')
->where('id', $request->source_input)
->orWhere('store_name', 'like', '%' . $request->source_input . '%')
->get()
->toArray();
return $this->successJson('ok', ['stores' => $store]);
}
if ($request->get('source') == 'supplier' && $request->get('source_input')){
$supplier = \Yunshop\Supplier\common\models\Supplier::uniacid()
->select('id', 'realname')
->where('id', $request->source_input)
->orWhere('realname', 'like', '%' . $request->source_input . '%')
->get()
->toArray();
return $this->successJson('ok', ['supplier' => $supplier]);
}
return $this->errorJson('参数不足或参数错误,请重试');
}
//平台代客下单
public function shopIndex()
{
$category_list = CategoryFactory::create('shop');
return view('Yunshop\HelpUserBuying::buying.goods', [
'owner_id' => 0,
'title' => '平台自营',
'goods_url' => yzWebFullUrl('plugin.help-user-buying.admin.index.shopGoodsList'),
'route_url' => yzWebFullUrl('plugin.help-user-buying.admin.index.shop-index'),
'order_type' => 0,
'category_level' => \Setting::get('shop.category.cat_level') == 3 ? 3:2,
'category_list' => json_encode($category_list),
]);
}
/**
* 获取平台商品列表
* @param string search['keyword'] 商品名称
* @param string search['category'] 商品分类id 多个用逗号拼接
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function shopGoodsList()
{
$search = request()->input('search');
// if (app('plugins')->isEnabled('supplier')) {
// $this->plugin_id[] = 92;
// }
if (app('plugins')->isEnabled('net-car')) {
$this->plugin_id[] = 41;
}
$list = Goods::getGoodsList($search, $this->plugin_id)->paginate(15);
if ($list->isEmpty()) {
throw new AppException('无商品');
}
$list = $this->goodsMap($list);
return $this->successJson('list', $list);
}
//门店代客下单
public function storeIndex()
{
$store_id = intval(request()->input('store_id'));
$store = Store::uniacid()->where('id', $store_id)->first();
if (!$store) {
throw new ShopException('门店不存在');
}
$category_list = CategoryFactory::create('store', ['store_id'=> $store_id]);
return view('Yunshop\HelpUserBuying::buying.goods', [
'owner_id' => $store_id,
'title' => $store->store_name,
'goods_url' => yzWebFullUrl('plugin.help-user-buying.admin.index.storeGoodsList'),
'route_url' => yzWebFullUrl('plugin.help-user-buying.admin.index.store-index'),
'order_type' => 32,
'category_level' => '2',
'category_list' => json_encode($category_list),
]);
}
/**
* 获取门店商品列表
* @param int search['store_id'] 门店id
* @param string search['keyword'] 商品名称
* @param string search['category'] 商品分类id 多个用逗号拼接
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function storeGoodsList()
{
$search = request()->input('search');
if (empty(intval($search['owner_id']))) {
throw new AppException('门店不存在');
}
$list = StoreGoods::getGoodsList($search, $search['owner_id'])
->orderBy('display_order', 'desc')->orderBy('yz_goods.id', 'desc')->paginate(15);
if ($list->isEmpty()) {
throw new AppException('无商品');
}
$list = $this->goodsMap($list);
return $this->successJson('list', $list);
}
//供应商代客下单
public function supplierIndex()
{
$supplier_id = intval(request()->input('supplier_id'));
$supplier = \Yunshop\Supplier\common\models\Supplier::uniacid()->where('id', $supplier_id)->first();
if (!$supplier) {
throw new ShopException('供应商不存在');
}
$category_list = CategoryFactory::create('shop');
return view('Yunshop\HelpUserBuying::buying.goods', [
'owner_id' => $supplier_id,
'title' => $supplier->realname,
'goods_url' => yzWebFullUrl('plugin.help-user-buying.admin.index.supplierGoodsList'),
'route_url' => yzWebFullUrl('plugin.help-user-buying.admin.index.shop-index'),
'order_type' => 92,
'category_level' => \Setting::get('shop.category.cat_level') == 3 ? 3:2,
'category_list' => json_encode($category_list),
]);
}
/**
* 获取供应商商品列表
* @param string search['keyword'] 商品名称
* @param string search['category'] 商品分类id 多个用逗号拼接
* @return \Illuminate\Http\JsonResponse
* @throws AppException
*/
public function supplierGoodsList()
{
$search = request()->input('search');
if (empty(intval($search['owner_id']))) {
throw new AppException('供应商不存在');
}
$list = SupplierGoods::getGoodsList($search, $search['owner_id'])->paginate(15);
if ($list->isEmpty()) {
throw new AppException('无商品');
}
$list = $this->goodsMap($list);
return $this->successJson('list', $list);
}
//设置下单会员 Session 显示下单页
public function setMemberId()
{
$request = json_decode(request()->input('data'), true);
$order_type = $request['order_type'];
$member = Member::getMemberById($request['uid']);
if (empty($request['uid']) || empty($member)) {
//预防万一先清空会员的member_id Session
if (\YunShop::app()->getMemberId()) {
Session::clear('member_id');
}
return $this->errorJson('会员不存在');
}
Session::set('member_id', $member->uid);
$member->member_address = MemberAddressController::getMemberAddress($member->uid);
$deliveryMethod = $this->deliveryMethod($order_type,$request);
$needAddress = $this->needAddress($request);
//dd($request,$deliveryMethod);
return view('Yunshop\HelpUserBuying::buying.order', [
'member' => json_encode($member),
'is_street' => \Setting::get('shop.trade.is_street')?:0,
'order_url' => json_encode($this->getOrderUrl($order_type)),
'request' => json_encode($request),
'deliveryMethod' => json_encode($deliveryMethod),
'needAddress' => $needAddress
]);
}
//配送方式:司机配送
public function deliveryMethod($order_type,$request)
{
$arr = [];
//虚拟商品不需要配送方式 type:1-实体2-虚拟
$goods_ids = array_column($request['goods'],'goods_id');
if (!Goods::uniacid()->selectRaw('1')->whereIn('id',$goods_ids)->where('type',1)->first()) {
return $arr;
}
if ($order_type == 32) {
$store = Store::uniacid()->where('id', $request['owner_id'])->first();
if (in_array(DispatchType::EXPRESS, $store->dispatch_type)) {
$arr[] = ['name' => '快递', 'value' => DispatchType::EXPRESS];
}
if (in_array(DispatchType::SELF_DELIVERY, $store->dispatch_type)) {
$arr[] = ['name' => '门店自提', 'value' => DispatchType::SELF_DELIVERY];
}
} else {
$arr[] = ['name' => '快递', 'value' => DispatchType::EXPRESS];
}
// if ($order_type == 92) {
// if (app('plugins')->isEnabled('delivery-driver')) {
// $arr[] = ['name' => '司机配送', 'value' => 7];
// }
// }
return $arr;
}
/**
* 获取搜索会员
* @param string keyword 会员昵称、手机号、id
* @return \Illuminate\Http\JsonResponse
*/
public function getSearchMember()
{
$keyword = request()->input('keyword');
$member = Member::uniacid()->searchLike($keyword)
->whereHas('yzMember', function ($query) {
$query->whereNull('deleted_at');
})->with('yzMember')->get();
$member = set_medias($member, array('avatar', 'share_icon'));
return $this->successJson('member_search', $member);
}
//商品规格处理
protected function goodsMap($list)
{
$list->map(function($goodsModel){
$goodsModel->thumb = yz_tomedia($goodsModel->thumb);
if (!$goodsModel->hasManySpecs->isEmpty()) {
foreach ($goodsModel->hasManySpecs as &$spec) {
$spec['specitem'] = GoodsSpecItem::select('id', 'title', 'specid', 'thumb')->where('specid', $spec['id'])->orderBy('display_order', 'asc')->get();
}
}
if ($goodsModel->has_option) {
$goodsModel->min_price = $goodsModel->hasManyOptions->min("product_price");
$goodsModel->max_price = $goodsModel->hasManyOptions->max("product_price");
$goodsModel->stock = $goodsModel->hasManyOptions->sum('stock');
}
});
return $list->toArray();
}
/**
* 商品加减
* @param int id 商品id
* @param int option_id 商品规格id
* @param int num 商品增加数量
* @param int type 类型 0 直接取num, 在原数量上加一
* @return \Illuminate\Http\JsonResponse
*/
public function goodsIncrease()
{
$id = intval(request()->input('id'));
$option_id = intval(request()->input('option_id'));
$new_num = intval(request()->input('num'));
if ($option_id) {
$goods = GoodsOption::uniacid()->whereHas('goods', function ($goods) use ($id) {
return $goods->where('id', $id)->where('status', 1);
})->find($option_id);
} else {
$goods = \app\common\models\Goods::where('status', 1)->find($id);
}
if (empty($goods)) {
$a = $option_id ?'规格ID('.$option_id.')':'';
return $this->errorJson('商品(ID:'.$id.')'. $a .' 不存在或以下架',['code'=> 2]);
}
if ($goods->stock < $new_num) {
return $this->successJson('最大',['code'=> 1, 'num' => $goods->stock]);
}
return $this->successJson('ok',['code'=> 2, 'num' => $new_num]);
}
protected function getOrderUrl($key)
{
$url = [
0 => [
'create_url' => yzApiUrl('plugin.help-user-buying.shop.controller.create.index'),
'pre_url' => yzApiUrl('plugin.help-user-buying.shop.controller.goods-buy.index'),
],
32 => [
'create_url' => yzApiUrl('plugin.help-user-buying.store.controller.create.index'),
'pre_url' => yzApiUrl('plugin.help-user-buying.store.controller.goods-buy.index'),
],
92 => [
'create_url' => yzApiUrl('plugin.help-user-buying.shop.controller.create.index'),
'pre_url' => yzApiUrl('plugin.help-user-buying.shop.controller.goods-buy.index'),
],
];
return $url[$key];
}
protected function needAddress($request): int
{
$needAddress = 1;//1需要,2不需要
$goods_ids = array_column($request['goods'],'goods_id');
//need_address0-需要收货地址1不需要收货地址
if (Goods::uniacid()->select('id')->whereIn('id',$goods_ids)->where('type',2)->where('need_address',1)->count() == count($goods_ids)) {
$needAddress = 2;
}
return $needAddress;
}
}

View File

@ -0,0 +1,230 @@
<?php
namespace Yunshop\HelpUserBuying\admin;
use app\common\components\BaseController;
use app\common\models\Address;
use app\common\models\Street;
use app\common\models\YzMemberAddress;
use app\common\models\MemberAddress;
use app\frontend\models\Member;
use app\frontend\repositories\MemberAddressRepository;
class MemberAddressController extends BaseController
{
//获取地址信息
/**
* @param string type 获取地址级别
* @return \Illuminate\Http\JsonResponse
*/
public function getAddress()
{
$type = request()->input('type');
switch ($type) {
case 'province':
$addressData = Address::getProvince();
break;
case 'city':
$addressData = Address::getCityByParentId(\YunShop::request()->parentid);
break;
case 'district':
$addressData = Address::getAreaByParentId(\YunShop::request()->parentid);
break;
case 'street':
$addressData = Street::getStreetByParentId(\YunShop::request()->parentid);
break;
default:
$addressData = collect([]);
}
if ($addressData->isEmpty()) {
return $this->errorJson('未检测到数据!', $addressData);
}
return $this->successJson('成功', $addressData);
}
//会员默认地址
public static function getMemberAddress($uid)
{
if(\Setting::get('shop.trade.is_street')) {
$member_address = YzMemberAddress::uniacid()->whereUid($uid)->where('isdefault',1)->first();
if ($member_address) {
$member_address->province_id = Address::where('areaname',$member_address->province)->value('id');
$member_address->city_id = Address::where('areaname',$member_address->city)->where('parentid', $member_address->province_id)->value('id');
$member_address->district_id = Address::where('areaname',$member_address->district)->where('parentid', $member_address->city_id)->value('id');
$member_address->street_id = Street::where('parentid', $member_address->district_id)->where('areaname',$member_address->street)->value('id');
}
} else{
$member_address = MemberAddress::uniacid()->whereUid($uid)->where('isdefault',1)->first();
if ($member_address) {
$member_address->province_id = Address::where('areaname',$member_address->province)->value('id');
$member_address->city_id = Address::where('areaname',$member_address->city)->where('parentid', $member_address->province_id)->value('id');
$member_address->district_id = Address::where('areaname',$member_address->district)->where('parentid', $member_address->city_id)->value('id');
}
}
return !empty($member_address) ? $member_address->toArray() : [];
}
public function getMemberAddressList()
{
$member_id = intval(request()->input('member_id'));
$memberAddressRepository = app(MemberAddressRepository::class);
$memberAddressList = $memberAddressRepository->getAddressList($member_id);
foreach ($memberAddressList as $k => $member_address) {
if ($member_address) {
$member_address['province_id'] = Address::where('areaname',$member_address['province'])->value('id');
$member_address['city_id'] = Address::where('areaname',$member_address['city'])->where('parentid', $member_address['province_id'])->value('id');
$member_address['district_id'] = Address::where('areaname',$member_address['district'])->where('parentid', $member_address['city_id'])->value('id');
if ($member_address['street'] != '其他' && !empty($member_address['street'])) {
$member_address['street_id'] = Street::where('parentid', $member_address['district_id'])->where('areaname',$member_address['street'])->value('id');
} else {
$member_address['street_id'] = 0;
}
$member_address['address_info'] = implode(' ', array_filter([$member_address['province'], $member_address['city'], $member_address['district'], $member_address['street'], $member_address['address']]));
$memberAddressList[$k] = $member_address;
}
}
return $this->successJson('addressList', $memberAddressList);
}
public function createMemberAddress()
{
$data = request()->input('address');
$memberAddressRepository = app(MemberAddressRepository::class);
$member = Member::where('uid', $data['uid'])->first();
if (!$member) {
return $this->errorJson("UID[{$data['uid']}]该会员不存在");
}
if (!$data['username']) {
return $this->errorJson('收件人不能为空');
}
if (!$data['mobile']) {
return $this->errorJson('手机号不能为空');
}
if (!preg_match("/^[0-9]*$/", $data['mobile'])) {
return $this->errorJson('手机号请输入数字');
}
if (!$data['province']) {
return $this->errorJson('请选择省份');
}
if (!$data['city']) {
return $this->errorJson('请选择城市');
}
if (!$data['district']) {
return $this->errorJson('请选择区域');
}
if (!$data['address']) {
return $this->errorJson('请输入详细地址');
}
$createAddress = array_only($data, ['uid','username', 'mobile', 'province','city','district','address', 'street']);
$createAddress['uniacid'] = \YunShop::app()->uniacid;
$addressModel = $memberAddressRepository->fill($createAddress);
//dd($addressModel, $createAddress);
$validator = $addressModel->validator($addressModel->getAttributes());
if ($validator->fails()) {
return $this->errorJson($validator->messages()->first());
}
if (empty($addressModel->isdefault) && $data['isdefault']) {
$addressModel->isdefault = 1;
$memberAddressRepository->cancelDefaultAddress($addressModel->uid);
}
if ($addressModel->save()) {
return $this->successJson('新增收货地址成功', $addressModel->toArray());
} else {
return $this->errorJson("写入数据出错,请重试!");
}
}
//修改会员收获地址
public function editMemberAddress()
{
$address_id = trim(request()->input('id'));
$data = request()->input('address');
$memberAddressRepository = app(MemberAddressRepository::class);
$addressModel = $memberAddressRepository->getAddressById($address_id);
if (!$addressModel) {
return $this->errorJson("未找到地址数据或已删除");
}
if (!$data['username']) {
return $this->errorJson('收件人不能为空');
}
if (!$data['mobile']) {
return $this->errorJson('手机号不能为空');
}
if (!preg_match("/^[0-9]*$/", $data['mobile'])) {
return $this->errorJson('手机号请输入数字');
}
if (!$data['province']) {
return $this->errorJson('请选择省份');
}
if (!$data['city']) {
return $this->errorJson('请选择城市');
}
if (!$data['district']) {
return $this->errorJson('请选择区域');
}
if (!$data['address']) {
return $this->errorJson('请输入详细地址');
}
$updateAddress = array_only($data, ['username', 'mobile', 'province','city','district','address', 'street']);
$addressModel->fill($updateAddress);
$validator = $addressModel->validator($addressModel->getAttributes());
if ($validator->fails()) {
return $this->errorJson($validator->messages()->first());
}
if (empty($addressModel->isdefault) && $data['isdefault']) {
$addressModel->isdefault = 1;
$memberAddressRepository->cancelDefaultAddress($addressModel->uid);
}
if ($addressModel->save()) {
return $this->successJson('修改收货地址成功', $addressModel->toArray());
} else {
return $this->errorJson("写入数据出错,请重试!");
}
}
}

View File

@ -0,0 +1,173 @@
<?php
namespace Yunshop\HelpUserBuying\admin;
use app\common\components\BaseController;
use app\common\events\payment\ChargeComplatedEvent;
use app\common\exceptions\AppException;
use app\common\models\PayType;
use app\common\services\PayFactory;
use app\frontend\models\OrderPay;
use app\frontend\modules\order\OrderCollection;
use app\frontend\modules\orderPay\models\PreOrderPay;
use Illuminate\Support\Collection;
use app\common\models\Order;
use app\frontend\modules\order\services\OrderService;
use Yunshop\HelpUserBuying\common\payment\types\HelpOrderPaymentTypes;
class UserMergePayController extends BaseController
{
public $orders;
protected $publicAction = ['index','alipay'];
protected $ignoreAction = ['index', 'alipay'];
/**
* 获取支付按钮列表接口
* @return \Illuminate\Http\JsonResponse
* @throws AppException
* @throws \app\common\exceptions\ShopException
*/
public function index()
{
// 验证
$this->validate([
'order_ids' => 'required'
]);
// 订单集合
$orders = $this->orders(request()->input('order_ids'));
// 用户余额
$member = $orders->first()->belongsToMember()->select(['credit2'])->first()->toArray();
// 生成支付记录 记录订单号,支付金额,用户,支付号
$orderPay = new PreOrderPay();
$orderPay->setOrders($orders);
$orderPay->store();
// 支付类型
$orderPaymentTypes = new HelpOrderPaymentTypes($orderPay);
$buttons = app('Payment')->setPaymentTypes($orderPaymentTypes)->getPaymentButton();
$data = ['order_pay' => $orderPay, 'member' => $member, 'buttons' => $buttons, 'typename' => ''];
return $this->successJson('成功', $data);
}
/**
* 支付的时候,生成支付记录的时候,通过订单ids获取订单集合
* @param $orderIds
* @return OrderCollection
* @throws AppException
*/
private function orders($orderIds)
{
if (!is_array($orderIds)) {
$orderIds = explode(',', $orderIds);
}
array_walk($orderIds, function ($orderId) {
if (!is_numeric($orderId)) {
throw new AppException('(ID:' . $orderId . ')订单号id必须为数字');
}
});
$this->orders = OrderCollection::make(Order::select(['status', 'id', 'order_sn', 'price', 'uid'])->whereIn('id', $orderIds)->get());
if ($this->orders->count() != count($orderIds)) {
throw new AppException('(ID:' . implode(',', $orderIds) . ')未找到订单');
}
return $this->orders;
}
/**
* @return \Illuminate\Http\JsonResponse
* @throws AppException
* @throws \app\common\exceptions\PaymentException
* @throws \app\common\exceptions\ShopException
*/
public function credit2()
{
if (\Setting::get('shop.pay.credit') == false) {
throw new AppException('商城未开启余额支付');
}
$orderPay = OrderPay::find(request()->input('order_pay_id'));
$result = $orderPay->getPayResult(PayFactory::PAY_CREDIT);
if (!$result) {
throw new AppException('余额扣除失败,请联系客服');
}
$orderPay->pay();
event(new ChargeComplatedEvent([
'order_pay_id' => $orderPay->id
]));
return $this->successJson('成功');
}
/**
* 货到付款
* @return \Illuminate\Http\JsonResponse
* @throws AppException
* @throws \app\common\exceptions\ShopException
*/
public function COD()
{
$this->validate([
'order_pay_id' => 'required|integer'
]);
if (\Setting::get('shop.pay.COD') == false) {
throw new AppException('商城未开启货到付款');
}
//这个不知道是什么鬼
// if (!is_null($event_arr = \app\common\modules\shop\ShopConfig::current()->get('plugin_delivery_pay_function'))) {
// foreach ($event_arr as $v) {
// $class = array_get($v, 'class');
// $function = array_get($v, 'function');
// $res = $class::$function(request()->input('order_pay_id'));
// if (!$res['result']) {
// throw new AppException($res['msg']);
// }
// if ($res['result'] && $res['data']['process'] == 'break') {
// return $this->successJson('成功');
// }
// }
// }
$orderPay = \app\frontend\models\OrderPay::find(request()->input('order_pay_id'));
$orderPay->getPayResult(PayFactory::PAY_COD);
$orderPay->pay();
return $this->successJson('成功');
}
/**
* 确认支付
* @return \Illuminate\Http\JsonResponse
* @throws AppException
* @throws \app\common\exceptions\ShopException
*/
public function confirmPay()
{
$this->validate([
'order_pay_id' => 'required|integer'
]);
/**
* @var \app\frontend\models\OrderPay $orderPay
*/
$orderPay = \app\frontend\models\OrderPay::find(request()->input('order_pay_id'));
$orderPay->getPayResult(PayFactory::CONFIRM_PAY);
$orderPay->pay();
return $this->successJson('成功');
}
}

View File

@ -0,0 +1,65 @@
<?php
namespace Yunshop\HelpUserBuying\common;
use app\backend\modules\goods\models\Category;
use Yunshop\HelpUserBuying\store\models\Category as storeCategory;
class CategoryFactory
{
const SHOP = 'shop';
const STORE = 'store';
public static function create($type, $params = null)
{
$data = null;
switch ($type) {
case self::SHOP:
$data = self::shopCategory($params);
break;
case self::STORE:
$data = self::storeCategory($params);
break;
default:
$data = [];
}
return $data;
}
protected static function shopCategory($params)
{
$set = \Setting::get('shop.category');
$list = Category::getCategorys(0)->select('id', 'name', 'enabled')->pluginId()->where('enabled', 1)->get();
$list->map(function($category) use($set) {
$childrens = Category::getChildrenCategorys($category->id,$set)->select('id', 'name', 'enabled')->get()->toArray();
foreach ($childrens as $key => &$children) {
if ($set['cat_level'] == 3 && $children['has_many_children']) {
$children['childrens'] = $children['has_many_children'];
} else {
$children['childrens'] = [];
}
}
$category->childrens = $childrens;
});
return $list;
}
protected static function storeCategory($params)
{
$list = storeCategory::getCategory($params)->get();
$list->map(function($category) use ($params) {
$category->childrens = storeCategory::getChildrenCategory($category->id, $params)->get()->toArray();
});
return $list;
}
}

View File

@ -0,0 +1,413 @@
<?php
namespace Yunshop\HelpUserBuying\common;
class MenuHook
{
public static function menu($left_show = 0)
{
$menu = [
'name' => '代客下单',
'url' => 'plugin.help-user-buying.admin.index.index', //url 可以填写http 也可以直接写路由
'url_params' => '',//如果是url填写的是路由则启用参数否则不启用
'permit' => 1,//如果不设置则不会做权限检测
'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示
'top_show' => 0,
'left_first_show' => $left_show,
'left_second_show' => 0,
'icon' => 'fa-child',//菜单图标
'type' => 'industry',
'list_icon' => 'help_user_buying',
'parents' => [],
'child' => [
// 'help-user-buying-select' => [
// 'name' => '选择基地',
// 'permit' => 1,
// 'menu' => 1,
// 'icon' => '',
// 'url' => 'plugin.help-user-buying.admin.home.select',
// 'url_params'=> '',
// 'parents' => ['help_user_buying'],
// 'child' => []
// ],
'help-user-buying-index' => [
'name' => '选择订单类型',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-order' => [
'name' => '下单页',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.set-member-id',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-shop-index' => [
'name' => '商城商品下单',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.shop-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-shop-goods-list' => [
'name' => '商城商品列表',
'url' => 'plugin.help-user-buying.admin.index.shopGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
'help-user-buying-shop-goods-buy' => [
'name' => '商城订单预下单',
'url' => 'plugin.help-user-buying.shop.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
'help-user-buying-shop-create' => [
'name' => '商城订单下单',
'url' => 'plugin.help-user-buying.shop.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
]
],
'help-user-buying-store-index' => [
'name' => '门店商品下单',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.store-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-store-goods-list' => [
'name' => '门店商品列表',
'url' => 'plugin.help-user-buying.admin.index.storeGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-store-goods-buy' => [
'name' => '门店订单预下单',
'url' => 'plugin.help-user-buying.store.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-store-create' => [
'name' => '门店订单下单',
'url' => 'plugin.help-user-buying.store.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
]
],
'help-user-buying-supplier-index' => [
'name' => '供应商商品下单',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.supplier-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-store-goods-list' => [
'name' => '供应商商品列表',
'url' => 'plugin.help-user-buying.admin.index.supplierGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-supplier-goods-buy' => [
'name' => '供应商订单预下单',
'url' => 'plugin.help-user-buying.shop.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-supplier-create' => [
'name' => '供应商订单下单',
'url' => 'plugin.help-user-buying.shop.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
]
],
'help-user-buying-goods-increase' => [
'name' => '商品加减',
'permit' => 0,
'menu' => 0,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.goods-increase',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
// 'help-user-buying-delivery-method' => [
// 'name' => '配送方式',
// 'permit' => 0,
// 'menu' => 0,
// 'icon' => '',
// 'url' => 'plugin.help-user-buying.admin.index.delivery-method',
// 'url_params'=> '',
// 'parents' => ['help_user_buying'],
// 'child' => []
// ],
'help-user-buying-get-search-member' => [
'name' => '获取搜索会员',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.getSearchMember',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-user-merge-pay' => [
'name' => '支付',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-user-merge-pay-credit2' => [
'name' => '余额支付',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.credit2',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
'help-user-buying-user-merge-pay-COD' => [
'name' => '货到付款',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.COD',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
]
],
'help-user-buying-address' => [
'name' => '获取地址数据',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.member-address.get-address',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
]
];
return $menu;
}
//门店后台显示列表
public static function storeMenu()
{
return [
'name' => '代客下单',
'url' => 'plugin.help-user-buying.admin.index.index', //url 可以填写http 也可以直接写路由
'url_params' => '',//如果是url填写的是路由则启用参数否则不启用
'permit' => 0,//如果不设置则不会做权限检测
'menu' => 1,//如果不设置则不显示菜单,子菜单也将不显示
'top_show' => 0,
'left_first_show' => 1,
'left_second_show' => 0,
'icon' => 'fa-child',//菜单图标
'type' => 'industry',
'list_icon' => 'help_user_buying',
'parents' => [],
'child' => [
'help-user-buying-index' => [
'name' => '选择订单类型',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-order' => [
'name' => '下单页',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.set-member-id',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-shop-index' => [
'name' => '商城商品下单',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.shop-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-shop-goods-list' => [
'name' => '商城商品列表',
'url' => 'plugin.help-user-buying.admin.index.shopGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
'help-user-buying-shop-goods-buy' => [
'name' => '商城订单预下单',
'url' => 'plugin.help-user-buying.shop.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
'help-user-buying-shop-create' => [
'name' => '商城订单下单',
'url' => 'plugin.help-user-buying.shop.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-shop-index'],
],
]
],
'help-user-buying-store-index' => [
'name' => '门店商品下单',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.store-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-store-goods-list' => [
'name' => '门店商品列表',
'url' => 'plugin.help-user-buying.admin.index.storeGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-store-goods-buy' => [
'name' => '门店订单预下单',
'url' => 'plugin.help-user-buying.store.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-store-create' => [
'name' => '门店订单下单',
'url' => 'plugin.help-user-buying.store.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
]
],
'help-user-buying-supplier-index' => [
'name' => '供应商商品下单',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.supplier-index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-store-goods-list' => [
'name' => '供应商商品列表',
'url' => 'plugin.help-user-buying.admin.index.supplierGoodsList',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-supplier-goods-buy' => [
'name' => '供应商订单预下单',
'url' => 'plugin.help-user-buying.shop.controller.goods-buy.index',
'permit' => 0,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
'help-user-buying-supplier-create' => [
'name' => '供应商订单下单',
'url' => 'plugin.help-user-buying.shop.controller.create.index',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-store-index'],
],
]
],
'help-user-buying-goods-increase' => [
'name' => '商品加减',
'permit' => 0,
'menu' => 0,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.goods-increase',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-get-search-member' => [
'name' => '获取搜索会员',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.index.getSearchMember',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
'help-user-buying-user-merge-pay' => [
'name' => '支付',
'permit' => 1,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.index',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => [
'help-user-buying-user-merge-pay-credit2' => [
'name' => '余额支付',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.credit2',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
'help-user-buying-user-merge-pay-COD' => [
'name' => '货到付款',
'url' => 'plugin.help-user-buying.admin.user-merge-pay.COD',
'permit' => 1,
'menu' => 0,
'parents' => ['help_user_buying', 'help-user-buying-user-merge-pay'],
],
]
],
'help-user-buying-address' => [
'name' => '获取地址数据',
'permit' => 0,
'menu' => 1,
'icon' => '',
'url' => 'plugin.help-user-buying.admin.member-address.get-address',
'url_params'=> '',
'parents' => ['help_user_buying'],
'child' => []
],
]
];
}
}

View File

@ -0,0 +1,49 @@
<?php
namespace Yunshop\HelpUserBuying\common;
use app\backend\modules\goods\models\Discount;
use app\backend\modules\goods\models\Share;
use app\backend\modules\goods\services\DiscountService;
use app\backend\modules\goods\services\Privilege;
use app\backend\modules\goods\services\PrivilegeService;
use app\common\traits\MessageTrait;
use Illuminate\Database\Eloquent\Model;
class OrderObserver extends \app\common\observers\BaseObserver
{
use MessageTrait;
public function saving(Model $model)
{
// dump($model);
}
public function saved(Model $model)
{
// dump($model);
}
public function created(Model $model)
{
// dump($model);
}
public function updating(Model $model)
{
}
public function updated(Model $model)
{
}
public function deleted(Model $model)
{
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace Yunshop\HelpUserBuying\common\payment\types;
use app\frontend\modules\order\payment\types\OrderPaymentTypes;
class HelpOrderPaymentTypes extends OrderPaymentTypes
{
public $availableCode = ['balance','COD', 'confirmPay'];
}

View File

@ -0,0 +1,27 @@
<?php
namespace Yunshop\HelpUserBuying\models;
class Goods extends \app\frontend\models\Goods
{
public static function getGoodsList($search,$plugin_ids)
{
$model = self::uniacid()->search($search);
$model->where('stock', '>', 0)->where('status', 1)->whereIn('plugin_id', $plugin_ids);
$model->with(['hasManySpecs' => function ($query) {
return $query->select('id', 'goods_id', 'title', 'description');
}])->with(['hasManyOptions' => function ($query) {
return $query->select('id', 'goods_id', 'title', 'thumb', 'product_price', 'market_price', 'stock', 'specs', 'weight');
}]);
$model->orderBy('display_order', 'desc')->orderBy('yz_goods.id', 'desc');
return $model;
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace Yunshop\HelpUserBuying\models;
class GoodsOption extends \app\common\models\BaseModel
{
public $table = 'yz_goods_option';
public $guarded = [];
public $timestamps = false;
public function goods()
{
return $this->belongsTo( \app\common\models\Goods::class, 'goods_id', 'id');
}
}

View File

@ -0,0 +1,26 @@
<?php
namespace Yunshop\HelpUserBuying\shop\controller;
use app\frontend\models\GoodsOption;
use Yunshop\HelpUserBuying\models\Goods;
class CreateController extends \app\frontend\modules\order\controllers\CreateController
{
protected $publicAction = ['index'];
protected $ignoreAction = ['index', 'validateParam', 'getMemberCarts', 'getShopOrder', 'getPluginOrders'];
public function preAction()
{
parent::preAction(); // TODO: Change the autogenerated stub
app('GoodsManager')->bind('Goods', function ($goodsManager, $attributes) {
return new Goods($attributes);
});
app('GoodsManager')->bind('GoodsOption', function ($goodsManager, $attributes) {
return new GoodsOption($attributes);
});
}
}

View File

@ -0,0 +1,51 @@
<?php
namespace Yunshop\HelpUserBuying\shop\controller;
use app\frontend\modules\member\services\MemberCartService;
use app\frontend\modules\memberCart\MemberCartCollection;
use Yunshop\HelpUserBuying\models\Goods;
use app\frontend\models\GoodsOption;
class GoodsBuyController extends \app\frontend\modules\order\controllers\GoodsBuyController
{
protected $publicAction = ['index'];
protected $ignoreAction = ['index', 'validateParam', 'getMemberCarts', 'getShopOrder', 'getPluginOrders'];
public function __construct()
{
parent::__construct();
}
public function preAction()
{
parent::preAction(); // TODO: Change the autogenerated stub
app('GoodsManager')->bind('Goods', function ($goodsManager, $attributes) {
return new Goods($attributes);
});
app('GoodsManager')->bind('GoodsOption', function ($goodsManager, $attributes) {
return new GoodsOption($attributes);
});
}
protected function getMemberCarts()
{
$goods_params = json_decode(request()->input('goods'),true);
$result = collect($goods_params)->map(function ($memberCart) {
return MemberCartService::newMemberCart($memberCart);
});
$memberCarts = new MemberCartCollection($result);
$memberCarts->loadRelations();
return $memberCarts;
}
protected function validateParam(){
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace Yunshop\HelpUserBuying\store\controller;
class CreateController extends \Yunshop\StoreCashier\frontend\store\CreateController
{
protected $publicAction = ['index'];
protected $ignoreAction = ['index', 'validateParam', 'getMemberCarts', 'getShopOrder', 'getPluginOrders'];
public function __construct()
{
parent::__construct();
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace Yunshop\HelpUserBuying\store\controller;
use app\frontend\modules\member\services\MemberCartService;
use app\frontend\modules\memberCart\MemberCartCollection;
class GoodsBuyController extends \Yunshop\StoreCashier\frontend\store\GoodsBuyController
{
protected $publicAction = ['index'];
protected $ignoreAction = ['index', 'validateParam', 'getMemberCarts', 'getShopOrder', 'getPluginOrders'];
public function __construct()
{
parent::__construct();
}
protected function getMemberCarts()
{
$goods_params = json_decode(request()->input('goods'),true);
$result = collect($goods_params)->map(function ($memberCart) {
return MemberCartService::newMemberCart($memberCart);
});
$memberCarts = new MemberCartCollection($result);
$memberCarts->loadRelations();
return $memberCarts;
}
protected function validateParam()
{
$this->validate([
'store_id' => 'required|integer|min:0',
]);
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace Yunshop\HelpUserBuying\store\controller;
use app\common\services\finance\BalanceChange;
use app\frontend\modules\order\services\OrderService;
use app\common\models\Order;
use app\common\models\PayType;
use app\common\exceptions\AppException;
use app\common\services\credit\ConstService;
//todo blank 2019/03/12 废弃此类
class OperationController extends \app\backend\modules\order\controllers\OperationController
{
public function pay()
{
$pay_type = request()->input('pay_type');
$order_id = request()->input('order_id');
if (!in_array($pay_type, [PayType::COD, PayType::CREDIT, PayType::BACKEND])) {
throw new AppException('支付方式不支持');
}
if ($pay_type == PayType::CREDIT) {
return $this->buyingCredit2();
}
$this->param['pay_type_id'] = $pay_type;
OrderService::orderPay($this->param);
return $this->successJson();
}
public function buyingCredit2()
{
if (\Setting::get('shop.pay.credit') == false) {
throw new AppException('商城未开启余额支付');
}
$data = [
'member_id' => $this->order->uid,
'remark' => '代客下单使用余额支付订单:'.$this->order->id,
'source' => ConstService::SOURCE_CONSUME,
'relation' => $this->order->order_sn,
'operator' => ConstService::OPERATOR_SHOP,
'operator_id' => ConstService::OPERATOR_ORDER,
'change_value' => $this->order->price,
];
$result = (new BalanceChange())->consume($data);
if ($result === true) {
OrderService::orderPay(['order_id' => $this->order->id, 'order_pay_id' => 0, 'pay_type_id' => PayType::CREDIT]);
return $this->successJson();
} else {
throw new AppException($result);
}
}
}

View File

@ -0,0 +1,50 @@
<?php
namespace Yunshop\HelpUserBuying\store\models;
class Category extends \Yunshop\StoreCashier\store\models\Category
{
public static function getCategory($search)
{
$model = self::select('id', 'name', 'enabled')->where('enabled', 1);
$model->where('parent_id', 0);
if ($search['store_id']) {
$model->whereHas('hasOneStoreGoodsCategory', function ($storeGoodsCategory) use ($search) {
return $storeGoodsCategory->byStoreId($search['store_id']);
});
}
$model->orderBy('display_order', 'asc');
return $model;
}
/**
* @param $parentId
* @param $set
* @return mixed
*/
public static function getChildrenCategory($parentId, $search)
{
$model = self::select('id', 'name', 'enabled');
$model->where('parent_id', $parentId);
$model->where('enabled', 1);
if ($search['store_id']) {
$model->whereHas('hasOneStoreGoodsCategory', function ($storeGoodsCategory) use ($search) {
return $storeGoodsCategory->byStoreId($search['store_id']);
});
}
$model->orderBy('display_order', 'asc');
return $model;
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace Yunshop\HelpUserBuying\store\models;
use Yunshop\StoreCashier\common\models\Store as BaseStore;
class Store extends BaseStore
{
}

View File

@ -0,0 +1,59 @@
<?php
namespace Yunshop\HelpUserBuying\store\models;
use app\common\models\GoodsCategory;
use Yunshop\HelpUserBuying\models\GoodsOption;
class StoreGoods extends \app\frontend\models\Goods
{
public $appends = [];
public function hasOneCategory()
{
return $this->hasOne(GoodsCategory::class, 'goods_id', 'id');
}
public static function getGoodsList($search, $storeId = 0)
{
return self::select()->search($search)->hasOneStoreGoods($storeId)
->pluginId()->where('stock', '>', 0)->where('status', 1)->where('type', 1)
->with(['hasManySpecs' => function ($query) {
return $query->select('id', 'goods_id', 'title', 'description');
}])->with(['hasManyOptions' => function ($query) {
return $query->select('id', 'goods_id', 'title', 'thumb', 'product_price', 'market_price', 'stock', 'specs', 'weight');
}]);
}
public function scopePluginId($query, $pluginId = Store::PLUGIN_ID)
{
return $query->where('plugin_id', $pluginId);
}
public function scopeHasOneStoreGoods($query, $storeId)
{
return $query->whereHas('hasOneStoreGoods', function($storeGoods)use($storeId){
if ($storeId) {
$storeGoods->byStoreId($storeId);
}
});
}
public function hasManySpecs()
{
return $this->hasMany('app\common\models\GoodsSpec', 'goods_id', 'id');
}
public function hasManyOptions()
{
return $this->hasMany(GoodsOption::class, 'goods_id', 'id');
}
public function hasOneStoreGoods()
{
return $this->hasOne(\Yunshop\StoreCashier\store\models\StoreGoods::class, 'goods_id', 'id');
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace Yunshop\HelpUserBuying\supplier\models;
use Yunshop\HelpUserBuying\models\GoodsOption;
class SupplierGoods extends \app\frontend\models\Goods
{
public $appends = [];
public static function getGoodsList($search, $supplier_id)
{
$model = self::select('yz_goods.*')->uniacid()->search($search);
$model->where('yz_goods.stock', '>', 0)->where('yz_goods.status', 1)->pluginId()->where('type', 1);
$model->with(['hasManySpecs' => function ($query) {
return $query->select('id', 'goods_id', 'title', 'description');
}])->with(['hasManyOptions' => function ($query) {
return $query->select('id', 'goods_id', 'title', 'thumb', 'product_price', 'market_price', 'stock', 'specs', 'weight');
}]);
$model->joinSupplierGoods(['supplier_id'=> $supplier_id]);
$model->orderBy('yz_goods.display_order', 'desc')->orderBy('yz_goods.id', 'desc');
return $model;
}
public function scopeJoinSupplierGoods($goods_builder, $params)
{
$goods_builder->join('yz_supplier_goods', function ($join) use ($params) {
$join->on('yz_goods.id','=','yz_supplier_goods.goods_id')->where('yz_supplier_goods.supplier_id', $params['supplier_id']);
});
return $goods_builder;
}
public function scopeUniacid($query)
{
return $query->where('yz_goods.uniacid', \YunShop::app()->uniacid);
}
public function scopeIsPlugin($query)
{
return $query->where('yz_goods.is_plugin', 1);
}
public function scopePluginId($query, $pluginId = 92)
{
return $query->where('yz_goods.plugin_id', $pluginId);
}
public function hasManySpecs()
{
return $this->hasMany('app\common\models\GoodsSpec', 'goods_id', 'id');
}
public function hasManyOptions()
{
return $this->hasMany(GoodsOption::class, 'goods_id', 'id');
}
}

View File

@ -0,0 +1,682 @@
@extends('layouts.base')
@section('content')
@section('title', trans('代客下单'))
@section('css')
<style>
.fixian{
background-color: white;
border-radius: 5px;
border:1px solid #d3d3d3;
width:20px;
height:20px;
display: inline-block;
text-align: center;
vertical-align: middle;
line-height: 20px;
}
.fixian:active{
background: #EEEEEE;
}
/*滚动条样式*/
.nui-scroll::-webkit-scrollbar {
width: 8px;
height: 8px;
}
/*正常情况下滑块的样式*/
.nui-scroll::-webkit-scrollbar-thumb {
background-color: rgba(0,0,0,.05);
border-radius: 10px;
-webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1);
}
/*鼠标悬浮在该类指向的控件上时滑块的样式*/
.nui-scroll:hover::-webkit-scrollbar-thumb {
background-color: rgba(0,0,0,.2);
border-radius: 10px;
-webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1);
}
/*鼠标悬浮在滑块上时滑块的样式*/
.nui-scroll::-webkit-scrollbar-thumb:hover {
background-color: rgba(0,0,0,.4);
-webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.1);
}
/*正常时候的主干部分*/
.nui-scroll::-webkit-scrollbar-track {
border-radius: 10px;
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0);
background-color: white;
}
/*鼠标悬浮在滚动条上的主干部分*/
.nui-scroll::-webkit-scrollbar-track:hover {
-webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.4);
background-color: rgba(0,0,0,.01);
}
</style>
@endsection
<div id="buying" class="w1200 ">
<div class="right-titpos">
<ul class="add-snav">
{{--<a class="btn btn-info" style="color: white" href="#" onclick="aaa(this)">支付测试</a>--}}
<li class="active"><a href="#" onclick="window.location.href='{!! yzWebUrl('plugin.help-user-buying.admin.home.select') !!}'"><i class="fa fa-mail-reply"></i>返回选择</a></li>
</ul>
</div>
<div class="panel panel-default">
<div class="panel-heading" style="background-color: rgb(245, 245, 245);border: 1px solid #ddd;margin: 0px">@if(empty($store)) 平台自营 @else 门店:{{$store['store_name']}} @endif</div>
<div class="panel-body" style="border: 1px solid #ddd">
<form action="" method="post" class="form-horizontal" role="form" id="form1" onkeydown="if(event.keyCode==13){return false;}">
<input type="hidden" name="store_id" value="{{$store['id']}}"/>
<input type="hidden" name="realname" value="{{$store['store_name']}}"/>
<div class="form-group col-xs-12 col-sm-2 col-md-2 col-lg-2">
<div class="">
<input type="text" class="form-control" name="search[keyword]"
value="" id="search-keyword" placeholder="输入商品名称"/>
</div>
</div>
<div class="form-group col-xs-12 col-sm-8 col-lg-5">
<div class="col-sm-12 col-xs-12">
{!!$catetory_menus!!}
</div>
</div>
<div class="form-group col-xs-12 col-sm-8 col-lg-2">
<div class="">
<button class="btn btn-success" id="search" type="button" onclick="searchSelect()"><i class="fa fa-search" ></i> 搜索</button>
</div>
</div>
</form>
</div>
</div>
<br>
<div class="clearfix row">
<div class="col-sm-6" style="border: 1px solid #ddd;border-radius:5px;margin-bottom:50px;">
<div class="panel-default">
<div class="panel-body" style="margin-bottom:20px">
<table class="table" style="overflow:visible;">
<thead class="navbar-inner" style="display:table;width:100%;table-layout:fixed;">
<tr>
<th style='width:5%;text-align: center;'>选择</th>
<th style='width:10%;text-align: center;'>ID</th>
<th style='width:20%;'>商品</th>
<th style='width:10%;text-align: center;'>价格</th>
<th style='width:10%;text-align: center;'>库存</th>
</tr>
</thead>
<tbody id="goods" class="nui-scroll" style="height: 300px;display:block;overflow-y:scroll;">
@foreach($goodsList as $row)
<tr style="display:table;width:100%;table-layout:fixed;">
<td style="width:5%;text-align: center;">
<label class="fixian">
<span></span>
<input style="display: none" type="checkbox" name="goods_ids[]" value="{{$row['id']}}" onclick="checkShopping(this)">
</label>
</td>
<td style="width:10%;text-align: center;">{{$row['id']}}</td>
<td style="width:20%;">
<img src="{{tomedia($row['thumb'])}}" style="width: 40px; height: 40px;border:1px solid #ccc;padding:1px;">
{{$row['title']}}
</td>
<td style="width:10%;text-align: center;">{{$row['price']}}</td>
<td style="width:10%;text-align: center;">{{$row['stock']}}</td>
<input type="hidden" class="category" value="{{$row['category_ids']}}">
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<div class="col-sm-6" style="padding-right: 0">
<div style="border: 1px solid #ddd;margin-bottom:20px;border-radius:5px">
<div class="panel-default">
<div class="panel-heading">
订单信息&nbsp;&nbsp;&nbsp;
<button type="button" class="btn btn-info" id="clean_shopping" onclick="cleanShopping()">清空购物车</button>
</div>
<div class="panel-body" style="margin-bottom:100px">
<table class="table" style="overflow:visible">
<thead class="navbar-inner">
<tr>
<th style='width:30%'>商品名称</th>
<th style='width:15%;text-align: center'>价格</th>
<th style='width:15%;text-align: center'>数量</th>
<th style='width:15%;text-align: center'>金额</th>
<th style='width:12%;text-align: center'>删除</th>
</tr>
</thead>
<tbody id="shopping">
</tbody>
</table>
</div>
<div class="panel-footer" style="background-color: #f5f5f5;" >
(不包含运费) 合计:<span style="color: red" class="total">0</span>
<button class="btn btn-info" style="margin-left: 100px" onclick="goodsBuy(this)">预下单</button>
</div>
</div>
</div>
<div style="border: 1px solid #ddd;border-radius:5px">
<div class="panel-default">
<div class="panel-heading">
会员信息
</div>
<div class="panel-body form-horizontal">
<div class="form-group">
<label class="col-xs-2 col-sm-3 col-md-2 control-label">客户</label>
<div class="col-sm-9 col-md-10">
<input type='hidden' id='uid' name='member_id' value="{{$member['uid']}}"/>
<div class='input-group'>
<input type="text" name="saler" maxlength="30" value="{{$member['nickname']}}" id="saler" class="form-control" readonly/>
</div>
<span id="saleravatar" class='help-block'>
<img style="width: 100px" src="{{$member['avatar']}}"/>
</span>
</div>
</div>
{{--<div class="form-group">--}}
{{--<label class="col-xs-12 col-sm-3 col-md-2 control-label">付款方式</label>--}}
{{--<div class="col-xs-12 col-sm-9 col-md-8 col-lg-8">--}}
{{--<select id="pay-type" class="form-control">--}}
{{--<option value="17" selected="selected">货到付款</option>--}}
{{--<option value="5">后台付款</option>--}}
{{--<option value="3">余额支付</option>--}}
{{--</select>--}}
{{--</div>--}}
{{--</div>--}}
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">收件人</label>
<div class="col-xs-12 col-sm-9 col-md-8 col-lg-8">
<input type="text" name="username" class="form-control"
value="{{$member_address['username']}}"/>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">联系电话</label>
<div class="col-xs-12 col-sm-9 col-md-8 col-lg-8">
<input type="text" name="mobile" class="form-control"
value="{{$member_address['mobile']}}"/>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">所在区域</label>
<div class="col-xs-12 col-sm-9 col-md-8 col-lg-8">
<input type="hidden" id="province_id" value="{{ $member_address['province_id']?:0 }}"/>
<input type="hidden" id="city_id" value="{{ $member_address['city_id']?:0 }}"/>
<input type="hidden" id="district_id" value="{{ $member_address['district_id']?:0 }}"/>
@if(\Setting::get('shop.trade.is_street'))
<input type="hidden" id="street_id" value="{{ $member_address['street_id']?:0 }}"/>
{!! app\common\helpers\AddressHelper::tplLinkedAddress(['address[province_id]','address[city_id]','address[district_id]','address[street_id]'], [])!!}
@else
{!! app\common\helpers\AddressHelper::tplLinkedAddress(['address[province_id]','address[city_id]','address[district_id]'], []) !!}
@endif
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-3 col-md-2 control-label">详细地址</label>
<div class="col-xs-12 col-sm-9 col-md-8 col-lg-8">
<input type="text" name="address" class="form-control"
value="{{$member_address['address']}}"/>
</div>
</div>
</div>
<div class="panel-footer" style="background-color: #f5f5f5;">
合计:<span style="color: red" class="order-price">0</span>
</div>
</div>
</div>
<div style="margin-top: 20px; ">
<button class="btn btn-info" id="create_order_btn" style="width: 100%" onclick="createOrder(this)">提交订单</button>
</div>
</div>
</div>
</div>
@include('Yunshop\HelpUserBuying::admin.payform')
<script type="text/javascript" src="{{static_url('js/area/cascade_street.js')}}"></script>
<script language='javascript'>
function aaa(btn) {
$(btn).removeAttr("onclick");
$(btn).attr('disabled', true);
}
var province_id = $('#province_id').val();
var city_id = $('#city_id').val();
var district_id = $('#district_id').val();
var street_id = $('#street_id').val();
cascdeInit(province_id, city_id, district_id, street_id);
$("#goods").on("change",".fixian",function(){
var bool = $(this).find('input[type="checkbox"]').is(":checked");
var goods_id = $(this).find('input[type="checkbox"]').val();
if (bool) {
var tds= $(this).parent().siblings();//获取当前元素的父节点的全部兄弟节点就是当前这行的所有td
console.log(goods_id);
//选中进行ajax请求加入购物车
$(this).css('background-color', '#0076FF');
$(this).find('span').css('color','white').html('&radic;');
} else {
//取消进行ajax请求移除购物车
$(this).css('background-color', 'white');
$(this).find('span').html('');
}
});
function cleanShopping() {
$("#shopping").find("tr").remove();
$("#goods").find(':input[type="checkbox"]').attr("checked", false);
$("#goods").find(".fixian").css('background-color', 'white');
$("#goods").find('span').html('');
$("#total").text(0);
}
function checkShopping(btn) {
if ($(btn).is(':checked')) {
//开
addShopping(btn);
} else {
//关
var id = $(btn).val();
$("#goods_" + id).remove();
total();
}
}
function addShopping(btn){
var tds=$(btn).parent().parent().siblings();//获取当前元素的父节点的全部兄弟节点就是当前这行的所有td
var id=$(tds).eq(0).text();//获取商品名称的td的文本值
var name=$(tds).eq(1).text();//获取商品名称的td的文本值
var price=$(tds).eq(2).text();//获取商品价格的td的文本值
var html = $("<tr id='goods_"+ id + "'>" //开始拼接HTML元素将取到的东西展示到对用的input中
+"<td>" + name + "</td>"
+"<td align='center'>" + price + "</td>"
+"<td align='center'>"
+"<input style='border: 0; background-color: #FFFFFF; font-size:20px' type='button' value='-' onclick='decrease(this, "+id+")' />"
+"<input style='background-color: #f2f2f2; border: 0;' type='text' name='total' onBlur='manual(this, "+id+")' size='1' value='1'/>"
+"<input style='border: 0; background-color: #FFFFFF; font-size:20px' type='button' value='+' onclick='increase(this, "+id+")' />"
+"</td>"
+"<td align='center'>"+price+"</td>"
+"<td align='center'>"
+"<input type='button' class='btn btn-danger' value='删除' onclick='deleteShopping(this)'/>"
+"<input type='hidden' name='goods_id' value='"+ id +"'/>"
+"</td></tr>");
$("#shopping").append(html);
total();
}
function deleteShopping(btn){
//给上一步你拼接的删除按钮上绑定一个这样的方法
var id = $(btn).parent().parent().attr("id");
$("#goods tr").each(function () {
var goods_id = 'goods_'+$(this).find('td').eq(1).text();
if (goods_id == id) {
$(this).find(':input[type="checkbox"]').attr("checked", false);
$(this).find(".fixian").css('background-color', 'white');
$(this).find('span').html('');
}
});
$(btn).parent().parent().remove();
total();
}
function manual(btn, goodsid) {
var num = $(btn).val();
var shuzi = /^\d+$/;
if (!shuzi.test(num)) {
alert('数量必须为正整数');
$(btn).val(1);
var tds = $(btn).parent().siblings();
var price = parseFloat($(tds).eq(1).text());
//获取总价
$(tds).eq(2).text(toDecimal2(price*1));
total();
return false;
}
var text = $(btn);
$.get("{!! yzWebUrl('plugin.help-user-buying.admin.home.goods-increase') !!}", {'id':goodsid, 'num':num, 'type': 1}, function(json){
console.log(json.result);
if (json.result == 1) {
var num = json.data.data;
$(text).val(num);
//获取单价
var tds = $(text).parent().siblings();
var price = parseFloat($(tds).eq(1).text());
//获取总价
var sum = price*num;
$(tds).eq(2).text(toDecimal2(sum));
total();
} else {
alert(json.msg);
deleteShopping(btn);
}
});
}
//商品加
function increase(btn, goodsid){
var text=$(btn).prev();
var count = parseFloat($(text).val());
$.get("{!! yzWebUrl('plugin.help-user-buying.admin.home.goods-increase') !!}", {'id':goodsid, 'num':count, 'type': 0}, function(json){
console.log(json.result);
if (json.result == 1) {
var num = json.data.data;
$(text).val(num);
//获取单价
var tds = $(text).parent().siblings();
var price = parseFloat($(tds).eq(1).text());
//获取总价
var sum = price*num;
$(tds).eq(2).text(toDecimal2(sum));
total();
} else {
alert(json.msg);
deleteShopping(btn);
}
});
}
//商品减
function decrease(btn, goodsid){
var text=$(btn).next();
var count = parseFloat($(text).val());
if (--count <= 0) {
deleteShopping(btn);
}
$(text).val(count);
//获取单价
var tds = $(text).parent().siblings();
var price = parseFloat($(tds).eq(1).text());
//获取总价
var sum = price*count;
$(tds).eq(2).text(toDecimal2(sum));
total();
}
function total(){
var trs = $("#shopping tr");
var sum = 0;
for(var i=0;i<trs.length;i++){
var td = trs.eq(i).children().eq(3);
var price = parseFloat($(td).text());
//alert(price);
sum = sum + price;
}
$(".total").text(toDecimal2(sum));
}
//商品搜索
$("body").undelegate("#search-keyword","keyup").delegate("#search-keyword","keyup",function(){
searchInp();
});
function searchInp(){
var tbody = document.getElementById("goods");
var trArr = tbody.getElementsByTagName("tr");
var keyword = $('#search-keyword').val();
var reg = new RegExp(keyword);
// var items = [];
if (keyword) {
$("#goods tr").hide();
for(var i = 0;i<trArr.length;i++){
var temp = trArr[i].innerHTML;
if (temp.match(reg)) {
// items.push(temp);
$("#goods tr").eq(i).show();
}
}
// $("#goods tr").hide();
// //遍历出items的内容并将其显示出来
// for(var i = 0; i< items.length;i++){
// $("#goods").append("<tr style='display:table;width:100%;table-layout:fixed;'>"+ items[i] +"</tr>");
// }
}else{
$("#goods tr").show();
}
}
//四舍五入 强制保留两位小数
function toDecimal2(x) {
var f = parseFloat(x);
if (isNaN(f)) {
return false;
}
var f = Math.round(x*100)/100;
var s = f.toString();
var rs = s.indexOf('.');
if (rs < 0) {
rs = s.length;
s += '.';
}
while (s.length <= rs + 2) {
s += '0';
}
return s;
}
function searchSelect() {
var cat_p = $('#category_parent').val();
var cat_c = $('#category_child').val();
var cat_t = $('#category_third').val();
//console.log(cat_p, cat_c, cat_t);
if (cat_p != 0 || cat_c != 0 || cat_t != 0) {
$("#goods tr").hide();
if (cat_t != 0 && cat_t != undefined) {
var reg = new RegExp(cat_t);
}else if (cat_c != 0) {
var reg = new RegExp(cat_c);
} else {
var reg = new RegExp(cat_p);
}
$("#goods tr").each(function (i) {
if ($(this).find('.category').val().match(reg)) {
$("#goods tr").eq(i).show();
}
});
} else {
$("#goods tr").each(function (i) {
$("#goods tr").eq(i).show();
});
}
}
//预下单
function goodsBuy(wo) {
if ($("#shopping").children("tr").length < 1) {
alert('购物车为空');
return false;
}
//下单商品
var goods = [];
$("#shopping").children("tr").each(function (index, domEle) {
var goods_id = $(domEle).find('input[name="goods_id"]').val();
var total = $(domEle).find('input[name="total"]').val();
goods[index] = {"goods_id":goods_id,"total":total,"option_id":0};
});
if ($(':input[name="member_id"]').val() == '') {
alert('用户ID不能为空');
return false;
}
var request_data = {
//"member_id": $(':input[name="member_id"]').val(),
"dispatch_type_id": 1,
"goods" : JSON.stringify(goods),
"address": {},
"member_coupon_ids": "[]",
"orders" : "[]",
"store_id": $(':input[name="store_id"]').val(),
}
var ziji = $(wo);
ziji.text('计算中...');
$.get("{!! $order_url['pre_url'] !!}", request_data, function(json){
ziji.text('预下单');
if (json.result == 1) {
$(".order-price").text(json.data.total_price);
} else {
alert(json.msg);
}
});
}
//下单
function createOrder(btn)
{
var myreg = /^1\d{10}$/;
//下单商品
var goods = [];
//订单收货地址
var address;
//var pay_type = $('#pay-type option:selected').val();
if ($("#shopping").children("tr").length < 1) {
alert('购物车为空');
return false;
}
$("#shopping").children("tr").each(function (index, domEle) {
var goods_id = $(domEle).find('input[name="goods_id"]').val();
var total = $(domEle).find('input[name="total"]').val();
goods[index] = {"goods_id":goods_id,"total":total,"option_id":0};
});
if ($(':input[name="member_id"]').val() == '') {
alert('用户ID不能为空');
return false;
}
if ($(':input[name="username"]').val() == '') {
alert('收件人不能为空');
return false;
}
if (!myreg.test($(':input[name="mobile"]').val())) {
alert('联系电话格式不正确');
return false;
}
if ($(':input[name="address"]').val() == '') {
alert('详细地址不能为空');
return false;
}
var province = $('#sel-provance option:selected');
var city = $('#sel-city option:selected');
var area = $('#sel-area option:selected');
var street = $('#sel-street option:selected');
if (province.val() == 0 || city.val() == 0 || area.val() == 0) {
alert('请选择省市区');
return false;
}
address = {
"uid": $(':input[name="member_id"]').val(),
"username": $(':input[name="username"]').val(),
"mobile": $(':input[name="mobile"]').val(),
"province": province.text(),
"city": city.text(),
"district": area.text(),
"zipcode" : "",
"address": $(':input[name="address"]').val(),
};
if(street.val() !== undefined && street.val() != 0) {
address.street = street.text();
}
//下单请求数据
let request_data = {
//"member_id": $(':input[name="member_id"]').val(),
"dispatch_type_id": 1,
"goods" : JSON.stringify(goods),
"address": JSON.stringify(address),
"member_coupon_ids": "[]",
"orders" : "[]",
"cart_ids": "[]",
"store_id": $(':input[name="store_id"]').val(),
"realname": $(':input[name="realname"]').val(),
};
$(btn).removeAttr("onclick");
$(btn).attr('disabled', true);
$.get("{!! $order_url['create_url'] !!}", request_data, function(json){
if (json.result == 1) {
pay(json.data.order_ids);
} else {
alert('下单失败:'+json.msg);
}
$(btn).attr("onclick","createOrder;");
$(btn).attr('disabled', false);
});
}
//支付
function pay(order_ids)
{
$.get("{!! yzWebUrl('plugin.help-user-buying.admin.user-merge-pay.index') !!}",{order_ids:order_ids}, function(json){
if (json.result == 1) {
let order_pay = json.data.order_pay; //订单支付类
let member = json.data.member; //下单用户
$('#thawing-funds').modal();
$(':input[name="order_pay_id"]').val(order_pay.id);
$(':input[name="order_ids"]').val(order_pay.order_ids);
$('#member_credit2').html(member.credit2);
$('#pay_sn').html(order_pay.pay_sn);
$('#amount').html(order_pay.amount);
} else {
console.log(json);
alert(json.msg);
}
});
}
</script>
@endsection

View File

@ -0,0 +1,98 @@
<!-- 平台提现 -->
<div id="thawing-funds" class="modal fade" tabindex="-1" role="dialog" aria-hidden="true">
<form class="form-horizontal form" action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="order_pay_id" value=""/>
<input type="hidden" name="order_ids" value=""/>
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header" style="text-align: center;">
{{--<button aria-hidden="true" data-dismiss="modal" class="close" type="button">×</button>--}}
<p>会员余额:<span id="member_credit2"></span></p>
<p>支付流水号:<span id="pay_sn"></span></p>
<p>支付金额:<span id="amount" style="color: red"></span></p>
</div>
<div class="modal-body" style="text-align: center;">
<div id="pay_btn">
<button style="margin: 0 15px" type="button" class="btn btn-warning" onclick="credit2()">余额支付</button>
<button type="button" class="btn btn-youtube" onclick="cod()">货到付款</button>
</div>
<div id="pay_msg" style="color: red;font-size: 18px;display: none;">
支付中....
</div>
</div>
<div class="modal-footer">
<a href="#" class="btn btn-default" data-dismiss="modal" aria-hidden="true" onclick="shua()">取消</a>
</div>
</div>
</div>
</form>
</div>
<script language="javascript">
function shua() {
window.location.reload();
}
function pay_wait(type) {
if (type == 'yes') {
$('#pay_btn').hide();
$('#pay_msg').show();
} else {
$('#pay_msg').hide();
$('#pay_btn').show();
}
}
function credit2() {
pay_wait('yes');
if ($(':input[name="order_pay_id"]').val() == '') {
alert('支付id为空无法支付');
return false;
}
$.get("{!! yzWebUrl('plugin.help-user-buying.admin.user-merge-pay.credit2') !!}",{order_pay_id:$(':input[name="order_pay_id"]').val()}, function(json){
if (json.result == 1) {
alert('支付成功');
shua();
} else {
console.log(json);
alert(json.msg);
}
});
}
function cod() {
pay_wait('yes');
if ($(':input[name="order_pay_id"]').val() == '') {
alert('支付id为空无法支付');
return false;
}
$.get("{!! yzWebUrl('plugin.help-user-buying.admin.user-merge-pay.COD') !!}",{order_pay_id:$(':input[name="order_pay_id"]').val()}, function(json){
if (json.result == 1) {
alert('支付成功');
shua();
} else {
console.log(json);
alert(json.msg);
}
});
}
</script>

View File

@ -0,0 +1,158 @@
@extends('layouts.base')
@section('content')
@section('title', trans('代客下单'))
<div class="w1200 m0a">
<div class="main">
<form id="form1" method="post" action="{!! yzWebUrl('plugin.help-user-buying.admin.home.shopIndex') !!}" class="form-horizontal form" enctype="multipart/form-data">
<div class="rightlist">
<div class="right-titpos" style="border-bottom-color: white">
{{--<ul class="add-snav">--}}
{{--<li class="active"><a href="#">代客下单</a></li>--}}
{{--</ul>--}}
</div>
<div class="panel panel-default">
<div class="panel-heading" style="background-color: rgb(245, 245, 245);border: 1px solid #ddd;margin: 0">代客下单</div>
<div class="panel-body" style="border: 1px solid #ddd">
<div class="form-group">
<label class="col-xs-12 col-sm-4 control-label">订单类型</label>
<div class="col-sm-4 col-xs-6">
<label class="radio-inline">
<input type="radio" name="order_type" checked value="0">平台订单
</label>
&nbsp;&nbsp;&nbsp;
@if (!empty($store))
<label class="radio-inline">
<input type="radio" name="order_type" value="1"> 门店订单
</label>
@endif
</div>
</div>
<div class="form-group" id="store_list" style="display: none">
<label class="col-xs-12 col-sm-4 control-label">选择门店222</label>
<div class="col-sm-3 col-xs-12">
<select class="form-control" name="store_id">
<option value="">选择门店</option>
@foreach($store as $value)
<option value="{{$value['id']}}">{{$value['store_name']}}</option>
@endforeach
</select>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-4 control-label">选择下单人:</label>
<div class="col-sm-3 col-xs-12">
<input type='hidden' id='uid' name='uid' value=""/>
<div class='input-group'>
<input type="text" name="saler" maxlength="30" value="" id="saler" class="form-control" readonly/>
<div class='input-group-btn'>
<button class="btn btn-default" type="button" onclick="$('#modal-module-menus-notice').modal();">
选择用户
</button>
<button class="btn btn-danger" type="button" onclick="$('#uid').val('');$('#saler').val('');$('#saleravatar').hide()">
清除选择
</button>
</div>
</div>
<span id="saleravatar" class='help-block' style="display:none">
<img style="width: 100px" src=""/></span>
</div>
</div>
<div class="form-group">
<label class="col-xs-12 col-sm-4 control-label"></label>
<div class="col-sm-3 col-xs-12">
<input type="submit" name="submit" value="下一步" class="btn btn-primary" >
{{--<input type="button" name="submit" value="下一步" class="btn btn-primary" onclick="jump_url()">--}}
<input type="hidden" name="token" value="{$_W['token']}">
</div>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
<div id="modal-module-menus-notice" class="modal fade" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button aria-hidden="true" data-dismiss="modal" class="close" type="button">
×
</button>
<h3>选择用户</h3>
</div>
<div class="modal-body">
<div class="row">
<div class="input-group">
<input type="text" class="form-control" name="keyword" value=""
id="search-kwd-notice"
placeholder="请输入粉丝昵称/姓名/手机号"/>
<span class='input-group-btn'>
<button type="button" class="btn btn-default"
onclick="search_members();">搜索
</button>
</span>
</div>
</div>
<div id="module-menus-notice"></div>
</div>
<div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">关闭</button>
</div>
</div>
</div>
</div>
<script>
$(':radio[name="order_type"]').click(function () {
if ($(this).val() == '1') {
$('#form1').attr('action', '{!! yzWebUrl('plugin.help-user-buying.admin.home.storeIndex') !!}');
$('#store_list').show();
} else {
$('#form1').attr('action', '{!! yzWebUrl('plugin.help-user-buying.admin.home.shopIndex') !!}');
$('#store_list').hide();
}
});
function search_members() {
if ($('#search-kwd-notice').val() == '') {
Tip.focus('#search-kwd-notice', '请输入关键词');
return;
}
$("#module-menus-notice").html("正在搜索....");
$.get("{!! yzWebUrl('member.member.get-search-member') !!}", {
keyword: $.trim($('#search-kwd-notice').val())
}, function (dat) {
$('#module-menus-notice').html(dat);
});
}
function select_member(o) {
$("#uid").val(o.uid);
$("#saleravatar").show();
$("#saleravatar").find('img').attr('src', o.avatar);
$("#saler").val(o.nickname + "/" + o.realname + "/" + o.mobile);
$("#modal-module-menus-notice .close").click();
}
function jump_url() {
var uid = $("#uid").val();
var store_id = $(':input[name="data[store_id]"]').val();
if (store_id == '') {
alert('请选择基地')
return false;
}
if (uid == '') {
alert('请选择会员')
return false;
}
window.location.href="{!! yzWebUrl('plugin.help-user-buying.admin.home.index') !!}" + '&uid='+uid+'&store_id='+store_id;
}
</script>
@endsection

View File

@ -0,0 +1,613 @@
@extends('layouts.base')
@section('title', "代客下单")
@section('content')
<style>
.rightlist #app .rightlist-head{line-height:50px;padding:15px 0;}
.rightlist #app{margin-left:30px;}
.rightlist #app .el-breadcrumb{padding:30px 0;font-size:16px;}
/* .el-form-item__label{padding-right:30px;} */
.tip{font-size:12px;color:#999;font-weight:500}
.rightlist-head-con{padding-right:20px;font-size:16px;color:#888;}
/* .rightlist-head-con{float:left;padding-right:20px;font-size:16px;color:#888;} */
.el-tag{font-weight:700;font-size:15px;margin-bottom:30px;}
.el-icon-edit{font-size:16px;padding:0 15px;color:#409EFF;cursor: pointer;}
/* 滑块选择小白点 */
.el-switch.is-checked .el-switch__core::after {left: 100%;margin-left: -17px;}
.el-switch__core::after {content: "";position: absolute;top: 1px;left: 1px;border-radius: 100%;transition: all .3s;width: 16px;height: 16px;background-color: #fff;}
.tip1{font-size:12px;color:red;font-weight:500}
[v-cloak]{
display:none;
}
/* 计数器样式 */
.el-input-number__decrease, .el-input-number__increase {width: 25px;}
.el-input-number .el-input__inner {padding-left: 0px;padding-right: 0px;}
</style>
<div class="rightlist">
<div id="app" v-cloak v-loading="loading">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item><a href="{{ yzWebFullUrl('plugin.help-user-buying.admin.index.index') }}">返回选择</a></el-breadcrumb-item>
{{--<el-breadcrumb-item>[[store.id==0?'平台自营':store.store_name]]</el-breadcrumb-item>--}}
<el-breadcrumb-item v-html="title"></el-breadcrumb-item>
</el-breadcrumb>
<el-form :inline="true" :model="search_form" ref="search_form">
<el-form-item>
<el-input v-model="search_form.goods_name" placeholder="请输入商品名称"></el-input>
</el-form-item>
<el-form-item>
<el-select v-model="search_form.id_v1" placeholder="请选择一级分类" clearable @change="changeV1()">
<el-option v-for="item in category_list" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="search_form.id_v2" placeholder="请选择二级分类" clearable @change="changeV2()">
<el-option v-for="item in category_list_v2" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-select v-model="search_form.id_v3" placeholder="请选择三级分类" clearable v-if="category_level==3">
<el-option v-for="item in category_list_v3" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item style="float:right;text-align:right;">
<el-button type="success" icon="el-icon-search" @click="search(1)">搜索</el-button>
</el-form-item>
</el-form>
<el-row :gutter="50">
<!-- left -->
<el-col :span="12">
<!-- 表格start -->
<el-table :data="list" style="width: 100%" max-height="500" v-loading="all_loading">
<el-table-column prop="id" label="ID" width="80" align="center"></el-table-column>
<el-table-column label="商品" min-width="180">
<template slot-scope="scope">
<div style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;">
<img :src="scope.row.thumb" style="width:40px;height:40px;">
[[scope.row.title]]
</div>
</template>
</el-table-column>
<el-table-column prop="price" label="价格" max-width="120" align="center"></el-table-column>
<el-table-column label="库存" prop="stock" max-width="120" align="center"></el-table-column>
<el-table-column label="选择" width="80" align="center">
<template slot-scope="scope">
<el-button size="mini" @click="choose(scope.row)">选择</el-button>
</template>
</el-table-column>
</el-table>
<el-col :span="24" align="right" migra style="padding:15px 5% 15px 0" v-loading="loading">
<el-pagination background layout="prev, pager, next" @current-change="currentChange" :total="total"
:page-size="per_size" :current-page="current_page"></el-pagination>
</el-col>
<!-- 表格end -->
</el-col>
<!-- right -->
<el-col :span="12">
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;">
订单信息
<el-button type="danger" size="small" style="margin-left:20px" @click="delAll">清空购物车</el-button>
</div>
<!-- 表格start -->
<el-table :data="cart_list" style="width: 100%;border:1px solid #e9e9e9" v-loading="loading" max-height="500">
<el-table-column prop="id" label="商品名称" min-width="150" align="center">
<template slot-scope="scope">
<div style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;">
<div>[[scope.row.title]]</div>
<div v-if="scope.row.option_title" style="color:#999;font-size:12px;">[ [[scope.row.option_title]] ]</div>
</div>
</template>
</el-table-column>
<el-table-column prop="price" label="价格" max-width="120" align="center"></el-table-column>
<el-table-column prop="digitization_name" label="数量" width="120" align="center">
<template slot-scope="scope">
<el-input-number v-model="scope.row.num" :step="1" :min="0" style="width:110px;" @change="changeNum(scope.$index)"></el-input-number>
</template>
</el-table-column>
<el-table-column label="金额" prop="total" max-width="120" align="center"></el-table-column>
<el-table-column label="操作" align="center">
<template slot-scope="scope">
<el-button size="mini" type="danger" width="80" @click="del(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 表格end -->
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;">
<span>(不包含运费)</span>
<span>合计:<span style="color:red">[[total_money]]</span></span>
<el-button type="primary" size="small" style="margin-left:20px" @click="openMember">结算</el-button>
</div>
</el-col>
</el-row>
<!-- 选择会员弹出框 -->
<el-dialog title="选择会员" :visible.sync="is_choose_member" width="60%">
<div>
<div v-if="member.uid" style="font-weight:900;margin-bottom:30px;">
<div>已选会员:</div>
<div style="float:left;width:120px">
<img :src="member.avatar_image" alt="" style="width:100px;height:100px">
</div>
<div style="display:inline-block;">
<div>[[member.nickname]]</div>
<div>[[member.mobile]]</div>
<el-button type="danger" size="small" @click="delMember">清除选择</el-button>
</div>
</div>
<el-form>
<el-form-item label="" prop="">
<el-input v-model="member_info" placeholder="请输入粉丝昵称/姓名/手机号" style="width:90%;"></el-input>
<el-button type="success" icon="el-icon-search" @click="searchMember()" v-loading="table_loading">搜索</el-button>
</el-form-item>
</el-form>
<template>
<!-- 表格start -->
<el-table :data="member_list" style="width: 100%;" max-height="500" v-if="member_list.length>0" v-loading="table_loading">
<el-table-column label="头像" align="center">
<template slot-scope="scope">
<img :src="scope.row.avatar_image" alt="" style="width:30px;height:30px;">
</template>
</el-table-column>
<el-table-column prop="nickname" label="姓名" min-width="120" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" min-width="120" align="center"></el-table-column>
<el-table-column label="操作" min-width="80" align="center">
<template slot-scope="scope">
<el-button @click="chooseMember(scope.row)" size="small">选择</el-button>
</template>
</el-table-column>
</el-table>
<!-- 表格end -->
</template>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="is_choose_member = false"> </el-button>
<el-button type="primary" @click="confirm"> </el-button>
</span>
</el-dialog>
<!-- 选择规格弹出框 -->
<el-dialog title="选择商品规格" :visible.sync="is_option" width="60%">
<div>
<div v-for="(item,index) in option_list" :key="index">
<h5 style="border-bottom:1px solid #ddd;font-weight:900;">
[[item.title]]
</h5>
<div style="display:inline-block;margin:5px;" >
<el-radio-group v-model="status[index]" v-for="(item1,index1) in item.specitem" :key="index1" style="margin-bottom: 30px;">
<el-radio-button :label="item1.id">[[item1.title]]</el-radio-button>
</el-radio-group>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="is_option = false"> </el-button>
<el-button type="primary" @click="confirmOption"> </el-button>
</span>
</el-dialog>
</div>
<script>
var app = new Vue({
el:"#app",
delimiters: ['[[', ']]'],
data() {
let goods_url = '{!! $goods_url !!}';
let category_level = {!! $category_level !!};
console.log(category_level)
let category_list = {!! $category_list !!};
console.log(category_list)
let owner_id = {!! $owner_id !!};
let order_type = {!! $order_type !!};
let title = '{!! $title!!}';
// console.log(store);
return{
title:title,
type:1,
loading:false,
table_loading:false,
all_loading:false,
order_type:order_type,
owner_id:owner_id,//门店数据
total_money:"0",//总金额
is_exist:0,//商品是否已存在购物车
is_choose_member:false,//选择会员弹出框
is_option:false,//选择规格弹出框
option_list:[],//规格列表
choose_row:{},//选择商品的信息
status:[],//选择的商品规格的值
goods_url:goods_url,//搜索商品接口
member_info:"",
member:{},//选择的会员信息回显
member_list:[],//会员列表
search_form:{
id_v1:"",
id_v2:"",
id_v3:"",
},
category_level:category_level,//分类等级
category_list:category_list,
category_list_v2:[],
category_list_v3:[],
list:[],
cart_list:[],
rules:{},
//分页
total:0,
per_size:0,
current_page:0,
rules:{},
}
},
created() {
document.onkeydown = function(){
if(window.event.keyCode == 13) {
window.event.keyCode = 0;
window.event.returnValue = false;
}
};
let json = {search:{owner_id:this.owner_id}};
this.getGoodsList(json);
},
methods: {
// 获得商品列表
getGoodsList(json) {
var that = this;
that.all_loading = true;
that.$http.post(this.goods_url,json).then(response => {
console.log(response);
if(response.data.result==1){
console.log(response);
this.list = response.data.data.data;
this.total = response.data.data.total;
this.current_page = response.data.data.current_page;
this.per_size = response.data.data.per_page;
that.all_loading = false;
}
else{
that.$message.error(response.data.msg);
that.all_loading = false;
}
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 选择商品
choose(row) {
this.is_exist = 0;
this.choose_row = row;
// 如果商品有规格
if(row.has_option == 1){
this.status = [];//初始化规格选择状态
this.is_option = true;
this.option_list = row.has_many_specs;
}
else {
this.cart_list.some((item,index) =>{
if(item.id == row.id){
this.is_exist = 1;
item.num++;
this.changeNum(index);
this.countTotalPrice();
return true;
}
})
if(this.is_exist==1){//如果购物车已存在此商品或商品规格
return false;
}
this.pushCart(row)
console.log(this.cart_list)
this.countTotalPrice();
}
},
// 加入购物车
pushCart(row) {
this.cart_list.push(
{
id:row.id,
num:1,
total:row.price,
price:row.price,
thumb:row.thumb,
title:row.title,
option_id:0,//规格id
}
);
},
// 改变数量
changeNum(index) {
var that = this;
console.log(index)
if(this.cart_list[index].num < 1) {
this.del(index);
return false;
}
that.$http.post("{!! yzWebUrl('plugin.help-user-buying.admin.index.goods-increase') !!}",{'id':this.cart_list[index].id, 'num':this.cart_list[index].num,'option_id':this.cart_list[index].option_id}).then(response => {
console.log(response);
if(response.data.result==1){
console.log(response);
that.all_loading = false;
if(response.data.data.code==1){
that.$message.error("超过库存");
this.cart_list[index].num = response.data.data.num;
}
}
else{
that.$message.error(response.data.msg);
that.all_loading = false;
this.cart_list[index].num--;
}
}),function(res){
console.log(res);
that.all_loading = false;
};
this.cart_list[index].total = this.cart_list[index].num * this.cart_list[index].price;
this.countTotalPrice();
},
// 删除
del(index) {
this.$confirm('确定删除吗', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {
// this.delGoods(index);
this.cart_list.splice(index,1);
this.countTotalPrice();
}).catch(() => {
this.cart_list[index].num++;
this.$message({type: 'info',message: '已取消删除'});
});
},
// 清空购物车
delAll() {
this.$confirm('确定清空购物车吗', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {
// this.delGoods(index);
this.cart_list = []
this.countTotalPrice();
}).catch(() => {
this.$message({type: 'info',message: '已取消操作'});
});
},
// 打开会员弹出框
openMember(json) {
var that = this;
if(this.cart_list.length<=0) {
this.$message.error("请选择下单商品!");
return false;
}
that.is_choose_member = true;
// that.searchMember('{}');
},
// 搜索会员
searchMember(json) {
var that = this;
that.is_choose_member = true;
that.table_loading = true;
that.$http.post("{!! yzWebFullUrl('plugin.help-user-buying.admin.index.getSearchMember') !!}",{keyword:this.member_info}).then(response => {
console.log(response);
if(response.data.result==1){
console.log(response);
this.member_list = response.data.data;
that.table_loading = false;
}
else{
that.$message.error(response.data);
that.table_loading = false;
}
}),function(res){
console.log(res);
that.table_loading = false;
};
},
// 选择会员
chooseMember(row) {
this.member = row;
},
// 确认选择会员
confirm() {
// 判断是否选择了会员
if(!this.member.uid){
this.$message.error("请选择会员")
return false;
}
console.log(this.cart_list);
let new_arr = [];
// let dispatch_type_id: 1
this.cart_list.forEach((item,index) => {
new_arr.push({
goods_id:item.id,
total:item.num,
option_id:item.option_id,
})
});
console.log()
// let store_name = ""
// if(this.title){
// store_name = this.store.store_name
// }
let data = {
uid:this.member.uid,
goods:new_arr,
owner_id:this.owner_id,
order_type:this.order_type,
title:this.title,
}
console.log(data)
{{--window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.set-member-id',['data' => '']) !!}"+JSON.stringify(data);--}}
this.$http.post("{!! yzWebFullUrl('plugin.help-user-buying.admin.index.set-member-id') !!}",{data:JSON.stringify(data)}).then(response => {
console.log(response,123);
if(response.data.msg == "该类型订单无配送方式,无法正常下单"){
this.$message({
message: response.data.msg,
type: 'error'
});
location.reload();
return
}
window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.set-member-id',['data' => '']) !!}"+JSON.stringify(data);
}),function(res){
console.log(res);
};
this.is_choose_member = false;
},
// 清除选择会员
delMember() {
this.member = {};
},
// 确认选择规格
confirmOption() {
// 判断是否所有规格都已经选择
for(let i=0;i<this.option_list.length;i++) {
if(!this.status[i]){
this.$message.error("请选择完整规格信息")
return false;
}
}
// 拼接id
let id = this.status.join("_");
//重新排序处理后台返回的规格拼接id没规律问题
console.log(this.permute(this.status));
let arr_ids = this.permute(this.status);
let str_ids = [];
for(let i=0;i<arr_ids.length;i++) {
str_ids[i] = arr_ids[i].join("_");
}
// 判断选中的规格是否已存在购物车
for(let i=0;i<str_ids.length;i++) {
this.cart_list.some((item,index) =>{
if(item.specs == str_ids[i]){
console.log(id)
this.is_exist = 1;
item.num++;
this.changeNum(index);
this.countTotalPrice();
return true;
}
})
}
if(this.is_exist == 1) {
this.is_option = false;
return false;
}
// 加入购物车
for(let i=0;i<this.choose_row.has_many_options.length;i++){
for(let j=0;j<str_ids.length;j++) {
if(str_ids[j]==this.choose_row.has_many_options[i].specs){
this.cart_list.push({
id:this.choose_row.has_many_options[i].goods_id,
specs:this.choose_row.has_many_options[i].specs,
option_id:this.choose_row.has_many_options[i].id,//规格id
title:this.choose_row.title,
option_title:this.choose_row.has_many_options[i].title,
thumb:this.choose_row.thumb,
num:1,
total:this.choose_row.has_many_options[i].product_price,
price:this.choose_row.has_many_options[i].product_price,
})
this.is_option = false;
break;
}
}
}
this.countTotalPrice();
console.log(this.cart_list)
},
// 分页
currentChange(page) {
var that = this;
// let json = {page:page};
that.search(page);
},
// 一级分类改变
changeV1(){
this.search_form.id_v2 = "";
this.search_form.id_v3 = "";
this.category_list_v2 = [];
this.category_list_v3 = [];
this.category_list.find(item => {
if(item.id == this.search_form.id_v1) {
this.category_list_v2 = item.childrens;
}
});
},
// 二级分类改变
changeV2(){
this.search_form.id_v3 = "";
this.category_list_v3 = [];
if(this.category_level==3) {
this.category_list_v2.find(item => {
if(item.id == this.search_form.id_v2) {
this.category_list_v3 = item.childrens;
}
})
}
},
// 搜索
search(page) {
var that = this;
console.log(that.search_form)
var arr = [];
if(this.search_form.id_v1){
arr.push(this.search_form.id_v1)
}
if(this.search_form.id_v2){
arr.push(this.search_form.id_v2)
}
if(this.search_form.id_v3){
arr.push(this.search_form.id_v3)
}
let str;
let json;
if(arr.length<=0) {
str = "";
json = {page:page,search:{keyword:this.search_form.goods_name,owner_id:this.owner_id}};
}
else{
str = arr.join(",");
json = {page:page,search:{category:str,keyword:this.search_form.goods_name,owner_id:this.owner_id}};
}
that.getGoodsList(json);
},
//计算总价格&总数
countTotalPrice() {
this.total_money = 0.0; //初始化
for (var i = 0; i < this.cart_list.length; i++) {
this.total_money += this.cart_list[i].price * this.cart_list[i].num;
}
this.total_money = Number(this.total_money.toString().match(/^\d+(?:\.\d{0,2})?/));
},
// 数组全排序
permute(arr){
var rst=[],cur=[]
function fn(arr){
var ch
for(var i=0;i<arr.length;i++){
ch=arr.splice(i,1)[0]
cur.push(ch)
if(arr.length==0){
rst.push(cur.slice())
}
fn(arr)
arr.splice(i,0,ch)
cur.pop()
}
return rst
}
return fn(arr)
}
},
})
</script>
@endsection

View File

@ -0,0 +1,848 @@
@extends('layouts.base')
@section('title', "代客下单")
@section('content')
<style>
.rightlist #app .rightlist-head{line-height:50px;padding:15px 0;}
.rightlist #app{margin-left:30px;}
.rightlist #app .el-breadcrumb{padding:30px 0;font-size:16px;}
/* .el-form-item__label{padding-right:30px;} */
.tip{font-size:12px;color:#999;font-weight:500}
.rightlist-head-con{padding-right:20px;font-size:16px;color:#888;}
/* .rightlist-head-con{float:left;padding-right:20px;font-size:16px;color:#888;} */
.el-tag{font-weight:700;font-size:15px;margin-bottom:30px;}
.el-icon-edit{font-size:16px;padding:0 15px;color:#409EFF;cursor: pointer;}
/* 滑块选择小白点 */
.el-switch.is-checked .el-switch__core::after {left: 100%;margin-left: -17px;}
.el-switch__core::after {content: "";position: absolute;top: 1px;left: 1px;border-radius: 100%;transition: all .3s;width: 16px;height: 16px;background-color: #fff;}
.tip1{font-size:12px;color:red;font-weight:500}
[v-cloak]{
display:none;
}
/* 计数器样式 */
.el-input-number__decrease, .el-input-number__increase {width: 25px;}
.el-input-number .el-input__inner {padding-left: 0px;padding-right: 0px;}
</style>
<div class="rightlist">
<div id="app" v-cloak v-loading="loading">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item><a href="{{ yzWebFullUrl('plugin.help-user-buying.admin.index.index') }}">返回选择</a></el-breadcrumb-item>
<el-breadcrumb-item>[[goods.title?goods.title:'平台自营']]</el-breadcrumb-item>
</el-breadcrumb>
<el-row :gutter="50">
<!-- left -->
<el-col :span="12">
<div>
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;">
会员信息
</div>
<div style="border:1px solid #e9e9e9;">
<el-form :model="member" ref="member" label-width="20%" style="padding-top:50px;">
<el-form-item label="客户">
<el-input v-model="member.nickname" disabled style="width:70%"></el-input><br>
<img :src="member.avatar_image" style="width:70px;height:70px;">
</el-form-item>
<el-form-item label="配送方式" v-show="deliveryMethod.length > 0">
<el-radio v-for="(item,index) in deliveryMethod" :key="index" v-model.number="dispatch_type_id" :label="item.value">[[item.name]]</el-radio>
</el-form-item>
<el-form-item label="收件人" v-show="needAddress == 1">
<el-input v-model="member.member_address.username" style="width:70%"></el-input>
</el-form-item>
<el-form-item label="联系电话" v-show="needAddress == 1">
<el-input v-model="member.member_address.mobile" style="width:70%"></el-input>
</el-form-item>
<el-form-item label="所在区域" v-loading="all_loading" v-show="needAddress == 1">
<el-select v-model="member.member_address.province" placeholder="请选择省" clearable style="width:20%" @change="changeProvince()" value-key="id">
<el-option v-for="item in province_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
<el-select v-model="member.member_address.city" placeholder="请选择市" clearable style="width:20%" value-key="id" @change="changeCity()">
<el-option v-for="item in city_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
<el-select v-model="member.member_address.district" placeholder="请选择区" clearable style="width:20%" value-key="id" @change="changeDistrict()">
<el-option v-for="item in district_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
<el-select v-if="is_street" v-model="member.member_address.street" placeholder="请选择街道" clearable style="width:20%" value-key="id">
<el-option v-for="item in street_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="详细地址" v-show="needAddress == 1">
<el-input v-model="member.member_address.address" style="width:70%"></el-input>
</el-form-item>
<el-form-item label="" v-show="needAddress == 1">
<el-button type="primary" @click="showMemberAddressList()" size="small">其他地址</el-button>
<el-button type="primary" @click="createAddress()" size="small">新增地址</el-button>
</el-form-item>
</el-form>
</div>
</div>
</el-col>
<!-- right -->
<el-col :span="12">
<div v-for="(item,index) in orders_list" style="margin-bottom:20px;">
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;">
订单信息
</div>
<!-- 表格start -->
<el-table :data="item.order_goods" style="width: 100%;border:1px solid #e9e9e9" v-loading="loading" max-height="400">
<el-table-column prop="id" label="商品名称" min-width="150">
<template slot-scope="scope">
<div style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;">
<div>[[scope.row.title]]</div>
</div>
</template>
</el-table-column>
<el-table-column prop="options" label="规格" max-width="120" align="center">
<template slot-scope="scope">
<div>[[scope.row.goods_option_title?scope.row.goods_option_title:'']]</div>
</template>
</el-table-column>
<el-table-column prop="goods_price" label="单价" width="120" align="center">
<template slot-scope="scope">
<div>[[scope.row.goods_price/scope.row.total]]</div>
</template>
</el-table-column>
<el-table-column label="数量" prop="total" max-width="120" align="center"></el-table-column>
</el-table>
<!-- 表格end -->
<div>
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9">
优惠抵扣信息
</div>
<div style="border:1px solid #e9e9e9;font-weight:900;line-height:50px">
<div v-for="(item1,index1) in item.order_deductions" :key="index1">
<div style="padding-left:2.5%;display:inline-block;width:70%">可用[[item1.coin]][[item1.name]] 抵扣[[item1.amount]]</div>
<div style="padding-rifht:2.5%;display:inline-block;width:25%;text-align:right">
<el-switch v-model="item1.checked" @change="changePoint()"></el-switch>
</div>
</div>
</div>
</div>
</div>
<div>
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;margin-top:30px;">
优惠抵扣信息
</div>
<div style="border:1px solid #e9e9e9;font-weight:900;line-height:50px">
<div>
<div style="padding-left:2.5%;display:inline-block;width:70%">优惠券 [[total_coupons]]张可用</div>
<div style="padding-rifht:2.5%;display:inline-block;width:25%;text-align:right">
<span style="color:#409EFF;cursor:pointer" @click="is_discounts=true">
[[used_coupons==0?'未使用':'已使用'+used_coupons+'张']]
</span>
</div>
</div>
</div>
<div style="background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;">
<span v-for="(item,index) in amount_items">
<span>[[item.name]]<span style="color:red">[[item.amount]]</span></span>&nbsp;&nbsp;
</span>
<span>合计:<span style="color:red">[[total_price]] </span></span>
</div>
<el-button align="center" @click="order">立即下单</el-button>
</div>
</el-col>
</el-row>
<!-- 选择优惠券弹出框 -->
<el-dialog title="选择优惠券" :visible.sync="is_discounts" v-loading="loading">
<div>
<template>
<!-- 表格start -->
<el-table :data="discounts_list" style="width: 100%;" max-height="500" ref="table" v-loading="table_loading">
<el-table-column width="55">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.checked" @change="changeDiscounts()" :disabled="scope.row.valid==false"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="belongs_to_coupon.name" label="优惠券名称" min-width="120" align="center"> </el-table-column>
<el-table-column prop="details" label="优惠详情" min-width="120" align="center">
<template slot-scope="scope">
<div>
<span v-if="scope.row.belongs_to_coupon.enough==0">不限&nbsp;&nbsp;</span>
<span v-else>[[scope.row.belongs_to_coupon.enough可用]]&nbsp;&nbsp;</span>
<span v-if="scope.row.belongs_to_coupon.discount=='0.00'">立减[[scope.row.belongs_to_coupon.deduct]]&nbsp;&nbsp;</span>
<span v-else>[[scope.row.belongs_to_coupon.discount]]&nbsp;&nbsp;</span>
</div>
</template>
</el-table-column>
</el-table>
<!-- 表格end -->
</template>
</div>
<span slot="footer" class="dialog-footer">
<!-- <el-button @click="is_discounts = false"> </el-button> -->
<el-button type="primary" @click="is_discounts = false"> </el-button>
</span>
</el-dialog>
<!-- 选择支付方式弹出框 -->
<el-dialog title="确认付款" :visible.sync="is_pay" v-loading="loading">
<div style="text-align:center;line-height:40px;font-weight:600;">
<div>会员余额:[[pay.credit2]]</div>
<div> 支付流水号:[[pay.pay_sn]]</div>
<div> 支付金额:<span style="color:red">[[pay.amount]]</span></div>
<div>
<el-button v-for="(item1,index1) in buttons" :key="index1" @click="confirmPay(item1)">[[item1.name]]</el-button>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="jump"> </el-button>
<!-- <el-button type="primary" @click="is_discounts = false"> </el-button> -->
</span>
</el-dialog>
<!-- 选择收货地址 -->
<el-dialog :visible.sync="modal_member_address_list" width="900px" title="选择收货地址">
<div style="overflow:auto">
<el-table :data="member_address_list" style="width: 100%;overflow:auto">
<el-table-column prop="username" label="姓名" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" align="center"></el-table-column>
<el-table-column prop="address_info" label="地址" align="center"></el-table-column>
<el-table-column prop="" label="操作" align="center">
<template slot-scope="scope">
<el-button @click="selectSendAddress(scope.row)">选择</el-button>
<el-button type="success" @click="editAddress(scope.row)">编辑</el-button>
</template>
</el-table-column>
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="modal_member_address_list = false"> </el-button>
</span>
</el-dialog>
<template>
<edit-member-address
:member_address="edit_member_address"
:edit_address_dialog_show="edit_address_dialog_show"
:is_street="is_street"
:operation-type="operationType"
@init-address="componentInteract"
>
</edit-member-address>
</template>
</div>
@include('Yunshop\HelpUserBuying::buying.template.editMemberAddress')
<script>
var app = new Vue({
el:"#app",
delimiters: ['[[', ']]'],
data() {
let request = {!! $request !!};
console.log(request);
let order_type = request.order_type;
let member = {!! $member !!};
console.log(member);
// 'deliveryMethod' => json_encode($deliveryMethod)
let deliveryMethod = {!! $deliveryMethod !!};
let needAddress = {!! $needAddress !!};
console.log(5566,deliveryMethod,needAddress);
if(member.member_address.length==0){
member.member_address = {
address: "",
city: "",
city_id: 0,
district: "",
district_id: 0,
mobile: "",
province: "",
province_id: 0,
street: "",
street_id: 0,
username: "",
};
}
let is_street = {!! $is_street !!};
console.log(is_street)
let order_url = {!! $order_url !!};
console.log(order_url)
let store = {!! $store?:'{id:0}' !!};
return{
modal_member_address_list:false, //会员地址
request_member_address_list:true, //是否请求获取地址
member_address_list:{},
value:"",//测试
province_list:[],//省
city_list:[],//市
district_list:[],//区域
street_list:[],//街道
orders_list:[],//订单列表
address:"",//用户信息,优惠选择必传
amount_items:"",//总抵扣、总优惠等,优惠选择回传
discounts_list:[],//优惠券列表
store:store,//门店信息
order_type:order_type,//订单类型。32门店92供应商0普通商品
deliveryMethod:deliveryMethod,//配送方式列表
needAddress:needAddress,//是否需要收货地址1需要,2不需要
dispatch_type_id:1,//配送方式默认快递值为1
no_deduction_ids:0,//默认开启积分抵扣
pay:{
credit2:"",
amount:"",
pay_sn:"",
id:0,
},//支付信息
buttons:[],//支付方式列表
total_coupons:0,//优惠券共几张
used_coupons:0,//优惠券使用几张
total_price:"",//总价格
all_loading:false,
loading:false,
goods:request,//商品信息
goods_info:[],//商品详细信息
member:member,//客户信息
is_street:is_street,//是否开启街道
order_url:order_url,//链接
table_loading:false,
category_list:[],
form:{},
is_discounts:false,//选择优惠券弹出框
is_pay:false,//选择支付方式弹出框
//编辑地址
operationType:'',
edit_address_dialog_show:0,
edit_member_address:{
address: "",
city: "",
city_id: 0,
district: "",
district_id: 0,
mobile: "",
province: "",
province_id: 0,
street: "",
street_id: 0,
username: "",
isdefault:0,
},
//分页
total:0,
per_size:0,
current_page:0,
rules:{},
}
},
created() {
let json = {};
if(this.order_type == 0 || this.order_type==32) {
json = {
dispatch_type_id:this.dispatch_type_id,
goods:JSON.stringify(this.goods.goods),
address:{},
orders:'[]',
store_id:this.goods.owner_id,
no_deduction_ids:this.no_deduction_ids,
};
}
if(this.order_type == 92) {
json = {
dispatch_type_id:this.dispatch_type_id,
goods:JSON.stringify(this.goods.goods),
address:{},
orders:'[]',
no_deduction_ids:this.no_deduction_ids,
// store_id:this.goods.owner_id,
};
}
this.getOrderList(json);
this.getDefaultDispatchTypeId();
console.log(this.member.member_address);
this.getProvince();
this.changeProvince(this.member.member_address.province_id);
this.changeCity(this.member.member_address.city_id);
if(this.is_street) {
this.changeDistrict(this.member.member_address.district_id);
}
this.all_loading = false;
},
methods: {
getDefaultDispatchTypeId() {
this.dispatch_type_id = this.deliveryMethod.length > 1 ? this.deliveryMethod[0].value : 0;
},
createAddress() {
this.edit_address_dialog_show++;
this.operationType = 'create';
this.edit_member_address = {
uid:this.member.uid,
address: "",
city: "",
city_id: 0,
district: "",
district_id: 0,
mobile: "",
province: "",
province_id: 0,
street: "",
street_id: 0,
username: "",
isdefault:0,
}
},
//编辑收货地址
editAddress(row) {
console.log(row);
this.edit_address_dialog_show++;
this.edit_member_address = row;
this.operationType = 'edit';
},
//选择收货地址
selectSendAddress(row) {
if(row.length != 0){
this.member.member_address = row;
this.modal_member_address_list = false;
}
},
componentInteract(type) {
if (type == 'edit') {
this.showMemberAddressList(1);
} else if(type == 'create') {
this.showMemberAddressList(1);
}
},
showMemberAddressList(request_status=0) {
if (request_status) {
this.request_member_address_list = true;
}
if (this.request_member_address_list) {
this.$http.post("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-member-address-list') !!}",{member_id:this.member.uid}).then(response => {
console.log(response);
if(response.data.result==1){
this.member_address_list = response.data.data;
} else{
that.$message.error(response.data);
}
this.modal_member_address_list = true;
this.request_member_address_list = false;
}),function(res){
console.log(res);
};
} else {
this.modal_member_address_list = true;
}
},
getOrderList(json){
var that = this;
that.loading = true;
json['type'] = 5;
that.$http.post(this.order_url.pre_url,json).then(response => {
console.log(response);
if(response.data.result==1){
console.log(response);
that.total_coupons = response.data.data.discount.member_coupons.length;
that.no_deduction_ids = response.data.data.discount.default_deduction ? response.data.data.discount.default_deduction : 0;
that.used_coupons = 0;
that.address = response.data.data.dispatch.default_member_address;
that.amount_items = response.data.data.amount_items;
that.orders_list = response.data.data.orders;
that.total_price = response.data.data.total_price;
that.discounts_list = response.data.data.discount.member_coupons;//优惠券
if(that.discounts_list.length>0) {
that.discounts_list.forEach((item,index) => {
if(item.checked){
that.used_coupons++;
}
})
}
}
else{
that.$message.error(response.data.msg);
that.is_discounts = false;
window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.index') !!}";
}
that.loading = false;
this.all_loading = false;
}),function(res){
console.log(res);
that.loading = false;
this.all_loading = false;
};
},
// 获取省份信息
getProvince() {
var that = this;
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'province']) !!}",).then(response => {
console.log(response);
if(response.data.result==1){
this.province_list = response.data.data;
} else{
that.$message.error(response.data);
that.all_loading = false;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 省份改变
changeProvince(parentid) {
var that = this;
if(!parentid) {
parentid = that.member.member_address.province.id;
that.member.member_address.city_id = 0;
that.member.member_address.city = '';
that.member.member_address.district_id = 0;
that.member.member_address.district = '';
that.member.member_address.street_id = 0;
that.member.member_address.street = '';
}
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'city','parentid' => '']) !!}"+parentid).then(response => {
console.log(response);
if(response.data.result==1){
this.city_list = response.data.data;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 城市改变
changeCity(parentid) {
var that = this;
if(!parentid) {
parentid = that.member.member_address.city.id;
that.member.member_address.district_id = 0;
that.member.member_address.district = '';
that.member.member_address.street_id = 0;
that.member.member_address.street = '';
}
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'district','parentid' => '']) !!}"+parentid).then(response => {
if(response.data.result==1){
that.district_list = response.data.data;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 区域改变
changeDistrict(parentid) {
var that = this;
if(this.is_street) {
if(!parentid) {
parentid = that.member.member_address.district.id;
that.member.member_address.street_id = 0;
that.member.member_address.street = '';
}
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'street','parentid' => '']) !!}"+parentid).then(response => {
if(response.data.result==1){
that.street_list = response.data.data;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
}
},
// 积分、爱心值修改
changePoint() {
var that = this;
// 优惠券传值
let arr = [];
this.discounts_list.forEach((item,index) => {
if(item.checked) {
arr.push(item.id);
}
})
let member_coupon_ids = arr.join(",")
// 积分、爱心值传值
var orders = [];
for(let i=0;i<this.orders_list.length;i++) {
orders.push({deduction_ids:[],pre_id:''})
for(var j in this.orders_list[i].order_deductions) {
if(this.orders_list[i].order_deductions[j].checked==true){
orders[i].deduction_ids.push(this.orders_list[i].order_deductions[j].code)
}
}
orders[i].pre_id = this.orders_list[i].pre_id
}
console.log(orders)
let json = {
goods:JSON.stringify(this.goods.goods),
orders:JSON.stringify(orders),
dispatch_type_id: this.dispatch_type_id,
address: {},
member_coupon_ids:member_coupon_ids,
store_id:this.goods.owner_id,
no_deduction_ids:this.no_deduction_ids,
}
this.getOrderList(json)
},
// 优惠券修改
changeDiscounts() {
console.log(this.orders_list)
this.changePoint()
},
// 立即下单
order() {
let that = this;
let address = {};
// 收货信息数据处理
if (this.dispatch_type_id == 1 || (this.dispatch_type_id == 0 && this.needAddress == 1)) {
if(!that.verification()) {
return;
}
if(this.member.member_address.province.id) {
address.province = this.member.member_address.province.areaname;
}
else {
address.province = this.member.member_address.province;
}
if(this.member.member_address.city.id) {
address.city = this.member.member_address.city.areaname;
}
else {
address.city = this.member.member_address.city;
}
if(this.member.member_address.district.id) {
address.district = this.member.member_address.district.areaname;
}
else {
address.district = this.member.member_address.district;
}
if(this.is_street){
if(this.member.member_address.street.id) {
address.street = this.member.member_address.street.areaname;
}
else {
address.street = this.member.member_address.street;
}
}
else{
delete(address.street);
}
address.uid = this.member.member_address.uid;
address.username = this.member.member_address.username;
address.mobile = this.member.member_address.mobile;
address.address = this.member.member_address.address;
} else if (this.dispatch_type_id == 2) {
if(!this.member.member_address.username) {
this.$message.error("请输入收件人!");
return;
}
if(!this.member.member_address.mobile) {
this.$message.error("请输入联系电话!");
return;
}
}
// 优惠券传值
let arr = [];
this.discounts_list.forEach((item,index) => {
if(item.checked) {
arr.push(item.id);
}
})
let member_coupon_ids = arr.join(",")
// 积分、爱心值传值
var orders = [];
for(let i=0;i<this.orders_list.length;i++) {
orders.push({deduction_ids:[],pre_id:''})
for(var j in this.orders_list[i].order_deductions) {
if(this.orders_list[i].order_deductions[j].checked==true){
orders[i].deduction_ids.push(this.orders_list[i].order_deductions[j].code)
}
}
orders[i].pre_id = this.orders_list[i].pre_id
}
console.log(orders)
let json = {};
if(this.order_type == 32) {
json = {
type:5,
goods:JSON.stringify(this.goods.goods),
orders:JSON.stringify(orders),
dispatch_type_id: this.dispatch_type_id,
address: JSON.stringify(address),
member_coupon_ids:member_coupon_ids,
store_id:this.goods.owner_id,
};
if (this.dispatch_type_id == 2) {
json.address = {};
json.mobile = this.member.member_address.mobile;
json.realname = this.member.member_address.username;
}
} else {
json = {
type:5,
goods:JSON.stringify(this.goods.goods),
orders:JSON.stringify(orders),
dispatch_type_id: this.dispatch_type_id,
address: JSON.stringify(address),
member_coupon_ids:member_coupon_ids,
// store_id:this.goods.owner_id,
}
}
json.no_deduction_ids = 1;//订单创建禁止默认积分抵扣
that.loading = true;
that.$http.post(this.order_url.create_url,json).then(response => {
console.log(response);
if(response.data.result==1){
console.log(response.data.data.order_ids);
that.getPayType(response.data.data.order_ids);
}
else{
that.$message.error(response.data.msg);
}
that.loading = false;
}),function(res){
console.log(res);
that.loading = false;
};
},
getPayType(order_ids) {
var that = this;
that.loading = true;
that.$http.post("{!! yzApiUrl('plugin.help-user-buying.admin.user-merge-pay.index') !!}",{type:5,order_ids:order_ids}).then(response => {
console.log(response);
if(response.data.result==1){
that.is_pay = true;
let btns = response.data.data.buttons;
for(let i in btns) {
that.buttons.push(btns[i])
}
console.log(that.buttons);
that.buttons = response.data.data.buttons;
that.pay.credit2 = response.data.data.member.credit2;
that.pay.amount = response.data.data.order_pay.amount;
that.pay.pay_sn = response.data.data.order_pay.pay_sn;
that.pay.id = response.data.data.order_pay.id;
}
else{
that.$message.error(response.data.msg);
}
that.loading = false;
}),function(res){
console.log(res);
that.loading = false;
};
},
// 确认支付
confirmPay(item) {
var that = this;
that.loading = true;
// 余额支付
if(item.value==3){
that.$http.post("{!! yzApiUrl('plugin.help-user-buying.admin.user-merge-pay.credit2') !!}",{type:5,order_pay_id:that.pay.id}).then(response => {
console.log(response);
if(response.data.result==1){
that.$message.success(response.data.msg);
that.jump();
}
else{
that.$message.error(response.data.msg);
}
that.loading = false;
}),function(res){
console.log(res);
that.loading = false;
};
}
// 找人代付
if(item.value==17){
that.$http.post("{!! yzApiUrl('plugin.help-user-buying.admin.user-merge-pay.COD') !!}",{type:5,order_pay_id:that.pay.id}).then(response => {
console.log(response);
if(response.data.result==1){
that.$message.success(response.data.msg);
that.jump();
}
else{
that.$message.error(response.data.msg);
}
that.loading = false;
}),function(res){
console.log(res);
that.loading = false;
};
}
//确认支付
if(item.value==54){
that.$http.post("{!! yzApiUrl('plugin.help-user-buying.admin.user-merge-pay.confirmPay') !!}",{type:5,order_pay_id:that.pay.id}).then(response => {
console.log(response);
if(response.data.result==1){
that.$message.success(response.data.msg);
that.jump();
}
else{
that.$message.error(response.data.msg);
}
that.loading = false;
}),function(res){
console.log(res);
that.loading = false;
};
}
},
verification(){
if(!this.member.member_address.username) {
this.$message.error("请输入收件人!")
return;
}
if(!this.member.member_address.mobile) {
this.$message.error("请输入联系电话!")
return;
}
if(!(/^1\d{10}$/.test(this.member.member_address.mobile))){
this.$message.error("请输入正确的联系电话格式!")
return;
}
if(!this.member.member_address.district){
this.$message.error("请选择所在区域!")
return;
}
if(this.is_street) {
if(!this.member.member_address.street){
this.$message.error("请选择所在区域!")
return;
}
}
if(!this.member.member_address.address){
this.$message.error("请输入详细地址!")
return;
}
return true;
},
jump() {
window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.index') !!}";
},
},
})
</script>
@endsection

View File

@ -0,0 +1,163 @@
@extends('layouts.base')
@section('title', "代客下单")
@section('content')
<style>
.rightlist #app .rightlist-head{line-height:50px;padding:15px 0;}
.rightlist #app{margin-left:30px;}
.rightlist #app .el-breadcrumb{padding:30px 0;font-size:16px;}
/* .el-form-item__label{padding-right:30px;} */
.tip{font-size:12px;color:#999;font-weight:500}
.rightlist-head-con{padding-right:20px;font-size:16px;color:#888;}
/* .rightlist-head-con{float:left;padding-right:20px;font-size:16px;color:#888;} */
.el-tag{font-weight:700;font-size:15px;margin-bottom:30px;}
.el-icon-edit{font-size:16px;padding:0 15px;color:#409EFF;cursor: pointer;}
/* 滑块选择小白点 */
.el-switch.is-checked .el-switch__core::after {left: 100%;margin-left: -17px;}
.el-switch__core::after {content: "";position: absolute;top: 1px;left: 1px;border-radius: 100%;transition: all .3s;width: 16px;height: 16px;background-color: #fff;}
.tip1{font-size:12px;color:red;font-weight:500}
[v-cloak]{
display:none;
}
</style>
<div class="rightlist">
<div id="app" v-cloak v-loading="loading">
<div class="rightlist-head">
<div class="rightlist-head-con">代客下单</div>
</div>
<el-form label-width="35%">
<el-form-item label="订单类型">
<el-radio v-model.number="type" :label="1">平台自营</el-radio>
<el-radio v-if="store_enabled == 1" v-model.number="type" :label="2">门店</el-radio>
<el-radio v-if="supplier_enabled ==1" v-model.number="type" :label="3">供应商</el-radio>
</el-form-item>
<el-form-item v-if="type==2" label="选择门店">
<el-select v-model="store_id" placeholder="请输入门店Id或者门店名称" filterable remote :remote-method="remoteSearchStoreOrSupplier" :loading="searchStoreOrSupplierLoading" style="width:50%;">
<el-option v-for="item in storeList" :key="item.id" :label="item.store_name" :value="item.id" ></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="type==3" label="选择供应商">
<el-select v-model="supplier_id" placeholder="请选择供应商Id或者供应商名称" style="width:50%;" filterable remote :remote-method="remoteSearchStoreOrSupplier" :loading="searchStoreOrSupplierLoading">
<el-option v-for="item in supplierList" :key="item.id" :label="item.realname" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="success" @click="next()">下一步</el-button>
</el-form-item>
</el-form>
</div>
<script>
var app = new Vue({
el:"#app",
delimiters: ['[[', ']]'],
data() {
let store_enabled = {{ $store_enabled }};
let supplier_enabled = {{ $supplier_enabled }};
// console.log(store_enabled)
// console.log(supplier_enabled)
return{
type:1,
store_id:"",
store_enabled:store_enabled,
supplier_enabled:supplier_enabled,
supplier_id:"",
loading:false,
table_loading:false,
rules:{},
//分页
total:0,
per_size:0,
current_page:0,
rules:{},
storeList:[],
supplierList:[],
searchStoreOrSupplierLoading:false
}
},
created() {
},
methods: {
remoteSearchStoreOrSupplier(keyword){
if(keyword==""){
return;
}
this.searchStoreOrSupplierLoading=true;
this.$http.post("{!! yzWebFullUrl('plugin.help-user-buying.admin.index.get-source') !!}",{
source_input:keyword,
source:this.type==2?'store-cashier':'supplier'
}).then(res=>{
this.searchStoreOrSupplierLoading=false;
if(res.data.result){
return res.data.data;
}
return Promise.reject(res.data);
}).then(({ stores,supplier })=>{
if(this.type==2){
this.storeList=stores;
}else{
this.supplierList=supplier;
}
}).catch(err=>{
this.$message.error(err.msg);
})
},
next(){
if(this.type==1) {
window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.shop-index') !!}";
} else if(this.type==2) {
if(!this.store_id) {
this.$message.error("请选择门店!");
return;
}
window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.store-index',['store_id' => '']) !!}"+this.store_id;
} else if(this.type==3) {
if(!this.supplier_id) {
this.$message.error("请选择供应商!");
return;
}
window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.supplier-index',['supplier_id' => '']) !!}"+this.supplier_id;
}
// window.location.href="{!! yzWebFullUrl('plugin.help-user-buying.admin.index.store-index',['store_id' => '']) !!}"+;
// window.location.href='{!! yzWebFullUrl('plugin.help-user-buying.admin.index.shop-index') !!}';
// window.location.href='{!! yzWebFullUrl('plugin.help-user-buying.admin.index.shop-index') !!}';
},
// 分页
currentChange(page) {
var that = this;
let json = {page:page,id:that.id,leader_name:that.search_form.leader_name,start_time:that.search_form.start_time,
member_num:that.search_form.member_num,status:that.search_form.status,order_sn:that.search_form.order_sn};
that.getData(json);
},
// 搜索
search() {
var that = this;
console.log(that.search_form)
let json = {page:1,id:that.id,leader_name:that.search_form.leader_name,start_time:that.search_form.start_time,
member_num:that.search_form.member_num,status:that.search_form.status,order_sn:that.search_form.order_sn};
that.getData(json);
},
submitForm() {
var that = this;
that.all_loading = true;
that.$http.post("{!! yzWebFullUrl('plugin.wechat.admin.reply.controller.default-reply.add') !!}",{keywords_id:that.data.id}).then(response => {
console.log(response);
if(response.data.result==1){
that.keyword_list = response.data.data;
that.$message.success("保存成功!");
window.location.href='{!! yzWebFullUrl('plugin.wechat.admin.reply.controller.default-reply.index') !!}';
}
else{
that.$message.error(response.data);
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
},
})
</script>
@endsection

View File

@ -0,0 +1,356 @@
<template id="edit_member_address">
<!-- 修改收货地址 -->
<el-dialog :visible.sync="modal_edit_member_address" width="900px" :title="d_title" center>
<div style="overflow:auto">
<div style="">
<el-form label-position="right" :model="member_address" label-width="15%">
<el-form-item label="收件人">
<el-input v-model="member_address.username" style="width:70%"></el-input>
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="member_address.mobile" style="width:70%"></el-input>
</el-form-item>
<el-form-item label="所在区域" v-loading="all_loading">
<el-select v-model="member_address.province" placeholder="请选择省" clearable style="width:20%" @change="changeProvince()" value-key="id">
<el-option v-for="item in province_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
<el-select v-model="member_address.city" placeholder="请选择市" clearable style="width:20%" value-key="id" @change="changeCity()">
<el-option v-for="item in city_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
<el-select v-model="member_address.district" placeholder="请选择区" clearable style="width:20%" value-key="id" @change="changeDistrict()">
<el-option v-for="item in district_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
<el-select v-if="is_street" v-model="member_address.street" placeholder="请选择街道" clearable style="width:20%" value-key="id">
<el-option v-for="item in street_list" :key="item.id" :label="item.areaname" :value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="详细地址">
<el-input v-model="member_address.address" style="width:70%"></el-input>
</el-form-item>
<el-form-item label="是否默认">
<el-radio-group v-model="member_address.isdefault">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmSubmit()"> </el-button>
<el-button @click="modal_edit_member_address = false"> </el-button>
</span>
</el-dialog>
</template>
<script>
Vue.component('editMemberAddress', {
style:``,
name:"editMemberAddress",
template: `#edit_member_address`,
props: {
operationType:{
type:Number|String,
default:'',
},
member_address:{
type:Object|String,
default:{},
},
is_street:{
type:Number,
default:0,
},
edit_address_dialog_show:{
type:Number,
default:0,
},
},
delimiters: ['[[', ']]'],
data() {
return {
all_loading:false,
d_title: '编辑收货地址',
//编辑收货地址
modal_edit_member_address:false,
province_list:[],//省
city_list:[],//市
district_list:[],//区域
street_list:[],//街道
edit_member_address: {
address: "",
city: "",
city_id: 0,
district: "",
district_id: 0,
mobile: "",
province: "",
province_id: 0,
street: "",
street_id: 0,
username: "",
isdefault:0,
}
}
},
watch:{
edit_address_dialog_show(val) {
if (this.operationType == 'create') {
this.showCreateDialog();
} else if (this.operationType == 'edit') {
this.showEditDialog()
}
}
},
created() {},
mounted: function () {
// this.__childInitial();
},
methods: {
//初始化页面数据,请求链接
__childInitial() {
if (this.member_address.length==0) {
this.member_address = {
address: "",
city: "",
city_id: 0,
district: "",
district_id: 0,
mobile: "",
province: "",
province_id: 0,
street: "",
street_id: 0,
username: "",
isdefault:0,
}
}
if (this.operationType == 'create') {
this.d_title = '新增收货地址';
}
},
showEditDialog() {
console.log(this.member_address);
this.modal_edit_member_address = true;
this.getProvince();
this.changeProvince(this.member_address.province_id);
this.changeCity(this.member_address.city_id);
if(this.is_street) {
this.changeDistrict(this.member_address.district_id);
}
},
showCreateDialog() {
console.log(this.member_address);
this.modal_edit_member_address = true;
this.getProvince();
},
confirmSubmit() {
if (this.operationType == 'create') {
this.confirmCreate();
} else if (this.operationType == 'edit') {
this.confirmEdit()
}
},
confirmCreate() {
console.log(this.member_address);
let address = {
uid:this.member_address.uid,
isdefault:this.member_address.isdefault,
username:this.member_address.username,
mobile:this.member_address.mobile,
address:this.member_address.address,
latitude:this.member_address.latitude,
longitude:this.member_address.longitude,
};
if(this.member_address.province.id) {
address.province = this.member_address.province.areaname;
} else {
address.province = this.member_address.province;
}
if(this.member_address.city.id) {
address.city = this.member_address.city.areaname;
} else {
address.city = this.member_address.city;
}
if(this.member_address.district.id) {
address.district = this.member_address.district.areaname;
} else {
address.district = this.member_address.district;
}
if(this.is_street){
if(this.member_address.street.id) {
address.street = this.member_address.street.areaname;
} else {
address.street = this.member_address.street;
}
}
console.log({address:address});
this.$http.post("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.create-member-address') !!}",{address:address}).then(response => {
if(response.data.result==1){
this.$message.success(response.data.msg);
this.syncInitAddress();
} else{
this.$message.error(response.data.msg);
}
this.modal_edit_member_address = false;
}),function(res){
console.log(res);
};
},
confirmEdit() {
console.log(this.member_address);
let address = {
isdefault:this.member_address.isdefault,
username:this.member_address.username,
mobile:this.member_address.mobile,
address:this.member_address.address,
latitude:this.member_address.latitude,
longitude:this.member_address.longitude,
};
if(this.member_address.province.id) {
address.province = this.member_address.province.areaname;
} else {
address.province = this.member_address.province;
}
if(this.member_address.city.id) {
address.city = this.member_address.city.areaname;
} else {
address.city = this.member_address.city;
}
if(this.member_address.district.id) {
address.district = this.member_address.district.areaname;
} else {
address.district = this.member_address.district;
}
if(this.is_street){
if(this.member_address.street.id) {
address.street = this.member_address.street.areaname;
} else {
address.street = this.member_address.street;
}
}
console.log({id:this.member_address.id,address:address});
this.$http.post("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.edit-member-address') !!}",{id:this.member_address.id,address:address}).then(response => {
if(response.data.result==1){
this.syncInitAddress();
} else{
this.$message.error(response.data.msg);
}
this.modal_edit_member_address = false;
}),function(res){
console.log(res);
};
},
//子组件搜索传参到父级
syncInitAddress() {
this.$emit('init-address',this.operationType);
},
// 获取省份信息
getProvince() {
var that = this;
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'province']) !!}",).then(response => {
console.log(response);
if(response.data.result==1){
this.province_list = response.data.data;
} else{
that.$message.error(response.data);
that.all_loading = false;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 省份改变
changeProvince(parentid) {
var that = this;
if(!parentid) {
parentid = that.member_address.province.id;
that.member_address.city_id = 0;
that.member_address.city = '';
that.member_address.district_id = 0;
that.member_address.district = '';
that.member_address.street_id = 0;
that.member_address.street = '';
}
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'city','parentid' => '']) !!}"+parentid).then(response => {
console.log(response);
if(response.data.result==1){
this.city_list = response.data.data;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 城市改变
changeCity(parentid) {
var that = this;
if(!parentid) {
parentid = that.member_address.city.id;
that.member_address.district_id = 0;
that.member_address.district = '';
that.member_address.street_id = 0;
that.member_address.street = '';
}
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'district','parentid' => '']) !!}"+parentid).then(response => {
if(response.data.result==1){
that.district_list = response.data.data;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
},
// 区域改变
changeDistrict(parentid) {
var that = this;
if(this.is_street) {
if(!parentid) {
parentid = that.member_address.district.id;
that.member_address.street_id = 0;
that.member_address.street = '';
}
that.all_loading = true;
that.$http.get("{!! yzWebFullUrl('plugin.help-user-buying.admin.member-address.get-address',['type' => 'street','parentid' => '']) !!}"+parentid).then(response => {
if(response.data.result==1){
that.street_list = response.data.data;
}
that.all_loading = false;
}),function(res){
console.log(res);
that.all_loading = false;
};
}
},
},
});
</script>