shaogen1995 2 年之前
父節點
當前提交
d7a85c359e

+ 8 - 0
packages/qjkankan-editor/someData.json

@@ -68,6 +68,14 @@
       "isShow": false
     }
   ],
+
+
+  
+  "coverPc":"",
+  "coverPcLoc":"",
+  "coverMo":"",
+  "coverSelect":"",
+
   "explanation": {
     "audioId": "",
     "audioName": "",

二進制
packages/qjkankan-editor/src/assets/img/coverUpTit1.png


二進制
packages/qjkankan-editor/src/assets/img/coverUpTit2.png


二進制
packages/qjkankan-editor/src/assets/img/experience.png


+ 37 - 0
packages/qjkankan-editor/src/assets/style/base/normalize.css

@@ -359,4 +359,41 @@
 
   p{
     margin: 0;
+  }
+
+ .el-select-dropdown {
+    background: #1a1b1d !important;
+    border-radius: 4px !important;
+    border: 1px solid #404040 !important;
+  }
+  .el-select-dropdown__item.selected{
+    color: #fff;
+  }
+  .el-select-dropdown__item{
+    color: rgba(255, 255, 255, 0.5);
+  }
+  .el-select-dropdown__item.hover, .el-select-dropdown__item:hover{
+    color: #fff;
+    background-color: rgba(44, 42, 42, 0.5);
+  }
+
+  .el-color-picker__panel{
+    background: #1a1b1d;
+  }
+  .el-color-picker__panel .el-button--text{
+    display: none;
+  }
+  .el-color-picker__panel .el-input{
+    pointer-events: none;
+    
+  }
+  .el-color-picker__panel .el-input__inner{
+    background-color: transparent;
+    border: 1px solid #404040;
+    color: #fff;
+  }
+  .el-color-picker__panel .el-button{
+    background-color: transparent !important;
+    border: 1px solid #404040 !important;
+    color: #fff !important;
   }

+ 1 - 1
packages/qjkankan-editor/src/lang/_en.js

@@ -608,6 +608,7 @@ module.exports = {
         "hide": "Hide",
         "show": "Display",
         "button_name": "Button name",
+        "button_type":"",
         "button_placeholder": "Please enter the button name",
         "please_input": "Please enter",
         "phone": "Phone",
@@ -620,7 +621,6 @@ module.exports = {
         "mask_setting": "Mask Settings",
         "sky_mask": "Top mask",
         "sky_tips": "The top mask is exhibited at the scene's top, while the bottom mask is presented at the scene's bottom.",
-        "mask_setting": "Mask Settings",
         "mask_size": "500*500 pixels, <br>jpg/png format support",
         "bottom_mask": "Bottom mask",
         "opening_setting": "Set the animations",

+ 20 - 0
packages/qjkankan-editor/src/lang/_en.json

@@ -653,6 +653,22 @@
     "save": "Save"
   },
   "edit_settings": {
+    "coverBase_button":"开场封面",
+    "coverBase_button_tips":"整个作品的开场内容,可以设置为图片或视频形式。",
+    "cover_pull_tit":"封面类型",
+    "coverSelecVideoAndImg":"图片+视频",
+    "coverSelecImg":"图片",
+    "coverSelecVideo":"视频",
+    "coverImgTit":"图片设置",
+    "coverUpTit1":"建议1920*1080px,2M以内,jpg / gif / png格式",
+    "coverUpTit2":"建议750*1624px,1M以内,jpg / gif / png格式",
+    "coverUpTit3":"建议300*300px,100kb以内,jpg格式",
+    "coverImgLoc1":"居中",
+    "coverImgLoc2":"全屏",
+    "coverImgBacTit":"背景设置",
+    "coverImgBacSelec1":"纯色填充",
+    "coverImgBacSelec2":"图片平铺",
+
     "auto_pano": "Rotation",
     "enter_auto": "Enter the rotation mode (takes 3 mins to complete per rotation)",
     "set_bgm": "Set the BGM",
@@ -664,6 +680,7 @@
     "hide": "Hide",
     "show": "Display",
     "button_name": "Button name",
+    "button_type":"按钮类型",
     "button_placeholder": "Please enter the button name",
     "please_input": "Please enter",
     "phone": "Phone",
@@ -717,6 +734,9 @@
     "自定义LOGO": "Custom Logo",
     "自定义遮罩": "Custom Mask",
     "自定义按钮": "Custom Button",
+    "开场封面": "开场封面",
+
+
     "素材": "Material",
     "名称": "Title",
     "大小": "Size",

+ 20 - 0
packages/qjkankan-editor/src/lang/_zh.json

@@ -659,6 +659,23 @@
     "save": "保存"
   },
   "edit_settings": {
+    "coverBase_button":"开场封面",
+    "coverBase_button_tips":"整个作品的开场内容,可以设置为图片或视频形式。",
+    "cover_pull_tit":"封面类型",
+    "coverSelecVideoAndImg":"图片+视频",
+    "coverSelecImg":"图片",
+    "coverSelecVideo":"视频",
+    "coverImgTit":"图片设置",
+    "coverUpTit1":"建议1920*1080px,2M以内,jpg / gif / png格式",
+    "coverUpTit2":"建议750*1624px,1M以内,jpg / gif / png格式",
+    "coverUpTit3":"建议300*300px,100kb以内,jpg格式",
+    "coverImgLoc1":"居中",
+    "coverImgLoc2":"全屏",
+    "coverImgBacTit":"背景设置",
+    "coverImgBacSelec1":"纯色填充",
+    "coverImgBacSelec2":"图片平铺",
+    
+
     "auto_pano": "自动巡游",
     "enter_auto": "进入全景图自动巡游(3分钟完整巡游一次)",
     "set_bgm": "设置背景音乐",
@@ -670,6 +687,7 @@
     "hide": "隐藏",
     "show": "显示",
     "button_name": "按钮名称",
+    "button_type":"按钮类型",
     "button_placeholder": "请输入按钮名称",
     "please_input": "请输入",
     "phone": "电话号码",
@@ -723,6 +741,8 @@
     "自定义LOGO": "自定义LOGO",
     "自定义遮罩": "自定义遮罩",
     "自定义按钮": "自定义按钮",
+    "开场封面": "开场封面",
+    
 
     "素材": "素材",
     "名称": "名称",

+ 4 - 0
packages/qjkankan-editor/src/views/base/Toolbar.vue

@@ -61,6 +61,7 @@
         <CustomLogoSettings v-show="activeTab === '自定义LOGO'"></CustomLogoSettings>
         <CustomMaskSettings v-show="activeTab === '自定义遮罩'"></CustomMaskSettings>
         <CustomButtonSettings v-show="activeTab === '自定义按钮'"></CustomButtonSettings>
+        <CoverBase v-show="activeTab === '开场封面'"></CoverBase>
       </div>
     </div>
 
@@ -87,6 +88,7 @@ import CustomLogoSettings from "@/views/base/customLogoSettings.vue";
 import CustomMaskSettings from "@/views/base/customMaskSettings.vue";
 import CustomButtonSettings from "@/views/base/customButtonSettings.vue";
 import Editor from "@/components/shared/Editor"
+import CoverBase from "@/views/base/coverBase.vue";
 
 export default {
   components: {
@@ -100,6 +102,7 @@ export default {
     CustomLogoSettings,
     CustomMaskSettings,
     CustomButtonSettings,
+    CoverBase
   },
   data() {
     return {
@@ -113,6 +116,7 @@ export default {
         '自定义LOGO',
         '自定义遮罩',
         '自定义按钮',
+        '开场封面'
       ],
       activeTab: '开场提示',
       jianjieLength:0

+ 475 - 0
packages/qjkankan-editor/src/views/base/coverBase.vue

@@ -0,0 +1,475 @@
+<template>
+  <div class="coverBase">
+    <!-- 顶上标题 -->
+    <span class="title">{{ coverBase_button }}</span>
+    <i
+      class="iconfont icon-material_prompt tool-tip-for-editor"
+      v-tooltip="coverBase_button_tips"
+    >
+    </i>
+    <br />
+    <div class="cover_pull">
+      <!-- 封面类型选择下拉框 -->
+      <div class="cover_pull_tit">{{ cover_pull_tit }}</div>
+      <Select v-model="SelectValue">
+        <Option
+          v-for="item in selecList"
+          :key="item.type"
+          :label="item.txt"
+          :value="item.type"
+        >
+        </Option>
+      </Select>
+
+      <!-- 图片设置 -->
+      <template>
+        <div class="coverImgTit">{{ coverImgTit }}</div>
+        <div class="coverImgBox">
+          <!-- pc图片 -->
+          <div class="coverImgBox_ll">
+            <div class="tit">{{ $i18n.t(`edit_settings.pc`) }}</div>
+            <div class="coverImgMain">
+              <SelectedImage
+                :imgSrc="info.coverPc"
+                :defaultImgSrc="require('@/assets/img/coverUpTit1.png')"
+                @cancel="onCancelPcTip"
+              ></SelectedImage>
+              <div class="imgRight">
+                <!-- 上传图片按钮 -->
+                <button
+                  class="ui-button submit"
+                  @click="(isShowSelectionWindow = true), (selectingFor = 'pc')"
+                >
+                  {{ $i18n.t(`edit_settings.select_image`) }}
+                </button>
+                <!-- 上传提示 -->
+                <div
+                  class="ui-remark"
+                  v-html="$i18n.t(`edit_settings.coverUpTit1`)"
+                ></div>
+                <!-- 选择居中和全屏 -->
+                <div class="coverImglocBox">
+                  <div
+                    :class="{ active: imgLoc1 === 'centen' }"
+                    @click="imgLoc1 = 'centen'"
+                  >
+                    <div class="inco"></div>
+                    <div class="txt">{{ coverImgLoc1 }}</div>
+                  </div>
+                  <div
+                    :class="{ active: imgLoc1 === 'full' }"
+                    @click="imgLoc1 = 'full'"
+                  >
+                    <div class="inco inco2"></div>
+                    <div class="txt">{{ coverImgLoc2 }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="coverImgBox_rr">
+            <div class="tit">{{ $i18n.t(`edit_settings.mobile`) }}</div>
+            <!-- 移动端图片 -->
+            <div class="coverImgMain">
+              <SelectedImage
+                :imgSrc="info.coverMo"
+                :defaultImgSrc="require('@/assets/img/coverUpTit1.png')"
+                @cancel="onCancelAppTip"
+              ></SelectedImage>
+              <div class="imgRight">
+                <!-- 上传图片按钮 -->
+                <button
+                  class="ui-button submit"
+                  @click="
+                    (isShowSelectionWindow = true), (selectingFor = 'mobile')
+                  "
+                >
+                  {{ $i18n.t(`edit_settings.select_image`) }}
+                </button>
+                <!-- 上传提示 -->
+                <div
+                  class="ui-remark"
+                  v-html="$i18n.t(`edit_settings.coverUpTit2`)"
+                ></div>
+                <!-- 选择居中和全屏 -->
+                <div class="coverImglocBox">
+                  <div
+                    :class="{ active: imgLoc2 === 'centen' }"
+                    @click="imgLoc2 = 'centen'"
+                  >
+                    <div class="inco"></div>
+                    <div class="txt">{{ coverImgLoc1 }}</div>
+                  </div>
+                  <div
+                    :class="{ active: imgLoc2 === 'full' }"
+                    @click="imgLoc2 = 'full'"
+                  >
+                    <div class="inco inco2"></div>
+                    <div class="txt">{{ coverImgLoc2 }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+
+        <!-- 图片背景设置 -->
+        <div class="coverImgBacBox">
+          <div class="tit">{{ $i18n.t(`edit_settings.coverImgBacTit`) }}</div>
+          <Select v-model="coverImgBac">
+            <Option
+              v-for="item in coverImgBacList"
+              :key="item.type"
+              :label="item.txt"
+              :value="item.type"
+            >
+            </Option>
+          </Select>
+          <!-- 选择颜色 -->
+          <div class="imgColorSelec" v-show="coverImgBac === 'colorFill'">
+            <div class="ll">{{ imgColorSelec }}</div>
+            <div
+              class="rr"
+              :style="`background-color: ${imgColorSelec};`"
+            ></div>
+            <ColorPicker
+              @change="imgColorSelecChange"
+              v-model="imgColorSelec"
+              :predefine="predefineColors"
+            >
+            </ColorPicker>
+          </div>
+          <!-- 选择背景图片 -->
+          <div class="imgClolrBacImg" v-show="coverImgBac === 'imgTile'">
+            <SelectedImage
+              :imgSrc="info.coverBac"
+              :defaultImgSrc="require('@/assets/img/coverUpTit1.png')"
+              @cancel="onCancelBac"
+            ></SelectedImage>
+            <!-- 上传图片按钮 -->
+            <div class="imgRight">
+              <button
+                class="ui-button submit"
+                @click="(isShowSelectionWindow = true), (selectingFor = 'bac')"
+              >
+                {{ $i18n.t(`edit_settings.select_image`) }}
+              </button>
+              <div
+                class="ui-remark"
+                v-html="$i18n.t(`edit_settings.coverUpTit3`)"
+              ></div>
+            </div>
+          </div>
+        </div>
+      </template>
+    </div>
+    <div class="dialog" style="z-index: 2000" v-if="isShowSelectionWindow">
+      <MaterialSelectorForEditor
+        :title="$i18n.t(`gather.select_material`)"
+        :isMultiSelection="false"
+        @cancle="isShowSelectionWindow = false"
+        @submit="handleSubmitFromMaterialSelector"
+        :selectableType="['image']"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import { Select, Option, ColorPicker } from "element-ui";
+import { i18n } from "@/lang";
+import { mapGetters } from "vuex";
+import SelectedImage from "@/components/selectedImageInEditor.vue";
+import MaterialSelectorForEditor from "@/components/materialSelectorForEditor.vue";
+export default {
+  name: "coverBase",
+  components: {
+    Select,
+    Option,
+    ColorPicker,
+    MaterialSelectorForEditor,
+    SelectedImage,
+  },
+  data() {
+    return {
+      coverBase_button: i18n.t("edit_settings.coverBase_button"),
+      coverBase_button_tips: i18n.t("edit_settings.coverBase_button_tips"),
+      cover_pull_tit: i18n.t("edit_settings.cover_pull_tit"),
+      coverImgTit: i18n.t("edit_settings.coverImgTit"),
+      coverImgLoc1: i18n.t("edit_settings.coverImgLoc1"),
+      coverImgLoc2: i18n.t("edit_settings.coverImgLoc2"),
+
+      selecList: [
+        {
+          txt: i18n.t("edit_settings.coverSelecVideoAndImg"),
+          type: "videoAndImg",
+        },
+        { txt: i18n.t("edit_settings.coverSelecImg"), type: "img" },
+        { txt: i18n.t("edit_settings.coverSelecVideo"), type: "video" },
+      ],
+      // 封面类型下拉框数据
+      SelectValue: "videoAndImg",
+      // 图片pc端位置
+      imgLoc1: "centen",
+      // 图片移动端位置
+      imgLoc2: "centen",
+      // 图片的背景设置
+      coverImgBac: "colorFill",
+      coverImgBacList: [
+        { txt: i18n.t("edit_settings.coverImgBacSelec1"), type: "colorFill" },
+        { txt: i18n.t("edit_settings.coverImgBacSelec2"), type: "imgTile" },
+      ],
+      imgColorSelec: "#c71585",
+      predefineColors: [
+        "#000000",
+        "#ff4500",
+        "#ff8c00",
+        "#ffd700",
+        "#90ee90",
+        "#00ced1",
+        "#1e90ff",
+        "#c71585",
+      ],
+
+      isShowSelectionWindow: false,
+      selectingFor: "", // 'pc', 'mobile'
+    };
+  },
+  computed: {
+    ...mapGetters({
+      info: "info",
+    }),
+  },
+  watch: {
+    SelectValue(val) {
+      this.info.coverSelect = val;
+    },
+    imgLoc1(val) {
+      this.info.coverPcLoc = val;
+    },
+    imgLoc2(val) {
+      this.info.coverMoLoc = val;
+    },
+    coverImgBac(val) {
+      this.info.coverImgBac = val;
+    },
+  },
+  methods: {
+    // 图片的颜色选择器改变事件
+    imgColorSelecChange(val) {
+      this.imgColorSelec = val;
+      this.info.imgColorSelec = val;
+    },
+    handleSubmitFromMaterialSelector(selected) {
+      if (this.selectingFor === "pc") {
+        this.info.coverPc = selected[0].icon;
+      } else if (this.selectingFor === "mobile") {
+        this.info.coverMo = selected[0].icon;
+      } else {
+        this.info.coverBac = selected[0].icon;
+      }
+      this.isShowSelectionWindow = false;
+    },
+    onCancelPcTip() {
+      this.info.coverPc = "";
+    },
+    onCancelAppTip() {
+      this.info.coverMo = "";
+    },
+    onCancelBac() {
+      this.info.coverBac = "";
+    },
+  },
+  created() {},
+  mounted() {
+    if (this.info.coverSelect) this.SelectValue = this.info.coverSelect;
+    if (this.info.coverPcLoc) this.imgLoc1 = this.info.coverPcLoc;
+    if (this.info.coverMoLoc) this.imgLoc2 = this.info.coverMoLoc;
+    if (this.info.coverImgBac) this.coverImgBac = this.info.coverImgBac;
+    if (this.info.imgColorSelec) this.imgColorSelec = this.info.imgColorSelec;
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  beforeMount() {}, //生命周期 - 挂载之前
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang='less' scoped>
+.coverBase {
+  padding: 24px 30px;
+  background: #252526;
+  height: 520px;
+  overflow-y: auto;
+  .title {
+    font-size: 18px;
+    color: #ffffff;
+  }
+  .tool-tip-for-editor {
+    margin-left: 4px;
+    font-size: 12px;
+    cursor: default;
+    position: relative;
+    top: -2px;
+  }
+  .cover_pull {
+    margin-top: 10px;
+    .cover_pull_tit {
+      margin-bottom: 10px;
+      font-size: 14px;
+      color: rgba(255, 255, 255, 0.5);
+    }
+    /deep/.el-select {
+      background: #1a1b1d;
+      border-radius: 4px;
+      border: 1px solid #404040;
+      width: 300px;
+      height: 36px;
+    }
+    /deep/.el-input {
+      height: 36px;
+      line-height: 36px;
+    }
+    /deep/.el-input__inner {
+      color: #fff;
+      height: 36px;
+      line-height: 36px;
+      background-color: transparent;
+      border-color: transparent !important;
+    }
+  }
+
+  .coverImgTit {
+    font-size: 18px;
+    color: #ffffff;
+    margin-top: 16px;
+    margin-bottom: 10px;
+  }
+  .coverImgBox {
+    display: flex;
+    justify-content: space-between;
+    & > div {
+      width: 48%;
+      .tit {
+        font-size: 14px;
+        opacity: 0.5;
+        margin-bottom: 10px;
+      }
+      .coverImgMain {
+        display: flex;
+        .imgBox {
+          width: 136px;
+          height: 136px;
+          background: #1a1b1d;
+          border-radius: 4px;
+          border: 1px solid #404040;
+        }
+        .ui-remark {
+          margin: 12px 0;
+          font-size: 14px;
+        }
+        .coverImglocBox {
+          display: flex;
+          width: 140px;
+          height: 36px;
+          background: #1a1b1d;
+          border-radius: 4px;
+          border: 1px solid #404040;
+          & > div {
+            cursor: pointer;
+            width: 50%;
+            font-size: 14px;
+            color: #fff;
+            opacity: 0.5;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            .inco {
+              margin-top: 2px;
+              width: 16px;
+              height: 16px;
+              position: relative;
+              border: 1px solid #fff;
+              margin-right: 3px;
+              &::before {
+                content: "";
+                position: absolute;
+                top: 1px;
+                left: 3px;
+                width: 8px;
+                height: 12px;
+                background-color: #fff;
+              }
+            }
+            .inco2 {
+              &::before {
+                content: "";
+                position: absolute;
+                top: 1px;
+                left: 1px;
+                width: 12px;
+                height: 12px;
+                background-color: #fff;
+              }
+            }
+          }
+          .active {
+            opacity: 1;
+            background-color: #0076f6;
+          }
+        }
+      }
+    }
+  }
+  .coverImgBacBox {
+    margin-top: 16px;
+    .tit {
+      font-size: 14px;
+      opacity: 0.5;
+      margin-bottom: 10px;
+    }
+  }
+  .imgColorSelec {
+    cursor: pointer;
+    width: 300px;
+    height: 36px;
+    margin-top: 10px;
+    background: #1a1b1d;
+    border-radius: 4px;
+    border: 1px solid #404040;
+    display: flex;
+    justify-content: space-between;
+    padding: 0 12px;
+    align-items: center;
+    position: relative;
+    .rr {
+      width: 20px;
+      height: 20px;
+    }
+    /deep/.el-color-picker {
+      position: absolute;
+      top: 0;
+      left: 0;
+      z-index: 10;
+      width: 298px;
+      height: 36px;
+    }
+    /deep/.el-color-picker__trigger {
+      opacity: 0;
+      width: 298px;
+      height: 36px;
+    }
+  }
+  .imgClolrBacImg {
+    margin-top: 10px;
+    width: 334px;
+    display: flex;
+    .ui-remark {
+      margin: 12px 0;
+      font-size: 14px;
+    }
+  }
+}
+</style>

+ 258 - 146
packages/qjkankan-editor/src/views/base/customButtonSettings.vue

@@ -2,51 +2,129 @@
   <div class="custom-button-settings">
     <span class="title">{{ custom_button }}</span>
 
-
-    <i class="iconfont icon-material_prompt tool-tip-for-editor" v-tooltip="custom_button_tips">
+    <i
+      class="iconfont icon-material_prompt tool-tip-for-editor"
+      v-tooltip="custom_button_tips"
+    >
     </i>
     <br />
 
-    <div v-for="(item, index) of info.customButton" :key="index" class="button-setting-item"
-      :class="{ expand: expandStatus[index] }">
-      <div class="title-bar" :class="info.customButton[index].isShow ? 'bright' : 'dark'"
-        @click="onRequestForChangeExpandStatus(index)">
+    <div
+      v-for="(item, index) of info.customButton"
+      :key="index"
+      class="button-setting-item"
+      :class="{ expand: expandStatus[index] }"
+    >
+      <div
+        class="title-bar"
+        :class="info.customButton[index].isShow ? 'bright' : 'dark'"
+        @click="onRequestForChangeExpandStatus(index)"
+      >
+        <!-- 新增的体验图片 -->
+        <div class="experience">
+          <img src="@/assets/img/experience.png" alt="" />
+        </div>
+
         <div class="left">
           <i class="iconfont icon-edit_input_arrow icon-expand"></i>
-          <img v-if="info.customButton[index].type === '电话' && info.customButton[index].isShow"
-            :src="require('@/assets/images/icons/phone.svg')" class="button-icon" alt="">
-          <img v-if="info.customButton[index].type === '电话' && !info.customButton[index].isShow"
-            :src="require('@/assets/images/icons/phone-dark.svg')" class="button-icon" alt="">
-          <img v-if="info.customButton[index].type === '链接' && info.customButton[index].isShow"
-            :src="require('@/assets/images/icons/link.svg')" class="button-icon" alt="">
-          <img v-if="info.customButton[index].type === '链接' && !info.customButton[index].isShow"
-            :src="require('@/assets/images/icons/link-dark.svg')" class="button-icon" alt="">
+          <img
+            v-if="
+              info.customButton[index].type === '电话' &&
+              info.customButton[index].isShow
+            "
+            :src="require('@/assets/images/icons/phone.svg')"
+            class="button-icon"
+            alt=""
+          />
+          <img
+            v-if="
+              info.customButton[index].type === '电话' &&
+              !info.customButton[index].isShow
+            "
+            :src="require('@/assets/images/icons/phone-dark.svg')"
+            class="button-icon"
+            alt=""
+          />
+          <img
+            v-if="
+              info.customButton[index].type === '链接' &&
+              info.customButton[index].isShow
+            "
+            :src="require('@/assets/images/icons/link.svg')"
+            class="button-icon"
+            alt=""
+          />
+          <img
+            v-if="
+              info.customButton[index].type === '链接' &&
+              !info.customButton[index].isShow
+            "
+            :src="require('@/assets/images/icons/link-dark.svg')"
+            class="button-icon"
+            alt=""
+          />
           <span class="button-name">
             {{ buttonName[index] }}
-            <!-- {{ info.customButton[index].name  }} -->
           </span>
         </div>
         <div class="right">
-          <i class="iconfont icon-editor_list_edit btn-edit" @click.stop="onRequestForEdit(index)" v-tooltip="edittips">
+          <i
+            class="iconfont icon-editor_list_edit btn-edit"
+            @click.stop="onRequestForEdit(index)"
+            v-tooltip="edittips"
+          >
           </i>
-          <i v-show="info.customButton[index].isShow" class="iconfont icon-editor_on btn-show" v-tooltip="hidetips"
-            @click.stop="info.customButton[index].isShow = false"></i>
-          <i v-show="!info.customButton[index].isShow" class="iconfont icon-editor_off btn-hide" v-tooltip="showtips"
-            @click.stop="onRequestForShow(index)"></i>
+          <i
+            v-show="info.customButton[index].isShow"
+            class="iconfont icon-editor_on btn-show"
+            v-tooltip="hidetips"
+            @click.stop="info.customButton[index].isShow = false"
+          ></i>
+          <i
+            v-show="!info.customButton[index].isShow"
+            class="iconfont icon-editor_off btn-hide"
+            v-tooltip="showtips"
+            @click.stop="onRequestForShow(index)"
+          ></i>
         </div>
       </div>
       <div class="edit-content">
         <div class="edit-content-item">
+          <span class="item-name">{{ button_type }}</span>
+          <div style="margin-left: 16px">{{ buttonName[index] }}</div>
+        </div>
+        <div class="edit-content-item">
           <span class="item-name">{{ button_name }}</span>
-          <PulldownMenuInEditor class="selector" :valueList="buttonTypeList" v-model="info.customButton[index].type">
-          </PulldownMenuInEditor>
-          <input class="name-input" :placeholder="button_placeholder" v-model="info.customButton[index].name"
-            maxlength="15">
+          <div style="margin-left: 16px">
+            {{ info.customButton[index].name }}
+          </div>
         </div>
         <div class="edit-content-item">
           <span class="item-name">{{ buttonValueTips[index] }}</span>
-          <input class="value-input" v-model="info.customButton[index].value">
+          <div style="margin-left: 16px">
+            {{ info.customButton[index].value }}
+          </div>
         </div>
+
+        <!-- <div class="edit-content-item">
+          <span class="item-name">{{ button_name }}</span>
+          <PulldownMenuInEditor
+            class="selector"
+            :valueList="buttonTypeList"
+            v-model="info.customButton[index].type"
+          >
+          </PulldownMenuInEditor>
+          <input
+            class="name-input"
+            :placeholder="button_placeholder"
+            v-model="info.customButton[index].name"
+            maxlength="15"
+          />
+        </div> -->
+        <!-- <div class="edit-content-item">
+          <span class="item-name">{{ buttonValueTips[index] }}</span>
+          <input class="value-input" v-model="info.customButton[index].value" />
+        </div> -->
       </div>
     </div>
 
@@ -62,14 +140,26 @@
         <div class="ui-message-main">
           <div class="edit-content-item">
             <span class="item-name">{{ button_name }}</span>
-            <PulldownMenuInEditor class="selector" :valueList="buttonTypeList" v-model="editingInfo.type">
+            <PulldownMenuInEditor
+              class="selector"
+              :valueList="buttonTypeList"
+              v-model="editingInfo.type"
+            >
             </PulldownMenuInEditor>
-            <input class="name-input" :placeholder="button_placeholder" v-model="editingInfo.name" maxlength="15">
+            <input
+              class="name-input"
+              :placeholder="button_placeholder"
+              v-model="editingInfo.name"
+              maxlength="15"
+            />
           </div>
           <div class="edit-content-item">
             <span class="item-name">{{ editingButtonValueTip }}</span>
-            <input class="value-input" :placeholder="`${please_input}${editingButtonValueTip}`"
-              v-model="editingInfo.value">
+            <input
+              class="value-input"
+              :placeholder="`${please_input}${editingButtonValueTip}`"
+              v-model="editingInfo.value"
+            />
           </div>
         </div>
 
@@ -91,8 +181,7 @@ import { mapGetters } from "vuex";
 import PulldownMenuInEditor from "@/components/pulldownMenuInEditor.vue";
 import { isValidPhoneNumber } from "@/utils/other.js";
 import Popup from "@/components/shared/popup/index.vue";
-import { i18n } from "@/lang"
-
+import { i18n } from "@/lang";
 
 export default {
   components: {
@@ -107,6 +196,7 @@ export default {
       hidetips: i18n.t("edit_settings.hide"),
       showtips: i18n.t("edit_settings.show"),
       button_name: i18n.t("edit_settings.button_name"),
+      button_type: i18n.t("edit_settings.button_type"),
       button_placeholder: i18n.t("edit_settings.button_placeholder"),
       please_input: i18n.t("edit_settings.please_input"),
 
@@ -114,75 +204,72 @@ export default {
       comfirmtips: i18n.t("gather.comfirm"),
 
       expandStatus: [],
-      buttonTypeList: [
-        '电话',
-        '链接',
-      ],
+      buttonTypeList: ["电话", "链接"],
       isEditing: false,
       editingButtonIdx: -1,
       isIgnoreTypeChangeWhenEditing: false,
       editingInfo: {
-        type: '',
-        name: '',
-        value: '',
-      }
-    }
+        type: "",
+        name: "",
+        value: "",
+      },
+    };
   },
   computed: {
     ...mapGetters({
-      info: 'info'
+      info: "info",
     }),
     buttonValueTips() {
       if (this.info.customButton) {
         return this.info.customButton.map((item) => {
-          if (item.type === '电话') {
-            return i18n.t("edit_settings.phone")
-          } else if (item.type === '链接') {
-            return i18n.t("edit_settings.link")
+          if (item.type === "电话") {
+            return i18n.t("edit_settings.phone");
+          } else if (item.type === "链接") {
+            return i18n.t("edit_settings.link");
           } else {
-            return ''
+            return "";
           }
-        })
+        });
       } else {
-        return null
+        return null;
       }
     },
 
     buttonName() {
       if (this.info.customButton) {
         return this.info.customButton.map((item) => {
-          if (item.type === '电话') {
-            return i18n.t("edit_settings.phone_short")
-          } else if (item.type === '链接') {
-            return i18n.t("edit_settings.link_short")
+          if (item.type === "电话") {
+            return i18n.t("edit_settings.phone_short");
+          } else if (item.type === "链接") {
+            return i18n.t("edit_settings.link_short");
           } else {
-            return ''
+            return "";
           }
-        })
+        });
       } else {
-        return null
+        return null;
       }
     },
     editingButtonValueTip() {
-      if (this.editingInfo.type === '电话') {
-        return i18n.t("edit_settings.phone")
-      } else if (this.editingInfo.type === '链接') {
-        return i18n.t("edit_settings.link")
+      if (this.editingInfo.type === "电话") {
+        return i18n.t("edit_settings.phone");
+      } else if (this.editingInfo.type === "链接") {
+        return i18n.t("edit_settings.link");
       } else {
-        return ''
+        return "";
       }
     },
   },
   watch: {
-    'editingInfo.type': {
+    "editingInfo.type": {
       handler(vNew) {
         if (!this.isIgnoreTypeChangeWhenEditing) {
           console.log(vNew);
-          this.editingInfo.name = i18n.t(`zh_key.${vNew}`)
-          this.editingInfo.value = ''
+          this.editingInfo.name = i18n.t(`zh_key.${vNew}`);
+          this.editingInfo.value = "";
         }
-        this.isIgnoreTypeChangeWhenEditing = false
-      }
+        this.isIgnoreTypeChangeWhenEditing = false;
+      },
     },
   },
   beforeMount() {
@@ -190,82 +277,95 @@ export default {
       // 这是在v1.2版之前创建的作品,还没设置过自定义按钮,所以还没有customButton字段
       this.info.customButton = [
         {
-          "type": "电话",
-          "name": "电话",
-          "value": "",
-          "isShow": false
+          type: "电话",
+          name: "电话",
+          value: "",
+          isShow: false,
         },
         {
-          "type": "链接",
-          "name": "链接",
-          "value": "",
-          "isShow": false
-        }
-      ]
+          type: "链接",
+          name: "链接",
+          value: "",
+          isShow: false,
+        },
+      ];
     }
   },
   methods: {
     onRequestForChangeExpandStatus(index) {
-      this.$set(this.expandStatus, index, !this.expandStatus[index])
+      this.$set(this.expandStatus, index, !this.expandStatus[index]);
     },
     onRequestForEdit(index) {
-      this.editingButtonIdx = index
-      this.isIgnoreTypeChangeWhenEditing = true,
-      this.editingInfo.type = this.info.customButton[index].type
-      this.editingInfo.name = this.info.customButton[index].name
-      this.editingInfo.value = this.info.customButton[index].value
-      this.isEditing = true
+      this.editingButtonIdx = index;
+      (this.isIgnoreTypeChangeWhenEditing = true),
+        (this.editingInfo.type = this.info.customButton[index].type);
+      this.editingInfo.name = this.info.customButton[index].name;
+      this.editingInfo.value = this.info.customButton[index].value;
+      this.isEditing = true;
     },
     checkButtonName(name) {
       if (!name) {
-        this.$msg.warning(i18n.t('gather.fill_complete'))
-        return false
+        this.$msg.warning(i18n.t("gather.fill_complete"));
+        return false;
       }
-      return true
+      return true;
     },
     checkButtonValue(value, type) {
-      if (type === '电话') {
+      if (type === "电话") {
         if (!isValidPhoneNumber(value)) {
-          this.$msg.warning(i18n.t('gather.fill_phone'))
-          return false
+          this.$msg.warning(i18n.t("gather.fill_phone"));
+          return false;
         }
-      } else if (type === '链接') {
+      } else if (type === "链接") {
         if (!value) {
-          this.$msg.warning(i18n.t('gather.fill_complete'))
-          return false
+          this.$msg.warning(i18n.t("gather.fill_complete"));
+          return false;
         }
       }
-      return true
+      return true;
     },
     onConfirmEditing() {
       if (!this.checkButtonName(this.editingInfo.name)) {
-        return
+        return;
       }
-      if (!this.checkButtonValue(this.editingInfo.value, this.editingInfo.type)) {
-        return
+      if (
+        !this.checkButtonValue(this.editingInfo.value, this.editingInfo.type)
+      ) {
+        return;
       }
-      this.info.customButton[this.editingButtonIdx].type = this.editingInfo.type
-      this.info.customButton[this.editingButtonIdx].name = this.editingInfo.name
-      this.info.customButton[this.editingButtonIdx].value = this.editingInfo.value
-      this.$msg.success(i18n.t('gather.success'))
-      this.isEditing = false
+      this.info.customButton[this.editingButtonIdx].type =
+        this.editingInfo.type;
+      this.info.customButton[this.editingButtonIdx].name =
+        this.editingInfo.name;
+      this.info.customButton[this.editingButtonIdx].value =
+        this.editingInfo.value;
+      this.$msg.success(i18n.t("gather.success"));
+      this.isEditing = false;
     },
     onRequestForShow(index) {
       if (!this.checkButtonName(this.info.customButton[index].name)) {
-        return
+        return;
       }
-      if (!this.checkButtonValue(this.info.customButton[index].value, this.info.customButton[index].type)) {
-        return
+      if (
+        !this.checkButtonValue(
+          this.info.customButton[index].value,
+          this.info.customButton[index].type
+        )
+      ) {
+        return;
       }
-      this.info.customButton[index].isShow = true
-    }
+      this.info.customButton[index].isShow = true;
+    },
   },
   mounted() {
-    this.info.customButton.forEach(item=>{
-      item.name = i18n.t(`zh_key.${item.name}`).indexOf('zh_key')>-1?item.name:i18n.t(`zh_key.${item.name}`)
-    })
+    this.info.customButton.forEach((item) => {
+      item.name =
+        i18n.t(`zh_key.${item.name}`).indexOf("zh_key") > -1
+          ? item.name
+          : i18n.t(`zh_key.${item.name}`);
+    });
   },
-}
+};
 </script>
 
 <style lang="less" scoped>
@@ -276,7 +376,7 @@ export default {
 
   .title {
     font-size: 18px;
-    color: #FFFFFF;
+    color: #ffffff;
   }
 
   .tool-tip-for-editor {
@@ -287,24 +387,36 @@ export default {
     top: -2px;
   }
 
-  >.button-setting-item {
+  > .button-setting-item {
     margin-top: 16px;
     position: relative;
     min-height: 50px;
 
-    >.title-bar {
+    > .title-bar {
       position: absolute;
       width: 100%;
       height: 50px;
-      background: #1A1B1D;
+      background: #1a1b1d;
       border-radius: 2px;
       border: 1px solid #404040;
       display: flex;
       justify-content: space-between;
       align-items: center;
       padding: 0 16px;
+      padding-right: 40px;
       cursor: pointer;
 
+      .experience {
+        position: absolute;
+        z-index: 10;
+        top: 0;
+        right: 0;
+        & > img {
+          width: 31px;
+          height: 31px;
+        }
+      }
+
       &.bright {
         color: #fff;
       }
@@ -313,30 +425,30 @@ export default {
         color: #808080;
       }
 
-      >.left {
+      > .left {
         display: flex;
         align-items: center;
 
-        >.icon-expand {
+        > .icon-expand {
           font-size: 10px;
           color: rgba(255, 255, 255, 0.6);
           transform: rotate(-90deg);
           cursor: pointer;
         }
 
-        >.button-icon {
+        > .button-icon {
           width: 18px;
           height: 18px;
           margin-left: 6px;
         }
 
-        >.button-name {
+        > .button-name {
           font-size: 16px;
           margin-left: 6px;
         }
       }
 
-      >.right {
+      > .right {
         display: flex;
         align-items: center;
 
@@ -345,31 +457,31 @@ export default {
           cursor: pointer;
 
           &:hover {
-            color: #0076F6;
+            color: #0076f6;
           }
         }
 
-        >.btn-show {
+        > .btn-show {
           margin-left: 16px;
           cursor: pointer;
 
           &:hover {
-            color: #0076F6;
+            color: #0076f6;
           }
         }
 
-        >.btn-hide {
+        > .btn-hide {
           margin-left: 16px;
           cursor: pointer;
 
           &:hover {
-            color: #0076F6;
+            color: #0076f6;
           }
         }
       }
     }
 
-    >.edit-content {
+    > .edit-content {
       border-radius: 2px;
       border: 1px solid #404040;
       padding-top: 58px;
@@ -377,22 +489,22 @@ export default {
       display: none;
       pointer-events: none;
 
-      >.edit-content-item {
+      > .edit-content-item {
         margin-top: 16px;
         display: flex;
         align-items: center;
 
-        >.item-name {
+        > .item-name {
           margin-left: 16px;
           font-size: 14px;
-          color: rgba(255, 255, 255, 0.5)
+          color: rgba(255, 255, 255, 0.5);
         }
 
-        >.selector {
+        > .selector {
           margin-left: 16px;
         }
 
-        >.name-input {
+        > .name-input {
           height: 36px;
           background: transparent;
           border-radius: 2px;
@@ -404,11 +516,11 @@ export default {
           width: 470px;
 
           &:focus {
-            border-color: #0076F6;
+            border-color: #0076f6;
           }
         }
 
-        >.value-input {
+        > .value-input {
           margin-left: 16px;
           height: 36px;
           background: transparent;
@@ -421,23 +533,23 @@ export default {
           width: 610px;
 
           &:focus {
-            border-color: #0076F6;
+            border-color: #0076f6;
           }
         }
       }
     }
   }
 
-  >.button-setting-item.expand {
-    >.title-bar {
-      >.left {
-        >.icon-expand {
+  > .button-setting-item.expand {
+    > .title-bar {
+      > .left {
+        > .icon-expand {
           transform: rotate(0deg);
         }
       }
     }
 
-    >.edit-content {
+    > .edit-content {
       display: block;
     }
   }
@@ -445,25 +557,25 @@ export default {
   .edit-window {
     width: 574px;
 
-    >.ui-message-main {
+    > .ui-message-main {
       margin-bottom: 40px;
 
-      >.edit-content-item {
+      > .edit-content-item {
         margin-top: 16px;
         display: flex;
         align-items: center;
 
-        >.item-name {
+        > .item-name {
           flex: 0 0 auto;
           font-size: 14px;
-          color: rgba(255, 255, 255, 0.5)
+          color: rgba(255, 255, 255, 0.5);
         }
 
-        >.selector {
+        > .selector {
           margin-left: 16px;
         }
 
-        >.name-input {
+        > .name-input {
           height: 36px;
           background: #252526;
           border-radius: 2px;
@@ -475,11 +587,11 @@ export default {
           width: 470px;
 
           &:focus {
-            border-color: #0076F6;
+            border-color: #0076f6;
           }
         }
 
-        >.value-input {
+        > .value-input {
           margin-left: 16px;
           height: 36px;
           background: #252526;
@@ -492,7 +604,7 @@ export default {
           width: 610px;
 
           &:focus {
-            border-color: #0076F6;
+            border-color: #0076f6;
           }
         }
       }