Commit 7c19f5e6 authored by zhengke's avatar zhengke

模版管理

parent b918ca45
......@@ -18,7 +18,9 @@ page {
src: url("https://im.oytour.com/tripfont/PingFangR.ttf") format("truetype");
font-display: swap;
}
.el-table.tableHBEbeef5 th.el-table__cell {
background-color: #ebeef5;
}
/* 修改滚动条滑块的样式 */
::-webkit-scrollbar-thumb {
background-color: #BBBECE;
......
This diff is collapsed.
This diff is collapsed.
......@@ -133,7 +133,9 @@ import {
Like,
Currency,
Protect,
Help
Help,
World,
PageTemplate
} from '@icon-park/vue-next'
export interface Icons {
......@@ -271,7 +273,9 @@ export const icons: Icons = {
IconLike: Like,
IconCurrency: Currency,
IconProtect: Protect,
IconHelp:Help
IconHelp:Help,
IconWorld:World,
IconPageTemplate:PageTemplate
}
export default {
......
......@@ -211,11 +211,32 @@ const routes: RouteRecordRaw[] = [
children:[
{
path: '/m',
component: () => import('@/views/UserCenter/Index.vue'),
component: () => import('@/views/TemplateCenter/Index.vue'),
meta:{
title:'字体管理'
}
},
{
path: '/m/nation',
component: () => import('@/views/TemplateCenter/nation.vue'),
meta:{
title:'国家管理'
}
},
{
path: '/m/colour',
component: () => import('@/views/TemplateCenter/colour.vue'),
meta:{
title:'颜色管理'
}
},
{
path: '/m/TemplateManagement',
component: () => import('@/views/TemplateCenter/TemplateManagement.vue'),
meta:{
title:'颜色管理'
}
},
]
},
{
......
......@@ -21,7 +21,10 @@ const menus:{menu:Menu,owner:MenuOwner}[] = [
{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:'IconAddText',url:'/m'},owner:'M'}
{menu:{name:'字体设置',icon:'IconAddText',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'},
]
export const useMenuStore = defineStore('menu', {
......
......@@ -128,4 +128,22 @@ export const formatDateTimeToRead = (dateStr:string,prefix:string='') =>{
export const noDataImg = (type:Number) =>{
if(type==1) return require('@/assets/img/noData.png')
if(type==2) return require('@/assets/img/theEend.png')
}
// 主色值
export const DominantColour = () =>{
return [
{ColorName:'红',ColorValue:'#E43939',Id:1},
{ColorName:'橙',ColorValue:'#F79A2C',Id:2},
{ColorName:'黄',ColorValue:'#FFF60B',Id:3},
{ColorName:'绿',ColorValue:'#3DD948',Id:4},
{ColorName:'青',ColorValue:'#39CAE4',Id:5},
{ColorName:'蓝',ColorValue:'#2C31F1',Id:6},
{ColorName:'紫',ColorValue:'#7A39E4',Id:7},
{ColorName:'玫红',ColorValue:'#E65FC1',Id:8},
{ColorName:'棕色',ColorValue:'#D0B478',Id:9},
{ColorName:'白',ColorValue:'#FFFFFF',Id:10},
{ColorName:'黑',ColorValue:'#000000',Id:11},
{ColorName:'灰',ColorValue:'#BABABA',Id:12},
]
}
\ No newline at end of file
......@@ -44,12 +44,12 @@
</div>
<p class="q-mt-md row flex-between items-center">
<div><span class="Required q-mr-md">*</span>国家:</div>
<el-button v-if="!datas.EditAddCountryShow" class="button-new-tag ml-1"
<!-- <el-button v-if="!datas.EditAddCountryShow" class="button-new-tag ml-1"
style="width: 56px;"
size="small"
@click="EditAddDatas(0,0)">
+ 国家
</el-button>
</el-button> -->
</p>
<div class="row q-mt-md">
<el-select v-model="queryObj.CountryName" filterable class="m-2" placeholder="请选择国家"
......@@ -149,15 +149,15 @@
</div>
<p class="q-mt-md row flex-between items-center">
<div><span class="Required q-mr-md">*</span>选择颜色:</div>
<el-button v-if="!datas.EditAddShow" class="button-new-tag ml-1"
<!-- <el-button v-if="!datas.EditAddShow" class="button-new-tag ml-1"
style="width: 56px;"
size="small"
@click="EditAddDatas(0,1)">
+ 色值
</el-button>
</el-button> -->
</p>
<div class="row q-mt-md">
<!-- <el-select v-model="queryObj.ColorId" placeholder="请选择分类">
<el-select v-model="queryObj.ColorId" placeholder="请选择分类">
<el-option
key=""
label="不限"
......@@ -166,11 +166,11 @@
<el-option
v-for="item in ColorList"
:key="item.Id"
:label="`${item.Name}`"
:label="`${item.ColorName}`"
:value="item.Id"
/>
</el-select> -->
<el-select class="" v-model="queryObj.ColorStr" filterable placeholder="请选择颜色"
</el-select>
<el-select class="q-pl-sm" v-model="queryObj.ColorStr" filterable placeholder="请选择颜色"
@change="setCountryValue">
<el-option
v-for="item in dispositionObj.ColorList"
......@@ -190,10 +190,10 @@
</template>
</el-option>
</el-select>
<el-button v-if="!datas.EditAddShow" class="button-new-tag q-ml-md ml-1"
<!-- <el-button v-if="!datas.EditAddShow" class="button-new-tag q-ml-md ml-1"
@click="EditAddDatas(1,1)">
编辑
</el-button>
</el-button> -->
</div>
<div class="EditAddElement" v-if="datas.EditAddShow">
<p class="q-mt-md row flex-between">
......@@ -224,7 +224,7 @@
<el-option
v-for="item in ColorList"
:key="item.Id"
:label="`${item.Name}`"
:label="`${item.ColorName}`"
:value="item.Id"
/>
</el-select>
......@@ -292,7 +292,7 @@
import LineService from '@/services/LineService'
import ConfigService from '@/services/ConfigService'
import { injectKeyDataSource, injectKeyTemplate } from '@/types/injectKey'
import { getHtmlPlainText } from '@/utils/common'
import { getHtmlPlainText,DominantColour } from '@/utils/common'
import useExport from '@/hooks/useExport'
import ThumbnailSlide from '@/views/components/ThumbnailSlide/index.vue'
import AliyunUpload from '@/utils/upload/aliyun'
......@@ -324,20 +324,7 @@
searchData.value = inject(injectKeyTemplate)
const lines = ref([] as Array < any > ) //线路
const Series = ref([] as Array < any > ) //系列
const ColorList = [
{Name:'红',Id:1},
{Name:'橙',Id:2},
{Name:'黄',Id:3},
{Name:'绿',Id:4},
{Name:'青',Id:5},
{Name:'蓝',Id:6},
{Name:'紫',Id:7},
{Name:'玫红',Id:8},
{Name:'棕色',Id:9},
{Name:'白',Id:10},
{Name:'黑',Id:11},
{Name:'灰',Id:12},
]
const ColorList = DominantColour()
const cursors = [] as Array<any>
......
......@@ -329,7 +329,7 @@ import { useSellTemplateStore } from '@/store'
import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia";
import { injectKeyTemplate } from '@/types/injectKey'
import { createOpEditorLink, createSaleCreateLink, managerTemplateLink } from '@/utils/common'
import { createOpEditorLink, createSaleCreateLink, managerTemplateLink,DominantColour } from '@/utils/common'
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import UserCard from "@/components/User/UserCard.vue";
......@@ -436,6 +436,7 @@ const queryObj = reactive({
sort: 0,//排序方式
})
const setTemplateType = ref(1)
const ColorList = DominantColour()
// 删除监听滚动
const CloseDetails = () => {
......@@ -800,20 +801,6 @@ const getTemplateQuery = async () => {
}
//颜色
if (tempData && tempData.ColorList) {
let ColorList = [
{ColorName:'红',ColorValue:'#E43939',Id:1},
{ColorName:'橙',ColorValue:'#F79A2C',Id:2},
{ColorName:'黄',ColorValue:'#FFF60B',Id:3},
{ColorName:'绿',ColorValue:'#3DD948',Id:4},
{ColorName:'青',ColorValue:'#39CAE4',Id:5},
{ColorName:'蓝',ColorValue:'#2C31F1',Id:6},
{ColorName:'紫',ColorValue:'#7A39E4',Id:7},
{ColorName:'玫红',ColorValue:'#E65FC1',Id:8},
{ColorName:'棕色',ColorValue:'#D0B478',Id:9},
{ColorName:'白',ColorValue:'#FFFFFF',Id:10},
{ColorName:'黑',ColorValue:'#000000',Id:11},
{ColorName:'灰',ColorValue:'#BABABA',Id:12},
]
for(let i=0;i<ColorList.length;i++){
colorArr.value.push({
ColorName: ColorList[i].ColorName,
......
This diff is collapsed.
......@@ -9,7 +9,7 @@
<div class="col"></div>
<img src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1713433759000_282.png"
style="height: 33px" />
<div class="primary-link-button q-ml-lg">创建设计</div>
<div class="primary-link-button q-ml-lg cusor-pointer" @click="addVisible=true">创建设计</div>
<UserCard :size="33"></UserCard>
</div>
<div class="col row">
......@@ -27,10 +27,13 @@
</el-scrollbar>
</div>
</div>
<!-- 创建设计 -->
<temDesign :addTem="addVisible" @close="addVisible=false"/>
</template>
<script lang="ts" setup>
import UserCard from "@/components/User/UserCard.vue";
import temDesign from "@/components/home/temDesign.vue";
import { useMenuStore } from "@/store";
import { ref, watch } from "vue";
import { useRouter } from "vue-router";
......@@ -40,6 +43,8 @@ const useMenu = useMenuStore();
const menus = ref(useMenu.getTemplateMenu);
const activeIndex = ref(0)
const addVisible = ref(false)
const forwardSpace = () => router.push('/space')
watch(() => router.currentRoute.value.path, (toPath) => {
......
This diff is collapsed.
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">
<template #append>
<div class="Market-select-line absolute"></div>
<div class="row items-center pointer">
<img src="../../assets/img/home-search.png" width="21" height="21"
@click="search"/>
</div>
</template>
</el-input>
<el-button type="primary" size="default" style="color: #ffff;" @click="addFont">
新增国家
</el-button>
</div>
<el-table v-loading="loading" ref="dataTableRef" highlight-current-row
v-load-more="tableScrollHandler" :data="dataList" class="tableHBEbeef5 col" height="82vh">
<el-table-column label="国家">
<template #default="scope">
{{scope.row.CountryName}}
</template>
</el-table-column>
<el-table-column label="操作" width="150">
<template #default="scope">
<el-button type="primary" :icon="Edit" size="small" @click.stop="editDelete(scope.row)">编辑</el-button>
<el-button type="primary" :icon="Edit" size="small" @click.stop="editDelete(scope.row,scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 编辑国家 -->
<el-dialog v-model="datas.addEditVisible" :align-center="true"
:show-close="true" :close-on-press-escape="false"
: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>
</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"
placeholder="请输入国家名称" class="input-with-select"></el-input>
</div>
</div>
<div class="text-center">
<el-button class="MarketIndexButtom MarketRec" type="primary" @click="ConfirmCreation"
:loading="requestLoading">
确认{{datas.params.id?'编辑':'新增'}}
</el-button>
</div>
</el-dialog>
</template>
<script lang="ts" setup>
import { reactive, ref, inject, onMounted, watch} from "vue";
import { ENT_USER_THEME, VIP_USER_THEME } from "@/configs/customer";
import { useUserStore, useFontStore } from "@/store";
import { storeToRefs } from "pinia";
import { USER_DEFAULT_HEADER } from '@/configs/customer'
import { ElMessage, ElMessageBox } from 'element-plus'
import { CustomerFonts } from '@/store/font'
import {getFonts} from '@/utils/psdParser/index'
import FontService from '@/services/FontService'
import AliyunUpload from '@/utils/upload/aliyun'
import { reduceFont } from '@/utils/fonts/convertFont'
import ConfigService from '@/services/ConfigService'
import LineService from '@/services/LineService'
const useUser = useUserStore()
const { userInfo } = storeToRefs(useUser)
const { formatFonts } = storeToRefs(useFontStore())
const userTheme = useUser.getUserTheme
const vipTheme = VIP_USER_THEME
const enTheme = ENT_USER_THEME
const dataList = ref([] as Array < any > );
const RawDataList = ref([] as Array < any > );
const loading = ref(false as any)
const deleteLoading = ref<any>(null)
const queryObj = reactive({
pageIndex: 1,
pageCount: 0,
})
const dataTableRef = ref()
const datas = reactive({
requestLoading: false,
addEditVisible: false,
params: {
ID: 0,
Code: '',
Content: '',
DictKey: 'Trip_Template_Country'
}
})
const fonts = ref<{fontFamily:string,uploadType:number,selectedFont?:string}[]>()
const uploadingIndex = ref(-1)
const close = () => {
datas.params = {
ID: 0,
Code: '',
Content: '',
DictKey: 'Trip_Template_Country'
}
}
const ConfirmCreation = async () => {
//添加、编辑国家
if(!datas.params.Content)return ElMessage({
showClose: true,
message: '请完善国家名称',
type: 'warning',
})
datas.requestLoading = true
const result = await ConfigService.SetTemplateCountryData(datas.params)
if(result){
datas.addEditVisible = false
datas.requestLoading = false
querySearchHandler()
}else{
ElMessage({
message:'国家新增失败,请重试',
type:'error'
})
datas.requestLoading = false
}
}
const addFont = () => {
datas.addEditVisible = true
}
const editDelete = (item: Object,index: Number) => {
if(index>=0){
deleteFont(index,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) => {
ElMessageBox.confirm(
`此操作将删除 ${item.label} 国家,是否确定?`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).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
} catch (error) {}
}).catch(() => {})
}
const tableScrollHandler = ()=>{
if(queryObj.pageCount>queryObj.pageIndex){
queryObj.value.pageIndex++
refreshHandler()
}
}
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()
}
const querySearchHandler = async () => {
loading.value = true
try {
let pageRes = await LineService.GetTemplateConfigData();
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;
}
loading.value = false
} catch (error) {
loading.value = false
}
}
querySearchHandler()
</script>
<style scoped>
.addTemplateInput span {
width: 95px;
text-align: right;
}
.user-header {
padding: 16px 24px;
position: relative;
font-size: 14px;
color:#FFF;
z-index: 1;
width:100%;
overflow: hidden;
}
.user-header::after {
position: absolute;
top: 0;
right: -48px;
bottom: -12px;
z-index: -1;
width: 100%;
background: url('https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1713496804000_500.png') no-repeat right center / contain;
content: "";
transform: scale(2);
transform-origin: right center;
}
.user-label{
font-size: 12px;
margin-bottom: 8px;
}
.user-card {
width: 33%;
min-height: 112px;
}
.user-card .title,
.enter-card .title{
font-size: 15px;
font-weight: bold;
color: #000;
}
</style>
\ No newline at end of file
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