Commit c39a1801 authored by 罗超's avatar 罗超

完成用户登录

parent d455f5c2
VUE_APP_API_URL = 'http://192.168.10.214/api/common/post' VUE_APP_API_URL = 'http://localhost:8001/api/common/post'
VUE_APP_UPLOADURLAPI_URL = 'http://192.168.10.214:8120' VUE_APP_UPLOADURLAPI_URL = 'http://192.168.10.214:8120'
VUE_APP_SHARE_URL = 'http://127.0.0.1:8080' VUE_APP_SHARE_URL = 'http://127.0.0.1:8080'
\ No newline at end of file
...@@ -164,6 +164,12 @@ page { ...@@ -164,6 +164,12 @@ page {
/* left: 50% !important; */ /* left: 50% !important; */
/* margin-left: -2px !important; */ /* margin-left: -2px !important; */
} }
.primary-borders-thin{
border:1px solid #d14424 !important;
}
.transparent-borders{
border:1px solid transparent;
}
.bg-transparent{ .bg-transparent{
background: transparent !important; background: transparent !important;
} }
...@@ -222,7 +228,10 @@ page { ...@@ -222,7 +228,10 @@ page {
} }
.q-px-xl{ .q-px-xl{
padding-left: 30px; padding-left: 30px;
padding-right: 300px; padding-right: 30px;
}
.q-pa-xl{
padding: 30px;
} }
.display-none{ .display-none{
display: none; display: none;
...@@ -275,6 +284,24 @@ page { ...@@ -275,6 +284,24 @@ page {
margin-right:10px; margin-right:10px;
margin-left:10px; margin-left:10px;
} }
.q-my-xl{
margin-top: 30px;
margin-bottom: 30px;
}
.q-py-xl{
padding-top: 30px;
padding-bottom: 30px;
}
.q-mt-xl{
margin-top: 30px;
}
.q-mb-xl{
margin-bottom: 30px;
}
.q-py-xl{
padding-top: 30px;
padding-bottom: 30px;
}
.q-mr-md{ .q-mr-md{
margin-right:10px margin-right:10px
} }
...@@ -297,6 +324,13 @@ page { ...@@ -297,6 +324,13 @@ page {
.bg-primary{ .bg-primary{
background-color: #0b40fe !important; background-color: #0b40fe !important;
} }
.text-grey-8{
color: grey;
}
.cusor-pointer,
.cursor-pointer{
cursor: pointer;
}
.q-px-lg{ .q-px-lg{
padding-left: 20px; padding-left: 20px;
padding-right: 20px; padding-right: 20px;
...@@ -380,6 +414,13 @@ page { ...@@ -380,6 +414,13 @@ page {
.q-mb-lg{ .q-mb-lg{
margin-bottom:20px margin-bottom:20px
} }
.text-weight-bold{
font-weight: bold;
}
.text-weight-bolder{
font-weight: bolder;
}
.rounded{ .rounded{
border-radius: 6px; border-radius: 6px;
-webkit-border-radius: 6px; -webkit-border-radius: 6px;
......
<template>
<el-popover :width="300" popper-style="box-shadow: rgb(14 18 22 / 35%) 0px 10px 38px -10px, rgb(14 18 22 / 20%) 0px 10px 20px -15px; padding: 20px;" >
<template #reference>
<div class="row items-center cursor-pointer">
<el-avatar :size="40" :src="userInfo.photo" v-if="userInfo.photo && userInfo.photo.includes('http')"></el-avatar>
<el-avatar :size="40" v-else class="bg-primary text-white">{{ userInfo.nickname[0] }}</el-avatar>
<div class="q-ml-md">
<div class="" style="font-size: 16px; line-height: 1">{{ userInfo.nickname }}</div>
<img :src="vipIcon" style="height: 15px;"/>
</div>
</div>
</template>
<template #default>
<div class="row items-center text-small" >
<span class="text-grey-8">个人账号ID:</span>
<span class="col text-info" >1572131810</span>
<el-button class="text-grey-8" link>退出登录</el-button>
</div>
</template>
</el-popover>
</template>
<script lang="ts" setup>
import { useUserStore } from '@/store'
import { storeToRefs } from 'pinia'
const useUser = useUserStore()
const {userInfo} = storeToRefs(useUser)
const vipIcon = 'https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1712478244000_568.png'
</script>
<style scoped>
</style>
\ No newline at end of file
import { createRouter, createWebHistory } from 'vue-router' import { createRouter, createWebHistory } from 'vue-router'
import routes from './router' import routes from './router'
import { userStore } from '@/store/user'; import { useUserStore } from '@/store/user';
import { ElLoading } from 'element-plus'; import { ElLoading } from 'element-plus';
const router = createRouter({ const router = createRouter({
...@@ -14,7 +14,7 @@ const managerMenu = ['/market','/editor_admin'] ...@@ -14,7 +14,7 @@ const managerMenu = ['/market','/editor_admin']
let loadingInstance:any = null let loadingInstance:any = null
router.beforeEach((to:any, from:any, next:any) => { router.beforeEach((to:any, from:any, next:any) => {
const user = userStore() const user = useUserStore()
if(!loadingInstance){ if(!loadingInstance){
loadingInstance = ElLoading.service({ loadingInstance = ElLoading.service({
fullscreen:true, fullscreen:true,
...@@ -22,7 +22,7 @@ router.beforeEach((to:any, from:any, next:any) => { ...@@ -22,7 +22,7 @@ router.beforeEach((to:any, from:any, next:any) => {
}) })
} }
if ((whiteList.includes(to.path) || user.getUserToken!='') && !to.query.uid) { if ((whiteList.includes(to.path) || user.getUserToken!='') && !to.query.uid) {
if(managerMenu.includes(to.path) && user.getUser.IsEditTripTemplate!=1){ if(managerMenu.includes(to.path) && user.getUser.isTemplate!=1){
next('/notfound'); next('/notfound');
} }
if (to.meta.title) { if (to.meta.title) {
...@@ -30,8 +30,11 @@ router.beforeEach((to:any, from:any, next:any) => { ...@@ -30,8 +30,11 @@ router.beforeEach((to:any, from:any, next:any) => {
} }
next(); next();
} else { } else {
if(to.query && to.query.uid){ if(to.query && to.query.uid){
next(`/autoLogin?forword=${encodeURIComponent(to.fullPath)}`) next(`/autoLogin?forword=${encodeURIComponent(to.fullPath)}`)
} else if(user.getUserToken=='') {
next(`/login`)
} }
next('/notfound'); next('/notfound');
} }
......
...@@ -9,6 +9,13 @@ const routes: RouteRecordRaw[] = [ ...@@ -9,6 +9,13 @@ const routes: RouteRecordRaw[] = [
title:'个人空间' title:'个人空间'
} }
}, },
{
path: '/login',
component: () => import('@/views/Auth/Login.vue'),
meta:{
title:'登录 Travel Design'
}
},
{ {
path: '/notfound', path: '/notfound',
component: () => import('@/views/ErrorNotFound.vue'), component: () => import('@/views/ErrorNotFound.vue'),
......
...@@ -3,9 +3,14 @@ import Api,{ HttpResponse, Result } from './../utils/request'; ...@@ -3,9 +3,14 @@ import Api,{ HttpResponse, Result } from './../utils/request';
class UserServices{ class UserServices{
static async LoginAsync(userId:number):Promise<HttpResponse>{ static async AutoLoginAsync(userId:number):Promise<HttpResponse>{
let msg = {EmployeeId:userId} let msg = {EmployeeId:userId}
return Api.Post("admin_get_GetErpLoginInfoByUid",msg) return Api.Post("admin_get_GetErpLoginInfoByUid",msg)
} }
static async PasswordLoginAsync(account:string,pwd:string,tid:string=''):Promise<HttpResponse>{
let msg = {account,pwd,tid}
return Api.Post("travel_login_password",msg)
}
} }
export default UserServices; export default UserServices;
\ No newline at end of file
...@@ -6,6 +6,7 @@ import { useScreenStore } from './screen' ...@@ -6,6 +6,7 @@ import { useScreenStore } from './screen'
import { useFontStore } from './font' import { useFontStore } from './font'
import { useMapStore } from './map' import { useMapStore } from './map'
import { useSellTemplateStore } from './sellTemplate' import { useSellTemplateStore } from './sellTemplate'
import { useUserStore } from './user'
export { export {
useMainStore, useMainStore,
...@@ -15,5 +16,6 @@ export { ...@@ -15,5 +16,6 @@ export {
useScreenStore, useScreenStore,
useFontStore, useFontStore,
useMapStore, useMapStore,
useSellTemplateStore useSellTemplateStore,
useUserStore
} }
\ No newline at end of file
import { ApiResult } from '@/configs/axios';
import UserService from '@/services/UserService'; import UserService from '@/services/UserService';
import { defineStore } from 'pinia'; import { defineStore } from 'pinia';
import { StorageLike } from 'pinia-plugin-persistedstate'; import { StorageLike } from 'pinia-plugin-persistedstate';
...@@ -15,7 +16,13 @@ const st: StorageLike = { ...@@ -15,7 +16,13 @@ const st: StorageLike = {
return ls.get(key); return ls.get(key);
}, },
} }
export const userStore = defineStore('user', {
export interface UserLoginResult {
status:'ERROR'|'CHOSEN'|'SUCCESS',
data?:any[]
}
export const useUserStore = defineStore('user', {
state:()=>({ state:()=>({
token:'' as string, token:'' as string,
userInfo:{} as any userInfo:{} as any
...@@ -29,16 +36,44 @@ export const userStore = defineStore('user', { ...@@ -29,16 +36,44 @@ export const userStore = defineStore('user', {
}, },
}, },
actions:{ actions:{
async setUserLoginAsync(userId:number){ async setUserAutoLoginAsync(userId:number){
try { try {
let response = await UserService.LoginAsync(userId) let response = await UserService.AutoLoginAsync(userId)
if (response.data.resultCode == 1) { if (response.data.resultCode == ApiResult.SUCCESS) {
this.token = response.data.data.token const d = response.data.data
this.userInfo = response.data.data this.token = d.token
d.nickname=d.emName
d.photo = d.Icon
d.company = d.GroupName
d.logo = d.GroupPic
d.isTemplate = d.IsEditTripTemplate
this.userInfo = d
return true return true
} }
} catch (error) {} } catch (error) {}
return false return false
},
setUserLoginOut(){
this.token=''
this.userInfo={}
window.location.href='/login'
},
async setUserPasswordLoginAsync(account:string,pwd:string,tid:string='') {
try {
let response = await UserService.PasswordLoginAsync(account,pwd,tid)
if (response.data.resultCode == ApiResult.SUCCESS) {
if(!Array.isArray(response.data.data)) {
this.token = response.data.data.token
this.userInfo = response.data.data.userinfo
return { status:'SUCCESS' } as UserLoginResult
} else {
return { status:'CHOSEN', data:response.data.data } as UserLoginResult
}
}
} catch (error) {}
return { status:'ERROR' } as UserLoginResult
} }
}, },
persist: { persist: {
......
import service, { ApiResult } from "../configs/axios"; import service, { ApiResult } from "../configs/axios";
import { userStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import md5 from "md5-ts"; import md5 from "md5-ts";
export interface HttpResponse { export interface HttpResponse {
...@@ -24,9 +24,9 @@ class Api{ ...@@ -24,9 +24,9 @@ class Api{
datas = msg datas = msg
msg = datas??{} msg = datas??{}
let token = userStore().getUserToken??'' let token = useUserStore().getUserToken??''
let key = "" let key = ""
let groupId = userStore().getUser?.groupId let groupId = useUserStore().getUser?.groupId
let timestamp = (new Date()).valueOf(); let timestamp = (new Date()).valueOf();
var encodeMsg = encodeURIComponent(JSON.stringify(msg)).toLowerCase(); var encodeMsg = encodeURIComponent(JSON.stringify(msg)).toLowerCase();
var md5Str = md5(`cmd=${cmd}&msg=${encodeMsg}&timestamp=${timestamp}&token=${token}&key=${key}`); var md5Str = md5(`cmd=${cmd}&msg=${encodeMsg}&timestamp=${timestamp}&token=${token}&key=${key}`);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { userStore } from '@/store/user'; import { useUserStore } from '@/store/user';
import { query } from '@/utils/common'; import { query } from '@/utils/common';
import { ElLoading } from 'element-plus'; import { ElLoading } from 'element-plus';
import { ref } from 'vue'; import { ref } from 'vue';
...@@ -22,13 +22,13 @@ const userLoginHandler = async ()=>{ ...@@ -22,13 +22,13 @@ const userLoginHandler = async ()=>{
lock:true lock:true
}) })
if(param.uid){ if(param.uid){
let response = await userStore().setUserLoginAsync(parseInt(param.uid)) let response = await useUserStore().setUserAutoLoginAsync(parseInt(param.uid))
if(response){ if(response){
if(param.model=='0') { if(param.model=='0') {
router.push({ router.push({
path: `/team_editor/${param.ConfigId}` path: `/team_editor/${param.ConfigId}`
}) })
} else if(param.model=='1' && userStore().getUser.IsEditTripTemplate==1) { } else if(param.model=='1' && useUserStore().getUser.isTemplate==1) {
router.push({ router.push({
path: `/market` path: `/market`
}) })
......
<template>
<div class="login-box q-pa-xl row">
<img src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708239425000_437.png" class="logo" />
<div class="col column">
<div class="col column flex-center items-center">
<div class="wel">
<img src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1711705161000_818.png" />
<h1 style="font-size: 32px; text-dark" class="q-my-lg">快速,智能,美观</h1>
<div class="text-info text-small" style="font-size: 13px;">这里有上百种行程设计模板供你选择</div>
<div class="text-info text-small q-my-md" style="font-size: 13px;">我们为你提供了大量的插件,支持快速实现自己想要的行程</div>
<div class="text-info text-small" style="font-size: 13px;">AI助手的辅助让你报价与设计快人一步</div>
</div>
</div>
<div class="text-center text-small text-info full-width">@2012-2024 成都微途科技有限公司 版权所有 蜀ICP备13024891号-9</div>
</div>
<div class="login-form q-pa-xl column flex-center items-center" style="padding: 30px 100px;" v-if="token==''">
<div style="font-size: 36px; " class="text-dark">登录</div>
<div class="text-info text-small">你的创作空间</div>
<template v-if="!multipleUsers || multipleUsers.length==0">
<div class="q-py-xl row items-center full-width">
<div class="login-type row items-center col">
<img src="../../assets/img/wechat.png" alt="">
<span class="q-ml-md">使用微信扫码登录</span>
</div>
<div class="login-type row items-center col q-ml-md">
<img src="../../assets/img/phone.png" alt="">
<span class="q-ml-md">使用短信验证登录</span>
</div>
</div>
<el-divider> <span class="text-info">或者账号登录</span> </el-divider>
<el-form ref="loginFormRef" :model="model" :rules="rules" label-width="0px" size="large" class="full-width q-mt-lg">
<el-form-item label="" prop="account">
<el-input v-model="model.account" placeholder="账号" />
</el-form-item>
<el-form-item label="" prop="password">
<el-input v-model="model.password" type="password" placeholder="密码" autocomplete="new-password" show-password class="q-mt-lg"/>
</el-form-item>
<div class="text-right">
<el-button link type="primary" class="q-mb-lg">忘记密码?</el-button>
</div>
<el-form-item>
<el-button type="primary" class="full-width q-mb-lg" @click="submitForm(loginFormRef)" :loading="loading">登录</el-button>
</el-form-item>
<div class="text-info text-small row flex-center">
<span>还没有账号?</span>
<el-button link type="primary" class="q-mb-lg">立即注册</el-button>
</div>
</el-form>
</template>
<template v-if="multipleUsers && multipleUsers.length>0">
<el-divider> <span class="text-info">选择你需要登录的组织</span> </el-divider>
<div v-for="x in multipleUsers" @click="()=>model.tid=x.tid" class="light-shadow q-pa-md row items-center full-width rounded q-mt-xl cursor-pointer q-mb-md transparent-borders" :class="{'primary-borders-thin':model.tid==x.tid}">
<el-avatar :size="30" :src="x.logo"></el-avatar>
<div class="q-ml-lg">
<div class="text-weight-bold" style="font-size: 20px;">{{ x.nickname }}</div>
<div class="text-info text-small">{{ x.tenantname }}</div>
</div>
</div>
<el-button type="primary" size="large" class="full-width q-mt-lg" @click="loginByCompany" :loading="loading" :disabled="model.tid==''">登录</el-button>
<div class="text-center q-mt-lg">
<el-button link type="primary" class="q-mb-lg" @click="clearCompanyChoosenHandler">重新登录</el-button>
</div>
</template>
</div>
<div class="login-form q-pa-xl column flex-center items-center" style="padding: 30px 100px;" v-else>
<div style="font-size: 36px; " class="text-dark">已登录</div>
<div class="text-info text-small">你的创作空间</div>
<div class="q-py-xl flex-center items-center column">
<el-avatar :size="100" :scr="userInfo.photo">
{{ userInfo.photo && userInfo.photo.includes('http') ? '' :userInfo.nickname[0] }}
</el-avatar>
<div class="q-mt-md text-weight-bold" style="font-size: 18px;">{{ userInfo.nickname }}</div>
<div class="q-mt-md text-small text-info">{{ userInfo.company }}</div>
<div class="q-mt-lg row items-center">
<el-button @click="loginOutHandler">退出登录</el-button>
<el-button class="q-ml-md" type="primary" @click="forwardWorkspaceHandler">进入工作台</el-button>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import { useUserStore } from '@/store/user';
import { ElMessage, FormInstance, FormRules } from 'element-plus';
import { reactive, ref } from 'vue';
interface RuleForm {
account: string
password: string
}
const model = ref<{account:string,password:string,tid:string}>({
account:'',
password:'',
tid:''
})
const loginFormRef = ref<FormInstance>()
const loading = ref(false)
const user = useUserStore()
const token = user.getUserToken??''
const userInfo = user.getUser
const multipleUsers = ref<any[]>([])
const rules = reactive<FormRules<RuleForm>>({
account: [
{ required: true, message: '请输入你的账号', trigger: 'blur' },
{ min: 6, message: '请输入正确的账号', trigger: 'blur' },
],
password: [
{ required: true, message: '请输入你的密码', trigger: 'blur' },
{ min: 6,max:20, message: '请输入正确的密码', trigger: 'blur' },
]
})
const submitForm = async (formEl: FormInstance | undefined) => {
if (!formEl) return
loading.value=true
await formEl.validate(async (valid) => {
if (valid) {
await userLoginHandler()
}
})
loading.value=false
}
const loginByCompany = async ()=>{
if(model.value.tid=='') ElMessage.error({message:'请选择需要登录的组织'})
else {
loading.value=true
await userLoginHandler()
loading.value=false
}
}
const userLoginHandler = async ()=>{
const result = await user.setUserPasswordLoginAsync(model.value.account,model.value.password,model.value.tid)
if(result.status=='SUCCESS'){
ElMessage.success({message:'登录成功'})
location.href='/';
}else if(result.status=='CHOSEN' && Array.isArray(result.data)){
multipleUsers.value = result.data
}else{
ElMessage.error({message:'账号或密码错误'})
}
}
const forwardWorkspaceHandler = ()=>{
location.href='/';
}
const clearCompanyChoosenHandler = ()=>{
multipleUsers.value=[]
model.value.tid=''
}
const loginOutHandler = ()=>{
user.setUserLoginOut()
}
</script>
<style>
.login-box{
background-color: #f8f7fc;
background-image: url('https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1711704450000_818.jpeg');
background-position: center;
background-attachment: fixed;
background-size: cover;
width: 100vw;
height: 100vh;
position: relative;
}
.login-box .logo{
height: 30px;
width: auto;
top: 80px;
left: 80px;
position: absolute;
z-index: 2;
}
.login-box .foot-box{
position: absolute;
bottom: 30px;
}
.login-box .login-form{
width:600px;
background-color: #FFF;
border-radius: 15px;
}
.login-box .wel{
text-align: center;
}
.login-box .wel img{
width: 300px;
height: auto;
}
.login-box .login-type{
border:1px solid #dbdfe9;
padding:10px 20px;
border-radius: 6px;
text-align: center;
cursor: pointer;
font-size: 14px;
}
.login-box .login-type:hover{
background-color: #f8f7fc;
color:var(--el-color-primary);
}
.login-box .login-type img{
width:16px;
}
</style>
\ No newline at end of file
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
<div class="arrow-btn"><IconDown class="arrow" /></div> <div class="arrow-btn"><IconDown class="arrow" /></div>
</Popover> </Popover>
</div> --> </div> -->
<div class="group-menu-item" v-if="userInfo.IsEditTripTemplate==1&&model==1"> <div class="group-menu-item" v-if="userInfo.isTemplate==1&&model==1">
<div class="menu-item" v-tooltip="'导入PSD'" @click="UploadPsdHandler"> <div class="menu-item" v-tooltip="'导入PSD'" @click="UploadPsdHandler">
<IconUpload class="icon" /> <IconUpload class="icon" />
</div> </div>
...@@ -74,10 +74,10 @@ ...@@ -74,10 +74,10 @@
<IconDownload class="icon" /> <IconDownload class="icon" />
</div> </div>
<el-button type="primary" <el-button type="primary"
v-if="(userInfo.IsEditTripTemplate==1||ConfigId>0)&&model!=2" v-if="(userInfo.isTemplate==1||ConfigId>0)&&model!=2"
size="small" :loading="datas.loading" size="small" :loading="datas.loading"
@click="setTemplate" style="color: #ffff;margin-left: 10px;"> @click="setTemplate" style="color: #ffff;margin-left: 10px;">
<template v-if="userInfo.IsEditTripTemplate==1&&model==1"> <template v-if="userInfo.isTemplate==1&&model==1">
保存{{searchData.TemplateType!=2?'模板':'广告'}} 保存{{searchData.TemplateType!=2?'模板':'广告'}}
</template> </template>
<template v-if="ConfigId>0&&model!=2"> <template v-if="ConfigId>0&&model!=2">
...@@ -150,7 +150,7 @@ import useScreening from '@/hooks/useScreening' ...@@ -150,7 +150,7 @@ import useScreening from '@/hooks/useScreening'
import useImport from '@/hooks/useImport' import useImport from '@/hooks/useImport'
import useSlideHandler from '@/hooks/useSlideHandler' import useSlideHandler from '@/hooks/useSlideHandler'
import type { DialogForExportTypes } from '@/types/export' import type { DialogForExportTypes } from '@/types/export'
import { userStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import { useScreenStore } from "@/store/screen"; import { useScreenStore } from "@/store/screen";
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { injectKeyDataSource, injectKeyTemplate } from '@/types/injectKey' import { injectKeyDataSource, injectKeyTemplate } from '@/types/injectKey'
...@@ -197,7 +197,7 @@ const titleValue = ref('') ...@@ -197,7 +197,7 @@ const titleValue = ref('')
const { setNewDatasList } = useEditor() const { setNewDatasList } = useEditor()
const autoSave = inject("SellTravelSave") as any const autoSave = inject("SellTravelSave") as any
const { userInfo } = storeToRefs(userStore()) const { userInfo } = storeToRefs(useUserStore())
const datas = reactive({ const datas = reactive({
DataSource:{}, DataSource:{},
...@@ -490,7 +490,7 @@ const setTemplate = async (type) =>{ ...@@ -490,7 +490,7 @@ const setTemplate = async (type) =>{
if(dataLoading.value){ if(dataLoading.value){
dataLoadingStore.setDataLoading(0) dataLoadingStore.setDataLoading(0)
} }
if(model.value==1&&userInfo.value.IsEditTripTemplate==1){ if(model.value==1&&userInfo.value.isTemplate==1){
arr.forEach(x=>{ arr.forEach(x=>{
if(searchData.value.TemplateType==2) { if(searchData.value.TemplateType==2) {
x.pageType = 0 x.pageType = 0
...@@ -547,7 +547,7 @@ const setTemplate = async (type) =>{ ...@@ -547,7 +547,7 @@ const setTemplate = async (type) =>{
} }
queryObj.value.TempData = JSON.stringify(arr) queryObj.value.TempData = JSON.stringify(arr)
if(model.value==1&&userInfo.value.IsEditTripTemplate==1){ if(model.value==1&&userInfo.value.isTemplate==1){
datas.loading = true datas.loading = true
await SetTripTemplateSlide() await SetTripTemplateSlide()
}else if(ConfigId.value&&model.value!=2){ }else if(ConfigId.value&&model.value!=2){
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage' import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage'
import { deleteDiscardedDB } from '@/utils/database' import { deleteDiscardedDB } from '@/utils/database'
import { isPC, query } from '@/utils/common' import { isPC, query } from '@/utils/common'
import { userStore } from '@/store/user' import { useUserStore } from '@/store/user'
import { injectKeyTemplate } from '@/types/injectKey' import { injectKeyTemplate } from '@/types/injectKey'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { domainManager } from '@/utils/domainManager' import { domainManager } from '@/utils/domainManager'
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
const slidesStore = useSlidesStore() const slidesStore = useSlidesStore()
const { databaseId } = storeToRefs(mainStore) const { databaseId } = storeToRefs(mainStore)
const { screening, market, model, ConfigId } = storeToRefs(useScreenStore()) const { screening, market, model, ConfigId } = storeToRefs(useScreenStore())
const { userInfo } = storeToRefs(userStore()) const { userInfo } = storeToRefs(useUserStore())
const { SalesEditor, SalesTripId } = storeToRefs(useSellTemplateStore()) const { SalesEditor, SalesTripId } = storeToRefs(useSellTemplateStore())
const { slides } = storeToRefs(useSlidesStore()) const { slides } = storeToRefs(useSlidesStore())
const { enterScreeningFromStart } = storeToRefs(useScreenStore()) const { enterScreeningFromStart } = storeToRefs(useScreenStore())
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
ConfigIdStore.setConfigId(ConfigId) ConfigIdStore.setConfigId(ConfigId)
modelStore.setModel(model) modelStore.setModel(model)
try { try {
if(param.uid) await userStore().setUserLoginAsync(userId) if(param.uid) await useUserStore().setUserAutoLoginAsync(userId)
if(ConfigId>0&&model!=2) await GetTripConfig(ConfigId) if(ConfigId>0&&model!=2) await GetTripConfig(ConfigId)
} catch (error) {} } catch (error) {}
if(userId>0)isFinish.value=true if(userId>0)isFinish.value=true
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
<el-col :span="6" style="text-align: right;"> <el-col :span="6" style="text-align: right;">
<el-dropdown split-button <el-dropdown split-button
size="small" type="primary" size="small" type="primary"
v-if="userInfo.IsEditTripTemplate==1 && model==1" v-if="userInfo.isTemplate==1 && model==1"
@click="addTemplate(1)"> @click="addTemplate(1)">
<span style="font-size: 23px;margin-right: 10px;"> + </span> <span>创建</span> <span style="font-size: 23px;margin-right: 10px;"> + </span> <span>创建</span>
<template #dropdown> <template #dropdown>
...@@ -196,7 +196,7 @@ ...@@ -196,7 +196,7 @@
<el-button class="MarketIndexButtom" type="primary" <el-button class="MarketIndexButtom" type="primary"
@click="goToTemplate(item)">选择该{{item.TemplateType!=2?'模版':'广告'}}</el-button> @click="goToTemplate(item)">选择该{{item.TemplateType!=2?'模版':'广告'}}</el-button>
</div> </div>
<div class="q-mt-lg" v-if="userInfo.IsEditTripTemplate==1 && model==1"> <div class="q-mt-lg" v-if="userInfo.isTemplate==1 && model==1">
<el-button class="MarketIndexButtom" type="primary" <el-button class="MarketIndexButtom" type="primary"
@click="deleteTemplate(item)">删除</el-button> @click="deleteTemplate(item)">删除</el-button>
</div> </div>
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
import { reactive, ref, inject, watch, onMounted} from "vue"; import { reactive, ref, inject, watch, onMounted} from "vue";
import LineService from '@/services/LineService' import LineService from '@/services/LineService'
import ConfigService from '@/services/ConfigService' import ConfigService from '@/services/ConfigService'
import { userStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import { useSellTemplateStore } from '@/store' import { useSellTemplateStore } from '@/store'
import { useScreenStore } from "@/store/screen"; import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
...@@ -250,7 +250,7 @@ import { useRouter } from "vue-router"; ...@@ -250,7 +250,7 @@ import { useRouter } from "vue-router";
const { const {
userInfo userInfo
} = storeToRefs(userStore()) } = storeToRefs(useUserStore())
const router = useRouter(); const router = useRouter();
const lines = ref([] as Array < any > ) //线路 const lines = ref([] as Array < any > ) //线路
const countriesOther = ref(['日本', '韩国', '老挝', '法国', '意大利'] as Array < any > ) //国家 const countriesOther = ref(['日本', '韩国', '老挝', '法国', '意大利'] as Array < any > ) //国家
......
...@@ -6,8 +6,9 @@ ...@@ -6,8 +6,9 @@
<SearchDocument @open-position="openFilePosition"></SearchDocument> <SearchDocument @open-position="openFilePosition"></SearchDocument>
</div> </div>
<div class="user"> <div class="user">
<el-avatar :size="30" :src="userInfo.Icon" v-if="userInfo.Icon"/> <!-- <el-avatar :size="30" :src="userInfo.photo" v-if="userInfo.photo"/>
<el-avatar :size="30" v-else> {{ userInfo.EmName[0] }} </el-avatar> <el-avatar :size="30" v-else> {{ userInfo.nickname[0] }} </el-avatar> -->
<UserCard></UserCard>
</div> </div>
</div> </div>
<div class="col row"> <div class="col row">
...@@ -87,22 +88,23 @@ ...@@ -87,22 +88,23 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { userStore } from '@/store/user'; import { useUserStore } from '@/store/user';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { ref,reactive,provide,inject } from 'vue'; import { ref } from 'vue';
import SearchDocument from './components/SearchDocument.vue' import SearchDocument from './components/SearchDocument.vue'
import BrowsingHistory from './BrowsingHistory.vue' import BrowsingHistory from './BrowsingHistory.vue'
import StarTarget from './StarTarget.vue' import StarTarget from './StarTarget.vue'
import ShareList from './Share.vue'; import ShareList from './Share.vue';
import journeyAds from './journeyAds.vue' import journeyAds from './journeyAds.vue'
import RecycleBin from './RecycleBin.vue' import RecycleBin from './RecycleBin.vue'
import UserCard from '@/components/User/UserCard.vue'
import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete } from '@element-plus/icons-vue'; import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete } from '@element-plus/icons-vue';
import { useSellTemplateStore, useScreenStore, useSlidesStore } from '@/store'
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { openNewBlank } from '@/utils/common'; import { openNewBlank } from '@/utils/common';
const router = useRouter(); const router = useRouter();
const {userInfo} = storeToRefs(userStore()) const {userInfo} = storeToRefs(useUserStore())
console.log(userInfo.value)
const currentMenu = ref<number>(0) const currentMenu = ref<number>(0)
const position = ref<{FileId:number,FileType:1|2,Position:{FileId:number,FileName:string}[]}|null>(null) const position = ref<{FileId:number,FileType:1|2,Position:{FileId:number,FileName:string}[]}|null>(null)
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
import { inject, ref } from 'vue'; import { inject, ref } from 'vue';
import { Search } from '@element-plus/icons-vue'; import { Search } from '@element-plus/icons-vue';
import ConfigService from '@/services/ConfigService'; import ConfigService from '@/services/ConfigService';
import { userStore } from '@/store/user'; import { useUserStore } from '@/store/user';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import {formatDateTimeToRead} from '@/utils/common' import {formatDateTimeToRead} from '@/utils/common'
import { useScreenStore, useSellTemplateStore, useSlidesStore } from '@/store'; import { useScreenStore, useSellTemplateStore, useSlidesStore } from '@/store';
...@@ -62,7 +62,7 @@ const emit = defineEmits<{ ...@@ -62,7 +62,7 @@ const emit = defineEmits<{
(event: 'open-position',playload:any): void (event: 'open-position',playload:any): void
}>() }>()
const {userInfo} = storeToRefs(userStore()) const {userInfo} = storeToRefs(useUserStore())
const searchKey = ref<string>('') const searchKey = ref<string>('')
const isSearchFocus = ref(false) const isSearchFocus = ref(false)
const searchType = ref<string>('0') const searchType = ref<string>('0')
...@@ -73,7 +73,7 @@ const searchData = ref({} as any); ...@@ -73,7 +73,7 @@ const searchData = ref({} as any);
searchData.value = inject(injectKeyTemplate); searchData.value = inject(injectKeyTemplate);
const showRightContent = ref(0) const showRightContent = ref(0)
const loggedder = ref('') const loggedder = ref('')
loggedder.value = userInfo.value.emName loggedder.value = userInfo.value.nickname
const searchHandler = ()=>{ const searchHandler = ()=>{
if(loading.value) return if(loading.value) return
......
...@@ -180,7 +180,7 @@ ...@@ -180,7 +180,7 @@
emit('success')}"></TreeFileRecover> emit('success')}"></TreeFileRecover>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { userStore } from '@/store/user'; import { useUserStore } from '@/store/user';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { ApiResult } from '@/configs/axios'; import { ApiResult } from '@/configs/axios';
import OrgService from '@/services/OrgService'; import OrgService from '@/services/OrgService';
...@@ -257,8 +257,8 @@ import { useRouter } from 'vue-router'; ...@@ -257,8 +257,8 @@ import { useRouter } from 'vue-router';
}); });
const SalesEditorStore = useSellTemplateStore(); const SalesEditorStore = useSellTemplateStore();
const marketStore = useScreenStore(); const marketStore = useScreenStore();
const { userInfo } = storeToRefs(userStore()) const { userInfo } = storeToRefs(useUserStore())
datas.loggedder = userInfo.value.emName datas.loggedder = userInfo.value.nickname
const router = useRouter() const router = useRouter()
const dataList = ref([] as Array<any>); const dataList = ref([] as Array<any>);
dataList.value = props.list dataList.value = props.list
...@@ -609,8 +609,8 @@ import { useRouter } from 'vue-router'; ...@@ -609,8 +609,8 @@ import { useRouter } from 'vue-router';
else DeleteFile(row); else DeleteFile(row);
} else { } else {
if (row.FileType) { if (row.FileType) {
const cp =userInfo.value.emName!=row.CreateName&&row.IsView==0?0:1 const cp =userInfo.value.nickname!=row.CreateName&&row.IsView==0?0:1
const ep =userInfo.value.emName!=row.CreateName&&row.IsDownLoad==0?0:1 const ep =userInfo.value.nickname!=row.CreateName&&row.IsDownLoad==0?0:1
//@TODO:返回字段中缺少CreateBy, //@TODO:返回字段中缺少CreateBy,
const url = createSaleEditorLink(row.FileId,row.TempId,row.FileType,row.ParentFileId,ep,cp) const url = createSaleEditorLink(row.FileId,row.TempId,row.FileType,row.ParentFileId,ep,cp)
router.push({ router.push({
......
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