- 标题:{{ item.course.title }} {{ model_info(item.course.model) }}
- 来源:{{ source_type_info(item.source_type) }} 期限:{{ date('Y-m-d',item.expiry_time) }}
+ 标题:{{ item.course.title }}
+
+ 类型:{{ model_info(item.course.model) }}
+ 来源:{{ source_type_info(item.source_type) }}
+ {% if item.expiry_time > 0 %}
+ 期限:{{ date('Y-m-d',item.expiry_time) }}
+ {% endif %}
+
|
用时:{{ item.duration|duration }}
diff --git a/app/Http/Home/Views/user/console/favorites.volt b/app/Http/Home/Views/user/console/favorites.volt
index 768f9506..b66abc28 100644
--- a/app/Http/Home/Views/user/console/favorites.volt
+++ b/app/Http/Home/Views/user/console/favorites.volt
@@ -17,14 +17,12 @@
-
课程 |
学员 |
- 收藏 |
评分 |
操作 |
@@ -34,9 +32,11 @@
{% set course_url = url({'for':'home.course.show','id':item.id}) %}
{% set favorite_url = url({'for':'home.course.favorite','id':item.id}) %}
- {{ item.title }} {{ model_info(item.model) }} |
+
+ {{ item.title }}
+ {{ model_info(item.model) }}
+ |
{{ item.user_count }} |
- {{ item.favorite_count }} |
{{ "%0.1f"|format(item.rating) }} |
diff --git a/app/Http/Home/Views/user/console/groups_joined.volt b/app/Http/Home/Views/user/console/groups_joined.volt
index 624da3e9..ec46c2b5 100644
--- a/app/Http/Home/Views/user/console/groups_joined.volt
+++ b/app/Http/Home/Views/user/console/groups_joined.volt
@@ -4,11 +4,13 @@
+
名称 |
+ 类型 |
组长 |
成员 |
操作 |
@@ -20,7 +22,8 @@
{% set owner_url = url({'for':'home.user.show','id':item.owner.id}) %}
{% set delete_url = url({'for':'home.im.quit_group','id':item.id}) %}
- {{ item.name }} {{ type_info(item.type) }} |
+ {{ item.name }} |
+ {{ type_info(item.type) }} |
{{ item.owner.name }} |
{{ item.user_count }} |
diff --git a/app/Http/Home/Views/user/console/groups_owned.volt b/app/Http/Home/Views/user/console/groups_owned.volt
index 373a3874..ed8b90b1 100644
--- a/app/Http/Home/Views/user/console/groups_owned.volt
+++ b/app/Http/Home/Views/user/console/groups_owned.volt
@@ -4,11 +4,13 @@
+
名称 |
+ 类型 |
成员 |
讨论 |
操作 |
@@ -19,7 +21,8 @@
{% set edit_url = url({'for':'home.igm.edit','id':item.id}) %}
{% set users_url = url({'for':'home.igm.users','id':item.id}) %}
- {{ item.name }} {{ type_info(item.type) }} |
+ {{ item.name }} |
+ {{ type_info(item.type) }} |
{{ item.user_count }} |
{{ item.msg_count }} |
diff --git a/app/Http/Home/Views/user/console/orders.volt b/app/Http/Home/Views/user/console/orders.volt
index c5c91c51..d43233e9 100644
--- a/app/Http/Home/Views/user/console/orders.volt
+++ b/app/Http/Home/Views/user/console/orders.volt
@@ -25,8 +25,11 @@
{% set order_info_url = url({'for':'home.order.info'},{'sn':item.sn}) %}
{{ item.subject }}
diff --git a/app/Http/Home/Views/user/console/point_history.volt b/app/Http/Home/Views/user/console/point_history.volt
index b5a3a58e..a9cc481b 100644
--- a/app/Http/Home/Views/user/console/point_history.volt
+++ b/app/Http/Home/Views/user/console/point_history.volt
@@ -12,7 +12,7 @@
积分记录
{% if pager.total_pages > 0 %}
-
+
diff --git a/app/Http/Home/Views/user/show.volt b/app/Http/Home/Views/user/show.volt
index f8c616e4..aa0eb43e 100644
--- a/app/Http/Home/Views/user/show.volt
+++ b/app/Http/Home/Views/user/show.volt
@@ -9,6 +9,7 @@
{% set qrcode_url = url({'for':'home.qrcode'},{'text':full_user_url}) %}
{% set user.area = user.area ? user.area : '火星' %}
{% set user.about = user.about ? user.about : '这个家伙很懒,什么都没留下!' %}
+ {% set avatar_class = user.vip == 1 ? 'avatar vip' : 'avatar' %}
@@ -25,8 +26,7 @@
- {{ vip_info(user.vip) }}
-
+
diff --git a/app/Library/Helper.php b/app/Library/Helper.php
index 47363e5c..00b65823 100644
--- a/app/Library/Helper.php
+++ b/app/Library/Helper.php
@@ -183,25 +183,64 @@ function kg_config($path, $defaultValue = null)
return $config->path($path, $defaultValue);
}
-
/**
- * 获取默认头像路径
+ * 获取默认用户头像路径
*
* @return string
*/
-function kg_default_avatar_path()
+function kg_default_user_avatar_path()
{
- return '/img/avatar/default.png';
+ return '/img/default/user_avatar.png';
}
/**
- * 获取默认封面路径
+ * 获取默认群组头像路径
*
* @return string
*/
-function kg_default_cover_path()
+function kg_default_group_avatar_path()
{
- return '/img/cover/default.png';
+ return '/img/default/group_avatar.png';
+}
+
+/**
+ * 获取默认课程封面路径
+ *
+ * @return string
+ */
+function kg_default_course_cover_path()
+{
+ return '/img/default/course_cover.png';
+}
+
+/**
+ * 获取默认课程封面路径
+ *
+ * @return string
+ */
+function kg_default_package_cover_path()
+{
+ return '/img/default/package_cover.png';
+}
+
+/**
+ * 获取默认会员封面路径
+ *
+ * @return string
+ */
+function kg_default_vip_cover_path()
+{
+ return '/img/default/vip_cover.png';
+}
+
+/**
+ * 获取默认礼品封面路径
+ *
+ * @return string
+ */
+function kg_default_gift_cover_path()
+{
+ return '/img/default/gift_cover.png';
}
/**
@@ -237,41 +276,97 @@ function kg_cos_img_url($path, $style = null)
}
/**
- * 获取头像URL
+ * 获取用户头像URL
*
* @param string $path
* @param string $style
* @return string
*/
-function kg_cos_avatar_url($path, $style = null)
+function kg_cos_user_avatar_url($path, $style = null)
{
- $path = $path ?: kg_default_avatar_path();
+ $path = $path ?: kg_default_user_avatar_path();
return kg_cos_img_url($path, $style);
}
/**
- * 获取封面URL
+ * 获取群组头像URL
*
* @param string $path
* @param string $style
* @return string
*/
-function kg_cos_cover_url($path, $style = null)
+function kg_cos_group_avatar_url($path, $style = null)
{
- $path = $path ?: kg_default_cover_path();
+ $path = $path ?: kg_default_group_avatar_path();
return kg_cos_img_url($path, $style);
}
/**
- * 获取幻灯片URL
+ * 获取课程封面URL
*
* @param string $path
* @param string $style
* @return string
*/
-function kg_cos_slide_url($path, $style = null)
+function kg_cos_course_cover_url($path, $style = null)
+{
+ $path = $path ?: kg_default_course_cover_path();
+
+ return kg_cos_img_url($path, $style);
+}
+
+/**
+ * 获取套餐封面URL
+ *
+ * @param string $path
+ * @param string $style
+ * @return string
+ */
+function kg_cos_package_cover_url($path, $style = null)
+{
+ $path = $path ?: kg_default_package_cover_path();
+
+ return kg_cos_img_url($path, $style);
+}
+
+/**
+ * 获取会员封面URL
+ *
+ * @param string $path
+ * @param string $style
+ * @return string
+ */
+function kg_cos_vip_cover_url($path, $style = null)
+{
+ $path = $path ?: kg_default_vip_cover_path();
+
+ return kg_cos_img_url($path, $style);
+}
+
+/**
+ * 获取礼品封面URL
+ *
+ * @param string $path
+ * @param string $style
+ * @return string
+ */
+function kg_cos_gift_cover_url($path, $style = null)
+{
+ $path = $path ?: kg_default_gift_cover_path();
+
+ return kg_cos_img_url($path, $style);
+}
+
+/**
+ * 获取轮播封面URL
+ *
+ * @param string $path
+ * @param string $style
+ * @return string
+ */
+function kg_cos_slide_cover_url($path, $style = null)
{
return kg_cos_img_url($path, $style);
}
diff --git a/app/Models/Category.php b/app/Models/Category.php
index c172ae83..0529c155 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -61,7 +61,7 @@ class Category extends Model
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 发布标识
diff --git a/app/Models/Chapter.php b/app/Models/Chapter.php
index 0c39954e..9e59f89e 100644
--- a/app/Models/Chapter.php
+++ b/app/Models/Chapter.php
@@ -95,7 +95,7 @@ class Chapter extends Model
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 免费标识
@@ -116,7 +116,7 @@ class Chapter extends Model
*
* @var string|array
*/
- public $attrs = '';
+ public $attrs = [];
/**
* 发布标识
@@ -214,7 +214,7 @@ class Chapter extends Model
$this->attrs = $this->_read_attrs;
}
}
- if (is_array($this->attrs) && !empty($this->attrs)) {
+ if (is_array($this->attrs)) {
$this->attrs = kg_json_encode($this->attrs);
}
}
@@ -224,7 +224,7 @@ class Chapter extends Model
public function beforeUpdate()
{
- if (is_array($this->attrs) && !empty($this->attrs)) {
+ if (is_array($this->attrs)) {
$this->attrs = kg_json_encode($this->attrs);
}
@@ -244,7 +244,7 @@ class Chapter extends Model
public function afterFetch()
{
- if (is_string($this->attrs) && !empty($this->attrs)) {
+ if (is_string($this->attrs)) {
$this->attrs = json_decode($this->attrs, true);
}
}
diff --git a/app/Models/ChapterVod.php b/app/Models/ChapterVod.php
index 52b21b8a..53166d64 100644
--- a/app/Models/ChapterVod.php
+++ b/app/Models/ChapterVod.php
@@ -40,7 +40,7 @@ class ChapterVod extends Model
*
* @var array|string
*/
- public $file_transcode = '';
+ public $file_transcode = [];
/**
* 创建时间
@@ -63,7 +63,7 @@ class ChapterVod extends Model
public function beforeCreate()
{
- if (is_array($this->file_transcode) && !empty($this->file_transcode)) {
+ if (is_array($this->file_transcode)) {
$this->file_transcode = kg_json_encode($this->file_transcode);
}
@@ -72,7 +72,7 @@ class ChapterVod extends Model
public function beforeUpdate()
{
- if (is_array($this->file_transcode) && !empty($this->file_transcode)) {
+ if (is_array($this->file_transcode)) {
$this->file_transcode = kg_json_encode($this->file_transcode);
}
@@ -82,7 +82,7 @@ class ChapterVod extends Model
public function afterFetch()
{
if (!empty($this->file_id)) {
- if (!empty($this->file_transcode)) {
+ if (is_string($this->file_transcode) && !empty($this->file_transcode)) {
$this->file_transcode = json_decode($this->file_transcode, true);
} else {
$this->file_transcode = $this->getFileTranscode($this->file_id);
diff --git a/app/Models/Course.php b/app/Models/Course.php
index de7e38fd..b1ef8060 100644
--- a/app/Models/Course.php
+++ b/app/Models/Course.php
@@ -171,7 +171,7 @@ class Course extends Model
*
* @var string|array
*/
- public $attrs = '';
+ public $attrs = [];
/**
* 推荐标识
@@ -288,7 +288,7 @@ class Course extends Model
}
}
- if (is_array($this->attrs) && !empty($this->attrs)) {
+ if (is_array($this->attrs)) {
$this->attrs = kg_json_encode($this->attrs);
}
@@ -315,7 +315,7 @@ class Course extends Model
$this->cover = self::getCoverPath($this->cover);
}
- if (is_array($this->attrs) && !empty($this->attrs)) {
+ if (is_array($this->attrs)) {
$this->attrs = kg_json_encode($this->attrs);
}
@@ -346,10 +346,10 @@ class Course extends Model
$this->score = (float)$this->score;
if (!Text::startsWith($this->cover, 'http')) {
- $this->cover = kg_cos_cover_url($this->cover);
+ $this->cover = kg_cos_course_cover_url($this->cover);
}
- if (is_string($this->attrs) && !empty($this->attrs)) {
+ if (is_string($this->attrs)) {
$this->attrs = json_decode($this->attrs, true);
}
}
diff --git a/app/Models/FlashSale.php b/app/Models/FlashSale.php
new file mode 100644
index 00000000..ec226754
--- /dev/null
+++ b/app/Models/FlashSale.php
@@ -0,0 +1,199 @@
+addBehavior(
+ new SoftDelete([
+ 'field' => 'deleted',
+ 'value' => 1,
+ ])
+ );
+ }
+
+ public function beforeCreate()
+ {
+ if (is_array($this->item_info)) {
+ $this->item_info = kg_json_encode($this->item_info);
+ }
+
+ if (is_array($this->schedules)) {
+ $this->schedules = kg_json_encode($this->schedules);
+ }
+
+ $this->create_time = time();
+ }
+
+ public function beforeUpdate()
+ {
+ if (is_array($this->item_info)) {
+ $this->item_info = kg_json_encode($this->item_info);
+ }
+
+ if (is_array($this->schedules)) {
+ $this->schedules = kg_json_encode($this->schedules);
+ }
+
+ if ($this->deleted == 1) {
+ $this->published = 0;
+ }
+
+ $this->update_time = time();
+ }
+
+ public function afterCreate()
+ {
+ $cache = new MaxFlashSaleIdCache();
+
+ $cache->rebuild();
+ }
+
+ public function afterFetch()
+ {
+ if (is_string($this->item_info)) {
+ $this->item_info = json_decode($this->item_info, true);
+ }
+
+ if (is_string($this->schedules)) {
+ $this->schedules = json_decode($this->schedules, true);
+ }
+ }
+
+ public static function itemTypes()
+ {
+ return [
+ self::ITEM_COURSE => '课程',
+ self::ITEM_PACKAGE => '套餐',
+ self::ITEM_VIP => '会员',
+ ];
+ }
+
+ public static function schedules()
+ {
+ $result = [];
+
+ foreach (range(8, 20, 2) as $hour) {
+ $result[] = [
+ 'name' => sprintf('%02d点', $hour),
+ 'hour' => sprintf('%02d', $hour),
+ 'start_time' => sprintf('%02d:%02d:%02d', $hour, 0, 0),
+ 'end_time' => sprintf('%02d:%02d:%02d', $hour + 1, 59, 59)
+ ];
+ }
+
+ return $result;
+ }
+
+}
\ No newline at end of file
diff --git a/app/Models/Help.php b/app/Models/Help.php
index 403cc349..af462f4c 100644
--- a/app/Models/Help.php
+++ b/app/Models/Help.php
@@ -41,7 +41,7 @@ class Help extends Model
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 发布标识
diff --git a/app/Models/ImFriendGroup.php b/app/Models/ImFriendGroup.php
index 7af9caca..35890cb0 100644
--- a/app/Models/ImFriendGroup.php
+++ b/app/Models/ImFriendGroup.php
@@ -26,7 +26,7 @@ class ImFriendGroup extends Model
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 状态
diff --git a/app/Models/ImGroup.php b/app/Models/ImGroup.php
index c18fa829..209d6d77 100644
--- a/app/Models/ImGroup.php
+++ b/app/Models/ImGroup.php
@@ -164,7 +164,7 @@ class ImGroup extends Model
public function afterFetch()
{
if (!Text::startsWith($this->avatar, 'http')) {
- $this->avatar = kg_cos_avatar_url($this->avatar);
+ $this->avatar = kg_cos_group_avatar_url($this->avatar);
}
}
diff --git a/app/Models/ImGroupUser.php b/app/Models/ImGroupUser.php
index 0131532a..5506b620 100644
--- a/app/Models/ImGroupUser.php
+++ b/app/Models/ImGroupUser.php
@@ -31,7 +31,7 @@ class ImGroupUser extends Model
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 创建时间
diff --git a/app/Models/ImUser.php b/app/Models/ImUser.php
index 8a7bf9dc..f3b9cb63 100644
--- a/app/Models/ImUser.php
+++ b/app/Models/ImUser.php
@@ -133,7 +133,7 @@ class ImUser extends Model
public function afterFetch()
{
if (!Text::startsWith($this->avatar, 'http')) {
- $this->avatar = kg_cos_avatar_url($this->avatar);
+ $this->avatar = kg_cos_user_avatar_url($this->avatar);
}
}
diff --git a/app/Models/Nav.php b/app/Models/Nav.php
index 5370784f..6807e66d 100644
--- a/app/Models/Nav.php
+++ b/app/Models/Nav.php
@@ -80,7 +80,7 @@ class Nav extends Model
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 发布标识
diff --git a/app/Models/Order.php b/app/Models/Order.php
index 8a82513b..161ed023 100644
--- a/app/Models/Order.php
+++ b/app/Models/Order.php
@@ -16,6 +16,9 @@ class Order extends Model
const ITEM_VIP = 4; // 会员
const ITEM_TEST = 99; // 测试
+ const PROMOTION_FLASH_SALE = 1; // 限时秒杀
+ const PROMOTION_DISCOUNT = 2; // 限时折扣
+
/**
* 状态类型
*/
@@ -79,7 +82,28 @@ class Order extends Model
*
* @var string|array
*/
- public $item_info = '';
+ public $item_info = [];
+
+ /**
+ * 促销编号
+ *
+ * @var int
+ */
+ public $promotion_id = 0;
+
+ /**
+ * 促销类型
+ *
+ * @var int
+ */
+ public $promotion_type = 0;
+
+ /**
+ * 促销信息
+ *
+ * @var string|array
+ */
+ public $promotion_info = [];
/**
* 终端类型
@@ -146,19 +170,27 @@ class Order extends Model
{
$this->sn = date('YmdHis') . rand(1000, 9999);
- if (is_array($this->item_info) && !empty($this->item_info)) {
+ if (is_array($this->item_info)) {
$this->item_info = kg_json_encode($this->item_info);
}
+ if (is_array($this->promotion_info)) {
+ $this->promotion_info = kg_json_encode($this->promotion_info);
+ }
+
$this->create_time = time();
}
public function beforeUpdate()
{
- if (is_array($this->item_info) && !empty($this->item_info)) {
+ if (is_array($this->item_info)) {
$this->item_info = kg_json_encode($this->item_info);
}
+ if (is_array($this->promotion_info)) {
+ $this->promotion_info = kg_json_encode($this->promotion_info);
+ }
+
$this->update_time = time();
}
@@ -176,9 +208,13 @@ class Order extends Model
{
$this->amount = (float)$this->amount;
- if (is_string($this->item_info) && !empty($this->item_info)) {
+ if (is_string($this->item_info)) {
$this->item_info = json_decode($this->item_info, true);
}
+
+ if (is_string($this->promotion_info)) {
+ $this->promotion_info = json_decode($this->promotion_info, true);
+ }
}
public static function itemTypes()
@@ -192,6 +228,14 @@ class Order extends Model
];
}
+ public static function promotionTypes()
+ {
+ return [
+ self::PROMOTION_FLASH_SALE => '限时秒杀',
+ self::PROMOTION_DISCOUNT => '限时折扣',
+ ];
+ }
+
public static function statusTypes()
{
return [
diff --git a/app/Models/Package.php b/app/Models/Package.php
index ff5ba3f5..a93017ee 100644
--- a/app/Models/Package.php
+++ b/app/Models/Package.php
@@ -4,6 +4,7 @@ namespace App\Models;
use App\Caches\MaxPackageId as MaxPackageIdCache;
use Phalcon\Mvc\Model\Behavior\SoftDelete;
+use Phalcon\Text;
class Package extends Model
{
@@ -22,6 +23,13 @@ class Package extends Model
*/
public $title = '';
+ /**
+ * 封面
+ *
+ * @var string
+ */
+ public $cover = '';
+
/**
* 简介
*
@@ -97,11 +105,21 @@ class Package extends Model
public function beforeCreate()
{
+ if (empty($this->cover)) {
+ $this->cover = kg_default_cover_path();
+ } elseif (Text::startsWith($this->cover, 'http')) {
+ $this->cover = self::getCoverPath($this->cover);
+ }
+
$this->create_time = time();
}
public function beforeUpdate()
{
+ if (Text::startsWith($this->cover, 'http')) {
+ $this->cover = self::getCoverPath($this->cover);
+ }
+
if ($this->deleted == 1) {
$this->published = 0;
}
@@ -118,8 +136,21 @@ class Package extends Model
public function afterFetch()
{
+ if (!Text::startsWith($this->cover, 'http')) {
+ $this->cover = kg_cos_package_cover_url($this->cover);
+ }
+
$this->market_price = (float)$this->market_price;
$this->vip_price = (float)$this->vip_price;
}
+ public static function getCoverPath($url)
+ {
+ if (Text::startsWith($url, 'http')) {
+ return parse_url($url, PHP_URL_PATH);
+ }
+
+ return $url;
+ }
+
}
\ No newline at end of file
diff --git a/app/Models/PointGift.php b/app/Models/PointGift.php
index f1c8bddf..61f27896 100644
--- a/app/Models/PointGift.php
+++ b/app/Models/PointGift.php
@@ -14,7 +14,6 @@ class PointGift extends Model
*/
const TYPE_COURSE = 1; // 课程
const TYPE_GOODS = 2; // 商品
- const TYPE_CASH = 3; // 现金
/**
* 课程扩展属性
@@ -38,13 +37,6 @@ class PointGift extends Model
'url' => '',
];
- /**
- * 现金扩展属性
- *
- * @var array
- */
- protected $_cash_attrs = ['amount' => 0];
-
/**
* 主键编号
*
@@ -167,12 +159,10 @@ class PointGift extends Model
$this->attrs = $this->_course_attrs;
} elseif ($this->type == self::TYPE_GOODS) {
$this->attrs = $this->_goods_attrs;
- } elseif ($this->type == self::TYPE_CASH) {
- $this->attrs = $this->_cash_attrs;
}
}
- if (is_array($this->attrs) && !empty($this->attrs)) {
+ if (is_array($this->attrs)) {
$this->attrs = kg_json_encode($this->attrs);
}
@@ -191,7 +181,7 @@ class PointGift extends Model
$this->cover = self::getCoverPath($this->cover);
}
- if (is_array($this->attrs) && !empty($this->attrs)) {
+ if (is_array($this->attrs)) {
$this->attrs = kg_json_encode($this->attrs);
}
@@ -212,10 +202,10 @@ class PointGift extends Model
public function afterFetch()
{
if (!Text::startsWith($this->cover, 'http')) {
- $this->cover = kg_cos_cover_url($this->cover);
+ $this->cover = kg_cos_gift_cover_url($this->cover);
}
- if (is_string($this->attrs) && !empty($this->attrs)) {
+ if (is_string($this->attrs)) {
$this->attrs = json_decode($this->attrs, true);
}
}
@@ -234,7 +224,6 @@ class PointGift extends Model
return [
self::TYPE_COURSE => '课程',
self::TYPE_GOODS => '商品',
- self::TYPE_CASH => '现金',
];
}
diff --git a/app/Models/PointRedeem.php b/app/Models/PointRedeem.php
index ddabb505..6f69756e 100644
--- a/app/Models/PointRedeem.php
+++ b/app/Models/PointRedeem.php
@@ -117,8 +117,6 @@ class PointRedeem extends Model
public function beforeCreate()
{
- $this->status = self::STATUS_PENDING;
-
$this->create_time = time();
}
diff --git a/app/Models/Role.php b/app/Models/Role.php
index 7f0287e6..3bc132e2 100644
--- a/app/Models/Role.php
+++ b/app/Models/Role.php
@@ -54,7 +54,7 @@ class Role extends Model
*
* @var array|string
*/
- public $routes = '';
+ public $routes = [];
/**
* 删除标识
@@ -103,7 +103,7 @@ class Role extends Model
public function beforeCreate()
{
- if (is_array($this->routes) && !empty($this->routes)) {
+ if (is_array($this->routes)) {
$this->routes = kg_json_encode($this->routes);
}
@@ -112,7 +112,7 @@ class Role extends Model
public function beforeUpdate()
{
- if (is_array($this->routes) && !empty($this->routes)) {
+ if (is_array($this->routes)) {
$this->routes = kg_json_encode($this->routes);
}
@@ -121,7 +121,7 @@ class Role extends Model
public function afterFetch()
{
- if (is_string($this->routes) && !empty($this->routes)) {
+ if (is_string($this->routes)) {
$this->routes = json_decode($this->routes, true);
}
}
diff --git a/app/Models/Slide.php b/app/Models/Slide.php
index 4d72b708..908cac3d 100644
--- a/app/Models/Slide.php
+++ b/app/Models/Slide.php
@@ -58,18 +58,25 @@ class Slide extends Model
public $platform = 0;
/**
- * 目标
+ * 目标类型
*
* @var int
*/
public $target = 0;
+ /**
+ * 目标属性
+ *
+ * @var array
+ */
+ public $target_attrs = [];
+
/**
* 优先级
*
* @var int
*/
- public $priority = 0;
+ public $priority = 100;
/**
* 发布标识
@@ -124,6 +131,10 @@ class Slide extends Model
$this->cover = self::getCoverPath($this->cover);
}
+ if (is_array($this->target_attrs)) {
+ $this->target_attrs = kg_json_encode($this->target_attrs);
+ }
+
$this->create_time = time();
}
@@ -133,6 +144,10 @@ class Slide extends Model
$this->cover = self::getCoverPath($this->cover);
}
+ if (is_array($this->target_attrs)) {
+ $this->target_attrs = kg_json_encode($this->target_attrs);
+ }
+
if ($this->deleted == 1) {
$this->published = 0;
}
@@ -143,7 +158,11 @@ class Slide extends Model
public function afterFetch()
{
if (!Text::startsWith($this->cover, 'http')) {
- $this->cover = kg_cos_slide_url($this->cover);
+ $this->cover = kg_cos_slide_cover_url($this->cover);
+ }
+
+ if (is_string($this->target_attrs)) {
+ $this->target_attrs = json_decode($this->target_attrs, true);
}
}
diff --git a/app/Models/Task.php b/app/Models/Task.php
index 73fb4a75..cc1f51ab 100644
--- a/app/Models/Task.php
+++ b/app/Models/Task.php
@@ -75,7 +75,7 @@ class Task extends Model
*
* @var string|array
*/
- public $item_info = '';
+ public $item_info = [];
/**
* 优先级
@@ -126,7 +126,7 @@ class Task extends Model
public function beforeCreate()
{
- if (is_array($this->item_info) && !empty($this->item_info)) {
+ if (is_array($this->item_info)) {
$this->item_info = kg_json_encode($this->item_info);
}
@@ -135,7 +135,7 @@ class Task extends Model
public function beforeUpdate()
{
- if (is_array($this->item_info) && !empty($this->item_info)) {
+ if (is_array($this->item_info)) {
$this->item_info = kg_json_encode($this->item_info);
}
@@ -144,7 +144,7 @@ class Task extends Model
public function afterFetch()
{
- if (is_string($this->item_info) && !empty($this->item_info)) {
+ if (is_string($this->item_info)) {
$this->item_info = json_decode($this->item_info, true);
}
}
diff --git a/app/Models/Upload.php b/app/Models/Upload.php
index ed86f76e..46b06b8c 100644
--- a/app/Models/Upload.php
+++ b/app/Models/Upload.php
@@ -17,6 +17,7 @@ class Upload extends Model
const TYPE_RESOURCE = 4; // 课件资源
const TYPE_IM_IMG = 5; // IM图片
const TYPE_IM_FILE = 6; // IM文件
+ const TYPE_DEFAULT_IMG = 99; // 默认图片
/**
* 主键编号
diff --git a/app/Models/User.php b/app/Models/User.php
index f4d7703c..60601a19 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -226,7 +226,7 @@ class User extends Model
public function afterFetch()
{
if (!Text::startsWith($this->avatar, 'http')) {
- $this->avatar = kg_cos_avatar_url($this->avatar);
+ $this->avatar = kg_cos_user_avatar_url($this->avatar);
}
}
diff --git a/app/Models/Vip.php b/app/Models/Vip.php
index 5f998438..d9043fd3 100644
--- a/app/Models/Vip.php
+++ b/app/Models/Vip.php
@@ -3,6 +3,7 @@
namespace App\Models;
use Phalcon\Mvc\Model\Behavior\SoftDelete;
+use Phalcon\Text;
class Vip extends Model
{
@@ -21,6 +22,13 @@ class Vip extends Model
*/
public $title = '';
+ /**
+ * 封面
+ *
+ * @var string
+ */
+ public $cover = '';
+
/**
* 期限(月)
*
@@ -75,17 +83,40 @@ class Vip extends Model
public function beforeCreate()
{
+ if (empty($this->cover)) {
+ $this->cover = kg_default_vip_cover_path();
+ } elseif (Text::startsWith($this->cover, 'http')) {
+ $this->cover = self::getCoverPath($this->cover);
+ }
+
$this->create_time = time();
}
public function beforeUpdate()
{
+ if (Text::startsWith($this->cover, 'http')) {
+ $this->cover = self::getCoverPath($this->cover);
+ }
+
$this->update_time = time();
}
public function afterFetch()
{
+ if (!Text::startsWith($this->cover, 'http')) {
+ $this->cover = kg_cos_vip_cover_url($this->cover);
+ }
+
$this->price = (float)$this->price;
}
+ public static function getCoverPath($url)
+ {
+ if (Text::startsWith($url, 'http')) {
+ return parse_url($url, PHP_URL_PATH);
+ }
+
+ return $url;
+ }
+
}
\ No newline at end of file
diff --git a/app/Providers/Volt.php b/app/Providers/Volt.php
index eefae06a..40ebfa7f 100644
--- a/app/Providers/Volt.php
+++ b/app/Providers/Volt.php
@@ -58,6 +58,14 @@ class Volt extends Provider
return 'kg_substr(' . $resolvedArgs . ')';
});
+ $compiler->addFunction('array_object', function ($resolvedArgs) {
+ return 'kg_array_object(' . $resolvedArgs . ')';
+ });
+
+ $compiler->addFunction('object_array', function ($resolvedArgs) {
+ return 'kg_object_array(' . $resolvedArgs . ')';
+ });
+
$compiler->addFilter('duration', function ($resolvedArgs) {
return 'kg_duration(' . $resolvedArgs . ')';
});
diff --git a/app/Repos/Course.php b/app/Repos/Course.php
index f0ed2533..42260b89 100644
--- a/app/Repos/Course.php
+++ b/app/Repos/Course.php
@@ -117,6 +117,21 @@ class Course extends Repository
return $pager->paginate();
}
+ /**
+ * @param array $where
+ * @param string $sort
+ * @return ResultsetInterface|Resultset|CourseModel[]
+ */
+ public function findAll($where = [], $sort = 'latest')
+ {
+ /**
+ * 一个偷懒的实现,适用于中小体量数据
+ */
+ $paginate = $this->paginate($where, $sort, 1, 10000);
+
+ return $paginate->items;
+ }
+
/**
* @param int $id
* @return CourseModel|Model|bool
diff --git a/app/Repos/FlashSale.php b/app/Repos/FlashSale.php
new file mode 100644
index 00000000..92a7b9d5
--- /dev/null
+++ b/app/Repos/FlashSale.php
@@ -0,0 +1,115 @@
+modelsManager->createBuilder();
+
+ $builder->from(FlashSaleModel::class);
+
+ $builder->where('1 = 1');
+
+ if (!empty($where['id'])) {
+ $builder->andWhere('id = :id:', ['id' => $where['id']]);
+ }
+
+ if (!empty($where['item_id'])) {
+ $builder->andWhere('item_id = :item_id:', ['item_id' => $where['item_id']]);
+ }
+
+ if (!empty($where['item_type'])) {
+ $builder->andWhere('item_type = :item_type:', ['item_type' => $where['item_type']]);
+ }
+
+ if (isset($where['published'])) {
+ $builder->andWhere('published = :published:', ['published' => $where['published']]);
+ }
+
+ if (isset($where['deleted'])) {
+ $builder->andWhere('deleted = :deleted:', ['deleted' => $where['deleted']]);
+ }
+
+ $now = time();
+
+ if (!empty($where['status'])) {
+ switch ($where['status']) {
+ case 'pending':
+ $builder->andWhere('start_time > :start_time:', ['start_time' => $now]);
+ break;
+ case 'finished':
+ $builder->andWhere('end_time < :end_time:', ['end_time' => $now]);
+ break;
+ case 'active':
+ $builder->andWhere('start_time < :start_time:', ['start_time' => $now]);
+ $builder->andWhere('end_time > :end_time:', ['end_time' => $now]);
+ break;
+ }
+ }
+
+ switch ($sort) {
+ default:
+ $orderBy = 'id DESC';
+ break;
+ }
+
+ $builder->orderBy($orderBy);
+
+ $pager = new PagerQueryBuilder([
+ 'builder' => $builder,
+ 'page' => $page,
+ 'limit' => $limit,
+ ]);
+
+ return $pager->paginate();
+ }
+
+ /**
+ * @param string $date
+ * @return ResultsetInterface|Resultset|FlashSaleModel[]
+ */
+ public function findFutureSales($date)
+ {
+ $time = strtotime($date);
+
+ return FlashSaleModel::query()
+ ->where('published = 1')
+ ->andWhere('end_time > :time:', ['time' => $time])
+ ->execute();
+ }
+
+ /**
+ * @param int $id
+ * @return FlashSaleModel|Model|bool
+ */
+ public function findById($id)
+ {
+ return FlashSaleModel::findFirst([
+ 'conditions' => 'id = :id:',
+ 'bind' => ['id' => $id],
+ ]);
+ }
+
+ /**
+ * @param array $ids
+ * @param string|array $columns
+ * @return ResultsetInterface|Resultset|FlashSaleModel[]
+ */
+ public function findByIds($ids, $columns = '*')
+ {
+ return FlashSaleModel::query()
+ ->columns($columns)
+ ->inWhere('id', $ids)
+ ->execute();
+ }
+
+}
diff --git a/app/Repos/Package.php b/app/Repos/Package.php
index 51b2fa06..86b88e8e 100644
--- a/app/Repos/Package.php
+++ b/app/Repos/Package.php
@@ -54,6 +54,21 @@ class Package extends Repository
return $pager->paginate();
}
+ /**
+ * @param array $where
+ * @param string $sort
+ * @return ResultsetInterface|Resultset|PackageModel[]
+ */
+ public function findAll($where = [], $sort = 'latest')
+ {
+ /**
+ * 一个偷懒的实现,适用于中小体量数据
+ */
+ $paginate = $this->paginate($where, $sort, 1, 10000);
+
+ return $paginate->items;
+ }
+
/**
* @param int $id
* @return PackageModel|Model|bool
diff --git a/app/Repos/Page.php b/app/Repos/Page.php
index c3454f08..c710f47a 100644
--- a/app/Repos/Page.php
+++ b/app/Repos/Page.php
@@ -48,6 +48,21 @@ class Page extends Repository
return $pager->paginate();
}
+ /**
+ * @param array $where
+ * @param string $sort
+ * @return ResultsetInterface|Resultset|PageModel[]
+ */
+ public function findAll($where = [], $sort = 'latest')
+ {
+ /**
+ * 一个偷懒的实现,适用于中小体量数据
+ */
+ $paginate = $this->paginate($where, $sort, 1, 10000);
+
+ return $paginate->items;
+ }
+
/**
* @param int $id
* @return PageModel|Model|bool
diff --git a/app/Repos/Slide.php b/app/Repos/Slide.php
index 0a2aa6c1..9c4b9b66 100644
--- a/app/Repos/Slide.php
+++ b/app/Repos/Slide.php
@@ -19,8 +19,16 @@ class Slide extends Repository
$builder->where('1 = 1');
- if (isset($where['item_type'])) {
- $builder->andWhere('item_type = :item_type:', ['item_type' => $where['item_type']]);
+ if (!empty($where['id'])) {
+ $builder->andWhere('id = :id:', ['id' => $where['id']]);
+ }
+
+ if (!empty($where['title'])) {
+ $builder->andWhere('title LIKE :title:', ['title' => "%{$where['title']}%"]);
+ }
+
+ if (!empty($where['target'])) {
+ $builder->andWhere('target = :target:', ['target' => $where['target']]);
}
if (isset($where['published'])) {
diff --git a/app/Services/Logic/FlashSale/OrderCreate.php b/app/Services/Logic/FlashSale/OrderCreate.php
new file mode 100644
index 00000000..a9eb7754
--- /dev/null
+++ b/app/Services/Logic/FlashSale/OrderCreate.php
@@ -0,0 +1,108 @@
+request->getPost('id', 'int');
+
+ $user = $this->getLoginUser();
+
+ $sale = $this->checkFlashSale($id);
+
+ $validator = new FlashSaleValidator;
+
+ $validator->checkIfExpired($sale->end_time);
+ $validator->checkIfOutSchedules($sale->schedules);
+ $validator->checkIfNotPaid($user->id, $sale->id);
+
+ $queue = new Queue();
+
+ if ($queue->pop($id) === false) {
+ throw new BadRequestException('flash_sale.out_stock');
+ }
+
+ $this->amount = $sale->price;
+ $this->promotion_id = $sale->id;
+ $this->promotion_type = OrderModel::PROMOTION_FLASH_SALE;
+ $this->promotion_info = [
+ 'flash_sale' => [
+ 'id' => $sale->id,
+ 'price' => $sale->price,
+ ]
+ ];
+
+ try {
+
+ $order = new OrderModel();
+
+ $validator = new OrderValidator();
+
+ if ($sale->item_type == FlashSaleModel::ITEM_COURSE) {
+
+ $course = $validator->checkCourse($sale->item_id);
+
+ $validator->checkIfBoughtCourse($user->id, $course->id);
+
+ $order = $this->createCourseOrder($course, $user);
+
+ } elseif ($sale->item_type == FlashSaleModel::ITEM_PACKAGE) {
+
+ $package = $validator->checkPackage($sale->item_id);
+
+ $validator->checkIfBoughtPackage($user->id, $package->id);
+
+ $order = $this->createPackageOrder($package, $user);
+
+ } elseif ($sale->item_type == FlashSaleModel::ITEM_VIP) {
+
+ $vip = $validator->checkVip($sale->item_id);
+
+ $order = $this->createVipOrder($vip, $user);
+ }
+
+ $this->decrFlashSaleStock($sale);
+
+ $this->saveUserOrderCache($user->id, $sale->id);
+
+ return $order;
+
+ } catch (\Exception $e) {
+
+ $queue->push($sale->id);
+
+ throw new BadRequestException($e->getMessage());
+ }
+ }
+
+ protected function decrFlashSaleStock(FlashSaleModel $sale)
+ {
+ if ($sale->stock < 1) return;
+
+ if ($sale->stock == 1) $sale->published = 0;
+
+ $sale->stock -= 1;
+
+ $sale->update();
+ }
+
+ protected function saveUserOrderCache($userId, $saleId)
+ {
+ $cache = new UserOrderCache();
+
+ return $cache->save($userId, $saleId);
+ }
+
+}
diff --git a/app/Services/Logic/FlashSale/Queue.php b/app/Services/Logic/FlashSale/Queue.php
new file mode 100644
index 00000000..1a85b07f
--- /dev/null
+++ b/app/Services/Logic/FlashSale/Queue.php
@@ -0,0 +1,77 @@
+checkFlashSale($id);
+
+ if ($sale->stock < 1) return;
+
+ $redis = $this->getRedis();
+
+ $keyName = $this->getKeyName($id);
+
+ $ttl = $sale->end_time - time();
+
+ $values = [];
+
+ for ($i = 0; $i < $sale->stock; $i++) {
+ $values[] = 1;
+ }
+
+ $redis->del($keyName);
+ $redis->lPush($keyName, ...$values);
+ $redis->expire($keyName, $ttl);
+ }
+
+ public function pop($id)
+ {
+ $redis = $this->getRedis();
+
+ $keyName = $this->getKeyName($id);
+
+ return $redis->lPop($keyName);
+ }
+
+ public function push($id)
+ {
+ $redis = $this->getRedis();
+
+ $keyName = $this->getKeyName($id);
+
+ return $redis->lPush($keyName, 1);
+ }
+
+ public function delete($id)
+ {
+ $redis = $this->getRedis();
+
+ $keyName = $this->getKeyName($id);
+
+ return $redis->del($keyName);
+ }
+
+ public function length($id)
+ {
+ $redis = $this->getRedis();
+
+ $keyName = $this->getKeyName($id);
+
+ return $redis->lLen($keyName);
+ }
+
+ protected function getKeyName($id)
+ {
+ return "flash_sale_queue:{$id}";
+ }
+
+}
diff --git a/app/Services/Logic/FlashSale/SaleList.php b/app/Services/Logic/FlashSale/SaleList.php
new file mode 100644
index 00000000..0764aa44
--- /dev/null
+++ b/app/Services/Logic/FlashSale/SaleList.php
@@ -0,0 +1,156 @@
+cosUrl = kg_cos_url();
+
+ $days = 3;
+
+ $date = date('Y-m-d');
+
+ $saleRepo = new FlashSaleRepo();
+
+ $sales = $saleRepo->findFutureSales($date);
+
+ if ($sales->count() == 0) return [];
+
+ return $this->handleSales($sales, $days);
+ }
+
+ protected function handleSales($sales, $days)
+ {
+ $dates = $this->getFutureDates($days);
+
+ $result = [];
+
+ foreach ($dates as $date) {
+ $result[] = [
+ 'date' => date('m / d', strtotime($date)),
+ 'items' => $this->getDateSales($sales, $date),
+ ];
+ }
+
+ return $result;
+ }
+
+ /**
+ * @param FlashSaleModel[] $sales
+ * @param string $date
+ * @return array
+ */
+ protected function getDateSales($sales, $date)
+ {
+ $result = [];
+
+ $schedules = FlashSaleModel::schedules();
+
+ $hasActiveStatus = false;
+
+ foreach ($schedules as $schedule) {
+
+ $items = [];
+
+ $hour = $schedule['hour'];
+
+ foreach ($sales as $sale) {
+
+ $sale->item_info = $this->handleItemInfo($sale->item_type, $sale->item_info);
+
+ $item = [
+ 'id' => $sale->id,
+ 'stock' => $sale->stock,
+ 'price' => $sale->price,
+ 'item_id' => $sale->item_id,
+ 'item_type' => $sale->item_type,
+ 'item_info' => $sale->item_info,
+ ];
+
+ $case1 = $sale->start_time <= strtotime($date);
+ $case2 = $sale->end_time > strtotime($date);
+ $case3 = in_array($hour, $sale->schedules);
+
+ if ($case1 && $case2 && $case3) {
+ $items[] = $item;
+ }
+ }
+
+ $status = $this->getSaleStatus($date, $hour);
+
+ if ($status == 'active') {
+ $hasActiveStatus = true;
+ }
+
+ $result[] = [
+ 'hour' => sprintf('%02d:00', $hour),
+ 'selected' => $status == 'active' ? 1 : 0,
+ 'status' => $status,
+ 'items' => $items,
+ ];
+ }
+
+ /**
+ * 所在date无active状态,设置第一项为selected
+ */
+ if (!$hasActiveStatus) {
+ $result[0]['selected'] = 1;
+ }
+
+ return $result;
+ }
+
+ protected function getFutureDates($days = 7)
+ {
+ $result = [];
+
+ for ($i = 0; $i < $days; $i++) {
+ $result[] = date('Y-m-d', strtotime("+{$i} days"));
+ }
+
+ return $result;
+ }
+
+ protected function getSaleStatus($date, $hour)
+ {
+ if (strtotime($date) - strtotime('today') > 0) {
+ return 'pending';
+ }
+
+ $curHour = date('H');
+
+ if ($curHour >= $hour + 2) {
+ return 'finished';
+ } elseif ($curHour >= $hour && $curHour < $hour + 2) {
+ return 'active';
+ } else {
+ return 'pending';
+ }
+ }
+
+ protected function handleItemInfo($itemType, &$itemInfo)
+ {
+ if ($itemType == FlashSaleModel::ITEM_COURSE) {
+ $itemInfo['course']['cover'] = $this->cosUrl . $itemInfo['course']['cover'];
+ } elseif ($itemType == FlashSaleModel::ITEM_PACKAGE) {
+ $itemInfo['package']['cover'] = $this->cosUrl . $itemInfo['package']['cover'];
+ } elseif ($itemType == FlashSaleModel::ITEM_VIP) {
+ $itemInfo['vip']['cover'] = $this->cosUrl . $itemInfo['vip']['cover'];
+ }
+
+ return $itemInfo;
+ }
+
+}
diff --git a/app/Services/Logic/FlashSale/UserOrderCache.php b/app/Services/Logic/FlashSale/UserOrderCache.php
new file mode 100644
index 00000000..71351170
--- /dev/null
+++ b/app/Services/Logic/FlashSale/UserOrderCache.php
@@ -0,0 +1,42 @@
+getCache();
+
+ $keyName = $this->getKeyName($userId, $saleId);
+
+ return $cache->get($keyName);
+ }
+
+ public function save($userId, $saleId)
+ {
+ $cache = $this->getCache();
+
+ $keyName = $this->getKeyName($userId, $saleId);
+
+ return $cache->save($keyName, 1, 2 * 3600);
+ }
+
+ public function delete($userId, $saleId)
+ {
+ $cache = $this->getCache();
+
+ $keyName = $this->getKeyName($userId, $saleId);
+
+ return $cache->delete($keyName);
+ }
+
+ protected function getKeyName($userId, $saleId)
+ {
+ return "flash_sale_user_order:{$userId}_{$saleId}";
+ }
+
+}
diff --git a/app/Services/Logic/FlashSaleTrait.php b/app/Services/Logic/FlashSaleTrait.php
new file mode 100644
index 00000000..4da062de
--- /dev/null
+++ b/app/Services/Logic/FlashSaleTrait.php
@@ -0,0 +1,24 @@
+checkFlashSale($id);
+ }
+
+ public function checkFlashSaleCache($id)
+ {
+ $validator = new FlashSaleValidator();
+
+ return $validator->checkFlashSaleCache($id);
+ }
+
+}
diff --git a/app/Services/Logic/Order/OrderConfirm.php b/app/Services/Logic/Order/OrderConfirm.php
index 47870448..82b9c7f5 100644
--- a/app/Services/Logic/Order/OrderConfirm.php
+++ b/app/Services/Logic/Order/OrderConfirm.php
@@ -112,6 +112,7 @@ class OrderConfirm extends Service
return [
'id' => $vip->id,
'title' => $vip->title,
+ 'cover' => $vip->cover,
'expiry' => $vip->expiry,
'price' => $vip->price,
];
diff --git a/app/Services/Logic/Order/OrderCreate.php b/app/Services/Logic/Order/OrderCreate.php
index d03ed8d5..49dcc4eb 100644
--- a/app/Services/Logic/Order/OrderCreate.php
+++ b/app/Services/Logic/Order/OrderCreate.php
@@ -18,6 +18,26 @@ use App\Validators\UserLimit as UserLimitValidator;
class OrderCreate extends Service
{
+ /**
+ * @var float 订单金额
+ */
+ protected $amount = 0.00;
+
+ /**
+ * @var int 促销编号
+ */
+ protected $promotion_id = 0;
+
+ /**
+ * @var int 促销类型
+ */
+ protected $promotion_type = 0;
+
+ /**
+ * @var array 促销信息
+ */
+ protected $promotion_info = [];
+
use ClientTrait;
public function handle()
@@ -49,6 +69,8 @@ class OrderCreate extends Service
$validator->checkIfBoughtCourse($user->id, $course->id);
+ $this->amount = $user->vip ? $course->vip_price : $course->market_price;
+
$order = $this->createCourseOrder($course, $user);
} elseif ($post['item_type'] == OrderModel::ITEM_PACKAGE) {
@@ -57,6 +79,8 @@ class OrderCreate extends Service
$validator->checkIfBoughtPackage($user->id, $package->id);
+ $this->amount = $user->vip ? $package->vip_price : $package->market_price;
+
$order = $this->createPackageOrder($package, $user);
} elseif ($post['item_type'] == OrderModel::ITEM_REWARD) {
@@ -66,12 +90,16 @@ class OrderCreate extends Service
$course = $validator->checkCourse($courseId);
$reward = $validator->checkReward($rewardId);
+ $this->amount = $reward->price;
+
$order = $this->createRewardOrder($course, $reward, $user);
} elseif ($post['item_type'] == OrderModel::ITEM_VIP) {
$vip = $validator->checkVip($post['item_id']);
+ $this->amount = $vip->price;
+
$order = $this->createVipOrder($vip, $user);
}
@@ -86,8 +114,6 @@ class OrderCreate extends Service
$itemInfo['course'] = $this->handleCourseInfo($course);
- $amount = $user->vip ? $course->vip_price : $course->market_price;
-
$order = new OrderModel();
$order->owner_id = $user->id;
@@ -96,8 +122,11 @@ class OrderCreate extends Service
$order->item_info = $itemInfo;
$order->client_type = $this->getClientType();
$order->client_ip = $this->getClientIp();
- $order->amount = $amount;
$order->subject = "课程 - {$course->title}";
+ $order->amount = $this->amount;
+ $order->promotion_id = $this->promotion_id;
+ $order->promotion_type = $this->promotion_type;
+ $order->promotion_info = $this->promotion_info;
$order->create();
@@ -123,18 +152,19 @@ class OrderCreate extends Service
$itemInfo['courses'][] = $this->handleCourseInfo($course);
}
- $amount = $user->vip ? $package->vip_price : $package->market_price;
-
$order = new OrderModel();
$order->owner_id = $user->id;
$order->item_id = $package->id;
$order->item_type = OrderModel::ITEM_PACKAGE;
$order->item_info = $itemInfo;
- $order->amount = $amount;
$order->client_type = $this->getClientType();
$order->client_ip = $this->getClientIp();
$order->subject = "套餐 - {$package->title}";
+ $order->amount = $this->amount;
+ $order->promotion_id = $this->promotion_id;
+ $order->promotion_type = $this->promotion_type;
+ $order->promotion_info = $this->promotion_info;
$order->create();
@@ -164,8 +194,11 @@ class OrderCreate extends Service
$order->item_info = $itemInfo;
$order->client_type = $this->getClientType();
$order->client_ip = $this->getClientIp();
- $order->amount = $vip->price;
$order->subject = "会员 - 会员服务({$vip->title})";
+ $order->amount = $this->amount;
+ $order->promotion_id = $this->promotion_id;
+ $order->promotion_type = $this->promotion_type;
+ $order->promotion_info = $this->promotion_info;
$order->create();
@@ -191,8 +224,11 @@ class OrderCreate extends Service
$order->item_info = $itemInfo;
$order->client_type = $this->getClientType();
$order->client_ip = $this->getClientIp();
- $order->amount = $reward->price;
$order->subject = "赞赏 - {$course->title}";
+ $order->amount = $this->amount;
+ $order->promotion_id = $this->promotion_id;
+ $order->promotion_type = $this->promotion_type;
+ $order->promotion_info = $this->promotion_info;
$order->create();
diff --git a/app/Services/Logic/Order/OrderInfo.php b/app/Services/Logic/Order/OrderInfo.php
index abc21362..7c91e022 100644
--- a/app/Services/Logic/Order/OrderInfo.php
+++ b/app/Services/Logic/Order/OrderInfo.php
@@ -34,6 +34,9 @@ class OrderInfo extends Service
'item_id' => $order->item_id,
'item_type' => $order->item_type,
'item_info' => $order->item_info,
+ 'promotion_id' => $order->promotion_id,
+ 'promotion_type' => $order->promotion_type,
+ 'promotion_info' => $order->promotion_info,
'create_time' => $order->create_time,
'update_time' => $order->update_time,
];
@@ -93,7 +96,7 @@ class OrderInfo extends Service
protected function handleCourseInfo($itemInfo)
{
- $itemInfo['course']['cover'] = kg_cos_cover_url($itemInfo['course']['cover']);
+ $itemInfo['course']['cover'] = kg_cos_course_cover_url($itemInfo['course']['cover']);
return $itemInfo;
}
diff --git a/app/Services/Logic/Point/GiftInfo.php b/app/Services/Logic/Point/GiftInfo.php
index 4cb7caf8..a3d7b371 100644
--- a/app/Services/Logic/Point/GiftInfo.php
+++ b/app/Services/Logic/Point/GiftInfo.php
@@ -15,7 +15,7 @@ class GiftInfo extends Service
public function handle($id)
{
- $gift = $this->checkGift($id);
+ $gift = $this->checkPointGift($id);
if ($gift->type == PointGift::TYPE_COURSE) {
$gift = $this->getCourseGift($gift);
diff --git a/app/Services/Logic/Point/PointRedeem.php b/app/Services/Logic/Point/PointRedeem.php
index 5be3cc65..e8170499 100644
--- a/app/Services/Logic/Point/PointRedeem.php
+++ b/app/Services/Logic/Point/PointRedeem.php
@@ -22,7 +22,7 @@ class PointRedeem extends Service
{
$giftId = $this->request->getPost('gift_id', ['trim', 'int']);
- $gift = $this->checkGift($giftId);
+ $gift = $this->checkPointGift($giftId);
$user = $this->getLoginUser();
@@ -66,6 +66,8 @@ class PointRedeem extends Service
$redeem->contact_address = $contact->fullAddress();
}
+ $redeem->status = PointRedeemModel::STATUS_PENDING;
+
$result = $redeem->create();
if ($result === false) {
diff --git a/app/Services/Logic/PointGiftTrait.php b/app/Services/Logic/PointGiftTrait.php
index c7095fba..98a49879 100644
--- a/app/Services/Logic/PointGiftTrait.php
+++ b/app/Services/Logic/PointGiftTrait.php
@@ -7,11 +7,18 @@ use App\Validators\PointGift as PointGiftValidator;
trait PointGiftTrait
{
- public function checkGift($id)
+ public function checkPointGift($id)
{
$validator = new PointGiftValidator();
- return $validator->checkGift($id);
+ return $validator->checkPointGift($id);
+ }
+
+ public function checkFlashSaleCache($id)
+ {
+ $validator = new PointGiftValidator();
+
+ return $validator->checkPointGiftCache($id);
}
}
diff --git a/app/Services/Logic/User/Console/OrderList.php b/app/Services/Logic/User/Console/OrderList.php
index 75fbfca2..2f935fb4 100644
--- a/app/Services/Logic/User/Console/OrderList.php
+++ b/app/Services/Logic/User/Console/OrderList.php
@@ -66,7 +66,11 @@ class OrderList extends Service
'item_id' => $order['item_id'],
'item_type' => $order['item_type'],
'item_info' => $order['item_info'],
+ 'promotion_id' => $order['promotion_id'],
+ 'promotion_type' => $order['promotion_type'],
+ 'promotion_info' => $order['promotion_info'],
'create_time' => $order['create_time'],
+ 'update_time' => $order['update_time'],
];
}
diff --git a/app/Services/Logic/User/Console/ProfileInfo.php b/app/Services/Logic/User/Console/ProfileInfo.php
index 4a7fd24c..c70c7fbf 100644
--- a/app/Services/Logic/User/Console/ProfileInfo.php
+++ b/app/Services/Logic/User/Console/ProfileInfo.php
@@ -17,7 +17,7 @@ class ProfileInfo extends Service
protected function handleUser(UserModel $user)
{
- $user->avatar = kg_cos_avatar_url($user->avatar);
+ $user->avatar = kg_cos_user_avatar_url($user->avatar);
$user->area = $this->handleArea($user->area);
diff --git a/app/Services/MyStorage.php b/app/Services/MyStorage.php
index 854853a6..ea0c3491 100644
--- a/app/Services/MyStorage.php
+++ b/app/Services/MyStorage.php
@@ -17,6 +17,11 @@ class MyStorage extends Storage
const MIME_AUDIO = 'audio';
const MIME_FILE = 'file';
+ /**
+ * 上传测试文件
+ *
+ * @return bool|string
+ */
public function uploadTestFile()
{
$key = 'hello_world.txt';
@@ -25,24 +30,110 @@ class MyStorage extends Storage
return $this->putString($key, $value);
}
- public function uploadDefaultAvatarImage()
+ /**
+ * 上传默认用户头像
+ *
+ * @return false|mixed|string
+ */
+ public function uploadDefaultUserAvatar()
{
- $filename = public_path('static/admin/img/default_avatar.png');
+ $filename = static_path('admin/img/default/user_avatar.png');
- $key = '/img/avatar/default.png';
+ $key = '/img/default/user_avatar.png';
return $this->putFile($key, $filename);
}
- public function uploadDefaultCoverImage()
+ /**
+ * 上传默认群组头像
+ *
+ * @return false|mixed|string
+ */
+ public function uploadDefaultGroupAvatar()
{
- $filename = public_path('static/admin/img/default_cover.png');
+ $filename = static_path('admin/img/default/group_avatar.png');
- $key = '/img/cover/default.png';
+ $key = '/img/default/group_avatar.png';
return $this->putFile($key, $filename);
}
+ /**
+ * 上传默认课程封面
+ *
+ * @return false|mixed|string
+ */
+ public function uploadDefaultCourseCover()
+ {
+ $filename = static_path('admin/img/default/course_cover.png');
+
+ $key = '/img/default/course_cover.png';
+
+ return $this->putFile($key, $filename);
+ }
+
+ /**
+ * 上传默认套餐封面
+ *
+ * @return false|mixed|string
+ */
+ public function uploadDefaultPackageCover()
+ {
+ $filename = static_path('admin/img/default/package_cover.png');
+
+ $key = '/img/default/package_cover.png';
+
+ return $this->putFile($key, $filename);
+ }
+
+ /**
+ * 上传默认会员封面
+ *
+ * @return false|mixed|string
+ */
+ public function uploadDefaultVipCover()
+ {
+ $filename = static_path('admin/img/default/vip_cover.png');
+
+ $key = '/img/default/vip_cover.png';
+
+ return $this->putFile($key, $filename);
+ }
+
+ /**
+ * 上传默认礼品封面
+ *
+ * @return false|mixed|string
+ */
+ public function uploadDefaultGiftCover()
+ {
+ $filename = static_path('admin/img/default/gift_cover.png');
+
+ $key = '/img/default/gift_cover.png';
+
+ return $this->putFile($key, $filename);
+ }
+
+ /**
+ * 上传站点LOGO
+ *
+ * @return UploadModel|bool
+ */
+ public function uploadSiteLogo()
+ {
+ return $this->upload('/img/default/', self::MIME_IMAGE, UploadModel::TYPE_DEFAULT_IMG, 'logo.png');
+ }
+
+ /**
+ * 上传站点ICON
+ *
+ * @return UploadModel|bool
+ */
+ public function uploadSiteFavicon()
+ {
+ return $this->upload('/img/default/', self::MIME_IMAGE, UploadModel::TYPE_DEFAULT_IMG, 'favicon.ico');
+ }
+
/**
* 上传封面图片
*
@@ -107,9 +198,10 @@ class MyStorage extends Storage
* @param string $prefix
* @param string $mimeType
* @param int $uploadType
+ * @param string $fileName
* @return UploadModel|bool
*/
- protected function upload($prefix, $mimeType, $uploadType)
+ protected function upload($prefix, $mimeType, $uploadType, $fileName = null)
{
$list = [];
@@ -134,7 +226,13 @@ class MyStorage extends Storage
$name = $this->filter->sanitize($file->getName(), ['trim', 'string']);
$extension = $this->getFileExtension($file->getName());
- $keyName = $this->generateFileName($extension, $prefix);
+
+ if (empty($fileName)) {
+ $keyName = $this->generateFileName($extension, $prefix);
+ } else {
+ $keyName = $prefix . $fileName;
+ }
+
$path = $this->putFile($keyName, $file->getTempName());
$upload = new UploadModel();
diff --git a/app/Services/Refund.php b/app/Services/Refund.php
index 5b0736ad..f3c317cf 100644
--- a/app/Services/Refund.php
+++ b/app/Services/Refund.php
@@ -46,7 +46,7 @@ class Refund extends Service
{
$itemInfo = $order->item_info;
- $itemInfo['course']['cover'] = kg_cos_cover_url($itemInfo['course']['cover']);
+ $itemInfo['course']['cover'] = kg_cos_course_cover_url($itemInfo['course']['cover']);
$serviceFee = $this->getServiceFee($order);
$serviceRate = $this->getServiceRate($order);
@@ -91,7 +91,7 @@ class Refund extends Service
*/
foreach ($itemInfo['courses'] as &$course) {
- $course['cover'] = kg_cos_cover_url($course['cover']);
+ $course['cover'] = kg_cos_course_cover_url($course['cover']);
$refundPercent = 0.00;
$refundAmount = 0.00;
diff --git a/app/Services/Storage.php b/app/Services/Storage.php
index f11c8e78..a7d2fca1 100644
--- a/app/Services/Storage.php
+++ b/app/Services/Storage.php
@@ -248,9 +248,10 @@ class Storage extends Service
*/
protected function generateFileName($extension = '', $prefix = '')
{
+ $randDir = date('Y') . '/' . date('m') . '/';
$randName = date('YmdHis') . rand(100, 999) . rand(100, 999);
- return $prefix . $randName . '.' . $extension;
+ return $prefix . $randDir . $randName . '.' . $extension;
}
/**
diff --git a/app/Validators/FlashSale.php b/app/Validators/FlashSale.php
new file mode 100644
index 00000000..523f1299
--- /dev/null
+++ b/app/Validators/FlashSale.php
@@ -0,0 +1,198 @@
+checkId($id);
+
+ $saleCache = new FlashSaleCache();
+
+ $sale = $saleCache->get($id);
+
+ if (!$sale) {
+ throw new BadRequestException('flash_sale.not_found');
+ }
+
+ return $sale;
+ }
+
+ public function checkFlashSale($id)
+ {
+ $saleRepo = new FlashSaleRepo();
+
+ $sale = $saleRepo->findById($id);
+
+ if (!$sale) {
+ throw new BadRequestException('flash_sale.not_found');
+ }
+
+ return $sale;
+ }
+
+ public function checkId($id)
+ {
+ $id = intval($id);
+
+ $maxSaleIdCache = new MaxFlashSaleIdCache();
+
+ $maxId = $maxSaleIdCache->get();
+
+ if ($id < 1 || $id > $maxId) {
+ throw new BadRequestException('flash_sale.not_found');
+ }
+ }
+
+ public function checkItemType($type)
+ {
+ $list = FlashSaleModel::itemTypes();
+
+ if (!array_key_exists($type, $list)) {
+ throw new BadRequestException('flash_sale.invalid_item_type');
+ }
+
+ return (int)$type;
+ }
+
+ public function checkStartTime($startTime)
+ {
+ if (!CommonValidator::date($startTime, 'Y-m-d H:i:s')) {
+ throw new BadRequestException('flash_sale.invalid_start_time');
+ }
+
+ return strtotime($startTime);
+ }
+
+ public function checkEndTime($endTime)
+ {
+ if (!CommonValidator::date($endTime, 'Y-m-d H:i:s')) {
+ throw new BadRequestException('flash_sale.invalid_end_time');
+ }
+
+ return strtotime($endTime);
+ }
+
+ public function checkTimeRange($startTime, $endTime)
+ {
+ if ($startTime >= $endTime) {
+ throw new BadRequestException('flash_sale.start_gt_end');
+ }
+ }
+
+ public function checkSchedules($schedules)
+ {
+ if (empty($schedules)) {
+ throw new BadRequestException('flash_sale.invalid_schedules');
+ }
+
+ $result = explode(',', $schedules);
+
+ sort($result);
+
+ return $result;
+ }
+
+ public function checkStock($stock)
+ {
+ $value = $this->filter->sanitize($stock, ['trim', 'int']);
+
+ if ($value < 0 || $value > 999999) {
+ throw new BadRequestException('flash_sale.invalid_stock');
+ }
+
+ return (int)$value;
+ }
+
+ public function checkPrice($marketPrice, $salePrice)
+ {
+ if ($salePrice < 0.01) {
+ throw new BadRequestException('flash_sale.invalid_price');
+ }
+
+ if ($salePrice > $marketPrice) {
+ throw new BadRequestException('flash_sale.unreasonable_price');
+ }
+
+ return (float)$salePrice;
+ }
+
+ public function checkPublishStatus($status)
+ {
+ if (!in_array($status, [0, 1])) {
+ throw new BadRequestException('flash_sale.invalid_publish_status');
+ }
+
+ return (int)$status;
+ }
+
+ public function checkCourse($id)
+ {
+ $validator = new Course();
+
+ return $validator->checkCourse($id);
+ }
+
+ public function checkPackage($id)
+ {
+ $validator = new Package();
+
+ return $validator->checkPackage($id);
+ }
+
+ public function checkVip($id)
+ {
+ $validator = new Vip();
+
+ return $validator->checkVip($id);
+ }
+
+ public function checkIfExpired($endTime)
+ {
+ if ($endTime < time()) {
+ throw new BadRequestException('flash_sale.expired');
+ }
+ }
+
+ public function checkIfOutSchedules($schedules)
+ {
+ $curHour = date('H');
+
+ $flag = true;
+
+ foreach ($schedules as $schedule) {
+ if ($curHour >= $schedule && $curHour < $schedule + 2) {
+ $flag = false;
+ }
+ }
+
+ if ($flag) {
+ throw new BadRequestException('flash_sale.out_schedules');
+ }
+ }
+
+ public function checkIfNotPaid($userId, $saleId)
+ {
+ $cache = new UserOrderCache();
+
+ if ($cache->get($userId, $saleId)) {
+ throw new BadRequestException('flash_sale.not_paid');
+ }
+ }
+
+}
diff --git a/app/Validators/Package.php b/app/Validators/Package.php
index c6dcff5a..00e07012 100644
--- a/app/Validators/Package.php
+++ b/app/Validators/Package.php
@@ -5,6 +5,7 @@ namespace App\Validators;
use App\Caches\MaxPackageId as MaxPackageIdCache;
use App\Caches\Package as PackageCache;
use App\Exceptions\BadRequest as BadRequestException;
+use App\Library\Validators\Common as CommonValidator;
use App\Models\Package as PackageModel;
use App\Repos\Package as PackageRepo;
@@ -59,6 +60,17 @@ class Package extends Validator
}
}
+ public function checkCover($cover)
+ {
+ $value = $this->filter->sanitize($cover, ['trim', 'string']);
+
+ if (!CommonValidator::url($value)) {
+ throw new BadRequestException('package.invalid_cover');
+ }
+
+ return kg_cos_img_style_trim($value);
+ }
+
public function checkTitle($title)
{
$value = $this->filter->sanitize($title, ['trim', 'string']);
diff --git a/app/Validators/PointGift.php b/app/Validators/PointGift.php
index 8e7448e2..c08f3adf 100644
--- a/app/Validators/PointGift.php
+++ b/app/Validators/PointGift.php
@@ -17,7 +17,7 @@ class PointGift extends Validator
* @return PointGiftModel
* @throws BadRequestException
*/
- public function checkGiftCache($id)
+ public function checkPointGiftCache($id)
{
$this->checkId($id);
@@ -32,7 +32,7 @@ class PointGift extends Validator
return $gift;
}
- public function checkGift($id)
+ public function checkPointGift($id)
{
$this->checkId($id);
@@ -116,7 +116,7 @@ class PointGift extends Validator
{
$list = PointGiftModel::types();
- if (!isset($list[$type])) {
+ if (!array_key_exists($type, $list)) {
throw new BadRequestException('point_gift.invalid_type');
}
@@ -138,7 +138,7 @@ class PointGift extends Validator
{
$value = $this->filter->sanitize($stock, ['trim', 'int']);
- if ($value < 1 || $value > 999999) {
+ if ($value < 0 || $value > 999999) {
throw new BadRequestException('point_gift.invalid_stock');
}
@@ -149,7 +149,7 @@ class PointGift extends Validator
{
$value = $this->filter->sanitize($limit, ['trim', 'int']);
- if ($value < 1 || $value > 999999) {
+ if ($value < 1 || $value > 10) {
throw new BadRequestException('point_gift.invalid_redeem_limit');
}
diff --git a/app/Validators/PointRedeem.php b/app/Validators/PointRedeem.php
index 6a64d590..c497acda 100644
--- a/app/Validators/PointRedeem.php
+++ b/app/Validators/PointRedeem.php
@@ -27,11 +27,11 @@ class PointRedeem extends Validator
return $redeem;
}
- public function checkGift($giftId)
+ public function checkPointGift($giftId)
{
$validator = new PointGift();
- return $validator->checkGift($giftId);
+ return $validator->checkPointGift($giftId);
}
public function checkIfAllowRedeem(PointGiftModel $gift, UserModel $user)
diff --git a/app/Validators/Reward.php b/app/Validators/Reward.php
new file mode 100644
index 00000000..a1bf90ba
--- /dev/null
+++ b/app/Validators/Reward.php
@@ -0,0 +1,52 @@
+findById($id);
+
+ if (!$reward) {
+ throw new BadRequestException('reward.not_found');
+ }
+
+ return $reward;
+ }
+
+ public function checkTitle($title)
+ {
+ $value = $this->filter->sanitize($title, ['trim', 'string']);
+
+ $length = kg_strlen($value);
+
+ if ($length < 2) {
+ throw new BadRequestException('reward.title_too_short');
+ }
+
+ if ($length > 30) {
+ throw new BadRequestException('reward.title_too_long');
+ }
+
+ return $value;
+ }
+
+ public function checkPrice($price)
+ {
+ $value = $this->filter->sanitize($price, ['trim', 'float']);
+
+ if ($value < 0.01 || $value > 10000) {
+ throw new BadRequestException('reward.invalid_price');
+ }
+
+ return $value;
+ }
+
+}
diff --git a/app/Validators/Slide.php b/app/Validators/Slide.php
index 86892ce3..828da8d3 100644
--- a/app/Validators/Slide.php
+++ b/app/Validators/Slide.php
@@ -5,8 +5,6 @@ namespace App\Validators;
use App\Exceptions\BadRequest as BadRequestException;
use App\Library\Validators\Common as CommonValidator;
use App\Models\Client as ClientModel;
-use App\Models\Course as CourseModel;
-use App\Models\Page as PageModel;
use App\Models\Slide as SlideModel;
use App\Repos\Slide as SlideRepo;
@@ -111,7 +109,9 @@ class Slide extends Validator
public function checkCourse($courseId)
{
- $course = CourseModel::findFirst($courseId);
+ $courseValidator = new Course();
+
+ $course = $courseValidator->checkCourse($courseId);
if (!$course || $course->deleted == 1) {
throw new BadRequestException('slide.course_not_found');
@@ -126,7 +126,9 @@ class Slide extends Validator
public function checkPage($pageId)
{
- $page = PageModel::findFirst($pageId);
+ $pageValidator = new Page();
+
+ $page = $pageValidator->checkPage($pageId);
if (!$page || $page->deleted == 1) {
throw new BadRequestException('slide.page_not_found');
@@ -139,9 +141,9 @@ class Slide extends Validator
return $page;
}
- public function checkLink($link)
+ public function checkLink($url)
{
- $value = $this->filter->sanitize($link, ['trim', 'string']);
+ $value = $this->filter->sanitize($url, ['trim', 'string']);
if (!CommonValidator::url($value)) {
throw new BadRequestException('slide.invalid_link');
diff --git a/app/Validators/Vip.php b/app/Validators/Vip.php
new file mode 100644
index 00000000..0a20b404
--- /dev/null
+++ b/app/Validators/Vip.php
@@ -0,0 +1,63 @@
+findById($id);
+
+ if (!$vip) {
+ throw new BadRequestException('vip.not_found');
+ }
+
+ return $vip;
+ }
+
+ public function checkTitle($title)
+ {
+ $value = $this->filter->sanitize($title, ['trim', 'string']);
+
+ $length = kg_strlen($value);
+
+ if ($length < 2) {
+ throw new BadRequestException('vip.title_too_short');
+ }
+
+ if ($length > 30) {
+ throw new BadRequestException('vip.title_too_long');
+ }
+
+ return $value;
+ }
+
+ public function checkExpiry($expiry)
+ {
+ $value = $this->filter->sanitize($expiry, ['trim', 'int']);
+
+ if ($value < 1 || $value > 60) {
+ throw new BadRequestException('vip.invalid_expiry');
+ }
+
+ return $value;
+ }
+
+ public function checkPrice($price)
+ {
+ $value = $this->filter->sanitize($price, ['trim', 'float']);
+
+ if ($value < 0.01 || $value > 10000) {
+ throw new BadRequestException('vip.invalid_price');
+ }
+
+ return $value;
+ }
+
+}
diff --git a/bootstrap/Helper.php b/bootstrap/Helper.php
index 240acb1c..017e32b9 100644
--- a/bootstrap/Helper.php
+++ b/bootstrap/Helper.php
@@ -81,6 +81,17 @@ function public_path($path = '')
return root_path('public') . trim_path($path);
}
+/**
+ * Get the static path.
+ *
+ * @param string $path
+ * @return string
+ */
+function static_path($path = '')
+{
+ return public_path('static') . trim_path($path);
+}
+
/**
* Get the cache path.
*
diff --git a/config/errors.php b/config/errors.php
index 326947ff..4e406f70 100644
--- a/config/errors.php
+++ b/config/errors.php
@@ -135,10 +135,28 @@ $error['package.not_found'] = '套餐不存在';
$error['package.title_too_short'] = '标题太短(少于5个字符)';
$error['package.title_too_long'] = '标题太长(多于50个字符)';
$error['package.summary_too_long'] = '简介太长(多于255个字符)';
+$error['package.invalid_cover'] = '无效的封面';
$error['package.invalid_market_price'] = '无效的优惠价格';
$error['package.invalid_vip_price'] = '无效的会员价格';
$error['package.invalid_publish_status'] = '无效的发布状态';
+/**
+ * 赞赏相关
+ */
+$error['reward.not_found'] = '赞赏不存在';
+$error['reward.title_too_short'] = '标题太短(少于5个字符)';
+$error['reward.title_too_long'] = '标题太长(多于30个字符)';
+$error['reward.invalid_price'] = '无效的金额(范围:0.01-10000)';
+
+/**
+ * 会员相关
+ */
+$error['vip.not_found'] = '会员不存在';
+$error['vip.title_too_short'] = '标题太短(少于5个字符)';
+$error['vip.title_too_long'] = '标题太长(多于30个字符)';
+$error['package.invalid_price'] = '无效的价格(范围:0.01-10000)';
+$error['package.invalid_expiry'] = '无效的期限(范围:1~60)';
+
/**
* 课程成员
*/
@@ -177,8 +195,6 @@ $error['chapter_vod.invalid_file_id'] = '无效的文件编号';
$error['chapter_live.not_found'] = '直播资源不存在';
$error['chapter_live.invalid_start_time'] = '无效的开始时间';
$error['chapter_live.invalid_end_time'] = '无效的结束时间';
-$error['chapter_live.start_lt_now'] = '开始时间小于当前时间';
-$error['chapter_live.end_lt_now'] = '结束时间小于当前时间';
$error['chapter_live.start_gt_end'] = '开始时间大于结束时间';
$error['chapter_live.time_too_long'] = '直播时间太长(超过3小时)';
@@ -376,9 +392,9 @@ $error['point_gift.name_too_long'] = '礼品名称太长(超过30字符)';
$error['point_gift.details_too_long'] = '礼品详情太长(多于30000个字符)';
$error['point_gift.invalid_cover'] = '无效的封面';
$error['point_gift.invalid_type'] = '无效的类型';
-$error['point_gift.invalid_point'] = '无效的积分值(范围1-999999)';
-$error['point_gift.invalid_stock'] = '无效的库存值(范围1-999999)';
-$error['point_gift.invalid_redeem_limit'] = '无效的兑换限额(范围1-999999)';
+$error['point_gift.invalid_point'] = '无效的积分值(范围:1-999999)';
+$error['point_gift.invalid_stock'] = '无效的库存值(范围:1-999999)';
+$error['point_gift.invalid_redeem_limit'] = '无效的兑换限额(范围:1-10)';
$error['point_gift.invalid_publish_status'] = '无效的发布状态';
$error['point_redeem.not_found'] = '兑换不存在';
@@ -390,5 +406,22 @@ $error['point_redeem.reach_redeem_limit'] = '超出物品兑换限额';
$error['point_redeem.no_enough_point'] = '您的积分余额不足以抵扣此次兑换';
$error['point_redeem.no_enough_stock'] = '兑换物品库存不足';
+/**
+ * 限时秒杀相关
+ */
+$error['flash_sale.not_found'] = '秒杀活动不存在';
+$error['flash_sale.invalid_item_type'] = '无效的商品类型';
+$error['flash_sale.invalid_start_time'] = '无效的开始时间';
+$error['flash_sale.invalid_end_time'] = '无效的结束时间';
+$error['flash_sale.start_gt_end'] = '开始时间大于结束时间';
+$error['flash_sale.invalid_schedules'] = '无效的秒杀场次';
+$error['flash_sale.invalid_price'] = '无效的价格(范围:0.01-10000)';
+$error['flash_sale.unreasonable_price'] = '不合理的定价(秒杀价大于销售价)';
+$error['flash_sale.invalid_stock'] = '无效的库存值(范围:1-999999)';
+$error['flash_sale.invalid_publish_status'] = '无效的发布状态';
+$error['flash_sale.expired'] = '活动已过期';
+$error['flash_sale.out_schedules'] = '当前时间和秒杀场次不匹配';
+$error['flash_sale.not_paid'] = '订单尚未完成,请前往用户中心支付';
+$error['flash_sale.out_stock'] = '下手太慢,商品被秒光啦';
return $error;
diff --git a/db/migrations/20200827063842_init_table.php b/db/migrations/20200827063842_init_table.php
index 182f7e73..f20ca6d0 100644
--- a/db/migrations/20200827063842_init_table.php
+++ b/db/migrations/20200827063842_init_table.php
@@ -3547,7 +3547,7 @@ class InitTable extends Phinx\Migration\AbstractMigration
'unique' => false,
])
->addIndex(['owner_id'], [
- 'name' => 'onwer_id',
+ 'name' => 'owner_id',
'unique' => false,
])
->create();
diff --git a/db/migrations/20210314045908_schema_202103141300.php b/db/migrations/20210314045908_schema_202103141300.php
new file mode 100644
index 00000000..d40a3dec
--- /dev/null
+++ b/db/migrations/20210314045908_schema_202103141300.php
@@ -0,0 +1,337 @@
+table('kg_flash_sale', [
+ 'id' => false,
+ 'primary_key' => ['id'],
+ 'engine' => 'InnoDB',
+ 'encoding' => 'utf8mb4',
+ 'collation' => 'utf8mb4_general_ci',
+ 'comment' => '',
+ 'row_format' => 'DYNAMIC',
+ ])
+ ->addColumn('id', 'integer', [
+ 'null' => false,
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'identity' => 'enable',
+ 'comment' => '主键编号',
+ ])
+ ->addColumn('item_id', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '商品编号',
+ 'after' => 'id',
+ ])
+ ->addColumn('item_type', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '商品类型',
+ 'after' => 'item_id',
+ ])
+ ->addColumn('item_info', 'string', [
+ 'null' => false,
+ 'default' => '',
+ 'limit' => 1000,
+ 'collation' => 'utf8mb4_general_ci',
+ 'encoding' => 'utf8mb4',
+ 'comment' => '商品信息',
+ 'after' => 'item_type',
+ ])
+ ->addColumn('start_time', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '开始时间',
+ 'after' => 'item_info',
+ ])
+ ->addColumn('end_time', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '结束时间',
+ 'after' => 'start_time',
+ ])
+ ->addColumn('schedules', 'string', [
+ 'null' => false,
+ 'default' => '',
+ 'limit' => 255,
+ 'collation' => 'utf8mb4_general_ci',
+ 'encoding' => 'utf8mb4',
+ 'comment' => '抢购场次',
+ 'after' => 'end_time',
+ ])
+ ->addColumn('price', 'decimal', [
+ 'null' => false,
+ 'default' => '0.00',
+ 'precision' => '10',
+ 'scale' => '2',
+ 'comment' => '抢购价格',
+ 'after' => 'schedules',
+ ])
+ ->addColumn('stock', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '抢购库存',
+ 'after' => 'price',
+ ])
+ ->addColumn('published', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '发布标识',
+ 'after' => 'stock',
+ ])
+ ->addColumn('deleted', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '删除标识',
+ 'after' => 'published',
+ ])
+ ->addColumn('create_time', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '创建时间',
+ 'after' => 'deleted',
+ ])
+ ->addColumn('update_time', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '更新时间',
+ 'after' => 'create_time',
+ ])
+ ->addIndex(['end_time'], [
+ 'name' => 'end_time',
+ 'unique' => false,
+ ])
+ ->addIndex(['start_time'], [
+ 'name' => 'start_time',
+ 'unique' => false,
+ ])
+ ->create();
+
+ $this->table('kg_slide')
+ ->addColumn('target_attrs', 'string', [
+ 'null' => false,
+ 'default' => '',
+ 'limit' => 1000,
+ 'collation' => 'utf8mb4_general_ci',
+ 'encoding' => 'utf8mb4',
+ 'comment' => '目标属性',
+ 'after' => 'target',
+ ])
+ ->save();
+
+ $this->table('kg_vip')
+ ->addColumn('cover', 'string', [
+ 'null' => false,
+ 'default' => '',
+ 'limit' => 100,
+ 'collation' => 'utf8mb4_general_ci',
+ 'encoding' => 'utf8mb4',
+ 'comment' => '封面',
+ 'after' => 'title',
+ ])
+ ->save();
+
+ $this->table('kg_order')
+ ->addColumn('promotion_id', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '促销编号',
+ 'after' => 'item_info',
+ ])
+ ->addColumn('promotion_type', 'integer', [
+ 'null' => false,
+ 'default' => '0',
+ 'limit' => MysqlAdapter::INT_REGULAR,
+ 'signed' => false,
+ 'comment' => '促销类型',
+ 'after' => 'promotion_id',
+ ])
+ ->addColumn('promotion_info', 'string', [
+ 'null' => false,
+ 'default' => '',
+ 'limit' => 1000,
+ 'collation' => 'utf8mb4_general_ci',
+ 'encoding' => 'utf8mb4',
+ 'comment' => '促销信息',
+ 'after' => 'promotion_type',
+ ])
+ ->addIndex(['create_time'], [
+ 'name' => 'create_time',
+ 'unique' => false,
+ ])
+ ->save();
+
+ $this->handleFlashSaleNav();
+
+ $this->handleSlideTargetAttrs();
+
+ $this->handleVipCover();
+
+ }
+
+ public function down()
+ {
+ $this->table('kg_flash_sale')
+ ->drop()->save();
+
+ $this->table('kg_slide')
+ ->removeColumn('target_attrs')
+ ->save();
+
+ $this->table('kg_vip')
+ ->removeColumn('cover')
+ ->save();
+
+ $this->table('kg_order')
+ ->removeColumn('promotion_id')
+ ->removeColumn('promotion_type')
+ ->removeColumn('promotion_info')
+ ->save();
+ }
+
+ protected function handleFlashSaleNav()
+ {
+ $data = [
+ 'parent_id' => 0,
+ 'level' => 1,
+ 'name' => '秒杀',
+ 'target' => '_self',
+ 'url' => '/flash/sale',
+ 'position' => 1,
+ 'priority' => 100,
+ 'published' => 0,
+ 'create_time' => time(),
+ ];
+
+ $this->table('kg_nav')
+ ->insert($data)
+ ->save();
+
+ $nav = $this->getQueryBuilder()
+ ->select('*')
+ ->from('kg_nav')
+ ->orderDesc('id')
+ ->execute()->fetch('assoc');
+
+ $this->getQueryBuilder()
+ ->update('kg_nav')
+ ->set('path', ",{$nav['id']},")
+ ->where(['id' => $nav['id']])
+ ->execute();
+ }
+
+ protected function handleSlideTargetAttrs()
+ {
+ $slides = $this->getQueryBuilder()
+ ->select('*')
+ ->from('kg_slide')
+ ->execute();
+
+ if ($slides->count() == 0) return;
+
+ $targetAttrs = [];
+
+ foreach ($slides as $slide) {
+ if ($slide['target'] == 1) {
+ $course = $this->findCourseById($slide['content']);
+ if ($course) {
+ $targetAttrs = [
+ 'course' => ['id' => $course['id'], 'title' => $course['title']]
+ ];
+ }
+ } elseif ($slide['target'] == 2) {
+ $page = $this->findPageById($slide['content']);
+ if ($page) {
+ $targetAttrs = [
+ 'page' => ['id' => $page['id'], 'title' => $page['title']]
+ ];
+ }
+ } elseif ($slide['target'] == 3) {
+ $targetAttrs = [
+ 'link' => ['url' => $slide['content']]
+ ];
+ }
+
+ $this->updateTargetAttrs($slide['id'], $targetAttrs);
+ }
+ }
+
+ protected function handleVipCover()
+ {
+ $vips = $this->getQueryBuilder()
+ ->select('*')
+ ->from('kg_vip')
+ ->execute();
+
+ if ($vips->count() == 0) return;
+
+ foreach ($vips as $vip) {
+ $this->updateVipCover($vip['id'], '/img/default/vip_cover.png');
+ }
+ }
+
+ protected function findCourseById($id)
+ {
+ return $this->getQueryBuilder()
+ ->select('*')
+ ->from('kg_course')
+ ->where(['id' => $id])
+ ->execute()->fetch('assoc');
+ }
+
+ protected function findPageById($id)
+ {
+ return $this->getQueryBuilder()
+ ->select('*')
+ ->from('kg_page')
+ ->where(['id' => $id])
+ ->execute()->fetch('assoc');
+ }
+
+ protected function updateTargetAttrs($id, $targetAttrs)
+ {
+ $targetAttrs = json_encode($targetAttrs, JSON_UNESCAPED_UNICODE);
+
+ $this->getQueryBuilder()
+ ->update('kg_slide')
+ ->set('target_attrs', $targetAttrs)
+ ->where(['id' => $id])
+ ->execute();
+ }
+
+ protected function updateVipCover($id, $cover)
+ {
+ $this->getQueryBuilder()
+ ->update('kg_vip')
+ ->set('cover', $cover)
+ ->where(['id' => $id])
+ ->execute();
+ }
+
+}
diff --git a/public/static/admin/css/common.css b/public/static/admin/css/common.css
index 22bc2a78..4b545d0a 100644
--- a/public/static/admin/css/common.css
+++ b/public/static/admin/css/common.css
@@ -1,3 +1,11 @@
+.layui-table .meta span {
+ margin-right: 10px;
+}
+
+.layui-table .layui-badge {
+ margin-bottom: 3px;
+}
+
.layui-badge, .layui-badge-rim {
padding-bottom: 1px;
}
@@ -236,6 +244,10 @@ img.kg-avatar {
padding: 10px;
}
+.kg-form p {
+ line-height: 30px;
+}
+
.kg-search-box .layui-input {
width: 250px;
}
diff --git a/public/static/admin/img/default/course_cover.png b/public/static/admin/img/default/course_cover.png
new file mode 100644
index 00000000..39ce024e
Binary files /dev/null and b/public/static/admin/img/default/course_cover.png differ
diff --git a/public/static/admin/img/default/gift_cover.png b/public/static/admin/img/default/gift_cover.png
new file mode 100644
index 00000000..6ffabcd3
Binary files /dev/null and b/public/static/admin/img/default/gift_cover.png differ
diff --git a/public/static/admin/img/default/group_avatar.png b/public/static/admin/img/default/group_avatar.png
new file mode 100644
index 00000000..579dc1c6
Binary files /dev/null and b/public/static/admin/img/default/group_avatar.png differ
diff --git a/public/static/admin/img/default/package_cover.png b/public/static/admin/img/default/package_cover.png
new file mode 100644
index 00000000..f1c21d35
Binary files /dev/null and b/public/static/admin/img/default/package_cover.png differ
diff --git a/public/static/admin/img/default/user_avatar.png b/public/static/admin/img/default/user_avatar.png
new file mode 100644
index 00000000..579dc1c6
Binary files /dev/null and b/public/static/admin/img/default/user_avatar.png differ
diff --git a/public/static/home/img/vip_cover.png b/public/static/admin/img/default/vip_cover.png
similarity index 100%
rename from public/static/home/img/vip_cover.png
rename to public/static/admin/img/default/vip_cover.png
diff --git a/public/static/admin/img/default_avatar.png b/public/static/admin/img/default_avatar.png
deleted file mode 100644
index 0344e7a7..00000000
Binary files a/public/static/admin/img/default_avatar.png and /dev/null differ
diff --git a/public/static/admin/img/default_cover.png b/public/static/admin/img/default_cover.png
deleted file mode 100644
index 39069d41..00000000
Binary files a/public/static/admin/img/default_cover.png and /dev/null differ
diff --git a/public/static/admin/img/pay_test_cover.png b/public/static/admin/img/pay_test_cover.png
deleted file mode 100644
index 7ece7cce..00000000
Binary files a/public/static/admin/img/pay_test_cover.png and /dev/null differ
diff --git a/public/static/admin/img/vip_cover.png b/public/static/admin/img/vip_cover.png
deleted file mode 100644
index 911331ef..00000000
Binary files a/public/static/admin/img/vip_cover.png and /dev/null differ
diff --git a/public/static/home/css/common.css b/public/static/home/css/common.css
index 31aea755..e8ff6a1c 100644
--- a/public/static/home/css/common.css
+++ b/public/static/home/css/common.css
@@ -6,6 +6,10 @@
padding: 20px;
}
+.layer .layui-table {
+ margin: 0;
+}
+
.clearfix {
zoom: 1
}
@@ -34,10 +38,30 @@
text-align: center;
}
+.red {
+ color: red;
+}
+
+.green {
+ color: green;
+}
+
.gray {
color: #999;
}
+.pointer {
+ cursor: pointer;
+}
+
+.layui-table .meta span {
+ margin-right: 10px;
+}
+
+.vip img {
+ border: 3px solid orange;
+}
+
.qrcode img {
width: 160px;
height: 160px;
@@ -372,11 +396,18 @@
float: left;
width: 100%;
height: 230px;
+ position: relative;
background-color: #fff;
border-radius: 2px;
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
+.course-card .model {
+ position: absolute;
+ top: 15px;
+ right: 15px;
+}
+
.course-card .cover {
overflow: hidden;
}
@@ -412,6 +443,10 @@
margin-right: 0;
}
+.course-card .origin-price {
+ text-decoration: line-through;
+}
+
.course-card .price {
color: red;
}
@@ -420,6 +455,10 @@
color: green;
}
+.course-card .order {
+ cursor: pointer;
+}
+
.filter-toggle {
text-align: center;
margin-top: -10px;
@@ -1267,15 +1306,6 @@
border-radius: 100px;
}
-.user-profile .vip {
- position: absolute;
- top: 10px;
- left: 10px;
- height: 16px;
- padding: 0 3px;
- font-size: 10px;
-}
-
.user-profile .info {
float: left;
padding-top: 10px;
@@ -1405,16 +1435,6 @@
font-size: 12px;
}
-.user-card .vip {
- position: absolute;
- top: 10px;
- right: 10px;
- height: 16px;
- line-height: 16px;
- padding: 0 3px;
- font-size: 10px;
-}
-
.user-card .type {
position: absolute;
top: 18px;
@@ -1438,10 +1458,6 @@
height: 220px;
}
-.group-user-list .user-card .avatar {
- margin-top: 10px;
-}
-
.group-list {
margin-bottom: 20px;
}
@@ -1474,6 +1490,7 @@
}
.my-profile-card {
+ margin-bottom: 15px;
text-align: center;
}
@@ -1481,10 +1498,6 @@
margin-bottom: 10px;
}
-.my-profile-card .name {
- margin-bottom: 10px;
-}
-
.my-menu li {
line-height: 30px;
padding-left: 30px;
@@ -1748,14 +1761,6 @@
padding: 0 5px;
}
-.im-user-list .vip {
- top: 8px;
- right: 8px;
- height: 14px;
- line-height: 14px;
- font-size: 10px;
-}
-
.layim-msgbox {
margin: 15px;
}
diff --git a/public/static/home/js/flashsale.js b/public/static/home/js/flashsale.js
new file mode 100644
index 00000000..988b5239
--- /dev/null
+++ b/public/static/home/js/flashsale.js
@@ -0,0 +1,35 @@
+layui.use(['jquery', 'layer', 'helper'], function () {
+
+ var $ = layui.jquery;
+ var layer = layui.layer;
+ var helper = layui.helper;
+
+ setInterval(function () {
+ window.location.reload();
+ }, 60000);
+
+ $('.package-link').on('click', function () {
+ var url = $(this).data('url');
+ layer.open({
+ type: 2,
+ title: '套餐课程',
+ content: url,
+ area: '800px'
+ });
+ });
+
+ $('.order').on('click', function () {
+ var id = $(this).data('id');
+ helper.checkLogin(function () {
+ $.ajax({
+ type: 'POST',
+ url: '/flash/sale/order',
+ data: {id: id},
+ success: function (res) {
+ window.location.href = res.location;
+ }
+ });
+ });
+ });
+
+});
\ No newline at end of file
diff --git a/public/static/lib/xm-select.js b/public/static/lib/xm-select.js
index c8257a94..9244d078 100644
--- a/public/static/lib/xm-select.js
+++ b/public/static/lib/xm-select.js
@@ -1,8 +1,8 @@
/*!
* @Title: xm-select
- * @Version: 1.1.9
+ * @Version: 1.2.2
* @Description:基于layui的多选解决方案
* @Site: https://gitee.com/maplemei/xm-select
* @Author: maplemei
* @License:Apache License 2.0
- */!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="./",n(n.s=213)}({104:function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,o=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(e,t){var r,i=t.trim().replace(/^"(.*)"$/,(function(e,t){return t})).replace(/^'(.*)'$/,(function(e,t){return t}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(i)?e:(r=0===i.indexOf("//")?i:0===i.indexOf("/")?n+i:o+i.replace(/^\.\//,""),"url("+JSON.stringify(r)+")")}))}},213:function(e,t,n){"use strict";n.r(t),function(e){n(215),n(216),n(218);var t=n(65);window.addEventListener("click",(function(){Object.keys(t.b).forEach((function(e){var n=t.b[e];n&&n.closed&&n.closed()}))})),"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e.exports=t.c:"function"==typeof define&&n(220)?define(xmSelect):window.layui&&layui.define&&layui.define((function(e){e("xmSelect",t.c)})),window.xmSelect=t.c}.call(this,n(214)(e))},214:function(e,t){e.exports=function(e){if(!e.webpackPolyfill){var t=Object.create(e);t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,"exports",{enumerable:!0}),t.webpackPolyfill=1}return t}},215:function(e,t){Array.prototype.map||(Array.prototype.map=function(e,t){var n,o,r,i=Object(this),l=i.length>>>0;for(t&&(n=t),o=new Array(l),r=0;r >>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),o=0;o>>0;if("function"!=typeof e)throw new TypeError;for(var o=[],r=arguments[1],i=0;i>>0,r=arguments[1],i=0;i .xm-tips {\n color: #999999;\n padding: 0 10px;\n position: absolute;\n display: flex;\n height: 100%;\n align-items: center;\n}\nxm-select > .xm-icon {\n display: inline-block;\n overflow: hidden;\n position: absolute;\n width: 0;\n height: 0;\n right: 10px;\n top: 50%;\n margin-top: -3px;\n cursor: pointer;\n border: 6px dashed transparent;\n border-top-color: #C2C2C2;\n border-top-style: solid;\n transition: all 0.3s;\n -webkit-transition: all 0.3s;\n}\nxm-select > .xm-icon-expand {\n margin-top: -9px;\n transform: rotate(180deg);\n}\nxm-select > .xm-label.single-row {\n position: absolute;\n top: 0;\n bottom: 0px;\n left: 0px;\n right: 30px;\n overflow: auto hidden;\n}\nxm-select > .xm-label.single-row .scroll {\n overflow-y: hidden;\n}\nxm-select > .xm-label.single-row .label-content {\n flex-wrap: nowrap;\n}\nxm-select > .xm-label.auto-row .label-content {\n flex-wrap: wrap;\n}\nxm-select > .xm-label.auto-row .xm-label-block > span {\n white-space: unset;\n height: 100%;\n}\nxm-select > .xm-label .scroll .label-content {\n display: flex;\n padding: 3px 30px 3px 10px;\n}\nxm-select > .xm-label .xm-label-block {\n display: flex;\n position: relative;\n padding: 0px 5px;\n margin: 2px 5px 2px 0;\n border-radius: 3px;\n align-items: baseline;\n color: #FFF;\n}\nxm-select > .xm-label .xm-label-block > span {\n display: flex;\n color: #FFF;\n white-space: nowrap;\n}\nxm-select > .xm-label .xm-label-block > i {\n color: #FFF;\n margin-left: 8px;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n}\nxm-select > .xm-label .xm-label-block.disabled {\n background-color: #C2C2C2 !important;\n cursor: no-drop !important;\n}\nxm-select > .xm-label .xm-label-block.disabled > i {\n cursor: no-drop !important;\n}\nxm-select > .xm-body {\n position: absolute;\n left: 0;\n top: 42px;\n padding: 5px 0;\n z-index: 999;\n width: 100%;\n min-width: fit-content;\n border: 1px solid #E6E6E6;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);\n animation-name: xm-upbit;\n animation-duration: 0.3s;\n animation-fill-mode: both;\n}\nxm-select > .xm-body .scroll-body {\n overflow-x: hidden;\n overflow-y: auto;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar {\n width: 8px;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar-track {\n -webkit-border-radius: 2em;\n -moz-border-radius: 2em;\n -ms-border-radius: 2em;\n border-radius: 2em;\n background-color: #FFF;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar-thumb {\n -webkit-border-radius: 2em;\n -moz-border-radius: 2em;\n -ms-border-radius: 2em;\n border-radius: 2em;\n background-color: #C2C2C2;\n}\nxm-select > .xm-body.up {\n top: auto;\n bottom: 42px;\n}\nxm-select > .xm-body.relative {\n position: relative;\n display: block !important;\n top: 0;\n box-shadow: none;\n border: none;\n animation-name: none;\n animation-duration: 0;\n min-width: 100%;\n}\nxm-select > .xm-body .xm-group {\n cursor: default;\n}\nxm-select > .xm-body .xm-group-item {\n display: inline-block;\n cursor: pointer;\n padding: 0 10px;\n color: #999;\n font-size: 12px;\n}\nxm-select > .xm-body .xm-option {\n display: flex;\n align-items: center;\n position: relative;\n padding: 0 10px;\n cursor: pointer;\n}\nxm-select > .xm-body .xm-option-icon {\n color: transparent;\n display: flex;\n border: 1px solid #E6E6E6;\n border-radius: 3px;\n justify-content: center;\n align-items: center;\n}\nxm-select > .xm-body .xm-option-icon.xm-icon-danx {\n border-radius: 100%;\n}\nxm-select > .xm-body .xm-option-content {\n display: flex;\n position: relative;\n padding-left: 15px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: #666;\n width: calc(100% - 20px);\n}\nxm-select > .xm-body .xm-option.hide-icon .xm-option-content {\n padding-left: 0;\n}\nxm-select > .xm-body .xm-option.selected.hide-icon .xm-option-content {\n color: #FFF !important;\n}\nxm-select > .xm-body .xm-option .loader {\n width: 0.8em;\n height: 0.8em;\n margin-right: 6px;\n color: #C2C2C2;\n}\nxm-select > .xm-body .xm-select-empty {\n text-align: center;\n color: #999;\n}\nxm-select > .xm-body .disabled {\n cursor: no-drop;\n}\nxm-select > .xm-body .disabled:hover {\n background-color: #FFF;\n}\nxm-select > .xm-body .disabled .xm-option-icon {\n border-color: #C2C2C2 !important;\n}\nxm-select > .xm-body .disabled .xm-option-content {\n color: #C2C2C2 !important;\n}\nxm-select > .xm-body .disabled.selected > .xm-option-icon {\n color: #C2C2C2 !important;\n}\nxm-select > .xm-body .xm-search {\n background-color: #FFF !important;\n position: relative;\n padding: 0 10px;\n margin-bottom: 5px;\n cursor: pointer;\n}\nxm-select > .xm-body .xm-search > i {\n position: absolute;\n color: #666;\n}\nxm-select > .xm-body .xm-search-input {\n border: none;\n border-bottom: 1px solid #E6E6E6;\n padding-left: 27px;\n cursor: text;\n}\nxm-select > .xm-body .xm-paging {\n padding: 0 10px;\n display: flex;\n margin-top: 5px;\n}\nxm-select > .xm-body .xm-paging > span:first-child {\n border-radius: 2px 0 0 2px;\n}\nxm-select > .xm-body .xm-paging > span:last-child {\n border-radius: 0 2px 2px 0;\n}\nxm-select > .xm-body .xm-paging > span {\n display: flex;\n flex: auto;\n justify-content: center;\n vertical-align: middle;\n margin: 0 -1px 0 0;\n background-color: #fff;\n color: #333;\n font-size: 12px;\n border: 1px solid #e2e2e2;\n flex-wrap: nowrap;\n width: 100%;\n overflow: hidden;\n min-width: 50px;\n}\nxm-select > .xm-body .xm-toolbar {\n padding: 0 10px;\n display: flex;\n margin: -3px 0;\n cursor: default;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag {\n cursor: pointer;\n display: flex;\n margin-right: 20px;\n color: #666;\n align-items: baseline;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:hover {\n opacity: 0.8;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:active {\n opacity: 1;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag > i {\n margin-right: 2px;\n font-size: 14px;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:last-child {\n margin-right: 0;\n}\nxm-select > .xm-body .xm-body-custom {\n line-height: initial;\n cursor: default;\n}\nxm-select > .xm-body .xm-body-custom * {\n box-sizing: initial;\n}\nxm-select > .xm-body .xm-tree {\n position: relative;\n}\nxm-select > .xm-body .xm-tree-icon {\n display: inline-block;\n margin-right: 3px;\n cursor: pointer;\n border: 6px dashed transparent;\n border-left-color: #C2C2C2;\n border-left-style: solid;\n transition: all 0.3s;\n -webkit-transition: all 0.3s;\n z-index: 2;\n visibility: hidden;\n}\nxm-select > .xm-body .xm-tree-icon.expand {\n margin-top: 3px;\n margin-right: 5px;\n margin-left: -2px;\n transform: rotate(90deg);\n}\nxm-select > .xm-body .xm-tree-icon.xm-visible {\n visibility: visible;\n}\nxm-select > .xm-body .xm-tree .left-line {\n position: absolute;\n left: 13px;\n width: 0;\n z-index: 1;\n border-left: 1px dotted #c0c4cc !important;\n}\nxm-select > .xm-body .xm-tree .top-line {\n position: absolute;\n left: 13px;\n height: 0;\n z-index: 1;\n border-top: 1px dotted #c0c4cc !important;\n}\nxm-select > .xm-body .xm-tree .xm-tree-icon + .top-line {\n margin-left: 1px;\n}\nxm-select > .xm-body .scroll-body > .xm-tree > .xm-option > .top-line,\nxm-select > .xm-body .scroll-body > .xm-option > .top-line {\n width: 0 !important;\n}\nxm-select > .xm-body .xm-cascader-box {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n padding: 5px 0;\n border: 1px solid #E6E6E6;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);\n margin: -1px;\n}\nxm-select > .xm-body .xm-cascader-box::before {\n content: ' ';\n position: absolute;\n width: 0;\n height: 0;\n border: 6px solid transparent;\n border-right-color: #E6E6E6;\n top: 10px;\n left: -12px;\n}\nxm-select > .xm-body .xm-cascader-box::after {\n content: ' ';\n position: absolute;\n width: 0;\n height: 0;\n border: 6px solid transparent;\n border-right-color: #fff;\n top: 10px;\n left: -11px;\n}\nxm-select > .xm-body .xm-cascader-scroll {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n}\nxm-select > .xm-body.cascader {\n width: unset;\n min-width: unset;\n}\nxm-select > .xm-body.cascader .xm-option-content {\n padding-left: 8px;\n}\nxm-select > .xm-body.cascader .disabled .xm-right-arrow {\n color: #C2C2C2 !important;\n}\nxm-select .xm-input {\n cursor: pointer;\n border-radius: 2px;\n border-width: 1px;\n border-style: solid;\n border-color: #E6E6E6;\n display: block;\n width: 100%;\n box-sizing: border-box;\n background-color: #FFF;\n line-height: 1.3;\n padding-left: 10px;\n outline: 0;\n user-select: text;\n -ms-user-select: text;\n -moz-user-select: text;\n -webkit-user-select: text;\n}\nxm-select .dis {\n display: none;\n}\nxm-select .loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n}\nxm-select .loader {\n border: 0.2em dotted currentcolor;\n border-radius: 50%;\n -webkit-animation: 1s loader linear infinite;\n animation: 1s loader linear infinite;\n display: inline-block;\n width: 1em;\n height: 1em;\n color: inherit;\n vertical-align: middle;\n pointer-events: none;\n}\nxm-select .xm-select-default {\n position: absolute;\n width: 100%;\n height: 100%;\n border: none;\n visibility: hidden;\n}\nxm-select .xm-select-disabled {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n cursor: no-drop;\n z-index: 2;\n opacity: 0.3;\n background-color: #FFF;\n}\nxm-select .item--divided {\n border-top: 1px solid #ebeef5;\n width: calc(100% - 20px);\n cursor: initial;\n}\nxm-select .xm-right-arrow {\n position: absolute;\n color: #666;\n right: 5px;\n top: -1px;\n font-weight: 700;\n transform: scale(0.6, 1);\n}\nxm-select .xm-right-arrow::after {\n content: '>';\n}\nxm-select[size='large'] {\n min-height: 40px;\n line-height: 40px;\n}\nxm-select[size='large'] .xm-input {\n height: 40px;\n}\nxm-select[size='large'] .xm-label .scroll .label-content {\n line-height: 34px;\n}\nxm-select[size='large'] .xm-label .xm-label-block {\n height: 30px;\n line-height: 30px;\n}\nxm-select[size='large'] .xm-body .xm-option .xm-option-icon {\n height: 20px;\n width: 20px;\n font-size: 20px;\n}\nxm-select[size='large'] .xm-paging > span {\n height: 34px;\n line-height: 34px;\n}\nxm-select[size='large'] .xm-tree .left-line {\n height: 100%;\n bottom: 20px;\n}\nxm-select[size='large'] .xm-tree .left-line-group {\n height: calc(100% - 40px);\n}\nxm-select[size='large'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 19px;\n}\nxm-select[size='large'] .item--divided {\n margin: 10px;\n}\nxm-select {\n min-height: 36px;\n line-height: 36px;\n}\nxm-select .xm-input {\n height: 36px;\n}\nxm-select .xm-label .scroll .label-content {\n line-height: 30px;\n}\nxm-select .xm-label .xm-label-block {\n height: 26px;\n line-height: 26px;\n}\nxm-select .xm-body .xm-option .xm-option-icon {\n height: 18px;\n width: 18px;\n font-size: 18px;\n}\nxm-select .xm-paging > span {\n height: 30px;\n line-height: 30px;\n}\nxm-select .xm-tree .left-line {\n height: 100%;\n bottom: 18px;\n}\nxm-select .xm-tree .left-line-group {\n height: calc(100% - 36px);\n}\nxm-select .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 17px;\n}\nxm-select .item--divided {\n margin: 9px;\n}\nxm-select[size='small'] {\n min-height: 32px;\n line-height: 32px;\n}\nxm-select[size='small'] .xm-input {\n height: 32px;\n}\nxm-select[size='small'] .xm-label .scroll .label-content {\n line-height: 26px;\n}\nxm-select[size='small'] .xm-label .xm-label-block {\n height: 22px;\n line-height: 22px;\n}\nxm-select[size='small'] .xm-body .xm-option .xm-option-icon {\n height: 16px;\n width: 16px;\n font-size: 16px;\n}\nxm-select[size='small'] .xm-paging > span {\n height: 26px;\n line-height: 26px;\n}\nxm-select[size='small'] .xm-tree .left-line {\n height: 100%;\n bottom: 16px;\n}\nxm-select[size='small'] .xm-tree .left-line-group {\n height: calc(100% - 32px);\n}\nxm-select[size='small'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 15px;\n}\nxm-select[size='small'] .item--divided {\n margin: 8px;\n}\nxm-select[size='mini'] {\n min-height: 28px;\n line-height: 28px;\n}\nxm-select[size='mini'] .xm-input {\n height: 28px;\n}\nxm-select[size='mini'] .xm-label .scroll .label-content {\n line-height: 22px;\n}\nxm-select[size='mini'] .xm-label .xm-label-block {\n height: 18px;\n line-height: 18px;\n}\nxm-select[size='mini'] .xm-body .xm-option .xm-option-icon {\n height: 14px;\n width: 14px;\n font-size: 14px;\n}\nxm-select[size='mini'] .xm-paging > span {\n height: 22px;\n line-height: 22px;\n}\nxm-select[size='mini'] .xm-tree .left-line {\n height: 100%;\n bottom: 14px;\n}\nxm-select[size='mini'] .xm-tree .left-line-group {\n height: calc(100% - 28px);\n}\nxm-select[size='mini'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 13px;\n}\nxm-select[size='mini'] .item--divided {\n margin: 7px;\n}\n.layui-form-pane xm-select {\n margin: -1px -1px -1px 0;\n}\n",""])},218:function(e,t,n){var o=n(219);"string"==typeof o&&(o=[[e.i,o,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(27)(o,r);o.locals&&(e.exports=o.locals)},219:function(e,t,n){(e.exports=n(26)(!1)).push([e.i,'@font-face {\n font-family: "xm-iconfont";\n src: url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.eot?t=1574048839056\');\n /* IE9 */\n src: url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.eot?t=1574048839056#iefix\') format(\'embedded-opentype\'), /* IE6-IE8 */ url(\'data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAksAAsAAAAAEYAAAAjeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEUgqTXI8lATYCJAM0CxwABCAFhG0HgTwbZQ4jEbaCkVIj+4sD3sS6BFAp9ka91ulVG4leTC/+h+3V+zyRYCTyREKkcZ+D5/u137lPdveLGJBMunoiNPOQPBMq0/FQtEKIkMRDZng69d+hOiQumAr7bJdBOEzMTU77s78mhbI58aCg7ebCs4LBTgCk+cD/4ZqWUHebipp7al3tyKOjwCV/hVyw9PdzaktxI7IMQs26/1N8gV4DI0bVut3UhCaflGGgwM3oTXg1IfRMbCsmrEnriJVeYM2eXHII4KdMMzL4OoACHgZBCTasITcReDUBE8kWPLMTCGoQaDV+eKpUPQI49r8vP6BTPIDCaiBSml3oOQX0voNPebv/u2P0AUfP1w0s5EADzYBZsNdByylo2eVq/NtRdgFpovQR5x2CIwmIZeik6/u0T/m/A7RJP00sCmmyksj/kwc+LC5BFBqDEMDDjwPiANDB9MpJTXwHmsO3YyBwWDA4OFwwJLRcRgAOBUYMDg0mHRwGTAYozsV0AgWYruDwwExDHfzwKWf4OurQ9jzQDtoF+wpistfBfluQ5bQiiJa4ZQoKhShLiMayBbyg05AIkYBoIBJEEApQy/FwYv4HchADIUBXl61dW6mpwIgyp7p8PrHddieSjhY9oqTxyPB/FGNYDklpfYh8VtaoqSgb0bKoGB17CuVUp9Ll2nS2UpNGMSw9hyirA7C6+QLyByIQS0sSSmxvArC5odZmYZMxZSiBR5OkQl0uiufxMH5eL8t3u0d4XKyuq6EMdcpNe2+oXA8p9yPa+4T1PM7+A54tc7tpl2vcAHAftnhZj2chy1CyaCRFsyMqQ5nkNnskEt2yxxZinPsOZjFm4+XWvKqLkfCGS1k4MNP82isxSMf7ZsGYvQVCNAeSSVtzWCxRdXGxyZlA2CvCEevuO7y9M2z2NWH8icydzq/qAJSp1lGvDWFp6Nw3xChJowPD+76nU+upQk6Kw9jI0Rgym9Ct8VlxMI3CSIaDCZja5tDYt0/EYra4tn0Kp3v8Rdezk8svcy1mKhoSvNcZz3LKlUe777Gmval0s7bzAc0k13LGk896V9DuvNn34N0ebKgItkQgOomuJtgQPChNI4cwa7CEWCvfk5QjJFlem6i3SfVShWi5LTFRG+JwdCNpSqbpRFwrtb1TbcRkJi/AbJJQOmfCdnswLNGVM7qqSRO1zO0Q0j5Vr3cYQ07HB0MX6KoIZhx+D9Djs2C5bXtVwvbgJHtSCIL7hjFJme4sZDdS5IlJdKUO1Qt8opn0trBafz3AX933kmCRgyMEWGZjMAkRKhwmIHJGR4ruwFCdWKYzrap2R/mvd2UKajzRAZu88pGAD90Y+02kTFCKrBSXwGGJ3wRcPCdIppTxSmHOfESRwIli0S5J/8AYDCxTGh4XZua4xvfvGx320rDK2qA8g5FlS7pWNLx71+BwgA/KZ5I0aeKmNeCNoNPl8qNHu8uHHzqaKc86fHi4vPuRI4ny+I/vjxw+clh4HXVCFvVnVFx07EHZwVhSRliTTMWSEi0h6YuS6DxCRmiin0B3L4ry6cvR0ijYexFdBL3wGQM0YOrUAZCBkLOBBtQ+xdk7omfgUv+u++admyUeXduyxLM+r/+49rPfhgEZor6GymToNYksNsZyC7ntwAH0928UpgMpxpF0ydNlsMMBw7QsxTCmu0Hf3F+/+vb99Yumhb+e9R0LBNm+4O+hu7lQ5bGjI9j5G88qQ5SLFyuEC7cwd25xoYo2j4eA4bhpM7TZhPtmc+uhVEVSMYXLWh0bfjI8dvUpvDUocPZmU4kwwOfc83wB5wPehrpD3waApbwW+fgRrZXcxw+mB/3woZT+8JFMYwRMIy2k/18qhqcKpjYeYSnIACaUoRDu0e3kQFh98R5fiI8oJqwwGZSJDSbehLzZs7zIeWTQ4UGOIs2c4j2/Q/tn7n7j9juO33On6WhURCT/wO6Y3QdmWFY0Ef6JUeGRggO7ZbtaZlh5RYKWXbLPBLc3l/5h4A0mu3ZXTZ+u6t6VHMAzZhxak50T+24NnRuaOmehRkXlqVR5lIpuwezUUDUdCuJysv8Z/0/8uNE1s7jIJIubFWnI/x7g4nAZx79yYpFoAOU3a9iwT1O/GxUxPY0ljVPv9EukI3qNrl/So2YfzasqHCroNjS0+w0tlPlsYfC6v/01ixquizJH1Kd/VK+OS3iS3rTJWmqsMPdU3B3oFyC9RSumWE/0gG36IjTysfH51IJ/5oOgNYu6p4yb5Fdufhr/Kjtu0oSyYP/WJQrz35aNFnMhtFcwb55NlNnH8Wdu1b+XZA9zqlZrhdPo/V3uBhiUlQ66h0LhbAmFYIncdFOpVMh6Fl7peqy5Z2ZdQBITO2x1Asj1dRFjIBMC3hbuUh8Ooc4W03EjAdo8UL/t0oUfyU8630bmMcw/vqDNAsC9BQD4OqCgH+ljy0UhJB8AAJA+8EmArxk5gnRLik90AElf8rBm+IMvBTWnucb3+0o0ARk+r0ZBv8sU01nnSmP45/H8Dp8C8X+iE9e+ZvXymK/sQJ5/DuqhYKebPnKmPqLYuDcIMWS2/Rjxp2s8Do821LVn6A/xMK1RKvBLK5gyDsZ5uQ6bYusmx2yqLFe4lECHDPcFhojmckuAbnCI6Cn308RI6AAJdtCICQLQyBHKhSgX5YowN6BBPIEB8VxuSfNncpAuutzPnCSiDHDEo+DsKQBPoJi4MpRktepIs2zjO5h84IEMM3ffECKSZU1ZHxfewEI4h494MuuUNNOBjuw18QKHAzEXaAcylS3m3baq9MpnKenYmfEUgCdbXTHEtTVKsvruNGv9/DuYfOAhcuKu9TeEiA9nNJTUDOUbbVkn3sv2eDJrEnVrpvcHOjJeqRsOcpYYLuxoBzKVtCOm3ZaKbtJcurw+e/zN6c7Pd6r4gqUo0WLEiiOueOITvwQkKCEJM9nO3F60y5HkqLhdqUyXZtK3lqwReQ+G40O92UhOt0x/KmKM+u7LTPMzoEBOCYtiUPfSjODiuFXjSDm2idzAoc4Tj9bs2eJYDOU7HQA=\') format(\'woff2\'), url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.woff?t=1574048839056\') format(\'woff\'), url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.ttf?t=1574048839056\') format(\'truetype\'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.svg?t=1574048839056#iconfont\') format(\'svg\');\n /* iOS 4.1- */\n}\n.xm-iconfont {\n font-family: "xm-iconfont" !important;\n font-size: 16px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.xm-icon-quanxuan:before {\n content: "\\e62c";\n}\n.xm-icon-caidan:before {\n content: "\\e610";\n}\n.xm-icon-fanxuan:before {\n content: "\\e837";\n}\n.xm-icon-pifu:before {\n content: "\\e668";\n}\n.xm-icon-qingkong:before {\n content: "\\e63e";\n}\n.xm-icon-sousuo:before {\n content: "\\e600";\n}\n.xm-icon-danx:before {\n content: "\\e62b";\n}\n.xm-icon-duox:before {\n content: "\\e613";\n}\n.xm-icon-close:before {\n content: "\\e601";\n}\n.xm-icon-expand:before {\n content: "\\e641";\n}\n.xm-icon-banxuan:before {\n content: "\\e60d";\n}\n',""])},220:function(e,t){(function(t){e.exports=t}).call(this,{})},26:function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",o=e[3];if(!o)return n;if(t&&"function"==typeof btoa){var r=function(e){var t=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),n="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t);return"/*# ".concat(n," */")}(o),i=o.sources.map((function(e){return"/*# sourceURL=".concat(o.sourceRoot).concat(e," */")}));return[n].concat(i).concat([r]).join("\n")}return[n].join("\n")}(t,e);return t[2]?"@media ".concat(t[2],"{").concat(n,"}"):n})).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var o={},r=0;r=0&&p.splice(t,1)}function x(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var o=function(){0;return n.nc}();o&&(e.attrs.nonce=o)}return y(t,e.attrs),m(e,t),t}function y(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function v(e,t){var n,o,r,i;if(t.transform&&e.css){if(!(i="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=i}if(t.singleton){var l=u++;n=c||(c=x(t)),o=w.bind(null,n,l,!1),r=w.bind(null,n,l,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",y(t,e.attrs),m(e,t),t}(t),o=C.bind(null,n,t),r=function(){b(n),n.href&&URL.revokeObjectURL(n.href)}):(n=x(t),o=k.bind(null,n),r=function(){b(n)});return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else r()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=l()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=h(e,t);return f(n,t),function(e){for(var o=[],r=0;r3)for(n=[n],o=3;or?n-r:r,l=this.labelRef.scrollLeft+e.deltaY;l<0&&(l=0),l>i&&(l=i),this.labelRef.scrollLeft=l}}},{key:"componentDidMount",value:function(){this.labelRef.addEventListener&&this.labelRef.addEventListener("DOMMouseScroll",this.scrollFunc.bind(this),!1),this.labelRef.attachEvent&&this.labelRef.attachEvent("onmousewheel",this.scrollFunc.bind(this)),this.labelRef.onmousewheel=this.scrollFunc.bind(this)}},{key:"render",value:function(e){var t=this,n=e.data,o=e.prop,r=e.theme,i=e.model,l=e.sels,a=e.autoRow,s=e.tree,c=o.name,p=o.disabled,d=i.label,h=d.type,m=d[h],b=l;s.show&&s.strict&&s.simple&&f(n,l,b=[],o);var x="",y=!0,v=b.map((function(e){return e[c]})).join(",");if("text"===h)x=b.map((function(e){return"".concat(m.left).concat(e[c]).concat(m.right)})).join(m.separator);else if("block"===h){y=!1;var g=Y(b),_={backgroundColor:r.color},w=m.showCount<=0?g.length:m.showCount;x=g.splice(0,w).map((function(e){var n={width:m.showIcon?"calc(100% - 20px)":"100%"};return O("div",{class:["xm-label-block",e[p]?"disabled":""].join(" "),style:_},m.template&&u(m.template)?O("span",{style:n,dangerouslySetInnerHTML:{__html:m.template(e,g)}}):O("span",{style:n},e[c]),m.showIcon&&O("i",{class:"xm-iconfont xm-icon-close",onClick:t.iconClick.bind(t,e,!0,e[p])}))})),g.length&&x.push(O("div",{class:"xm-label-block",style:_},"+ ",g.length))}else x=b.length&&m&&m.template?m.template(n,b):b.map((function(e){return e[c]})).join(",");return O("div",{class:["xm-label",a?"auto-row":"single-row"].join(" ")},O("div",{class:"scroll",ref:function(e){return t.labelRef=e}},y?O("div",{class:"label-content",dangerouslySetInnerHTML:{__html:x}}):O("div",{class:"label-content",title:v},x)))}}])&&Z(n.prototype,o),r&&Z(n,r),t}(E);function X(e){return(X="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function $(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function ee(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function te(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:this.size;var e=this.state.pageIndex;e<=1||(this.changePageIndex(e-1),this.props.pageRemote&&this.postData(e-1,!0))}},{key:"pageNextClick",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.size,t=this.state.pageIndex;t>=e||(this.changePageIndex(t+1),this.props.pageRemote&&this.postData(t+1,!0))}},{key:"changePageIndex",value:function(e){this.setState({pageIndex:e})}},{key:"searchInput",value:function(e){var t=this,n=e.target.value;n!==this.__value&&(clearTimeout(this.searchCid),this.inputOver&&(this.__value=n,this.searchCid=setTimeout((function(){t.callback=!0,t.setState({filterValue:t.__value,remote:!0,pageIndex:1})}),this.props.delay)))}},{key:"focus",value:function(){this.searchInputRef&&this.searchInputRef.focus()}},{key:"blur",value:function(){this.searchInputRef&&this.searchInputRef.blur()}},{key:"handleComposition",value:function(e){var t=e.type;"compositionstart"===t?(this.inputOver=!1,clearTimeout(this.searchCid)):"compositionend"===t&&(this.inputOver=!0,this.searchInput(e))}},{key:"postData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.pageIndex,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(this.state.remote||n)&&(this.callback=!1,this.setState({loading:!0,remote:!1}),this.blur(),this.props.remoteMethod(this.state.filterValue,(function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;setTimeout((function(){e.focus(),e.callback=!0,e.setState({loading:!1,totalSize:n}),e.props.onReset(t,"data")}),10)}),this.props.show,t))}},{key:"keydown",value:function(e,t){var n=this,o=t.keyCode;"div"===e&&(27===o||9===o?this.props.onReset(!1,"close"):37===o?this.pagePrevClick():39===o&&this.pageNextClick());var r=this.props.prop,i=r.value,l=r.optgroup,a=r.disabled,s=this.tempData.filter((function(e){return!e[l]&&!e[a]})),c=s.length-1;if(-1!==c){var u=s.findIndex((function(e){return e[i]===n.state.val}));if(38===o){u<=0?u=c:u>0&&(u-=1);var p=s[u][i];this.setState({val:p})}else if(40===o){-1===u||u===c?u=0:uM&&(T=M),M>0&&T<=0&&(T=1),!v){var z=(T-1)*e.pageSize,L=z+e.pageSize;j=j.slice(z,L)}var V={cursor:"no-drop",color:"#d2d2d2"},F={},U={};T<=1&&(F=V),T==M&&(U=V),this.state.pageIndex!==T&&this.changePageIndex(T),this.size=M,D=O("div",{class:"xm-paging"},O("span",{style:F,onClick:this.pagePrevClick.bind(this,M)},"上一页"),O("span",null,this.state.pageIndex," / ",M),O("span",{style:U,onClick:this.pageNextClick.bind(this,M)},"下一页"))}else e.showCount>0&&(j=j.slice(0,e.showCount));var B,N=[],H={__tmp:!0};H[S]=!0,j.forEach((function(e){var t=I[e[w]];B&&!t&&(t=H),t!=B&&(B=t,t&&N.push(B)),N.push(e)})),j=N,t&&(t=y(this.state.filterValue,p([],j)))&&j.splice(0,0,function(e){for(var t=1;t0?l.length>=g?l:d(r.slice(0,g-l.length),l,i):d(r,c,i),n.props.onReset(a,"sels")}}:"CLEAR"===t?{icon:"xm-iconfont xm-icon-qingkong",name:r,method:function(e){n.props.onReset(c.filter((function(e){return e[i.disabled]})),"sels")}}:"REVERSE"===t?{icon:"xm-iconfont xm-icon-fanxuan",name:r,method:function(e){var t=i.optgroup,o=i.disabled,r=e.filter((function(e){return!e[t]})).filter((function(e){return!e[o]})),l=[];c.forEach((function(e){var t=r.findIndex((function(t){return t[w]===e[w]}));-1==t?l.push(e):r.splice(t,1)}));var a=l.filter((function(e){return e[i.disabled]})),u=[];u=s?a.length?a:r.slice(0,1):g>0?a.length>=g?a:d(r.slice(0,g-a.length),a,i):d(r,l,i),n.props.onReset(u,"sels")}}:t;var l=function(e){"mouseenter"===e.type&&(e.target.style.color=a.color),"mouseleave"===e.type&&(e.target.style.color="")};return O("div",{class:"toolbar-tag",style:{},onClick:function(){u(o.method)&&o.method(K),n.focus()},onMouseEnter:l,onMouseLeave:l},e.toolbar.showIcon&&O("i",{class:o.icon}),O("span",null,o.name))})).filter((function(e){return e}))),Y="hidden"!=e.model.icon;return(j=j.map((function(e){return e[S]?e.__tmp?O("div",{class:"item--divided"}):O("div",{class:"xm-group"},O("div",{class:"xm-group-item",onClick:n.groupClick.bind(n,e)},e[_])):function(e){var t=!!c.find((function(t){return t[w]==e[w]})),r=t?{color:a.color,border:"none"}:{borderColor:a.color},i={};e[w]===n.state.val&&(i.backgroundColor=a.hover),!Y&&t&&(i.backgroundColor=a.color,e[k]&&(i.backgroundColor="#C2C2C2"));var u=["xm-option",e[k]?" disabled":"",t?" selected":"",Y?"show-icon":"hide-icon"].join(" "),p=["xm-option-icon xm-iconfont",s?"xm-icon-danx":"xm-icon-duox"].join(" "),d=function(t){"mouseenter"===t.type&&(e[k]||n.setState({val:e[w]}))};return O("div",{class:u,style:i,value:e[w],onClick:n.optionClick.bind(n,e,t,e[k]),onMouseEnter:d,onMouseLeave:d},Y&&O("i",{class:p,style:r}),O("div",{class:"xm-option-content",dangerouslySetInnerHTML:{__html:l({data:o,item:e,arr:c,name:e[_],value:e[w]})}}))}(e)}))).length||(!e.pageEmptyShow&&(D=""),j.push(O("div",{class:"xm-select-empty"},f))),O("div",{onClick:this.blockClick,tabindex:"1",style:"outline: none;"},O("div",null,e.toolbar.show&&q,P,O("div",{class:"scroll-body",style:{maxHeight:e.height}},j),e.paging&&D),this.state.loading&&O("div",{class:"loading"},O("span",{class:"loader"})))}},{key:"componentDidMount",value:function(){var e=this.base.querySelector(".xm-search-input");e&&(e.addEventListener("compositionstart",this.handleComposition.bind(this)),e.addEventListener("compositionupdate",this.handleComposition.bind(this)),e.addEventListener("compositionend",this.handleComposition.bind(this)),e.addEventListener("input",this.searchInput.bind(this)),this.searchInputRef=e),this.base.addEventListener("keydown",this.keydown.bind(this,"div"))}},{key:"componentDidUpdate",value:function(){if(this.callback){this.callback=!1;var e=this.props.filterDone;u(e)&&e(this.state.filterValue,this.tempData||[])}}}])&&te(n.prototype,o),r&&te(n,r),t}(E);function ae(e){return(ae="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function se(e,t){for(var n=0;n0||f.lazy&&!1!==e.__node.loading)?"xm-visible":"xm-hidden"].join(" "),k=[];f.showFolderIcon&&(k.push(O("i",{class:_})),f.showLine&&(o&&k.push(O("i",{class:"left-line",style:{left:t-f.indent+3+"px"}})),k.push(O("i",{class:"top-line",style:{left:t-f.indent+3+"px",width:f.indent+(0===o?10:-2)+"px"}}))));var C=function(t){"mouseenter"===t.type&&(e[v]||n.setState({val:e[y]}))};return O("div",{class:m,style:h,value:e[y],onClick:n.optionClick.bind(n,e,r,e[v],"line"),onMouseEnter:C,onMouseLeave:C},k,e.__node.loading&&O("span",{class:"loader"}),w&&O("i",{class:b,style:d,onClick:n.optionClick.bind(n,e,r,e[v],"checkbox")}),O("div",{class:"xm-option-content",dangerouslySetInnerHTML:{__html:s({data:c,item:e,arr:i,name:e[x],value:e[y]})}}))};h&&(m?this.postData():this.filterData(c,this.state.filterValue));var C=p([],c),S=p([],i);this.tempData=C;var j=c.map((function(e){return function e(t,o){if(!t.__node.hidn){var r=t[g];if(o+=f.indent,r){var i=-1!==n.state.expandedKeys.findIndex((function(e){return t[y]===e}));return 0===r.length&&(i=!1),O("div",{class:"xm-tree"},f.showFolderIcon&&f.showLine&&i&&r.length>0&&O("i",{class:"left-line left-line-group",style:{left:o+3+"px"}}),k(t,o,0===r.length&&(!f.lazy||f.lazy&&!1===t.__node.loading)?0:i),i&&O("div",{class:"xm-tree-box"},r.map((function(t){return e(t,o)}))))}return k(t,o,0)}}(e,10-f.indent)})).filter((function(e){return e}));function E(e,t){t.forEach((function(t){return t[_]?(!f.strict&&e.push(t),E(e,t[g])):e.push(t)}))}var A=O("div",{class:"xm-toolbar"},e.toolbar.list.map((function(t){var r,s=e.languageProp.toolbar[t];r="ALL"===t?{icon:"xm-iconfont xm-icon-quanxuan",name:s,method:function(e){var t=[];E(t,e),t=t.filter((function(e){return!e[v]})),n.props.onReset(a?t.slice(0,1):d(t,i,o),"treeData")}}:"CLEAR"===t?{icon:"xm-iconfont xm-icon-qingkong",name:s,method:function(e){n.props.onReset(i.filter((function(e){return e[o.disabled]})),"treeData")}}:"REVERSE"===t?{icon:"xm-iconfont xm-icon-fanxuan",name:s,method:function(e){var t=[];E(t,e),t=t.filter((function(e){return!e[v]}));var r=[];i.forEach((function(e){var n=t.findIndex((function(t){return t[y]===e[y]}));-1==n?r.push(e):t.splice(n,1)})),n.props.onReset(a?r.slice(0,1):d(t,r,o),"treeData")}}:t;var c=function(e){"mouseenter"===e.type&&(e.target.style.color=l.color),"mouseleave"===e.type&&(e.target.style.color="")};return O("div",{class:"toolbar-tag",onClick:function(){u(r.method)&&r.method(C,S)},onMouseEnter:c,onMouseLeave:c},e.toolbar.showIcon&&O("i",{class:r.icon}),O("span",null,r.name))})).filter((function(e){return e}))),R=O("div",{class:h?"xm-search":"xm-search dis"},O("i",{class:"xm-iconfont xm-icon-sousuo"}),O("input",{class:"xm-input xm-search-input",placeholder:b}));return j.length||j.push(O("div",{class:"xm-select-empty"},r)),O("div",{onClick:this.blockClick,class:"xm-body-tree"},e.toolbar.show&&A,R,O("div",{class:"scroll-body",style:{maxHeight:e.height}},j),this.state.loading&&O("div",{class:"loading"},O("span",{class:"loader"})))}},{key:"componentDidMount",value:function(){var e=this.base.querySelector(".xm-search-input");e&&(e.addEventListener("compositionstart",this.handleComposition.bind(this)),e.addEventListener("compositionupdate",this.handleComposition.bind(this)),e.addEventListener("compositionend",this.handleComposition.bind(this)),e.addEventListener("input",this.searchInput.bind(this)),this.searchInputRef=e)}},{key:"componentDidUpdate",value:function(){if(this.callback){this.callback=!1;var e=this.props.filterDone;u(e)&&e(this.state.filterValue,this.tempData||[])}}}])&&he(n.prototype,o),r&&he(n,r),t}(E);function ge(e){return(ge="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _e(e,t){for(var n=0;n1&&(n=n.slice(0,1)),this.setState({sels:n,dataObj:a,flatData:s})}return this.setState({data:o}),n}},{key:"exchangeValue",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state.dataObj,o=e.map((function(e){return"object"===Re(e)?Ee({},e,{__node:{}}):n[e]})).filter((function(e){return e})),r=!0,i=this.props.tree;return i.show&&!1===i.strict&&(r=!1),r&&(o=o.filter((function(e){return!0!==e[t.props.prop.optgroup]}))),o}},{key:"value",value:function(e,t,n){!1!==t&&!0!==t&&(t=this.state.show);var o=this.props,r=o.prop,i=o.tree,l=this.exchangeValue(e);if(i.show&&i.strict){var a=this.state.data;this.clearAndReset(a,l),l=this.init({data:a,prop:r},!0)}this.resetSelectValue(l,l,!0,n),this.setState({show:t})}},{key:"clearAndReset",value:function(e,t){var n=this,o=this.props.prop,r=o.selected,i=o.children,l=o.value;e.forEach((function(e){e[r]=-1!=t.findIndex((function(t){return t[l]===e[l]}));var o=e[i];o&&c(o)&&n.clearAndReset(o,t)}))}},{key:"load",value:function(e,t,n,o){var r=this,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,l=this.props,a=l.prop,s=l.tree,u=a.children,p=a.optgroup,d=a.value,f=a.selected,h=a.disabled;e.forEach((function(e){e.__node={parent:o,level:i,loading:e.__node&&e.__node.loading},t[e[d]]=e,n.push(e);var l=e[u];if(l&&c(l)){var a=l.length;if(a>0){r.load(l,t,n,e,i+1),e[p]=!0,s.strict&&(!0===e[f]&&(delete e[f],l.forEach((function(e){return e[f]=!0}))),!0===e[h]&&(delete e[h],l.forEach((function(e){return e[h]=!0}))));var m=l.filter((function(e){return!0===e[f]||!0===e.__node.selected})).length;e.__node.selected=m===a,e.__node.half=m>0&&m0,e.__node.disabled=l.filter((function(e){return!0===e[h]||!0===e.__node.disabled})).length===a}}}))}},{key:"resetSelectValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=this.props.on;if(u(r)&&this.prepare&&o){var i=r({arr:e,change:t,isAdd:n});if(c(i))return this.value(i,null,!1)}this.setState({sels:e})}},{key:"updateBorderColor",value:function(e){this.setState({tmpColor:e})}},{key:"treeHandler",value:function(e,t,n,o){var r=this,i=this.props.prop,l=i.value,a=(i.selected,i.disabled),s=i.children,c=i.optgroup,u=t[s];u.filter((function(e){return!(e[a]||e.__node.disabled)})).forEach((function(t){if(t[c])r.treeHandler(e,t,n,o);else{var i=e.findIndex((function(e){return e[l]==t[l]}));"del"===o?-1!=i&&(e.splice(i,1),n.push(t)):"half"!==o&&"add"!==o||-1==i&&(e.push(t),n.push(t))}}));var p=u.length,d=u.filter((function(t){return-1!==e.findIndex((function(e){return e[l]===t[l]}))||!0===t.__node.selected})).length;t.__node.selected=d===p,t.__node.half=d>0&&d0&&h.length>=g)return this.updateBorderColor(i.maxColor),void(d&&u(d)&&d(h,e));h=a?[e]:[].concat(Se(h),[e]),this.resetSelectValue(h,[e],!t)}else{var _=h.findIndex((function(t){return t[m]==e[m]}));-1!=_&&(h.splice(_,1),this.resetSelectValue(h,[e],!t))}var w,k=e.__node.parent;if(k){for(;k;){var C=k[b],O=C.length,S=C.filter((function(e){return-1!==h.findIndex((function(t){return t[m]===e[m]}))||!0===e.__node.selected})).length;k.__node.selected=S===O,k.__node.half=S>0&&S0,k=k.__node.parent}this.setState({data:this.state.data})}c&&!o&&this.onClick()}}},{key:"onClick",value:function(e){var t=this;if("relative"!==this.props.model.type)if(this.props.disabled)!1!==this.state.show&&this.setState({show:!1});else{var n=!this.state.show;if(n){if(this.props.show&&0==this.props.show())return;Object.keys(He).filter((function(e){return e!=t.props.el})).forEach((function(e){return He[e].closed()}))}else{if(this.props.hide&&0==this.props.hide())return;this.bodyView.scroll&&this.bodyView.scroll(0,0)}this.setState({show:n}),e&&e.stopPropagation()}}},{key:"onReset",value:function(e,t){var n=this;if("data"===t){var o=e.filter((function(e){return!0===e[n.props.prop.selected]}));this.resetSelectValue(d(o,this.state.sels,this.props.prop),o,!0);var r=[];this.load(e,{},r),this.setState({data:e,flatData:r})}else"sels"===t?this.resetSelectValue(e,e,!0):"append"===t?this.append(e):"delete"===t?this.del(e):"auto"===t?this.auto(e):"treeData"===t?this.value(e,null,!0):"close"===t?this.onClick():"class"===t&&this.setState({bodyClass:e})}},{key:"append",value:function(e){var t=this.exchangeValue(e);this.resetSelectValue(d(t,this.state.sels,this.props.prop),t,!0)}},{key:"del",value:function(e){var t=this.props.prop.value,n=this.state.sels;(e=this.exchangeValue(e)).forEach((function(e){var o=n.findIndex((function(n){return n[t]===e[t]}));-1!=o&&n.splice(o,1)})),this.resetSelectValue(n,e,!1)}},{key:"auto",value:function(e){var t=this,n=this.props.prop.value;e.filter((function(e){return-1!=t.state.sels.findIndex((function(t){return t[n]===e[n]}))})).length==e.length?this.del(e):this.append(e)}},{key:"componentWillReceiveProps",value:function(e){this.init(e,e.updateData)}},{key:"componentWillMount",value:function(){this.init(this.props,!0)}},{key:"render",value:function(e,t){var n=this,o=e.theme,r=e.prop,i=(e.radio,e.repeat,e.clickClose,e.on,e.max,e.maxMethod,e.content),l=e.disabled,a=e.tree,s={borderColor:o.color},c=t.data,u=t.dataObj,p=t.flatData,d=t.sels,f=t.show,h=t.tmpColor,m=t.bodyClass;l&&(f=!1);var b={style:Ee({},e.style,{},f?s:{}),onClick:this.onClick.bind(this),ua:-1!=navigator.userAgent.indexOf("Mac OS")?"mac":"win",size:e.size,tabindex:1};h&&(b.style.borderColor=h,setTimeout((function(){b.style.borderColor="",n.updateBorderColor("")}),300)),r.value;var x=Ee({},e,{data:c,sels:d,ck:this.itemClick.bind(this),title:d.map((function(e){return e[r.name]})).join(",")}),y=Ee({},e,{data:c,dataObj:u,flatData:p,sels:d,ck:this.itemClick.bind(this),show:f,onReset:this.onReset.bind(this)}),v=i?O(de,y):a.show?O(ve,y):e.cascader.show?O(Oe,y):O(le,y);return O("xm-select",b,O("input",{class:"xm-select-default","lay-verify":e.layVerify,"lay-verType":e.layVerType,name:e.name,value:d.map((function(e){return e[r.value]})).join(",")}),O("i",{class:f?"xm-icon xm-icon-expand":"xm-icon"}),0===d.length&&O("div",{class:"xm-tips"},e.tips),O(G,x),O("div",{class:["xm-body",m,e.model.type,f?"":"dis"].join(" "),ref:function(e){return n.bodyView=e}},v),l&&O("div",{class:"xm-select-disabled"}))}},{key:"componentDidMount",value:function(){var e=this;this.prepare=!0,this.base.addEventListener("keydown",(function(t){13===t.keyCode&&e.onClick()})),this.input=this.base.querySelector(".xm-select-default");var t=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;t&&new t((function(t){t.forEach((function(t){"attributes"==t.type&&"class"===t.attributeName&&-1!==e.input.className.indexOf("layui-form-danger")&&(e.input.className="xm-select-default",e.base.style.borderColor=e.props.theme.maxColor)}))})).observe(this.input,{attributes:!0});for(var n=this.base;n;){if("FORM"===n.tagName){var o=n.querySelector('button[type="reset"]');o&&o.addEventListener("click",(function(t){e.init(e.props,!0)}));break}n=n.parentElement}}},{key:"componentDidUpdate",value:function(){var e=this.props,t=e.direction;if("relative"!==e.model.type){var n=this.base.getBoundingClientRect();if("auto"===t){this.bodyView.style.display="block",this.bodyView.style.visibility="hidden";var o=this.bodyView.getBoundingClientRect().height;this.bodyView.style.display="",this.bodyView.style.visibility="";var r=n.y||n.top||0,i=document.documentElement.clientHeight-r-n.height-20;t=i>o||r0&&void 0!==arguments[0]?arguments[0]:"zn",t=Le[e]||ze;return{language:e,languageProp:t,data:[],content:"",name:"select",layVerify:"",layVerType:"",size:"medium",disabled:!1,initValue:null,create:null,tips:t.tips,empty:t.empty,delay:500,searchTips:t.searchTips,filterable:!1,filterMethod:function(e,t,n,o){return!e||-1!=t[o.name].indexOf(e)},remoteSearch:!1,remoteMethod:function(e,t){t([])},direction:"auto",style:{},height:"200px",autoRow:!1,paging:!1,pageSize:10,pageEmptyShow:!0,pageRemote:!1,radio:!1,repeat:!1,clickClose:!1,max:0,maxMethod:function(e,t){},showCount:0,toolbar:{show:!1,showIcon:!0,list:["ALL","CLEAR"]},tree:{show:!1,showFolderIcon:!0,showLine:!0,indent:20,expandedKeys:[],strict:!0,lazy:!1,load:null,simple:!1},cascader:{show:!1,indent:100,strict:!0},prop:{name:"name",value:"value",selected:"selected",disabled:"disabled",children:"children",optgroup:"optgroup",click:"click"},theme:{color:"#009688",maxColor:"#e54d42",hover:"#f2f2f2"},model:{label:{type:"block",text:{left:"",right:"",separator:", "},block:{showCount:0,showIcon:!0,template:null},count:{template:function(e,t){return"已选中 ".concat(t.length," 项, 共 ").concat(e.length," 项")}}},icon:"show",type:"absolute"},show:function(){},hide:function(){},template:function(e){e.item,e.sels;var t=e.name;return e.value,t},on:function(e){e.arr,e.item,e.selected}}}(e.language),this.update(e)}},{key:"update",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=!!e.data;this.options=p(this.options,e);var n=this.options.dom;if(n){var o=this.options.data||[];if("function"==typeof o&&(o=o(),this.options.data=o),c(o))return K(O(Te,Ve({},this.options,{updateData:t})),n),this;s("data数据必须为数组类型, 不能是".concat("undefined"==typeof data?"undefined":Fe(data),"类型"))}else s("没有找到渲染对象: ".concat(e.el,", 请检查"))}},{key:"reset",value:function(){var e=this.options.el;return this.init(Ke[e]),qe[e].init(this.options,!0),this}},{key:"opened",value:function(){var e=qe[this.options.el];return!e.state.show&&e.onClick(),this}},{key:"closed",value:function(){var e=qe[this.options.el];return e.state.show&&e.onClick(),this}},{key:"getValue",value:function(e){var t=this,n=this.options,o=n.tree,r=n.prop,i=n.data,l=qe[this.options.el].state.sels,a=l;o.show&&o.strict&&o.simple&&f(i,l,a=[],r);var s=h(a,r.children,["__node"]);return"name"===e?s.map((function(e){return e[t.options.prop.name]})):"nameStr"===e?s.map((function(e){return e[t.options.prop.name]})).join(","):"value"===e?s.map((function(e){return e[t.options.prop.value]})):"valueStr"===e?s.map((function(e){return e[t.options.prop.value]})).join(","):s}},{key:"setValue",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(c(e))return qe[this.options.el].value(this.options.radio?e.slice(0,1):e,t,n),this;s("请传入数组结构...")}},{key:"append",value:function(e){if(c(e))return qe[this.options.el].append(e),this;s("请传入数组结构...")}},{key:"delete",value:function(e){if(c(e))return qe[this.options.el].del(e),this;s("请传入数组结构...")}},{key:"warning",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e||this.options.theme.maxColor;return!0===t?qe[this.options.el].base.style.borderColor=n:qe[this.options.el].updateBorderColor(n),this}}])&&Ue(t.prototype,n),o&&Ue(t,o),e}();function Ne(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t>>0;for(t&&(n=t),o=new Array(a),r=0;r>>0;if("function"!=typeof e)throw new TypeError(e+" is not a function");for(arguments.length>1&&(n=t),o=0;o>>0;if("function"!=typeof e)throw new TypeError;for(var o=[],r=arguments[1],i=0;i>>0,r=arguments[1],i=0;i .xm-tips {\n color: #999999;\n padding: 0 10px;\n position: absolute;\n display: flex;\n height: 100%;\n align-items: center;\n}\nxm-select > .xm-icon {\n display: inline-block;\n overflow: hidden;\n position: absolute;\n width: 0;\n height: 0;\n right: 10px;\n top: 50%;\n margin-top: -3px;\n cursor: pointer;\n border: 6px dashed transparent;\n border-top-color: #C2C2C2;\n border-top-style: solid;\n transition: all 0.3s;\n -webkit-transition: all 0.3s;\n}\nxm-select > .xm-icon-expand {\n margin-top: -9px;\n transform: rotate(180deg);\n}\nxm-select > .xm-label.single-row {\n position: absolute;\n top: 0;\n bottom: 0px;\n left: 0px;\n right: 30px;\n overflow: auto hidden;\n}\nxm-select > .xm-label.single-row .scroll {\n overflow-y: hidden;\n}\nxm-select > .xm-label.single-row .label-content {\n flex-wrap: nowrap;\n white-space: nowrap;\n}\nxm-select > .xm-label.auto-row .label-content {\n flex-wrap: wrap;\n padding-right: 30px !important;\n}\nxm-select > .xm-label.auto-row .xm-label-block > span {\n white-space: unset;\n height: 100%;\n}\nxm-select > .xm-label .scroll .label-content {\n display: flex;\n padding: 3px 10px;\n}\nxm-select > .xm-label .xm-label-block {\n display: flex;\n position: relative;\n padding: 0px 5px;\n margin: 2px 5px 2px 0;\n border-radius: 3px;\n align-items: baseline;\n color: #FFF;\n}\nxm-select > .xm-label .xm-label-block > span {\n display: flex;\n color: #FFF;\n white-space: nowrap;\n}\nxm-select > .xm-label .xm-label-block > i {\n color: #FFF;\n margin-left: 8px;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n}\nxm-select > .xm-label .xm-label-block.disabled {\n background-color: #C2C2C2 !important;\n cursor: no-drop !important;\n}\nxm-select > .xm-label .xm-label-block.disabled > i {\n cursor: no-drop !important;\n}\nxm-select > .xm-body {\n position: absolute;\n left: 0;\n top: 42px;\n padding: 5px 0;\n z-index: 999;\n width: 100%;\n min-width: fit-content;\n border: 1px solid #E6E6E6;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);\n animation-name: xm-upbit;\n animation-duration: 0.3s;\n animation-fill-mode: both;\n}\nxm-select > .xm-body .scroll-body {\n overflow-x: hidden;\n overflow-y: auto;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar {\n width: 8px;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar-track {\n -webkit-border-radius: 2em;\n -moz-border-radius: 2em;\n -ms-border-radius: 2em;\n border-radius: 2em;\n background-color: #FFF;\n}\nxm-select > .xm-body .scroll-body::-webkit-scrollbar-thumb {\n -webkit-border-radius: 2em;\n -moz-border-radius: 2em;\n -ms-border-radius: 2em;\n border-radius: 2em;\n background-color: #C2C2C2;\n}\nxm-select > .xm-body.up {\n top: auto;\n bottom: 42px;\n}\nxm-select > .xm-body.relative {\n position: relative;\n display: block !important;\n top: 0;\n box-shadow: none;\n border: none;\n animation-name: none;\n animation-duration: 0;\n min-width: 100%;\n}\nxm-select > .xm-body .xm-group {\n cursor: default;\n}\nxm-select > .xm-body .xm-group-item {\n display: inline-block;\n cursor: pointer;\n padding: 0 10px;\n color: #999;\n font-size: 12px;\n}\nxm-select > .xm-body .xm-option {\n display: flex;\n align-items: center;\n position: relative;\n padding: 0 10px;\n cursor: pointer;\n}\nxm-select > .xm-body .xm-option-icon {\n color: transparent;\n display: flex;\n border: 1px solid #E6E6E6;\n border-radius: 3px;\n justify-content: center;\n align-items: center;\n}\nxm-select > .xm-body .xm-option-icon.xm-custom-icon {\n color: unset;\n border: unset;\n}\nxm-select > .xm-body .xm-option-icon-hidden {\n margin-right: -10px;\n}\nxm-select > .xm-body .xm-option-icon.xm-icon-danx {\n border-radius: 100%;\n}\nxm-select > .xm-body .xm-option-content {\n display: flex;\n position: relative;\n padding-left: 15px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n color: #666;\n width: calc(100% - 20px);\n}\nxm-select > .xm-body .xm-option.hide-icon .xm-option-content {\n padding-left: 0;\n}\nxm-select > .xm-body .xm-option.selected.hide-icon .xm-option-content {\n color: #FFF !important;\n}\nxm-select > .xm-body .xm-option .loader {\n width: 0.8em;\n height: 0.8em;\n margin-right: 6px;\n color: #C2C2C2;\n}\nxm-select > .xm-body .xm-select-empty {\n text-align: center;\n color: #999;\n}\nxm-select > .xm-body .disabled {\n cursor: no-drop;\n}\nxm-select > .xm-body .disabled:hover {\n background-color: #FFF;\n}\nxm-select > .xm-body .disabled .xm-option-icon {\n border-color: #C2C2C2 !important;\n}\nxm-select > .xm-body .disabled .xm-option-content {\n color: #C2C2C2 !important;\n}\nxm-select > .xm-body .disabled.selected > .xm-option-icon {\n color: #C2C2C2 !important;\n}\nxm-select > .xm-body .xm-search {\n background-color: #FFF !important;\n position: relative;\n padding: 0 10px;\n margin-bottom: 5px;\n cursor: pointer;\n}\nxm-select > .xm-body .xm-search > i {\n position: absolute;\n color: #666;\n}\nxm-select > .xm-body .xm-search-input {\n border: none;\n border-bottom: 1px solid #E6E6E6;\n padding-left: 27px;\n cursor: text;\n}\nxm-select > .xm-body .xm-paging {\n padding: 0 10px;\n display: flex;\n margin-top: 5px;\n}\nxm-select > .xm-body .xm-paging > span:first-child {\n border-radius: 2px 0 0 2px;\n}\nxm-select > .xm-body .xm-paging > span:last-child {\n border-radius: 0 2px 2px 0;\n}\nxm-select > .xm-body .xm-paging > span {\n display: flex;\n flex: auto;\n justify-content: center;\n vertical-align: middle;\n margin: 0 -1px 0 0;\n background-color: #fff;\n color: #333;\n font-size: 12px;\n border: 1px solid #e2e2e2;\n flex-wrap: nowrap;\n width: 100%;\n overflow: hidden;\n min-width: 50px;\n}\nxm-select > .xm-body .xm-toolbar {\n padding: 0 10px;\n display: flex;\n margin: -3px 0;\n cursor: default;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag {\n cursor: pointer;\n display: flex;\n margin-right: 20px;\n color: #666;\n align-items: baseline;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:hover {\n opacity: 0.8;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:active {\n opacity: 1;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag > i {\n margin-right: 2px;\n font-size: 14px;\n}\nxm-select > .xm-body .xm-toolbar .toolbar-tag:last-child {\n margin-right: 0;\n}\nxm-select > .xm-body .xm-body-custom {\n line-height: initial;\n cursor: default;\n}\nxm-select > .xm-body .xm-body-custom * {\n box-sizing: initial;\n}\nxm-select > .xm-body .xm-tree {\n position: relative;\n}\nxm-select > .xm-body .xm-tree-icon {\n display: inline-block;\n margin-right: 3px;\n cursor: pointer;\n border: 6px dashed transparent;\n border-left-color: #C2C2C2;\n border-left-style: solid;\n transition: all 0.3s;\n -webkit-transition: all 0.3s;\n z-index: 2;\n visibility: hidden;\n}\nxm-select > .xm-body .xm-tree-icon.expand {\n margin-top: 3px;\n margin-right: 5px;\n margin-left: -2px;\n transform: rotate(90deg);\n}\nxm-select > .xm-body .xm-tree-icon.xm-visible {\n visibility: visible;\n}\nxm-select > .xm-body .xm-tree .left-line {\n position: absolute;\n left: 13px;\n width: 0;\n z-index: 1;\n border-left: 1px dotted #c0c4cc !important;\n}\nxm-select > .xm-body .xm-tree .top-line {\n position: absolute;\n left: 13px;\n height: 0;\n z-index: 1;\n border-top: 1px dotted #c0c4cc !important;\n}\nxm-select > .xm-body .xm-tree .xm-tree-icon + .top-line {\n margin-left: 1px;\n}\nxm-select > .xm-body .scroll-body > .xm-tree > .xm-option > .top-line,\nxm-select > .xm-body .scroll-body > .xm-option > .top-line {\n width: 0 !important;\n}\nxm-select > .xm-body .xm-cascader-box {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n padding: 5px 0;\n border: 1px solid #E6E6E6;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12);\n margin: -1px;\n}\nxm-select > .xm-body .xm-cascader-box::before {\n content: ' ';\n position: absolute;\n width: 0;\n height: 0;\n border: 6px solid transparent;\n border-right-color: #E6E6E6;\n top: 10px;\n left: -12px;\n}\nxm-select > .xm-body .xm-cascader-box::after {\n content: ' ';\n position: absolute;\n width: 0;\n height: 0;\n border: 6px solid transparent;\n border-right-color: #fff;\n top: 10px;\n left: -11px;\n}\nxm-select > .xm-body .xm-cascader-scroll {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n}\nxm-select > .xm-body.cascader {\n width: unset;\n min-width: unset;\n}\nxm-select > .xm-body.cascader .xm-option-content {\n padding-left: 8px;\n}\nxm-select > .xm-body.cascader .disabled .xm-right-arrow {\n color: #C2C2C2 !important;\n}\nxm-select .xm-input {\n cursor: pointer;\n border-radius: 2px;\n border-width: 1px;\n border-style: solid;\n border-color: #E6E6E6;\n display: block;\n width: 100%;\n box-sizing: border-box;\n background-color: #FFF;\n line-height: 1.3;\n padding-left: 10px;\n outline: 0;\n user-select: text;\n -ms-user-select: text;\n -moz-user-select: text;\n -webkit-user-select: text;\n}\nxm-select .dis {\n display: none;\n}\nxm-select .loading {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(255, 255, 255, 0.6);\n display: flex;\n align-items: center;\n justify-content: center;\n}\nxm-select .loader {\n border: 0.2em dotted currentcolor;\n border-radius: 50%;\n -webkit-animation: 1s loader linear infinite;\n animation: 1s loader linear infinite;\n display: inline-block;\n width: 1em;\n height: 1em;\n color: inherit;\n vertical-align: middle;\n pointer-events: none;\n}\nxm-select .xm-select-default {\n position: absolute;\n width: 100%;\n height: 100%;\n border: none;\n visibility: hidden;\n}\nxm-select .xm-select-disabled {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n cursor: no-drop;\n z-index: 2;\n opacity: 0.3;\n background-color: #FFF;\n}\nxm-select .item--divided {\n border-top: 1px solid #ebeef5;\n width: calc(100% - 20px);\n cursor: initial;\n}\nxm-select .xm-right-arrow {\n position: absolute;\n color: #666;\n right: 5px;\n top: -1px;\n font-weight: 700;\n transform: scale(0.6, 1);\n}\nxm-select .xm-right-arrow::after {\n content: '>';\n}\nxm-select[size='large'] {\n min-height: 40px;\n line-height: 40px;\n}\nxm-select[size='large'] .xm-input {\n height: 40px;\n}\nxm-select[size='large'] .xm-label .scroll .label-content {\n line-height: 34px;\n}\nxm-select[size='large'] .xm-label .xm-label-block {\n height: 30px;\n line-height: 30px;\n}\nxm-select[size='large'] .xm-body .xm-option .xm-option-icon {\n height: 20px;\n width: 20px;\n font-size: 20px;\n}\nxm-select[size='large'] .xm-paging > span {\n height: 34px;\n line-height: 34px;\n}\nxm-select[size='large'] .xm-tree .left-line {\n height: 100%;\n bottom: 20px;\n}\nxm-select[size='large'] .xm-tree .left-line-group {\n height: calc(100% - 40px);\n}\nxm-select[size='large'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 19px;\n}\nxm-select[size='large'] .item--divided {\n margin: 10px;\n}\nxm-select {\n min-height: 36px;\n line-height: 36px;\n}\nxm-select .xm-input {\n height: 36px;\n}\nxm-select .xm-label .scroll .label-content {\n line-height: 30px;\n}\nxm-select .xm-label .xm-label-block {\n height: 26px;\n line-height: 26px;\n}\nxm-select .xm-body .xm-option .xm-option-icon {\n height: 18px;\n width: 18px;\n font-size: 18px;\n}\nxm-select .xm-paging > span {\n height: 30px;\n line-height: 30px;\n}\nxm-select .xm-tree .left-line {\n height: 100%;\n bottom: 18px;\n}\nxm-select .xm-tree .left-line-group {\n height: calc(100% - 36px);\n}\nxm-select .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 17px;\n}\nxm-select .item--divided {\n margin: 9px;\n}\nxm-select[size='small'] {\n min-height: 32px;\n line-height: 32px;\n}\nxm-select[size='small'] .xm-input {\n height: 32px;\n}\nxm-select[size='small'] .xm-label .scroll .label-content {\n line-height: 26px;\n}\nxm-select[size='small'] .xm-label .xm-label-block {\n height: 22px;\n line-height: 22px;\n}\nxm-select[size='small'] .xm-body .xm-option .xm-option-icon {\n height: 16px;\n width: 16px;\n font-size: 16px;\n}\nxm-select[size='small'] .xm-paging > span {\n height: 26px;\n line-height: 26px;\n}\nxm-select[size='small'] .xm-tree .left-line {\n height: 100%;\n bottom: 16px;\n}\nxm-select[size='small'] .xm-tree .left-line-group {\n height: calc(100% - 32px);\n}\nxm-select[size='small'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 15px;\n}\nxm-select[size='small'] .item--divided {\n margin: 8px;\n}\nxm-select[size='mini'] {\n min-height: 28px;\n line-height: 28px;\n}\nxm-select[size='mini'] .xm-input {\n height: 28px;\n}\nxm-select[size='mini'] .xm-label .scroll .label-content {\n line-height: 22px;\n}\nxm-select[size='mini'] .xm-label .xm-label-block {\n height: 18px;\n line-height: 18px;\n}\nxm-select[size='mini'] .xm-body .xm-option .xm-option-icon {\n height: 14px;\n width: 14px;\n font-size: 14px;\n}\nxm-select[size='mini'] .xm-paging > span {\n height: 22px;\n line-height: 22px;\n}\nxm-select[size='mini'] .xm-tree .left-line {\n height: 100%;\n bottom: 14px;\n}\nxm-select[size='mini'] .xm-tree .left-line-group {\n height: calc(100% - 28px);\n}\nxm-select[size='mini'] .xm-tree .xm-tree-icon.xm-hidden + .top-line {\n top: 13px;\n}\nxm-select[size='mini'] .item--divided {\n margin: 7px;\n}\n.layui-form-pane xm-select {\n margin: -1px -1px -1px 0;\n}\n",""]),e.exports=t},218:function(e,t,n){var o=n(219);"string"==typeof o&&(o=[[e.i,o,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(27)(o,r);o.locals&&(e.exports=o.locals)},219:function(e,t,n){(t=n(26)(!1)).push([e.i,'@font-face {\n font-family: "xm-iconfont";\n src: url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.eot?t=1574048839056\');\n /* IE9 */\n src: url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.eot?t=1574048839056#iefix\') format(\'embedded-opentype\'), /* IE6-IE8 */ url(\'data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAksAAsAAAAAEYAAAAjeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEUgqTXI8lATYCJAM0CxwABCAFhG0HgTwbZQ4jEbaCkVIj+4sD3sS6BFAp9ka91ulVG4leTC/+h+3V+zyRYCTyREKkcZ+D5/u137lPdveLGJBMunoiNPOQPBMq0/FQtEKIkMRDZng69d+hOiQumAr7bJdBOEzMTU77s78mhbI58aCg7ebCs4LBTgCk+cD/4ZqWUHebipp7al3tyKOjwCV/hVyw9PdzaktxI7IMQs26/1N8gV4DI0bVut3UhCaflGGgwM3oTXg1IfRMbCsmrEnriJVeYM2eXHII4KdMMzL4OoACHgZBCTasITcReDUBE8kWPLMTCGoQaDV+eKpUPQI49r8vP6BTPIDCaiBSml3oOQX0voNPebv/u2P0AUfP1w0s5EADzYBZsNdByylo2eVq/NtRdgFpovQR5x2CIwmIZeik6/u0T/m/A7RJP00sCmmyksj/kwc+LC5BFBqDEMDDjwPiANDB9MpJTXwHmsO3YyBwWDA4OFwwJLRcRgAOBUYMDg0mHRwGTAYozsV0AgWYruDwwExDHfzwKWf4OurQ9jzQDtoF+wpistfBfluQ5bQiiJa4ZQoKhShLiMayBbyg05AIkYBoIBJEEApQy/FwYv4HchADIUBXl61dW6mpwIgyp7p8PrHddieSjhY9oqTxyPB/FGNYDklpfYh8VtaoqSgb0bKoGB17CuVUp9Ll2nS2UpNGMSw9hyirA7C6+QLyByIQS0sSSmxvArC5odZmYZMxZSiBR5OkQl0uiufxMH5eL8t3u0d4XKyuq6EMdcpNe2+oXA8p9yPa+4T1PM7+A54tc7tpl2vcAHAftnhZj2chy1CyaCRFsyMqQ5nkNnskEt2yxxZinPsOZjFm4+XWvKqLkfCGS1k4MNP82isxSMf7ZsGYvQVCNAeSSVtzWCxRdXGxyZlA2CvCEevuO7y9M2z2NWH8icydzq/qAJSp1lGvDWFp6Nw3xChJowPD+76nU+upQk6Kw9jI0Rgym9Ct8VlxMI3CSIaDCZja5tDYt0/EYra4tn0Kp3v8Rdezk8svcy1mKhoSvNcZz3LKlUe777Gmval0s7bzAc0k13LGk896V9DuvNn34N0ebKgItkQgOomuJtgQPChNI4cwa7CEWCvfk5QjJFlem6i3SfVShWi5LTFRG+JwdCNpSqbpRFwrtb1TbcRkJi/AbJJQOmfCdnswLNGVM7qqSRO1zO0Q0j5Vr3cYQ07HB0MX6KoIZhx+D9Djs2C5bXtVwvbgJHtSCIL7hjFJme4sZDdS5IlJdKUO1Qt8opn0trBafz3AX933kmCRgyMEWGZjMAkRKhwmIHJGR4ruwFCdWKYzrap2R/mvd2UKajzRAZu88pGAD90Y+02kTFCKrBSXwGGJ3wRcPCdIppTxSmHOfESRwIli0S5J/8AYDCxTGh4XZua4xvfvGx320rDK2qA8g5FlS7pWNLx71+BwgA/KZ5I0aeKmNeCNoNPl8qNHu8uHHzqaKc86fHi4vPuRI4ny+I/vjxw+clh4HXVCFvVnVFx07EHZwVhSRliTTMWSEi0h6YuS6DxCRmiin0B3L4ry6cvR0ijYexFdBL3wGQM0YOrUAZCBkLOBBtQ+xdk7omfgUv+u++admyUeXduyxLM+r/+49rPfhgEZor6GymToNYksNsZyC7ntwAH0928UpgMpxpF0ydNlsMMBw7QsxTCmu0Hf3F+/+vb99Yumhb+e9R0LBNm+4O+hu7lQ5bGjI9j5G88qQ5SLFyuEC7cwd25xoYo2j4eA4bhpM7TZhPtmc+uhVEVSMYXLWh0bfjI8dvUpvDUocPZmU4kwwOfc83wB5wPehrpD3waApbwW+fgRrZXcxw+mB/3woZT+8JFMYwRMIy2k/18qhqcKpjYeYSnIACaUoRDu0e3kQFh98R5fiI8oJqwwGZSJDSbehLzZs7zIeWTQ4UGOIs2c4j2/Q/tn7n7j9juO33On6WhURCT/wO6Y3QdmWFY0Ef6JUeGRggO7ZbtaZlh5RYKWXbLPBLc3l/5h4A0mu3ZXTZ+u6t6VHMAzZhxak50T+24NnRuaOmehRkXlqVR5lIpuwezUUDUdCuJysv8Z/0/8uNE1s7jIJIubFWnI/x7g4nAZx79yYpFoAOU3a9iwT1O/GxUxPY0ljVPv9EukI3qNrl/So2YfzasqHCroNjS0+w0tlPlsYfC6v/01ixquizJH1Kd/VK+OS3iS3rTJWmqsMPdU3B3oFyC9RSumWE/0gG36IjTysfH51IJ/5oOgNYu6p4yb5Fdufhr/Kjtu0oSyYP/WJQrz35aNFnMhtFcwb55NlNnH8Wdu1b+XZA9zqlZrhdPo/V3uBhiUlQ66h0LhbAmFYIncdFOpVMh6Fl7peqy5Z2ZdQBITO2x1Asj1dRFjIBMC3hbuUh8Ooc4W03EjAdo8UL/t0oUfyU8630bmMcw/vqDNAsC9BQD4OqCgH+ljy0UhJB8AAJA+8EmArxk5gnRLik90AElf8rBm+IMvBTWnucb3+0o0ARk+r0ZBv8sU01nnSmP45/H8Dp8C8X+iE9e+ZvXymK/sQJ5/DuqhYKebPnKmPqLYuDcIMWS2/Rjxp2s8Do821LVn6A/xMK1RKvBLK5gyDsZ5uQ6bYusmx2yqLFe4lECHDPcFhojmckuAbnCI6Cn308RI6AAJdtCICQLQyBHKhSgX5YowN6BBPIEB8VxuSfNncpAuutzPnCSiDHDEo+DsKQBPoJi4MpRktepIs2zjO5h84IEMM3ffECKSZU1ZHxfewEI4h494MuuUNNOBjuw18QKHAzEXaAcylS3m3baq9MpnKenYmfEUgCdbXTHEtTVKsvruNGv9/DuYfOAhcuKu9TeEiA9nNJTUDOUbbVkn3sv2eDJrEnVrpvcHOjJeqRsOcpYYLuxoBzKVtCOm3ZaKbtJcurw+e/zN6c7Pd6r4gqUo0WLEiiOueOITvwQkKCEJM9nO3F60y5HkqLhdqUyXZtK3lqwReQ+G40O92UhOt0x/KmKM+u7LTPMzoEBOCYtiUPfSjODiuFXjSDm2idzAoc4Tj9bs2eJYDOU7HQA=\') format(\'woff2\'), url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.woff?t=1574048839056\') format(\'woff\'), url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.ttf?t=1574048839056\') format(\'truetype\'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url(\'//at.alicdn.com/t/font_792691_ptvyboo0bno.svg?t=1574048839056#iconfont\') format(\'svg\');\n /* iOS 4.1- */\n}\n.xm-iconfont {\n font-family: "xm-iconfont" !important;\n font-size: 16px;\n font-style: normal;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.xm-icon-quanxuan:before {\n content: "\\e62c";\n}\n.xm-icon-caidan:before {\n content: "\\e610";\n}\n.xm-icon-fanxuan:before {\n content: "\\e837";\n}\n.xm-icon-pifu:before {\n content: "\\e668";\n}\n.xm-icon-qingkong:before {\n content: "\\e63e";\n}\n.xm-icon-sousuo:before {\n content: "\\e600";\n}\n.xm-icon-danx:before {\n content: "\\e62b";\n}\n.xm-icon-duox:before {\n content: "\\e613";\n}\n.xm-icon-close:before {\n content: "\\e601";\n}\n.xm-icon-expand:before {\n content: "\\e641";\n}\n.xm-icon-banxuan:before {\n content: "\\e60d";\n}\n',""]),e.exports=t},220:function(e,t){(function(t){e.exports=t}).call(this,{})},26:function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=function(e,t){var n=e[1]||"",o=e[3];if(!o)return n;if(t&&"function"==typeof btoa){var r=function(e){var t=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),n="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(t);return"/*# ".concat(n," */")}(o),i=o.sources.map((function(e){return"/*# sourceURL=".concat(o.sourceRoot||"").concat(e," */")}));return[n].concat(i).concat([r]).join("\n")}return[n].join("\n")}(t,e);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,o){"string"==typeof e&&(e=[[null,e,""]]);var r={};if(o)for(var i=0;i=0&&p.splice(t,1)}function y(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var o=function(){0;return n.nc}();o&&(e.attrs.nonce=o)}return x(t,e.attrs),m(e,t),t}function x(e,t){Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])}))}function v(e,t){var n,o,r,i;if(t.transform&&e.css){if(!(i="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=i}if(t.singleton){var a=u++;n=c||(c=y(t)),o=w.bind(null,n,a,!1),r=w.bind(null,n,a,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",x(t,e.attrs),m(e,t),t}(t),o=C.bind(null,n,t),r=function(){b(n),n.href&&URL.revokeObjectURL(n.href)}):(n=y(t),o=k.bind(null,n),r=function(){b(n)});return o(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;o(e=t)}else r()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=a()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=h(e,t);return d(n,t),function(e){for(var o=[],r=0;re.length)&&(t=e.length);for(var n=0,o=new Array(t);n3)for(n=[n],o=3;o1&&F(r,t,n),t=T(n,r,r,e.__k,null,r.__e,t),"function"==typeof e.type&&(e.__d=t)))}function U(e,t,n,o,r,i,a,l,s){var c,u,p,f,d,h,m,y,x,v,g,_=t.type;if(void 0!==t.constructor)return null;(c=b.__b)&&c(t);try{e:if("function"==typeof _){if(y=t.props,x=(c=_.contextType)&&o[c.__c],v=c?x?x.props.value:c.__:o,n.__c?m=(u=t.__c=n.__c).__=u.__E:("prototype"in _&&_.prototype.render?t.__c=u=new _(y,v):(t.__c=u=new A(y,v),u.constructor=_,u.render=q),x&&x.sub(u),u.props=y,u.state||(u.state={}),u.context=v,u.__n=o,p=u.__d=!0,u.__h=[]),null==u.__s&&(u.__s=u.state),null!=_.getDerivedStateFromProps&&(u.__s==u.state&&(u.__s=C({},u.__s)),C(u.__s,_.getDerivedStateFromProps(y,u.__s))),f=u.props,d=u.state,p)null==_.getDerivedStateFromProps&&null!=u.componentWillMount&&u.componentWillMount(),null!=u.componentDidMount&&u.__h.push(u.componentDidMount);else{if(null==_.getDerivedStateFromProps&&y!==f&&null!=u.componentWillReceiveProps&&u.componentWillReceiveProps(y,v),!u.__e&&null!=u.shouldComponentUpdate&&!1===u.shouldComponentUpdate(y,u.__s,v)||t.__v===n.__v){u.props=y,u.state=u.__s,t.__v!==n.__v&&(u.__d=!1),u.__v=t,t.__e=n.__e,t.__k=n.__k,u.__h.length&&a.push(u),F(t,l,e);break e}null!=u.componentWillUpdate&&u.componentWillUpdate(y,u.__s,v),null!=u.componentDidUpdate&&u.__h.push((function(){u.componentDidUpdate(f,d,h)}))}u.context=v,u.props=y,u.state=u.__s,(c=b.__r)&&c(t),u.__d=!1,u.__v=t,u.__P=e,c=u.render(u.props,u.state,u.context),u.state=u.__s,null!=u.getChildContext&&(o=C(C({},o),u.getChildContext())),p||null==u.getSnapshotBeforeUpdate||(h=u.getSnapshotBeforeUpdate(f,d)),g=null!=c&&c.type==E&&null==c.key?c.props.children:c,M(e,Array.isArray(g)?g:[g],t,n,o,r,i,a,l,s),u.base=t.__e,u.__h.length&&a.push(u),m&&(u.__E=u.__=null),u.__e=!1}else null==i&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=N(n.__e,t,n,o,r,i,a,s);(c=b.diffed)&&c(t)}catch(e){t.__v=null,b.__e(e,t,n)}return t.__e}function B(e,t){b.__c&&b.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){b.__e(e,t.__v)}}))}function N(e,t,n,o,r,i,a,l){var s,c,u,p,f,d=n.props,h=t.props;if(r="svg"===t.type||r,null!=i)for(s=0;se.length)&&(t=e.length);for(var n=0,o=new Array(t);nr?n-r:r,a=this.labelRef.scrollLeft+e.deltaY;a<0&&(a=0),a>i&&(a=i),this.labelRef.scrollLeft=a}}},{key:"blur",value:function(){var e=this.base.querySelector(".label-search-input");e&&e.blur()}},{key:"componentDidMount",value:function(){this.labelRef.addEventListener&&this.labelRef.addEventListener("DOMMouseScroll",this.scrollFunc.bind(this),!1),this.labelRef.attachEvent&&this.labelRef.attachEvent("onmousewheel",this.scrollFunc.bind(this)),this.labelRef.onmousewheel=this.scrollFunc.bind(this)}},{key:"render",value:function(e){var t=this,n=e.data,o=e.prop,r=e.theme,i=e.model,a=e.sels,l=e.autoRow,s=e.tree,c=o.name,u=o.disabled,f=i.label,d=f.type,m=f[d],b=a;s.show&&s.strict&&s.simple&&h(n,a,b=[],o);var y="",x=!0,v=b.map((function(e){return e[c]})).join(",");if("text"===d)y=b.map((function(e){return"".concat(m.left).concat(e[c]).concat(m.right)})).join(m.separator);else if("block"===d){x=!1;var g=Q(b),_={backgroundColor:r.color},w=m.showCount<=0?g.length:m.showCount;y=g.splice(0,w).map((function(e){var n={width:m.showIcon?"calc(100% - 20px)":"100%"};return S("div",{class:["xm-label-block",e[u]?"disabled":""].join(" "),style:_},m.template&&p(m.template)?S("span",{style:n,dangerouslySetInnerHTML:{__html:m.template(e,g)}}):S("span",{style:n},e[c]),m.showIcon&&S("i",{class:"xm-iconfont xm-icon-close",onClick:t.iconClick.bind(t,e,!0,e[u])}))})),g.length&&y.push(S("div",{class:"xm-label-block",style:_},"+ ",g.length))}else if("search"==d){x=!1;var k="";b.length&&(k=b[0][c]),y=S("input",{class:"label-search-input",type:"text",placeholder:e.searchTips,style:{width:"100%",border:"none"},value:k,onInput:function(e){t.props.onReset(e,"labelSearch")},onCompositionstart:function(e){t.props.onReset(e,"labelSearch")},compositionupdate:function(e){t.props.onReset(e,"labelSearch")},compositionend:function(e){t.props.onReset(e,"labelSearch")},onClick:function(e){e.stopPropagation()}})}else y=b.length&&m&&m.template?m.template(n,b):b.map((function(e){return e[c]})).join(",");return S("div",{class:["xm-label",l?"auto-row":"single-row"].join(" ")},S("div",{class:"scroll",ref:function(e){return t.labelRef=e}},x?S("div",{class:"label-content",dangerouslySetInnerHTML:{__html:y}}):S("div",{class:"label-content",title:v},y)))}}])&&W(t.prototype,n),o&&W(t,o),i}(A);function ne(e){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function re(e){for(var t=1;t0&&void 0!==arguments[0]||this.size;var e=this.state.pageIndex;e<=1||(this.changePageIndex(e-1),this.props.pageRemote&&this.postData(e-1,!0))}},{key:"pageNextClick",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.size,t=this.state.pageIndex;t>=e||(this.changePageIndex(t+1),this.props.pageRemote&&this.postData(t+1,!0))}},{key:"changePageIndex",value:function(e){this.setState({pageIndex:e})}},{key:"labelSearch",value:function(e){"input"==e.type?this.searchInput(e):this.handleComposition(e)}},{key:"searchInput",value:function(e){var t=this,n=e.target.value;n!==this.__value&&(this.searchCid&&clearTimeout(this.searchCid),this.inputOver&&(this.__value=n,this.searchCid=setTimeout((function(){t.callback=!0,t.setState({filterValue:t.__value,remote:!0,pageIndex:1})}),this.props.delay)))}},{key:"focus",value:function(){this.searchInputRef&&this.searchInputRef.focus()}},{key:"blur",value:function(){this.searchInputRef&&this.searchInputRef.blur()}},{key:"handleComposition",value:function(e){var t=e.type;"compositionstart"===t?(this.inputOver=!1,this.searchCid&&clearTimeout(this.searchCid)):"compositionend"===t&&(this.inputOver=!0,this.searchInput(e))}},{key:"postData",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.state.pageIndex,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(this.state.remote||n)&&(this.callback=!1,this.setState({loading:!0,remote:!1}),this.blur(),this.props.remoteMethod(this.state.filterValue,(function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;setTimeout((function(){e.focus(),e.callback=!0,e.setState({loading:!1,totalSize:n}),e.props.onReset(t,"data")}),10)}),this.props.show,t))}},{key:"keydown",value:function(e,t){var n=this,o=t.keyCode;if("div"===e&&(27===o||9===o?this.props.onReset(!1,"close"):37===o?this.pagePrevClick():39===o&&this.pageNextClick()),this.props.enableKeyboard){var r=this.props.prop,i=r.value,a=r.optgroup,l=r.disabled,s=this.tempData.filter((function(e){return!e[a]&&!e[l]})),c=s.length-1;if(-1===c)return;var u=s.findIndex((function(e){return e[i]===n.state.val}));if(38===o){u<=0?u=c:u>0&&(u-=1);var p=s[u][i];this.setState({val:p});var f=this.base.querySelector('.xm-option[value="'.concat(p,'"]'));f&&f.scrollIntoView(!1)}else if(40===o){-1===u||u===c?u=0:uT&&(z=T),T>0&&z<=0&&(z=1),!v){var L=(z-1)*e.pageSize,V=L+e.pageSize;E=E.slice(L,V)}var F={cursor:"no-drop",color:"#d2d2d2"},U={},B={};z<=1&&(U=F),z==T&&(B=F),this.state.pageIndex!==z&&this.changePageIndex(z),this.size=T,M=S("div",{class:"xm-paging"},S("span",{style:U,onClick:this.pagePrevClick.bind(this,T)},e.languageProp.paging.prev),S("span",null,this.state.pageIndex," / ",T),S("span",{style:B,onClick:this.pageNextClick.bind(this,T)},e.languageProp.paging.next))}else e.showCount>0&&(E=E.slice(0,e.showCount));var N,K=[],H={__tmp:!0};H[j]=!0,E.forEach((function(e){var t=D[e.__group__index];delete e.__group__index,N&&!t&&(t=H),t!=N&&(N=t,t&&K.push(N)),K.push(e)})),E=K,t&&(t=x(this.state.filterValue,f([],E)))&&E.splice(0,0,re(re({},t),{},{__node:{}}));var q=f([],E);this.tempData=q;var Y=S("div",{class:"xm-toolbar"},e.toolbar.list.map((function(t){var o,r=e.languageProp.toolbar[t];o="ALL"===t?{icon:"xm-iconfont xm-icon-quanxuan",name:r,method:function(e){var t=i.optgroup,o=i.disabled,r=e.filter((function(e){return!e[t]})).filter((function(e){return!e[o]})),a=c.filter((function(e){return e[i.disabled]})),l=[];l=s?a.length?a:r.slice(0,1):g>0?a.length>=g?a:d(r.slice(0,g-a.length),a,i):d(r,c,i),n.props.onReset(l,"sels")}}:"CLEAR"===t?{icon:"xm-iconfont xm-icon-qingkong",name:r,method:function(e){n.props.onReset(c.filter((function(e){return e[i.disabled]})),"sels")}}:"REVERSE"===t?{icon:"xm-iconfont xm-icon-fanxuan",name:r,method:function(e){var t=i.optgroup,o=i.disabled,r=e.filter((function(e){return!e[t]})).filter((function(e){return!e[o]})),a=[];c.forEach((function(e){var t=r.findIndex((function(t){return t[k]===e[k]}));-1==t?a.push(e):r.splice(t,1)}));var l=a.filter((function(e){return e[i.disabled]})),u=[];u=s?l.length?l:r.slice(0,1):g>0?l.length>=g?l:d(r.slice(0,g-l.length),l,i):d(r,a,i),n.props.onReset(u,"sels")}}:t;var a=function(e){"mouseenter"===e.type&&(e.target.style.color=l.color),"mouseleave"===e.type&&(e.target.style.color="")};return S("div",{class:"toolbar-tag",style:{},onClick:function(){p(o.method)&&o.method(q),n.focus()},onMouseEnter:a,onMouseLeave:a},e.toolbar.showIcon&&S("i",{class:o.icon}),S("span",null,o.name))})).filter((function(e){return e}))),Z="hidden"!=e.model.icon;return(E=E.map((function(t){return t[j]?t.__tmp?S("div",{class:"item--divided"}):S("div",{class:"xm-group"},S("div",{class:"xm-group-item",onClick:n.groupClick.bind(n,t)},t[w])):function(t){var r=!!c.find((function(e){return e[k]==t[k]})),i=r?{color:l.color,border:"none"}:{borderColor:l.color},u={};_&&t[k]===n.state.val&&(u.backgroundColor=l.hover),!Z&&r&&(u.backgroundColor=l.color,t[C]&&(u.backgroundColor="#C2C2C2"));var p,f,d=["xm-option",t[C]?" disabled":"",r?" selected":"",Z?"show-icon":"hide-icon"].join(" "),h=["xm-option-icon",(p=e.iconfont.select,f=e.iconfont.unselect,(p?!r&&f?f+" xm-custom-icon":p:0)||"xm-iconfont "+(s?"xm-icon-danx":"xm-icon-duox"))].join(" "),m=function(e){"mouseenter"===e.type?t[C]||(_?n.setState({val:t[k]}):e.target.style.backgroundColor=l.hover):"mouseleave"===e.type&&(t[C]||_||(e.target.style.backgroundColor=""))};return S("div",{class:d,style:u,value:t[k],onClick:n.optionClick.bind(n,t,r,t[C]),onMouseEnter:m,onMouseLeave:m},Z&&S("i",{class:h,style:i}),S("div",{class:"xm-option-content",dangerouslySetInnerHTML:{__html:a({data:o,item:t,arr:c,name:t[w],value:t[k]})}}))}(t)}))).length||(!e.pageEmptyShow&&(M=""),E.push(S("div",{class:"xm-select-empty"},u))),S("div",{onClick:this.blockClick,tabindex:"1",style:"outline: none;"},S("div",null,e.toolbar.show&&Y,I,S("div",{class:"scroll-body",style:{maxHeight:e.height}},E),e.paging&&M),this.state.loading&&S("div",{class:"loading"},S("span",{class:"loader"})))}},{key:"componentDidMount",value:function(){var e=this.base.querySelector(".xm-search-input");e&&(e.addEventListener("compositionstart",this.handleComposition.bind(this)),e.addEventListener("compositionupdate",this.handleComposition.bind(this)),e.addEventListener("compositionend",this.handleComposition.bind(this)),e.addEventListener("input",this.searchInput.bind(this)),this.searchInputRef=e),this.base.addEventListener("keydown",this.keydown.bind(this,"div"))}},{key:"componentDidUpdate",value:function(){if(this.callback){this.callback=!1;var e=this.props.filterDone;p(e)&&e(this.state.filterValue,this.tempData||[])}}}])&&ae(t.prototype,n),o&&ae(t,o),i}(A);function de(e){return(de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function he(e,t){for(var n=0;n0||u.lazy&&!1!==e.__node.loading)?"xm-visible":"xm-hidden"].join(" "),O=[];u.showFolderIcon&&(O.push(S("i",{class:k,type:"expand"})),u.showLine&&(o&&O.push(S("i",{class:"left-line",style:{left:t-u.indent+3+"px"}})),O.push(S("i",{class:"top-line",style:{left:t-u.indent+3+"px",width:u.indent+(0===o?10:-2)+"px"}}))));var j=function(t){"mouseenter"===t.type?e[_]||(x?n.setState({val:e[g]}):t.target.style.backgroundColor=a.hover):"mouseleave"===t.type&&(e[_]||x||(t.target.style.backgroundColor=""))};return S("div",{class:m,style:h,value:e[g],onClick:n.optionClick.bind(n,e,r,e[_],"line"),onMouseEnter:j,onMouseLeave:j},O,e.__node.loading&&S("span",{class:"loader"}),C&&S("i",{class:b,style:d,onClick:n.optionClick.bind(n,e,r,e[_],"checkbox")}),S("div",{class:"xm-option-content",dangerouslySetInnerHTML:{__html:s({data:c,item:e,arr:i,name:e[v],value:e[g]})}}))};h&&(m?this.postData():this.filterData(c,this.state.filterValue));var j=f([],c),E=f([],i);this.tempData=j;var A=c.map((function(e){return function e(t,o){if(!t.__node.hidn){var r=t[w];if(o+=u.indent,r){var i=-1!==n.state.expandedKeys.findIndex((function(e){return t[g]===e}));return 0===r.length&&(i=!1),S("div",{class:"xm-tree"},u.showFolderIcon&&u.showLine&&i&&r.length>0&&S("i",{class:"left-line left-line-group",style:{left:o+3+"px"}}),O(t,o,0===r.length&&(!u.lazy||u.lazy&&!1===t.__node.loading)?0:i),i&&S("div",{class:"xm-tree-box"},r.map((function(t){return e(t,o)}))))}return O(t,o,0)}}(e,10-u.indent)})).filter((function(e){return e}));function R(e,t){t.forEach((function(t){t[k]?(u.strict||"hidden"===y.parent||e.push(t),R(e,t[w])):e.push(t)}))}var P=S("div",{class:"xm-toolbar"},e.toolbar.list.map((function(t){var r,s=e.languageProp.toolbar[t];r="ALL"===t?{icon:"xm-iconfont xm-icon-quanxuan",name:s,method:function(e){var t=[];R(t,e),t=t.filter((function(e){return!e[_]&&!e.__node.hidn})),n.props.onReset(l?t.slice(0,1):d(t,i,o),"treeData")}}:"CLEAR"===t?{icon:"xm-iconfont xm-icon-qingkong",name:s,method:function(e){n.props.onReset(i.filter((function(e){return e[o.disabled]})),"treeData")}}:"REVERSE"===t?{icon:"xm-iconfont xm-icon-fanxuan",name:s,method:function(e){var t=[];R(t,e),t=t.filter((function(e){return!e[_]&&!e.__node.hidn}));var r=[];i.forEach((function(e){var n=t.findIndex((function(t){return t[g]===e[g]}));-1==n?r.push(e):t.splice(n,1)})),n.props.onReset(l?r.slice(0,1):d(t,r,o),"treeData")}}:t;var c=function(e){"mouseenter"===e.type&&(e.target.style.color=a.color),"mouseleave"===e.type&&(e.target.style.color="")};return S("div",{class:"toolbar-tag",onClick:function(){p(r.method)&&r.method(j,E)},onMouseEnter:c,onMouseLeave:c},e.toolbar.showIcon&&S("i",{class:r.icon}),S("span",null,r.name))})).filter((function(e){return e}))),I=S("div",{class:h?"xm-search":"xm-search dis"},S("i",{class:"xm-iconfont xm-icon-sousuo"}),S("input",{class:"xm-input xm-search-input",placeholder:b}));return A.length||A.push(S("div",{class:"xm-select-empty"},r)),S("div",{onClick:this.blockClick,class:"xm-body-tree"},e.toolbar.show&&P,I,S("div",{class:"scroll-body",style:{maxHeight:e.height}},A),this.state.loading&&S("div",{class:"loading"},S("span",{class:"loader"})))}},{key:"componentDidMount",value:function(){var e=this.base.querySelector(".xm-search-input");e&&(e.addEventListener("compositionstart",this.handleComposition.bind(this)),e.addEventListener("compositionupdate",this.handleComposition.bind(this)),e.addEventListener("compositionend",this.handleComposition.bind(this)),e.addEventListener("input",this.searchInput.bind(this)),this.searchInputRef=e)}},{key:"componentDidUpdate",value:function(){if(this.callback){this.callback=!1;var e=this.props.filterDone;p(e)&&e(this.state.filterValue,this.tempData||[])}}}])&&_e(t.prototype,n),o&&_e(t,o),i}(A);function Ee(e){return(Ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ae(e,t){for(var n=0;n0,w={backgroundColor:"transparent"},k=["xm-option",x?" disabled":"",y?" selected":"",m?"show-icon":"hide-icon"].join(" "),C=_&&"hidden"===e.iconfont.parent?"xm-option-icon-hidden":["xm-option-icon",(v?e.iconfont.half?e.iconfont.half+" xm-custom-icon":0:_&&e.iconfont.parent?e.iconfont.parent+" xm-custom-icon":y?e.iconfont.select?e.iconfont.select:0:e.iconfont.unselect?e.iconfont.unselect+" xm-custom-icon":0)||"xm-iconfont "+(l?"xm-icon-danx":u.strict&&v?"xm-icon-banxuan":"xm-icon-duox")].join(" ");t[f]===n.state.val&&(w.backgroundColor=a.hover);var O={},j={};b&&(O.color=a.color,O.fontWeight=700,j.color=a.color);var E=function(e){"mouseenter"===e.type?t[d]||n.setState({val:t[f]}):"mouseleave"===e.type&&n.setState({val:""})};return S("div",{class:k,style:w,value:t[f],onClick:n.optionClick.bind(n,t,y,x,"line",r),onMouseEnter:E,onMouseLeave:E},m&&S("i",{class:C,style:g,onClick:n.optionClick.bind(n,t,y,x,"checkbox",r)}),S("div",{class:"xm-option-content",style:O,dangerouslySetInnerHTML:{__html:s({data:c,item:t,arr:i,name:t[p],value:t[f]})}}),t[h]&&S("div",{class:"xm-right-arrow",style:j}))}(o,0,y,v)},x=c.map((function(e){return y(e,2,0)})).concat(b).filter((function(e){return e}));return x.length||x.push(S("div",{class:"xm-select-empty"},r)),S("div",{onClick:this.blockClick,class:"xm-body-cascader",style:{width:u.indent+"px",maxHeight:e.height}},x)}},{key:"componentDidMount",value:function(){this.props.onReset("cascader","class")}}])&&Ae(t.prototype,n),o&&Ae(t,o),i}(A);function Te(){return(Te=Object.assign||function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,o=new Array(t);n1&&(n=n.slice(0,1),(l.show&&l.strict||s.show&&s.strict)&&this.clearAndReset(o,n,!1)),this.setState({sels:n,dataObj:c,flatData:u})}return this.setState({data:o}),n}},{key:"upDate",value:function(e,t){var n=this.state.dataObj,o=this.props,r=o.prop,i=o.tree,a=o.cascader,l=r.value,s=r.disabled,c=r.children;e.map((function(e){return n["object"===Be(e)?e[l]:e]})).filter((function(e){return e})).forEach((function(e){if(e[s]=!t,i.show&&i.strict||a.show&&a.strict){if(t)for(var n=e;n;)n[s]=!1,n=n.__node.parent;!function e(n){n[s]=!t;var o=n[c];o&&u(o)&&o.forEach((function(t){return e(t)}))}(e)}})),this.setState({dataObj:n})}},{key:"exchangeValue",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.state.dataObj,o=this.props,r=o.prop,i=o.tree,a=o.cascader,l=(o.data,r.children),s=r.value,c=e.map((function(e){return"object"===Be(e)?Fe(Fe({},e),{},{__node:{}}):n[e]})).filter((function(e){return e})),p=ze(c);if(i.show&&i.strict||a.show&&a.strict){var f=function e(t,n){var o=n[l];o&&u(o)&&o.forEach((function(n){-1===c.findIndex((function(e){return e[s]===n[s]}))&&t.push(n),e(t,n)}))},d={};d[l]=c,f(p,d),p=p.filter((function(e){return!0!==e[t.props.prop.optgroup]}))}return p}},{key:"value",value:function(e,t,n,o){!1!==t&&!0!==t&&(t=this.state.show);var r=this.props,i=r.prop,a=r.tree,l=r.cascader,s=this.exchangeValue(e);if(!this.checkMax(s,s)){if(a.show&&a.strict||l.show&&l.strict){var c=this.state.data;this.clearAndReset(c,s,!1),s=this.init({data:c,prop:i},!0)}this.resetSelectValue(s,o||s,!0,n),this.setState({show:t})}}},{key:"clearAndReset",value:function(e,t,n){var o=this,r=this.props.prop,i=r.selected,a=r.disabled,l=r.children,s=r.value;e.forEach((function(e){e[i]=-1!=t.findIndex((function(t){return t[s]===e[s]}))||n;var r=e[l];if(r&&u(r)){o.clearAndReset(r,t,e[i]);var c=r.length,p=r.filter((function(e){return!0===e[i]||!0===e.__node.selected})).length;e.__node.selected=p===c,e.__node.half=p>0&&p0,e.__node.disabled=r.filter((function(e){return!0===e[a]||!0===e.__node.disabled})).length===c}}))}},{key:"load",value:function(e,t,n,o){var r=this,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,a=arguments.length>5?arguments[5]:void 0,l=this.props,s=l.prop,c=l.tree,p=l.cascader,f=s.children,d=s.optgroup,h=s.value,m=s.selected,b=s.disabled;e.forEach((function(e){e.__node={parent:o,level:i,loading:e.__node&&e.__node.loading},a&&(delete e[m],a.find((function(t){return t===e[h]}))&&(e[m]=!0)),t[e[h]]=e,n.push(e);var l=e[f];if(l&&u(l)){var s=l.length;if(s>0){r.load(l,t,n,e,i+1,a),e[d]=!0,(c.show&&c.strict||p.show&&p.strict)&&(!0===e[m]&&(delete e[m],l.forEach((function(e){return e[m]=!0}))),!0===e[b]&&(delete e[b],l.forEach((function(e){return e[b]=!0}))));var y=l.filter((function(e){return!0===e[m]||!0===e.__node.selected})).length;e.__node.selected=y===s,e.__node.half=y>0&&y0,e.__node.disabled=l.filter((function(e){return!0===e[b]||!0===e.__node.disabled})).length===s}}}))}},{key:"resetSelectValue",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=this.props.on;if(p(r)&&this.prepare&&o){var i=r({arr:e,change:t,isAdd:n});if(u(i))return this.value(i,null,!1)}this.setState({sels:e})}},{key:"updateBorderColor",value:function(e){this.setState({tmpColor:e})}},{key:"treeHandler",value:function(e,t,n,o,r){var i=this,a=this.props.prop,l=a.value,s=(a.selected,a.disabled),c=a.children,u=a.optgroup,p=t[c];if(p.filter((function(e){return!(e[s]||e.__node.disabled)})).forEach((function(t){if(t[u])i.treeHandler(e,t,n,o,r);else{var a=e.findIndex((function(e){return e[l]==t[l]}));"del"===o?-1!=a&&(e.splice(a,1),n.push(t)):"half"!==o&&"add"!==o||-1==a&&(e.push(t),n.push(t))}})),r){var f=p.length,d=p.filter((function(t){return-1!==e.findIndex((function(e){return e[l]===t[l]}))||!0===t.__node.selected})).length;t.__node.selected=d===f,t.__node.half=d>0&&d0&&t.length>=l)return this.updateBorderColor(a.maxColor),i&&p(i)&&i(t,e),!0}},{key:"itemClick",value:function(e,t,n,o){var r=this.props,i=(r.theme,r.prop),a=r.radio,l=r.repeat,s=r.clickClose,c=(r.max,r.maxMethod,r.tree),u=r.data,p=ze(this.state.sels),f=i.value,d=(i.selected,i.disabled,i.children),h=i.optgroup;if(!n){if(e[h]&&c.strict){e[d];var m,b=[],y=!0;if(e.__node.selected?(m="del",y=!1):e.__node.half?(m="half",this.treeHandler(p,e,b,m),0===b.length&&(m="del",y=!1)):m="add","half"!=m&&this.treeHandler(p,e,b,m),this.checkMax(b,b))return;p=ze(this.state.sels),b=[],this.treeHandler(p,e,b,m,!0),this.resetSelectValue(p,b,y),this.setState({data:this.state.data})}else if(!t||l&&!o){if(this.checkMax(e,p))return;p=a?[e]:[].concat(ze(p),[e]),this.clearAndReset(u,p,t),this.resetSelectValue(p,[e],!t)}else{var x=p.findIndex((function(t){return t[f]==e[f]}));-1!=x&&(p.splice(x,1),this.resetSelectValue(p,[e],!t))}var v=e.__node.parent;if(v){for(;v;){var g=v[d],_=g.length,w=g.filter((function(e){return-1!==p.findIndex((function(t){return t[f]===e[f]}))||!0===e.__node.selected})).length;v.__node.selected=w===_,v.__node.half=w>0&&w<_||g.filter((function(e){return!0===e.__node.half})).length>0,v=v.__node.parent}this.setState({data:this.state.data})}s&&!o&&this.onClick()}}},{key:"onClick",value:function(e){var t=this;if("relative"!==this.props.model.type)if(this.props.disabled)!1!==this.state.show&&this.setState({show:!1});else{var n=!this.state.show;if(n){if(this.props.show&&0==this.props.show())return;Object.keys(at).filter((function(e){return e!=t.props.el})).forEach((function(e){return at[e].closed()}))}else{if(this.props.hide&&0==this.props.hide())return;this.bodyView.scroll&&this.bodyView.scroll(0,0)}this.setState({show:n}),e&&e.stopPropagation()}}},{key:"onReset",value:function(e,t){var n=this;if("data"===t){var o=e.filter((function(e){return!0===e[n.props.prop.selected]}));this.resetSelectValue(d(o,this.state.sels,this.props.prop),o,!0);var r=[];this.load(e,{},r),this.setState({data:e,flatData:r})}else"sels"===t?this.resetSelectValue(e,e,!0):"append"===t?this.append(e):"delete"===t?this.del(e):"auto"===t?this.auto(e):"treeData"===t?this.value(e,null,!0):"close"===t?this.onClick():"class"===t?this.setState({bodyClass:e}):"labelSearchBlur"===t?this.labelRef.blur(e):"labelSearch"===t&&this.generalRef.labelSearch(e)}},{key:"append",value:function(e){var t=this.exchangeValue(e);this.value(d(t,this.state.sels,this.props.prop),this.props.show,!0,t)}},{key:"del",value:function(e){var t=this.props.prop.value,n=this.state.sels,o=this.exchangeValue(e);o.forEach((function(e){var o=n.findIndex((function(n){return n[t]===e[t]}));-1!=o&&n.splice(o,1)})),this.value(n,this.props.show,!0,o)}},{key:"auto",value:function(e){var t=this,n=this.props.prop.value;e.filter((function(e){return-1!=t.state.sels.findIndex((function(t){return t[n]===e[n]}))})).length==e.length?this.del(e):this.append(e)}},{key:"changeExpandedKeys",value:function(e){var t=this.props,n=t.tree,o=t.prop,r=this.state,i=r.dataObj,a=r.flatData;n.show&&this.treeRef.init({dataObj:i,flatData:a,prop:o,tree:{expandedKeys:e}})}},{key:"calcPosition",value:function(){if(this.state.show&&"fixed"===this.props.model.type){var e=this.base.getBoundingClientRect();return Date.now()-this.state.time>10&&this.setState({time:Date.now()}),{position:"fixed",left:e.x,top:e.y+e.height+4,width:e.width}}return{}}},{key:"componentWillReceiveProps",value:function(e){this.init(e,e.updateData)}},{key:"componentWillMount",value:function(){this.init(this.props,!0)}},{key:"render",value:function(e,t){var n=this,o=e.theme,r=e.prop,i=(e.radio,e.repeat,e.clickClose,e.on,e.max,e.maxMethod,e.content),a=e.disabled,l=e.tree,s={borderColor:o.color},c=t.data,u=t.dataObj,p=t.flatData,f=t.sels,d=t.show,h=t.tmpColor,m=t.bodyClass;a&&(d=!1);var b={style:Fe(Fe({},e.style),d?s:{}),onClick:this.onClick.bind(this),ua:-1!=navigator.userAgent.indexOf("Mac OS")?"mac":"win",size:e.size,tabindex:1};h&&(b.style.borderColor=h,setTimeout((function(){b.style.borderColor="",n.updateBorderColor("")}),300)),r.value;var y=Fe(Fe({},e),{},{data:c,sels:f,ck:this.itemClick.bind(this),title:f.map((function(e){return e[r.name]})).join(","),onReset:this.onReset.bind(this)}),x=Fe(Fe({},e),{},{data:c,dataObj:u,flatData:p,sels:f,ck:this.itemClick.bind(this),show:d,onReset:this.onReset.bind(this)}),v=i?S(ve,x):l.show?S(je,Te({},x,{ref:function(e){return n.treeRef=e}})):e.cascader.show?S(Me,x):S(fe,Te({},x,{ref:function(e){return n.generalRef=e}})),g=this.calcPosition();return S("xm-select",b,S("input",{class:"xm-select-default","lay-verify":e.layVerify,"lay-verType":e.layVerType,"lay-reqText":e.layReqText,name:e.name,value:f.map((function(e){return e[r.value]})).join(",")}),S("i",{class:d?"xm-icon xm-icon-expand":"xm-icon"}),0===f.length&&S("div",{class:"xm-tips"},e.tips),S(te,Te({},y,{ref:function(e){return n.labelRef=e}})),S("div",{class:["xm-body",m,e.model.type,d?"":"dis"].join(" "),style:g,ref:function(e){return n.bodyView=e}},v),a&&S("div",{class:"xm-select-disabled"}))}},{key:"componentDidMount",value:function(){var e=this;this.prepare=!0,this.base.addEventListener("keydown",(function(t){13===t.keyCode&&e.onClick()})),this.input=this.base.querySelector(".xm-select-default");var t=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;t&&new t((function(t){t.forEach((function(t){"attributes"==t.type&&"class"===t.attributeName&&-1!==e.input.className.indexOf("layui-form-danger")&&(e.input.className="xm-select-default",e.base.style.borderColor=e.props.theme.maxColor)}))})).observe(this.input,{attributes:!0});for(var n=this.base;n;){if("FORM"===n.tagName){var o=n.querySelector('button[type="reset"]');o&&o.addEventListener("click",(function(t){e.init(e.props,!0)}));break}n=n.parentElement}}},{key:"componentDidUpdate",value:function(){var e=this.props,t=e.direction,n=e.model;if("relative"!==n.type&&"fixed"!==n.type){var o=this.base.getBoundingClientRect();if("auto"===t){this.bodyView.style.display="block",this.bodyView.style.visibility="hidden";var r=this.bodyView.getBoundingClientRect().height;this.bodyView.style.display="",this.bodyView.style.visibility="";var i=o.y||o.top||0,a=document.documentElement.clientHeight-i-o.height-20;t=a>r||i0&&void 0!==arguments[0]?arguments[0]:"zn",t=We[e]||Je;return{language:e,languageProp:t,data:[],content:"",name:"select",layVerify:"",layVerType:"",layReqText:"",size:"medium",disabled:!1,initValue:null,create:null,tips:t.tips,empty:t.empty,delay:500,searchTips:t.searchTips,filterable:!1,filterMethod:function(e,t,n,o){return!e||-1!=t[o.name].indexOf(e)},remoteSearch:!1,remoteMethod:function(e,t){t([])},direction:"auto",style:{},height:"200px",autoRow:!1,paging:!1,pageSize:10,pageEmptyShow:!0,pageRemote:!1,radio:!1,repeat:!1,clickClose:!1,max:0,maxMethod:function(e,t){},showCount:0,enableKeyboard:!0,toolbar:{show:!1,showIcon:!0,list:["ALL","CLEAR"]},tree:{show:!1,showFolderIcon:!0,showLine:!0,indent:20,expandedKeys:[],strict:!0,lazy:!1,load:null,simple:!1,nodeType:"__node_type",clickExpand:!0,clickCheck:!0},cascader:{show:!1,indent:100,strict:!0},prop:{name:"name",value:"value",selected:"selected",disabled:"disabled",children:"children",optgroup:"optgroup",click:"click"},theme:{color:"#009688",maxColor:"#e54d42",hover:"#f2f2f2"},model:{label:{type:"block",text:{left:"",right:"",separator:", "},block:{showCount:0,showIcon:!0,template:null},count:{template:function(e,t){return"已选中 ".concat(t.length," 项, 共 ").concat(e.length," 项")}}},icon:"show",type:"absolute"},iconfont:{select:"",unselect:"",half:"",parent:""},show:function(){},hide:function(){},template:function(e){e.item,e.sels;var t=e.name;return e.value,t},on:function(e){e.arr,e.item,e.selected}}}(e.language),this.update(e)}},{key:"update",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=!!e.data;this.options=f(this.options,e),this.options.__render_success=!1;var n=this.options.dom;if(n){var o=this.options.data||[];if("function"==typeof o&&(o=o(),this.options.data=o),u(o))return Y(S(Qe,et({},this.options,{__update:Date.now(),updateData:t})),n),this.options.__render_success=!0,this;c("data数据必须为数组类型, 不能是".concat("undefined"==typeof data?"undefined":tt(data),"类型"))}else c("没有找到渲染对象: ".concat(e.el,", 请检查"))}},{key:"reset",value:function(){var e=this.options.el;return this.init(lt[e]),st[e].init(this.options,!0),this}},{key:"opened",value:function(){var e=st[this.options.el];return!e.state.show&&e.onClick(),this}},{key:"closed",value:function(){var e=st[this.options.el];return e.state.show&&e.onClick(),this}},{key:"getValue",value:function(e){var t=this,n=this.options,o=n.tree,r=n.prop,i=n.data,a=st[this.options.el].state.sels,l=a;o.show&&o.strict&&o.simple&&h(i,a,l=[],r);var s=m(l,r.children,["__node"]);return"name"===e?s.map((function(e){return e[t.options.prop.name]})):"nameStr"===e?s.map((function(e){return e[t.options.prop.name]})).join(","):"value"===e?s.map((function(e){return e[t.options.prop.value]})):"valueStr"===e?s.map((function(e){return e[t.options.prop.value]})).join(","):s}},{key:"setValue",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u(e))return st[this.options.el].value(this.options.radio?e.slice(0,1):e,t,n),this;c("请传入数组结构...")}},{key:"append",value:function(e){if(u(e))return st[this.options.el].append(e),this;c("请传入数组结构...")}},{key:"delete",value:function(e){if(u(e))return st[this.options.el].del(e),this;c("请传入数组结构...")}},{key:"warning",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e||this.options.theme.maxColor;return!0===t?st[this.options.el].base.style.borderColor=n:st[this.options.el].updateBorderColor(n),this}},{key:"getTreeValue",value:function(e,t){var n=this.options,o=n.tree,r=n.cascader,i=n.prop,a=i.value;if(!o.show&&!r.show)return this.getValue(e);for(var l=st[this.options.el].state.sels,s=[],c=o.nodeType,u=function(e,t){s.find((function(t){return t[a]===e[a]}))||((e=Xe({},e))[c]=t,s.push(e))},p=0;pe.length)&&(t=e.length);for(var n=0,o=new Array(t);nphp($script, $bin, ['--task' => 'server_monitor', '--action' => 'mai
$scheduler->php($script, $bin, ['--task' => 'close_trade', '--action' => 'main'])
->at('*/13 * * * *');
+$scheduler->php($script, $bin, ['--task' => 'close_flash_sale_order', '--action' => 'main'])
+ ->at('*/15 * * * *');
+
$scheduler->php($script, $bin, ['--task' => 'notice', '--action' => 'main'])
->everyMinute();
| | | |