Blame view

src/views/overView/msgForm.vue 9.92 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
          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"
f3684888   monkeyhouyi   附件大小限制10MB
39
                :fileSize="10"
5a14192c   monkeyhouyi   1
40
41
42
43
44
45
46
                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>
77e1ac72   monkeyhouyi   优化
92
        <div class="files">
f0d64cc9   monkeyhouyi   优化
93
94
          <h4>附件</h4>
          <div style="margin-bottom: 10px;">
f3684888   monkeyhouyi   附件大小限制10MB
95
            <NCC-UploadFz v-if="dataForm.imgUrl && dataForm.imgUrl.length" v-model="dataForm.imgUrl" :fileSize="10" sizeUnit="MB" :limit="9" buttonText="点击上传" disabled/>
f0d64cc9   monkeyhouyi   优化
96
97
            <div style="margin-top: 10px;" v-else>无附件</div>
          </div>
77e1ac72   monkeyhouyi   优化
98
99
        </div>
        <div class="files" v-if="isSHILevel">
61009cfc   monkeyhouyi   2024/8/8
100
          <h4>查看情况</h4>
cbd5265d   monkeyhouyi   优化
101
102
103
          <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
104
105
106
107
108
          <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   优化
109
              :type="`${v.IsRead ? 'success' : 'danger'}`">
61009cfc   monkeyhouyi   2024/8/8
110
111
112
113
114
115
116
117
              {{ 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   优化
118
              :type="`${v.IsRead ? 'success' : 'danger'}`">
61009cfc   monkeyhouyi   2024/8/8
119
120
121
122
              {{ v.FullName }}
            </el-tag>
          </div>
        </div>
87e6927c   monkeyhouyi   弹框样式
123
        </div>
e4af99a2   monkeyhouyi   1
124
      </div>
5a14192c   monkeyhouyi   1
125
126
      <span slot="footer" class="dialog-footer">
        <el-button @click="visible = false">取 消</el-button>
61009cfc   monkeyhouyi   2024/8/8
127
        <el-button type="primary" @click="dataFormSubmit()" v-if="!isDetail" :loading="btnLoading">确 定</el-button>
5a14192c   monkeyhouyi   1
128
129
130
131
132
133
134
135
136
      </span>
    </el-dialog>
  </template>
  <script>
  import request from "@/utils/request";
  export default {
    components: {},
    props: [],
    data() {
61009cfc   monkeyhouyi   2024/8/8
137
138
139
140
141
142
143
144
145
146
147
148
149
150
      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
151
152
153
154
155
156
157
158
159
160
161
      return {
        loading: false,
        visible: false,
        isDetail: false,
        dataForm: {
          id: "",
          title: "",
          bodyContent: "",
          imgUrl: [],
          categoryId: "cc225c68421644f79037aaf624ccccc0",
          isType: "0",
fcbf44a0   monkeyhouyi   1
162
163
          communicationAreas: [],
          communicationOuts: [],
5a14192c   monkeyhouyi   1
164
165
166
167
168
169
        },
        rules: {
          title: [{ required: true, message: "请输入标题", trigger: "blur" }],
          bodyContent: [
            { required: true, message: "请输入内容", trigger: "blur" },
          ],
61009cfc   monkeyhouyi   2024/8/8
170
171
172
173
174
175
          communicationAreas: [
            { validator: validatecommunicationAreas, trigger: 'change' }
          ],
          communicationOuts: [
            { validator: validatecommunicationOuts, trigger: 'change' }
          ],
5a14192c   monkeyhouyi   1
176
177
178
        },
        areaOptions: [],
        communicationOutOptions: [],
61009cfc   monkeyhouyi   2024/8/8
179
        btnLoading: false,
5a14192c   monkeyhouyi   1
180
181
      };
    },
61009cfc   monkeyhouyi   2024/8/8
182
183
184
185
186
187
    computed: {
      isSHILevel() {
        // 判断角色是否为‘市级办公室’
        return this.$store.state.user.islader;
      },
    },
5a14192c   monkeyhouyi   1
188
189
190
191
192
193
194
195
196
197
    watch: {},
    created() {
      this.initAreaTypeList();
      this.initCommunicationOutOptions();
    },
    mounted() {},
    beforeDestroy() {},
    methods: {
      goBack() {
        this.$emit("refresh");
be009217   monkeyhouyi   处理,通知公告,任务中心
198
      },
5a14192c   monkeyhouyi   1
199
200
201
202
203
      init(id, isDetail) {
        this.dataForm.id = id || 0;
        this.visible = true;
        this.isDetail = isDetail || false;
        this.$nextTick(() => {
7180000e   monkeyhouyi   优化
204
          this.$refs["elForm"].resetFields();
5a14192c   monkeyhouyi   1
205
206
207
208
209
210
211
          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
212
213
214
215
216
217
218
219
220
221
              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
222
223
224
225
              this.loading = false;
            });
          }
        });
be009217   monkeyhouyi   处理,通知公告,任务中心
226
      },
5a14192c   monkeyhouyi   1
227
228
229
230
      async initAreaTypeList() {
        let list = this.$store.state.meta.area;
        !list && (list = await this.$store.dispatch("getTypeListByCode", "area"));
        this.areaOptions = list;
be009217   monkeyhouyi   处理,通知公告,任务中心
231
      },
5a14192c   monkeyhouyi   1
232
233
234
235
236
237
238
239
      async initCommunicationOutOptions() {
        let list = this.$store.state.meta.externalAssistanceList;
        !list &&
          (list = await this.$store.dispatch(
            "getTypeListByCode",
            "externalAssistance"
          ));
        this.communicationOutOptions = list;
be009217   monkeyhouyi   处理,通知公告,任务中心
240
      },
5a14192c   monkeyhouyi   1
241
242
243
      // 全选
      selectAreaAll(type) {
        if (type == "area") {
fcbf44a0   monkeyhouyi   1
244
          this.dataForm.communicationAreas = this.areaOptions.map(
5a14192c   monkeyhouyi   1
245
246
247
            (option) => option.id
          );
        } else {
fcbf44a0   monkeyhouyi   1
248
          this.dataForm.communicationOuts = this.communicationOutOptions.map(
5a14192c   monkeyhouyi   1
249
250
251
            (option) => option.id
          );
        }
61009cfc   monkeyhouyi   2024/8/8
252
        this.$forceUpdate();
5a14192c   monkeyhouyi   1
253
254
255
256
      },
      // 反选
      closeAreaAll(type) {
        if (type == "area") {
fcbf44a0   monkeyhouyi   1
257
          this.dataForm.communicationAreas = this.areaOptions
5a14192c   monkeyhouyi   1
258
            .filter(
fcbf44a0   monkeyhouyi   1
259
              (option) => !this.dataForm.communicationAreas.includes(option.id)
5a14192c   monkeyhouyi   1
260
261
262
            )
            .map((option) => option.id);
        } else {
fcbf44a0   monkeyhouyi   1
263
          this.dataForm.communicationOuts = this.communicationOutOptions
5a14192c   monkeyhouyi   1
264
            .filter(
fcbf44a0   monkeyhouyi   1
265
              (option) => !this.dataForm.communicationOuts.includes(option.id)
5a14192c   monkeyhouyi   1
266
267
268
            )
            .map((option) => option.id);
        }
61009cfc   monkeyhouyi   2024/8/8
269
270
271
272
        this.$forceUpdate();
      },
      selectChange() {
        this.$forceUpdate();
5a14192c   monkeyhouyi   1
273
274
275
276
      },
      dataFormSubmit() {
        this.$refs["elForm"].validate((valid) => {
          if (valid) {
61009cfc   monkeyhouyi   2024/8/8
277
            !this.dataForm.id ? this.toPostForm('/SubDev/ZyOaArticle', 'post') : this.toPostForm(`/SubDev/ZyOaArticle/${this.dataForm.id}`, 'put');
5a14192c   monkeyhouyi   1
278
279
280
          }
        });
      },
61009cfc   monkeyhouyi   2024/8/8
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
      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
300
301
302
303
    },
  };
  </script>
  <style lang="scss" scoped>
5a14192c   monkeyhouyi   1
304
305
306
307
308
309
310
311
312
  .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   处理,通知公告,任务中心
313
    }
61009cfc   monkeyhouyi   2024/8/8
314
315
316
317
318
319
320
321
322
323
324
325
326
    .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
327
328
  }
  </style>