This commit is contained in:
全栈小学生 2023-05-31 11:20:09 +08:00
parent 93f7036599
commit 9b55b17b54
302 changed files with 7325 additions and 4198 deletions

View File

@ -1,31 +0,0 @@
<template>
<div class="edit-horz-blank">
<h3 class="mb-[10px]">test信息设置</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>
</template>
<script lang="ts" setup>
import {t} from '@/lang'
import useDiyStore from '@/stores/modules/diy'
const diyStore = useDiyStore()
defineExpose({})
</script>
<style lang="scss">
.horz-blank-slider {
.el-slider__input {
width: 100px;
}
}
</style>
<style lang="scss" scoped></style>

View File

@ -1,12 +1,20 @@
<template>
<div class="edit-horz-blank">
<h3 class="mb-[10px]">test文本设置</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 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>
@ -16,6 +24,7 @@
import useDiyStore from '@/stores/modules/diy'
const diyStore = useDiyStore()
diyStore.editComponent.ignore = []; //
defineExpose({})

View File

@ -11,9 +11,8 @@
namespace addon\hello_world\app\adminapi\controller;
use app\adminapi\controller\BaseAdminController;
use app\service\core\addon\CoreInstallService;
use core\base\BaseAdminController;
class Index extends BaseAdminController
{

View File

@ -0,0 +1,21 @@
<?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
],
],
],
],
];

View File

@ -0,0 +1,26 @@
<?php
return [
'SYSTEM_LINK' => [
'title' => get_lang('dict_diy.system_link'),
'child_list' => [
[
'name' => 'HELLO_WORLD_INFO',
'title' => get_lang('dict_diy.hello_world_info'),
'url' => '/pages/hello_world/info',
'is_share' => 1
],
]
],
'HELLO_WORLD_LINK' => [
'title' => get_lang('dict_diy.hello_world_link'),
'child_list' => [
[
'name' => 'HELLO_WORLD_INDEX',
'title' => get_lang('dict_diy.hello_world_index'),
'url' => '/pages/hello_world/index',
'is_share' => 1
],
]
],
];

View File

@ -0,0 +1,89 @@
<?php
return [
'DIY_INDEX' => [
'hello_world_index' => [ // 页面标识
"title" => "hello world 首页", // 页面名称
'cover' => '', // 页面封面图
'preview' => '', // 页面预览图
'desc' => '', // 页面描述
// 页面数据源
"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
]
]
]
]
]
]
];

View File

@ -0,0 +1,12 @@
<?php
return [
'DIY_HELLO_WORLD_INDEX' => [
'title' => get_lang('dict_diy.page_hello_world_index'),
'page' => 'pages/hello_world/index',
],
'DIY_HELLO_WORLD_INFO' => [
'title' => get_lang('dict_diy.page_hello_world_info'),
'page' => 'pages/hello_world/info',
],
];

View File

@ -0,0 +1,18 @@
<?php
use app\dict\member\MemberAccountTypeDict;
return [
MemberAccountTypeDict::POINT => [
//调整
'hello_world_test' => [
//名称
'name' => "hello_world账户变化",
//是否增加
'inc' => 1,
//是否减少
'dec' => 1,
],
],
];

View File

@ -13,6 +13,5 @@
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
];

View File

@ -0,0 +1,36 @@
<?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值也可删除不需要的菜单处理
*/
];

View File

@ -1,32 +0,0 @@
<?php
return [
'BASICS' => [
'title' => get_lang('enum_diy.component_type_basics'),
'list' => [
'TestInfo' => [
'title' => '测试信息',
'icon' => 'iconfont-iconhuiyuanzhongxin',
'path' => 'edit-hello-info',
'support_page' => [],
'max_count' => 0,
'sort' => 10007,
'value' => [
'height' => 20
],
],
'TestText' => [
'title' => '测试文本',
'icon' => 'iconfont-iconhuiyuanzhongxin',
'path' => 'edit-hello-text',
'support_page' => [],
'max_count' => 0,
'sort' => 10007,
'value' => [
'height' => 20
],
],
],
],
];

View File

@ -1,8 +0,0 @@
<?php
return [
[
'name' => 'HELLO_WORLD_INDEX',
'title' => get_lang('enum_hello_world.links_hello_world_index'),
],
];

View File

@ -1,4 +0,0 @@
<?php
return [
];

View File

@ -1,18 +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,
'en_menu_name' => '',
],
];

View File

@ -13,8 +13,11 @@
* 插件枚举语言
*/
return [
'enum_hello_world' => [
//菜单类型
'links_hello_world_index' => 'hello world 插件',
],
'dict_diy' => [
'page_hello_world_index' => 'hello 首页',
'page_hello_world_info' => 'hello 信息',
'hello_world_link' => 'hello world链接',
'hello_world_index' => 'hello world index 插件',
'hello_world_info' => 'hello world info 插件'
]
];

View File

@ -1,14 +0,0 @@
{
"pages": [ // pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/hello_world/index",
"style": {
// #ifdef H5
"navigationStyle": "custom",
// #endif
"navigationBarTitleText": "%pages.index.index%"
}
}
]
}

View File

@ -0,0 +1,25 @@
<?php
return [
'pages' => <<<EOT
// PAGE_BEGIN
{
"path": "pages/hello_world/index",
"style": {
// #ifdef H5
"navigationStyle": "custom",
// #endif
"navigationBarTitleText": "%pages.hello_world.index%"
}
},
{
"path": "pages/hello_world/info",
"style": {
// #ifdef H5
"navigationStyle": "custom",
// #endif
"navigationBarTitleText": "%pages.hello_world.info%"
}
}
// PAGE_END
EOT
];

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

View File

@ -1,24 +0,0 @@
<template>
<view>
演示插件信息自定义组件
</view>
</template>
<script setup lang="ts">
import { computed } from 'vue';
import useDiyStore from '@/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;
}
})
</script>
<style></style>

View File

@ -1,24 +0,0 @@
<template>
<view>
演示插件文本自定义组件
</view>
</template>
<script setup lang="ts">
import { computed } from 'vue';
import useDiyStore from '@/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;
}
})
</script>
<style></style>

View File

@ -1,20 +0,0 @@
<template>
<view>
<!-- 扩展组件 -->
</view>
</template>
<script setup lang="ts">
//
import { computed } from 'vue';
import useDiyStore from '@/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;
}
})
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,34 @@
<template>
<view :style="warpCss">
hello-world演示插件文本自定义组件
</view>
</template>
<script setup lang="ts">
import { computed } from 'vue';
import useDiyStore from '@/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>

View File

@ -1,43 +0,0 @@
{
"pages" : [ // pageshttps://uniapp.dcloud.io/collocation/pages
{
"path": "pages/hello_world/index",
"style": {
// #ifdef H5
"navigationStyle": "custom",
// #endif
"navigationBarTitleText": "%pages.hello_world.index%"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "",
"navigationBarBackgroundColor": "#ffffff",
"backgroundColor": "#F8F8F8",
"backgroundColorTop": "#F8F8F8",
"backgroundColorBottom": "#F8F8F8"
},
"tabBar": {
"list": [
{
"pagePath": "pages/index/index"
},
{
"pagePath": "pages/article/list"
},
{
"pagePath": "pages/member/index"
}
]
},
"uniIdRouter": {},
"easycom": {
"custom": {
"^u-(.*)": "uview-plus/components/u-$1/u-$1.vue",
"diy-system-(\W.*)": "@/components/diy/system/$1/index.vue",
"diy-core-(\W.*)": "@/components/diy/core/$1/index.vue",
"diy-(\W.*)": "@/components/diy/$1/index.vue"
}
}
}

View File

@ -0,0 +1,166 @@
<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 '@/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: '/pages/article/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>

View File

@ -1,9 +1,10 @@
<?php
namespace app;
use app\enum\sys\AppTypeEnum;
use app\dict\sys\AppTypeDict;
use core\exception\AdminException;
use core\exception\AuthException;
use core\exception\ServerException;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
use think\db\exception\ModelNotFoundException;
@ -57,7 +58,7 @@ class ExceptionHandle extends Handle
$app_type = empty($app_type) ? str_replace('/', '', request()->rootUrl()) : $app_type;
//写入日志内容
$log = [
'服务主体:'.($app_type == AppTypeEnum::ADMIN ? request()->uid() : request()->memberId()),//服务发起者 //用户ID
'服务主体:'.($app_type == AppTypeDict::ADMIN ? request()->uid() : request()->memberId()),//服务发起者 //用户ID
'IP'.request()->ip(),//ip
'耗时(毫秒):'.ceil((microtime(true) * 1000) - (request()->time(true) * 1000)),//耗时(毫秒)
'请求类型:'.request()->method(),//请求类型
@ -102,8 +103,9 @@ class ExceptionHandle extends Handle
} else if($e instanceof UnexpectedValueException){
return fail($e->getMessage(), [], 401);
}else if($e instanceof AuthException || $e instanceof AdminException){
return fail($e->getMessage(), [], $e->getCode() ?: 400);
}else if($e instanceof ServerException){
return fail($e->getMessage(), [], http_code:$e->getCode());
}else {
return fail($e->getMessage(), $massageData);
}

View File

@ -1,7 +1,7 @@
<?php
namespace app;
use app\enum\common\ChannelEnum;
use app\dict\common\ChannelDict;
/**
* Class Request
@ -13,7 +13,7 @@ class Request extends \think\Request
//认证信息
protected static $auth_info = [];
protected static $site_id = 1;
protected static $site_id = 0;
/**
* 获取请求参数
@ -95,7 +95,7 @@ class Request extends \think\Request
if ($site_id > 0) {
static::$site_id = (int)$site_id;
} else {
return static::$site_id ?? $this->getDefaultSiteId();
return static::$site_id ?? $this->defaultSiteId();
}
}
@ -165,7 +165,7 @@ class Request extends \think\Request
* @return array|string
*/
public function getChannel(){
return $this->header(system_name('channel_name'), ChannelEnum::H5);
return $this->header(system_name('channel_name'), ChannelDict::H5);
}
/**
@ -173,7 +173,7 @@ class Request extends \think\Request
* @return int
*/
public function defaultSiteId(){
return 1;
return 0;
}
/**

View File

@ -13,7 +13,6 @@ namespace app\adminapi\controller\addon;
use app\service\admin\addon\AddonService;
use app\service\core\addon\CoreAddonService;
use app\service\core\addon\CoreInstallService;
use core\base\BaseAdminController;
use think\Response;
@ -34,17 +33,34 @@ class Addon extends BaseAdminController
*/
public function install($addon)
{
( new AddonService() )->install($addon);
return success('ADDON_INSTALL_SUCCESS');
return ( new AddonService() )->install($addon);
}
/**
* 执行安装
* @param $addon
* @return void
*/
public function execute($addon) {
return ( new AddonService() )->executeInstall($addon);
}
/**
* 插件安装环境检测
* @param $addon
* @return mixed
*/
public function installCheck($addon){
return ( new AddonService() )->installCheck($addon);
}
/**
* 查询插件安装状态
* @param $addon
*/
public function getInstallState($addon)
public function getInstallState($addon, $key)
{
return success(( new AddonService() )->getInstallState($addon));
return success(( new AddonService() )->getInstallState($addon, $key));
}
/**

View File

@ -12,7 +12,6 @@
namespace app\adminapi\controller\addon;
use app\service\core\addon\CoreAddonService;
use app\service\core\addon\CoreInstallService;
use core\base\BaseAdminController;

View File

@ -11,7 +11,6 @@
namespace app\adminapi\controller\diy;
use app\enum\diy\PageEnum;
use app\service\admin\diy\DiyService;
use core\base\BaseAdminController;
@ -67,7 +66,7 @@ class Diy extends BaseAdminController
/**
* 自定义页面编辑
* @param $id 自定义页面id
* @param $id
* @return \think\Response
*/
public function edit($id)
@ -84,7 +83,7 @@ class Diy extends BaseAdminController
/**
* 自定义页面删除
* @param $id 自定义页面id
* @param $id
* @return \think\Response
*/
public function del(int $id)
@ -114,7 +113,8 @@ class Diy extends BaseAdminController
$params = $this->request->params([
[ 'id', "" ],
[ "name", "" ],
[ "type", "" ],
[ "template", "" ],
[ 'template_name', '' ],
[ "title", "" ],
]);
@ -132,16 +132,16 @@ class Diy extends BaseAdminController
}
/**
* 获取页面类型
* 获取页面模板
* @return \think\Response
*/
public function getPageType()
public function getTemplate()
{
$params = $this->request->params([
[ 'type', "" ],
]);
$page_type = PageEnum::getPageType($params[ 'type' ]);
return success($page_type);
$diy_service = new DiyService();
return success($diy_service->getTemplate($params[ 'type' ]));
}
/**

View File

@ -73,7 +73,7 @@ class DiyRoute extends BaseAdminController
/**
* 自定义路由表编辑
* @param $id 自定义路由表id
* @param $id
* @return \think\Response
*/
public function edit($id)
@ -92,7 +92,7 @@ class DiyRoute extends BaseAdminController
/**
* 自定义路由表删除
* @param $id 自定义路由表id
* @param $id
* @return \think\Response
*/
public function del(int $id)

View File

@ -55,7 +55,7 @@ class Generator extends BaseController
$data = $this->request->params([
[ "table_name", "" ],
], false);
$this->validate($data, 'app\validate\generator\generator.add');
$this->validate($data, 'app\validate\generator\Generator.add');
$id = ( new GenerateService() )->add($data);
return success('ADD_SUCCESS', [ 'id' => $id ]);
}
@ -75,7 +75,7 @@ class Generator extends BaseController
[ "edit_type", "1" ],
[ "table_column", "" ],
], false);
$this->validate($data, 'app\validate\generator\generator.edit');
$this->validate($data, 'app\validate\generator\Generator.edit');
( new GenerateService() )->edit($id, $data);
return success('MODIFY_SUCCESS');
}

View File

@ -15,6 +15,7 @@ use app\service\admin\auth\ConfigService;
use core\base\BaseAdminController;
use think\Response;
class Config extends BaseAdminController
{

View File

@ -13,6 +13,7 @@ namespace app\adminapi\controller\login;
use app\service\admin\auth\ConfigService;
use app\service\admin\auth\LoginService;
use app\service\core\addon\CoreAddonInstallService;
use core\base\BaseAdminController;
use think\Response;

View File

@ -11,9 +11,12 @@
namespace app\adminapi\controller\member;
use app\enum\member\MemberAccountEnum;
use app\dict\member\MemberAccountTypeDict;
use app\service\admin\member\MemberAccountService;
use app\service\admin\member\MemberCashOutService;
use app\service\admin\member\MemberService;
use core\base\BaseAdminController;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use think\Response;
class Account extends BaseAdminController
@ -28,11 +31,40 @@ class Account extends BaseAdminController
[ 'member_id', '' ],
[ 'from_type', '' ],
[ 'create_time', [] ],
[ 'keywords', '' ],
]);
$data[ 'account_type' ] = 'point';
return success(( new MemberAccountService() )->getPage($data));
}
/**
* 会员积分统计(用于会员积分统计窗口)
*/
public function sumPoint()
{
$data = $this->request->params([
[ 'member_id', '' ],
]);
$member_account_service = new MemberAccountService();
$member_service = new MemberService();
if(empty($data['member_id']))
{
$commission_data = [
'point_get' => $member_service->getSum('point_get'),//累计
'point_use' => abs($member_account_service->getExpensesSumAccount(MemberAccountTypeDict::POINT)),
];
return success($commission_data);
}else{
$info = $member_account_service->getMemberAccountInfo($data['member_id']);
$commission_data = [
'point_get' => $info['point_get'],
'point_use' => abs($member_account_service->getExpensesSumAccount(MemberAccountTypeDict::POINT,$data['member_id'])),
];
return success($commission_data);
}
}
/**
* 余额流水
* @return Response
@ -43,6 +75,7 @@ class Account extends BaseAdminController
[ 'member_id', '' ],
[ 'from_type', '' ],
[ 'create_time', [] ],
[ 'keywords', '' ],
]);
$data[ 'account_type' ] = 'balance';
return success(( new MemberAccountService() )->getPage($data));
@ -58,6 +91,7 @@ class Account extends BaseAdminController
[ 'member_id', '' ],
[ 'from_type', '' ],
[ 'create_time', [] ],
[ 'keywords', '' ],
]);
$data[ 'account_type' ] = 'money';
return success(( new MemberAccountService() )->getPage($data));
@ -74,7 +108,7 @@ class Account extends BaseAdminController
[ 'memo', '' ],
]);
$res = ( new MemberAccountService() )->adjustPoint($data);
return success('ADD_SUCCESS', [ 'id' => $res ]);
return success('SUCCESS', [ 'id' => $res ]);
}
/**
@ -88,7 +122,7 @@ class Account extends BaseAdminController
[ 'memo', '' ],
]);
$res = ( new MemberAccountService() )->adjustBalance($data);
return success('ADD_SUCCESS', [ 'id' => $res ]);
return success('SUCCESS', [ 'id' => $res ]);
}
/**
@ -103,7 +137,7 @@ class Account extends BaseAdminController
[ 'memo', '' ],
]);
$res = ( new MemberAccountService() )->adjustMoney($data);
return success('ADD_SUCCESS', [ 'id' => $res ]);
return success('SUCCESS', [ 'id' => $res ]);
}
/**
@ -116,11 +150,44 @@ class Account extends BaseAdminController
[ 'member_id', '' ],
[ 'from_type', '' ],
[ 'create_time', [] ],
[ 'keywords', '' ],
]);
$data[ 'account_type' ] = 'commission';
return success(( new MemberAccountService() )->getPage($data));
}
/**
* 会员佣金统计(用于会员账户统计窗口)
*/
public function sumCommission()
{
$data = $this->request->params([
[ 'member_id', '' ],
]);
$member_account_service = new MemberAccountService();
$member_service = new MemberService();
if(empty($data['member_id']))
{
$commission_data = [
'total_commission' => $member_service->getSum('commission_get'),//累计
'commission' => $member_service->getSum('commission'),//未提现
'withdrawn_commission' => $member_account_service->getWithdrawnCommission(),//已提现
'commission_cash_outing' => $member_service->getSum('commission_cash_outing'),//提现中
];
return success($commission_data);
}else{
$info = $member_account_service->getMemberAccountInfo($data['member_id']);
$commission_data = [
'commission' => $info['commission'],
'commission_cash_outing' => $info['commission_cash_outing'],
'withdrawn_commission' => $member_account_service->getWithdrawnCommission($data['member_id']),//已提现
'total_commission' => $info['commission_get'],
];
return success($commission_data);
}
}
/**
* 会员余额统计(用于会员账户统计窗口)
*/
@ -134,8 +201,8 @@ class Account extends BaseAdminController
{
$balance_data = [
MemberAccountEnum::BALANCE => $member_account_service->getSumAccount(MemberAccountEnum::BALANCE),
MemberAccountEnum::MONEY => $member_account_service->getSumAccount(MemberAccountEnum::MONEY),
MemberAccountTypeDict::BALANCE => number_format($member_account_service->getSumAccount(MemberAccountTypeDict::BALANCE), 2),
MemberAccountTypeDict::MONEY => number_format($member_account_service->getSumAccount(MemberAccountTypeDict::MONEY), 2),
];
return success($balance_data);
}else{
@ -158,7 +225,7 @@ class Account extends BaseAdminController
*/
public function accountType()
{
return success(MemberAccountEnum::getType());
return success(MemberAccountTypeDict::getType());
}

View File

@ -11,8 +11,8 @@
namespace app\adminapi\controller\member;
use app\enum\member\MemberCashOutEnum;
use app\enum\pay\TransferEnum;
use app\dict\member\MemberCashOutDict;
use app\dict\pay\TransferDict;
use app\service\admin\member\MemberCashOutService;
use core\base\BaseAdminController;
use think\Response;
@ -28,7 +28,12 @@ class CashOut extends BaseAdminController
$data = $this->request->params([
['member_id', ''],
['status', ''],
['transfer_type', ''],
['create_time', []],
['audit_time', []],
['transfer_time', []],
['cash_out_no', ''],
['keywords', '']
]);
return success((new MemberCashOutService())->getPage($data));
}
@ -58,7 +63,7 @@ class CashOut extends BaseAdminController
*/
public function getTransferType()
{
return success(TransferEnum::getTransferType([], false));
return success(TransferDict::getTransferType([], false));
}
/**
@ -82,6 +87,14 @@ class CashOut extends BaseAdminController
* @return Response
*/
public function getStatusList(){
return success(MemberCashOutEnum::getStatus());
return success(MemberCashOutDict::getStatus());
}
/**
* 统计数据
*/
public function stat()
{
return success((new MemberCashOutService())->stat());
}
}

View File

@ -37,6 +37,7 @@ class Config extends BaseAdminController
[ 'is_mobile', 0 ],
[ 'is_auth_register', 1 ],
[ 'is_bind_mobile', 0 ],
[ 'agreement_show', 0 ]
]);
$this->validate($data, 'app\validate\member\LoginConfig.set');
( new MemberConfigService() )->setLoginConfig($data);
@ -71,4 +72,25 @@ class Config extends BaseAdminController
return success('SET_SUCCESS');
}
/**
* 获取会员配置
* @return Response
*/
public function getMemberConfig(){
return success(( new MemberConfigService() )->getMemberConfig());
}
/**
* 设置会员配置
* @return Response
*/
public function setMemberConfig(){
$data = $this->request->params([
[ 'prefix', '' ],
[ 'length', 10 ]
]);
$this->validate($data, 'app\validate\member\MemberConfig.set');
( new MemberConfigService() )->setMemberConfig($data);
return success('MODIFY_SUCCESS');
}
}

View File

@ -11,9 +11,9 @@
namespace app\adminapi\controller\member;
use app\enum\member\MemberEnum;
use app\enum\member\MemberRegisterChannelEnum;
use app\enum\member\MemberRegisterTypeEnum;
use app\dict\member\MemberDict;
use app\dict\member\MemberRegisterChannelDict;
use app\dict\member\MemberRegisterTypeDict;
use app\service\admin\member\MemberService;
use core\base\BaseAdminController;
use think\Response;
@ -55,7 +55,8 @@ class Member extends BaseAdminController
$data = $this->request->params([
['nickname', ''],
['mobile', ''],
['username', ''],
['member_no', ''],
['init_member_no', ''],
['password', ''],
['headimg', ''],
['member_label', []],
@ -104,13 +105,19 @@ class Member extends BaseAdminController
return success('EDIT_SUCCESS');
}
public function del($member_id)
{
$res = (new MemberService())->deleteMember($member_id);
return success('DELETE_SUCCESS');
}
/**
* 会员使用场景
* @return array|mixed|string
*/
public function getMemberRegisterType()
{
return success(MemberRegisterTypeEnum::getType());
return success(MemberRegisterTypeDict::getType());
}
/**
@ -131,7 +138,7 @@ class Member extends BaseAdminController
*/
public function getMemberRegisterChannelType()
{
return success(MemberRegisterChannelEnum::getType());
return success(MemberRegisterChannelDict::getType());
}
/**
@ -154,6 +161,17 @@ class Member extends BaseAdminController
* @return Response
*/
public function getStatusList(){
return success(MemberEnum::getStatus());
return success(MemberDict::getStatus());
}
/**
* 获取会员编码
* @return Response
*/
public function getMemberNo(){
$member_no = (new MemberService())->getMemberNo();
return success('SUCCESS', $member_no);
}
}

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\notice;
use app\enum\sys\SmsEnum;
use app\dict\sys\SmsDict;
use app\service\admin\notice\NoticeService;
use app\service\admin\notice\SmsService;
use core\base\BaseAdminController;
@ -78,7 +78,7 @@ class Notice extends BaseAdminController
public function editSms($sms_type)
{
//参数获取
$sms_type_list = SmsEnum::getType();
$sms_type_list = SmsDict::getType();
if(!array_key_exists($sms_type, $sms_type_list)) throw new AdminException('SMS_TYPE_NOT_EXIST');
//数据验证
$data = [

View File

@ -25,10 +25,14 @@ class Recharge extends BaseAdminController
public function lists()
{
$data = $this->request->params([
['order_no', ''],
['order_status', ''],
['order_from', ''],
['create_time', []],
['member_id', '']
['pay_time', []],
['member_id', ''],
['start_money', 0],
['end_money', 0]
]);
return success((new RechargeOrderService())->getPage($data));
}
@ -55,4 +59,18 @@ class Recharge extends BaseAdminController
return fail($res);
}
/**
* 充值统计
*/
public function stat()
{
$data = $this->request->params([
[ 'member_id', '' ],
]);
$res = (new RechargeOrderService())->stat($data);
return success($res);
}
}

View File

@ -27,7 +27,9 @@ class Refund extends BaseAdminController
['create_time', []],
['member_id', ''],
['refund_no', ''],
['status', '']
['status', ''],
['keywords', ''],
['order_no', ''],
]);
return success((new RefundService())->getPage($data));
}
@ -54,4 +56,12 @@ class Refund extends BaseAdminController
]);
return success((new RefundService())->getStatus($data['type']));
}
/**
* 退款统计
*/
public function stat()
{
return success((new RefundService())->stat());
}
}

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\pay;
use app\enum\pay\PayEnum;
use app\dict\pay\PayDict;
use app\model\pay\PayConfigTemplate;
use app\service\admin\pay\PayChannelService;
use app\service\admin\pay\PayConfigTemplateService;
@ -68,8 +68,8 @@ class PayChannel extends BaseAdminController
['wechatpay_config', []],
['alipay_config', []],
]);
$this->validate(array_merge($data['wechatpay_config'], ['type' => PayEnum::WECHATPAY]), 'app\validate\pay\Pay.set');
$this->validate(array_merge($data['alipay_config'], ['type' => PayEnum::ALIPAY]), 'app\validate\pay\Pay.set');
$this->validate(array_merge($data['wechatpay_config'], ['type' => PayDict::WECHATPAY]), 'app\validate\pay\Pay.set');
$this->validate(array_merge($data['alipay_config'], ['type' => PayDict::ALIPAY]), 'app\validate\pay\Pay.set');
(new PayChannelService())->setTransfer($data);
return success('SET_SUCCESS');
}
@ -82,8 +82,8 @@ class PayChannel extends BaseAdminController
$data = $this->request->params([
['config', []],
]);
// $this->validate(array_merge($data['wechatpay_config'], ['type' => PayEnum::WECHATPAY]), 'app\validate\pay\Pay.set');
// $this->validate(array_merge($data['alipay_config'], ['type' => PayEnum::ALIPAY]), 'app\validate\pay\Pay.set');
// $this->validate(array_merge($data['wechatpay_config'], ['type' => PayDict::WECHATPAY]), 'app\validate\pay\Pay.set');
// $this->validate(array_merge($data['alipay_config'], ['type' => PayDict::ALIPAY]), 'app\validate\pay\Pay.set');
(new PayChannelService())->setAll($data['config']);
return success('SET_SUCCESS');
}

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\site;
use app\enum\site\SiteEnum;
use app\dict\site\SiteDict;
use app\service\admin\auth\AuthSiteService;
use app\service\admin\site\SiteService;
use core\base\BaseAdminController;
@ -27,8 +27,10 @@ class Site extends BaseAdminController
{
$data = $this->request->params([
['keywords', ''],
['status', 1],
['status', ""],
['group_id', 0],
['create_time', []],
['expire_time', []],
]);
return success((new SiteService())->getPage($data));
}
@ -84,7 +86,7 @@ class Site extends BaseAdminController
*/
public function getStatuList()
{
return success(SiteEnum::getStatus());
return success(SiteDict::getStatus());
}
/**
@ -94,4 +96,28 @@ class Site extends BaseAdminController
public function menu(){
return success((new AuthSiteService())->getMenuList(1, 'all'));
}
/**
* 关闭站点
*/
public function closeSite($id)
{
$data = $this->request->params([
['status', SiteDict::CLOSE],
]);
(new SiteService())->edit($id, $data);
return success('SUCCESS');
}
/**
* 开启站点
*/
public function openSite($id)
{
$data = $this->request->params([
['status', SiteDict::ON],
]);
(new SiteService())->edit($id, $data);
return success('SUCCESS');
}
}

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\site;
use app\enum\sys\UserEnum;
use app\dict\sys\UserDict;
use app\service\admin\site\SiteUserService;
use app\service\admin\user\UserService;
use core\base\BaseAdminController;
@ -55,7 +55,7 @@ class User extends BaseAdminController
['password', ''],
['real_name', ''],
['head_img', ''],
['status', UserEnum::ON],
['status', UserDict::ON],
['role_ids', []]
]);
$this->validate($data, 'app\validate\sys\User.add');
@ -71,7 +71,7 @@ class User extends BaseAdminController
$data = $this->request->params([
['real_name', ''],
['head_img', ''],
['status', UserEnum::ON],
['status', UserDict::ON],
['role_ids', []],
['password', '']
]);

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\sys;
use app\enum\sys\FileEnum;
use app\dict\sys\FileDict;
use app\service\admin\sys\AttachmentService;
use core\base\BaseAdminController;
use think\Response;
@ -63,7 +63,7 @@ class Attachment extends BaseAdminController
public function addCategory()
{
$data = $this->request->params([
['type', FileEnum::IMAGE],
['type', FileDict::IMAGE],
['name', '']
]);
$this->validate($data, 'app\validate\sys\AttachmentCategory.add');

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\sys;
use app\enum\common\ChannelEnum;
use app\dict\common\ChannelDict;
use core\base\BaseAdminController;
class Channel extends BaseAdminController
@ -24,6 +24,6 @@ class Channel extends BaseAdminController
*/
public function getChannelType()
{
return success(ChannelEnum::getType());
return success(ChannelDict::getType());
}
}

View File

@ -44,9 +44,22 @@ class Config extends BaseAdminController
["full_address",""],
["phone",""],
["business_hours",""],
["site_name",""],
["logo",""],
["front_end_name", ""],
["front_end_logo", ""],
["icon", ""]
]);
$this->validate($data, 'app\validate\site\site.edit');
$this->validate($data, 'app\validate\site\Site.edit');
(new ConfigService())->setWebSite($data);
$service_data = $this->request->params([
["wechat_code",""],
["enterprise_wechat",""],
["tel",""],
]);
(new ConfigService())->setService($service_data);
return success();
}
@ -83,4 +96,12 @@ class Config extends BaseAdminController
public function getSceneDomain(){
return success((new ConfigService())->getSceneDomain());
}
/**
* 获取服务信息
* @return Response
*/
public function getServiceInfo(){
return success((new ConfigService())->getService());
}
}

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\sys;
use app\enum\sys\CronEnum;
use app\dict\sys\CronDict;
use app\service\admin\cron\CronService;
use core\base\BaseAdminController;
@ -51,6 +51,6 @@ class Cron extends BaseAdminController
* @return \think\Response
*/
public function getType(){
return success((new CronEnum())->getType());
return success((new CronDict())->getType());
}
}

View File

@ -11,9 +11,9 @@
namespace app\adminapi\controller\sys;
use app\enum\sys\MenuEnum;
use app\enum\sys\MenuTypeEnum;
use app\enum\sys\MethodEnum;
use app\dict\sys\MenuDict;
use app\dict\sys\MenuTypeDict;
use app\dict\sys\MethodDict;
use app\service\admin\install\InstallSystemService;
use app\service\admin\sys\MenuService;
use core\base\BaseAdminController;
@ -60,7 +60,7 @@ class Menu extends BaseAdminController
['methods', ''],
['sort', 0],
['status', MenuEnum::ON],
['status', MenuDict::ON],
['is_show', 0],
]);
$this->validate($data, 'app\validate\sys\Menu.add');
@ -85,7 +85,7 @@ class Menu extends BaseAdminController
['methods', ''],
['sort', 0],
['status', MenuEnum::ON],
['status', MenuDict::ON],
['is_show', 0],
]);
$this->validate($data, 'app\validate\sys\Menu.edit');
@ -99,7 +99,7 @@ class Menu extends BaseAdminController
* @return Response
*/
public function getMenuType(){
return success(MenuTypeEnum::getMenuType());
return success(MenuTypeDict::getMenuType());
}
/**
@ -107,7 +107,7 @@ class Menu extends BaseAdminController
* @return Response
*/
public function getMethodType(){
return success(MethodEnum::getMethodType());
return success(MethodDict::getMethodType());
}
/**

View File

@ -11,7 +11,7 @@
namespace app\adminapi\controller\sys;
use app\enum\sys\RoleStatusEnum;
use app\dict\sys\RoleStatusDict;
use app\service\admin\sys\RoleService;
use core\base\BaseAdminController;
use think\Response;
@ -51,7 +51,7 @@ class Role extends BaseAdminController
$data = $this->request->params([
['role_name', ''],
['rules', []],
['status', RoleStatusEnum::ON],
['status', RoleStatusDict::ON],
]);
$this->validate($data, 'app\validate\sys\Role.add');
(new RoleService())->add($data);
@ -66,7 +66,7 @@ class Role extends BaseAdminController
$data = $this->request->params([
['role_name', ''],
['rules', []],
['status', RoleStatusEnum::ON],
['status', RoleStatusDict::ON],
]);
$this->validate($data, 'app\validate\sys\Role.edit');
(new RoleService())->edit($role_id, $data);

View File

@ -47,4 +47,27 @@ class System extends BaseAdminController
return success((new SystemService())->getSystemInfo());
}
/**
* 清理缓存,更新菜单
*/
public function schemaCache(){
return success((new SystemService())->schemaCache());
}
/**
* 校验消息队列是否正常运行
* @return \think\Response
*/
public function checkJob(){
return success(data:(new SystemService())->checkJob());
}
/**
* 校验计划任务是否正常运行
* @return \think\Response
*/
public function checkSchedule(){
return success(data:(new SystemService())->checkSchedule());
}
}

View File

@ -12,7 +12,7 @@
namespace app\adminapi\controller\upload;
use app\adminapi\controller\sys\AdminException;
use app\enum\sys\StorageEnum;
use app\dict\sys\StorageDict;
use app\service\admin\file\StorageConfigService;
use core\base\BaseAdminController;
use think\Response;
@ -47,7 +47,7 @@ class Storage extends BaseAdminController
public function editStorage($storage_type)
{
//参数获取
$storage_type_list = StorageEnum::getType();
$storage_type_list = StorageDict::getType();
if (!array_key_exists($storage_type, $storage_type_list)) throw new AdminException('OSS_TYPE_NOT_EXIST');
//数据验证
$data = [

View File

@ -14,6 +14,7 @@ namespace app\adminapi\middleware;
use app\Request;
use Closure;
use core\exception\AdminException;
use core\exception\ServerException;
/**
* http跨域请求中间件
@ -54,7 +55,7 @@ class AllowCrossDomain
header('Access-Control-Allow-Origin: *');
}else{
header('Access-Control-Allow-Origin: *');
throw new AdminException('SERVER_CROSS_REQUEST_FAIL');
throw new ServerException('SERVER_CROSS_REQUEST_FAIL', 409);
}
return $next($request);

View File

@ -15,7 +15,7 @@ use app\adminapi\middleware\AdminLog;
use think\facade\Route;
/**
* 路由
* 应用插件相关路由
*/
Route::group(function () {
//获取本地插件
@ -28,19 +28,21 @@ Route::group(function () {
Route::put('addon/status/:id/:status', 'addon.Addon/setStatus');
//安装插件
Route::post('addon/install/:addon', 'addon.Addon/install');
//插件安装检测安装环境
Route::get('addon/install/check/:addon', 'addon.Addon/installCheck');
// 执行安装
Route::post('addon/install/execute/:addon', 'addon.Addon/execute');
//插件安装状态
Route::get('addon/install/:addon/status/:key', 'addon.Addon/getInstallState');
//卸载插件
Route::post('addon/uninstall/:addon', 'addon.Addon/uninstall');
//插件状态
Route::get('addon/install/status/:addon', 'addon.Addon/uninstall');
//卸载插件
Route::post('addon/edit/:addon', 'addon.Addon/edit');
//应用列表(...)
Route::get('app/list', 'addon.App/getAppList');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);;
]);

View File

@ -1,12 +1,12 @@
<?php
// +----------------------------------------------------------------------
// | Niushop商城系统 - 团队十年电商经验汇集巨献!
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | Copyright (c) 2022~2025 https://www.niushop.com All rights reserved.
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | Licensed Niushop并不是自由软件未经许可不能去掉Niushop相关版权
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niushop Team <niucloud@outlook.com>
// | Author: Niucloud Team
// +----------------------------------------------------------------------
use app\adminapi\middleware\AdminCheckRole;
@ -45,8 +45,8 @@ Route::group('diy', function() {
// 设为使用
Route::put('use', 'diy.Diy/setUse');
// 获取页面类型
Route::get('type', 'diy.Diy/getPageType');
// 获取页面模板
Route::get('template', 'diy.Diy/getTemplate');
// 自定义路由列表
Route::get('route', 'diy.DiyRoute/lists');

View File

@ -26,8 +26,13 @@ Route::group('member', function () {
Route::get('member/:id', 'member.Member/info');
//会员添加
Route::post('member', 'member.Member/add');
//会员删除
Route::delete('member/:member_id', 'member.Member/del');
//会员编码
Route::get('memberno', 'member.Member/getMemberNo');
//会员添加
Route::put('member/:member_id', 'member.Member/edit');//会员添加
Route::put('member/modify/:member_id/:field', 'member.Member/modify');
//会员注册方式
Route::get('registertype', 'member.Member/getMemberRegisterType');
@ -63,6 +68,10 @@ Route::group('member', function () {
Route::get('account/money', 'member.Account/money');
//会员佣金流水
Route::get('account/commission', 'member.Account/commission');
//会员佣金统计
Route::get('account/sum_commission', 'member.Account/sumCommission');
//会员积分统计
Route::get('account/sum_point', 'member.Account/sumPoint');
//会员积分调整
Route::post('account/point', 'member.Account/adjustPoint');
//会员余额调整
@ -95,7 +104,12 @@ Route::group('member', function () {
Route::put('cash_out/transfer/:id', 'member.CashOut/transfer');
//提现状态
Route::get('cash_out/status', 'member.CashOut/getStatusList');
//提现统计信息
Route::get('cash_out/stat', 'member.CashOut/stat');
//获取注册与登录设置
Route::get('config/member', 'member.Config/getMemberConfig');
//更新注册与登录设置
Route::post('config/member', 'member.Config/setMemberConfig');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,

View File

@ -26,8 +26,10 @@ Route::group('order', function () {
Route::get('recharge/:order_id', 'order.Recharge/detail');
//订单状态
Route::get('recharge/status', 'order.Recharge/status');
//订单统计
Route::get('recharge/stat', 'order.Recharge/stat');
// 订单发起退款
Route::get('recharge/refund/:order_id', 'order.Recharge/refund');
Route::put('recharge/refund/:order_id', 'order.Recharge/refund');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,

View File

@ -26,6 +26,8 @@ Route::group('refund', function () {
Route::get('refund/:refund_id', 'order.Refund/detail');
//退款状态
Route::get('status', 'order.Refund/status');
//退款状态
Route::get('stat', 'order.Refund/stat');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,

View File

@ -27,7 +27,9 @@ Route::group(function () {
Route::get('captcha/check', 'login.Captcha/check');
Route::get('terminal', 'sys.Terminal/exec');
Route::get('test', 'login.Login/test');
});
//加载插件路由
(new \core\addon\AddonLoader("Route"))->load(['app_type' => 'adminapi']);
(new \core\dict\DictLoader("Route"))->load(['app_type' => 'adminapi']);

View File

@ -29,6 +29,10 @@ Route::group('site', function () {
Route::post('site', 'site.Site/add');
//更新站点
Route::put('site/:id', 'site.Site/edit');
//关闭站点
Route::put('closesite/:id', 'site.Site/closeSite');
//开启站点
Route::put('opensite/:id', 'site.Site/openSite');
//站点状态
Route::get('statuslist', 'site.Site/getStatuList');
/***************************************************** 站点分组 *************************************************/

View File

@ -52,7 +52,7 @@ Route::group('sys', function () {
// 获取菜单信息
Route::get('menu/info/:menu_key', 'sys.Menu/info');
// 初始化菜单
Route::get('menu/refresh', 'sys.Menu/refreshMenu');
Route::post('menu/refresh', 'sys.Menu/refreshMenu');
Route::get('menu/mothod', 'sys.Menu/getMethodType');
/***************************************************** 设置 ****************************************************/
@ -60,6 +60,8 @@ Route::group('sys', function () {
Route::get('config/website', 'sys.Config/getWebsite');
//网站设置
Route::put('config/website', 'sys.Config/setWebsite');
//服务信息设置
Route::get('config/service', 'sys.Config/getServiceInfo');
//版权设置
Route::get('config/copyright', 'sys.Config/getCopyright');
//版权设置
@ -133,11 +135,23 @@ Route::group('sys', function () {
Route::get('scene_domain', 'sys.Config/getSceneDomain');
/***************************************************** 系统环境 ****************************************************/
Route::get('system', 'sys.System/getSystemInfo');
//校验消息队列
Route::get('job', 'sys.System/checkJob');
//校验计划任务
Route::get('schedule', 'sys.System/checkSchedule');
/***************************************************** 应用管理 ****************************************************/
Route::get('applist', 'sys.App/getAppList');
/***************************************************** 清理缓存-刷新菜单 ****************************************************/
Route::post('schema/clear', 'sys.System/schemaCache');
})->middleware([
AdminCheckToken::class,
AdminCheckRole::class,
AdminLog::class
]);
]);
//系统环境(不效验登录状态)
Route::group('sys', function () {
Route::get('web/website', 'sys.Config/getWebsite');
});

View File

@ -11,7 +11,8 @@
namespace app\api\controller\member;
use app\enum\member\MemberAccountEnum;
use app\dict\member\MemberAccountChangeTypeDict;
use app\dict\member\MemberAccountTypeDict;
use app\service\api\member\MemberAccountService;
use core\base\BaseApiController;
use think\Response;
@ -31,7 +32,7 @@ class Account extends BaseApiController
$data = $this->request->params([
['from_type', '']
]);
$data['account_type'] = MemberAccountEnum::POINT;
$data['account_type'] = MemberAccountTypeDict::POINT;
return success((new MemberAccountService())->getPage($data));
}
@ -43,7 +44,7 @@ class Account extends BaseApiController
$data = $this->request->params([
['from_type', '']
]);
$data['account_type'] = MemberAccountEnum::BALANCE;
$data['account_type'] = MemberAccountTypeDict::BALANCE;
return success((new MemberAccountService())->getPage($data));
}
@ -55,7 +56,7 @@ class Account extends BaseApiController
$data = $this->request->params([
['from_type', '']
]);
$data['account_type'] = MemberAccountEnum::MONEY;
$data['account_type'] = MemberAccountTypeDict::MONEY;
return success((new MemberAccountService())->getPage($data));
}
@ -79,7 +80,7 @@ class Account extends BaseApiController
$data = $this->request->params([
['from_type', '']
]);
$data['account_type'] = MemberAccountEnum::COMMISSION;
$data['account_type'] = MemberAccountTypeDict::COMMISSION;
return success((new MemberAccountService())->getPage($data));
}
@ -90,7 +91,7 @@ class Account extends BaseApiController
*/
public function getFromType($account_type){
return success(MemberAccountEnum::getFromType($account_type));
return success(MemberAccountChangeTypeDict::getType($account_type));
}
}

View File

@ -11,8 +11,8 @@
namespace app\api\controller\member;
use app\enum\member\MemberAccountEnum;
use app\enum\pay\TransferEnum;
use app\dict\member\MemberAccountTypeDict;
use app\dict\pay\TransferDict;
use app\service\api\member\MemberCashOutService;
use core\base\BaseApiController;
use think\Response;
@ -59,7 +59,7 @@ class MemberCashOut extends BaseApiController
*/
public function getTransferType()
{
return success(TransferEnum::getTransferType([], false));
return success(TransferDict::getTransferType([], false));
}
/**
@ -70,7 +70,7 @@ class MemberCashOut extends BaseApiController
{
$data = $this->request->params([
[ 'apply_money', 0 ],
[ 'account_type', MemberAccountEnum::MONEY ],
[ 'account_type', MemberAccountTypeDict::MONEY ],
[ 'transfer_type', '' ],
[ 'account_id', 0 ]
]);

View File

@ -11,6 +11,7 @@
namespace app\api\controller\sys;
use app\service\api\site\SiteService;
use app\service\api\sys\ConfigService;
use core\base\BaseApiController;
use think\Response;
@ -33,4 +34,11 @@ class Config extends BaseApiController
return success((new ConfigService())->getSceneDomain());
}
/**
* 获取站点信息
* @return Response
*/
public function site(){
return success((new SiteService())->getSiteCache());
}
}

View File

@ -14,6 +14,7 @@ namespace app\api\middleware;
use app\Request;
use Closure;
use core\exception\ApiException;
use core\exception\ServerException;
/**
* http跨域请求中间件
@ -58,7 +59,7 @@ class AllowCrossDomain
// header('Access-Control-Allow-Origin: ' . $origin);
}else{
header('Access-Control-Allow-Origin: *');
throw new ApiException('SERVER_CROSS_REQUEST_FAIL');
throw new ServerException('SERVER_CROSS_REQUEST_FAIL', 409);
}
return $next($request);
}

View File

@ -11,7 +11,7 @@
namespace app\api\middleware;
use app\enum\sys\AppTypeEnum;
use app\dict\sys\AppTypeDict;
use app\Request;
use app\service\api\login\AuthService;
use app\service\api\login\LoginService;
@ -36,7 +36,9 @@ class ApiCheckToken
*/
public function handle(Request $request, Closure $next, bool $exception = false)
{
$request->appType(AppTypeEnum::API);
$request->appType(AppTypeDict::API);
//检测站点
( new AuthService() )->checkSite($request);
//通过配置来设置系统header参数
try {
$token = $request->apiToken();

View File

@ -2,7 +2,7 @@
namespace app\api\route\dispatch;
use app\enum\member\MemberLoginTypeEnum;
use app\dict\member\MemberLoginTypeDict;
use think\App;
use think\route\dispatch\Controller;
@ -24,11 +24,11 @@ class BindDispatch extends Controller
}
switch ($channel) {
case MemberLoginTypeEnum::WECHAT:
case MemberLoginTypeDict::WECHAT:
$controller = 'wechat.Wechat';
$action = 'register';
break;
case MemberLoginTypeEnum::WEAPP:
case MemberLoginTypeDict::WEAPP:
$controller = 'weapp.Weapp';
$action = 'register';
break;

View File

@ -70,11 +70,12 @@ Route::group(function () {
Route::get('wechat/jssdkconfig', 'wechat.Wechat/jssdkConfig');
/***************************************************** 版权相关设置**************************************************/
Route::get('copyright', 'sys.Config/getCopyright');
// 站点信息
Route::get('site', 'sys.Config/site');
//场景域名
Route::get('scene_domain', 'sys.Config/getSceneDomain');
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);
//加载插件路由
(new \core\addon\AddonLoader("Route"))->load(['app_type' => 'api']);
(new \core\dict\DictLoader("Route"))->load(['app_type' => 'api']);

View File

@ -0,0 +1,35 @@
<?php
declare (strict_types = 1);
namespace app\command\Addon;
use app\service\core\addon\CoreAddonInstallService;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\console\input\Option;
class Install extends Command
{
protected function configure()
{
// 指令配置
$this->setName('addon:install')
->addArgument('addon', Option::VALUE_REQUIRED)
->addOption('step', 's', Option::VALUE_REQUIRED)
->setDescription('the addon install command');
}
protected function execute(Input $input, Output $output)
{
$instance = CoreAddonInstallService::instance($input->getArgument('addon'));
$step = $input->getOption('step');
try {
$instance->$step();
$output->writeln("Command executed successfully");
} catch (\Exception $e) {
$output->writeln("Command failed " . $e->getMessage());
}
}
}

View File

@ -0,0 +1,24 @@
<?php
declare (strict_types = 1);
namespace app\command\Addon;
use think\console\Command;
use think\console\Input;
use think\console\Output;
class Uninstall extends Command
{
protected function configure()
{
// 指令配置
$this->setName('addon')
->setDescription('the addon uninstall command');
}
protected function execute(Input $input, Output $output)
{
// 指令输出
$output->writeln('uninstall');
}
}

View File

@ -0,0 +1,94 @@
<?php
namespace app\command;
use app\job\schedule\OrderClose;
use app\service\core\schedule\CoreScheduleService;
use schedule\console\Command;
use think\console\Input;
use think\console\Output;
use think\facade\Log;
use think\helper\Str;
use DateTimeZone;
use Workerman\Crontab\Crontab;
class Schedule extends Command
{
protected function configure()
{
$this->setName('schedule:run');
}
protected function execute(Input $input, Output $output)
{
//写入计划任务最后一次执行事件,用于环境监测
$file = root_path('runtime').'.schedule';
file_put_contents($file, time());
$schedules = (new CoreScheduleService())->getList();
foreach($schedules as $v){
$class = $v['class'] ?: 'app\\job\\schedule\\'.Str::studly($v['key']);
$function = $v['function'] ?: 'doJob';
$call_back = [
$class,
$function
];
$event = $this->call($call_back);
switch($v['time']['type']){
case 'min':
$event->everyMinute();
break;
case 'hour':
$event->hourly();
break;
case 'day':
$event->daily();
break;
case 'week':
$event->weekly();
break;
case 'month':
$event->monthly();
break;
}
}
parent::execute($input, $output);
}
/**
* 获取计划事件默认使用的时区
*/
protected function scheduleTimezone(): DateTimeZone|string|null
{
return 'Asia/Shanghai';
}
// protected function getCrontab($data): string
// {
// $crontab = '';
// switch ($data['type']) {
// case 'sec':// 每隔几秒
// $crontab = '*/' . $data['sec'] . ' * * * * *';
// break;
// case 'min':// 每隔几分
// $crontab = '0 */' . $data['min'] . ' * * * *';
// break;
// case 'hour':// 每隔几时第几分钟执行
// $crontab = '0 ' . $data['min'] . ' * * * *';
// break;
// case 'day':// 每日几时几分几秒
// $crontab = $data['sec'] . ' ' . $data['min'] . ' ' . $data['hour'] . ' * * *';
// break;
// case 'week':// 每周一次,周几具体时间执行
// $crontab = $data['sec'] . ' ' . $data['min'] . ' ' . $data['hour'] . ' * * ' . $data['week'];
// break;
// case 'month':// 每月一次,某日具体时间执行
// $crontab = $data['sec'] . ' ' . $data['min'] . ' ' . $data['hour'] . ' ' . $data['day'] . ' * *';
// break;
// }
// return $crontab;
// }
}

View File

@ -1,5 +1,6 @@
<?php
use think\Container;
use think\Response;
use think\facade\Lang;
use think\facade\Queue;
@ -12,7 +13,7 @@ use think\facade\Cache;
* @param int $msg
* @param array $
*/
function success($msg = 'SUCCESS', array|string|null $data = [], int $code = 1, int $http_code = 200): Response
function success($msg = 'SUCCESS', array|string|bool|null $data = [], int $code = 1, int $http_code = 200): Response
{
if (is_array($msg)) {
$data = $msg;
@ -388,6 +389,26 @@ function mkdirs($dir, $mode = 0777)
return @mkdir($dir, $mode);
}
/**
* 删除缓存文件使用
* @param $dir
*/
function rmdirs($dir)
{
$dh = opendir($dir);
while ($file = readdir($dh)) {
if ($file != "." && $file != "..") {
$fullpath = $dir . "/" . $file;
if (is_dir($fullpath)) {
rmdirs($fullpath);
} else {
unlink($fullpath);
}
}
}
closedir($dh);
}
/**
* 获取唯一随机字符串
* @param int $len
@ -613,7 +634,7 @@ function search_dir($path, &$data, $search = '')
$fp = dir($path);
while ($file = $fp->read()) {
if ($file != '.' && $file != '..') {
search_dir($path . '/' . $file, $data, $search);
search_dir($path . $file, $data, $search);
}
}
$fp->close();
@ -652,4 +673,36 @@ function getFileMap($path, $arr = [])
}
return $arr;
}
}
/**
* 如果不存在则写入缓存
* @param string|null $name
* @param $value
* @param $options
* @param $tag
* @return mixed|string
*/
function cache_remember(string $name = null, $value = '', $tag = null, $options = null){
if(!empty($hit = Cache::get($name)))//可以用has
return $hit;
if ($value instanceof Closure) {
// 获取缓存数据
$value = Container::getInstance()->invokeFunction($value);
}
if (is_null($tag)) {
Cache::set($name, $value, $options['expire'] ?? null);
} else {
Cache::tag($tag)->set($name, $value, $options['expire'] ?? null);
}
return $value;
}
/**
* 项目目录
* @return void
*/
function project_path() {
return dirname(root_path()) . DIRECTORY_SEPARATOR;
}

View File

@ -9,9 +9,9 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\addon;
namespace app\dict\addon;
class AddonEnum
class AddonDict
{
/************************************************* 证书 *****************************************/
@ -25,6 +25,14 @@ class AddonEnum
const ON = 1;
const OFF = 2;
// 未执行
const INSTALL_UNEXECUTED = 'unexecuted';
// 执行中
const INPROGRESS = 'inprogress';
// 执行成功
const INSTALL_SUCCESS = 'success';
// 执行失败
CONST INSTALL_FAIL = 'fail';
/**
* 插件操作方式
@ -32,9 +40,9 @@ class AddonEnum
*/
public static function getActionType(){
return [
self::INSTALL => get_lang('enum_addon.install'),
self::UNINSTALL => get_lang('enum_addon.uninstall'),
self::UPDATE => get_lang('enum_addon.update'),
self::INSTALL => get_lang('dict_addon.install'),
self::UNINSTALL => get_lang('dict_addon.uninstall'),
self::UPDATE => get_lang('dict_addon.update'),
];
}
@ -44,8 +52,8 @@ class AddonEnum
*/
public static function getStatus(){
return [
self::ON => get_lang('enum_addon.status_on'),//展示
self::OFF => get_lang('enum_addon.status_off'),//隐藏
self::ON => get_lang('dict_addon.status_on'),//展示
self::OFF => get_lang('dict_addon.status_off'),//隐藏
];
}
}

View File

@ -9,13 +9,13 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\cash_out;
namespace app\dict\cash_out;
/**
* 提现类型
*/
class CashOutTypeEnum
class CashOutTypeDict
{
//会员零钱提现
const MEMBER_CASH_OUT = 'member_cash_out';

View File

@ -9,9 +9,9 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\channel;
namespace app\dict\channel;
class CertEnum
class CertDict
{
/************************************************* 证书 *****************************************/

View File

@ -9,9 +9,9 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\channel;
namespace app\dict\channel;
class ReplyEnum
class ReplyDict
{
/************************************************* 请求消息的属性 *****************************************/
@ -35,8 +35,8 @@ class ReplyEnum
public static function getStatus(){
return [
self::STATUS_ON => get_lang('enum_wechat_reply.status_on'),//启用
self::STATUS_OFF => get_lang('enum_wechat_reply.status_off'),//关闭
self::STATUS_ON => get_lang('dict_wechat_reply.status_on'),//启用
self::STATUS_OFF => get_lang('dict_wechat_reply.status_off'),//关闭
];
}
}

View File

@ -9,9 +9,9 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\channel;
namespace app\dict\channel;
class WechatEnum
class WechatDict
{
/************************************************* 请求消息的属性 *****************************************/
@ -54,9 +54,9 @@ class WechatEnum
*/
public static function getEncryptionType(){
return [
self::NOT_ENCRYPT => get_lang('enum_wechat_config.not_encrypt'),//明文
self::COMPATIBLE => get_lang('enum_wechat_config.compatible'),//兼容
self::SAFE => get_lang('enum_wechat_config.safe'),//安全
self::NOT_ENCRYPT => get_lang('dict_wechat_config.not_encrypt'),//明文
self::COMPATIBLE => get_lang('dict_wechat_config.compatible'),//兼容
self::SAFE => get_lang('dict_wechat_config.safe'),//安全
];
}

View File

@ -9,17 +9,17 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\common;
namespace app\dict\common;
use app\enum\pay\PayEnum;
use app\dict\pay\PayDict;
use core\exception\PayException;
/**
* 渠道枚举类
* Class ChannelEnum
* @package app\enum\member
* Class ChannelDict
* @package app\dict\common
*/
class ChannelEnum
class ChannelDict
{
//微信小程序
const WEAPP = 'weapp';
@ -35,11 +35,11 @@ class ChannelEnum
public static function getType($type = ''){
$data = [
self::WEAPP => get_lang('enum_channel.channel_weapp'),//微信小程序
self::WECHAT => get_lang('enum_channel.channel_wechat'),//'微信公众号',
self::H5 => get_lang('enum_channel.channel_h5'),//'手机H5',
self::PC => get_lang('enum_channel.channel_pc'),//'电脑PC',
self::APP => get_lang('enum_channel.channel_app'),//'手机app',
self::WEAPP => get_lang('dict_channel.channel_weapp'),//微信小程序
self::WECHAT => get_lang('dict_channel.channel_wechat'),//'微信公众号',
self::H5 => get_lang('dict_channel.channel_h5'),//'手机H5',
self::PC => get_lang('dict_channel.channel_pc'),//'电脑PC',
self::APP => get_lang('dict_channel.channel_app'),//'手机app',
];
if(empty($type)){
return $data;

View File

@ -0,0 +1,28 @@
<?php
namespace app\dict\common;
/**
* admin管理菜单
* Class CommonDict
* @package app\dict\common
*/
class CommonDict
{
const UNKNOWN = 0;
const MAN = 1;
const WOMAN = 2;
/**
* 性别
* @return array
*/
public static function getSexType(){
return [
self::UNKNOWN => get_lang('dict_sex.unknown'),//未知
self::MAN => get_lang('dict_sex.man'),//男
self::WOMAN => get_lang('dict_sex.woman'),//女
];
}
}

View File

@ -9,34 +9,34 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\diy;
namespace app\dict\diy;
use core\addon\AddonLoader;
use core\dict\DictLoader;
/**
* 基础组件
* Class Page
* @package app\enum\sys
* Class ComponentDict
* @package app\dict\diy
*/
class ComponentEnum
class ComponentDict
{
/**
* 获取页面类型
* @return array
* 获取组件
* @return array|null
*/
public static function getComponent()
{
$system_components = [
'BASICS' => [
'title' => get_lang('enum_diy.component_type_basics'),
'BASIC' => [
'title' => get_lang('dict_diy.component_type_basic'),
'list' => [
'Text' => [
'title' => '标题',
'icon' => 'iconfont-iconbiaoti',
'path' => 'edit-text', // 编辑组件属性
'path' => 'edit-text', // 编辑组件属性名称
'support_page' => [], // 支持页面
'max_count' => 0, // 最大添加数量
'uses' => 0, // 最大添加数量
'sort' => 10001,
'value' => [
"style" => "style-1",
@ -72,7 +72,7 @@ class ComponentEnum
'icon' => 'iconfont-icontupianguanggao1',
'path' => 'edit-image-ads', // 编辑组件属性
'support_page' => [], // 支持页面
'max_count' => 0, // 最大添加数量
'uses' => 0, // 最大添加数量
'sort' => 10002,
'value' => [
"list" => [
@ -92,7 +92,7 @@ class ComponentEnum
'icon' => 'iconfont-icontuwendaohang2',
'path' => 'edit-graphic-nav',
'support_page' => [],
'max_count' => 0,
'uses' => 0,
'sort' => 10003,
'value' => [
"layout" => "horizontal",
@ -178,7 +178,7 @@ class ComponentEnum
'icon' => 'iconfont-iconwenzhang',
'path' => 'edit-article',
'support_page' => [],
'max_count' => 0,
'uses' => 0,
'sort' => 10004,
'value' => [
'sources' => 'initial',
@ -191,7 +191,7 @@ class ComponentEnum
'icon' => 'iconfont-iconfuzhukongbai1',
'path' => 'edit-horz-blank',
'support_page' => [],
'max_count' => 0,
'uses' => 0,
'sort' => 10005,
'value' => [
'height' => 20
@ -202,16 +202,20 @@ class ComponentEnum
'icon' => 'iconfont-iconhuiyuanzhongxin',
'path' => 'edit-member-info',
'support_page' => [ 'DIY_MEMBER_INDEX' ],
'max_count' => 0,
'uses' => 1,
'sort' => 10006,
'value' => [
'height' => 20
"style" => "style-1",
"styleName" => "风格1",
'bgUrl' => '',
'bgColorStart' => '',
'bgColorEnd' => ''
],
],
],
],
];
return (new AddonLoader("UniappComponent"))->load($system_components);
return ( new DictLoader("UniappComponent") )->load($system_components);
}
}

View File

@ -9,93 +9,86 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\diy;
namespace app\dict\diy;
use core\addon\AddonLoader;
use core\dict\DictLoader;
/**
* 自定义链接
* Class PageEnum
* @package app\enum\sys
* Class LinkDict
* @package app\dict\diy
*/
class LinkEnum
class LinkDict
{
/**
* 获取页面类型
* 获取链接
* @return array
*/
public static function getLink()
{
$system_links = [
[
'name' => 'SYSTEM_LINK',
'title' => get_lang('enum_diy.system_link'),
'url' => '',
'SYSTEM_LINK' => [
'title' => get_lang('dict_diy.system_link'),
'child_list' => [
[
'name' => 'INDEX',
'title' => get_lang('enum_diy.system_link_index'),
'title' => get_lang('dict_diy.system_link_index'),
'url' => '/pages/index/index',
'is_share' => 1
],
[
'name' => 'ARTICLE_LIST',
'title' => get_lang('enum_diy.system_link_article_list'),
'title' => get_lang('dict_diy.system_link_article_list'),
'url' => '/pages/article/list',
'is_share' => 1
],
]
],
[
'name' => 'MEMBER_LINK',
'title' => get_lang('enum_diy.member_link'),
'MEMBER_LINK' => [
'title' => get_lang('dict_diy.member_link'),
'child_list' => [
[
'name' => 'MEMBER_CENTER',
'title' => get_lang('enum_diy.member_index'),
'title' => get_lang('dict_diy.member_index'),
'url' => '/pages/member/index',
'is_share' => 0
],
[
'name' => 'MEMBER_PERSONAL',
'title' => get_lang('enum_diy.member_my_personal'),
'title' => get_lang('dict_diy.member_my_personal'),
'url' => '/pages/member/personal',
'is_share' => 0
],
[
'name' => 'MEMBER_BALANCE',
'title' => get_lang('enum_diy.member_my_balance'),
'title' => get_lang('dict_diy.member_my_balance'),
'url' => '/pages/member/balance',
'is_share' => 0
],
[
'name' => 'MEMBER_POINT',
'title' => get_lang('enum_diy.member_my_point'),
'title' => get_lang('dict_diy.member_my_point'),
'url' => '/pages/member/point',
'is_share' => 0
],
[
'name' => 'MEMBER_COMMISSION',
'title' => get_lang('enum_diy.member_my_commission'),
'title' => get_lang('dict_diy.member_my_commission'),
'url' => '/pages/member/commission',
'is_share' => 0
]
]
],
[
'name' => 'DIY_PAGE',
'title' => get_lang('enum_diy.diy_page'),
'url' => '',
'DIY_PAGE' => [
'title' => get_lang('dict_diy.diy_page'),
'child_list' => []
],
[
'name' => 'DIY_LINK',
'title' => get_lang('enum_diy.diy_link'),
'url' => '',
'DIY_LINK' => [
'title' => get_lang('dict_diy.diy_link'),
'child_list' => []
]
];
return (new AddonLoader("UniappLink"))->load($system_links);;
return ( new DictLoader("UniappLink") )->load($system_links);
}
}

View File

@ -0,0 +1,898 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\dict\diy;
use core\dict\DictLoader;
/**
* 页面数据
* Class TemplateDict
* @package app\dict\diy
*/
class PagesDict
{
/**
* 获取页面数据
* @param string $type
* @return array|string|null
*/
public static function getPages($type = '')
{
$system_pages = [
'DIY_INDEX' => [
'default_index' => [ // 页面标识
"title" => "首页", // 页面名称
'cover' => '', // 页面封面图
'preview' => '', // 页面预览图
'desc' => '', // 页面描述
// 页面数据源
"data" => [
"global" => [
"title" => "首页",
"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
]
],
[
"path" => "edit-graphic-nav",
"id" => "282cpxba4534",
"componentName" => "GraphicNav",
"componentTitle" => "图文导航",
"uses" => 0,
"layout" => "horizontal",
"navTitle" => "",
"mode" => "graphic",
"showStyle" => "fixed",
"rowCount" => 4,
"pageCount" => 2,
"carousel" => [
"type" => "circle",
"color" => "#FFFFFF"
],
"imageSize" => 40,
"aroundRadius" => 25,
"font" => [
"size" => 14,
"weight" => "normal",
"color" => "#303133"
],
"ignore" => [],
"pageBgColor" => "",
"componentBgColor" => "rgba(255, 255, 255, 1)",
"topRounded" => 0,
"bottomRounded" => 0,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 0,
"bottom" => 0,
"both" => 0
],
"list" => [
[
"title" => "文章资讯",
"link" => [
"parent" => "SYSTEM_LINK",
"name" => "ARTICLE_LIST",
"title" => "文章资讯",
"url" => "/pages/article/list"
],
"imageUrl" => "static/resource/images/diy/article_list.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "66rwqy8vxog0",
"imgWidth" => 176,
"imgHeight" => 176
],
[
"title" => "个人资料",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_PERSONAL",
"title" => "个人资料",
"url" => "/pages/member/personal"
],
"imageUrl" => "static/resource/images/diy/my_personal.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "30cdezm3f6e0",
"imgWidth" => 176,
"imgHeight" => 176
],
[
"title" => "我的余额",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_BALANCE",
"title" => "我的余额",
"url" => "/pages/member/balance"
],
"imageUrl" => "static/resource/images/diy/my_balance.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "20l5hypbzvfk",
"imgWidth" => 176,
"imgHeight" => 176
],
[
"title" => "我的积分",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_POINT",
"title" => "我的积分",
"url" => "/pages/member/point"
],
"imageUrl" => "static/resource/images/diy/my_point.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "7bdb8wyt3g00",
"imgWidth" => 176,
"imgHeight" => 176
]
]
],
[
"path" => "edit-article",
"id" => "524jcssmp8c0",
"componentName" => "Article",
"componentTitle" => "文章",
"uses" => 0,
"sources" => "initial",
"count" => 8,
"articleIds" => [],
"ignore" => [],
"pageBgColor" => "",
"componentBgColor" => "rgba(255, 255, 255, 1)",
"topRounded" => 0,
"bottomRounded" => 0,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 0,
"bottom" => 0,
"both" => 0
]
]
]
]
]
],
'DIY_MEMBER_INDEX' => [
'default_member_index_one' => [
"title" => "个人中心(风格一)", // 页面名称
'cover' => '', // 页面封面图
'preview' => '', // 页面预览图
'desc' => '', // 页面描述
// 页面数据源
"data" => [
"global" => [
"title" => "个人中心(风格一)",
"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" => 12
]
],
'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-member-info",
"id" => "67qv49qgxp00",
"componentName" => "MemberInfo",
"componentTitle" => "会员信息",
"uses" => 0,
"ignore" => [],
"pageBgColor" => "",
"componentBgColor" => "",
"topRounded" => 9,
"bottomRounded" => 9,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 12,
"bottom" => 6,
"both" => 16
],
"textColor" => "#FFFFFF",
"bgUrl" => "static/resource/images/diy/member_style1_bg.png"
],
[
"path" => "edit-graphic-nav",
"id" => "62b7d7hl4ok",
"componentName" => "GraphicNav",
"componentTitle" => "图文导航",
"uses" => 0,
"layout" => "horizontal",
"navTitle" => "我的服务",
"mode" => "graphic",
"showStyle" => "fixed",
"rowCount" => 4,
"pageCount" => 2,
"carousel" => [
"type" => "circle",
"color" => "#FFFFFF"
],
"imageSize" => 25,
"aroundRadius" => 25,
"font" => [
"size" => 12,
"weight" => "bold",
"color" => "#303133"
],
"pageBgColor" => "",
"componentBgColor" => "rgba(255, 255, 255, 1)",
"topRounded" => 9,
"bottomRounded" => 9,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 6,
"bottom" => 6,
"both" => 16
],
"ignore" => [],
"list" => [
[
"title" => "个人资料",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_PERSONAL",
"title" => "个人资料",
"url" => "/pages/member/personal"
],
"imageUrl" => "static/resource/images/diy/horz_m_personal.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "xvlauaflc6o",
"imgWidth" => 100,
"imgHeight" => 100
],
[
"title" => "我的余额",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_BALANCE",
"title" => "我的余额",
"url" => "/pages/member/balance"
],
"imageUrl" => "static/resource/images/diy/horz_m_balance.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "63bjscck5n40",
"imgWidth" => 100,
"imgHeight" => 100
],
[
"title" => "我的积分",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_POINT",
"title" => "我的积分",
"url" => "/pages/member/point"
],
"imageUrl" => "static/resource/images/diy/horz_m_point.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "4qiczw54t8g0",
"imgWidth" => 100,
"imgHeight" => 100
],
[
"title" => "联系客服",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/horz_m_service.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "2eqwfkdphpgk",
"imgWidth" => 100,
"imgHeight" => 100
]
]
],
[
"path" => "edit-graphic-nav",
"uses" => 0,
"id" => "33yn28534fs0",
"componentName" => "GraphicNav",
"componentTitle" => "图文导航",
"ignore" => [],
"layout" => "vertical",
"navTitle" => "",
"mode" => "graphic",
"showStyle" => "fixed",
"rowCount" => 4,
"pageCount" => 2,
"carousel" => [
"type" => "circle",
"color" => "#FFFFFF"
],
"imageSize" => 25,
"aroundRadius" => 25,
"font" => [
"size" => 13,
"weight" => "normal",
"color" => "rgba(0, 0, 0, 1)"
],
"list" => [
[
"title" => "个人资料",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_personal.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "4xc4kw9xlqu0",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"title" => "我的余额",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_balance.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "4555rq0cc1q0",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"title" => "我的积分",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_point.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "1gq3uxox0fk0",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"title" => "联系客服",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_service.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "6gqbh1tvyr00",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"id" => "6xhwid2el5c0",
"title" => "开发者联盟",
"imageUrl" => "static/resource/images/diy/vert_m_develop.png",
"imgWidth" => 88,
"imgHeight" => 88,
"link" => [
"name" => ""
],
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
]
]
],
"pageBgColor" => "",
"componentBgColor" => "rgba(255, 255, 255, 1)",
"topRounded" => 9,
"bottomRounded" => 9,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 6,
"bottom" => 12,
"both" => 16
]
]
]
]
],
'default_member_index_two' => [
"title" => "个人中心(风格二)", // 页面名称
'cover' => '', // 页面封面图
'preview' => '', // 页面预览图
'desc' => '', // 页面描述
// 页面数据源
"data" => [
"global" => [
"title" => "个人中心(风格二)",
"pageBgColor" => "#F8F8F8",
"bgUrl" => "static/resource/images/diy/member_style2_bg.png",
'imgWidth' => 750,
'imgHeight' => 403,
"bottomTabBarSwitch" => true,
"template" => [
'textColor' => "#303133",
"pageBgColor" => "",
"componentBgColor" => "",
"topRounded" => 0,
"bottomRounded" => 0,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 0,
"bottom" => 0,
"both" => 12
]
],
'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-member-info",
"id" => "67qv49qgxp00",
"componentName" => "MemberInfo",
"componentTitle" => "会员信息",
"uses" => 0,
"ignore" => [],
"pageBgColor" => "",
"componentBgColor" => "",
"topRounded" => 0,
"bottomRounded" => 0,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 0,
"bottom" => 0,
"both" => 0
],
"textColor" => "#FFFFFF",
"bgUrl" => ""
],
[
"path" => "edit-graphic-nav",
"id" => "62b7d7hl4ok",
"componentName" => "GraphicNav",
"componentTitle" => "图文导航",
"uses" => 0,
"layout" => "horizontal",
"navTitle" => "我的服务",
"mode" => "graphic",
"showStyle" => "fixed",
"rowCount" => 4,
"pageCount" => 2,
"carousel" => [
"type" => "circle",
"color" => "#FFFFFF"
],
"imageSize" => 25,
"aroundRadius" => 25,
"font" => [
"size" => 12,
"weight" => "bold",
"color" => "#303133"
],
"pageBgColor" => "",
"componentBgColor" => "rgba(255, 255, 255, 1)",
"topRounded" => 9,
"bottomRounded" => 9,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 0,
"bottom" => 6,
"both" => 16
],
"ignore" => [],
"list" => [
[
"title" => "个人资料",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_PERSONAL",
"title" => "个人资料",
"url" => "/pages/member/personal"
],
"imageUrl" => "static/resource/images/diy/horz_m_personal.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "xvlauaflc6o",
"imgWidth" => 100,
"imgHeight" => 100
],
[
"title" => "我的余额",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_BALANCE",
"title" => "我的余额",
"url" => "/pages/member/balance"
],
"imageUrl" => "static/resource/images/diy/horz_m_balance.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "63bjscck5n40",
"imgWidth" => 100,
"imgHeight" => 100
],
[
"title" => "我的积分",
"link" => [
"parent" => "MEMBER_LINK",
"name" => "MEMBER_POINT",
"title" => "我的积分",
"url" => "/pages/member/point"
],
"imageUrl" => "static/resource/images/diy/horz_m_point.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "4qiczw54t8g0",
"imgWidth" => 100,
"imgHeight" => 100
],
[
"title" => "联系客服",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/horz_m_service.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "2eqwfkdphpgk",
"imgWidth" => 100,
"imgHeight" => 100
]
]
],
[
"path" => "edit-graphic-nav",
"uses" => 0,
"id" => "33yn28534fs0",
"componentName" => "GraphicNav",
"componentTitle" => "图文导航",
"ignore" => [],
"layout" => "vertical",
"navTitle" => "",
"mode" => "graphic",
"showStyle" => "fixed",
"rowCount" => 4,
"pageCount" => 2,
"carousel" => [
"type" => "circle",
"color" => "#FFFFFF"
],
"imageSize" => 25,
"aroundRadius" => 25,
"font" => [
"size" => 13,
"weight" => "normal",
"color" => "rgba(0, 0, 0, 1)"
],
"list" => [
[
"title" => "个人资料",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_personal.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "4xc4kw9xlqu0",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"title" => "我的余额",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_balance.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "4555rq0cc1q0",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"title" => "我的积分",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_point.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "1gq3uxox0fk0",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"title" => "联系客服",
"link" => [
"name" => ""
],
"imageUrl" => "static/resource/images/diy/vert_m_service.png",
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
],
"id" => "6gqbh1tvyr00",
"imgWidth" => 88,
"imgHeight" => 88
],
[
"id" => "777g7jxbtfc0",
"title" => "开发者联盟",
"imageUrl" => "static/resource/images/diy/vert_m_develop.png",
"imgWidth" => 96,
"imgHeight" => 96,
"link" => [
"name" => ""
],
"label" => [
"control" => false,
"text" => "热门",
"textColor" => "#FFFFFF",
"bgColorStart" => "#F83287",
"bgColorEnd" => "#FE3423"
]
]
],
"pageBgColor" => "",
"componentBgColor" => "rgba(255, 255, 255, 1)",
"topRounded" => 9,
"bottomRounded" => 9,
"elementBgColor" => "",
"topElementRounded" => 0,
"bottomElementRounded" => 0,
"margin" => [
"top" => 6,
"bottom" => 12,
"both" => 16
]
]
]
]
]
]
];
$pages = ( new DictLoader("UniappPages") )->load($system_pages);
if (empty($type)) {
return $pages;
}
return $pages[ $type ] ?? '';
}
}

View File

@ -9,40 +9,40 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\diy;
namespace app\dict\diy;
use core\addon\AddonLoader;
use core\dict\DictLoader;
/**
* 自定义页面类型
* Class PageEnum
* @package app\enum\sys
* 页面模板
* Class TemplateDict
* @package app\dict\diy
*/
class PageEnum
class TemplateDict
{
/**
* 获取页面类型
* 获取页面模板
* @param string $type
* @return array|string
*/
public static function getPageType($type = '')
public static function getTemplate($type = '')
{
$system_pages = [
'DIY_INDEX' => [
'title' => get_lang('enum_diy.page_index'),
'title' => get_lang('dict_diy.page_index'),
'page' => 'pages/index/index',
],
'DIY_MEMBER_INDEX' => [
'title' => get_lang('enum_diy.page_member_index'),
'title' => get_lang('dict_diy.page_member_index'),
'page' => 'pages/member/index',
],
'DIY_PAGE' => [
'title' => get_lang('enum_diy.page_diy'),
'title' => get_lang('dict_diy.page_diy'),
'page' => 'pages/index/diy',
]
];
$pages = (new AddonLoader("UniappPages"))->load($system_pages);
$pages = (new DictLoader("UniappTemplate"))->load($system_pages);
if (empty($type)) {
return $pages;
}

View File

@ -0,0 +1,38 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\dict\member;
use core\dict\DictLoader;
/**
* 会员账户变动类型
* Class MemberAccountTypeDict
* @package app\dict\member
*/
class MemberAccountChangeTypeDict
{
/**
* 获取账户变动方式
* @param string $type
* @return array|mixed|string
*/
public static function getType($type = '')
{
$account_change_type = (new DictLoader("MemberAccountChangeType"))->load();
if (empty($type)) {
return $account_change_type;
}
return $account_change_type[ $type ] ?? '';
}
}

View File

@ -0,0 +1,48 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\dict\member;
/**
* 会员账户类型
* Class MemberAccountTypeDict
* @package app\dict\member
*/
class MemberAccountTypeDict
{
//会员积分
const POINT = 'point';
//会员余额
const BALANCE = 'balance';
//会员可提现余额
const MONEY = 'money';
//会员佣金
const COMMISSION = 'commission';
public static function getType($type = '')
{
$data = [
self::POINT => get_lang('dict_member.account_point'),
self::BALANCE => get_lang('dict_member.account_balance'),
self::MONEY => get_lang('dict_member.account_money'),
self::COMMISSION => get_lang('dict_member.account_commission'),
];
if (empty($type)) {
return $data;
}
return $data[ $type ] ?? '';
}
}

View File

@ -9,14 +9,14 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\member;
namespace app\dict\member;
/**
* 会员提现
* Class MemberAccountEnum
* @package app\enum\member
* Class MemberCashOutDict
* @package app\dict\member
*/
class MemberCashOutEnum
class MemberCashOutDict
{
const WAIT_AUDIT = 1;//待审核
const WAIT_TRANSFER = 2;//待转账
@ -30,11 +30,11 @@ class MemberCashOutEnum
*/
public static function getStatus(){
return [
self::WAIT_AUDIT => get_lang('enum_member_cash_out.status_wait_audit'),//待审核
self::WAIT_TRANSFER => get_lang('enum_member_cash_out.status_wait_transfer'),//待转账
self::TRANSFERED => get_lang('enum_member_cash_out.status_transfered'),//已转账
self::REFUSE => get_lang('enum_member_cash_out.status_refuse'),//已拒绝
self::CANCEL => get_lang('enum_member_cash_out.status_cancel'),//已取消
self::WAIT_AUDIT => get_lang('dict_member_cash_out.status_wait_audit'),//待审核
self::WAIT_TRANSFER => get_lang('dict_member_cash_out.status_wait_transfer'),//待转账
self::TRANSFERED => get_lang('dict_member_cash_out.status_transfered'),//已转账
self::REFUSE => get_lang('dict_member_cash_out.status_refuse'),//已拒绝
self::CANCEL => get_lang('dict_member_cash_out.status_cancel'),//已取消
];
}

View File

@ -9,15 +9,15 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\member;
namespace app\dict\member;
use app\enum\common\ChannelEnum;
use app\dict\common\ChannelDict;
/**
* 会员信息枚举类
* Class MemberEnum
* Class MemberDict
*/
class MemberEnum extends ChannelEnum
class MemberDict extends ChannelDict
{
const ON = 1;
@ -29,8 +29,8 @@ class MemberEnum extends ChannelEnum
*/
public static function getStatus(){
return [
self::ON => get_lang('enum_member.status_on'),//正常
self::OFF => get_lang('enum_member.status_off'),//无效
self::ON => get_lang('dict_member.status_on'),//正常
self::OFF => get_lang('dict_member.status_off'),//无效
];
}
}

View File

@ -9,14 +9,14 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\member;
namespace app\dict\member;
/**
* 会员登录方式
* Class MemberLoginTypeEnum
* @package app\enum\member
* Class MemberLoginTypeDict
* @package app\dict\member
*/
class MemberLoginTypeEnum
class MemberLoginTypeDict
{
//用户名密码注册登录
const USERNAME = 'username';
@ -29,10 +29,10 @@ class MemberLoginTypeEnum
public static function getType($type = ''){
$data = [
self::USERNAME => get_lang('enum_member.login_username'),//用户名密码登录
self::MOBILE => get_lang('enum_member.login_mobile'),//手机号验证码登录,
self::WECHAT => get_lang('enum_member.login_wechat'),//'微信公众号授权登录',
self::WEAPP => get_lang('enum_member.login_weapp'),//'微信小程序授权登录',
self::USERNAME => get_lang('dict_member.login_username'),//用户名密码登录
self::MOBILE => get_lang('dict_member.login_mobile'),//手机号验证码登录,
self::WECHAT => get_lang('dict_member.login_wechat'),//'微信公众号授权登录',
self::WEAPP => get_lang('dict_member.login_weapp'),//'微信小程序授权登录',
];
if(empty($type)){
return $data;

View File

@ -9,23 +9,23 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\member;
namespace app\dict\member;
use app\enum\common\ChannelEnum;
use app\dict\common\ChannelDict;
/**
* 会员注册渠道枚举类
* Class MemberRegisterChannelEnum
* Class MemberRegisterChannelDict
*/
class MemberRegisterChannelEnum extends ChannelEnum
class MemberRegisterChannelDict extends ChannelDict
{
//手动添加
const MANUAL = 'manual';
public static function getType($type = ''){
$data = ChannelEnum::getType($type);
$data[self::MANUAL] = get_lang('enum_member.register_manual');//手动添加
$data = ChannelDict::getType($type);
$data[self::MANUAL] = get_lang('dict_member.register_manual');//手动添加
if(empty($type)){
return $data;
}

View File

@ -9,14 +9,14 @@
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\enum\member;
namespace app\dict\member;
/**
* 会员端口枚举类
* Class MemberRegisterTypeEnum
* @package app\enum\member
* Class MemberRegisterTypeDict
* @package app\dict\member
*/
class MemberRegisterTypeEnum
class MemberRegisterTypeDict
{
//微信小程序
const WEAPP = 'weapp';
@ -32,11 +32,11 @@ class MemberRegisterTypeEnum
public static function getType($type = ''){
$data = [
self::WEAPP => get_lang('enum_member.register_weapp'),//微信小程序
self::WECHAT => get_lang('enum_member.register_wechat'),//'微信公众号',
self::MANUAL => get_lang('enum_member.register_manual'),//'手动添加',
self::USERNAME => get_lang('enum_member.register_username'),//用户名密码登录
self::MOBILE => get_lang('enum_member.register_mobile'),//手机号验证码登录,
self::WEAPP => get_lang('dict_member.register_weapp'),//微信小程序
self::WECHAT => get_lang('dict_member.register_wechat'),//'微信公众号',
self::MANUAL => get_lang('dict_member.register_manual'),//'手动添加',
self::USERNAME => get_lang('dict_member.register_username'),//用户名密码登录
self::MOBILE => get_lang('dict_member.register_mobile'),//手机号验证码登录,
];
if(empty($type)){
return $data;

View File

@ -0,0 +1,116 @@
<?php
use app\dict\member\MemberAccountTypeDict;
return [
MemberAccountTypeDict::POINT => [
//调整
'adjust' => [
//名称
'name' => get_lang('dict_member.account_point_adjust'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 1,
],
//充值赠送
'recharge_give' => [
//名称
'name' => get_lang('dict_member.account_point_recharge_give'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 0,
],
],
MemberAccountTypeDict::BALANCE => [
//调整
'adjust' => [
//名称
'name' => get_lang('dict_member.account_balance_adjust'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 1,
],
//充值
'recharge' => [
//名称
'name' => get_lang('dict_member.account_balance_recharge'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 0,
],
'recharge_refund' => [
//名称
'name' => get_lang('dict_member.account_balance_recharge_refund'),
//是否增加
'inc' => 0,
//是否减少
'dec' => 1,
],
//订单消费扣除余额
'order' => [
//名称
'name' => get_lang('dict_member.account_balance_order'),
//是否增加
'inc' => 0,
//是否减少
'dec' => 1,
],
//订单退款返还余额
'order_refund' => [
//名称
'name' => get_lang('dict_member.account_balance_order_refund'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 0,
],
],
MemberAccountTypeDict::MONEY => [
//活动奖励
'award' => [
//名称
'name' => get_lang('dict_member.account_money_award'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 0,
],
//提现
'cash_out' => [
//名称
'name' => get_lang('dict_member.account_money_cash_out'),
//是否增加
'inc' => 0,
//是否减少
'dec' => 1,
],
],
//会员佣金
MemberAccountTypeDict::COMMISSION => [
//活动奖励
'award' => [
//名称
'name' => get_lang('dict_member.account_commission_award'),
//是否增加
'inc' => 1,
//是否减少
'dec' => 0,
],
//提现
'cash_out' => [
//名称
'name' => get_lang('dict_member.account_commission_cash_out'),
//是否增加
'inc' => 0,
//是否减少
'dec' => 1,
],
]
];

View File

@ -14,7 +14,6 @@
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '站点管理',
@ -28,7 +27,6 @@
'sort' => 50,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '站点列表',
@ -42,7 +40,6 @@
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '站点详情',
@ -56,7 +53,6 @@
'sort' => 90,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
[
'menu_name' => '站点套餐',
@ -70,7 +66,6 @@
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '站点用户',
@ -84,7 +79,6 @@
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
],
@ -100,7 +94,6 @@
'sort' => 40,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '菜单管理',
@ -114,7 +107,6 @@
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '平台菜单',
@ -128,7 +120,6 @@
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '新增',
@ -142,7 +133,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '编辑',
@ -156,7 +146,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除',
@ -170,7 +159,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '详情',
@ -184,7 +172,6 @@
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
],
],
@ -200,7 +187,6 @@
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '新增',
@ -214,7 +200,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '编辑',
@ -228,7 +213,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除',
@ -242,7 +226,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '详情',
@ -256,7 +239,6 @@
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
],
]
@ -275,7 +257,6 @@
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '新增',
@ -289,7 +270,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '编辑',
@ -303,7 +283,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除',
@ -317,7 +296,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '详情',
@ -331,7 +309,6 @@
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
],
],
@ -347,7 +324,6 @@
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '新增',
@ -361,7 +337,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '编辑',
@ -375,7 +350,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除',
@ -389,7 +363,6 @@
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -405,7 +378,6 @@
'sort' => 60,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -422,7 +394,6 @@
'sort' => 20,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '网站设置',
@ -436,7 +407,6 @@
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '版权设置',
@ -450,7 +420,6 @@
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '登录设置',
@ -464,7 +433,6 @@
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '存储设置',
@ -478,7 +446,19 @@
'sort' => 30,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '微信开放平台',
'menu_key' => 'setting_oplatform',
'menu_type' => 1,
'icon' => 'iconfont-iconweixin',
'api_url' => 'sys/wxoplatform',
'router_path' => 'oplatform',
'view_path' => 'setting/wxoplatform',
'methods' => 'get',
'sort' => 20,
'status' => 1,
'is_show' => 1,
]
]
],
@ -494,7 +474,6 @@
'sort' => 10,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '代码生成',
@ -508,21 +487,6 @@
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '应用市场',
'menu_key' => 'app_store',
'menu_type' => 1,
'icon' => 'iconfont-iconyingyongshichang',
'api_url' => 'addon/local',
'router_path' => 'app_store',
'view_path' => 'tools/app/index',
'methods' => 'get',
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '数据表编辑',
@ -536,21 +500,6 @@
'sort' => 80,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
[
'menu_name' => '定时任务',
'menu_key' => 'system_cron',
'menu_type' => 1,
'icon' => 'element-SetUp',
'api_url' => 'sys/cron',
'router_path' => 'cron',
'view_path' => 'tools/cron',
'methods' => 'get',
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '更新缓存',
@ -564,7 +513,6 @@
'sort' => 60,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '环境检测',
@ -578,8 +526,20 @@
'sort' => 50,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
]
],
[
'menu_name' => '应用市场',
'menu_key' => 'app_store',
'menu_type' => 1,
'icon' => 'element-ShoppingBag',
'api_url' => 'addon/local',
'router_path' => 'app_store',
'view_path' => 'app/store',
'methods' => 'get',
'sort' => 0,
'status' => 1,
'is_show' => 1,
],
];

View File

@ -13,7 +13,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '装修管理',
@ -27,7 +26,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '首页装修',
@ -41,7 +39,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '个人中心',
@ -55,7 +52,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '保存',
@ -69,7 +65,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '页面管理',
@ -83,7 +78,6 @@ return
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '底部导航',
@ -97,7 +91,6 @@ return
'sort' => 60,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' =>
[
[
@ -112,7 +105,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
],
],
@ -128,7 +120,6 @@ return
'sort' => 50,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
],
@ -144,7 +135,6 @@ return
'sort' => 21,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '装修',
@ -158,7 +148,6 @@ return
'sort' => 0,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
]
]
],
@ -175,7 +164,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '文章列表',
@ -189,7 +177,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '文章添加/编辑',
@ -203,7 +190,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
[
'menu_name' => '文章栏目',
@ -217,7 +203,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -233,7 +218,6 @@ return
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' =>
[
[
@ -248,7 +232,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
@ -263,7 +246,6 @@ return
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -279,7 +261,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
[
'menu_name' => '会员标签',
@ -293,7 +274,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
@ -308,7 +288,6 @@ return
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
@ -323,12 +302,11 @@ return
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除标签',
'menu_key' => 'member_label_add',
'menu_key' => 'member_label_delete',
'menu_type' => 2,
'icon' => '',
'api_url' => 'member/label/<id>',
@ -338,7 +316,6 @@ return
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -354,7 +331,6 @@ return
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '会员余额',
@ -368,7 +344,6 @@ return
'sort' => 60,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '会员佣金',
@ -382,7 +357,6 @@ return
'sort' => 59,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
],
],
@ -398,7 +372,6 @@ return
'sort' => 60,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '会员充值',
@ -412,7 +385,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '退款',
@ -426,7 +398,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
]
],
@ -442,7 +413,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
[
'menu_name' => '会员提现',
@ -456,7 +426,6 @@ return
'sort' => 99,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '退款记录',
@ -470,11 +439,10 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '退款详情',
'menu_key' => 'refund',
'menu_key' => 'refund_detail',
'menu_type' => 2,
'icon' => '',
'api_url' => 'order/refund/<id>',
@ -484,7 +452,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
]
@ -495,17 +462,30 @@ return
'menu_name' => '应用管理',
'menu_key' => 'addon',
'menu_type' => 1,
'menu_type' => 0,
'icon' => 'iconfont-iconmanage-apply',
'api_url' => 'addon/list',
'api_url' => '',
'router_path' => 'app',
'view_path' => 'app/index',
'methods' => 'get',
'view_path' => '',
'methods' => '',
'sort' => 55,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => []
'children' => [
[
'menu_name' => '应用管理',
'menu_key' => 'addon_list',
'menu_type' => 1,
'icon' => 'iconfont-iconmanage-apply',
'api_url' => 'addon/list',
'router_path' => 'index',
'view_path' => 'app/index',
'methods' => 'get',
'sort' => 50,
'status' => 1,
'is_show' => 1,
]
]
],
[
@ -520,7 +500,6 @@ return
'sort' => 50,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '电脑端',
@ -534,7 +513,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '电脑端配置',
@ -548,7 +526,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -564,7 +541,6 @@ return
'sort' => 110,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => 'H5端配置',
@ -578,7 +554,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -594,7 +569,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '公众号配置',
@ -608,7 +582,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '自定义菜单',
@ -622,7 +595,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '模板消息',
@ -636,7 +608,6 @@ return
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
],
@ -652,7 +623,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '小程序配置',
@ -666,7 +636,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '订阅消息',
@ -680,7 +649,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
],
@ -696,7 +664,6 @@ return
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '支付宝配置',
@ -710,7 +677,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -728,7 +694,6 @@ return
'sort' => 40,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
@ -743,7 +708,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '新增',
@ -757,7 +721,6 @@ return
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '编辑',
@ -771,7 +734,6 @@ return
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除',
@ -785,7 +747,6 @@ return
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '详情',
@ -799,7 +760,6 @@ return
'sort' => 0,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
],
],
@ -815,7 +775,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '新增',
@ -829,7 +788,6 @@ return
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '编辑',
@ -843,7 +801,6 @@ return
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '删除',
@ -857,7 +814,6 @@ return
'sort' => 1,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -873,7 +829,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -890,7 +845,6 @@ return
'sort' => 30,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '网站设置',
@ -904,7 +858,7 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '协议管理',
@ -918,7 +872,6 @@ return
'sort' => 80,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
]
@ -935,7 +888,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 0,
'en_menu_name' => '',
],
[
'menu_name' => '注册登录',
@ -949,7 +901,19 @@ return
'sort' => 70,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '会员设置',
'menu_key' => 'setting_member',
'menu_type' => 1,
'icon' => 'iconfont-iconjiaoseyonghu',
'api_url' => 'member/config/member',
'router_path' => 'member',
'view_path' => 'setting/member',
'methods' => 'get',
'sort' => 71,
'status' => 1,
'is_show' => 1,
],
[
'menu_name' => '支付管理',
@ -963,7 +927,6 @@ return
'sort' => 60,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '支付设置',
@ -977,7 +940,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '设置',
@ -991,7 +953,6 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -1007,7 +968,6 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '设置',
@ -1021,7 +981,7 @@ return
'sort' => 90,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
]
],
@ -1037,7 +997,7 @@ return
// 'sort' => 0,
// 'status' => 1,
// 'is_show' => 0,
// 'en_menu_name' => '',
//
// ],
// [
// 'menu_name' => '支付宝支付',
@ -1051,7 +1011,7 @@ return
// 'sort' => 0,
// 'status' => 1,
// 'is_show' => 0,
// 'en_menu_name' => '',
//
// ],
// [
// 'menu_name' => '获取支付配置',
@ -1065,7 +1025,7 @@ return
// 'sort' => 0,
// 'status' => 1,
// 'is_show' => 0,
// 'en_menu_name' => '',
//
// ],
// [
// 'menu_name' => '配置支付',
@ -1079,7 +1039,7 @@ return
// 'sort' => 0,
// 'status' => 1,
// 'is_show' => 0,
// 'en_menu_name' => '',
//
// ],
]
],
@ -1095,7 +1055,6 @@ return
'sort' => 59,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '消息管理',
@ -1109,7 +1068,6 @@ return
'sort' => 50,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '消息模板',
@ -1123,7 +1081,6 @@ return
'sort' => 10,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '发送记录',
@ -1137,7 +1094,6 @@ return
'sort' => 9,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
],
@ -1153,7 +1109,6 @@ return
'sort' => 40,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
'children' => [
[
'menu_name' => '短信设置',
@ -1167,7 +1122,7 @@ return
'sort' => 12,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
],
[
'menu_name' => '发送记录',
@ -1181,7 +1136,7 @@ return
'sort' => 11,
'status' => 1,
'is_show' => 1,
'en_menu_name' => '',
]
]
],

Some files were not shown because too many files have changed in this diff Show More