hookehuyr

fix 海报页面整理

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;
......