张延森 4 år sedan
förälder
incheckning
f2a6669baf
6 ändrade filer med 465 tillägg och 445 borttagningar
  1. 16
    16
      src/settings.js
  2. 13
    13
      src/utils/uploadOption.js
  3. 99
    98
      src/views/activity/Detail.vue
  4. 178
    177
      src/views/advert/Detail.vue
  5. 140
    139
      src/views/news/Detail.vue
  6. 19
    2
      yarn.lock

+ 16
- 16
src/settings.js Visa fil

@@ -1,16 +1,16 @@
1
-module.exports = {
2
-
3
-  title: 'Vue Admin Template',
4
-
5
-  /**
6
-   * @type {boolean} true | false
7
-   * @description Whether fix the header
8
-   */
9
-  fixedHeader: false,
10
-
11
-  /**
12
-   * @type {boolean} true | false
13
-   * @description Whether show the logo in sidebar
14
-   */
15
-  sidebarLogo: false
16
-}
1
+module.exports = {
2
+
3
+  title: '丽园荟',
4
+
5
+  /**
6
+   * @type {boolean} true | false
7
+   * @description Whether fix the header
8
+   */
9
+  fixedHeader: false,
10
+
11
+  /**
12
+   * @type {boolean} true | false
13
+   * @description Whether show the logo in sidebar
14
+   */
15
+  sidebarLogo: false
16
+}

+ 13
- 13
src/utils/uploadOption.js Visa fil

@@ -1,13 +1,13 @@
1
-import { getToken } from './auth'
2
-
3
-const apiPrefix = process.env.VUE_APP_BASE_API
4
-
5
-const options = {
6
-  action: `${apiPrefix}/api/admin/upload`,
7
-  headers: {
8
-    'x-authorization-jwt': getToken()
9
-  },
10
-  name: 'file'
11
-}
12
-
13
-export default options
1
+import { getToken } from './auth'
2
+
3
+const apiPrefix = process.env.VUE_APP_BASE_API
4
+
5
+const options = {
6
+  action: `${apiPrefix}/api/admin/upload`,
7
+  headers: {
8
+    'x-authorization-jwt': getToken()
9
+  },
10
+  name: 'file'
11
+}
12
+
13
+export default options

+ 99
- 98
src/views/activity/Detail.vue Visa fil

@@ -1,98 +1,99 @@
1
-<template>
2
-  <div class="app-container">
3
-    <el-tabs v-model="currentTab" type="card">
4
-      <el-tab-pane label="活动详情" name="detail">
5
-        <div style="max-width: 60vw">
6
-          <activity
7
-            :type-id="typeId"
8
-            :dataset="detail"
9
-            @submit="handleSubmit"
10
-            @cancel="handleCancel"
11
-            @voteChange="handelVoteChange"
12
-          />
13
-        </div>
14
-      </el-tab-pane>
15
-      <el-tab-pane v-if="detail && detail.isEnroll" label="报名详情" name="enroll">
16
-        <enroll-list :activity-id="detail.activityId" />
17
-      </el-tab-pane>
18
-      <el-tab-pane v-if="detail && detail.isVote" label="投票设置" name="vote">
19
-        <voteedit :activity-id="detail.activityId" />
20
-      </el-tab-pane>
21
-      <el-tab-pane v-if="detail && detail.isVote" label="投票排行" name="rank">
22
-        <voterank :show="showRank" :activity-id="detail.activityId" style="width: 60vw; min-height: 400px" />
23
-        <div style="margin-top: 48px">
24
-          <votelist :activity-id="detail.activityId" />
25
-        </div>
26
-      </el-tab-pane>
27
-    </el-tabs>
28
-  </div>
29
-</template>
30
-
31
-<script>
32
-import { getActivity, updateActivity, saveActivity } from '@/api/activity'
33
-
34
-export default {
35
-  components: {
36
-    activity: () => import('./components/Detail'),
37
-    enrollList: () => import('./components/EnrollList'),
38
-    voteedit: () => import('./components/VoteEdit'),
39
-    voterank: () => import('./components/VoteRank'),
40
-    votelist: () => import('./components/VoteList')
41
-  },
42
-
43
-  props: {
44
-    typeId: {
45
-      type: Number,
46
-      default: 0
47
-    }
48
-  },
49
-
50
-  data() {
51
-    return {
52
-      id: null,
53
-      detail: {},
54
-      currentTab: 'detail'
55
-    }
56
-  },
57
-
58
-  computed: {
59
-    showRank() {
60
-      return this.currentTab === 'rank'
61
-    }
62
-  },
63
-
64
-  created() {
65
-    const { id } = this.$route.query
66
-    if (id) {
67
-      this.id = id
68
-      // eslint-disable-next-line no-return-assign
69
-      getActivity(id).then(res => this.detail = res)
70
-    }
71
-  },
72
-
73
-  methods: {
74
-    handleSubmit(data) {
75
-      if (this.id) {
76
-        updateActivity(data).then(() => {
77
-          this.$message({ type: 'success', message: '更新成功' })
78
-        })
79
-      } else {
80
-        saveActivity(data).then(res => {
81
-          this.$router.replace({ name: this.$route.name, params: { typeId: this.typeId }, query: { id: res.activityId }})
82
-        })
83
-      }
84
-    },
85
-
86
-    handleCancel() {
87
-      this.$router.go(-1)
88
-    }
89
-
90
-    // handelVoteChange(v) {
91
-    //   this.detail = {
92
-    //     ...(this.detail || {}),
93
-    //     isVote: v
94
-    //   }
95
-    // }
96
-  }
97
-}
98
-</script>
1
+<template>
2
+  <div class="app-container">
3
+    <el-tabs v-model="currentTab" type="card">
4
+      <el-tab-pane label="活动详情" name="detail">
5
+        <div style="max-width: 60vw">
6
+          <activity
7
+            :type-id="typeId"
8
+            :dataset="detail"
9
+            @submit="handleSubmit"
10
+            @cancel="handleCancel"
11
+            @voteChange="handelVoteChange"
12
+          />
13
+        </div>
14
+      </el-tab-pane>
15
+      <el-tab-pane v-if="detail && detail.isEnroll" label="报名详情" name="enroll">
16
+        <enroll-list :activity-id="detail.activityId" />
17
+      </el-tab-pane>
18
+      <el-tab-pane v-if="detail && detail.isVote" label="投票设置" name="vote">
19
+        <voteedit :activity-id="detail.activityId" />
20
+      </el-tab-pane>
21
+      <el-tab-pane v-if="detail && detail.isVote" label="投票排行" name="rank">
22
+        <voterank :show="showRank" :activity-id="detail.activityId" style="width: 60vw; min-height: 400px" />
23
+        <div style="margin-top: 48px">
24
+          <votelist :activity-id="detail.activityId" />
25
+        </div>
26
+      </el-tab-pane>
27
+    </el-tabs>
28
+  </div>
29
+</template>
30
+
31
+<script>
32
+import { getActivity, updateActivity, saveActivity } from '@/api/activity'
33
+
34
+export default {
35
+  components: {
36
+    activity: () => import('./components/Detail'),
37
+    enrollList: () => import('./components/EnrollList'),
38
+    voteedit: () => import('./components/VoteEdit'),
39
+    voterank: () => import('./components/VoteRank'),
40
+    votelist: () => import('./components/VoteList')
41
+  },
42
+
43
+  props: {
44
+    typeId: {
45
+      type: Number,
46
+      default: 0
47
+    }
48
+  },
49
+
50
+  data() {
51
+    return {
52
+      id: null,
53
+      detail: {},
54
+      currentTab: 'detail'
55
+    }
56
+  },
57
+
58
+  computed: {
59
+    showRank() {
60
+      return this.currentTab === 'rank'
61
+    }
62
+  },
63
+
64
+  created() {
65
+    const { id } = this.$route.query
66
+    if (id) {
67
+      this.id = id
68
+      // eslint-disable-next-line no-return-assign
69
+      getActivity(id).then(res => this.detail = res)
70
+    }
71
+  },
72
+
73
+  methods: {
74
+    handleSubmit(data) {
75
+      if (this.id) {
76
+        updateActivity(data).then(() => {
77
+          this.$message({ type: 'success', message: '更新成功' })
78
+        })
79
+      } else {
80
+        saveActivity(data).then(res => {
81
+          // this.$router.replace({ name: this.$route.name, params: { typeId: this.typeId }, query: { id: res.activityId }})
82
+          this.$router.go(-1)
83
+        })
84
+      }
85
+    },
86
+
87
+    handleCancel() {
88
+      this.$router.go(-1)
89
+    }
90
+
91
+    // handelVoteChange(v) {
92
+    //   this.detail = {
93
+    //     ...(this.detail || {}),
94
+    //     isVote: v
95
+    //   }
96
+    // }
97
+  }
98
+}
99
+</script>

+ 178
- 177
src/views/advert/Detail.vue Visa fil

@@ -1,177 +1,178 @@
1
-<template>
2
-  <div class="app-container">
3
-    <el-form ref="advForm" v-loading="loading.form" :model="form" :rules="rules" label-width="120px">
4
-      <el-form-item label="标题" prop="title">
5
-        <el-input v-model="form.title" />
6
-      </el-form-item>
7
-      <el-form-item label="图片" prop="image">
8
-        <uploadimg v-model="form.image" />
9
-      </el-form-item>
10
-      <el-form-item label="投放位置">
11
-        <el-select v-model="form.position" placeholder="请选择" style="width: 100%">
12
-          <el-option
13
-            v-for="item in posDict"
14
-            :key="item.moduleCode"
15
-            :label="item.name"
16
-            :value="item.moduleCode"
17
-          />
18
-        </el-select>
19
-      </el-form-item>
20
-      <el-form-item label="关联活动">
21
-        <el-select
22
-          v-model="form.srcId"
23
-          v-loading="loading.remote"
24
-          filterable
25
-          remote
26
-          placeholder="请输入活动名称"
27
-          style="width: 100%"
28
-          :remote-method="fetchRemoteActivity"
29
-        >
30
-          <el-option
31
-            v-for="item in activityList"
32
-            :key="item.activityId"
33
-            :label="item.name"
34
-            :value="item.activityId"
35
-          />
36
-        </el-select>
37
-      </el-form-item>
38
-      <el-form-item label="权重" prop="sortNo">
39
-        <el-input-number v-model="form.sortNo" :min="0" />
40
-      </el-form-item>
41
-      <el-form-item label="状态" prop="status">
42
-        <el-radio-group v-model="form.status">
43
-          <el-radio :label="0">未发布</el-radio>
44
-          <el-radio :label="1">已发布</el-radio>
45
-        </el-radio-group>
46
-      </el-form-item>
47
-      <el-form-item>
48
-        <el-button type="primary" @click="handleSubmit">保 存</el-button>
49
-        <el-button @click="handleCancel">取 消</el-button>
50
-      </el-form-item>
51
-    </el-form>
52
-  </div>
53
-</template>
54
-
55
-<script>
56
-import uploadOption from '@/utils/uploadOption'
57
-import { getSysModules } from '@/api/comm'
58
-import { getAdvert, saveAdvert, updateAdvert } from '@/api/advert'
59
-import { getActivityList } from '@/api/activity'
60
-
61
-export default {
62
-  components: {
63
-    uploadimg: () => import('@/components/UploadImg')
64
-  },
65
-
66
-  data() {
67
-    return {
68
-      id: null,
69
-      loading: {
70
-        form: false,
71
-        image: false,
72
-        remote: false
73
-      },
74
-      posDict: [],
75
-      activityList: [],
76
-      uploadOption,
77
-      form: {
78
-        advId: null,
79
-        advType: null,
80
-        title: null,
81
-        image: null,
82
-        position: null,
83
-        srcType: 'activity',
84
-        srcId: null,
85
-        status: 0,
86
-        sortNo: 0
87
-      },
88
-      rules: {
89
-        title: [
90
-          { required: true, message: '请输入标题', trigger: 'blur' }
91
-        ],
92
-        image: [
93
-          { required: true, message: '请选择图片', trigger: 'change' }
94
-        ],
95
-        position: [
96
-          { required: true, message: '请选择投放位置', trigger: 'change' }
97
-        ]
98
-      }
99
-    }
100
-  },
101
-
102
-  created() {
103
-    const { id } = this.$route.query
104
-    this.id = id
105
-    this.fetchData()
106
-    this.fetchModules()
107
-  },
108
-
109
-  methods: {
110
-    fetchModules() {
111
-      getSysModules().then(res => {
112
-        this.posDict = res.records || []
113
-      })
114
-    },
115
-
116
-    fetchData() {
117
-      if (this.id) {
118
-        this.loading.form = true
119
-        getAdvert(this.id).then(res => {
120
-          this.form = res
121
-          this.loading.form = false
122
-        }).catch(err => {
123
-          console.error(err)
124
-          this.loading.form = false
125
-        })
126
-      }
127
-    },
128
-
129
-    fetchRemoteActivity(q) {
130
-      if (!q) {
131
-        this.activityList = []
132
-        return
133
-      }
134
-
135
-      this.loading.remote = true
136
-      getActivityList({
137
-        pageSize: 100,
138
-        name: q
139
-      }).then(res => {
140
-        this.loading.remote = false
141
-        this.activityList = res.records || []
142
-      })
143
-    },
144
-
145
-    handleSubmit() {
146
-      this.$refs.advForm.validate(valid => {
147
-        if (valid) {
148
-          //
149
-          const data = this.form
150
-          this.loading.form = true
151
-          if (this.id) {
152
-            updateAdvert(data).then(() => {
153
-              this.$message({ type: 'success', message: '更新成功' })
154
-              this.loading.form = false
155
-            }).catch(err => {
156
-              console.error(err)
157
-              this.loading.form = false
158
-            })
159
-          } else {
160
-            saveAdvert(data).then(res => {
161
-              this.$router.replace({ name: this.$route.name, query: { id: res.advId }})
162
-              this.loading.form = false
163
-            }).catch(err => {
164
-              console.error(err)
165
-              this.loading.form = false
166
-            })
167
-          }
168
-        }
169
-      })
170
-    },
171
-
172
-    handleCancel() {
173
-      this.$router.go(-1)
174
-    }
175
-  }
176
-}
177
-</script>
1
+<template>
2
+  <div class="app-container">
3
+    <el-form ref="advForm" v-loading="loading.form" :model="form" :rules="rules" label-width="120px">
4
+      <el-form-item label="标题" prop="title">
5
+        <el-input v-model="form.title" />
6
+      </el-form-item>
7
+      <el-form-item label="图片" prop="image">
8
+        <uploadimg v-model="form.image" />
9
+      </el-form-item>
10
+      <el-form-item label="投放位置">
11
+        <el-select v-model="form.position" placeholder="请选择" style="width: 100%">
12
+          <el-option
13
+            v-for="item in posDict"
14
+            :key="item.moduleCode"
15
+            :label="item.name"
16
+            :value="item.moduleCode"
17
+          />
18
+        </el-select>
19
+      </el-form-item>
20
+      <el-form-item label="关联活动">
21
+        <el-select
22
+          v-model="form.srcId"
23
+          v-loading="loading.remote"
24
+          filterable
25
+          remote
26
+          placeholder="请输入活动名称"
27
+          style="width: 100%"
28
+          :remote-method="fetchRemoteActivity"
29
+        >
30
+          <el-option
31
+            v-for="item in activityList"
32
+            :key="item.activityId"
33
+            :label="item.name"
34
+            :value="item.activityId"
35
+          />
36
+        </el-select>
37
+      </el-form-item>
38
+      <el-form-item label="权重" prop="sortNo">
39
+        <el-input-number v-model="form.sortNo" :min="0" />
40
+      </el-form-item>
41
+      <el-form-item label="状态" prop="status">
42
+        <el-radio-group v-model="form.status">
43
+          <el-radio :label="0">未发布</el-radio>
44
+          <el-radio :label="1">已发布</el-radio>
45
+        </el-radio-group>
46
+      </el-form-item>
47
+      <el-form-item>
48
+        <el-button type="primary" @click="handleSubmit">保 存</el-button>
49
+        <el-button @click="handleCancel">取 消</el-button>
50
+      </el-form-item>
51
+    </el-form>
52
+  </div>
53
+</template>
54
+
55
+<script>
56
+import uploadOption from '@/utils/uploadOption'
57
+import { getSysModules } from '@/api/comm'
58
+import { getAdvert, saveAdvert, updateAdvert } from '@/api/advert'
59
+import { getActivityList } from '@/api/activity'
60
+
61
+export default {
62
+  components: {
63
+    uploadimg: () => import('@/components/UploadImg')
64
+  },
65
+
66
+  data() {
67
+    return {
68
+      id: null,
69
+      loading: {
70
+        form: false,
71
+        image: false,
72
+        remote: false
73
+      },
74
+      posDict: [],
75
+      activityList: [],
76
+      uploadOption,
77
+      form: {
78
+        advId: null,
79
+        advType: null,
80
+        title: null,
81
+        image: null,
82
+        position: null,
83
+        srcType: 'activity',
84
+        srcId: null,
85
+        status: 0,
86
+        sortNo: 0
87
+      },
88
+      rules: {
89
+        title: [
90
+          { required: true, message: '请输入标题', trigger: 'blur' }
91
+        ],
92
+        image: [
93
+          { required: true, message: '请选择图片', trigger: 'change' }
94
+        ],
95
+        position: [
96
+          { required: true, message: '请选择投放位置', trigger: 'change' }
97
+        ]
98
+      }
99
+    }
100
+  },
101
+
102
+  created() {
103
+    const { id } = this.$route.query
104
+    this.id = id
105
+    this.fetchData()
106
+    this.fetchModules()
107
+  },
108
+
109
+  methods: {
110
+    fetchModules() {
111
+      getSysModules().then(res => {
112
+        this.posDict = res.records || []
113
+      })
114
+    },
115
+
116
+    fetchData() {
117
+      if (this.id) {
118
+        this.loading.form = true
119
+        getAdvert(this.id).then(res => {
120
+          this.form = res
121
+          this.loading.form = false
122
+        }).catch(err => {
123
+          console.error(err)
124
+          this.loading.form = false
125
+        })
126
+      }
127
+    },
128
+
129
+    fetchRemoteActivity(q) {
130
+      if (!q) {
131
+        this.activityList = []
132
+        return
133
+      }
134
+
135
+      this.loading.remote = true
136
+      getActivityList({
137
+        pageSize: 100,
138
+        name: q
139
+      }).then(res => {
140
+        this.loading.remote = false
141
+        this.activityList = res.records || []
142
+      })
143
+    },
144
+
145
+    handleSubmit() {
146
+      this.$refs.advForm.validate(valid => {
147
+        if (valid) {
148
+          //
149
+          const data = this.form
150
+          this.loading.form = true
151
+          if (this.id) {
152
+            updateAdvert(data).then(() => {
153
+              this.$message({ type: 'success', message: '更新成功' })
154
+              this.loading.form = false
155
+            }).catch(err => {
156
+              console.error(err)
157
+              this.loading.form = false
158
+            })
159
+          } else {
160
+            saveAdvert(data).then(res => {
161
+              // this.$router.replace({ name: this.$route.name, query: { id: res.advId }})
162
+              this.loading.form = false
163
+              this.$router.go(-1)
164
+            }).catch(err => {
165
+              console.error(err)
166
+              this.loading.form = false
167
+            })
168
+          }
169
+        }
170
+      })
171
+    },
172
+
173
+    handleCancel() {
174
+      this.$router.go(-1)
175
+    }
176
+  }
177
+}
178
+</script>

+ 140
- 139
src/views/news/Detail.vue Visa fil

@@ -1,139 +1,140 @@
1
-<template>
2
-  <div class="app-container">
3
-    <el-form ref="newsForm" v-loading="loading.form" :model="form" :rules="rules" label-width="120px">
4
-      <el-form-item label="标题" prop="title">
5
-        <el-input v-model="form.title" />
6
-      </el-form-item>
7
-      <el-form-item label="发布人" prop="publisher">
8
-        <el-input v-model="form.publisher" />
9
-      </el-form-item>
10
-      <el-form-item label="发布时间" prop="publishDate">
11
-        <el-input v-model="form.publishDate" />
12
-      </el-form-item>
13
-      <el-form-item label="封面" prop="thumb">
14
-        <uploadimg v-model="form.thumb" />
15
-      </el-form-item>
16
-      <el-form-item label="详情" prop="content">
17
-        <markdown v-model="form.content" />
18
-      </el-form-item>
19
-      <el-form-item label="活动状态" prop="status">
20
-        <el-radio-group v-model="form.status">
21
-          <el-radio :label="0">未发布</el-radio>
22
-          <el-radio :label="1">已发布</el-radio>
23
-        </el-radio-group>
24
-      </el-form-item>
25
-      <el-form-item>
26
-        <el-button type="primary" @click="handleSubmit">保 存</el-button>
27
-        <el-button @click="handleCancel">取 消</el-button>
28
-      </el-form-item>
29
-    </el-form>
30
-  </div>
31
-</template>
32
-
33
-<script>
34
-import dayjs from 'dayjs'
35
-import uploadOption from '@/utils/uploadOption'
36
-import { getNews, saveNews, updateNews } from '@/api/news'
37
-
38
-export default {
39
-  components: {
40
-    uploadimg: () => import('@/components/UploadImg'),
41
-    markdown: () => import('@/components/MarkdownEditor')
42
-  },
43
-
44
-  props: {
45
-    typeId: {
46
-      type: Number,
47
-      default: 0
48
-    }
49
-  },
50
-
51
-  data() {
52
-    return {
53
-      id: null,
54
-      loading: {
55
-        form: false,
56
-        thumb: false
57
-      },
58
-      uploadOption,
59
-      form: {
60
-        newsId: null,
61
-        title: null,
62
-        publisher: null,
63
-        publishDate: dayjs().format('YYYY-MM-DD'),
64
-        thumb: null,
65
-        content: null,
66
-        status: 0,
67
-        weight: 0
68
-      },
69
-      rules: {
70
-        title: [
71
-          { required: true, message: '请输入标题', trigger: 'blur' }
72
-        ],
73
-        publisher: [
74
-          { required: true, message: '请输入发布人', trigger: 'blur' }
75
-        ],
76
-        publishDate: [
77
-          { required: true, message: '请输入发布时间', trigger: 'blur' }
78
-        ]
79
-      }
80
-    }
81
-  },
82
-
83
-  created() {
84
-    const { id } = this.$route.query
85
-    this.id = id
86
-    this.fetchData()
87
-  },
88
-
89
-  methods: {
90
-    fetchData() {
91
-      if (this.id) {
92
-        this.loading.form = true
93
-        getNews(this.id).then(res => {
94
-          this.form = res
95
-          this.loading.form = false
96
-        }).catch(err => {
97
-          console.error(err)
98
-          this.loading.form = false
99
-        })
100
-      }
101
-    },
102
-
103
-    handleSubmit() {
104
-      this.$refs.newsForm.validate(valid => {
105
-        if (valid) {
106
-          const data = {
107
-            ...this.form,
108
-            typeId: this.typeId
109
-          }
110
-
111
-          //
112
-          this.loading.form = true
113
-          if (this.id) {
114
-            updateNews(data).then(() => {
115
-              this.$message({ type: 'success', message: '更新成功' })
116
-              this.loading.form = false
117
-            }).catch(err => {
118
-              console.error(err)
119
-              this.loading.form = false
120
-            })
121
-          } else {
122
-            saveNews(data).then(res => {
123
-              this.$router.replace({ name: this.$route.name, params: { typeId: this.typeId }, query: { id: res.newsId }})
124
-              this.loading.form = false
125
-            }).catch(err => {
126
-              console.error(err)
127
-              this.loading.form = false
128
-            })
129
-          }
130
-        }
131
-      })
132
-    },
133
-
134
-    handleCancel() {
135
-      this.$router.go(-1)
136
-    }
137
-  }
138
-}
139
-</script>
1
+<template>
2
+  <div class="app-container">
3
+    <el-form ref="newsForm" v-loading="loading.form" :model="form" :rules="rules" label-width="120px">
4
+      <el-form-item label="标题" prop="title">
5
+        <el-input v-model="form.title" />
6
+      </el-form-item>
7
+      <el-form-item label="发布人" prop="publisher">
8
+        <el-input v-model="form.publisher" />
9
+      </el-form-item>
10
+      <el-form-item label="发布时间" prop="publishDate">
11
+        <el-input v-model="form.publishDate" />
12
+      </el-form-item>
13
+      <el-form-item label="封面" prop="thumb">
14
+        <uploadimg v-model="form.thumb" />
15
+      </el-form-item>
16
+      <el-form-item label="详情" prop="content">
17
+        <markdown v-model="form.content" />
18
+      </el-form-item>
19
+      <el-form-item label="活动状态" prop="status">
20
+        <el-radio-group v-model="form.status">
21
+          <el-radio :label="0">未发布</el-radio>
22
+          <el-radio :label="1">已发布</el-radio>
23
+        </el-radio-group>
24
+      </el-form-item>
25
+      <el-form-item>
26
+        <el-button type="primary" @click="handleSubmit">保 存</el-button>
27
+        <el-button @click="handleCancel">取 消</el-button>
28
+      </el-form-item>
29
+    </el-form>
30
+  </div>
31
+</template>
32
+
33
+<script>
34
+import dayjs from 'dayjs'
35
+import uploadOption from '@/utils/uploadOption'
36
+import { getNews, saveNews, updateNews } from '@/api/news'
37
+
38
+export default {
39
+  components: {
40
+    uploadimg: () => import('@/components/UploadImg'),
41
+    markdown: () => import('@/components/MarkdownEditor')
42
+  },
43
+
44
+  props: {
45
+    typeId: {
46
+      type: Number,
47
+      default: 0
48
+    }
49
+  },
50
+
51
+  data() {
52
+    return {
53
+      id: null,
54
+      loading: {
55
+        form: false,
56
+        thumb: false
57
+      },
58
+      uploadOption,
59
+      form: {
60
+        newsId: null,
61
+        title: null,
62
+        publisher: null,
63
+        publishDate: dayjs().format('YYYY-MM-DD'),
64
+        thumb: null,
65
+        content: null,
66
+        status: 0,
67
+        weight: 0
68
+      },
69
+      rules: {
70
+        title: [
71
+          { required: true, message: '请输入标题', trigger: 'blur' }
72
+        ],
73
+        publisher: [
74
+          { required: true, message: '请输入发布人', trigger: 'blur' }
75
+        ],
76
+        publishDate: [
77
+          { required: true, message: '请输入发布时间', trigger: 'blur' }
78
+        ]
79
+      }
80
+    }
81
+  },
82
+
83
+  created() {
84
+    const { id } = this.$route.query
85
+    this.id = id
86
+    this.fetchData()
87
+  },
88
+
89
+  methods: {
90
+    fetchData() {
91
+      if (this.id) {
92
+        this.loading.form = true
93
+        getNews(this.id).then(res => {
94
+          this.form = res
95
+          this.loading.form = false
96
+        }).catch(err => {
97
+          console.error(err)
98
+          this.loading.form = false
99
+        })
100
+      }
101
+    },
102
+
103
+    handleSubmit() {
104
+      this.$refs.newsForm.validate(valid => {
105
+        if (valid) {
106
+          const data = {
107
+            ...this.form,
108
+            typeId: this.typeId
109
+          }
110
+
111
+          //
112
+          this.loading.form = true
113
+          if (this.id) {
114
+            updateNews(data).then(() => {
115
+              this.$message({ type: 'success', message: '更新成功' })
116
+              this.loading.form = false
117
+            }).catch(err => {
118
+              console.error(err)
119
+              this.loading.form = false
120
+            })
121
+          } else {
122
+            saveNews(data).then(res => {
123
+              // this.$router.replace({ name: this.$route.name, params: { typeId: this.typeId }, query: { id: res.newsId }})
124
+              this.loading.form = false
125
+              this.$router.go(-1)
126
+            }).catch(err => {
127
+              console.error(err)
128
+              this.loading.form = false
129
+            })
130
+          }
131
+        }
132
+      })
133
+    },
134
+
135
+    handleCancel() {
136
+      this.$router.go(-1)
137
+    }
138
+  }
139
+}
140
+</script>

+ 19
- 2
yarn.lock Visa fil

@@ -3571,6 +3571,11 @@ data-urls@^1.0.0, data-urls@^1.1.0:
3571 3571
     whatwg-mimetype "^2.2.0"
3572 3572
     whatwg-url "^7.0.0"
3573 3573
 
3574
+dayjs@^1.8.33:
3575
+  version "1.8.33"
3576
+  resolved "https://registry.npm.taobao.org/dayjs/download/dayjs-1.8.33.tgz?cache=0&sync_timestamp=1597033960849&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdayjs%2Fdownload%2Fdayjs-1.8.33.tgz#18bc4a2b6c1c6f4d67b4c4f2536c0b97e5b766f7"
3577
+  integrity sha1-GLxKK2wcb01ntMTyU2wLl+W3Zvc=
3578
+
3574 3579
 de-indent@^1.0.2:
3575 3580
   version "1.0.2"
3576 3581
   resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
@@ -3921,6 +3926,13 @@ ecc-jsbn@~0.1.1:
3921 3926
     jsbn "~0.1.0"
3922 3927
     safer-buffer "^2.1.0"
3923 3928
 
3929
+echarts@^4.8.0:
3930
+  version "4.8.0"
3931
+  resolved "https://registry.npm.taobao.org/echarts/download/echarts-4.8.0.tgz?cache=0&sync_timestamp=1596214937248&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fecharts%2Fdownload%2Fecharts-4.8.0.tgz#b2c1cfb9229b13d368ee104fc8eea600b574d4c4"
3932
+  integrity sha1-ssHPuSKbE9No7hBPyO6mALV01MQ=
3933
+  dependencies:
3934
+    zrender "4.3.1"
3935
+
3924 3936
 editorconfig@^0.15.3:
3925 3937
   version "0.15.3"
3926 3938
   resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
@@ -8614,9 +8626,9 @@ range-parser@^1.2.1, range-parser@~1.2.0, range-parser@~1.2.1:
8614 8626
   resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
8615 8627
   integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
8616 8628
 
8617
-"raphael@git+https://github.com/nhn/raphael.git#2.2.0-c":
8629
+"raphael@https://github.com/nhn/raphael.git#2.2.0-c":
8618 8630
   version "2.2.0-c"
8619
-  resolved "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0"
8631
+  resolved "https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0"
8620 8632
   dependencies:
8621 8633
     eve "git://github.com/adobe-webplatform/eve.git#eef80ed"
8622 8634
 
@@ -11059,3 +11071,8 @@ yorkie@^2.0.0:
11059 11071
     is-ci "^1.0.10"
11060 11072
     normalize-path "^1.0.0"
11061 11073
     strip-indent "^2.0.0"
11074
+
11075
+zrender@4.3.1:
11076
+  version "4.3.1"
11077
+  resolved "https://registry.npm.taobao.org/zrender/download/zrender-4.3.1.tgz?cache=0&sync_timestamp=1596718864550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.3.1.tgz#baf8aa6dc8187a2f819692d7d5f9bedfa2b90fa3"
11078
+  integrity sha1-uviqbcgYei+BlpLX1fm+36K5D6M=