Commit 896ce41b authored by 罗超's avatar 罗超

Merge branch 'router' of http://gitlab.oytour.com/viitto/pptist into router

# Conflicts:
#	src/store/menu.ts
parents 0c3ce761 784b3022
......@@ -250,7 +250,7 @@ const routes: RouteRecordRaw[] = [
path: '/m',
component: () => import('@/views/TemplateCenter/Index.vue'),
meta:{
title:'字体'
title:'模版管理'
}
},
{
......@@ -268,10 +268,10 @@ const routes: RouteRecordRaw[] = [
}
},
{
path: '/m/TemplateManagement',
component: () => import('@/views/TemplateCenter/TemplateManagement.vue'),
path: '/m/font',
component: () => import('@/views/TemplateCenter/font.vue'),
meta:{
title:'模版管理'
title:'字体'
}
},
]
......
import Api,{ HttpResponse, Result } from './../utils/request';
class FontService{
//删除字体文件信息
static async RemoveTripFile(id:number):Promise<HttpResponse>{
return Api.Post("triptemplate_RemoveTripFile",{id})
}
//获取字体文件信息
static async GetAllFontsAsync():Promise<HttpResponse>{
return Api.Post("triptemplate_GetFontList",{})
......
......@@ -2,6 +2,18 @@ import Api,{ HttpResponse, Result } from './../utils/request';
class LineService{
// 根据编号删除配置
static async RemoveTemplateConfigData(ID : number):Promise<HttpResponse>{
return Api.Post("triptemplate_RemoveTemplateConfigData",{ID})
}
// 根据ke新增编辑配置
static async SetTemplateConfigData(params : any):Promise<HttpResponse>{
return Api.Post("triptemplate_SetTemplateConfigData",params)
}
// 获取配置项数据(颜色、国家、季节) Trip_Template_Color Trip_Template_Country Trip_Template_Season
static async GetTemplateConfigDataList(params : any):Promise<HttpResponse>{
return Api.Post("triptemplate_GetTemplateConfigDataList",params)
}
// 获取配置项数据(颜色、国家、季节)
static async GetTemplateConfigData(params : any):Promise<HttpResponse>{
return Api.Post("triptemplate_GetTemplateConfigData",params)
......
......@@ -10,17 +10,18 @@ export interface Menu{
export type MenuOwner = '*'|'F'|'V'|'A'|'E'|'M'
export interface MenuState {
userMenu:Menu[]
temMenu: Menu[]
currentMenu: Menu|null
}
const menus:{menu:Menu,owner:MenuOwner}[] = [
{menu:{name:'账号一览',icon:'IconEarth',url:'/u'},owner:'F'},
{menu:{name:'订单/发票',icon:'IconCurrency',url:'/u/order'},owner:'F'},
{menu:{name:'账户设置',icon:'IconProtect',url:'/u/setting'},owner:'F'},
{menu:{name:'字体',icon:'IconAddText',url:'/m'},owner:'M'},
{menu:{name:'账号一览',icon:'IconEarth',url:'/u'},owner:'*'},
{menu:{name:'订单/发票',icon:'IconCurrency',url:'/u/order'},owner:'*'},
{menu:{name:'账户设置',icon:'IconProtect',url:'/u/setting'},owner:'*'},
{menu:{name:'模版管理',icon:'IconPageTemplate',url:'/m'},owner:'M'},
{menu:{name:'国家',icon:'IconWorld',url:'/m/nation'},owner:'M'},
{menu:{name:'颜色',icon:'IconPlatte',url:'/m/colour'},owner:'M'},
{menu:{name:'模版管理',icon:'IconPageTemplate',url:'/m/TemplateManagement'},owner:'M'},
{menu:{name:'字体',icon:'IconAddText',url:'/m/font'},owner:'M'},
{menu:{name:'账号一览',icon:'IconEarth',url:'/a'},owner:'A'},
{menu:{name:'成员管理',icon:'IconPeoples',url:'/a/u'},owner:'A'},
{menu:{name:'数据统计',icon:'IconDashBoard',url:'/a/d'},owner:'A'},
......@@ -43,6 +44,7 @@ const menus:{menu:Menu,owner:MenuOwner}[] = [
export const useMenuStore = defineStore('menu', {
state: (): MenuState => ({
userMenu:[],
temMenu:[],
currentMenu:null
}),
getters:{
......@@ -72,15 +74,12 @@ export const useMenuStore = defineStore('menu', {
return state.userMenu
},
getTemplateMenu:(state)=>{
if (!state.userMenu || state.userMenu.length==0) {
let userPermissions:MenuOwner[] = ['M']
const findFreeMenu = menus.filter(x=>userPermissions.includes(x.owner))
if(findFreeMenu){
state.userMenu = findFreeMenu.map(x=>x.menu)
}
let userPermissions:MenuOwner[] = ['M']
const findFreeMenu = menus.filter(x=>userPermissions.includes(x.owner))
if(findFreeMenu){
state.temMenu = findFreeMenu.map(x=>x.menu)
}
return state.userMenu
return state.temMenu
},
getTeamMenu:(state)=>{
const userStore= useUserStore()
......
<template>
<div class="full-height column flex-center items-center" style="height: 100vh;">
<el-empty :image-size="200" description="没有找到页面" />
<el-empty :image-size="200" description="没有找到页面" :image="noDataImg(1)"/>
</div>
</template>
\ No newline at end of file
</template>
<script setup lang="ts">
import { noDataImg } from "@/utils/common";
</script>
\ No newline at end of file
......@@ -788,15 +788,6 @@ onMounted(()=>{
.marketTag+.marketTag{
margin-left: 32px;
}
.colorMark:hover .ColorNameBox {
display: block;
}
.ColorNameBox{
width: 0;
display: none;
left: 0;
top: -30px;
}
.ColorName{
background: black;
color: #fff;
......@@ -804,14 +795,6 @@ onMounted(()=>{
border-radius: 3px;
margin-left: -10px;
}
.ColorNameBJ{
width: 0px;
height: 0px;
border: 5px solid transparent;
border-top-color: black;
display: block;
margin-left: 2px;
}
.colorMark{
width: 28px;
height: 28px;
......
This diff is collapsed.
......@@ -32,20 +32,29 @@
</template>
<script lang="ts" setup>
import { storeToRefs } from 'pinia'
import UserCard from "@/components/User/UserCard.vue";
import { useMenuStore } from "@/store";
import { useMenuStore,useScreenStore } from "@/store";
import { ref, watch } from "vue";
import { useRouter } from "vue-router";
import { useUserStore } from "@/store/user"
const router = useRouter()
const useMenu = useMenuStore();
const menus = ref(useMenu.getTemplateMenu);
const { model } = storeToRefs(useScreenStore())
const activeIndex = ref(0)
const userStore= useUserStore()
const userInfo = userStore.getUser
if(!userInfo.isTemplate) router.push('/notfound')
const forwardSpace = () => router.push('/space')
watch(() => router.currentRoute.value.path, (toPath) => {
menus.value = useMenu.getUserMenu
if(!userInfo.isTemplate) return router.push('/notfound')
menus.value = useMenu.getTemplateMenu
if(!menus.value) return
activeIndex.value = menus.value.findIndex(x=>x.url==router.currentRoute.value.path)
},{immediate: true,deep: true})
......
This diff is collapsed.
<template>
<div class="row items-center flex-between q-mb-lg">
<div style="width: 224px;"></div>
<el-input style="width:600px" v-model="queryObj.Title" placeholder="请输入关键字" class="q-pr-33">
<div></div>
<el-input style="width:600px" v-model="queryObj.Title" placeholder="请输入关键字" class="q-pr-33" clearable
@keyup.enter="search">
<template #append>
<div class="Market-select-line absolute"></div>
<div class="row items-center pointer">
......@@ -18,22 +19,22 @@
v-load-more="tableScrollHandler" :data="dataList" class="tableHBEbeef5 col" height="82vh">
<el-table-column label="主色调">
<template #default="scope">
-
{{scope.row.ColorName?scope.row.ColorName:'不限'}}
</template>
</el-table-column>
<el-table-column label="颜色名称">
<template #default="scope">
{{scope.row.ColorName}}
{{scope.row.Name}}
</template>
</el-table-column>
<el-table-column label="色值">
<template #default="scope">
<el-tag
:color="scope.row.ColorValue"
:color="scope.row.Content"
effect="dark" class="q-mr-md">
&nbsp;
</el-tag>
{{scope.row.ColorValue}}
{{scope.row.Content}}
</template>
</el-table-column>
<el-table-column label="操作" width="160">
......@@ -49,35 +50,35 @@
:close-on-click-modal="false" style="width: 373px;"
class="small-padding" @close="close">
<template #header>
<div class="text-title text-center fz16 PingFangSC">{{datas.params.id?'编辑':'新增'}}颜色</div>
<div class="text-title text-center fz16 PingFangSC">{{datas.params.ID?'编辑':'新增'}}颜色</div>
</template>
<div class="addTemplateBox q-mb-lg fz14">
<div class="addTemplateInput q-mt-xs q-mb-lg row items-center">
<span class="q-pr-md shrink">主色:</span>
<el-select v-model="datas.params.ColorId"
<el-select v-model="datas.params.Code"
style="width: 260px;"
class="ml-1"
placeholder="主颜" clearable>
<el-option key="" label="不限" value=""/>
<el-option
v-for="item in ColorList"
:key="item.ColorName"
:key="item.Id"
:label="`${item.ColorName}`"
:value="item.ColorName"
:value="item.Id"
/>
</el-select>
</div>
<div class="addTemplateInput q-mt-xs q-mb-lg row items-center">
<span class="q-pr-md shrink">名称:</span>
<el-input min="750" v-model="datas.params.ColorName"
<el-input min="750" v-model="datas.params.Name"
placeholder="请输入颜色名称" class=""></el-input>
</div>
<div class="addTemplateInput q-mt-xs q-mb-lg row items-center">
<span class="q-pr-md shrink">色值:</span>
<el-input min="750" v-model="datas.params.ColorValue"
<el-input min="750" v-model="datas.params.Content"
placeholder="例子:#e5e3da" class=""></el-input>
<div class="q-pl-sm">
<el-color-picker v-model="datas.params.ColorValue" />
<el-color-picker v-model="datas.params.Content" />
<!-- <el-tag
:color="datas.params.ColorValue" style="width: 32px;height: 32px;"
effect="dark">
......@@ -89,7 +90,7 @@
<div class="text-center">
<el-button class="MarketIndexButtom MarketRec" type="primary" @click="ConfirmCreation"
:loading="requestLoading">
确认{{datas.params.id?'编辑':'新增'}}
确认{{datas.params.ID?'编辑':'新增'}}
</el-button>
</div>
</el-dialog>
......@@ -127,8 +128,8 @@
const loading = ref(false as any)
const deleteLoading = ref<any>(null)
const queryObj = reactive({
pageIndex: 1,
pageCount: 0,
DictKey: 'Trip_Template_Color',
Name: ''
})
const dataTableRef = ref()
const datas = reactive({
......@@ -136,9 +137,10 @@
addEditVisible: false,
params: {
ID: 0,
ColorName: '',
ColorValue: '',
ColorId: ''
DictKey: 'Trip_Template_Color',
Name: '',
Content: '',
Code: '',
}
})
......@@ -149,19 +151,21 @@
const close = () => {
datas.params = {
ID: 0,
ColorName: '',
ColorValue: ''
ID: 0,
DictKey: 'Trip_Template_Color',
Name: '',
Content: '',
Code: '',
}
}
const ConfirmCreation = async () => {
//添加、编辑颜色
if(!datas.params.params)return ElMessage({
if(!datas.params.Name)return ElMessage({
showClose: true,
message: '请完善颜色名称',
type: 'warning',
})
if(!datas.params.ColorValue){
if(!datas.params.Content){
ElMessage({
showClose: true,
message: '请完善颜色的16进制',
......@@ -169,7 +173,7 @@
})
return
}
if(datas.params.ColorValue.indexOf('#')==-1){
if(datas.params.Content.indexOf('#')==-1){
ElMessage({
showClose: true,
message: "色号需要在最前面加 # 号",
......@@ -178,7 +182,7 @@
return
}
datas.requestLoading = true
const result = await ConfigService.SetTemplateConfigData(datas.params)
const result = await LineService.SetTemplateConfigData(datas.params)
if(result){
datas.addEditVisible = false
datas.requestLoading = false
......@@ -199,8 +203,7 @@
deleteFont(index,item)
}else{
datas.params = JSON.parse(JSON.stringify(item))
datas.params.ColorName = item.ColorName
datas.params.ColorValue = item.ColorValue
datas.params.Code = item.Code?Number(item.Code):''
datas.addEditVisible = true
}
}
......@@ -253,26 +256,28 @@
}
}
const search = () => {
if(queryObj.Title) dataList.value = RawDataList.value.filter(x=> {return x.label.indexOf(queryObj.Title)!=-1})
else dataList.value = JSON.parse(JSON.stringify(RawDataList.value))
// queryObj.pageIndex = 1
// querySearchHandler()
queryObj.pageIndex = 1
querySearchHandler()
}
const querySearchHandler = async () => {
loading.value = true
try {
let pageRes = await LineService.GetTemplateConfigData();
let pageRes = await LineService.GetTemplateConfigDataList(queryObj);
if (pageRes.data.resultCode == 1) {
// let arrList = function(list){
// list.forEach(x=>{
// x.checked = false
// })
// }
// arrList(pageRes.data.data.pageData)
dataList.value = pageRes.data.data.ColorList //dataList.value.concat(pageRes.data.data);
RawDataList.value = pageRes.data.data.ColorList
// queryObj.pageCount = pageRes.data.data.pageCount;
let arrList = function(list){
list.forEach(x=>{
x.ColorName = ''
})
}
arrList(pageRes.data.data)
dataList.value = pageRes.data.data
for(let i=0;i<dataList.value.length;i++){
let Color = ColorList.filter(x=>{return x.Id==dataList.value[i].Code })
if(Color.length>0) {
dataList.value[i].ColorName = Color[0].ColorName
}
}
}
loading.value = false
} catch (error) {
......
This diff is collapsed.
<template>
<div class="row items-center flex-between q-mb-lg">
<div style="width: 224px;"></div>
<el-input style="width:600px" v-model="queryObj.Title" placeholder="请输入关键字" class="q-pr-33">
<div></div>
<el-input style="width:600px" v-model="queryObj.Name" placeholder="请输入关键字" class="q-pr-33" clearable
@keyup.enter="search">
<template #append>
<div class="Market-select-line absolute"></div>
<div class="row items-center pointer">
......@@ -18,7 +19,7 @@
v-load-more="tableScrollHandler" :data="dataList" class="tableHBEbeef5 col" height="82vh">
<el-table-column label="国家">
<template #default="scope">
{{scope.row.CountryName}}
{{scope.row.Name}}
</template>
</el-table-column>
<el-table-column label="操作" width="160">
......@@ -34,19 +35,19 @@
:close-on-click-modal="false" style="width: 373px;"
class="small-padding" @close="close">
<template #header>
<div class="text-title text-center fz16 PingFangSC">{{datas.params.id?'编辑':'新增'}}国家</div>
<div class="text-title text-center fz16 PingFangSC">{{datas.params.ID?'编辑':'新增'}}国家</div>
</template>
<div class="addTemplateBox q-mb-lg fz14">
<div class="addTemplateInput q-mt-xs q-mb-lg row items-center">
<span class="q-pr-md shrink">名称:</span>
<el-input min="750" v-model="datas.params.Content"
<el-input min="750" v-model="datas.params.Name"
placeholder="请输入国家名称" class=""></el-input>
</div>
</div>
<div class="text-center">
<el-button class="MarketIndexButtom MarketRec" type="primary" @click="ConfirmCreation"
:loading="requestLoading">
确认{{datas.params.id?'编辑':'新增'}}
确认{{datas.params.ID?'编辑':'新增'}}
</el-button>
</div>
</el-dialog>
......@@ -59,7 +60,7 @@
import { storeToRefs } from "pinia";
import { USER_DEFAULT_HEADER } from '@/configs/customer'
import { Edit,Delete } from '@element-plus/icons-vue';
import { ElMessage, ElMessageBox } from 'element-plus'
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
import { CustomerFonts } from '@/store/font'
import {getFonts} from '@/utils/psdParser/index'
import FontService from '@/services/FontService'
......@@ -83,8 +84,8 @@
const loading = ref(false as any)
const deleteLoading = ref<any>(null)
const queryObj = reactive({
pageIndex: 1,
pageCount: 0,
DictKey: 'Trip_Template_Country',
Name: ''
})
const dataTableRef = ref()
const datas = reactive({
......@@ -92,9 +93,11 @@
addEditVisible: false,
params: {
ID: 0,
Code: '',
DictKey: 'Trip_Template_Country',
Name: '',
Content: '',
DictKey: 'Trip_Template_Country'
Code: '',
}
})
......@@ -103,10 +106,11 @@
const close = () => {
datas.params = {
ID: 0,
Code: '',
Content: '',
DictKey: 'Trip_Template_Country'
ID: 0,
DictKey: 'Trip_Template_Country',
Name: '',
Content: '',
Code: '',
}
}
const ConfirmCreation = async () => {
......@@ -117,7 +121,7 @@
type: 'warning',
})
datas.requestLoading = true
const result = await ConfigService.SetTemplateCountryData(datas.params)
const result = await LineService.SetTemplateConfigData(datas.params)
if(result){
datas.addEditVisible = false
datas.requestLoading = false
......@@ -135,18 +139,16 @@
}
const editDelete = (item: Object,index: Number) => {
if(index>=0){
deleteFont(index,item)
deleteData(item)
}else{
datas.params = JSON.parse(JSON.stringify(item))
console.log(datas.params,'----')
datas.params.Content = item.CountryName
datas.addEditVisible = true
}
}
const deleteFont = (index: Number, item: Object) => {
const deleteData = (item: Object) => {
ElMessageBox.confirm(
`此操作将删除 ${item.label} 国家,是否确定?`,
`此操作将删除 ${item.Content} 国家,是否确定?`,
'提示',
{
confirmButtonText: '确定',
......@@ -155,34 +157,33 @@
}
).then(async () => {
try {
dataList.value.splice(index,1)
// let queryMsg = {
// TempId: item.TempId
// }
// deleteLoading.value = ElLoading.service({
// lock:true,
// text:'正在处理'
// })
// let dataRes = await ConfigService.SetDeleteTripTemplate(queryMsg)
// if (dataRes.data.resultCode == 1) {
// queryObj.pageIndex = 1
// ElMessage({
// showClose: true,
// message: `删除${item.label}成功`,
// type: 'success',
// })
// await queryTemplateBySearchHandler()
// }else {
// ElMessage({
// showClose: true,
// message: `删除${item.label}失败`,
// type: 'warning',
// })
// }
// deleteLoading.value.close()
// deleteLoading.value = null
deleteLoading.value = ElLoading.service({
lock:true,
text:'正在处理'
})
let dataRes = await LineService.RemoveTemplateConfigData(item.ID)
if (dataRes.data.resultCode == 1) {
queryObj.pageIndex = 1
ElMessage({
showClose: true,
message: `删除${item.Content}成功`,
type: 'success',
})
search()
}else {
ElMessage({
showClose: true,
message: `删除${item.Content}失败`,
type: 'warning',
})
}
} catch (error) {}
}).catch(() => {})
deleteLoading.value.close()
deleteLoading.value = null
}).catch(() => {
deleteLoading.value.close()
deleteLoading.value = null
})
}
const tableScrollHandler = ()=>{
......@@ -192,26 +193,16 @@
}
}
const search = () => {
if(queryObj.Title) dataList.value = RawDataList.value.filter(x=> {return x.label.indexOf(queryObj.Title)!=-1})
else dataList.value = JSON.parse(JSON.stringify(RawDataList.value))
// queryObj.pageIndex = 1
// querySearchHandler()
queryObj.pageIndex = 1
querySearchHandler()
}
const querySearchHandler = async () => {
loading.value = true
try {
let pageRes = await LineService.GetTemplateConfigData();
let pageRes = await LineService.GetTemplateConfigDataList(queryObj);
if (pageRes.data.resultCode == 1) {
// let arrList = function(list){
// list.forEach(x=>{
// x.checked = false
// })
// }
// arrList(pageRes.data.data.pageData)
dataList.value = pageRes.data.data.CountryList //dataList.value.concat(pageRes.data.data);
RawDataList.value = pageRes.data.data.CountryList
// queryObj.pageCount = pageRes.data.data.pageCount;
dataList.value = pageRes.data.data
}
loading.value = false
} catch (error) {
......
......@@ -8,7 +8,6 @@
width: elementInfo.width + 'px',
height: elementInfo.height + 'px',
}"
style="overflow: hidden;"
>
<div
class="rotate-wrapper"
......@@ -57,8 +56,10 @@
/>
<!-- 当字号过大且行高较小时,会出现文字高度溢出的情况,导致拖拽区域无法被选中,因此添加了以下节点避免该情况 -->
<div class="drag-handler top" @dblclick="setEditorHandler"></div>
<div class="drag-handler bottom" @dblclick="setEditorHandler"></div>
<template v-show="!activeGroupElementId">
<div class="drag-handler top" @dblclick="setEditorHandler"></div>
<div class="drag-handler bottom" @dblclick="setEditorHandler"></div>
</template>
</div>
</div>
</div>
......@@ -76,7 +77,6 @@ import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import ElementOutline from '@/views/components/element/ElementOutline.vue'
import ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'
import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
const props = defineProps<{
elementInfo: PPTTextElement
......@@ -86,7 +86,7 @@ const props = defineProps<{
const mainStore = useMainStore()
const slidesStore = useSlidesStore()
const { handleElementId, isScaling } = storeToRefs(mainStore)
const { handleElementId, isScaling, activeGroupElementId } = storeToRefs(mainStore)
const { addHistorySnapshot } = useHistorySnapshot()
......@@ -137,12 +137,9 @@ const updateTextElementHeight = (entries: ResizeObserverEntry[]) => {
let realHeight = contentRect.height + 20
const realWidth = contentRect.width + 20
const documentHeight = useSlidesStore().viewportRatio>1?VIEWPORT_SIZE.Value:VIEWPORT_VER_SIZE.Value
if (!props.elementInfo.vertical && props.elementInfo.height !== realHeight) {
if (!isScaling.value) {
const maxHeight = documentHeight - props.elementInfo.top - 10
realHeight = realHeight<=maxHeight?realHeight:maxHeight
slidesStore.updateElement({
id: props.elementInfo.id,
props: { height: realHeight },
......
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