dingxin 5 年之前
父節點
當前提交
a800b59447
共有 3 個文件被更改,包括 163 次插入109 次删除
  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 查看文件

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

+ 72
- 36
src/views/activity/add.vue 查看文件

1
 <template>
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
       <el-select v-model="activityQuery.buildingId" placeholder="请选择">
4
       <el-select v-model="activityQuery.buildingId" placeholder="请选择">
5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6
       </el-select>
6
       </el-select>
22
             <img width="100%" :src="dialogImageUrl" alt="">
22
             <img width="100%" :src="dialogImageUrl" alt="">
23
           </el-dialog>
23
           </el-dialog>
24
     </el-form-item>
24
     </el-form-item>
25
-    <el-form-item label="活动标题">
25
+    <el-form-item label="活动标题" prop="title">
26
       <el-input v-model="activityQuery.title"></el-input>
26
       <el-input v-model="activityQuery.title"></el-input>
27
     </el-form-item>
27
     </el-form-item>
28
     <el-form-item label="活动时间">
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
         <span>-</span>
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
     </el-form-item>
32
     </el-form-item>
38
-    <el-form-item label="活动地点">
33
+    <el-form-item label="活动地点" prop="address">
39
       <el-input  v-model="activityQuery.address"></el-input>
34
       <el-input  v-model="activityQuery.address"></el-input>
40
     </el-form-item>
35
     </el-form-item>
41
-    <el-form-item  label="活动人数">
36
+    <el-form-item  label="活动人数" prop="personNum">
42
       <el-input v-model="activityQuery.personNum" ></el-input>
37
       <el-input v-model="activityQuery.personNum" ></el-input>
43
     </el-form-item>
38
     </el-form-item>
44
     <!-- <el-form-item label="链接地址">
39
     <!-- <el-form-item label="链接地址">
51
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
46
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
52
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
47
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
53
     </el-form-item>
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
         <span>-</span>
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
     </el-form-item>
53
     </el-form-item>
59
     <el-form-item>
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
     </el-form-item>
57
     </el-form-item>
63
   </el-form>
58
   </el-form>
77
   data () {
72
   data () {
78
     return {
73
     return {
79
       url:'',
74
       url:'',
80
-      buildingId:'',
81
       upFileUrl: apis.file.upload.url,
75
       upFileUrl: apis.file.upload.url,
82
       radio:'1',
76
       radio:'1',
83
       imgList: [],
77
       imgList: [],
90
        buildingId:'',
84
        buildingId:'',
91
        title:'',
85
        title:'',
92
        isEnlist:'1',
86
        isEnlist:'1',
93
-       text:'',
87
+       desc:'',
94
        enlistStart:'',
88
        enlistStart:'',
95
        enlistEnd:'',
89
        enlistEnd:'',
96
        personNum:'',
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
   computed: {
123
   computed: {
164
       this.updateDetail({...this.dynamic, imgUrl: res.data})
186
       this.updateDetail({...this.dynamic, imgUrl: res.data})
165
       this.loading.close()
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
         this.addActivity(
211
         this.addActivity(
173
           JSON.stringify(this.activityQuery)
212
           JSON.stringify(this.activityQuery)
174
         ).then(() => {
213
         ).then(() => {
176
           
215
           
177
         })
216
         })
178
         this.$router.push({ name: "activity-list" });
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
     onCancel () {
224
     onCancel () {
189
       this.$router.push({name: 'dynamiclist'})
225
       this.$router.push({name: 'dynamiclist'})
190
-    }
226
+    },
191
   },
227
   },
192
   mounted () {
228
   mounted () {
193
     const _that = this
229
     const _that = this
194
     const phoneEditor = new E('#websiteEditorElem')
230
     const phoneEditor = new E('#websiteEditorElem')
195
     phoneEditor.customConfig.zIndex = 1
231
     phoneEditor.customConfig.zIndex = 1
196
     phoneEditor.customConfig.onchange = function (html) {
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
     // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
236
     // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
201
     // phoneEditor.customConfig.uploadFileName = 'uploadFiles'
237
     // phoneEditor.customConfig.uploadFileName = 'uploadFiles'

+ 91
- 71
src/views/activity/edit.vue 查看文件

1
 <template>
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
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
5
         <el-option v-for="(build,i) in buildings.list || []" :key="i" :label="build.buildingName" :value="build.buildingId"></el-option>
6
       </el-select>
6
       </el-select>
7
     </el-form-item>
7
     </el-form-item>
15
               <i v-else class="el-icon-plus avatar-uploader-icon"></i>
15
               <i v-else class="el-icon-plus avatar-uploader-icon"></i>
16
           </el-upload>
16
           </el-upload>
17
     </el-form-item>
17
     </el-form-item>
18
-    <el-form-item label="活动标题">
18
+    <el-form-item label="活动标题" prop="title">
19
       <el-input v-model="activityQuery.title"></el-input>
19
       <el-input v-model="activityQuery.title"></el-input>
20
     </el-form-item>
20
     </el-form-item>
21
     <el-form-item label="活动时间">
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
         <span>-</span>
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
     </el-form-item>
25
     </el-form-item>
26
-    <el-form-item label="活动地点">
26
+    <el-form-item label="活动地点"  prop="address">
27
       <el-input  v-model="activityQuery.address"></el-input>
27
       <el-input  v-model="activityQuery.address"></el-input>
28
     </el-form-item>
28
     </el-form-item>
29
-    <el-form-item label="活动人数">
29
+    <el-form-item label="活动人数" prop="personNum">
30
       <el-input v-model="activityQuery.personNum"></el-input>
30
       <el-input v-model="activityQuery.personNum"></el-input>
31
     </el-form-item>
31
     </el-form-item>
32
     <!-- <el-form-item label="链接地址">
32
     <!-- <el-form-item label="链接地址">
33
       <el-input v-model="dynamic.url"></el-input>
33
       <el-input v-model="dynamic.url"></el-input>
34
     </el-form-item> -->
34
     </el-form-item> -->
35
     <el-form-item label="活动详情">
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
     </el-form-item>
39
     </el-form-item>
38
     <el-form-item label="是否需要报名">
40
     <el-form-item label="是否需要报名">
39
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
41
        <el-radio v-model="activityQuery.isEnlist" label="1">是</el-radio>
40
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
42
        <el-radio v-model="activityQuery.isEnlist" label="0">否</el-radio>
41
     </el-form-item>
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
         <span>-</span>
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
     </el-form-item>
48
     </el-form-item>
47
     <el-form-item>
49
     <el-form-item>
48
-      <el-button type="primary" @click="onSubmit">保存</el-button>
50
+      <el-button type="primary" @click="onSubmit('activityQuery')">保存</el-button>
49
       <el-button @click="onCancel">取消</el-button>
51
       <el-button @click="onCancel">取消</el-button>
50
     </el-form-item>
52
     </el-form-item>
51
   </el-form>
53
   </el-form>
55
 import { createNamespacedHelpers } from 'vuex'
57
 import { createNamespacedHelpers } from 'vuex'
56
 import apis from '../../config/api'
58
 import apis from '../../config/api'
57
 import E from 'wangeditor'
59
 import E from 'wangeditor'
58
-
60
+import dayjs from 'dayjs'
59
 const { mapState: mapDynamicState, mapActions: mapDynamicActions, mapMutations: mapDynamicMutations } = createNamespacedHelpers('building')
61
 const { mapState: mapDynamicState, mapActions: mapDynamicActions, mapMutations: mapDynamicMutations } = createNamespacedHelpers('building')
60
 const { mapState: mapActivityState, mapActions: mapActivityActions } = createNamespacedHelpers('activity')
62
 const { mapState: mapActivityState, mapActions: mapActivityActions } = createNamespacedHelpers('activity')
61
 const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
63
 const { mapState: mapBuildingState, mapActions: mapBuildingActions } = createNamespacedHelpers('building')
74
       dialogImageUrl: "",
76
       dialogImageUrl: "",
75
       activityQuery: {
77
       activityQuery: {
76
        dynamicId:'',
78
        dynamicId:'',
77
-       buildingId:'',
78
        url:'',
79
        url:'',
79
        startDate:'',
80
        startDate:'',
80
        endDate:'',
81
        endDate:'',
81
        buildingId:'',
82
        buildingId:'',
82
        title:'',
83
        title:'',
83
        isEnlist:'',
84
        isEnlist:'',
84
-       text:'',
85
+       desc:'',
85
        enlistStart:'',
86
        enlistStart:'',
86
        enlistEnd:'',
87
        enlistEnd:'',
87
        address:'',
88
        address:'',
88
        personNum:''
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
     },
184
     },
155
 
185
 
156
     handleAvatarSuccess (res) {
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
            JSON.stringify(this.activityQuery)
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
     onCancel () {
225
     onCancel () {
174
-      this.$router.push({name: 'dynamiclist'})
226
+      this.$router.push({name: 'activity-list'})
175
     },
227
     },
176
     getDetails(){
228
     getDetails(){
177
       this.activityQuery.dynamicId = this.$route.query.row
229
       this.activityQuery.dynamicId = this.$route.query.row
178
         this.activityDetails(this.activityQuery).then((data) => {
230
         this.activityDetails(this.activityQuery).then((data) => {
179
-          console.log('55',data)
180
         this.activityQuery.buildingId = data.buildingId
231
         this.activityQuery.buildingId = data.buildingId
181
         this.activityQuery.title = data.title
232
         this.activityQuery.title = data.title
182
         this.activityQuery.startDate = data.startDate
233
         this.activityQuery.startDate = data.startDate
185
         this.activityQuery.personNum = data.personNum
236
         this.activityQuery.personNum = data.personNum
186
         this.imageUrl = data.url
237
         this.imageUrl = data.url
187
         this.activityQuery.isEnlist = data.isEnlist
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
   mounted () {
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
     this.getDetails()
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
 </script>
256
 </script>