Browse Source

【兑换管理】-【待审核列表】增加批量操作功能;表彰模块功能调整(增加表彰详情页)

sunlupeng 1 year ago
parent
commit
f73c95aa3b

+ 1 - 0
config/dev.env.js

@@ -3,6 +3,7 @@ module.exports = {
 	ENV_CONFIG: '"dev"',
   // 本地数据库:登录用户名 admin123,密码 admin123
   BASE_API: '"http://192.168.100.208:9083/admin"',
+  // BASE_API: '"http://47.103.79.143:9085/admin"',
   OS_API: '"http://47.103.79.143:9085/admin"',
   // OS_API: '"https://xiaoyou.dgtis.com/admin"',
   // BASE_API: '"https://xiaoyou.dgtis.com/admin"',

+ 30 - 0
src/api/commendManage.js

@@ -41,5 +41,35 @@ export function types(query) {
 }
 
 
+export function dataList(query) {
+  return request({
+    url: '/mall-commend/commend/info',
+    method: 'get',
+    params:query
+  })
+}
+
+export function dataAdd(data) {
+  return request({
+    url: '/mall-commend/commend/staff/add',
+    method: 'post',
+    data
+  })
+}
 
+export function dataEdit(data) {
+  return request({
+    url: '/mall-commend/commend/staff/edit',
+    method: 'post',
+    data
+  })
+}
+
+export function dataRemove(query) {
+  return request({
+    url: '/mall-commend/commend/staff/del',
+    method: 'post',
+    params:query
+  })
+}
 

+ 4 - 3
src/permission.js

@@ -46,7 +46,8 @@ const myRoles = [
   // 'medalManage', 
   // 'medalList', 
   'commendManage', 
-  'commendList', 
+  'commendList',
+  'commendDataList', 
   'festivalManage', 
   'festivalList', 
   'certManage', 
@@ -68,8 +69,8 @@ router.beforeEach((to, from, next) => {
       if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
         store.dispatch('GetUserInfo').then(res => {
           store.dispatch('GetUserMenus').then(res => { // 拉取user_info
-            const roles = res.data.data // note: roles must be a array! such as: ['editor','develop']
-            // const roles = myRoles;
+            // const roles = res.data.data // note: roles must be a array! such as: ['editor','develop']
+            const roles = myRoles;
             store.dispatch('GenerateRoutes', { roles }).then(() => { // 根据roles权限生成可访问的路由表
               router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
               next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record

+ 2 - 1
src/router/index.js

@@ -191,7 +191,8 @@ export const asyncRouterMap = [
       icon: 'xunzhang'
     },
     children: [
-      { path: 'commendList', component: _import('commendManage/commendList'), name: 'commendList', meta: { title: '表彰列表', icon: 'xunzhang', noCache: true }},
+      { path: 'commendList', component: _import('commendManage/commendList'), name: 'commendList', meta: { title: '表彰列表', noCache: true }},
+      { path: 'commendDataList/:id', component: _import('commendManage/commendDataList'), name: 'commendDataList', meta: { title: '表彰人员', noCache: false, hideTag: true, hidden: true }},
     ]
   },
   {

+ 278 - 0
src/views/commendManage/commendDataList.vue

@@ -0,0 +1,278 @@
+<template>
+    <div class="app-container calendar-list-container">
+
+        <!-- 查询和其他操作 -->
+        <div class="filter-container">
+            <el-button class="filter-item" type="primary" @click="handleCreate" icon="el-icon-edit">添加</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="60px" label="员工号" prop="employeNo">
+            </el-table-column>
+            <el-table-column align="center" min-width="100px" label="姓名" prop="userName">
+            </el-table-column>
+            <el-table-column align="center" min-width="60px" label="部门" prop="deptName">
+            </el-table-column>
+            <el-table-column align="center" min-width="60px" 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, false)">编辑</el-button>
+
+                    <el-button type="danger" size="mini" @click="handleDelete(scope.row)">删除</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
+        :close-on-click-modal="false"
+        :title="textMap[dialogStatus]"
+        :visible.sync="dialogFormVisible"
+        width="70%"
+      >
+        <el-form :rules="rules" ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="80px" style='width: 700px; margin-left:50px;'>
+            <el-form-item label="表彰人" prop="loginId">
+                <el-select v-model="dataForm.loginId" clearable filterable placeholder="请选择" style="width: 350px">
+                    <el-option :key="item.loginId" v-for="item in recipientsList" :label="item.userName" :value="item.loginId">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item
+                    style="width: 800px"
+                    label="表彰内容"
+                    prop="content"
+                    >
+                <tinymce v-model="dataForm.content" ref="tinymce"></tinymce>
+            </el-form-item>
+            
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogFormVisible = false">取消</el-button>
+          <el-button v-if="dialogStatus == 'create'" type="primary" @click="createData">确定</el-button>
+          <el-button v-else type="primary" @click="updateData">确定</el-button>
+        </div>
+      </el-dialog>
+
+    </div>
+</template>
+  
+<style>
+.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 { dataList, dataAdd, dataEdit, dataRemove } from "@/api/commendManage";
+import { allUserList } from "@/api/public";
+import waves from "@/directive/waves"; // 水波纹指令
+import Tinymce from '@/components/Tinymce'
+
+export default {
+    components: { Tinymce },
+    directives: { waves },
+    data() {
+        return {
+            recipientsList:[],
+            list: [
+            ],
+            total: 0,
+            listLoading: false,
+            listQuery: {
+                page: 1,
+                limit: 10,
+                commendId:this.$route.params.id
+            },
+            dataForm: {
+                commendId:this.$route.params.id,
+                loginId: undefined,
+                content: undefined,
+            },
+            dialogFormVisible: false,
+            dialogStatus: '',
+            textMap: {
+                update: "编辑",
+                create: "创建",
+            },
+            rules: {
+                loginId: [{ required: true, message: "请选择表彰人", trigger: "blur" }],
+                content: [{ required: true, message: "表彰内容不能为空", trigger: "blur" }],
+            },
+        }
+    },
+    created() {
+        this.getAllUserList(); 
+        this.getList();
+    },
+    methods: {
+        getAllUserList() {
+            allUserList().then(response => {
+                this.recipientsList = response.data.data;
+            }).catch(() => { });
+        },
+        resetForm() {
+            this.dataForm = {
+                commendId:this.$route.params.id,
+                loginId: undefined,
+                content: undefined,
+            };
+        },
+        handleCreate() {
+            this.resetForm();
+            this.dataForm.dictType = this.dictType;
+            this.dialogFormVisible = true;
+            this.dialogStatus = "create";
+            this.$nextTick(() => {
+                this.$refs["dataForm"].clearValidate();
+            });
+        },
+        createData() {
+            this.$refs["dataForm"].validate((valid) => {
+                if (valid) {
+                    dataAdd(this.dataForm)
+                        .then(() => {
+                            this.dialogFormVisible = false;
+
+                            this.$notify({
+                                title: "成功",
+                                message: "创建成功",
+                                type: "success",
+                                duration: 2000,
+                            });
+                            this.getList()
+                        })
+                }
+            });
+        },
+        getList() {
+            this.listLoading = true
+            dataList(this.listQuery).then(response => {
+                this.list = response.data.data.items
+                this.total = response.data.data.total
+                this.listLoading = false
+            }).catch(() => {
+                this.list = []
+                this.total = 0
+                this.listLoading = false
+            })
+        },
+
+        handleFilter() {
+            this.listQuery.page = 1
+            this.getList()
+        },
+
+        handleSizeChange(val) {
+            this.listQuery.limit = val
+            this.getList()
+        },
+
+        handleCurrentChange(val) {
+            this.listQuery.page = val
+            this.getList()
+        },
+
+        handleUpdate(row) {
+            this.dataForm = Object.assign({}, row);
+            let content = this.dataForm.content;
+            this.dialogStatus = 'update'
+            this.dialogFormVisible = true
+            this.$nextTick(() => {
+                this.$refs.tinymce.setContent(content);
+                this.$refs['dataForm'].clearValidate();
+            })
+        },
+
+        updateData() {
+            this.$refs['dataForm'].validate((valid) => {
+                if (valid) {
+                    dataEdit(this.dataForm).then(() => {
+                        this.dialogFormVisible = false
+                        this.$notify({
+                            title: '成功',
+                            message: '更新成功',
+                            type: 'success',
+                            duration: 2000
+                        })
+                        this.getList()
+                    })
+
+                }
+            })
+        },
+
+        handleDelete(row) {
+
+            this.$confirm('确认删除吗?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                dataRemove({ id:row.id}).then(response => {
+                    this.$notify({
+                        title: '成功',
+                        message: '删除成功',
+                        type: 'success',
+                        duration: 2000
+                    })
+                    const index = this.list.indexOf(row)
+                    this.list.splice(index, 1)
+                })
+            }).catch(() => {
+
+            })
+
+        },
+    }
+}
+</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;
+}
+</style>
+  

+ 7 - 138
src/views/commendManage/commendList.vue

@@ -16,11 +16,14 @@
       <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">
+        <template slot-scope="scope">
+            <router-link :to="{name: 'commendDataList', params: { id: scope.row.commendId }}">
+                <div style="color: #337ab7;cursor: pointer;">{{ scope.row.title }}</div>
+            </router-link>
+        </template>
       </el-table-column>
       <el-table-column align="center" min-width="80px" label="类型" prop="typeName">
       </el-table-column>
-      <!-- <el-table-column align="center" min-width="80px" label="属性" prop="subTypeName">
-      </el-table-column> -->
       <el-table-column align="center" min-width="80px" label="日期" prop="createTime">
       </el-table-column>
       <el-table-column align="center" label="操作" width="300px" class-name="small-padding fixed-width">
@@ -44,41 +47,18 @@
     </div>
 
     <!-- 添加或修改对话框 -->
-    <el-dialog :close-on-click-modal="false" :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="50%">
+    <el-dialog :close-on-click-modal="false" :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="40%">
       <el-form :rules="rules" ref="dataForm" :model="dataForm" status-icon label-position="left" label-width="80px"
         style="width: 700px; margin-left: 50px">
         <el-form-item label="标题" prop="title">
           <el-input style="width: 350px" v-model="dataForm.title"></el-input>
         </el-form-item>
         <el-form-item label="类型" prop="type">
-          <el-select @change="changeType" v-model="dataForm.type" filterable placeholder="请选择" style="width: 350px">
+          <el-select v-model="dataForm.type" filterable placeholder="请选择" style="width: 350px">
             <el-option :key="item.type" v-for="item in typeList" :label="item.name" :value="item.type">
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="表彰人" prop="recipientsList">
-          <el-select v-model="dataForm.recipientsList" multiple filterable placeholder="请选择" style="width: 350px">
-            <el-option :key="item.loginId" v-for="item in recipientsList" :label="item.userName" :value="item.loginId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <div v-if="typeVisible">
-          <el-form-item label="属性" prop="subType">
-            <el-select v-model="dataForm.subType" filterable placeholder="请选择" style="width: 350px">
-              <el-option :key="item.type" v-for="item in subTypeList" :label="item.name" :value="item.type">
-              </el-option>
-            </el-select>
-          </el-form-item>
-
-          <el-form-item label="附件" prop="fileIds">
-            <el-upload style="width: 350px" class="avatar-uploader" :action="fileImgUrl" list-type="text" multiple
-              :limit="5" :file-list="dataForm.files" :on-success="handleAvatarSuccess" :on-exceed="handleExceed"
-              :before-remove="beforeRemove" :on-remove="handleRemove">
-              <el-button size="small" type="primary">点击上传</el-button>
-            </el-upload>
-          </el-form-item>
-        </div>
-
       </el-form>
 
       <div slot="footer" class="dialog-footer">
@@ -114,7 +94,6 @@ import {
   state,
   types,
 } from "@/api/commendManage";
-import { allUserList } from "@/api/public";
 import waves from "@/directive/waves"; // 水波纹指令
 import Tinymce from "@/components/Tinymce";
 
@@ -123,24 +102,9 @@ export default {
   directives: { waves },
   data() {
     return {
-      recipientsList:[],
-      typeVisible: false,
-      fileImgUrl: this.upLoadUrl,
       typeList: [],
-      subTypeList: [
-        {
-          type: 0,
-          name: "奖状",
-        },
-        // {
-        //   type: 1,
-        //   name: "邮件",
-        // },
-      ],
       list: [
       ],
-      delarr: [],
-      multipleSelection: [],
       total: 0,
       listLoading: false,
       listQuery: {
@@ -151,12 +115,6 @@ export default {
       dataForm: {
         type: undefined,
         title: undefined,
-        subTitle: undefined,
-        pubDate: undefined,
-        fileIds: undefined,
-        fileName: undefined,
-        files: [],
-        recipientsList:[],
       },
       dialogFormVisible: false,
       dialogStatus: "",
@@ -166,19 +124,13 @@ export default {
       },
       rules: {
         title: [{ required: true, message: "标题不能为空", trigger: "blur" }],
-        recipientsList: [
-          { required: true, message: "表彰人不能为空", trigger: "blur" },
-        ],
         type: [{ required: true, message: "请选择类型", trigger: "blur" }],
-        subType: [{ required: true, message: "请选择属性", trigger: "blur" }],
-        fileIds: [{ required: true, message: "请上传礼品图片", trigger: "blur" }],
       },
     };
   },
   created() {
     this.getTypeList();
     this.getList();
-    this.getAllUserList(); 
   },
   methods: {
     getTypeList(){
@@ -186,13 +138,6 @@ export default {
         this.typeList = response.data.data;
       })
     },
-    changeType(val) {
-      if (val == 33) {
-        this.typeVisible = true;
-      } else {
-        this.typeVisible = false;
-      }
-    },
     changeState(commendId, index) {
       state({ commendId: commendId, status: index }).then(response => {
         this.$notify({
@@ -204,70 +149,12 @@ export default {
         this.getList()
       })
     },
-    handleAvatarSuccess(res, file, fileList) {
-      console.log(file, fileList);
-      console.log("------", "==========");
-      console.log("res = ", res);
-
-      let files = [];
-      let names = [];
-      for (let i in fileList) {
-        let response = fileList[i].response;
-        if (response.errno && response.errno != "0") {
-          this.$message.error("该文件上传失败,已被移除,请重新上传!");
-          // 上传失败移除该 file 对象
-          fileList.splice(i, 1);
-        } else {
-          let name = fileList[i].name;
-          let id = fileList[i].response.data.id;
-          files.push(id);
-          names.push(name);
-        }
-      }
-      this.dataForm.fileIds = files.join(",");
-      this.dataForm.fileName = names.join(",");
-    },
-    handleExceed(files, fileList) {
-      this.$message.warning(
-        `当前限制选择 5 个文件,本次选择了 ${files.length} 个文件!,共选择了 ${files.length + fileList.length
-        } 个文件`
-      );
-    },
-    beforeRemove(file, fileList) {
-      return this.$confirm(`确定移除 ${file.name}?`);
-    },
-    handleRemove(file, fileList) {
-      console.log(file, fileList);
-
-      let files = [];
-      let names = [];
-      for (let i in fileList) {
-        let response = fileList[i].response;
-        let name = fileList[i].name;
-        let id = response.data.id;
-        files.push(id);
-        names.push(name);
-      }
-      this.dataForm.fileIds = files.join(",");
-      this.dataForm.fileName = names.join(",");
-    },
     resetForm() {
       this.dataForm = {
         type: undefined,
         title: undefined,
-        subTitle: undefined,
-        pubDate: undefined,
-        fileIds: undefined,
-        fileName: undefined,
-        files: [],
-        recipientsList:[],
       };
     },
-    getAllUserList() {
-      allUserList().then(response => {
-        this.recipientsList = response.data.data;
-      }).catch(() => { });
-    },
     handleCreate() {
       this.resetForm();
 
@@ -330,26 +217,8 @@ export default {
 
     handleUpdate(row) {
       this.dataForm = Object.assign({}, row);
-      if (this.dataForm.type == 33) {
-        this.typeVisible = true;
-      } else {
-        this.typeVisible = false;
-      }
       this.dialogStatus = "update";
       this.dialogFormVisible = true;
-      if (this.dataForm.files) {
-        let files = this.dataForm.files;
-        this.dataForm.files = [];
-        for (let i in files) {
-          let fileUrl = files[i].url;
-          let fileName = files[i].name;
-          this.dataForm.files.push({
-            name: fileName,
-            url: fileUrl,
-            response: { error: "0", data: files[i] },
-          });
-        }
-      }
       this.$nextTick(() => {
         this.$refs["dataForm"].clearValidate();
       });

+ 43 - 0
src/views/exchangeManage/approvalList.vue

@@ -20,6 +20,8 @@
             </el-select>
             <el-button class="filter-item" type="primary" v-waves icon="el-icon-search" @click="handleFilter">查找</el-button>
             <el-button class="filter-item" type="primary" v-waves icon="el-icon-download" @click="handleDownLoad">导出</el-button>
+            <el-button class="filter-item" type="primary" v-waves icon="el-icon-upload2" @click="handleUpload">导入</el-button>
+            <el-button class="filter-item" type="primary" v-waves icon="el-icon-download" @click="handleDownLoadPlate">模版下载</el-button>
 
         </div>
 
@@ -190,6 +192,18 @@
             </div>
         </el-dialog>
 
+        <el-dialog title="导入" :visible.sync="uploadVisible" width="40%">
+            <el-form label-width="100px">
+                <el-form-item label="上传文件:">
+                    <input type="file" ref="uploadFile">
+
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button size="small" type="primary" @click="submitUploadFile">确 定</el-button>
+            </span>
+        </el-dialog>
+
     </div>
 </template>
   
@@ -210,6 +224,7 @@
 </style>
   
 <script>
+import axios from 'axios';
 import { complete, list, detail } from "@/api/exchangeManage";
 import { dataTypeList } from "@/api/public";
 import waves from "@/directive/waves"; // 水波纹指令
@@ -221,6 +236,7 @@ export default {
     directives: { waves },
     data() {
         return {
+            upLoadApi:'https://xiaoyou.dgtis.com/admin/storage/create',
             productAttributeList: [],
             deliveryTypeList: [ ],
             orderTypeList: [
@@ -262,6 +278,7 @@ export default {
                 orderType:0
             },
             dialogVisible: false,
+            uploadVisible:false,
             dialogStatus: '',
             textMap: {
                 complete: "审批",
@@ -276,6 +293,32 @@ export default {
         this.getList();
     },
     methods: {
+        handleDownLoadPlate(){
+            window.location.href = process.env.BASE_API + '/mall-order/exportOrderLog';
+        },
+        submitUploadFile(){
+            console.log(this.$refs.uploadFile.files);
+            let fileFormData = new FormData();
+            fileFormData.append('File',this.$refs.uploadFile.files[0]);
+            let requestConfig = {
+                headers: {
+                "Content-Type": "multipart/form-data"
+                }
+            };
+
+            const instance = axios.create({
+                withCredentials: true
+            })
+
+            instance.post(this.upLoadApi,fileFormData,requestConfig ).then(res=>{
+                this.$message.success('上传成功!')
+            })
+            this.getList();
+            this.uploadVisible = false;
+        },
+        handleUpload(){
+            this.uploadVisible = true;
+        },
         getDeliveryTypeList(){
             dataTypeList({dictType:'exchange_methond'}).then(response => {
                 this.deliveryTypeList = response.data.data;