Przeglądaj źródła

Merge branch 'dev' of http://222.90.211.174:3000/suf/domestic--e-commerc-b into dev

sufan 2 tygodni temu
rodzic
commit
87d9bd708c

+ 28 - 0
src/api/storeManage/storeEntryList.js

@@ -0,0 +1,28 @@
+import request from '@/utils/request'
+
+// 店铺准入列表
+export function getStoreEntryList(params) {
+  return request({
+    url: '/shop/zrList',
+    method: 'get',
+    params
+  })
+}
+
+// 店铺准入详情
+export function getStoreEntryDetail(params) {
+  return request({
+    url: '/shopZrRecord/list',
+    method: 'get',
+    params
+  })
+}
+
+// 店铺准入记录
+export function getStoreEntryRecords(params) {
+  return request({
+    url: '/shopZrRecord/records',
+    method: 'get',
+    params
+  })
+}

+ 10 - 0
src/api/storeManage/storeList.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 店铺列表
+export function getStoreList(params) {
+  return request({
+    url: '/shop/b/list',
+    method: 'get',
+    params
+  })
+}

+ 10 - 0
src/api/storeManage/storeStatistics.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 店铺数据统计
+export function getStoreStatisticList(params) {
+  return request({
+    url: '/shopOperationData/b/list',
+    method: 'get',
+    params
+  })
+}

+ 2 - 0
src/router/index.js

@@ -5,6 +5,7 @@ import userManagement from './moudules/userManage'
 import systemManage from './moudules/systemManage'
 import enterpriseManage from './moudules/enterpriseManage'
 import capitalManage from './moudules/capitalManage'
+import storeManage from './moudules/storeManage'
 import monitorManage from './moudules/monitorManage'
 
 Vue.use(Router)
@@ -47,6 +48,7 @@ export const constantRoutes = [
       meta: { title: '首页', icon: 'home' }
     }]
   },
+  storeManage,
   enterpriseManage,
   capitalManage,
   userManagement,

+ 56 - 0
src/router/moudules/storeManage.js

@@ -0,0 +1,56 @@
+
+/* Layout */
+import Layout from '@/layout'
+
+export default {
+  path: '/storeManage',
+  component: Layout,
+  redirect: '/storeList',
+  name: 'EnterpriseManage', // StoreManage
+  alwaysShow: true,
+  meta: {
+    title: '店铺管理',
+    icon: 'enterpriseManagement'
+  },
+  children: [
+    {
+      path: '/storeList',
+      name: 'OrgManage', // StoreList
+      component: () => import('@/views/storeManage/storeList/index.vue'),
+      meta: { title: '店铺列表' },
+      hidden: false
+    },
+    {
+      path: '/storeEntryList',
+      name: 'OrgManage', // StoreEntryList
+      component: () => import('@/views/storeManage/storeEntryList/index.vue'),
+      meta: { title: '店铺准入列表' },
+      hidden: false,
+      children: [
+        {
+          path: '/storeEntryDetail',
+          name: 'StoreEntryDetail',
+          component: () => import('@/views/storeManage/storeEntryList/entryDetail.vue'),
+          meta: { title: '准入详情', activeMenu: '/storeEntryList' },
+          hidden: true,
+          children: [
+            {
+              path: '/storeEntryRecord',
+              name: 'StoreEntryRecord',
+              component: () => import('@/views/storeManage/storeEntryList/entryRecords.vue'),
+              meta: { title: '准入记录', activeMenu: '/storeEntryList' },
+              hidden: true,
+            }
+          ]
+        }
+      ]
+    },
+    {
+      path: '/storeStatistics',
+      name: 'OrgManage', // StoreStatistics
+      component: () => import('@/views/storeManage/storeStatistics/index.vue'),
+      meta: { title: '店铺数据统计' },
+      hidden: false
+    }
+  ]
+}

+ 1 - 0
src/store/modules/constant.js

@@ -36,6 +36,7 @@ export default {
       oaBillPaymentType: [], // 退款管理-付款类型
       principalPaymentMethod: [], // 授信决议 - 本金支付方式
       c_credit_investigation_info_type: [], // 资方融资管理-法人证件类型
+      platformType: [], // 店铺列表--平台类型
       smbCreditStatus: [], // 资方融资管理-资方放款列表-授信状态
       smbLimitStatus: [], // 资方融资管理-资方放款列表-额度状态
       capitalStatus: [], // 资方管理 - 资方状态

+ 11 - 0
src/store/modules/constantData.js

@@ -81,5 +81,16 @@ export default {
       name: 'MRO',
       code: 'MRO'
     }
+  ],
+  // 企业店铺管理--店铺状态
+  shopStatus: [
+    {
+      code: 0,
+      name: '关闭'
+    },
+    {
+      code: 1,
+      name: '正常'
+    }
   ]
 }

+ 210 - 0
src/views/storeManage/storeEntryList/entryDetail.vue

@@ -0,0 +1,210 @@
+<template>
+  <div>
+    <router-view />
+    <template v-if="$route.path === '/storeEntryDetail'">
+      <cy-comm-table
+        ref="commTable"
+        v-loading="loading"
+        :columns="columns"
+        :data="tableData"
+        :count="total"
+        :table-options="tableOptions"
+      />
+    </template>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { getStoreEntryDetail } from '@/api/storeManage/storeEntryList'
+
+export default {
+  name: 'EntryDetail',
+  data() {
+    return {
+      loading: false,
+      tableData: [],
+      page: 1,
+      size: 10,
+      total: 0,
+      search: {
+        name: '',
+        status: '',
+        bindStatus: ''
+      },
+      tableOptions: {
+        maxHeight: 'calc(100vh - 336px)',
+        height: 'calc(100vh - 336px)'
+      },
+      columns: [
+        {
+          label: '序号',
+          index: true
+        },
+        {
+          label: '准入类型',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getZrTypeName(row.zrType) }</div>
+          }
+        },
+        {
+          label: '资方名称',
+          showTooltip: true,
+          prop: 'capitalName'
+        },
+        {
+          label: '授信编号',
+          showTooltip: true,
+          width: 150,
+          prop: 'number'
+        },
+        {
+          label: '店铺名称',
+          prop: 'shopName',
+          showTooltip: true
+        },
+        {
+          label: '准入状态',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getZrStatus(row.zrStatus) }</div>
+          }
+        },
+        {
+          label: '失败原因',
+          prop: 'failReason',
+          showTooltip: true,
+          width: 120
+        },
+        {
+          label: '最后更新日期',
+          prop: 'gmtCreate',
+          showTooltip: true,
+          width: 120
+        },
+        {
+          label: '操作',
+          show: true,
+          render: (h, row) => {
+            const btnList = [
+              {
+                msg: '准入记录',
+                icon: 'iconfont icon-Magnifier',
+                power: '',
+                // tabPower: ['all'],
+                // rowPower: [],
+                category: 'record'
+              }
+            ]
+            const options = btnList.map(item => {
+              return (
+                this.tablePower({ item, row }) && <el-tooltip class='item' effect='dark' content={item.msg} placement='top' >
+                  <span class='table-icon-box' v-power={item.power}>
+                    <i class={item.icon} onClick={() => { this.handlerOperate(item.category, row, item.msg) }}></i>
+                  </span>
+                </el-tooltip>
+              )
+            })
+            return <div>{ options }</div>
+          },
+          width: 90
+        }
+      ]
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'constant'
+    ]),
+    tablePower() {
+      return ({ item, row }) => {
+        const { rowPower } = item
+        if (rowPower) {
+          if (rowPower.includes(row.repayStatus)) {
+            return true
+          }
+          return false
+        }
+        return true
+      }
+    }
+  },
+  mounted() {
+    this.fetchData()
+  },
+  methods: {
+    async fetchData() {
+      this.loading = true
+      const params = {
+        page: this.page || 1,
+        rows: this.size || 10
+      }
+
+      if (this.$route.query.id !== undefined) {
+        params.shopId = this.$route.query.id
+      }
+
+      const res = await getStoreEntryDetail(params)
+
+      this.loading = false
+      if (res.success) {
+        this.tableData = res.rows
+        this.total = res.records
+      }
+    },
+    handlerOperate(type, row, msg) {
+      if (type === 'record') {
+        const routeQuery = {
+          shopId: row.shopId,
+          zrType: row.zrType
+        }
+
+        if (routeQuery.zrType === 0) {
+          routeQuery.capitalId = row.zfId
+        }
+
+        this.$router.push({
+          name: 'StoreEntryRecord',
+          query: {
+            type: 'record',
+            ...routeQuery
+          }
+        })
+      }
+    },
+    getRepayStatus(status) {
+      const map = {
+        '01': '还款成功',
+        '02': '还款失败',
+        '03': '还款中'
+      }
+
+      return map[status] || ''
+    },
+    getZrTypeName(type) {
+      const map = {
+        0: '指定资方',
+        1: '非指定资方'
+      }
+      return map[type] || ''
+    },
+    getShopStatus(status) {
+      const map = {
+        0: '关闭',
+        1: '正常'
+      }
+      return map[status] || ''
+    },
+    getZrStatus(status) {
+      const map = {
+        0: '失败',
+        1: '成功'
+      }
+      return map[status] || ''
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 118 - 0
src/views/storeManage/storeEntryList/entryRecords.vue

@@ -0,0 +1,118 @@
+<template>
+  <div>
+    <router-view />
+    <template v-if="$route.query.type === 'record'">
+      <cy-comm-table
+        ref="commTable"
+        v-loading="loading"
+        :columns="columns"
+        :data="tableData"
+        :count="total"
+        :table-options="tableOptions"
+      />
+    </template>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { getStoreEntryRecords } from '@/api/storeManage/storeEntryList'
+
+export default {
+  name: 'EntryRecord',
+  data() {
+    return {
+      loading: false,
+      tableData: [],
+      page: 1,
+      size: 10,
+      total: 0,
+      search: {
+        name: '',
+        status: '',
+        bindStatus: '',
+      },
+      tableOptions: {
+        maxHeight: 'calc(100vh - 336px)',
+        height: 'calc(100vh - 336px)'
+      },
+      columns: [
+        {
+          label: '序号',
+          index: true
+        },
+        {
+          label: '店铺名称',
+          prop: 'shopName',
+          showTooltip: true
+        },
+        {
+          label: '准入状态',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getZrStatus(row.zrStatus) }</div>
+          }
+        },
+        {
+          label: '失败原因',
+          prop: 'failReason',
+          showTooltip: true,
+          width: 120
+        },
+        {
+          label: '创建日期',
+          prop: 'gmtCreate',
+          showTooltip: true,
+          width: 120
+        }
+      ]
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'constant'
+    ])
+  },
+  mounted() {
+    this.fetchData()
+  },
+  methods: {
+    async fetchData() {
+      this.loading = true
+      const params = {
+        page: this.page || 1,
+        rows: this.size || 10
+      }
+
+      if (this.$route.query.shopId !== undefined) {
+        params.shopId = this.$route.query.shopId
+      }
+
+      if (this.$route.query.zrType !== undefined) {
+        params.zrType = this.$route.query.zrType
+      }
+
+      if (this.$route.query.capitalId !== undefined) {
+        params.capitalId = this.$route.query.capitalId
+      }
+
+      const res = await getStoreEntryRecords(params)
+      console.log(res)
+      this.loading = false
+      if (res.success) {
+        this.tableData = res.rows
+        this.total = res.records
+      }
+    },
+    getZrStatus(status) {
+      const map = {
+        0: '不准入',
+        1: '准入'
+      }
+      return map[status] || ''
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 275 - 0
src/views/storeManage/storeEntryList/index.vue

@@ -0,0 +1,275 @@
+<template>
+  <div>
+    <router-view />
+    <template v-if="!$route.query.type && $route.path === '/storeEntryList'">
+      <div class="search">
+        <div />
+        <div class="right">
+          <div>
+            <el-input v-model="search.name" placeholder="请输入店铺名称" clearable></el-input>
+          </div>
+          <div>
+            <el-select
+              v-model="search.platformType"
+              placeholder="请选择平台"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in constant.platformType"
+                :key="item.name"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div>
+            <el-select
+              v-model="search.status"
+              placeholder="请选择店铺状态"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in constant.shopStatus"
+                :key="item.code"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div>
+            <el-select
+              v-model="search.bindStatus"
+              placeholder="请选择绑定状态"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in []"
+                :key="item.code"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="leftBtn">
+            <el-button type="primary" @click="fetchData('search')">查询</el-button>
+          </div>
+        </div>
+      </div>
+      <cy-comm-table
+        ref="commTable"
+        v-loading="loading"
+        :columns="columns"
+        :data="tableData"
+        :count="total"
+        :table-options="tableOptions"
+      />
+    </template>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { getStoreEntryList } from '@/api/storeManage/storeEntryList'
+
+export default {
+  name: 'StoreEntry',
+  data() {
+    return {
+      loading: false,
+      tableData: [],
+      page: 1,
+      size: 10,
+      total: 0,
+      search: {
+        name: '',
+        status: '',
+        bindStatus: '',
+        platformType: ''
+      },
+      tableOptions: {
+        maxHeight: 'calc(100vh - 336px)',
+        height: 'calc(100vh - 336px)'
+      },
+      columns: [
+        {
+          label: '序号',
+          index: true
+        },
+        {
+          label: '平台',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getPlatformName(row.platformType) }</div>
+          }
+        },
+        {
+          label: '企业名称',
+          showTooltip: true,
+          prop: 'companyName'
+        },
+        {
+          label: '统一社会信用代码',
+          showTooltip: true,
+          width: 150,
+          prop: 'code'
+        },
+        {
+          label: '店铺ID',
+          prop: 'platformShopId',
+          showTooltip: true
+        },
+        {
+          label: '店铺名称',
+          prop: 'shopName',
+          showTooltip: true
+        },
+        {
+          label: '店铺状态',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getShopStatus(row.shopStatus) }</div>
+          }
+        },
+        {
+          label: '准入状态',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getZrStatus(row.zrStatus) }</div>
+          }
+        },
+        {
+          label: '最后更新日期',
+          prop: 'gmtModified',
+          showTooltip: true,
+          width: 120
+        },
+        {
+          label: '操作',
+          show: true,
+          render: (h, row) => {
+            const btnList = [
+              {
+                msg: '准入详情',
+                icon: 'iconfont icon-Magnifier',
+                power: '',
+                // tabPower: ['all'],
+                // rowPower: [],
+                category: 'see'
+              }
+            ]
+            const options = btnList.map(item => {
+              return (
+                this.tablePower({ item, row }) && <el-tooltip class='item' effect='dark' content={item.msg} placement='top' >
+                  <span class='table-icon-box' v-power={item.power}>
+                    <i class={item.icon} onClick={() => { this.handlerOperate(item.category, row, item.msg) }}></i>
+                  </span>
+                </el-tooltip>
+              )
+            })
+            return <div>{ options }</div>
+          },
+          width: 90
+        }
+      ]
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'constant'
+    ]),
+    tablePower() {
+      return ({ item, row }) => {
+        const { rowPower } = item
+        if (rowPower) {
+          if (rowPower.includes(row.repayStatus)) {
+            return true
+          }
+          return false
+        }
+        return true
+      }
+    }
+  },
+  mounted() {
+    this.$store.dispatch('getConstant', ['platformType'])
+    this.fetchData()
+  },
+  methods: {
+    async fetchData(type) {
+      if (type === 'search') {
+        this.page = 1
+        this.size = 10
+      }
+
+      this.loading = true
+      const params = {
+        ...this.search,
+        page: this.page || 1,
+        rows: this.size || 10
+      }
+
+      if (params.platformType === '') {
+        delete params.platformType
+      }
+
+      const res = await getStoreEntryList(params)
+      this.loading = false
+      if (res.success) {
+        this.tableData = res.rows
+        this.total = res.records
+      }
+    },
+    handlerOperate(type, row, msg) {
+      if (type === 'see') {
+        this.$router.push({
+          name: 'StoreEntryDetail',
+          query: {
+            type: 'detail',
+            id: row.id
+          }
+        })
+      }
+    },
+    getRepayStatus(status) {
+      const map = {
+        '01': '还款成功',
+        '02': '还款失败',
+        '03': '还款中'
+      }
+
+      return map[status] || ''
+    },
+    getPlatformName(type) {
+      const map = {
+        'pinduoduo': '拼多多',
+        'kuaishou': '快手',
+        'douyin': '抖音',
+        'meituan': '美团'
+      }
+      return map[type] || ''
+    },
+    getShopStatus(status) {
+      const map = {
+        0: '关闭',
+        1: '正常'
+      }
+      return map[status] || ''
+    },
+    getZrStatus(status) {
+      const map = {
+        0: '不准入',
+        1: '准入'
+      }
+      return map[status] || ''
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 308 - 0
src/views/storeManage/storeList/index.vue

@@ -0,0 +1,308 @@
+<template>
+  <div>
+    <router-view />
+    <template v-if="!$route.query.type">
+      <div class="search">
+        <div />
+        <div class="right">
+          <div>
+            <el-input v-model="search.name" placeholder="请输入店铺名称" clearable></el-input>
+          </div>
+          <div>
+            <el-select
+              v-model="search.platformType"
+              placeholder="请选择平台"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in constant.platformType"
+                :key="item.name"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div>
+            <el-select
+              v-model="search.status"
+              placeholder="请选择店铺状态"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in constant.shopStatus"
+                :key="item.code"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div>
+            <el-select
+              v-model="search.bindStatus"
+              placeholder="请选择绑定状态"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in []"
+                :key="item.code"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="leftBtn">
+            <el-button type="primary" @click="fetchData('search')">查询</el-button>
+          </div>
+        </div>
+      </div>
+      <cy-comm-table
+        ref="commTable"
+        v-loading="loading"
+        :columns="columns"
+        :data="tableData"
+        :count="total"
+        :table-options="tableOptions"
+      />
+    </template>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { getStoreList } from '@/api/storeManage/storeList'
+
+export default {
+  name: 'CapitalAuth',
+  data() {
+    return {
+      loading: false,
+      tableData: [],
+      page: 1,
+      size: 10,
+      total: 0,
+      search: {
+        name: '',
+        status: '',
+        bindStatus: '',
+        platformType: ''
+      },
+      tableOptions: {
+        maxHeight: 'calc(100vh - 336px)',
+        height: 'calc(100vh - 336px)'
+      },
+      columns: [
+        {
+          label: '序号',
+          index: true
+        },
+        {
+          label: '平台',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getPlatformName(row.platformType) }</div>
+          }
+        },
+        {
+          label: '店铺ID',
+          prop: 'platformShopId',
+          showTooltip: true
+        },
+        {
+          label: '店铺名称',
+          prop: 'shopName',
+          showTooltip: true
+        },
+        {
+          label: '企业名称',
+          showTooltip: true,
+          prop: 'companyName'
+        },
+        {
+          label: '统一社会信用代码',
+          showTooltip: true,
+          width: 150,
+          prop: 'code'
+        },
+        {
+          label: '法人',
+          prop: 'legalPerson',
+          showTooltip: true
+        },
+        {
+          label: '店铺状态',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getShopStatus(row.shopStatus) }</div>
+          }
+        },
+        {
+          label: '店铺类型',
+          prop: 'shopType',
+          showTooltip: true
+        },
+        {
+          label: '店铺链接',
+          prop: 'shopUrl',
+          showTooltip: true
+        },
+        {
+          label: '店铺评分',
+          prop: 'shopScore',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ row.shopScore }</div>
+          }
+        },
+        {
+          label: '经营类目',
+          prop: 'category',
+          showTooltip: true
+        },
+        {
+          label: '绑定账户名称',
+          prop: 'registrationName',
+          showTooltip: true,
+          width: 120
+        },
+        {
+          label: '绑定账户账号',
+          prop: 'registrationAccount',
+          showTooltip: true,
+          width: 120
+        },
+        {
+          label: '账户绑定状态',
+          prop: 'bindStatus',
+          showTooltip: true,
+          width: 120
+        }
+        // {
+        //   label: '操作',
+        //   show: true,
+        //   render: (h, row) => {
+        //     console.log(this)
+        //     const btnList = [
+        //       // {
+        //       //   msg: '时间进度轴',
+        //       //   icon: 'iconfont icon-timeAxis',
+        //       //   power: '',
+        //       //   // tabPower: ['all', 'pending'],
+        //       //   category: 'timeAxis'
+        //       // },
+        //       {
+        //         msg: '查看',
+        //         icon: 'iconfont icon-Magnifier',
+        //         power: '',
+        //         // tabPower: ['all'],
+        //         // rowPower: [],
+        //         category: 'see'
+        //       },
+        //       {
+        //         msg: '重新还款',
+        //         icon: 'iconfont icon-shuaxin',
+        //         power: '',
+        //         // tabPower: ['all'],
+        //         rowPower: ['03'],
+        //         category: 'rePay'
+        //       }
+        //     ]
+        //     const options = btnList.map(item => {
+        //       return (
+        //         this.tablePower({ item, row }) && <el-tooltip class='item' effect='dark' content={item.msg} placement='top' >
+        //           <span class='table-icon-box' v-power={item.power}>
+        //             <i class={item.icon} onClick={() => { this.handlerOperate(item.category, row, item.msg) }}></i>
+        //           </span>
+        //         </el-tooltip>
+        //       )
+        //     })
+        //     return <div>{ options }</div>
+        //   },
+        //   width: 150
+        // }
+      ]
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'constant'
+    ]),
+    tablePower() {
+      return ({ item, row }) => {
+        const { rowPower } = item
+        if (rowPower) {
+          if (rowPower.includes(row.repayStatus)) {
+            return true
+          }
+          return false
+        }
+        return true
+      }
+    }
+  },
+  mounted() {
+    this.$store.dispatch('getConstant', ['platformType'])
+    this.fetchData()
+  },
+  methods: {
+    async fetchData(type) {
+      if (type === 'search') {
+        this.page = 1
+        this.size = 10
+      }
+
+      this.loading = true
+      const params = {
+        ...this.search,
+        page: this.page || 1,
+        rows: this.size || 10
+      }
+
+      if (params.platformType === '') {
+        delete params.platformType
+      }
+
+      const res = await getStoreList(params)
+      console.log(res)
+      this.loading = false
+      if (res.success) {
+        this.tableData = res.rows
+        this.total = res.records
+      }
+    },
+    // handlerOperate(type, row, msg) {},
+    getRepayStatus(status) {
+      const map = {
+        '01': '还款成功',
+        '02': '还款失败',
+        '03': '还款中'
+      }
+
+      return map[status] || ''
+    },
+    getPlatformName(type) {
+      const map = {
+        'pinduoduo': '拼多多',
+        'kuaishou': '快手',
+        'douyin': '抖音',
+        'meituan': '美团'
+      }
+      return map[type] || ''
+    },
+    getShopStatus(status) {
+      const map = {
+        0: '关闭',
+        1: '正常'
+      }
+      return map[status] || ''
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 294 - 0
src/views/storeManage/storeStatistics/index.vue

@@ -0,0 +1,294 @@
+<template>
+  <div>
+    <router-view />
+    <template v-if="!$route.query.type">
+      <div class="search">
+        <div />
+        <div class="right">
+          <div>
+            <el-input v-model="search.name" placeholder="请输入店铺名称" clearable></el-input>
+          </div>
+          <div>
+            <el-select
+              v-model="search.platformType"
+              placeholder="请选择平台"
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="item in constant.platformType"
+                :key="item.name"
+                :value="item.code"
+                :label="item.name"
+              >
+              </el-option>
+            </el-select>
+          </div>
+          <div class="leftBtn">
+            <el-button type="primary" @click="fetchData('search')">查询</el-button>
+          </div>
+        </div>
+      </div>
+      <cy-comm-table
+        ref="commTable"
+        v-loading="loading"
+        :columns="columns"
+        :data="tableData"
+        :count="total"
+        :table-options="tableOptions"
+      />
+    </template>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { formatMoney } from '@/utils'
+import { getStoreStatisticList } from '@/api/storeManage/storeStatistics'
+
+export default {
+  name: 'CapitalAuth',
+  data() {
+    return {
+      loading: false,
+      tableData: [],
+      page: 1,
+      size: 10,
+      total: 0,
+      search: {
+        name: '',
+        platformType: ''
+      },
+      tableOptions: {
+        maxHeight: 'calc(100vh - 336px)',
+        height: 'calc(100vh - 336px)'
+      },
+      columns: [
+        {
+          label: '序号',
+          index: true
+        },
+        {
+          label: '平台',
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ this.getPlatformName(row.platformType) }</div>
+          }
+        },
+        {
+          label: '店铺ID',
+          prop: 'platformShopId',
+          showTooltip: true
+        },
+        {
+          label: '店铺名称',
+          prop: 'shopName',
+          showTooltip: true
+        },
+        {
+          label: '运营时长(天)',
+          showTooltip: true,
+          width: 120,
+          render: (h, row) => {
+            return <div>{ row.operationDay }</div>
+          }
+        },
+        {
+          label: '待结算金额(元)',
+          showTooltip: true,
+          width: 140,
+          render: (h, row) => {
+            return <div>{ formatMoney(row.pendingSettlementAmount) }</div>
+          }
+        },
+        {
+          label: '月均运营收入(元)',
+          showTooltip: true,
+          width: 150,
+          render: (h, row) => {
+            return <div>{ formatMoney(row.operationIncomeMonth) }</div>
+          }
+        },
+        {
+          label: '近3月月均运营收入(元)',
+          width: 200,
+          showTooltip: true,
+          render: (h, row) => {
+            return <div>{ formatMoney(row.operationIncomeMonthThree) }</div>
+          }
+        },
+        {
+          label: '总退货率',
+          showTooltip: true,
+          render: (h, row) => {
+            return (<div>{ row.returnGoodsRate }</div>)
+          }
+        },
+        {
+          label: '7日退货率',
+          showTooltip: true,
+          width: 120,
+          render: (h, row) => {
+            return (<div>{ row.returnGoodsRateSeven }</div>)
+          }
+        },
+        {
+          label: '30日退货率',
+          showTooltip: true,
+          width: 120,
+          render: (h, row) => {
+            return (<div>{ row.returnGoodsRateThirty }</div>)
+          }
+        },
+        {
+          label: '90日退货率',
+          showTooltip: true,
+          width: 120,
+          render: (h, row) => {
+            return (<div>{ row.returnGoodsRateNinety }</div>)
+          }
+        },
+        {
+          label: '发货及时率',
+          prop: 'sendGoodsRate',
+          showTooltip: true,
+          width: 120,
+          render: (h, row) => {
+            return (<div>{ row.sendGoodsRate }</div>)
+          }
+        },
+        {
+          label: '最后更新日期',
+          prop: 'gmtModified',
+          showTooltip: true,
+          width: 120
+        }
+        // {
+        //   label: '操作',
+        //   show: true,
+        //   render: (h, row) => {
+        //     console.log(this)
+        //     const btnList = [
+        //       // {
+        //       //   msg: '时间进度轴',
+        //       //   icon: 'iconfont icon-timeAxis',
+        //       //   power: '',
+        //       //   // tabPower: ['all', 'pending'],
+        //       //   category: 'timeAxis'
+        //       // },
+        //       {
+        //         msg: '查看',
+        //         icon: 'iconfont icon-Magnifier',
+        //         power: '',
+        //         // tabPower: ['all'],
+        //         // rowPower: [],
+        //         category: 'see'
+        //       },
+        //       {
+        //         msg: '重新还款',
+        //         icon: 'iconfont icon-shuaxin',
+        //         power: '',
+        //         // tabPower: ['all'],
+        //         rowPower: ['03'],
+        //         category: 'rePay'
+        //       }
+        //     ]
+        //     const options = btnList.map(item => {
+        //       return (
+        //         this.tablePower({ item, row }) && <el-tooltip class='item' effect='dark' content={item.msg} placement='top' >
+        //           <span class='table-icon-box' v-power={item.power}>
+        //             <i class={item.icon} onClick={() => { this.handlerOperate(item.category, row, item.msg) }}></i>
+        //           </span>
+        //         </el-tooltip>
+        //       )
+        //     })
+        //     return <div>{ options }</div>
+        //   },
+        //   width: 150
+        // }
+      ]
+    }
+  },
+  computed: {
+    ...mapGetters([
+      'constant'
+    ]),
+    formatMoney() {
+      return (val) => {
+        return formatMoney(val)
+      }
+    },
+    tablePower() {
+      return ({ item, row }) => {
+        const { rowPower } = item
+        if (rowPower) {
+          if (rowPower.includes(row.repayStatus)) {
+            return true
+          }
+          return false
+        }
+        return true
+      }
+    }
+  },
+  mounted() {
+    this.$store.dispatch('getConstant', ['platformType'])
+    this.fetchData()
+  },
+  methods: {
+    async fetchData(type) {
+      if (type === 'search') {
+        this.page = 1
+        this.size = 10
+      }
+
+      this.loading = true
+      const params = {
+        ...this.search,
+        page: this.page || 1,
+        rows: this.size || 10
+      }
+
+      if (params.platformType === '') {
+        delete params.platformType
+      }
+
+      const res = await getStoreStatisticList(params)
+
+      this.loading = false
+      if (res.success) {
+        this.tableData = res.rows
+        this.total = res.records
+      }
+    },
+    // handlerOperate(type, row, msg) {},
+    getRepayStatus(status) {
+      const map = {
+        '01': '还款成功',
+        '02': '还款失败',
+        '03': '还款中'
+      }
+
+      return map[status] || ''
+    },
+    getPlatformName(type) {
+      const map = {
+        'pinduoduo': '拼多多',
+        'kuaishou': '快手',
+        'douyin': '抖音',
+        'meituan': '美团'
+      }
+      return map[type] || ''
+    },
+    getShopStatus(status) {
+      const map = {
+        0: '关闭',
+        1: '正常'
+      }
+      return map[status] || ''
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 1 - 1
src/views/systemManage/processManage/index.vue

@@ -45,7 +45,7 @@
             <cy-upload
               ref="flowableFile"
               :upload-params="{
-                mouldName: 'flowableFile'
+                fileType: 'flowableFile'
               }"
               :file-data="deploymentDocumentsForm.flowableFile"
               :upload-from-orange-status="true"