lidongze 3 سال پیش
والد
کامیت
6dd38dab70

+ 5 - 0
src/main/java/com/izouma/nineth/repo/AssetRepo.java

@@ -163,4 +163,9 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
 
     @Query(nativeQuery = true, value = "select count(a.id) countNum,a.owner_id userId,a.owner_avatar avatar,a.`owner` nickname from asset a inner join `user` u on u.id = a.owner_id where a.status = 'NORMAL' and a.type = 'DOMAIN' GROUP BY a.owner_id ORDER BY count(a.id) desc limit 20")
     List<Map<String, Object>> domainTop20();
+
+    @Query(nativeQuery = true, value = "update asset a set a.hold_days = null,a.old_hold_days = null where a.name like ?1")
+    @Modifying
+    @Transactional
+    void openTrade(String name);
 }

+ 5 - 0
src/main/java/com/izouma/nineth/repo/CollectionRepo.java

@@ -216,4 +216,9 @@ public interface CollectionRepo extends JpaRepository<Collection, Long>, JpaSpec
     BigDecimal findMinPriceByNameAndPrefixName(String prefixName, String nameLike, String nameNotLike);
 
     List<Collection> findAllByNameLikeAndSalableAndOnShelf(String name, boolean salable, boolean onshelf);
+
+    @Query(nativeQuery = true, value = "update collection_info c set c.hold_days = null where c.name like ?1")
+    @Modifying
+    @Transactional
+    void openTrade(String name);
 }

+ 6 - 0
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -271,6 +271,12 @@ public class AssetController extends BaseController {
     public void cancelConsignment(@RequestParam String search) {
         assetService.batchCancelConsignment(search);
     }
+
+    @PostMapping("/openTrade")
+    public void openTrade(@RequestParam String name) {
+        assetRepo.openTrade(name);
+        collectionRepo.openTrade(name);
+    }
 }
 
 

+ 180 - 169
src/main/vue/src/views/CollectionList.vue

@@ -1,15 +1,11 @@
 <template>
     <div class="list-view">
         <page-title>
-            <el-button
-                @click="addRow"
-                type="primary"
-                icon="el-icon-plus"
-                :disabled="fetchingData || downloading"
-                class="filter-item"
-            >
+            <el-button @click="addRow" type="primary" icon="el-icon-plus" :disabled="fetchingData || downloading"
+                class="filter-item">
                 新增
             </el-button>
+            <el-button @click="addParams()" type="primary" size="mini" plain> 开放交易 </el-button>
             <!-- <el-button
                 @click="download"
                 icon="el-icon-upload2"
@@ -23,27 +19,14 @@
         <div class="filters-container">
             <created-at-picker v-model="createdAt" @change="getData" class="filter-item"></created-at-picker>
             <minter-filter v-model="minterId" @input="getData" class="filter-item"></minter-filter>
-            <el-input
-                placeholder="搜索..."
-                v-model="search"
-                clearable
-                class="filter-item search"
-                @keyup.enter.native="getData"
-            >
+            <el-input placeholder="搜索..." v-model="search" clearable class="filter-item search"
+                @keyup.enter.native="getData">
                 <el-button @click="getData" slot="append" icon="el-icon-search"> </el-button>
             </el-input>
         </div>
-        <el-table
-            :data="tableData"
-            row-key="id"
-            ref="table"
-            header-row-class-name="table-header-row"
-            header-cell-class-name="table-header-cell"
-            row-class-name="table-row"
-            cell-class-name="table-cell"
-            :height="tableHeight"
-            v-loading="fetchingData"
-        >
+        <el-table :data="tableData" row-key="id" ref="table" header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell" row-class-name="table-row" cell-class-name="table-cell"
+            :height="tableHeight" v-loading="fetchingData">
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <el-table-column prop="id" label="ID" width="100"> </el-table-column>
             <el-table-column prop="name" label="名称" show-overflow-tooltip> </el-table-column>
@@ -54,12 +37,8 @@
             </el-table-column>
             <el-table-column prop="pic" label="作品内容" width="90" align="center">
                 <template slot-scope="{ row }">
-                    <el-image
-                        style="width: 30px; height: 30px"
-                        :src="row.pic[0].thumb || row.pic[0].url"
-                        fit="cover"
-                        :preview-src-list="row.pic.map(i => i.thumb || i.url)"
-                    ></el-image>
+                    <el-image style="width: 30px; height: 30px" :src="row.pic[0].thumb || row.pic[0].url" fit="cover"
+                        :preview-src-list="row.pic.map(i => i.thumb || i.url)"></el-image>
                 </template>
             </el-table-column>
             <el-table-column prop="minter" label="铸造者"> </el-table-column>
@@ -107,6 +86,18 @@
                 </template>
             </el-table-column>
         </el-table>
+        <el-dialog :visible.sync="showParamsDialog" title="添加参数" width="600px" :close-on-click-modal="false">
+            <el-form ref="paramsForm">
+                <el-form-item :rules="[{ required: true, message: '请输入名称' }]" width="300px">
+                    <el-input v-model="name" placeholder="请输入名称">
+                    </el-input>
+                </el-form-item>
+            </el-form>
+            <div slot="footer">
+                <el-button @click="showParamsDialog = false" size="mini"> 取消 </el-button>
+                <el-button @click="openTrade" size="mini" :loading="loading" type="primary"> 开放交易 </el-button>
+            </div>
+        </el-dialog>
         <div class="pagination-wrapper">
             <!-- <div class="multiple-mode-wrapper">
                 <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
@@ -116,16 +107,9 @@
                     <el-button @click="toggleMultipleMode(false)">取消</el-button>
                 </el-button-group>
             </div> -->
-            <el-pagination
-                background
-                @size-change="onSizeChange"
-                @current-change="onCurrentChange"
-                :current-page="page"
-                :page-sizes="[10, 20, 30, 40, 50]"
-                :page-size="pageSize"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="totalElements"
-            >
+            <el-pagination background @size-change="onSizeChange" @current-change="onCurrentChange" :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper"
+                :total="totalElements">
             </el-pagination>
         </div>
     </div>
@@ -138,134 +122,161 @@ import MinterSelect from '../components/MinterSelect.vue';
 import { format, addDays } from 'date-fns';
 
 export default {
-    components: { SortableHeader, MinterSelect },
-    name: 'CollectionList',
-    mixins: [pageableTable],
-    data() {
-        return {
-            multipleMode: false,
-            search: '',
-            url: '/collection/all',
-            downloading: false,
-            typeOptions: [
-                { label: '默认', value: 'DEFAULT' },
-                { label: '展厅', value: 'SHOWROOM' },
-                { label: '盲盒', value: 'BLIND_BOX' },
-                { label: '拍卖', value: 'AUCTION' }
-            ],
-            sourceOptions: [
-                { label: '官方', value: 'OFFICIAL' },
-                { label: '用户铸造', value: 'USER' },
-                { label: '转让', value: 'TRANSFER' }
-            ],
-            sort: { sort: 'desc' },
-            sortStr: 'sort,desc',
-            createdAt: '',
-            minterId: ''
-        };
-    },
-    computed: {
-        selection() {
-            return this.$refs.table.selection.map(i => i.id);
-        }
-    },
-    methods: {
-        typeFormatter(row, column, cellValue, index) {
-            let selectedOption = this.typeOptions.find(i => i.value === cellValue);
-            if (selectedOption) {
-                return selectedOption.label;
-            }
-            return '';
-        },
-        sourceFormatter(row, column, cellValue, index) {
-            let selectedOption = this.sourceOptions.find(i => i.value === cellValue);
-            if (selectedOption) {
-                return selectedOption.label;
-            }
-            return '';
-        },
-        beforeGetData() {
-            return {
-                search: this.search,
-                query: {
-                    del: false,
-                    source: 'OFFICIAL',
-                    createdAt: this.createdAt || ['1970-01-01 00:00:00', format(new Date(), 'yyyy-MM-dd HH:mm:ss')],
-                    minterId: this.minterId
-                }
-            };
-        },
-        toggleMultipleMode(multipleMode) {
-            this.multipleMode = multipleMode;
-            if (!multipleMode) {
-                this.$refs.table.clearSelection();
-            }
-        },
-        addRow() {
-            this.$router.push({
-                path: '/collectionEdit',
-                query: {
-                    ...this.$route.query
-                }
-            });
-        },
-        editRow(row) {
-            this.$router.push({
-                path: '/collectionEdit',
-                query: {
-                    id: row.id
-                }
-            });
-        },
-        download() {
-            this.downloading = true;
-            this.$axios
-                .get('/collection/excel', {
-                    responseType: 'blob',
-                    params: { size: 10000 }
-                })
-                .then(res => {
-                    console.log(res);
-                    this.downloading = false;
-                    const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
-                    const link = document.createElement('a');
-                    link.href = downloadUrl;
-                    link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
-                    document.body.appendChild(link);
-                    link.click();
-                    link.remove();
-                })
-                .catch(e => {
-                    console.log(e);
-                    this.downloading = false;
-                    this.$message.error(e.error);
-                });
-        },
-        operation1() {
-            this.$notify({
-                title: '提示',
-                message: this.selection
-            });
-        },
-        operation2() {
-            this.$message('操作2');
-        },
-        deleteRow(row) {
-            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
-                .then(() => {
-                    return this.$http.post(`/collection/del/${row.id}`);
-                })
-                .then(() => {
-                    this.$message.success('删除成功');
-                    this.getData();
-                })
-                .catch(e => {
-                    if (e !== 'cancel') {
-                        this.$message.error(e.error);
-                    }
-                });
-        }
-    }
+	components: { SortableHeader, MinterSelect },
+	name: 'CollectionList',
+	mixins: [pageableTable],
+	data() {
+		return {
+			multipleMode: false,
+			search: '',
+			url: '/collection/all',
+			showParamsDialog: false,
+			loading: false,
+			name: '',
+			downloading: false,
+			typeOptions: [
+				{ label: '默认', value: 'DEFAULT' },
+				{ label: '展厅', value: 'SHOWROOM' },
+				{ label: '盲盒', value: 'BLIND_BOX' },
+				{ label: '拍卖', value: 'AUCTION' }
+			],
+			sourceOptions: [
+				{ label: '官方', value: 'OFFICIAL' },
+				{ label: '用户铸造', value: 'USER' },
+				{ label: '转让', value: 'TRANSFER' }
+			],
+			sort: { sort: 'desc' },
+			sortStr: 'sort,desc',
+			createdAt: '',
+			minterId: ''
+		};
+	},
+	computed: {
+		selection() {
+			return this.$refs.table.selection.map(i => i.id);
+		}
+	},
+	methods: {
+		typeFormatter(row, column, cellValue, index) {
+			let selectedOption = this.typeOptions.find(i => i.value === cellValue);
+			if (selectedOption) {
+				return selectedOption.label;
+			}
+			return '';
+		},
+		addParams() {
+			this.name = '';
+			this.showParamsDialog = true;
+			if (this.$refs.paramsForm) {
+				this.$nextTick(() => {
+					this.$refs.paramsForm.clearValidate();
+				});
+			}
+		},
+		sourceFormatter(row, column, cellValue, index) {
+			let selectedOption = this.sourceOptions.find(i => i.value === cellValue);
+			if (selectedOption) {
+				return selectedOption.label;
+			}
+			return '';
+		},
+		beforeGetData() {
+			return {
+				search: this.search,
+				query: {
+					del: false,
+					source: 'OFFICIAL',
+					createdAt: this.createdAt || ['1970-01-01 00:00:00', format(new Date(), 'yyyy-MM-dd HH:mm:ss')],
+					minterId: this.minterId
+				}
+			};
+		},
+		toggleMultipleMode(multipleMode) {
+			this.multipleMode = multipleMode;
+			if (!multipleMode) {
+				this.$refs.table.clearSelection();
+			}
+		},
+		addRow() {
+			this.$router.push({
+				path: '/collectionEdit',
+				query: {
+					...this.$route.query
+				}
+			});
+		},
+		editRow(row) {
+			this.$router.push({
+				path: '/collectionEdit',
+				query: {
+					id: row.id
+				}
+			});
+		},
+		download() {
+			this.downloading = true;
+			this.$axios
+				.get('/collection/excel', {
+					responseType: 'blob',
+					params: { size: 10000 }
+				})
+				.then(res => {
+					console.log(res);
+					this.downloading = false;
+					const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+					const link = document.createElement('a');
+					link.href = downloadUrl;
+					link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
+					document.body.appendChild(link);
+					link.click();
+					link.remove();
+				})
+				.catch(e => {
+					console.log(e);
+					this.downloading = false;
+					this.$message.error(e.error);
+				});
+		},
+		operation1() {
+			this.$notify({
+				title: '提示',
+				message: this.selection
+			});
+		},
+		operation2() {
+			this.$message('操作2');
+		},
+		deleteRow(row) {
+			this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+				.then(() => {
+					return this.$http.post(`/collection/del/${row.id}`);
+				})
+				.then(() => {
+					this.$message.success('删除成功');
+					this.getData();
+				})
+				.catch(e => {
+					if (e !== 'cancel') {
+						this.$message.error(e.error);
+					}
+				});
+		},
+		openTrade() {
+			this.loading = true;
+			this.$axios
+				.post('/asset/openTrade?name=' + this.name)
+				.then(res => {
+					console.log(res);
+					this.loading = false;
+					this.showParamsDialog = false;
+				})
+				.catch(e => {
+					console.log(e);
+					this.loading = false;
+					this.$message.error(e.error);
+				});
+		}
+	}
 };
 </script>
 <style lang="less" scoped></style>