Showing
1 changed file
with
59 additions
and
16 deletions
| 1 | <template> | 1 | <template> |
| 2 | <div class="poster-page"> | 2 | <div class="poster-page"> |
| 3 | - <div style="height: calc(83vh - 2rem); padding: 1rem;"> | 3 | + <div class="poster-contain-wrapper"> |
| 4 | - <div v-if="flag" ref="canvasRef" style="position: relative; padding: 1rem; background-color: #fff;"> | 4 | + <div v-if="flag" ref="canvasRef" class="poster-contain"> |
| 5 | - <div style="position: absolute; top: 3rem; left: 2rem; color: #FFF; writing-mode: vertical-lr; text-orientation: upright;"> | 5 | + <div class="poster-text-boxer"> |
| 6 | - <div style="position: relative;"> | 6 | + <div class="poster-text"> |
| 7 | - <span style="font-size: 2.5rem; font-weight: bolder; letter-spacing: 5px;">{{ tree_data?.name }}</span> | 7 | + <span class="name">{{ tree_data?.name }}</span> |
| 8 | - <div style="position: absolute; bottom: -1rem; letter-spacing: 5px;">{{ tree_data?.nickname }}</div> | 8 | + <div class="nickname">{{ tree_data?.nickname }}</div> |
| 9 | </div> | 9 | </div> |
| 10 | </div> | 10 | </div> |
| 11 | - <img :src="imgSrc" style="width: 100%; height: 67vh;"> | 11 | + <img :src="imgSrc"> |
| 12 | - <div style="color: #CCCCCC; margin-top: 1rem;"> | 12 | + <div class="poster-mission"> |
| 13 | - <div style="font-weight: bold; text-decoration: underline; margin-bottom: 0.5rem;">{{ tree_data?.mission_title }}</div> | 13 | + <div style="font-weight: bold; text-decoration: underline; margin-bottom: 0.5rem;"> |
| 14 | + {{ tree_data?.mission_title }} | ||
| 15 | + </div> | ||
| 14 | </div> | 16 | </div> |
| 15 | </div> | 17 | </div> |
| 16 | <div v-if="imgUrl"> | 18 | <div v-if="imgUrl"> |
| 17 | - <img :src="imgUrl" alt="" crossOrigin="anonymous" :style="{ width: ref_width, height: ref_height }"> | 19 | + <img :src="imgUrl" crossOrigin="anonymous" :style="{ width: ref_width, height: ref_height }"> |
| 18 | </div> | 20 | </div> |
| 19 | </div> | 21 | </div> |
| 20 | <div class="poster-control-wrapper"> | 22 | <div class="poster-control-wrapper"> |
| ... | @@ -22,7 +24,7 @@ | ... | @@ -22,7 +24,7 @@ |
| 22 | <div class="poster-control"> | 24 | <div class="poster-control"> |
| 23 | <div @click="posterPrev" class="poster-prev">上一个</div> | 25 | <div @click="posterPrev" class="poster-prev">上一个</div> |
| 24 | <van-uploader v-if="tree_data?.is_tree === 1" :before-read="beforeRead" :after-read="afterRead" accept="file"> | 26 | <van-uploader v-if="tree_data?.is_tree === 1" :before-read="beforeRead" :after-read="afterRead" accept="file"> |
| 25 | - <div v-if="!upload_loading" class="poster-upload-btn" style="">上传图片</div> | 27 | + <div v-if="!upload_loading" class="poster-upload-btn">上传图片</div> |
| 26 | <van-loading v-else size="24px" color="#fff" text-color="#fff" vertical>上传中...</van-loading> | 28 | <van-loading v-else size="24px" color="#fff" text-color="#fff" vertical>上传中...</van-loading> |
| 27 | </van-uploader> | 29 | </van-uploader> |
| 28 | <div @click="posterNext" class="poster-next">下一个</div> | 30 | <div @click="posterNext" class="poster-next">下一个</div> |
| ... | @@ -65,7 +67,7 @@ onMounted(async () => { | ... | @@ -65,7 +67,7 @@ onMounted(async () => { |
| 65 | if (code) { | 67 | if (code) { |
| 66 | raw_data.value = data.filter(item => item.is_light === '1'); // 获取所有已点亮的植被 | 68 | raw_data.value = data.filter(item => item.is_light === '1'); // 获取所有已点亮的植被 |
| 67 | let index = raw_data.value.findIndex(item => item.revision == revision); // 植被信息index | 69 | let index = raw_data.value.findIndex(item => item.revision == revision); // 植被信息index |
| 68 | - tree_data.value = raw_data.value[index]; | 70 | + tree_data.value = raw_data.value[index]; // 获取当前植被信息 |
| 69 | imgSrc.value = tree_data.value.user_poster !== null ? tree_data.value.user_poster : tree_data.value.poster_pic; | 71 | imgSrc.value = tree_data.value.user_poster !== null ? tree_data.value.user_poster : tree_data.value.poster_pic; |
| 70 | } | 72 | } |
| 71 | nextTick(() => { | 73 | nextTick(() => { |
| ... | @@ -76,7 +78,7 @@ onMounted(async () => { | ... | @@ -76,7 +78,7 @@ onMounted(async () => { |
| 76 | createImage(); | 78 | createImage(); |
| 77 | }); | 79 | }); |
| 78 | 80 | ||
| 79 | -const resizePoster = () => { | 81 | +const resizePoster = () => { // 重置海报 |
| 80 | tree_data.value = raw_data.value[posterIndex.value]; | 82 | tree_data.value = raw_data.value[posterIndex.value]; |
| 81 | flag.value = true; | 83 | flag.value = true; |
| 82 | imgUrl.value = ''; | 84 | imgUrl.value = ''; |
| ... | @@ -89,7 +91,7 @@ const resizePoster = () => { | ... | @@ -89,7 +91,7 @@ const resizePoster = () => { |
| 89 | createImage(); | 91 | createImage(); |
| 90 | }; | 92 | }; |
| 91 | 93 | ||
| 92 | -const posterPrev = () => { | 94 | +const posterPrev = () => { // 上一个 |
| 93 | if (posterIndex.value > 0) { | 95 | if (posterIndex.value > 0) { |
| 94 | posterIndex.value--; | 96 | posterIndex.value--; |
| 95 | } else { | 97 | } else { |
| ... | @@ -98,7 +100,7 @@ const posterPrev = () => { | ... | @@ -98,7 +100,7 @@ const posterPrev = () => { |
| 98 | resizePoster(); | 100 | resizePoster(); |
| 99 | }; | 101 | }; |
| 100 | 102 | ||
| 101 | -const posterNext = () => { | 103 | +const posterNext = () => { // 下一个 |
| 102 | if (posterIndex.value < raw_data.value.length - 1) { | 104 | if (posterIndex.value < raw_data.value.length - 1) { |
| 103 | posterIndex.value++; | 105 | posterIndex.value++; |
| 104 | } else { | 106 | } else { |
| ... | @@ -140,7 +142,6 @@ const createImage = () => { | ... | @@ -140,7 +142,6 @@ const createImage = () => { |
| 140 | try { | 142 | try { |
| 141 | // 生成图片地址 | 143 | // 生成图片地址 |
| 142 | imgUrl.value = canvas.toDataURL("image/png"); | 144 | imgUrl.value = canvas.toDataURL("image/png"); |
| 143 | - // console.log("canvas.toDataURL('image/png')", this.imgUrl); | ||
| 144 | flag.value = false; | 145 | flag.value = false; |
| 145 | } catch (e) { | 146 | } catch (e) { |
| 146 | alert("图片跨域,保存失败"); | 147 | alert("图片跨域,保存失败"); |
| ... | @@ -154,15 +155,18 @@ const createImage = () => { | ... | @@ -154,15 +155,18 @@ const createImage = () => { |
| 154 | } | 155 | } |
| 155 | 156 | ||
| 156 | const upload_loading = ref(false); | 157 | const upload_loading = ref(false); |
| 158 | + | ||
| 157 | const beforeRead = (file) => { | 159 | const beforeRead = (file) => { |
| 158 | if (file.type.indexOf('image') < 0) { | 160 | if (file.type.indexOf('image') < 0) { |
| 159 | showToast('请上传图片格式'); | 161 | showToast('请上传图片格式'); |
| 160 | return false; | 162 | return false; |
| 161 | } | 163 | } |
| 164 | + | ||
| 162 | if (file.size > 1000 * 1024) { | 165 | if (file.size > 1000 * 1024) { |
| 163 | showToast('图片大小超过1M'); | 166 | showToast('图片大小超过1M'); |
| 164 | return false; | 167 | return false; |
| 165 | } | 168 | } |
| 169 | + | ||
| 166 | return true; | 170 | return true; |
| 167 | }; | 171 | }; |
| 168 | 172 | ||
| ... | @@ -187,6 +191,7 @@ const afterRead = async (res) => { | ... | @@ -187,6 +191,7 @@ const afterRead = async (res) => { |
| 187 | // 保存图片 | 191 | // 保存图片 |
| 188 | const { code, data } = await saveFileAPI({ filekey, hash, format: '0', height: '0', width: '0' }); | 192 | const { code, data } = await saveFileAPI({ filekey, hash, format: '0', height: '0', width: '0' }); |
| 189 | if (code) { | 193 | if (code) { |
| 194 | + // 保存海报图片 | ||
| 190 | const { code: tree_code, data: tree_data } = await savePosterAPI({ tree_revision: revision, poster_pic: data.src }) | 195 | const { code: tree_code, data: tree_data } = await savePosterAPI({ tree_revision: revision, poster_pic: data.src }) |
| 191 | if (tree_code) { | 196 | if (tree_code) { |
| 192 | flag.value = true; | 197 | flag.value = true; |
| ... | @@ -205,6 +210,44 @@ const afterRead = async (res) => { | ... | @@ -205,6 +210,44 @@ const afterRead = async (res) => { |
| 205 | .poster-page { | 210 | .poster-page { |
| 206 | height: 100vh; | 211 | height: 100vh; |
| 207 | background-color: green; | 212 | background-color: green; |
| 213 | + .poster-contain-wrapper { | ||
| 214 | + height: calc(83vh - 2rem); | ||
| 215 | + padding: 1rem; | ||
| 216 | + .poster-contain { | ||
| 217 | + position: relative; | ||
| 218 | + padding: 1rem; | ||
| 219 | + background-color: #fff; | ||
| 220 | + .poster-text-boxer { | ||
| 221 | + position: absolute; | ||
| 222 | + top: 3rem; | ||
| 223 | + left: 2rem; | ||
| 224 | + color: #FFF; | ||
| 225 | + writing-mode: vertical-lr; | ||
| 226 | + text-orientation: upright; | ||
| 227 | + .poster-text { | ||
| 228 | + position: relative; | ||
| 229 | + .name { | ||
| 230 | + font-size: 2.5rem; | ||
| 231 | + font-weight: bolder; | ||
| 232 | + letter-spacing: 5px; | ||
| 233 | + } | ||
| 234 | + .nickname { | ||
| 235 | + position: absolute; | ||
| 236 | + bottom: -1rem; | ||
| 237 | + letter-spacing: 5px; | ||
| 238 | + } | ||
| 239 | + } | ||
| 240 | + } | ||
| 241 | + img { | ||
| 242 | + width: 100%; | ||
| 243 | + height: 70vh; | ||
| 244 | + } | ||
| 245 | + .poster-mission { | ||
| 246 | + color: #CCCCCC; | ||
| 247 | + margin-top: 1rem; | ||
| 248 | + } | ||
| 249 | + } | ||
| 250 | + } | ||
| 208 | .poster-control-wrapper { | 251 | .poster-control-wrapper { |
| 209 | .save-text { | 252 | .save-text { |
| 210 | text-align: center; | 253 | text-align: center; | ... | ... |
-
Please register or login to post a comment