diff --git a/admin/components.d.ts b/admin/components.d.ts index 08ed7ab72..e9749fac5 100644 --- a/admin/components.d.ts +++ b/admin/components.d.ts @@ -9,6 +9,7 @@ declare module '@vue/runtime-core' { export interface GlobalComponents { Attachment: typeof import('./src/components/upload-attachment/attachment.vue')['default'] DiyLink: typeof import('./src/components/diy-link/index.vue')['default'] + DiyPage: typeof import('./src/components/diy-page/index.vue')['default'] Editor: typeof import('./src/components/editor/index.vue')['default'] ElAlert: typeof import('element-plus/es')['ElAlert'] ElAside: typeof import('element-plus/es')['ElAside'] @@ -89,6 +90,7 @@ declare module '@vue/runtime-core' { SelectIcon: typeof import('./src/components/select-icon/index.vue')['default'] SpreadPopup: typeof import('./src/components/spread-popup/index.vue')['default'] UploadAttachment: typeof import('./src/components/upload-attachment/index.vue')['default'] + UploadAudio: typeof import('./src/components/upload-audio/index.vue')['default'] UploadFile: typeof import('./src/components/upload-file/index.vue')['default'] UploadImage: typeof import('./src/components/upload-image/index.vue')['default'] UploadVideo: typeof import('./src/components/upload-video/index.vue')['default'] diff --git a/admin/package-lock.json b/admin/package-lock.json index 64fda158d..d8760d42d 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -9,12 +9,18 @@ "version": "1.0.0", "dependencies": { "@element-plus/icons-vue": "2.0.10", + "@fullcalendar/core": "^6.1.19", + "@fullcalendar/daygrid": "^6.1.19", + "@fullcalendar/interaction": "^6.1.19", + "@fullcalendar/vue3": "^6.1.19", + "@heroicons/vue": "^2.2.0", "@highlightjs/vue-plugin": "2.1.0", "@types/lodash-es": "4.17.6", "@vueuse/core": "9.12.0", "axios": "1.4.0", "crypto-js": "4.1.1", "css-color-function": "1.3.3", + "date-fns": "^4.1.0", "day": "^0.0.2", "echarts": "5.4.1", "element-plus": "^2.7.4", @@ -963,6 +969,47 @@ "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.1.6.tgz", "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" }, + "node_modules/@fullcalendar/core": { + "version": "6.1.19", + "resolved": "https://registry.npmmirror.com/@fullcalendar/core/-/core-6.1.19.tgz", + "integrity": "sha512-z0aVlO5e4Wah6p6mouM0UEqtRf1MZZPt4mwzEyU6kusaNL+dlWQgAasF2cK23hwT4cmxkEmr4inULXgpyeExdQ==", + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.19", + "resolved": "https://registry.npmmirror.com/@fullcalendar/daygrid/-/daygrid-6.1.19.tgz", + "integrity": "sha512-IAAfnMICnVWPjpT4zi87i3FEw0xxSza0avqY/HedKEz+l5MTBYvCDPOWDATpzXoLut3aACsjktIyw9thvIcRYQ==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/interaction": { + "version": "6.1.19", + "resolved": "https://registry.npmmirror.com/@fullcalendar/interaction/-/interaction-6.1.19.tgz", + "integrity": "sha512-GOciy79xe8JMVp+1evAU3ytdwN/7tv35t5i1vFkifiuWcQMLC/JnLg/RA2s4sYmQwoYhTw/p4GLcP0gO5B3X5w==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19" + } + }, + "node_modules/@fullcalendar/vue3": { + "version": "6.1.19", + "resolved": "https://registry.npmmirror.com/@fullcalendar/vue3/-/vue3-6.1.19.tgz", + "integrity": "sha512-j5eUSxx0xIy3ADljo0f5B9PhjqXnCQ+7nUMPfsslc2eGVjp4F74YvY3dyd6OBbg13IvpsjowkjncGipYMQWmTA==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.19", + "vue": "^3.0.11" + } + }, + "node_modules/@heroicons/vue": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/@heroicons/vue/-/vue-2.2.0.tgz", + "integrity": "sha512-G3dbSxoeEKqbi/DFalhRxJU4mTXJn7GwZ7ae8NuEQzd1bqdd0jAbdaBZlHPcvPD2xI1iGzNVB4k20Un2AguYPw==", + "peerDependencies": { + "vue": ">= 3" + } + }, "node_modules/@highlightjs/vue-plugin": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/@highlightjs/vue-plugin/-/vue-plugin-2.1.0.tgz", @@ -2624,6 +2671,15 @@ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, "node_modules/day": { "version": "0.0.2", "resolved": "https://registry.npmmirror.com/day/-/day-0.0.2.tgz", @@ -5003,6 +5059,15 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", diff --git a/admin/package.json b/admin/package.json index 75cceeca3..b956c880f 100644 --- a/admin/package.json +++ b/admin/package.json @@ -10,12 +10,18 @@ }, "dependencies": { "@element-plus/icons-vue": "2.0.10", + "@fullcalendar/core": "^6.1.19", + "@fullcalendar/daygrid": "^6.1.19", + "@fullcalendar/interaction": "^6.1.19", + "@fullcalendar/vue3": "^6.1.19", + "@heroicons/vue": "^2.2.0", "@highlightjs/vue-plugin": "2.1.0", "@types/lodash-es": "4.17.6", "@vueuse/core": "9.12.0", "axios": "1.4.0", "crypto-js": "4.1.1", "css-color-function": "1.3.3", + "date-fns": "^4.1.0", "day": "^0.0.2", "echarts": "5.4.1", "element-plus": "^2.7.4", @@ -56,4 +62,4 @@ "vite": "4.1.0", "vue-tsc": "1.0.24" } -} \ No newline at end of file +} diff --git a/admin/public/ueditor/themes/default/css/ueditor.css b/admin/public/ueditor/themes/default/css/ueditor.css index 81421c3ea..9572e0bd5 100644 --- a/admin/public/ueditor/themes/default/css/ueditor.css +++ b/admin/public/ueditor/themes/default/css/ueditor.css @@ -147,7 +147,10 @@ div.edui-box { overflow: visible; z-index: 1 !important; } - +/* 全屏状态 */ +.edui-default .edui-editor.edui-fullscreen { + z-index: 999 !important; + } .edui-editor div { width: auto; height: auto; diff --git a/admin/src/app/api/addon.ts b/admin/src/app/api/addon.ts index 28a0b592f..2b23b6d7f 100644 --- a/admin/src/app/api/addon.ts +++ b/admin/src/app/api/addon.ts @@ -96,18 +96,17 @@ export function getInstalledAddonList() { * @returns */ export function getShowApp() { - return request.get('addon/list/showapp') + return request.get('addon/showCustomer') } /** - * 获取营销列表 + * 获取站点应用特殊 * @returns */ -export function getShowMarketing() { - return request.get('showMarketing') +export function getShowSpecialMenu() { + return request.get('addon/special_menu') } - export function getAddonInit() { return request.get('addon/init') } diff --git a/admin/src/app/api/app.ts b/admin/src/app/api/app.ts new file mode 100644 index 000000000..ad0973abe --- /dev/null +++ b/admin/src/app/api/app.ts @@ -0,0 +1,68 @@ +import request from '@/utils/request' + +/** + * 获取app配置 + * @returns + */ +export function getAppConfig() { + return request.get('channel/app/config') +} + +/** + * 编辑app配置 + * @param params + * @returns + */ +export function setAppConfig(params: Record) { + return request.put('channel/app/config', params, { showSuccessMessage: true }) +} + + +export function getVersionList(params: Record) { + return request.get('channel/app/version', { params }) +} + +export function getVersionInfo(id: number) { + return request.get(`channel/app/version/${id}`) +} + +export function getAppPlatform() { + return request.get(`channel/app/platfrom`) +} + +/** + * 添加版本 + * @param params + * @returns + */ +export function addVersion(params: Record) { + return request.post('channel/app/version', params, { showSuccessMessage: true }) +} + +/** + * 更新版本 + * @param params + */ +export function editVersion(params: Record) { + return request.put(`channel/app/version/${ params.id }`, params, { showSuccessMessage: true }) +} + +/** + * 删除版本 + * @param siteId + */ +export function deleteVersion(params: Record) { + return request.delete(`channel/app/version/${ params.id }`) +} + +export function getBuildLog(key: string) { + return request.get(`channel/app/build/log/${ key }`) +} + +export function releaseVersion(id: number) { + return request.put(`channel/app/version/${ id }/release`, {}, { showSuccessMessage: true }) +} + +export function generateSingCert(params: Record) { + return request.post(`channel/app/generate_sing_cert`, params, { showSuccessMessage: true }); +} diff --git a/admin/src/app/api/member.ts b/admin/src/app/api/member.ts index 4a03299ea..a97ff721c 100644 --- a/admin/src/app/api/member.ts +++ b/admin/src/app/api/member.ts @@ -18,7 +18,7 @@ export function getMemberList(params: Record) { * @returns */ export function getMemberInfo(id: number) { - return request.get(`member/member/${id}`); + return request.get(`member/member/${ id }`); } /** @@ -61,7 +61,7 @@ export function getRegisterChannelType(params: Record) { * @param member_id */ export function deleteMember(member_id: number) { - return request.delete(`member/member/${member_id}`, { showSuccessMessage: true }) + return request.delete(`member/member/${ member_id }`, { showSuccessMessage: true }) } /***************************************************** 会员标签 ****************************************************/ @@ -81,7 +81,7 @@ export function getMemberLabelList(params: Record) { * @returns */ export function getMemberLabelInfo(label_id: number) { - return request.get(`member/label/${label_id}`); + return request.get(`member/label/${ label_id }`); } /** @@ -98,7 +98,7 @@ export function addMemberLabel(params: Record) { * @param params */ export function updateMemberLabel(params: Record) { - return request.put(`member/label/${params.label_id}`, params, { showSuccessMessage: true }) + return request.put(`member/label/${ params.label_id }`, params, { showSuccessMessage: true }) } /** @@ -107,7 +107,7 @@ export function updateMemberLabel(params: Record) { * @returns */ export function deleteMemberLabel(label_id: number) { - return request.delete(`member/label/${label_id}`, { showSuccessMessage: true }) + return request.delete(`member/label/${ label_id }`, { showSuccessMessage: true }) } /** @@ -122,7 +122,7 @@ export function getMemberLabelAll() { * @param params */ export function editMemberDetail(params: Record) { - return request.put(`member/member/modify/${params.member_id}/${params.field}`, params, { showSuccessMessage: true }) + return request.put(`member/member/modify/${ params.member_id }/${ params.field }`, params, { showSuccessMessage: true }) } /** @@ -143,7 +143,7 @@ export function memberBatchModify(params: Record) { * @param change_type */ export function getChangeTypeList(change_type: string) { - return request.get(`member/account/change_type/${change_type}`) + return request.get(`member/account/change_type/${ change_type }`) } /** @@ -321,7 +321,7 @@ export function getBalanceStatus() { * 获取余额变动类型 */ export function getAccountType(params: Record) { - return request.get(`member/account/change_type/${params.account_type}`) + return request.get(`member/account/change_type/${ params.account_type }`) } @@ -357,7 +357,7 @@ export function getCashOutList(params: Record) { * @param id */ export function getCashOutDetail(id: number) { - return request.get(`member/cash_out/${id}`, {}) + return request.get(`member/cash_out/${ id }`, {}) } /** @@ -365,14 +365,18 @@ export function getCashOutDetail(id: number) { * @param params */ export function memberAudit(params: Record) { - return request.put(`member/cash_out/audit/${params.id}/${params.action}`, params, { showSuccessMessage: true }) + return request.put(`member/cash_out/audit/${ params.id }/${ params.action }`, params, { showSuccessMessage: true }) } + /** * 会员取消提现 * @param params */ export function memberCancel(params: Record) { - return request.put(`member/cash_out/cancel/${params.id}`, params, { showSuccessMessage: true,showErrorMessage: true }) + return request.put(`member/cash_out/cancel/${ params.id }`, params, { + showSuccessMessage: true, + showErrorMessage: true + }) } @@ -381,7 +385,7 @@ export function memberCancel(params: Record) { * @param params */ export function memberTransfer(params: Record) { - return request.put(`member/cash_out/transfer/${params.id}`, params, { showSuccessMessage: true }) + return request.put(`member/cash_out/transfer/${ params.id }`, params, { showSuccessMessage: true }) } /** @@ -389,14 +393,15 @@ export function memberTransfer(params: Record) { * @param params */ export function memberRemark(params: Record) { - return request.put(`member/cash_out/remark/${params.id}`, params, { showSuccessMessage: true }) + return request.put(`member/cash_out/remark/${ params.id }`, params, { showSuccessMessage: true }) } + /** * 检查打款进度 * @param id */ export function memberCheck(id: number) { - return request.put(`member/cash_out/check/${id}`, {}, { showSuccessMessage: true }) + return request.put(`member/cash_out/check/${ id }`, {}, { showSuccessMessage: true }) } /** @@ -404,7 +409,7 @@ export function memberCheck(id: number) { * @param params */ export function editMemberStatus(params: Record) { - return request.put(`member/setstatus/${params.status}`, params, { showSuccessMessage: true }) + return request.put(`member/setstatus/${ params.status }`, params, { showSuccessMessage: true }) } /** @@ -453,6 +458,7 @@ export function getGrowthRuleDict() { export function getPointRuleDict() { return request.get(`member/dict/point_rule`) } + /***************************************************** 会员等级 ****************************************************/ /** @@ -470,7 +476,7 @@ export function getMemberLevelPageList(params: Record) { * @returns */ export function getMemberLevelInfo(level_id: number) { - return request.get(`member/level/${level_id}`); + return request.get(`member/level/${ level_id }`); } /** @@ -487,7 +493,7 @@ export function addMemberLevel(params: Record) { * @param params */ export function updateMemberLevel(params: Record) { - return request.put(`member/level/${params.level_id}`, params, { showSuccessMessage: true }) + return request.put(`member/level/${ params.level_id }`, params, { showSuccessMessage: true }) } /** @@ -496,7 +502,7 @@ export function updateMemberLevel(params: Record) { * @returns */ export function deleteMemberLevel(level_id: number) { - return request.delete(`member/level/${level_id}`, { showSuccessMessage: true }) + return request.delete(`member/level/${ level_id }`, { showSuccessMessage: true }) } /** @@ -512,14 +518,14 @@ export function getMemberLevelAll() { * 获取会员权益内容 */ export function getMemberBenefitsContent() { - return request.get(`member/benefits/content`); + return request.post(`member/benefits/content`); } /** * 获取会员礼包内容 */ export function getMemberGiftsContent(params: Record) { - return request.get(`member/gifts/content`, { params }); + return request.post(`member/gifts/content`, params); } /** @@ -555,7 +561,7 @@ export function getMemberAddress(params: Record) { } /** - * 添加收货地址 + * 添加收货地址 */ export function addMemberAddress(params: Record) { return request.post(`member/address`, params); diff --git a/admin/src/app/assets/images/app_store/app_manage.png b/admin/src/app/assets/images/app_store/app_manage.png new file mode 100644 index 000000000..b858a8f0a Binary files /dev/null and b/admin/src/app/assets/images/app_store/app_manage.png differ diff --git a/admin/src/app/assets/images/app_store/app_type_addon.png b/admin/src/app/assets/images/app_store/app_type_addon.png new file mode 100644 index 000000000..071073e5a Binary files /dev/null and b/admin/src/app/assets/images/app_store/app_type_addon.png differ diff --git a/admin/src/app/assets/images/app_store/app_type_app.png b/admin/src/app/assets/images/app_store/app_type_app.png new file mode 100644 index 000000000..385b275b5 Binary files /dev/null and b/admin/src/app/assets/images/app_store/app_type_app.png differ diff --git a/admin/src/app/assets/images/app_store/system_version.png b/admin/src/app/assets/images/app_store/system_version.png new file mode 100644 index 000000000..762b2ad77 Binary files /dev/null and b/admin/src/app/assets/images/app_store/system_version.png differ diff --git a/admin/src/app/components/upgrade/index.vue b/admin/src/app/components/upgrade/index.vue index f61bf9c97..2f3af58d9 100644 --- a/admin/src/app/components/upgrade/index.vue +++ b/admin/src/app/components/upgrade/index.vue @@ -249,7 +249,7 @@ import Storage from '@/utils/storage' import { useRouter } from 'vue-router' const router = useRouter() -const terminalId = ref(Date.now()); +const terminalId = ref(Date.now()); const showDialog = ref(false) const upgradeContent = ref(null) const isAllowUpgrade = ref(true) // 是否允许升级 @@ -299,7 +299,7 @@ const getUpgradeTaskFn = () => { if (!upgradeContent.value) { upgradeContent.value = data.upgrade_content - if (upgradeContent.value || !data.upgrade_content || !Array.isArray(data.upgrade_content.content)) { + if (!data.upgrade_content || !Array.isArray(data.upgrade_content.content)) { return } @@ -691,7 +691,7 @@ defineExpose({ white-space: pre-wrap; } -::v-deep .number-of-steps { +:deep(.number-of-steps) { .el-step__line { margin: 0 25px; background: #dddddd; diff --git a/admin/src/app/lang/zh-cn/channel.app.access.json b/admin/src/app/lang/zh-cn/channel.app.access.json new file mode 100644 index 000000000..eb0410748 --- /dev/null +++ b/admin/src/app/lang/zh-cn/channel.app.access.json @@ -0,0 +1,13 @@ +{ + "accessFlow": "接入流程", + "versionManage": "版本管理", + "title": "APP端管理", + "appInlet": "App接入流程", + "uniappApp": "uni-app应用开通", + "appAttestation1": "点击进入Dcloud官网开发者后台,创建或选择应用并维护好应用平台信息", + "clickAccess": "点击接入", + "appSetting": "App端配置", + "settingInfo": "点击配置", + "releaseVersion": "发布版本", + "toCreate": "去创建" +} diff --git a/admin/src/app/lang/zh-cn/channel.app.config.json b/admin/src/app/lang/zh-cn/channel.app.config.json new file mode 100644 index 000000000..180840277 --- /dev/null +++ b/admin/src/app/lang/zh-cn/channel.app.config.json @@ -0,0 +1,17 @@ +{ + "wechatAppInfo": "微信应用信息", + "wechatAppid": "微信移动应用AppID", + "wechatAppidTips": "用于app端 微信登录 微信支付 微信分享", + "wechatAppsecret": "微信移动应用AppSecret", + "appidPlaceholder": "请输入AppID", + "appSecretPlaceholder": "请输入AppSecret", + "appInfo": "应用信息", + "uniAppId": "uniapp应用id", + "uniAppIdTips": "uniapp应用id需在Dcloud开发者中心创建", + "toCreate": "前往Dcloud官网", + "appName": "应用名称", + "applicationId": "安卓应用包名", + "applicationIdTips": "安卓应用的包名是Android系统中用于唯一标识应用的字符串,采用反向域名格式(如com.example.myapp)。每个应用在系统中拥有唯一的包名,用于区分不同应用", + "androidAppKey": "安卓离线打包Key", + "androidAppKeyTips": "安卓离线打包Key在Dcloud开发者中心 - 应用管理 - 点击应用 - 各平台信息 创建以及查看离线AppKey" +} diff --git a/admin/src/app/lang/zh-cn/channel.app.version.json b/admin/src/app/lang/zh-cn/channel.app.version.json new file mode 100644 index 000000000..f68a37191 --- /dev/null +++ b/admin/src/app/lang/zh-cn/channel.app.version.json @@ -0,0 +1,55 @@ +{ + "accessFlow": "接入流程", + "versionManage": "版本管理", + "versionCode":"版本号", + "versionCodePlaceholder":"请输入版本号", + "versionCodeTips": "应用版本号,必须是整数,取值范围1~2147483647;必须高于上一版本设置的值", + "versionName":"版本名称", + "versionNamePlaceholder":"请输入版本名称", + "versionDesc":"", + "versionDescPlaceholder":"请输入", + "icon":"应用图标", + "iconPlaceholder":"请输入应用图标", + "push":"消息推送图标", + "pushPlaceholder":"请输入消息推送图标", + "splash":"应用启动页图标", + "splashPlaceholder":"请输入应用启动页的图标", + "platform":"客户端", + "packagePath":"安装包路径", + "packagePathPlaceholder":"请输入安装包路径", + "status":"状态", + "statusPlaceholder":"请输入状态", + "addAppVersion":"添加版本", + "updateAppVersion":"编辑版本", + "startDate":"请选择开始时间", + "endDate":"请选择结束时间", + "isForcedUpgrade": "强制升级", + "versionDesc": "更新内容", + "isForcedUpgradeTitle": "是否强制升级", + "releaseTime": "发布时间", + "release": "发布", + "resourceFile": "上传资源文件", + "androidResourceFileTips": "只能上传apk文件", + "iosResourceFileTips": "只能上传wgt文件", + "index": "序号", + "next": "下一步", + "prev": "上一步", + "certType": "证书类型", + "certFile": "证书文件", + "certAlias": "证书别名", + "certKeyPassword": "证书密码", + "certStorePassword": "证书库密码", + "publicCertTips": "niucloud提供的公共测试证书,证书的描述信息都是测试数据,任何人都可以使用,仅适合应用开发期间体验测试使用", + "privateCertTips": "Android平台打包发布apk应用,需要使用数字证书(.keystore文件)进行签名,用于表明开发者身份。", + "download": "下载", + "failReason": "失败原因", + "appVersionReleaseTips": "发布后无法再对该版本进行修改,确定要发布该版本吗?", + "appVersionDeleteTips": "确定要删除该版本吗?", + "upgradeType": "升级方式", + "seeBuildLog": "查看打包日志", + "buildLog": "打包日志", + "authTips": "上传代码需先绑定授权码,如果已有授权请先进行绑定,没有授权可到niucloud官网购买云服务之后再进行操作", + "toBind": "绑定授权", + "toNiucloud": "去niucloud官网", + "siteAuthTips": "上传代码需先绑定授权码,请联系平台管理员进行绑定" +} diff --git a/admin/src/app/lang/zh-cn/channel.wechat.config.json b/admin/src/app/lang/zh-cn/channel.wechat.config.json index a86663f97..73e8a1b72 100644 --- a/admin/src/app/lang/zh-cn/channel.wechat.config.json +++ b/admin/src/app/lang/zh-cn/channel.wechat.config.json @@ -29,5 +29,8 @@ "encodingAesKeyPlaceholder": "请输入EncodingAESKey", "cleartextModeTips": "明文模式下,不使用消息体加解密功能,安全系数较低", "compatibleModeTips": "兼容模式下,明文、密文将共存,方便开发者调试和维护", - "safeModeTips": "安全模式下,消息包为纯密文,需要开发者加密和解密,安全系数高" -} \ No newline at end of file + "safeModeTips": "安全模式下,消息包为纯密文,需要开发者加密和解密,安全系数高", + "wechatBaseUri": "借权域名", + "wechatBaseUriPlaceholder": "", + "wechatBaseUriTips": "默认留空,填写后将替换https://open.weixin.gg.com/获取授权!" +} diff --git a/admin/src/app/lang/zh-cn/setting.map.json b/admin/src/app/lang/zh-cn/setting.map.json index 346d9fc75..9bbab2230 100644 --- a/admin/src/app/lang/zh-cn/setting.map.json +++ b/admin/src/app/lang/zh-cn/setting.map.json @@ -7,5 +7,6 @@ "validTimeTips": "过期后将重新获取定位信息", "validTimePlaceholder": "请输入定位有效期", "validTimeFormatTips": "格式输入错误", - "validTimeNotZeroTips": "定位有效期不能小于5分钟" -} \ No newline at end of file + "validTimeNotZeroTips": "定位有效期不能小于5分钟", + "aMapKey": "高德地图KEY" +} diff --git a/admin/src/app/lang/zh-cn/setting.system.json b/admin/src/app/lang/zh-cn/setting.system.json index c60aa7b04..af44cb0a2 100644 --- a/admin/src/app/lang/zh-cn/setting.system.json +++ b/admin/src/app/lang/zh-cn/setting.system.json @@ -32,6 +32,10 @@ "contactsTelPlaceholder": "请输入联系电话", "logoPlaceholder": "建议图片尺寸:210*30像素;图片格式:jpg、png、jpeg。", "iconPlaceholder": "建议图片尺寸:100*100像素;图片格式:jpg、png、jpeg。", + "siteLoginLogo": "站点登录Logo", + "siteLoginLogoTips": "站点端登录Logo,建议图片尺寸:132*40像素;图片格式:jpg、png、jpeg。", + "siteLoginBgImg": "站点登录背景图", + "siteLoginBgImgTips": "站点端登录背景图,建议图片尺寸:1920*1280像素;图片格式:jpg、png、jpeg。", "metaTitle": "Meta 标题", "MetaPlaceholder": "请输入Meta 标题", "metaDescription": "Meta 描述", diff --git a/admin/src/app/views/app/index.vue b/admin/src/app/views/app/index.vue index 317593f06..d3f56ce4e 100644 --- a/admin/src/app/views/app/index.vue +++ b/admin/src/app/views/app/index.vue @@ -50,6 +50,7 @@ import { img } from '@/utils/common' import useUserStore from '@/stores/modules/user' import { useRouter } from 'vue-router' import { t } from '@/lang' +import storage from '@/utils/storage' const addonIndexRoute = useUserStore().addonIndexRoute const router = useRouter() @@ -65,10 +66,17 @@ getAppList() const toLink = (item: any) => { if (item.url) { - router.push(item.url) + // 判断如果携带is_target=true就通过新窗口打开 + if (item.url.indexOf('is_target=true') != -1) { + const url = router.resolve(item.url) + window.open(url.href) + } else { + router.push(item.url) + } } else { addonIndexRoute[item.key] && router.push({ name: addonIndexRoute[item.key] }) } + storage.set({ key: 'activeAppKey', data: item.key }) } diff --git a/admin/src/app/views/app/marketing.vue b/admin/src/app/views/app/marketing.vue index da01772f0..2a38e7b93 100644 --- a/admin/src/app/views/app/marketing.vue +++ b/admin/src/app/views/app/marketing.vue @@ -1,51 +1,50 @@ diff --git a/admin/src/app/views/auth/log.vue b/admin/src/app/views/auth/log.vue index 893f1be3b..ab66b3064 100644 --- a/admin/src/app/views/auth/log.vue +++ b/admin/src/app/views/auth/log.vue @@ -19,13 +19,19 @@ + + + + {{ t('search') }} {{ t('reset') }} -
+
{{ t('清空日志') }}
@@ -83,7 +89,8 @@ const sysUserLogTableData = reactive({ searchParam: { ip: '', username: '', - url: '' + url: '', + create_time:'' } }) diff --git a/admin/src/app/views/auth/role.vue b/admin/src/app/views/auth/role.vue index 2c013c3e7..ec4e3f432 100644 --- a/admin/src/app/views/auth/role.vue +++ b/admin/src/app/views/auth/role.vue @@ -3,9 +3,9 @@
- +
diff --git a/admin/src/app/views/channel/app/access.vue b/admin/src/app/views/channel/app/access.vue new file mode 100644 index 000000000..f285ce34f --- /dev/null +++ b/admin/src/app/views/channel/app/access.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/admin/src/app/views/channel/app/components/app-version-edit.vue b/admin/src/app/views/channel/app/components/app-version-edit.vue new file mode 100644 index 000000000..f67251913 --- /dev/null +++ b/admin/src/app/views/channel/app/components/app-version-edit.vue @@ -0,0 +1,286 @@ + + + + + + diff --git a/admin/src/app/views/channel/app/components/generate-sing-cert.vue b/admin/src/app/views/channel/app/components/generate-sing-cert.vue new file mode 100644 index 000000000..0879d75e2 --- /dev/null +++ b/admin/src/app/views/channel/app/components/generate-sing-cert.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/admin/src/app/views/channel/app/config.vue b/admin/src/app/views/channel/app/config.vue new file mode 100644 index 000000000..c6344a810 --- /dev/null +++ b/admin/src/app/views/channel/app/config.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/admin/src/app/views/channel/app/version.vue b/admin/src/app/views/channel/app/version.vue new file mode 100644 index 000000000..4adf345d4 --- /dev/null +++ b/admin/src/app/views/channel/app/version.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/admin/src/app/views/channel/wechat/config.vue b/admin/src/app/views/channel/wechat/config.vue index b5874951c..d24f6678e 100644 --- a/admin/src/app/views/channel/wechat/config.vue +++ b/admin/src/app/views/channel/wechat/config.vue @@ -36,6 +36,11 @@
{{ t('wechatAppsecretTips') }}
+ + + +
{{ t('wechatBaseUriTips') }}
+
@@ -140,7 +145,8 @@ const formData = reactive>({ token: '', encoding_aes_key: '', encryption_type: 'not_encrypt', - is_authorization: 0 + is_authorization: 0, + base_uri: '' }) const formRef = ref() diff --git a/admin/src/app/views/diy/components/edit-page.vue b/admin/src/app/views/diy/components/edit-page.vue index 0d513860d..1234d177e 100644 --- a/admin/src/app/views/diy/components/edit-page.vue +++ b/admin/src/app/views/diy/components/edit-page.vue @@ -63,6 +63,23 @@
{{ t('tabbarSwitchTips') }}
+ + + +
+ + +
+
+

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

+ + + +
{{ t('此处控制当前页面版权信息是否显示') }}
+
+ + +
@@ -178,6 +195,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/diy/edit.vue b/admin/src/app/views/diy/edit.vue index 74ec223b0..321bb80ae 100644 --- a/admin/src/app/views/diy/edit.vue +++ b/admin/src/app/views/diy/edit.vue @@ -185,7 +185,7 @@ - + @@ -455,7 +455,6 @@ initPage({ diyStore.components.push(com) } } - loadDiyTemplatePages(data.type) // 加载预览 diff --git a/admin/src/app/views/diy/list.vue b/admin/src/app/views/diy/list.vue index d37b39405..d4d916da9 100644 --- a/admin/src/app/views/diy/list.vue +++ b/admin/src/app/views/diy/list.vue @@ -256,7 +256,7 @@ const editEvent = (data: any) => { // 设为使用 const setUse = (id: any) => { setUseDiyPage({ id }).then(() => { - loadDiyPageList() + loadDiyPageList(getTablePageStorage(diyPageTableData.searchParam).page) }) } const repeat = ref(false) @@ -275,7 +275,7 @@ const copyEvent = (id: any) => { copyDiy({ id }).then((res: any) => { if (res.code == 1) { - loadDiyPageList() + loadDiyPageList(getTablePageStorage(diyPageTableData.searchParam).page) } repeat.value = false }).catch(err => { @@ -294,7 +294,7 @@ const deleteEvent = (id: number) => { } ).then(() => { deleteDiyPage(id).then(() => { - loadDiyPageList() + loadDiyPageList(getTablePageStorage(diyPageTableData.searchParam).page) }).catch(() => { }) }) @@ -358,7 +358,7 @@ const shareEvent = async (formEl: FormInstance | undefined) => { id: shareFormId.value, share: JSON.stringify(shareFormData) }).then(() => { - loadDiyPageList() + loadDiyPageList(getTablePageStorage(diyPageTableData.searchParam).page) shareDialogVisible.value = false }).catch(() => { }) diff --git a/admin/src/app/views/diy/tabbar.vue b/admin/src/app/views/diy/tabbar.vue index bc869edf9..60f3598e1 100644 --- a/admin/src/app/views/diy/tabbar.vue +++ b/admin/src/app/views/diy/tabbar.vue @@ -35,7 +35,7 @@
+ @size-change="loadBottomNavList()" @current-change="loadBottomNavList" />
diff --git a/admin/src/app/views/diy/theme_style.vue b/admin/src/app/views/diy/theme_style.vue index df5a6b348..c3a7645cc 100644 --- a/admin/src/app/views/diy/theme_style.vue +++ b/admin/src/app/views/diy/theme_style.vue @@ -13,7 +13,7 @@