This commit is contained in:
wangchen147 2024-04-03 15:26:01 +08:00
parent 6aa8319a2b
commit 295fb5d386
4333 changed files with 189671 additions and 119294 deletions

View File

@ -1,10 +1,10 @@
NODE_ENV = 'development'
# api请求地址
VITE_APP_BASE_URL='/adminapi/'
# api请求地址
VITE_APP_BASE_URL=''
# 图片服务器地址
VITE_IMG_DOMAIN=''
# 请求时header中token的参数名
VITE_REQUEST_HEADER_TOKEN_KEY='token'
VITE_REQUEST_HEADER_TOKEN_KEY='token'

View File

@ -1,10 +1,10 @@
NODE_ENV = 'production'
# api请求地址
# api请求地址
VITE_APP_BASE_URL='/adminapi/'
# 图片服务器地址
VITE_IMG_DOMAIN=''
# 请求时header中token的参数名
VITE_REQUEST_HEADER_TOKEN_KEY='token'
VITE_REQUEST_HEADER_TOKEN_KEY='token'

View File

@ -22,6 +22,7 @@
"rules": {
"no-tabs":"off",
"indent": [1, 4, { "SwitchCase": 1 }],
"eqeqeq":"off"
"eqeqeq":"off",
"vue/multi-word-component-names": "off"
}
}

2
admin/.gitignore vendored
View File

@ -22,5 +22,3 @@ dist-ssr
*.njsproj
*.sln
*.sw?
.env.development
.env.production

View File

@ -67,6 +67,8 @@ declare module '@vue/runtime-core' {
ElTabPane: typeof import('element-plus/es')['ElTabPane']
ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag']
ElTimeline: typeof import('element-plus/es')['ElTimeline']
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']

8249
admin/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,52 +5,54 @@
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"build": "vite build && node publish.cjs",
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@highlightjs/vue-plugin": "^2.1.0",
"@vueuse/core": "^9.12.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.4.0",
"crypto-js": "^4.1.1",
"css-color-function": "^1.3.3",
"echarts": "^5.4.1",
"element-plus": "^2.2.29",
"highlight.js": "^11.8.0",
"nprogress": "^0.2.0",
"pinia": "^2.0.30",
"qrcode": "^1.5.1",
"sass": "^1.58.0",
"sortablejs": "^1.15.0",
"vue": "^3.2.45",
"vue-i18n": "^9.2.2",
"vue-jsonp": "^2.0.0",
"vue-router": "^4.1.6",
"vue-web-terminal": "^3.1.7",
"vue3-video-play": "^1.3.1-beta.6"
"@element-plus/icons-vue": "2.0.10",
"@highlightjs/vue-plugin": "2.1.0",
"@vueuse/core": "9.12.0",
"@wangeditor/editor": "5.1.23",
"@wangeditor/editor-for-vue": "5.1.12",
"@types/lodash-es": "4.17.6",
"axios": "1.4.0",
"crypto-js": "4.1.1",
"css-color-function": "1.3.3",
"echarts": "5.4.1",
"element-plus": "2.2.29",
"nprogress": "0.2.0",
"pinia": "2.0.30",
"qrcode": "1.5.1",
"sass": "1.58.0",
"sortablejs": "1.15.0",
"vue": "3.2.45",
"vue-i18n": "9.2.2",
"vue-router": "4.1.6",
"vue-web-terminal": "3.2.2",
"vue3-video-play": "1.3.1-beta.6",
"vue-jsonp": "2.0.0",
"lodash-es": "4.17.21",
"highlight.js": "11.0.1"
},
"devDependencies": {
"@tailwindcss/line-clamp": "^0.4.2",
"@types/qrcode": "^1.5.0",
"@types/sortablejs": "^1.15.0",
"@typescript-eslint/eslint-plugin": "^5.53.0",
"@vitejs/plugin-vue": "^4.0.0",
"autoprefixer": "^10.4.13",
"eslint": "^8.34.0",
"eslint-config-standard-with-typescript": "^34.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.6.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.9.0",
"postcss": "^8.4.21",
"tailwindcss": "^3.2.4",
"typescript": "^4.9.5",
"unplugin-auto-import": "^0.13.0",
"unplugin-vue-components": "^0.23.0",
"vite": "^4.1.0",
"vue-tsc": "^1.0.24"
"@tailwindcss/line-clamp": "0.4.2",
"@types/qrcode": "1.5.0",
"@types/sortablejs": "1.15.0",
"@typescript-eslint/eslint-plugin": "5.53.0",
"@vitejs/plugin-vue": "4.0.0",
"autoprefixer": "10.4.13",
"eslint": "8.34.0",
"eslint-config-standard-with-typescript": "34.0.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.9.0",
"postcss": "8.4.21",
"tailwindcss": "3.2.4",
"typescript": "4.9.5",
"unplugin-auto-import": "0.13.0",
"unplugin-vue-components": "0.23.0",
"vite": "4.1.0",
"vue-tsc": "1.0.24"
}
}
}

40
admin/publish.cjs Normal file
View File

@ -0,0 +1,40 @@
const fs = require('fs')
const publish = () => {
const src = './dist'
const dest = '../niucloud/public/admin'
solve()
// 目标目录不存在停止复制
try {
const dir = fs.readdirSync(dest)
} catch (e) {
return
}
// 删除目标目录下文件
fs.rm(dest, { recursive: true }, err => {
if(err) {
console.log(err)
return
}
fs.cp(src, dest, { recursive: true }, (err) => {
if (err) {
console.error(err)
}
})
})
}
const solve = () => {
const fn = './dist/index.html'
const fc = fs.readFileSync(fn, 'utf-8')
let text = new String(fc)
text = text.replaceAll('./assets/', '/admin/assets/')
text = text.replace('./niucloud.ico', '/admin/niucloud.ico')
fs.writeFileSync(fn, text, 'utf8')
}
publish()

View File

@ -5,7 +5,7 @@ import request from '@/utils/request'
* @returns
*/
export function getAddonLocal(params: Record<string, any>) {
return request.get('addon/local', params)
return request.get('addon/local', params, { showSuccessMessage: true })
}
/**
@ -16,14 +16,6 @@ export function getAddonDetial(id: number) {
return request.get(`addon/${id}`)
}
/**
*
* @returns
*/
export function getAddonByKey(key: string) {
return request.get(`addon/addon_by_key/${key}`)
}
/**
*
* @param params
@ -62,7 +54,7 @@ export function preInstallCheck(addon: string) {
/**
*
* @returns
* @returns
*/
export function getAddonInstalltask() {
return request.get('addon/installtask')
@ -70,8 +62,8 @@ export function getAddonInstalltask() {
/**
*
* @param addon
* @returns
* @param addon
* @returns
*/
export function getAddonCloudInstallLog(addon: string) {
return request.get(`addon/cloudinstall/${addon}`)
@ -93,4 +85,8 @@ export function preUninstallCheck(addon: string) {
*/
export function cancelInstall(addon: string) {
return request.put(`addon/install/cancel/${addon}`, {}, { showErrorMessage: false })
}
}
export function getInstalledAddonList() {
return request.get('addon/list/install')
}

View File

@ -5,15 +5,22 @@ import request from '@/utils/request'
* @param params
*/
export function login(params: Record<string, any>) {
return request.get('login', { params })
return request.get(`login`, {params})
}
/**
* 退
*/
export function logout() {
return request.put('auth/logout', {}, { showErrorMessage: false })
}
/**
*
* @returns
*/
export function getAuthMenus() {
return request.get('auth/authmenu')
export function getAuthMenus(params: Record<string, any>) {
return request.get('auth/authmenu', {params})
}
/**
@ -32,12 +39,6 @@ export function getLoginConfig() {
return request.get('login/config')
}
/**
*
*/
export function getAuthaddon() {
return request.get(`auth/authaddon`)
}
/**
*
*/

View File

@ -0,0 +1,38 @@
import request from '@/utils/request'
/**
*
* @param addon
*/
export function cloudBuild() {
return request.post('niucloud/build', {}, { timeout: 0 })
}
/**
*
* @param addon
*/
export function getCloudBuildTask() {
return request.get('niucloud/build')
}
/**
*
*/
export function getCloudBuildLog() {
return request.get('niucloud/build/log')
}
/**
*
*/
export function clearCloudBuildTask() {
return request.post('niucloud/build/clear')
}
/**
*
*/
export function preBuildCheck() {
return request.get('niucloud/build/check')
}

View File

@ -86,28 +86,42 @@ export function getLink(params: Record<string, any>) {
}
/**
*
*
*/
export function getDiyBottom(params: Record<string, any>) {
export function getDiyBottomList(params: Record<string, any>) {
return request.get(`diy/bottom`, {params})
}
/**
*
*
*/
export function getDiyBottomConfig(params: Record<string, any>) {
return request.get(`diy/bottom/config`, {params})
}
/**
*
* @param params
* @returns
*/
export function setDiyBottom(params: Record<string, any>) {
export function setDiyBottomConfig(params: Record<string, any>) {
return request.post('diy/bottom', params, {showSuccessMessage: true})
}
/**
*
*
*/
export function getDiyTemplate(params: Record<string, any>) {
return request.get(`diy/template`, {params})
}
/**
*
*/
export function getDiyTemplatePages(params: Record<string, any>) {
return request.get(`diy/template/pages`, {params})
}
/**
*
* @param params
@ -117,6 +131,14 @@ export function getDiyRouteList(params: Record<string, any>) {
return request.get(`diy/route`, {params})
}
/**
*
* @returns
*/
export function getDiyRouteAppList() {
return request.get(`diy/route/apps`)
}
/**
*
* @param params
@ -149,4 +171,13 @@ export function getDecoratePage(params: Record<string, any>) {
*/
export function changeTemplate(params: Record<string, any>) {
return request.put(`diy/change`, params, {showSuccessMessage: true})
}
/**
*
* @param params
* @returns
*/
export function getApps(params: Record<string, any>) {
return request.get(`diy/apps`)
}

View File

@ -310,7 +310,7 @@ export function getCashOutList(params: Record<string, any>) {
* @param id
*/
export function getCashOutDetail(id: number) {
return request.get(`member/cash_out/${id}`)
return request.get(`member/cash_out/${id}`, {})
}
/**

View File

@ -11,7 +11,7 @@ export function getAuthinfo() {
*
*/
export function setAuthinfo(params: Record<string, any>) {
return request.post('niucloud/authinfo', params, { showSuccessMessage: true })
return request.post('niucloud/authinfo', params, {showSuccessMessage: true})
}
/**
@ -22,6 +22,7 @@ export function getAdminAuthinfo() {
}
/**
*
* @returns
@ -32,6 +33,7 @@ export function getModule() {
/**
*
* @param params
* @returns
*/
export function getModuleVersion() {
@ -45,4 +47,21 @@ export function getModuleVersion() {
*/
export function downloadVersion(params: Record<string, any>) {
return request.post(`addon/download/${params.addon}`, params, { showSuccessMessage: true })
}
}
/**
*
* @param params
* @returns
*/
export function getFrameworkNewVersion() {
return request.get(`niucloud/framework/newversion`)
}
/**
*
* @returns
*/
export function getFrameworkVersionList() {
return request.get(`niucloud/framework/version/list`)
}

View File

@ -61,7 +61,7 @@ export function getSmsList() {
* @returns
*/
export function getSmsInfo(sms_type: string) {
return request.get(`notice/notice/sms/${sms_type}`)
return request.get(`notice/notice/sms/${sms_type}`,)
}
/**

View File

@ -0,0 +1,70 @@
import request from '@/utils/request'
/***************************************************** 充值订单 ****************************************************/
/**
*
* @param params
* @returns
*/
export function getRechargeOrderList(params: Record<string, any>) {
return request.get(`order/recharge`, {params})
}
/**
*
* @param params
* @returns
*/
export function getRechargeStat(params: Record<string, any>) {
return request.get(`order/recharge/stat`, {params})
}
/**
*
* @param order_id
* @returns
*/
export function getRechargeOrderInfo(order_id: number) {
return request.get(`order/recharge/${order_id}`);
}
/**
*
* @returns
*/
export function getRechargeOrderStatusList() {
return request.get(`order/recharge/status`)
}
/**
* 退
* @returns
*/
export function getRechargeRefund(params: Record<string, any>) {
return request.get(`order/recharge/refund`, {params})
}
/**
* 退
* @returns
*/
export function getRechargeRefundStatus() {
return request.get(`order/recharge/refund/status`)
}
/**
* 退
* @returns
*/
export function rechargeRefund(id: number) {
return request.put(`order/recharge/refund/${id}`, {}, {showSuccessMessage: true});
}
/**
* 退
* @returns
*/
export function getRechargeRefundStat() {
return request.get(`order/recharge/refund/stat`);
}

18
admin/src/app/api/pc.ts Normal file
View File

@ -0,0 +1,18 @@
import request from '@/utils/request'
/**
* pc配置
* @returns
*/
export function getPcConfig() {
return request.get('channel/pc/config')
}
/**
* h5配置
* @param params
* @returns
*/
export function setPcConfig(params: Record<string, any>) {
return request.put('channel/pc/config', params, {showSuccessMessage: true})
}

View File

@ -15,3 +15,4 @@ export function getUserInfo() {
export function setUserInfo(params: Record<string, any>) {
return request.put(`auth/edit`, params, {showSuccessMessage: true});
}

View File

@ -12,6 +12,6 @@ export function getStatInfo() {
*
*/
export function getSiteStatInfo() {
return request.get(`stat/siteindex`)
return request.get(`stat/iteindex`)
}

View File

@ -81,15 +81,8 @@ export function allRole() {
*
* @returns
*/
export function getSystem() {
return request.get(`sys/menu/system_menu`)
}
/**
*
*/
export function getAddonList() {
return request.get(`app/getAddonList`)
export function getSystem(params: Record<string, any> = {}) {
return request.get(`sys/menu/system_menu`, { params })
}
/**
@ -167,21 +160,11 @@ export function getMenuByTypeDir(key: any = 'system') {
return request.get(`sys/menu/dir/${key}`)
}
/***************************************************** 站点菜单 ****************************************************/
/**
*
* @returns
*/
export function getSiteMenus() {
return request.get(`site/site/menu`)
}
/***************************************************** 设置 ****************************************************/
/**
* []
*
* @returns
*/
export function getWebsite() {
@ -189,20 +172,28 @@ export function getWebsite() {
}
/**
* []
*
* @returns
*/
export function getWebConfig() {
return request.get('sys/web/website')
}
/**
*
* @returns
*/
export function getWebCopyright() {
return request.get('sys/web/copyright')
}
/**
*
* @param params
* @returns
*/
export function setWebsite(params: Record<string, any>) {
return request.post(`sys/config/website`, params, {showSuccessMessage: true})
return request.put(`sys/config/website`, params, { showSuccessMessage: true })
}
/**
@ -227,7 +218,7 @@ export function getService() {
* @returns
*/
export function setCopyright(params: Record<string, any>) {
return request.put(`sys/config/copyright`, params, {showSuccessMessage: true})
return request.put(`sys/config/copyright`, params, { showSuccessMessage: true })
}
/**
@ -236,7 +227,7 @@ export function setCopyright(params: Record<string, any>) {
* @returns
*/
export function getAttachmentCategoryList(params: Record<string, any>) {
return request.get(`sys/attachment/category`, {params})
return request.get(`sys/attachment/category`, { params })
}
/**
@ -244,7 +235,7 @@ export function getAttachmentCategoryList(params: Record<string, any>) {
* @param params
*/
export function addAttachmentCategory(params: Record<string, any>) {
return request.post(`sys/attachment/category`, params, {showSuccessMessage: true})
return request.post(`sys/attachment/category`, params, { showSuccessMessage: true })
}
/**
@ -253,7 +244,7 @@ export function addAttachmentCategory(params: Record<string, any>) {
* @returns
*/
export function editAttachmentCategory(params: Record<string, any>) {
return request.put(`sys/attachment/category/${params.id}`, params, {showSuccessMessage: true})
return request.put(`sys/attachment/category/${params.id}`, params, { showSuccessMessage: true })
}
/**
@ -262,7 +253,7 @@ export function editAttachmentCategory(params: Record<string, any>) {
* @returns
*/
export function deleteAttachmentCategory(id: number) {
return request.delete(`sys/attachment/category/${id}`, {showSuccessMessage: true})
return request.delete(`sys/attachment/category/${id}`, { showSuccessMessage: true })
}
/**
@ -271,7 +262,7 @@ export function deleteAttachmentCategory(id: number) {
* @returns
*/
export function getAttachmentList(params: Record<string, any>) {
return request.get(`sys/attachment`, {params})
return request.get(`sys/attachment`, { params })
}
/**
@ -280,7 +271,7 @@ export function getAttachmentList(params: Record<string, any>) {
* @returns
*/
export function deleteAttachment(params: Record<string, any>) {
return request.delete(`sys/attachment/del`, {data: params, showSuccessMessage: true})
return request.delete(`sys/attachment/del`, { data: params, showSuccessMessage: true })
}
/**
@ -292,13 +283,6 @@ export function moveAttachment(params: Record<string, any>) {
return request.put(`sys/attachment/batchmove`, params)
}
/**
* menu菜单
*/
export function getAuthMenu() {
return request.get(`auth/site/showmenu`)
}
/**
*
*/
@ -310,7 +294,7 @@ export function getShortcutMenu() {
*
*/
export function setShortcutMenu(params: Record<string, any>) {
return request.put(`sys/config/shortcut_menu`, params, {showSuccessMessage: true})
return request.put(`sys/config/shortcut_menu`, params, { showSuccessMessage: true })
}
/**
@ -319,7 +303,7 @@ export function setShortcutMenu(params: Record<string, any>) {
* @returns
*/
export function getIconCategoryList(params: Record<string, any>) {
return request.get(`sys/attachment/icon_category`, {params})
return request.get(`sys/attachment/icon_category`, { params })
}
/**
@ -328,10 +312,9 @@ export function getIconCategoryList(params: Record<string, any>) {
* @returns
*/
export function getIconList(params: Record<string, any>) {
return request.get(`sys/attachment/icon`, {params})
return request.get(`sys/attachment/icon`, { params })
}
/**
* evn
* @param params
@ -340,7 +323,6 @@ export function getIconList(params: Record<string, any>) {
export function getEnv() {
return request.get(`sys/env`)
}
/***************************************************** 地址管理 ****************************************************/
/**
@ -364,14 +346,14 @@ export function getAreatree(level: number = 1) {
*
*/
export function getAddressInfo(params: any) {
return request.get(`sys/area/get_info`, {params})
return request.get(`sys/area/get_info`, { params })
}
/**
*
*/
export function getContraryAddress(params: any) {
return request.get(`sys/area/contrary`, {params})
return request.get(`sys/area/contrary`, { params })
}
/**
@ -381,7 +363,6 @@ export function getContraryAddress(params: any) {
export function getAreaByCode(code: number | string) {
return request.get(`sys/area/code/${code}`)
}
/***************************************************** 存储设置 ****************************************************/
/**
@ -405,7 +386,7 @@ export function getStorageInfo(type: string) {
* @returns
*/
export function editStorage(params: Record<string, any>) {
return request.put(`sys/storage/${params.storage_type}`, params, {showSuccessMessage: true})
return request.put(`sys/storage/${params.storage_type}`, params, { showSuccessMessage: true })
}
/***************************************************** 支付设置 ****************************************************/
@ -423,7 +404,7 @@ export function getPayConfig(type: string) {
* @returns
*/
export function setPayConfig(params: Record<string, any>) {
return request.put(`pay/config/${params.type}`, params, {showSuccessMessage: true});
return request.put(`pay/config/${params.type}`, params, { showSuccessMessage: true });
}
/**
@ -439,7 +420,7 @@ export function getPayList() {
*
* @param channel
*/
export function getTransferInfo(channel: string) {
export function getTransferInfo(channel) {
return request.get(`pay/channel/lists/${channel}`)
}
@ -459,7 +440,7 @@ export function setTransferInfo(params: Record<string, any>) {
* @returns
*/
export function getCronList(params: any) {
return request.get(`sys/schedule/list`, {params})
return request.get(`sys/schedule/list`, { params })
}
/**
@ -499,7 +480,7 @@ export function getWeek() {
* @returns
*/
export function addCron(params: Record<string, any>) {
return request.post(`sys/schedule`, params, {showSuccessMessage: true})
return request.post(`sys/schedule`, params, { showSuccessMessage: true })
}
/**
@ -507,7 +488,7 @@ export function addCron(params: Record<string, any>) {
* @returns
*/
export function editCron(params: Record<string, any>) {
return request.put(`sys/schedule/${params.id}`, params, {showSuccessMessage: true})
return request.put(`sys/schedule/${params.id}`, params, { showSuccessMessage: true })
}
/**
@ -515,7 +496,7 @@ export function editCron(params: Record<string, any>) {
* @returns
*/
export function deleteCron(id: string) {
return request.delete(`sys/schedule/${id}`, {showSuccessMessage: true})
return request.delete(`sys/schedule/${id}`, { showSuccessMessage: true })
}
/***************************************************** 协议管理 ****************************************************/
@ -541,7 +522,7 @@ export function getAgreementInfo(key: string) {
* @returns
*/
export function editAgreement(params: Record<string, any>) {
return request.put(`sys/agreement/${params.key}`, params, {showSuccessMessage: true})
return request.put(`sys/agreement/${params.key}`, params, { showSuccessMessage: true })
}
/**
@ -576,7 +557,7 @@ export function getConfigLogin() {
* @returns
*/
export function setConfigLogin(params: Record<string, any>) {
return request.put(`sys/config/login`, params, {showSuccessMessage: true})
return request.put(`sys/config/login`, params, { showSuccessMessage: true })
}
/**
@ -590,7 +571,7 @@ export function getPayConfigList() {
*
*/
export function setPatConfig(params: Record<string, any>) {
return request.post(`pay/channel/set/all`, params, {showSuccessMessage: true})
return request.post(`pay/channel/set/all`, params, { showSuccessMessage: true })
}
@ -599,14 +580,23 @@ export function setPatConfig(params: Record<string, any>) {
*
*/
export function menuRefresh(params: Record<string, any>) {
return request.post(`sys/menu/refresh`, {}, {showSuccessMessage: true})
return request.post(`sys/menu/refresh`, {}, { showSuccessMessage: true })
}
/**
*
*/
export function clearSchemaCache(params: Record<string, any>) {
return request.post(`sys/schema/clear`, {}, {showSuccessMessage: true})
return request.post(`sys/schema/clear`, {}, { showSuccessMessage: true })
}
/***************************************************** 获取应用 ****************************************************/
/**
*
*/
export function getAppMange() {
return request.get(`sys/applist`)
}
/***************************************************** 地图设置 ****************************************************/
@ -615,7 +605,7 @@ export function clearSchemaCache(params: Record<string, any>) {
* key
*/
export function setMap(params: Record<string, any>) {
return request.put(`sys/config/map`, params, {showSuccessMessage: true})
return request.put(`sys/config/map`, params, { showSuccessMessage: true })
}
/**
@ -637,14 +627,30 @@ export function getIndexList() {
*
*/
export function setIndexList(params: Record<string, any>) {
return request.put(`sys/config/site_index`, params, {showSuccessMessage: true})
return request.put(`sys/config/site_index`, params, { showSuccessMessage: true })
}
/**
*
* @returns
*/
export function getLayouts() {
return request.get('sys/layout')
}
/**
*
* @returns
*/
export function setLayout(key: string) {
return request.put('sys/layout', { key }, { showSuccessMessage: true })
}
/**
*
*/
export function getPayAuditList(params: Record<string, any>) {
return request.get('pay/audit', {params})
return request.get('pay/audit', { params })
}
/**
@ -652,7 +658,7 @@ export function getPayAuditList(params: Record<string, any>) {
* @returns
*/
export function payAuditPass(outTradeNo: string) {
return request.put(`pay/pass/${outTradeNo}`, {}, {showSuccessMessage: true})
return request.put(`pay/pass/${outTradeNo}`, {}, { showSuccessMessage: true })
}
/**
@ -660,7 +666,7 @@ export function payAuditPass(outTradeNo: string) {
* @returns
*/
export function payAuditRefuse(params: Record<string, any>) {
return request.put(`pay/refuse/${params.out_trade_no}`, params, {showSuccessMessage: true})
return request.put(`pay/refuse/${params.out_trade_no}`, params, { showSuccessMessage: true })
}
/**
@ -670,9 +676,40 @@ export function getPayDetail(id: number) {
return request.get(`pay/detail/${id}`)
}
/**
*
*/
export function getAddonList() {
return request.get(`app/getAddonList`)
}
/**
*
*/
export function getWapIndexList(params: Record<string, any>) {
return request.get('sys/config/wap_index', {params})
return request.get('sys/config/wap_index', { params })
}
/**
* key
* @returns
*/
export function getDeveloperToken() {
return request.get('sys/config/developer_token')
}
/**
* key
* @param params
* @returns
*/
export function setDeveloperToken(params: Record<string, any>) {
return request.put(`sys/config/developer_token`, params, { showSuccessMessage: true })
}
/**
* install.php配置
*/
export function getInstallConfig() {
return request.get('sys/install/config')
}

View File

@ -19,7 +19,6 @@ export function getAddontype() {
/**
*
* @returns
*/
export function getAddonDevelopInfo(key: any) {
@ -28,7 +27,6 @@ export function getAddonDevelopInfo(key: any) {
/**
* key是否存在
* @returns
*/
export function getAddonDevelopCheck(key: any) {
@ -77,9 +75,8 @@ export function addonDevelopBuild(key: any) {
* @returns
*/
export function addonDevelopDownload(key: any) {
return request.post(`addon_develop/download/${key}`, {}, {"responseType": "blob"})
return request.post(`addon_develop/download/${key}`, {})
}
/***************************************************** 代码生成 ****************************************************/
/**
@ -114,7 +111,7 @@ export function addGenerateTable(params: Record<string, any>) {
* @param params
*/
export function editGenerateTable(params: Record<string, any>) {
return request.put(`generator/generator/${params.id}`, params)
return request.put(`generator/generator/${params.id}`, params, {showSuccessMessage: true})
}
/**
@ -177,4 +174,11 @@ export function getGeneratorTableColumn(params: any) {
*/
export function generatorCheckFile(params: Record<string, any>) {
return request.get(`generator/check_file`, {params})
}
}
/**
*
*/
export function getGeneratorModelTableColumn(params: any) {
return request.get(`generator/model_table_column`, {params})
}

View File

@ -0,0 +1,47 @@
import request from '@/utils/request'
/**
*
* @param addon
*/
export function getUpgradeContent(addon: string = '') {
return request.get(addon ? `upgrade/${addon}` : 'upgrade')
}
/**
*
* @param addon
*/
export function getUpgradeTask() {
return request.get('upgrade/task')
}
/**
*
* @param addon
*/
export function upgradeAddon(addon: string = '') {
return request.post(addon ? `upgrade/${addon}` : 'upgrade')
}
/**
*
*/
export function executeUpgrade() {
return request.post('upgrade/execute', {}, { timeout: 0 })
}
/**
*
*/
export function preUpgradeCheck(addon: string = '') {
return request.get(addon ? `upgrade/check/${addon}` : 'upgrade/check')
}
/**
*
*/
export function clearUpgradeTask() {
return request.post('upgrade/clear')
}

View File

@ -58,3 +58,7 @@ export function getTemplateList() {
export function getBatchAcquisition(params: Record<string, any>) {
return request.put('wechat/template/sync', params, {showSuccessMessage: true})
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 655 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,272 @@
<template>
<el-dialog v-model="showDialog" :title="t('cloudbuild.title')" width="850px" :close-on-click-modal="false"
:close-on-press-escape="false" :before-close="dialogClose">
<div v-show="active == 'build'" class="h-[60vh]" v-loading="loading">
<div class="h-[60vh] flex flex-col" v-if="cloudBuildCheck && !cloudBuildTask">
<el-scrollbar>
<div class="bg-[#fff] my-3" v-if="cloudBuildCheck.dir">
<p class="pt-[20px] pl-[20px] ">{{ t('cloudbuild.dirPermission') }}</p>
<div class="px-[20px] pt-[10px] text-[14px] el-table">
<el-row class="py-[10px] items table-head-bg pl-[15px] mb-[10px]">
<el-col :span="12">
<span>{{ t('cloudbuild.path') }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('cloudbuild.demand') }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('status') }}</span>
</el-col>
</el-row>
<el-row class="pb-[10px] items pl-[15px]"
v-for="item in cloudBuildCheck.dir.is_readable">
<el-col :span="12">
<span>{{ item.dir }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('cloudbuild.readable') }}</span>
</el-col>
<el-col :span="6">
<span v-if="item.status"><el-icon color="green"><Select /></el-icon></span>
<span v-else>
<el-icon color="red">
<CloseBold />
</el-icon>
</span>
</el-col>
</el-row>
<el-row class="pb-[10px] items pl-[15px]"
v-for="item in cloudBuildCheck.dir.is_write">
<el-col :span="12">
<span>{{ item.dir }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('cloudbuild.write') }}</span>
</el-col>
<el-col :span="6">
<span v-if="item.status"><el-icon color="green"><Select /></el-icon></span>
<span v-else>
<el-icon color="red">
<CloseBold />
</el-icon>
</span>
</el-col>
</el-row>
</div>
</div>
</el-scrollbar>
</div>
<div class="h-[60vh]" v-show="cloudBuildTask">
<terminal ref="terminalRef" context="" :init-log="null" :show-header="false"
:show-log-time="true" @exec-cmd="onExecCmd"/>
</div>
</div>
<div v-show="active == 'complete'">
<div class="h-[60vh] flex flex-col">
<div class="flex-1 h-0">
<el-result icon="success" :title="t('cloudbuild.cloudbuildSuccess')"></el-result>
</div>
</div>
</div>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, h, watch } from 'vue'
import { t } from '@/lang'
import { getCloudBuildLog, getCloudBuildTask, cloudBuild, clearCloudBuildTask, preBuildCheck } from '@/app/api/cloud'
import { Terminal, TerminalFlash } from 'vue-web-terminal'
import 'vue-web-terminal/lib/theme/dark.css'
import { AnyObject } from "@/types/global"
import { ElNotification, ElMessageBox } from "element-plus"
import {preUpgradeCheck} from "@/app/api/upgrade";
const showDialog = ref<boolean>(false)
const cloudBuildTask = ref<null | AnyObject>(null)
const active = ref('build')
const cloudBuildCheck = ref<null | AnyObject>(null)
const loading = ref(false)
const terminalRef = ref(null)
const emits = defineEmits(['complete'])
let cloudBuildLog = []
/**
* 查询升级任务
*/
const getCloudBuildTaskFn = () => {
getCloudBuildTask().then(({ data }) => {
if (!data) return
cloudBuildTask.value = data
if (!showDialog.value) {
showElNotification()
}
}).catch()
}
getCloudBuildTaskFn()
const getCloudBuildLogFn = () => {
getCloudBuildLog().then(res => {
if (!res.data) {
if (showDialog.value && cloudBuildLog.length) {
active.value = 'complete'
terminalRef.value.execute('clear')
}
notificationEl && notificationEl.close()
cloudBuildTask.value = null
return
}
const data = res.data.data ?? []
let error = ''
if (data[0] && data[0].length && showDialog.value) {
if (cloudBuildLog.length == 0) {
terminalRef.value.execute('clear')
terminalRef.value.execute('开始编译')
}
data[0].forEach(item => {
if (!cloudBuildLog.includes(item.action)) {
terminalRef.value.pushMessage({ content: `正在执行:${item.action}` })
cloudBuildLog.push(item.action)
if (item.code == 0) {
error = item.msg
terminalRef.value.pushMessage({ content: item.msg, class: 'error' })
}
}
})
}
if (error) return
setTimeout(() => {
getCloudBuildLogFn()
}, 2000)
}).catch()
}
let notificationEl : any = null
/**
* 升级中任务提示
*/
const showElNotification = () => {
notificationEl = ElNotification.success({
title: t('warning'),
dangerouslyUseHTMLString: true,
message: h('div', {}, [
t('cloudbuild.executingTips'),
h('span', { class: 'text-primary cursor-pointer', onClick: elNotificationClick }, [t('cloudbuild.clickView')])
]),
duration: 0,
showClose: false
})
}
const elNotificationClick = () => {
showDialog.value = true
active.value = 'build'
getCloudBuildLogFn()
}
const open = async () => {
showDialog.value = true
loading.value = true
active.value = 'build'
if (cloudBuildTask.value) {
loading.value = false
getCloudBuildLogFn()
return
}
preBuildCheck().then(async ({ data }) => {
if (data.is_pass) {
cloudBuild().then(({ data }) => {
loading.value = false
cloudBuildTask.value = data
getCloudBuildLogFn()
}).catch(() => {
showDialog.value = false
})
} else {
loading.value = false
cloudBuildCheck.value = data
}
}).catch(() => {
showDialog.value = false
})
}
/**
* 升级进度动画
*/
let flashInterval = null
const terminalFlash = new TerminalFlash()
const onExecCmd = (key, command, success, failed, name) => {
if (command == '开始编译') {
success(terminalFlash)
const frames = makeIterator(['/', '——', '\\', '|'])
flashInterval = setInterval(() => {
terminalFlash.flush('> ' + frames.next().value)
}, 150)
}
}
const makeIterator = (array: string[]) => {
var nextIndex = 0
return {
next() {
if ((nextIndex + 1) == array.length) {
nextIndex = 0
}
return { value: array[nextIndex++] }
}
}
}
const dialogClose = (done: () => {}) => {
if (active.value == 'cloudbuild' && cloudBuildTask.value) {
ElMessageBox.confirm(
t('cloudbuild.showDialogCloseTips'),
t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning'
}
).then(() => {
done()
}).catch(() => { })
} else {
done()
}
}
watch(() => showDialog.value, () => {
if (!showDialog.value) {
active.value = 'build'
cloudBuildLog = []
flashInterval && clearInterval(flashInterval)
clearCloudBuildTask()
}
})
defineExpose({
open,
cloudBuildTask
})
</script>
<style lang="scss" scoped>
.table-head-bg {
background-color: var(--el-table-header-bg-color);
}
:deep(.terminal .t-log-box span) {
white-space: pre-wrap;
}
</style>

View File

@ -0,0 +1,324 @@
<template>
<el-dialog v-model="showDialog" :title="t('upgrade.title')" width="850px" :close-on-click-modal="false"
:close-on-press-escape="false" :before-close="dialogClose">
<div v-show="active == 'content'">
<div class="h-[60vh] flex flex-col" v-if="upgradeContent">
<div class="text-lg">
本次升级将从<span class="font-bold">{{ upgradeContent.version }}</span>升级到<span class="font-bold">{{ upgradeContent.upgrade_version }}</span>版本
</div>
<div class="mt-[10px]" v-if="upgradeContent.upgrade_version != upgradeContent.last_version">
<el-alert type="info" show-icon >
<template #title>
当前最新版本为{{ upgradeContent.last_version }}您的服务已于{{ upgradeContent.expire_time }}到期如需升级到最新版可在<a class="text-primary" href="https://www.niucloud.com" target="_blank">niucloud-admin官网</a>购买相关服务后再进行升级
</template>
</el-alert>
</div>
<el-scrollbar class="flex-1 h-0 mt-[20px]">
<div class="mt-[20px]" v-for="(item, index) in upgradeContent.version_list" :key="index">
<div class="font-bold text-lg">{{ item.version_no }}</div>
<div class="mt-[5px]">{{ item.release_time }}</div>
<div class="mt-[10px] p-[10px] rounded bg-[#f4f4f5] whitespace-pre" v-if="item.upgrade_log" v-html="item.upgrade_log"></div>
</div>
</el-scrollbar>
</div>
<div class="flex justify-end">
<el-button type="primary" @click="handleUpgrade" :loading="uploading">{{ t('upgrade.upgradeButton') }}</el-button>
</div>
</div>
<div v-show="active == 'upgrade'">
<div class="h-[60vh] flex flex-col" v-if="upgradeCheck && !upgradeTask">
<el-scrollbar>
<div class="bg-[#fff] my-3" v-if="upgradeCheck.dir">
<p class="pt-[20px] pl-[20px] ">{{ t('upgrade.dirPermission') }}</p>
<div class="px-[20px] pt-[10px] text-[14px] el-table">
<el-row class="py-[10px] items table-head-bg pl-[15px] mb-[10px]">
<el-col :span="12">
<span>{{ t('upgrade.path') }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('upgrade.demand') }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('status') }}</span>
</el-col>
</el-row>
<el-row class="pb-[10px] items pl-[15px]"
v-for="item in upgradeCheck.dir.is_readable">
<el-col :span="12">
<span>{{ item.dir }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('upgrade.readable') }}</span>
</el-col>
<el-col :span="6">
<span v-if="item.status"><el-icon color="green"><Select /></el-icon></span>
<span v-else>
<el-icon color="red">
<CloseBold />
</el-icon>
</span>
</el-col>
</el-row>
<el-row class="pb-[10px] items pl-[15px]"
v-for="item in upgradeCheck.dir.is_write">
<el-col :span="12">
<span>{{ item.dir }}</span>
</el-col>
<el-col :span="6">
<span>{{ t('upgrade.write') }}</span>
</el-col>
<el-col :span="6">
<span v-if="item.status"><el-icon color="green"><Select /></el-icon></span>
<span v-else>
<el-icon color="red">
<CloseBold />
</el-icon>
</span>
</el-col>
</el-row>
</div>
</div>
</el-scrollbar>
</div>
<div class="h-[60vh]" v-show="upgradeTask">
<terminal ref="terminalRef" :context="upgradeTask ? upgradeTask.upgrade.app_key : ''" :init-log="null" :show-header="false"
:show-log-time="true" @exec-cmd="onExecCmd"/>
</div>
</div>
<div v-show="active == 'complete'">
<div class="h-[60vh] flex flex-col">
<div class="flex-1 h-0">
<el-result icon="success" :title="t('upgrade.upgradeSuccess')"></el-result>
<el-alert :title="t('upgrade.upgradeCompleteTips')" type="error" :closable="false" />
</div>
<div class="flex justify-end">
<el-button type="default" @click="showDialog = false">{{ t('upgrade.localBuild') }}</el-button>
<el-button type="primary" @click="handleCloudBuild">{{ t('upgrade.cloudBuild') }}</el-button>
</div>
</div>
</div>
</el-dialog>
<cloud-build ref="cloudBuildRef" />
</template>
<script lang="ts" setup>
import {ref, h, watch} from 'vue'
import { t } from '@/lang'
import { getUpgradeContent, getUpgradeTask, upgradeAddon, executeUpgrade, preUpgradeCheck, clearUpgradeTask } from '@/app/api/upgrade'
import { Terminal, TerminalFlash } from 'vue-web-terminal'
import 'vue-web-terminal/lib/theme/dark.css'
import { AnyObject } from "@/types/global"
import CloudBuild from '@/app/components/cloud-build/index.vue'
import { ElNotification, ElMessage, ElMessageBox } from "element-plus"
const showDialog = ref<boolean>(false)
const upgradeContent = ref<null | AnyObject>(null)
const upgradeTask = ref<null | AnyObject>(null)
const active = ref('content')
const upgradeCheck = ref<null | AnyObject>(null)
const uploading = ref(false)
const terminalRef = ref(null)
const emits = defineEmits(['complete'])
const cloudBuildRef = ref(null)
let upgradeLog = []
/**
* 查询升级任务
*/
const getUpgradeTaskFn = () => {
getUpgradeTask().then(({ data }) => {
if (!data) return
//
if (!showDialog.value) {
showElNotification()
return
}
if (!upgradeTask.value) {
terminalRef.value.execute('clear')
terminalRef.value.execute('开始升级')
}
data.log.forEach(item => {
if (!upgradeLog.includes(item)) {
terminalRef.value.pushMessage({content: `正在执行:${item}`})
upgradeLog.push(item)
}
})
//
if (data.error) {
upgradeTask.value = data
ElMessage({ message: '升级失败', type: 'error' })
terminalRef.value.pushMessage({ content: data.error, class: 'error' })
return
}
//
if (data.step == 'upgradeComplete') {
active.value = 'complete'
notificationEl && notificationEl.close()
emits('complete')
return
}
upgradeTask.value = data
executeUpgradeFn()
}).catch()
}
getUpgradeTaskFn()
const executeUpgradeFn = () => {
executeUpgrade().then(() => {
getUpgradeTaskFn()
}).catch()
}
let notificationEl : any = null
/**
* 升级中任务提示
*/
const showElNotification = () => {
notificationEl = ElNotification.success({
title: t('warning'),
dangerouslyUseHTMLString: true,
message: h('div', {}, [
t('upgrade.upgradingTips'),
h('span', { class: 'text-primary cursor-pointer', onClick: elNotificationClick }, [t('upgrade.clickView')])
]),
duration: 0,
showClose: false
})
}
const elNotificationClick = () => {
showDialog.value = true
active.value = 'upgrade'
getUpgradeTaskFn()
notificationEl && notificationEl.close()
}
/**
* 执行升级
*/
const handleUpgrade = async () => {
if (uploading.value) return
uploading.value = true
const appKey = upgradeContent.value?.app.app_key != 'niucloud-admin' ? upgradeContent.value?.app.app_key : ''
await preUpgradeCheck(appKey)
.then(async ({ data }) => {
if (data.is_pass) {
await upgradeAddon(appKey).then(() => {
getUpgradeTaskFn()
}).catch(() => {
uploading.value = false
})
} else {
upgradeCheck.value = data
}
})
.catch()
if (uploading.value) active.value = 'upgrade'
}
const open = (addonKey: string = '') => {
if (upgradeTask.value) {
ElMessage({ message: '已有正在执行中的升级任务', type: 'error' })
showDialog.value = true
return
}
getUpgradeContent(addonKey).then(({ data }) => {
upgradeContent.value = data
if (!data.version_list.length) {
ElMessage({ message: '已经是最新版本了', type: 'error' })
return
}
showDialog.value = true
}).catch()
}
/**
* 升级进度动画
*/
let flashInterval = null
const terminalFlash = new TerminalFlash()
const onExecCmd = (key, command, success, failed, name) => {
if (command == '开始升级') {
success(terminalFlash)
const frames = makeIterator(['/', '——', '\\', '|'])
flashInterval = setInterval(() => {
terminalFlash.flush('> ' + frames.next().value)
}, 150)
}
}
const makeIterator = (array: string[]) => {
var nextIndex = 0
return {
next() {
if ((nextIndex + 1) == array.length) {
nextIndex = 0
}
return { value: array[nextIndex++] }
}
}
}
const dialogClose = (done: () => {}) => {
if (active.value == 'upgrade' && upgradeTask.value && !upgradeTask.value.error) {
ElMessageBox.confirm(
t('upgrade.showDialogCloseTips'),
t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning'
}
).then(() => {
done()
}).catch(() => { })
} else {
done()
}
}
watch(() => showDialog.value, () => {
if (!showDialog.value) {
clearUpgradeTaskFn()
}
})
const clearUpgradeTaskFn = () => {
active.value = 'content'
uploading.value = false
upgradeTask.value = null
upgradeLog = []
flashInterval && clearInterval(flashInterval)
clearUpgradeTask().then(() => {}).catch()
}
/**
* 云编译
*/
const handleCloudBuild = () => {
showDialog.value = false
cloudBuildRef.value?.open()
}
defineExpose({
open
})
</script>
<style lang="scss" scoped>
.table-head-bg {
background-color: var(--el-table-header-bg-color);
}
:deep(.terminal .t-log-box span) {
white-space: pre-wrap;
}
</style>

View File

@ -13,5 +13,6 @@
"authSecretPlaceholder": "请输入授权秘钥",
"updateCode": "重新绑定",
"notHaveAuth": "还没有授权?去购买",
"authInfoTips": "授权码和授权秘钥可在Niucloud官网我的授权 授权详情中查看"
}
"authInfoTips": "授权码和授权秘钥可在Niucloud官网我的授权 授权详情中查看",
"cloudBuildTips": "是否要进行云编译该操作可能会影响到正在访问的客户是否要继续操作?"
}

View File

@ -0,0 +1,5 @@
{
"appName": "应用名称",
"appNamePlaceholder": "请输入应用名称",
"emptyAppData": "暂无应用"
}

View File

@ -1,4 +1,10 @@
{
"search":"搜索应用名称",
"appName":"应用名/版本信息",
"introduction":"简介",
"type":"类型",
"app":"应用",
"addon":"插件",
"noPlug":"暂无应用",
"install":"安装",
"unload":"卸载",
@ -6,9 +12,10 @@
"uninstalledLabel":"未安装",
"version":"版本",
"title":"名称",
"desc":"描述",
"desc":"简介",
"plugDetail": "插件信息",
"author": "作者",
"detail":"详情",
"addonInstall": "插件安装",
"dirPermission": "目录读写权限",
"path": "路径",
@ -21,9 +28,9 @@
"envCheck": "环境检查",
"installProgress": "安装进度",
"installComplete": "安装完成",
"localAppText":"本地应用",
"localAppText":"插件管理",
"marketAppText":"官方市场",
"installShowDialogCloseTips": "安装任务尚未完成,关闭任务仍会执行,确定要继续关闭吗",
"installShowDialogCloseTips": "安装任务尚未完成,关闭将取消安装任务,是否要继续关闭",
"marketDevelopMessage":"官方市场正在开发中!",
"jobError": "任务队列未启动 请在服务端源码部署目录打开终端执行 php think queue:listen",
"conflictFiles": "冲突文件",
@ -44,5 +51,17 @@
"authTips": "云安装需先绑定授权码如果已有授权请先进行绑定没有授权可到niucloud官网购买云服务之后再进行操作",
"toBind": "绑定授权",
"toNiucloud": "去niucloud官网",
"addonUninstall": "插件卸载"
}
"descriptionLeft": "暂无任何应用,马上去",
"link": "官方应用市场",
"descriptionRight": "逛逛",
"installed-empty": "暂未安装任何应用,请先安装",
"siteAddressTips": "授权域名不匹配",
"authCodePlaceholder": "请输入授权码",
"authSecretPlaceholder": "请输入授权秘钥",
"updateCode": "重新绑定",
"notHaveAuth": "还没有授权?去购买",
"authInfoTips": "授权码和授权秘钥可在Niucloud官网我的授权 授权详情中查看",
"addonUninstall": "插件卸载",
"appIdentification":"应用标识",
"tipText":"标识指开发应用或插件的文件夹名称"
}

View File

@ -1,30 +1,30 @@
{
"system":"系统菜单",
"application":"应用菜单",
"menuName": "菜单名称",
"menuType": "类型",
"authId": "api路径",
"authId": "权限标识",
"menuTypeDir": "目录",
"menuTypeMenu": "菜单",
"menuTypeButton": "按钮",
"menuDeleteTips": "删除菜单会删除当前菜单以及该菜单下所有子菜单,是否确认删除",
"menuDeleteTips": "确定要删除该菜单吗",
"addMenu": "添加菜单",
"updateMenu": "编辑菜单",
"routePath": "路由路径",
"viewPath": "组件路径",
"addon":"选择应用",
"parentMenu": "父级菜单",
"menuIcon": "菜单图标",
"sort":"权重",
"menuKey":"权限标识",
"menuKey":"菜单标识",
"menuNamePlaceholder": "请输入菜单名称",
"menuKeyPlaceholder": "请输入权限标识",
"menuKeyPlaceholder": "请输入菜单标识",
"menuKeyValidata":"菜单标识只能使用字母数字下划线并且开头不能为数字",
"routePathPlaceholder": "请输入路由路径",
"viewPathPlaceholder": "请输入组件路径",
"authIdPlaceholder": "请输入api路径",
"authIdPlaceholder": "请输入权限标识",
"selectIconPlaceholder": "请选择菜单图标",
"topLevel": "顶级",
"menuShortName":"菜单短标题",
"menuShortNamePlaceholder":"请输入菜单短标题"
}
"menuShortNamePlaceholder":"请输入菜单短标题",
"addon":"选择应用",
"system":"系统菜单",
"application":"应用菜单"
}

View File

@ -1,12 +1,13 @@
{
"addRole": "新增角色",
"updateRole": "编辑角色",
"roleName": "角色名称",
"roleDeleteTips": "确定要删除该角色吗?",
"roleNamePlaceholder": "请输入角色名称",
"system":"系统权限",
"application":"应用权限",
"rulesPlaceholder": "请选择权限",
"checkStrictly": "父子级不关联",
"permission": "权限",
"foldText":"展开/折叠",
"systemErr":"您还没有分配系统权限,请分配!",
"applicationErr":"您还没有分配应用权限,请分配!"
}
"system": "系统菜单",
"application": "应用菜单"
}

View File

@ -1,25 +0,0 @@
{
"menuName": "菜单名称",
"menuType": "类型",
"authId": "权限标识",
"menuTypeDir": "目录",
"menuTypeMenu": "菜单",
"menuTypeButton": "按钮",
"menuDeleteTips": "确定要删除该菜单吗?",
"addMenu": "添加菜单",
"updateMenu": "编辑菜单",
"routePath": "路由路径",
"viewPath": "组件路径",
"parentMenu": "父级菜单",
"menuIcon": "菜单图标",
"sort":"权重",
"menuKey":"菜单标识",
"menuNamePlaceholder": "请输入菜单名称",
"menuKeyPlaceholder": "请输入菜单标识",
"menuKeyValidata":"菜单标识只能使用字母数字下划线并且开头不能为数字",
"routePathPlaceholder": "请输入路由路径",
"viewPathPlaceholder": "请输入组件路径",
"authIdPlaceholder": "请输入权限标识",
"selectIconPlaceholder": "请选择菜单图标",
"topLevel": "顶级"
}

View File

@ -19,5 +19,14 @@
"statusLock":"锁定",
"adminDisabled":"超级管理员不可编辑",
"userUnlockTips":"确定要解锁该管理员吗?",
"userLockTips":"确定要锁定该管理员吗?"
"userLockTips":"确定要锁定该管理员吗?",
"userType": "用户类型",
"adminAdministrators": "平台管理员",
"siteAdministrators": "站点管理员",
"userTypePlaceholder": "请选择用户类型",
"siteAdministratorsDisabled": "站点管理员不可编辑",
"manager": "用户",
"managerPlaceholder": "请选择用户",
"managerTips": "选择或者新增用户作为管理员",
"newAddManager": "新增用户"
}

View File

@ -4,5 +4,6 @@
"copy": "复制",
"clickVisit": "点击访问",
"PCDomainName": "pc域名",
"newInfo": "最新消息"
}
"newInfo": "最新消息",
"isOpen": "是否开启"
}

View File

@ -34,9 +34,9 @@
"authTips": "上传代码需先绑定授权码如果已有授权请先进行绑定没有授权可到niucloud官网购买云服务之后再进行操作",
"toBind": "绑定授权",
"toNiucloud": "去niucloud官网",
"failReason": "失败原因",
"failReason": "失败原因",
"toSetting": "去配置",
"cloudRelease": "一键云端发布",
"localRelease": "本地发布",
"localInsertTips": "请先将uni-app编译成微信小程序然后使用微信开发者工具进行上传"
}
}

View File

@ -1,156 +0,0 @@
{
"developTitle": "开发环境配置",
"wapDomain": "wap域名WAP_DOMAIN",
"wapDomainPlaceholder": "请输入wap域名",
"pageSet": "页面设置",
"tabEditContent": "内容",
"tabEditStyle": "样式",
"pageStyle": "页面样式",
"pageContent": "页面内容",
"pageName": "页面名称",
"pageNamePlaceholder": "请输入页面名称",
"pageBgColor": "页面颜色",
"bgUrl": "背景图片",
"marginSet": "边距设置",
"componentStyleTitle": "组件样式",
"bottomBgColor": "底部背景",
"bottomBgTips": "底部背景包含边距和圆角",
"componentBgColor": "组件背景",
"marginTop": "上边距",
"marginBottom": "下边距",
"marginBoth": "左右边距",
"topRounded": "上圆角",
"bottomRounded": "下圆角",
"warmPrompt": "温馨提示",
"leavePageTitleTips": "确定离开此页面?",
"leavePageContentTips": "系统可能不会保存您所做的更改。",
"decorating": "正在装修",
"preview": "保存并预览",
"moveUpComponent": "上移",
"moveDownComponent": "下移",
"copyComponent": "复制",
"delComponent": "删除",
"resetComponent": "重置",
"tabbar": "底部导航",
"tabbarSwitchTips": "此处控制当前页面底部导航菜单是否显示",
"link": "链接地址",
"delComponentTips": "确定要删除吗?",
"notCopy": "无法复制",
"componentCanOnlyAdd": "组件只能添加",
"piece": "个",
"resetComponentTips": "确认要重置组件默认数据吗?",
"image": "图片上传",
"imageUpload": "图片上传",
"imageSet": "图片设置",
"imageAdsTips": "建议上传尺寸相同的图片推荐尺寸750*350",
"addImageAd": "添加图片",
"imageUrlTip": "请上传图片",
"imageHeight": "图片高度",
"imageHeightPlaceholder": "请输入图片高度",
"imageHeightRegNum": "图片高度格式错误,请输入数字",
"articleData": "文章数据",
"articleStyle": "文章样式",
"articleBgColor": "文章背景",
"dataSources": "数据来源",
"defaultSources": "默认",
"manualSelectionSources": "手动选择",
"articleNum": "文章数量",
"selectPlaceholder": "请选择",
"selectArticleTips": "文章选择",
"articleTitle": "标题",
"articleImage": "封面",
"articleCategoryName": "栏目",
"articleSummary": "摘要",
"selected": "已选",
"selectArticleTip": "请选择文章",
"graphicNavModeTitle": "导航模式",
"layoutMode": "排版模式",
"layoutModeHorizontal": "横排",
"layoutModeVertical": "竖排",
"graphicNavSelectMode": "选择模式",
"graphicNavModeGraphic": "图文导航",
"graphicNavModeImg": "图片导航",
"graphicNavModeText": "文字导航",
"graphicNavImageSet": "图片设置",
"graphicNavImageSize": "图片大小",
"graphicNavAroundRadius": "图片圆角",
"graphicNavShowStyle": "展示风格",
"graphicNavStyleFixed": "固定显示",
"graphicNavStyleSingleSlide": "单行滑动",
"graphicNavStylePageSlide": "分页滑动",
"graphicNavRowCount": "每行数量",
"graphicNavPageCount": "每行数量",
"graphicNavSetLabel": "导航设置",
"line": "行",
"graphicNavTips": "建议上传尺寸相同的图片推荐尺寸60*60",
"graphicNavTitle": "标题",
"graphicNavTitlePlaceholder": "请输入标题",
"subGraphicNavTitle": "副标题",
"subGraphicNavTitlePlaceholder": "请输入副标题",
"subGraphicNavTitleLink": "副标题链接",
"addGraphicNav": "添加导航",
"blankHeightSet": "高度设置",
"blankHeight": "空白高度",
"styleSet": "风格设置",
"titleStyle": "标题样式",
"selectStyle": "风格选择",
"titleContent": "标题内容",
"title": "标题名称",
"titlePlaceholder": "请输入标题",
"textAlign": "对齐方式",
"textAlignLeft": "居左",
"textAlignCenter": "居中",
"textSet": "文字设置",
"textFontSize": "文字大小",
"textFontWeight": "文字粗细",
"fontWeightBold": "加粗",
"fontWeightNormal": "常规",
"textColor": "文字颜色",
"subTextColor": "副标题颜色",
"subTitleContent": "标题内容",
"subTitle": "副标题",
"subTitlePlaceholder": "请输入副标题",
"moreContent": "“更多”按钮内容",
"more": "文字",
"morePlaceholder": "请输入文字",
"moreIsShow": "是否显示",
"memberStyle": "会员样式",
"template": "模板",
"imageGap": "图片间隙",
"rubikCubeStyle": "魔方样式",
"rubikCubeLayout": "魔方布局",
"hotArea": "热区",
"hotAreaSet": "热区设置",
"addHotArea": "添加热区",
"selectedAfterHotArea": "个热区",
"hotAreaManage": "热区管理",
"selectedHotArea": "请选择热区",
"hotAreaLink": "的链接地址",
"addonListSet": "应用设置",
"addonListTips": "应用选择",
"selectAddonTips": "请选择应用",
"addonTitle": "应用名称",
"addonDesc": "应用描述",
"addonIcon": "应用图标",
"selectAddon": "选择应用",
"addAddon": "添加应用",
"travel": "旅游",
"tickets": "门票",
"hotel": "酒店",
"travelNum": "线路数量",
"ticketsNum": "景点数量",
"hotelNum": "酒店数量",
"serve": "项目",
"serveNum": "项目数量",
"card": "卡项",
"cardNum": "卡项数量",
"isSet": "会员设置",
"isMemberCode": "会员码",
"show": "显示",
"hideen": "隐藏",
"nicknameStyle": "昵称样式",
"UIDStyle": "UID样式",
"accountStyle": "积分/余额样式",
"accountNumberColor": "数值颜色",
"accountNumberWeight": "数值粗细"
}

View File

@ -1,4 +1,7 @@
{
"templatePagePlaceholder": "选择模板",
"templatePageEmpty": "无",
"changeTemplatePageTips":"切换模板后,当前页面内容将被替换且不被保存,请谨慎操作",
"developTitle": "开发环境配置",
"wapDomain": "wap域名WAP_DOMAIN",
"wapDomainPlaceholder": "请输入wap域名",
@ -11,11 +14,18 @@
"pageNamePlaceholder": "请输入页面名称",
"pageBgColor": "页面颜色",
"bgUrl": "背景图片",
"bgHeightScale": "高度比例",
"bgHeightScaleTip": "为0时背景高度自适应展示",
"marginSet": "边距设置",
"componentStyleTitle": "组件样式",
"bottomBgColor": "底部背景",
"bottomBgTips": "底部背景包含边距和圆角",
"componentBgColor": "组件背景",
"componentBgColor": "组件背景色",
"componentBgUrl": "组件背景图",
"componentBgAlpha": "透明度",
"bgGradientAngle": "渐变角度",
"topToBottom": "从上到下",
"leftToRight": "从左到右",
"marginTop": "上边距",
"marginBottom": "下边距",
"marginBoth": "左右边距",
@ -38,6 +48,7 @@
"notCopy": "无法复制",
"componentCanOnlyAdd": "组件只能添加",
"piece": "个",
"componentNotMoved": "该组件禁止移动",
"resetComponentTips": "确认要重置组件默认数据吗?",
"image": "图片上传",
"imageUpload": "图片上传",
@ -48,21 +59,11 @@
"imageHeight": "图片高度",
"imageHeightPlaceholder": "请输入图片高度",
"imageHeightRegNum": "图片高度格式错误,请输入数字",
"articleData": "文章数据",
"articleStyle": "文章样式",
"articleBgColor": "文章背景",
"dataSources": "数据来源",
"defaultSources": "默认",
"manualSelectionSources": "手动选择",
"articleNum": "文章数量",
"selectPlaceholder": "请选择",
"selectArticleTips": "文章选择",
"articleTitle": "标题",
"articleImage": "封面",
"articleCategoryName": "栏目",
"articleSummary": "摘要",
"selected": "已选",
"selectArticleTip": "请选择文章",
"graphicNavModeTitle": "导航模式",
"layoutMode": "排版模式",
"layoutModeHorizontal": "横排",
@ -79,9 +80,10 @@
"graphicNavStyleSingleSlide": "单行滑动",
"graphicNavStylePageSlide": "分页滑动",
"graphicNavRowCount": "每行数量",
"graphicNavPageCount": "每行数量",
"graphicNavPageCount": "显示方式",
"graphicNavSetLabel": "导航设置",
"line": "行",
"singleLine": "单行",
"multiline": "多行",
"graphicNavTips": "建议上传尺寸相同的图片推荐尺寸60*60",
"graphicNavTitle": "标题",
"graphicNavTitlePlaceholder": "请输入标题",
@ -94,6 +96,7 @@
"styleSet": "风格设置",
"titleStyle": "标题样式",
"selectStyle": "风格选择",
"styleLabel": "风格",
"titleContent": "标题内容",
"title": "标题名称",
"titlePlaceholder": "请输入标题",
@ -106,7 +109,8 @@
"fontWeightBold": "加粗",
"fontWeightNormal": "常规",
"textColor": "文字颜色",
"subTextColor": "副标题颜色",
"subTitleStyle": "副标题样式",
"subTextBgColor": "背景色",
"subTitleContent": "标题内容",
"subTitle": "副标题",
"subTitlePlaceholder": "请输入副标题",
@ -136,25 +140,8 @@
"addonIcon": "应用图标",
"selectAddon": "选择应用",
"addAddon": "添加应用",
"travel": "旅游",
"tickets": "门票",
"hotel": "酒店",
"travelNum": "线路数量",
"ticketsNum": "景点数量",
"hotelNum": "酒店数量",
"serve": "项目",
"serveNum": "项目数量",
"card": "卡项",
"cardNum": "卡项数量",
"isSet": "会员设置",
"isMemberCode": "会员码",
"show": "显示",
"hideen": "隐藏",
"nicknameStyle": "昵称样式",
"UIDStyle": "UID样式",
"accountStyle": "积分/余额样式",
"accountNumberColor": "数值颜色",
"accountNumberWeight": "数值粗细",
"hidden": "隐藏",
"goodsCategoryTitle":"商品分类",
"customGoods":"手动选择",
"goodsNum":"商品数量",
@ -162,28 +149,92 @@
"categoryName": "分类名称",
"categoryImage": "分类图片",
"selectSource": "选择数据源",
"goodsSelectPopupSelectGoodsButton": "选择商品",
"goodsSelectPopupSelect": "已选",
"goodsSelectPopupPiece": "个",
"goodsSelectPopupSelectGoodsDialog": "商品选择",
"goodsSelectPopupAllGoods": "全部商品",
"goodsSelectPopupSelectedGoods": "已选商品",
"goodsSelectPopupGoodsName": "商品名称",
"goodsSelectPopupGoodsNamePlaceholder": "请输入商品名称",
"goodsSelectPopupGoodsCategory": "商品分类",
"goodsSelectPopupGoodsCategoryPlaceholder": "全部",
"goodsSelectPopupGoodsType": "商品类型",
"goodsSelectPopupGoodsTypePlaceholder": "请选择商品类型",
"goodsSelectPopupGoodsInfo": "商品",
"goodsSelectPopupPrice": "价格",
"goodsSelectPopupStock": "库存",
"goodsSelectPopupBeforeTip": "已选择",
"goodsSelectPopupAfterTip": "个商品",
"goodsSelectPopupClearGoods": "取消选择",
"goodsSelectPopupGoodsMinTip": "所选商品数量不能少于",
"goodsSelectPopupGoodsMaxTip": "所选商品数量不能超过",
"confirm": "确定",
"cancel": "取消"
"richTextContentSet": "内容设置",
"richTextPlaceholder": "请输入富文本内容",
"activeCubeBlockContent": "板块内容",
"activeCubeTitle": "标题",
"activeCubeTitlePlaceholder": "请输入标题",
"activeCubeSubTitle": "副标题",
"activeCubeSubTitlePlaceholder": "请输入副标题",
"activeCubeButton": "按钮",
"activeCubeButtonPlaceholder": "请输入按钮文字",
"activeCubeButtonColor": "按钮颜色",
"activeListFrameColor": "框体颜色",
"activeCubeSubTitleTextColor": "文字颜色",
"activeCubeSubTitleBgColor": "背景颜色",
"activeCubeAddItem": "添加一个板块",
"activeCubeBlockStyle": "板块样式",
"activeCubeBlockTextFontWeight": "标题粗细",
"noticeStyle": "公告风格",
"noticeType": "类型",
"noticeTypeImg": "图片",
"noticeTypeText": "文字",
"noticeTypeTextPlaceholder": "请输入公告标题",
"noticeTitle": "公告标题",
"addNotice": "添加公告",
"noticeText": "公告内容",
"noticeScrollWay": "滚动方式",
"noticeUpDown": "上下滚动",
"noticeHorizontal": "横向滚动",
"noticeShowType": "点击类型",
"noticeShowPopUp": "弹出公告内容",
"noticeShowLink": "跳转链接",
"dragMouseAdjustOrder": "鼠标拖拽可调整顺序",
"noticePlaceholderText": "请输入公告内容",
"carouselSearchShowPosition": "显示设置",
"carouselSearchOpen": "开启",
"carouselSearchClose": "关闭",
"carouselSearchBgGradient": "背景渐变",
"carouselSearchShowWay": "展示方式",
"carouselSearchShowWayStatic": "正常显示",
"carouselSearchShowWayFixed": "滚动至顶部固定",
"carouselSearchFixedBgColor": "置顶背景",
"carouselSearchSet": "搜索设置",
"carouselSearchText": "搜索内容",
"carouselSearchHotWordSet": "搜索热词",
"carouselSearchHotWordInterval": "显示时间 / 秒",
"carouselSearchHotWordText": "内容",
"carouselSearchHotWordTextPlaceholder": "请输入热词",
"carouselSearchAddHotWordItem": "添加一个热词",
"carouselSearchLogoTips": "建议尺寸70px * 30px",
"carouselSearchPlaceholder": "请输入搜索内容",
"carouselSearchTabSet": "选项卡设置",
"carouselSearchTabControl": "展示开关",
"carouselSearchTabCategoryText": "分类名称",
"carouselSearchTabCategoryTextPlaceholder": "请输入分类名称",
"carouselSearchAddTabItem": "添加一个选项卡",
"selectSourcesDiyPage": "选择微页面",
"selectDiyPagePlaceholder": "请选择微页面",
"diyPageTitle": "页面名称",
"diyPageTypeName": "页面类型",
"diyPageForAddon": "所属应用",
"carouselSearchSwiperSet": "轮播图设置",
"carouselSearchSwiperControl": "展示开关",
"carouselSearchSwiperInterval": "切换间隔 / 秒",
"carouselSearchSwiperTips": "建议上传尺寸相同的图片推荐尺寸750*350鼠标拖拽可调整图片顺序",
"carouselSearchTabStyle": "选项卡样式",
"noColor": "常规颜色",
"selectColor": "选中颜色",
"fixedNoColor": "下滑常规颜色",
"fixedSelectColor": "下滑选中颜色",
"carouselSearchSwiperIndicatorSet": "指示器设置",
"carouselSearchSwiperIndicatorStyle": "指示器样式",
"carouselSearchSwiperStyle": "轮播样式",
"carouselSearchSwiperIndicatorStyle1": "样式1",
"carouselSearchSwiperIndicatorStyle2": "样式2",
"carouselSearchSwiperIndicatorAlign": "显示位置",
"alignLeft": "居左",
"alignCenter": "居中",
"alignRight": "居右",
"horzLineStyle": "线条风格",
"horzLineStyleSolid": "实线",
"horzLineStyleDashed": "虚线",
"horzLineBorderColor": "线条颜色",
"horzLineBorderWidth": "线条宽度",
"floatBtnBtton": "按钮位置",
"floatBtnOffset": "上下偏移",
"floatBtnImageSet": "图片设置",
"floatBtnImageSize": "图片大小",
"floatBtnAroundRadius": "图片圆角",
"floatBtnImageSuggest": "建议上传正方形图片"
}

View File

@ -1,23 +1,12 @@
{
"decorate": "装修",
"pageDecorate": "页面装修",
"changeTemplate": "选择页面",
"changePage": "切换",
"templateName": "模板名称",
"changePage": "设置",
"preview": "预览",
"hopeBeforeTip": "我希望把",
"hopeAfterTip": "切换成其他页面",
"changeTemplateTip": "选择",
"template": "模板",
"changeMyPageTip": "将 微页面 设为",
"changeOtherPageTip": "将 其他页面 设为",
"createPage": "创建微页面",
"myPage": "我的微页面",
"refreshPage": "刷新",
"placeholderTemplate": "请选择一个模板",
"placeholderMyPage": "请选择一个微页面",
"placeholderOtherPage": "请选择一个页面",
"developTitle": "开发环境配置",
"wapDomain": "wap域名WAP_DOMAIN",
"wapDomainPlaceholder": "请输入wap域名"
}
"wapDomainPlaceholder": "请输入wap域名",
"settingTips": "点击查看如何配置",
"link": "链接",
"copy": "复制",
"scanQRCodeOnRight": "扫描右侧二维码查看"
}

View File

@ -1,20 +1,16 @@
{
"title": "页面名称",
"typeName": "页面模板",
"templateName": "模板名称",
"addType": "页面类型",
"typeName": "页面类型",
"forAddon": "所属应用",
"addPageTips": "创建新页面",
"pageTypePlaceholder": "请选择页面模板",
"pageTypePlaceholder": "请选择页面类型",
"nameMax": "名称不能超过12个字符",
"emptyTemplate": "空模板",
"status": "状态",
"updateTime": "更新时间",
"use": "使用",
"isUse": "使用中",
"unused": "未使用",
"all": "全部",
"basicRoute": "基础页面",
"diyPage": "自定义页面",
"wapUrl": "wap链接",
"weappUrl": "小程序链接",
"shareLink": "分享链接",
@ -23,7 +19,7 @@
"titlePlaceholder": "请输入页面名称",
"addDiyPage": "添加页面",
"diyPageDeleteTips": "确定要删除该自定义页面吗?",
"promote": "推广",
"preview": "预览",
"share": "分享",
"shareSet": "分享设置",
"sharePage": "分享页面",

View File

@ -0,0 +1,13 @@
{
"decorate": "装修",
"changePage": "设置",
"preview": "预览",
"pageSelectTips": "页面选择",
"developTitle": "开发环境配置",
"wapDomain": "wap域名WAP_DOMAIN",
"wapDomainPlaceholder": "请输入wap域名",
"settingTips": "点击查看如何配置",
"link": "链接",
"copy": "复制",
"scanQRCodeOnRight": "扫描右侧二维码查看"
}

View File

@ -1,29 +1,13 @@
{
"title": "页面名称",
"forAddon": "所属插件",
"typeName": "页面模板",
"addPageTips": "创建新页面",
"pageTemplatePlaceholder": "请选择页面模板",
"nameMax": "名称不能超过12个字符",
"templateName": "模板名称",
"empty": "空白",
"status": "状态",
"updateTime": "更新时间",
"use": "使用",
"isUse": "使用中",
"unused": "未使用",
"all": "全部",
"basicRoute": "基础页面",
"diyPage": "自定义页面",
"wapUrl": "wap链接",
"weappUrl": "小程序链接",
"shareLink": "分享链接",
"copy": "复制",
"copySuccess": "复制成功",
"titlePlaceholder": "请输入页面名称",
"addDiyPage": "添加页面",
"diyPageDeleteTips": "确定要删除该自定义页面吗?",
"promote": "推广",
"share": "分享",
"shareSet": "分享设置",
"sharePage": "分享页面",

View File

@ -1,55 +1,4 @@
{
"title":"页面名称",
"name":"页面标识",
"type":"页面模板",
"value":"页面数据json格式",
"isDefault":"是否默认页面10否",
"visitCount":"访问量",
"titlePlaceholder":"请输入页面名称",
"namePlaceholder":"请输入页面标识",
"typePlaceholder":"请输入页面模板",
"valuePlaceholder":"请输入页面数据json格式",
"isDefaultPlaceholder":"请输入是否默认页面10否",
"visitCountPlaceholder":"请输入访问量",
"createTimePlaceholder":"请输入创建时间",
"updateTimePlaceholder":"请输入更新时间",
"addDiyPage":"添加自定义页面",
"updateDiyPage":"编辑自定义页面",
"diyPageDeleteTips":"确定要删除该自定义页面吗?",
"leastTwoNav":"至少添加2个导航",
"pleaseUpload":"请上传第[",
"pleaseEnter":"请输入第[",
"pleaseChoose":"请选择第[",
"navIcon":"]个图标",
"navSelectIcon":"]个选中图标",
"navTitle":"]个导航标题",
"navLink":"]个导航链接",
"backgroundColor":"背景颜色",
"imageText":"图文",
"image":"图片",
"text":"文字",
"textColor":"文字颜色",
"textSelectColor":"文字选中颜色",
"reset":"重置",
"navType":"导航类型",
"styleSet":"样式设置",
"addnav":"添加导航",
"linkPlaceholder":"请选择链接",
"navLinkOne":"导航链接",
"navTitleOne":"导航标题",
"titleContent":"请输入标题内容",
"navIconOne":"导航图标",
"navImage":"导航图片",
"bottomNav":"底部导航",
"bottomNavHint":"设置至少添加2个导航最多添加5个导航",
"selectLinkTips":"选择链接",
"selectLinkConfirm":"确定",
"uploadImgUnselected":"未选中",
"uploadImgSelected":"选中"
"title": "插件名称",
"key": "插件标识"
}

View File

@ -0,0 +1,30 @@
{
"leastTwoNav": "至少添加2个导航",
"pleaseUpload": "请上传第[",
"pleaseEnter": "请输入第[",
"pleaseChoose": "请选择第[",
"navIcon": "]个图标",
"navSelectIcon": "]个选中图标",
"navTitle": "]个导航标题",
"navLink": "]个导航链接",
"backgroundColor": "背景颜色",
"imageText": "图文",
"image": "图片",
"text": "文字",
"textColor": "文字颜色",
"textSelectColor": "文字选中颜色",
"reset": "重置",
"navType": "导航类型",
"styleSet": "样式设置",
"addnav": "添加导航",
"navLinkOne": "导航链接",
"navTitleOne": "导航标题",
"titleContent": "请输入标题内容",
"navIconOne": "导航图标",
"navImage": "导航图片",
"editing": "正在编辑",
"bottomNav": "底部导航",
"bottomNavHint": "设置至少添加2个导航最多添加5个导航",
"uploadImgUnselected": "未选中",
"uploadImgSelected": "选中"
}

View File

@ -1,27 +1,27 @@
{
"id": "主键",
"accountDetail": "账单详情",
"detail": "详情",
"type": "账单类型",
"money": "账单金额",
"moneyPlaceholder": "请输入账单金额",
"tradeNo": "账单编号",
"tradeNoPlaceholder": "请输入账单编号",
"createTime": "账单日期",
"totalPay": "累计收款(元)",
"totalRefund": "累计退款(元)",
"totalTransfer": "累计转账(元)",
"accountType": "请选择退款类型",
"startDate": "开始时间",
"endDate": "结束时间",
"transferNo": "转账单号",
"transferTime": "转账时间",
"transferType": "转账类型",
"transferMoney": "转账金额",
"transferRemark": "转账说明",
"outTradeNo": "单号",
"refundMoney": "退款金额",
"failReason": "退款说明",
"body": "说明",
"payType": "支付方式"
}
"id":"主键",
"accountDetail":"账单详情",
"detail":"详情",
"type":"账单类型",
"money":"账单金额",
"moneyPlaceholder":"请输入账单金额",
"tradeNo":"账单编号",
"tradeNoPlaceholder":"请输入账单编号",
"createTime":"账单日期",
"totalPay":"累计收款(元)",
"totalRefund":"累计退款(元)",
"totalTransfer":"累计转账(元)",
"accountType": "请选择账单类型",
"startDate": "开始时间",
"endDate": "结束时间",
"transferNo" : "转账单号",
"transferTime": "转账时间",
"transferType": "转账类型",
"transferMoney": "转账金额",
"transferRemark": "转账说明",
"outTradeNo": "单号",
"refundMoney": "退款金额",
"failReason": "退款说明",
"body": "说明",
"all": "全部"
}

View File

@ -43,13 +43,6 @@
"transferTime": "转账时间",
"memberInfoPlaceholder":"请输入会员名称/会员昵称/手机号",
"cashOutNumber": "提现单号",
"cashOutNumberPlaceholder": "请输入提现单号",
"cashOutMethodType": "账户类型",
"money": "提现金额",
"transferAccount": "收款账号",
"refuseReason": "拒绝理由",
"transferTypeName": "转账方式名称",
"transferVoucher": "支付凭证",
"close": "关闭"
"cashOutNumberPlaceholder": "请输入提现单号"
}

View File

@ -1,5 +1,4 @@
{
"changeApp": "切换应用",
"dataSummarize": "数据概况",
"todayData": "今日数据",
"memberNumb": "新增会员数",
@ -10,14 +9,14 @@
"articleList": "文章列表",
"memberManagement": "会员管理",
"balanceAccount": "余额账户",
"administrator": "管理员",
"administrator": "站点用户",
"WebDecoration": "网站装修",
"accessMessage": "访问消息",
"memberDistribution": "会员分布",
"systemInfo": "系统环境",
"os": "操作系统",
"phpVersions": "PHP版本号",
"productionEnvironment": "生产环境",
"os": "操作系统:",
"phpVersions": "PHP版本号:",
"productionEnvironment": "生产环境:",
"versionsInfo": "版本信息",
"versions": "当前版本",
"frame": "基于框架",
@ -47,6 +46,6 @@
"officialAccountDesc": "微信扫码关注",
"WeCom": "客服二维码",
"WeComDesc": "扫码联系客服",
"tel": "服务热线:"
}
"tel": "服务热线:",
"newVersion": "最新版本"
}

View File

@ -1,7 +0,0 @@
{
"app":"应用",
"descriptionLeft":"暂无安装任何应用或插件,马上去",
"link":"官方应用市场",
"descriptionRight":"逛逛",
"installApp":"安装应用"
}

View File

@ -1,67 +0,0 @@
{
"todayData": "实时概况",
"memberNumb": "新增会员数(人)",
"orderMoney": "订单金额(元)",
"numberOfSites": "站点数量",
"numberOfVisitors": "今日访客数(人)",
"commonlyUsedFunction": "常用功能",
"articleList": "文章列表",
"memberManagement": "会员管理",
"balanceAccount": "余额账户",
"administrator": "管理员",
"WebDecoration": "网站装修",
"accessMessage": "访问消息",
"memberDistribution": "会员分布",
"systemInfo": "系统环境",
"os": "操作系统",
"phpVersions": "PHP版本号",
"productionEnvironment": "生产环境",
"versionsInfo": "版本信息",
"versions": "当前版本",
"frame": "基于框架",
"channel": "获取渠道",
"serviceSupport": "服务支持",
"officialWbsite": "官网",
"pageView": "访客数(人)",
"siteInfo":"站点信息",
"siteName":"站点名称",
"groupName":"站点套餐",
"expireTime":"过期时间",
"permanent":"永久",
"statusName":"站点状态",
"orderNumber": "订单数(笔)",
"wechatCode": "公众号二维码",
"wechatCodeDesc": "微信扫码关注",
"enterpriseWechatCode": "客服二维码",
"enterpriseWechatCodeDesc": "扫码联系客服",
"tel": "服务热线:",
"message": "请联系客服",
"messageTitle": "提示",
"accumulative":"累计",
"officialAccount": "Niucloud官方公众号",
"officialAccountDesc": "微信扫码关注",
"WeCom": "添加企业微信群",
"path": "地址",
"menuName": "名称",
"menuNamePlaceholder": "模版名称",
"menuBgColor": "背景颜色",
"menuImg": "选择图标",
"menuDesc": "描述",
"addShortcutMenu": "添加快捷模版",
"appTemplate": "应用模块",
"siteType": "站点类型",
"periodTime": "有效期",
"renew": "续费",
"selectModel": "选择模块",
"addMenu": "添加模块",
"shortcutLink": "模版",
"emptyMenu": "暂无快捷模块",
"select": "选择",
"custom": "自定义",
"accessSite": "访问站点",
"pathSelect": "选择模块",
"bgColorPlaceholder": "请选择背景色",
"iconPlaceholder": "请选择图标",
"pathPlaceholder": "请选择链接",
"descPlaceholder": "输入描述语…"
}

View File

@ -54,6 +54,7 @@
"toBind": "绑定授权",
"toNiucloud": "去niucloud官网",
"descriptionLeft": "暂无任何应用,马上去",
"buyDescriptionLeft": "您还没有购买过应用,马上去",
"link": "官方应用市场",
"descriptionRight": "逛逛",
"installed-empty": "暂未安装任何应用",
@ -66,5 +67,9 @@
"addonUninstall": "插件卸载",
"appIdentification":"应用标识",
"tipText":"标识指开发应用或插件的文件夹名称",
"uninstallTips": "卸载插件将会移除admin web uni-app目录下该插件的内容是否要继续进行卸载"
}
"uninstallTips": "卸载插件将会移除admin web uni-app目录下该插件的内容是否要继续进行卸载",
"upgrade": "升级",
"newVersion": "最新版本",
"cloudBuild": "云编译",
"cloudBuildTips": "是否要进行云编译该操作可能会影响到正在访问的客户是否要继续操作?"
}

View File

@ -1,5 +1,5 @@
{
"siteTitle": "NIUCLOUD-ADMIN",
"siteTitle": "NIUSHOP开源商城",
"siteDesc": "基于thinkphp6+elementplus+typescript等技术的多端saas通用管理框架采用restful的api接口设计前后端完全分离同时支持多语言开发。",
"logging": "登录中",
"platform": "管理端",
@ -9,4 +9,4 @@
"userPlaceholder": "请输入您的账号",
"passwordPlaceholder": "请输入您的密码",
"manageAdminFramework": "管理系统后台框架"
}
}

View File

@ -1,7 +1,9 @@
{
"siteId":"站点id",
"labelName":"标签名称",
"memo":"备注",
"sort":"排序",
"siteIdPlaceholder":"请输入站点id",
"labelNamePlaceholder":"请输入标签名称",
"memoPlaceholder":"请输入备注",
"sortPlaceholder":"请输入排序",

View File

@ -3,6 +3,7 @@
"memberNumber":"会员数量",
"memo":"备注",
"sort":"排序",
"siteIdPlaceholder":"请输入站点id",
"labelNamePlaceholder":"请输入标签名称",
"memoPlaceholder":"请输入备注",
"sortPlaceholder":"请输入排序",

View File

@ -1,13 +1,13 @@
{
"registerChannel":"注册来源",
"nickname":"会员称",
"nickname":"会员称",
"memberNo":"会员编号",
"mobile":"手机号",
"createTime":"注册时间",
"lastVisitTime":"最后访问时间",
"addMember":"添加会员",
"updateMember":"编辑会员",
"nickNamePlaceholder":"请输入会员称",
"nickNamePlaceholder":"请输入会员称",
"mobilePlaceholder":"请输入手机号",
"channelPlaceholder":"请选择注册类型",
"memberNoPlaceholder":"请选择会员编号",

View File

@ -34,7 +34,7 @@
"essentialInfo": "基本信息",
"accountInfo": "账户信息",
"urserName": "用户名",
"nickname":"会员称",
"nickname":"会员称",
"registeredSource": "注册来源",
"lastVisitTime":"最后登录时间",
"point": "积分",

View File

@ -0,0 +1,19 @@
{
"orderInfo":"订单详情",
"orderDiscountMoney":"优惠金额",
"ip":"下单IP",
"payTime":"支付时间",
"remark":"商家留言",
"memberMessage":"买家留言",
"orderNo":"订单编号",
"orderStatus":"订单状态",
"orderNoPlaceholder":"请输入订单编号",
"createTime":"创建时间",
"rechargeMoney":"充值金额",
"orderMoney":"订单金额",
"member":"买家",
"orderFromName":"订单来源",
"payTypeName":"支付方式",
"startDate":"开始时间",
"endDate":"结束时间"
}

View File

@ -0,0 +1,23 @@
{
"totalRechargeRefundMoney":"充值退款(元)",
"totalRechargeMoney":"充值金额(元)",
"rechargeRefundMoney":"充值退款",
"rechargeNo":"充值单号",
"orderStatus":"订单状态",
"rechargeNoPlaceholder":"请输入充值单号",
"createTime":"充值时间",
"rechargeMoney":"充值金额",
"orderMoney":"订单金额",
"member":"会员信息",
"orderFromName":"订单来源",
"payTypeName":"支付方式",
"startDate":"开始时间",
"endDate":"结束时间",
"namePlaceholder":"请选择",
"refundBtn":"退款",
"refundContent":"是否确认退款",
"payTime": "支付时间",
"refundStatus": "退款状态",
"startMoney": "起始金额",
"endMoney": "结束金额"
}

View File

@ -0,0 +1,24 @@
{
"refundNumber":"退款单号",
"userInfo":"用户信息",
"sourceNumber":"来源单号",
"refundAmount":"退款金额",
"refundTime":"退款时间",
"detail": "详情",
"statusName": "状态",
"memberInfo": "会员信息",
"refundSource": "退款来源",
"startDate":"开始时间",
"endDate":"结束时间",
"refundStatus": "退款状态",
"accumulateRefundMoney": "累计退款金额(元)",
"haveRefundMoney": "退款中金额(元)",
"refundSuccessMonry": "退款成功金额(元)",
"refundFailMoney": "退款失败金额(元)",
"memberInfoPlaceholder":"请输入会员编号/昵称/手机号",
"refundNumberPlaceholder":"请输入退款单号",
"orderNumber": "来源单号",
"orderNumberPlaceholder": "请输入来源单号",
"refundDetail": "退款详情",
"nickname": "会员昵称"
}

View File

@ -0,0 +1,5 @@
{
"developerTokenEdit":"开发者KEY设置",
"tokenPlaceholder":"请输入开发者令牌",
"tokenTips": "开发者KEY可以在已安装的框架中设置。框架安装并配置好开发者KEY后开发者自己开发的应用和插件会像普通授权插件一样可以安装使用特别是当开发者发布自己开发的插件或应用时尚在未发布状态时开发者也可以对其进行安装测试"
}

View File

@ -0,0 +1,4 @@
{
"clickTutorial": "查看教程",
"clickSecretKey": "获取密钥"
}

View File

@ -1,6 +1,6 @@
{
"buyerNotice": "会员消息",
"sellerNotice":"平台消息",
"sellerNotice":"商家消息",
"sms":"短信",
"weapp":"微信小程序",
"wechat":"微信公众号",
@ -18,5 +18,6 @@
"weappTempKey" : "模板编号",
"smsId":"短信模版ID",
"smsIdPlaceholder":"短信模版ID",
"noticeType":"消息类型"
}
"noticeType":"消息类型",
"addon": "所属应用"
}

View File

@ -1,4 +1,5 @@
{
"siteId":"站点id",
"noticeKey":"消息模板",
"noticeType":"消息类型",
"noticeInfo":"消息详情",

View File

@ -1,4 +1,5 @@
{
"siteId":"站点id",
"noticeKey":"消息模板",
"noticeType":"消息类型",
"noticeInfo":"消息详情",
@ -16,8 +17,6 @@
"sms":"短信",
"weapp":"微信小程序",
"wechat":"微信公众号",
"aliyun":"阿里云",
"statusName":"发送状态",
"noticeTypePlaceholder":"请选择消息类型",
"uidPlaceholder":"请输入通知的用户id",
"memberIdPlaceholder":"请输入消息的会员id",

View File

@ -1,7 +1,7 @@
{
"websiteInfo":"后台设置",
"contactAddress":"联系地址",
"siteName": "网站设置",
"siteName": "站点名称",
"keywords": "网站关键字",
"logo": "长方形Logo",
"desc": "网站简介",

View File

@ -131,6 +131,13 @@
"setUp":"设置",
"dictType":"数据字典",
"dictTypePlaceholder":"请选择数据字典",
"dictTypePlaceholder1":"部分字段未选择数据字典"
"dictTypePlaceholder1":"部分字段未选择数据字典",
"remotePullDown": "远程下拉",
"remotePullDownValue":"远程下拉value字段",
"remotePullDownValuePlaceholder":"请选择远程下拉value字段",
"remotePullDownLabel":"远程下拉标题字段",
"remotePullDownLabelPlaceholder":"请选择远程下拉label字段",
"selectType":"下拉类型"
}

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