Explorar el Código

Merge branch 'master' of http://git.ycjcjy.com/zhiyuxing/pc-admin

# Conflicts:
#	src/config/api.js
傅行帆 hace 5 años
padre
commit
64828f1e0c

+ 77
- 0
src/components/wangeditor/index.vue Ver fichero

@@ -0,0 +1,77 @@
1
+<template>
2
+    <div id="websiteEditorElem" style="height: 400px"></div>
3
+</template>
4
+
5
+<script>
6
+    import E from 'wangeditor'
7
+    export default {
8
+        name: "index",
9
+        props:[
10
+          'content'
11
+        ],
12
+        watch: {
13
+            text(newVal, oldVal) {
14
+                console.log(newVal, oldVal)
15
+                //this.phoneEditor.txt.html(this.text)
16
+                if (!newVal && oldVal) {
17
+                    this.text = newVal
18
+                    this.intiPhoneEditor()
19
+                }
20
+                this.sendContent()
21
+            }
22
+        },
23
+        data() {
24
+          return {
25
+              text: this.content,
26
+              phoneEditor: ''
27
+          }
28
+        },
29
+        mounted() {
30
+            this.$nextTick(() => {
31
+                this.intiPhoneEditor()
32
+            })
33
+        },
34
+        methods: {
35
+            sendContent() {
36
+                this.$emit('get-content', this.text)
37
+            },
38
+            intiPhoneEditor() {
39
+                console.log('初始化值:', this.text)
40
+                const _that = this
41
+                _that.phoneEditor = new E('#websiteEditorElem')
42
+                const phoneEditor = _that.phoneEditor
43
+                phoneEditor.customConfig.zIndex = 1
44
+                phoneEditor.customConfig.onchange = function (html) {
45
+                    _that.text = html
46
+                }
47
+                // phoneEditor.customConfig.uploadImgServer = this.upFileUrl
48
+                // phoneEditor.customConfig.uploadFileName = 'uploadFiles'
49
+
50
+                // phoneEditor.customConfig.customUploadImg = function (files, insert) {
51
+                //     _that.uploadImg(files[0]).then(data => {
52
+                //         insert(data)
53
+                //     })
54
+                // }
55
+                phoneEditor.customConfig.menus = [
56
+                    'head',  // 标题
57
+                    'bold',  // 粗体
58
+                    'fontSize',  // 字号
59
+                    'fontName',  // 字体
60
+                    'italic',  // 斜体
61
+                    'underline',  // 下划线
62
+                    'strikeThrough',  // 删除线
63
+                    'foreColor',  // 文字颜色
64
+                    'backColor',  // 背景颜色
65
+                    'justify',  // 对齐方式
66
+                    'image',  // 插入图片
67
+                ]
68
+                phoneEditor.create()
69
+                phoneEditor.txt.html(this.text)
70
+            },
71
+        }
72
+    }
73
+</script>
74
+
75
+<style scoped>
76
+
77
+</style>

+ 22
- 0
src/config/api.js Ver fichero

@@ -193,6 +193,28 @@ const apis = {
193 193
       url: `${commPrefix}/tdPointsRules/change`
194 194
     }
195 195
   },
196
+  news: {
197
+    list: {
198
+      method: 'get',
199
+      url: `${commPrefix}/taNews`
200
+    },
201
+    add: {
202
+      method: 'post',
203
+      url: `${commPrefix}/taNews`
204
+    },
205
+    delete: {
206
+      method: 'delete',
207
+      url: `${commPrefix}/taNews/:id`
208
+    },
209
+    update: {
210
+      method: 'put',
211
+      url: `${commPrefix}/taNews/:id`
212
+    },
213
+    getById: {
214
+      method: 'get',
215
+      url: `${commPrefix}/taNews/:id`
216
+    }
217
+  }
196 218
 }
197 219
 
198 220
 export default apis

+ 61
- 0
src/store/modules/news.js Ver fichero

@@ -71,6 +71,67 @@ export default {
71 71
                     reject(err)
72 72
                 })
73 73
             })
74
+        },
75
+        getList({ commit }, payload) { // 查询所有资迅
76
+            return  new Promise((resolve, reject) => {
77
+                request({
78
+                    ...apis.news.list,
79
+                    params: payload,
80
+                }).then((data) => {
81
+                    resolve(data)
82
+                }).catch((err) => {
83
+                    reject(err)
84
+                })
85
+            })
86
+        },
87
+        getById({ commit }, payload) { // 根据Id查询资迅
88
+            return  new Promise((resolve, reject) => {
89
+                request({
90
+                    ...apis.news.getById,
91
+                    urlData: { id: payload.newsId },
92
+                }).then((data) => {
93
+                    resolve(data)
94
+                }).catch((err) => {
95
+                    reject(err)
96
+                })
97
+            })
98
+        },
99
+        add({ commit }, payload) { // 添加
100
+            return  new Promise((resolve, reject) => {
101
+                request({
102
+                    ...apis.news.add,
103
+                    data: payload,
104
+                }).then((data) => {
105
+                    resolve(data)
106
+                }).catch((err) => {
107
+                    reject(err)
108
+                })
109
+            })
110
+        },
111
+        update({ commit }, payload) { // 修改
112
+            return  new Promise((resolve, reject) => {
113
+                request({
114
+                    ...apis.news.update,
115
+                    urlData:{ id: payload.newsId },
116
+                    data:payload
117
+                }).then((data) => {
118
+                    resolve(data)
119
+                }).catch((err) => {
120
+                    reject(err)
121
+                })
122
+            })
123
+        },
124
+        delete({ commit }, payload) { // 删除
125
+            return  new Promise((resolve, reject) => {
126
+                request({
127
+                    ...apis.news.delete,
128
+                    urlData: { id: payload.newsId },
129
+                }).then((data) => {
130
+                    resolve(data)
131
+                }).catch((err) => {
132
+                    reject(err)
133
+                })
134
+            })
74 135
         }
75 136
     }
76 137
 }

+ 19
- 1
src/views/index.js Ver fichero

@@ -276,7 +276,25 @@ const pages = [
276 276
           menuShow: false,
277 277
           title: '编辑资迅类型',
278 278
         },
279
-      }
279
+      },
280
+      {
281
+        path: '/news/list',
282
+        name: 'news-list',
283
+        component: () => import('./news/index.vue'),
284
+        meta: {
285
+          menuShow: true,
286
+          title: '资迅列表',
287
+        },
288
+      },
289
+      {
290
+        path: '/news/edi',
291
+        name: 'news-edi',
292
+        component: () => import('./news/edi/index.vue'),
293
+        meta: {
294
+          menuShow: false,
295
+          title: '编辑资迅',
296
+        },
297
+      },
280 298
     ]
281 299
   },
282 300
   {

+ 221
- 0
src/views/news/edi/index.vue Ver fichero

@@ -0,0 +1,221 @@
1
+<template>
2
+    <div id="root">
3
+        <el-form ref="form" :model="form" label-width="80px" class="form">
4
+            <el-form-item label="所属项目">
5
+                <el-select v-model="form.buildingId" placeholder="请选择">
6
+                    <el-option
7
+                            v-for="item in buildingList"
8
+                            :key="item.buildingId"
9
+                            :label="item.buildingName"
10
+                            :value="item.buildingId">
11
+                    </el-option>
12
+                </el-select>
13
+            </el-form-item>
14
+            <el-form-item label="资讯图片">
15
+<!--                class="avatar-uploader"-->
16
+                <el-upload
17
+                        :headers="uploadHeaders"
18
+                        :action="upFileUrl"
19
+                        :show-file-list="false"
20
+                        :on-success="handleAvatarSuccess">
21
+                    <img v-if="imageUrl" :src="imageUrl" class="avatar">
22
+                    <i v-else class="el-icon-plus avatar-uploader-icon"></i>
23
+                </el-upload>
24
+            </el-form-item>
25
+            <el-form-item label="资讯标题">
26
+                <el-input v-model="form.newsName"></el-input>
27
+            </el-form-item>
28
+            <el-form-item label="资讯类型">
29
+                <el-select v-model="form.newsTypeId" placeholder="请选择">
30
+                    <el-option
31
+                            v-for="item in typeList"
32
+                            :key="item.newsTypeId"
33
+                            :label="item.newsTypeName"
34
+                            :value="item.newsTypeId">
35
+                    </el-option>
36
+                </el-select>
37
+            </el-form-item>
38
+            <el-form-item label="资讯详情">
39
+                <my-wangeditor :content="form.newsDetail" @get-content="getEdiCentent"></my-wangeditor>
40
+            </el-form-item>
41
+            <el-form-item label="状态">
42
+                <el-select v-model="form.newsStatus" placeholder="请选择">
43
+                    <el-option
44
+                            v-for="item in optionNewsStatus"
45
+                            :key="item.newsStatus"
46
+                            :label="item.name"
47
+                            :value="item.newsStatus">
48
+                    </el-option>
49
+                </el-select>
50
+            </el-form-item>
51
+            <el-form-item>
52
+                <el-button type="primary" @click="submitNewsType">保存</el-button>
53
+                <el-button @click="cancel">取消</el-button>
54
+            </el-form-item>
55
+        </el-form>
56
+    </div>
57
+</template>
58
+
59
+<script>
60
+    import myWangeditor from '../../../components/wangeditor'
61
+    import apis from '../../../config/api'
62
+    export default {
63
+        name: "newsEdiIndex",
64
+        data() {
65
+            return {
66
+                upFileUrl: apis.file.upload.url,
67
+                imageUrl: '',
68
+                optionNewsStatus: [
69
+                    {
70
+                        name: '已发布',
71
+                        newsStatus: 0
72
+                    },
73
+                    {
74
+                        name: '未发布',
75
+                        newsStatus: 1
76
+                    }
77
+                ],
78
+                form: {
79
+                    newsId: '',
80
+                    newsTypeId: '',
81
+                    newsImg: '',
82
+                    newsName: '',
83
+                    buildingId: '',
84
+                    newsStatus: '',
85
+                    newsDetail: ''
86
+                },
87
+                buildingList: [],
88
+                buildingForm: {
89
+                    pageNum: 1,
90
+                    pageSize: 100
91
+                },
92
+                typeList: [],
93
+                typeForm: {
94
+                    buildingId: '',
95
+                    pageNum: 1,
96
+                    pageSize: 100
97
+                },
98
+
99
+            }
100
+        },
101
+        components: {
102
+            // eslint-disable-next-line vue/no-unused-components
103
+            'my-wangeditor': myWangeditor
104
+        },
105
+        created() {
106
+            this.getBuildList()
107
+            this.getTypeList()
108
+            this.form.newsId = this.$route.query.id
109
+            if (this.form.newsId !== undefined) {
110
+                this.getById()
111
+            }
112
+        },
113
+        mounted () {
114
+
115
+        },
116
+        computed: {
117
+            uploadHeaders () {
118
+                const token = localStorage.getItem('x-token') || ''
119
+                return {
120
+                    Authorization: `Bearer ${token}`
121
+                }
122
+            }
123
+        },
124
+        methods: {
125
+            getEdiCentent(value) {
126
+                console.log('富文本值:', value)
127
+                this.form.newsDetail = value
128
+            },
129
+            handleAvatarSuccess(res, file) {
130
+                this.imageUrl = URL.createObjectURL(file.raw);
131
+                // console.log(res)
132
+                this.form.newsImg = res.data
133
+            },
134
+            getTypeList() {
135
+                this.$store.dispatch('news/getTypeList', this.typeForm).then((res) => {
136
+                    this.typeList = res.records
137
+                }).catch(() => {
138
+                    console.log('news/getTypeList err')
139
+                })
140
+            },
141
+            getBuildList() {
142
+                this.$store.dispatch('building/getBuildings', this.buildingForm).then((res) => {
143
+                    this.buildingList = res.records
144
+                }).catch(() => {
145
+                    console.log('building/getBuildings err')
146
+                })
147
+            },
148
+            submitNewsType() {
149
+                if (this.form.newsId === '' || this.form.newsId === undefined) {
150
+                    this.$store.dispatch('news/add', this.form).then((res) => {
151
+                        this.$message.success('操作成功!')
152
+                        this.$router.go(-1)
153
+                        // console.log(res)
154
+                    }).catch(() => {
155
+                        console.log('news/add err')
156
+                    })
157
+
158
+                    return;
159
+                }
160
+
161
+                // 修改
162
+                this.$store.dispatch('news/update', this.form).then((res) => {
163
+                    this.$message.success('操作成功!')
164
+                    this.$router.go(-1)
165
+                    // console.log(res)
166
+                }).catch(() => {
167
+                    console.log('news/update err')
168
+                })
169
+
170
+            },
171
+            cancel() {
172
+                this.$router.go(-1)
173
+            },
174
+            getById() {
175
+                this.$store.dispatch('news/getById', this.form).then((res) => {
176
+                    console.log('news/getById: ', res)
177
+                    this.form.newsName = res.newsName
178
+                    this.form.newsTypeId = res.newsTypeId
179
+                    this.form.newsStatus = res.newsStatus
180
+                    this.form.newsImg = res.newsImg
181
+                    this.imageUrl = res.newsImg
182
+                    this.form.buildingId = res.buildingId
183
+                    this.form.newsDetail = res.newsDetail
184
+                }).catch(() => {
185
+                    console.log('news/getById err')
186
+                })
187
+            }
188
+        }
189
+    }
190
+</script>
191
+
192
+<style scoped>
193
+    .avatar-uploader .el-upload {
194
+        border: 1px dashed #d9d9d9;
195
+        border-radius: 6px;
196
+        cursor: pointer;
197
+        position: relative;
198
+        overflow: hidden;
199
+    }
200
+    .avatar-uploader .el-upload:hover {
201
+        border-color: #409EFF;
202
+    }
203
+    .avatar-uploader-icon {
204
+        font-size: 28px;
205
+        color: #8c939d;
206
+        width: 178px;
207
+        height: 178px;
208
+        line-height: 178px;
209
+        text-align: center;
210
+    }
211
+    .avatar {
212
+        width: 178px;
213
+        height: 178px;
214
+        display: block;
215
+    }
216
+    .form {
217
+        width: 800px;
218
+        margin-left: auto;
219
+        margin-right: auto;
220
+    }
221
+</style>

+ 103
- 12
src/views/news/index.vue Ver fichero

@@ -1,9 +1,9 @@
1 1
 <template>
2 2
     <div id="root">
3 3
         <div class="operation-class">
4
-           <el-button type="primary">新增</el-button>
4
+           <el-button type="primary" @click="ediNewsType">新增</el-button>
5 5
             &nbsp;
6
-            <el-select v-model="form.buildingId" placeholder="项目">
6
+            <el-select v-model="form.buildingId" placeholder="项目" @change="getList">
7 7
                 <el-option
8 8
                         v-for="item in buildingList"
9 9
                         :key="item.buildingId"
@@ -14,30 +14,67 @@
14 14
         </div>
15 15
         <div class="body">
16 16
             <el-table
17
-                    :data="[]"
18
-                    height="250"
17
+                    :data="list"
19 18
                     border
20 19
                     style="width: 100%">
21 20
                 <el-table-column
22
-                        prop="date"
23
-                        label="类型图"
21
+                        prop="newsImg"
22
+                        label="资讯主图"
24 23
                         align="center">
25 24
                     <template slot-scope="scope">
26
-                        <img :src="scope.row.news_type_img" width="50" height="50"/>
25
+                        <img :src="scope.row.newsImg" width="50" height="50"/>
27 26
                     </template>
28 27
                 </el-table-column>
28
+                <el-table-column
29
+                        prop="newsName"
30
+                        label="标题"
31
+                        align="center">
32
+                </el-table-column>
33
+                <el-table-column
34
+                        prop="newsType.newsTypeName"
35
+                        label="资讯类型"
36
+                        align="center">
37
+
38
+                </el-table-column>
39
+                <el-table-column
40
+                        prop="createDate"
41
+                        label="发布时间"
42
+                        align="center">
43
+                </el-table-column>
44
+                <el-table-column
45
+                        prop="pvNum"
46
+                        label="阅读量"
47
+                        align="center">
48
+                </el-table-column>
29 49
                 <el-table-column
30 50
                         prop="newsTypeName"
31
-                        label="名称"
51
+                        label="转发数"
32 52
                         align="center">
33 53
                 </el-table-column>
54
+                <el-table-column
55
+                        prop="favorNum"
56
+                        label="点赞数"
57
+                        align="center">
58
+                </el-table-column>
59
+                <el-table-column
60
+                        prop="saveNum"
61
+                        label="收藏数"
62
+                        align="center">
63
+                </el-table-column>
64
+                <el-table-column
65
+                        prop="newsStatus"
66
+                        label="状态"
67
+                        align="center">
68
+                    <template slot-scope="scope">{{ scope.row.newsStatus === 0 ? '已发布' : '未发布' }}</template>
69
+                </el-table-column>
34 70
                 <el-table-column
35 71
                         prop="newsTypeId"
36 72
                         align="center"
37 73
                         label="操作">
38 74
                     <template slot-scope="scope">
39
-                        <router-link :to="{ name:'newsTypeEdi', query: { id: scope.row.newsTypeId } }">编辑</router-link>
40
-                        <span @click="deleteNews(scope.row.newsTypeId)">删除</span>
75
+                        <router-link :to="{ name:'news-edi', query: { id: scope.row.newsId } }">编辑</router-link>
76
+                        <a href="javascript:void(0);" @click="deleteNews(scope.row.newsId)" class="delClass">删除</a>
77
+                        <a href="javascript:void(0);" @click="releaseNews(scope.row)" class="delClass">{{ scope.row.newsStatus === 0 ? '取消发布' : '发布' }}</a>
41 78
                     </template>
42 79
                 </el-table-column>
43 80
             </el-table>
@@ -64,21 +101,72 @@
64 101
                 buildingList: [],
65 102
                 form: {
66 103
                     buildingId: '',
67
-                    pageNum: 0,
104
+                    pageNum: 1,
68 105
                     pageSize: 10
69 106
                 },
70
-                total: 0
107
+                buildingForm: {
108
+                    pageNum: 1,
109
+                    pageSize: 100
110
+                },
111
+                total: 0,
112
+                list: []
71 113
             }
72 114
         },
115
+        created() {
116
+          this.getList()
117
+          this.getBuildList()
118
+        },
73 119
         methods: {
74 120
             deleteNews(id) {
75 121
                 // 删除操作
122
+                const data = { newsId: id }
123
+                this.$store.dispatch('news/delete', data).then((res) => {
124
+                    this.getList()
125
+                }).catch(() => {
126
+                    console.log('news/delete err');
127
+                })
76 128
             },
77 129
             handleSizeChange(val) {
78 130
                 console.log(`每页 ${val} 条`);
131
+                this.form.pageSize = val
132
+                this.form.pageNum = 1
133
+                this.getList()
79 134
             },
80 135
             handleCurrentChange(val) {
81 136
                 console.log(`当前页: ${val}`);
137
+                this.form.pageNum = val
138
+                this.getList()
139
+            },
140
+            getList() {
141
+              this.$store.dispatch('news/getList', this.form).then((res) => {
142
+                this.list = res.records
143
+                this.form.pageNum = res.current
144
+                this.form.pageSize = res.size
145
+                this.total = res.total
146
+              }).catch(() => {
147
+                  console.log('news/getList err')
148
+              })
149
+            },
150
+            getBuildList() {
151
+                this.$store.dispatch('building/getBuildings', this.buildingForm).then((res) => {
152
+                    this.buildingList = res.records
153
+                }).catch(() => {
154
+                    console.log('building/getBuildings err')
155
+                })
156
+            },
157
+            ediNewsType() {
158
+                this.$router.push({ name: 'news-edi' })
159
+            },
160
+            releaseNews(news) {
161
+                news.newsStatus = news.newsStatus === 0 ? 1 : 0
162
+                // 修改
163
+                this.$store.dispatch('news/update', news).then((res) => {
164
+                    this.$message.success('操作成功!')
165
+                    this.getList()
166
+                    // console.log(res)
167
+                }).catch(() => {
168
+                    console.log('news/updateType err')
169
+                })
82 170
             }
83 171
         }
84 172
     }
@@ -95,4 +183,7 @@
95 183
     display: flex;
96 184
     justify-content: flex-end;
97 185
 }
186
+.delClass {
187
+    padding-left: 10px;
188
+}
98 189
 </style>

+ 2
- 4
src/views/news/type/edi/index.vue Ver fichero

@@ -1,7 +1,7 @@
1 1
 <template>
2 2
     <div id="root">
3 3
         <el-form ref="form" :model="form" label-width="80px" class="form">
4
-            <el-form-item label="项目">
4
+            <el-form-item label="所属项目">
5 5
                 <el-select v-model="form.buildingId" placeholder="请选择">
6 6
                     <el-option
7 7
                             v-for="item in buildingList"
@@ -36,7 +36,7 @@
36 36
 <script>
37 37
     import apis from '../../../../config/api'
38 38
     export default {
39
-        name: "index",
39
+        name: "newsTypeEdiIndex",
40 40
         data() {
41 41
             return {
42 42
                 upFileUrl: apis.file.upload.url,
@@ -83,9 +83,7 @@
83 83
                 })
84 84
             },
85 85
             submitNewsType() {
86
-                console.log(this.form.newsTypeId)
87 86
                 if (this.form.newsTypeId === '' || this.form.newsTypeId === undefined) {
88
-                    console.log('添加')
89 87
                     this.$store.dispatch('news/addType', this.form).then((res) => {
90 88
                         this.$message.success('操作成功!')
91 89
                         this.$router.go(-1)

+ 1
- 1
src/views/news/type/index.vue Ver fichero

@@ -57,7 +57,7 @@
57 57
 
58 58
 <script>
59 59
     export default {
60
-        name: "newsIndex",
60
+        name: "newsTypeIndex",
61 61
         data() {
62 62
             return {
63 63
                 buildingList: [],