Commit 8de42d27 authored by 罗超's avatar 罗超

优化部分页面,完成权限调整

parent 028523e4
......@@ -47,7 +47,6 @@ const healthCheckHandler = async ()=>{
await UserServices.CollectAsync()
}
}
setInterval(() => {
healthCheckHandler()
}, 1000*60)
......
<template>
<div>
<img src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Upload/Goods/638519915351184239.png" width="200">
<div class="q-mt-lg" style="font-size: 20px; font-weight: 400;">VIP专属权限,购买后立即解锁</div>
<div class="text-center q-mt-lg">
<el-button class="ppt-button" size="large" @click="()=>orderVisible=true">立即解锁</el-button>
</div>
</div>
<OrderReview v-if="orderVisible" :default-type="1" @close="()=>orderVisible=false"></OrderReview>
</template>
<script lang="ts" setup>
import OrderReview from '@/views/components/Order/Review.vue'
import { ref } from 'vue'
const orderVisible = ref(false)
</script>
<style>
</style>
\ No newline at end of file
......@@ -136,7 +136,7 @@ const moreList = [
{ icon: require("@/assets/img/homeMore0.png"), Name: "添加到桌面" },
{ icon: require("@/assets/img/homeMore1.png"), Name: "关注公众号" },
{ icon: require("@/assets/img/homeMore2.png"), Name: "我的订单", Url:'/u/order' },
{ icon: require("@/assets/img/homeMore3.png"), Name: "意见反馈" },
{ icon: require("@/assets/img/homeMore3.png"), Name: "意见反馈", Url:'https://work.weixin.qq.com/kfid/kfc378aada578ca8b0e' },
];
const forwardUserCenter = ()=>{
......
......@@ -8,7 +8,7 @@
:gap="gaps[water.de-1]"
:offset="[0,0]"
:image="water.wmtype==2?water.content:''"
:font="{fontSize:water.cz,color:water.color}"
:font="{fontSize:water.cz,color:water.color,fontWeight:400}"
>
</el-watermark>
</template>
......@@ -21,7 +21,7 @@ import { storeToRefs } from "pinia"
import { ref, watch } from "vue"
import { useRouter } from "vue-router"
const { token } = storeToRefs(useUserStore())
const { token,userInfo } = storeToRefs(useUserStore())
const water = ref<any>()
const gaps = [[100,100],[150,150],[200,200]]
const exportRule = ['/editor/']
......@@ -46,10 +46,27 @@ const waterVisibleHandler = ()=>{
const url = router.currentRoute.value.path
showWater.value = ruleRouter.value.findIndex(x=>url.includes(x))!=-1
}
const freeUserWatermake = ()=>{
ruleRouter.value.push(...previewRule)
ruleRouter.value.push(...exportRule)
water.value={
status:true,
content:'Travel Design',
wmtype:1,
ag:-25,
cz:16,
color:'rgba(0,0,0,.1)',
de:2
}
showWater.value = true
waterVisibleHandler()
}
watch(() => router.currentRoute.value.path, (toPath) => {
waterVisibleHandler()
},{immediate: true,deep: true})
loadWater()
if(userInfo.value.iv || userInfo.value.it) loadWater()
else freeUserWatermake()
</script>
<style>
......
......@@ -11,7 +11,7 @@ export const fillDigit = (digit: number, len: number) => {
export const openNewBlank = (path:string) => {
if(path!=''){
const url = `${window.location.origin}${path}`
const url = path.includes('http://') || path.includes('https://') ? path : `${window.location.origin}${path}`
window.open(url, '_blank')
}
}
......
<template>
<div class="window-height regist-box column flex-center items-center">
<div class="col column flex-center items-center rounded light-shadow q-pa-xl bg-white" style="margin: 60px 0;">
<div style="width:400px;">
<div class="column flex-center items-center rounded light-shadow q-pa-xl bg-white" style="margin: 60px 0;">
<div style="width:400px;padding:0 50px;">
<div class="text-center">
<div style="font-size: 36px; " class="text-dark">创建Travel Design账户</div>
<div class="text-info text-small">开启行程设计第一步</div>
<div style="font-size: 1.88vw; line-height: 1;" class="text-dark text-weight-bolder row items-end flex-center">
<span>Welcome to </span>
<img src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1715138194000_864.png" style="width:3.18vw;margin-left: 1.67vw;" alt="">
</div>
<div class="text-small" style="color:#404B5B;margin-top:0.99vw">创建账户,开启行程设计第一步</div>
</div>
<el-form ref="registFormRef" :model="model" :rules="rules" label-width="0px" size="large" class="full-width q-mt-lg" :disabled="loading">
<el-form-item label="" prop="nickname">
......@@ -50,10 +53,10 @@ interface RuleForm {
confirmPwd:string
}
const model = ref<{account:string,password:string,nickname:string,confirmPwd:string}>({
account:'luochao',
password:'123456',
nickname:'罗超',
confirmPwd:'123456'
account:'',
password:'',
nickname:'',
confirmPwd:''
})
const validateToken = ref('')
const registFormRef = ref<FormInstance>()
......@@ -127,8 +130,8 @@ const redicetToLogin = ()=>{
</script>
<style>
.regist-box{
background-image: url('../../assets/img/homeBJ.png'),linear-gradient(0deg, #E3ECFF, #FFFFFF);
background-size: auto auto;
background-image: url('../../assets/img/regist.png'),linear-gradient(0deg, #E3ECFF, #FFFFFF);
background-size: 100% auto;
background-repeat: no-repeat;
}
</style>
\ No newline at end of file
......@@ -6,55 +6,56 @@
</div>
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="ERP资料库" name="1">
<el-row class="q-mb-md">
<el-col :span="6">
<el-select v-model="datas.queryMsg.Type" class="m-2"
@change="SearchHandler()">
<el-option
v-for="item in typeLists"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="18">
<el-input v-model="datas.queryMsg.Name"
placeholder="输入关键字快速查找" clearable
class="input-with-select q-pl-lg" @keyup.enter="SearchHandler()">
<template #append>
<el-button style="color: #fff;" type="primary" @click="SearchHandler">搜索</el-button>
</template>
</el-input>
</el-col>
</el-row>
<div class="row UploadPicture-box" v-loading="datas.loading">
<div v-for="(item,index) in datas.imgList" class="UploadPicture-list">
<div class="UploadPicture-listBox">
<img :src="item.Path" class="rounded" @click="getImgs(item,index)"/>
<div class="UploadPicture-Hover" v-if="item.show">
<div>
<el-icon :size="20"><CircleCheckFilled/></el-icon>
<template v-if="userInfo.iv||userInfo.it">
<el-row class="q-mb-md">
<el-col :span="6">
<el-select v-model="datas.queryMsg.Type" class="m-2"
@change="SearchHandler()">
<el-option
v-for="item in typeLists"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-col>
<el-col :span="18">
<el-input v-model="datas.queryMsg.Name" placeholder="输入关键字快速查找" clearable class="input-with-select q-pl-lg" @change="SearchHandler()"></el-input>
</el-col>
</el-row>
<div class="row UploadPicture-box" v-loading="datas.loading">
<div v-for="(item,index) in datas.imgList" class="UploadPicture-list">
<div class="UploadPicture-listBox">
<img :src="item.Path" class="rounded" @click="getImgs(item,index)"/>
<div class="UploadPicture-Hover" v-if="item.show">
<div>
<el-icon :size="20"><CircleCheckFilled/></el-icon>
</div>
</div>
</div>
</div>
</div>
<div class="q-mt-md" style="display: flex;justify-content: center;">
<el-pagination
v-model:current-page="currentPage"
:page-size="datas.queryMsg.pageSize"
small="small"
layout="prev, pager, next"
:total="datas.queryMsg.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</template>
<div class="flex-center column items-center q-py-lg" v-else>
<BuyProduct></BuyProduct>
</div>
<div class="q-mt-md" style="display: flex;justify-content: center;">
<el-pagination
v-model:current-page="currentPage"
:page-size="datas.queryMsg.pageSize"
small="small"
layout="prev, pager, next"
:total="datas.queryMsg.total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</el-tab-pane>
<el-tab-pane label="第三方资源" name="4">
<SpiderResource @change="(payload:string)=> spiderImgUrl=payload"></SpiderResource>
<SpiderResource @change="(payload:string)=> spiderImgUrl=payload" v-if="userInfo.iv||userInfo.it"></SpiderResource>
<div class="flex-center column items-center q-py-lg" v-else>
<BuyProduct></BuyProduct>
</div>
</el-tab-pane>
<el-tab-pane label="本地图" name="2">
<FileInput @change="files => insertImageElement(files)">
......@@ -95,15 +96,16 @@ import { type UploadProps, type UploadUserFile,type UploadInstance, ElMessage, E
import useCreateElement from '@/hooks/useCreateElement'
import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import { getImageDataURL } from '@/utils/image'
import { useMainStore, useSlidesStore, useScreenStore } from '@/store'
import { useMainStore, useSlidesStore, useScreenStore, useUserStore } from '@/store'
import { injectKeyDataSource } from '@/types/injectKey'
import ConfigService from '@/services/ConfigService'
import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
import FileService from '@/services/FileService'
import SpiderResource from '@/views/Editor/CanvasTool/SpiderResource.vue'
import type { PPTImageElement, SlideBackground } from '@/types/slides'
import FileInput from '@/components/FileInput.vue'
import BuyProduct from '@/components/User/BuyProduct.vue'
const showVisible = ref(true)
const activeName = ref("1")
const imgVisibleStore = useScreenStore()
......@@ -116,6 +118,9 @@ const spiderImgUrl = ref('')
const currentPage = ref(1)
const upload = ref<UploadInstance>()
const { userInfo } =storeToRefs(useUserStore())
if(!userInfo.value.iv && !userInfo.value.it) activeName.value="2"
const imgType = ref(0) // 1 插入图片 2替换图片
imgType.value = inject('imgType')
const propsDatas = ref<any>({})
......@@ -295,6 +300,7 @@ const SearchHandler = async () => {
await getImgList()
}
const getImgList = async () =>{
if(!userInfo.value.iv && !userInfo.value.it) return
datas.loading = true
try {
let datasRes = await ConfigService.GetPicList(datas.queryMsg);
......
......@@ -52,7 +52,7 @@
<IconInsertTable class="handler-item" v-tooltip="'插入表格'" />
</Popover>
<IconFormula class="handler-item" v-tooltip="'插入公式'" @click="latexEditorVisible = true" />
<IconEarth class="handler-item" v-tooltip="'编辑地图'" @click="mapVisibleStatus = true" />
<IconEarth class="handler-item" v-tooltip="'编辑地图'" @click="mapVisibleStatus = true" v-if="userInfo.iv||userInfo.it" />
<!-- <Popover trigger="click" v-model:value="mediaInputVisible">
<template #content>
<MediaInput
......@@ -100,7 +100,7 @@
<script lang="ts" setup>
import { ref, provide } from 'vue'
import { storeToRefs } from 'pinia'
import { useMainStore, useSnapshotStore, useScreenStore } from '@/store'
import { useMainStore, useSnapshotStore, useScreenStore, useUserStore } from '@/store'
import { getImageDataURL } from '@/utils/image'
import type { ShapePoolItem } from '@/configs/shapes'
import type { LinePoolItem } from '@/configs/lines'
......@@ -130,6 +130,8 @@ const { redo, undo } = useHistorySnapshot()
const { imgPoolVisible } = storeToRefs(useScreenStore())
const { userInfo } =storeToRefs(useUserStore())
const {
scaleCanvas,
setCanvasScalePercentage,
......
......@@ -70,7 +70,7 @@
<IconUpload class="icon" />
</div>
</div>
<div v-if="!searchData.noExportPermission" class="menu-item" v-tooltip="'导出'" @click="setDialogForExport('image')">
<div v-if="!searchData.noExportPermission" class="menu-item q-mr-md" v-tooltip="'导出'" @click="setDialogForExport('image')">
<IconDownload class="icon" />
</div>
<el-button type="primary"
......@@ -91,19 +91,20 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>
<el-button type="primary"
size="small" :loading="datas.loading"
style="color: #ffff;"
<el-button type="default"
size="large" :loading="datas.loading"
link
@click.stop="setTemplate(0)">
保存{{searchData.TemplateType!=2?'行程':'广告'}}
保存<!-- {{searchData.TemplateType!=2?'行程':'广告'}} -->
</el-button>
</el-dropdown-item>
<el-dropdown-item>
<el-button type="primary"
size="small" :loading="datas.loading"
style="color: #ffff;"
<el-button type="default"
size="large" :loading="datas.loading"
link
@click.stop="setTemplate(1)">
另存{{searchData.TemplateType!=2?'行程':'广告'}}
另存为...
<!-- {{searchData.TemplateType!=2?'行程':'广告'}} -->
</el-button>
</el-dropdown-item>
</el-dropdown-menu>
......
......@@ -17,8 +17,8 @@
</el-dropdown>
<div class="tabs-items">
<div class="item" :class="{'active':currentMenu==0}" @click="setCurrentMenuHandler(0)"><el-icon color="#564bec" class="q-mr-md" size="16"><Clock /></el-icon>最近</div>
<div class="item" :class="{'active':currentMenu==1}" @click="setCurrentMenuHandler(1)"><el-icon color="#564bec" class="q-mr-md" size="16"><Star /></el-icon>星标</div>
<div class="item" :class="{'active':currentMenu==2}" @click="setCurrentMenuHandler(2)"><el-icon color="#564bec" class="q-mr-md" size="16"><Share /></el-icon>共享</div>
<div class="item" :class="{'active':currentMenu==1}" @click="setCurrentMenuHandler(1)" v-if="userInfo.iv||userInfo.it"><el-icon color="#564bec" class="q-mr-md" size="16"><Star /></el-icon>星标</div>
<div class="item" :class="{'active':currentMenu==2}" @click="setCurrentMenuHandler(2)" v-if="userInfo.it"><el-icon color="#564bec" class="q-mr-md" size="16"><Share /></el-icon>共享</div>
</div>
<div class="tabs-items">
......@@ -28,7 +28,7 @@
</div>
<div class="tabs-items">
<div class="item" :class="{'active':currentMenu==-1}" @click="setCurrentMenuHandler(-1)"><el-icon color="#564bec" class="q-mr-md" size="16"><Delete /></el-icon>回收站</div>
<div class="item" :class="{'active':currentMenu==-1}" @click="setCurrentMenuHandler(-1)" v-if="userInfo.iv||userInfo.it"><el-icon color="#564bec" class="q-mr-md" size="16"><Delete /></el-icon>回收站</div>
</div>
</div>
<div class="col">
......
......@@ -106,11 +106,11 @@
<el-dropdown-item v-if="(datas.loggedder==scope.row.CreateName&&scope.row.FileType>0)||scope.row.IsView" icon="View" @click="viewTemplate(scope.row)">查看</el-dropdown-item>
<template v-if="currentMenu!=-1&&datas.loggedder==scope.row.CreateName">
<el-dropdown-item v-if="scope.row.FileType" icon="EditPen" @click.stop="startEditTitle(scope.row)">重命名</el-dropdown-item>
<el-dropdown-item v-if="scope.row.FileType" icon="Clock" @click.stop="history(scope.row)">历史版本</el-dropdown-item>
<el-dropdown-item icon="Position" @click.stop="()=>setFileShareHandler(scope.row)">分享</el-dropdown-item>
<el-dropdown-item v-if="scope.row.IsShare" icon="Hide" @click.stop="removeShareHandler(scope.row)">取消分享</el-dropdown-item>
<el-dropdown-item v-if="scope.row.FileType && (userInfo.iv || userInfo.it)" icon="Clock" @click.stop="history(scope.row)">历史版本</el-dropdown-item>
<el-dropdown-item icon="Position" @click.stop="()=>setFileShareHandler(scope.row)" v-if="userInfo.it">分享</el-dropdown-item>
<el-dropdown-item v-if="scope.row.IsShare && userInfo.it" icon="Hide" @click.stop="removeShareHandler(scope.row)">取消分享</el-dropdown-item>
<el-dropdown-item v-if="currentMenu==3||currentMenu==4" icon="Expand" @click.stop="MoveFile(scope.row)">移动至</el-dropdown-item>
<el-dropdown-item v-if="scope.row.FileType" @click.stop="CollectHandler(scope.row)">
<el-dropdown-item v-if="scope.row.FileType && (userInfo.iv || userInfo.it)" @click.stop="CollectHandler(scope.row)">
<span class="row items-center">
<el-icon :color="scope.row.IsCollect?'#FCC525':'#65676B'" size="14">
<Star /></el-icon>
......
......@@ -6,9 +6,9 @@
<div class="q-mt-sm text-info">个人账号ID:{{ userInfo.cardno??'8027970449819221090' }}</div>
</div>
<div class="text-white">{{ userTheme?.desc }}</div>
<div :style="{'background':vipTheme.color}" v-if="userTheme?.name=='FREE'" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-md q-px-lg no-select">升级为VIP</div>
<div :style="{'background':vipTheme.color}" v-if="userTheme?.name=='FREE'" @click="()=>orderVisible=true" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-md q-px-lg no-select">解锁专业版</div>
<!-- <div :style="{'background':vipTheme.color}" v-if="1==2" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-md q-px-lg no-select">续费VIP</div> -->
<div :style="{'background':enTheme.color}" v-if="userTheme?.name=='FREE'" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-md q-px-lg no-select">升级为企业</div>
<!-- <div :style="{'background':enTheme.color}" v-if="userTheme?.name=='FREE'" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-md q-px-lg no-select">升级为企业</div> -->
</div>
<div class="q-mt-xl">
......@@ -104,7 +104,7 @@
</el-card>
</div>
</div>
<OrderReview v-if="orderVisible" :default-type="1" @close="()=>orderVisible=false"></OrderReview>
</template>
<script lang="ts" setup>
......@@ -112,11 +112,12 @@ import { ENT_USER_THEME, VIP_USER_THEME } from "@/configs/customer";
import { useUserStore } from "@/store";
import { storeToRefs } from "pinia";
import { ref } from "vue";
import OrderReview from '@/views/components/Order/Review.vue'
const useUser = useUserStore()
const { userInfo } = storeToRefs(useUser)
const userTheme = useUser.getUserTheme
const orderVisible = ref(false)
const vipTheme = VIP_USER_THEME
const enTheme = ENT_USER_THEME
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment