dingxin 5 anni fa
parent
commit
a800b59447
3 ha cambiato i file con 163 aggiunte e 109 eliminazioni
  1. 0
    2
      src/store/modules/activity.js
  2. 72
    36
      src/views/activity/add.vue
  3. 91
    71
      src/views/activity/edit.vue

+ 0
- 2
src/store/modules/activity.js Vedi File

@@ -43,8 +43,6 @@ export default {
43 43
           ...apis.activity.updateActivity,
44 44
           data: payload,
45 45
         }).then((data) => {
46
-          window.console.log(data)
47
-          commit('updateList', { ...data, list: data.records})
48 46
           resolve(data)
49 47
         }).catch(({ message }) => {
50 48
           if (typeof message === 'string') {

+ 72
- 36
src/views/activity/add.vue Vedi File

@@ -1,6 +1,6 @@
1 1
 <template>
2
-  <el-form ref="form" :model="dynamic" label-width="160px">
3
-    <el-form-item label="所属项目">
2
+  <el-form ref="activityQuery" :model="activityQuery" :rules="rules"  label-width="160px">
3
+    <el-form-item label="所属项目" prop="buildingId">
4 4
       <el-select v-model="activityQuery.buildingId" placeholder="请选择">
5 5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6 6
       </el-select>
@@ -22,23 +22,18 @@
22 22
             <img width="100%" :src="dialogImageUrl" alt="">
23 23
           </el-dialog>
24 24
     </el-form-item>
25
-    <el-form-item label="活动标题">
25
+    <el-form-item label="活动标题" prop="title">
26 26
       <el-input v-model="activityQuery.title"></el-input>
27 27
     </el-form-item>
28 28
     <el-form-item label="活动时间">
29
-       <el-date-picker v-model="activityQuery.startDate"  type="datetime" placeholder="选择日期"/>
30
-       <!-- <el-date-picker
31
-                  v-model="detail.reportDate"
32
-                  type="datetime"
33
-                  placeholder="选择日期时间">
34
-          </el-date-picker> -->
29
+       <el-date-picker v-model="activityQuery.startDate" type="datetime" placeholder="选择日期"/>
35 30
         <span>-</span>
36
-       <el-date-picker v-model="activityQuery.endDate"  type="datetime" placeholder="选择日期"/>   
31
+       <el-date-picker v-model="activityQuery.endDate" type="datetime" placeholder="选择日期"/>   
37 32
     </el-form-item>
38
-    <el-form-item label="活动地点">
33
+    <el-form-item label="活动地点" prop="address">
39 34
       <el-input  v-model="activityQuery.address"></el-input>
40 35
     </el-form-item>
41
-    <el-form-item  label="活动人数">
36
+    <el-form-item  label="活动人数" prop="personNum">
42 37
       <el-input v-model="activityQuery.personNum" ></el-input>
43 38
     </el-form-item>
44 39
     <!-- <el-form-item label="链接地址">
@@ -51,13 +46,13 @@
51 46
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
52 47
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
53 48
     </el-form-item>
54
-    <el-form-item label="活动时间" v-if="activityQuery.isEnlist == '1'">
55
-       <el-date-picker v-model="activityQuery.enlistStart" type="date" placeholder="选择日期"/>
49
+    <el-form-item label="报名时间" v-if="activityQuery.isEnlist == '1'" prop="enlistStart">
50
+       <el-date-picker v-model="activityQuery.enlistStart" type="datetime" placeholder="选择日期"/>
56 51
         <span>-</span>
57
-       <el-date-picker v-model="activityQuery.enlistEnd" type="date" placeholder="选择日期"/>   
52
+       <el-date-picker v-model="activityQuery.enlistEnd" type="datetime" placeholder="选择日期"/>   
58 53
     </el-form-item>
59 54
     <el-form-item>
60
-      <el-button type="primary" @click="onSubmit">保存</el-button>
55
+      <el-button type="primary" @click="onSubmit('activityQuery')">保存</el-button>
61 56
 
62 57
     </el-form-item>
63 58
   </el-form>
@@ -77,7 +72,6 @@ export default {
77 72
   data () {
78 73
     return {
79 74
       url:'',
80
-      buildingId:'',
81 75
       upFileUrl: apis.file.upload.url,
82 76
       radio:'1',
83 77
       imgList: [],
@@ -90,12 +84,40 @@ export default {
90 84
        buildingId:'',
91 85
        title:'',
92 86
        isEnlist:'1',
93
-       text:'',
87
+       desc:'',
94 88
        enlistStart:'',
95 89
        enlistEnd:'',
96 90
        personNum:'',
97
-      }
98
-      
91
+      },
92
+      rules: {
93
+          buildingId: [
94
+            { required: true, message: '请选择活动区域', trigger: 'change' }
95
+          ],
96
+          url: [
97
+            { required: true, message: ' ', trigger: 'change' }
98
+          ],
99
+          title: [
100
+            { required: true, message: '请输入标题', trigger: 'blur' },
101
+          ],
102
+          startDate: [
103
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
104
+          ],
105
+          endDate: [
106
+            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
107
+          ],
108
+          address: [
109
+            {  required: true, message: '请至少选择一个活动性质', trigger: 'change' }
110
+          ],
111
+          personNum: [
112
+            { required: true, message: '请选择活动资源', trigger: 'change' }
113
+          ],
114
+          desc: [
115
+            { required: true, message: ' ', trigger: 'blur' }
116
+          ],
117
+          enlistStart:[
118
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
119
+          ]
120
+        }
99 121
     }
100 122
   },
101 123
   computed: {
@@ -164,11 +186,28 @@ export default {
164 186
       this.updateDetail({...this.dynamic, imgUrl: res.data})
165 187
       this.loading.close()
166 188
     },
167
-    onSubmit () {
168
-      // if (!this.detail.dynamicId) {
169
-        // 新增
170
-        console.log('this.imgList[0]',this.imgList[0])
171
-        // this.activityQuery.url = this.imgList[0]
189
+    onSubmit (formName) {
190
+        this.$refs[formName].validate((valid) => {
191
+          if (valid) {
192
+           // 新增
193
+      console.log('this.activityQuery.desc',this.activityQuery.desc)
194
+      const endDate=this.activityQuery.endDate
195
+      const startDate=this.activityQuery.startDate
196
+      if( endDate <= startDate){
197
+        this.$message({ showClose: true, message: '活动结束时间不能小于活动开始时间',type: 'error'});
198
+        return false
199
+      }
200
+      if( this.activityQuery.desc === '' || this.activityQuery.desc === null){
201
+        this.$message({ showClose: true, message: '活动详情不能为空',type: 'error'});
202
+        return false
203
+      }
204
+
205
+      const enlistStart= this.activityQuery.enlistStart
206
+      const enlistEnd= this.activityQuery.enlistEnd
207
+      if(this.activityQuery.isEnlist ==='1' && enlistEnd<= enlistStart ){
208
+        this.$message({ showClose: true, message: '报名结束时间不能小于报名开始时间',type: 'error'});
209
+        return false
210
+      }
172 211
         this.addActivity(
173 212
           JSON.stringify(this.activityQuery)
174 213
         ).then(() => {
@@ -176,26 +215,23 @@ export default {
176 215
           
177 216
         })
178 217
         this.$router.push({ name: "activity-list" });
179
-      // } else {
180
-      //   // 修改
181
-      //   this.editDynamics({
182
-      //     detail: JSON.stringify(this.detail)
183
-      //   }).then(() => {
184
-      //     this.onCancel()
185
-      //   })
186
-      // }
218
+          } else {
219
+            console.log('error submit!!');
220
+            return false;
221
+          }
222
+        })
187 223
     },
188 224
     onCancel () {
189 225
       this.$router.push({name: 'dynamiclist'})
190
-    }
226
+    },
191 227
   },
192 228
   mounted () {
193 229
     const _that = this
194 230
     const phoneEditor = new E('#websiteEditorElem')
195 231
     phoneEditor.customConfig.zIndex = 1
196 232
     phoneEditor.customConfig.onchange = function (html) {
197
-      _that.dynamic = {..._that.dynamic, url: html}
198
-        _that.activityQuery.text =_that.dynamic.url
233
+      _that.activityQuery = {..._that.activityQuery, desc: html}
234
+       console.log('that.dynamic.url',_that.activityQuery.desc)
199 235
     }
200 236
     // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
201 237
     // phoneEditor.customConfig.uploadFileName = 'uploadFiles'

+ 91
- 71
src/views/activity/edit.vue Vedi File

@@ -1,7 +1,7 @@
1 1
 <template>
2
-  <el-form ref="form" label-width="160px">
3
-    <el-form-item label="所属项目">
4
-      <el-select v-model="activityQuery.buildingId" placeholder="请选择">
2
+  <el-form ref="activityQuery" label-width="160px" :rules="rules" :model="activityQuery">
3
+    <el-form-item label="所属项目" prop="buildingId">
4
+      <el-select v-model="activityQuery.buildingId"  placeholder="请选择">
5 5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6 6
       </el-select>
7 7
     </el-form-item>
@@ -15,37 +15,39 @@
15 15
               <i v-else class="el-icon-plus avatar-uploader-icon"></i>
16 16
           </el-upload>
17 17
     </el-form-item>
18
-    <el-form-item label="活动标题">
18
+    <el-form-item label="活动标题" prop="title">
19 19
       <el-input v-model="activityQuery.title"></el-input>
20 20
     </el-form-item>
21 21
     <el-form-item label="活动时间">
22
-       <el-date-picker v-model="activityQuery.startDate" type="date" placeholder="选择日期"/>
22
+       <el-date-picker v-model="activityQuery.startDate" type="datetime" placeholder="选择日期"/>
23 23
         <span>-</span>
24
-       <el-date-picker v-model="activityQuery.endDate" type="date" placeholder="选择日期"/>   
24
+       <el-date-picker v-model="activityQuery.endDate" type="datetime" placeholder="选择日期"/>   
25 25
     </el-form-item>
26
-    <el-form-item label="活动地点">
26
+    <el-form-item label="活动地点"  prop="address">
27 27
       <el-input  v-model="activityQuery.address"></el-input>
28 28
     </el-form-item>
29
-    <el-form-item label="活动人数">
29
+    <el-form-item label="活动人数" prop="personNum">
30 30
       <el-input v-model="activityQuery.personNum"></el-input>
31 31
     </el-form-item>
32 32
     <!-- <el-form-item label="链接地址">
33 33
       <el-input v-model="dynamic.url"></el-input>
34 34
     </el-form-item> -->
35 35
     <el-form-item label="活动详情">
36
-      <div id="websiteEditorElem" style="height: 400px"></div>
36
+      <div id="desc">
37
+        <rich-editor v-model="activityQuery.desc" style="height: 400px"/>
38
+      </div>   
37 39
     </el-form-item>
38 40
     <el-form-item label="是否需要报名">
39 41
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
40 42
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
41 43
     </el-form-item>
42
-    <el-form-item label="活动时间" v-if="activityQuery.isEnlist == '1'">
43
-       <el-date-picker v-model="activityQuery.enlistStart" type="date" placeholder="选择日期"/>
44
+    <el-form-item label="活动时间" v-if="activityQuery.isEnlist == '1'"  prop="enlistStart">
45
+       <el-date-picker v-model="activityQuery.enlistStart" type="datetime" placeholder="选择日期"/>
44 46
         <span>-</span>
45
-       <el-date-picker v-model="activityQuery.enlistEnd" type="date" placeholder="选择日期"/>   
47
+       <el-date-picker v-model="activityQuery.enlistEnd" type="datetime" placeholder="选择日期"/>   
46 48
     </el-form-item>
47 49
     <el-form-item>
48
-      <el-button type="primary" @click="onSubmit">保存</el-button>
50
+      <el-button type="primary" @click="onSubmit('activityQuery')">保存</el-button>
49 51
       <el-button @click="onCancel">取消</el-button>
50 52
     </el-form-item>
51 53
   </el-form>
@@ -55,7 +57,7 @@
55 57
 import { createNamespacedHelpers } from 'vuex'
56 58
 import apis from '../../config/api'
57 59
 import E from 'wangeditor'
58
-
60
+import dayjs from 'dayjs'
59 61
 const { mapState: mapDynamicState, mapActions: mapDynamicActions, mapMutations: mapDynamicMutations } = createNamespacedHelpers('building')
60 62
 const { mapState: mapActivityState, mapActions: mapActivityActions } = createNamespacedHelpers('activity')
61 63
 const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
@@ -74,19 +76,47 @@ export default {
74 76
       dialogImageUrl: "",
75 77
       activityQuery: {
76 78
        dynamicId:'',
77
-       buildingId:'',
78 79
        url:'',
79 80
        startDate:'',
80 81
        endDate:'',
81 82
        buildingId:'',
82 83
        title:'',
83 84
        isEnlist:'',
84
-       text:'',
85
+       desc:'',
85 86
        enlistStart:'',
86 87
        enlistEnd:'',
87 88
        address:'',
88 89
        personNum:''
89
-      }
90
+      },
91
+      rules: {
92
+          buildingId: [
93
+            { required: true, message: '请选择活动区域', trigger: 'change' }
94
+          ],
95
+          url: [
96
+            { required: true, message: ' ', trigger: 'change' }
97
+          ],
98
+          title: [
99
+            { required: true, message: '请输入活动标题', trigger: 'blur' },
100
+          ],
101
+          startDate: [
102
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
103
+          ],
104
+          endDate: [
105
+            { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
106
+          ],
107
+          address: [
108
+            {  required: true, message: '请输入活动地点', trigger: 'change' }
109
+          ],
110
+          personNum: [
111
+            { required: true, message: '请输入活动人数', trigger: 'change' }
112
+          ],
113
+          desc: [
114
+            { required: true, message: ' ', trigger: 'blur' }
115
+          ],
116
+          enlistStart:[
117
+            { type: 'date', required: true, message: '请选择日期', trigger: 'change' }
118
+          ]
119
+        }
90 120
       
91 121
     }
92 122
   },
@@ -154,29 +184,50 @@ export default {
154 184
     },
155 185
 
156 186
     handleAvatarSuccess (res) {
157
-      this.activityQuery.url = res.data
158
-      this.updateDetail({...this.dynamic, imgUrl: res.data})
159
-      this.loading.close()
187
+      this.imageUrl = res.data
160 188
     },
161
-    onSubmit () {
162
-        // 新增
163
-        console.log('this.imgList[0]',this.imgList[0])
164
-        // this.activityQuery.url = this.imgList[0]
165
-        this.updateActivity(
189
+    onSubmit (formName) {
190
+      this.$refs[formName].validate((valid) => {
191
+      if (valid) {
192
+           // 新增 
193
+      const endDate = this.formateDate(this.activityQuery.endDate); 
194
+      const startDate = this.formateDate(this.activityQuery.startDate);           
195
+      if( endDate <= startDate){
196
+           console.log('endDate',endDate)
197
+           console.log('startDate.desc',startDate)
198
+        this.$message({ showClose: true, message: '活动结束时间不能小于活动开始时间',type: 'error'});
199
+        return 
200
+      }
201
+      if( this.activityQuery.desc === '' || this.activityQuery.desc === null|| this.activityQuery.desc ==='<p><br></p>'){
202
+        this.$message({ showClose: true, message: '活动详情不能为空',type: 'error'});
203
+        return 
204
+      }
205
+      // 报名时间校验
206
+      const enlistStart = this.formateDate(this.activityQuery.enlistStart); 
207
+      const enlistEnd = this.formateDate(this.activityQuery.enlistEnd);           
208
+      if(this.activityQuery.isEnlist ==='1' && enlistEnd<= enlistStart ){
209
+        this.$message({ showClose: true, message: '报名结束时间不能小于报名开始时间',type: 'error'});
210
+        return 
211
+      }
212
+      this.activityQuery.url = this.imageUrl 
213
+        this.updateActivity(    
166 214
            JSON.stringify(this.activityQuery)
167
-        ).then(() => {
168
-          this.onCancel()
169
-          
215
+        ).then((res) => {
216
+      this.$router.push({ name: "activity-list" });
217
+        })
218
+     
219
+        } else {
220
+            console.log('error submit!!');
221
+            return false;
222
+          }
170 223
         })
171
-        this.$router.push({ name: "activity-list" });
172 224
     },
173 225
     onCancel () {
174
-      this.$router.push({name: 'dynamiclist'})
226
+      this.$router.push({name: 'activity-list'})
175 227
     },
176 228
     getDetails(){
177 229
       this.activityQuery.dynamicId = this.$route.query.row
178 230
         this.activityDetails(this.activityQuery).then((data) => {
179
-          console.log('55',data)
180 231
         this.activityQuery.buildingId = data.buildingId
181 232
         this.activityQuery.title = data.title
182 233
         this.activityQuery.startDate = data.startDate
@@ -185,52 +236,21 @@ export default {
185 236
         this.activityQuery.personNum = data.personNum
186 237
         this.imageUrl = data.url
187 238
         this.activityQuery.isEnlist = data.isEnlist
239
+        this.activityQuery.desc = data.desc
188 240
         
189 241
        
190 242
         })
191
-    }
243
+    },
244
+    formateDate(dt) {
245
+      return !dt ? '' : dayjs(dt).format('YYYY-MM-DD HH:mm')
246
+    },
192 247
   },
193 248
   mounted () {
194
-    const _that = this
195
-    const phoneEditor = new E('#websiteEditorElem')
196
-    phoneEditor.customConfig.zIndex = 1
197
-    phoneEditor.customConfig.onchange = function (html) {
198
-      _that.dynamic = {..._that.dynamic, url: html}
199
-        _that.activityQuery.text =_that.dynamic.url
200
-    }
201
-    // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
202
-    // phoneEditor.customConfig.uploadFileName = 'uploadFiles'
203
-
204
-    phoneEditor.customConfig.customUploadImg = function (files, insert) {
205
-      _that.uploadImg(files[0]).then(data => {
206
-        insert(data)
207
-      })
208
-    }
209
-    phoneEditor.customConfig.menus = [
210
-      'head',  // 标题
211
-      'bold',  // 粗体
212
-      'fontSize',  // 字号
213
-      'fontName',  // 字体
214
-      'italic',  // 斜体
215
-      'underline',  // 下划线
216
-      'strikeThrough',  // 删除线
217
-      'foreColor',  // 文字颜色
218
-      'backColor',  // 背景颜色
219
-      'justify',  // 对齐方式
220
-      'image',  // 插入图片
221
-    ]
222
-    phoneEditor.create()
249
+    // const editor = new E('#desc')
250
+    // editor.customConfig.zIndex = 1
251
+    // editor.create()
223 252
     this.getDetails()
224
-    this.getBuildings({
225
-      pageNum: 1,
226
-      pageSize: 100,
227
-    }).then(() => {
228
-      if ((this.$route.query.id || '') !== '') {
229
-        this.getDetail({id: this.$route.query.id}).then((data) => {
230
-          phoneEditor.txt.html(data.url)
231
-        })
232
-      }
233
-    })
253
+    
234 254
   }
235 255
 }
236 256
 </script>