mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2025-12-12 09:57:20 +00:00
up
This commit is contained in:
parent
971f078abc
commit
ec90e6f9b2
0
admin/src/addon/.gitignore
vendored
Normal file
0
admin/src/addon/.gitignore
vendored
Normal file
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 87 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
@ -62,6 +62,8 @@
|
|||||||
"imageUpload": "图片上传",
|
"imageUpload": "图片上传",
|
||||||
"imageSet": "图片设置",
|
"imageSet": "图片设置",
|
||||||
"imageAdsTips": "建议上传尺寸相同的图片,推荐尺寸750*350",
|
"imageAdsTips": "建议上传尺寸相同的图片,推荐尺寸750*350",
|
||||||
|
"imageAdsSameScreenTips": "开启沉浸式样式,请确保该图片广告组件在页面中位于最顶端;为保证体验,请不要开导航栏;沉浸式样式仅在微信小程序中生效。",
|
||||||
|
"sameScreen": "沉浸式",
|
||||||
"addImageAd": "添加图片",
|
"addImageAd": "添加图片",
|
||||||
"imageUrlTip": "请上传图片",
|
"imageUrlTip": "请上传图片",
|
||||||
"imageHeight": "图片高度",
|
"imageHeight": "图片高度",
|
||||||
|
|||||||
@ -29,8 +29,8 @@
|
|||||||
"detaBirth": "出生日期",
|
"detaBirth": "出生日期",
|
||||||
"sex": "性别",
|
"sex": "性别",
|
||||||
"wxUnionid": "微信unionid",
|
"wxUnionid": "微信unionid",
|
||||||
"weappOpenid": "微信用户openid",
|
"weappOpenid": "微信小程序openid",
|
||||||
"wxOpenid": "微信小程序openid",
|
"wxOpenid": "微信用户openid",
|
||||||
"head": "会员头像",
|
"head": "会员头像",
|
||||||
"username": "用户名",
|
"username": "用户名",
|
||||||
"usernamePlaceholder": "请输入用户名",
|
"usernamePlaceholder": "请输入用户名",
|
||||||
|
|||||||
@ -4,8 +4,8 @@
|
|||||||
"isOpen": "定位开关",
|
"isOpen": "定位开关",
|
||||||
"validTime": "定位有效期",
|
"validTime": "定位有效期",
|
||||||
"minutes": "分钟",
|
"minutes": "分钟",
|
||||||
"validTimeTips": "过期后将重新获取定位信息,0为不过期",
|
"validTimeTips": "过期后将重新获取定位信息",
|
||||||
"validTimePlaceholder": "请输入定位有效期",
|
"validTimePlaceholder": "请输入定位有效期",
|
||||||
"validTimeFormatTips": "格式输入错误",
|
"validTimeFormatTips": "格式输入错误",
|
||||||
"validTimeNotZeroTips": "定位有效期不能小于0"
|
"validTimeNotZeroTips": "定位有效期不能小于5分钟"
|
||||||
}
|
}
|
||||||
@ -77,7 +77,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="t('sort')">
|
<el-form-item :label="t('sort')">
|
||||||
<el-input-number v-model="formData.sort" :min="0" max="99999999" />
|
<el-input-number v-model="formData.sort" :min="0" max="8" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-form class="page-form mt-[15px]" :model="formData" label-width="150px" ref="formRef" v-loading="loading">
|
<el-form class="page-form mt-[15px]" :model="formData" label-width="150px" ref="formRef" v-loading="loading">
|
||||||
@ -98,6 +98,9 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/aliapp')
|
||||||
|
}
|
||||||
|
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
@ -99,6 +99,9 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/aliapp')
|
||||||
|
}
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const formData = reactive<Record<string, string>>({
|
const formData = reactive<Record<string, string>>({
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-form class="page-form mt-[15px]" :model="formData" label-width="170px" ref="formRef" :rules="formRules" v-loading="loading">
|
<el-form class="page-form mt-[15px]" :model="formData" label-width="170px" ref="formRef" :rules="formRules" v-loading="loading">
|
||||||
@ -139,7 +139,9 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/weapp')
|
||||||
|
}
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
const formData = reactive<Record<string, any>>({
|
const formData = reactive<Record<string, any>>({
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
@ -63,7 +63,9 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/weapp')
|
||||||
|
}
|
||||||
const linkEvent = () => {
|
const linkEvent = () => {
|
||||||
window.open('https://mp.weixin.qq.com/', '_blank')
|
window.open('https://mp.weixin.qq.com/', '_blank')
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-form class="page-form mt-[15px]" :model="formData" label-width="150px" ref="formRef" :rules="formRules" v-loading="loading">
|
<el-form class="page-form mt-[15px]" :model="formData" label-width="150px" ref="formRef" :rules="formRules" v-loading="loading">
|
||||||
@ -129,7 +129,9 @@ import { useRoute, useRouter } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/wechat')
|
||||||
|
}
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|
||||||
const formData = reactive<Record<string, any>>({
|
const formData = reactive<Record<string, any>>({
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] pt-[20px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] pt-[20px] !border-none" shadow="never">
|
||||||
@ -60,6 +60,9 @@ import { useRouter, useRoute } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/wechat')
|
||||||
|
}
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const formData = reactive<Record<string, string>>({
|
const formData = reactive<Record<string, string>>({
|
||||||
wechat_name: '',
|
wechat_name: '',
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-form class="page-form mt-[15px]" :model="formData" label-width="150px" ref="formRef" :rules="formRules" v-loading="loading">
|
<el-form class="page-form mt-[15px]" :model="formData" label-width="150px" ref="formRef" :rules="formRules" v-loading="loading">
|
||||||
@ -92,6 +92,10 @@ import NewsCard from '@/app/views/channel/wechat/components/news-card.vue'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/channel/wechat/reply')
|
||||||
|
}
|
||||||
|
|
||||||
const showDialog = ref(false)
|
const showDialog = ref(false)
|
||||||
|
|
||||||
const formData: any = reactive({
|
const formData: any = reactive({
|
||||||
|
|||||||
@ -185,6 +185,12 @@
|
|||||||
<el-radio :label="'italics'">{{t('btnTextItalics')}}</el-radio>
|
<el-radio :label="'italics'">{{t('btnTextItalics')}}</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item :label="t('topRounded')">
|
||||||
|
<el-slider v-model="diyStore.editComponent.topElementRounded" show-input size="small" class="ml-[10px] diy-nav-slider" :max="50" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item :label="t('bottomRounded')">
|
||||||
|
<el-slider v-model="diyStore.editComponent.bottomElementRounded" show-input size="small" class="ml-[10px] diy-nav-slider" :max="50" />
|
||||||
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -94,7 +94,7 @@ import { img } from '@/utils/common'
|
|||||||
import { range } from 'lodash-es'
|
import { range } from 'lodash-es'
|
||||||
|
|
||||||
const diyStore = useDiyStore()
|
const diyStore = useDiyStore()
|
||||||
diyStore.editComponent.ignore = ['pageBgColor','marginTop','marginBottom','marginBoth'] // 忽略公共属性
|
diyStore.editComponent.ignore = ['pageBgColor','marginTop','marginBottom','marginBoth','componentBgUrl'] // 忽略公共属性
|
||||||
|
|
||||||
// 组件验证
|
// 组件验证
|
||||||
diyStore.editComponent.verify = (index: number) => {
|
diyStore.editComponent.verify = (index: number) => {
|
||||||
|
|||||||
@ -38,7 +38,7 @@ import useDiyStore from '@/stores/modules/diy'
|
|||||||
import { img } from '@/utils/common'
|
import { img } from '@/utils/common'
|
||||||
|
|
||||||
const diyStore = useDiyStore()
|
const diyStore = useDiyStore()
|
||||||
diyStore.editComponent.ignore = [] // 忽略公共属性
|
diyStore.editComponent.ignore = ['componentBgUrl'] // 忽略公共属性
|
||||||
|
|
||||||
// 组件验证
|
// 组件验证
|
||||||
diyStore.editComponent.verify = (index: number) => {
|
diyStore.editComponent.verify = (index: number) => {
|
||||||
|
|||||||
@ -5,6 +5,11 @@
|
|||||||
<h3 class="mb-[10px]">{{ t('imageSet') }}</h3>
|
<h3 class="mb-[10px]">{{ t('imageSet') }}</h3>
|
||||||
<el-form label-width="80px" class="px-[10px]">
|
<el-form label-width="80px" class="px-[10px]">
|
||||||
|
|
||||||
|
<el-form-item :label="t('sameScreen')" v-if="diyStore.currentIndex == 0">
|
||||||
|
<el-switch v-model="diyStore.editComponent.isSameScreen" />
|
||||||
|
<div class="text-sm text-gray-400 leading-[1.4]">{{ t('imageAdsSameScreenTips') }}</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="t('imageHeight')" class="display-block">
|
<el-form-item :label="t('imageHeight')" class="display-block">
|
||||||
<el-input v-model.trim="diyStore.editComponent.imageHeight" :placeholder="t('imageHeightPlaceholder')" clearable maxlength="10" @blur="blurImageHeight">
|
<el-input v-model.trim="diyStore.editComponent.imageHeight" :placeholder="t('imageHeightPlaceholder')" clearable maxlength="10" @blur="blurImageHeight">
|
||||||
<template #append>px</template>
|
<template #append>px</template>
|
||||||
@ -52,7 +57,7 @@ import { range } from 'lodash-es'
|
|||||||
import useDiyStore from '@/stores/modules/diy'
|
import useDiyStore from '@/stores/modules/diy'
|
||||||
|
|
||||||
const diyStore = useDiyStore()
|
const diyStore = useDiyStore()
|
||||||
diyStore.editComponent.ignore = [] // 忽略公共属性
|
diyStore.editComponent.ignore = ['componentBgUrl'] // 忽略公共属性
|
||||||
|
|
||||||
// 组件验证
|
// 组件验证
|
||||||
diyStore.editComponent.verify = (index: number) => {
|
diyStore.editComponent.verify = (index: number) => {
|
||||||
|
|||||||
@ -102,9 +102,31 @@ const changeStyle = (item:any) => {
|
|||||||
const confirmStyle = () => {
|
const confirmStyle = () => {
|
||||||
diyStore.editComponent.styleName = selectStyle.title;
|
diyStore.editComponent.styleName = selectStyle.title;
|
||||||
diyStore.editComponent.style = selectStyle.value;
|
diyStore.editComponent.style = selectStyle.value;
|
||||||
|
initStyle(diyStore.editComponent.style);
|
||||||
showDialog.value = false
|
showDialog.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const initStyle = (style: any) => {
|
||||||
|
if (style == 'style-1') {
|
||||||
|
diyStore.editComponent.bottomRounded = 0;
|
||||||
|
diyStore.editComponent.topRounded = 12;
|
||||||
|
} else if (style == 'style-2') {
|
||||||
|
diyStore.editComponent.bottomRounded = 0;
|
||||||
|
diyStore.editComponent.topRounded = 12;
|
||||||
|
} else if (style == 'style-3') {
|
||||||
|
diyStore.editComponent.bottomRounded = 12;
|
||||||
|
diyStore.editComponent.topRounded = 12;
|
||||||
|
} else if (style == 'style-4') {
|
||||||
|
diyStore.editComponent.bottomRounded = 12;
|
||||||
|
diyStore.editComponent.topRounded = 12;
|
||||||
|
} else if (style == 'style-5') {
|
||||||
|
diyStore.editComponent.bottomRounded = 12;
|
||||||
|
diyStore.editComponent.topRounded = 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
defineExpose({})
|
defineExpose({})
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -125,7 +125,7 @@ import { img } from '@/utils/common'
|
|||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
|
|
||||||
const diyStore = useDiyStore()
|
const diyStore = useDiyStore()
|
||||||
diyStore.editComponent.ignore = [] // 忽略公共属性
|
diyStore.editComponent.ignore = ['componentBgUrl'] // 忽略公共属性
|
||||||
|
|
||||||
// 组件验证
|
// 组件验证
|
||||||
diyStore.editComponent.verify = (index: number) => {
|
diyStore.editComponent.verify = (index: number) => {
|
||||||
|
|||||||
@ -129,6 +129,7 @@ import { t } from '@/lang'
|
|||||||
import { getApps,getDiyPageList, deleteDiyPage, getDiyTemplate, editDiyPageShare, setUseDiyPage } from '@/app/api/diy'
|
import { getApps,getDiyPageList, deleteDiyPage, getDiyTemplate, editDiyPageShare, setUseDiyPage } from '@/app/api/diy'
|
||||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
import { setTablePageStorage,getTablePageStorage } from "@/utils/common";
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -234,12 +235,13 @@ const loadDiyPageList = (page: number = 1) => {
|
|||||||
diyPageTableData.loading = false
|
diyPageTableData.loading = false
|
||||||
diyPageTableData.data = res.data.data
|
diyPageTableData.data = res.data.data
|
||||||
diyPageTableData.total = res.data.total
|
diyPageTableData.total = res.data.total
|
||||||
|
setTablePageStorage(diyPageTableData.page, diyPageTableData.limit, diyPageTableData.searchParam);
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
diyPageTableData.loading = false
|
diyPageTableData.loading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
loadDiyPageList()
|
loadDiyPageList(getTablePageStorage(diyPageTableData.searchParam).page);
|
||||||
|
|
||||||
// 编辑自定义页面
|
// 编辑自定义页面
|
||||||
const editEvent = (data: any) => {
|
const editEvent = (data: any) => {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never" v-loading="loading">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never" v-loading="loading">
|
||||||
|
|||||||
@ -89,6 +89,7 @@ const setFormData = async (row: any = null) => {
|
|||||||
const getRefundListInfo = async (no) => {
|
const getRefundListInfo = async (no) => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
formData.value = null
|
formData.value = null
|
||||||
|
refundList.value = [];
|
||||||
await getPayRefundInfo(no).then(({ data }) => {
|
await getPayRefundInfo(no).then(({ data }) => {
|
||||||
formData.value = data
|
formData.value = data
|
||||||
refundList.value.push(data)
|
refundList.value.push(data)
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none relative" shadow="never" v-if="formData">
|
<el-card class="box-card mt-[15px] !border-none relative" shadow="never" v-if="formData">
|
||||||
@ -66,6 +66,9 @@ import { ArrowLeft } from '@element-plus/icons-vue'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/finance/refund')
|
||||||
|
}
|
||||||
|
|
||||||
const refundNo: any = route.query.refund_no
|
const refundNo: any = route.query.refund_no
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<el-container :class="['w-full h-screen bg-page flex flex-col', { 'login-wrap': loginType == 'admin' }, { 'site-login-wrap': loginType == 'site' }]">
|
<el-container :class="['w-full h-screen bg-page flex flex-col', { 'login-wrap': loginType == 'admin' }, { 'site-login-wrap': loginType == 'site' }]">
|
||||||
<!-- 平台端登录 -->
|
<!-- 平台端登录 -->
|
||||||
<el-main class="login-main items-center justify-center flex-1 h-0" v-if="loginType == 'admin'">
|
<el-main class="login-main items-center justify-center flex-1 h-0" v-if="loginType == 'admin'">
|
||||||
<div class="flex rounded-2xl overflow-hidden">
|
<div class="flex rounded-2xl shadow overflow-hidden">
|
||||||
<div class="login-main-left w-[450px] flex flex-wrap justify-center">
|
<div class="login-main-left w-[450px] flex flex-wrap justify-center">
|
||||||
<template v-if="loginConfig">
|
<template v-if="loginConfig">
|
||||||
<el-image v-if="loginConfig.bg&&!imgLoading" class="w-[450px] h-[400px]" :src="img(loginConfig.bg)" fit="cover" />
|
<el-image v-if="loginConfig.bg&&!imgLoading" class="w-[450px] h-[400px]" :src="img(loginConfig.bg)" fit="cover" />
|
||||||
@ -10,32 +10,19 @@
|
|||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="login flex flex-col w-[400px] h-[400px] p-[40px]">
|
<div class="login flex flex-col w-[400px] h-[400px] p-[40px]">
|
||||||
<h3 class="text-center text-lg font-bold mb-[10px]">{{ webSite.site_name || t('siteTitle') }}</h3>
|
<h3 class="text-center text-2xl mb-[26px]">{{ webSite.site_name || t('siteTitle') }}{{ t('platform') }}</h3>
|
||||||
<h3 class="text-center text-2xl font-bold mb-[26px]">{{ t('platform') }}</h3>
|
<el-form :model="form" ref="formRef" :rules="formRules" class="mt-[30px]">
|
||||||
<el-form :model="form" ref="formRef" :rules="formRules">
|
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input v-model.trim="form.username" :placeholder="t('userPlaceholder')" autocomplete="off" @keyup.enter="handleLogin(formRef)" class="h-[40px] input-with-select">
|
<el-input v-model.trim="form.username" :placeholder="t('userPlaceholder')" autocomplete="off" @keyup.enter="handleLogin(formRef)" class="h-[40px]"></el-input>
|
||||||
<template #prepend>
|
|
||||||
<icon name="element User" />
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item prop="password">
|
<el-form-item prop="password" class="mt-[30px]">
|
||||||
<el-input v-model.trim="form.password" :placeholder="t('passwordPlaceholder')" type="password"
|
<el-input v-model.trim="form.password" :placeholder="t('passwordPlaceholder')" type="password" autocomplete="new-password" @keyup.enter="handleLogin(formRef)" :show-password="true" class="h-[40px]"></el-input>
|
||||||
autocomplete="new-password"
|
|
||||||
@keyup.enter="handleLogin(formRef)" :show-password="true"
|
|
||||||
class="h-[40px] input-with-select">
|
|
||||||
<template #prepend>
|
|
||||||
<icon name="element Lock" />
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" class="mt-[30px] h-[40px] w-full" @click="handleLogin(formRef)" :loading="loading">{{ loading ? t('logging') : t('login') }}</el-button>
|
<el-button type="primary" class="mt-[30px] !h-[40px] w-full" @click="handleLogin(formRef)" :loading="loading">{{ loading ? t('logging') : t('login') }}</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -43,69 +30,57 @@
|
|||||||
|
|
||||||
<!-- 站点端登录 -->
|
<!-- 站点端登录 -->
|
||||||
<el-main class="login-main w-full login-site-main items-center h-screen justify-evenly bg-[#F8FAFF]" v-else-if="!imgLoading && loginType == 'site'">
|
<el-main class="login-main w-full login-site-main items-center h-screen justify-evenly bg-[#F8FAFF]" v-else-if="!imgLoading && loginType == 'site'">
|
||||||
<div class="flex rounded-2xl overflow-hidden h-screen w-full relative">
|
<div class="flex overflow-hidden h-screen w-full relative">
|
||||||
<template v-if="loginConfig">
|
<template v-if="loginConfig">
|
||||||
<img v-if="loginConfig.site_bg&&!imgLoading" class="hidden h-[100%] lg:block" :src="img(loginConfig.site_bg)" />
|
<img v-if="loginConfig.site_bg&&!imgLoading" class="hidden h-[100%] lg:block" :src="img(loginConfig.site_bg)" />
|
||||||
<img v-else class="hidden h-[100%] lg:block" src="@/app/assets/images/site_login_bg.png" />
|
<img v-else class="hidden h-[100%] lg:block" src="@/app/assets/images/login/site_login_bg.png" />
|
||||||
</template>
|
</template>
|
||||||
<div class="w-[100%] bg-[#F8FAFF] flex flex-col absolute right-0 top-0 h-screen lg:w-[60%]">
|
<div class="w-[100%] lg:w-[60%] h-screen flex flex-col absolute right-0 top-0 bg-[#F8FAFF]">
|
||||||
<div class="flex justify-center items-center flex-1 h-0">
|
<div class="flex justify-center items-center flex-1 h-0">
|
||||||
<div class="site-login-item w-[45%] py-[30px] relative rounded-[13px] max-w-[350px] bg-[#fff]">
|
<div class="site-login-item w-[400px] h-[380px] p-[40px] rounded-2xl shadow bg-[#fff]">
|
||||||
<div class="w-[80%] mx-auto">
|
|
||||||
<h3 class="text-3xl mb-[30px]">{{ t('siteLogin') }}</h3>
|
<h3 class="text-3xl mb-[30px]">{{ t('siteLogin') }}</h3>
|
||||||
<el-form :model="form" ref="formRef" :rules="formRules">
|
<el-form :model="form" ref="formRef" :rules="formRules">
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input v-model.trim="form.username" @keyup.enter="handleLogin(formRef)" autocomplete="off" class="w-50 m-1 h-[40px]" :placeholder="t('userPlaceholder')">
|
<el-input v-model.trim="form.username" @keyup.enter="handleLogin(formRef)" autocomplete="off" class="h-[40px]" :placeholder="t('userPlaceholder')"></el-input>
|
||||||
<template #prefix>
|
|
||||||
<icon name="element User" />
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item prop="password">
|
<el-form-item prop="password" class="mt-[30px]">
|
||||||
<el-input type="password" v-model.trim="form.password" @keyup.enter="handleLogin(formRef)" autocomplete="new-password" :show-password="true" class="w-50 m-1 h-[40px]" :placeholder="t('passwordPlaceholder')">
|
<el-input type="password" v-model.trim="form.password" @keyup.enter="handleLogin(formRef)" autocomplete="new-password" :show-password="true" class="h-[40px]" :placeholder="t('passwordPlaceholder')"></el-input>
|
||||||
<template #prefix>
|
|
||||||
<icon name="element Lock" />
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" class="mt-[30px] h-[40px] w-full" @click="handleLogin(formRef)" :loading="loading">{{ loading ? t('logging') : t('login') }}</el-button>
|
<el-button type="primary" class="mt-[30px] !h-[40px] w-full" @click="handleLogin(formRef)" :loading="loading">{{ loading ? t('logging') : t('login') }}</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="flex items-center justify-center mt-[20px] text-[#999] text-sm pb-8 " v-if="copyright">
|
<div class="flex items-center justify-center mt-[20px] pb-[20px] text-sm text-[#999]" v-if="copyright">
|
||||||
<a :href="copyright.gov_url" v-if="copyright.gov_record" class="flex" target="_blank">
|
|
||||||
<img src="@/app/assets/images/gov_icon.png" alt="" class="h-[20px] mr-1">
|
|
||||||
<span class="mr-3">公安备案号:{{ copyright.gov_record }}</span>
|
|
||||||
</a>
|
|
||||||
<a href="https://beian.miit.gov.cn/" target="_blank" v-if="copyright.icp">
|
|
||||||
<span class="mr-3">备案号:{{ copyright.icp }}</span>
|
|
||||||
</a>
|
|
||||||
<a :href="copyright.copyright_link" target="_blank">
|
<a :href="copyright.copyright_link" target="_blank">
|
||||||
|
<span class="mr-3" v-if="copyright.copyright_desc">{{ copyright.copyright_desc }}</span>
|
||||||
<span class="mr-3" v-if="copyright.company_name">{{ copyright.company_name }}</span>
|
<span class="mr-3" v-if="copyright.company_name">{{ copyright.company_name }}</span>
|
||||||
<span class="mr-3" v-if="copyright.copyright_desc">©{{ copyright.copyright_desc }}</span>
|
</a>
|
||||||
|
<a href="https://beian.miit.gov.cn/" v-if="copyright.icp" target="_blank">
|
||||||
|
<span class="mr-3">{{ copyright.icp }}</span>
|
||||||
|
</a>
|
||||||
|
<a :href="copyright.gov_url" v-if="copyright.gov_record" target="_blank">
|
||||||
|
<span class="mr-3">{{ copyright.gov_record }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-main>
|
</el-main>
|
||||||
|
|
||||||
<div class="flex items-center justify-center mt-[20px] text-[#999] text-sm pb-8" v-if="copyright && loginType == 'admin'">
|
<div class="flex items-center justify-center mt-[20px] pb-[20px] text-sm text-[#999]" v-if="copyright && loginType == 'admin'">
|
||||||
<a :href="copyright.gov_url" v-if="copyright.gov_record" class="flex" target="_blank">
|
|
||||||
<img src="@/app/assets/images/gov_icon.png" alt="" class="h-[20px] mr-1">
|
|
||||||
<span class="mr-3">公安备案号:{{ copyright.gov_record }}</span>
|
|
||||||
</a>
|
|
||||||
<a href="https://beian.miit.gov.cn/" target="_blank" v-if="copyright.icp">
|
|
||||||
<span class="mr-3">备案号:{{ copyright.icp }}</span>
|
|
||||||
</a>
|
|
||||||
<a :href="copyright.copyright_link" target="_blank">
|
<a :href="copyright.copyright_link" target="_blank">
|
||||||
|
<span class="mr-3" v-if="copyright.copyright_desc">{{ copyright.copyright_desc }}</span>
|
||||||
<span class="mr-3" v-if="copyright.company_name">{{ copyright.company_name }}</span>
|
<span class="mr-3" v-if="copyright.company_name">{{ copyright.company_name }}</span>
|
||||||
<span class="mr-3" v-if="copyright.copyright_desc">©{{ copyright.copyright_desc }}</span>
|
</a>
|
||||||
|
<a href="https://beian.miit.gov.cn/" v-if="copyright.icp" target="_blank">
|
||||||
|
<span class="mr-3">{{ copyright.icp }}</span>
|
||||||
|
</a>
|
||||||
|
<a :href="copyright.gov_url" v-if="copyright.gov_record" target="_blank">
|
||||||
|
<span class="mr-3">{{ copyright.gov_record }}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -216,37 +191,16 @@ const loginFn = (data = {}) => {
|
|||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.site-warp {
|
|
||||||
background-image: url("@/app/assets/images/login/site_bg.png");
|
|
||||||
background-color: #fff;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
background-size: 100% 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.site-login-wrap {
|
|
||||||
// background-image: url('@/app/assets/images/back_login.jpg');
|
|
||||||
// background-repeat: no-repeat;
|
|
||||||
// background-size: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.input-with-select .el-input-group__prepend {
|
|
||||||
background-color: var(--el-fill-color-blank);
|
|
||||||
padding: 0 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.login-main {
|
.login-main {
|
||||||
display: flex !important;
|
display: flex !important;
|
||||||
}
|
|
||||||
|
|
||||||
.login {
|
.login {
|
||||||
background: var(--el-bg-color);
|
background: var(--el-bg-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.admin_name {
|
.el-form-item__error {
|
||||||
overflow: hidden;
|
top : 45px;
|
||||||
white-space: nowrap;
|
}
|
||||||
text-overflow: ellipsis;
|
|
||||||
-o-text-overflow: ellipsis;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 750px) {
|
@media only screen and (max-width: 750px) {
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container" v-loading="loading">
|
<div class="main-container" v-loading="loading">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
@ -101,6 +101,9 @@ import useAppStore from '@/stores/modules/app'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/marketing/verify')
|
||||||
|
}
|
||||||
|
|
||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
<el-input v-model.trim="formData.memo" type="textarea" rows="4" clearable :placeholder="t('memoPlaceholder')" class="input-width" maxlength="200" show-word-limit />
|
<el-input v-model.trim="formData.memo" type="textarea" rows="4" clearable :placeholder="t('memoPlaceholder')" class="input-width" maxlength="200" show-word-limit />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('sort')" prop="sort">
|
<el-form-item :label="t('sort')" prop="sort">
|
||||||
<el-input v-model.trim="formData.sort" clearable maxlength="6" show-word-limit :placeholder="t('sortPlaceholder')" class="input-width" @keyup="filterNumber($event)" />
|
<el-input v-model.trim="formData.sort" clearable maxlength="8" show-word-limit :placeholder="t('sortPlaceholder')" class="input-width" @keyup="filterNumber($event)" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|||||||
@ -73,6 +73,7 @@ import { t } from '@/lang'
|
|||||||
import { getMemberLevelPageList, deleteMemberLevel } from '@/app/api/member'
|
import { getMemberLevelPageList, deleteMemberLevel } from '@/app/api/member'
|
||||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
|
import { setTablePageStorage,getTablePageStorage } from "@/utils/common";
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -112,11 +113,12 @@ const loadMemberLevelList = (page: number = 1) => {
|
|||||||
memberLevelTableData.loading = false
|
memberLevelTableData.loading = false
|
||||||
memberLevelTableData.data = res.data.data
|
memberLevelTableData.data = res.data.data
|
||||||
memberLevelTableData.total = res.data.total
|
memberLevelTableData.total = res.data.total
|
||||||
|
setTablePageStorage(memberLevelTableData.page, memberLevelTableData.limit, memberLevelTableData.searchParam);
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
memberLevelTableData.loading = false
|
memberLevelTableData.loading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
loadMemberLevelList()
|
loadMemberLevelList(getTablePageStorage(memberLevelTableData.searchParam).page);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加会员标签
|
* 添加会员标签
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never" v-loading="loading">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never" v-loading="loading">
|
||||||
@ -28,12 +28,12 @@
|
|||||||
|
|
||||||
<h3 class="panel-title !text-sm">{{ t('levelBenefits') }}</h3>
|
<h3 class="panel-title !text-sm">{{ t('levelBenefits') }}</h3>
|
||||||
<div class="pl-[100px]">
|
<div class="pl-[100px]">
|
||||||
<member-benefits ref="benefitsRef" v-model="formData.level_benefits"/>
|
<member-benefits v-if="!loading" ref="benefitsRef" v-model="formData.level_benefits"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3 class="panel-title !text-sm">{{ t('levelGift') }}</h3>
|
<h3 class="panel-title !text-sm">{{ t('levelGift') }}</h3>
|
||||||
<div class="pl-[100px]">
|
<div class="pl-[100px]">
|
||||||
<member-gift ref="giftRef" v-model="formData.level_gifts"/>
|
<member-gift v-if="!loading" ref="giftRef" v-model="formData.level_gifts"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</el-card>
|
</el-card>
|
||||||
@ -61,6 +61,10 @@ const route = useRoute()
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
|
||||||
|
const back = () => {
|
||||||
|
router.push('/member/level')
|
||||||
|
}
|
||||||
|
|
||||||
const benefitsRef = ref(null)
|
const benefitsRef = ref(null)
|
||||||
const giftRef = ref(null)
|
const giftRef = ref(null)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
|
|||||||
@ -104,7 +104,7 @@ import { t } from '@/lang'
|
|||||||
import { ElMessageBox, FormInstance } from 'element-plus'
|
import { ElMessageBox, FormInstance } from 'element-plus'
|
||||||
import { useRoute, useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { getPosterPageList,getPosterType,modifyPosterStatus,modifyPosterDefault,deletePoster,getPreviewPoster } from '@/app/api/poster'
|
import { getPosterPageList,getPosterType,modifyPosterStatus,modifyPosterDefault,deletePoster,getPreviewPoster } from '@/app/api/poster'
|
||||||
import { img } from '@/utils/common'
|
import { img,setTablePageStorage,getTablePageStorage } from '@/utils/common'
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@ -192,12 +192,13 @@ const loadPosterPageList = (page: number = 1) => {
|
|||||||
posterTableData.loading = false
|
posterTableData.loading = false
|
||||||
posterTableData.data = res.data.data
|
posterTableData.data = res.data.data
|
||||||
posterTableData.total = res.data.total
|
posterTableData.total = res.data.total
|
||||||
|
setTablePageStorage(posterTableData.page, posterTableData.limit, posterTableData.searchParam);
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
posterTableData.loading = false
|
posterTableData.loading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPosterPageList()
|
loadPosterPageList(getTablePageStorage(posterTableData.searchParam).page);
|
||||||
|
|
||||||
// 编辑自定义海报
|
// 编辑自定义海报
|
||||||
const editEvent = (data: any) => {
|
const editEvent = (data: any) => {
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never" v-loading="loading">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never" v-loading="loading">
|
||||||
|
|||||||
@ -57,7 +57,7 @@ const formRules = computed(() => {
|
|||||||
callback(new Error(t('validTimePlaceholder')))
|
callback(new Error(t('validTimePlaceholder')))
|
||||||
} else if (isNaN(value) || !/^\d{0,10}$/.test(value)) {
|
} else if (isNaN(value) || !/^\d{0,10}$/.test(value)) {
|
||||||
callback(new Error(t('validTimeFormatTips')))
|
callback(new Error(t('validTimeFormatTips')))
|
||||||
} else if (value < 0) {
|
} else if (value < 5) {
|
||||||
callback(new Error(t('validTimeNotZeroTips')))
|
callback(new Error(t('validTimeNotZeroTips')))
|
||||||
} else {
|
} else {
|
||||||
callback()
|
callback()
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container" v-loading="loading">
|
<div class="main-container" v-loading="loading">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container" v-loading="loading">
|
<div class="main-container" v-loading="loading">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :icon="ArrowLeft" @back="$router.back()">
|
<el-page-header :icon="ArrowLeft" @back="back()">
|
||||||
<template #content>
|
<template #content>
|
||||||
<span class="text-large font-600 mr-3">{{ pageName }}</span>
|
<span class="text-large font-600 mr-3">{{ pageName }}</span>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<div class="main-container" v-loading="loading">
|
<div class="main-container" v-loading="loading">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
@ -137,6 +137,10 @@ import { ElMessageBox } from 'element-plus'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
|
||||||
|
const back = () => {
|
||||||
|
router.push('/admin/site/user')
|
||||||
|
}
|
||||||
const uid: number = parseInt(route.query.uid || 0)
|
const uid: number = parseInt(route.query.uid || 0)
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const detail = ref({})
|
const detail = ref({})
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div class="main-container" v-loading="loading">
|
<div class="main-container" v-loading="loading">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
@ -97,6 +97,10 @@ import { useRouter, useRoute } from 'vue-router'
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
|
||||||
|
const back = () => {
|
||||||
|
router.push('/tools/addon')
|
||||||
|
}
|
||||||
const form = ref({
|
const form = ref({
|
||||||
title: '',
|
title: '',
|
||||||
icon: '',
|
icon: '',
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div class="main-container" v-loading="loading">
|
<div class="main-container" v-loading="loading">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :content="pageName" :icon="ArrowLeft" @back="$router.back()" />
|
<el-page-header :content="pageName" :icon="ArrowLeft" @back="back()" />
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
<el-card class="box-card mt-[15px] !border-none" shadow="never">
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<div class="main-container">
|
<div class="main-container">
|
||||||
|
|
||||||
<el-card class="card !border-none" shadow="never">
|
<el-card class="card !border-none" shadow="never">
|
||||||
<el-page-header :icon="ArrowLeft" @back="$router.back()">
|
<el-page-header :icon="ArrowLeft" @back="back()">
|
||||||
<template #content>
|
<template #content>
|
||||||
<span class="text-large font-600 mr-3">{{ pageName }}</span>
|
<span class="text-large font-600 mr-3">{{ pageName }}</span>
|
||||||
</template>
|
</template>
|
||||||
@ -122,7 +122,11 @@ import { ElMessageBox, ElMessage, FormInstance } from 'element-plus'
|
|||||||
import { useRouter, useRoute } from 'vue-router'
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const router = useRouter()
|
||||||
const pageName = route.meta.title
|
const pageName = route.meta.title
|
||||||
|
const back = () => {
|
||||||
|
router.push('/tools/schedule')
|
||||||
|
}
|
||||||
|
|
||||||
const cronTableData = reactive({
|
const cronTableData = reactive({
|
||||||
page: 1,
|
page: 1,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
||||||
<el-row class="w-100 h-full w-full">
|
<el-row class="w-100 h-full w-full">
|
||||||
<el-col :span="12">
|
<el-col :span="10">
|
||||||
<div class="left-panel h-full flex items-center">
|
<div class="left-panel h-full flex items-center">
|
||||||
<!-- 左侧菜单折叠 -->
|
<!-- 左侧菜单折叠 -->
|
||||||
<!-- <div class="navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
<!-- <div class="navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
||||||
@ -20,8 +20,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="14">
|
||||||
<div class="right-panel h-full flex items-center justify-end">
|
<div class="right-panel h-full flex items-center justify-end">
|
||||||
|
<div class="flex items-center flex-shrink-0 hidden-xs-only">
|
||||||
|
<el-dropdown trigger="hover" :hide-on-click="false" popper-class="site-info-wrap" class="mr-[8px]">
|
||||||
|
<!-- 状态 -->
|
||||||
|
<div class="mx-[8px] bg-[#f6f6f6] border-[1px] border-solid border-[#eee] rounded-[4px] px-[9px] py-[6px] flex items-center">
|
||||||
|
<span class="mr-[6px] text-[12px] !text-[#333]">{{siteInfo.site_name}}</span>
|
||||||
|
<span class="!text-[10px] text-[#f56c6c]" :class="{'!text-[#67c23a]': siteInfo.status == 1, '!text-[#f56c6c]': siteInfo.status == 3}">{{ siteInfo.status_name }}</span>
|
||||||
|
</div>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 站点id -->
|
||||||
|
<div class="text-[14px]">站点编号:{{siteInfo.site_id}}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 到期时间 -->
|
||||||
|
<div v-if="siteInfo.expire_time == 0" class="text-[14px]">到期时间:永久</div>
|
||||||
|
<div v-else class="text-[14px]">到期时间:{{ siteInfo.expire_time }}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
<!-- 预览 只有站点时展示-->
|
<!-- 预览 只有站点时展示-->
|
||||||
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
||||||
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
||||||
@ -65,8 +87,9 @@ import layoutSetting from './layout-setting.vue'
|
|||||||
import userInfo from './user-info.vue'
|
import userInfo from './user-info.vue'
|
||||||
import { useFullscreen } from '@vueuse/core'
|
import { useFullscreen } from '@vueuse/core'
|
||||||
import useSystemStore from '@/stores/modules/system'
|
import useSystemStore from '@/stores/modules/system'
|
||||||
|
import useUserStore from '@/stores/modules/user'
|
||||||
import useAppStore from '@/stores/modules/app'
|
import useAppStore from '@/stores/modules/app'
|
||||||
import { useRoute,useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import storage from '@/utils/storage'
|
import storage from '@/utils/storage'
|
||||||
|
|
||||||
@ -78,6 +101,11 @@ const route = useRoute()
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const siteInfo:any = computed(() => {
|
||||||
|
return userStore.siteInfo
|
||||||
|
})
|
||||||
|
|
||||||
const dark = computed(() => {
|
const dark = computed(() => {
|
||||||
return systemStore.dark
|
return systemStore.dark
|
||||||
})
|
})
|
||||||
@ -154,7 +182,7 @@ const toPreview = () => {
|
|||||||
const url = router.resolve({
|
const url = router.resolve({
|
||||||
path: '/preview/wap',
|
path: '/preview/wap',
|
||||||
query: {
|
query: {
|
||||||
page:'/'
|
page: '/'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.open(url.href)
|
window.open(url.href)
|
||||||
@ -182,5 +210,10 @@ const toPreview = () => {
|
|||||||
background-color: var(--el-color-primary);
|
background-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
:deep(.el-dropdown-menu__item) {
|
||||||
|
&:focus {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #333 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
||||||
<el-row class="w-100 h-full w-full">
|
<el-row class="w-100 h-full w-full">
|
||||||
<el-col :span="12">
|
<el-col :span="10">
|
||||||
<div class="left-panel h-full flex items-center">
|
<div class="left-panel h-full flex items-center">
|
||||||
<!-- 左侧菜单折叠 -->
|
<!-- 左侧菜单折叠 -->
|
||||||
<div class="hidden-sm-and-up navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
<div class="hidden-sm-and-up navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
||||||
@ -20,8 +20,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="14">
|
||||||
<div class="right-panel h-full flex items-center justify-end">
|
<div class="right-panel h-full flex items-center justify-end">
|
||||||
|
<div class="flex items-center flex-shrink-0 hidden-xs-only">
|
||||||
|
<el-dropdown trigger="hover" :hide-on-click="false" popper-class="site-info-wrap" class="mr-[8px]">
|
||||||
|
<!-- 状态 -->
|
||||||
|
<div class="mx-[8px] bg-[#f6f6f6] border-[1px] border-solid border-[#eee] rounded-[4px] px-[9px] py-[6px] flex items-center">
|
||||||
|
<span class="mr-[6px] text-[12px] !text-[#333]">{{siteInfo.site_name}}</span>
|
||||||
|
<span class="!text-[10px] text-[#f56c6c]" :class="{'!text-[#67c23a]': siteInfo.status == 1, '!text-[#f56c6c]': siteInfo.status == 3}">{{ siteInfo.status_name }}</span>
|
||||||
|
</div>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 站点id -->
|
||||||
|
<div class="text-[14px]">站点编号:{{siteInfo.site_id}}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 到期时间 -->
|
||||||
|
<div v-if="siteInfo.expire_time == 0" class="text-[14px]">到期时间:永久</div>
|
||||||
|
<div v-else class="text-[14px]">到期时间:{{ siteInfo.expire_time }}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
<!-- 预览 只有站点时展示-->
|
<!-- 预览 只有站点时展示-->
|
||||||
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
||||||
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
||||||
@ -65,8 +87,9 @@ import layoutSetting from './layout-setting.vue'
|
|||||||
import userInfo from './user-info.vue'
|
import userInfo from './user-info.vue'
|
||||||
import { useFullscreen } from '@vueuse/core'
|
import { useFullscreen } from '@vueuse/core'
|
||||||
import useSystemStore from '@/stores/modules/system'
|
import useSystemStore from '@/stores/modules/system'
|
||||||
|
import useUserStore from '@/stores/modules/user'
|
||||||
import useAppStore from '@/stores/modules/app'
|
import useAppStore from '@/stores/modules/app'
|
||||||
import { useRoute,useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import storage from '@/utils/storage'
|
import storage from '@/utils/storage'
|
||||||
|
|
||||||
@ -78,6 +101,11 @@ const route = useRoute()
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const siteInfo:any = computed(() => {
|
||||||
|
return userStore.siteInfo
|
||||||
|
})
|
||||||
|
|
||||||
const dark = computed(() => {
|
const dark = computed(() => {
|
||||||
return systemStore.dark
|
return systemStore.dark
|
||||||
})
|
})
|
||||||
@ -182,5 +210,11 @@ const toPreview = () => {
|
|||||||
background-color: var(--el-color-primary);
|
background-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
:deep(.el-dropdown-menu__item) {
|
||||||
|
&:focus {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #333 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
||||||
<el-row class="w-100 h-full w-full">
|
<el-row class="w-100 h-full w-full">
|
||||||
<el-col :span="12">
|
<el-col :span="10">
|
||||||
<div class="left-panel h-full flex items-center">
|
<div class="left-panel h-full flex items-center">
|
||||||
<!-- 左侧菜单折叠 -->
|
<!-- 左侧菜单折叠 -->
|
||||||
<div class="hidden-sm-and-up navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
<div class="hidden-sm-and-up navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
||||||
@ -20,8 +20,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="14">
|
||||||
<div class="right-panel h-full flex items-center justify-end">
|
<div class="right-panel h-full flex items-center justify-end">
|
||||||
|
<div class="flex items-center flex-shrink-0 hidden-xs-only">
|
||||||
|
<el-dropdown trigger="hover" :hide-on-click="false" popper-class="site-info-wrap" class="mr-[8px]">
|
||||||
|
<!-- 状态 -->
|
||||||
|
<div class="mx-[8px] bg-[#f6f6f6] border-[1px] border-solid border-[#eee] rounded-[4px] px-[9px] py-[6px] flex items-center">
|
||||||
|
<span class="mr-[6px] text-[12px] !text-[#333]">{{siteInfo.site_name}}</span>
|
||||||
|
<span class="!text-[10px] text-[#f56c6c]" :class="{'!text-[#67c23a]': siteInfo.status == 1, '!text-[#f56c6c]': siteInfo.status == 3}">{{ siteInfo.status_name }}</span>
|
||||||
|
</div>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 站点id -->
|
||||||
|
<div class="text-[14px]">站点编号:{{siteInfo.site_id}}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 到期时间 -->
|
||||||
|
<div v-if="siteInfo.expire_time == 0" class="text-[14px]">到期时间:永久</div>
|
||||||
|
<div v-else class="text-[14px]">到期时间:{{ siteInfo.expire_time }}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
<!-- 预览 只有站点时展示-->
|
<!-- 预览 只有站点时展示-->
|
||||||
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
||||||
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
||||||
@ -65,8 +87,9 @@ import layoutSetting from './layout-setting.vue'
|
|||||||
import userInfo from './user-info.vue'
|
import userInfo from './user-info.vue'
|
||||||
import { useFullscreen } from '@vueuse/core'
|
import { useFullscreen } from '@vueuse/core'
|
||||||
import useSystemStore from '@/stores/modules/system'
|
import useSystemStore from '@/stores/modules/system'
|
||||||
|
import useUserStore from '@/stores/modules/user'
|
||||||
import useAppStore from '@/stores/modules/app'
|
import useAppStore from '@/stores/modules/app'
|
||||||
import { useRoute,useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import storage from '@/utils/storage'
|
import storage from '@/utils/storage'
|
||||||
|
|
||||||
@ -78,6 +101,11 @@ const route = useRoute()
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const siteInfo:any = computed(() => {
|
||||||
|
return userStore.siteInfo
|
||||||
|
})
|
||||||
|
|
||||||
const dark = computed(() => {
|
const dark = computed(() => {
|
||||||
return systemStore.dark
|
return systemStore.dark
|
||||||
})
|
})
|
||||||
@ -181,5 +209,10 @@ const toPreview = () => {
|
|||||||
background-color: var(--el-color-primary);
|
background-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
:deep(.el-dropdown-menu__item) {
|
||||||
|
&:focus {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #333 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
<el-container :class="['h-full px-[10px]',{'layout-header border-b border-color': !dark}]" >
|
||||||
<el-row class="w-100 h-full w-full">
|
<el-row class="w-100 h-full w-full">
|
||||||
<el-col :span="12">
|
<el-col :span="10">
|
||||||
<div class="left-panel h-full flex items-center">
|
<div class="left-panel h-full flex items-center">
|
||||||
<!-- 左侧菜单折叠 -->
|
<!-- 左侧菜单折叠 -->
|
||||||
<!-- <div class="navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
<!-- <div class="navbar-item flex items-center h-full cursor-pointer" @click="toggleMenuCollapse">
|
||||||
@ -20,8 +20,30 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="14">
|
||||||
<div class="right-panel h-full flex items-center justify-end">
|
<div class="right-panel h-full flex items-center justify-end">
|
||||||
|
<div class="flex items-center flex-shrink-0 hidden-xs-only">
|
||||||
|
<el-dropdown trigger="hover" :hide-on-click="false" popper-class="site-info-wrap" class="mr-[8px]">
|
||||||
|
<!-- 状态 -->
|
||||||
|
<div class="mx-[8px] bg-[#f6f6f6] border-[1px] border-solid border-[#eee] rounded-[4px] px-[9px] py-[6px] flex items-center">
|
||||||
|
<span class="mr-[6px] text-[12px] !text-[#333]">{{siteInfo.site_name}}</span>
|
||||||
|
<span class="!text-[10px] text-[#f56c6c]" :class="{'!text-[#67c23a]': siteInfo.status == 1, '!text-[#f56c6c]': siteInfo.status == 3}">{{ siteInfo.status_name }}</span>
|
||||||
|
</div>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 站点id -->
|
||||||
|
<div class="text-[14px]">站点编号:{{siteInfo.site_id}}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item>
|
||||||
|
<!-- 到期时间 -->
|
||||||
|
<div v-if="siteInfo.expire_time == 0" class="text-[14px]">到期时间:永久</div>
|
||||||
|
<div v-else class="text-[14px]">到期时间:{{ siteInfo.expire_time }}</div>
|
||||||
|
</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
<!-- 预览 只有站点时展示-->
|
<!-- 预览 只有站点时展示-->
|
||||||
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
<i class="iconfont iconicon_huojian1 cursor-pointer px-[8px]" :title="t('visitWap')" @click="toPreview"></i>
|
||||||
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
<i class="iconfont iconlingdang-xianxing cursor-pointer px-[8px]" :title="t('newInfo')" v-if="appType == 'site'"></i>
|
||||||
@ -65,8 +87,9 @@ import layoutSetting from './layout-setting.vue'
|
|||||||
import userInfo from './user-info.vue'
|
import userInfo from './user-info.vue'
|
||||||
import { useFullscreen } from '@vueuse/core'
|
import { useFullscreen } from '@vueuse/core'
|
||||||
import useSystemStore from '@/stores/modules/system'
|
import useSystemStore from '@/stores/modules/system'
|
||||||
|
import useUserStore from '@/stores/modules/user'
|
||||||
import useAppStore from '@/stores/modules/app'
|
import useAppStore from '@/stores/modules/app'
|
||||||
import { useRoute,useRouter } from 'vue-router'
|
import { useRoute, useRouter } from 'vue-router'
|
||||||
import { t } from '@/lang'
|
import { t } from '@/lang'
|
||||||
import storage from '@/utils/storage'
|
import storage from '@/utils/storage'
|
||||||
|
|
||||||
@ -78,6 +101,11 @@ const route = useRoute()
|
|||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
const screenWidth = ref(window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth)
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
const siteInfo:any = computed(() => {
|
||||||
|
return userStore.siteInfo
|
||||||
|
})
|
||||||
|
|
||||||
const dark = computed(() => {
|
const dark = computed(() => {
|
||||||
return systemStore.dark
|
return systemStore.dark
|
||||||
})
|
})
|
||||||
@ -181,5 +209,10 @@ const toPreview = () => {
|
|||||||
background-color: var(--el-color-primary);
|
background-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
:deep(.el-dropdown-menu__item) {
|
||||||
|
&:focus {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: #333 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
@font-face {
|
@font-face {
|
||||||
font-family: "iconfont"; /* Project id 3883393 */
|
font-family: "iconfont"; /* Project id 3883393 */
|
||||||
src: url('//at.alicdn.com/t/c/font_3883393_t4cbwq5qdz.woff2?t=1729077942624') format('woff2'),
|
src: url('//at.alicdn.com/t/c/font_3883393_xso0134odj.woff2?t=1732777083024') format('woff2'),
|
||||||
url('//at.alicdn.com/t/c/font_3883393_t4cbwq5qdz.woff?t=1729077942624') format('woff'),
|
url('//at.alicdn.com/t/c/font_3883393_xso0134odj.woff?t=1732777083024') format('woff'),
|
||||||
url('//at.alicdn.com/t/c/font_3883393_t4cbwq5qdz.ttf?t=1729077942624') format('truetype');
|
url('//at.alicdn.com/t/c/font_3883393_xso0134odj.ttf?t=1732777083024') format('truetype');
|
||||||
}
|
}
|
||||||
|
|
||||||
.iconfont {
|
.iconfont {
|
||||||
@ -13,6 +13,18 @@
|
|||||||
-moz-osx-font-smoothing: grayscale;
|
-moz-osx-font-smoothing: grayscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.iconshujutongji:before {
|
||||||
|
content: "\e835";
|
||||||
|
}
|
||||||
|
|
||||||
|
.iconshangpinguanli1:before {
|
||||||
|
content: "\e837";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icondingdanguanli:before {
|
||||||
|
content: "\e838";
|
||||||
|
}
|
||||||
|
|
||||||
.icona-tupianzhanbopc302:before {
|
.icona-tupianzhanbopc302:before {
|
||||||
content: "\e83c";
|
content: "\e83c";
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -40,7 +40,7 @@ export function setThemeColor(color: string, mode: string = 'light'): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Object.keys(colors[mode]).forEach((key) => {
|
Object.keys(colors[mode]).forEach((key) => {
|
||||||
useCssVar('--el-color-primary' + '-' + key, null).value = colorFunction.convert(`color(${color} ${colors[mode][key]})`)
|
useCssVar('--el-color-primary' + '-' + key, null).value = colorFunction.convert(`color(${ color } ${ colors[mode][key] })`)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,7 +48,9 @@ export function setThemeColor(color: string, mode: string = 'light'): void {
|
|||||||
* 获取当前访问应用类型
|
* 获取当前访问应用类型
|
||||||
*/
|
*/
|
||||||
export function getAppType() {
|
export function getAppType() {
|
||||||
const path = location.pathname.split('/').filter((val) => { return val })
|
const path = location.pathname.split('/').filter((val) => {
|
||||||
|
return val
|
||||||
|
})
|
||||||
|
|
||||||
if (!path.length) {
|
if (!path.length) {
|
||||||
return 'admin'
|
return 'admin'
|
||||||
@ -125,7 +127,7 @@ export function isUrl(str: string): boolean {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function img(path: string): string {
|
export function img(path: string): string {
|
||||||
return isUrl(path) ? path : `${import.meta.env.VITE_IMG_DOMAIN || location.origin}/${path}`
|
return isUrl(path) ? path : `${ import.meta.env.VITE_IMG_DOMAIN || location.origin }/${ path }`
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,7 +135,7 @@ export function img(path: string): string {
|
|||||||
* @param path
|
* @param path
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function assetImg (path: string) {
|
export function assetImg(path: string) {
|
||||||
return new URL('@/', import.meta.url) + path
|
return new URL('@/', import.meta.url) + path
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,15 +230,15 @@ export function guid(len = 10, firstU = true, radix: any = null) {
|
|||||||
// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
|
// 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
|
||||||
if (firstU) {
|
if (firstU) {
|
||||||
uuid.shift()
|
uuid.shift()
|
||||||
return `u${uuid.join('')}`
|
return `u${ uuid.join('') }`
|
||||||
}
|
}
|
||||||
return uuid.join('')
|
return uuid.join('')
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 金额格式化
|
* 金额格式化
|
||||||
*/
|
*/
|
||||||
export function moneyFormat(money : string) : string {
|
export function moneyFormat(money: string): string {
|
||||||
return isNaN(parseFloat(money)) ? money : parseFloat(money).toFixed(2)
|
return isNaN(parseFloat(money)) ? money : parseFloat(money).toFixed(2)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,15 +279,15 @@ export function timeStampTurnTime(timeStamp: any, type = "") {
|
|||||||
* 过滤小数点(保留两位)
|
* 过滤小数点(保留两位)
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
export function filterDigit(event:any){
|
export function filterDigit(event: any) {
|
||||||
event.target.value = event.target.value.replace(/[^\d\.]/g,'');
|
event.target.value = event.target.value.replace(/[^\d\.]/g, '');
|
||||||
event.target.value = event.target.value.replace(/^\./g,'');
|
event.target.value = event.target.value.replace(/^\./g, '');
|
||||||
event.target.value = event.target.value.replace(/\.{2,}/g,'.');
|
event.target.value = event.target.value.replace(/\.{2,}/g, '.');
|
||||||
// 限制最多两位小数
|
// 限制最多两位小数
|
||||||
const decimalParts = event.target.value.split('.');
|
const decimalParts = event.target.value.split('.');
|
||||||
if (decimalParts.length > 1 && decimalParts[1].length > 2) {
|
if (decimalParts.length > 1 && decimalParts[1].length > 2) {
|
||||||
// 如果有小数部分且超过两位,则截取前两位
|
// 如果有小数部分且超过两位,则截取前两位
|
||||||
event.target.value = `${decimalParts[0]}.${decimalParts[1].slice(0, 2)}`;
|
event.target.value = `${ decimalParts[0] }.${ decimalParts[1].slice(0, 2) }`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,17 +295,17 @@ export function filterDigit(event:any){
|
|||||||
* 过滤整数
|
* 过滤整数
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
export function filterNumber(event:any){
|
export function filterNumber(event: any) {
|
||||||
event.target.value = event.target.value.replace(/[^\d]/g,'');
|
event.target.value = event.target.value.replace(/[^\d]/g, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 过滤特殊字符
|
* 过滤特殊字符
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
export function filterSpecial(event:any){
|
export function filterSpecial(event: any) {
|
||||||
event.target.value = event.target.value.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '')
|
event.target.value = event.target.value.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '')
|
||||||
event.target.value = event.target.value.replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g,'')
|
event.target.value = event.target.value.replace(/[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/g, '')
|
||||||
}
|
}
|
||||||
|
|
||||||
export function importIconFontCss() {
|
export function importIconFontCss() {
|
||||||
@ -349,3 +351,47 @@ export function getIcon() {
|
|||||||
// console.log('modules', modules)
|
// console.log('modules', modules)
|
||||||
// // const addonModulesFiles = import.meta.glob('@/addon/**/assets/icon/*.json', { eager: true })
|
// // const addonModulesFiles = import.meta.glob('@/addon/**/assets/icon/*.json', { eager: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置表格分页数据的本地存储
|
||||||
|
* @param page
|
||||||
|
* @param limit
|
||||||
|
* @param where
|
||||||
|
*/
|
||||||
|
export function setTablePageStorage(page: any = 1, limit: any = 10, where: any = {}) {
|
||||||
|
var data = storage.get('tablePageStorage');
|
||||||
|
if (!data) {
|
||||||
|
data = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
var key = location.pathname + JSON.stringify(where);
|
||||||
|
data[key] = {
|
||||||
|
page,
|
||||||
|
limit
|
||||||
|
};
|
||||||
|
|
||||||
|
var MAX_COUNT = 5; // 最多存储 5 个页面的分页缓存,超出则删除最开始的第一个页面
|
||||||
|
if (Object.keys(data).length > MAX_COUNT) {
|
||||||
|
delete data[Object.keys(data)[0]];
|
||||||
|
}
|
||||||
|
|
||||||
|
storage.set({ key: 'tablePageStorage', data });
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表格分页数据的本地存储
|
||||||
|
* @param where
|
||||||
|
*/
|
||||||
|
export function getTablePageStorage(where: any = {}) {
|
||||||
|
var data = storage.get('tablePageStorage');
|
||||||
|
var key = location.pathname + JSON.stringify(where);
|
||||||
|
if (!data || !data[key]) {
|
||||||
|
data = {
|
||||||
|
page: 1,
|
||||||
|
limit: 10
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
data = data[key];
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user