From e27410aca7eb65b11fec83adb39643399bf3a6b4 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sat, 16 Mar 2024 15:23:18 +0800
Subject: [PATCH] 演示分支,系统名称更改

---
 src/views/article/components/deitDiscussion.vue |  354 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 246 insertions(+), 108 deletions(-)

diff --git a/src/views/article/components/deitDiscussion.vue b/src/views/article/components/deitDiscussion.vue
index 23eb4db..0254b66 100644
--- a/src/views/article/components/deitDiscussion.vue
+++ b/src/views/article/components/deitDiscussion.vue
@@ -1,13 +1,3 @@
-<!--
- * @Author: shuishen 1109946754@qq.com
- * @Date: 2024-01-04 15:18:13
- * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-01-04 17:13:22
- * @FilePath: \jczz_web\src\views\article\components\deitDiscussion.vue
- * @Description: 
- * 
- * Copyright (c) 2024 by shuishen, All Rights Reserved. 
--->
 <template>
     <div>
         <el-dialog title="" append-to-body :visible.sync="popupTableShow" width="80%" :before-close="handleClose">
@@ -41,8 +31,16 @@
             </div>
         </el-dialog>
 
-        <el-dialog title="" append-to-body :visible.sync="popupTableUserShow" width="50%" :before-close="userHandleClose">
-            <avue-crud :data="userData" :page="userPage" :option="userOption"></avue-crud>
+        <el-dialog title="" append-to-body :visible.sync="popupTableUserShow" width="80%" :before-close="userHandleClose">
+            <basic-container>
+                <avue-crud :data="userData" :page="userPage" :option="userOption" @search-change="searchChange"
+                    @search-reset="searchReset">
+                    <template slot-scope="{type,size,row }" slot="menuLeft">
+                        <el-button type="warning" size="small" plain icon="el-icon-download" @click="handleExport">导出
+                        </el-button>
+                    </template>
+                </avue-crud>
+            </basic-container>
         </el-dialog>
     </div>
 </template>
@@ -59,6 +57,22 @@
 import {
     getPage
 } from "@/api/discuss/userTopics"
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import Qs from "qs"
+import {
+    exportBlob
+} from "@/api/common"
+import {
+    getToken
+} from '@/util/auth'
+import {
+    downloadXls
+} from "@/util/util"
+import {
+    dateNow
+} from "@/util/date"
+import website from '@/config/website'
 
 
 import {
@@ -80,7 +94,7 @@
 
             ontitle: '编辑议题',
             editFlag: false,
-
+            disCussFromListClone: {},
             disCussFrom: {
                 discussContent: '',
                 optionRange: 0,
@@ -91,7 +105,7 @@
                 createTime: '',
                 updateTime: '',
                 deleteFlag: '',
-                publicDiscussId: '',
+                articleId: '',
                 parentId: '',
                 level: '',
                 children: [{
@@ -101,62 +115,66 @@
                     createTime: '',
                     updateTime: '',
                     deleteFlag: '',
-                    publicDiscussId: '',
+                    articleId: '',
                     parentId: '',
                     level: '',
                 }]
             },
             optionDiscuss: {
                 emptyText: '取消',
-                column: [
-                    {
-                        label: '议题',
-                        prop: 'discussContent',
-                        type: 'input',
-                        row: true,
-                    },
-                    {
-                        label: '选项范围',
-                        prop: 'optionRange',
-                        type: 'radio',
-                        button: true,
-                        row: true,
-                        dicData: [{
-                            label: '多选',
-                            value: 1
-                        }, {
-                            label: '单选',
-                            value: 0
-                        }]
-                    },
-                    {
-                        label: '排序',
-                        prop: 'sort',
-                        controlsPosition: '',
-                        type: 'number'
-                    },
-                    {
-                        label: '选项内容',
-                        prop: 'children',
-                        type: 'dynamic',
-                        span: 24,
-                        children: {
-                            column: [{
-                                label: '选项标题',
-                                prop: 'optionContent',
-                                type: 'input',
-                                rules: [{
-                                    required: true,
-                                    message: '请输入选项标题',
-                                    trigger: 'blur'
-                                }]
-                            }, {
-                                label: '选项说明',
-                                prop: 'optionDetail',
-                                type: 'input',
+                column: [{
+                    label: '议题',
+                    prop: 'discussContent',
+                    type: 'input',
+                    row: true,
+                    rules: [{
+                        required: true,
+                        message: '请输入议题',
+                        trigger: 'blur'
+                    }],
+                },
+                {
+                    label: '选项范围',
+                    prop: 'optionRange',
+                    type: 'radio',
+                    value: 0,
+                    button: true,
+                    row: true,
+                    dicData: [{
+                        label: '多选',
+                        value: 1
+                    }, {
+                        label: '单选',
+                        value: 0
+                    }],
+                    rules: [{
+                        required: true,
+                        message: '请选项范围',
+                        trigger: 'blur'
+                    }],
+                },
+                {
+                    label: '选项内容',
+                    prop: 'children',
+                    type: 'dynamic',
+                    span: 24,
+                    children: {
+                        column: [{
+                            label: '选项标题',
+                            prop: 'optionContent',
+                            type: 'input',
+                            rules: [{
+                                required: true,
+                                message: '请输入选项标题',
+                                trigger: 'blur'
                             }]
-                        }
-                    },
+                        }, {
+                            label: '选项说明',
+                            prop: 'optionDetail',
+                            type: 'input',
+                        }]
+                    }
+                },
                 ]
             },
 
@@ -173,39 +191,72 @@
                 defaultExpandAll: true,
                 rowKey: 'id',
                 rowParentKey: 'parentId',
-                column: [
-                    {
-                        label: '标题',
-                        prop: 'discussContent',
-                    },
-                    {
-                        label: '选项内容',
-                        prop: 'optionContent',
-                    }
+                column: [{
+                    label: '标题',
+                    prop: 'discussContent',
+                },
+                {
+                    label: '选项内容',
+                    prop: 'optionContent',
+                }
                 ]
             },
 
-            publicDiscussId: '',
+            articleId: '',
 
             userData: [],
             userOption: {
-                addBtn: false,
+                labelWidth: 96,
+                searchLabelWidth: 96,
+                searchShow: true,
+                searchMenuSpan: 3,
+                // menuWidth: 500,
                 menu: false,
+                height: "auto",
+                calcHeight: 54,
+                dialogWidth: 950,
+                tip: false,
+                border: true,
+                //stripe:true,
+                index: true,
+                editBtn: false,
+                addBtn: false,
+                viewBtn: false,
+                selection: true,
+                delBtn: false,
+                excelBtn: true,
+                dialogClickModal: false,
+                header: true,
                 column: [{
                     label: '姓名',
-                    prop: 'name'
+                    prop: 'name',
+                    searchSpan: 4,
+                    search: true,
+                    searchLabelWidth: 46,
                 }, {
                     label: '头像',
+                    type: 'upload',
+                    listType: "picture-img",
                     prop: 'avatar'
                 }, {
                     label: '手机',
-                    prop: 'phone'
+                    prop: 'phone',
+                    searchSpan: 4,
+                    search: true,
                 }, {
                     label: '小区',
                     prop: 'aoiName'
                 }, {
                     label: '地址',
                     prop: 'addressName'
+                }, {
+                    label: '签名',
+                    type: 'upload',
+                    listType: "picture-img",
+                    prop: 'signaturePath'
+                }, {
+                    label: '投票项',
+                    prop: 'optionContent'
                 }, {
                     label: '时间',
                     prop: 'createTime'
@@ -218,19 +269,107 @@
                 currentPage: 1,
                 total: 0
             },
+            query: {},
+            type: '',
+            newData: {},
+            articleRange: {},
+            tops: {},
         }
     },
 
-    watch: {
-    },
+    watch: {},
 
     methods: {
+
+        handleExport () {
+            this.$confirm("是否导出投票人员数据?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+            }).then(() => {
+                NProgress.start()
+                this.query = {}
+                this.query.districtId = this.newData.articleRange
+                if (this.type == 0) {
+                    this.query.articleId = this.articleId
+                } else {
+                    this.query.topicsId = this.tops.id
+                }
+                var data = {
+                    ...this.query
+                }
+                data = Qs.stringify(data)
+                exportBlob(
+                    `/api/blade-userTopics/userTopics/exportUser?${this.website.tokenHeader}=${getToken()}&` + data).then(
+                        res => {
+                            downloadXls(res.data, `投票人员${dateNow()}.xlsx`)
+                            NProgress.done()
+                        })
+            })
+        },
+
+        userHandleClose () {
+
+            this.popupTableUserShow = false
+        },
+
+        searchReset () {
+            this.query.districtId = this.newData.articleRange
+            if (this.type == 0) {
+                this.query.articleId = this.articleId
+            } else {
+                this.query.topicsId = this.tops.id
+            }
+            this.userPage.currentPage = 1
+            this.getUserPage(this.userPage, this.query)
+        },
+
+        searchChange (params, done) {
+            this.query = params
+            this.query.districtId = this.newData.articleRange
+            if (this.type == 0) {
+                this.query.articleId = this.articleId
+            } else {
+                this.query.topicsId = this.tops.id
+            }
+            this.userPage.currentPage = 1
+            this.getUserPage(this.userPage, this.query)
+            done()
+        },
+
+        openUser (row, type = 0) {
+            this.type = type
+            this.popupTableUserShow = true
+            this.query = {}
+            this.articleId = row.id
+            let districtId
+            if (type == 0) {
+                this.newData = row
+                districtId = this.newData.articleRange
+                this.userParams = {
+                    articleId: row.id,
+                    districtId: districtId
+                }
+            } else {
+                districtId = this.newData.articleRange
+                this.tops = row
+                this.userParams = {
+                    topicsId: row.id,
+                    districtId: districtId
+                }
+            }
+            this.getUserPage(this.userPage, this.userParams)
+        },
+
         initData (newData) {
             this.editFlag = false
             this.popupTableShow = true
-            this.publicDiscussId = newData.id
-
-            this.onLoad()
+            this.articleId = newData.id
+            this.query.level = 1
+            this.query.articleId = this.articleId
+            this.newData = newData
+            this.query.districtId = newData.articleRange
+            this.onLoad(this.userPage, this.query)
         },
 
         handleClose () {
@@ -240,8 +379,18 @@
 
         handleSubmit (form, done) {
             done()
-            form.publicDiscussId = this.publicDiscussId
-
+            form.articleId = this.articleId
+            if (this.disCussFromListClone.length > 0) {
+                this.disCussFromListClone.forEach(item => {
+                    if (form.children.length > 0) {
+                        let same = form.children.find(array => array.id === item.id)
+                        if (!same) {
+                            item.deleteFlag = 1
+                            form.children.push(item)
+                        }
+                    }
+                })
+            }
             add(form).then(
                 () => {
                     this.$message({
@@ -250,12 +399,10 @@
                     })
                     form = {}
                     this.editFlag = false
-
                     let params = {
                         level: 1,
-                        publicDiscussId: this.publicDiscussId
+                        articleId: this.articleId
                     }
-
                     getLists(1, 100, Object.assign(params, this.query)).then(res => {
                         const data = res.data.data
                         this.data = data
@@ -305,7 +452,7 @@
                     return remove(row.id)
                 })
                 .then(() => {
-                    this.onLoad()
+                    this.getUserPage(this.userPage)
 
                     this.$message({
                         type: "success",
@@ -320,6 +467,7 @@
 
         edit (row) {
             this.disCussFrom = row
+            this.disCussFromListClone = [].concat(row.children)
             this.editFlag = true
         },
 
@@ -342,38 +490,28 @@
                 })
         },
 
-        openUser (row, type = 0) {
-            this.popupTableUserShow = true
 
-            if (type == 0) {
-                this.userParams = {
-                    publicDiscussId: row.id
-                }
-            } else {
-                this.userParams = {
-                    topicsId: row.id
-                }
-            }
-            this.getUserPage(this.userPage, this.userParams)
-        },
 
         getUserPage (page, params = {}) {
             getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
                 const data = res.data.data
                 this.userPage.total = data.total
                 this.userData = data.records
+                this.userData.forEach(item => {
+                    if (item.avatar.length > 0) {
+                        item.avatar = website.minioUrl + item.avatar
+                    }
+                    if (item.signaturePath && item.signaturePath.length > 0) {
+                        item.signaturePath = website.minioUrl + item.signaturePath
+                        // console.log("=====>", item.signaturePath)
+                    }
+                })
             })
         },
 
-        onLoad () {
+        onLoad (page, params = {}) {
             this.loading = true
-
-            let params = {
-                level: 1,
-                publicDiscussId: this.publicDiscussId
-            }
-
-            getLists(1, 100, Object.assign(params, this.query)).then(res => {
+            getLists(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
                 const data = res.data.data
                 this.data = data
                 this.loading = false

--
Gitblit v1.9.3