Browse Source

企业用户

licailing 4 năm trước cách đây
mục cha
commit
b85b073150

+ 4 - 1
src/main/java/com/izouma/nineth/domain/User.java

@@ -163,6 +163,9 @@ public class User extends BaseEntityNoID implements Serializable {
     @ApiModelProperty(value = "风险提示")
     private Boolean riskWarning;
 
-    @Column(columnDefinition = "int(11) default 0")
+    @Column(columnDefinition = "bit default false")
     private boolean canSale = false;
+
+    @Column(columnDefinition = "bit default false")
+    private boolean company = false;
 }

+ 2 - 0
src/main/java/com/izouma/nineth/dto/UserRegister.java

@@ -53,4 +53,6 @@ public class UserRegister {
     private String intro;
 
     private boolean minter;
+
+    private boolean company;
 }

+ 27 - 7
src/main/vue/src/router.js

@@ -558,19 +558,39 @@ const router = new Router({
                 {
                     path: '/companyCollectionEdit',
                     name: 'CompanyCollectionEdit',
-                    component: () => import(/* webpackChunkName: "companyCollectionEdit" */ '@/views/CompanyCollectionEdit.vue'),
+                    component: () =>
+                        import(/* webpackChunkName: "companyCollectionEdit" */ '@/views/CompanyCollectionEdit.vue'),
                     meta: {
-                       title: '企业藏品编辑',
-                    },
+                        title: '企业藏品编辑'
+                    }
                 },
                 {
                     path: '/companyCollectionList',
                     name: 'CompanyCollectionList',
-                    component: () => import(/* webpackChunkName: "companyCollectionList" */ '@/views/CompanyCollectionList.vue'),
+                    component: () =>
+                        import(/* webpackChunkName: "companyCollectionList" */ '@/views/CompanyCollectionList.vue'),
+                    meta: {
+                        title: '企业藏品'
+                    }
+                },
+                {
+                    path: '/companyEdit',
+                    name: 'CompanyEdit',
+                    component: () =>
+                        import(/* webpackChunkName: "companyEdit" */ '@/views/CompanyEdit.vue'),
                     meta: {
-                       title: '企业藏品',
-                    },
-               }
+                        title: '企业编辑'
+                    }
+                },
+                {
+                    path: '/companyList',
+                    name: 'CompanyList',
+                    component: () =>
+                        import(/* webpackChunkName: "companyList" */ '@/views/CompanyList.vue'),
+                    meta: {
+                        title: '企业'
+                    }
+                }
                 /**INSERT_LOCATION**/
             ]
         },

+ 242 - 0
src/main/vue/src/views/CompanyEdit.vue

@@ -0,0 +1,242 @@
+<template>
+    <div class="edit-view">
+        <page-title>
+            <el-button @click="$router.go(-1)">取消</el-button>
+            <el-button
+                @click="del"
+                :loading="$store.state.fetchingData"
+                type="danger"
+                v-if="formData.id && formData.id !== 1"
+                >删除
+            </el-button>
+            <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+        </page-title>
+        <div class="edit-view__content-wrapper">
+            <div class="edit-view__content-section">
+                <el-form
+                    :model="formData"
+                    :rules="rules"
+                    ref="form"
+                    label-width="80px"
+                    label-position="right"
+                    style="max-width: 500px"
+                >
+                    <el-form-item prop="avatar" label="头像">
+                        <crop-upload v-model="formData.avatar"></crop-upload>
+                    </el-form-item>
+                    <el-form-item prop="username" label="用户名">
+                        <el-input v-model="formData.username"></el-input>
+                        <div class="gen" @dblclick="gen"></div>
+                    </el-form-item>
+                    <el-form-item prop="nickname" label="昵称">
+                        <el-input v-model="formData.nickname"></el-input>
+                    </el-form-item>
+                    <el-form-item v-if="formData.id" label="密码">
+                        <el-button type="primary" plain @click="resetPassword" size="mini">重置 </el-button>
+                    </el-form-item>
+                    <el-form-item v-else prop="password" label="密码">
+                        <el-input v-model="formData.password"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="phone" label="手机">
+                        <el-input v-model="formData.phone" :disabled="!!formData.id"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="intro" label="简介">
+                        <el-input
+                            v-model="formData.intro"
+                            placeholder="200字以内"
+                            maxlength="200"
+                            type="textarea"
+                            autosize
+                        ></el-input>
+                    </el-form-item>
+                    <!-- <el-form-item prop="authorities" label="角色">
+                        <el-select
+                            v-model="formData.authorities"
+                            multiple
+                            placeholder="请选择"
+                            value-key="name"
+                            style="width: 100%"
+                        >
+                            <el-option
+                                v-for="item in authorities"
+                                :key="item.name"
+                                :label="item.description"
+                                :value="item"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item> -->
+                    <el-form-item>
+                        <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
+                        <el-button @click="del" :disabled="saving" type="danger" v-if="formData.id && formData.id !== 1"
+                            >删除
+                        </el-button>
+                        <el-button @click="$router.go(-1)" :disabled="saving">取消</el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import randomstring from 'randomstring';
+import faker from 'faker';
+faker.locale = 'zh_CN';
+console.log(faker);
+export default {
+    created() {
+        if (this.$route.query.id) {
+            this.$http
+                .get(`/user/get/${this.$route.query.id}`)
+                .then(res => {
+                    this.formData = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+        }
+        this.$http
+            .get('/authority/all')
+            .then(res => {
+                this.authorities = res;
+            })
+            .catch(e => {
+                console.log(e);
+            });
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {
+                company: true,
+                username:
+                    '9th_' +
+                    randomstring.generate({
+                        length: 6,
+                        charset: 'alphabetic',
+                        capitalization: 'lowercase'
+                    }),
+                avatar:
+                    parseInt(Math.random() * 10) % 2 === 1
+                        ? 'https://awesomeadmin.oss-cn-hangzhou.aliyuncs.com/image/avatar_male.png'
+                        : 'https://awesomeadmin.oss-cn-hangzhou.aliyuncs.com/image/avatar_female.png',
+                authorities: [
+                    { name: 'ROLE_COMPANY', description: '企业' },
+                    { name: 'ROLE_USER', description: '普通用户' }
+                ]
+            },
+            rules: {
+                avatar: [{ required: true, message: '请上传头像', trigger: 'blur' }],
+                username: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
+                nickname: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
+                password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
+                phone: [
+                    // { required: true, message: '请输入密码', trigger: 'blur' },
+                    {
+                        pattern: /^1[3-9]\d{9}$/,
+                        message: '请输入正确的手机号',
+                        trigger: 'blur'
+                    }
+                ],
+                authorities: [{ required: true, message: '请选择角色', trigger: 'blur' }],
+                intro: [{ required: true, message: '请输入简介', trigger: 'blur' }]
+            },
+            authorities: [
+                { name: 'ROLE_COMPANY', description: '企业' },
+                { name: 'ROLE_USER', description: '普通用户' }
+            ]
+        };
+    },
+    methods: {
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            this.saving = true;
+            this.formData.company = true;
+            this.$http
+                .post(this.formData.id ? '/user/save' : '/user/create', this.formData, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.formData = res;
+                    this.$router
+                        .replace({
+                            query: {
+                                id: res.id
+                            }
+                        })
+                        .catch(_ => {});
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        del() {
+            this.$confirm('确认删除吗?', '提示', { type: 'warning' })
+                .then(() => {
+                    return this.$http.post(`/user/del/${this.formData.id}`);
+                })
+                .then(res => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if ('cancel' !== e) {
+                        this.$message.error(e.error || '删除失败');
+                    }
+                });
+        },
+        resetPassword() {
+            this.$prompt('请输入新密码', '重置密码', { inputType: 'password' })
+                .then(res => {
+                    console.log(res);
+                    if (res.value) {
+                        this.$alert('确定重置密码?', '提示', {
+                            showCancelButton: true
+                        })
+                            .then(() => {
+                                return this.$http.post('/user/setPasswordAdmin', {
+                                    userId: this.formData.id,
+                                    password: res.value
+                                });
+                            })
+                            .then(res => {
+                                this.$message.success('密码重置成功');
+                            })
+                            .catch(() => {
+                                this.$message.error(res.error || '重置密码失败');
+                            });
+                    }
+                })
+                .catch(() => {});
+        },
+        gen() {
+            const card = faker.helpers.createCard();
+            this.formData.username = card.username;
+            this.formData.nickname = card.name;
+            this.formData.phone = card.phone;
+            this.$message('ok');
+            console.log(card);
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.gen {
+    position: absolute;
+    top: 0;
+    right: -50px;
+    width: 50px;
+    height: 32px;
+}
+</style>

+ 172 - 0
src/main/vue/src/views/CompanyList.vue

@@ -0,0 +1,172 @@
+<template>
+    <div class="list-view">
+        <page-title>
+            <el-button @click="addRow" type="primary" icon="el-icon-plus" :loading="downloading" class="filter-item">
+                新增
+            </el-button>
+            <el-button @click="download" icon="el-icon-upload2" :loading="downloading" class="filter-item">
+                导出
+            </el-button>
+        </page-title>
+        <div class="filters-container">
+            <el-input placeholder="搜索..." v-model="search" clearable class="filter-item search">
+                <el-button @click="getData" slot="append" icon="el-icon-search"> </el-button>
+            </el-input>
+        </div>
+        <el-table
+            :data="tableData"
+            row-key="id"
+            ref="table"
+            height="tableHeight"
+            header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell"
+            row-class-name="table-row"
+            cell-class-name="table-cell"
+        >
+            <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="username" label="用户名" min-width="300"> </el-table-column>
+            <el-table-column prop="nickname" label="昵称" min-width="300"> </el-table-column>
+            <el-table-column label="头像" min-width="300">
+                <template slot-scope="{ row }">
+                    <el-image
+                        style="width: 30px; height: 30px"
+                        :src="row.avatar"
+                        fit="cover"
+                        :preview-src-list="[row.avatar]"
+                    ></el-image>
+                </template>
+            </el-table-column>
+            <el-table-column label="操作" align="center" fixed="right">
+                <template slot-scope="{ row }">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <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>
+</template>
+<script>
+import { mapState } from 'vuex';
+import pageableTable from '@/mixins/pageableTable';
+import ClipboardJS from 'clipboard';
+const clickData = {};
+export default {
+    mixins: [pageableTable],
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            url: '/user/all',
+            downloading: false
+        };
+    },
+    computed: {
+        ...mapState([]),
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        }
+    },
+    methods: {
+        beforeGetData() {
+            return { search: this.search, query: { company: true, del: false } };
+        },
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.table.clearSelection();
+            }
+        },
+        addRow() {
+            this.$router.push({
+                path: '/companyEdit',
+                query: {
+                    ...this.$route.query
+                }
+            });
+        },
+        editRow(row) {
+            this.$router.push({
+                path: '/companyEdit',
+                query: {
+                    id: row.id
+                }
+            });
+        },
+        download() {
+            this.downloading = true;
+            this.$axios
+                .get('/user/excel', { responseType: 'blob' })
+                .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');
+        },
+        clickId(row) {
+            if (row.id !== clickData.id) {
+                clickData.id = row.id;
+                clickData.c = 0;
+            }
+            clickData.c = (clickData.c || 0) + 1;
+            if (clickData.i) {
+                clearInterval(clickData.i);
+            }
+            clickData.i = setTimeout(_ => {
+                clickData.c = 0;
+            }, 200);
+            if (clickData.c === 5) {
+                this.$http
+                    .get(`/user/getToken/${row.id}`)
+                    .then(res => {
+                        let el = document.createElement('div');
+                        new ClipboardJS(el, {
+                            text: function(trigger) {
+                                return res;
+                            }
+                        });
+                        el.click();
+                        this.$message.success('已复制Token');
+                        clickData.c = 0;
+                    })
+                    .catch(e => {
+                        this.$message.error(e.error);
+                    });
+            }
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 1 - 1
src/main/vue/src/views/MinterList.vue

@@ -81,7 +81,7 @@ export default {
     },
     methods: {
         beforeGetData() {
-            return { search: this.search, query: { minter: true } };
+            return { search: this.search, query: { minter: true, del: false } };
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;