hejianhao
2025-04-16 dab2d210ca06c1faa514c6388fbd5de1ab355360
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
<template>
  <div class="page_status">
    <v-header
      title="基层公开查询"
      :bar="bar"
      search
      @on-search="onSearch"
      @on-reset="onReset"
    ></v-header>
    <div class="add">
      <el-button
        type="primary"
        size="small"
        @click="$router.push({ path: '/act_status_add', query: { id: 2 } })"
        >新增</el-button
      >
    </div>
    <div class="tab">
      <v-tool-table :trs="trs" :tds="tds">
        <template v-slot:btn="item">
          <div class="table_flex">
            <!-- {{item.scope.id}} -->
            <span class="col_primary" @click="onCheck(item.scope.id)"
              >查看</span
            >
            <span class="col_primary" @click="onDel(item.scope.id)">删除</span>
          </div>
        </template>
        <template v-slot:zd="item">
          <b>{{ ["否", "是"][+item.scope.isTopping] || "否" }}</b>
        </template>
        <template v-slot:status="item">
          <b>{{ ["待发布", "已发布"][+item.scope.status] || "待发布" }}</b>
        </template>
      </v-tool-table>
    </div>
    <v-tool-page :item="paged" @on-page="onPage"></v-tool-page>
  </div>
</template>
 
<script>
import { mapState } from "vuex";
export default {
  props: {},
  components: {},
  data() {
    return {
      bar: [
        { title: "标题", name: "title" },
        {
          title: "状态",
          name: "status",
          type: "select",
          list: [
            { label: "待发布", value: "0" },
            { value: "1", label: "已发布" }
          ]
        },
        {
          title: "区域",
          name: "communityId",
          type: "cascaders",
          list: [],
          props: {
            checkStrictly: true,
            children: "children",
            label: "name",
            value: "name"
          }
        },
        { title: "发布时间", name: "time", type: "times" },
        {
          title: "基层公开分类",
          name: "type",
          type: "select",
          list: [
            { label: "资金公开", value: "资金公开" },
            { label: "资产公开", value: "资产公开" },
            { label: "资源公开", value: "资源公开" },
            { label: "村集体经济组织项目", value: "村集体经济组织项目" }
          ]
        }
      ],
      trs: [
        { text: "序号", val: "index", width: "50px" },
        { text: "标题", val: "title" },
        { text: "社区", val: "communityName" },
        { text: "阅览量", val: "readNum" },
        { text: "基务公开分类", val: "typeName" },
        { text: "状态", val: "btn", slot: "status" },
        { text: "置顶", val: "btn", slot: "zd" },
        { text: "发布时间", val: "publishAt" },
        { text: "创建时间", val: "createAt" },
        { text: "操作", val: "btn" }
      ],
      tds: [],
      paged: { page: 0, total: 0, r: 0, limit: 10 },
      os: {},
      search: {},
      communityIds: [], //筛选的所有社区数据
      levelArr: [], //根据区域名称查询出来的chirldren数据
      allAreaList: [], //所有的区域数据
      originCommunityIds: [] //第一次根据区域算出来的社区id 用于重置后的重新赋值
    };
  },
  computed: {
    ...mapState({ vuex_page: "pageReset" })
  },
  watch: {
    vuex_page: {
      handler(n) {
        if (n.page === this.$route.path) {
          this.paged.page = 1;
          this.init();
        }
      },
      deep: true
    }
  },
  methods: {
    // 置顶
    onSearch(v) {
      if (v.time && v.time.length && v.time[1]) {
        v.publishAtBegin = v.time[0];
        v.publishAtEnd = v.time[1];
      } else {
        v.publishAtBegin = "";
        v.publishAtEnd = "";
      }
 
      //查询最后一个选择的分类比如【"区",“街道”,"社区"】
      //如果是区,那么筛选出区下面的所有社区,如果是镇,筛选出镇下面的所有社区
      //然后查找对应的社区数据然后用逗号拼接请求数据
      console.log(v.communityId);
      if (!v.communityId.length) {
        demo.toast("请选择区域");
        return;
      }
      if (v.communityId.length && v.communityId instanceof Array) {
        this.communityIds = [];
        this.levelArr = [];
        let word = v.communityId[v.communityId.length - 1];
        //根据关健字查找对应的区域
        this.addIds(this.bar[2].list, word);
        console.log(this.levelArr);
        //查找出对应区域下面的所有社区
        if (this.levelArr.length) {
          this.addCommunityId(this.levelArr);
        }
        let ids = [];
        this.communityIds.map(item => {
          ids.push(item.streetId);
        });
        //逗号拼接请求数据
        v.communityId = ids.join(",");
      } else if (this.originCommunityIds.length) {
        v.communityId = this.originCommunityIds;
      }
 
      if (!v.communityId.length) {
        demo.toast("此区域没有社区");
        return;
      }
 
      if (v.type.length) {
        v.typeList = [v.type];
        delete v.type;
      }
 
      // this.originCommunityIds
 
      this.search = demo.copy(v);
      delete this.search.time;
      this.paged.page = 1;
      this.init();
    },
    onReset(v) {
      //重置的话需要重新更新
      // this.dealData();
    },
    //查找出区域
    addIds(arr, word) {
      arr.map(item => {
        //查找区域中和关键词相同的区域
        if (item.name == word) {
          //如果查找到的区域有chirld那么就返回如果没有说明没有下级或者是最底层社区
          if (item.children) {
            this.levelArr = item.children;
            return;
          } else {
            if (item.streetId) {
              this.communityIds.push(item);
            }
          }
        } else if (item.children && item.children.length) {
          this.addIds(item.children, word);
        }
      });
    },
    //汇集所有区域内的社区id
    addCommunityId(arr) {
      arr.map(item => {
        if (item.children) {
          this.addCommunityId(item.children);
        } else {
          if (item.streetId) {
            this.communityIds.push(item);
          }
        }
      });
    },
 
    // 分页点击
    onPage(v) {
      if (v.page === this.paged.page && v.page && !v.reset) {
        return 0;
      }
 
      this.paged.page = v.page;
      this.paged.limit = v.limit;
      this.init();
    },
    // 获取数据
    init() {
      if (!this.search.typeList || !this.search.typeList.length) {
        //传几个分类就查几个分类的数据
        this.search.typeList = [
          "资金公开",
          "资产公开",
          "资源公开",
          "村集体经济组织项目",
          "项目公开"
        ];
 
        //民政局的账号需要多加三务公开
        let account = demo.$session.get("user").account;
        if (account == "pzhmzjsz") {
          this.search.typeList = [
            "资金公开",
            "资产公开",
            "资源公开",
            "村集体经济组织项目",
            "项目公开",
            "财务公开",
            "服务公开",
            "党务公开"
          ];
        }
      }
      let v = demo.copy(
        Object.assign(this.os, this.search, {
          pageNum: this.paged.page,
          pageSize: this.paged.limit,
          category: "2", // 3.基务公开
          typeS: 2
        })
      );
      //如果没有区域数据那么就不先更新数据
      if (!this.bar[2].list.length) return;
      let load = demo.loading();
      setTimeout(() => {
        if (load) {
          demo.remove(load);
        }
      }, 30000);
      this.$api.post("communityactivity/pagedynamic", v, e => {
        demo.remove(load);
        this.paged.total = e.total;
        this.paged.r++;
        //判断是否筛选了对应账号的
        this.tds = e.records || [];
        e.records.map((item, index) => {
          item.index = (this.paged.page - 1) * this.paged.limit + index + 1;
        });
      });
    },
    onCheck(id) {
      this.$router.push({
        path: "/affairsPublicSearchDetail",
        query: { id: id }
      });
    },
    onDel(id) {
      this.$js.model("", "是否删除动态", res => {
        if (res) {
          this.$api.del("communityactivity/dynamic", { id }, () => {
            demo.toast("删除成功");
            this.init();
          });
        }
      });
    },
    //分类动态列表
    queryDynamic() {
      let param = { category: "2" };
      param["area"] = 2;
      this.$api.post("dyn/type/list", param, data => {
        data.map(d => {
          d.label = d.name;
          d.value = d.id;
        });
        this.bar[4].list = data;
      });
    },
    queryArea() {
      this.$api.get(
        "common/data/getCityTreeByCode?provinceAdcode=510000",
        {},
        data => {
          this.deleteChild(data);
          this.allAreaList = data;
          this.dealData();
        }
      );
    },
    dealData() {
      //获取当前账号的name比如“福田镇”,来和区域对比获取相应的chirldren区县
      let word = demo.$session.get("user").name;
      let account = demo.$session.get("user").account;
      //筛选出福田镇下面的社区
      this.addIds(this.allAreaList, word);
      //纪委账号需要获取所有社区的id(别问为什么,接口要求的)
      //判断有没有子社区
      if (this.levelArr.length) {
        //更新区域的数据
        this.bar[2].list = [...this.levelArr];
        //第一次获取所有的社区数据然后逗号拼接请求数据
        this.addCommunityId(this.levelArr);
        let ids = [];
        this.communityIds.map(item => {
          ids.push(item.streetId);
        });
        //重置之后需要保存初始状态的区域
        this.originCommunityIds = ids.join(",");
        this.search = { communityId: ids.join(",") };
        this.paged.page = 1;
        this.init();
      }
      //纪委账号可以查看所有区域的数据
      else if (
        account == "szgkjw" ||
        account == "pzhmzjsz" ||
        account == "pzhnyncj"
      ) {
        this.bar[2].list = [...this.allAreaList];
        this.paged.page = 1;
        // this.init();
      }
      this.levelArr = [];
    },
    //循环删除chirdren没有数据的子节点
    deleteChild(arr) {
      arr.map(item => {
        if (!item.children.length) {
          delete item.children;
        } else if (item.children.length) {
          this.deleteChild(item.children);
        }
      });
    }
  },
  mounted() {
    this.queryArea();
    //查询动态分类列表
    // this.queryDynamic();
    let account = demo.$session.get("user").account;
    if (account == "pzhmzjsz") {
      this.bar[4].list = [
        { label: "资金公开", value: "资金公开" },
        { label: "资产公开", value: "资产公开" },
        { label: "资源公开", value: "资源公开" },
        { label: "村集体经济组织项目", value: "村集体经济组织项目" },
        { label: "服务公开", value: "服务公开" },
        { label: "财务公开", value: "财务公开" },
        { label: "党务公开", value: "党务公开" }
      ];
    }
  }
};
</script>
 
<style lang="less" scoped>
.page_status {
  overflow-y: auto;
  .add,
  .tab {
    margin-bottom: 10px;
  }
}
</style>