Blame view

src/views/overView/msgForm.vue 9.88 KB
be009217   monkeyhouyi   处理,通知公告,任务中心
1
  <template>
5a14192c   monkeyhouyi   1
2
3
4
5
6
7
8
9
    <el-dialog
      :title="isDetail ? '通知详情' : '发布通知'"
      :close-on-click-modal="false"
      :visible.sync="visible"
      class="NCC-dialog NCC-dialog_center msg-dialog"
      lock-scroll
      width="50%"
    >
87e6927c   monkeyhouyi   弹框样式
10
      <div class="NCC-dialog-content">
7180000e   monkeyhouyi   优化
11
        <div style="padding-top: 10px" v-show="!isDetail">
87e6927c   monkeyhouyi   弹框样式
12
          <el-form
5a14192c   monkeyhouyi   1
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
          ref="elForm"
          :model="dataForm"
          size="small"
          label-width="80px"
          label-position="right"
          :disabled="!!isDetail"
          :rules="rules"
        >
          <el-col :span="24">
            <el-form-item label="通知标题" prop="title">
              <el-input v-model="dataForm.title"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="内容" prop="bodyContent">
              <NCC-Quill
                v-model="dataForm.bodyContent"
                placeholder="请输入内容..."
                :disabled="!!isDetail"
              />
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="附件上传" prop="imgUrl">
              <NCC-UploadFz
                v-model="dataForm.imgUrl"
                :fileSize="5"
                sizeUnit="MB"
                :limit="9"
                buttonText="点击上传"
              />
            </el-form-item>
          </el-col>
          <el-col :span="24">
fcbf44a0   monkeyhouyi   1
47
            <el-form-item label="传达区域" prop="communicationAreas">
61009cfc   monkeyhouyi   2024/8/8
48
              <el-checkbox-group v-model="dataForm.communicationAreas" @change="selectChange">
5a14192c   monkeyhouyi   1
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
                <el-checkbox
                  v-for="(item, index) in areaOptions"
                  :key="index"
                  :label="item.id"
                  >{{ item.fullName }}</el-checkbox
                >
              </el-checkbox-group>
              <div style="margin-top: 10px">
                <el-button size="mini" @click="selectAreaAll('area')"
                  >全选</el-button
                >
                <el-button size="mini" @click="closeAreaAll('area')"
                  >反选</el-button
                >
              </div>
            </el-form-item>
          </el-col>
          <el-col :span="24">
fcbf44a0   monkeyhouyi   1
67
            <el-form-item label="传达外协" prop="communicationOuts">
61009cfc   monkeyhouyi   2024/8/8
68
              <el-checkbox-group v-model="dataForm.communicationOuts" @change="selectChange">
5a14192c   monkeyhouyi   1
69
70
71
72
73
74
75
76
77
78
79
80
81
                <el-checkbox
                  v-for="(item, index) in communicationOutOptions"
                  :key="index"
                  :label="item.id"
                  >{{ item.fullName }}</el-checkbox
                >
              </el-checkbox-group>
              <div style="margin-top: 10px">
                <el-button size="mini" @click="selectAreaAll">全选</el-button>
                <el-button size="mini" @click="closeAreaAll">反选</el-button>
              </div>
            </el-form-item>
          </el-col>
87e6927c   monkeyhouyi   弹框样式
82
83
84
          </el-form>
        </div>
        <div
5a14192c   monkeyhouyi   1
85
86
87
        style="padding-top: 10px"
        class="msg-box"
        v-loading="loading"
7180000e   monkeyhouyi   优化
88
        v-show="!!isDetail"
be009217   monkeyhouyi   处理,通知公告,任务中心
89
      >
5a14192c   monkeyhouyi   1
90
91
        <div class="msg-title">{{ dataForm.title }}</div>
        <div class="content" v-html="dataForm.bodyContent"></div>
61009cfc   monkeyhouyi   2024/8/8
92
        <div class="files" v-if="isSHILevel">
f0d64cc9   monkeyhouyi   优化
93
94
95
96
97
          <h4>附件</h4>
          <div style="margin-bottom: 10px;">
            <NCC-UploadFz v-if="dataForm.imgUrl && dataForm.imgUrl.length" v-model="dataForm.imgUrl" :fileSize="5" sizeUnit="MB" :limit="9" buttonText="点击上传" disabled/>
            <div style="margin-top: 10px;" v-else>无附件</div>
          </div>
61009cfc   monkeyhouyi   2024/8/8
98
          <h4>查看情况</h4>
cbd5265d   monkeyhouyi   优化
99
100
101
          <div style="font-size: 12px; margin: 8px;">
            注:<el-tag type="success" size="mini">区县</el-tag>表示 【已查看】 的区县, <el-tag type="danger" size="mini">区县</el-tag>表示 【未查看】 的区县
          </div>
61009cfc   monkeyhouyi   2024/8/8
102
103
104
105
106
          <div class="tag-group">
            <span class="tag-group__title title-tag">传递区域:</span>
            <el-tag
              v-for="(v, i) in dataForm.communicationAreaList"
              :key="i"
cbd5265d   monkeyhouyi   优化
107
              :type="`${v.IsRead ? 'success' : 'danger'}`">
61009cfc   monkeyhouyi   2024/8/8
108
109
110
111
112
113
114
115
              {{ v.FullName }}
            </el-tag>
          </div>
          <div class="tag-group">
            <span class="tag-group__title title-tag">传达外协:</span>
            <el-tag
              v-for="(v, i) in dataForm.communicationOutList"
              :key="i"
cbd5265d   monkeyhouyi   优化
116
              :type="`${v.IsRead ? 'success' : 'danger'}`">
61009cfc   monkeyhouyi   2024/8/8
117
118
119
120
              {{ v.FullName }}
            </el-tag>
          </div>
        </div>
87e6927c   monkeyhouyi   弹框样式
121
        </div>
e4af99a2   monkeyhouyi   1
122
      </div>
5a14192c   monkeyhouyi   1
123
124
      <span slot="footer" class="dialog-footer">
        <el-button @click="visible = false">取 消</el-button>
61009cfc   monkeyhouyi   2024/8/8
125
        <el-button type="primary" @click="dataFormSubmit()" v-if="!isDetail" :loading="btnLoading">确 定</el-button>
5a14192c   monkeyhouyi   1
126
127
128
129
130
131
132
133
134
      </span>
    </el-dialog>
  </template>
  <script>
  import request from "@/utils/request";
  export default {
    components: {},
    props: [],
    data() {
61009cfc   monkeyhouyi   2024/8/8
135
136
137
138
139
140
141
142
143
144
145
146
147
148
      var validatecommunicationAreas = (rule, value, callback) => {
        if (!this.dataForm.communicationOuts.length && !value?.length) {
          callback(new Error('请输入传达区域'));
        } else {
          callback();
        }
      };
      var validatecommunicationOuts = (rule, value, callback) => {
        if (!this.dataForm.communicationAreas.length && !value?.length) {
          callback(new Error('请选择传达外协'));
        } else {
          callback();
        }
      }
5a14192c   monkeyhouyi   1
149
150
151
152
153
154
155
156
157
158
159
      return {
        loading: false,
        visible: false,
        isDetail: false,
        dataForm: {
          id: "",
          title: "",
          bodyContent: "",
          imgUrl: [],
          categoryId: "cc225c68421644f79037aaf624ccccc0",
          isType: "0",
fcbf44a0   monkeyhouyi   1
160
161
          communicationAreas: [],
          communicationOuts: [],
5a14192c   monkeyhouyi   1
162
163
164
165
166
167
        },
        rules: {
          title: [{ required: true, message: "请输入标题", trigger: "blur" }],
          bodyContent: [
            { required: true, message: "请输入内容", trigger: "blur" },
          ],
61009cfc   monkeyhouyi   2024/8/8
168
169
170
171
172
173
          communicationAreas: [
            { validator: validatecommunicationAreas, trigger: 'change' }
          ],
          communicationOuts: [
            { validator: validatecommunicationOuts, trigger: 'change' }
          ],
5a14192c   monkeyhouyi   1
174
175
176
        },
        areaOptions: [],
        communicationOutOptions: [],
61009cfc   monkeyhouyi   2024/8/8
177
        btnLoading: false,
5a14192c   monkeyhouyi   1
178
179
      };
    },
61009cfc   monkeyhouyi   2024/8/8
180
181
182
183
184
185
    computed: {
      isSHILevel() {
        // 判断角色是否为‘市级办公室’
        return this.$store.state.user.islader;
      },
    },
5a14192c   monkeyhouyi   1
186
187
188
189
190
191
192
193
194
195
    watch: {},
    created() {
      this.initAreaTypeList();
      this.initCommunicationOutOptions();
    },
    mounted() {},
    beforeDestroy() {},
    methods: {
      goBack() {
        this.$emit("refresh");
be009217   monkeyhouyi   处理,通知公告,任务中心
196
      },
5a14192c   monkeyhouyi   1
197
198
199
200
201
      init(id, isDetail) {
        this.dataForm.id = id || 0;
        this.visible = true;
        this.isDetail = isDetail || false;
        this.$nextTick(() => {
7180000e   monkeyhouyi   优化
202
          this.$refs["elForm"].resetFields();
5a14192c   monkeyhouyi   1
203
204
205
206
207
208
209
          if (this.dataForm.id) {
            this.loading = true;
            request({
              url: `/SubDev/ZyOaArticle/${this.dataForm.id}`,
              method: "GET",
            }).then((res) => {
              this.dataForm = res.data;
61009cfc   monkeyhouyi   2024/8/8
210
211
212
213
214
215
216
217
218
219
              let AreaList = [];
              res.data.communicationAreaList && res.data.communicationAreaList.forEach(v => {
                AreaList.push(v.Id);
              });
              this.dataForm.communicationAreas = AreaList;
              let OutList = [];
              res.data.communicationOutList && res.data.communicationOutList.forEach(v => {
                OutList.push(v.Id);
              });
              this.dataForm.communicationOuts = OutList;
5a14192c   monkeyhouyi   1
220
221
222
223
              this.loading = false;
            });
          }
        });
be009217   monkeyhouyi   处理,通知公告,任务中心
224
      },
5a14192c   monkeyhouyi   1
225
226
227
228
      async initAreaTypeList() {
        let list = this.$store.state.meta.area;
        !list && (list = await this.$store.dispatch("getTypeListByCode", "area"));
        this.areaOptions = list;
be009217   monkeyhouyi   处理,通知公告,任务中心
229
      },
5a14192c   monkeyhouyi   1
230
231
232
233
234
235
236
237
      async initCommunicationOutOptions() {
        let list = this.$store.state.meta.externalAssistanceList;
        !list &&
          (list = await this.$store.dispatch(
            "getTypeListByCode",
            "externalAssistance"
          ));
        this.communicationOutOptions = list;
be009217   monkeyhouyi   处理,通知公告,任务中心
238
      },
5a14192c   monkeyhouyi   1
239
240
241
      // 全选
      selectAreaAll(type) {
        if (type == "area") {
fcbf44a0   monkeyhouyi   1
242
          this.dataForm.communicationAreas = this.areaOptions.map(
5a14192c   monkeyhouyi   1
243
244
245
            (option) => option.id
          );
        } else {
fcbf44a0   monkeyhouyi   1
246
          this.dataForm.communicationOuts = this.communicationOutOptions.map(
5a14192c   monkeyhouyi   1
247
248
249
            (option) => option.id
          );
        }
61009cfc   monkeyhouyi   2024/8/8
250
        this.$forceUpdate();
5a14192c   monkeyhouyi   1
251
252
253
254
      },
      // 反选
      closeAreaAll(type) {
        if (type == "area") {
fcbf44a0   monkeyhouyi   1
255
          this.dataForm.communicationAreas = this.areaOptions
5a14192c   monkeyhouyi   1
256
            .filter(
fcbf44a0   monkeyhouyi   1
257
              (option) => !this.dataForm.communicationAreas.includes(option.id)
5a14192c   monkeyhouyi   1
258
259
260
            )
            .map((option) => option.id);
        } else {
fcbf44a0   monkeyhouyi   1
261
          this.dataForm.communicationOuts = this.communicationOutOptions
5a14192c   monkeyhouyi   1
262
            .filter(
fcbf44a0   monkeyhouyi   1
263
              (option) => !this.dataForm.communicationOuts.includes(option.id)
5a14192c   monkeyhouyi   1
264
265
266
            )
            .map((option) => option.id);
        }
61009cfc   monkeyhouyi   2024/8/8
267
268
269
270
        this.$forceUpdate();
      },
      selectChange() {
        this.$forceUpdate();
5a14192c   monkeyhouyi   1
271
272
273
274
      },
      dataFormSubmit() {
        this.$refs["elForm"].validate((valid) => {
          if (valid) {
61009cfc   monkeyhouyi   2024/8/8
275
            !this.dataForm.id ? this.toPostForm('/SubDev/ZyOaArticle', 'post') : this.toPostForm(`/SubDev/ZyOaArticle/${this.dataForm.id}`, 'put');
5a14192c   monkeyhouyi   1
276
277
278
          }
        });
      },
61009cfc   monkeyhouyi   2024/8/8
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
      toPostForm(url, method) {
        this.btnLoading = true;
        request({
          url,
          method,
          data: this.dataForm,
        }).then((res) => {
          this.$message({
            message: res.msg,
            type: "success",
            duration: 1000,
            onClose: () => {
              this.btnLoading = false;
              this.visible = false;
              this.$emit("refresh", true);
            },
          });
        });
      }
5a14192c   monkeyhouyi   1
298
299
300
301
    },
  };
  </script>
  <style lang="scss" scoped>
5a14192c   monkeyhouyi   1
302
303
304
305
306
307
308
309
310
  .msg-box {
    .msg-title {
      text-align: center;
      font-size: 14px;
      font-weight: 700;
      line-height: 30px;
      border-bottom: #e8e8e8 1px solid;
      margin-bottom: 8px;
      color: #000;
be009217   monkeyhouyi   处理,通知公告,任务中心
311
    }
61009cfc   monkeyhouyi   2024/8/8
312
313
314
315
316
317
318
319
320
321
322
323
324
    .files {
      border-top: #e8e8e8 1px solid;
      padding-top: 10px;
      margin-top: 10px;
      .title-tag {
        line-height: 40px;
        font-size: 12px;
        margin-right: 10px;
      }
      :deep(.el-tag) {
        margin: 0 5px;
      }
    }
5a14192c   monkeyhouyi   1
325
326
  }
  </style>