mirror of
https://gitee.com/niucloud-team/niucloud-admin.git
synced 2025-12-14 19:52:48 +00:00
del
This commit is contained in:
parent
6924c3b7f9
commit
7ced735c3c
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace addon\hello_world;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插件安装之后单独的插件方法
|
|
||||||
* Class HelloWorld
|
|
||||||
* @package addon\hello_world
|
|
||||||
*/
|
|
||||||
class Manage
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 插件安装执行
|
|
||||||
*/
|
|
||||||
public function install()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插件卸载执行
|
|
||||||
*/
|
|
||||||
public function uninstall()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插件升级执行
|
|
||||||
*/
|
|
||||||
public function upgrade()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
<template>
|
|
||||||
<el-container class="w-screen h-screen">
|
|
||||||
<el-header>
|
|
||||||
<layout-header />
|
|
||||||
</el-header>
|
|
||||||
<el-main>
|
|
||||||
<router-view></router-view>
|
|
||||||
</el-main>
|
|
||||||
<el-footer>
|
|
||||||
<div class="w-full h-full bg-[#f7f7f7] flex items-center justify-center">
|
|
||||||
Footer
|
|
||||||
</div>
|
|
||||||
</el-footer>
|
|
||||||
</el-container>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import layoutHeader from '@/layout/default/components/header/index.vue'
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped></style>
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
<template>
|
|
||||||
<!-- 内容 -->
|
|
||||||
<div class="content-wrap" v-show="diyStore.editTab == 'content'">
|
|
||||||
<div class="edit-attr-item-wrap">
|
|
||||||
<h3 class="mb-[10px]">文本设置</h3>
|
|
||||||
<el-form label-width="80px" class="px-[10px]">
|
|
||||||
<el-form-item :label="t('blankHeight')">
|
|
||||||
<el-slider v-model="diyStore.editComponent.height" show-input size="small" class="ml-[10px] horz-blank-slider"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 样式 -->
|
|
||||||
<div class="style-wrap" v-show="diyStore.editTab == 'style'">
|
|
||||||
<!-- 组件样式 -->
|
|
||||||
<slot name="style"></slot>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
import {t} from '@/lang'
|
|
||||||
import useDiyStore from '@/stores/modules/diy'
|
|
||||||
|
|
||||||
const diyStore = useDiyStore()
|
|
||||||
diyStore.editComponent.ignore = []; // 忽略公共属性
|
|
||||||
|
|
||||||
defineExpose({})
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.horz-blank-slider {
|
|
||||||
.el-slider__input {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<style lang="scss" scoped></style>
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="main-container">
|
|
||||||
<el-card class="box-card !border-none" shadow="never">
|
|
||||||
测试页面
|
|
||||||
</el-card>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped></style>
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="main-container">
|
|
||||||
<el-card class="box-card !border-none" shadow="never">
|
|
||||||
站点测试页面
|
|
||||||
</el-card>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped></style>
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace addon\hello_world\app\adminapi\controller;
|
|
||||||
|
|
||||||
|
|
||||||
use core\base\BaseAdminController;
|
|
||||||
|
|
||||||
class Index extends BaseAdminController
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 接口数据
|
|
||||||
*/
|
|
||||||
public function index()
|
|
||||||
{
|
|
||||||
return success("HELLO_WORLD_RETURN");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
use think\facade\Route;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 路由(注意最好group路由名称与插件名称一致,防止路由冲突)
|
|
||||||
*/
|
|
||||||
Route::group("hello_world", function () {
|
|
||||||
Route::get('index', 'addon\hello_world\app\adminapi\controller\Index@index');
|
|
||||||
});
|
|
||||||
@ -1 +0,0 @@
|
|||||||
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'BASIC' => [
|
|
||||||
'title' => get_lang('dict_diy.component_type_basic'),
|
|
||||||
'list' => [
|
|
||||||
'HelloText' => [
|
|
||||||
'title' => 'hello文本',
|
|
||||||
'icon' => 'iconfont-iconhuiyuanzhongxin',
|
|
||||||
'path' => 'edit-hello-text',
|
|
||||||
'support_page' => [],
|
|
||||||
'uses' => 0,
|
|
||||||
'sort' => 10007,
|
|
||||||
'value' => [
|
|
||||||
'height' => 20
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
];
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'HELLO_WORLD_LINK' => [
|
|
||||||
'key' => 'hello_world',
|
|
||||||
'addon_title' => get_lang('dict_diy.hello_world_title'),
|
|
||||||
'title' => get_lang('dict_diy.hello_world_link'),
|
|
||||||
'child_list' => [
|
|
||||||
[
|
|
||||||
'name' => 'HELLO_WORLD_INDEX',
|
|
||||||
'title' => get_lang('dict_diy.hello_world_index'),
|
|
||||||
'url' => '/hello_world/pages/index',
|
|
||||||
'is_share' => 1,
|
|
||||||
'action' => ''
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'name' => 'HELLO_WORLD_INFO',
|
|
||||||
'title' => get_lang('dict_diy.hello_world_info'),
|
|
||||||
'url' => '/hello_world/pages/info',
|
|
||||||
'is_share' => 1,
|
|
||||||
'action' => ''
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
];
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'DIY_INDEX' => [
|
|
||||||
'hello_world_index' => [ // 页面标识
|
|
||||||
"title" => "hello world 首页", // 页面名称
|
|
||||||
'cover' => '', // 页面封面图
|
|
||||||
'preview' => '', // 页面预览图
|
|
||||||
'desc' => '', // 页面描述
|
|
||||||
'mode' => 'diy', // 页面模式:diy:自定义,fixed:固定
|
|
||||||
// 页面数据源
|
|
||||||
"data" => [
|
|
||||||
"global" => [
|
|
||||||
"title" => "hello world首页页面",
|
|
||||||
"pageBgColor" => "#F8F8F8",
|
|
||||||
'bgUrl' => '',
|
|
||||||
'imgWidth' => '',
|
|
||||||
'imgHeight' => '',
|
|
||||||
"bottomTabBarSwitch" => true,
|
|
||||||
"template" => [
|
|
||||||
'textColor' => "#303133",
|
|
||||||
"pageBgColor" => "",
|
|
||||||
"componentBgColor" => "",
|
|
||||||
"topRounded" => 0,
|
|
||||||
"bottomRounded" => 0,
|
|
||||||
"elementBgColor" => "",
|
|
||||||
"topElementRounded" => 0,
|
|
||||||
"bottomElementRounded" => 0,
|
|
||||||
"margin" => [
|
|
||||||
"top" => 0,
|
|
||||||
"bottom" => 0,
|
|
||||||
"both" => 0
|
|
||||||
]
|
|
||||||
],
|
|
||||||
'topStatusBar' => [
|
|
||||||
'bgColor' => "#ffffff",
|
|
||||||
'isTransparent' => false,
|
|
||||||
'isShow' => true,
|
|
||||||
'style' => 'style-1',
|
|
||||||
'textColor' => "#333333",
|
|
||||||
'textAlign' => 'center',
|
|
||||||
],
|
|
||||||
'popWindow' => [
|
|
||||||
'imgUrl' => "",
|
|
||||||
'imgWidth' => '',
|
|
||||||
'imgHeight' => '',
|
|
||||||
'count' => -1,
|
|
||||||
'show' => 0,
|
|
||||||
'link' => [
|
|
||||||
'name' => ""
|
|
||||||
],
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"value" => [
|
|
||||||
[
|
|
||||||
"path" => "edit-image-ads",
|
|
||||||
"id" => "4640ld4k1pu0",
|
|
||||||
"componentName" => "ImageAds",
|
|
||||||
"componentTitle" => "图片广告",
|
|
||||||
"uses" => 0,
|
|
||||||
"list" => [
|
|
||||||
[
|
|
||||||
"link" => [
|
|
||||||
"name" => ""
|
|
||||||
],
|
|
||||||
"imageUrl" => "static/resource/images/diy/banner.png",
|
|
||||||
"imgWidth" => 750,
|
|
||||||
"imgHeight" => 320,
|
|
||||||
"id" => "2xuytp7622w0"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"ignore" => [],
|
|
||||||
"pageBgColor" => "",
|
|
||||||
"componentBgColor" => "",
|
|
||||||
"topRounded" => 0,
|
|
||||||
"bottomRounded" => 0,
|
|
||||||
"elementBgColor" => "",
|
|
||||||
"topElementRounded" => 0,
|
|
||||||
"bottomElementRounded" => 0,
|
|
||||||
"margin" => [
|
|
||||||
"top" => 0,
|
|
||||||
"bottom" => 0,
|
|
||||||
"both" => 0
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
];
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
'DIY_HELLO_WORLD_INDEX' => [
|
|
||||||
'title' => get_lang('dict_diy.page_hello_world_index'),
|
|
||||||
'page' => '/hello_world/pages/index',
|
|
||||||
'action' => ''
|
|
||||||
],
|
|
||||||
'DIY_HELLO_WORLD_INFO' => [
|
|
||||||
'title' => get_lang('dict_diy.page_hello_world_info'),
|
|
||||||
'page' => '/hello_world/pages/info',
|
|
||||||
'action' => ''
|
|
||||||
],
|
|
||||||
];
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use app\dict\member\MemberAccountTypeDict;
|
|
||||||
|
|
||||||
return [
|
|
||||||
MemberAccountTypeDict::POINT => [
|
|
||||||
//调整
|
|
||||||
'hello_world_test' => [
|
|
||||||
//名称
|
|
||||||
'name' => "hello_world账户变化",
|
|
||||||
//是否增加
|
|
||||||
'inc' => 1,
|
|
||||||
//是否减少
|
|
||||||
'dec' => 1,
|
|
||||||
],
|
|
||||||
|
|
||||||
],
|
|
||||||
];
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'menu_name' => '插件菜单',
|
|
||||||
'menu_key' => 'niucloud_hello',
|
|
||||||
'menu_type' => 1,
|
|
||||||
'icon' => 'iconfont-iconyingyongshichang',
|
|
||||||
'api_url' => '',
|
|
||||||
'router_path' => 'hello_world',
|
|
||||||
'view_path' => 'hello_world/index',
|
|
||||||
'methods' => '',
|
|
||||||
'sort' => 90,
|
|
||||||
'status' => 1,
|
|
||||||
'is_show' => 1,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'menu_name' => '插件站点菜单',
|
|
||||||
'menu_key' => 'niucloud_site_hello',
|
|
||||||
'menu_type' => 1,
|
|
||||||
'icon' => 'iconfont-iconyingyongshichang',
|
|
||||||
'api_url' => '',
|
|
||||||
'router_path' => 'hello_world',
|
|
||||||
'view_path' => 'hello_world/site',
|
|
||||||
'methods' => '',
|
|
||||||
'sort' => 90,
|
|
||||||
'status' => 1,
|
|
||||||
'is_show' => 1,
|
|
||||||
],
|
|
||||||
/* [
|
|
||||||
'menu_name' => '会员列表',
|
|
||||||
'menu_key' => 'member_list',
|
|
||||||
'parent_key' => 'member',
|
|
||||||
'menu_type' => 1,
|
|
||||||
'icon' => 'iconfont-iconhuiyuanliebiao',
|
|
||||||
'api_url' => 'member/member',
|
|
||||||
'router_path' => 'hello_world_member_list',
|
|
||||||
'view_path' => 'hello_world/member',
|
|
||||||
'methods' => 'get',
|
|
||||||
'sort' => 100,
|
|
||||||
'status' => 1,
|
|
||||||
'is_show' => 1,
|
|
||||||
'children' => [
|
|
||||||
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"delete" => "member" //针对修改系统菜单处理方式,可以删除系统菜单,设置对应key值,也可删除不需要的菜单处理
|
|
||||||
*/
|
|
||||||
];
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
//充值成功通知,站点端发送
|
|
||||||
'recharge_success' => [
|
|
||||||
'addon' => 'hello_world',
|
|
||||||
'key' => 'recharge_success',
|
|
||||||
'receiver_type' => 1,
|
|
||||||
'name' => '充值成功通知',
|
|
||||||
'title' => '会员充值成功后发送',
|
|
||||||
'async' => true,
|
|
||||||
'variable' => [
|
|
||||||
'price' => '充值金额',
|
|
||||||
'balance' => '充值后账户',
|
|
||||||
'time' => '充值时间',
|
|
||||||
'trade_no' => '交易单号'
|
|
||||||
],
|
|
||||||
]
|
|
||||||
|
|
||||||
];
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
'recharge_success' => [
|
|
||||||
'content' => '您充值金额¥{price}, 充值后金额¥{balance}',
|
|
||||||
]
|
|
||||||
|
|
||||||
];
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
'recharge_success' => [
|
|
||||||
'tid' => '755',
|
|
||||||
'content' => [
|
|
||||||
['交易单号', '{trade_no}', 'keyword1'],
|
|
||||||
['充值金额', '{price}', 'keyword2'],
|
|
||||||
['账户余额', '{balance}', 'keyword3'],
|
|
||||||
['充值时间', '{time}', 'keyword4'],
|
|
||||||
],
|
|
||||||
'kid_list' => [1, 3, 4, 2],
|
|
||||||
'scene_desc' => ''
|
|
||||||
]
|
|
||||||
];
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
'recharge_success' => [
|
|
||||||
'temp_key' => '52552',
|
|
||||||
'keyword_name_list' => [ '充值时间', '充值金额' ],
|
|
||||||
'content' => [
|
|
||||||
[ '充值时间', '{time}', 'time1' ],
|
|
||||||
[ '充值金额', '{price}', 'amount3' ],
|
|
||||||
]
|
|
||||||
]
|
|
||||||
];
|
|
||||||
@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
[
|
|
||||||
'key' => 'addon_schedule',
|
|
||||||
'name' => '插件计划任务',
|
|
||||||
'desc' => '',
|
|
||||||
'time' => [
|
|
||||||
'type' => 'min',
|
|
||||||
'min' => 1
|
|
||||||
],
|
|
||||||
'class' => 'addon\hello_world\app\job\AddonSchedule',
|
|
||||||
'function' => ''
|
|
||||||
],
|
|
||||||
];
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
return [
|
|
||||||
//文件执行序列号
|
|
||||||
'bind' => [
|
|
||||||
],
|
|
||||||
|
|
||||||
'listen' => [
|
|
||||||
|
|
||||||
//应用管理
|
|
||||||
'AppManage' => ['addon\hello_world\app\listener\AppManageListener'],
|
|
||||||
],
|
|
||||||
|
|
||||||
'subscribe' => [
|
|
||||||
],
|
|
||||||
];
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace addon\hello_world\app\job;
|
|
||||||
|
|
||||||
use core\base\BaseJob;
|
|
||||||
use think\facade\Log;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插件计划任务
|
|
||||||
*/
|
|
||||||
class AddonSchedule extends BaseJob
|
|
||||||
{
|
|
||||||
public function doJob()
|
|
||||||
{
|
|
||||||
Log::write('插件计划任务,执行时间:'.date('Y-m-d h:i:s'));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
/**
|
|
||||||
* 插件api接口语言
|
|
||||||
*/
|
|
||||||
return [
|
|
||||||
//系统常用
|
|
||||||
'HELLO_WORLD_RETURN' => 'hello world演示数据',
|
|
||||||
];
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插件枚举语言
|
|
||||||
*/
|
|
||||||
return [
|
|
||||||
'dict_diy' => [
|
|
||||||
'page_hello_world_index' => 'hello 首页',
|
|
||||||
'page_hello_world_info' => 'hello 信息',
|
|
||||||
'hello_world_title' => 'hello world',
|
|
||||||
'hello_world_link' => 'hello world链接',
|
|
||||||
'hello_world_index' => 'hello world index 插件',
|
|
||||||
'hello_world_info' => 'hello world info 插件'
|
|
||||||
],
|
|
||||||
'dict_site_layout' => [
|
|
||||||
'hellow_world' => '你好'
|
|
||||||
]
|
|
||||||
];
|
|
||||||
@ -1,18 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 插件验证多语言
|
|
||||||
*/
|
|
||||||
return [
|
|
||||||
'file_sort' => 100,
|
|
||||||
|
|
||||||
];
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | 官方网址:https://www.niucloud.com
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | niucloud团队 版权所有 开源版本可自由商用
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
// | Author: Niucloud Team
|
|
||||||
// +----------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
namespace addon\hello_world\app\listener;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 应用管理
|
|
||||||
* Class AppManage
|
|
||||||
* @package app\listener\hello_world
|
|
||||||
*/
|
|
||||||
class AppManageListener
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 应用管理
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function handle()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
"category" => [
|
|
||||||
//插件如果要单独分类展示,需要专门定义
|
|
||||||
[
|
|
||||||
"key" => "hello_world_category",
|
|
||||||
"name" => "第三方应用",
|
|
||||||
],
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"addon" => "hello_world",
|
|
||||||
"title" => "hello world",
|
|
||||||
"category" => "hello_world_category", //设置插件对应展示分类,默认basic
|
|
||||||
"desc" => "hello world 应用展示",
|
|
||||||
"icon" => addon_resource("hello_world", "icon.png"), //图标
|
|
||||||
"cover" => "", //封面
|
|
||||||
"url" => "/hello_world"
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"title": "hello world",
|
|
||||||
"desc": "Niucloud hello world演示插件",
|
|
||||||
"key": "hello_world",
|
|
||||||
"version": "1.0.1",
|
|
||||||
"author": "niucloud",
|
|
||||||
"type": "addon",
|
|
||||||
"support_app": ""
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"require": {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"weixin-js-sdk": "^1.6.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
return [
|
|
||||||
'pages' => <<<EOT
|
|
||||||
// PAGE_BEGIN
|
|
||||||
{
|
|
||||||
"path": "{{addon_name}}/pages/index",
|
|
||||||
"style": {
|
|
||||||
// #ifdef H5
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
// #endif
|
|
||||||
"navigationBarTitleText": "%{{addon_name}}.pages.index%"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"path": "{{addon_name}}/pages/info",
|
|
||||||
"style": {
|
|
||||||
// #ifdef H5
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
// #endif
|
|
||||||
"navigationBarTitleText": "%{{addon_name}}.pages.info%"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// PAGE_END
|
|
||||||
EOT
|
|
||||||
];
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 128 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 673 B |
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 KiB |
@ -1,6 +0,0 @@
|
|||||||
CREATE TABLE IF NOT EXISTS `{{prefix}}hello_world` (
|
|
||||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
|
||||||
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci COMMENT='演示插件表';
|
|
||||||
INSERT INTO `{{prefix}}hello_world`(`name`) VALUES ('名称');
|
|
||||||
@ -1 +0,0 @@
|
|||||||
DROP TABLE IF EXISTS `{{prefix}}hello_world`;
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view :style="warpCss">
|
|
||||||
hello-world:演示插件文本——自定义组件
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { computed } from 'vue';
|
|
||||||
import useDiyStore from '@/app/stores/diy';
|
|
||||||
|
|
||||||
const props = defineProps(['component', 'index']);
|
|
||||||
|
|
||||||
const diyStore = useDiyStore();
|
|
||||||
|
|
||||||
const diyComponent = computed(() => {
|
|
||||||
if (diyStore.mode == 'decorate') {
|
|
||||||
return diyStore.value[props.index];
|
|
||||||
} else {
|
|
||||||
return props.component;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const warpCss = computed(() => {
|
|
||||||
var style = '';
|
|
||||||
style += 'background-color:' + diyComponent.value.componentBgColor + ';';
|
|
||||||
style += 'border-top-left-radius:' + diyComponent.value.topRounded * 2 + 'rpx;';
|
|
||||||
style += 'border-top-right-radius:' + diyComponent.value.topRounded * 2 + 'rpx;';
|
|
||||||
style += 'border-bottom-left-radius:' + diyComponent.value.bottomRounded * 2 + 'rpx;';
|
|
||||||
style += 'border-bottom-right-radius:' + diyComponent.value.bottomRounded * 2 + 'rpx;';
|
|
||||||
return style;
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style></style>
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view>
|
|
||||||
hello-index,固定模板示例,我也可以装修
|
|
||||||
<!-- 自定义模板渲染 -->
|
|
||||||
<diy-group :data="props.data" :pullDownRefreshCount="props.pullDownRefreshCount"></diy-group>
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { computed, watch } from 'vue';
|
|
||||||
const props = defineProps(['data', 'pullDownRefreshCount']);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style></style>
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"pages.index": "hello_world index",
|
|
||||||
"pages.info": "hello_world info"
|
|
||||||
}
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"pages.index": "hello_world首页",
|
|
||||||
"pages.info": "hello_world详情"
|
|
||||||
}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"list": "文章列表",
|
|
||||||
"noData": "~ 暂无数据 ~",
|
|
||||||
"all": "全部",
|
|
||||||
"end": "-- 到底了 --",
|
|
||||||
"searchPlaceholder": "请输入搜索关键词"
|
|
||||||
}
|
|
||||||
@ -1,166 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="bg-gray-100 min-h-[100vh]">
|
|
||||||
<view class="fixed top-0 inset-x-0 z-10">
|
|
||||||
<view
|
|
||||||
class='p-[10px] bg-white border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200'>
|
|
||||||
<u-search :placeholder="t('searchPlaceholder')" actionText :actionStyle="{'width':0,'margin':0}"
|
|
||||||
v-model="articleTitle" @clickIcon="searchFn"></u-search>
|
|
||||||
</view>
|
|
||||||
<scroll-view :scroll-x="true" :enable-flex="true"
|
|
||||||
class="nav-list bg-white align-center px-[10px] box-border">
|
|
||||||
<view class="flex scroll-view-wrap">
|
|
||||||
<view
|
|
||||||
:class="['nav-item text-[14px] mx-[5px] h-[30px] leading-[30px] my-[5px] border-t-0 border-l-0 border-r-0',{'border-solid border-b-[2px] active': currCategoryId==item.category_id}]"
|
|
||||||
@click="loadCategory(item.category_id)" v-for="(item,index) in categoryList"
|
|
||||||
:key="item.category_id">
|
|
||||||
{{item.name}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<mescroll-body ref="mescrollRef" @init="mescrollInit" top="220rpx" @down="downCallback" @up="getArticleListFn">
|
|
||||||
<view v-for="(item,index) in articleList" :key="item.id"
|
|
||||||
:class="['bg-white flex align-center p-[10px]',{'border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200': articleList.length-1 !== index}] "
|
|
||||||
@click="toLink(item.id)">
|
|
||||||
<u--image width="260rpx" height="200rpx" :src="img(item.image)" v-if="item.image" model="aspectFill">
|
|
||||||
<template #error>
|
|
||||||
<u-icon name="photo" color="#999" size="50"></u-icon>
|
|
||||||
</template>
|
|
||||||
</u--image>
|
|
||||||
<view class="flex-1 flex flex-col justify-between ml-[10px]">
|
|
||||||
<view class="text-[16px] leading-[1.3] multi-hidden mt-[2px]">{{item.title}}</view>
|
|
||||||
<view class="text-[14px] using-hidden mb-[auto] mt-[10px] text-gray-500">{{item.summary}}</view>
|
|
||||||
<view class="text-[12px] text-gray-400 flex justify-between mb-[5px]">
|
|
||||||
<text class="">{{item.create_time}}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<mescroll-empty v-if="!articleList.length && loading"></mescroll-empty>
|
|
||||||
</mescroll-body>
|
|
||||||
<tabbar />
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { reactive, ref, onMounted } from 'vue'
|
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
|
||||||
import { t } from '@/locale'
|
|
||||||
import { redirect, img } from '@/utils/common';
|
|
||||||
import { getArticleList, getArticleCategory } from '@/cms/api/article';
|
|
||||||
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
|
|
||||||
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
|
|
||||||
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
|
|
||||||
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
|
|
||||||
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
|
|
||||||
import { useShare } from '@/hooks/useShare'
|
|
||||||
|
|
||||||
const { setShare, onShareAppMessage, onShareTimeline } = useShare()
|
|
||||||
setShare()
|
|
||||||
onShareAppMessage()
|
|
||||||
onShareTimeline()
|
|
||||||
|
|
||||||
let categoryList = ref<Array<Object>>([]);
|
|
||||||
let articleList = ref<Array<any>>([]);
|
|
||||||
let currCategoryId = ref<number | string>('');
|
|
||||||
let articleTitle = ref<string>('');
|
|
||||||
let mescrollRef = ref(null);
|
|
||||||
let loading = ref<boolean>(false);
|
|
||||||
|
|
||||||
interface acceptingDataStructure {
|
|
||||||
data : acceptingDataItemStructure,
|
|
||||||
msg : string,
|
|
||||||
code : number
|
|
||||||
}
|
|
||||||
interface acceptingDataItemStructure {
|
|
||||||
data : object,
|
|
||||||
[propName : string] : number | string | object
|
|
||||||
}
|
|
||||||
onLoad(async () => {
|
|
||||||
await getArticleCategory().then((res : acceptingDataStructure) => {
|
|
||||||
const initData = { name: t("all"), category_id: '' };
|
|
||||||
categoryList.value.push(initData);
|
|
||||||
categoryList.value = categoryList.value.concat(res.data.data);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
interface mescrollStructure {
|
|
||||||
num : number,
|
|
||||||
size : number,
|
|
||||||
endSuccess : Function,
|
|
||||||
[propName : string] : any
|
|
||||||
}
|
|
||||||
const getArticleListFn = (mescroll : mescrollStructure) => {
|
|
||||||
loading.value = false;
|
|
||||||
let data : object = {
|
|
||||||
category_id: currCategoryId.value,
|
|
||||||
title: articleTitle.value,
|
|
||||||
page: mescroll.num,
|
|
||||||
limit: mescroll.size
|
|
||||||
};
|
|
||||||
|
|
||||||
getArticleList(data).then((res : acceptingDataStructure) => {
|
|
||||||
let newArr = (res.data.data as Array<Object>);
|
|
||||||
//设置列表数据
|
|
||||||
if (mescroll.num == 1) {
|
|
||||||
articleList.value = []; //如果是第一页需手动制空列表
|
|
||||||
}
|
|
||||||
articleList.value = articleList.value.concat(newArr);
|
|
||||||
mescroll.endSuccess(newArr.length);
|
|
||||||
loading.value = true;
|
|
||||||
}).catch(() => {
|
|
||||||
loading.value = true;
|
|
||||||
mescroll.endErr(); // 请求失败, 结束加载
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const loadCategory = (id : string) => {
|
|
||||||
currCategoryId.value = id;
|
|
||||||
getMescroll().resetUpScroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
const searchFn = () => {
|
|
||||||
getMescroll().resetUpScroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
const toLink = (id : string) => {
|
|
||||||
redirect({ url: '/cms/pages/detail', param: { id } })
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
setTimeout(() => {
|
|
||||||
getMescroll().optUp.textNoMore = t("end");
|
|
||||||
}, 500)
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.nav-item.active {
|
|
||||||
color: $u-primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-view-wrap {
|
|
||||||
word-break: keep-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 单行超出隐藏 */
|
|
||||||
.using-hidden {
|
|
||||||
word-break: break-all;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
display: -webkit-box;
|
|
||||||
-webkit-line-clamp: 1;
|
|
||||||
-webkit-box-orient: vertical;
|
|
||||||
white-space: break-spaces;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 多行超出隐藏 */
|
|
||||||
.multi-hidden {
|
|
||||||
word-break: break-all;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
display: -webkit-box;
|
|
||||||
-webkit-line-clamp: 2;
|
|
||||||
-webkit-box-orient: vertical;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@ -1,166 +0,0 @@
|
|||||||
<template>
|
|
||||||
<view class="bg-gray-100 min-h-[100vh]">
|
|
||||||
<view class="fixed top-0 inset-x-0 z-10">
|
|
||||||
<view
|
|
||||||
class='p-[10px] bg-white border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200'>
|
|
||||||
<u-search :placeholder="t('searchPlaceholder')" actionText :actionStyle="{'width':0,'margin':0}"
|
|
||||||
v-model="articleTitle" @clickIcon="searchFn"></u-search>
|
|
||||||
</view>
|
|
||||||
<scroll-view :scroll-x="true" :enable-flex="true"
|
|
||||||
class="nav-list bg-white align-center px-[10px] box-border">
|
|
||||||
<view class="flex scroll-view-wrap">
|
|
||||||
<view
|
|
||||||
:class="['nav-item text-[14px] mx-[5px] h-[30px] leading-[30px] my-[5px] border-t-0 border-l-0 border-r-0',{'border-solid border-b-[2px] active': currCategoryId==item.category_id}]"
|
|
||||||
@click="loadCategory(item.category_id)" v-for="(item,index) in categoryList"
|
|
||||||
:key="item.category_id">
|
|
||||||
{{item.name}}
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<mescroll-body ref="mescrollRef" @init="mescrollInit" top="220rpx" @down="downCallback" @up="getArticleListFn">
|
|
||||||
<view v-for="(item,index) in articleList" :key="item.id"
|
|
||||||
:class="['bg-white flex align-center p-[10px]',{'border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200': articleList.length-1 !== index}] "
|
|
||||||
@click="toLink(item.id)">
|
|
||||||
<u--image width="260rpx" height="200rpx" :src="img(item.image)" v-if="item.image" model="aspectFill">
|
|
||||||
<template #error>
|
|
||||||
<u-icon name="photo" color="#999" size="50"></u-icon>
|
|
||||||
</template>
|
|
||||||
</u--image>
|
|
||||||
<view class="flex-1 flex flex-col justify-between ml-[10px]">
|
|
||||||
<view class="text-[16px] leading-[1.3] multi-hidden mt-[2px]">{{item.title}}</view>
|
|
||||||
<view class="text-[14px] using-hidden mb-[auto] mt-[10px] text-gray-500">{{item.summary}}</view>
|
|
||||||
<view class="text-[12px] text-gray-400 flex justify-between mb-[5px]">
|
|
||||||
<text class="">{{item.create_time}}</text>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<mescroll-empty v-if="!articleList.length && loading"></mescroll-empty>
|
|
||||||
</mescroll-body>
|
|
||||||
<tabbar />
|
|
||||||
</view>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup lang="ts">
|
|
||||||
import { reactive, ref, onMounted } from 'vue'
|
|
||||||
import { onLoad } from '@dcloudio/uni-app'
|
|
||||||
import { t } from '@/locale'
|
|
||||||
import { redirect, img } from '@/utils/common';
|
|
||||||
import { getArticleList, getArticleCategory } from '@/cms/api/article';
|
|
||||||
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
|
|
||||||
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
|
|
||||||
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
|
|
||||||
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
|
|
||||||
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
|
|
||||||
import { useShare } from '@/hooks/useShare'
|
|
||||||
|
|
||||||
const { setShare, onShareAppMessage, onShareTimeline } = useShare()
|
|
||||||
setShare()
|
|
||||||
onShareAppMessage()
|
|
||||||
onShareTimeline()
|
|
||||||
|
|
||||||
let categoryList = ref<Array<Object>>([]);
|
|
||||||
let articleList = ref<Array<any>>([]);
|
|
||||||
let currCategoryId = ref<number | string>('');
|
|
||||||
let articleTitle = ref<string>('');
|
|
||||||
let mescrollRef = ref(null);
|
|
||||||
let loading = ref<boolean>(false);
|
|
||||||
|
|
||||||
interface acceptingDataStructure {
|
|
||||||
data : acceptingDataItemStructure,
|
|
||||||
msg : string,
|
|
||||||
code : number
|
|
||||||
}
|
|
||||||
interface acceptingDataItemStructure {
|
|
||||||
data : object,
|
|
||||||
[propName : string] : number | string | object
|
|
||||||
}
|
|
||||||
onLoad(async () => {
|
|
||||||
await getArticleCategory().then((res : acceptingDataStructure) => {
|
|
||||||
const initData = { name: t("all"), category_id: '' };
|
|
||||||
categoryList.value.push(initData);
|
|
||||||
categoryList.value = categoryList.value.concat(res.data.data);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
interface mescrollStructure {
|
|
||||||
num : number,
|
|
||||||
size : number,
|
|
||||||
endSuccess : Function,
|
|
||||||
[propName : string] : any
|
|
||||||
}
|
|
||||||
const getArticleListFn = (mescroll : mescrollStructure) => {
|
|
||||||
loading.value = false;
|
|
||||||
let data : object = {
|
|
||||||
category_id: currCategoryId.value,
|
|
||||||
title: articleTitle.value,
|
|
||||||
page: mescroll.num,
|
|
||||||
limit: mescroll.size
|
|
||||||
};
|
|
||||||
|
|
||||||
getArticleList(data).then((res : acceptingDataStructure) => {
|
|
||||||
let newArr = (res.data.data as Array<Object>);
|
|
||||||
//设置列表数据
|
|
||||||
if (mescroll.num == 1) {
|
|
||||||
articleList.value = []; //如果是第一页需手动制空列表
|
|
||||||
}
|
|
||||||
articleList.value = articleList.value.concat(newArr);
|
|
||||||
mescroll.endSuccess(newArr.length);
|
|
||||||
loading.value = true;
|
|
||||||
}).catch(() => {
|
|
||||||
loading.value = true;
|
|
||||||
mescroll.endErr(); // 请求失败, 结束加载
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
const loadCategory = (id : string) => {
|
|
||||||
currCategoryId.value = id;
|
|
||||||
getMescroll().resetUpScroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
const searchFn = () => {
|
|
||||||
getMescroll().resetUpScroll();
|
|
||||||
}
|
|
||||||
|
|
||||||
const toLink = (id : string) => {
|
|
||||||
redirect({ url: '/cms/pages/detail', param: { id } })
|
|
||||||
}
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
setTimeout(() => {
|
|
||||||
getMescroll().optUp.textNoMore = t("end");
|
|
||||||
}, 500)
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.nav-item.active {
|
|
||||||
color: $u-primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
.scroll-view-wrap {
|
|
||||||
word-break: keep-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 单行超出隐藏 */
|
|
||||||
.using-hidden {
|
|
||||||
word-break: break-all;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
display: -webkit-box;
|
|
||||||
-webkit-line-clamp: 1;
|
|
||||||
-webkit-box-orient: vertical;
|
|
||||||
white-space: break-spaces;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 多行超出隐藏 */
|
|
||||||
.multi-hidden {
|
|
||||||
word-break: break-all;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
overflow: hidden;
|
|
||||||
display: -webkit-box;
|
|
||||||
-webkit-line-clamp: 2;
|
|
||||||
-webkit-box-orient: vertical;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
Loading…
x
Reference in New Issue
Block a user