Browse Source

修改支持多语言

master
xh-pan1 11 months ago
parent
commit
49e76b66cc
  1. 3
      .eslintignore
  2. 33
      canvas-container/assets/font_icon/demo_index.html
  3. 10
      canvas-container/assets/font_icon/iconfont.css
  4. 2
      canvas-container/assets/font_icon/iconfont.js
  5. 7
      canvas-container/assets/font_icon/iconfont.json
  6. BIN
      canvas-container/assets/font_icon/iconfont.ttf
  7. BIN
      canvas-container/assets/font_icon/iconfont.woff
  8. BIN
      canvas-container/assets/font_icon/iconfont.woff2
  9. 372
      canvas-container/components/Upload/index.vue
  10. 50
      canvas-container/components/canvasEditPage.vue
  11. 2
      canvas-container/components/canvasShow/basics/discount/app/index.vue
  12. 2
      canvas-container/components/canvasShow/basics/discount/pc/index.vue
  13. 2
      canvas-container/components/canvasShow/basics/group/pc/index.vue
  14. 104
      canvas-container/components/canvasShow/basics/header/app/index.vue
  15. 48
      canvas-container/components/canvasShow/basics/header/mixin.js
  16. 108
      canvas-container/components/canvasShow/basics/header/pc/index.vue
  17. 2
      canvas-container/components/canvasShow/basics/live/app/index.vue
  18. 2
      canvas-container/components/canvasShow/basics/newProduct/app/index.vue
  19. 2
      canvas-container/components/canvasShow/basics/price/pc/index.vue
  20. 2
      canvas-container/components/canvasShow/basics/product/app/index.vue
  21. 2
      canvas-container/components/canvasShow/basics/product/pc/index.vue
  22. 2
      canvas-container/components/canvasShow/basics/spike/pc/index.vue
  23. 2
      canvas-container/components/canvasShow/basics/text.vue
  24. 2
      canvas-container/components/canvasShow/basics/vip/pc/index.vue
  25. 12
      canvas-container/components/canvasShow/componentMap.js
  26. 2
      canvas-container/components/canvasShow/config/api.js
  27. 9
      canvas-container/components/leftBar/panel.vue
  28. 29
      canvas-container/components/leftBar/panelList.js
  29. 1
      canvas-container/components/toolBar/BasicsComp/assistDiv.vue
  30. 4
      canvas-container/components/toolBar/BasicsComp/brandList.vue
  31. 2
      canvas-container/components/toolBar/BasicsComp/customTool.vue
  32. 180
      canvas-container/components/toolBar/BasicsComp/headerTool.vue
  33. 4
      canvas-container/components/toolBar/BasicsComp/imageTextList.vue
  34. 4
      canvas-container/components/toolBar/BasicsComp/shopTop.vue
  35. 2
      canvas-container/components/toolBar/BasicsComp/textTool.vue
  36. 22
      canvas-container/components/toolBar/BasicsComp/videoTool.vue
  37. 1
      canvas-container/components/toolBar/componentMap.js
  38. 8
      canvas-container/components/toolBar/goodsComp/categoryTool.vue
  39. 6
      canvas-container/components/toolBar/goodsComp/productList.vue
  40. 6
      canvas-container/components/toolBar/shopComp/discountTool.vue
  41. 6
      canvas-container/components/toolBar/shopComp/groupTool.vue
  42. 2
      canvas-container/components/toolBar/shopComp/liveTool.vue
  43. 6
      canvas-container/components/toolBar/shopComp/newProductTool.vue
  44. 10
      canvas-container/components/toolBar/shopComp/priceTool.vue
  45. 4
      canvas-container/components/toolBar/shopComp/spikeTool.vue
  46. 2
      canvas-container/components/toolBar/shopComp/vipTool.vue
  47. 113
      canvas-container/components/toolBar/toolModule/notice-select.vue
  48. 4
      canvas-container/components/toolBar/toolModule/product-source-category.vue
  49. 4
      canvas-container/components/toolBar/toolModule/product-source-multiple.vue
  50. 4
      canvas-container/components/toolBar/toolModule/tool-coupon.vue
  51. 4
      canvas-container/components/toolBar/toolModule/tool-select-category.vue
  52. 50
      canvas-container/components/toolBar/toolModule/tool-select-link.vue
  53. 7
      canvas-container/components/toolBar/toolModule/tool-single-img.vue
  54. 7
      canvas-container/views/canvasContainer.vue
  55. 57
      mock/index.js
  56. 81
      mock/mock-server.js
  57. 29
      mock/table.js
  58. 84
      mock/user.js
  59. 25
      mock/utils.js
  60. 4
      package.json
  61. 4
      src/App.vue
  62. 54
      src/layout/components/Navbar.vue
  63. 4
      src/layout/components/Sidebar/SidebarItem.vue
  64. 182
      src/locales/en.json
  65. 184
      src/locales/zh-CN.json
  66. 30
      src/main.js
  67. 8
      src/utils/auth.js
  68. 2
      src/views/commodity/commdityClass/Edit.vue
  69. 6
      src/views/commodity/commdityClass/index.vue
  70. 12
      src/views/commodity/commodityList copy/commodityGroup.vue
  71. 8
      src/views/commodity/commodityList copy/index.vue
  72. 14
      src/views/commodity/commodityList/commodityGroup.vue
  73. 8
      src/views/commodity/commodityList/index.vue
  74. 6
      src/views/commodity/commoditySystem/addCommodity.vue
  75. 2
      src/views/commodity/commoditySystem/addComponent.vue
  76. 8
      src/views/commodity/commoditySystem/index.vue
  77. 4
      src/views/customer/addClustering.vue
  78. 10
      src/views/customer/addOperate.vue
  79. 8
      src/views/customer/clusteringList/index.vue
  80. 4
      src/views/customer/customerList/customerDetail.vue
  81. 10
      src/views/customer/customerList/index.vue
  82. 6
      src/views/customer/operate/index.vue
  83. 10
      src/views/customer/tagList.vue
  84. 14
      src/views/customerService/service/index.vue
  85. 2
      src/views/customerService/setting/index.vue
  86. 20
      src/views/dashboard/index.vue
  87. 8
      src/views/distributor/achievement/programme.vue
  88. 4
      src/views/distributor/customer/popSearch.vue
  89. 4
      src/views/distributor/customer/popSys.vue
  90. 4
      src/views/distributor/exten/invite.vue
  91. 4
      src/views/distributor/exten/shopTen.vue
  92. 8
      src/views/distributor/personnel/list.vue
  93. 4
      src/views/distributor/personnel/sys.vue
  94. 4
      src/views/finance/account/index.vue
  95. 8
      src/views/finance/list/index.vue
  96. 8
      src/views/liveMenu/liveProduct/index.vue
  97. 12
      src/views/liveMenu/liveRoom/index.vue
  98. 6
      src/views/marketing/channelActivity/form.vue
  99. 4
      src/views/marketing/channelActivity/selectChannelCoupons.vue
  100. 2
      src/views/marketing/channelCoupons/form.vue

3
.eslintignore

@ -1,5 +1,6 @@
build/*.js
src/assets
src/canvas-container
canvas-container
public
dist
canvas-container

33
canvas-container/assets/font_icon/demo_index.html

@ -55,6 +55,12 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe7d5;</span>
<div class="name">直播</div>
<div class="code-name">&amp;#xe7d5;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe683;</span>
<div class="name">轮播</div>
<div class="code-name">&amp;#xe683;</div>
@ -446,7 +452,7 @@
<li class="dib">
<span class="icon iconfont">&#xe633;</span>
<div class="name">删除</div>
<div class="name">{{ $t('common.delete') }}</div>
<div class="code-name">&amp;#xe633;</div>
</li>
@ -600,9 +606,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1629634638571') format('woff2'),
url('iconfont.woff?t=1629634638571') format('woff'),
url('iconfont.ttf?t=1629634638571') format('truetype');
src: url('iconfont.woff2?t=1638330949259') format('woff2'),
url('iconfont.woff?t=1638330949259') format('woff'),
url('iconfont.ttf?t=1638330949259') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -629,6 +635,15 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-zhibo"></span>
<div class="name">
直播
</div>
<div class="code-name">.icon-zhibo
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-lunbo"></span>
<div class="name">
轮播
@ -1449,6 +1464,14 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-zhibo"></use>
</svg>
<div class="name">直播</div>
<div class="code-name">#icon-zhibo</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-lunbo"></use>
</svg>
<div class="name">轮播</div>
@ -1971,7 +1994,7 @@
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shanchu"></use>
</svg>
<div class="name">删除</div>
<div class="name">{{ $t('common.delete') }}</div>
<div class="code-name">#icon-shanchu</div>
</li>

10
canvas-container/assets/font_icon/iconfont.css

@ -1,8 +1,8 @@
@font-face {
font-family: "iconfont"; /* Project id 2224733 */
src: url('iconfont.woff2?t=1629634638571') format('woff2'),
url('iconfont.woff?t=1629634638571') format('woff'),
url('iconfont.ttf?t=1629634638571') format('truetype');
src: url('iconfont.woff2?t=1638330949259') format('woff2'),
url('iconfont.woff?t=1638330949259') format('woff'),
url('iconfont.ttf?t=1638330949259') format('truetype');
}
.iconfont {
@ -13,6 +13,10 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-zhibo:before {
content: "\e7d5";
}
.icon-lunbo:before {
content: "\e683";
}

2
canvas-container/assets/font_icon/iconfont.js
File diff suppressed because it is too large
View File

7
canvas-container/assets/font_icon/iconfont.json

@ -6,6 +6,13 @@
"description": "",
"glyphs": [
{
"icon_id": "8798014",
"name": "直播",
"font_class": "zhibo",
"unicode": "e7d5",
"unicode_decimal": 59349
},
{
"icon_id": "9468467",
"name": "轮播",
"font_class": "lunbo",

BIN
canvas-container/assets/font_icon/iconfont.ttf

BIN
canvas-container/assets/font_icon/iconfont.woff

BIN
canvas-container/assets/font_icon/iconfont.woff2

372
canvas-container/components/Upload/index.vue

@ -0,0 +1,372 @@
<!--
* @FileDescription: index
* @Author: kahu
* @Date: 2022/12/14
* @LastEditors: kahu
* @LastEditTime: 2022/12/14
-->
<template>
<div class="content">
<el-upload
v-loading="isUploading"
:disabled="componentError"
class="upload-demo"
drag
:headers="headers"
:file-list="viewFileList"
:name="name"
:show-file-list="showFileList"
:list-type="showFileListType"
:multiple="multiple"
:action="uploadUrl"
:limit="limit"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:on-error="handleUploadError"
:on-exceed="handleExceed"
:before-remove="handleBeforeRemove"
:on-remove="handleRemove"
:on-preview="handlePreviewOpen"
>
<i class="el-icon-upload"></i>
<div
class="el-upload__text"
v-if="!componentError"
>将文件拖到此处<em>点击上传</em></div>
<div
class="error-text"
v-else
> 组件配置错误请查看控制台
</div>
<div
class="el-upload__tip"
slot="tip"
>
文件大小不超过{{ limitSize }}m文件类型为{{ types.toString() }}
</div>
</el-upload>
<!-- 预览 -->
<el-dialog
title="预览"
:visible.sync="previewObj.show"
width="60%"
:before-close="handlePreviewClose"
>
<div class="preview-content">
<template v-if="previewObj.file && previewObj.file.type.includes('image')">
<el-image class="preview-item" :src="previewObj.file.url" />
</template>
<template v-if="previewObj.file && previewObj.file.type.includes('video')">
<video class="preview-item" controls :src="previewObj.file.url" />
</template>
</div>
</el-dialog>
</div>
</template>
<script>
import mime from 'mime'
let fullLoading = null
const baseURL = process.env.VUE_APP_DOMAIN_PREFIX
export default {
name: "Upload",
props: {
headers:{
type:Object,
default:()=>({})
},
/** 上传时候表单的KEY */
name: {
type: String,
default: () => "file"
},
/** 限制上传数量 */
limit: {
type: Number,
default: () => 5
},
/** 限制的那张大小 单位M */
limitSize: {
type: Number,
default: () => 5
},
/** 是否多选 */
multiple: {
type: Boolean,
default: () => true
},
/** 是否展示文件列表 */
showFileList: {
type: Boolean,
default: () => true
},
/** 文件展示方式 text/picture/picture-card */
showFileListType:{
type:String,
default:()=>'text'
},
/** 允许上传的文件尾缀 string[] */
types: {
type: Array,
default: () => (['jpg', 'png', 'gif'])
},
/** 默认的文件列表 string[] */
defaultFileList: {
type: Array,
default: () => ([])
},
/** 上传成功后端返回的字段名称 */
responseFileName: {
type: String,
default: () => 'url'
},
/** 是否需要全屏loading */
needFullScreenLoading:{
type:Boolean,
default:()=>true
}
},
data() {
return {
uploadUrl: `${ baseURL }/file/upload`,
//
fileList: [],
// listsuccess
viewFileList:[],
//
componentError: false,
//
isUploading:false,
//
previewObj:{
show:false,
file:null
}
}
},
watch: {
defaultFileList: {
handler() {
//
const flag = Object.prototype.toString.call(this.defaultFileList) === '[object Array]'
&& this.defaultFileList.length > 0 &&
Object.prototype.toString.call(this.defaultFileList[0]) !== '[object String]'
if (flag) {
this.componentError = true
throw new Error('defaultFileList格式错误,应为string[]格式')
}else{
this.componentError = false
}
this.viewFileList = this.defaultFileList.map(defaultFilePath => ({name: defaultFilePath, url: defaultFilePath}))
this.viewFileList.forEach(item=>{
this.fileList.push(item)
})
},
deep: true,
immediate: true
},
fileList:{
handler(){
this.handleNotifyFather()
},
deep:true,
immediate:false
}
},
methods: {
/**
* 检查type是否符合types的mime
* @param type 文件后缀
* @param types 可用文件后缀集合
*/
handleCheckFileMime(type, types) {
const typeMimes = types.map(item => mime.getType(item))
return typeMimes.includes(type)
},
handleCheckFileSize(fileSize, limitSize) {
const limitByteSize = limitSize * 1024 * 1024
return limitByteSize > fileSize
},
/**
* 上传之前的钩子
* @param file
* @return {undefined}
*/
handleBeforeUpload(file) {
// mime
const fileType = file.type || mime.getType(file.name.slice(file.name.lastIndexOf('.') + 1))
const checkFileMime = this.handleCheckFileMime(fileType, this.types)
const checkFileSize = this.handleCheckFileSize(file.size, this.limitSize);
!checkFileSize ? file.isJumpRemove = true : undefined
!checkFileSize ? this.$notify.warning(`文件大小不得超出${ this.limitSize }m`) : undefined
!checkFileMime ? file.isJumpRemove = true : undefined
!checkFileMime ? this.$notify.warning(`文件类型不在合法列表 ${ this.types }`) : undefined
if(checkFileSize && checkFileMime){
// loading
this.isUploading = true
if(this.needFullScreenLoading){
fullLoading = this.$loading({
background:`rgba(255,255,255,0.5)`,
text:'上传中',
fullscreen:true
})
}
}
return checkFileSize && checkFileMime
},
/**
* 上传成功钩子
* @param response
* @param file
* @param fileList
*/
handleUploadSuccess(response, file, fileList) {
this.isUploading = false
if(this.needFullScreenLoading){
fullLoading?.close()
}
const successObj = {
url: response.data[this.responseFileName],
name: file.name
}
file.url = response.data[this.responseFileName]
this.fileList.push(successObj)
},
/**
* 上传失败的钩子
* @param err
* @param file
* @param fileList
*/
handleUploadError(err, file, fileList) {
},
/**
* 超出数量的钩子
* @param files
* @param fileList
*/
handleExceed(files, fileList) {
this.$notify.warning(`文件总数大于可上传数量 ${ this.limit }`)
},
/**
* 文件即将移除的钩子
* @param file
* @param fileList
*/
async handleBeforeRemove(file, fileList) {
//
if (file?.raw?.isJumpRemove) {
return true
}
return await this.$confirm('此操作将会删除已上传的文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
},
/**
* 移除文件的钩子
*/
handleRemove(file, fileList) {
if (file?.raw?.isJumpRemove) {
return
}
this.fileList.splice(this.fileList.findIndex(fileItem => file?.response?.data[this.responseFileName] === fileItem.url || file.url === fileItem.url), 1)
},
/**
* 通知父组件
*/
handleNotifyFather(){
this.$emit('change',this.fileList)
},
/**
* 预览
* 图片视频直接预览其他下载
* @param file
*/
handlePreviewOpen(file){
if(!file.type){
file.type = mime.getType(file?.url?.slice(file?.url?.lastIndexOf('.')+1)) || mime.getType(file?.name?.slice(file?.name.lastIndexOf('.')+1)) || undefined
}
if(file.type.includes('image') || file.type.includes('video')){
this.previewObj.file = file
this.previewObj.show = true
}else{
this.$confirm('需要下载才能预览此文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
let htmlAnchorElement = document.createElement('a');
htmlAnchorElement.download = file?.url.slice(file?.url.lastIndexOf('/')+1)
htmlAnchorElement.target='_bank'
htmlAnchorElement.href = file?.url
htmlAnchorElement.click()
htmlAnchorElement = null
}).catch(() => {
});
}
},
handlePreviewClose(){
this.previewObj.file = null
this.previewObj.show = false
}
}
}
</script>
<style
lang="scss"
scoped
>
::v-deep .el-upload {
width: 100% !important;
.el-upload-dragger {
width: 100% !important;
}
}
.error-text {
font-size: 18px;
font-weight: bolder;
color: red;
animation: error-animation 2.5s ease-in-out infinite;
}
@keyframes error-animation {
0%, 100% {
font-size: 18px;
color: red;
}
25%, 75% {
font-size: 16px;
color: #b9b1b1;
}
50% {
font-size: 18px;
color: #500000;
}
}
.preview-content{
display: flex;
align-items: center;
justify-content: center;
.preview-item{
min-width: 800px;
}
}
</style>

50
canvas-container/components/canvasEditPage.vue

@ -1,12 +1,15 @@
<template>
<div class="layout hom-layout" v-loading="loading">
<div class="layout hom-layout" v-loading.fullscreen.lock="loading">
<draggable
class="dragArea list-group"
:list="componentsData"
group="pageEdit"
:move="checkMove"
@end="pageAdd"
@change="pageChange"
filter=".undraggable"
>
<div class="list-group-item" v-for="(item,index) in componentsData" :key="index" :class="[{'on':activeComponent == index},'item-'+item.type]" @click="selectComponent(item,index)">
<div class="list-group-item" v-for="(item,index) in componentsData" :key="index" :class="[{'on':activeComponent == index,'undraggable':item.undraggable},'item-'+item.type]" @click="selectComponent(item,index)">
<component v-show="!item.isEmpty" :isNoData.sync='item.isEmpty' :is="componentMap[terminal-1].get(item.type)" :componentContent="item.componentContent" :terminal="terminal" :typeId="typeId" :shopId="shopId" @cleckLoading="cleckLoading"></component>
<div class="no-data" v-show="item.isEmpty">
<i class="iconfont icon-kong"></i>
@ -67,9 +70,25 @@
//
pageChange (e) {
if (e.added) {
this.activeComponent = e.added.newIndex
e.added.element.index = e.added.newIndex
this.setActiveComponent(e.added.element)
if(e.added.element.type == 'header'){
var headerArr = this.componentsData.filter(v=>{
return v.type === 'header'
})
if(headerArr.length >= 2){
this.componentsData.splice(e.added.newIndex, 1)
this.$message.warning('头部组件最多只能存在一个。')
} else if(headerArr.length === 1 && this.componentsData[0].type !== 'header'){
this.componentsData.splice(e.added.newIndex, 1)
this.componentsData.unshift(e.added.element)
}
this.activeComponent = 0
e.added.element.index = 0
this.setActiveComponent(e.added.element)
} else {
this.activeComponent = e.added.newIndex
e.added.element.index = e.added.newIndex
this.setActiveComponent(e.added.element)
}
}
if (e.moved) {
this.activeComponent = e.moved.newIndex
@ -78,6 +97,18 @@
}
this.$emit('showRightBox', true)
},
//
checkMove(e){
console.log(e,'checkMove')
//
if (e.relatedContext.element.type == 'header') return false;
//
if (e.draggedContext.element.type == 'header') return false;
},
pageAdd(e){
console.log(e,'pageAdd')
return false
},
//
selectComponent (item, index) {
this.activeComponent = index
@ -127,6 +158,7 @@
}
})
break
case 'header':
case 'notice':
case 'text':
case 'imageTextNav':
@ -135,6 +167,9 @@
case 'brandList':
case 'categoryList':
case 'assistDiv':
case 'vip':
case 'live':
case 'videoBox':
isEmpty = false
break
case 'productList':
@ -176,9 +211,6 @@
isEmpty = false
}
break
case 'vip':
isEmpty = false
break
case 'coupon':
if(newVal.selectedCoupon.length > 0){
isEmpty = false
@ -316,7 +348,7 @@
<style lang="scss">
.warp {
width: 690px;
width: 710px;
margin: 0 auto;
max-width: 100%;
&.terminal4 {

2
canvas-container/components/canvasShow/basics/discount/app/index.vue

@ -56,7 +56,7 @@
</div>
</div>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpGroupWorks(productData)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpGroupWorks(productData)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

2
canvas-container/components/canvasShow/basics/discount/pc/index.vue

@ -9,7 +9,7 @@
</div>
<div class="discount-more" :style="{backgroundImage: 'url('+ componentContent.moreBg +')'}">
<div class="discount-more-overlay">
<button class="btn-more" @click="jumpGroupWorks(productData)">查看全部</button>
<button class="btn-more" @click="jumpGroupWorks(productData)">{{ $t('common.seeall') }}</button>
</div>
</div>
<div class="discount-list">

2
canvas-container/components/canvasShow/basics/group/pc/index.vue

@ -58,7 +58,7 @@
</li>
</ul>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpGroupWorks(productData)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpGroupWorks(productData)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

104
canvas-container/components/canvasShow/basics/header/app/index.vue

@ -0,0 +1,104 @@
<template>
<div class="header">
<div class="top-box">
<img v-if="componentContent.logoType === 1" class="logo"
:src="componentContent.imageUrl"
mode="heightFix">
<h3 v-else class="h3" :style="{fontSize:componentContent.fontSizeNum+'px',fontWeight:componentContent.textFontW,color:componentContent.titColor}">{{componentContent.title}}</h3>
<div class="search-btn">
<img class="search-icon"
src="https://ceres.zkthink.com/static/img/search.png"
mode="widthFix">
</div>
</div>
<div class="tabs-nav-warp">
<div class="tabs-nav" scroll-x="true">
<div class="ul">
<div class="li" :class="{'on':activeTab===0}" @click="tabChange(0)">首页</div>
<div class="li" :class="{'on':activeTab===index+1}" v-for="(item,index) in classifyData" :key="index">
{{item.categoryName}}
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {commonMixin} from '../mixin'
export default {
mixins: [commonMixin],
data () {
return {
activeTab: 0
}
},
computed: {
},
}
</script>
<style lang="scss" scoped>
.header {
.top-box {
display: flex;
align-items: center;
justify-content: space-between;
padding-left: 30px;
width: 100%;
.logo {
// width: 280px;
height: 70px;
margin-top: 0px;
}
.search-btn {
height: 66px;
background: rgba(255, 255, 255, 1);
border-radius: 33px;
display: flex;
flex-direction: row;
align-items: center;
margin-right: 30px;
.search-icon {
width: 60px;
height: 60px;
}
}
}
}
.tabs-nav-warp{
margin-top: 20px;
padding:0 30px;
overflow: hidden;
.tabs-nav{
.ul{
display: flex;
.li{
flex: 1 0 auto;
margin-left: 36px;
font-size: 30px;
color: #999999;
position: relative;
padding-bottom: 18px;
&:first-child{
margin-left: 0;
}
&.on{
&:after{
content: '';
width: 100%;
height: 4px;
background: #C5AA7B;
position: absolute;
left: 0;
bottom: 0;
}
font-weight:bold;
}
}
}
}
}
</style>

48
canvas-container/components/canvasShow/basics/header/mixin.js

@ -0,0 +1,48 @@
import api from '../../config/api'
import {funMixin} from '../../config/mixin'
export const commonMixin = {
name: 'headerComponent',
mixins: [funMixin],
props: {
terminal: {
type: Number,
default: 4
},
typeId: {
type: Number,
default: 1
},
shopId: {
type: Number,
default: 0
},
componentContent: {
type: Object
}
},
data () {
return {
classifyData: []
}
},
mounted() {
this.getData()
},
methods: {
getData() {
this.beforeGetData()
const _ = this
_.sendReq({
url: `${api.getClassify}?page=1&pageSize=20`,
method: 'GET'
}, (res) => {
_.afterGetData()
_.classifyData = res.data
console.log(_.classifyData)
},(err)=>{
_.afterGetData()
})
}
}
}

108
canvas-container/components/canvasShow/basics/header/pc/index.vue

@ -0,0 +1,108 @@
<template>
<div class="header">
<nav class="nav">
<ul>
<li class="on">
<router-link to="/">
首页
</router-link>
</li>
<li v-for="(item,index) in classifyData.slice(0, 6)" :key="index" @click="jumpCategory(item)">
{{item.categoryName}}
</li>
</ul>
</nav>
<div class="search">
<div class="searchSelect">
<el-dropdown trigger="click">
<span class="el-dropdown-link">宝贝
<i class="el-icon-arrow-down cur-poi el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="宝贝">宝贝</el-dropdown-item>
<el-dropdown-item command="店铺">店铺</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<div class="searchRight">
<input type="text" maxlength="20" placeholder="请输入搜索商品">
</div>
<span class="btn cur-poi">
<i class="icon el-icon-search"></i>
</span>
</div>
</div>
</template>
<script>
import {commonMixin} from '../mixin'
export default {
mixins: [commonMixin],
}
</script>
<style lang="scss" scoped>
.header{
height: 80px;
width: 1200px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: nowrap;
.nav{
float: left;
padding-top: 30px;
ul{
width: 760px;
display: flex;
justify-content: space-between;
}
li{
font-size: 16px;
line-height: 21px;
padding-bottom: 24px;
color: #333;
cursor: pointer;
border-bottom: 3px solid #fff;
&.on,&:hover{
color: #C5AA7B;
border-color: #C5AA7B;
}
}
}
.search{
width: 394px;
height: 39px;
border: 2px solid #F3F4F5;
float: right;
// margin-top: 21px;
display: flex;
.searchSelect{
width: 82px;
height: 30px;
margin-top: 2px;
border-right: 1px solid #CCCCCC;
text-align: center;
line-height: 30px;
.el-dropdown{
color: #C5AA7B;
}
}
.searchRight{
flex: 1;
input{
padding-left: 15px;
font-size: 14px;
color: #333;
line-height: 35px;
}
}
.btn{
font-size: 20px;
line-height: 35px;
padding-right: 15px;
}
}
}
</style>

2
canvas-container/components/canvasShow/basics/live/app/index.vue

@ -11,7 +11,7 @@
@click="toLiveRoom(item)"
/>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpGroupWorks(productData)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpGroupWorks(productData)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

2
canvas-container/components/canvasShow/basics/newProduct/app/index.vue

@ -21,7 +21,7 @@
</swiper>
<div class="pagination new-pagination"></div>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpLink(componentContent.linkObj)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpLink(componentContent.linkObj)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

2
canvas-container/components/canvasShow/basics/price/pc/index.vue

@ -54,7 +54,7 @@
</li>
</ul>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpPice(productData)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpPice(productData)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

2
canvas-container/components/canvasShow/basics/product/app/index.vue

@ -62,7 +62,7 @@
</div>
</div>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpLink(componentContent.linkObj)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpLink(componentContent.linkObj)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

2
canvas-container/components/canvasShow/basics/product/pc/index.vue

@ -48,7 +48,7 @@
</li>
</ul>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpLink(componentContent.linkObj)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpLink(componentContent.linkObj)">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

2
canvas-container/components/canvasShow/basics/spike/pc/index.vue

@ -16,7 +16,7 @@
<span>{{count[1]}}</span><i>:</i><span>{{count[2]}}</span><i>:</i><span>{{count[3]}}</span>
</div>
</div>
<button class="btn-more" @click="jumpSeckills(productData)">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button class="btn-more" @click="jumpSeckills(productData)">{{ $t('common.seeall') }}<span class="icon iconfont icon-arrow-right"></span></button>
</div>
</div>
<div class="listRight">

2
canvas-container/components/canvasShow/basics/text.vue

@ -3,7 +3,7 @@
<div class="line-warp" :class="{'borderBot':componentContent.showLine}">
<h3 class="h3" :style="{fontSize:componentContent.fontSizeNum+'px',fontWeight:componentContent.textFontW,color:componentContent.titColor}">{{componentContent.title}}</h3>
<p class="p" :style="{fontSize:componentContent.describeSizeNum+'px',fontWeight:componentContent.describeFontW,color:componentContent.describeColor}">{{componentContent.describe}}</p>
<div class="btn-more" v-show="componentContent.showMore" :class="'style'+componentContent.styleValue" @click="jumpLink(item.linkObj)"><span>查看更多</span><i class="iconfont icon-arrow-right"></i></div>
<div class="btn-more" v-show="componentContent.showMore" :class="'style'+componentContent.styleValue" @click="jumpLink(item.linkObj)"><span>{{ $t('common.seemore') }}</span><i class="iconfont icon-arrow-right"></i></div>
</div>
</div>
</template>

2
canvas-container/components/canvasShow/basics/vip/pc/index.vue

@ -56,7 +56,7 @@
</li>
</ul>
</div>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpVip">查看全部 <span class="icon iconfont icon-arrow-right"></span></button>
<button v-show="componentContent.showMore" class="btn-more" @click="jumpVip">{{ $t('common.seeall') }} <span class="icon iconfont icon-arrow-right"></span></button>
</div>
</template>

12
canvas-container/components/canvasShow/componentMap.js

@ -1,7 +1,7 @@
export const componentMap = [
// 小程序
new Map([
// ['shopHeader', () => import('./cereshop/app/shopHeader')], // 首页头部
['header', () => import('./basics/header/app')], // 首页头部
['banner', () => import('./basics/banner')], // 轮播图
['text', () => import('./basics/text')], // 文本
['imageText', () => import('./basics/imageText')], // 图文
@ -16,7 +16,6 @@ export const componentMap = [
['custom', () => import('./basics/custom')], // 自定义
['notice', () => import('./basics/notice')], // 公告
['vip', () => import('./basics/vip/app')], // 会员专区
// ['shopHead', () => import('./basics/shopHead')], // 店铺头部
['groupList', () => import('./basics/group/app')], // 拼团专区
['spikeList', () => import('./basics/spike/app')], // 秒杀专区
['priceList', () => import('./basics/price/app')], // 定价捆绑
@ -27,7 +26,7 @@ export const componentMap = [
]),
// H5
new Map([
// ['shopHeader', () => import('./cereshop/app/shopHeader')], // 首页头部
['header', () => import('./basics/header/app')], // 首页头部
['banner', () => import('./basics/banner')], // 轮播图
['text', () => import('./basics/text')], // 文本
['imageText', () => import('./basics/imageText')], // 图文
@ -42,7 +41,6 @@ export const componentMap = [
['custom', () => import('./basics/custom')], // 自定义
['notice', () => import('./basics/notice')], // 公告
['vip', () => import('./basics/vip/app')], // 会员专区
// ['shopHead', () => import('./basics/shopHead')], // 店铺头部
['groupList', () => import('./basics/group/app')], // 拼团专区
['spikeList', () => import('./basics/spike/app')], // 秒杀专区
['priceList', () => import('./basics/price/app')], // 定价捆绑
@ -53,7 +51,7 @@ export const componentMap = [
]),
// APP
new Map([
// ['shopHeader', () => import('./cereshop/app/shopHeader')], // 首页头部
['header', () => import('./basics/header/app')], // 首页头部
['banner', () => import('./basics/banner')], // 轮播图
['text', () => import('./basics/text')], // 文本
['imageText', () => import('./basics/imageText')], // 图文
@ -68,7 +66,6 @@ export const componentMap = [
['custom', () => import('./basics/custom')], // 自定义
['notice', () => import('./basics/notice')], // 公告
['vip', () => import('./basics/vip/app')], // 会员专区
// ['shopHead', () => import('./basics/shopHead')], // 店铺头部
['groupList', () => import('./basics/group/app')], // 拼团专区
['spikeList', () => import('./basics/spike/app')], // 秒杀专区
['priceList', () => import('./basics/price/app')], // 定价捆绑
@ -79,7 +76,7 @@ export const componentMap = [
]),
// PC
new Map([
// ['shopHeader', () => import('./cereshop/pc/shopHeader')], // 首页头部
['header', () => import('./basics/header/pc')], // 首页头部
['banner', () => import('./basics/banner')], // 轮播图
['text', () => import('./basics/text')], // 文本
['imageText', () => import('./basics/imageText')], // 图文
@ -94,7 +91,6 @@ export const componentMap = [
['custom', () => import('./basics/custom')], // 自定义
['notice', () => import('./basics/notice')], // 公告
['vip', () => import('./basics/vip/pc')], // 会员专区
// ['shopHead', () => import('./basics/shopHead')], // 店铺头部
['groupList', () => import('./basics/group/pc')], // 拼团专区
['spikeList', () => import('./basics/spike/pc')], // 秒杀专区
['priceList', () => import('./basics/price/pc')], // 定价捆绑

2
canvas-container/components/canvasShow/config/api.js

@ -22,8 +22,10 @@ export const api = {
getDiscounts: `${BASEURL}/renovation/getDiscounts`, // 商家限时折扣
getAdminGroupWorks: `${BASEURL}/canvas/getGroupWorks`, // 平台拼团专区
getGroupWorks: `${BASEURL}/renovation/getGroupWorks`, // 商家拼团专区
getPriceProducts: `${BASEURL}/canvas/getPriceProducts`, // 商家定价捆绑
getPrices: `${BASEURL}/canvas/getPrices`, // 商家定价捆绑
getMemberProducts: `${BASEURL}/canvas/getMemberProducts`, // 查询会员商品数据
getNotices: `${BASEURL}/canvas/getNotices`, // 平台获取公告数据
getNoticesAll: `${BASEURL}/notice/getAll`, // 平台获取公告数据
}
export default api

9
canvas-container/components/leftBar/panel.vue

@ -71,7 +71,7 @@
},
cloneItem (item) {
return JSON.parse(JSON.stringify(item))
}
},
},
computed: {
...mapGetters([
@ -83,8 +83,11 @@
var _panelList = JSON.parse(JSON.stringify(this.panelList))
var mewPaneList = _panelList.filter(parent=>{
let children = parent.classList.filter(child=>{
console.log(child.title,!(child.onlyApp && _this.terminal==4),!(child.onlyAdmin && _this.typeId==3),!(child.onlyMerchant && _this.typeId==1))
return !(child.onlyApp && _this.terminal==4) && !(child.onlyAdmin && _this.typeId==3) && !(child.onlyMerchant && _this.typeId==1)
return !(child.onlyApp && _this.terminal==4) &&
!(child.onlyWeixin && [2,3,4].includes(_this.terminal)) &&
!(child.onlyAdmin && _this.typeId==3) &&
!(child.onlyMerchant && _this.typeId==1)
})
parent.classList = children
return parent

29
canvas-container/components/leftBar/panelList.js

@ -5,6 +5,22 @@ export const panelList = [
type: 1,
classList: [
{
title: '商城头部',
iconClass: 'icon-dianputoubu',
type: 'header',
undraggable: true, // 不可拖动
onlyAdmin: true, // 平台端显示
onlyApp: true, // 只在app显示
componentContent: {
logoType:1,
imageUrl: '',
title: '',
fontSizeNum: '',
textFontW: 'normal',
titColor: '#CD5353'
}
},
{
title: '轮播图',
iconClass: 'icon-lunbo',
type: 'banner',
@ -242,14 +258,15 @@ export const panelList = [
componentContent: {
title: '标题',
videoUrl: 'http://cereshop.oss-cn-shenzhen.aliyuncs.com/0000/2020/05/432bb17e-536c-4762-a699-b3f5a2642742.mp4',
mainBody: '描述'
mainBody: '描述',
coverImg:'',
}
},
{
title: '直播',
iconClass: 'icon-zhibo',
onlyAdmin: true, // 平台端显示
onlyApp: true, // 只在app显示
onlyWeixin: true, // 只在小程序显示
type: 'live',
componentContent: {
showMore: false
@ -295,22 +312,22 @@ export const panelList = [
title: '类别列表',
categoryData: [
{
id: '1',
id: 1,
selClassData: [],
img: ''
},
{
id: '2',
id: 2,
selClassData: [],
img: ''
},
{
id: '3',
id: 3,
selClassData: [],
img: ''
},
{
id: '4',
id: 4,
selClassData: [],
img: ''
}

1
canvas-container/components/toolBar/BasicsComp/assistDiv.vue

@ -21,7 +21,6 @@
:show-input-controls=false
input-size="mini"
v-model="activeComponent.componentContent.height"
:max="1000"
show-input>
</el-slider>
</div>

4
canvas-container/components/toolBar/BasicsComp/brandList.vue

@ -57,8 +57,8 @@
:before-close="deleteItem">
<span>点击确定删除此项</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

2
canvas-container/components/toolBar/BasicsComp/customTool.vue

@ -15,7 +15,6 @@
:show-input-controls=false
input-size="mini"
v-model="activeComponent.componentContent.imgClearance"
:max="1000"
show-input>
</el-slider>
</div>
@ -27,7 +26,6 @@
:show-input-controls=false
input-size="mini"
v-model="activeComponent.componentContent.pageSpacing"
:max="1000"
show-input>
</el-slider>
</div>

180
canvas-container/components/toolBar/BasicsComp/headerTool.vue

@ -0,0 +1,180 @@
<template>
<div class="textTool">
<h3 class="toolTit">头部设置</h3>
<div class="operationBox">
<div class="itemBox">
<div class="Tit">LOGO类型</div>
<el-radio-group v-model="activeComponent.componentContent.logoType">
<el-radio :label="1">图片</el-radio>
<el-radio :label="2">文本</el-radio>
</el-radio-group>
</div>
<div v-if="activeComponent.componentContent.logoType === 1">
<tool-single-img :imageUrl.sync='activeComponent.componentContent.imageUrl' tip='建议尺寸: 高度100px, 宽度自适应'></tool-single-img>
</div>
<div v-else>
<div class="itemBox">
<div class="Tit">LOGO文本</div>
<el-input class="item-input" v-model="activeComponent.componentContent.title" maxlength="20" placeholder="请输入内容"></el-input>
</div>
<div class="itemBox">
<div class="Tit">文本大小</div>
<div class="modifyBox fontSize">
<font-size-select :fontSize.sync='activeComponent.componentContent.fontSizeNum'></font-size-select>
</div>
</div>
<div class="itemBox">
<div class="Tit">文本粗细</div>
<div class="Info" v-text="activeComponent.componentContent.textFontW === 'bold' ? '加粗体' : '常规体'"></div>
<div class="modifyBox fontSize">
<span class="iconfont" :class="{textActive: activeComponent.componentContent.textFontW === 'bold'}" @click="changeFontW(type = 'bold')">&#xe649;</span>
<span class="iconfont" :class="{textActive: activeComponent.componentContent.textFontW === 'normal'}" @click="changeFontW(type = 'normal')">&#xe8c2;</span>
</div>
</div>
<div class="itemBox">
<div class="Tit">文本颜色</div>
<div class="Info">{{activeComponent.componentContent.titColor}}</div>
<div class="modifyBox">
<div class="colorBox">
<span @click="resetColor">重置</span>
<div class="block">
<el-color-picker v-model="activeComponent.componentContent.titColor"></el-color-picker>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {toolMixin} from '@@/config/mixin'
import FontSizeSelect from '../toolModule/font-size-select'
import ToolSingleImg from "../toolModule/tool-single-img";
export default {
name: 'textTool',
components: {ToolSingleImg, FontSizeSelect },
mixins: [toolMixin],
data () {
return {
}
},
computed: {
},
methods: {
//
changeFontW (type) {
this.activeComponent.componentContent.textFontW = type
},
//
resetColor () {
this.activeComponent.componentContent.titColor = '#333333'
}
}
}
</script>
<style lang="scss" scoped>
.textTool {
padding: 20px 20px 0 20px;
h3 {
font-size: 18px;
font-weight: 500;
height: 35px;
line-height: 35px;
color: #333333;
margin-bottom: 20px;
}
.operationBox {
margin-top: 30px;
.itemBox {
font-size: 14px;
display: flex;
margin-bottom: 20px;
align-items: center;
.Tit {
color: #888888;
margin-right: 10px;
width: 70px;
}
.item-input{
flex: 1;
}
.Info {
color: #222222;
}
.modifyBox {
text-align: right;
margin-left: auto;
span {
height: 26px;
line-height: 26px;
float: left;
display: block;
text-align: center;
cursor: pointer;
width: 30px;
border: 1px solid #E8EAEC;
}
/*span:last-child {*/
/* border-right: 1px solid #E8EAEC;*/
/*}*/
.textActive {
border: 1px solid $mainColor;
color: $mainColor;
}
.colorBox {
display: flex;
align-items: center;
justify-content: flex-end;
span {
margin-right: 10px;
cursor: pointer;
border: none;
color: $mainColor;
}
}
}
.fontSize {
span:nth-child(1) {
font-size: 16px;
}
span:nth-child(2) {
font-size: 14px;
}
span:nth-child(3) {
font-size: 12px;
}
}
}
.moreBox{
border: 1px solid #E8EAEC;
border-radius: 4px;
padding:20px 10px;
.radio{
margin-bottom: 20px;
}
.el-radio{
margin-right: 10px;
}
.link{
display: flex;
justify-content: space-between;
align-items: center;
}
}
}
.block {
height: 30px;
}
::v-deep .el-color-picker__trigger {
width: 45px;
height: 26px;
}
::v-deep .el-icon-arrow-down:before {
display: none;
}
}
</style>

4
canvas-container/components/toolBar/BasicsComp/imageTextList.vue

@ -76,8 +76,8 @@
:before-close="deleteItem">
<span>点击确定删除此项</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog :visible.sync="dialogImageVisible">

4
canvas-container/components/toolBar/BasicsComp/shopTop.vue

@ -92,8 +92,8 @@
:before-close="deleteItem">
<span>点击确定删除此项</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog :visible.sync="dialogImageVisible">

2
canvas-container/components/toolBar/BasicsComp/textTool.vue

@ -102,7 +102,7 @@
</div>
</div>
<div class="itemBox">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>

22
canvas-container/components/toolBar/BasicsComp/videoTool.vue

@ -4,8 +4,15 @@
<div class="toolBox">
<div class="itemBox">
<label>视频地址</label>
<el-input v-model="activeComponent.componentContent.videoUrl" maxlength="60" placeholder="请输入内容"></el-input>
<Upload :default-file-list="defaultVideoList" :limit-size="20" :multiple="false" :types="['mp4']" :limit="1" @change="(fileList)=>handleUploadChange(fileList,'videoUrl')" />
<!-- <el-input v-model="activeComponent.componentContent.videoUrl" placeholder="请输入内容"></el-input>-->
</div>
<div class="itemBox">
<label>覆盖页地址APP</label>
<Upload :default-file-list="defaultImgList" :limit-size="20" :multiple="false" :types="['jpg','jpeg','png','gif']" :limit="1" @change="(fileList)=>handleUploadChange(fileList,'coverImg')" />
<!-- <el-input v-model="activeComponent.componentContent.videoUrl" placeholder="请输入内容"></el-input>-->
</div>
<!-- <div class="itemBox">-->
<!-- <label>文本</label>-->
<!-- <el-input-->
@ -36,15 +43,23 @@
<script>
import { quillEditor } from 'vue-quill-editor'
import Upload from '@@/components/Upload'
import {toolMixin} from '@@/config/mixin'
export default {
mixins: [toolMixin],
name: 'videoTool',
components: {
quillEditor
quillEditor,
Upload
},
mounted() {
this.activeComponent.componentContent.videoUrl && this.defaultVideoList.push(this.activeComponent.componentContent.videoUrl)
this.activeComponent.componentContent.coverImg && this.defaultImgList.push(this.activeComponent.componentContent.coverImg)
},
data () {
return {
defaultVideoList:[],
defaultImgList:[],
editorOption: {
placeholder: '请输入',
modules: {
@ -62,6 +77,9 @@ import {toolMixin} from '@@/config/mixin'
},
onEditorChange () { //
console.log(this.mainBody)
},
handleUploadChange(fileList,field){
this.activeComponent.componentContent[field] = fileList.length>0 ? fileList[0].url :''
}
}
}

1
canvas-container/components/toolBar/componentMap.js

@ -1,4 +1,5 @@
export const componentMap = new Map([
['header', () => import('./BasicsComp/headerTool')], // 头部
['banner', () => import('./BasicsComp/bannerTool')], // 轮播图
['text', () => import('./BasicsComp/textTool')], // 文本
['videoBox', () => import('./BasicsComp/videoTool')], // 视频控件

8
canvas-container/components/toolBar/goodsComp/categoryTool.vue

@ -51,15 +51,15 @@
:before-close="deleteItem">
<span>点击确定删除此项</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog title="选择类别" :visible.sync="dialogCategory" width="480px">
<category-select ref="categorySelect"></category-select>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogCategory = false"> </el-button>
<el-button type="primary" @click="categoryChanged"> </el-button>
<el-button @click="dialogCategory = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="categoryChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

6
canvas-container/components/toolBar/goodsComp/productList.vue

@ -39,7 +39,7 @@
</div>
</div>
<div class="itemChoice">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>
@ -59,8 +59,8 @@
:before-close="deleteItem">
<span>点击确定删除此项</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

6
canvas-container/components/toolBar/shopComp/discountTool.vue

@ -30,7 +30,7 @@
</div>
</div>
<div class="itemChoice" v-if="terminal != 4">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>
@ -62,8 +62,8 @@
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelSkill"> </el-button>
<el-button type="primary" @click="confirmActivity"> </el-button>
<el-button @click="cancelSkill">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="confirmActivity">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

6
canvas-container/components/toolBar/shopComp/groupTool.vue

@ -54,7 +54,7 @@
</div>
<div class="itemChoice">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>
@ -83,8 +83,8 @@
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelSkill"> </el-button>
<el-button type="primary" @click="confirmActivity"> </el-button>
<el-button @click="cancelSkill">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="confirmActivity">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

2
canvas-container/components/toolBar/shopComp/liveTool.vue

@ -3,7 +3,7 @@
<h3 class="toolTit">直播</h3>
<div class="itemChoice">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>

6
canvas-container/components/toolBar/shopComp/newProductTool.vue

@ -48,7 +48,7 @@
</div>
</div>
<div class="itemChoice">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>
@ -68,8 +68,8 @@
:before-close="deleteItem">
<span>点击确定删除此项</span>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

10
canvas-container/components/toolBar/shopComp/priceTool.vue

@ -53,17 +53,17 @@
</div>
</div>
<div class="itemChoice">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>
</div>
</div>
<!-- <div class="moreBox" v-show="activeComponent.componentContent.showMore">
<div class="moreBox" v-show="activeComponent.componentContent.showMore">
<div class="link">
<tool-select-link :linkObj.sync='activeComponent.componentContent.linkObj' styleType="1"></tool-select-link>
</div>
</div> -->
</div>
<el-dialog title="选择活动" :visible.sync="showSkillActivity" width="900px">
<el-table :data='skillActivity' style="width: 100%" @row-click="rowClick" highlight-current-row>
<el-table-column label width="35">
@ -89,8 +89,8 @@
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelSkill"> </el-button>
<el-button type="primary" @click="confirmActivity"> </el-button>
<el-button @click="cancelSkill">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="confirmActivity">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

4
canvas-container/components/toolBar/shopComp/spikeTool.vue

@ -58,8 +58,8 @@
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button @click="cancelSkill"> </el-button>
<el-button type="primary" @click="confirmActivity"> </el-button>
<el-button @click="cancelSkill">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="confirmActivity">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

2
canvas-container/components/toolBar/shopComp/vipTool.vue

@ -40,7 +40,7 @@
</div>
</div>
<div class="itemChoice">
<div class="Tit">查看更多</div>
<div class="Tit">{{ $t('common.seemore') }}</div>
<div class="Info" v-text="activeComponent.componentContent.showMore ? '显示' : '隐藏'"></div>
<div class="modifyBox">
<el-checkbox v-model="activeComponent.componentContent.showMore"></el-checkbox>

113
canvas-container/components/toolBar/toolModule/notice-select.vue

@ -0,0 +1,113 @@
<template>
<div class="product-select">
<el-form :inline="true" :model="formData" class="demo-form-inline">
<el-form-item label="">
<el-input v-model="formData.keyword" maxlength="20" placeholder="店铺名称"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">查询</el-button>
</el-form-item>
</el-form>
<el-table
:data="tableData"
max-height="500"
border
style="width: 100%">
<el-table-column label="" width="35" align="center">
<template slot-scope="scope">
<el-radio v-model="tableRadio" :label="scope.row"><i></i></el-radio>
</template>
</el-table-column>
<el-table-column prop="noticeTitle" label="标题" />
<el-table-column label="内容">
<template slot-scope="scope">
<span v-html="scope.row.noticeContent" />
</template>
</el-table-column>
<el-table-column prop="createTime" label="发送时间" />
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</template>
<script>
import api from '@@/components/canvasShow/config/api'
import {sendReqMixin} from '@@/components/canvasShow/config/mixin'
export default {
name: 'notice-select',
mixins: [sendReqMixin],
data () {
return {
tableRadio: '',
currentPage: 1,
total: 0,
pageSize: 10,
formData: {
keyword: ''
},
tableData: []
}
},
mounted () {
this.getTableData()
},
methods: {
//
getTableData () {
var _this = this
var paramsUrl = `${api.getNoticesAll}?page=${this.currentPage}&pageSize=${this.pageSize}`
if (this.formData.keyword) {
paramsUrl += `&noticeTitle=${this.formData.keyword}`
}
var data = {
page: this.currentPage,
pageSize: this.pageSize,
noticeType: 2
}
if (this.formData.keyword) {
data.noticeTitle = this.formData.keyword
}
let params = {
url: paramsUrl,
method: 'POST',
data
}
this.sendReq(params, (res) => {
_this.tableData = res.data.list
_this.total = res.data.total
})
},
//
onSubmit () {
this.getTableData()
},
//
handleSizeChange (val) {
this.pageSize = val
this.getTableData()
},
//
handleCurrentChange (val) {
this.currentPage = val
this.getTableData()
}
}
}
</script>
<style lang="scss" scoped>
.product-select{
.el-pagination{
padding: 0px;
margin-top: 30px;
}
}
</style>

4
canvas-container/components/toolBar/toolModule/product-source-category.vue

@ -19,8 +19,8 @@
:props="{ checkStrictly: true,label: 'categoryName',value: 'id',children: 'childs' }"
clearable></el-cascader>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogCategory = false"> </el-button>
<el-button type="primary" @click="addCategoryData"> </el-button>
<el-button @click="dialogCategory = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="addCategoryData">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

4
canvas-container/components/toolBar/toolModule/product-source-multiple.vue

@ -18,8 +18,8 @@
<el-dialog title="选择产品" :visible.sync="dialogProduct">
<product-select ref="productSelect" :selectedRows="productData.imgTextData" :isMultiple="true"></product-select>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogProduct = false"> </el-button>
<el-button type="primary" @click="addProductData"> </el-button>
<el-button @click="dialogProduct = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="addProductData">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

4
canvas-container/components/toolBar/toolModule/tool-coupon.vue

@ -30,8 +30,8 @@
<el-dialog title="选择优惠券" :visible.sync="couponDialogVisible" width="1000">
<coupon-select ref="couponSelect"></coupon-select>
<span slot="footer" class="dialog-footer">
<el-button @click="couponDialogVisible = false"> </el-button>
<el-button type="primary" @click="couponChanged"> </el-button>
<el-button @click="couponDialogVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="couponChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

4
canvas-container/components/toolBar/toolModule/tool-select-category.vue

@ -33,8 +33,8 @@
:options="categoryList" :props="{ multiple: true,label: 'categoryName',value: 'id',children: 'childs' }"
clearable></el-cascader>
<span slot="footer" class="dialog-footer">
<el-button @click="categoryVisible = false"> </el-button>
<el-button type="primary" @click="categoryChanged"> </el-button>
<el-button @click="categoryVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="categoryChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

50
canvas-container/components/toolBar/toolModule/tool-select-link.vue

@ -27,29 +27,36 @@
<el-dialog width="600px" title="选择类别" :visible.sync="categoryVisible">
<category-select ref="categorySelect"></category-select>
<span slot="footer" class="dialog-footer">
<el-button @click="categoryVisible = false"> </el-button>
<el-button type="primary" @click="categoryChanged"> </el-button>
<el-button @click="categoryVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="categoryChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog title="选择商品" :visible.sync="productVisible">
<product-select ref="productSelect"></product-select>
<span slot="footer" class="dialog-footer">
<el-button @click="productVisible = false"> </el-button>
<el-button type="primary" @click="productChanged"> </el-button>
<el-button @click="productVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="productChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog title="选择店辅" :visible.sync="shopVisible">
<shop-select ref="shopSelect"></shop-select>
<span slot="footer" class="dialog-footer">
<el-button @click="shopVisible = false"> </el-button>
<el-button type="primary" @click="shopChanged"> </el-button>
<el-button @click="shopVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="shopChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog title="选择自定义页面" :visible.sync="customVisible">
<custom-page-select ref="customPageSelect"></custom-page-select>
<span slot="footer" class="dialog-footer">
<el-button @click="customVisible = false"> </el-button>
<el-button type="primary" @click="customChanged"> </el-button>
<el-button @click="customVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="customChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<el-dialog title="选择公告" :visible.sync="noticeVisible">
<notice-select ref="noticeSelect"></notice-select>
<span slot="footer" class="dialog-footer">
<el-button @click="noticeVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="noticeChanged">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>
@ -60,9 +67,10 @@
import ShopSelect from './shop-select'
import CategorySelect from './category-select'
import CustomPageSelect from './custom-page-select'
import NoticeSelect from "./notice-select";
export default {
name: 'tool-select-link',
components: { CustomPageSelect, CategorySelect, ShopSelect, ProductSelect },
components: {NoticeSelect, CustomPageSelect, CategorySelect, ShopSelect, ProductSelect },
data () {
return {
selsectValue: '',
@ -72,7 +80,8 @@
productVisible: false,
shopVisible: false,
categoryVisible: false,
customVisible: false
customVisible: false,
noticeVisible: false
}
},
props: {
@ -112,6 +121,10 @@
value: '/detail',
label: '商品详情'
},
{
value: '/notice',
label: '公告'
},
// {
// value: '/custom',
// label: ''
@ -146,6 +159,8 @@
break
case '/custom':
this.typeText = '自定义'
case '/notice':
this.typeText = '公告'
break
default:
this.confirmBtnVisible = false
@ -172,6 +187,8 @@
break
case '自定义':
this.customVisible = true
case '公告':
this.noticeVisible = true
break
}
},
@ -231,6 +248,19 @@
}
this.$emit('update:linkObj', linkObj)
},
//
noticeChanged () {
var data = this.$refs.noticeSelect.tableRadio
this.noticeVisible = false
this.selectName = this.$refs.noticeSelect.tableRadio.noticeTitle
let linkObj = {
selsectValue: this.selsectValue,
selectName: this.selectName,
typeText: this.typeText,
data: data
}
this.$emit('update:linkObj', linkObj)
},
//
delSelect () {
let linkObj = {

7
canvas-container/components/toolBar/toolModule/tool-single-img.vue

@ -3,7 +3,6 @@
<div class="single-img__box">
<el-upload
drag
:headers="headers"
:action="fileUploadApi.fileUpload"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
@ -29,7 +28,6 @@
<script>
import api from '@@/components/canvasShow/config/api'
import {sendReqMixin} from '@@/components/canvasShow/config/mixin'
import { getToken } from '@/utils/auth.js'
export default {
name: 'tool-single-img',
mixins: [sendReqMixin],
@ -39,10 +37,7 @@
dialogImageUrl: '',
fileUploadApi: {
fileUpload: ''
},
headers: {
'Authorization-business': getToken()
},
}
}
},
props: {

7
canvas-container/views/canvasContainer.vue

@ -74,11 +74,18 @@ import Cookies from 'js-cookie'
},
mounted () {
this.shopId = parseInt(Cookies.get('cereShopId'))
if(this.shopId && this.shopId > 0 ){
this.setTypeId(3)
}else{
this.setTypeId(1)
}
this.canvasGet()
},
methods: {
...mapMutations({
setTerminal: 'SET_TERMINAL',
setTypeId: 'SET_TYPEID',
setActiveComponent: 'SET_ACTIVECOMPONENT',
setComponentsData: 'SET_COMPONENTSDATA'
}),

57
mock/index.js

@ -0,0 +1,57 @@
const Mock = require('mockjs')
const { param2Obj } = require('./utils')
const user = require('./user')
const table = require('./table')
const mocks = [
...user,
...table
]
// for front mock
// please use it cautiously, it will redefine XMLHttpRequest,
// which will cause many of your third-party libraries to be invalidated(like progress event).
function mockXHR() {
// mock patch
// https://github.com/nuysoft/Mock/issues/300
Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
Mock.XHR.prototype.send = function() {
if (this.custom.xhr) {
this.custom.xhr.withCredentials = this.withCredentials || false
if (this.responseType) {
this.custom.xhr.responseType = this.responseType
}
}
this.proxy_send(...arguments)
}
function XHR2ExpressReqWrap(respond) {
return function(options) {
let result = null
if (respond instanceof Function) {
const { body, type, url } = options
// https://expressjs.com/en/4x/api.html#req
result = respond({
method: type,
body: JSON.parse(body),
query: param2Obj(url)
})
} else {
result = respond
}
return Mock.mock(result)
}
}
for (const i of mocks) {
Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
}
}
module.exports = {
mocks,
mockXHR
}

81
mock/mock-server.js

@ -0,0 +1,81 @@
const chokidar = require('chokidar')
const bodyParser = require('body-parser')
const chalk = require('chalk')
const path = require('path')
const Mock = require('mockjs')
const mockDir = path.join(process.cwd(), 'mock')
function registerRoutes(app) {
let mockLastIndex
const { mocks } = require('./index.js')
const mocksForServer = mocks.map(route => {
return responseFake(route.url, route.type, route.response)
})
for (const mock of mocksForServer) {
app[mock.type](mock.url, mock.response)
mockLastIndex = app._router.stack.length
}
const mockRoutesLength = Object.keys(mocksForServer).length
return {
mockRoutesLength: mockRoutesLength,
mockStartIndex: mockLastIndex - mockRoutesLength
}
}
function unregisterRoutes() {
Object.keys(require.cache).forEach(i => {
if (i.includes(mockDir)) {
delete require.cache[require.resolve(i)]
}
})
}
// for mock server
const responseFake = (url, type, respond) => {
return {
url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
type: type || 'get',
response(req, res) {
console.log('request invoke:' + req.path)
res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
}
}
}
module.exports = app => {
// parse app.body
// https://expressjs.com/en/4x/api.html#req.body
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
extended: true
}))
const mockRoutes = registerRoutes(app)
var mockRoutesLength = mockRoutes.mockRoutesLength
var mockStartIndex = mockRoutes.mockStartIndex
// watch files, hot reload mock server
chokidar.watch(mockDir, {
ignored: /mock-server/,
ignoreInitial: true
}).on('all', (event, path) => {
if (event === 'change' || event === 'add') {
try {
// remove mock routes stack
app._router.stack.splice(mockStartIndex, mockRoutesLength)
// clear routes cache
unregisterRoutes()
const mockRoutes = registerRoutes(app)
mockRoutesLength = mockRoutes.mockRoutesLength
mockStartIndex = mockRoutes.mockStartIndex
console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
} catch (error) {
console.log(chalk.redBright(error))
}
}
})
}

29
mock/table.js

@ -0,0 +1,29 @@
const Mock = require('mockjs')
const data = Mock.mock({
'items|30': [{
id: '@id',
title: '@sentence(10, 20)',
'status|1': ['published', 'draft', 'deleted'],
author: 'name',
display_time: '@datetime',
pageviews: '@integer(300, 5000)'
}]
})
module.exports = [
{
url: '/vue-admin-template/table/list',
type: 'get',
response: config => {
const items = data.items
return {
code: 20000,
data: {
total: items.length,
items: items
}
}
}
}
]

84
mock/user.js

@ -0,0 +1,84 @@
const tokens = {
admin: {
token: 'admin-token'
},
editor: {
token: 'editor-token'
}
}
const users = {
'admin-token': {
roles: ['admin'],
introduction: 'I am a super administrator',
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
name: 'Super Admin'
},
'editor-token': {
roles: ['editor'],
introduction: 'I am an editor',
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
name: 'Normal Editor'
}
}
module.exports = [
// user login
{
url: '/vue-admin-template/user/login',
type: 'post',
response: config => {
const { username } = config.body
const token = tokens[username]
// mock error
if (!token) {
return {
code: 60204,
message: 'Account and password are incorrect.'
}
}
return {
code: 20000,
data: token
}
}
},
// get user info
{
url: '/vue-admin-template/user/info\.*',
type: 'get',
response: config => {
const { token } = config.query
const info = users[token]
// mock error
if (!info) {
return {
code: 50008,
message: 'Login failed, unable to get user details.'
}
}
return {
code: 20000,
data: info
}
}
},
// user logout
{
url: '/vue-admin-template/user/logout',
type: 'post',
response: _ => {
return {
code: 20000,
data: 'success'
}
}
}
]

25
mock/utils.js

@ -0,0 +1,25 @@
/**
* @param {string} url
* @returns {Object}
*/
function param2Obj(url) {
const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
if (!search) {
return {}
}
const obj = {}
const searchArr = search.split('&')
searchArr.forEach(v => {
const index = v.indexOf('=')
if (index !== -1) {
const name = v.substring(0, index)
const val = v.substring(index + 1, v.length)
obj[name] = val
}
})
return obj
}
module.exports = {
param2Obj
}

4
package.json

@ -15,12 +15,13 @@
},
"dependencies": {
"axios": "0.18.1",
"core-js": "3.6.5",
"core-js": "^3.33.1",
"echarts": "^4.8.0",
"element-ui": "2.13.2",
"es6-promise": "^4.2.8",
"fuse.js": "^6.4.3",
"js-cookie": "2.2.0",
"mime": "^3.0.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
@ -28,6 +29,7 @@
"swiper": "^5.4.5",
"vue": "2.6.10",
"vue-awesome-swiper": "^4.1.0",
"vue-i18n": "8.2.1",
"vue-lang": "^0.2.5",
"vue-quill-editor": "^3.0.6",
"vue-router": "3.0.6",

4
src/App.vue

@ -1,6 +1,6 @@
<template>
<div id="app">
<el-dialog title="温馨提示" top="30vh" :visible.sync="tipShow" width="30%" center>
<el-dialog title="$t('notice_dialog_title')" top="30vh" :visible.sync="tipShow" width="30%" center>
<span
>为保护个人隐私信息系统自动对敏感数据进行脱敏如需编辑查看完整信息可通过用户隐私二次认证功能进行验证验证通过之后24小时内可查看完整信息</span
>
@ -23,7 +23,7 @@ export default {
},
created() {
if (this.$store.state.user.token) {
this.getPrivacySwitch();
// this.getPrivacySwitch();
}
},
methods: {

54
src/layout/components/Navbar.vue

@ -8,9 +8,8 @@
<breadcrumb class="breadcrumb-container" />
<div class="right-menu">
<div class="projectmode">
<span>商家终端</span>
<span>{{ $t('navbar.businessMode') }}</span>
<el-switch
style="margin-left: 10px;"
v-model="isBusinessMode"
@ -24,6 +23,16 @@
<!-- <search id="header-search" class="right-menu-item" /> -->
<screenfull id="screenfull" class="right-menu-item hover-effect" />
</template>
<el-dropdown class="lang-container" @command="handleCommand">
<span class="el-dropdown-link">
{{ languaueName }}<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="zh">{{ $t('navbar.chinese') }}</el-dropdown-item>
<el-dropdown-item command="en">{{ $t('navbar.english') }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-dropdown class="avatar-container" trigger="click">
<div class="avatar-wrapper" style="margin-left: 20px">
@ -59,38 +68,38 @@
:show-file-list="false"
>
<el-dropdown-item divided>
<span style="display: block">修改头像</span>
<span style="display: block">{{ $t('navbar.changeAvatar') }}</span>
</el-dropdown-item>
</el-upload>
<el-dropdown-item divided @click.native="changePwd">
<span style="display: block">修改密码</span>
<span style="display: block">{{ $t('navbar.changePwd') }}</span>
</el-dropdown-item>
<el-dropdown-item divided @click.native="logout">
<span style="display: block">退出登录</span>
<span style="display: block">{{ $t('navbar.logout') }}</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<el-dialog
title="修改密码"
:title="$t('navbar.changePwd')"
:visible.sync="changePwdShow"
width="30%"
:before-close="handleClose"
>
<el-form ref="ruleForm" :model="ruleForm" status-icon :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="密码" prop="password">
<el-form-item :label="$t('navbar.password')" prop="password">
<el-input v-model="ruleForm.password" maxlength="16" type="password" autocomplete="off" />
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-form-item :label="$t('navbar.newPassword')" prop="newPassword">
<el-input v-model="ruleForm.newPassword" maxlength="16" type="password" autocomplete="off" />
</el-form-item>
<el-form-item label="确认密码" prop="confirmPass">
<el-form-item :label="$t('navbar.confirmPassword')" prop="confirmPass">
<el-input v-model="ruleForm.confirmPass" maxlength="16" type="password" autocomplete="off" />
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
<el-button type="primary" @click="confirmChangePwd"> </el-button>
<el-button @click="handleClose">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="confirmChangePwd">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>
@ -98,7 +107,7 @@
<script>
import { mapGetters } from 'vuex'
import { removeToken, removeBusinessId, removeUserId, setAvatar, getToken, setProject, getBusinessId, getProject } from '@/utils/auth'
import { removeToken, removeBusinessId, removeUserId, setAvatar, getToken, setProject, getBusinessId, getProject, setLanguaue,getLanguaue } from '@/utils/auth'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
@ -159,7 +168,8 @@ export default {
confirmPass: [
{ required: true, validator: confirmPassFn, trigger: 'blur' }
]
}
},
languaueName : "中文"
}
},
computed: {
@ -174,8 +184,21 @@ export default {
this.userAvatar = avatar
}
this.isBusinessMode = getProject() !== '0'
let initLanguaue = getLanguaue();
if(!initLanguaue || initLanguaue === '' ){
initLanguaue = 'zh'
}
// this.$i18n.locale = initLanguaue
this.languaueName = (initLanguaue === 'en' ? "English" : "中文")
},
methods: {
handleCommand(command){
setLanguaue(command)
this.languaueName = (getLanguaue() === 'en' ? "English" : "中文")
this.$i18n.locale = command
},
changeBusinessMode(){
console.log("changeBusinessMode:" + this.isBusinessMode)
if(this.isBusinessMode){
@ -322,6 +345,11 @@ export default {
}
}
.lang-container{
margin-left: 12px;
margin-right: 2px;
}
.avatar-container {
margin-right: 30px;

4
src/layout/components/Sidebar/SidebarItem.vue

@ -10,7 +10,7 @@
>
<item
:icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)"
:title="onlyOneChild.meta.title"
:title="$t('permission.' + onlyOneChild.meta.title)"
/>
</el-menu-item>
</app-link>
@ -18,7 +18,7 @@
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
<template slot="title">
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="$t('permission.' + item.meta.title)" />
</template>
<sidebar-item
v-for="child in item.children"

182
src/locales/en.json

@ -0,0 +1,182 @@
{
"main": {
"message": "message",
"display": "display",
"todaydata": "Today's Data",
"yonghufangwenqushi": "User Access Trends",
"fangwenyonghushu": "Users Reach",
"zhuanhualv": "Conversion rate",
"dingdanzhuanhuanloudou": "Order conversion funnel",
"remaishangpin": "Best Sellers"
},
"navbar": {
"changePwd": "change password",
"changeAvatar": "change avatar",
"logout": "Logout",
"chinese": "中文",
"english": "English",
"businessMode": "Merchant platform",
"password": "password",
"newPassword": "newPassword",
"confirmPassword": "onfirmPassword"
},
"common": {
"sure": "OK",
"cancle": "Cancle",
"export": "Export",
"view": "View",
"seemore": "See More",
"seeall": "See All",
"save": "Save",
"submit": "Submit",
"edit": "Edit",
"delete": "Delete",
"choose": "Please choose"
},
"permission": {
"概括": "Overview",
"分销商": "Distributor",
"系统管理": "System Management",
"字典管理": "Dict Management",
"角色管理": "Role Management",
"菜单管理": "Menu Management",
"用户管理": "User Management",
"新增": "Add",
"修改": "Edit",
"删除": "Delete",
"新增父级菜单": "Add Parent Menu",
"新增子级菜单": "Add Child Menu",
"新增子级按钮": "Add Child Btn",
"客户管理": "Custom Management",
"标签管理": "Tag Management",
"评论": "Comment",
"评论管理": "Comment Management",
"敏感词管理": "Sensitive word management",
"评论列表": "Comment List",
"添加": "Add",
"售后处理": "After Sales",
"平台活动": "Platform activities",
"商品管理": "Product Management",
"商品类别": "Product category",
"商家管理": "Business Management",
"商家列表": "Business List",
"入驻申请": "Settled Request",
"导出标签": "Export",
"关键词管理": "Keyword Management",
"订单": "Order",
"待处理订单": "Pending orders",
"售后订单": "After sales orders",
"商品": "Product",
"商品分组": "Product Group",
"店铺": "Shop",
"素材管理": "Material Management",
"设置": "Setting",
"商家设置": "Business Setting",
"物流设置": "Logistics Settings",
"财务": "Finance",
"财务明细": "Finance Detail",
"收款账户": "Finance Account",
"分销员": "Distributors",
"保证金": "Margin",
"财务管理": "Finance Management",
"提现申请": "Withdrawal Apply",
"财务概况": "Financial Overview",
"用户提现": "User withdrawal",
"批量导入": "Import",
"新增商品": "Add",
"新增分组": "Add",
"新增标签": "Add",
"上传": "Upload",
"新建方案": "Add",
"商家菜单": "Business Menu",
"终端装修": "Terminal decoration",
"消息中心": "Msg Center",
"历史消息": "Msg History",
"消息推送": "Message push",
"营销活动": "Marketing activities",
"优惠券管理": "Coupon Management",
"拼团": "Piecing together a group",
"秒杀": "Flash killing",
"限时折扣": "Limited time discount",
"客户列表": "Customer List",
"标签列表": "Tag List",
"客户分群": "Customer segmentation",
"运营计划": "Operational planning",
"优惠券活动": "Coupon activity",
"秒杀活动": "Flash sale activity",
"支付有礼": "Pay with courtesy",
"会员管理": "Member Management",
"会员列表": "Member List",
"会员标签": "Member Tag",
"导出": "Export",
"会员权益": "Member Benefits",
"会员等级": "Member Level",
"订单管理": "Order Management",
"订单列表": "Order List",
"场景营销": "Scenario marketing",
"组合捆绑": "Combination bundling",
"定价捆绑": "Pricing Bundle",
"商品列表": "Product List",
"汽车管理": "Car Management",
"汽车类别": "Car Category",
"类别参数": "Category Management",
"房产管理": "Property Management",
"房产类型": "Property Type",
"沙石管理": "Stone Management",
"沙石类型": "Stone Type",
"类别分类": "Category classification",
"再生管理": "Regeneration management",
"再生类型": "Regeneration type",
"税务管理": "Tax management",
"税务类型": "Tax type",
"直播管理": "Live management",
"广告管理": "Advertisement Management",
"直播列表": "Live List",
"直播商品": "Live Product",
"广告列表": "Advertising List",
"风控管理": "Risk control management",
"IP黑名单": "IP BlackList",
"用户黑名单": "User BlackList",
"风控规则": "Risk control rules",
"客服配置": "Customer configuration",
"客服管理": "Customer management",
"测试秒杀活动": "Flash killing activity test",
"测试限时折扣": "Limited time discount test",
"测试支付有礼": "Payment courtesy test",
"测试优惠卷": "Coupon test",
"积分管理": "Points Management",
"积分配置": "Integral configuration",
"积分记录": "Points Record",
"签到配置": "Sign-in configuration",
"微信客服": "WeChat customer",
"直播间管理": "Live room management",
"直播间商品管理": "Live Room Product Management",
"微信客服管理": "WeChat customer management",
"渠道优惠券管理": "Channel coupon management",
"测试": "Test",
"手机管理": "Mobile management",
"二次认证": "Secondary certification",
"二次认证管理": "Secondary certification management",
"手机号管理": "Mobile number management",
"渠道管理": "Channel management",
"渠道列表": "Channel List",
"渠道券管理": "Channel voucher management",
"渠道券活动": "Channel voucher activity",
"品牌管理": "Branding",
"手机号码": "Phone Number",
"渠道优惠券": "Channel Coupon",
"仓库管理": "Storehouse management",
"跨境设置": "Cross border settings",
"分账比例设置": "Allocation ratio setting",
"库存管理": "Inventory management",
"库存明细": "Inventory Details",
"店铺列表": "Shop List",
"我的店铺": "My Shop",
"商家商品分类": "Business Product ",
"商家装修": "BUsiness Build"
},
"commom": {
"nodata": "No Data"
},
"notice_dialog_title": "Tips"
}

184
src/locales/zh-CN.json

@ -0,0 +1,184 @@
{
"main": {
"message": "消息",
"display": "展示",
"todaydata": "今日数据",
"yonghufangwenqushi": "用户访问趋势",
"renci": "人次",
"fangwenyonghushu": "访问用户数",
"zhuanhualv": "总转化率",
"dingdanzhuanhuanloudou": "订单转换漏斗",
"remaishangpin": "热卖商品"
},
"navbar": {
"changePwd": "修改密码",
"changeAvatar": "修改头像",
"logout": "退出登录",
"chinese": "中文",
"english": "英文",
"businessMode": "商家终端",
"password": "密码",
"newPassword": "新密码",
"confirmPassword": "确认密码"
},
"common": {
"sure": "确定",
"cancle": "取消",
"export": "导出",
"view": "查看",
"seemore": "查看更多",
"seeall": "查看全部",
"save": "保存",
"submit": "提交",
"edit": "编辑",
"delete": "删除",
"choose": "请选择"
},
"permission": {
"概况": "概况",
"概括": "概括",
"分销商": "分销商",
"系统管理": "系统管理",
"字典管理": "字典管理",
"角色管理": "角色管理",
"菜单管理": "菜单管理",
"用户管理": "用户管理",
"新增": "新增",
"修改": "修改",
"删除": "删除",
"新增父级菜单": "新增父级菜单",
"新增子级菜单": "新增子级菜单",
"新增子级按钮": "新增子级按钮",
"客户管理": "客户管理",
"标签管理": "标签管理",
"评论": "评论",
"评论管理": "评论管理",
"敏感词管理": "敏感词管理",
"评论列表": "评论列表",
"添加": "添加",
"售后处理": "售后处理",
"平台活动": "平台活动",
"商品管理": "商品管理",
"商品类别": "商品类别",
"商家管理": "商家管理",
"商家列表": "商家列表",
"入驻申请": "入驻申请",
"导出标签": "导出标签",
"关键词管理": "关键词管理",
"订单": "订单",
"待处理订单": "待处理订单",
"售后订单": "售后订单",
"商品": "商品",
"商品分组": "商品分组",
"店铺": "店铺",
"素材管理": "素材管理",
"设置": "设置",
"商家设置": "商家设置",
"物流设置": "物流设置",
"财务": "财务",
"财务明细": "财务明细",
"收款账户": "收款账户",
"分销员": "分销员",
"保证金": "保证金",
"财务管理": "财务管理",
"提现申请": "提现申请",
"财务概况": "财务概况",
"用户提现": "用户提现",
"批量导入": "批量导入",
"新增商品": "新增商品",
"新增分组": "新增分组",
"新增标签": "新增标签",
"上传": "上传",
"新建方案": "新建方案",
"商家菜单": "商家菜单",
"终端装修": "终端装修",
"消息中心": "消息中心",
"历史消息": "历史消息",
"消息推送": "消息推送",
"营销活动": "营销活动",
"优惠券管理": "优惠券管理",
"拼团": "拼团",
"秒杀": "秒杀",
"限时折扣": "限时折扣",
"客户列表": "客户列表",
"标签列表": "标签列表",
"客户分群": "客户分群",
"运营计划": "运营计划",
"优惠券活动": "优惠券活动",
"秒杀活动": "秒杀活动",
"支付有礼": "支付有礼",
"会员管理": "会员管理",
"会员列表": "会员列表",
"会员标签": "会员标签",
"导出": "导出",
"会员权益": "会员权益",
"会员等级": "会员等级",
"订单管理": "订单管理",
"订单列表": "订单列表",
"场景营销": "场景营销",
"组合捆绑": "组合捆绑",
"定价捆绑": "定价捆绑",
"商品列表": "商品列表",
"汽车管理": "汽车管理",
"汽车类别": "汽车类别",
"类别参数": "类别参数",
"房产管理": "房产管理",
"房产类型": "房产类型",
"沙石管理": "沙石管理",
"沙石类型": "沙石类型",
"类别分类": "类别分类",
"再生管理": "再生管理",
"再生类型": "再生类型",
"税务管理": "税务管理",
"税务类型": "税务类型",
"直播管理": "直播管理",
"广告管理": "广告管理",
"直播列表": "直播列表",
"直播商品": "直播商品",
"广告列表": "广告列表",
"风控管理": "风控管理",
"IP黑名单": "IP黑名单",
"用户黑名单": "用户黑名单",
"风控规则": "风控规则",
"客服配置": "客服配置",
"客服管理": "客服管理",
"测试秒杀活动": "测试秒杀活动",
"测试限时折扣": "测试限时折扣",
"测试支付有礼": "测试支付有礼",
"测试优惠卷": "测试优惠卷",
"积分管理": "积分管理",
"积分配置": "积分配置",
"积分记录": "积分记录",
"签到配置": "签到配置",
"微信客服": "微信客服",
"直播间管理": "直播间管理",
"直播间商品管理": "直播间商品管理",
"微信客服管理": "微信客服管理",
"渠道优惠券管理": "渠道优惠券管理",
"测试": "测试",
"手机管理": "手机管理",
"二次认证": "二次认证",
"二次认证管理": "二次认证管理",
"手机号管理": "手机号管理",
"渠道管理": "渠道管理",
"渠道列表": "渠道列表",
"渠道券管理": "渠道券管理",
"渠道券活动": "渠道券活动",
"品牌管理": "品牌管理",
"手机号码": "手机号码",
"渠道优惠券": "渠道优惠券",
"仓库管理": "仓库管理",
"跨境设置": "跨境设置",
"分账比例设置": "分账比例设置",
"库存管理": "库存管理",
"库存明细": "库存明细",
"店铺列表": "店铺列表",
"我的店铺": "我的店铺",
"商家商品分类": "商家商品分类",
"商家装修": "商家装修"
},
"commom": {
"nodata": "暂无数据"
},
"notice_dialog_title": "温馨提示"
}

30
src/main.js

@ -15,6 +15,13 @@ import router from './router'
import '@/icons' // icon
import '@/permission' // permission control
import VueI18n from "vue-i18n"
Vue.use( VueI18n)
//引入element-ui语言
import elementEnLocale from 'element-ui/lib/locale/lang/en'
import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'
// if (process.env.NODE_ENV === 'production') {
// const { mockXHR } = require('../mock')
// mockXHR()
@ -23,7 +30,27 @@ import '@/permission' // permission control
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui,按如下方式声明
Vue.use(ElementUI)
const messages={
en:{
... require('./locales/en.json'),
...elementEnLocale
},
zh:{
... require('./locales/zh-CN.json'),
...elementZhLocale
}
}
const i18n = new VueI18n({
locale: localStorage.getItem("language") || 'zh',//指定默认语言
messages,
})
Vue.use(ElementUI, {
i18n: (key, value) => i18n.t(key, value)
})
Vue.config.productionTip = false
@ -31,5 +58,6 @@ new Vue({
el: '#app',
router,
store,
i18n,
render: h => h(App)
})

8
src/utils/auth.js

@ -7,6 +7,7 @@ const roleName = 'roleName'
const avatar = 'avatar'
const roleUserId = 'roleUserId'
const btns = 'buttonList'
const language = 'language'
export function getToken() {
return Cookies.get(TokenKey)
@ -51,6 +52,13 @@ export function setProject(name) {
return sessionStorage.setItem(project, name)
}
export function setLanguaue(lang) {
return localStorage.setItem(language, lang)
}
export function getLanguaue() {
return localStorage.getItem(language)
}
export function removeToken() {
return Cookies.remove(TokenKey)

2
src/views/commodity/commdityClass/Edit.vue

@ -145,7 +145,7 @@
type="primary"
size="small"
@click="onSubmit"
>保存
>{{ $t('common.save') }}
</el-button>
</template>
</div>

6
src/views/commodity/commdityClass/index.vue

@ -14,9 +14,9 @@
<el-table-column prop="classifyName" label="商品类别" />
<el-table-column prop="status" label="操作">
<template slot-scope="scope">
<el-button type="text" @click.native.prevent="checkRow(scope.row)">查看</el-button>
<el-button type="text" @click.native.prevent="updateRow(scope.row)">编辑</el-button>
<el-button type="text" @click.native.prevent="deleteRow(scope.row)">删除</el-button>
<el-button type="text" @click.native.prevent="checkRow(scope.row)">{{ $t('common.view') }}</el-button>
<el-button type="text" @click.native.prevent="updateRow(scope.row)">{{ $t('common.edit') }}</el-button>
<el-button type="text" @click.native.prevent="deleteRow(scope.row)">{{ $t('common.delete') }}</el-button>
<!-- <el-button type="text" @click.native.prevent="setShareSetting(scope.row)">设置分配比例</el-button> -->
</template>
</el-table-column>

12
src/views/commodity/commodityList copy/commodityGroup.vue

@ -75,8 +75,8 @@
</div>
</div>
<div class="submitBox">
<el-button type="primary" @click="addGroup('ruleForm')"> </el-button>
<el-button @click="closeAddGroup"> </el-button>
<el-button type="primary" @click="addGroup('ruleForm')">{{ $t('common.submit') }}</el-button>
<el-button @click="closeAddGroup">{{ $t('common.cancle') }}</el-button>
</div>
</div>
</div>
@ -144,8 +144,8 @@
@current-change="handleCurrentChange"
/>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveIdList"> </el-button>
<el-button @click="closeSelect"> </el-button>
<el-button type="primary" @click="saveIdList">{{ $t('common.sure') }}</el-button>
<el-button @click="closeSelect">{{ $t('common.cancle') }}</el-button>
</span>
</div>
</div>
@ -208,8 +208,8 @@
</div>
<div class="fenye">
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveOptions"> </el-button>
<el-button @click="closeOptions"> </el-button>
<el-button type="primary" @click="saveOptions">{{ $t('common.sure') }}</el-button>
<el-button @click="closeOptions">{{ $t('common.cancle') }}</el-button>
</span>
</div>
</el-dialog>

8
src/views/commodity/commodityList copy/index.vue

@ -40,9 +40,9 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<!-- <el-button type="text" @click="edit(scope.row)">详情</el-button>-->
<el-button type="text" @click="del(scope.row)">删除</el-button>
<el-button type="text" @click="del(scope.row)">{{ $t('common.delete') }}</el-button>
</div>
</template>
</el-table-column>
@ -90,8 +90,8 @@
<el-input v-model="params.groupName" maxlength="20" />
</el-form-item>
<el-form-item size="large" class="btn-wrap">
<el-button type="primary" @click="onSubmit">确定</el-button>
<el-button @click="isVisible = false">取消</el-button>
<el-button type="primary" @click="onSubmit">{{ $t('common.sure') }}</el-button>
<el-button @click="isVisible = false">{{ $t('common.cancle') }}</el-button>
</el-form-item>
</el-form>
</el-dialog>

14
src/views/commodity/commodityList/commodityGroup.vue

@ -75,8 +75,8 @@
</div>
</div>
<div class="submitBox">
<el-button type="primary" @click="addGroup('ruleForm')"> </el-button>
<el-button @click="closeAddGroup"> </el-button>
<el-button type="primary" @click="addGroup('ruleForm')">{{ $t('common.submit') }}</el-button>
<el-button @click="closeAddGroup">{{ $t('common.cancle') }}</el-button>
</div>
</div>
</div>
@ -144,8 +144,8 @@
@current-change="handleCurrentChange"
/>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveIdList"> </el-button>
<el-button @click="closeSelect"> </el-button>
<el-button type="primary" @click="saveIdList">{{ $t('common.sure') }}</el-button>
<el-button @click="closeSelect">{{ $t('common.cancle') }}</el-button>
</span>
</div>
</div>
@ -184,7 +184,7 @@
</el-select>
</div>
<div class="purchase">
<el-select v-model="item.calculation" placeholder="请选择">
<el-select v-model="item.calculation" placeholder="$t('common.choose')">
<el-option
v-for="calculationItem in calculationList"
:key="calculationItem.value"
@ -208,8 +208,8 @@
</div>
<div class="fenye">
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveOptions"> </el-button>
<el-button @click="closeOptions"> </el-button>
<el-button type="primary" @click="saveOptions">{{ $t('common.sure') }}</el-button>
<el-button @click="closeOptions">{{ $t('common.cancle') }}</el-button>
</span>
</div>
</el-dialog>

8
src/views/commodity/commodityList/index.vue

@ -40,9 +40,9 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<!-- <el-button type="text" @click="edit(scope.row)">详情</el-button>-->
<el-button type="text" @click="del(scope.row)">删除</el-button>
<el-button type="text" @click="del(scope.row)">{{ $t('common.delete') }}</el-button>
</div>
</template>
</el-table-column>
@ -90,8 +90,8 @@
<el-input v-model="params.groupName" maxlength="20" />
</el-form-item>
<el-form-item size="large" class="btn-wrap">
<el-button type="primary" @click="onSubmit">确定</el-button>
<el-button @click="isVisible = false">取消</el-button>
<el-button type="primary" @click="onSubmit">{{ $t('common.sure') }}</el-button>
<el-button @click="isVisible = false">{{ $t('common.cancle') }}</el-button>
</el-form-item>
</el-form>
</el-dialog>

6
src/views/commodity/commoditySystem/addCommodity.vue

@ -243,7 +243,7 @@
</el-table-column>
<!-- <el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">删除</el-button>
<el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">{{ $t('common.delete') }}</el-button>
</template>
</el-table-column> -->
</el-table>
@ -309,8 +309,8 @@
<div class="footer">
<div class="btn_list">
<span @click="back">取消</span>
<span @click="save">保存</span>
<span @click="back">{{ $t('common.cancle') }}</span>
<span @click="save">{{ $t('common.save') }}</span>
</div>
</div>

2
src/views/commodity/commoditySystem/addComponent.vue

@ -235,7 +235,7 @@
</el-table-column>
<!-- <el-table-column label="操作">
<template slot-scope="scope">
<el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">删除</el-button>
<el-button type="text" @click="delAttrValue(scope.row,scope.$index,scope.row,scope)">{{ $t('common.delete') }}</el-button>
</template>
</el-table-column> -->
</el-table>

8
src/views/commodity/commoditySystem/index.vue

@ -83,11 +83,11 @@
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<el-button v-if="scope.row.shelveState==0" type="text" @click="down(scope.row)">上架</el-button>
<el-button v-if="scope.row.shelveState==1" type="text" @click="down(scope.row)">下架</el-button>
<el-button v-if="scope.row.shelveState==1" type="text" @click="setVipPrice(scope.row)">设置会员价</el-button>
<el-button v-if="scope.row.shelveState!=1" type="text" @click="del(scope.row)">删除</el-button>
<el-button v-if="scope.row.shelveState!=1" type="text" @click="del(scope.row)">{{ $t('common.delete') }}</el-button>
</div>
</template>
</el-table-column>
@ -182,8 +182,8 @@
<el-button type="success" class="clearBtn" @click="clearProductMember">清除所有旧会员价</el-button>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="vipPriceVisible = false"> </el-button>
<el-button type="primary" @click="vipPriceSubmit"> </el-button>
<el-button @click="vipPriceVisible = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="vipPriceSubmit">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<!-- 新增/修改商品弹窗 -->

4
src/views/customer/addClustering.vue

@ -75,8 +75,8 @@
</div>
</div>
<div class="saveBox">
<el-button type="primary" @click="saveClustering"> </el-button>
<el-button @click="closeClustering"> </el-button>
<el-button type="primary" @click="saveClustering">{{ $t('common.save') }}</el-button>
<el-button @click="closeClustering">{{ $t('common.cancle') }}</el-button>
</div>
</div>
</div>

10
src/views/customer/addOperate.vue

@ -74,7 +74,7 @@
</el-form>
<div class="btnBox">
<el-button type="primary" @click="savaSubmit">提交</el-button>
<el-button @click="goToList">取消</el-button>
<el-button @click="goToList">{{ $t('common.cancle') }}</el-button>
</div>
</div>
</div>
@ -127,8 +127,8 @@
@current-change="handleCurrentChange"
/>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveCrowdId"> </el-button>
<el-button @click="closeSelect"> </el-button>
<el-button type="primary" @click="saveCrowdId">{{ $t('common.sure') }}</el-button>
<el-button @click="closeSelect">{{ $t('common.cancle') }}</el-button>
</span>
</div>
</div>
@ -180,8 +180,8 @@
@current-change="handleCurrentChange"
/>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveIdCouponList"> </el-button>
<el-button @click="closeSelectCoupon"> </el-button>
<el-button type="primary" @click="saveIdCouponList">{{ $t('common.sure') }}</el-button>
<el-button @click="closeSelectCoupon">{{ $t('common.cancle') }}</el-button>
</span>
</div>
</div>

8
src/views/customer/clusteringList/index.vue

@ -15,7 +15,7 @@
<el-button type="primary" plain @click="search">查询</el-button>
<el-button type="primary" plain @click="clear">重置</el-button>
<el-button type="primary" plain @click="addClustering">新建人群</el-button>
<el-button type="primary" plain @click="delClusteringFn(id = null)">删除</el-button>
<el-button type="primary" plain @click="delClusteringFn(id = null)">{{ $t('common.delete') }}</el-button>
</div>
</div>
<!-- 表格 -->
@ -39,10 +39,10 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row.shopCrowdId)">编辑</el-button>
<el-button type="text" @click="seeCustomer(scope.row. shopCrowdId)">查看客户</el-button>
<el-button type="text" @click="edit(scope.row.shopCrowdId)">{{ $t('common.edit') }}</el-button>
<el-button type="text" @click="seeCustomer(scope.row. shopCrowdId)">{{ $t('common.view') }}</el-button>
<el-popconfirm title="确认要删除此人群?" @onConfirm="delClusteringFn(scope.row.shopCrowdId)">
<el-button slot="reference" class="delCls" type="text">删除</el-button>
<el-button slot="reference" class="delCls" type="text">{{ $t('common.delete') }}</el-button>
</el-popconfirm>
</div>
</template>

4
src/views/customer/customerList/customerDetail.vue

@ -101,8 +101,8 @@
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveChangeCustomer"> </el-button>
<el-button @click="closeChange"> </el-button>
<el-button type="primary" @click="saveChangeCustomer">{{ $t('common.save') }}</el-button>
<el-button @click="closeChange">{{ $t('common.cancle') }}</el-button>
</span>
</el-dialog>
</div>

10
src/views/customer/customerList/index.vue

@ -82,7 +82,7 @@
<el-button type="text" @click="edit(scope.row)">加标签</el-button>
<el-button type="text" @click="showDetail(scope.row.buyerUserId)">详情</el-button>
<!-- <el-popconfirm title="确定删除此标签?" @onConfirm="deleteTagFn(scope.row.labelId)">
<el-button slot="reference" class="delCls" type="text">删除</el-button>
<el-button slot="reference" class="delCls" type="text">{{ $t('common.delete') }}</el-button>
</el-popconfirm> -->
</div>
</template>
@ -156,8 +156,8 @@
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveCustomer('ruleForm')"> </el-button>
<el-button @click="closeAddCustomer"> </el-button>
<el-button type="primary" @click="saveCustomer('ruleForm')">{{ $t('common.save') }}</el-button>
<el-button @click="closeAddCustomer">{{ $t('common.cancle') }}</el-button>
</span>
</el-dialog>
<!-- 添加标签 -->
@ -189,8 +189,8 @@
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveCustomerTag"> </el-button>
<el-button @click="closeAddTag"> </el-button>
<el-button type="primary" @click="saveCustomerTag">{{ $t('common.save') }}</el-button>
<el-button @click="closeAddTag">{{ $t('common.cancle') }}</el-button>
</span>
</el-dialog>

6
src/views/customer/operate/index.vue

@ -36,7 +36,7 @@
<el-button type="primary" plain @click="search">查询</el-button>
<el-button type="info" plain @click="clearData">重置</el-button>
<el-button type="primary" plain @click="addOperate">新增</el-button>
<el-button type="primary" plain @click="delData(id = null)">删除</el-button>
<el-button type="primary" plain @click="delData(id = null)">{{ $t('common.delete') }}</el-button>
</el-form-item>
</el-form>
</div>
@ -78,9 +78,9 @@
<el-table-column label="操作" show-overflow-tooltip align="center">
<template slot-scope="scope">
<div class="btnList">
<el-button v-if="scope.row.state === 0" type="text" @click="edit(scope.row.shopOperateId)">编辑</el-button>
<el-button v-if="scope.row.state === 0" type="text" @click="edit(scope.row.shopOperateId)">{{ $t('common.edit') }}</el-button>
<el-button type="text" @click="showData(scope.row.shopOperateId)">数据</el-button>
<el-button v-if="scope.row.state === 0 || scope.row.state === 2" type="text" @click="delData(scope.row.shopOperateId)">删除</el-button>
<el-button v-if="scope.row.state === 0 || scope.row.state === 2" type="text" @click="delData(scope.row.shopOperateId)">{{ $t('common.delete') }}</el-button>
</div>
</template>
</el-table-column>

10
src/views/customer/tagList.vue

@ -15,7 +15,7 @@
<el-button type="primary" plain @click="search">查询</el-button>
<el-button type="primary" plain @click="clear">重置</el-button>
<el-button type="primary" plain @click="addTag">添加标签</el-button>
<el-button type="primary" plain @click="deleteTagFn(id = null)">删除</el-button>
<el-button type="primary" plain @click="deleteTagFn(id = null)">{{ $t('common.delete') }}</el-button>
</div>
</div>
<!-- 表格 -->
@ -39,9 +39,9 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row.labelId)">编辑</el-button>
<el-button type="text" @click="edit(scope.row.labelId)">{{ $t('common.edit') }}</el-button>
<el-popconfirm title="确定删除此标签?" @onConfirm="deleteTagFn(scope.row.labelId)">
<el-button slot="reference" class="delCls" type="text">删除</el-button>
<el-button slot="reference" class="delCls" type="text">{{ $t('common.delete') }}</el-button>
</el-popconfirm>
</div>
</template>
@ -85,8 +85,8 @@
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveTag"> </el-button>
<el-button @click="closeAddTag"> </el-button>
<el-button type="primary" @click="saveTag">{{ $t('common.save') }}</el-button>
<el-button @click="closeAddTag">{{ $t('common.cancle') }}</el-button>
</span>
</el-dialog>
</div>

14
src/views/customerService/service/index.vue

@ -38,8 +38,8 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="del(scope.row)">删除</el-button>
<el-button type="text" @click="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<el-button type="text" @click="del(scope.row)">{{ $t('common.delete') }}</el-button>
<el-button type="text" @click="reception(scope.row)">接待人员管理</el-button>
</div>
</template>
@ -94,8 +94,8 @@
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="addFormDialog = false"> </el-button>
<el-button type="primary" @click="addForm_enter('ruleForm')"> </el-button>
<el-button @click="addFormDialog = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="addForm_enter('ruleForm')">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
@ -146,7 +146,7 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="deleteReceptionist(scope.row)">删除</el-button>
<el-button type="text" @click="deleteReceptionist(scope.row)">{{ $t('common.delete') }}</el-button>
</div>
</template>
</el-table-column>
@ -198,8 +198,8 @@
</el-table>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="addServerShow = false"> </el-button>
<el-button type="primary" @click="addReceptionSubmit()"> </el-button>
<el-button @click="addServerShow = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="addReceptionSubmit()">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

2
src/views/customerService/setting/index.vue

@ -18,7 +18,7 @@
<el-button
type="primary"
@click="submitForm('ruleForm')"
>保存</el-button>
>{{ $t('common.save') }}</el-button>
<el-button @click="resetForm('ruleForm')">重置</el-button>
</el-form-item>
</el-form>

20
src/views/dashboard/index.vue

@ -1,7 +1,7 @@
<template>
<div class="home-page">
<div class="total-data">
<p class="p-title">今日数据</p>
<p class="p-title">{{ $t('main.todaydata') }}</p>
<div class="card-parent">
<div class="card-info">
<div class="card-type-info">
@ -57,19 +57,19 @@
</div>
<div class="echart_list">
<div class="echart_item">
<p class="title">用户访问趋势</p>
<p class="title">访问用户数{{ info.count }} </p>
<p class="title">{{ $t('main.yonghufangwenqushi') }}</p>
<p class="title">{{ $t('main.fangwenyonghushu') }} {{ info.count }} {{ $t('main.renci') }}</p>
<div ref="myEchart" class="full-size" />
<el-button type="success" class="exportBtn" plain @click="userVisitExport">导出</el-button>
<el-button type="success" class="exportBtn" plain @click="userVisitExport">{{ $t('common.export') }}</el-button>
</div>
<div class="echart_item">
<p class="title">订单转换漏斗</p>
<p class="title">总转化率{{ info.rate }}%</p>
<p class="title">{{ $t('main.dingdanzhuanhuanloudou') }}</p>
<p class="title">{{ $t('main.zhuanhualv') }}{{ info.rate }}%</p>
<div ref="myEcharts" class="full-size" />
<el-button type="success" class="exportBtn" plain @click="orderConvertExport">导出</el-button>
<el-button type="success" class="exportBtn" plain @click="orderConvertExport">{{ $t('common.export') }}</el-button>
</div>
<div class="echart_item">
<p class="title">热卖商品</p>
<p class="title">{{ $t('main.remaishangpin') }}</p>
<ul v-if="info.hotSellProducts && info.hotSellProducts.length">
<li v-for="(item, index) in info.hotSellProducts" :key="index">
<p>{{ index + 1 }}</p>
@ -79,9 +79,9 @@
</ul>
<div v-else class="empty">
<img :src="empty" alt>
<p>暂无数据</p>
<p>{{ $t('commom.nodata') }}</p>
</div>
<el-button type="success" class="exportBtn" plain @click="hotProductsExport">导出</el-button>
<el-button type="success" class="exportBtn" plain @click="hotProductsExport">{{ $t('common.export') }}</el-button>
</div>
</div>
</div>

8
src/views/distributor/achievement/programme.vue

@ -141,20 +141,20 @@
type="text"
size="small"
@click.native.prevent="save(scope.row)"
>保存</el-button>
<el-button v-else type="text" size="small" @click.native.prevent="edit(scope.row)">编辑</el-button>
>{{ $t('common.save') }}</el-button>
<el-button v-else type="text" size="small" @click.native.prevent="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<el-button
v-if="scope.row.edit || scope.row.add"
type="text"
size="small"
@click.native.prevent="cancel(scope.row)"
>取消</el-button>
>{{ $t('common.cancle') }}</el-button>
<el-button
v-else
type="text"
size="small"
@click.native.prevent="deletes(scope.row.distributorLevelId)"
>删除</el-button>
>{{ $t('common.delete') }}</el-button>
</template>
</el-table-column>
</el-table>

4
src/views/distributor/customer/popSearch.vue

@ -88,7 +88,7 @@
<div class="dialog_content">{{ isVisible.text }}</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="isVisible.show = false">取消</el-button>
<el-button @click="isVisible.show = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="agreeEn">确认</el-button>
</span>
</el-dialog>
@ -113,7 +113,7 @@
</el-radio-group>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="isVisible.shows = false">取消</el-button>
<el-button @click="isVisible.shows = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="agreeEn">确认</el-button>
</span>
</el-dialog>

4
src/views/distributor/customer/popSys.vue

@ -54,8 +54,8 @@
</el-radio-group>
</el-col>
</el-row>
<el-button type="primary" class="cancel" @click="cancel">取消</el-button>
<el-button type="primary" class="subm" @click="subm">保存</el-button>
<el-button type="primary" class="cancel" @click="cancel">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" class="subm" @click="subm">{{ $t('common.save') }}</el-button>
</div>
</template>

4
src/views/distributor/exten/invite.vue

@ -80,8 +80,8 @@
</div>
<div class="bgtext">最佳尺寸875x1275像素尺寸不匹配时图片将被压缩或拉伸</div>
<div class="inviteBtnBox">
<el-button type="primary" class="cancel" @click="cancel">取消</el-button>
<el-button type="primary" class="subm" @click="subm">保存</el-button>
<el-button type="primary" class="cancel" @click="cancel">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" class="subm" @click="subm">{{ $t('common.save') }}</el-button>
</div>
</div>
</div>

4
src/views/distributor/exten/shopTen.vue

@ -77,8 +77,8 @@
</div>
<div class="bgtext">最佳尺寸875x1275像素尺寸不匹配时图片将被压缩或拉伸</div>
<div class="inviteBtnBox">
<el-button type="primary" class="cancel" @click="cancel">取消</el-button>
<el-button type="primary" class="subm" @click="subm">保存</el-button>
<el-button type="primary" class="cancel" @click="cancel">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" class="subm" @click="subm">{{ $t('common.save') }}</el-button>
</div>
</div>
</div>

8
src/views/distributor/personnel/list.vue

@ -58,7 +58,7 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<el-button type="text" @click="del(scope.row)">清退</el-button>
</div>
</template>
@ -128,8 +128,8 @@
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="agreeEn">确定</el-button>
<el-button @click="isVisible.show = false"> </el-button>
<el-button type="primary" @click="agreeEn">{{ $t('common.sure') }}</el-button>
<el-button @click="isVisible.show = false">{{ $t('common.cancle') }}</el-button>
</span>
</el-dialog>
@ -151,7 +151,7 @@
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="isVisible.shows = false">取消</el-button>
<el-button @click="isVisible.shows = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="agreeEn">确认</el-button>
</span>
</el-dialog>

4
src/views/distributor/personnel/sys.vue

@ -27,8 +27,8 @@
</el-radio-group>
</el-form-item>
<el-form-item label-width="100" style="padding-left: 120px;">
<el-button type="info" plain @click="cancel">取消</el-button>
<el-button type="primary" @click="subm">保存</el-button>
<el-button type="info" plain @click="cancel">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="subm">{{ $t('common.save') }}</el-button>
</el-form-item>
</el-form>
</div>

4
src/views/finance/account/index.vue

@ -183,8 +183,8 @@
<el-button
type="primary"
@click="confirm(formList[dialogData.type])"
>{{ dialogData.confirm || '确定' }}</el-button>
<el-button @click="dialogData.isVisible = false"> </el-button>
>{{ dialogData.confirm || $t('common.sure') }}</el-button>
<el-button @click="dialogData.isVisible = false">{{ $t('common.cancle') }}</el-button>
</p>
</el-dialog>
</div>

8
src/views/finance/list/index.vue

@ -53,7 +53,7 @@
<el-table-column label="操作" show-overflow-tooltip>
<template slot-scope="scope">
<div class="btnList">
<el-button type="text" @click="seeMore(scope.row)">查看</el-button>
<el-button type="text" @click="seeMore(scope.row)">{{ $t('common.view') }}</el-button>
</div>
</template>
</el-table-column>
@ -80,8 +80,8 @@
</el-form>
<p v-else class="tips">您的账户尚未绑定银行卡无法提现</p>
<p slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirm()">确定</el-button>
<el-button @click="isVisible = false">取消</el-button>
<el-button type="primary" @click="confirm()">{{ $t('common.sure') }}</el-button>
<el-button @click="isVisible = false">{{ $t('common.cancle') }}</el-button>
</p>
</el-dialog>
@ -153,7 +153,7 @@
</div>
</div>
<p slot="footer" class="dialog-footer">
<el-button type="primary" @click="moneydio = false">确定</el-button>
<el-button type="primary" @click="moneydio = false">{{ $t('common.sure') }}</el-button>
</p>
</el-dialog>
</div>

8
src/views/liveMenu/liveProduct/index.vue

@ -117,9 +117,9 @@
v-if="scope.row.state != 1"
type="text"
@click="edit(scope.row)"
>编辑</el-button>
>{{ $t('common.edit') }}</el-button>
<el-button type="text" @click="seeMore(scope.row)">详情</el-button>
<el-button type="text" @click="del(scope.row)">删除</el-button>
<el-button type="text" @click="del(scope.row)">{{ $t('common.delete') }}</el-button>
<el-button
v-if="scope.row.state == 2"
type="text"
@ -347,7 +347,7 @@
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addProShow = false"> </el-button>
<el-button @click="addProShow = false">{{ $t('common.cancle') }}</el-button>
<el-button
v-if="proShowState == 1"
type="primary"
@ -357,7 +357,7 @@
v-if="proShowState == 2"
type="primary"
@click="editProSubmit"
> </el-button>
>{{ $t('common.save') }}</el-button>
</span>
</el-dialog>
</div>

12
src/views/liveMenu/liveRoom/index.vue

@ -72,9 +72,9 @@
type="text"
@click="addPro(scope.row)"
>导入</el-button>
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="edit(scope.row)">{{ $t('common.edit') }}</el-button>
<el-button type="text" @click="seeMore(scope.row)">详情</el-button>
<el-button type="text" @click="del(scope.row)">删除</el-button>
<el-button type="text" @click="del(scope.row)">{{ $t('common.delete') }}</el-button>
<el-button
v-if="scope.row.state == 2"
type="text"
@ -414,7 +414,7 @@
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addLiveShow = false"> </el-button>
<el-button @click="addLiveShow = false">{{ $t('common.cancle') }}</el-button>
<el-button
v-if="LiveShowState == 1"
type="primary"
@ -426,7 +426,7 @@
type="primary"
:disabled="isDisabled"
@click="submitCU"
> </el-button>
>{{ $t('common.save') }}</el-button>
</span>
</el-dialog>
<!-- 导入商品 -->
@ -504,8 +504,8 @@
</div>
<!-- 新增用户 -->
<span slot="footer" class="dialog-footer">
<el-button @click="addProShow = false"> </el-button>
<el-button type="primary" @click="addproSubmit"> </el-button>
<el-button @click="addProShow = false">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="addproSubmit">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</div>

6
src/views/marketing/channelActivity/form.vue

@ -54,15 +54,15 @@
<el-table-column prop="createTime" label="创建时间" show-overflow-tooltip />
<el-table-column label="操作" fixed="right">
<template v-slot="scope">
<el-button :disabled="form.isLook" @click="handleDelSelectCoupon(scope.row)">删除</el-button>
<el-button :disabled="form.isLook" @click="handleDelSelectCoupon(scope.row)">{{ $t('common.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
<el-button :loading="loading" type="primary" @click="handleConfirm"> </el-button>
<el-button @click="handleClose">{{ $t('common.cancle') }}</el-button>
<el-button :loading="loading" type="primary" @click="handleConfirm">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
<SelectChannelCoupons v-model="showSelect" :default-selection="form.couponList" :take-end="form.endTime"

4
src/views/marketing/channelActivity/selectChannelCoupons.vue

@ -77,8 +77,8 @@
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
<el-button type="primary" @click="handleConfirm"> </el-button>
<el-button @click="handleClose">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="handleConfirm">{{ $t('common.sure') }}</el-button>
</span>
</el-dialog>
</template>

2
src/views/marketing/channelCoupons/form.vue

@ -5,7 +5,7 @@
<product-select ref="productSelect" />
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="doCancel">取消</el-button>
<el-button @click="doCancel">{{ $t('common.cancle') }}</el-button>
<el-button type="primary" @click="doSubmit">确认</el-button>
</div>
</el-dialog>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save