linwe
2023-11-23 16567c73dda0cefb9b1176bf29dff2f23871413e
src/views/article/discussionManage.vue
@@ -1,11 +1,324 @@
<template>
  <div id="">
    议事
  </div>
  <basicContainer>
    <avue-crud :data="data" ref="crud" :table-loading="loading" @current-change="currentChange"
      @search-change="searchChange" @search-reset="searchReset" @size-change="sizeChange" :option="option"
      v-model="data" :page="page" @selection-change="selectionChange" @row-del="rowDel" @refresh-change="refreshChange"
      @on-load="onLoad">
      <template slot="menuLeft">
        <el-button type="danger" size="small" plain icon="el-icon-delete" v-if="permission.user_delete"
          @click="handleDelete">批量删除
        </el-button>
      </template>
      <template slot-scope="scope" slot="menu">
        <el-button type="text" icon="el-icon-circle-plus-outline" size="small"
          @click.stop="openDilog(scope.row,scope.index)">编辑议题
        </el-button>
      </template>
    </avue-crud>
    <el-dialog title="" append-to-body :visible.sync="dialogVisibles" width="50%" :before-close="handleClose">
      <span slot="title" class="dialog-footer">
        {{ontitle}}
      </span>
      <avue-form @submit="handleSubmit" :option="optionDiscuss" v-model="disCussFrom">
      </avue-form>
    </el-dialog>
  </basicContainer>
</template>
<script>
  import {
    getListPd,
    getDetailPd,
    addPd,
    updatePd,
    removePd
  } from "@/api/discuss/publicDiscuss";
  import {
    getList,
    getDetail,
    add,
    update,
    remove
  } from "@/api/discuss/topics";
  import option from "@/option/discuss/publicDiscuss";
  import {
    mapGetters
  } from "vuex";
  import {
    getDictionary
  } from '@/api/system/dict'
  export default {
    data() {
      return {
        optionDiscuss: {
          column: [{
              label: '议题',
              prop: 'discussContent',
              type: 'input',
              row: true,
            }, {
              label: '选项范围',
              prop: 'option',
              type: 'radio',
              button: true,
              row: true,
              dicData: [{
                label: '多选',
                value: 0
              }, {
                label: '单选',
                value: 1
              }]
            }, {
              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',
                }]
              }
            },
          ]
        },
        disCussFrom: {
          discussContent: '',
          option: 0,
          sort: 1,
          optionContent: '',
          optionDetail: '',
          number: '',
          createTime: '',
          updateTime: '',
          deleteFlag: '',
          publicDiscussId: '',
          parentId: '',
          level: '',
          children: [{
            optionContent: '',
            optionDetail: '',
            number: '',
            createTime: '',
            updateTime: '',
            deleteFlag: '',
            publicDiscussId: '',
            parentId: '',
            level: '',
          }]
        },
        ontitle: '编辑议题',
        // 弹框标题
        title: '',
        // 是否展示弹框
        box: false,
        // 是否显示查询
        search: true,
        // 加载中
        loading: true,
        // 是否为查看模式
        view: false,
        // 查询信息
        query: {},
        // 分页信息
        page: {
          pageSize: 10,
          pageSizes: [10, 20, 30, 50, 100],
          currentPage: 1,
          total: 0
        },
        // 表单数据
        form: {},
        // 选择行
        selectionList: [],
        // 表单配置
        option: option,
        // 表单列表
        data: [],
        dataTop: [],
        dialogVisibles: false,
      }
    },
    mounted() {
      // this.init();
      // this.onLoad(this.page);
    },
    computed: {
      ...mapGetters(["permission"]),
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      openDilog(row, type) {
        this.dialogVisibles = true
        this.loading = true;
        let params = {}
        getList(1, 100, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.dataTop = data.records;
          this.loading = false;
          this.selectionClear();
        })
      },
      handleSubmit(form, done) {
        done();
        add(form).then(
          () => {
            this.$message({
              type: "success",
              message: "操作成功!",
            });
            this.dialogVisibles = false
            done();
          },
          (error) => {
            window.console.log(error);
            // loading();
          }
        );
      },
      init() {},
      searchHide() {
        this.search = !this.search;
      },
      searchChange() {
        this.onLoad(this.page);
      },
      searchReset() {
        this.query = {};
        this.page.currentPage = 1;
        this.onLoad(this.page);
      },
      handleAdd() {
        this.title = '新增'
        this.form = {}
        this.box = true
      },
      handleEdit(row) {
        this.title = '编辑'
        this.box = true
        getDetailPd(row.id).then(res => {
          this.form = res.data.data;
        });
      },
      handleView(row) {
        this.title = '查看'
        this.view = true;
        this.box = true;
        getDetailPd(row.id).then(res => {
          this.form = res.data.data;
        });
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          })
          .then(() => {
            return removePd(this.ids);
          })
          .then(() => {
            this.selectionClear();
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      rowDel(row) {
        this.$confirm("确定将选择数据删除?", {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning"
          })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      beforeClose(done) {
        done()
        this.form = {};
        this.view = false;
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        // this.$refs.table.clearSelection();
      },
      currentChange(currentPage) {
        this.page.currentPage = currentPage;
        this.onLoad(this.page);
      },
      sizeChange(pageSize) {
        this.page.pageSize = pageSize;
        this.onLoad(this.page);
      },
      onLoad(page, params = {
        eventType: 1
      }) {
        this.loading = true;
        getListPd(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
          const data = res.data.data;
          this.page.total = data.total;
          this.data = data.records;
          this.loading = false;
          this.selectionClear();
        });
      }
    }
  };
</script>
<style>
<style lang="scss" scoped>
  .el-pagination {
    margin-top: 20px;
  }
</style>