Procházet zdrojové kódy

合作伙伴和编辑公司信息

魏超 před 5 roky
rodič
revize
be12aea746

+ 27
- 12
foyo-service/src/main/java/com/huiju/foyo/controller/TdCompanyInfoController.java Zobrazit soubor

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 6
 import com.huiju.foyo.common.BaseController;
7
+import com.huiju.foyo.common.ConstantFoyo;
7 8
 import com.huiju.foyo.common.ResponseBean;
9
+import com.huiju.foyo.model.TaCaseIndexCover;
8 10
 import com.huiju.foyo.model.TdCompanyInfo;
9 11
 import com.huiju.foyo.service.ITdCompanyInfoService;
10 12
 import org.slf4j.Logger;
@@ -18,6 +20,10 @@ import org.springframework.web.bind.annotation.RequestParam;
18 20
 import org.springframework.web.bind.annotation.ResponseBody;
19 21
 import org.springframework.web.bind.annotation.RestController;
20 22
 
23
+import java.time.LocalDateTime;
24
+import java.util.Arrays;
25
+import java.util.List;
26
+
21 27
 /**
22 28
  * <p>
23 29
     * 公司信息  前端控制器
@@ -42,18 +48,12 @@ public class TdCompanyInfoController extends BaseController {
42 48
      * @param pageSize
43 49
      * @return
44 50
      */
45
-    @RequestMapping(value="/tdCompanyInfo",method= RequestMethod.GET)
51
+    @RequestMapping(value="/admin/company/info",method= RequestMethod.GET)
46 52
     public ResponseBean tdCompanyInfoList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
47 53
                                           @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
48 54
         ResponseBean responseBean = new ResponseBean();
49 55
         try {
50
-            //使用分页插件
51
-		    IPage<TdCompanyInfo> pg = new Page<>(pageNum, pageSize);
52
-            QueryWrapper<TdCompanyInfo> queryWrapper = new QueryWrapper<>();
53
-            queryWrapper.orderByDesc("create_time");
54
-
55
-            IPage<TdCompanyInfo> result = iTdCompanyInfoService.page(pg, queryWrapper);
56
-            responseBean.addSuccess(result);
56
+            responseBean.addSuccess(iTdCompanyInfoService.list());
57 57
         }catch (Exception e){
58 58
             e.printStackTrace();
59 59
             logger.error("tdCompanyInfoList -=- {}",e.toString());
@@ -67,14 +67,29 @@ public class TdCompanyInfoController extends BaseController {
67 67
      * @param tdCompanyInfo 实体对象
68 68
      * @return
69 69
      */
70
-    @RequestMapping(value="/tdCompanyInfo",method= RequestMethod.POST)
70
+    @RequestMapping(value="/admin/company/add",method= RequestMethod.POST)
71 71
     public ResponseBean tdCompanyInfoAdd(@RequestBody TdCompanyInfo tdCompanyInfo){
72 72
         ResponseBean responseBean = new ResponseBean();
73 73
         try {
74
-            if (iTdCompanyInfoService.save(tdCompanyInfo)){
75
-                responseBean.addSuccess(tdCompanyInfo);
74
+
75
+            List<TdCompanyInfo> tdCompanyInfoList = iTdCompanyInfoService.list();
76
+            if (tdCompanyInfoList.size() > 0){
77
+                TdCompanyInfo tdCompanyInfoUpdate = tdCompanyInfoList.get(0);
78
+                tdCompanyInfoUpdate.setUpdateTime(LocalDateTime.now());
79
+                tdCompanyInfoUpdate.setCompanyImg(tdCompanyInfo.getCompanyImg());
80
+                if (iTdCompanyInfoService.updateById(tdCompanyInfoUpdate)){
81
+                    responseBean.addSuccess(tdCompanyInfoUpdate);
82
+                }else {
83
+                    responseBean.addError("fail");
84
+                }
76 85
             }else {
77
-                responseBean.addError("fail");
86
+                tdCompanyInfo.setCreateBy(ConstantFoyo.USER_ADMIN);
87
+                tdCompanyInfo.setCreateTime(LocalDateTime.now());
88
+                if (iTdCompanyInfoService.save(tdCompanyInfo)){
89
+                    responseBean.addSuccess(tdCompanyInfo);
90
+                }else {
91
+                    responseBean.addError("fail");
92
+                }
78 93
             }
79 94
         }catch (Exception e){
80 95
             e.printStackTrace();

+ 15
- 7
foyo-service/src/main/java/com/huiju/foyo/controller/TdPartnerController.java Zobrazit soubor

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 4
 import com.baomidou.mybatisplus.core.metadata.IPage;
5 5
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 6
 import com.huiju.foyo.common.BaseController;
7
+import com.huiju.foyo.common.ConstantFoyo;
7 8
 import com.huiju.foyo.common.ResponseBean;
8 9
 import com.huiju.foyo.model.TdPartner;
9 10
 import com.huiju.foyo.service.ITdPartnerService;
@@ -18,6 +19,10 @@ import org.springframework.web.bind.annotation.RequestParam;
18 19
 import org.springframework.web.bind.annotation.ResponseBody;
19 20
 import org.springframework.web.bind.annotation.RestController;
20 21
 
22
+import java.time.LocalDateTime;
23
+import java.util.Arrays;
24
+import java.util.List;
25
+
21 26
 /**
22 27
  * <p>
23 28
     * 合作伙伴  前端控制器
@@ -42,7 +47,7 @@ public class TdPartnerController extends BaseController {
42 47
      * @param pageSize
43 48
      * @return
44 49
      */
45
-    @RequestMapping(value="/tdPartner",method= RequestMethod.GET)
50
+    @RequestMapping(value="/admin/partner/list",method= RequestMethod.GET)
46 51
     public ResponseBean tdPartnerList(@RequestParam(value ="pageNum",defaultValue = "1") Integer pageNum,
47 52
                                       @RequestParam(value ="pageSize",defaultValue = "10") Integer pageSize){
48 53
         ResponseBean responseBean = new ResponseBean();
@@ -67,10 +72,13 @@ public class TdPartnerController extends BaseController {
67 72
      * @param tdPartner 实体对象
68 73
      * @return
69 74
      */
70
-    @RequestMapping(value="/tdPartner",method= RequestMethod.POST)
75
+    @RequestMapping(value="/admin/partner/add",method= RequestMethod.POST)
71 76
     public ResponseBean tdPartnerAdd(@RequestBody TdPartner tdPartner){
72 77
         ResponseBean responseBean = new ResponseBean();
73 78
         try {
79
+            tdPartner.setCreateBy(ConstantFoyo.USER_ADMIN);
80
+            tdPartner.setStatus(ConstantFoyo.STATUS_EFFECTIVE);
81
+            tdPartner.setCreateTime(LocalDateTime.now());
74 82
             if (iTdPartnerService.save(tdPartner)){
75 83
                 responseBean.addSuccess(tdPartner);
76 84
             }else {
@@ -85,15 +93,15 @@ public class TdPartnerController extends BaseController {
85 93
     }
86 94
 
87 95
     /**
88
-     * 根据id删除对象
89
-     * @param id  实体ID
96
+     * 根据id批量删除对象
90 97
      */
91 98
     @ResponseBody
92
-    @RequestMapping(value="/tdPartner/{id}", method= RequestMethod.DELETE)
93
-    public ResponseBean tdPartnerDelete(@PathVariable Integer id){
99
+    @RequestMapping(value="/admin/partner/delete", method= RequestMethod.DELETE)
100
+    public ResponseBean tdPartnerDelete(@RequestBody String[] ids){
94 101
         ResponseBean responseBean = new ResponseBean();
95 102
         try {
96
-            if(iTdPartnerService.removeById(id)){
103
+            List<String> idList = Arrays.asList(ids);
104
+            if(iTdPartnerService.removeByIds(idList)){
97 105
                 responseBean.addSuccess("success");
98 106
             }else {
99 107
                 responseBean.addError("fail");

+ 17
- 0
vue-element-admin/src/api/company.js Zobrazit soubor

@@ -0,0 +1,17 @@
1
+import request from '@/utils/request'
2
+
3
+export function companyInfo(query) {
4
+  return request({
5
+    url: '/company/info',
6
+    method: 'get',
7
+    params: query
8
+  })
9
+}
10
+
11
+export function addCompanyInfo(data) {
12
+  return request({
13
+    url: '/company/add',
14
+    method: 'post',
15
+    data
16
+  })
17
+}

+ 25
- 0
vue-element-admin/src/api/partner.js Zobrazit soubor

@@ -0,0 +1,25 @@
1
+import request from '@/utils/request'
2
+
3
+export function partnerlList(query) {
4
+  return request({
5
+    url: '/partner/list',
6
+    method: 'get',
7
+    params: query
8
+  })
9
+}
10
+
11
+export function addPartner(data) {
12
+  return request({
13
+    url: '/partner/add',
14
+    method: 'post',
15
+    data
16
+  })
17
+}
18
+
19
+export function deletePartnerBatch(data) {
20
+  return request({
21
+    url: '/partner/delete',
22
+    method: 'delete',
23
+    data
24
+  })
25
+}

+ 29
- 0
vue-element-admin/src/router/index.js Zobrazit soubor

@@ -161,6 +161,35 @@ export const constantRouterMap = [
161 161
         name: 'servicecase-add',
162 162
         hidden: true,
163 163
         meta: { title: '新增案例类型', icon: 'table' }
164
+      },
165
+      {
166
+        path: '/company/index',
167
+        component: () => import('@/views/company/edit'),
168
+        name: 'company-index',
169
+        meta: { title: '编辑公司信息', icon: 'table' }
170
+      }
171
+    ]
172
+  },
173
+  {
174
+    path: '/partner',
175
+    component: Layout,
176
+    redirect: '/conmmunity/download',
177
+    name: 'partner',
178
+    alwaysShow: true,
179
+    meta: { title: '合作伙伴管理', icon: 'zip' },
180
+    children: [
181
+      {
182
+        path: 'carousel',
183
+        component: () => import('@/views/partner/index'),
184
+        name: 'partner-index',
185
+        meta: { title: '合作伙伴列表', icon: 'table' }
186
+      },
187
+      {
188
+        path: '/partner/edit',
189
+        component: () => import('@/views/partner/add'),
190
+        name: 'partner-edit',
191
+        hidden: true,
192
+        meta: { title: '新增合作伙伴', icon: 'table' }
164 193
       }
165 194
     ]
166 195
   }

+ 5
- 1
vue-element-admin/src/store/index.js Zobrazit soubor

@@ -9,6 +9,8 @@ import getters from './getters'
9 9
 import service from './modules/service'
10 10
 import servicecase from './modules/case'
11 11
 import carousel from './modules/carousel'
12
+import partner from './modules/partner'
13
+import company from './modules/company'
12 14
 
13 15
 Vue.use(Vuex)
14 16
 
@@ -21,7 +23,9 @@ const store = new Vuex.Store({
21 23
     user,
22 24
     service,
23 25
     servicecase,
24
-    carousel
26
+    carousel,
27
+    partner,
28
+    company
25 29
   },
26 30
   getters
27 31
 })

+ 28
- 0
vue-element-admin/src/store/modules/company.js Zobrazit soubor

@@ -0,0 +1,28 @@
1
+import { companyInfo, addCompanyInfo } from '@/api/company'
2
+
3
+const company = {
4
+  namespaced: true,
5
+
6
+  actions: {
7
+    getCompanyInfo({ commit, state }, data) {
8
+      return new Promise((resolve, reject) => {
9
+        companyInfo(data).then(response => {
10
+          resolve(response)
11
+        }).catch(error => {
12
+          reject(error)
13
+        })
14
+      })
15
+    },
16
+    createCompanyInfo({ commit, state }, data) {
17
+      return new Promise((resolve, reject) => {
18
+        addCompanyInfo(data).then(response => {
19
+          resolve(response)
20
+        }).catch(error => {
21
+          reject(error)
22
+        })
23
+      })
24
+    }
25
+  }
26
+}
27
+
28
+export default company

+ 37
- 0
vue-element-admin/src/store/modules/partner.js Zobrazit soubor

@@ -0,0 +1,37 @@
1
+import { partnerlList, addPartner, deletePartnerBatch } from '@/api/partner'
2
+
3
+const partner = {
4
+  namespaced: true,
5
+
6
+  actions: {
7
+    getPartnerList({ commit, state }, data) {
8
+      return new Promise((resolve, reject) => {
9
+        partnerlList(data).then(response => {
10
+          resolve(response)
11
+        }).catch(error => {
12
+          reject(error)
13
+        })
14
+      })
15
+    },
16
+    createPartner({ commit, state }, data) {
17
+      return new Promise((resolve, reject) => {
18
+        addPartner(data).then(response => {
19
+          resolve(response)
20
+        }).catch(error => {
21
+          reject(error)
22
+        })
23
+      })
24
+    },
25
+    deletePartner({ commit, state }, data) { // 删除合作伙伴
26
+      return new Promise((resolve, reject) => {
27
+        deletePartnerBatch(data).then(response => {
28
+          resolve(response)
29
+        }).catch(error => {
30
+          reject(error)
31
+        })
32
+      })
33
+    }
34
+  }
35
+}
36
+
37
+export default partner

+ 233
- 0
vue-element-admin/src/views/company/edit.vue Zobrazit soubor

@@ -0,0 +1,233 @@
1
+<template>
2
+  <div id="app" class="app-container">
3
+    <el-form ref="form" :model="form">
4
+      <el-form-item :label-width="formLabelWidth" label="公司信息封面图">
5
+        <el-upload
6
+          :action= "uploadImgUrl"
7
+          :show-file-list="false"
8
+          :on-success="handleAvatarSuccess"
9
+          class="avatar-uploader"
10
+          name="uploadFiles">
11
+          <img v-if="imageUrl" :src="imageUrl" class="avatar">
12
+          <i v-else class="el-icon-plus avatar-uploader-icon"/>
13
+        </el-upload>
14
+      </el-form-item>
15
+    </el-form>
16
+    <div slot="footer" class="dialog-footer">
17
+      <el-button type="primary" @click="dialogForm('1')">确 定</el-button>
18
+    </div>
19
+  </div>
20
+</template>
21
+
22
+<script>
23
+// import { updateArticle, createBanner } from '@/api/banner' // getBanner
24
+import waves from '@/directive/waves' // Waves directive
25
+import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
26
+const calendarTypeOptions = [
27
+  { key: 'CN', display_name: 'China' },
28
+  { key: 'US', display_name: 'USA' },
29
+  { key: 'JP', display_name: 'Japan' },
30
+  { key: 'EU', display_name: 'Eurozone' }
31
+]
32
+// arr to obj ,such as { CN : "China", US : "USA" }
33
+const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
34
+  acc[cur.key] = cur.display_name
35
+  return acc
36
+}, {})
37
+export default {
38
+  name: 'UpdateBanner',
39
+  components: { Pagination },
40
+  directives: { waves },
41
+  filters: {
42
+    statusFilter(status) {
43
+      const statusMap = {
44
+        published: 'success',
45
+        draft: 'info',
46
+        deleted: 'danger'
47
+      }
48
+      return statusMap[status]
49
+    },
50
+    typeFilter(type) {
51
+      return calendarTypeKeyValue[type]
52
+    }
53
+  },
54
+  data() {
55
+    return {
56
+      tableKey: 0,
57
+      list: null,
58
+      total: 0,
59
+      listLoading: true,
60
+      imageUrl: '', // 图片预览
61
+      importanceOptions: [1, 2, 3],
62
+      calendarTypeOptions,
63
+      communityQuery: {
64
+        pageNum: 1,
65
+        pageSize: 300,
66
+        communityId: undefined,
67
+        communityName: undefined,
68
+        provinceId: undefined,
69
+        cityId: undefined,
70
+        districtId: undefined
71
+      },
72
+      listQuery: [],
73
+      form: {
74
+        id: '',
75
+        sort: '',
76
+        companyImg: ''
77
+      },
78
+      uploadImgUrl: process.env.BASE_API + '/uploadimage',
79
+      dialogStatus: '',
80
+      downloadLoading: false,
81
+      formLabelWidth: '120px',
82
+      showContentVisible: false,
83
+      showURLVisible: true,
84
+      bannerPositionArr: [
85
+        { id: 1, value: '首页banner' },
86
+        { id: 2, value: '服务banner' }
87
+      ],
88
+      dynamicTags: [],
89
+      inputVisible: false,
90
+      inputValue: ''
91
+    }
92
+  },
93
+  computed: {
94
+  },
95
+  created() {
96
+    this.getCompanyImg()
97
+  },
98
+  updated() {
99
+  },
100
+  methods: {
101
+    handleAvatarSuccess(res, file) { // 上传成功回调
102
+      this.imageUrl = URL.createObjectURL(file.raw)
103
+      this.form.companyImg = res.data[0]
104
+    },
105
+    dialogAddForm() {
106
+      this.dialogFormVisible = true
107
+      this.form.companyImg = ''
108
+    },
109
+    dialogForm(isVaule) {
110
+      if (isVaule === '0') {
111
+        this.$router.push({ name: 'service-index' })
112
+      } else {
113
+        this.createData()
114
+      }
115
+    },
116
+    showContent() {
117
+      if (this.form.bannerType === '1') {
118
+        this.showContentVisible = false
119
+        this.showURLVisible = true
120
+      } else {
121
+        this.showContentVisible = true
122
+        this.showURLVisible = false
123
+      }
124
+    },
125
+    createData() {
126
+      this.$refs['form'].validate((valid) => {
127
+        if (valid) {
128
+          this.form.labelList = this.dynamicTags
129
+          this.$store.dispatch('company/createCompanyInfo', this.form).then((res) => {
130
+            if (res.data.code === '0') {
131
+              this.$message({
132
+                message: res.data.message,
133
+                type: 'success'
134
+              })
135
+              this.$router.push({ name: 'company-index' })
136
+            } else {
137
+              this.$message({
138
+                message: res.data.message,
139
+                type: 'warning'
140
+              })
141
+            }
142
+          })
143
+        }
144
+      })
145
+    },
146
+    getCompanyImg() {
147
+      this.$store.dispatch('company/getCompanyInfo', this.form).then((res) => {
148
+        if (res.data.code === '0') {
149
+          console.log(res.data.data)
150
+          console.log(res.data.data.length)
151
+          if (res.data.data.length > 0) {
152
+            this.imageUrl = res.data.data[0].companyImg
153
+            this.form.companyImg = res.data.data[0].companyImg
154
+          }
155
+        } else {
156
+          this.$message({
157
+            message: res.data.message,
158
+            type: 'warning'
159
+          })
160
+        }
161
+      })
162
+    },
163
+    handleClose(tag) {
164
+      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1)
165
+    },
166
+    showInput() {
167
+      this.inputVisible = true
168
+      this.$nextTick(_ => {
169
+        this.$refs.saveTagInput.$refs.input.focus()
170
+      })
171
+    },
172
+    handleInputConfirm() {
173
+      const inputValue = this.inputValue
174
+      if (inputValue) {
175
+        this.dynamicTags.push(inputValue)
176
+      }
177
+      this.inputVisible = false
178
+      this.inputValue = ''
179
+    }
180
+  }
181
+}
182
+</script>
183
+
184
+<style scoped>
185
+.app-container {
186
+  width: 50%;
187
+  margin: auto;
188
+}
189
+.dialog-footer {
190
+  text-align: center;
191
+}
192
+.el-tag + .el-tag {
193
+    margin-left: 10px;
194
+  }
195
+  .button-new-tag {
196
+    margin-left: 10px;
197
+    height: 32px;
198
+    line-height: 30px;
199
+    padding-top: 0;
200
+    padding-bottom: 0;
201
+  }
202
+  .input-new-tag {
203
+    width: 90px;
204
+    margin-left: 10px;
205
+    vertical-align: bottom;
206
+  }
207
+</style>
208
+<style>
209
+.avatar-uploader .el-upload {
210
+  border: 1px dashed #d9d9d9;
211
+  border-radius: 6px;
212
+  cursor: pointer;
213
+  position: relative;
214
+  overflow: hidden;
215
+}
216
+.avatar-uploader .el-upload:hover {
217
+  border-color: #409EFF;
218
+}
219
+.avatar-uploader-icon {
220
+  font-size: 28px;
221
+  color: #8c939d;
222
+  width: 178px;
223
+  height: 178px;
224
+  line-height: 178px;
225
+  text-align: center;
226
+}
227
+.avatar {
228
+  width: 178px;
229
+  height: 178px;
230
+  display: block;
231
+}
232
+</style>
233
+

+ 190
- 0
vue-element-admin/src/views/partner/add.vue Zobrazit soubor

@@ -0,0 +1,190 @@
1
+<template>
2
+  <div id="app" class="app-container">
3
+    <el-form ref="form" :model="form">
4
+      <el-form-item :label-width="formLabelWidth" label="合作企业名称">
5
+        <el-input v-model="form.name"/>
6
+      </el-form-item>
7
+      <el-form-item :label-width="formLabelWidth" label="排序">
8
+        <el-input v-model="form.sort"/>
9
+      </el-form-item>
10
+      <el-form-item :label-width="formLabelWidth" label="合作企业Logo">
11
+        <el-upload
12
+          :action= "uploadImgUrl"
13
+          :show-file-list="false"
14
+          :on-success="handleAvatarSuccess"
15
+          class="avatar-uploader"
16
+          name="uploadFiles">
17
+          <img v-if="logoImg" :src="logoImg" class="avatar">
18
+          <i v-else class="el-icon-plus avatar-uploader-icon"/>
19
+        </el-upload>
20
+      </el-form-item>
21
+    </el-form>
22
+    <div slot="footer" class="dialog-footer">
23
+      <el-button @click="dialogForm('0')">取 消</el-button>
24
+      <el-button type="primary" @click="dialogForm('1')">确 定</el-button>
25
+    </div>
26
+  </div>
27
+</template>
28
+
29
+<script>
30
+// import { updateArticle, createBanner } from '@/api/banner' // getBanner
31
+import waves from '@/directive/waves' // Waves directive
32
+import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
33
+const calendarTypeOptions = [
34
+  { key: 'CN', display_name: 'China' },
35
+  { key: 'US', display_name: 'USA' },
36
+  { key: 'JP', display_name: 'Japan' },
37
+  { key: 'EU', display_name: 'Eurozone' }
38
+]
39
+// arr to obj ,such as { CN : "China", US : "USA" }
40
+const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
41
+  acc[cur.key] = cur.display_name
42
+  return acc
43
+}, {})
44
+export default {
45
+  name: 'UpdateBanner',
46
+  components: { Pagination },
47
+  directives: { waves },
48
+  filters: {
49
+    statusFilter(status) {
50
+      const statusMap = {
51
+        published: 'success',
52
+        draft: 'info',
53
+        deleted: 'danger'
54
+      }
55
+      return statusMap[status]
56
+    },
57
+    typeFilter(type) {
58
+      return calendarTypeKeyValue[type]
59
+    }
60
+  },
61
+  data() {
62
+    return {
63
+      tableKey: 0,
64
+      list: null,
65
+      total: 0,
66
+      listLoading: true,
67
+      logoImg: '', // 图片预览
68
+      importanceOptions: [1, 2, 3],
69
+      calendarTypeOptions,
70
+      communityQuery: {
71
+        pageNum: 1,
72
+        pageSize: 300,
73
+        communityId: undefined,
74
+        communityName: undefined,
75
+        provinceId: undefined,
76
+        cityId: undefined,
77
+        districtId: undefined
78
+      },
79
+      listQuery: [],
80
+      form: {
81
+        id: '',
82
+        serviceName: '',
83
+        sort: '',
84
+        logoImg: ''
85
+      },
86
+      uploadImgUrl: process.env.BASE_API + '/uploadimage',
87
+      dialogStatus: '',
88
+      downloadLoading: false,
89
+      formLabelWidth: '120px',
90
+      showContentVisible: false,
91
+      showURLVisible: true,
92
+      bannerPositionArr: [
93
+        { id: 1, value: '首页banner' },
94
+        { id: 2, value: '服务banner' }
95
+      ]
96
+    }
97
+  },
98
+  computed: {
99
+  },
100
+  created() {
101
+    this.listQuery = this.$route.params.listQuery
102
+  },
103
+  updated() {
104
+  },
105
+  methods: {
106
+    handleAvatarSuccess(res, file) { // 上传成功回调
107
+      this.logoImg = URL.createObjectURL(file.raw)
108
+      this.form.logoImg = res.data[0]
109
+    },
110
+    dialogAddForm() {
111
+      this.dialogFormVisible = true
112
+      this.form.name = ''
113
+      this.form.sort = ''
114
+      this.form.logoImg = ''
115
+    },
116
+    dialogForm(isVaule) {
117
+      if (isVaule === '0') {
118
+        this.$router.push({ name: 'partner-index' })
119
+      } else {
120
+        this.createData()
121
+      }
122
+    },
123
+    showContent() {
124
+      if (this.form.bannerType === '1') {
125
+        this.showContentVisible = false
126
+        this.showURLVisible = true
127
+      } else {
128
+        this.showContentVisible = true
129
+        this.showURLVisible = false
130
+      }
131
+    },
132
+    createData() {
133
+      this.$refs['form'].validate((valid) => {
134
+        if (valid) {
135
+          this.$store.dispatch('partner/createPartner', this.form).then((res) => {
136
+            if (res.data.code === '0') {
137
+              this.$message({
138
+                message: res.data.message,
139
+                type: 'success'
140
+              })
141
+              this.$router.push({ name: 'partner-index' })
142
+            } else {
143
+              this.$message({
144
+                message: res.data.message,
145
+                type: 'warning'
146
+              })
147
+            }
148
+          })
149
+        }
150
+      })
151
+    }
152
+  }
153
+}
154
+</script>
155
+
156
+<style scoped>
157
+.app-container {
158
+  width: 50%;
159
+  margin: auto;
160
+}
161
+.dialog-footer {
162
+  text-align: center;
163
+}
164
+</style>
165
+<style>
166
+.avatar-uploader .el-upload {
167
+  border: 1px dashed #d9d9d9;
168
+  border-radius: 6px;
169
+  cursor: pointer;
170
+  position: relative;
171
+  overflow: hidden;
172
+}
173
+.avatar-uploader .el-upload:hover {
174
+  border-color: #409EFF;
175
+}
176
+.avatar-uploader-icon {
177
+  font-size: 28px;
178
+  color: #8c939d;
179
+  width: 178px;
180
+  height: 178px;
181
+  line-height: 178px;
182
+  text-align: center;
183
+}
184
+.avatar {
185
+  width: 178px;
186
+  height: 178px;
187
+  display: block;
188
+}
189
+</style>
190
+

+ 287
- 0
vue-element-admin/src/views/partner/index.vue Zobrazit soubor

@@ -0,0 +1,287 @@
1
+<template>
2
+  <div class="root">
3
+    <el-form :inline="true" :model="listQuery" class="form-listQuery">
4
+      <!-- <el-form-item label="业务名称">
5
+        <el-input v-model="listQuery.serviceName" placeholder="业务名称" />
6
+      </el-form-item>
7
+      <el-form-item>
8
+        <el-button type="info" @click="clearListQuery">清空</el-button>
9
+        <el-button type="primary" @click="handleFilter">查询</el-button>
10
+      </el-form-item> -->
11
+    </el-form>
12
+    <div class="operation">
13
+      <div>
14
+        <el-button type="primary" @click="addPartner">新增合作伙伴</el-button>
15
+        <el-button type="danger" @click="deletePartner">删除</el-button>
16
+      </div>
17
+    </div>
18
+    <el-table
19
+      v-loading="listLoading"
20
+      ref="multipleTable"
21
+      :data="partnerList"
22
+      border
23
+      tooltip-effect="dark"
24
+      style="width: 100%; margin-top: 20px;"
25
+      @selection-change="handleSelectionChange">
26
+      <el-table-column type="selection" width="55" align="center"/>
27
+      <el-table-column label="合作企业名称" align="center">
28
+        <template slot-scope="scope">
29
+          <span>{{ scope.row.name }}</span>
30
+        </template>
31
+      </el-table-column>
32
+      <el-table-column label="合作企业Logo" align="center">
33
+        <template slot-scope="scope">
34
+          <img v-if="scope.row.logoImg !== ''" :src="scope.row.logoImg" width="50" height="50">
35
+        </template>
36
+      </el-table-column>
37
+      <el-table-column label="排序" align="center">
38
+        <template slot-scope="scope">
39
+          <span>{{ scope.row.sort }}</span>
40
+        </template>
41
+      </el-table-column>
42
+      <el-table-column label="创建时间" align="center">
43
+        <template slot-scope="scope">
44
+          <span>{{ formatDate(scope.row.createTime) }}</span>
45
+        </template>
46
+      </el-table-column>
47
+    </el-table>
48
+    <div class="block">
49
+      <el-pagination
50
+        :current-page.sync="listQuery.pageNum"
51
+        :page-sizes="[10, 20, 50, 100]"
52
+        :page-size.sync="listQuery.pageSize"
53
+        :total="total"
54
+        layout="total, sizes, prev, pager, next, jumper"
55
+        @size-change="handleSizeChange"
56
+        @current-change="handleCurrentChange"/>
57
+    </div>
58
+  </div>
59
+</template>
60
+
61
+<script>
62
+import waves from '@/directive/waves' // Waves directive
63
+import { parseTime } from '@/utils'
64
+
65
+export default {
66
+  directives: { waves },
67
+  data() {
68
+    var _self = this
69
+    return {
70
+      events: {
71
+        click: (e) => {
72
+          // _self.postData.Coordinate = e.lnglat.lat + ',' + e.lnglat.lng
73
+          _self.detail.longitude = e.lnglat.lng
74
+          _self.detail.latitude = e.lnglat.lat
75
+        }
76
+      },
77
+      markers: [],
78
+      searchOption: {
79
+        city: '南京',
80
+        citylimit: false
81
+      },
82
+      partnerList: [],
83
+      total: 0,
84
+      listLoading: true,
85
+      listQuery: {
86
+        pageNum: 1,
87
+        pageSize: 20
88
+      },
89
+      ids: [], // id集合
90
+      tableKey: 0,
91
+      downloadLoading: false
92
+    }
93
+  },
94
+  created() {
95
+    this.getList()
96
+  },
97
+  methods: {
98
+    setCurrent(item) {
99
+      this.setDetail({ ...item })
100
+    },
101
+    getList() {
102
+      this.listLoading = true
103
+      this.$store.dispatch('partner/getPartnerList', this.listQuery).then((res) => {
104
+        console.log(res)
105
+        this.partnerList = res.data.data.records
106
+        this.total = res.data.data.total
107
+        this.listLoading = false
108
+      }).catch(() => {
109
+        this.loading = false
110
+        console.log('get list error')
111
+      })
112
+    },
113
+    clearListQuery() {
114
+      this.listQuery.pageNum = 1
115
+      this.listQuery.pageSize = 20
116
+      this.listQuery.billId = undefined
117
+      this.listQuery.billName = undefined
118
+      this.listQuery.billExplain = undefined
119
+      this.getList()
120
+    },
121
+    getInfo(billId, billStatus) {
122
+      if (billStatus === '2') {
123
+        this.$router.push({ name: 'bill-edi', query: { id: billId }})
124
+      } else {
125
+        this.$router.push({ name: 'bill-info', query: { id: billId }})
126
+      }
127
+    },
128
+    addPartner() {
129
+      this.$router.push({ name: 'partner-add' })
130
+    },
131
+    handleFilter() {
132
+      this.listQuery.pageNum = 1
133
+      this.getList()
134
+    },
135
+    handleModifyStatus(row, status) {
136
+      this.$message({
137
+        message: '操作成功',
138
+        type: 'success'
139
+      })
140
+      row.status = status
141
+    },
142
+    sortChange(data) {
143
+      const { prop, order } = data
144
+      if (prop === 'id') {
145
+        this.sortByID(order)
146
+      }
147
+    },
148
+    handleSizeChange(val) {
149
+      // console.log(`每页 ${val} 条`);
150
+      this.listQuery.pageSize = val
151
+      this.getList()
152
+    },
153
+    handleCurrentChange(val) {
154
+      // console.log(`当前页: ${val}`);
155
+      this.listQuery.pageNum = val
156
+      this.getList()
157
+    },
158
+    sortByID(order) {
159
+      if (order === 'ascending') {
160
+        this.listQuery.sort = '+id'
161
+      } else {
162
+        this.listQuery.sort = '-id'
163
+      }
164
+      this.handleFilter()
165
+    },
166
+    handleUpdate(row) {
167
+      this.setCurrent(row)
168
+      this.dialogStatus = 'update'
169
+      this.dialogFormVisible = true
170
+      this.$nextTick(() => {
171
+        this.$refs['dataForm'].clearValidate()
172
+      })
173
+      this.getEditCityList()
174
+      this.getEditDistrictList()
175
+    },
176
+    handleLook(id) {
177
+      this.$router.push({ name: 'transaction-info', params: { id: id }})
178
+    },
179
+    handleCreate() {
180
+      this.resetDetail()
181
+      this.dialogStatus = 'create'
182
+      this.dialogFormVisible = true
183
+      this.$nextTick(() => {
184
+        this.$refs['dataForm'].clearValidate()
185
+      })
186
+    },
187
+    handleDelete(row) {
188
+      this.$notify({
189
+        title: '成功',
190
+        message: '删除成功',
191
+        type: 'success',
192
+        duration: 2000
193
+      })
194
+      const index = this.list.indexOf(row)
195
+      this.list.splice(index, 1)
196
+    },
197
+    handleDownload() {
198
+      this.downloadLoading = true
199
+      import('@/vendor/Export2Excel').then(excel => {
200
+        const tHeader = ['timestamp', 'title', 'type', 'importance', 'status']
201
+        const filterVal = ['timestamp', 'title', 'type', 'importance', 'status']
202
+        const data = this.formatJson(filterVal, this.list)
203
+        excel.export_json_to_excel({
204
+          header: tHeader,
205
+          data,
206
+          filename: 'table-list'
207
+        })
208
+        this.downloadLoading = false
209
+      })
210
+    },
211
+    padDate(value) {
212
+      value = value < 10 ? '0' + value : value
213
+      return value
214
+    },
215
+    formatDate(val) {
216
+      if (val === null) {
217
+        return ''
218
+      }
219
+      var value = new Date(val)
220
+      var year = value.getFullYear()
221
+      var month = this.padDate(value.getMonth() + 1)
222
+      var day = this.padDate(value.getDate())
223
+      var hour = this.padDate(value.getHours())
224
+      var minutes = this.padDate(value.getMinutes())
225
+      var seconds = this.padDate(value.getSeconds())
226
+      return year + '-' + month + '-' + day + ' ' + hour + ':' + minutes + ':' + seconds
227
+    },
228
+    formatJson(filterVal, jsonData) {
229
+      return jsonData.map(v => filterVal.map(j => {
230
+        if (j === 'timestamp') {
231
+          return parseTime(v[j])
232
+        } else {
233
+          return v[j]
234
+        }
235
+      }))
236
+    },
237
+    deletePartner() { // 删除
238
+      if (this.ids.length <= 0) {
239
+        this.$message.error('请至少选择一项')
240
+        return
241
+      }
242
+      this.$store.dispatch('partner/deletePartner', this.ids).then(res => {
243
+        const resCode = res.data.code
244
+        if (resCode === '0') {
245
+          this.$message.success('删除成功')
246
+          this.getList()
247
+          return
248
+        }
249
+        this.$message.error(res.data.message)
250
+      }).catch(() => {
251
+        console.log('DeleteBillBeach error')
252
+      })
253
+    },
254
+    handleSelectionChange(val) { // 选择
255
+      console.log(val)
256
+      this.ids = []
257
+
258
+      val.map((item, index) => {
259
+        console.log(item, index)
260
+        this.ids.push(item.id)
261
+      })
262
+    }
263
+  }
264
+}
265
+</script>
266
+
267
+<style scoped>
268
+.root{
269
+  display: flex;
270
+  flex-flow: column;
271
+}
272
+.form-listQuery{
273
+  margin-top: 20px;
274
+  margin-left: 30px;
275
+}
276
+.operation{
277
+  display: flex;
278
+  justify-content: space-between;
279
+  margin-left: 20px;
280
+  margin-right: 20px;
281
+}
282
+.block{
283
+  display: flex;
284
+  justify-content: flex-end;
285
+  margin-top: 10px;
286
+}
287
+</style>