转销售、改企业
This commit is contained in:
parent
fcf5818d7e
commit
d2f53423ad
@ -3,6 +3,7 @@ namespace App\Domains\Real\Http\Controllers;
|
||||
|
||||
use App\Core\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Real\RealVirtual;
|
||||
use App\Domains\Real\Services\OrderService;
|
||||
|
||||
class OrderController extends Controller
|
||||
@ -29,12 +30,19 @@ class OrderController extends Controller
|
||||
$conditions = $this->request->all();
|
||||
$conditions['limit'] = $this->request->get('limit', 10);
|
||||
|
||||
if (isset($conditions['sim'])) {
|
||||
$conditions['sim'] = array_map('intval', array_map('trim', str_to_array($conditions['sim'], "\n")));
|
||||
}
|
||||
|
||||
$orders = $this->orderService->index($conditions);
|
||||
|
||||
$orders->transform(function($item){
|
||||
$orders->transform(function ($item) {
|
||||
return $item->only([
|
||||
'id',
|
||||
'sn',
|
||||
'company_id',
|
||||
'package_id',
|
||||
'carrier_operator',
|
||||
'company_name',
|
||||
'package_name',
|
||||
'carrier_operator_name',
|
||||
@ -43,6 +51,10 @@ class OrderController extends Controller
|
||||
'shipments',
|
||||
'total_price',
|
||||
'order_at',
|
||||
'transaction_no',
|
||||
'address',
|
||||
'contacts',
|
||||
'mobile',
|
||||
]);
|
||||
});
|
||||
|
||||
@ -58,8 +70,23 @@ class OrderController extends Controller
|
||||
{
|
||||
$conditions = $this->request->all();
|
||||
|
||||
$orders = $this->orderService->cards($conditions);
|
||||
if (isset($conditions['sim'])) {
|
||||
$conditions['sim'] = array_map('intval', array_map('trim', str_to_array($conditions['sim'], "\n")));
|
||||
}
|
||||
|
||||
return res($orders, '卡列表', 201);
|
||||
$cards = $this->orderService->cards($conditions);
|
||||
|
||||
return res($cards, '卡列表', 201);
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录关联
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function relations()
|
||||
{
|
||||
$relations = RealVirtual::get();
|
||||
return res($relations, '关联列表', 201);
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,6 @@ class MongoSyncJob implements ShouldQueue
|
||||
'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255,
|
||||
'activated_at' => $activated_at,
|
||||
'virtual_activated_at' => $activated_at,
|
||||
'real_company_id' => empty($value['bNo']) ? -1 : ($companies[$value['bNo']]['id'] ?? 0),
|
||||
'created_at' => $value['sDate'] ? $value['sDate']->toDateTime()->format('Y-m-d H:i:s') : null,
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
@ -94,8 +93,7 @@ class MongoSyncJob implements ShouldQueue
|
||||
|
||||
$sql .= ' on conflict (sim) do update set
|
||||
activated_at=excluded.activated_at,
|
||||
virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at),
|
||||
real_company_id=excluded.real_company_id';
|
||||
virtual_activated_at=COALESCE(cards.virtual_activated_at, excluded.activated_at)';
|
||||
|
||||
$builder->connection->insert($sql, Arr::flatten($values, 1));
|
||||
|
||||
|
@ -48,4 +48,34 @@ class OrderCardPartitionRepository extends Repository
|
||||
{
|
||||
return $model->toArray();
|
||||
}
|
||||
|
||||
public function withVirtual($conditions)
|
||||
{
|
||||
$select = 'distinct on (real_order_cards_partition.sim)
|
||||
real_order_cards_partition.sim,
|
||||
real_order_cards_partition.order_id,
|
||||
real_order_cards_partition.virtual_order_id,
|
||||
real_order_cards_partition.counts,
|
||||
virtual_order_cards_partition.company_id,
|
||||
virtual_order_cards_partition.package_id
|
||||
';
|
||||
|
||||
$this->model = $this->model->selectRaw($select);
|
||||
|
||||
$this->model = $this->model->leftJoin('virtual_order_cards_partition', 'virtual_order_cards_partition.sim', '=', 'real_order_cards_partition.sim');
|
||||
|
||||
$this->model= $this->model->orderBy('real_order_cards_partition.sim')->orderBy('virtual_order_cards_partition.created_at');
|
||||
|
||||
if (isset($conditions['type'])) {
|
||||
$conditions['type'] = array_wrap($conditions['type']);
|
||||
$this->model= $this->model->whereIn('real_order_cards_partition.type', $conditions['type']);
|
||||
}
|
||||
|
||||
if (isset($conditions['order_id'])) {
|
||||
$conditions['order_id'] = array_wrap($conditions['order_id']);
|
||||
$this->model= $this->model->whereIn('real_order_cards_partition.order_id', $conditions['order_id']);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
@ -108,6 +108,13 @@ class OrderRepository extends Repository
|
||||
$query->where('order_at', '<=', Carbon::parse($conditions['endtime']));
|
||||
}
|
||||
|
||||
if (isset($conditions['sim'])) {
|
||||
$conditions['sim'] = array_wrap($conditions['sim']);
|
||||
$query->whereHas('cards', function ($relation) use ($conditions) {
|
||||
$relation->whereIn('sim', $conditions['sim']);
|
||||
});
|
||||
}
|
||||
|
||||
if (isset($conditions['used'])) {
|
||||
$operator = $conditions['used'] ? '>' : '=';
|
||||
$query->whereHas('cards', function ($relation) use ($conditions) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
$router->group(['prefix' => 'real', 'as' => 'reals', 'middleware' => ['adminAuth']], function ($router) {
|
||||
$router->get('/orders/index', ['as' => 'orders.index', 'uses' => 'OrderController@index']);
|
||||
$router->get('/orders/cards', ['as' => 'orders.cards', 'uses' => 'OrderController@cards']);
|
||||
$router->addRoute(['GET', 'POST'], '/orders/index', ['as' => 'orders.index', 'uses' => 'OrderController@index']);
|
||||
$router->addRoute(['GET', 'POST'], '/orders/cards', ['as' => 'orders.cards', 'uses' => 'OrderController@cards']);
|
||||
$router->get('/orders/relations', ['as' => 'orders.relations', 'uses' => 'OrderController@relations']);
|
||||
});
|
||||
|
@ -9,7 +9,6 @@ use App\Domains\Real\Repositories\OrderRepository;
|
||||
use App\Domains\Real\Repositories\OrderCardPartitionRepository;
|
||||
use App\Domains\Virtual\Repositories\OrderRepository as VirtualOrderRepository;
|
||||
use App\Domains\Virtual\Repositories\OrderCardPartitionRepository as VirtualOrderCardPartitionRepository;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class OrderService extends Service
|
||||
{
|
||||
@ -51,13 +50,14 @@ class OrderService extends Service
|
||||
$item->company_name = CommonService::company($item->company_id)['name'];
|
||||
$item->package = CommonService::package($item->package_id);
|
||||
$item->package_name = $item->package['name'];
|
||||
$item->carrier_operator_name = $carrierOperators[$item->package['carrier_operator']];
|
||||
$item->carrier_operator = $item->package['carrier_operator'];
|
||||
$item->carrier_operator_name = $carrierOperators[$item->carrier_operator];
|
||||
$item->unit_price = sprintf('%.02f', $item->unit_price/100);
|
||||
$item->total_price = sprintf('%.02f', $item->total_price/100);
|
||||
$item->shipments = $cards[$item->id] ?? 0;
|
||||
});
|
||||
|
||||
return $res;
|
||||
return $res->sortByDesc('order_at')->values();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -68,8 +68,11 @@ class OrderService extends Service
|
||||
*/
|
||||
public function cards(array $conditions = [])
|
||||
{
|
||||
$cards = $this->orderCardPartitionRepository->select(['sim', 'order_id', 'virtual_order_id', 'counts'])
|
||||
->withConditions($conditions)->applyConditions()->get();
|
||||
set_time_limit(0);
|
||||
ini_set('memory_limit', '4096m');
|
||||
ini_set('default_socket_timeout', -1);
|
||||
|
||||
$cards = $this->orderCardPartitionRepository->withVirtual($conditions)->get();
|
||||
|
||||
$tmpCards = $cards->groupBy('virtual_order_id');
|
||||
|
||||
@ -87,33 +90,19 @@ class OrderService extends Service
|
||||
$virtualOrders = app(VirtualOrderRepository::class)->withConditions(['id' => $orderIds])->get()->keyBy('id');
|
||||
}
|
||||
|
||||
$simArray = isset($tmpCards[0]) ? $tmpCards[0]->pluck('sim')->toArray() : [];
|
||||
|
||||
$virtualOrderCards = [];
|
||||
// 没有订单的从当前状态下读取公司和套餐
|
||||
if (!empty($simArray)) {
|
||||
$virtualOrderCards = app(VirtualOrderCardPartitionRepository::class)->selectRaw('distinct on (sim) sim,company_id,package_id')
|
||||
->withConditions([
|
||||
'type' => [0, 1],
|
||||
'sim' => $simArray,
|
||||
])->newest()->get()->keyBy('sim');
|
||||
}
|
||||
|
||||
$cards->map(function ($item) use ($virtualOrders, $virtualOrderCards) {
|
||||
$item->sim = (string)$item->sim;
|
||||
$item->company_name = '';
|
||||
$item->package_name = '';
|
||||
$item->company_id = $item->company_id ?? 0;
|
||||
$item->package_id = $item->package_id ?? 0;
|
||||
|
||||
if ($item->virtual_order_id) {
|
||||
$virtual = $virtualOrders[$item->virtual_order_id];
|
||||
} else {
|
||||
$virtual = $virtualOrderCards[$item->sim];
|
||||
$item->company_id = $virtual['company_id'];
|
||||
$item->package_id = $virtual['package_id'];
|
||||
}
|
||||
|
||||
if ($virtual) {
|
||||
$item->company_name = CompanyService::load($virtual['company_id'])['name'];
|
||||
$item->package_name = PackageService::load($virtual['package_id'])['name'];
|
||||
}
|
||||
$item->company_name = !$item->company_id ? '' : CompanyService::load($item->company_id)['name'] ?? '';
|
||||
$item->package_name = !$item->package_id ? '' : PackageService::load($item->package_id)['name'] ?? '';
|
||||
});
|
||||
|
||||
return $cards->sortBy('sim')->sortBy('order_id')->values();
|
||||
|
@ -151,4 +151,18 @@ class OrderController extends Controller
|
||||
|
||||
return res(true, '删除成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function reset()
|
||||
{
|
||||
$ids = $this->request->ids();
|
||||
|
||||
$this->orderService->reset($ids);
|
||||
|
||||
return res(true, '重置成功');
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ class CreateRealVirtualRelation implements ShouldQueue
|
||||
'real_package_id' => $value['package_id'],
|
||||
'virtual_company_id' => $virtualOrder['company_id'],
|
||||
'virtual_package_id' => $virtualOrder['package_id'],
|
||||
'counts' => 1,
|
||||
'times' => 1,
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
@ -59,7 +59,7 @@ class CreateRealVirtualRelation implements ShouldQueue
|
||||
$sql = $builder->getGrammar()->compileInsert($builder, $array);
|
||||
|
||||
$sql .= ' on conflict (real_company_id,real_package_id,virtual_company_id,virtual_package_id) do update set
|
||||
counts=real_virtual_relations.counts+excluded.counts,
|
||||
times=real_virtual_relations.times+excluded.times,
|
||||
updated_at=excluded.updated_at';
|
||||
|
||||
$builder->connection->insert($sql, Arr::flatten($array, 1));
|
||||
|
@ -48,6 +48,7 @@ $router->group(['prefix' => 'virtual', 'as' => 'virtual', 'middleware' => ['admi
|
||||
$router->post('/orders/create', ['as' => 'orders.create', 'uses' => 'OrderController@create']);
|
||||
$router->post('/orders/update/{id}', ['as' => 'orders.update', 'uses' => 'OrderController@update']);
|
||||
$router->post('/orders/destroy', ['as' => 'orders.destroy', 'uses' => 'OrderController@destroy']);
|
||||
$router->post('/orders/reset', ['as' => 'orders.reset', 'uses' => 'OrderController@reset']);
|
||||
|
||||
// 客户管理
|
||||
$router->get('/cards/index', ['as' => 'cards.index', 'uses' => 'CardController@index']);
|
||||
|
@ -9,7 +9,9 @@ use Illuminate\Support\Facades\DB;
|
||||
use App\Exceptions\NotExistException;
|
||||
use App\Exceptions\NotAllowedException;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Models\Virtual\OrderCardPartition;
|
||||
use Dipper\Foundation\Exceptions\HttpException;
|
||||
use Illuminate\Database\Query\Grammars\Grammar;
|
||||
use App\Domains\Virtual\Services\CompanyService;
|
||||
use App\Domains\Virtual\Services\PackageService;
|
||||
use App\Domains\Virtual\Repositories\OrderRepository;
|
||||
@ -107,7 +109,7 @@ class OrderService extends Service
|
||||
public function store(array $attributes = [])
|
||||
{
|
||||
$rule = [
|
||||
'type' => ['in:0,1,2,3'],
|
||||
'type' => ['in:0,1,2,3,-1,-2'], // 转销售 -1,改企业 -2
|
||||
'company_id' => ['exists:virtual_companies,id'],
|
||||
'product_id' => [],
|
||||
'counts' => [],
|
||||
@ -163,6 +165,28 @@ class OrderService extends Service
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
// 改企业的卡新增一批虚拟卡,并替换原有订单里的卡
|
||||
if ($attributes['type'] == -2 && $attributes['selected']) {
|
||||
$simArray = implode(',', array_pluck($attributes['selected'], 'sim'));
|
||||
try {
|
||||
DB::statement("select change_cards('{{$simArray}}'::INT8[]);");
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
// 转销售和该企业的都立即激活卡
|
||||
if ($attributes['type'] <0 && $attributes['selected']) {
|
||||
$params = array_pluck($attributes['selected'], 'sim');
|
||||
$sql = 'UPDATE cards SET virtual_activated_at = ? WHERE sim IN (%s)';
|
||||
$sql = sprintf($sql, app(Grammar::class)->parameterize($params));
|
||||
array_unshift($params, $attributes['order_at']);
|
||||
DB::update($sql, $params);
|
||||
|
||||
$attributes['type'] = 0;
|
||||
}
|
||||
|
||||
if (!$attributes['id']) {
|
||||
if ($product->company_id != $attributes['company_id']) {
|
||||
throw new NotAllowedException('非法操作');
|
||||
@ -229,7 +253,10 @@ class OrderService extends Service
|
||||
$this->orderCardPartitionRepository->forgetCached();
|
||||
app(RealOrderCardPartitionRepository::class)->forgetCached();
|
||||
|
||||
CreateRealVirtualRelation::dispatch($node->id, array_pluck($attributes['selected'], 'order_id'));
|
||||
// 销售订单创建企业套餐关联
|
||||
if ($node['type'] === 0) {
|
||||
CreateRealVirtualRelation::dispatch($node->id, array_pluck($attributes['selected'], 'order_id'));
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw new HttpException('操作失败');
|
||||
@ -285,6 +312,41 @@ class OrderService extends Service
|
||||
return $node;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function reset($ids)
|
||||
{
|
||||
$ids = is_array($ids) ? $ids : [$ids];
|
||||
|
||||
foreach ($ids as $id) {
|
||||
if (!$node = $this->orderRepository->find($id)) {
|
||||
throw new NotExistException('订单不存在或已删除');
|
||||
}
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($ids) {
|
||||
$sql = 'UPDATE virtual_order_cards_partition SET sim=original_sim,original_sim=0
|
||||
WHERE original_sim IN (
|
||||
SELECT DISTINCT SIM FROM virtual_order_cards_partition WHERE "type"=0 AND order_id IN (%s)
|
||||
)';
|
||||
|
||||
$sql = sprintf($sql, app(Grammar::class)->parameterize($ids));
|
||||
|
||||
DB::statement($sql, $ids);
|
||||
|
||||
$this->orderCardPartitionRepository->whereIn('order_id', $ids)->delete();
|
||||
app(RealOrderCardPartitionRepository::class)->whereIn('virtual_order_id', $ids)->update(['virtual_order_id' => 0]);
|
||||
});
|
||||
|
||||
app(RealOrderCardPartitionRepository::class)->forgetCached();
|
||||
app(RealOrderRepository::class)->forgetCached();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*
|
||||
@ -300,14 +362,16 @@ class OrderService extends Service
|
||||
}
|
||||
}
|
||||
|
||||
DB::transaction(function () use ($ids) {
|
||||
$this->orderRepository->destroy($ids);
|
||||
$this->orderCardPartitionRepository->whereIn('order_id', $ids)->delete();
|
||||
app(RealOrderCardPartitionRepository::class)->whereIn('virtual_order_id', $ids)->update(['virtual_order_id' => 0]);
|
||||
});
|
||||
$this->orderRepository->destroy($ids);
|
||||
|
||||
app(RealOrderCardPartitionRepository::class)->forgetCached();
|
||||
app(RealOrderRepository::class)->forgetCached();
|
||||
// DB::transaction(function () use ($ids) {
|
||||
// $this->orderRepository->destroy($ids);
|
||||
// $this->orderCardPartitionRepository->whereIn('order_id', $ids)->delete();
|
||||
// app(RealOrderCardPartitionRepository::class)->whereIn('virtual_order_id', $ids)->update(['virtual_order_id' => 0]);
|
||||
// });
|
||||
|
||||
// app(RealOrderCardPartitionRepository::class)->forgetCached();
|
||||
// app(RealOrderRepository::class)->forgetCached();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -26,7 +26,6 @@ class CreateCardsTable extends Migration
|
||||
$table->timestamp('activated_at')->nullable()->comment('激活时间');
|
||||
$table->timestamp('virtual_activated_at')->nullable()->comment('虚拟激活时间');
|
||||
$table->tinyInteger('type')->unsigned()->default(0)->comment('类型(0:真实卡 1:虚拟卡 2:未知卡)');
|
||||
$table->integer('real_company_id')->unsigned()->default(0)->comment("企业ID");
|
||||
$table->timestamp('cancelled_at')->nullable()->comment('注销时间');
|
||||
$table->timestamps();
|
||||
|
||||
|
@ -118,3 +118,56 @@ BEGIN
|
||||
RETURN TRUE;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
CREATE OR REPLACE FUNCTION CHANGE_CARDS(INT8[])
|
||||
RETURNS void
|
||||
AS
|
||||
$$
|
||||
DECLARE
|
||||
maxCursor INT2;
|
||||
params TEXT := '';
|
||||
simRow INT8;
|
||||
query TEXT;
|
||||
BEGIN
|
||||
FOREACH simRow IN ARRAY $1
|
||||
LOOP
|
||||
IF SUBSTR(simRow::text, 4, 1)::INT > 4 THEN
|
||||
RAISE EXCEPTION 'Error Card Sim --> %', simRow USING ERRCODE = '10000';
|
||||
END IF;
|
||||
|
||||
params := params || OVERLAY(simRow::text PLACING '_' FROM 4 FOR 1);
|
||||
END LOOP;
|
||||
|
||||
params := trim('|' from params);
|
||||
|
||||
RAISE NOTICE 'params : %', params;
|
||||
|
||||
SELECT MAX(SUBSTR(sim::text, 4, 1)) INTO maxCursor FROM cards WHERE sim::TEXT SIMILAR TO params;
|
||||
|
||||
|
||||
RAISE NOTICE 'maxCursor : %', maxCursor;
|
||||
|
||||
IF maxCursor > 8 THEN
|
||||
RAISE EXCEPTION 'Max Cursor --> %', maxCursor USING ERRCODE = '10001';
|
||||
END IF;
|
||||
|
||||
query := 'WITH new_cards AS (
|
||||
SELECT
|
||||
cards.sim as original_sim,
|
||||
OVERLAY(cards.sim::TEXT PLACING (4 + t.counts)::TEXT FROM 4 FOR 1)::INT8 as sim,
|
||||
OVERLAY(imsi::TEXT PLACING (1 + t.counts)::TEXT FROM 3 FOR 1) as imsi,
|
||||
OVERLAY(iccid::TEXT PLACING (1 + t.counts)::TEXT FROM 5 FOR 1) as iccid,
|
||||
bloc_id, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at
|
||||
FROM cards JOIN (
|
||||
SELECT OVERLAY(sim::TEXT PLACING $1 FROM 4 FOR 1), COUNT ( * ) AS counts, MIN ( sim ) AS sim FROM cards WHERE sim::TEXT SIMILAR TO $2 GROUP BY 1
|
||||
) AS t ON t.sim = cards.sim
|
||||
), new_inserts AS (
|
||||
INSERT INTO cards SELECT sim,imsi,iccid,bloc_id, carrier_operator, activated_at, virtual_activated_at, type, real_company_id, cancelled_at, created_at, updated_at FROM new_cards
|
||||
)
|
||||
UPDATE virtual_order_cards_partition SET original_sim=t.original_sim,sim=t.sim FROM (SELECT sim,original_sim FROM new_cards) as t
|
||||
WHERE virtual_order_cards_partition.sim=t.original_sim';
|
||||
|
||||
EXECUTE query USING '_', params;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql
|
||||
SET synchronous_commit TO OFF;
|
||||
|
@ -4,9 +4,7 @@
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
export function index(data) {
|
||||
return service.get('api/real/orders/index', {
|
||||
params: data
|
||||
});
|
||||
return service.post('api/real/orders/index', data);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -15,7 +13,16 @@ export function index(data) {
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
export function cards(data) {
|
||||
return service.get('api/real/orders/cards', {
|
||||
return service.post('api/real/orders/cards', data);
|
||||
}
|
||||
|
||||
/**
|
||||
* [relations 关联列表]
|
||||
* @param {[type]} data [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
export function relations(data = {}) {
|
||||
return service.get('api/real/orders/relations', {
|
||||
params: data
|
||||
});
|
||||
}
|
||||
|
@ -49,3 +49,12 @@ export function update(data, id) {
|
||||
export function destroy(data) {
|
||||
return service.post('api/virtual/orders/destroy', data);
|
||||
}
|
||||
|
||||
/**
|
||||
* [reset 重置订单]
|
||||
* @param {[type]} data [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
export function reset(data) {
|
||||
return service.post('api/virtual/orders/reset', data);
|
||||
}
|
||||
|
@ -62,9 +62,9 @@ export default {
|
||||
initCompletePackages(type = 0) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!this.completePackageInitialized) {
|
||||
this.completePackageInitialized = true;
|
||||
FETCH.packages(type, null, 0).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.completePackageInitialized = true;
|
||||
this.completePackages = res.data;
|
||||
resolve(res.data);
|
||||
}
|
||||
|
@ -1,14 +1,27 @@
|
||||
import * as API from 'api/real/orders';
|
||||
|
||||
const state = {
|
||||
real_orders: [],
|
||||
cards: [],
|
||||
order_group: {}, // 订单组
|
||||
real_orders: [], // RD订单
|
||||
cards: [], // RD订单卡列表
|
||||
relations: [],
|
||||
selected: [],
|
||||
orderParams: {},
|
||||
cardParams: {}
|
||||
cardParams: {},
|
||||
real_companies: [],
|
||||
real_packages: [],
|
||||
relationParams: {},
|
||||
relationObj: {
|
||||
real_company_id: '',
|
||||
real_package_id: '',
|
||||
virtual_company_id: '',
|
||||
virtual_package_id: ''
|
||||
}
|
||||
};
|
||||
|
||||
const getters = {
|
||||
relations: state => state.relations,
|
||||
relationObj: state => state.relationObj,
|
||||
orders: state => state.real_orders,
|
||||
cards: state => state.cards,
|
||||
selected: state => state.selected,
|
||||
@ -40,15 +53,18 @@ const getters = {
|
||||
return state.selected.find(item => {
|
||||
return item.order_id === order_id && item.sim === sim;
|
||||
});
|
||||
},
|
||||
real_companies: (state) => {
|
||||
return state.real_orders.map(el => { return el.company_name; }).filter((v, i, s) => { return s.indexOf(v) === i; });
|
||||
},
|
||||
real_packages: (state) => {
|
||||
return state.real_orders.map(el => { return el.package_name; }).filter((v, i, s) => { return s.indexOf(v) === i; });
|
||||
}
|
||||
};
|
||||
|
||||
const mutations = {
|
||||
SET_CARD_PARAMS(state, obj) {
|
||||
state.cardParams = obj;
|
||||
},
|
||||
SET_ORDER_PARAMS(state, obj) {
|
||||
state.orderParams = obj;
|
||||
SET_ORDER_GROUP(state, data) {
|
||||
state.order_group = data;
|
||||
},
|
||||
SET_REAL_ORDERS(state, data) {
|
||||
state.real_orders = data;
|
||||
@ -56,6 +72,21 @@ const mutations = {
|
||||
SET_CARDS(state, data) {
|
||||
state.cards = data;
|
||||
},
|
||||
SET_RELATIONS(state, data) {
|
||||
state.relations = data;
|
||||
},
|
||||
SET_RELATION_OBJ(state, obj) {
|
||||
state.relationObj = obj;
|
||||
},
|
||||
SET_RELATION_PARAMS(state, data) {
|
||||
state.relationParams = data;
|
||||
},
|
||||
SET_CARD_PARAMS(state, obj) {
|
||||
state.cardParams = obj;
|
||||
},
|
||||
SET_ORDER_PARAMS(state, obj) {
|
||||
state.orderParams = obj;
|
||||
},
|
||||
PUSH_CARDS(state, cards) {
|
||||
state.cards = state.cards.concat(cards.filter(item => {
|
||||
return state.cards.findIndex(v => {
|
||||
@ -67,9 +98,7 @@ const mutations = {
|
||||
state.selected = data;
|
||||
},
|
||||
PUSH_SELECTED(state, array) {
|
||||
let selected = state.selected.map(item => {
|
||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
||||
});
|
||||
let selected = JSON.parse(JSON.stringify(state.selected));
|
||||
|
||||
for (let index = 0; index < array.length; index++) {
|
||||
const element = array[index];
|
||||
@ -82,7 +111,7 @@ const mutations = {
|
||||
selected.splice(i, 1);
|
||||
}
|
||||
|
||||
let obj = { order_id: element.order_id, sim: element.sim, counts: element.counts };
|
||||
let obj = element;
|
||||
|
||||
selected.push(obj);
|
||||
}
|
||||
@ -91,7 +120,7 @@ const mutations = {
|
||||
},
|
||||
REMOVE_SELECTED(state, array) {
|
||||
let selected = state.selected.map(item => {
|
||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
||||
return JSON.parse(JSON.stringify(item));
|
||||
});
|
||||
|
||||
for (let index = 0; index < array.length; index++) {
|
||||
@ -115,6 +144,36 @@ const mutations = {
|
||||
};
|
||||
|
||||
const actions = {
|
||||
initOrder(context) {
|
||||
context.commit('SET_RELATION_PARAMS', {});
|
||||
context.commit('SET_ORDER_PARAMS', {});
|
||||
context.commit('SET_CARD_PARAMS', {});
|
||||
context.commit('SET_RELATION_OBJ', {});
|
||||
context.commit('SET_ORDER_GROUP', {});
|
||||
context.commit('SET_REAL_ORDERS', []);
|
||||
context.commit('SET_CARDS', []);
|
||||
context.commit('SET_SELECTED', []);
|
||||
},
|
||||
getRelations(context, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (JSON.stringify(context.state.relationParams) == JSON.stringify(params)) {
|
||||
return resolve(context.state.relations);
|
||||
}
|
||||
|
||||
context.commit('SET_RELATION_PARAMS', params);
|
||||
|
||||
API.relations(params).then(res => {
|
||||
if (res.code === 0) {
|
||||
context.commit('SET_RELATIONS', res.data);
|
||||
resolve(res.data);
|
||||
} else {
|
||||
reject(res);
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
},
|
||||
getOrders(context, params) {
|
||||
params.limit = 0;
|
||||
return new Promise((resolve, reject) => {
|
||||
@ -167,8 +226,16 @@ const actions = {
|
||||
}
|
||||
|
||||
API.cards({ order_id: array, type }).then(res => {
|
||||
let index = context.state.cards.length;
|
||||
|
||||
if (res.code === 0) {
|
||||
context.commit('PUSH_CARDS', res.data);
|
||||
let data = res.data;
|
||||
|
||||
data.map(row => {
|
||||
row._index = index++;
|
||||
});
|
||||
|
||||
context.commit('PUSH_CARDS', data);
|
||||
|
||||
let cards = context.state.cards.filter(v => {
|
||||
return order_id.indexOf(v.order_id) !== -1;
|
||||
@ -181,6 +248,20 @@ const actions = {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
},
|
||||
getCardsByParams(context, params) {
|
||||
return new Promise((resolve, reject) => {
|
||||
API.cards(params).then(res => {
|
||||
if (res.code === 0) {
|
||||
context.commit('PUSH_CARDS', res.data);
|
||||
resolve(res.data);
|
||||
} else {
|
||||
reject(res);
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -6,13 +6,20 @@
|
||||
@on-visible-change="visibleChange"
|
||||
v-model="my_show"
|
||||
width="1440"
|
||||
:z-index="source === 0 ? 2000 : 1000"
|
||||
:z-index="source === 0 ? 1000 : 500"
|
||||
>
|
||||
<div class="page-handle-wrap">
|
||||
<ul class="handle-wraper bd-b">
|
||||
<li class="f-l">
|
||||
<div class="text-exp">
|
||||
<Button type="text" v-if="counts" @click="sort">已选{{counts}}张</Button>
|
||||
<Row v-if="counts">
|
||||
<a @click="sort" class="umar-r10">
|
||||
<b>已选{{counts}}张</b>
|
||||
</a>
|
||||
<a @click="clear">
|
||||
<b>清空</b>
|
||||
</a>
|
||||
</Row>
|
||||
<b v-else>全部信息</b>
|
||||
</div>
|
||||
</li>
|
||||
@ -41,7 +48,8 @@
|
||||
<li class="handle-item w-250">
|
||||
<Select clearable placeholder="使用状态" v-model="params.used">
|
||||
<Option :value="0">未使用</Option>
|
||||
<Option :value="1">已使用</Option>
|
||||
<Option :value="1">部分使用</Option>
|
||||
<Option :value="2">全部使用</Option>
|
||||
</Select>
|
||||
</li>
|
||||
|
||||
@ -58,33 +66,35 @@
|
||||
|
||||
<ul class="handle-wraper">
|
||||
<li class="handle-item w-250">
|
||||
<AutoComplete
|
||||
@on-search="handleCompleteCompanies"
|
||||
<Select
|
||||
icon="ios-search"
|
||||
placeholder="企业名称"
|
||||
v-model.trim="params.company_name"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<Option
|
||||
:key="item.id"
|
||||
:value="item.name"
|
||||
v-for="item in completeHandledCompanies"
|
||||
>{{ item.name }}</Option>
|
||||
</AutoComplete>
|
||||
:key="index"
|
||||
:value="item ? item : ''"
|
||||
v-for="(item, index) in real_companies"
|
||||
>{{ item }}</Option>
|
||||
</Select>
|
||||
</li>
|
||||
|
||||
<li class="handle-item w-250">
|
||||
<AutoComplete
|
||||
@on-search="handleCompletePackages(type)"
|
||||
<Select
|
||||
icon="ios-search"
|
||||
placeholder="套餐名称"
|
||||
v-model.trim="params.package_name"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<Option
|
||||
:key="item.id"
|
||||
:value="item.name"
|
||||
v-for="item in completeHandledPackages"
|
||||
>{{ item.name }}</Option>
|
||||
</AutoComplete>
|
||||
:key="index"
|
||||
:value="item ? item : ''"
|
||||
v-for="(item, index) in real_packages"
|
||||
>{{ item }}</Option>
|
||||
</Select>
|
||||
</li>
|
||||
|
||||
<li class="handle-item w-250">
|
||||
@ -152,8 +162,8 @@
|
||||
</div>
|
||||
|
||||
<footer class="ta-c" slot="footer">
|
||||
<Button @click="clear" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
||||
<Button v-if="source === 0" :loading="loading" @click="ok" class="w-80" type="primary">确定</Button>
|
||||
<Button @click="cannel" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
||||
<Button v-if="source === 0" :loading="loading" @click="close" class="w-80" type="primary">确定</Button>
|
||||
<Button v-if="source === 1" :loading="loading" @click="order" class="w-80" type="primary">创建订单</Button>
|
||||
<Button v-if="source === 2" :loading="loading" @click="store" class="w-80" type="primary">提交</Button>
|
||||
</footer>
|
||||
|
@ -6,8 +6,35 @@
|
||||
@on-visible-change="visibleChange"
|
||||
v-model="my_show"
|
||||
width="500"
|
||||
:mask-style="{ 'z-index': source === 1 ? 2000 : 1000}"
|
||||
:mask-style="{ 'z-index': source === 1 ? 1000 : 500}"
|
||||
>
|
||||
<div v-if="Object.keys(order_group).length" class="order-group-wrap">
|
||||
<ul>
|
||||
<li
|
||||
v-for="(item, index) in order_group"
|
||||
:key="index"
|
||||
class="order-group-list"
|
||||
:class="groupIndex === index ? 'order-group-list-selected' : ''"
|
||||
@click="selectGroup(item, index)"
|
||||
>
|
||||
<p>
|
||||
<span class="order-group-list-title">企业:</span>
|
||||
<span class="order-group-list-content">{{item[0].company_name}}</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="order-group-list-title">套餐:</span>
|
||||
<span class="order-group-list-content">{{item[0].package_name}}</span>
|
||||
</p>
|
||||
<p>
|
||||
<span class="order-group-list-title">卡量:</span>
|
||||
<span
|
||||
class="order-group-list-content"
|
||||
>{{item.reduce((acc, cur) => {return acc + cur.counts;}, 0)}}</span>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="page-edit-wrap uinn-lr20">
|
||||
<ui-loading :show="loading"></ui-loading>
|
||||
|
||||
@ -58,6 +85,8 @@
|
||||
<Option :value="'bank'">银行转账</Option>
|
||||
<Option :value="'wx'">微信支付</Option>
|
||||
<Option :value="'alipay'">支付宝</Option>
|
||||
<Option :value="'account'">余额支付</Option>
|
||||
<Option :value="'tmall'">天猫续费</Option>
|
||||
</Select>
|
||||
</div>
|
||||
</li>
|
||||
@ -157,9 +186,60 @@
|
||||
<div class="ta-c">
|
||||
<Button v-if="source === 0" @click="cards" class="w-80 umar-r5" ghost type="success">选卡</Button>
|
||||
<Button @click="clear" class="w-80 umar-r5" ghost type="primary">取消</Button>
|
||||
<Button :loading="loading" @click="ok" class="w-80" type="primary">提交</Button>
|
||||
<Button
|
||||
:loading="loading"
|
||||
@click="ok"
|
||||
class="w-80"
|
||||
type="warning"
|
||||
v-if="groupIndex === '0_0'"
|
||||
>转销售</Button>
|
||||
<Button :loading="loading" @click="ok" class="w-80" type="primary" v-else>提交</Button>
|
||||
</div>
|
||||
</MDrawer>
|
||||
</template>
|
||||
|
||||
<script src="./js/edit.js"></script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.order-group-wrap {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 500px;
|
||||
overflow: auto;
|
||||
height: calc(100%);
|
||||
.order-group-list {
|
||||
display: block;
|
||||
height: 120px;
|
||||
padding: 15px;
|
||||
font-size: 11px;
|
||||
background-color: #fff;
|
||||
border: 1px solid #ececec;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
.order-group-list-title {
|
||||
line-height: 32px;
|
||||
font-weight: 700;
|
||||
text-align: right;
|
||||
}
|
||||
.order-group-list-content {
|
||||
line-height: 32px;
|
||||
text-align: left;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.order-group-list:hover {
|
||||
background-color: #fff;
|
||||
border-color: #57a3f3;
|
||||
}
|
||||
.order-group-list:active {
|
||||
background-color: #fff;
|
||||
border-color: #2b85e4;
|
||||
}
|
||||
.order-group-list-selected {
|
||||
color: #2b85e4;
|
||||
background-color: #fff;
|
||||
border-color: #2b85e4;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
@ -157,10 +157,12 @@
|
||||
<ui-detail :data="detailObj.data" :show.sync="detailObj.show"></ui-detail>
|
||||
|
||||
<ui-cards
|
||||
:orderObj="cardsObj.orderObj"
|
||||
:source="cardsObj.source"
|
||||
:show.sync="cardsObj.show"
|
||||
:type="type"
|
||||
@create-order="openEdit(true, 1, null)"
|
||||
@store-success="handleOrderSuccess(1)"
|
||||
></ui-cards>
|
||||
|
||||
<Modal v-model="orderConfirmShow" width="360">
|
||||
|
@ -1,4 +1,5 @@
|
||||
import { mapGetters } from 'vuex';
|
||||
import * as API from 'api/virtual/orders';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@ -16,10 +17,22 @@ export default {
|
||||
type: {
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
orderObj: {
|
||||
type: Object,
|
||||
default: null
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['orders', 'cards', 'selected', 'counts', 'getFilterUsedCards', 'getRealOrderById', 'getSelectedByOrderId', 'getCardByOderIdAndSim'])
|
||||
relationObj: {
|
||||
get() {
|
||||
return this.$store.state.order.relationObj;
|
||||
},
|
||||
set(value) {
|
||||
this.$store.commit('SET_RELATION_OBJ', value);
|
||||
}
|
||||
},
|
||||
...mapGetters(['orders', 'cards', 'selected', 'counts', 'getFilterUsedCards', 'getRealOrderById', 'getSelectedByOrderId', 'getCardByOderIdAndSim', 'relations', 'real_companies', 'real_packages'])
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@ -36,8 +49,8 @@ export default {
|
||||
page: 1
|
||||
},
|
||||
params: {
|
||||
company_id: '',
|
||||
package_id: '',
|
||||
company_name: '',
|
||||
package_name: '',
|
||||
carrier_operator: '',
|
||||
time: [
|
||||
this.moment().subtract('2', 'months').startOf('month').format('YYYY-MM-DD'),
|
||||
@ -46,6 +59,7 @@ export default {
|
||||
used: '',
|
||||
sim: ''
|
||||
},
|
||||
filterOrders: [],
|
||||
showOrders: [],
|
||||
showCards: [],
|
||||
orderColumns: [
|
||||
@ -56,15 +70,11 @@ export default {
|
||||
let value = false;
|
||||
let indeterminate = false;
|
||||
|
||||
let total = this.showOrders.reduce((acc, cur) => {
|
||||
let total = this.orders.reduce((acc, cur) => {
|
||||
return acc + cur.counts;
|
||||
}, 0);
|
||||
|
||||
let select = this.getSelectedByOrderId(this.showOrders.map(el => {
|
||||
return el.id;
|
||||
}));
|
||||
|
||||
let counts = select.reduce((acc, cur) => {
|
||||
let counts = this.selected.reduce((acc, cur) => {
|
||||
return acc + cur.counts;
|
||||
}, 0);
|
||||
|
||||
@ -78,7 +88,9 @@ export default {
|
||||
},
|
||||
on: {
|
||||
input: value => {
|
||||
let order_id = this.showOrders.map(item => {
|
||||
let order_id = this.filterOrders.filter(el => {
|
||||
return el.shipments !== el.counts;
|
||||
}).map(item => {
|
||||
return item.id;
|
||||
});
|
||||
|
||||
@ -113,23 +125,26 @@ export default {
|
||||
{
|
||||
title: "订单编号",
|
||||
key: "sn",
|
||||
width: 220
|
||||
width: 220,
|
||||
sortable: true
|
||||
},
|
||||
|
||||
{
|
||||
title: "企业名称",
|
||||
key: "company_name",
|
||||
width: 210
|
||||
width: 210,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
title: "运营商",
|
||||
key: "carrier_operator_name",
|
||||
width: 75
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
title: "套餐名称",
|
||||
key: "package_name",
|
||||
width: 150
|
||||
width: 150,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
title: "支付方式",
|
||||
@ -139,7 +154,8 @@ export default {
|
||||
{
|
||||
title: "数量",
|
||||
key: "counts",
|
||||
width: 90
|
||||
width: 100,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
title: "已用数量",
|
||||
@ -149,13 +165,15 @@ export default {
|
||||
{
|
||||
title: "订单金额",
|
||||
key: "total_price",
|
||||
width: 100
|
||||
width: 120,
|
||||
sortable: true
|
||||
},
|
||||
|
||||
{
|
||||
title: "订单时间",
|
||||
key: "order_at",
|
||||
width: 150
|
||||
width: 150,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
title: "所需卡量",
|
||||
@ -209,7 +227,14 @@ export default {
|
||||
let cards = this.getFilterUsedCards(this.showCards);
|
||||
|
||||
let array = cards.map(item => {
|
||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
||||
return {
|
||||
order_id: item.order_id,
|
||||
sim: item.sim,
|
||||
counts: item.counts,
|
||||
virtual_order_id: item.virtual_order_id,
|
||||
company_id: item.company_id,
|
||||
package_id: item.package_id
|
||||
};
|
||||
});
|
||||
|
||||
this.$store.commit('PUSH_SELECTED', array);
|
||||
@ -247,12 +272,9 @@ export default {
|
||||
{
|
||||
title: "SIM",
|
||||
key: "sim",
|
||||
width: 135
|
||||
},
|
||||
{
|
||||
title: "数量",
|
||||
key: "counts",
|
||||
width: 60
|
||||
width: 135,
|
||||
sortable: true
|
||||
|
||||
},
|
||||
{
|
||||
title: "状态",
|
||||
@ -269,15 +291,22 @@ export default {
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
title: "数量",
|
||||
key: "counts",
|
||||
width: 60
|
||||
},
|
||||
{
|
||||
title: "VD企业",
|
||||
key: "company_name",
|
||||
width: 210
|
||||
width: 210,
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
title: "VD套餐",
|
||||
key: "package_name",
|
||||
width: 150
|
||||
width: 150,
|
||||
sortable: true
|
||||
}
|
||||
]
|
||||
};
|
||||
@ -289,31 +318,38 @@ export default {
|
||||
if (bool) {
|
||||
this.index();
|
||||
}
|
||||
},
|
||||
orders(array) {
|
||||
this.page.total = array.length;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
ok() {
|
||||
this.my_show = false;
|
||||
},
|
||||
index(force = 0) {
|
||||
let params = this.parseParams(this.params);
|
||||
|
||||
if (params.type !== this.type) {
|
||||
params.type = this.type;
|
||||
this.$store.commit('SET_SELECTED', []);
|
||||
if (this.params.type != this.type) {
|
||||
this.params.type = this.type;
|
||||
this.$store.dispatch('initOrder');
|
||||
}
|
||||
|
||||
this.orderLoading = true;
|
||||
let params = this.parseParams({ times: this.params.times, type: this.params.type });
|
||||
|
||||
if (force) {
|
||||
this.$store.commit('SET_ORDER_PARAMS', {});
|
||||
params.skipCache = 1;
|
||||
}
|
||||
|
||||
this.orderLoading = true;
|
||||
|
||||
if (this.params.sim !== '') {
|
||||
params.sim = this.params.sim;
|
||||
|
||||
this.cardLoading = true;
|
||||
this.$store.dispatch("getCardsByParams", params).then((cards) => {
|
||||
this.showCards = cards;
|
||||
this.cardLoading = false;
|
||||
}).catch(() => {
|
||||
this.cardLoading = false;
|
||||
});
|
||||
}
|
||||
|
||||
this.$store.dispatch("getOrders", params).then(() => {
|
||||
this.sortOrders('order_at');
|
||||
this.changePage(1);
|
||||
this.orderLoading = false;
|
||||
}).catch(() => {
|
||||
@ -326,7 +362,45 @@ export default {
|
||||
},
|
||||
changePage(page) {
|
||||
this.page.page = page;
|
||||
this.showOrders = this.orders.slice((page - 1) * this.page.limit, page * this.page.limit);
|
||||
|
||||
this.filterOrders = JSON.parse(JSON.stringify(this.orders));
|
||||
|
||||
if (this.params.company_name !== '' && this.params.company_name !== undefined) {
|
||||
this.filterOrders = this.filterOrders.filter(el => {
|
||||
return el.company_name.indexOf(this.params.company_name) !== -1;
|
||||
});
|
||||
}
|
||||
|
||||
if (this.params.package_name !== '' && this.params.package_name !== undefined) {
|
||||
this.filterOrders = this.filterOrders.filter(el => {
|
||||
return el.package_name.indexOf(this.params.package_name) !== -1;
|
||||
});
|
||||
}
|
||||
|
||||
if (this.params.carrier_operator !== '' && this.params.carrier_operator !== undefined) {
|
||||
this.filterOrders = this.filterOrders.filter(el => {
|
||||
return el.carrier_operator === this.params.carrier_operator;
|
||||
});
|
||||
}
|
||||
|
||||
if (this.params.used !== '' && this.params.used !== undefined) {
|
||||
this.filterOrders = this.filterOrders.filter(el => {
|
||||
switch (this.params.used) {
|
||||
case 0:
|
||||
return el.shipments === 0;
|
||||
case 1:
|
||||
return el.shipments > 0 && el.shipments !== el.counts;
|
||||
case 2:
|
||||
return el.shipments > 0 && el.shipments === el.counts;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.page.total = this.filterOrders.length;
|
||||
|
||||
this.showOrders = this.filterOrders.slice((page - 1) * this.page.limit, page * this.page.limit);
|
||||
},
|
||||
handleOrderRowDblclick(row) {
|
||||
this.getCards(row.id);
|
||||
@ -336,10 +410,16 @@ export default {
|
||||
this.$emit("update:show", false);
|
||||
}
|
||||
},
|
||||
clear() {
|
||||
this.$store.commit('SET_REAL_ORDER_SELECTED', []);
|
||||
close() {
|
||||
this.my_show = false;
|
||||
},
|
||||
clear() {
|
||||
this.$store.dispatch('initOrder');
|
||||
},
|
||||
cannel() {
|
||||
this.clear();
|
||||
this.close();
|
||||
},
|
||||
resetSearch() {
|
||||
for (let k in this.params) {
|
||||
if (k === 'time') {
|
||||
@ -351,7 +431,9 @@ export default {
|
||||
this.params[k] = '';
|
||||
}
|
||||
}
|
||||
this.index();
|
||||
|
||||
this.$store.dispatch('initOrder');
|
||||
this.index(1);
|
||||
},
|
||||
getCards(order_id) {
|
||||
this.cardLoading = true;
|
||||
@ -402,7 +484,7 @@ export default {
|
||||
});
|
||||
|
||||
let arr = cards.map(item => {
|
||||
return { order_id: item.order_id, sim: item.sim, counts: item.counts };
|
||||
return JSON.parse(JSON.stringify(item));
|
||||
});
|
||||
|
||||
if (counts !== null) {
|
||||
@ -419,12 +501,65 @@ export default {
|
||||
},
|
||||
handleSelectCards(row, value) {
|
||||
let action = value ? 'PUSH_SELECTED' : 'REMOVE_SELECTED';
|
||||
this.$store.commit(action, [{ order_id: row.order_id, sim: row.sim, counts: row.counts }]);
|
||||
this.$store.commit(action, [row]);
|
||||
},
|
||||
order() {
|
||||
if (this.selected.findIndex(el => { return el.virtual_order_id !== 0; }) !== -1) {
|
||||
return this.$Message.error('所选数据存在已使用的卡');
|
||||
}
|
||||
|
||||
if (this.type !== 0) {
|
||||
let group = {};
|
||||
|
||||
for (let index = 0; index < this.selected.length; index++) {
|
||||
const element = this.selected[index];
|
||||
let key = element.company_id + '_' + element.package_id;
|
||||
|
||||
if (group.hasOwnProperty(key)) {
|
||||
group[key].push(element);
|
||||
} else {
|
||||
group[key] = [element];
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.keys(group).length >= 1) {
|
||||
this.$store.commit('SET_ORDER_GROUP', group);
|
||||
}
|
||||
}
|
||||
|
||||
this.$emit('create-order');
|
||||
},
|
||||
store() {},
|
||||
store() {
|
||||
if (!this.orderObj) {
|
||||
return this.$Message.error('订单错误');
|
||||
}
|
||||
|
||||
let counts = this.selected.reduce((acc, cur) => {
|
||||
return acc + cur.counts;
|
||||
}, 0);
|
||||
|
||||
if (this.orderObj.counts !== counts) {
|
||||
return this.$Message.error('选择的卡数量不正确');
|
||||
}
|
||||
|
||||
let params = {};
|
||||
params.type = this.type;
|
||||
params.selected = this.selected.map(el => {
|
||||
return { order_id: el.order_id, counts: el.counts, sim: el.sim };
|
||||
});
|
||||
this.loading = true;
|
||||
// 编辑
|
||||
API.update(params, this.orderObj.id).then(res => {
|
||||
this.loading = false;
|
||||
if (res.code == 0) {
|
||||
this.$emit('store-success');
|
||||
this.$Message.success('操作成功');
|
||||
this.clear();
|
||||
}
|
||||
}).catch(err => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
sort() {
|
||||
this.showCards = this.cards;
|
||||
|
||||
@ -443,6 +578,65 @@ export default {
|
||||
this.$store.commit('SET_REAL_ORDERS', orders);
|
||||
|
||||
this.changePage(1);
|
||||
},
|
||||
sortOrders(sortBy = 'times') {
|
||||
let mapped = [];
|
||||
|
||||
if (sortBy === 'order_at') {
|
||||
mapped = this.orders.map((el, i) => {
|
||||
return { index: i, order_at: el.order_at };
|
||||
});
|
||||
|
||||
mapped.sort((a, b) => {
|
||||
if (a.shipments === a.counts) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return a.order_at > b.order_at ? -1 : (a.order_at < b.order_at ? 1 : 0);
|
||||
});
|
||||
} else {
|
||||
let virtual_company_id = this.relationObj.virtual_company_id;
|
||||
let virtual_package_id = this.relationObj.virtual_package_id;
|
||||
|
||||
let relations = this.relations;
|
||||
|
||||
let sortRules = relations.filter(el => {
|
||||
if (virtual_company_id !== '' && virtual_package_id !== '') {
|
||||
if (virtual_company_id == el.virtual_company_id || virtual_package_id == el.virtual_package_id) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
mapped = this.orders.map((el, i) => {
|
||||
let display = -1;
|
||||
|
||||
for (let index = 0; index < sortRules.length; index++) {
|
||||
const element = sortRules[index];
|
||||
if (element.real_company_id == el.company_id && element.real_package_id == el.package_id) {
|
||||
display = el[sortBy];
|
||||
} else if (element.real_company_id == el.company_id) {
|
||||
display = 0;
|
||||
} else if (element.real_package_id == el.package_id) {
|
||||
display = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return { index: i, display };
|
||||
});
|
||||
|
||||
mapped.sort((a, b) => {
|
||||
return a.display > b.display ? -1 : (a.display < b.display ? 1 : 0);
|
||||
});
|
||||
}
|
||||
|
||||
let orders = mapped.map(el => {
|
||||
return this.orders[el.index];
|
||||
});
|
||||
|
||||
this.$store.commit('SET_REAL_ORDERS', orders);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -47,11 +47,29 @@ export default {
|
||||
address: '',
|
||||
contacts: '',
|
||||
mobile: ''
|
||||
}
|
||||
},
|
||||
groupIndex: '',
|
||||
group: {}
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['selected', 'counts'])
|
||||
relationObj: {
|
||||
get() {
|
||||
return this.$store.state.order.relationObj;
|
||||
},
|
||||
set(value) {
|
||||
this.$store.commit('SET_RELATION_OBJ', value);
|
||||
}
|
||||
},
|
||||
order_group: {
|
||||
get() {
|
||||
return this.$store.state.order.order_group;
|
||||
},
|
||||
set(value) {
|
||||
this.$store.commit('SET_ORDER_GROUP', value);
|
||||
}
|
||||
},
|
||||
...mapGetters(['selected', 'counts', 'orders', 'relations'])
|
||||
},
|
||||
watch: {
|
||||
show(bool) {
|
||||
@ -63,11 +81,7 @@ export default {
|
||||
});
|
||||
});
|
||||
|
||||
this.initCompletePackages(this.type).then(packages => {
|
||||
this.completePackagesFilter = packages.filter(function(item) {
|
||||
return item.status === 0;
|
||||
});
|
||||
});
|
||||
this.handleChange(0);
|
||||
|
||||
if (this.data) {
|
||||
for (let k in this.data) {
|
||||
@ -76,10 +90,23 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.selected.length && !Object.keys(this.order_group).length) {
|
||||
this.setParamsByReal(this.selected);
|
||||
}
|
||||
|
||||
if (Object.keys(this.order_group).length) {
|
||||
let key = Object.keys(this.order_group)[0];
|
||||
this.selectGroup(this.order_group[key], key);
|
||||
}
|
||||
}
|
||||
},
|
||||
counts(value) {
|
||||
if (value) {
|
||||
if (this.selected.length && !Object.keys(this.order_group).length) {
|
||||
this.setParamsByReal(this.selected);
|
||||
}
|
||||
|
||||
this.params.counts = value;
|
||||
}
|
||||
}
|
||||
@ -89,44 +116,67 @@ export default {
|
||||
this.params.type = this.type;
|
||||
|
||||
if (!this.params.company_id) {
|
||||
this.$Message.info('请选择企业');
|
||||
return;
|
||||
return this.$Message.info('请选择企业');
|
||||
}
|
||||
|
||||
if (!this.params.package_id) {
|
||||
this.$Message.info('请选择套餐');
|
||||
return;
|
||||
return this.$Message.info('请选择套餐');
|
||||
}
|
||||
|
||||
if (!this.params.pay_channel) {
|
||||
this.$Message.info('请选择支付方式');
|
||||
return;
|
||||
return this.$Message.info('请选择支付方式');
|
||||
}
|
||||
|
||||
if (!this.params.counts) {
|
||||
this.$Message.info('请输入订单卡量');
|
||||
return;
|
||||
return this.$Message.info('请输入订单卡量');
|
||||
}
|
||||
|
||||
if (!this.params.order_at) {
|
||||
this.$Message.info('请选择订单时间');
|
||||
return;
|
||||
return this.$Message.info('请选择订单时间');
|
||||
}
|
||||
|
||||
if (this.params.contacts && !(/[\s\S]{2,32}/.test(this.params.contacts))) {
|
||||
this.$Message.info('联系人长度在2-32之间');
|
||||
return;
|
||||
return this.$Message.info('联系人长度在2-32之间');
|
||||
}
|
||||
|
||||
if (this.params.mobile && !isPhone(this.params.mobile)) {
|
||||
this.$Message.info('手机号填写不正确');
|
||||
return;
|
||||
return this.$Message.info('手机号填写不正确');
|
||||
}
|
||||
|
||||
if (this.selected.length) {
|
||||
this.params.selected = this.selected;
|
||||
}
|
||||
if (Object.keys(this.order_group).length) {
|
||||
if (!this.group.length) {
|
||||
return this.$Message.error('请选择一个订单组');
|
||||
}
|
||||
|
||||
if (this.groupIndex === '0_0') {
|
||||
// 卡不在VD上转销售
|
||||
this.params.type = -1;
|
||||
this.post();
|
||||
} else if (this.params.company_id !== this.group[0].company_id) {
|
||||
// 改企业的
|
||||
this.params.type = -2;
|
||||
this.$Modal.confirm({
|
||||
title: '提示',
|
||||
content: '是否确认修改所选卡的企业?',
|
||||
onOk: () => {
|
||||
this.post();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.params.selected = this.group.map(el => {
|
||||
return { order_id: el.order_id, counts: el.counts, sim: el.sim };
|
||||
});
|
||||
} else if (this.selected.length) {
|
||||
this.params.selected = this.selected.map(el => {
|
||||
return { order_id: el.order_id, counts: el.counts, sim: el.sim };
|
||||
});
|
||||
this.post();
|
||||
} else {
|
||||
this.post();
|
||||
}
|
||||
},
|
||||
post() {
|
||||
this.loading = true;
|
||||
|
||||
if (this.data) {
|
||||
@ -134,9 +184,7 @@ export default {
|
||||
API.update(this.params, this.data.id).then(res => {
|
||||
this.loading = false;
|
||||
if (res.code == 0) {
|
||||
this.$emit('update-success');
|
||||
this.$Message.success('更新成功');
|
||||
this.clear();
|
||||
this.handelSuccess();
|
||||
}
|
||||
}).catch(err => {
|
||||
this.loading = false;
|
||||
@ -146,9 +194,7 @@ export default {
|
||||
API.create(this.params).then(res => {
|
||||
this.loading = false;
|
||||
if (res.code == 0) {
|
||||
this.$emit('add-success');
|
||||
this.$Message.success('添加成功');
|
||||
this.clear();
|
||||
this.handelSuccess();
|
||||
}
|
||||
}).catch(err => {
|
||||
this.loading = false;
|
||||
@ -173,27 +219,167 @@ export default {
|
||||
this.my_show = false;
|
||||
},
|
||||
handleChange(type) {
|
||||
if (type === 1) {
|
||||
this.params.package_id = '';
|
||||
this.initCompletePackages(this.type).then(packages => {
|
||||
this.completePackagesFilter = packages.filter(item => {
|
||||
return item.status === 0 && item.carrier_operator === this.params.carrier_operator;
|
||||
let packageType = this.type === 1 ? 0 : this.type;
|
||||
this.initCompletePackages(packageType).then(packages => {
|
||||
let completePackagesFilter = [];
|
||||
|
||||
completePackagesFilter = packages.filter(item => {
|
||||
return item.status === 0;
|
||||
});
|
||||
|
||||
if (type === 1) {
|
||||
this.params.package_id = '';
|
||||
|
||||
completePackagesFilter = packages.filter(item => {
|
||||
return item.carrier_operator === this.params.carrier_operator;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (type === 2) {
|
||||
let selectPackage = this.completePackagesFilter.find(item => {
|
||||
return item.id === this.params.package_id;
|
||||
});
|
||||
|
||||
if (selectPackage) {
|
||||
this.params.carrier_operator = selectPackage.carrier_operator;
|
||||
}
|
||||
}
|
||||
|
||||
if (type === 2) {
|
||||
let selectPackage = packages.find(item => {
|
||||
return item.id === this.params.package_id;
|
||||
});
|
||||
|
||||
if (selectPackage) {
|
||||
this.params.carrier_operator = selectPackage.carrier_operator;
|
||||
}
|
||||
}
|
||||
|
||||
this.completePackagesFilter = completePackagesFilter;
|
||||
});
|
||||
},
|
||||
cards() {
|
||||
this.relationObj = {
|
||||
virtual_company_id: this.params.company_id,
|
||||
virtual_package_id: this.params.package_id
|
||||
};
|
||||
this.$emit('select-cards');
|
||||
},
|
||||
selectGroup(item, index) {
|
||||
this.groupIndex = index;
|
||||
this.group = item;
|
||||
|
||||
this.params.company_id = item[0].company_id;
|
||||
this.params.counts = item.reduce((acc, cur) => { return acc + cur.counts; }, 0);
|
||||
|
||||
if ([0, 1].indexOf(this.type)) {
|
||||
this.params.package_id = item[0].package_id;
|
||||
this.handleChange(2);
|
||||
}
|
||||
|
||||
this.setParamsByReal(item);
|
||||
},
|
||||
setParamsByReal(array) {
|
||||
let tmp = array.map(el => { return el.company_id + '_' + el.package_id; }).filter((v, i, a) => {
|
||||
return a.indexOf(v) === i;
|
||||
});
|
||||
|
||||
if (tmp.length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
let order = this.orders.find(el => { return el.id === array[0].order_id; });
|
||||
|
||||
if (order) {
|
||||
switch (order.pay_channel_name) {
|
||||
case '银行转账':
|
||||
this.params.pay_channel = 'bank';
|
||||
break;
|
||||
case '微信支付':
|
||||
this.params.pay_channel = 'wx';
|
||||
break;
|
||||
case '支付宝':
|
||||
this.params.pay_channel = 'alipay';
|
||||
break;
|
||||
case '余额支付':
|
||||
this.params.pay_channel = 'account';
|
||||
break;
|
||||
case '天猫续费':
|
||||
this.params.pay_channel = 'tmall';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
this.params.order_at = order.order_at;
|
||||
this.params.transaction_no = order.transaction_no;
|
||||
this.params.contacts = order.contacts;
|
||||
this.params.mobile = order.mobile;
|
||||
this.params.remark = order.remark;
|
||||
this.params.address = order.address;
|
||||
}
|
||||
|
||||
let relations = this.relations.filter(el => {
|
||||
return array.findIndex(e => { return e.company_id === el.real_company_id && e.package_id === el.real_package_id; }) !== -1;
|
||||
});
|
||||
|
||||
if (relations.length) {
|
||||
let mappedCompany = this.companies.map(el, i => {
|
||||
return { index: i, company_id: el.id };
|
||||
});
|
||||
|
||||
mappedCompany = mappedCompany.map(el => {
|
||||
el.display = 0;
|
||||
let relation = relations.find(e => { return e.virtual_company_id === el.id; });
|
||||
|
||||
if (relation) {
|
||||
el.display = relation.updated_at;
|
||||
}
|
||||
});
|
||||
|
||||
mappedCompany.sort((a, b) => {
|
||||
return a.display > b.display ? 1 : (a.display < b.display ? -1 : 0);
|
||||
});
|
||||
|
||||
this.companies = mappedCompany.map(el => {
|
||||
return this.companies[el.index];
|
||||
});
|
||||
|
||||
let mappedPackage = this.completePackagesFilter.map(el, i => {
|
||||
return { index: i, package_id: el.id };
|
||||
});
|
||||
|
||||
mappedPackage = mappedPackage.map(el => {
|
||||
el.display = 0;
|
||||
let relation = relations.find(e => { return e.virtual_package_id === el.id; });
|
||||
|
||||
if (relation) {
|
||||
el.display = relation.updated_at;
|
||||
}
|
||||
});
|
||||
|
||||
mappedPackage.sort((a, b) => {
|
||||
return a.display > b.display ? 1 : (a.display < b.display ? -1 : 0);
|
||||
});
|
||||
|
||||
this.completePackagesFilter = mappedPackage.map(el => {
|
||||
return this.completePackagesFilter[el.index];
|
||||
});
|
||||
}
|
||||
},
|
||||
handelSuccess() {
|
||||
if (Object.keys(this.order_group).length >= 1) {
|
||||
let mapped = JSON.parse(JSON.stringify(this.order_group));
|
||||
this.$store.commit('REMOVE_SELECTED', mapped[this.groupIndex]);
|
||||
delete mapped[this.groupIndex];
|
||||
this.order_group = mapped;
|
||||
|
||||
if (Object.keys(this.order_group).length >= 1) {
|
||||
let key = Object.keys(this.order_group)[0];
|
||||
this.selectGroup(this.order_group[key], key);
|
||||
}
|
||||
}
|
||||
|
||||
this.$Message.success('操作成功');
|
||||
|
||||
if (!this.order_group || Object.keys(this.order_group).length < 1) {
|
||||
this.clear();
|
||||
if (this.data) {
|
||||
this.$emit('update-success');
|
||||
} else {
|
||||
this.$emit('add-success');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -419,7 +419,7 @@ export default {
|
||||
{
|
||||
title: '操作',
|
||||
key: 'action',
|
||||
width: 210,
|
||||
width: 190,
|
||||
fixed: 'right',
|
||||
render: (h, {
|
||||
row,
|
||||
@ -469,20 +469,49 @@ export default {
|
||||
class: ['btn'],
|
||||
on: {
|
||||
click: () => {
|
||||
this.openCards(true, 2);
|
||||
this.openCards(true, 2, row);
|
||||
}
|
||||
}
|
||||
}, '排单')]));
|
||||
}
|
||||
}
|
||||
|
||||
if (this.haveJurisdiction('destroy')) {
|
||||
if (this.haveJurisdiction('destroy') && row.shipments) {
|
||||
html.push(h('Button', {
|
||||
props: {
|
||||
type: 'warning',
|
||||
size: 'small',
|
||||
disabled: false
|
||||
},
|
||||
class: ['btn'],
|
||||
on: {
|
||||
click: () => {
|
||||
this.$Modal.confirm({
|
||||
title: '提示',
|
||||
content: '重置将清空该订单的排单记录,请谨慎操作',
|
||||
onOk: () => {
|
||||
this.isShowLoading(true);
|
||||
API.reset({
|
||||
ids: row.id
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
this.$Message.success('操作成功');
|
||||
this.request();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}, '重置'));
|
||||
}
|
||||
|
||||
if (this.haveJurisdiction('destroy') && !row.shipments) {
|
||||
html.push(h('Button', {
|
||||
props: {
|
||||
type: 'error',
|
||||
size: 'small',
|
||||
disabled: false,
|
||||
icon: 'md-trash'
|
||||
disabled: false
|
||||
},
|
||||
class: ['btn'],
|
||||
on: {
|
||||
@ -572,10 +601,11 @@ export default {
|
||||
* source 0:选创建订单页面打开 1:从选卡按钮打开 2:从排单按钮打开
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
openCards(bool, source) {
|
||||
openCards(bool, source, orderObj = {}) {
|
||||
this.cardsObj = {
|
||||
show: bool,
|
||||
source
|
||||
source,
|
||||
orderObj
|
||||
};
|
||||
},
|
||||
|
||||
@ -684,9 +714,7 @@ export default {
|
||||
handleOrderSuccess(value) {
|
||||
let page = value ? this.list_data.current_page : 1;
|
||||
this.cardsObj.show = false;
|
||||
this.$store.commit("SET_REAL_ORDER_SELECTED", []);
|
||||
this.$store.commit("SET_ORDER_PARAMS", {});
|
||||
this.$store.commit("SET_CARD_PARAMS", {});
|
||||
this.$store.dispatch('initOrder');
|
||||
this.index(page);
|
||||
}
|
||||
}
|
||||
|
2
public/css/chunk-aac852ec.251cac58.css
Normal file
2
public/css/chunk-aac852ec.251cac58.css
Normal file
File diff suppressed because one or more lines are too long
2
public/js/app.266531a3.js
Normal file
2
public/js/app.266531a3.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/app.266531a3.js.map
Normal file
1
public/js/app.266531a3.js.map
Normal file
File diff suppressed because one or more lines are too long
4
public/js/chunk-00ae0766.3874cd10.js
Normal file
4
public/js/chunk-00ae0766.3874cd10.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-00ae0766.3874cd10.js.map
Normal file
1
public/js/chunk-00ae0766.3874cd10.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-07a274ec.c3ad5dec.js
Normal file
2
public/js/chunk-07a274ec.c3ad5dec.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-07a274ec.c3ad5dec.js.map
Normal file
1
public/js/chunk-07a274ec.c3ad5dec.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-12217672.67e501de.js
Normal file
2
public/js/chunk-12217672.67e501de.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-12217672.67e501de.js.map
Normal file
1
public/js/chunk-12217672.67e501de.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/js/chunk-aac852ec.be64dbbe.js
Normal file
2
public/js/chunk-aac852ec.be64dbbe.js
Normal file
File diff suppressed because one or more lines are too long
1
public/js/chunk-aac852ec.be64dbbe.js.map
Normal file
1
public/js/chunk-aac852ec.be64dbbe.js.map
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=\favicon.ico><script src=\config.js></script><title></title><link href=/css/chunk-12217672.0f76ed17.css rel=prefetch><link href=/css/chunk-68d959cc.4c3a90e7.css rel=prefetch><link href=/js/chunk-00ae0766.d130b440.js rel=prefetch><link href=/js/chunk-07a274ec.47bfd5a6.js rel=prefetch><link href=/js/chunk-12217672.35ad14fb.js rel=prefetch><link href=/js/chunk-68d959cc.dc5e174a.js rel=prefetch><link href=/css/app.d71a8195.css rel=preload as=style><link href=/css/chunk-vendors.5803e894.css rel=preload as=style><link href=/js/app.eb0a5ca2.js rel=preload as=script><link href=/js/chunk-vendors.ed6443e8.js rel=preload as=script><link href=/css/chunk-vendors.5803e894.css rel=stylesheet><link href=/css/app.d71a8195.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有启用JavaScript,程序不能正常工作,若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.ed6443e8.js></script><script src=/js/app.eb0a5ca2.js></script></body></html>
|
||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=\favicon.ico><script src=\config.js></script><title></title><link href=/css/chunk-12217672.0f76ed17.css rel=prefetch><link href=/css/chunk-aac852ec.251cac58.css rel=prefetch><link href=/js/chunk-00ae0766.3874cd10.js rel=prefetch><link href=/js/chunk-07a274ec.c3ad5dec.js rel=prefetch><link href=/js/chunk-12217672.67e501de.js rel=prefetch><link href=/js/chunk-aac852ec.be64dbbe.js rel=prefetch><link href=/css/app.d71a8195.css rel=preload as=style><link href=/css/chunk-vendors.5803e894.css rel=preload as=style><link href=/js/app.266531a3.js rel=preload as=script><link href=/js/chunk-vendors.ed6443e8.js rel=preload as=script><link href=/css/chunk-vendors.5803e894.css rel=stylesheet><link href=/css/app.d71a8195.css rel=stylesheet></head><body><noscript><strong>很抱歉,如果没有启用JavaScript,程序不能正常工作,若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.ed6443e8.js></script><script src=/js/app.266531a3.js></script></body></html>
|
@ -1,7 +1,12 @@
|
||||
<?php
|
||||
|
||||
use App\Domains\Virtual\Jobs\CreateRealVirtualRelation;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Database\Query\Grammars\Grammar;
|
||||
use App\Models\Card\Card;
|
||||
require_once realpath(dirname(__FILE__) . '/TestCase.php');
|
||||
|
||||
CreateRealVirtualRelation::dispatchNow(1, [1, 2]);
|
||||
$res = Card::selectRaw('MAX(SUBSTR(sim::text, 4, 1)) as max')
|
||||
->whereRaw("sim::text SIMILAR TO '106\d244756200|106\d244756201|106_852546016|104_340502885'")
|
||||
->first();
|
||||
|
||||
dd($res);
|
||||
|
Loading…
x
Reference in New Issue
Block a user