diff --git a/admin/components.d.ts b/admin/components.d.ts index 67d2c4edc..df043d213 100644 --- a/admin/components.d.ts +++ b/admin/components.d.ts @@ -62,6 +62,8 @@ declare module '@vue/runtime-core' { ElRow: typeof import('element-plus/es')['ElRow'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElSelect: typeof import('element-plus/es')['ElSelect'] + ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] + ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem'] ElSlider: typeof import('element-plus/es')['ElSlider'] ElStatistic: typeof import('element-plus/es')['ElStatistic'] ElStep: typeof import('element-plus/es')['ElStep'] diff --git a/admin/src/app/api/wxoplatform.ts b/admin/src/app/api/wxoplatform.ts index 6d98d6fb5..13e2824f6 100644 --- a/admin/src/app/api/wxoplatform.ts +++ b/admin/src/app/api/wxoplatform.ts @@ -95,3 +95,10 @@ export function syncSiteWeapp(params: Record) { export function getAuthRecord(params: Record) { return request.get('wxoplatform/authorization/record', { params }) } + +/** + * 取消授权 + */ +export function cancelAuthorization(params: Record) { + return request.post('wxoplatform/authorization/cancel', params, { showSuccessMessage: true }) +} diff --git a/admin/src/app/lang/zh-cn/channel.app.version.json b/admin/src/app/lang/zh-cn/channel.app.version.json index 33c525ea8..f68a37191 100644 --- a/admin/src/app/lang/zh-cn/channel.app.version.json +++ b/admin/src/app/lang/zh-cn/channel.app.version.json @@ -45,5 +45,11 @@ "failReason": "失败原因", "appVersionReleaseTips": "发布后无法再对该版本进行修改,确定要发布该版本吗?", "appVersionDeleteTips": "确定要删除该版本吗?", - "upgradeType": "升级方式" + "upgradeType": "升级方式", + "seeBuildLog": "查看打包日志", + "buildLog": "打包日志", + "authTips": "上传代码需先绑定授权码,如果已有授权请先进行绑定,没有授权可到niucloud官网购买云服务之后再进行操作", + "toBind": "绑定授权", + "toNiucloud": "去niucloud官网", + "siteAuthTips": "上传代码需先绑定授权码,请联系平台管理员进行绑定" } diff --git a/admin/src/app/views/auth/menu.vue b/admin/src/app/views/auth/menu.vue index 3945c8240..7ed701156 100644 --- a/admin/src/app/views/auth/menu.vue +++ b/admin/src/app/views/auth/menu.vue @@ -9,7 +9,7 @@ {{ t('addMenu') }} - + {{ t('initializeMenu') }} @@ -82,6 +82,7 @@ const getMenuList = () => { } getMenuList() // 重置菜单 +const refreshLoading = ref(false) const refreshMenu = () => { ElMessageBox.confirm(h('div', null, [ h('p', null, t('initializeMenuTipsOne')), @@ -93,9 +94,11 @@ const refreshMenu = () => { // type: 'warning' } ).then(() => { + refreshLoading.value = true menuRefresh({}).then(res => { - location.reload() + refreshLoading.value = false }).catch(() => { + refreshLoading.value = false }) }).catch(() => { }) diff --git a/admin/src/app/views/channel/app/version.vue b/admin/src/app/views/channel/app/version.vue index 608b3aa49..4adf345d4 100644 --- a/admin/src/app/views/channel/app/version.vue +++ b/admin/src/app/views/channel/app/version.vue @@ -22,7 +22,7 @@
- {{ t('addAppVersion') }} + {{ t('addAppVersion') }}
@@ -41,7 +41,11 @@ - + + + diff --git a/admin/src/app/views/channel/weapp/code.vue b/admin/src/app/views/channel/weapp/code.vue index 0ccaf9d2c..10d3993cb 100644 --- a/admin/src/app/views/channel/weapp/code.vue +++ b/admin/src/app/views/channel/weapp/code.vue @@ -14,13 +14,32 @@
- {{ t('cloudRelease') }} + {{ t('cloudRelease') }} {{ t('localRelease') }}
{{ t('uploadWeapp') }}
+
+
+
+ 线上版本: {{ weappTableData.version_info.release_version }} +
+
+ 发布时间: {{ weappTableData.version_info.release_time }} +
+
+
+
+ 体验版本: {{ weappTableData.version_info.exp_version }} +
+
+ 过期时间: {{ weappTableData.version_info.exp_time }} +
+
+
+ + + + + +
+ + {{ t('默认') }} + {{ t('自定义') }} + +
默认为列表版本号递增,自定义则为手动输入版本号进行上传,首位必须大于1
+
+
+ +
+ + + + . + + + + . + + + +
+
+
+ @@ -116,19 +171,22 @@ const weappTableData:{ limit: number, total: number, loading: boolean, - data: AnyObject + data: AnyObject, + version_info: AnyObject } = reactive({ page: 1, limit: 10, total: 0, loading: false, - data: [] + data: [], + version_info: {} }) const form = ref({ - desc: '', - code: '', - path: '', - content: '' + type:1, + version: '', + code1: '1', + code2: '0', + code3: '0' }) const uploadSuccessShowDialog = ref(false) const authCode = ref('') @@ -161,7 +219,62 @@ const handleClick = (val: any) => { router.push({ path: activeName.value }) } const ruleFormRef = ref(null) - +const cloudRuleFormRef = ref(null) +// 表单校验规则 +const formRules = reactive({ + code1: [ + { + validator: (rule: any, value: number, callback: any) => { + if (value < 1) { + callback(new Error(t('必须大于1'))); + } else { + callback(); + } + }, + trigger: 'blur' + } + ], + code2: [ + { + validator: (rule: any, value: number, callback: any) => { + if (value < 0) { + callback(new Error(t('必须大于0'))); + } else { + callback(); + } + }, + trigger: 'blur' + } + ], + code3: [ + { + validator: (rule: any, value: number, callback: any) => { + if (value < 0) { + callback(new Error(t('必须大于0'))); + } else { + callback(); + } + }, + trigger: 'blur' + } + ], + version:[ + { + required: true, + validator: (rule: any, value: string, callback: any) => { + if(form.value.type == 2){ + if(!form.value.code1 || !form.value.code2 || !form.value.code3){ + callback(new Error(t('请填写版本号'))); + }else{ + callback(); + } + }else{ + callback(); + } + } + } + ] +}); /** * 获取版本列表 */ @@ -177,6 +290,7 @@ const getWeappVersionListFn = (page: number = 1) => { weappTableData.data = res.data.data weappTableData.total = res.data.total if (page == 1 && weappTableData.data.length && weappTableData.data[0].status == 0) getWeappUploadLogFn(weappTableData.data[0].task_key) + weappTableData.version_info = res.data.version_info }).catch(() => { weappTableData.loading = false }) @@ -184,10 +298,56 @@ const getWeappVersionListFn = (page: number = 1) => { getWeappVersionListFn() +const openDialog = () => { + if (!authCode.value) { + authElMessageBox() + return + } + if (!weappConfig.value.app_id) { + configElMessageBox() + return + } + form.value = { + type:1, + version: '', + code1: '1', + code2: '0', + code3: '0' + } + cloudVersionDialogVisible.value = true +} const handleClose = () => { ruleFormRef.value.clearValidate() } +const cloudVersionDialogVisible = ref(false) +const handleCloseCloudVersion = () => { + cloudVersionDialogVisible.value = false + form.value = { + type:1, + version: '', + code1: '1', + code2: '0', + code3: '0' + } +} + +const save = () => { + cloudRuleFormRef.value.validate((valid: boolean) => { + if (valid) { + if (form.value.type == 2) { + form.value.version = `${form.value.code1}.${form.value.code2}.${form.value.code3}` + } + delete form.value.code1 + delete form.value.code2 + delete form.value.code3 + delete form.value.type + cloudVersionDialogVisible.value = false + insert() + } + }) +} + const uploading = ref(false) const insert = () => { if (!authCode.value) { @@ -206,7 +366,7 @@ const insert = () => { setWeappVersion(form.value).then(res => { getWeappVersionListFn() - getWeappPreviewImage() + getWeappPreviewImage() uploading.value = false }).catch(() => { uploading.value = false diff --git a/admin/src/app/views/diy/components/edit-page.vue b/admin/src/app/views/diy/components/edit-page.vue index 0d513860d..45ea4f172 100644 --- a/admin/src/app/views/diy/components/edit-page.vue +++ b/admin/src/app/views/diy/components/edit-page.vue @@ -63,6 +63,20 @@
{{ t('tabbarSwitchTips') }}
+ + + + + + +
+
+

{{ t('版权信息内容') }}

+ + + +
{{ t('此处控制当前页面版权信息是否显示') }}
+
@@ -178,6 +192,7 @@ import { t } from '@/lang' import { watch, ref } from 'vue' import useDiyStore from '@/stores/modules/diy' import { img } from '@/utils/common' +import tabbarSelectPopup from './tabbar-select-popup.vue' const diyStore = useDiyStore() diff --git a/admin/src/app/views/diy/components/tabbar-select-popup.vue b/admin/src/app/views/diy/components/tabbar-select-popup.vue new file mode 100644 index 000000000..9b03d2316 --- /dev/null +++ b/admin/src/app/views/diy/components/tabbar-select-popup.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/admin/src/app/views/index/index.vue b/admin/src/app/views/index/index.vue index 92b959323..de86e5a6e 100644 --- a/admin/src/app/views/index/index.vue +++ b/admin/src/app/views/index/index.vue @@ -1,6 +1,6 @@ diff --git a/admin/src/layout/darkside/components/aside/menu-item.vue b/admin/src/layout/darkside/components/aside/menu-item.vue index ac9362a64..06df7c210 100644 --- a/admin/src/layout/darkside/components/aside/menu-item.vue +++ b/admin/src/layout/darkside/components/aside/menu-item.vue @@ -190,9 +190,13 @@ const handleJump = (routeName: string) => { if (specialMenuNamesLevel1.value.includes(routeName)) { routeName = 'addon_list' } + // 跳转时添加随机查询参数(用于触发页面感知) + const query = route.name === routeName + ? { refresh: Date.now() } // 相同路由时添加随机参数 + : {}; // 执行跳转 - router.push({ name: routeName }) + router.push({ name: routeName, query }); } watch(route, () => { diff --git a/admin/src/layout/darkside/components/aside/side.vue b/admin/src/layout/darkside/components/aside/side.vue index f3b88364e..e8c1f9a01 100644 --- a/admin/src/layout/darkside/components/aside/side.vue +++ b/admin/src/layout/darkside/components/aside/side.vue @@ -43,7 +43,7 @@ const addonIndexRoute = userStore.addonIndexRoute const menuData = ref[]>([]) const addonRouters: Record = {} const logoUrl = computed(() => { - return userStore.siteInfo.icon ? userStore.siteInfo.icon : systemStore.website.icon + return userStore.siteInfo.logo ? userStore.siteInfo.logo : systemStore.website.logo }) const appList = ref[]>([]) diff --git a/admin/src/layout/default/components/aside/menu-item.vue b/admin/src/layout/default/components/aside/menu-item.vue index 34f609568..cb4d8a7a8 100644 --- a/admin/src/layout/default/components/aside/menu-item.vue +++ b/admin/src/layout/default/components/aside/menu-item.vue @@ -183,9 +183,13 @@ const handleJump = (routeName: string) => { if (specialMenuNamesLevel1.value.includes(routeName)) { routeName = 'addon_list' } + // 跳转时添加随机查询参数(用于触发页面感知) + const query = route.name === routeName + ? { refresh: Date.now() } // 相同路由时添加随机参数 + : {}; // 执行跳转 - router.push({ name: routeName }) + router.push({ name: routeName, query }); } watch(route, () => { diff --git a/admin/src/layout/default/components/aside/side.vue b/admin/src/layout/default/components/aside/side.vue index 46946dcb8..25a4db932 100644 --- a/admin/src/layout/default/components/aside/side.vue +++ b/admin/src/layout/default/components/aside/side.vue @@ -44,7 +44,7 @@ const addonIndexRoute = userStore.addonIndexRoute const menuData = ref[]>([]) const addonRouters: Record = {} const logoUrl = computed(() => { - return userStore.siteInfo.icon ? userStore.siteInfo.icon : systemStore.website.icon + return userStore.siteInfo.logo ? userStore.siteInfo.logo : systemStore.website.logo }) const appList = ref[]>([]) diff --git a/admin/src/layout/profession/components/aside/menu-item.vue b/admin/src/layout/profession/components/aside/menu-item.vue index ef4a300db..9f48d5425 100644 --- a/admin/src/layout/profession/components/aside/menu-item.vue +++ b/admin/src/layout/profession/components/aside/menu-item.vue @@ -24,13 +24,14 @@ diff --git a/admin/src/stores/modules/diy.ts b/admin/src/stores/modules/diy.ts index ee0ba3b8c..7e9cdf066 100644 --- a/admin/src/stores/modules/diy.ts +++ b/admin/src/stores/modules/diy.ts @@ -77,8 +77,17 @@ const useDiyStore = defineStore('diy', { bottomTabBar: { control: true, // 是否允许展示编辑 isShow: true, // 是否显示 + designNav:{ //类型 + title: "", // 标题 + key: "", // 组件标识 + } }, + // 版权信息 + copyright: { + control: true, // 是否允许展示编辑 + isShow: false, // 是否显示 + }, // 弹框 count:不弹出 -1,首次弹出 1,每次弹出 0 popWindow: { imgUrl: "", @@ -171,6 +180,16 @@ const useDiyStore = defineStore('diy', { bottomTabBar: { control: true, // 是否允许展示编辑 isShow: true, // 是否显示 + designNav:{ //类型 + title: "", // 标题 + key: "", // 组件标识 + } + }, + + // 版权信息 + copyright: { + control: true, // 是否允许展示编辑 + isShow: true, // 是否显示 }, // 弹框 count:不弹出 -1,首次弹出 1,每次弹出 0