浏览代码

Merge remote-tracking branch 'origin/麦塔' into 麦塔

tanxue 5 年之前
父节点
当前提交
5ce4141e9f

+ 17 - 0
src/api/AlCloud.js

@@ -0,0 +1,17 @@
+import request           from '@/utils/request';
+const pre = `/file`
+export function getFilePolicy(data = {}) {
+    return request({
+                       url:    `${pre}/policy`,
+                       method: 'post',
+                       data,
+                   });
+}
+
+export function getFileUpload(data = {}) {
+    return request({
+                       url:    `${pre}/upload`,
+                       method: 'post',
+                       data,
+                   });
+}

+ 18 - 0
src/api/base64.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request';
+
+export function getUploadConfig(data = {}) {
+    return request({
+                       url:    `/file/upload`,
+                       method: 'post',
+                       data:   data,
+                   });
+}
+
+
+export function getOpenSearch(data = {}) {
+    return request({
+                       url:    `/open/kaoshi/file/search`,
+                       method: 'post',
+                       data:   data,
+                   });
+}

+ 39 - 0
src/api/hangyezixun.js

@@ -0,0 +1,39 @@
+import request           from '@/utils/request';
+
+const pre = `/industry`
+
+export function getIndustryAdd(data = {}) {
+    return request({
+                       url:    `${pre}/add`,
+                       method: 'post',
+                       data,
+                   });
+}
+export function getIndustryDelete(data = {}) {
+    return request({
+                       url:    `${pre}/delete`,
+                       method: 'post',
+                       data,
+                   });
+}
+export function getIndustryInfo(data = {}) {
+    return request({
+                       url:    `${pre}/info`,
+                       method: 'post',
+                       data,
+                   });
+}
+export function getIndustryList(data = {}) {
+    return request({
+                       url:    `${pre}/list`,
+                       method: 'post',
+                       data,
+                   });
+}
+export function getIndustryUpdate(data = {}) {
+    return request({
+                       url:    `${pre}/update`,
+                       method: 'post',
+                       data,
+                   });
+}

+ 2 - 2
src/components/management/QuillEditor.vue

@@ -59,7 +59,7 @@
     import 'quill/dist/quill.snow.css';
     import 'quill/dist/quill.bubble.css';
 
-    import { getUploadImg }    from '@/api/AlCloud';
+    import { getFilePolicy }    from '@/api/AlCloud';
     import { getUploadConfig } from '@/api/base64';
     import axios               from 'axios';
     import store               from '@/store';
@@ -225,7 +225,7 @@
                     suffix: suffix,
                 };
 
-                getUploadImg(options).then((res) => {
+                getFilePolicy(options).then((res) => {
                     if (res.code === 0) {
                         // 二进制文件通过forData对象进行传递
                         const FormDataForAl = new FormData();

+ 10 - 8
src/main.js

@@ -6,21 +6,21 @@ import './assets/css/element/style.css';
 import './assets/css/perfectScrollbar/vue2-perfect-scrollbar.min.css';
 import 'intro.js/introjs.css';
 import 'intro.js/themes/introjs-modern.css';
-
-import App     from './App.vue';
-import router  from './router';
-import store   from './store';
+import axios     from 'axios';
+import App       from './App.vue';
+import router    from './router';
+import store     from './store';
 import './registerServiceWorker';
-import echarts from 'echarts';
-import uploader from 'vue-simple-uploader'
-import mainfunc from './utils/st/mainfunc';
+import echarts   from 'echarts';
+import uploader  from 'vue-simple-uploader';
+import mainfunc  from './utils/st/mainfunc';
 
 import VueClipboard from 'vue-clipboard2';
 
 Vue.use(VueClipboard);
 Vue.use(uploader);
 // add VueIntro
-import VueIntro from 'vue-introjs';
+import VueIntro     from 'vue-introjs';
 
 Vue.use(VueIntro);
 
@@ -78,6 +78,8 @@ Vue.prototype.loading = function (opt) {
 
 Vue.prototype.$echarts = echarts;
 
+Vue.prototype.$axios = axios;
+
 /*Vue.directive('colorred', function (el, bind, vNode) {
     el.style.color = bind.value();
 });*/

+ 21 - 2
src/router.js

@@ -58,7 +58,7 @@ const router = new Router({
                                       },
                                       children:  [
                                           {
-                                              path: '/hangyezixun',
+                                              path: '/industry',
                                               name: 'hangyezixun',
                                               meta: {
                                                   icon: "",
@@ -66,7 +66,26 @@ const router = new Router({
                                               },
                                               isAdminMenu: true,
                                               component: () => {
-                                                  return import(/* webpackChunkName: "Home" */ './views/management/HangYeZiXun/index.vue');
+                                                  return import(/* webpackChunkName: "HangYeZiXun" */ './views/management/HangYeZiXun/index.vue');
+                                              },
+                                          },
+                                          {
+                                              path: '/industry/config',
+                                              name: 'HangYeZiXunConfig',
+                                              component: () => {
+                                                  return import(/* webpackChunkName: "HangYeZiXun" */ './views/management/HangYeZiXun/HangYeZiXunConfig/index.vue');
+                                              },
+                                          },
+                                          {
+                                              path: '/blogroll',
+                                              name: 'blogroll',
+                                              meta: {
+                                                  icon: "",
+                                                  title: "友情链接"
+                                              },
+                                              isAdminMenu: true,
+                                              component: () => {
+                                                  return import(/* webpackChunkName: "HangYeZiXun" */ './views/management/HangYeZiXun/YouQingLianJie/index.vue');
                                               },
                                           },
                                       ],

+ 4 - 0
src/utils/admin/ConstantConfig.js

@@ -0,0 +1,4 @@
+// 获取本地登录用户的key值
+const USER_AUTH = `userAuth`;
+
+export { USER_AUTH };

+ 7 - 1
src/utils/admin/tools.js

@@ -1,3 +1,5 @@
+import { USER_AUTH } from '@/utils/admin/ConstantConfig';
+
 const getCache = function(key) {
     if (!key) {
         console.error(`未找到需要获取的键`);
@@ -26,6 +28,10 @@ const removeCache = function(key) {
     window.localStorage.removeItem(key)
 }
 
+const getUserAuth = function() {
+    return getCache(USER_AUTH)
+}
+
 export {
-    getCache, saveCache, removeCache
+    getCache, saveCache, removeCache, getUserAuth
 }

+ 0 - 66
src/utils/request.js

@@ -6,17 +6,6 @@ import { Md5 }                 from 'ts-md5/dist/md5';
 import router                  from '@/router';
 
 let _ = require('lodash');
-let noTimeoutLimitArr = [
-    '/admin/user/import'
-    , '/admin/shiti/import'
-    , '/admin/offline/score/import'
-    , '/admin/shiti/export'
-    , '/admin/kaoshi/ score/export'
-    , '/admin/user/export'
-    , '/admin/kaoshi/score/download'
-    , '/admin/shijuan/download',
-
-];
 
 // create an axios instance
 const service = axios.create({
@@ -30,61 +19,6 @@ service.interceptors.request.use(
     config => {
         // do something before request is sent
 
-
-        function mixSignAndToken(config) {
-            const checkurl = function (url) {
-                // 用户端白名单
-                if (url.indexOf('common') > -1) {
-                    return true;
-                }
-                // 管理端白名单
-                if (url === '/admin/user/auth') {
-                    return true;
-                }
-                // 短信服务白名单
-                if (url === 'sms/sendCode') {
-                    return true;
-                }
-                return false;
-            };
-
-            if (checkurl(config.url)) {
-                config.headers['X-AUTH-SIGN'] = Md5.hashStr(JSON.stringify(config.data) + process.env.VUE_APP_SECRET_KEY);
-            } else {
-                if (store.state.auth) {
-                    config.headers['X-AUTH-SIGN'] = Md5.hashStr(JSON.stringify(config.data) + store.state.auth.secret);
-                    config.headers['X-AUTH-TOKEN'] = store.state.auth.token;
-                } else {
-                    // 非登录操作,但没有auth,跳转登录
-                    if (router.app.$route.path.indexOf('/c/register') === 0) {
-                        router.push('/c/register');
-                    } else if (router.app.$route.path.indexOf('/c/')=== 0){
-                        router.push('/c/login');
-                    }else if (router.app.$route.path.indexOf('/a/')=== 0) {
-                        router.push('/a/login');
-                    } else {
-                        throw new Error('没有auth,跳转登录异常:' + router.app.$route.path);
-                    }
-                }
-            }
-
-        }
-
-        function setTimeoutunlimit(config) {
-            if (_.indexOf(noTimeoutLimitArr, config.url) > -1) {
-                config.timeout = 9999999999;
-            }
-        }
-
-        mixSignAndToken(config);
-        setTimeoutunlimit(config);
-
-        /*if (store.getters.token) {
-            // let each request carry token
-            // ['X-Token'] is a custom headers key
-            // please modify it according to the actual situation
-            config.headers['X-Token'] = getToken();
-        }*/
         return config;
     },
     error => {

+ 147 - 0
src/views/management/HangYeZiXun/HangYeZiXunConfig/components/uploadFile.vue

@@ -0,0 +1,147 @@
+<template>
+    <div class="admin-uploadAlCloud">
+        <el-upload
+                ref="upload"
+                action="action"
+                class="avatar-uploader"
+                :http-request="uploadFun"
+                :show-file-list="false">
+            <img v-if="imageUrl" :src="imageUrl" class="avatar" alt="头像">
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+        </el-upload>
+        <el-button v-if="showBtnFlag&&btnType==='delete'" type="primary" size="small" class="delete-btn" @click="btnClick(btnType)">删除</el-button>
+    </div>
+</template>
+
+<script>
+
+    import { getFilePolicy }           from '@/api/AlCloud.js';
+    //  describe: 上传组件 author: Wgy date:2020-03-30
+    /*
+    * showBtnFlag:是否显现按钮
+    * btnType:按钮类型 显示按钮 默认type为 'delete'
+    *imageUrl:入参图片
+    * 父页面 example:<upload-file  :imageUrl="imageUrl1" @btnFun="btnFun" @getFileUrl="getFileFun"></upload-file>
+    * */
+
+    export default {
+        name: "UploadAlCloud",
+        props: {
+            showBtnFlag: {
+                type: Boolean,
+                default: true
+            },
+            btnType: {
+                type: String,
+                default: 'delete',
+            },
+            imageUrl: {
+                type: String,
+                default: '',
+            },
+        },
+        data() {
+            return {
+                afterUploadImg: '',
+            };
+        },
+        methods: {
+            //按钮
+            btnClick(data){
+                let response ={
+                    type:data,
+                    imageUrl:this.imageUrl
+                }
+                this.$emit('btnFun', response);
+            },
+            // 自定义上传
+            uploadFun(params) {
+                console.log(params);
+                if (!params) {
+                    return;
+                }
+                const suffixList = params.file.name.split('.').pop();
+                const options = {
+                    prefix: 'resource/portal/',
+                    suffix: suffixList,
+                };
+                const loading = this.$loading({background:"rgba(0, 0, 0, 0.7)"});
+                getFilePolicy(options).then((res) => {
+                    if (res.code === 0) {
+                        // 二进制文件通过forData对象进行传递
+                        const FormDataForAl = new FormData();
+                        const multipartParams = Object.assign({}, res.data, {
+                            Filename:              `images/${params.filename}`,
+                            success_action_status: '200',
+                        });
+                        // 参数数据
+                        FormDataForAl.append('key', multipartParams.key);
+                        FormDataForAl.append('policy', multipartParams.policy);
+                        FormDataForAl.append('signature', multipartParams.signature);
+                        FormDataForAl.append('OSSAccessKeyId', multipartParams.accessid);
+                        FormDataForAl.append('success_action_status', multipartParams.success_action_status);
+                        // OSS要求, file放到最后
+                        FormDataForAl.append('file', params.file);
+
+                        this.$axios.post(multipartParams.url, FormDataForAl).then(alRes => {
+                            if (alRes.status === 200) {
+                                this.afterUploadImg = `${multipartParams.url}/${multipartParams.key}`;
+                                this.$emit('getFileUrl', this.afterUploadImg);
+                                loading.close();
+                            }else {
+                                loading.close();
+                            }
+                        }).catch(e => {
+                            loading.close();
+                        });
+                    }else {
+                        loading.close();
+                    }
+                });
+            }
+        },
+    }
+</script>
+
+<style lang="scss">
+    .admin-uploadAlCloud {
+        display: block;
+
+        .avatar-uploader .el-upload {
+            background: #fff;
+            border: 1px dashed #d9d9d9;
+            border-radius: 6px;
+            cursor: pointer;
+            position: relative;
+            overflow: hidden;
+        }
+        .avatar-uploader .el-upload:hover {
+            border-color: #409EFF;
+        }
+        .avatar-uploader-icon {
+            font-size: 28px;
+            color: #8c939d;
+            width: 178px;
+            height: 178px;
+            line-height: 178px;
+            text-align: center;
+        }
+        .avatar {
+            width: 178px;
+            height: 178px;
+            display: block;
+        }
+        @media screen and (max-width: 1440px){
+            .avatar{
+                width: 140px; // 必须指定宽高
+                height: 140px;
+                line-height: 140px;
+            }
+            .avatar-uploader-icon{
+                width: 140px;
+                height: 140px;
+                line-height: 140px;
+            }
+        }
+    }
+</style>

+ 279 - 0
src/views/management/HangYeZiXun/HangYeZiXunConfig/index.vue

@@ -0,0 +1,279 @@
+<template>
+    <div class="admin-HangYeZiXunConfig">
+        <!--    按钮组合    -->
+        <div class="my-Config-top">
+            <el-button size="mini" type="primary" @click="back">返回</el-button>
+        </div>
+        <div class="my-Config-content">
+            <el-form :model="configData" :rules="configRules" ref="HangYeZiXun" label-width="110px"
+                     class="my-Config-content-form">
+                <el-form-item label="标题:" prop="title">
+                    <el-input :maxlength="9" v-model="configData.title" placeholder="请输入标题"></el-input>
+                </el-form-item>
+                <el-form-item prop="startTime" label="开始时间:" porp="startTime">
+                    <div>
+                        <el-date-picker
+                                class="my-form-width"
+                                type="date"
+                                format="yyyy-MM-dd"
+                                value-format="yyyy-MM-dd"
+                                placeholder="选择日期"
+                                v-model="configData.startTime"
+                                style="width: 100%;"></el-date-picker>
+                    </div>
+                </el-form-item>
+                <el-form-item label="访问次数:" prop="visits">
+                    <el-input :maxlength="9" placeholder="请输入访问次数" v-model="configData.visits"></el-input>
+                </el-form-item>
+                <el-form-item label="图片:" prop="pic">
+                    <upload-file :imageUrl="configData.pic"
+                                 :showBtnFlag="false"
+                                 @getFileUrl="getImageUrl"></upload-file>
+                    <h5 class="picture-size-h5">(最佳尺寸为400*400像素)</h5>
+                </el-form-item>
+                <el-form-item label="描述:" prop="intro">
+                    <el-input type="textarea" placeholder="请输入描述" :rows="9"
+                              v-model="configData.intro"></el-input>
+                </el-form-item>
+            </el-form>
+            <div class="my-Config-editor">
+                <mta-st-quill-editor
+                        class="admin-quill-editor"
+                        ref="editorQuill"
+                        :value="configData.content"
+                        quillEditorRef="quillEditorRef1"
+                        flg="1"
+                        @syncValue="syncValue" />
+            </div>
+        </div>
+        <div class="my-Config-bottom">
+            <el-button
+                    v-if="queryData && queryData.code === 'add'"
+                    type="primary"
+                    @click="handleAdd('HangYeZiXun')"
+            >新增
+            </el-button>
+            <div v-else>
+                <el-button  type="primary"  @click="handleSave('HangYeZiXun')">保存</el-button>
+                <el-button  type="primary"  @click="back">关闭</el-button>
+            </div>
+
+        </div>
+    </div>
+</template>
+
+<script>
+    import uploadFile       from './components/uploadFile';
+    import MtaStQuillEditor from '@/components/management/QuillEditor.vue';
+    import * as commonTools from '@/utils/admin/tools';
+    import * as HYZXService from '@/api/hangyezixun';
+
+    export default {
+        name:       'HangYeZiXunConfig',
+        components: {
+            uploadFile,
+            MtaStQuillEditor,
+        },
+        data() {
+            return {
+                defaultValue: new Date(),
+                configData:   {
+                    content:   '',
+                    intro:     '',
+                    pic:       '',
+                    startTime: '',
+                    title:     '',
+                    visits:    '',
+                },
+                configRules:  {
+                    title:     [
+                        { required: true, message: '标题不能为空', trigger: 'blur' },
+                    ],
+                    startTime: [
+                        { required: true, message: '开始时间不能为空', trigger: 'blur' },
+                    ],
+                    intro:     [
+                        { required: true, message: '描述不能为空', trigger: 'blur' },
+                    ],
+                    pic:       [
+                        { required: true, message: '图片不能为空', trigger: 'blur' },
+                    ],
+                    visits:    [
+                        { required: true, message: '访问次数不能为空', trigger: 'blur' },
+                    ],
+                    content:   [
+                        { required: true, message: '行业详情不能为空', trigger: 'blur' },
+                    ],
+                },
+                queryData:    null,
+                userId:       null,
+            };
+        },
+        methods: {
+            back() {
+                window.history.go(-1);
+            },
+            getImageUrl(data) {
+                console.log('data =>', data);
+                this.configData.pic = data;
+            },
+            syncValue(flg, content) {
+                if (flg === '1') {
+                    this.configData.content = content;
+                }
+            },
+            handleSave(formName) {
+                this.$refs[formName].validate((valid) => {
+                    if (valid) {
+                        this.saveAddHangYeZiXun();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            handleAdd(formName) {
+                this.$refs[formName].validate((valid) => {
+                    if (valid) {
+                        this.addAddHangYeZiXun();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            initPageData(data) {
+                // this.configData.content = data.content;
+                this.$refs.editorQuill.setContent(data.content);
+                this.configData.intro = data.intro;
+                this.configData.pic = data.pic;
+                this.configData.startTime = data.startTime;
+                this.configData.title = data.title;
+                this.configData.visits = data.visits;
+            },
+            async recoverPage() {
+
+                const opt = {
+                    iiId: this.queryData.iiId,
+                };
+
+                const loading = this.$loading({ background: 'rgba(0, 0, 0, 0.7)' });
+                try {
+                    const res = await HYZXService.getIndustryInfo(opt);
+                    if (res.code === 0) {
+                        console.log(res);
+                        this.initPageData(res.data);
+                    }
+                    loading.close();
+
+                } catch (err) {
+                    loading.close();
+                }
+            },
+            async addAddHangYeZiXun() {
+                const loading = this.$loading({ background: 'rgba(0, 0, 0, 0.7)' });
+                try {
+                    const res = await this.handleAddHangYeZiXun();
+                    loading.close();
+                    if (res.code === 0 && res.data) {
+                        this.$message.success('新增成功');
+                        this.back();
+                    }
+                } catch (e) {
+                    loading.close();
+                }
+            },
+            async saveAddHangYeZiXun() {
+                const loading = this.$loading({ background: 'rgba(0, 0, 0, 0.7)' });
+                try {
+                    const res = await this.handleSaveHangYeZiXun();
+                    loading.close();
+                    if (res.code === 0 && res.data) {
+                        this.$message.success('保存成功');
+                        this.back();
+                    }
+                } catch (e) {
+                    loading.close();
+                }
+            },
+            getOptions() {
+                return Object.assign({}, this.configData, { userId: this.userId });
+            },
+            handleAddHangYeZiXun() {
+                const opt = this.getOptions();
+                return HYZXService.getIndustryAdd(opt);
+            },
+            handleSaveHangYeZiXun() {
+                const opt = this.getOptions();
+                const newOpt = Object.assign(opt, {iiId: this.queryData.iiId})
+                return HYZXService.getIndustryUpdate(newOpt);
+            }
+        },
+        created() {
+            this.queryData = this.$route.query;
+            const userAuth = commonTools.getUserAuth();
+            this.userId = userAuth && userAuth.userId;
+        },
+        mounted() {
+            if (this.queryData.code === 'editor' && this.queryData.iiId) {
+                this.recoverPage();
+            }
+        },
+    };
+</script>
+
+<style lang="scss" scoped>
+    .admin-HangYeZiXunConfig {
+        padding: 20px;
+
+        .my-Config-top {
+            display: flex;
+            justify-content: flex-end;
+            margin-bottom: 20px;
+        }
+
+        .my-Config-content {
+            display: flex;
+            justify-content: space-between;
+
+            &-form {
+                .form-timer {
+                    .timer-wrap {
+                        display: flex;
+                        flex-direction: row;
+                    }
+
+                    .line {
+                        margin: 0 5px;
+                        width: 20px;
+                        text-align: center;
+                        box-sizing: border-box;
+                    }
+                }
+
+                .el-form-item:nth-last-child(1) {
+                    margin-bottom: 0;
+                }
+            }
+
+            .my-Config-editor {
+                flex: 1;
+                margin-left: 30px;
+
+                .admin-quill-editor {
+                    height: 100%;
+
+                    ::v-deep .quill-editor {
+                        height: 100%;
+                        display: flex;
+                        flex-direction: column;
+                        background: #FFF;
+                    }
+                }
+            }
+        }
+
+        .my-Config-bottom {
+            margin-top: 20px;
+            text-align: center;
+        }
+    }
+</style>

+ 15 - 0
src/views/management/HangYeZiXun/YouQingLianJie/index.vue

@@ -0,0 +1,15 @@
+<template>
+    <div>
+        友情链接
+    </div>
+</template>
+
+<script>
+    export default {
+        name: 'YouQingLianJie',
+    };
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 3 - 2
src/views/management/HangYeZiXun/components/Pagination.vue

@@ -11,13 +11,14 @@
 </template>
 
 <script>
-    import { paginationServiceData } from './paginationData';
+    import { paginationServiceData, defaultPageSizes } from './paginationData';
+
     export default {
         name: 'Pagination',
         props: {
             pageSizes: {
                 type: Array,
-                default: () => [100, 200, 300, 400]
+                default: () => defaultPageSizes
             }
         },
         computed: {

+ 72 - 15
src/views/management/HangYeZiXun/components/Table.vue

@@ -2,33 +2,90 @@
     <el-table
             :data="tableData"
             border
+            @selection-change="handleSelectionChange"
             style="width: 100%">
         <el-table-column
-                prop="date"
-                label="日期"
-                width="180">
+                type="selection"
+                width="55">
         </el-table-column>
         <el-table-column
-                prop="name"
-                label="姓名"
-                width="180">
+                prop="title"
+                label="标题"
+                width="360">
         </el-table-column>
         <el-table-column
-                prop="address"
-                label="地址">
+                prop="intro"
+                label="描述"
+                width="360">
+        </el-table-column>
+        <el-table-column
+                prop="pic"
+                label="图片"
+                width="300">
+            <template slot-scope="scope">
+                <el-image
+                        style="width: 200px;height: 200px"
+                        :src="scope.row.pic"
+                        fit="contain"></el-image>
+            </template>
+        </el-table-column>
+        <el-table-column
+                prop="startTime"
+                label="发布时间"
+                width="200">
+        </el-table-column>
+        <el-table-column
+                prop="visits"
+                label="访问次数"
+                width="200">
+        </el-table-column>
+        <el-table-column
+                label="操作"
+        >
+            <template slot-scope="scope">
+                <el-button type="text" @click="handleEditor(scope.row)">编辑</el-button>
+                <el-button type="text" @click="handleDelete(scope.row)">删除</el-button>
+            </template>
         </el-table-column>
     </el-table>
 </template>
 
 <script>
     export default {
-        name: 'Table',
-
-        data() {
-            return {
-                tableData: []
-            }
-        }
+        name:     'Table',
+        inject:   {
+            tableServiceData:      {
+                type:    Object,
+                default: () => {
+                },
+            },
+            paginationServiceData: {
+                type:    Object,
+                default: () => {
+                },
+            },
+        },
+        computed: {
+            tableData() {
+                return this.tableServiceData.myData;
+            },
+        },
+        methods:  {
+            handleSelectionChange(data) {
+                console.log(data);
+                const arr = [];
+                data.forEach(item => {
+                    arr.push(item.iiId)
+                })
+                this.$emit('select-change', arr);
+            },
+            handleEditor(data) {
+                this.$emit('editor', data);
+            },
+            handleDelete(data) {
+                this.$emit('delete', data);
+            },
+        },
     };
 </script>
 

+ 3 - 2
src/views/management/HangYeZiXun/components/paginationData.js

@@ -5,9 +5,10 @@ const pagination = {
     size: 10,
     total: 0
 }
-
+const defaultPageSizes = [10, 20, 30, 40];
 const paginationServiceData = Vue.observable(pagination);
 
 export {
-    paginationServiceData
+    paginationServiceData,
+    defaultPageSizes
 }

+ 1 - 3
src/views/management/HangYeZiXun/components/table.js → src/views/management/HangYeZiXun/components/tableData.js

@@ -1,9 +1,7 @@
 import Vue from 'vue';
 
 const tableData = {
-    page: 1,
-    size: 10,
-    total: 0
+    myData: []
 }
 
 const tableServiceData = Vue.observable(tableData);

+ 163 - 5
src/views/management/HangYeZiXun/index.vue

@@ -1,22 +1,180 @@
 <template>
-    <div class="admin-hangyezixun">
-        <myPagination />
+    <div class="admin-hangyezixun-page">
+        <div class="admin-hangyexuzhi">
+            <div class="top">
+                <el-button class="btn-add" size="mini" type="primary" @click="handleAddHangYeZiXun">新增</el-button>
+                <el-button class="btn-add" size="mini" type="primary" @click="handleDeleteHangYeZiXun">批量删除</el-button>
+            </div>
+            <myTable
+                    @editor="handleEditor"
+                    @delete="handleDelete"
+                    @select-change="handleSelectChange"
+            />
+            <myPagination />
+        </div>
     </div>
 </template>
 
 <script>
-    import myPagination from './components/Pagination.vue';
+    import { tableServiceData }      from './components/tableData';
+    import { paginationServiceData } from './components/paginationData';
+    import * as HYZXApi              from '@/api/hangyezixun';
+    import myPagination              from './components/Pagination';
+    import myTable                   from './components/Table';
+
+    const CHANGEPAGECODE = {
+        add:    'add',
+        editor: 'editor',
+    };
 
     export default {
-        name:       'index',
+        name:       'Hangyexuzhi',
+        provide:    {
+            tableServiceData,
+            paginationServiceData,
+        },
+        data() {
+            return {
+                curIiId:         null,
+                tableSelectData: [],
+            };
+        },
         components: {
             myPagination,
+            myTable,
+        },
+        computed:   {
+            myPage() {
+                return paginationServiceData.page;
+            },
+            mySize() {
+                return paginationServiceData.size;
+            },
+            myTotal() {
+                return paginationServiceData.total;
+            },
+        },
+        methods:    {
+            handleEditor(data) {
+                console.log('editor', data);
+                this.curIiId = data.iiId;
+                this.changePage(CHANGEPAGECODE.editor);
+            },
+            handleDelete(data) {
+                console.log('delete', data);
+                const opt = {
+                    iiIds: [data.iiId],
+                };
+                this.getHangYeZiXunDelete(opt);
+            },
+            handleSelectChange(data) {
+                this.tableSelectData = data;
+            },
+            handleAddHangYeZiXun() {
+                this.changePage(CHANGEPAGECODE.add);
+            },
+            async handleDeleteHangYeZiXun() {
+                if (!this.tableSelectData.length) {
+                    this.$message.warning('请选择至少一条需要删除的数据');
+                    return;
+                }
+                const opt = {
+                    iiIds: [...this.tableSelectData],
+                };
+                const loading = this.$loading({ background: 'rgba(0, 0, 0, 0.7)' });
+                try {
+                    const res = await HYZXApi.getIndustryDelete(opt);
+                    loading.close();
+                    if (res.code === 0 && res.data) {
+                        // 删除成功重置选择状态
+                        this.tableSelectData = [];
+
+                        const res = await HYZXApi.getIndustryList(opt);
+                        if (res.code === 0) {
+                            this.initPageData(res.data);
+                        }
+                        loading.close();
+                    }
+                } catch (err) {
+                    loading.close();
+                }
+            },
+            getOption() {
+                const opt = {
+                    page: this.myPage,
+                    size: this.mySize,
+                };
+                return opt;
+            },
+            changePage(code) {
+                switch (code) {
+                    case CHANGEPAGECODE.add:
+                        this.$router.push({ name: 'HangYeZiXunConfig', query: { code: 'add' } });
+                        break;
+                    case CHANGEPAGECODE.editor:
+                        this.$router.push({ name: 'HangYeZiXunConfig', query: { code: 'editor', iiId: this.curIiId } });
+                        break;
+                    default:
+                        break;
+                }
+            },
+            // 获取 数据
+            async getHangYeZiXunData() {
+                const opt = this.getOption();
+                const loading = this.$loading({ background: 'rgba(0, 0, 0, 0.7)' });
+
+                try {
+                    const res = await HYZXApi.getIndustryList(opt);
+                    if (res.code === 0) {
+                        // 渲染页面
+                        this.initPageData(res.data);
+                    }
+                    loading.close();
+                } catch (e) {
+                    loading.close();
+                }
+            },
+            // 删除
+            async getHangYeZiXunDelete(opt) {
+                const loading = this.$loading({ background: 'rgba(0, 0, 0, 0.7)' });
+                try {
+                    const res = await HYZXApi.getIndustryDelete(opt);
+                    loading.close();
+                    if (res.code === 0 && res.data) {
+                        const res = await HYZXApi.getIndustryList(opt);
+                        if (res.code === 0) {
+                            this.initPageData(res.data);
+                        }
+                        loading.close();
+                    }
+                } catch (err) {
+                    loading.close();
+                }
+            },
+            // 渲染页面
+            initPageData(listData) {
+                tableServiceData.myData = listData.data;
+                paginationServiceData.total = listData.total;
+            },
+        },
+        created() {
+            this.getHangYeZiXunData();
         },
     };
 </script>
 
 <style lang="scss" scoped>
-    .admin-hangyezixun {
+    .admin-hangyexuzhi {
+        padding: 20px;
+
+        .top {
+            display: flex;
+            justify-content: flex-end;
+            margin-bottom: 10px;
+
+            .btn-add {
 
+            }
+        }
     }
 </style>

+ 1 - 3
src/views/management/Home/components/Asider.vue

@@ -3,7 +3,7 @@
         <div class="top"></div>
         <el-scrollbar  class="my-menu_wrap">
             <el-menu
-                    :default-active="defaultActive"
+                    :default-active="$route.path"
                     active-text-color="#409EFF"
                     :router="true"
                     class="my-menu"
@@ -37,7 +37,6 @@
         data() {
             return {
                 menuData:      [],
-                defaultActive: '',
             };
         },
         methods:    {
@@ -48,7 +47,6 @@
 
                 const arr = this.menusToRoutes(routes);
                 this.menuData = arr;
-                this.defaultActive = this.$route.path;
             },
             menusToRoutes(routes) {
                 const arr = [];

+ 3 - 5
src/views/management/Home/index.vue

@@ -27,8 +27,7 @@
     import Footer       from './components/Footer';
     import Header       from './components/Header';
     import { getCache } from '@/utils/admin/tools';
-
-    const USER_AUTH = `userAuth`;
+    import { USER_AUTH } from '@/utils/admin/ConstantConfig';
 
     export default {
         name:       'Home',
@@ -77,14 +76,13 @@
             background-color: #D3DCE6;
             color: #333;
             text-align: center;
-
         }
 
         .el-main {
             background-color: #E9EEF3;
             color: #333;
-            padding: 30px 0 30px 30px;
-
+            /*padding: 30px 0 30px 30px;*/
+            padding: 0;
             ::v-deep .el-scrollbar__wrap {
                 overflow-x: hidden;
             }

+ 15 - 7
src/views/management/Login/components/Login.vue

@@ -17,8 +17,9 @@
 </template>
 
 <script>
-    import { getAdminLogin } from "@/api/noToken.js";
-    import {getCache, saveCache} from "@/utils/admin/tools";
+    import { getAdminLogin }                    from '@/api/noToken.js';
+    import { getCache, saveCache, getUserAuth } from '@/utils/admin/tools';
+
     const USER_AUTH = `userAuth`;
     export default {
         name:    'Login',
@@ -57,10 +58,10 @@
                 const opt = this.getOption();
 
                 try {
-                    const res = await getAdminLogin(opt)
+                    const res = await getAdminLogin(opt);
                     if (res.code === 0) {
                         // 缓存 登录状态
-                        this.saveCache(USER_AUTH, res.data)
+                        this.saveCache(USER_AUTH, res.data);
                         // 登录
                         this.goHomePage();
                     }
@@ -82,11 +83,18 @@
             goHomePage() {
                 this.$router.push({ name: 'hangyezixun' });
             },
+            checkISLoading() {
+                const userAuth = getUserAuth();
+                if (userAuth && userAuth.userId) {
+                    this.goHomePage();
+                }
+            },
         },
         created() {
-           // const data = getCache(USER_AUTH);
-           // console.log('缓存 =》', data);
-        }
+            this.checkISLoading();
+            // const data = getCache(USER_AUTH);
+            // console.log('缓存 =》', data);
+        },
     };
 </script>