This commit is contained in:
邓皓元 2018-12-27 17:47:12 +08:00
parent 82ddd5e59e
commit b2c181d104
43 changed files with 359 additions and 76 deletions

View File

@ -81,7 +81,7 @@ class AccountService extends Service implements JwtServiceContract
$rule = [
'username' => ['username', 'between:2,12', Rule::unique($this->accountRepository->getTable(), 'username')->ignore($attributes['id']), Rule::notIn(config('domain.account.reserved_account'))],
'nickname' => ['string', 'display_length:2,32'],
'nickname' => ['string', 'between:2,32'],
'mobile' => ['string', 'cn_phone', Rule::unique($this->accountRepository->getTable(), 'mobile')->ignore($attributes['id'])],
'email' => ['string', 'email', Rule::unique($this->accountRepository->getTable(), 'email')->ignore($attributes['id'])],
'password' => ['string'],

View File

@ -120,17 +120,18 @@ class FileService extends Service
$disk = $disk ?: config('filesystems.default');
if ($input['filename']) {
$fileModel = $this->store($file, $input, $disk);
$fileModel = $this->store($file, $input, $disk, true);
} else {
$fileModel = $this->validateFileInDatabase($file, function (UploadedFile $file, string $md5) use ($input, $disk) {
$input['filename'] = $this->generateFilePath($md5);
return $this->store($file, $input, $disk);
});
}
if ($input['type'] && $input['typeid'] && in_array($input['type'], self::$types)) {
$this->apply($fileModel->id, $input['type'], $input['typeid'], $input['cover'] ?? false);
}
}
return $fileModel;
}
@ -243,7 +244,7 @@ class FileService extends Service
* @param string $disk
* @return mixed
*/
protected function store(UploadedFile $file, $input, $disk)
protected function store(UploadedFile $file, $input, $disk, $cover = false)
{
$disk = $disk ?: config('filesystems.default');
$clientHeight = $input['height'] ?? 0;
@ -280,7 +281,7 @@ class FileService extends Service
'duration' => $clientDuration,
];
$fileModel = $this->fileRepository->create($new);
$fileModel = $cover ? new FileModel($new) : $this->fileRepository->create($new);
return $fileModel;
}

View File

@ -26,7 +26,7 @@ class RoleRepository extends Repository
*/
protected $fieldSearchable = [
'id' => '=',
'name' => '=',
'name' => 'like',
'parent_id' => '=',
];

View File

@ -60,6 +60,7 @@ class MongoSync extends Command
'bloc_id' => $blocs[$value['comId']] ?? 0,
'carrier_operator' => self::$carrierOperators[$value['oType']] ?? 255,
'activated_at' => $activated_at,
'virtual_activated_at' => $activated_at,
'created_at' => $value['sDate']->toDateTime()->format('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];

View File

@ -0,0 +1,62 @@
<?php
namespace App\Domains\Virtual\Repositories;
use App\Core\Repository;
use App\Models\Virtual\OrderFlowPackageCards as Model;
class OrderFlowPackageCardsRepository extends Repository
{
/**
* 是否关闭缓存
*
* @var boolean
*/
protected $cacheSkip = false;
/**
* 是否开启数据转化
*
* @var bool
*/
protected $needTransform = false;
/**
* @var array
*/
protected $fieldSearchable = [
'id' => '=',
'created_at' => 'like',
];
public function model() {
return Model::class;
}
/**
* 数据格式化
*
* @param mixed $result
*
* @return mixed
*/
public function transform($model)
{
return $model->toArray();
}
/**
* 查询条件
*
* @return void
*/
public function withConditions(array $conditions = [])
{
if (isset($conditions['id'])) {
$conditions['id'] = array_wrap($conditions['id']);
$this->model = $this->model->whereIn('id', $conditions['id']);
}
return $this;
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace App\Domains\Virtual\Repositories;
use App\Core\Repository;
use App\Models\Virtual\OrderRenewalCard as Model;
class OrderRenewalCardRepository extends Repository
{
/**
* 是否关闭缓存
*
* @var boolean
*/
protected $cacheSkip = false;
/**
* 是否开启数据转化
*
* @var bool
*/
protected $needTransform = false;
/**
* @var array
*/
protected $fieldSearchable = [
'id' => '=',
'created_at' => 'like',
];
public function model() {
return Model::class;
}
/**
* 数据格式化
*
* @param mixed $result
*
* @return mixed
*/
public function transform($model)
{
return $model->toArray();
}
/**
* 查询条件
*
* @return void
*/
public function withConditions(array $conditions = [])
{
if (isset($conditions['id'])) {
$conditions['id'] = array_wrap($conditions['id']);
$this->model = $this->model->whereIn('id', $conditions['id']);
}
return $this;
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace App\Domains\Virtual\Repositories;
use App\Core\Repository;
use App\Models\Virtual\OrderRenewalPackageCard as Model;
class OrderRenewalPackageCardRepository extends Repository
{
/**
* 是否关闭缓存
*
* @var boolean
*/
protected $cacheSkip = false;
/**
* 是否开启数据转化
*
* @var bool
*/
protected $needTransform = false;
/**
* @var array
*/
protected $fieldSearchable = [
'id' => '=',
'created_at' => 'like',
];
public function model() {
return Model::class;
}
/**
* 数据格式化
*
* @param mixed $result
*
* @return mixed
*/
public function transform($model)
{
return $model->toArray();
}
/**
* 查询条件
*
* @return void
*/
public function withConditions(array $conditions = [])
{
if (isset($conditions['id'])) {
$conditions['id'] = array_wrap($conditions['id']);
$this->model = $this->model->whereIn('id', $conditions['id']);
}
return $this;
}
}

View File

@ -63,7 +63,7 @@ class PackageService extends Service
{
$attributes = array_only($attributes, array_merge(app(Package::class)->getFillable()));
$attributes['sn'] = $attributes['sn'] ?? CommonService::generatePackageSn($attributes['type'], $attributes['carrier_operator'], $attributes['flows'], $attributes['service_months']);
$attributes['sn'] = $attributes['sn'] ?: CommonService::generatePackageSn($attributes['type'], $attributes['carrier_operator'], $attributes['flows'], $attributes['service_months']);
$rule = [
'sn' => ['required', 'between:2,32', Rule::unique($this->packageRepository->getTable(), 'sn')->ignore($attributes['id'])],
@ -89,7 +89,7 @@ class PackageService extends Service
$message = [
'sn.required' => '请输入套餐编号',
'sn.between' => '套餐编号长度不合法',
'sn.unique' => '套餐编号已经被其他用户所使用',
'sn.unique' => '套餐编号已存在,请重新输入',
'name.required' => '请输入套餐名称',
'name.between' => '套餐名称长度不合法',
'name.unique' => '套餐名称已经被其他用户所使用',

View File

@ -3,22 +3,43 @@ namespace App\Domains\Virtual\Services;
use App\Core\Service;
use App\Models\Virtual\Order;
use App\Models\Virtual\OrderCard;
use Illuminate\Support\Facades\DB;
use App\Domains\Virtual\Repositories\OrderRepository;
use App\Domains\Virtual\Repositories\CompanyRepository;
use App\Domains\Virtual\Repositories\OrderCardRepository;
use App\Domains\Virtual\Repositories\OrderRenewalCardRepository;
use App\Domains\Virtual\Repositories\OrderFlowPackageCardsRepository;
use App\Domains\Virtual\Repositories\OrderRenewalPackageCardRepository;
class StatService extends Service
{
protected $companyRepository;
protected $orderRepository;
protected $orderCardRepository;
protected $orderRenewalCardRepository;
protected $orderRenewalPackageCardRepository;
protected $orderFlowPackageCardsRepository;
/**
* 构造函数
*
* @return void
*/
public function __construct(OrderRepository $orderRepository)
{
public function __construct(
CompanyRepository $companyRepository,
OrderRepository $orderRepository,
OrderCardRepository $orderCardRepository,
OrderRenewalCardRepository $orderRenewalCardRepository,
OrderRenewalPackageCardRepository $orderRenewalPackageCardRepository,
OrderFlowPackageCardsRepository $orderFlowPackageCardsRepository
) {
$this->companyRepository = $companyRepository;
$this->orderRepository = $orderRepository;
$this->orderCardRepository = $orderCardRepository;
$this->orderRenewalCardRepository = $orderRenewalCardRepository;
$this->orderRenewalPackageCardRepository = $orderRenewalPackageCardRepository;
$this->orderFlowPackageCardsRepository = $orderFlowPackageCardsRepository;
}
/**
@ -28,7 +49,7 @@ class StatService extends Service
*/
public function companyIndex(array $conditions = [])
{
$companies = app(CompanyRepository::class)->withConditions(array_only($conditions, ['name']))
$companies = $this->companyRepository->withConditions(array_only($conditions, ['name']))
->select(['id', 'name'])->applyConditions()->withTrashed()->paginate($conditions['limit']);
if (empty($companies)) {
@ -37,28 +58,30 @@ class StatService extends Service
$groupBy = 'company_id';
$select = [$groupBy, DB::raw('sum(counts) as count')];
$select = [$groupBy, DB::raw('count(*) as counts')];
$model = Order::select($select)->whereIn('company_id', $companies->pluck('id')->toArray())->groupBy($groupBy);
$model = OrderCard::select($select)->whereIn('company_id', $companies->pluck('id')->toArray())->groupBy($groupBy);
$total = $this->orderRepository->setModel($model)->withConditions(['type' => 0])->get()->pluck('count', 'company_id')->toArray();
$total = $this->orderCardRepository->setModel(clone $model)->get()->pluck('counts', 'company_id')->toArray();
$conditions = array_only($conditions, ['starttime', 'endtime']);
$count = $this->orderRepository->setModel($model)->withConditions(array_merge($conditions, ['type' => 0]))
->get()->pluck('count', 'company_id')->toArray();
$counts = $this->orderCardRepository->setModel(clone $model)->withConditions($conditions)->get()->pluck('counts', 'company_id')->toArray();
$renewed_count = $this->orderRepository->setModel($model)->withConditions(array_merge($conditions, ['type' => [1, 2]]))
->get()->pluck('count', 'company_id')->toArray();
$orderRenewalCard = $this->orderRenewalCardRepository->select($select)->whereIn('company_id', $companies->pluck('id')->toArray())->groupBy($groupBy)->get()->pluck('counts', 'company_id')->toArray();
$orderRenewalPackage = $this->orderRenewalPackageCardRepository->select($select)->whereIn('company_id', $companies->pluck('id')->toArray())->groupBy($groupBy)->get()->pluck('counts', 'company_id')->toArray();
$valid_count = $this->orderRepository->setModel($model)->withConditions(array_merge($conditions, ['type' => [1, 2]]))
->get()->pluck('count', 'company_id')->toArray();
$renewed_counts = array_merge_sum($orderRenewalCard, $orderRenewalPackage);
$companies->map(function ($item) use ($total, $count, $renewed_count, $valid_count) {
$valid_counts = $this->orderCardRepository->setModel(clone $model)->whereHas('card', function ($query) {
return $query->whereNotNull('virtual_activated_at')->whereNull('cancelled_at');
})->withConditions($conditions)->get()->pluck('counts', 'company_id')->toArray();
$companies->map(function ($item) use ($total, $counts, $renewed_counts, $valid_counts) {
$item->total = $total[$item['id']] ?? 0;
$item->count = $count[$item['id']] ?? 0;
$item->renewed_count = $renewed_count[$item['id']] ?? 0;
$item->valid_count = $valid_count[$item['id']] ?? 0;
$item->counts = $counts[$item['id']] ?? 0;
$item->renewed_counts = $renewed_counts[$item['id']] ?? 0;
$item->valid_counts = $valid_counts[$item['id']] ?? 0;
});
return $companies;

View File

@ -3,13 +3,14 @@
namespace App\Models\Virtual;
use App\Core\Model;
use App\Models\Card\Card;
use App\Models\Real\OrderCard;
use Illuminate\Database\Eloquent\SoftDeletes;
use App\Models\Virtual\Relations\OrderRelations;
class Order extends Model
{
use SoftDeletes, OrderRelations;
use SoftDeletes;
protected $table = 'virtual_orders';
@ -17,5 +18,18 @@ class Order extends Model
'extends' => 'array',
];
protected $dates = ['order_at'];
public function company()
{
return $this->belongsTo(Company::class, 'company_id', 'id');
}
public function package()
{
return $this->belongsTo(Package::class, 'package_id', 'id');
}
public function cards()
{
return $this->belongsToMany(Card::class, 'virtual_order_cards', 'sim', 'sim');
}
}

View File

@ -12,4 +12,19 @@ class OrderCard extends Model
use SoftDeletes, OrderRelations, HasCompositePrimaryKey;
protected $table = 'virtual_order_cards';
public function renewals()
{
return $this->belongsToMany(Package::class, 'virtual_order_renewal_cards', 'sim', 'package_id', 'sim', 'id');
}
public function renewalPackages()
{
return $this->belongsToMany(Package::class, 'virtual_order_renewal_package_cards', 'sim', 'package_id', 'sim', 'id');
}
public function flowPackages()
{
return $this->belongsToMany(Package::class, 'virtual_order_flows_package_cards', 'sim', 'package_id', 'sim', 'id');
}
}

View File

@ -10,5 +10,5 @@ class OrderRenewalCard extends Model
{
use SoftDeletes, OrderRelations;
protected $table = 'virtual_order_renewal_package_cards';
protected $table = 'virtual_order_renewal_cards';
}

View File

@ -10,5 +10,5 @@ class OrderRenewalPackageCard extends Model
{
use SoftDeletes, OrderRelations;
protected $table = 'virtual_order_renewal_cards';
protected $table = 'virtual_order_renewal_package_cards';
}

View File

@ -24,7 +24,7 @@ trait OrderRelations
return $this->belongsTo(Order::class, 'order_id', 'id');
}
public function cards()
public function card()
{
return $this->belongsTo(Card::class, 'sim', 'sim');
}

View File

@ -121,3 +121,25 @@ if (! function_exists('config_path')) {
return base_path($path);
}
}
if (! function_exists('array_merge_sum')) {
/**
* 合并数组(相同键名相加)
*
* @param array $arr1
* @param array $arr2
* @return void
*/
function array_merge_sum(...$arrays)
{
$array = [];
foreach ($arrays as $item) {
foreach ($item as $key => $value) {
$array[$key] = isset($array[$key]) ? $array[$key] + $value : $value;
}
}
return $array;
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -2,7 +2,7 @@ var CONFIG = {
title: '流量卡BOSS管理平台',
login_background: '/assets/login_background.jpg',
logo_big: '/assets/logo_big.png',
logo_small: '/assets/logo_small.jpg',
logo_small: '/assets/logo_small.png',
url: (window.location.hostname === 'localhost') ? 'http://v.denghaoyuan.cn' : '/'
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -47,7 +47,7 @@
<li class="ui-list">
<div class="ui-list-title"><span class="title-require" v-show="!data">*</span>密码</div>
<div class="ui-list-content">
<div><Input type="password" v-model.trim="params.password"></Input></div>
<div><Input type="password" v-model.trim="params.current_password"></Input></div>
<ul class="common-tips-wraper umar-t5">
<li class="t-title">提示</li>
<li class="t-content">长度在6-18之间只能包含字母数字和下划线</li>

View File

@ -78,6 +78,7 @@ export default {
nickname: '',
mobile: '',
password: '',
current_password: '',
confirm_password: '',
status: 1, // 1:正常 2:禁用
role_id: ''
@ -120,12 +121,12 @@ export default {
}
if (!this.data) {
if (!this.params.password) {
if (!this.params.current_password) {
this.$Message.info('请填写密码');
return;
}
if (!isPsw(this.params.password)) {
if (!isPsw(this.params.current_password)) {
this.$Message.info('密码长度在6-18之间只能包含字母、数字和下划线');
return;
}
@ -135,12 +136,12 @@ export default {
return;
}
if (this.params.password != this.params.confirm_password) {
if (this.params.current_password != this.params.confirm_password) {
this.$Message.info('密码与确认密码填写不一致');
return;
}
this.params.password = md5(this.params.password);
this.params.password = md5(this.params.current_password);
// 添加时
if (this.img_list.length) {
@ -154,8 +155,8 @@ export default {
}
}
} else {
if (this.params.password) {
if (!isPsw(this.params.password)) {
if (this.params.current_password) {
if (!isPsw(this.params.current_password)) {
this.$Message.info('密码长度在6-18之间只能包含字母、数字和下划线');
return;
}
@ -165,12 +166,12 @@ export default {
return;
}
if (this.params.password != this.params.confirm_password) {
if (this.params.current_password != this.params.confirm_password) {
this.$Message.info('密码与确认密码填写不一致');
return;
}
this.params.password = md5(this.params.password);
this.params.password = md5(this.params.current_password);
}
}
@ -183,7 +184,7 @@ export default {
let data = new FormData();
for (let k in this.params) {
if (k != 'confirm_password') {
if (k != 'current_password' || k != 'confirm_password') {
if (this.params[k]) {
data.append(k, this.params[k]);
}

View File

@ -53,7 +53,7 @@ export default {
return;
}
if (!(/[\s\S]{2,32}/.test(this.params.contacts))) {
if (this.params.contacts && !(/[\s\S]{2,32}/.test(this.params.contacts))) {
this.$Message.info('联系人长度在2-32之间');
return;
}

View File

@ -40,7 +40,7 @@
</div>
<div class="ui-list-content">
<div>
<Input type="password" v-model.trim="params.password"></Input>
<Input type="password" v-model.trim="params.current_password"></Input>
</div>
<ul class="common-tips-wraper umar-t5">
<li class="t-title">提示</li>

View File

@ -79,12 +79,12 @@ export default {
}
if (!this.isUpdate) {
if (!this.params.password) {
if (!this.params.current_password) {
this.$Message.info('请填写密码');
return;
}
if (!isPsw(this.params.password)) {
if (!isPsw(this.params.current_password)) {
this.$Message.info('密码长度在6-18之间只能包含字母、数字和下划线');
return;
}
@ -94,15 +94,15 @@ export default {
return;
}
if (this.params.password != this.params.confirm_password) {
if (this.params.current_password != this.params.confirm_password) {
this.$Message.info('密码与确认密码填写不一致');
return;
}
this.params.password = md5(this.params.password);
this.params.password = md5(this.params.current_password);
} else {
if (this.params.password) {
if (!isPsw(this.params.password)) {
if (this.params.current_password) {
if (!isPsw(this.params.current_password)) {
this.$Message.info('密码长度在6-18之间只能包含字母、数字和下划线');
return;
}
@ -112,19 +112,19 @@ export default {
return;
}
if (this.params.password != this.params.confirm_password) {
if (this.params.current_password != this.params.confirm_password) {
this.$Message.info('密码与确认密码填写不一致');
return;
}
this.params.password = md5(this.params.password);
this.params.password = md5(this.params.current_password);
}
}
let data = new FormData();
for (let k in this.params) {
if (k != 'confirm_password') {
if (k != 'current_password' || k != 'confirm_password') {
if (this.params[k]) {
data.append(k, this.params[k]);
}

View File

@ -42,28 +42,28 @@
<li class="ui-list">
<div class="ui-list-title">重置周期</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.reset_months"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="100000" :min="0" :step="1" v-model="params.reset_months"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">套餐周期</div>
<div class="ui-list-content">
<InputNumber :disabled="data ? true : false" :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.service_months"></InputNumber>&nbsp;
<InputNumber :disabled="data ? true : false" :formatter="value => Number(value).toFixed(0)" :max="100000" :min="0" :step="1" v-model="params.service_months"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list" v-if="!type">
<div class="ui-list-title">生效延迟</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.effect_months"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="100000" :min="0" :step="1" v-model="params.effect_months"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list" v-if="!type">
<div class="ui-list-title">服务延长</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.delay_months"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="100000" :min="0" :step="1" v-model="params.delay_months"></InputNumber>&nbsp;
</div>
</li>
@ -84,49 +84,49 @@
<li class="ui-list">
<div class="ui-list-title">套餐流量</div>
<div class="ui-list-content">
<InputNumber :disabled="data ? true : false" :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.flows"></InputNumber>&nbsp;(M)
<InputNumber :disabled="data ? true : false" :formatter="value => Number(value).toFixed(0)" :max="999999" :min="0" :step="1" v-model="params.flows"></InputNumber>&nbsp;(M)
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">套餐语音</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.voices"></InputNumber>&nbsp;分钟
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="999999" :min="0" :step="1" v-model="params.voices"></InputNumber>&nbsp;分钟
</div>
</li>
<li class="ui-list" v-if="params.has_messages">
<div class="ui-list-title">套餐短信</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="99999" :min="0" :step="1" v-model="params.messages"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(0)" :max="999999" :min="0" :step="1" v-model="params.messages"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">套餐成本价:</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="99999" :min="0" :step="0.01" v-model="params.cost_price"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="100000" :min="0" :step="0.01" v-model="params.cost_price"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">套餐指导价:</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="99999" :min="0" :step="0.01" v-model="params.guide_price"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="100000" :min="0" :step="0.01" v-model="params.guide_price"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">续费成本价:</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="99999" :min="0" :step="0.01" v-model="params.renewal_cost_price"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="100000" :min="0" :step="0.01" v-model="params.renewal_cost_price"></InputNumber>&nbsp;
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">续费指导价:</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="99999" :min="0" :step="0.01" v-model="params.renewal_guide_price"></InputNumber>&nbsp;
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="100000" :min="0" :step="0.01" v-model="params.renewal_guide_price"></InputNumber>&nbsp;
</div>
</li>

View File

@ -27,14 +27,14 @@
<li class="ui-list">
<div class="ui-list-title">基础价格</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="10000" :min="0" :step="0.1" v-model.trim="params.base_price"></InputNumber>
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="100000" :min="0" :step="0.1" v-model.trim="params.base_price"></InputNumber>
</div>
</li>
<li class="ui-list">
<div class="ui-list-title">续费价格</div>
<div class="ui-list-content">
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="10000" :min="0" :step="0.1" v-model.trim="params.renewal_price"></InputNumber>
<InputNumber :formatter="value => Number(value).toFixed(2)" :max="100000" :min="0" :step="0.1" v-model.trim="params.renewal_price"></InputNumber>
</div>
</li>

View File

@ -210,9 +210,17 @@ export default {
return;
}
let companies = [];
if (this.completeCompaniesPinyinEngine) {
this.companies = this.completeCompaniesPinyinEngine.query(value);
companies = this.completeCompaniesPinyinEngine.query(value);
}
companies = this.completeCompanies.filter(function(item) {
return (item.name.toLowerCase().indexOf(value.toLowerCase()) !== -1) || (companies.find(element => { return element.id === item.id; }));
});
this.companies = companies;
},
handleSearchPackages(value) {
this.params.package_id = value;

View File

@ -27,18 +27,18 @@ export default {
},
{
title: '新增用户数',
key: 'count',
key: 'counts',
width: 120
},
{
title: '续费用户数',
key: 'renewed_count',
key: 'renewed_counts',
width: 120
},
{
title: '有效用户数',
key: 'valid_count',
width: 120
title: '服务期内用户数',
key: 'valid_counts',
width: 200
}
]
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -2,7 +2,7 @@ var CONFIG = {
title: '流量卡BOSS管理平台',
login_background: '/assets/login_background.jpg',
logo_big: '/assets/logo_big.png',
logo_small: '/assets/logo_small.jpg',
logo_small: '/assets/logo_small.png',
url: (window.location.hostname === 'localhost') ? 'http://v.denghaoyuan.cn' : '/'
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -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-309b8638.1194349a.css rel=prefetch><link href=/js/chunk-00ae0766.8f2466c0.js rel=prefetch><link href=/js/chunk-309b8638.a7afad3e.js rel=prefetch><link href=/css/app.36043160.css rel=preload as=style><link href=/css/chunk-vendors.3c3b2e85.css rel=preload as=style><link href=/js/app.28aa670f.js rel=preload as=script><link href=/js/chunk-vendors.02a4e5bc.js rel=preload as=script><link href=/css/chunk-vendors.3c3b2e85.css rel=stylesheet><link href=/css/app.36043160.css rel=stylesheet></head><body><noscript><strong>很抱歉如果没有启用JavaScript程序不能正常工作若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.02a4e5bc.js></script><script src=/js/app.28aa670f.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-309b8638.1194349a.css rel=prefetch><link href=/js/chunk-00ae0766.8f2466c0.js rel=prefetch><link href=/js/chunk-309b8638.49263faf.js rel=prefetch><link href=/css/app.36043160.css rel=preload as=style><link href=/css/chunk-vendors.3c3b2e85.css rel=preload as=style><link href=/js/app.4be850df.js rel=preload as=script><link href=/js/chunk-vendors.02a4e5bc.js rel=preload as=script><link href=/css/chunk-vendors.3c3b2e85.css rel=stylesheet><link href=/css/app.36043160.css rel=stylesheet></head><body><noscript><strong>很抱歉如果没有启用JavaScript程序不能正常工作若要继续使用请启用它。</strong></noscript><div id=app></div><script src=/js/chunk-vendors.02a4e5bc.js></script><script src=/js/app.4be850df.js></script></body></html>