sunny 1 سال پیش
والد
کامیت
544e04b296
5فایلهای تغییر یافته به همراه388 افزوده شده و 17 حذف شده
  1. 25 0
      src/api/medalList.js
  2. 7 4
      src/permission.js
  3. 13 0
      src/router/index.js
  4. 330 0
      src/views/medalManage/medalList.vue
  5. 13 13
      src/views/noticeManage/noticeList.vue

+ 25 - 0
src/api/medalList.js

@@ -0,0 +1,25 @@
+import request from '@/utils/request'
+
+export function list(query) {
+  return request({
+    url: '/mall-order/page',
+    method: 'post',
+    params:query
+  })
+}
+
+export function updateItem(query) {
+  return request({
+    url: '/mall-welfare/welfare/edit',
+    method: 'post',
+    data:query
+  })
+}
+
+export function stateItem(query) {
+  return request({
+    url: 'mall-welfare/modify/status',
+    method: 'post',
+    params:query
+  })
+}

+ 7 - 4
src/permission.js

@@ -17,10 +17,6 @@ function hasPermission(roles, permissionRoles) {
 const whiteList = ['/login', '/authredirect']// no redirect whitelist
 //自定义路由
 const myRoles = [
-  // 'pointManage', 
-  // 'pointInstructions', 
-  // 'pointRulesList', 
-  // 'pointList', 
   'goodsManage', 
   'goodsExchangeRules', 
   'goodsList', 
@@ -31,12 +27,19 @@ const myRoles = [
   'welfareList', 
   'exchangeManage', 
   'exchangeList',
+
+  // 'pointManage', 
+  // 'pointInstructions', 
+  // 'pointRulesList', 
+  // 'pointList', 
   // 'activityManage', 
   // 'activityList', 
   // 'noticeManage', 
   // 'noticeList', 
   // 'ranking',
   // 'rankingList',
+  // 'medalManage', 
+  // 'medalList', 
 ]
 
 router.beforeEach((to, from, next) => {

+ 13 - 0
src/router/index.js

@@ -164,6 +164,19 @@ export const asyncRouterMap = [
       { path: 'rankingList', component: _import('ranking/rankingList'), name: 'rankingList', meta: { title: '积分排行', icon: 'paihang', noCache: true }},
     ]
   },
+  {
+    path: '/medalManage',
+    component: Layout,
+    redirect: 'noredirect',
+    name: 'medalManage',
+    meta: {
+      title: '勋章管理',
+      icon: 'xunzhang'
+    },
+    children: [
+      { path: 'medalList', component: _import('medalManage/medalList'), name: 'medalList', meta: { title: '勋章列表', icon: 'xunzhang', noCache: true }},
+    ]
+  },
   {
     path: '/user',
     component: Layout,

+ 330 - 0
src/views/medalManage/medalList.vue

@@ -0,0 +1,330 @@
+<template>
+    <div class="app-container calendar-list-container exchangeView">
+        <!-- 查询和其他操作 -->
+        <div class="filter-container">
+            <el-select v-model="listQuery.type" clearable placeholder="勋章类型" style="top: -4px;width: 200px;">
+                <el-option :key="item.type" v-for="item in typeList" :label="item.name" :value="item.type">
+                </el-option>
+            </el-select>
+            <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
+        </div>
+
+        <!-- 查询结果 -->
+        <el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit
+            highlight-current-row>
+            <el-table-column type="index" label="序号" header-align="center" align="center">
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="勋章类型" prop="type">
+            </el-table-column>
+            <el-table-column align="center" min-width="60px" label="金">
+                <template slot-scope="props">
+                    <img style="width: 50px; height: 50px" :src="props.row.goldMedal">
+                </template>
+            </el-table-column>
+            <el-table-column align="center" min-width="60px" label="银">
+                <template slot-scope="props">
+                    <img style="width: 50px; height: 50px" :src="props.row.silverMedal">
+                </template>
+            </el-table-column>
+            <el-table-column align="center" min-width="60px" label="铜">
+                <template slot-scope="props">
+                    <img style="width: 50px; height: 50px" :src="props.row.copperMedal">
+                </template>
+            </el-table-column>
+            <el-table-column align="center" min-width="80px" label="状态" prop="statusName">
+            </el-table-column>
+            <el-table-column align="center" min-width="150px" label="创建时间" prop="createTime">
+            </el-table-column>
+            <el-table-column align="center" label="操作" width="240px" class-name="small-padding fixed-width">
+                <template slot-scope="scope">
+                    <el-button type="primary" size="small" @click="handleUpdate(scope.row)">编辑</el-button>
+                    <el-button v-if="scope.row.status == 0" type="success" size="small"
+                        @click="changeState(scope.row.welfareId, 1)">开启</el-button>
+                    <el-button v-if="scope.row.status == 1" type="warning" size="small"
+                        @click="changeState(scope.row.welfareId, 0)">关闭</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+
+        <!-- 分页 -->
+        <div class="pagination-container">
+            <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                :current-page="listQuery.page" :page-sizes="[10, 20, 30, 50]" :page-size="listQuery.limit"
+                layout="total, sizes, prev, pager, next, jumper" :total="total">
+            </el-pagination>
+        </div>
+         <!-- 添加或修改对话框 -->
+         <el-dialog title="编辑" :visible.sync="dialogFormVisible" width="40%">
+            <el-form ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="100px">
+                <el-form-item label="勋章类型">
+                    <el-input readonly v-model="dataForm.type" style="width: 330px"></el-input>
+                </el-form-item>
+                <div style="display: flex;">
+                    <el-form-item style="width: 250px" label="默认勋章">
+                    <el-upload
+                        class="avatar-uploader"
+                        :action="fileImgUrl"
+                        :show-file-list="false"
+                        :on-success="handleMedalSuccess"
+                        :before-upload="beforeAvatarUpload">
+                        <img v-if="dataForm.medal" :src="dataForm.medal" class="avatar">
+                        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                    </el-upload>    
+                    </el-form-item>
+                    <el-form-item style="width: 250px" label="金勋章">
+                        <el-upload
+                            class="avatar-uploader"
+                            :action="fileImgUrl"
+                            :show-file-list="false"
+                            :on-success="handleGoldMedalSuccess"
+                            :before-upload="beforeAvatarUpload">
+                            <img v-if="dataForm.goldMedal" :src="dataForm.goldMedal" class="avatar">
+                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                        </el-upload>    
+                    </el-form-item>
+                </div>
+                <div style="display: flex;">
+                    <el-form-item style="width: 250px" label="银勋章">
+                        <el-upload
+                            class="avatar-uploader"
+                            :action="fileImgUrl"
+                            :show-file-list="false"
+                            :on-success="handleSilverMedalSuccess"
+                            :before-upload="beforeAvatarUpload">
+                            <img v-if="dataForm.silverMedal" :src="dataForm.silverMedal" class="avatar">
+                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                        </el-upload>    
+                    </el-form-item>
+                    <el-form-item style="width: 250px" label="铜勋章">
+                        <el-upload
+                            class="avatar-uploader"
+                            :action="fileImgUrl"
+                            :show-file-list="false"
+                            :on-success="handleCopperMedalSuccess"
+                            :before-upload="beforeAvatarUpload">
+                            <img v-if="dataForm.copperMedal" :src="dataForm.copperMedal" class="avatar">
+                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+                        </el-upload>    
+                    </el-form-item>
+                </div>
+                
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="dialogFormVisible = false">取消</el-button>
+                <el-button type="primary" @click="updateData">确定</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+  
+<style>
+.avatar-uploader .el-upload {
+    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: 80px;
+    height: 80px;
+    line-height: 80px;
+    text-align: center;
+  }
+  .avatar {
+    width: 80px;
+    height: 80px;
+    display: block;
+  }
+.demo-table-expand {
+    font-size: 0;
+}
+
+.demo-table-expand label {
+    width: 200px;
+    color: #99a9bf;
+}
+
+.demo-table-expand .el-form-item {
+    margin-right: 0;
+    margin-bottom: 0;
+}
+</style>
+  
+<script>
+import { list, updateItem, stateItem } from "@/api/medalList";
+import waves from "@/directive/waves"; // 水波纹指令
+import Tinymce from '@/components/Tinymce'
+
+export default {
+    components: { Tinymce },
+    directives: { waves },
+    data() {
+        return {
+            fileImgUrl: "https://xiaoyou.dgtis.com/admin/storage/create",
+            dialogFormVisible: false,
+            dataForm: {
+                type:'',
+                medal:'',
+                goldMedal:'',
+                silverMedal:'',
+                copperMedal:'',
+            },
+            typeList: [
+                {
+                    type: 0,
+                    name: '当前积分'
+                },
+                {
+                    type: 1,
+                    name: '获取总积分'
+                },
+            ],
+            list: [
+                {
+                    id:'1',
+                    type:'入职年限',
+                    medal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    goldMedal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    silverMedal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    copperMedal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    status:1,
+                    statusName:'开启',
+                    createTime:'2023-4-25',
+                },
+                {
+                    id:'2',
+                    type:'入职年限',
+                    medal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    goldMedal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    silverMedal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    copperMedal:'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
+                    status:0,
+                    statusName:'关闭',
+                    createTime:'2023-4-25',
+                },
+            ],
+            total: 0,
+            listLoading: false,
+            listQuery: {
+                page: 1,
+                limit: 10,
+                type: '',
+                
+            },
+        }
+    },
+    created() {
+        // this.getList();
+    },
+    methods: {
+        handleMedalSuccess(res,file) {
+            this.dataForm.medal = URL.createObjectURL(file.raw);
+        },
+        handleGoldMedalSuccess(res,file) {
+            this.dataForm.goldMedal = URL.createObjectURL(file.raw);
+        },
+        handleSilverMedalSuccess(res,file) {
+            this.dataForm.silverMedal = URL.createObjectURL(file.raw);
+        },
+        handleCopperMedalSuccess(res,file) {
+            this.dataForm.copperMedal = URL.createObjectURL(file.raw);
+            
+        },
+        beforeAvatarUpload(file) {
+            const isJPG = file.type === 'image/jpeg';
+            const isLt2M = file.size / 1024 / 1024 < 2;
+
+            if (!isJPG) {
+            this.$message.error('上传头像图片只能是 JPG 格式!');
+            }
+            if (!isLt2M) {
+            this.$message.error('上传头像图片大小不能超过 2MB!');
+            }
+            return isJPG && isLt2M;
+        },
+        handleUpdate(row) {
+            this.dataForm = Object.assign({}, row);
+            this.dialogFormVisible = true;
+        },
+        updateData() {
+            updateItem(this.dataForm).then(() => {
+                this.dialogFormVisible = false
+                this.$notify({
+                    title: '成功',
+                    message: '更新成功',
+                    type: 'success',
+                    duration: 2000
+                })
+                this.getList()
+            })
+        },
+        changeState(welfareId, index) {
+            stateItem({ welfareId: welfareId, status: index }).then(response => {
+                this.$notify({
+                    title: '成功',
+                    message: '状态修改成功',
+                    type: 'success',
+                    duration: 2000
+                })
+                this.getList()
+            })
+        },
+        getList() {
+            this.listLoading = true
+            list(this.listQuery).then(response => {
+                this.list = response.data.data.items
+                this.total = response.data.data.total
+                this.listLoading = false
+            }).catch(() => {})
+        },
+        handleFilter() {
+            this.listQuery.page = 1
+            this.getList()
+        },
+        handleSizeChange(val) {
+            this.listQuery.limit = val
+            this.getList()
+        },
+        handleCurrentChange(val) {
+            this.listQuery.page = val
+            this.getList()
+        },
+    }
+}
+</script>
+<style>
+.ad-avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+}
+
+.ad-avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+}
+
+.ad-avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+}
+
+.ad-avatar {
+    display: block;
+}
+.exchangeView .el-dialog__body {
+    padding-top: 0px;
+}
+</style>
+  

+ 13 - 13
src/views/noticeManage/noticeList.vue

@@ -3,7 +3,7 @@
 
         <!-- 查询和其他操作 -->
         <div class="filter-container">
-            <el-input clearable class="filter-item" style="width: 200px;" placeholder="活动名称"
+            <el-input clearable class="filter-item" style="width: 200px;" placeholder="标题"
                 v-model="listQuery.title"></el-input>
            
             <!-- <el-date-picker class="filter-item" v-model="listQuery.createTime" type="datetime" placeholder="创建时间">
@@ -26,26 +26,26 @@
             <el-table-column type="index" label="序号" header-align="center" align="center">
             </el-table-column>
 
-            <el-table-column align="center" min-width="100px" label="活动名称" prop="title">
+            <el-table-column align="center" min-width="100px" label="标题" prop="title">
             </el-table-column>
-            <el-table-column align="center" min-width="100px" label="活动开始结束时间">
+            <!-- <el-table-column align="center" min-width="100px" label="活动开始结束时间">
                 <template slot-scope="props">
                    {{ props.row.startTimeStr }}~{{ props.row.endTimeStr }}
                 </template>
-            </el-table-column>
+            </el-table-column> -->
             <el-table-column align="center" min-width="80px" label="创建人" prop="creater">
             </el-table-column>
             <el-table-column align="center" min-width="150px" label="创建时间" prop="createTime">
             </el-table-column>
-            <el-table-column align="center" min-width="80px" label="活动状态" prop="statusName">
-            </el-table-column>
+            <!-- <el-table-column align="center" min-width="80px" label="活动状态" prop="statusName">
+            </el-table-column> -->
             <el-table-column align="center" label="操作" width="240px" class-name="small-padding fixed-width">
                 <template slot-scope="scope">
                     <el-button type="primary" size="small" @click="handleUpdate(scope.row)">编辑</el-button>
-                    <el-button v-if="scope.row.status == 0" type="success" size="small"
+                    <!-- <el-button v-if="scope.row.status == 0" type="success" size="small"
                         @click="changeState(scope.row.welfareId, 1)">开启</el-button>
                     <el-button v-if="scope.row.status == 1" type="warning" size="small"
-                        @click="changeState(scope.row.welfareId, 0)">关闭</el-button>
+                        @click="changeState(scope.row.welfareId, 0)">关闭</el-button> -->
                     <el-button type="danger" size="mini" @click="handleDelete(scope.row.welfareId, -1)">删除</el-button>
                 </template>
             </el-table-column>
@@ -61,13 +61,13 @@
         <!-- 添加或修改对话框 -->
         <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="70%">
             <el-form :rules="rules" ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="100px" style='width:700px;margin-left:50px;'>
-                <el-form-item label="活动名称" prop="title">
+                <el-form-item label="标题" prop="title">
                     <el-input v-model="dataForm.title" style="width: 350px"></el-input>
                 </el-form-item>
-                <el-form-item label="活动连接">
+                <!-- <el-form-item label="活动连接">
                     <el-input v-model="dataForm.activityUrl" style="width: 350px"></el-input>
-                </el-form-item>
-                <el-form-item style="width: 800px" label="活动图片" prop="imgUrl">
+                </el-form-item> -->
+                <!-- <el-form-item style="width: 800px" label="活动图片" prop="imgUrl">
                     <el-tooltip content="建议图片宽高比260*200" placement="top-start">
                         <el-upload :action="fileImgUrl" list-type="picture-card" :file-list="dataForm.images" :limit="1"
                             :on-success="handleGallerySucess" :on-exceed="handleExceed" :before-upload="uploadBannerImg"
@@ -89,7 +89,7 @@
                         <el-option :key="item.loginId" v-for="item in participantsList" :label="item.userName" :value="item.loginId">
                         </el-option>
                     </el-select>
-                </el-form-item>
+                </el-form-item> -->
                 <el-form-item style="width: 800px" label="内容" prop="content">
                     <tinymce v-model="dataForm.content" ref="tinymce"></tinymce>
                 </el-form-item>