Просмотр исходного кода

Merge branch 'master' of http://git.izouma.com/xiongzhu/9th

panhui 4 лет назад
Родитель
Сommit
61a49e9acc

+ 1 - 1
install-jar.sh

@@ -1,7 +1,7 @@
 
 
 mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.libjpegturbo -DartifactId=mozjpeg4j -Dpackaging=jar -Dversion=1.1 -Dfile=lib/mozjpeg4j-1.1.jar -DlocalRepositoryPath=libs
 mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.libjpegturbo -DartifactId=mozjpeg4j -Dpackaging=jar -Dversion=1.1 -Dfile=lib/mozjpeg4j-1.1.jar -DlocalRepositoryPath=libs
 
 
-mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.pngquant -DartifactId=pngquant4j -Dpackaging=jar -Dversion=1.0 -Dfile=lib/pngquant4j-1.0.jar -DlocalRepositoryPath=libs
+mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -DgroupId=org.pngquant -DartifactId=pngquant4j -Dpackaging=jar -Dversion=1.0.1 -Dfile=lib/pngquant4j-1.0.1.jar -DlocalRepositoryPath=libs
 
 
 mvn install:install-file -DgroupId=com.antfinancial.baas -DartifactId=mychain-rest-lib -Dpackaging=jar -Dversion=0.10.2.11 -Dfile=lib/mychain-rest-client-0.10.2.11-with-dependencies.jar
 mvn install:install-file -DgroupId=com.antfinancial.baas -DartifactId=mychain-rest-lib -Dpackaging=jar -Dversion=0.10.2.11 -Dfile=lib/mychain-rest-client-0.10.2.11-with-dependencies.jar
 
 

+ 1 - 1
pom.xml

@@ -309,7 +309,7 @@
         <dependency>
         <dependency>
             <groupId>org.pngquant</groupId>
             <groupId>org.pngquant</groupId>
             <artifactId>pngquant4j</artifactId>
             <artifactId>pngquant4j</artifactId>
-            <version>1.0</version>
+            <version>1.0.1</version>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>

+ 23 - 16
src/main/java/com/izouma/nineth/utils/ImageUtils.java

@@ -12,33 +12,40 @@ import java.io.InputStream;
 
 
 public class ImageUtils {
 public class ImageUtils {
 
 
-    public static BufferedImage resizeJpg(InputStream image, int width, int height) throws IOException {
+    public static BufferedImage resizeJpg(InputStream image, int width, int height, boolean compress) throws IOException {
         BufferedImage bufferedImage = ImageIO.read(image);
         BufferedImage bufferedImage = ImageIO.read(image);
+        return resizeJpg(bufferedImage, width, height, compress);
+    }
+
+    public static BufferedImage resizeJpg(BufferedImage bufferedImage, int width, int height, boolean compress) throws IOException {
         return Thumbnails.of(bufferedImage)
         return Thumbnails.of(bufferedImage)
                 .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
                 .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
                 .outputFormat("jpg")
                 .outputFormat("jpg")
+                .outputQuality(compress ? 0.7 : 1.0)
                 .asBufferedImage();
                 .asBufferedImage();
     }
     }
 
 
     public static BufferedImage resizePng(InputStream image, int width, int height, boolean compress) throws IOException {
     public static BufferedImage resizePng(InputStream image, int width, int height, boolean compress) throws IOException {
         BufferedImage bufferedImage = ImageIO.read(image);
         BufferedImage bufferedImage = ImageIO.read(image);
-        BufferedImage img = Thumbnails.of(bufferedImage)
-                .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
-                .outputFormat("png")
-                .asBufferedImage();
-        bufferedImage.flush();
-        return img;
+        return resizePng(bufferedImage, width, height, compress);
     }
     }
 
 
-    public static BufferedImage resizePng1(InputStream image, int width, int height, boolean compress) throws IOException {
-        BufferedImage bufferedImage = ImageIO.read(image);
-        BufferedImage img = Thumbnails.of(bufferedImage)
-                .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
-                .outputFormat("png")
-                .asBufferedImage();
-        bufferedImage.flush();
-        PngQuant pngQuant = new PngQuant();
-        return pngQuant.getRemapped(img);
+    public static BufferedImage resizePng(BufferedImage bufferedImage, int width, int height, boolean compress) throws IOException {
+        if (compress) {
+            BufferedImage img = Thumbnails.of(bufferedImage)
+                    .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
+                    .outputFormat("png")
+                    .outputQuality(1.0)
+                    .asBufferedImage();
+            PngQuant pngQuant = new PngQuant();
+            return pngQuant.getRemapped(img);
+        } else {
+            return Thumbnails.of(bufferedImage)
+                    .size(Math.min(width, bufferedImage.getWidth()), Math.min(height, bufferedImage.getHeight()))
+                    .outputFormat("png")
+                    .outputQuality(1.0)
+                    .asBufferedImage();
+        }
     }
     }
 
 
     public static void main(String[] args) throws IOException {
     public static void main(String[] args) throws IOException {

+ 24 - 112
src/main/java/com/izouma/nineth/web/FileUploadController.java

@@ -57,7 +57,7 @@ public class FileUploadController {
                     + "." + ext;
                     + "." + ext;
         }
         }
 
 
-        if (Pattern.matches("(jpg|png)", ext) && compress) {
+        if (Pattern.matches("(jpg|png)", ext) && (compress || width != null || height != null)) {
             if (width == null && height == null) {
             if (width == null && height == null) {
                 width = Integer.MAX_VALUE;
                 width = Integer.MAX_VALUE;
                 height = Integer.MAX_VALUE;
                 height = Integer.MAX_VALUE;
@@ -68,88 +68,16 @@ public class FileUploadController {
             }
             }
             BufferedImage img = null;
             BufferedImage img = null;
             if ("jpg".equals(ext)) {
             if ("jpg".equals(ext)) {
-                img = ImageUtils.resizeJpg(file.getInputStream(), width, height);
+                img = ImageUtils.resizeJpg(file.getInputStream(), width, height, compress);
             } else if ("png".equals(ext)) {
             } else if ("png".equals(ext)) {
-                img = ImageUtils.resizePng(file.getInputStream(), width, height, true);
-            }
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            ImageIO.write(img, ext, os);
-            InputStream is = new ByteArrayInputStream(os.toByteArray());
-            return storageService.uploadFromInputStream(is, path);
-        } else if (width != null || height != null) {
-            if (height == null) {
-                height = Integer.MAX_VALUE;
-            } else if (width == null) {
-                width = Integer.MAX_VALUE;
-            }
-            BufferedImage img = null;
-            if ("jpg".equals(ext)) {
-                img = ImageUtils.resizeJpg(file.getInputStream(), width, height);
-            } else if ("png".equals(ext)) {
-                img = ImageUtils.resizePng(file.getInputStream(), width, height, false);
+                img = ImageUtils.resizePng(file.getInputStream(), width, height, compress);
             }
             }
+            Objects.requireNonNull(img, "图片压缩失败");
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             ImageIO.write(img, ext, os);
             ImageIO.write(img, ext, os);
             InputStream is = new ByteArrayInputStream(os.toByteArray());
             InputStream is = new ByteArrayInputStream(os.toByteArray());
             return storageService.uploadFromInputStream(is, path);
             return storageService.uploadFromInputStream(is, path);
         }
         }
-
-        return storageService.uploadFromInputStream(file.getInputStream(), path);
-    }
-
-    @PostMapping("/file1")
-    public String uploadFile1(@RequestParam("file") MultipartFile file,
-                             @RequestParam(value = "path", required = false) String path,
-                             @RequestParam(value = "compress", defaultValue = "false") boolean compress,
-                             @RequestParam(value = "width", required = false) Integer width,
-                             @RequestParam(value = "height", required = false) Integer height) throws IOException {
-
-        String ext = Optional.ofNullable(FilenameUtils.getExtension(file.getOriginalFilename())).orElse("")
-                .toLowerCase().replace("jpeg", "jpg");
-        if (path == null) {
-            String basePath = Optional.ofNullable(file.getContentType()).orElse("application").split("/")[0];
-            path = basePath + "/" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())
-                    + RandomStringUtils.randomAlphabetic(8)
-                    + "." + ext;
-        }
-
-        if (Pattern.matches("(jpg|png)", ext) && compress) {
-            if (width == null && height == null) {
-                width = Integer.MAX_VALUE;
-                height = Integer.MAX_VALUE;
-            } else if (height == null) {
-                height = Integer.MAX_VALUE;
-            } else if (width == null) {
-                width = Integer.MAX_VALUE;
-            }
-            BufferedImage img = null;
-            if ("jpg".equals(ext)) {
-                img = ImageUtils.resizeJpg(file.getInputStream(), width, height);
-            } else if ("png".equals(ext)) {
-                img = ImageUtils.resizePng1(file.getInputStream(), width, height, true);
-            }
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            ImageIO.write(img, ext, os);
-            InputStream is = new ByteArrayInputStream(os.toByteArray());
-            return storageService.uploadFromInputStream(is, path);
-        } else if (width != null || height != null) {
-            if (height == null) {
-                height = Integer.MAX_VALUE;
-            } else if (width == null) {
-                width = Integer.MAX_VALUE;
-            }
-            BufferedImage img = null;
-            if ("jpg".equals(ext)) {
-                img = ImageUtils.resizeJpg(file.getInputStream(), width, height);
-            } else if ("png".equals(ext)) {
-                img = ImageUtils.resizePng1(file.getInputStream(), width, height, false);
-            }
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            ImageIO.write(img, ext, os);
-            InputStream is = new ByteArrayInputStream(os.toByteArray());
-            return storageService.uploadFromInputStream(is, path);
-        }
-
         return storageService.uploadFromInputStream(file.getInputStream(), path);
         return storageService.uploadFromInputStream(file.getInputStream(), path);
     }
     }
 
 
@@ -198,7 +126,7 @@ public class FileUploadController {
         String url;
         String url;
 
 
 
 
-        if (Pattern.matches("(jpg|png)", ext) && compress) {
+        if (Pattern.matches("(jpg|png)", ext) && (compress || width != null || height != null)) {
             if (width == null && height == null) {
             if (width == null && height == null) {
                 width = Integer.MAX_VALUE;
                 width = Integer.MAX_VALUE;
                 height = Integer.MAX_VALUE;
                 height = Integer.MAX_VALUE;
@@ -207,27 +135,11 @@ public class FileUploadController {
             } else if (width == null) {
             } else if (width == null) {
                 width = Integer.MAX_VALUE;
                 width = Integer.MAX_VALUE;
             }
             }
-            BufferedImage img = null;
-            if ("jpg".equals(ext)) {
-                img = ImageUtils.resizeJpg(new FileInputStream(tmpFile), width, height);
-            } else {
-                img = ImageUtils.resizePng(new FileInputStream(tmpFile), width, height, true);
-            }
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            ImageIO.write(img, ext, os);
-            InputStream is = new ByteArrayInputStream(os.toByteArray());
-            url = storageService.uploadFromInputStream(is, path);
-        } else if (Pattern.matches("(jpg|png)", ext) && (width != null || height != null)) {
-            if (height == null) {
-                height = Integer.MAX_VALUE;
-            } else if (width == null) {
-                width = Integer.MAX_VALUE;
-            }
-            BufferedImage img = null;
+            BufferedImage img;
             if ("jpg".equals(ext)) {
             if ("jpg".equals(ext)) {
-                img = ImageUtils.resizeJpg(new FileInputStream(tmpFile), width, height);
+                img = ImageUtils.resizeJpg(new FileInputStream(tmpFile), width, height, compress);
             } else {
             } else {
-                img = ImageUtils.resizePng(new FileInputStream(tmpFile), width, height, false);
+                img = ImageUtils.resizePng(new FileInputStream(tmpFile), width, height, compress);
             }
             }
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             ByteArrayOutputStream os = new ByteArrayOutputStream();
             ImageIO.write(img, ext, os);
             ImageIO.write(img, ext, os);
@@ -241,26 +153,26 @@ public class FileUploadController {
 
 
 
 
         if ("mp4".equalsIgnoreCase(ext)) {
         if ("mp4".equalsIgnoreCase(ext)) {
-            FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(tmpFile);
-            frameGrabber.start();
-            Java2DFrameConverter aa = new Java2DFrameConverter();
+            String thumbPath = "thumb_image/" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())
+                    + RandomStringUtils.randomAlphabetic(8) + ".jpg";
 
 
+            FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber(tmpFile);
+            Java2DFrameConverter frameConverter = new Java2DFrameConverter();
             try {
             try {
-                BufferedImage bi;
-                Frame f = frameGrabber.grabKeyFrame();
+                frameGrabber.start();
 
 
-                bi = aa.convert(f);
-                File thumbFile = null;
-                while (bi != null) {
-                    thumbFile = File.createTempFile("video_thumb_", ".jpg");
-                    ImageIO.write(bi, "jpg", thumbFile);
-                    f = frameGrabber.grabKeyFrame();
-                    bi = aa.convert(f);
+                Frame frame = null;
+                while (frame == null) {
+                    frame = frameGrabber.grabKeyFrame();
                 }
                 }
-                Objects.requireNonNull(thumbFile);
-                String thumbPath = "thumb_image/" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())
-                        + RandomStringUtils.randomAlphabetic(8) + ".jpg";
-                thumbUrl = storageService.uploadFromInputStream(new FileInputStream(thumbFile), thumbPath);
+                Objects.requireNonNull(frame, "获取视频缩略图失败");
+                BufferedImage thumbBi = frameConverter.convert(frame);
+
+                BufferedImage thumbResized = ImageUtils.resizeJpg(thumbBi, 1000, 1000, false);
+                ByteArrayOutputStream os = new ByteArrayOutputStream();
+                ImageIO.write(thumbResized, "jpg", os);
+                InputStream is = new ByteArrayInputStream(os.toByteArray());
+                thumbUrl = storageService.uploadFromInputStream(is, thumbPath);
             } catch (Exception e) {
             } catch (Exception e) {
                 e.printStackTrace();
                 e.printStackTrace();
             } finally {
             } finally {

+ 1 - 1
src/main/nine-space/package.json

@@ -25,7 +25,7 @@
     "swiper": "^6.8.1",
     "swiper": "^6.8.1",
     "v-charts": "^1.19.0",
     "v-charts": "^1.19.0",
     "vant": "^3.2.3",
     "vant": "^3.2.3",
-    "vconsole": "^3.9.3",
+    "vconsole": "^3.9.4",
     "vue": "^3.2.20",
     "vue": "^3.2.20",
     "vue-clipboard2": "^0.3.3",
     "vue-clipboard2": "^0.3.3",
     "vue-croppie": "^2.0.2",
     "vue-croppie": "^2.0.2",

+ 2 - 2
src/main/nine-space/src/main.js

@@ -15,8 +15,8 @@ import Driver from './components/Driver.vue';
 import common from './mixins/common';
 import common from './mixins/common';
 import VueClipboard from 'vue-clipboard2';
 import VueClipboard from 'vue-clipboard2';
 import queryString from 'query-string';
 import queryString from 'query-string';
-// import VConsole from 'vconsole';
-// const vConsole = new VConsole();
+import VConsole from 'vconsole';
+const vConsole = new VConsole();
 
 
 createApp(App)
 createApp(App)
     .use(Vant)
     .use(Vant)

+ 21 - 1
src/main/nine-space/src/router/index.js

@@ -10,7 +10,7 @@ function jsapiSign() {
         http.http
         http.http
             .get('/wx/jsapiSign', { url: location.origin + location.pathname })
             .get('/wx/jsapiSign', { url: location.origin + location.pathname })
             .then(res => {
             .then(res => {
-                res.debug = false;
+                res.debug = true;
                 res.jsApiList = [
                 res.jsApiList = [
                     'chooseWXPay',
                     'chooseWXPay',
                     'updateAppMessageShareData',
                     'updateAppMessageShareData',
@@ -19,6 +19,26 @@ function jsapiSign() {
                     'scanQRCode'
                     'scanQRCode'
                 ];
                 ];
                 wx.config(res);
                 wx.config(res);
+                wx.ready(function () {
+                    wx.updateAppMessageShareData({
+                        title: '第九空间',
+                        desc: '全球首个基于区块链的游戏资产集换中心',
+                        link: location.origin + '/9th',
+                        imgUrl: 'https://9space-2021.oss-cn-shenzhen.aliyuncs.com/nft/2021-11-05-15-58-30YwqLzMjy.jpg',
+                        success: function () {
+                            console.log('success');
+                        },
+                        fail: function (e) {
+                            console.log(e);
+                        }
+                    });
+                    wx.updateTimelineShareData({
+                        title: '第九空间-全球首个基于区块链的游戏资产集换中心',
+                        link: location.origin + '/9th',
+                        imgUrl: 'https://9space-2021.oss-cn-shenzhen.aliyuncs.com/nft/2021-11-05-15-58-30YwqLzMjy.jpg',
+                        success: function () {}
+                    });
+                });
             })
             })
             .catch(e => {});
             .catch(e => {});
     }
     }

+ 4 - 4
src/main/nine-space/yarn.lock

@@ -8968,10 +8968,10 @@ vary@~1.1.2:
   resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
   resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
   integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
   integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
 
 
-vconsole@^3.9.3:
-  version "3.9.3"
-  resolved "https://registry.npmjs.org/vconsole/-/vconsole-3.9.3.tgz"
-  integrity sha512-zCkS85C21pyE+hJ+QEPFK6MVtkwc3XQE/ccvEnWPKq/Z9eMSOfSHOmBwoqZtYm7pnR+GTuJOsoDB8fvK3YuJTA==
+vconsole@^3.9.4:
+  version "3.9.4"
+  resolved "https://registry.npmmirror.com/vconsole/download/vconsole-3.9.4.tgz?cache=0&sync_timestamp=1635252962357&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fvconsole%2Fdownload%2Fvconsole-3.9.4.tgz#a54356b12fc63456503762f687a65f9c470f968d"
+  integrity sha1-pUNWsS/GNFZQN2L2h6ZfnEcPlo0=
   dependencies:
   dependencies:
     "@fortawesome/free-solid-svg-icons" "^5.15.3"
     "@fortawesome/free-solid-svg-icons" "^5.15.3"
     cookie-storage "^6.1.0"
     cookie-storage "^6.1.0"

+ 3 - 1
src/main/pc-space/src/components/FansInfo.vue

@@ -37,8 +37,9 @@
 </template>
 </template>
 <script>
 <script>
 import user from '../mixins/user';
 import user from '../mixins/user';
+import pageableTable from '../mixins/pageableTable';
 export default {
 export default {
-    mixins: [user],
+    mixins: [user, pageableTable],
     props: {
     props: {
         info: {
         info: {
             type: Object,
             type: Object,
@@ -75,6 +76,7 @@ export default {
         .box {
         .box {
             .flex();
             .flex();
             justify-content: space-between;
             justify-content: space-between;
+            margin-bottom: 20px;
             .text {
             .text {
                 .flex();
                 .flex();
                 justify-content: space-between;
                 justify-content: space-between;

+ 46 - 8
src/main/pc-space/src/mixins/list.js

@@ -4,7 +4,10 @@ export default {
             empty: false,
             empty: false,
             loading: false,
             loading: false,
             finished: false,
             finished: false,
-            page: 0
+            page: 0,
+            pageSize: 20,
+            totalPages: 0,
+            totalElements: 0
         };
         };
     },
     },
     methods: {
     methods: {
@@ -16,8 +19,8 @@ export default {
             }
             }
 
 
             this.loading = true;
             this.loading = true;
-            this.finished = false;
-            this.empty = false;
+            // this.finished = false;
+            // this.empty = false;
             let data = { page: this.page, size: 20, sort: 'createdAt,desc' };
             let data = { page: this.page, size: 20, sort: 'createdAt,desc' };
             if (this.beforeData) {
             if (this.beforeData) {
                 data = {
                 data = {
@@ -27,14 +30,49 @@ export default {
             }
             }
 
 
             this.$http.post(this.url, data, { body: 'json' }).then(res => {
             this.$http.post(this.url, data, { body: 'json' }).then(res => {
-                this.list = [...this.list, ...res.content];
-                this.empty = res.empty;
+                if (this.setList) {
+                    this.setList(res.content);
+                }
+                this.totalPages = res.totalPages;
+                this.totalElements = res.totalElements;
+                // this.list = [...this.list, ...res.content];
+                // this.empty = res.empty;
                 this.loading = false;
                 this.loading = false;
-                this.finished = res.last;
-                if (!this.finished) {
-                    this.page = this.page + 1;
+                // this.finished = res.last;
+                // if (!this.finished) {
+                //     this.page = this.page + 1;
+                // }
+            });
+        },
+        onSearch() {
+            this.$router.push({
+                query: {
+                    ...this.$route.query,
+                    search: this.search
+                }
+            });
+            this.page = 1;
+            this.getData();
+        },
+        onSortChange(e) {
+            this.sort = e;
+            this.getData();
+        },
+        onSizeChange(e) {
+            localStorage.setItem('pageSize', e);
+            this.page = 1;
+            this.pageSize = e;
+            this.getData();
+        },
+        onCurrentChange(e) {
+            this.$router.push({
+                query: {
+                    ...this.$route.query,
+                    page: e
                 }
                 }
             });
             });
+            this.page = e;
+            this.getData();
         }
         }
     }
     }
 };
 };

+ 1 - 0
src/main/pc-space/src/mixins/pageableTable.js

@@ -67,6 +67,7 @@ export default {
                     body: 'json'
                     body: 'json'
                 })
                 })
                 .then(res => {
                 .then(res => {
+                    console.log(res);
                     this.fetchingData = false;
                     this.fetchingData = false;
                     if (this.setList) {
                     if (this.setList) {
                         this.setList(res.content);
                         this.setList(res.content);

+ 45 - 14
src/main/pc-space/src/router/index.js

@@ -13,7 +13,7 @@ import eventBus from '../eventBus';
 const routes = [
 const routes = [
     {
     {
         path: '/',
         path: '/',
-        redirect: 'home'
+        redirect: 'mylikes'
     },
     },
     {
     {
         path: '/',
         path: '/',
@@ -93,7 +93,8 @@ const routes = [
                         name: 'accountdata',
                         name: 'accountdata',
                         component: () => import('../views/user/AccountData.vue'),
                         component: () => import('../views/user/AccountData.vue'),
                         meta: {
                         meta: {
-                            title: '资料账号'
+                            title: '资料账号',
+                            checkLogin: true
                         }
                         }
                     },
                     },
                     {
                     {
@@ -101,7 +102,8 @@ const routes = [
                         name: 'address',
                         name: 'address',
                         component: () => import('../views/user/Address.vue'),
                         component: () => import('../views/user/Address.vue'),
                         meta: {
                         meta: {
-                            title: '地址管理'
+                            title: '地址管理',
+                            checkLogin: true
                         }
                         }
                     },
                     },
                     {
                     {
@@ -109,7 +111,8 @@ const routes = [
                         name: 'give',
                         name: 'give',
                         component: () => import('../views/user/Give.vue'),
                         component: () => import('../views/user/Give.vue'),
                         meta: {
                         meta: {
-                            title: '我赞过的'
+                            title: '我赞过的',
+                            checkLogin: true
                         }
                         }
                     },
                     },
                     {
                     {
@@ -117,7 +120,8 @@ const routes = [
                         name: 'mylikes',
                         name: 'mylikes',
                         component: () => import('../views/user/MyLikes.vue'),
                         component: () => import('../views/user/MyLikes.vue'),
                         meta: {
                         meta: {
-                            title: '藏品订单'
+                            title: '藏品订单',
+                            checkLogin: true
                         }
                         }
                     },
                     },
                     {
                     {
@@ -125,7 +129,26 @@ const routes = [
                         name: 'payrecord',
                         name: 'payrecord',
                         component: () => import('../views/user/PayRecord.vue'),
                         component: () => import('../views/user/PayRecord.vue'),
                         meta: {
                         meta: {
-                            title: '支付记录'
+                            title: '支付记录',
+                            checkLogin: true
+                        }
+                    },
+                    {
+                        path: '/transactionordes',
+                        name: 'transactionordes',
+                        component: () => import('../views/user/TransactionOrdes.vue'),
+                        meta: {
+                            title: '交易记录',
+                            checkLogin: true
+                        }
+                    },
+                    {
+                        path: '/ordervalue',
+                        name: 'ordervalue',
+                        component: () => import('../views/user/OrderValue.vue'),
+                        meta: {
+                            title: '价值证明',
+                            checkLogin: true
                         }
                         }
                     }
                     }
                 ]
                 ]
@@ -135,7 +158,8 @@ const routes = [
                 name: 'security',
                 name: 'security',
                 component: () => import('../views/user/Security.vue'),
                 component: () => import('../views/user/Security.vue'),
                 meta: {
                 meta: {
-                    title: '修改登录账号'
+                    title: '修改登录账号',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -143,7 +167,8 @@ const routes = [
                 name: 'securitysuccess',
                 name: 'securitysuccess',
                 component: () => import('../views/user/SecuritySuccess.vue'),
                 component: () => import('../views/user/SecuritySuccess.vue'),
                 meta: {
                 meta: {
-                    title: '修改登录账号'
+                    title: '修改登录账号',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -151,7 +176,8 @@ const routes = [
                 name: 'transaction',
                 name: 'transaction',
                 component: () => import('../views/user/Transaction.vue'),
                 component: () => import('../views/user/Transaction.vue'),
                 meta: {
                 meta: {
-                    title: '修改交易密码'
+                    title: '修改交易密码',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -159,7 +185,8 @@ const routes = [
                 name: 'transactionsuccess',
                 name: 'transactionsuccess',
                 component: () => import('../views/user/TransactionSuccess.vue'),
                 component: () => import('../views/user/TransactionSuccess.vue'),
                 meta: {
                 meta: {
-                    title: '修改交易密码'
+                    title: '修改交易密码',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -167,7 +194,8 @@ const routes = [
                 name: 'modifypad',
                 name: 'modifypad',
                 component: () => import('../views/user/Modifypad.vue'),
                 component: () => import('../views/user/Modifypad.vue'),
                 meta: {
                 meta: {
-                    title: '修改密码'
+                    title: '修改密码',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -175,7 +203,8 @@ const routes = [
                 name: 'authentication',
                 name: 'authentication',
                 component: () => import('../views/user/Authentication.vue'),
                 component: () => import('../views/user/Authentication.vue'),
                 meta: {
                 meta: {
-                    title: '认证'
+                    title: '认证',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -183,7 +212,8 @@ const routes = [
                 name: 'userauthentication',
                 name: 'userauthentication',
                 component: () => import('../views/user/UserAuthentication.vue'),
                 component: () => import('../views/user/UserAuthentication.vue'),
                 meta: {
                 meta: {
-                    title: '个人认证'
+                    title: '个人认证',
+                    checkLogin: true
                 }
                 }
             },
             },
             {
             {
@@ -191,7 +221,8 @@ const routes = [
                 name: 'enterpriseauthentication',
                 name: 'enterpriseauthentication',
                 component: () => import('../views/user/EnterpriseAuthentication.vue'),
                 component: () => import('../views/user/EnterpriseAuthentication.vue'),
                 meta: {
                 meta: {
-                    title: '企业认证'
+                    title: '企业认证',
+                    checkLogin: true
                 }
                 }
             }
             }
         ]
         ]

+ 26 - 1
src/main/pc-space/src/styles/common.less

@@ -39,7 +39,32 @@
     -webkit-line-clamp: @line;
     -webkit-line-clamp: @line;
     overflow: hidden;
     overflow: hidden;
 }
 }
-
+.pagination(){
+     display: flex;
+     margin: 80px 375px;
+
+     /deep/.el-pagination {
+         button:disabled {
+             background-color: transparent;
+             color: #939599;
+         }
+
+         .btn-next,
+         .btn-prev {
+             background: transparent;
+             color: #939599;
+         }
+
+         .el-pager li {
+             background-color: transparent;
+             color: #939599;
+
+             &.active {
+                 color: @prim;
+             }
+         }
+     }
+}
 .min-height(@subHeight:462px, @screenHeight:969px) {
 .min-height(@subHeight:462px, @screenHeight:969px) {
     min-height: calc(100vh - @subHeight);
     min-height: calc(100vh - @subHeight);
     @media screen and (max-height: @screenHeight) {
     @media screen and (max-height: @screenHeight) {

+ 0 - 3
src/main/pc-space/src/views/CollectionDetail.vue

@@ -181,9 +181,6 @@ export default {
     mixins: [product],
     mixins: [product],
     data() {
     data() {
         return {
         return {
-            showMore: false,
-            showMore1: false,
-            showMore2: false,
             tableData: [],
             tableData: [],
             info: {},
             info: {},
             blindBoxItems: [],
             blindBoxItems: [],

+ 2 - 4
src/main/pc-space/src/views/user/AccountData.vue

@@ -27,7 +27,7 @@
         </div>
         </div>
         <div v-if="empty">
         <div v-if="empty">
             <div class="border2"></div>
             <div class="border2"></div>
-            <el-empty description="还没有粉丝哦~"></el-empty>
+            <el-empty description="还没有哦~"></el-empty>
         </div>
         </div>
 
 
         <div class="content" v-if="active !== '关注' && active !== '粉丝'">
         <div class="content" v-if="active !== '关注' && active !== '粉丝'">
@@ -167,7 +167,6 @@ export default {
                     } else {
                     } else {
                         this.empty = false;
                         this.empty = false;
                     }
                     }
-                    // console.log(res);
                 });
                 });
             } else {
             } else {
                 this.$http.get('/user/myFollowers').then(res => {
                 this.$http.get('/user/myFollowers').then(res => {
@@ -177,7 +176,6 @@ export default {
                     } else {
                     } else {
                         this.empty = false;
                         this.empty = false;
                     }
                     }
-                    // console.log(res);
                 });
                 });
             }
             }
         },
         },
@@ -221,7 +219,7 @@ export default {
     }
     }
     /deep/ .el-empty__description {
     /deep/ .el-empty__description {
         color: #ccc;
         color: #ccc;
-        margin: 10px 0 0 2px;
+        margin: 10px 0 0 17px;
     }
     }
     .top {
     .top {
         height: 146px;
         height: 146px;

+ 21 - 4
src/main/pc-space/src/views/user/Address.vue

@@ -12,10 +12,10 @@
                 :data="tableData"
                 :data="tableData"
                 :border="false"
                 :border="false"
                 :highlight-current-row="false"
                 :highlight-current-row="false"
-                style="width: 100%"
+                style="width: 100%; background: #1c1e26"
             >
             >
-                <el-table-column prop="name" label="收货人" width="180"> </el-table-column>
-                <el-table-column prop="phone" label="联系电话" width="180"> </el-table-column>
+                <el-table-column prop="name" label="收货人" width="200"> </el-table-column>
+                <el-table-column prop="phone" label="联系电话" width="200"> </el-table-column>
                 <el-table-column prop="region" label="所在地区" width="220"> </el-table-column>
                 <el-table-column prop="region" label="所在地区" width="220"> </el-table-column>
                 <el-table-column prop="address" label="详情地址" width="220"> </el-table-column>
                 <el-table-column prop="address" label="详情地址" width="220"> </el-table-column>
                 <el-table-column fixed="right" label="操作" width="100">
                 <el-table-column fixed="right" label="操作" width="100">
@@ -29,6 +29,18 @@
             </el-table>
             </el-table>
         </template>
         </template>
         <address-info :show="show" @close="show = false" ref="address"></address-info>
         <address-info :show="show" @close="show = false" ref="address"></address-info>
+        <div class="pagination-wrapper">
+            <el-pagination
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, prev, pager, next"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
     </div>
     </div>
 </template>
 </template>
 
 
@@ -95,7 +107,12 @@ export default {
         color: #ffffff;
         color: #ffffff;
     }
     }
 }
 }
-
+/deep/ .el-table__empty-text {
+    padding-top: 150px;
+}
+.pagination-wrapper {
+    .pagination();
+}
 .container {
 .container {
     padding: 45px 16px 0;
     padding: 45px 16px 0;
 
 

+ 1 - 16
src/main/pc-space/src/views/user/Give.vue

@@ -15,7 +15,6 @@
                     placeholder="请输入您想找到的作品名称…"
                     placeholder="请输入您想找到的作品名称…"
                     v-model="search"
                     v-model="search"
                     clearable
                     clearable
-                    @change="onSearch"
                 >
                 >
                 </el-input>
                 </el-input>
             </div>
             </div>
@@ -79,7 +78,6 @@ export default {
             return [...this.list]
             return [...this.list]
                 .map((item, index) => {
                 .map((item, index) => {
                     return {
                     return {
-                        search: this.search,
                         ...item,
                         ...item,
                         index
                         index
                     };
                     };
@@ -92,20 +90,7 @@ export default {
             return this.showList.length ? false : true;
             return this.showList.length ? false : true;
         }
         }
     },
     },
-    // watch: {
-    //     showList() {
-    //         return [...this.list]
-    //             .map((item, index) => {
-    //                 return {
-    //                     ...item,
-    //                     index
-    //                 };
-    //             })
-    //             .filter(item => {
-    //                 return !this.type || this.type === item.type;
-    //             });
-    //     }
-    // },
+    watch: {},
     mounted() {
     mounted() {
         this.init();
         this.init();
     },
     },

+ 79 - 47
src/main/pc-space/src/views/user/MyLikes.vue

@@ -28,14 +28,14 @@
                 :data="tableData"
                 :data="tableData"
                 :border="false"
                 :border="false"
                 :highlight-current-row="false"
                 :highlight-current-row="false"
-                style="width: 100%"
+                style="width: 100%; background: #1c1e26"
             >
             >
                 <el-table-column prop="name" label="藏品信息" width="158"> </el-table-column>
                 <el-table-column prop="name" label="藏品信息" width="158"> </el-table-column>
-                <el-table-column prop="phone" label="卖家" width="104"> </el-table-column>
+                <el-table-column prop="sotorename" label="卖家" width="104"> </el-table-column>
                 <el-table-column prop="region" label="买方" width="104"> </el-table-column>
                 <el-table-column prop="region" label="买方" width="104"> </el-table-column>
                 <el-table-column style="color: #fdfb60" prop="price" label="金额" width="100"> </el-table-column>
                 <el-table-column style="color: #fdfb60" prop="price" label="金额" width="100"> </el-table-column>
-                <el-table-column prop="address" label="订单编号" width="120"> </el-table-column>
-                <el-table-column prop="time" label="成交时间" width="158"> </el-table-column>
+                <el-table-column prop="id" label="订单编号" width="120"> </el-table-column>
+                <el-table-column prop="createdAt" label="成交时间" width="158"> </el-table-column>
                 <el-table-column style="color: #fdfb60" prop="status" label="状态" width="68"> </el-table-column>
                 <el-table-column style="color: #fdfb60" prop="status" label="状态" width="68"> </el-table-column>
                 <el-table-column fixed="right" label="操作">
                 <el-table-column fixed="right" label="操作">
                     <template slot-scope="scope">
                     <template slot-scope="scope">
@@ -46,31 +46,32 @@
                 </el-table-column>
                 </el-table-column>
             </el-table>
             </el-table>
         </template>
         </template>
+        <div class="pagination-wrapper">
+            <el-pagination
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, prev, pager, next"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
     </div>
     </div>
 </template>
 </template>
 
 
 <script>
 <script>
 import { mapState } from 'vuex';
 import { mapState } from 'vuex';
-import pageableTable from '../../mixins/pageableTable';
+import list from '../../mixins/list';
 export default {
 export default {
     data() {
     data() {
         return {
         return {
-            tableData: [
-                {
-                    id: 1104,
-                    name: '1',
-                    phone: '1',
-                    region: '1',
-                    price: 1,
-                    time: '12:20',
-                    status: '交易中',
-                    address: '1 1518 弄'
-                }
-            ],
+            tableData: [],
             typeList: [
             typeList: [
                 {
                 {
                     label: '全部',
                     label: '全部',
-                    value: ''
+                    value: 'PROCESSING,FINISH'
                 },
                 },
                 {
                 {
                     label: '交易中',
                     label: '交易中',
@@ -81,19 +82,59 @@ export default {
                     value: 'FINISH'
                     value: 'FINISH'
                 }
                 }
             ],
             ],
-            list: [],
+            type: 'PROCESSING,FINISH',
+            url: '/order/all',
             search: '',
             search: '',
-            type: ''
+            list: []
         };
         };
     },
     },
-    mixins: [pageableTable],
+    mixins: [list],
 
 
     computed: {
     computed: {
         ...mapState(['userInfo'])
         ...mapState(['userInfo'])
     },
     },
-    mounted() {},
+    watch: {
+        type() {
+            this.$router
+                .replace({
+                    search: this.search,
+                    query: {
+                        userId: this.userInfo.id,
+                        type: this.type
+                    }
+                })
+                .catch(() => {});
+            this.getData();
+        }
+    },
+    mounted() {
+        this.getData();
+    },
     methods: {
     methods: {
-        handleClick() {}
+        beforeData() {
+            return {
+                search: this.search,
+                query: {
+                    userId: this.userInfo.id,
+                    status: this.type
+                }
+            };
+        },
+        setList(list) {
+            this.tableData = list;
+        },
+        handleClick(row) {
+            this.$confirm('确定删除该订单吗?', '警告', {
+                confirmButtonText: '确定',
+                cancelButtonText: '退出',
+                type: 'warning'
+            }).then(() => {
+                this.$http.get('/order/del' + row.id).then(() => {
+                    this.getData();
+                    console.log('删除成功');
+                });
+            });
+        }
     }
     }
 };
 };
 </script>
 </script>
@@ -108,6 +149,15 @@ export default {
         color: #ffffff;
         color: #ffffff;
     }
     }
 }
 }
+/deep/ .el-table__empty-text {
+    padding-top: 150px;
+}
+/deep/ .el-table__empty-block {
+    background: #1c1e26 !important;
+}
+.pagination-wrapper {
+    .pagination();
+}
 .search {
 .search {
     background: #1a1a1a;
     background: #1a1a1a;
     width: 280px;
     width: 280px;
@@ -130,6 +180,10 @@ export default {
         background-color: transparent;
         background-color: transparent;
         color: #949699;
         color: #949699;
         width: 140px;
         width: 140px;
+        height: 42px;
+        span {
+            font-size: 16px !important;
+        }
     }
     }
     .el-radio-button__orig-radio:checked + .el-radio-button__inner {
     .el-radio-button__orig-radio:checked + .el-radio-button__inner {
         background: linear-gradient(46deg, @prim 0%, @warn 100%);
         background: linear-gradient(46deg, @prim 0%, @warn 100%);
@@ -137,6 +191,7 @@ export default {
         border-color: #fff;
         border-color: #fff;
     }
     }
     .el-radio-button {
     .el-radio-button {
+        font-size: 16px !important;
         &:last-child {
         &:last-child {
             .el-radio-button__inner {
             .el-radio-button__inner {
                 border-radius: 0 8px 8px 0;
                 border-radius: 0 8px 8px 0;
@@ -165,34 +220,11 @@ export default {
     }
     }
 }
 }
 .container {
 .container {
-    padding: 45px 16px 0;
+    padding: 30px 16px 0;
 
 
     .top {
     .top {
         .flex();
         .flex();
         justify-content: space-between;
         justify-content: space-between;
-        .text1 {
-            font-size: 14px;
-            font-weight: 400;
-            color: #ffffff;
-            line-height: 25px;
-        }
-        .text2 {
-            width: 106px;
-            height: 42px;
-            border-radius: 8px;
-            border: 1px solid #939599;
-            line-height: 42px;
-            text-align: center;
-            font-size: 14px;
-            color: #939599;
-            cursor: pointer;
-        }
-        span {
-            width: 26px !important;
-            height: 26px !important;
-            // font-size: 16px;
-            color: #939599;
-        }
     }
     }
     .border {
     .border {
         height: 1px;
         height: 1px;

+ 218 - 0
src/main/pc-space/src/views/user/OrderValue.vue

@@ -0,0 +1,218 @@
+<template>
+    <div class="container">
+        <div class="top">
+            <div class="pay">价值证明</div>
+            <div class="search-list">
+                <el-input
+                    class="search"
+                    prefix-icon="el-icon-search"
+                    placeholder="请输入您想找到的作品名称…"
+                    v-model="search"
+                    clearable
+                    @change="onSearch"
+                >
+                </el-input>
+            </div>
+        </div>
+        <div class="border"></div>
+        <template>
+            <el-table
+                class="customer-table"
+                :header-cell-style="{ background: '#1c1e26' }"
+                :data="tableData"
+                :border="false"
+                :highlight-current-row="false"
+                style="width: 100%; background: #1c1e26"
+            >
+                <el-table-column prop="name" label="商品信息" width="178"> </el-table-column>
+                <el-table-column prop="id" label="订单编号" width="184"> </el-table-column>
+                <el-table-column style="color: #fdfb60" prop="payTime" label="交易时间" width="190"> </el-table-column>
+                <el-table-column prop="totalPrice" label="实际金额" width="140"> </el-table-column>
+                <el-table-column prop="payMethod" label="收益类型" width="140"> </el-table-column>
+                <el-table-column prop="right" label="收益金额"> </el-table-column>
+            </el-table>
+        </template>
+        <div class="pagination-wrapper">
+            <el-pagination
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, prev, pager, next"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import list from '../../mixins/list';
+export default {
+    data() {
+        return {
+            tableData: [],
+            url: '/order/all',
+            search: '',
+            list: []
+        };
+    },
+    mixins: [list],
+
+    computed: {
+        ...mapState(['userInfo'])
+    },
+    mounted() {
+        this.getData();
+    },
+    methods: {
+        beforeData() {
+            return {
+                search: this.search,
+                query: {
+                    userId: this.userInfo.id
+                }
+            };
+        },
+        setList(list) {
+            this.tableData = list;
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .el-table__header {
+    background: #1c1e26 !important;
+}
+/deep/ .el-table__row {
+    background: #1c1e26 !important;
+    .cell {
+        color: #ffffff;
+    }
+}
+/deep/ .el-table__empty-block {
+    background: #1c1e26 !important;
+}
+/deep/ .el-table__empty-text {
+    padding-top: 150px !important;
+}
+.pagination-wrapper {
+    .pagination();
+}
+.search {
+    background: #1a1a1a;
+    width: 280px;
+    height: 42px;
+    border-radius: 8px;
+
+    /deep/.el-input__inner {
+        border: 1px solid #898989;
+        background-color: transparent;
+        color: #fff;
+        border-radius: 8px;
+        &:focus {
+            border-color: #fff;
+        }
+    }
+}
+/deep/ .el-empty {
+    margin: 0 auto;
+}
+.search-list {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .select {
+        /deep/.el-input__inner {
+            background-color: transparent;
+            color: #fff;
+        }
+    }
+}
+.container {
+    padding: 45px 16px 0;
+
+    .top {
+        .flex();
+        justify-content: space-between;
+        .pay {
+            font-size: 18px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 28px;
+        }
+        .text1 {
+            font-size: 14px;
+            font-weight: 400;
+            color: #ffffff;
+            line-height: 25px;
+        }
+        .text2 {
+            width: 106px;
+            height: 42px;
+            border-radius: 8px;
+            border: 1px solid #939599;
+            line-height: 42px;
+            text-align: center;
+            font-size: 14px;
+            color: #939599;
+            cursor: pointer;
+        }
+        span {
+            width: 26px !important;
+            height: 26px !important;
+            // font-size: 16px;
+            color: #939599;
+        }
+    }
+    .border {
+        height: 1px;
+        background: #494a4d;
+        border-radius: 1px;
+        margin: 24px 0 34px;
+    }
+}
+</style>
+<style lang="less">
+.customer-table th {
+    border: none !important;
+}
+.customer-table td,
+.customer-table th.is-leaf {
+    border: none;
+}
+//表格最外边框
+.el-table--border,
+.el-table--group {
+    border: none;
+}
+// 头部边框
+.customer-table thead tr th.is-leaf {
+    border: 1px solid #ebeef5;
+    border-right: none;
+}
+.customer-table thead tr th:nth-last-of-type(2) {
+    border-right: 1px solid #ebeef5;
+}
+// 表格最外层边框-底部边框
+.el-table--border::after,
+.el-table--group::after {
+    width: 0;
+}
+.customer-table::before {
+    width: 0;
+}
+.customer-table .el-table__fixed-right::before,
+.el-table__fixed::before {
+    width: 0;
+}
+//表格有滚动时表格头边框
+.el-table--border th.gutter:last-of-type {
+    border: 1px solid #ebeef5;
+    border-left: none;
+}
+</style>

+ 236 - 0
src/main/pc-space/src/views/user/PayRecord.vue

@@ -0,0 +1,236 @@
+<template>
+    <div class="container">
+        <div class="top">
+            <div class="pay">支付记录</div>
+            <div class="search-list">
+                <el-input
+                    class="search"
+                    prefix-icon="el-icon-search"
+                    placeholder="请输入您想找到的作品名称…"
+                    v-model="search"
+                    clearable
+                    @change="onSearch"
+                >
+                </el-input>
+            </div>
+        </div>
+        <div class="border"></div>
+        <template>
+            <el-table
+                class="customer-table"
+                :header-cell-style="{ background: '#1c1e26' }"
+                :data="tableData"
+                :border="false"
+                :highlight-current-row="false"
+                style="width: 100%; background: #1c1e26"
+            >
+                <el-table-column prop="payMethod" label="支付类型" width="158"> </el-table-column>
+                <el-table-column prop="name" label="藏品信息" width="164"> </el-table-column>
+                <el-table-column style="color: #fdfb60" prop="price" label="金额" width="130"> </el-table-column>
+                <el-table-column prop="id" label="订单编号" width="190"> </el-table-column>
+                <el-table-column prop="payTime" label="支付时间" width="198"> </el-table-column>
+                <el-table-column fixed="right" label="操作">
+                    <template slot-scope="scope">
+                        <el-button @click="handleClick(scope.row)" style="color: red" type="text" size="small"
+                            >删除</el-button
+                        >
+                    </template>
+                </el-table-column>
+            </el-table>
+        </template>
+        <div class="pagination-wrapper">
+            <el-pagination
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, prev, pager, next"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import list from '../../mixins/list';
+export default {
+    data() {
+        return {
+            tableData: [],
+            url: '/order/all',
+            search: '',
+            list: []
+        };
+    },
+    mixins: [list],
+
+    computed: {
+        ...mapState(['userInfo'])
+    },
+    mounted() {
+        this.getData();
+    },
+    methods: {
+        beforeData() {
+            return {
+                search: this.search,
+                query: {
+                    userId: this.userInfo.id
+                }
+            };
+        },
+        setList(list) {
+            this.tableData = list;
+        },
+        handleClick(row) {
+            this.$confirm('确定删除该订单吗?', '警告', {
+                confirmButtonText: '确定',
+                cancelButtonText: '退出',
+                type: 'warning'
+            }).then(() => {
+                this.$http.get('/order/del' + row.id).then(() => {
+                    this.getData();
+                    console.log('删除成功');
+                });
+            });
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .el-table__header {
+    background: #1c1e26 !important;
+}
+/deep/ .el-table__row {
+    background: #1c1e26 !important;
+    .cell {
+        color: #ffffff;
+    }
+}
+/deep/ .el-table__empty-block {
+    background: #1c1e26 !important;
+}
+/deep/ .el-table__empty-text {
+    padding-top: 150px !important;
+}
+.pagination-wrapper {
+    .pagination();
+}
+.search {
+    background: #1a1a1a;
+    width: 280px;
+    height: 42px;
+    border-radius: 8px;
+
+    /deep/.el-input__inner {
+        border: 1px solid #898989;
+        background-color: transparent;
+        color: #fff;
+        border-radius: 8px;
+        &:focus {
+            border-color: #fff;
+        }
+    }
+}
+/deep/ .el-empty {
+    margin: 0 auto;
+}
+.search-list {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .select {
+        /deep/.el-input__inner {
+            background-color: transparent;
+            color: #fff;
+        }
+    }
+}
+.container {
+    padding: 45px 16px 0;
+
+    .top {
+        .flex();
+        justify-content: space-between;
+        .pay {
+            font-size: 18px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 28px;
+        }
+        .text1 {
+            font-size: 14px;
+            font-weight: 400;
+            color: #ffffff;
+            line-height: 25px;
+        }
+        .text2 {
+            width: 106px;
+            height: 42px;
+            border-radius: 8px;
+            border: 1px solid #939599;
+            line-height: 42px;
+            text-align: center;
+            font-size: 14px;
+            color: #939599;
+            cursor: pointer;
+        }
+        span {
+            width: 26px !important;
+            height: 26px !important;
+            // font-size: 16px;
+            color: #939599;
+        }
+    }
+    .border {
+        height: 1px;
+        background: #494a4d;
+        border-radius: 1px;
+        margin: 24px 0 34px;
+    }
+}
+</style>
+<style lang="less">
+.customer-table th {
+    border: none !important;
+}
+.customer-table td,
+.customer-table th.is-leaf {
+    border: none;
+}
+//表格最外边框
+.el-table--border,
+.el-table--group {
+    border: none;
+}
+// 头部边框
+.customer-table thead tr th.is-leaf {
+    border: 1px solid #ebeef5;
+    border-right: none;
+}
+.customer-table thead tr th:nth-last-of-type(2) {
+    border-right: 1px solid #ebeef5;
+}
+// 表格最外层边框-底部边框
+.el-table--border::after,
+.el-table--group::after {
+    width: 0;
+}
+.customer-table::before {
+    width: 0;
+}
+.customer-table .el-table__fixed-right::before,
+.el-table__fixed::before {
+    width: 0;
+}
+//表格有滚动时表格头边框
+.el-table--border th.gutter:last-of-type {
+    border: 1px solid #ebeef5;
+    border-left: none;
+}
+</style>

+ 4 - 8
src/main/pc-space/src/views/user/Personal.vue

@@ -24,6 +24,9 @@
                         <span>交易信息</span>
                         <span>交易信息</span>
                     </template>
                     </template>
                     <el-menu-item index="/mylikes">藏品订单</el-menu-item>
                     <el-menu-item index="/mylikes">藏品订单</el-menu-item>
+                    <el-menu-item index="/payrecord">支付记录</el-menu-item>
+                    <el-menu-item index="/transactionordes">交易记录</el-menu-item>
+                    <el-menu-item index="/ordervalue">价值证明</el-menu-item>
                 </el-submenu>
                 </el-submenu>
                 <el-submenu index="3">
                 <el-submenu index="3">
                     <template slot="title">
                     <template slot="title">
@@ -43,14 +46,7 @@ export default {
     data() {
     data() {
         return {};
         return {};
     },
     },
-    methods: {
-        handleOpen(key, keyPath) {
-            console.log(key, keyPath);
-        },
-        handleClose(key, keyPath) {
-            console.log(key, keyPath);
-        }
-    }
+    methods: {}
 };
 };
 </script>
 </script>
 <style lang="less" scoped>
 <style lang="less" scoped>

+ 236 - 0
src/main/pc-space/src/views/user/TransactionOrdes.vue

@@ -0,0 +1,236 @@
+<template>
+    <div class="container">
+        <div class="top">
+            <div class="pay">交易记录</div>
+            <div class="search-list">
+                <el-input
+                    class="search"
+                    prefix-icon="el-icon-search"
+                    placeholder="请输入您想找到的作品名称…"
+                    v-model="search"
+                    clearable
+                    @change="onSearch"
+                >
+                </el-input>
+            </div>
+        </div>
+        <div class="border"></div>
+        <template>
+            <el-table
+                class="customer-table"
+                :header-cell-style="{ background: '#1c1e26' }"
+                :data="tableData"
+                :border="false"
+                :highlight-current-row="false"
+                style="width: 100%; background: #1c1e26"
+            >
+                <el-table-column prop="payMethod" label="交易类型" width="158"> </el-table-column>
+                <el-table-column prop="name" label="藏品信息" width="164"> </el-table-column>
+                <el-table-column style="color: #fdfb60" prop="store" label="来源" width="130"> </el-table-column>
+                <el-table-column prop="username" label="去向" width="190"> </el-table-column>
+                <el-table-column prop="payTime" label="交易时间" width="198"> </el-table-column>
+                <el-table-column fixed="right" label="操作">
+                    <template slot-scope="scope">
+                        <el-button @click="handleClick(scope.row)" style="color: red" type="text" size="small"
+                            >删除</el-button
+                        >
+                    </template>
+                </el-table-column>
+            </el-table>
+        </template>
+        <div class="pagination-wrapper">
+            <el-pagination
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, prev, pager, next"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
+    </div>
+</template>
+
+<script>
+import { mapState } from 'vuex';
+import list from '../../mixins/list';
+export default {
+    data() {
+        return {
+            tableData: [],
+            url: '/order/all',
+            search: '',
+            list: []
+        };
+    },
+    mixins: [list],
+
+    computed: {
+        ...mapState(['userInfo'])
+    },
+    mounted() {
+        this.getData();
+    },
+    methods: {
+        beforeData() {
+            return {
+                search: this.search,
+                query: {
+                    userId: this.userInfo.id
+                }
+            };
+        },
+        setList(list) {
+            this.tableData = list;
+        },
+        handleClick(row) {
+            this.$confirm('确定删除该订单吗?', '警告', {
+                confirmButtonText: '确定',
+                cancelButtonText: '退出',
+                type: 'warning'
+            }).then(() => {
+                this.$http.get('/order/del' + row.id).then(() => {
+                    this.getData();
+                    console.log('删除成功');
+                });
+            });
+        }
+    }
+};
+</script>
+
+<style lang="less" scoped>
+/deep/ .el-table__header {
+    background: #1c1e26 !important;
+}
+/deep/ .el-table__row {
+    background: #1c1e26 !important;
+    .cell {
+        color: #ffffff;
+    }
+}
+/deep/ .el-table__empty-block {
+    background: #1c1e26 !important;
+}
+/deep/ .el-table__empty-text {
+    padding-top: 150px;
+}
+.pagination-wrapper {
+    .pagination();
+}
+.search {
+    background: #1a1a1a;
+    width: 280px;
+    height: 42px;
+    border-radius: 8px;
+
+    /deep/.el-input__inner {
+        border: 1px solid #898989;
+        background-color: transparent;
+        color: #fff;
+        border-radius: 8px;
+        &:focus {
+            border-color: #fff;
+        }
+    }
+}
+/deep/ .el-empty {
+    margin: 0 auto;
+}
+.search-list {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .select {
+        /deep/.el-input__inner {
+            background-color: transparent;
+            color: #fff;
+        }
+    }
+}
+.container {
+    padding: 45px 16px 0;
+
+    .top {
+        .flex();
+        justify-content: space-between;
+        .pay {
+            font-size: 18px;
+            font-weight: bold;
+            color: #ffffff;
+            line-height: 28px;
+        }
+        .text1 {
+            font-size: 14px;
+            font-weight: 400;
+            color: #ffffff;
+            line-height: 25px;
+        }
+        .text2 {
+            width: 106px;
+            height: 42px;
+            border-radius: 8px;
+            border: 1px solid #939599;
+            line-height: 42px;
+            text-align: center;
+            font-size: 14px;
+            color: #939599;
+            cursor: pointer;
+        }
+        span {
+            width: 26px !important;
+            height: 26px !important;
+            // font-size: 16px;
+            color: #939599;
+        }
+    }
+    .border {
+        height: 1px;
+        background: #494a4d;
+        border-radius: 1px;
+        margin: 24px 0 34px;
+    }
+}
+</style>
+<style lang="less">
+.customer-table th {
+    border: none !important;
+}
+.customer-table td,
+.customer-table th.is-leaf {
+    border: none;
+}
+//表格最外边框
+.el-table--border,
+.el-table--group {
+    border: none;
+}
+// 头部边框
+.customer-table thead tr th.is-leaf {
+    border: 1px solid #ebeef5;
+    border-right: none;
+}
+.customer-table thead tr th:nth-last-of-type(2) {
+    border-right: 1px solid #ebeef5;
+}
+// 表格最外层边框-底部边框
+.el-table--border::after,
+.el-table--group::after {
+    width: 0;
+}
+.customer-table::before {
+    width: 0;
+}
+.customer-table .el-table__fixed-right::before,
+.el-table__fixed::before {
+    width: 0;
+}
+//表格有滚动时表格头边框
+.el-table--border th.gutter:last-of-type {
+    border: 1px solid #ebeef5;
+    border-left: none;
+}
+</style>

+ 6 - 6
src/main/resources/application.yaml

@@ -71,9 +71,9 @@ wx:
     sub-app-id:
     sub-app-id:
     sub-mch-id:
     sub-mch-id:
     key-path: classpath:/cert/apiclient_cert.p12
     key-path: classpath:/cert/apiclient_cert.p12
-    notify-url: https://nft.9space.vip/notify/order/weixin
-    refund-notify-url: https://nft.9space.vip/wx/refundNotify
-    return-url: https://nft.9space.vip/9th/orders
+    notify-url: https://nfttest.9space.vip/notify/order/weixin
+    refund-notify-url: https://nfttest.9space.vip/wx/refundNotify
+    return-url: https://nfttest.9space.vip/9th/orders
 storage:
 storage:
   provider: aliyun
   provider: aliyun
   local_path: /var/www/upload/
   local_path: /var/www/upload/
@@ -84,7 +84,7 @@ aliyun:
   oss-bucket-name: 9space-2021
   oss-bucket-name: 9space-2021
   oss-domain: https://9space-2021.oss-cn-shenzhen.aliyuncs.com
   oss-domain: https://9space-2021.oss-cn-shenzhen.aliyuncs.com
 general:
 general:
-  host: https://nft.9space.vip
+  host: https://nfttest.9space.vip
 #mychain:
 #mychain:
 #  rest:
 #  rest:
 #    bizid: a00e36c5
 #    bizid: a00e36c5
@@ -129,8 +129,8 @@ alipay:
   api-key: CRv5YFAOIEGY5PgVf14Y9g==
   api-key: CRv5YFAOIEGY5PgVf14Y9g==
   app-cert-path: classpath:cert/appCertPublicKey_2021002120645023.crt
   app-cert-path: classpath:cert/appCertPublicKey_2021002120645023.crt
   root-cert-path: classpath:cert/alipayRootCert.crt
   root-cert-path: classpath:cert/alipayRootCert.crt
-  notify-url: https://nft.9space.vip/notify/order/alipay
-  return-url: https://nft.9space.vip/9th/home
+  notify-url: https://nfttest.9space.vip/notify/order/alipay
+  return-url: https://nfttest.9space.vip/9th/home
 ---
 ---
 
 
 spring:
 spring:

+ 11 - 7
src/main/vue/src/views/BlindBoxEdit.vue

@@ -20,7 +20,13 @@
                         <el-input v-model="formData.name" :disabled="!canEdit"></el-input>
                         <el-input v-model="formData.name" :disabled="!canEdit"></el-input>
                     </el-form-item>
                     </el-form-item>
                     <el-form-item prop="pics" label="图片">
                     <el-form-item prop="pics" label="图片">
-                        <object-upload v-model="formData.pics[0]" :disabled="!canEdit" compress width="3000" height="3000"></object-upload>
+                        <object-upload
+                            v-model="formData.pics[0]"
+                            :disabled="!canEdit"
+                            compress
+                            width="3000"
+                            height="3000"
+                        ></object-upload>
                     </el-form-item>
                     </el-form-item>
                     <el-form-item prop="minterId" label="创建者">
                     <el-form-item prop="minterId" label="创建者">
                         <minter-select
                         <minter-select
@@ -158,12 +164,10 @@
             >
             >
                 <el-form-item prop="collectionId" label="作品">
                 <el-form-item prop="collectionId" label="作品">
                     <el-select v-model="addItemForm.collectionId">
                     <el-select v-model="addItemForm.collectionId">
-                        <el-option
-                            v-for="item in collections"
-                            :label="item.name"
-                            :value="item.id"
-                            :key="item.id"
-                        ></el-option>
+                        <el-option v-for="item in collections" :label="item.name" :value="item.id" :key="item.id">
+                            <span style="float: left">{{ item.name }}</span>
+                            <span style="float: right; color: #8492a6; font-size: 13px">#{{ item.id }}</span>
+                        </el-option>
                     </el-select>
                     </el-select>
                 </el-form-item>
                 </el-form-item>
                 <el-form-item prop="total" label="数量">
                 <el-form-item prop="total" label="数量">

+ 34 - 0
src/test/java/com/izouma/nineth/CommonTest.java

@@ -26,6 +26,9 @@ import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.poi.util.TempFile;
 import org.apache.poi.util.TempFile;
 import org.bouncycastle.util.encoders.Base64;
 import org.bouncycastle.util.encoders.Base64;
 import org.bouncycastle.util.encoders.UrlBase64Encoder;
 import org.bouncycastle.util.encoders.UrlBase64Encoder;
+import org.bytedeco.javacv.FFmpegFrameGrabber;
+import org.bytedeco.javacv.Frame;
+import org.bytedeco.javacv.Java2DFrameConverter;
 import org.junit.Assert;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.Test;
 import org.libjpegturbo.turbojpeg.processor.api.ImageProcessException;
 import org.libjpegturbo.turbojpeg.processor.api.ImageProcessException;
@@ -47,6 +50,7 @@ import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.*;
 import java.awt.font.FontRenderContext;
 import java.awt.font.FontRenderContext;
 import java.awt.geom.AffineTransform;
 import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
@@ -312,4 +316,34 @@ public class CommonTest {
         }
         }
     }
     }
 
 
+    @Test
+    public void testGrabFrame() throws IOException {
+        FFmpegFrameGrabber frameGrabber = new FFmpegFrameGrabber("/Users/drew/Downloads/video1627914878375.mp4");
+        frameGrabber.start();
+        Java2DFrameConverter aa = new Java2DFrameConverter();
+        int length = frameGrabber.getLengthInVideoFrames();
+        Frame frame = null;
+        int i = 0;
+        while (frame == null && i < length) {
+            frame = frameGrabber.grabKeyFrame();
+            i++;
+        }
+        Objects.requireNonNull(frame);
+        BufferedImage thumbBi = aa.convert(frame);
+        ImageIO.write(thumbBi, "jpg", new File("/Users/drew/Desktop/1.jpg"));
+    }
+
+    @Test
+    public void testQuality() throws IOException {
+        Thumbnails.of("/Users/drew/Desktop/2021-11-04-11-28-36VAOoasUd.jpeg")
+                .size(1000, 1000)
+                .outputFormat("jpg")
+                .outputQuality(1)
+                .toFile("/Users/drew/Desktop/1.jpg");
+        Thumbnails.of("/Users/drew/Desktop/2021-11-04-11-28-36VAOoasUd.jpeg")
+                .size(1000, 1000)
+                .outputFormat("jpg")
+                .outputQuality(0.6)
+                .toFile("/Users/drew/Desktop/2.jpg");
+    }
 }
 }