Jelajahi Sumber

[add] 发布器、预览UI

wenliming 3 tahun lalu
induk
melakukan
f52a72fa88

+ 1 - 6
package.json

@@ -10,7 +10,6 @@
   },
   "dependencies": {
     "@paypal/paypal-js": "^5.0.2",
-    "@tinymce/tinymce-vue": "^4.0.7",
     "axios": "^0.26.1",
     "core-js": "^3.8.3",
     "element-plus": "^2.1.4",
@@ -25,20 +24,16 @@
   "devDependencies": {
     "@babel/core": "^7.12.16",
     "@babel/eslint-parser": "^7.12.16",
-    "@faker-js/faker": "^6.1.1",
     "@vue/cli-plugin-babel": "~5.0.0",
     "@vue/cli-plugin-eslint": "~5.0.0",
     "@vue/cli-service": "~5.0.0",
     "eslint": "^7.32.0",
     "eslint-plugin-vue": "^8.0.3",
     "node-sass": "^7.0.1",
-    "quill": "^1.3.7",
-    "quill-mention": "^3.1.0",
     "sass-loader": "^12.6.0",
     "unplugin-auto-import": "^0.6.6",
     "unplugin-vue-components": "^0.18.3",
-    "vue-cli-plugin-chrome-extension-cli": "~1.1.2",
-    "vue-quill-editor": "^3.0.6"
+    "vue-cli-plugin-chrome-extension-cli": "~1.1.2"
   },
   "eslintConfig": {
     "root": true,

TEMPAT SAMPAH
src/assets/img/img-red-pack-cover.png


+ 5 - 0
src/assets/svg/icon-add-user-active.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect width="24" height="24" rx="12" fill="#389AFF"/>
+<line x1="7" y1="12.2133" x2="17" y2="12.2133" stroke="white" stroke-width="1.3"/>
+<line x1="12.0492" y1="17" x2="12.0492" y2="7" stroke="white" stroke-width="1.3"/>
+</svg>

+ 5 - 0
src/assets/svg/icon-add-user-default.svg

@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<rect x="0.5" y="0.5" width="23" height="23" rx="11.5" fill="#C4C4C4" fill-opacity="0.01" stroke="#ECECEC"/>
+<line x1="7" y1="12.2133" x2="17" y2="12.2133" stroke="#C2C2C2" stroke-width="1.3"/>
+<line x1="12.0492" y1="17" x2="12.0492" y2="7" stroke="#C2C2C2" stroke-width="1.3"/>
+</svg>

File diff ditekan karena terlalu besar
+ 6 - 0
src/assets/svg/icon-card-red-pack-cover.svg


+ 5 - 0
src/assets/svg/icon-del-follows-user.svg

@@ -0,0 +1,5 @@
+<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
+<circle cx="9" cy="9" r="9" fill="#E8E8E8"/>
+<line y1="-0.6" x2="10.253" y2="-0.6" transform="matrix(-0.70219 0.71199 -0.70219 -0.71199 12.1992 4.5)" stroke="white" stroke-width="1.2"/>
+<line y1="-0.6" x2="10.253" y2="-0.6" transform="matrix(0.70219 0.71199 0.70219 -0.71199 5.80078 4.5)" stroke="white" stroke-width="1.2"/>
+</svg>

File diff ditekan karena terlalu besar
+ 4 - 5
src/assets/svg/icon-follow.svg


+ 2 - 3
src/assets/svg/icon-like.svg

@@ -1,4 +1,3 @@
-<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-<rect width="24" height="24" rx="12" fill="white"/>
-<path d="M17.1868 6.62632L17.1868 6.62636L17.1944 6.63034C19.5242 7.85072 19.8338 10.6959 18.3253 12.3239L17.6735 12.9757L14.4987 16.1505L12.3822 18.267C12.2295 18.4197 12.1141 18.4442 12.0527 18.4442C11.9913 18.4442 11.8759 18.4197 11.7232 18.267L9.60666 16.1505L6.43189 12.9757L5.77048 12.3143C4.14695 10.6908 4.44662 7.8568 6.7723 6.63369C8.04636 6.00053 9.81466 6.30985 10.9271 7.42227L11.4562 7.9514L11.9865 8.48173L12.5169 7.9514L13.046 7.42227C14.1886 6.2797 15.8208 5.89078 17.1868 6.62632Z" fill="#389AFF" fill-opacity="0.01" stroke="#51A7FF" stroke-width="1.5"/>
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M15.1868 4.62636L15.1868 4.62632C13.8208 3.89078 12.1886 4.2797 11.046 5.42227M15.1868 4.62636L11.046 5.42227M15.1868 4.62636L15.1944 4.63034M15.1868 4.62636L15.1944 4.63034M11.046 5.42227L10.5169 5.9514M11.046 5.42227L10.5169 5.9514M15.1944 4.63034C17.5242 5.85072 17.8338 8.69593 16.3253 10.3239L15.6735 10.9757L12.4987 14.1505L10.3822 16.267C10.2295 16.4197 10.1141 16.4442 10.0527 16.4442C9.9913 16.4442 9.8759 16.4197 9.72318 16.267L7.60666 14.1505L4.43189 10.9757L3.77048 10.3143C2.14695 8.69078 2.44662 5.85679 4.77231 4.63369C6.04636 4.00053 7.81466 4.30985 8.92708 5.42227L9.45741 4.89194L8.92708 5.42227L9.45621 5.9514L9.98654 6.48173M15.1944 4.63034L9.98654 6.48173M9.98654 6.48173L10.5169 5.9514M9.98654 6.48173L10.5169 5.9514" fill="#389AFF" fill-opacity="0.01" stroke="black" stroke-width="1.5"/>
 </svg>

File diff ditekan karena terlalu besar
+ 0 - 2
src/assets/svg/icon-preview-tag.svg


File diff ditekan karena terlalu besar
+ 3 - 0
src/assets/svg/icon-preview.svg


File diff ditekan karena terlalu besar
+ 0 - 0
src/assets/svg/icon-quantity.svg


+ 1 - 1
src/assets/svg/icon-radio-active.svg

@@ -1,4 +1,4 @@
 <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
-<circle cx="7" cy="7" r="6.5" fill="black" fill-opacity="0.01" stroke="#389AFF"/>
+<circle cx="7" cy="7" r="6" fill="black" fill-opacity="0.01" stroke="#389AFF" stroke-width="2"/>
 <circle cx="7" cy="7" r="3.5" fill="#389AFF"/>
 </svg>

+ 1 - 2
src/assets/svg/icon-radio-default.svg

@@ -1,4 +1,3 @@
 <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
-<circle cx="7" cy="7" r="6.5" fill="black" fill-opacity="0.01" stroke="#C8C8C8"/>
-<circle cx="7" cy="7" r="3.5" fill="#C8C8C8"/>
+<circle cx="7" cy="7" r="6" fill="black" fill-opacity="0.01" stroke="#606367" stroke-width="2"/>
 </svg>

+ 2 - 3
src/assets/svg/icon-retweet.svg

@@ -1,4 +1,3 @@
-<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-<rect width="24" height="24" rx="12" fill="white"/>
-<path d="M7.14903 6.09573C6.95472 5.90142 6.63969 5.90142 6.44538 6.09573L4.1285 8.41261C3.8905 8.65061 3.8905 9.03649 4.1285 9.27449C4.3665 9.51249 4.75238 9.51249 4.99038 9.27449L6.18776 8.07711V14.6617C6.18776 16.2342 7.4625 17.5089 9.03497 17.5089H12.6154C12.952 17.5089 13.2248 17.2361 13.2248 16.8995C13.2248 16.5629 12.952 16.2901 12.6154 16.2901H9.03497C8.13567 16.2901 7.40664 15.561 7.40664 14.6617V8.07711L8.60403 9.27449C8.84203 9.51249 9.2279 9.51249 9.4659 9.27449C9.70391 9.03649 9.70391 8.65061 9.4659 8.41261L7.14903 6.09573ZM16.851 17.5214C17.0453 17.7157 17.3603 17.7157 17.5546 17.5214L19.8715 15.2045C20.1095 14.9665 20.1095 14.5806 19.8715 14.3426C19.6335 14.1046 19.2476 14.1046 19.0096 14.3426L17.8122 15.54V8.9554C17.8122 7.38294 16.5375 6.1082 14.965 6.1082H11.3846C11.048 6.1082 10.7752 6.38106 10.7752 6.71764C10.7752 7.05422 11.048 7.32708 11.3846 7.32708H14.965C15.8643 7.32708 16.5934 8.05611 16.5934 8.9554V15.54L15.396 14.3426C15.158 14.1046 14.7721 14.1046 14.5341 14.3426C14.2961 14.5806 14.2961 14.9665 14.5341 15.2045L16.851 17.5214Z" fill="#389AFF" stroke="#389AFF" stroke-width="0.1" stroke-linecap="round"/>
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M5.14903 4.09573C4.95472 3.90142 4.63969 3.90142 4.44538 4.09573L2.1285 6.41261C1.8905 6.65061 1.8905 7.03649 2.1285 7.27449C2.3665 7.51249 2.75238 7.51249 2.99038 7.27449L4.18776 6.07711V12.6617C4.18776 14.2342 5.4625 15.5089 7.03497 15.5089H10.6154C10.952 15.5089 11.2248 15.2361 11.2248 14.8995C11.2248 14.5629 10.952 14.2901 10.6154 14.2901H7.03497C6.13567 14.2901 5.40664 13.561 5.40664 12.6617V6.07711L6.60403 7.27449C6.84203 7.51249 7.2279 7.51249 7.4659 7.27449C7.70391 7.03649 7.70391 6.65061 7.4659 6.41261L5.14903 4.09573ZM14.851 15.5214C15.0453 15.7157 15.3603 15.7157 15.5546 15.5214L17.8715 13.2045C18.1095 12.9665 18.1095 12.5806 17.8715 12.3426C17.6335 12.1046 17.2476 12.1046 17.0096 12.3426L15.8122 13.54V6.9554C15.8122 5.38294 14.5375 4.1082 12.965 4.1082H9.38462C9.04803 4.1082 8.77517 4.38106 8.77517 4.71764C8.77517 5.05422 9.04803 5.32708 9.38462 5.32708H12.965C13.8643 5.32708 14.5934 6.05611 14.5934 6.9554V13.54L13.396 12.3426C13.158 12.1046 12.7721 12.1046 12.5341 12.3426C12.2961 12.5806 12.2961 12.9665 12.5341 13.2045L14.851 15.5214Z" fill="black" stroke="black" stroke-width="0.1" stroke-linecap="round"/>
 </svg>

+ 16 - 1
src/uilts/help.js

@@ -5,4 +5,19 @@ export function getQueryString(name) {
         return window.decodeURIComponent(r[2])
     }
     return null
- }
+ }
+
+ export function debounce(fn,delay){
+    let timer; // 定时器
+    return function(...args){ // 形成闭包
+      // args 为函数调用时传的参数。
+      let context = this;
+      timer&&clearTimeout(timer); // 当函数再次执行时,清除定时器,重新开始计时
+      // 利用定时器,让指定函数延迟执行。
+      timer = setTimeout(function(){
+        // 执行传入的指定函数,利用apply更改this绑定和传参
+        fn.apply(context,args);
+      },delay)
+    }
+  }
+  

+ 267 - 0
src/view/components/followInput.vue

@@ -0,0 +1,267 @@
+<template>
+    <div class="follow-input-wrapper">
+        <div class="at-user-item" v-for="(item, index) in atUserList" :key="index">
+            <img :src="require('../../assets/svg/icon-del-follows-user.svg')" 
+                class="icon-del"
+                @click="delUser(item, index)">
+            <!-- <div :id='"pre" + index'   style="position:absolute; top:-1000px;">{{item.name}}</div> -->
+            @<input class="at-user-input" 
+                    :id='"input" + index' 
+                    v-model="item.name" 
+                    @change="onIptChange(item, index)"
+                    @input="onInput(item, index)"
+                    @keyup="onKeyup(item, index)"
+                    @blur="onblur(item, index)"
+                    @focus="onfocus(item, index)"/>
+
+            <div class="user-list-wrapper" v-if="currentIptIndex == index && userList.length">
+                <div class="item" 
+                    v-for="(item, index) in userList"
+                    :key="index"
+                    :class="{'active': index === currentUserIndex}"
+                    @mouseenter="onUserMouseEnter(item, index)"
+                    @mouseleave="onUserMouseLeave(item, index)"
+                    @click="selectedUser(item, index)">
+                    <div class="following" v-if="item.following"> following </div>
+                    <div class="content">
+                        <img class="avatar" :src="item.avatarlUrl">
+                        <div>
+                            <div class="name">{{item.name}}</div>
+                            <div class="screenName">@{{item.screenName}}</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <div class="icon-add-wrapper"  v-if="atUserList.length < 5"
+            @click="addUser('')"
+            @mouseenter="handleMouseEn"
+            @mouseleave="handleMouseLe">
+            <img :src="require('../../assets/svg/icon-add-user-default.svg')" 
+                class="icon-add"
+                v-if="!isActiveAddBtn">
+            <img :src="require('../../assets/svg/icon-add-user-active.svg')" 
+                class="icon-add"
+                v-else>
+        </div>
+
+    </div>
+</template>
+
+<script setup>
+/* eslint-disable */
+import { reactive, ref, onMounted, defineEmits, watch } from "vue";
+import {searchTwitterUser} from "../../http/publishApi";
+import {debounce} from "../../uilts/help";
+import {getStorage} from "../../uilts/chromeExtension"
+
+
+let currentIptIndex = ref(-1);
+let isActiveAddBtn = ref(false);
+let currentUserIndex = ref(-1);
+
+let userList = ref([]);
+let atUserList = ref([]);
+
+let userInfo = reactive({});
+
+
+const emits = defineEmits(["updateAtUser"]);
+
+onMounted(() => {
+    getUserInfo((info) => {
+        if(info.nickName) {
+            addUser(info.nickName);
+        }
+    });
+}) 
+
+watch(
+    () => atUserList,
+    (newVal) => {
+        emits('updateAtUser', newVal)
+    },
+    {
+        deep: true
+    }
+);
+
+const getUserInfo = (cb) => {
+    let localUserInfo = getStorage('de-userInfo');
+    console.log('localUserInfo',localUserInfo)
+    if(localUserInfo) {
+        userInfo = localUserInfo;
+    }
+    cb && cb(localUserInfo);
+}
+
+const addUser = (name = '') => {
+    atUserList.value.push({
+        name
+    })
+}
+
+const delUser = (params, index) => {
+    atUserList.value.splice(index, 1);
+}
+
+const onfocus = (params, index) => {
+    console.log(params, index)
+}
+const onblur = (params, index) => {
+    console.log(params, index)
+}
+
+const onInput = debounce(function(params, index) {
+    currentIptIndex.value = index;
+    getTwitterUsers(params.name)
+}, 800) 
+
+const onKeyup = (params, index) => {
+    console.log('sskks', document.getElementById('input'+index).offsetWidth)
+// document.getElementById('input'+index).style.width = document.getElementById('pre'+index).offsetWidth - 5 + 'px'
+}
+
+const onIptChange = (params, index) => {
+    console.log(index)
+}
+
+const handleMouseEn = () => {
+    isActiveAddBtn.value = true;
+}
+
+const handleMouseLe = () => {
+    isActiveAddBtn.value = false;
+}
+
+const getTwitterUsers = (query, cb) => {
+    searchTwitterUser({
+        params: {
+            name : query
+        }
+    }).then(res => {
+        if(res.code == 0) {
+            userList.value = res.data;
+        }
+        cb && cb(res);
+        console.log('searchTwitterUser',res)
+    })
+}
+
+const selectedUser = (params) => {
+    atUserList.value[currentIptIndex.value]['name'] = params.screenName;
+    currentIptIndex.value = -1;
+}
+
+const onUserMouseEnter = (params, index) => {
+    currentUserIndex.value = index;
+    console.log(params, index)
+}
+
+const onUserMouseLeave = (params, index) => {
+    currentUserIndex.value = -1;
+    console.log(params, index)
+}
+</script>
+
+<style lang="scss" scoped>
+    .follow-input-wrapper {
+        width: 100%;
+        display: flex;
+        flex-wrap: wrap;
+        padding: 14px 0 14px 18px;
+        box-sizing: border-box;
+        border-left: 1px solid #ECECEC;
+
+        .icon-add{
+            width: 24px;
+            height: 24px;
+            margin-left: 10px;
+            cursor: pointer;
+        }
+
+        .at-user-item {
+            display: flex;
+            align-items: center;
+            border: 1px solid #ECECEC;
+            box-sizing: border-box;
+            border-radius: 100px;
+            color: #389AFF;
+            font-weight: 500;
+            font-size: 15px;
+            padding: 4px 12px;
+            position: relative;
+            margin-right: 10px;
+            background-color: #fff;
+            margin-bottom: 14px;
+
+            .icon-del {
+                width: 18px;
+                height: 18px;
+                position: absolute;
+                right: -7px;
+                top: -6px;
+                cursor: pointer;
+            }
+
+            .at-user-input {
+                color: #389AFF;
+                border: none;
+                outline: none;
+                width: 80px;
+            }
+
+            .user-list-wrapper {
+                width: 284px;
+                height: 430px;
+                position: absolute;
+                box-shadow: 0px 4px 20px 0px #0000004D;
+                overflow-y: scroll;
+                background-color: #fff; 
+                top: 30px;
+                z-index: 1000;
+                border-radius: 10px;
+
+                .item {
+                    width: 100%;
+                    height: 72px;
+                    box-sizing: border-box;
+                    padding: 0 16px;
+                    cursor: pointer;
+
+                    .content {
+                        display: flex;
+                        align-items: center;
+                        height: 100%;
+
+                        .avatar {
+                            width: 40px;
+                            height: 40px;
+                            border-radius: 50%;
+                            margin-right: 10px;
+                        }
+
+                        div {
+                            .name {
+                                font-weight: 600;
+                                font-size: 16px;
+                                margin-bottom: 2px;
+                                color: #000;
+                            }
+                            .screenName {
+                                font-size: 15px;
+                                color: #566370;
+                            }
+                        }
+                    }
+                }
+
+                .active {
+                    background-color: #F7F9F9 !important;
+                }
+            }
+        }
+
+    }
+</style>

+ 44 - 85
src/view/components/give-dialog.vue

@@ -20,8 +20,8 @@
                         <img class="icon" :src="require('../../assets/svg/icon-gift-pack.svg')">
                     </div>
                     <div class="bottom">
-                        <img class="icon" :src="require('../../assets/svg/icon-wallet.svg')">
-                        <img class="icon" :src="require('../../assets/svg/icon-setting.svg')">
+                        <!-- <img class="icon" :src="require('../../assets/svg/icon-wallet.svg')">
+                        <img class="icon" :src="require('../../assets/svg/icon-setting.svg')"> -->
                     </div>
                 </div>
                 <div class="right">
@@ -36,9 +36,9 @@
                                     </div>
                                     <el-input
                                         v-model="baseFormData.amountValue"
-                                        placeholder="$0.00"
+                                        placeholder="Amount entered"
                                         oninput = "value=value.replace(/[^\d]/g,'')"
-                                        :input-style="{ 'box-shadow': 'none' }"/>
+                                        :input-style="{ 'box-shadow': 'none','padding': '1px', 'width': '110px' }"/>
                                 </div>
                                 <div class="item">
                                     <div class="label">
@@ -48,19 +48,15 @@
                                         </div>
                                     <el-input
                                         v-model="baseFormData.totalCount"
-                                        placeholder="Enter quantity"
+                                        placeholder="Quantity entered"
                                         oninput = "value=value.replace(/[^\d]/g,'')"
-                                        :input-style="{ 'box-shadow': 'none' }"/>
+                                        :input-style="{ 'box-shadow': 'none','padding': '1px', 'width': '110px'}"/>
                                 </div>
                             </div>
+                            <div class="form-label">
+                                Requirement
+                            </div>
                             <div class="form-require">
-                                <div class="bar">
-                                    <div class="label">
-                                        <img class="icon"
-                                            :src="require('../../assets/svg/icon-require.svg')" />
-                                        Require
-                                    </div>
-                                </div>
                                 <div
                                     class="form-item"
                                     v-for="(item, index) in formList"
@@ -70,23 +66,10 @@
                                             :src="item.icon" />
                                         {{ item.label }}
                                     </div>
-                                    <div class="control">
-                                        <tinymce v-if="item.nodeType == 'textarea'"
-                                            @changeAccountVal="changeAccountVal"></tinymce>
-                                        <!-- <el-input
-                                            :type="item.nodeType"
-                                            rows="2"
-                                            resize="none"
-                                            v-model="item.text"
-                                            v-if="item.nodeType == 'textarea'"
-                                            placeholder="Enter account number"
-                                            :input-style="{
-                                                'box-shadow': 'none',
-                                                'padding': '1px',
-                                                'line-height': '1'
-                                            }"/> -->
+                                    <div class="control"  v-if="item.nodeType == 'textarea'">
+                                        <follow-input @updateAtUser="updateAtUser"></follow-input>
                                     </div>
-                                    <el-switch v-model="item.checked" />
+                                    <el-switch v-if="item.type == 2" v-model="item.checked" />
                                 </div>
                             </div>
                             <!-- <div class="anti-bot-wrapper">
@@ -119,13 +102,13 @@ import { ref, watch, reactive, defineProps, defineEmits, onMounted } from "vue";
 import {postPublish, verifyPaypalResult} from "../../http/publishApi"
 import previewCard from "./preview-card";
 import paypalButton from "./paypal-button";
-import tinymce from "./tinymce.vue"
+import followInput from "./followInput";
 
 const paypalClientId = 'ASn7k0zqyS5AWYikVSfmamR-RFpjyU_QFJWSxOHHoWE04-RgHNO6nahn0GyHUaUAEBxj-aKgtSrq4O4G';
 
 let publishRes = reactive({})
 
-let visible = ref(false);
+let visible = ref(true);
 let showPreview = ref(false);
 let dialogHeight = ref(620);
 let previewDialogHeight = ref(880)
@@ -142,21 +125,21 @@ let formList = reactive([
         icon: require('../../assets/svg/icon-follow.svg'),
         nodeType: 'textarea',
         type: 1,
-        text: '',
+        text: [],
         checked: true
     },
     {
-        label: "Like",
-        icon: require('../../assets/svg/icon-like.svg'),
+        label: "Retweet",
+        icon: require('../../assets/svg/icon-retweet.svg'),
         nodeType: 'div',
-        type: 2,
+        type: 3,
         checked: true
     },
     {
-        label: "Retweet",
-        icon: require('../../assets/svg/icon-retweet.svg'),
+        label: "Like tweet",
+        icon: require('../../assets/svg/icon-like.svg'),
         nodeType: 'div',
-        type: 3,
+        type: 2,
         checked: true
     },
 ]);
@@ -207,17 +190,8 @@ const confirm = () => {
     for(let i = 0; i < formList.length; i++) {
         let item = {};
         item.type = formList[i]['type'];
-        if(item.type == 1 && formList[i]['checked'] && formList[i]['text']) { // follow 参数
-            let relatedUsers = [];
-            let text = formList[i]['text'].replace(/\s*/g,""); // 删除空格
-            let textList = text.split('@');
-
-            for(let i = 0; i < textList.length; i++) {
-                let item =  textList[i];
-                if(item) {
-                    relatedUsers.push({name: item});
-                }
-            }
+        if(item.type == 1 && formList[i]['text']) { // follow 参数
+            let relatedUsers = formList[i]['text'];
             item.relatedUsers = relatedUsers;
             finishConditions.push(item);
         } else if(formList[i]['checked']){
@@ -274,9 +248,8 @@ const payPalFinsh = (params) => {
     })
 }
 
-const changeAccountVal = (val) => {
+const updateAtUser = (val) => {
     formList[0]['text'] = val;
-    console.log('formList',formList);
 }
 
 onMounted(() => {
@@ -389,13 +362,13 @@ onMounted(() => {
                         .item {
                             width: 250px;
                             height: 60px;
-                            border: 1px solid #e1e1e1;
                             box-sizing: border-box;
                             border-radius: 15px;
                             display: flex;
                             align-items: center;
                             justify-content: space-between;
                             padding: 16px 14px;
+                            box-shadow: 0px 3px 27px 0px #0000001A;
 
                             .label {
                                 font-weight: 500;
@@ -412,36 +385,22 @@ onMounted(() => {
                         }
                     }
 
+                    .form-label {
+                        color: rgba(0, 0, 0, 0.4);
+                        margin-top: 23px;
+                        margin-bottom: 10px;
+                        font-weight: 500;
+                        font-size: 15px;
+                    }
+
                     .form-require {
-                        border: 1px solid #e1e1e1;
                         box-sizing: border-box;
                         border-radius: 15px;
                         margin-top: 12px;
-
-                        .bar {
-                            padding: 2px 10px 0 10px;
-                            box-sizing: border-box;
-                            display: flex;
-                            align-items: center;
-                            justify-content: space-between;
-                            line-height: 50px;
-
-                            .label {
-                                display: flex;
-                                .icon {
-                                    margin-right: 8px;
-                                }
-                            }
-
-                            .icon-button {
-                                width: 28px;
-                                height: 28px;
-                                cursor: pointer;
-                            }
-                        }
+                        box-shadow: 0px 3px 27px 0px #0000001A;
 
                         .form-item {
-                            height: 50px;
+                            min-height: 60px;
                             display: flex;
                             align-items: center;
                             justify-content: space-between;
@@ -449,8 +408,7 @@ onMounted(() => {
                             border-bottom: 1px solid #ececec;
 
                             .label {
-                                width: 100px;
-                                color: rgba(0, 0, 0, 0.6);
+                                min-width: 88px;
                                 display: flex;
                                 align-items: center;
                                 .icon {
@@ -459,10 +417,11 @@ onMounted(() => {
                             }
 
                             .control {
-                                width: 264px;
-                                height: 50px;
-                                line-height: 50px;
-                                cursor: pointer;
+                                width: 100%;
+                                min-height: 60px;
+                                margin-left: 18px;
+                                padding: 4px 0;
+                                box-sizing: border-box;
                             }
                         }
                     }
@@ -495,11 +454,11 @@ onMounted(() => {
                 }
                 .submit-btn {
                     width: calc(100% - 36px);
-                    height: 60px;
+                    height: 46px;
                     text-align: center;
-                    line-height: 60px;
+                    line-height: 46px;
                     background: #4a99e9;
-                    border-radius: 15px;
+                    border-radius: 100px;
                     color: #fff;
                     position: absolute;
                     bottom: 32px;

+ 15 - 6
src/view/components/paypal-button.vue

@@ -2,7 +2,7 @@
     <div class="pay-wrapper">
         <div class="pay-msg">
             <div class="row">Pay ${{amount || 0}}</div>
-            <div class="row">Generate Giveaways</div>
+            <div class="msg">Generate Giveaways</div>
         </div>
         <div class="pay-btn">
             <iframe
@@ -59,21 +59,30 @@ onMounted(() => {
     position: absolute;
     left: 0;
     bottom: 0;
-    border-top: 1px solid;
+    box-shadow: 0px -2px 20px 0px #00000026;
     border-bottom-right-radius: 16px;
     padding: 12px 30px;
     box-sizing: border-box;
     display: flex;
     align-items: center;
-    justify-content: space-between;
+    justify-content: flex-end;
 
     .pay-msg {
-        font-weight: 600;
-        font-size: 17px;
+        text-align: right;
+        margin-right: 25px;
+
+        .row {
+            font-weight: 600;
+            font-size: 17px;
+        }
+        .msg {
+            font-size: 13px;
+            color: rgba($color: #000000, $alpha: .54);
+        }
     }
 
     .pay-btn {
-        width: 182px;
+        width: 206px;
         height: 48px;
 
         iframe {

File diff ditekan karena terlalu besar
+ 1 - 0
src/view/components/preview-card.vue


+ 0 - 348
src/view/components/tinymce.vue

@@ -1,348 +0,0 @@
-<template>
-    <div class="wrapper">
-        <Editor
-            v-model="content"
-            :init="editorInit"
-            :api-key="apiKey"
-            output-format="text"
-            @change="handlerFunction"/>
-    </div>
-</template>
-
-<script setup>
-/* eslint-disable */
-import { reactive, ref, onMounted, defineEmits } from "vue";
-import Editor from "@tinymce/tinymce-vue";
-import { faker } from "@faker-js/faker";
-import {searchTwitterUser} from "../../http/publishApi"
-
-// import Quill from "quill";
-// import "quill/dist/quill.snow.css";
-
-// import mention from "quill-mention"; // 引入mention 组件
-
-// import "quill-mention/dist/quill.mention.min.css";
-
-// 为quill 注册mention 组件
-
-// Quill.register({
-//     "modules/mention": mention,
-// });
-
-// let editor = reactive({});
-// const editorOptions = {
-//     placeholder: "", // 文本提示信息
-
-//     modules: {
-//         toolbar: [], // 定义菜单栏 (粗体,下划线,颜色,排序)
-//         mention: {
-//             // 重点: 提醒功能配置项
-
-//             allowedChars: /^[A-Za-z\s]*$/, // 正则匹配
-//             mentionDenotationChars: ["@"], // 匹配符号,匹配到@符号弹出提醒框
-//             offsetLeft: 4,
-//             source: (searchTerm, renderList, mentionChar) => {
-//                 // 数据源(遍历成{id, value}形式)
-//                 console.log("111", searchTerm);
-//                 const values = [
-//                     {
-//                         id: 1,
-//                         value: "sdsd",
-//                     },
-//                     {
-//                         id: 2,
-//                         value: "kkkie",
-//                     },
-//                 ];
-//                 renderList(values, searchTerm); // 渲染函数(生成提醒框)
-//             },
-
-//             onSelect: (data, insertItem) => {
-//                 // 注意:选中后的回调函数
-//                 const item = {
-//                     text: `@${data.value}`,
-//                     name: data.value,
-//                     id: data.id,
-//                 };
-//                 insertItem(data); // 注意:这个函数必须加上,有这个才会在文本框显示选中的值
-//                 getText(data);
-//                 // this.onSelectd(item) // 返回给后端的选中提醒的人
-//             },
-//         },
-//     },
-// };
-let content = ref("");
-const emits = defineEmits(["changeAccountVal"])
-
-// const onHandleChange = () => {};
-// const getText = () => {
-//     console.log(editor.getText());
-// };
-
-onMounted(() => {
-    // let container = document.getElementById('quill');
-    // editor  = new Quill(container, editorOptions);
-    // editor.on('text-change', () => {
-    //     console.log(editor.getText())
-    // });
-});
-const handlerFunction = (value) => {
-    emits('changeAccountVal', content.value);
-    console.log("handlerFunction", content.value);
-};
-
-var fakeServer = (function () {
-    /* Use TinyMCE's Promise shim */
-    // var Promise = tinymce.util.Promise;
-
-    /* Some user profile images for our fake server (original source: unsplash) */
-    var images = [
-        "Abdullah_Hadley",
-        "Abriella_Bond",
-        "Addilynn_Dodge",
-        "Adolfo_Hess",
-        "Alejandra_Stallings",
-        "Alfredo_Schafer",
-        "Aliah_Pitts",
-        "Amilia_Luna",
-        "Andi_Lane",
-        "Angelina_Winn",
-        "Arden_Dean",
-        "Ariyanna_Hicks",
-        "Asiya_Wolff",
-        "Brantlee_Adair",
-        "Carys_Metz",
-        "Daniela_Dewitt",
-        "Della_Case",
-        "Dianna_Smiley",
-        "Eliana_Stout",
-        "Elliana_Palacios",
-        "Fischer_Garland",
-        "Glen_Rouse",
-        "Grace_Gross",
-        "Heath_Atwood",
-        "Jakoby_Roman",
-        "Judy_Sewell",
-        "Kaine_Hudson",
-        "Kathryn_Mcgee",
-        "Kayley_Dwyer",
-        "Korbyn_Colon",
-        "Lana_Steiner",
-        "Loren_Spears",
-        "Lourdes_Browning",
-        "Makinley_Oneill",
-        "Mariana_Dickey",
-        "Miyah_Myles",
-        "Moira_Baxter",
-        "Muhammed_Sizemore",
-        "Natali_Craig",
-        "Nevaeh_Cates",
-        "Oscar_Khan",
-        "Rodrigo_Hawkins",
-        "Ryu_Duke",
-        "Tripp_Mckay",
-        "Vivianna_Kiser",
-        "Yamilet_Booker",
-        "Yarely_Barr",
-        "Zachary_Albright",
-        "Zahir_Mays",
-        "Zechariah_Burrell",
-    ];
-
-    /* Create an array of 200 random names using faker.js */
-    var userNames = [];
-    for (var i = 0; i < 200; i++) {
-        userNames.push(faker.name.findName());
-    }
-
-    /* This represents a database of users on the server */
-    var userDb = {};
-    // /docs/images/unsplash/uifaces-unsplash-portrait-' + images[Math.floor(images.length * Math.random())] + '.jpg
-    userNames
-        .map(function (fullName) {
-            var id = fullName.toLowerCase().replace(/ /g, "");
-            return {
-                id: id,
-                name: fullName,
-                fullName: fullName,
-                description: faker.name.jobTitle(),
-                image: "https://img2.baidu.com/it/u=4244073868,573478915&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400",
-            };
-        })
-        .forEach(function (user) {
-            userDb[user.id] = user;
-        });
-
-    /* This represents getting the complete list of users from the server with the details required for the mentions "profile" item */
-    var fetchUsers = function () {
-        return new Promise(function (resolve, _reject) {
-            /* simulate a server delay */
-            setTimeout(function () {
-                var users = Object.keys(userDb).map(function (id) {
-                    return {
-                        id: id,
-                        name: userDb[id].name,
-                        image: userDb[id].image,
-                        description: userDb[id].description,
-                    };
-                });
-                resolve(users);
-            }, 500);
-        });
-    };
-
-    /* This represents requesting all the details of a single user from the server database */
-    var fetchUser = function (id) {
-        return new Promise(function (resolve, reject) {
-            /* simulate a server delay */
-            setTimeout(function () {
-                if (Object.prototype.hasOwnProperty.call(userDb, id)) {
-                    resolve(userDb[id]);
-                }
-                reject('unknown user id "' + id + '"');
-            }, 300);
-        });
-    };
-
-    return {
-        fetchUsers: fetchUsers,
-        fetchUser: fetchUser,
-    };
-})();
-
-/* These are "local" caches of the data returned from the fake server */
-var usersRequest = null;
-var userRequest = {};
-
-var mentions_fetch = function (query, success) {
-    /* Fetch your full user list from somewhere */
-    // if (usersRequest === null) {
-    //     usersRequest = fakeServer.fetchUsers();
-    // }
-    // usersRequest.then(function (users) {
-    //     /* `query.term` is the text the user typed after the '@' */
-    //     users = users.filter(function (user) {
-    //         return user.name.indexOf(query.term.toLowerCase()) !== -1;
-    //     });
-
-    //     users = users.slice(0, 10);
-
-    //     /* Where the user object must contain the properties `id` and `name`
-    //     but you could additionally include anything else you deem useful. */
-    //     console.log('users',users)
-    //     success(users);
-    // });
-    console.log('searchTwitterUser', query)
-    searchTwitterUser({
-        params: {
-            name : query.term
-        }
-    }).then(res => {
-        if(res.code == 0) {
-            let dataList = [];
-            for (let i = 0; i < res.data.length; i++) {
-                let item = res.data[i];
-                dataList.push({
-                    id: i + '',
-                    name: item.screenName,
-                    image: item.avatarlUrl,
-                    description: item.name
-                })
-            }
-            success(dataList);
-        }
-        console.log('searchTwitterUser',res)
-    })
-};
-
-var mentions_menu_hover = function (userInfo, success) {
-    /* Request more information about the user from the server and cache it locally */
-    if (!userRequest[userInfo.id]) {
-        userRequest[userInfo.id] = fakeServer.fetchUser(userInfo.id);
-    }
-    userRequest[userInfo.id].then(function (userDetail) {
-        var div = document.createElement("div");
-
-        div.innerHTML =
-            '<div class="card">' +
-            '<img class="avatar" src="' +
-            userDetail.image +
-            '"/>' +
-            "<h1>" +
-            userDetail.fullName +
-            "</h1>" +
-            "<p>" +
-            userDetail.description +
-            "</p>" +
-            "</div>";
-
-        success(div);
-    });
-};
-
-var mentions_menu_complete = function (editor, userInfo) {
-    var span = editor.getDoc().createElement("span");
-    span.className = "mymention";
-    span.setAttribute("data-mention-id", userInfo.id);
-    span.appendChild(editor.getDoc().createTextNode("@" + userInfo.name));
-    return span;
-};
-
-var mentions_select = function (mention, success) {
-    console.log('mention', mention, success)
-    /* `mention` is the element we previously created with `mentions_menu_complete`
-      in this case we have chosen to store the id as an attribute */
-    // var id = mention.getAttribute("data-mention-id");
-    // /* Request more information about the user from the server and cache it locally */
-    // if (!userRequest[id]) {
-    //     userRequest[id] = fakeServer.fetchUser(id);
-    // }
-    // userRequest[id].then(function (userDetail) {
-        // var div = document.createElement("div");
-        // div.innerHTML =
-        //     '<div class="card">' +
-        //     '<img class="avatar" style="width: 40px" src="' +
-        //     userDetail.image +
-        //     '"/>' +
-        //     "<h1>" +
-        //     userDetail.fullName +
-        //     "</h1>" +
-        //     "<p>" +
-        //     userDetail.description +
-        //     "</p>" +
-        //     "</div>";
-        // success();
-    // });
-};
-
-const apiKey = ref("qagffr3pkuv17a8on1afax661irst1hbr4e6tbv888sz91jc");
-let editorInit = reactive({
-    plugins: ["mentions"],
-    content_style:
-        ".mymention{ color: blue; }" +
-        "body { font-family:Helvetica,Arial,sans-serif; font-size:14px }",
-    mentions_selector: ".mymention",
-    mentions_fetch: mentions_fetch,
-    mentions_menu_complete: mentions_menu_complete,
-    mentions_select: mentions_select,
-    // mentions_menu_hover: mentions_menu_hover,
-    mentions_item_type: "profile",
-    toolbar: false,
-    menubar: false,
-    branding: false,//tiny技术支持信息是否显示
-    statusbar: false,
-    paste_data_images: false,
-    width: 264,
-    height: 50,
-    border: false,
-    resize: false, //编辑器宽高是否可变,false-否,true-高可变,'both'-宽高均可,注意引号
-    placeholder: "Enter account number", //textarea中的提示信息
-    // language: "zh_CN", //语言类型
-});
-</script>
-
-<style lang="scss" scoped>
-/deep/ .tox-tinymce {
-    border: none;
-}
-</style>

+ 1 - 74
yarn.lock

@@ -978,11 +978,6 @@
     minimatch "^3.0.4"
     strip-json-comments "^3.1.1"
 
-"@faker-js/faker@^6.1.1":
-  version "6.1.1"
-  resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-6.1.1.tgz#adf002d986e1751daadfcf65d1cc03944dab3ced"
-  integrity sha512-8yq1LJVGn4GY06riLddIU1LbJm15yjt46hjfkpWNpH/mqdciPOBVzicKOJxzQNrGgVHVBxcdm7sgwjI/Y19MYw==
-
 "@gar/promisify@^1.0.1":
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6"
@@ -1126,13 +1121,6 @@
   resolved "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz#a53515db25d8038374381b73af20bb4f2e508d87"
   integrity sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==
 
-"@tinymce/tinymce-vue@^4.0.7":
-  version "4.0.7"
-  resolved "https://registry.yarnpkg.com/@tinymce/tinymce-vue/-/tinymce-vue-4.0.7.tgz#811dd87a2a9f70e60c43c2d9d932771c0c8b4677"
-  integrity sha512-1esB8wGWrjPCY+rK8vy3QB1cxwXo7HLJWuNrcyPl6LOVR+QJjub0OiV/C+TUEsLN6OpCtRv+QnIqMC5vXz783Q==
-  dependencies:
-    tinymce "^5.5.0"
-
 "@tootallnate/once@1":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
@@ -2516,11 +2504,6 @@ clone@^1.0.2:
   resolved "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
   integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
 
-clone@^2.1.1:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
-  integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
-
 color-convert@^1.9.0:
   version "1.9.3"
   resolved "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -3413,11 +3396,6 @@ event-pubsub@4.3.0:
   resolved "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e"
   integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==
 
-eventemitter3@^2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
-  integrity sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=
-
 eventemitter3@^4.0.0:
   version "4.0.7"
   resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
@@ -3505,7 +3483,7 @@ express@^4.17.1:
     utils-merge "1.0.1"
     vary "~1.1.2"
 
-extend@^3.0.2, extend@~3.0.2:
+extend@~3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
   integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
@@ -3525,11 +3503,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
   resolved "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
   integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
 
-fast-diff@1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
-  integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
-
 fast-glob@^3.2.11, fast-glob@^3.2.7, fast-glob@^3.2.9:
   version "3.2.11"
   resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
@@ -5374,11 +5347,6 @@ param-case@^3.0.4:
     dot-case "^3.0.4"
     tslib "^2.0.3"
 
-parchment@^1.1.4:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5"
-  integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==
-
 parent-module@^1.0.0:
   version "1.0.1"
   resolved "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -5890,34 +5858,6 @@ quick-lru@^4.0.1:
   resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
   integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
 
-quill-delta@^3.6.2:
-  version "3.6.3"
-  resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032"
-  integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==
-  dependencies:
-    deep-equal "^1.0.1"
-    extend "^3.0.2"
-    fast-diff "1.1.2"
-
-quill-mention@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/quill-mention/-/quill-mention-3.1.0.tgz#acf0bf21524b627e9304f63534e6d2b8c59ab4fd"
-  integrity sha512-uyjGK8QPJHEcjvNc3wUJy6a05Oiu+6JJ0N9SFAwjYHYThgMzlKucyD975fq28Mr1it8ZFRNiRMPa0sCiVOAEwA==
-  dependencies:
-    quill "^1.3.7"
-
-quill@^1.3.4, quill@^1.3.7:
-  version "1.3.7"
-  resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8"
-  integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==
-  dependencies:
-    clone "^2.1.1"
-    deep-equal "^1.0.1"
-    eventemitter3 "^2.0.3"
-    extend "^3.0.2"
-    parchment "^1.1.4"
-    quill-delta "^3.6.2"
-
 randombytes@^2.1.0:
   version "2.1.0"
   resolved "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -6793,11 +6733,6 @@ timsort@^0.3.0:
   resolved "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
   integrity sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==
 
-tinymce@^5.5.0:
-  version "5.10.3"
-  resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-5.10.3.tgz#9485cf00159fd70c4948cb5e9dd49bce2a775899"
-  integrity sha512-O59ssHNnujWvSk5Gt8hIGrdNCMKVWVQv9F8siAgLTRgTh0t3NDHrP1UlLtCxArUi9DPWZvlBeUz8D5fJTu7vnA==
-
 tinymce@^6.0.1:
   version "6.0.1"
   resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-6.0.1.tgz#ec832632e398661507cc51b2a7574d17655fb9c8"
@@ -7081,14 +7016,6 @@ vue-loader@^17.0.0:
     hash-sum "^2.0.0"
     loader-utils "^2.0.0"
 
-vue-quill-editor@^3.0.6:
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz#1f85646211d68a31a80a72cb7f45bb2f119bc8fb"
-  integrity sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==
-  dependencies:
-    object-assign "^4.1.1"
-    quill "^1.3.4"
-
 vue-style-loader@^4.1.0, vue-style-loader@^4.1.3:
   version "4.1.3"
   resolved "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini