Przeglądaj źródła

机构授权牌物流管理

yuwenjun1997 2 lat temu
rodzic
commit
8720247796

+ 1 - 1
src/layout/components/Sidebar/index.vue

@@ -51,7 +51,7 @@ export default {
       return !this.sidebar.opened
     },
     setUrl() {
-      return this.userIdentity === 1 ? '/supplier' : '/auth'
+      return this.userIdentity === 1 ? '/supplier' : '/club'
     }
   }
 }

+ 7 - 5
src/router/index.js

@@ -11,25 +11,27 @@ import personnelRoutes from './module/personnel'
 import feedbackRoutes from './module/feedback'
 import helperRoutes from './module/helper'
 import materialRoutes from './module/material'
-import AuditRoutes from './module/audit'
-import MemberRoutes from './module/member'
+import auditRoutes from './module/audit'
+import memberRoutes from './module/member'
 import vipRoutes from './module/vip'
 import personalRoutes from './module/personal'
 import settingRoutes from './module/settings'
 import shareRoutes from './module/share'
+import logisticsRoutes from './module/logistics'
 
 // 需要权限访问的路由列表
 export const asyncRoutes = [
   ...supplierRoutes,
-  ...AuditRoutes,
-  ...MemberRoutes,
+  ...auditRoutes,
+  ...memberRoutes,
   ...clubRoutes,
   ...personnelRoutes,
   ...materialRoutes,
   ...feedbackRoutes,
   ...settingRoutes,
   ...helperRoutes,
-  ...personalRoutes
+  ...personalRoutes,
+  ...logisticsRoutes
 ]
 
 // 默认路由列表 全部用户都可以访问

+ 47 - 0
src/router/module/logistics.js

@@ -0,0 +1,47 @@
+/* Layout */
+import Layout from '@/layout'
+
+const logisticsRoutes = [
+  {
+    path: '/logistics',
+    component: Layout,
+    alwaysShow: true,
+    redirect: '/logistics/licensed',
+    name: 'Logistics',
+    meta: { title: '授权牌物流', noCache: true },
+    children: [
+      {
+        path: 'supplier-list',
+        component: () => import('@/views/admin/logistics-licensed/index'),
+        name: 'LicensedSupplierList',
+        meta: { title: '供应商列表', noCache: true }
+      },
+      {
+        path: 'club-list',
+        component: () => import('@/views/admin/logistics-licensed/club/index'),
+        name: 'LicensedClubList',
+        meta: { title: '授权机构', noCache: true }
+      },
+      {
+        path: 'club-detail',
+        component: () => import('@/views/admin/logistics-licensed/club/detail'),
+        name: 'LicensedClubDetail',
+        meta: { title: '机构详情', noCache: true }
+      },
+      {
+        path: 'device-list',
+        component: () => import('@/views/admin/logistics-licensed/club/device/index'),
+        name: 'LicensedDeviceList',
+        meta: { title: '认证设备', noCache: true }
+      },
+      {
+        path: 'device-detail',
+        component: () => import('@/views/admin/logistics-licensed/club/device/detail'),
+        name: 'LicensedDeviceDetail',
+        meta: { title: '设备详情', noCache: true }
+      }
+    ]
+  }
+]
+
+export default logisticsRoutes

+ 1 - 1
src/router/module/settings.js

@@ -12,7 +12,7 @@ const settingRoutes = [
       {
         path: 'menus',
         name: 'SettingsMenus',
-        meta: { title: '菜单管理', roles: ['admin'], noCache: false },
+        meta: { title: '菜单管理', roles: ['admin'], noCache: true },
         component: () => import('@/views/admin/settings/menus')
       },
       {

+ 12 - 0
src/styles/index.scss

@@ -8,6 +8,7 @@
 
 body {
   height: 100%;
+  min-width: 1200px;
   -moz-osx-font-smoothing: grayscale;
   -webkit-font-smoothing: antialiased;
   text-rendering: optimizeLegibility;
@@ -339,3 +340,14 @@ aside {
     background: url(~@/assets/img/vip-icon.png) no-repeat;
   }
 }
+
+.el-dialog__wrapper {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  .el-dialog {
+    margin: 0;
+    margin-top: 0 !important;
+  }
+}

+ 9 - 0
src/views/admin/logistics-licensed/club/detail.vue

@@ -0,0 +1,9 @@
+<template>
+  <div>机构详情</div>
+</template>
+
+<script>
+export default {}
+</script>
+
+<style></style>

+ 9 - 0
src/views/admin/logistics-licensed/club/device/detail.vue

@@ -0,0 +1,9 @@
+<template>
+  <div>设备详情</div>
+</template>
+
+<script>
+export default {}
+</script>
+
+<style></style>

+ 9 - 0
src/views/admin/logistics-licensed/club/device/index.vue

@@ -0,0 +1,9 @@
+<template>
+  <div>设备列表</div>
+</template>
+
+<script>
+export default {}
+</script>
+
+<style></style>

+ 207 - 0
src/views/admin/logistics-licensed/club/index.vue

@@ -0,0 +1,207 @@
+<template>
+  <div class="app-container">
+    <div class="filter-container">
+      <div class="filter-control">
+        <span>机构名称:</span>
+        <el-input
+          v-model="listQuery.authParty"
+          placeholder="授权机构"
+          style="width: 280px"
+          class="filter-item"
+          @keyup.enter.native="handleFilter"
+        />
+      </div>
+      <div class="filter-control">
+        <el-button type="primary" @click="getList">查询</el-button>
+      </div>
+    </div>
+    <!-- 表格区域 -->
+    <el-table
+      :key="tableKey"
+      v-loading="listLoading"
+      :data="list"
+      border
+      fit
+      highlight-current-row
+      style="width: 100%"
+      header-row-class-name="tableHeader"
+    >
+      <el-table-column label="序号" :index="indexMethod" align="center" width="80" type="index" />
+
+      <el-table-column label="机构名称" align="center" prop="authParty" />
+
+      <el-table-column label="创建时间" class-name="status-col" width="360px">
+        <template slot-scope="{ row }">
+          <span>{{ row.createTime | formatTime }}</span>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column label="创建人" class-name="status-col" width="160px" prop="createBy" /> -->
+      <el-table-column label="寄送状态" width="140px" align="center">
+        <template slot-scope="{ row }">
+          <!-- 只有审核通过了才能操作上下线 auditStatus :审核状态 -->
+          <template v-if="row.auditStatus === 1">
+            <template v-if="row.status === 0">
+              <span style="margin-right: 10px" class="status danger">待寄送</span>
+            </template>
+            <template v-else>
+              <span style="margin-right: 10px" class="status success">已寄送</span>
+            </template>
+          </template>
+          <template v-else>
+            <!-- <el-tag type="warning">待上线</el-tag> -->
+            <span style="margin-right: 10px" class="status warning">待上线</span>
+          </template>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300">
+        <template slot-scope="{ row }">
+          <el-button
+            type="primary"
+            size="mini"
+            @click="$_navigationTo(`club-detail?id=${row.authId}&authParty=${row.authParty}`)"
+          >
+            查看
+          </el-button>
+          <el-button
+            type="primary"
+            size="mini"
+            @click="$_navigationTo(`club-device-list?id=${row.authId}&authParty=${row.authParty}`)"
+          >
+            查看设备认证
+          </el-button>
+          <el-button type="primary" size="mini" @click="onSend(row)"> 寄送 </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 页码 -->
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="listQuery.pageNum"
+      :limit.sync="listQuery.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 物流信息 -->
+    <el-dialog title="机构授权牌寄送" :visible.sync="dialogVisible" width="40%">
+      <el-form ref="ruleForm" :model="formData" :rules="rules" label-width="100px">
+        <el-form-item label="快递公司:" prop="company">
+          <el-select v-model="formData.company" placeholder="请选择快递公司" clearable>
+            <el-option label="请选择快递公司" value="" />
+            <el-option label="顺丰快递" :value="1" />
+            <el-option label="京东快递" :value="2" />
+            <el-option label="圆通速递" :value="3" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="物流编号:" prop="num">
+          <el-input v-model="formData.num" placeholder="请输入物流编号" />
+        </el-form-item>
+        <el-form-item label="图片备注:" prop="imageRemark">
+          <el-input v-show="false" v-model="formData.imageRemark" />
+          <upload-image
+            tip="请上传jpg/png格式的图片,最大不超过5M,最多可上传6张"
+            :multiple="true"
+            :limit="6"
+            accept=".jpg,.png"
+          />
+        </el-form-item>
+        <el-form-item label="备注:" prop="remark">
+          <el-input v-model="formData.remark" type="textarea" rows="4" />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { fecthAuthList } from '@/api/auth'
+import Pagination from '@/components/Pagination'
+import UploadImage from '@/components/UploadImage'
+import { formatDate } from '@/utils'
+export default {
+  name: 'ComplexTable',
+  components: { Pagination, UploadImage },
+  filters: {
+    formatTime(time) {
+      if (!time) {
+        return ''
+      }
+      return formatDate(time, 'yyyy-MM-DD HH:mm:ss')
+    }
+  },
+  data() {
+    return {
+      tableKey: 0,
+      list: null,
+      total: 0,
+      listLoading: true,
+      dialogVisible: false,
+      // 查询参数
+      listQuery: {
+        authParty: '', // 授权机构
+        authUserId: '', // 供应商用户id
+        pageNum: 1, // 页码
+        pageSize: 10, // 分页
+        status: ''
+      },
+      formData: {
+        company: '',
+        num: '',
+        imageRemark: '',
+        remark: ''
+      },
+      rules: {
+        company: [{ required: true, message: '快递公司名称不能为空', trigger: ['blur'] }],
+        num: [{ required: true, message: '物流编号不能为空', trigger: ['blur'] }]
+      }
+    }
+  },
+  created() {
+    this.listQuery.authUserId = this.$route.query.id
+    this.getList()
+  },
+  methods: {
+    // 获取授权列表
+    getList() {
+      this.listLoading = true
+      fecthAuthList(this.listQuery)
+        .then((response) => {
+          if (response.code !== 0) {
+            return this.$message.error('授权列表信息获取失败')
+          }
+          const { list, total } = response.data
+          this.list = list
+          this.total = total
+        })
+        .catch((err) => {
+          console.log(err)
+          return this.$message.error('授权列表信息获取失败')
+        })
+        .finally(() => {
+          this.listLoading = false
+        })
+    },
+    // 过滤列表
+    handleFilter() {
+      this.listQuery.page = 1
+      this.getList()
+    },
+
+    onSend(row) {
+      console.log(row)
+      this.dialogVisible = true
+    },
+
+    indexMethod(index) {
+      return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 172 - 0
src/views/admin/logistics-licensed/components/table-list.vue

@@ -0,0 +1,172 @@
+<template>
+  <div>
+    <div class="filter-container">
+      <div class="filter-control">
+        <span>供应商名称:</span>
+        <el-input v-model="listQuery.shopName" placeholder="供应商名称" @keyup.enter.native="handleFilter" />
+      </div>
+
+      <div class="filter-control">
+        <span>供应商类型:</span>
+        <el-select
+          v-model="listQuery.shopType"
+          placeholder="供应商类型"
+          clearable
+          style="width: 200px"
+          class="filter-item"
+          @change="getList()"
+        >
+          <el-option label="所有类型" value="" />
+          <el-option label="代理商" :value="2" />
+          <el-option label="品牌方" :value="1" />
+        </el-select>
+      </div>
+      <div class="filter-control">
+        <span>手机号:</span>
+        <el-input
+          v-model="listQuery.mobile"
+          placeholder="手机号"
+          style="width: 200px"
+          class="filter-item"
+          @keyup.enter.native="handleFilter"
+        />
+      </div>
+      <div class="filter-control">
+        <span>联系人:</span>
+        <el-input
+          v-model="listQuery.linkMan"
+          placeholder="联系人"
+          style="width: 200px"
+          class="filter-item"
+          @keyup.enter.native="handleFilter"
+        />
+      </div>
+      <div class="filter-control">
+        <el-button type="primary" @click="getList(listQuery)">查询</el-button>
+      </div>
+    </div>
+    <!-- 表格区域 -->
+    <el-table
+      :key="tableKey"
+      v-loading="listLoading"
+      :data="list"
+      border
+      fit
+      highlight-current-row
+      style="width: 100%"
+      header-row-class-name="tableHeader"
+    >
+      <el-table-column label="序号" :index="indexMethod" type="index" sortable="custom" align="center" width="80" />
+      <el-table-column label="供应商名称" align="center" prop="name" />
+      <el-table-column label="供应商类型" width="100px" align="center">
+        <template v-slot="{ row }">
+          <span v-if="row.shopType === 1">品牌方</span>
+          <span v-if="row.shopType === 2">代理商</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="手机号" width="120px" align="center" prop="mobile" />
+      <el-table-column label="联系人" align="center" prop="linkMan" />
+      <el-table-column label="创建时间" class-name="status-col" width="200px">
+        <template slot-scope="{ row }">
+          <span>{{ row.createTime | formatTime }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="{ row }">
+          <el-button size="mini" type="primary" @click="$_navigationTo(`/logistics/club-list?id=${row.authUserId}`)">
+            机构授权牌
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 页码 -->
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="listQuery.pageNum"
+      :limit.sync="listQuery.pageSize"
+      @pagination="getList(listQuery)"
+    />
+  </div>
+</template>
+
+<script>
+import Pagination from '@/components/Pagination' // secondary package based on el-pagination
+import { fetchSupplierList } from '@/api/supplier'
+import { formatDate } from '@/utils'
+
+export default {
+  name: 'ComplexTable',
+  components: { Pagination },
+  filters: {
+    formatTime(time) {
+      if (!time) {
+        return ''
+      }
+      return formatDate(time, 'yyyy-MM-DD HH:mm:ss')
+    }
+  },
+  // mixins: [scrollTo],
+  data() {
+    return {
+      slider: 1,
+      listLoading: true,
+      tableKey: '',
+      total: 0, // 条数统计
+      listQuery: {
+        brandId: '', // 品牌id
+        linkMan: '', // 联系人
+        mobile: '', // 手机号
+        pageNum: 0, // 页码
+        pageSize: 10, // 分页大小
+        shopName: '', // 供应商名称
+        shopType: '', // 供应商类型
+        loginAccount: '' // 登录账号
+      },
+      list: [],
+      prevData: ''
+    }
+  },
+  created() {
+    this.getList()
+  },
+  methods: {
+    // 获取列表数据
+    getList() {
+      this.listLoading = true
+      fetchSupplierList(this.listQuery)
+        .then((res) => {
+          if (res.code !== 0) {
+            return this.$message.error('获取数据失败~')
+          }
+          const { total, list } = res.data
+          this.total = total
+          this.formatList(list)
+          this.list = list
+          console.log(this.list)
+        })
+        .catch((err) => {
+          console.log(err)
+        })
+        .finally(() => {
+          this.listLoading = false
+        })
+    },
+    // 格式化数组
+    formatList(list = []) {
+      list.forEach((i) => {
+        i.shopStatus = i.shopStatus === 1
+      })
+    },
+    // 过滤列表
+    handleFilter() {
+      this.listQuery.page = 1
+      this.getList()
+    },
+    indexMethod(index) {
+      return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1
+    }
+  }
+}
+</script>

+ 31 - 0
src/views/admin/logistics-licensed/index.vue

@@ -0,0 +1,31 @@
+<template>
+  <div class="app-container">
+    <el-tabs v-model="activeName" @tab-click="handleClick">
+      <el-tab-pane label="未寄送" name="first">
+        <table-list />
+      </el-tab-pane>
+      <el-tab-pane label="已寄送" name="second">
+        <table-list />
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import TableList from './components/table-list.vue'
+export default {
+  components: {
+    TableList
+  },
+  data() {
+    return {
+      activeName: 'first'
+    }
+  },
+  methods: {
+    handleClick() {}
+  }
+}
+</script>
+
+<style></style>

+ 2 - 2
src/views/admin/settings/roles/edit.vue

@@ -67,8 +67,8 @@ export default {
       console.log(this.$refs.tree.getCheckedNodes())
     },
     getCheckedKeys() {
-      console.log(this.$refs.tree.getCheckedKeys())
-      this.role.menuIds = this.$refs.tree.getCheckedKeys().join(',')
+      // console.log(this.$refs.tree.getCheckedNodes(false, true).map(item => item.id))
+      this.role.menuIds = this.$refs.tree.getCheckedNodes(false, true).map(item => item.id).join(',')
     },
     // 获取菜单权限列表
     getMenuTree() {

+ 4 - 1
src/views/normal/personal/set-mobile.vue

@@ -2,7 +2,7 @@
   <div>
     <el-form ref="form" :model="formData" :rules="formRules" label-width="80px" class="form">
       <el-form-item label="原手机号" prop="oldMobile">
-        <el-input v-model="formData.oldMobile" placeholder="请输入原手机号" />
+        <el-input v-model="formData.oldMobile" placeholder="请输入原手机号" disabled />
       </el-form-item>
       <el-form-item label="验证码" prop="verifyCode">
         <el-row>
@@ -62,6 +62,9 @@ export default {
       return this.sendStatus === 0 ? '发送验证码' : `再次发送${this.sendStatus}s`
     }
   },
+  created() {
+    this.formData.oldMobile = this.$store.getters.mobile
+  },
   methods: {
     submit() {
       this.$refs.form.validate(valide => {