lin
2024-03-01 cf59b5b39c0cd818484d6f686ddc293d98cfb4ee
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">
@@ -40,8 +30,18 @@
      </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>
        <div>
          <el-button type="warning" size="small" plain icon="el-icon-download" @click="handleExport">导出
          </el-button>
        </div>
        <avue-crud :data="userData" :page="userPage" :option="userOption" @search-change="searchChange"
          @search-reset="searchReset">
        </avue-crud>
      </basic-container>
    </el-dialog>
  </div>
</template>
@@ -58,6 +58,19 @@
  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 website from '@/config/website'
  import {
@@ -112,11 +125,17 @@
              prop: 'discussContent',
              type: 'input',
              row: true,
              rules: [{
                required: true,
                message: '请输入议题',
                trigger: 'blur'
              }],
            },
            {
              label: '选项范围',
              prop: 'optionRange',
              type: 'radio',
              value: 0,
              button: true,
              row: true,
              dicData: [{
@@ -125,13 +144,12 @@
              }, {
                label: '单选',
                value: 0
              }]
            },
            {
              label: '排序',
              prop: 'sort',
              controlsPosition: '',
              type: 'number'
              }],
              rules: [{
                required: true,
                message: '请选项范围',
                trigger: 'blur'
              }],
            },
            {
              label: '选项内容',
@@ -186,23 +204,56 @@
        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: false,
          column: [{
            label: '姓名',
            prop: 'name'
            prop: 'name',
            searchSpan: 4,
            search: true,
          }, {
            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'
@@ -215,18 +266,108 @@
          currentPage: 1,
          total: 0
        },
        query: {},
        type: '',
        newData: {},
        articleRange: {},
        tops: {},
      }
    },
    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.articleId = newData.id
        this.onLoad()
        this.query.level = 1
        this.query.articleId = this.articleId
        this.newData = newData
        this.query.districtId = newData.articleRange
        this.onLoad(this.userPage, this.query)
      },
      handleClose() {
@@ -246,12 +387,10 @@
            })
            form = {}
            this.editFlag = false
            let params = {
              level: 1,
              articleId: this.articleId
            }
            getLists(1, 100, Object.assign(params, this.query)).then(res => {
              const data = res.data.data
              this.data = data
@@ -301,7 +440,7 @@
            return remove(row.id)
          })
          .then(() => {
            this.onLoad()
            this.getUserPage(this.userPage)
            this.$message({
              type: "success",
@@ -338,20 +477,7 @@
          })
      },
      openUser(row, type = 0) {
        this.popupTableUserShow = true
        if (type == 0) {
          this.userParams = {
            articleId: 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 => {
@@ -362,19 +488,17 @@
            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,
          articleId: this.articleId
        }
        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