achao 2 years ago
parent
commit
37e687ce59

+ 2 - 2
unimall-admin/config/prod.env.js

@@ -1,6 +1,6 @@
 module.exports = {
 	NODE_ENV: '"production"',
   	ENV_CONFIG: '"prod"',
-    HOST: '"http://123.56.171.94:8181"',
-    BASE_API: '"http://123.56.171.94:8181/m.api"'
+    HOST: '"http://121.5.163.150:8181"',
+    BASE_API: '"http://121.5.163.150:8181/m.api"'
 }

+ 5 - 96
unimall-admin/src/router/route.json

@@ -15,7 +15,7 @@
 						"admin:admin:update",
 						"admin:admin:delete"
 					],
-					"title": "管理员"
+					"title": "员"
 				},
 				"name": "admin",
 				"page": "/sys/admin"
@@ -40,92 +40,11 @@
 		],
 		"meta": {
 			"icon": "sys",
-			"title": "系统管理"
+			"title": "会员管理"
 		},
 		"name": "sysManage",
 		"alwaysShow": true
 	},
-	{
-        "redirect": "noredirect",
-        "name": "sysTools",
-        "path": "/tools",
-        "meta": {
-            "icon": "tools",
-            "title": "系统工具"
-        },
-        "alwaysShow": true,
-        "children": [
-            {
-                "path": "api",
-                "name": "api",
-                "page": "/tools/api/api",
-                "meta": {
-                    "title": "API文档",
-                    "icon": "api",
-                    "noCache": true,
-                    "perms": [
-                        "tools:api:list"
-                    ]
-                }
-            },
-            {
-                "path": "gen",
-                "name": "gen",
-                "page": "/tools/gen",
-                "meta": {
-                    "title": "代码生成",
-                    "icon": "gen",
-                    "noCache": true,
-                    "perms": [
-                        "tools:gen:list",
-                        "tools:gen:create",
-                        "tools:gen:delete",
-                        "tools:gen:update"
-                    ]
-                }
-            },
-            {
-                "path": "gen/edit/:tableId(\\d+)",
-                "hidden": true,
-                "meta": {
-                    "noCache": true,
-                    "perms": [],
-                    "title": "配置项修改"
-                },
-                "name": "genEdit",
-                "page": "/tools/gen/editTable"
-            }
-
-        ]
-    },
-	{
-		"redirect": "noredirect",
-		"name": "memberInfo",
-		"path": "/memberInfo",
-		"meta": {
-			"icon": "log",
-			"title": "会员管理"
-		},
-		"alwaysShow": true,
-		"children": [
-			{
-				"path": "memberInfo",
-				"name": "memberInfo",
-				"page": "/memberInfo",
-				"meta": {
-					"title": "会员信息",
-					"icon": "memberInfo",
-					"noCache": true,
-					"perms": [
-						"memberInfo:list",
-						"memberInfo:create",
-						"memberInfo:delete",
-						"memberInfo:update"
-					]
-				}
-			}
-		]
-	},
 	{
 		"redirect": "noredirect",
 		"name": "sysLog",
@@ -169,17 +88,7 @@
 				"name": "info",
 				"page": "/gubi/info",
 				"meta": {
-					"title": "一级分类",
-					"icon": "logininfor",
-					"noCache": true
-				}
-			},
-			{
-				"path": "second",
-				"name": "second",
-				"page": "/gubi/second",
-				"meta": {
-					"title": "二级分类",
+					"title": "分类管理",
 					"icon": "logininfor",
 					"noCache": true
 				}
@@ -187,9 +96,9 @@
 			{
 				"path": "three",
 				"name": "three",
-				"page": "/gubi/three",
+				"page": "/gubi/three/index1",
 				"meta": {
-					"title": "三级分类",
+					"title": "分类信息",
 					"icon": "logininfor",
 					"noCache": true
 				}

+ 839 - 287
unimall-admin/src/views/gubi/info/index.vue

@@ -1,179 +1,182 @@
 <template>
-  <div class="app-container">
-    <!-- <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="" prop="companyId">
-        <el-input
-          v-model="queryParams.companyId"
-          placeholder="请输入"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="分类" prop="typeName">
-        <el-input
-          v-model="queryParams.typeName"
-          placeholder="请输入分类"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="排序" prop="postion">
-        <el-input
-          v-model="queryParams.postion"
-          placeholder="请输入排序"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-        <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
-          <el-option label="请选择字典生成" value="" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="0:否" prop="deleteFlag">
-        <el-input
-          v-model="queryParams.deleteFlag"
-          placeholder="请输入0:否"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="" prop="gmtCreate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.gmtCreate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="" prop="gmtUpdate">
-        <el-date-picker clearable size="small" style="width: 200px"
-          v-model="queryParams.gmtUpdate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="" prop="adminId">
-        <el-input
-          v-model="queryParams.adminId"
-          placeholder="请输入"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form> -->
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-permission="['gubi:info:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-permission="['gubi:info:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-permission="['gubi:info:remove']"
-        >删除</el-button>
-      </el-col>
-      <!-- <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-permission="['gubi:info:export']"
-        >导出</el-button>
-      </el-col> -->
-    </el-row>
-
-    <el-table v-loading="loading" :data="infoList" @selection-change="handleSelectionChange">
-      <!-- <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="" align="center" prop="id" />
-      <el-table-column label="" align="center" prop="companyId" /> -->
-      <el-table-column label="名称" align="center" prop="typeName" />
-      <el-table-column label="排序" align="center" prop="postion" />
-      <!-- <el-table-column label="状态" align="center" prop="status" />
-      <el-table-column label="0:否" align="center" prop="deleteFlag" /> -->
-      <!-- <el-table-column label="" align="center" prop="gmtCreate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.gmtCreate) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="" align="center" prop="gmtUpdate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.gmtUpdate) }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="" align="center" prop="userId" />
-      <el-table-column label="" align="center" prop="adminId" /> -->
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-permission="['gubi:info:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-permission="['gubi:info:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改一级分类对话框 -->
+  <div style="width: 100%; display: flex">
+    <div class="right-info-box">
+      <div class="warp_group">
+        <div class="line_box">
+          <div class="group_flex">
+            <div class="group_item">
+              <span class="h_text">一级分类</span>
+              <div class="btn">
+                <el-button size="small" icon="el-icon-plus" class="el-button wfu-btn-add" @click="handleAdd">新增一级分类</el-button>
+              </div>
+            </div>
+            <div class="group_content_box">
+              <div class="group_content_title">
+                <span>分类名称</span>
+                <!-- <span
+                  >排序
+                  <el-popover content="序号越大,排序越靠前" placement="top" trigger="hover" width="180">
+                    <i slot="reference" style="color: #bbbfc8" class="el-icon-warning" />
+                  </el-popover>
+                </span> -->
+                <span>操作</span>
+              </div>
+              <el-scrollbar style="height: 572px">
+                <div v-loading="loading" class="item_attr" @click="tabClass('1',index)"  :class="{avtive:num === index}" v-for="(item,index) in first" :key="index">
+                  <div class="item_name_box">
+                    <!-- <img
+                      class="img"
+                      :src="item.picture"
+                      alt=""
+                    /> -->
+                    <span class="item_name_title">{{item.typeName}}</span>
+                  </div>
+                  <div class="item_sort">
+                    {{item.weight}}
+                    <el-popover trigger="click">
+                      <div class="sort_box">
+                        <el-input v-model.number="sort" size="small" />
+                        <div class="sort_btn">
+                          <el-button size="mini" type="text">取消 </el-button>
+                          <el-button size="mini" type="primary">确定 </el-button>
+                        </div>
+                      </div>
+                    </el-popover>
+                  </div>
+                  <div class="item_handle">
+                    <el-popover placement="top-start" width="50" content="编辑">
+                      <span slot="reference" class="handel_icon">
+                        <i class="el-icon-edit" @click="handleUpdate(item)"/>
+                      </span>
+                    </el-popover>
+                    <!-- <el-popover placement="top-start" width="50" trigger="hover" content="隐藏">
+                      <span slot="reference" class="handel_icon">
+                        <i class="iconfont icon-yincang" />
+                      </span>
+                    </el-popover> -->
+                    <el-popover placement="top-start" width="50" content="删除">
+                      <span slot="reference" class="handel_icon">
+                        <i class="el-icon-delete" @click.stop="handleDelete(item)"/>
+                      </span>
+                    </el-popover>
+                  </div>
+                </div>
+              </el-scrollbar>
+            </div>
+          </div>
+          <div class="group_flex">
+            <div class="group_item">
+              <span class="h_text">二级分类</span>
+              <div class="btn">
+                <el-button size="small" icon="el-icon-plus" class="el-button wfu-btn-add" @click="handleAdd2">新增二级分类</el-button>
+              </div>
+            </div>
+            <div class="group_content_box">
+              <div class="group_content_title">
+                <span>分类名称</span>
+                <!-- <span
+                  >排序
+                  <el-popover content="序号越大,排序越靠前" placement="top" trigger="hover" width="180">
+                    <i slot="reference" style="color: #bbbfc8" class="el-icon-warning" />
+                  </el-popover>
+                </span> -->
+                <span>操作</span>
+              </div>
+              <el-scrollbar style="height: 572px">
+                <div v-loading="loading" class="item_attr" :class="{avtive:sum === index}" @click="tabClass('2',index)" v-for="(item,index) in second" :key="index">
+                  <div class="item_name_box">
+                    <img
+                      class="img"
+                      :src="item.urlPath.split(',')"
+                      alt=""
+                    />
+                    <span class="item_name_title">{{item.typeName}}</span>
+                  </div>
+                  <div class="item_sort">
+                    {{item.weight}}
+                    <el-popover trigger="click">
+                      <div class="sort_box">
+                        <el-input v-model.number="sort" size="small" />
+                        <div class="sort_btn">
+                          <el-button size="mini" type="text">取消 </el-button>
+                          <el-button size="mini" type="primary">确定 </el-button>
+                        </div>
+                      </div>
+                    </el-popover>
+                  </div>
+                  <div class="item_handle">
+                    <el-popover placement="top-start" width="50"  content="编辑">
+                      <span slot="reference" class="handel_icon">
+                        <i class="el-icon-edit" @click="handleUpdate2(item)"/>
+                      </span>
+                    </el-popover>
+                    <el-popover placement="top-start" width="50" content="删除">
+                      <span slot="reference" class="handel_icon">
+                        <i class="el-icon-delete"  @click.stop="handleDelete2(item)"/>
+                      </span>
+                    </el-popover>
+                  </div>
+                </div>
+              </el-scrollbar>
+            </div>
+          </div>
+          <div class="group_flex">
+            <div class="group_item">
+              <span class="h_text">三级分类</span>
+              <div class="btn">
+                <el-button size="small" icon="el-icon-plus" class="el-button wfu-btn-add" @click="handleAdd3">新增三级分类</el-button>
+              </div>
+            </div>
+            <div class="group_content_box">
+              <div class="group_content_title">
+                <span>分类名称</span>
+                <!-- <span
+                  >排序
+                  <el-popover content="序号越大,排序越靠前" placement="top" trigger="hover" width="180">
+                    <i slot="reference" style="color: #bbbfc8" class="el-icon-warning" />
+                  </el-popover>
+                </span> -->
+                <span>操作</span>
+              </div>
+              <el-scrollbar style="height: 572px">
+                <div v-loading="loading" class="item_attr" v-for="(item,index) in tertiary" :key="index">
+                  <div class="item_name_box">
+                   
+                    <span class="item_name_title">{{item.typeName}}</span>
+                  </div>
+                  <div class="item_sort">
+                    {{item.weight}}
+                    <el-popover trigger="click">
+                      <div class="sort_box">
+                        <el-input v-model.number="sort" size="small" />
+                        <div class="sort_btn">
+                          <el-button size="mini" type="text">取消 </el-button>
+                          <el-button size="mini" type="primary">确定 </el-button>
+                        </div>
+                      </div>
+                    </el-popover>
+                  </div>
+                  <div class="item_handle">
+                    <el-popover placement="top-start" width="50" content="编辑">
+                      <span slot="reference" class="handel_icon">
+                        <i class="el-icon-edit"  @click="handleUpdate3(item)"/>
+                      </span>
+                    </el-popover>
+                    <el-popover placement="top-start" width="50" content="删除">
+                      <span slot="reference" class="handel_icon">
+                        <i class="el-icon-delete"  @click.stop="handleDelete3(item)"/>
+                      </span>
+                    </el-popover>
+                  </div>
+                </div>
+              </el-scrollbar>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
     <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+      <el-form ref="form" :model="form" label-width="80px">
         <!-- <el-form-item label="" prop="companyId">
           <el-input v-model="form.companyId" placeholder="请输入" />
         </el-form-item> -->
@@ -219,139 +222,317 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <!-- 二级分类 -->
+    <el-dialog :title="title2" :visible.sync="open2" width="500px">
+      <el-form ref="form2" :model="form2" label-width="80px">
+        <!-- <el-form-item label="" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入" />
+        </el-form-item> -->
+        <!-- <el-form-item label="一级分类" prop="typeId">
+          <el-input v-model="form.typeId" placeholder="请输入分类id" />
+          <el-select v-model="form.typeId" clearable style="width: 100%" class="filter-item" placeholder="请选择一级分类" >
+            <el-option v-for="(item,index) in infoList" :key="index" :label="item.typeName" :value="item.id" />
+          </el-select>
+        </el-form-item> -->
+        
+        <el-form-item label="分类名称" prop="secondName">
+          <el-input v-model="form2.secondName" placeholder="请输入二级分类" />
+        </el-form-item>
+        <el-form-item label="排序" prop="postion">
+          <el-input v-model="form2.postion" placeholder="请输入排序" />
+        </el-form-item>
+        <!-- <el-form-item label="状态">
+          <el-radio-group v-model="form.status">
+            <el-radio label="1">请选择字典生成</el-radio>
+          </el-radio-group>
+        </el-form-item> -->
+        <!-- <el-form-item label="图片" prop="urlPath">
+          <el-input v-model="form.urlPath" type="textarea" placeholder="请输入内容" />
+        </el-form-item> -->
+        <el-form-item label="类目图片" prop="picUrl">
+          <el-upload
+            :action="uploadPath"
+            :headers="headers"
+            :limit="1"
+            :file-list="imgsFileList"
+            :on-exceed="uploadOverrun"
+            :on-success="handleimgsUrl"
+            :on-remove="handleRemove"
+            multiple
+            accept=".jpg, .jpeg, .png, .gif"
+            list-type="picture-card"
+          >
+            <i class="el-icon-plus" />
+          </el-upload>
+        </el-form-item> 
+        <!-- <el-form-item label="0:否" prop="deleteFlag">
+          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
+        </el-form-item> -->
+        <!-- <el-form-item label="" prop="gmtCreate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtCreate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="gmtUpdate">
+          <el-date-picker clearable size="small" style="width: 200px"
+            v-model="form.gmtUpdate"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="选择">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入" />
+        </el-form-item>
+        <el-form-item label="" prop="adminId">
+          <el-input v-model="form.adminId" placeholder="请输入" />
+        </el-form-item> -->
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm2">确 定</el-button>
+        <el-button @click="cancel2">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 三级分类 -->
+    <el-dialog :title="title3" :visible.sync="open3" width="500px">
+      <el-form ref="form3" :model="form3" label-width="80px">
+        <el-form-item label="分类名称" prop="typeId">
+          <el-input v-model="form3.typeId" placeholder="请输入分类名称" />
+        </el-form-item>
+        <el-form-item label="排序" prop="postion">
+          <el-input v-model="form3.postion" placeholder="请输入排序" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm3">确 定</el-button>
+        <el-button @click="cancel3">取 消</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
+import { uploadPath } from '@/api/storage'
+import { getToken } from '@/utils/auth'
 import { listInfo, getInfo, delInfo, addInfo, updateInfo, exportInfo } from "@/api/gubi/info";
-
+import { listSecond, getSecond, delSecond, addSecond, updateSecond, exportSecond } from "@/api/gubi/second";
+import { listThree, getThree, delThree, addThree, updateThree, exportThree } from "@/api/gubi/three";
+import { listTransaction, getTransaction, delTransaction, addTransaction, updateTransaction, exportTransaction, typeList } from "@/api/gubi/transaction";
 export default {
   data() {
     return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 总条数
-      total: 0,
-      // 一级分类表格数据
-      infoList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        companyId: undefined,
-        typeName: undefined,
-        postion: undefined,
-        status: undefined,
-        deleteFlag: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        userId: undefined,
-        adminId: undefined
-      },
-      // 表单参数
+      selectOneType:{},
+      selectTwoType:{},
+      uploadPath,
       form: {},
-      // 表单校验
-      rules: {
-        deleteFlag: [
-          { required: true, message: "0:否(默认) 1:是不能为空", trigger: "blur" }
-        ],      }
+      form2: {},
+      form3: {},
+      search: "", //搜索分类
+      restaurants: [], //搜索列表
+      superList:[], //搜索列表
+      arrList:[], //搜索列表
+      searchChoose:null, //搜索框搜索对象
+      sort: "", //修改排序
+      // first:[],
+      first: [], //一级分类列表
+      second:[], //二级分类列表
+      tertiary:[], //三级分类列表
+      num:0, //二级分类
+      sum:0, //三级分类
+      loading:false,
+         // 弹出层标题
+         title: "",
+        // 是否显示弹出层
+        open: false,
+      
+        // 是否显示弹出层
+        open2: false,
+        title2: "",
+        open3: false,
+        title3: "",
+        imgsFileList:[]
     };
   },
-  created() {
-    this.getList();
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
+  created() {},
+  mounted() {
+    this.getList()
   },
   methods: {
-    /** 查询一级分类列表 */
-    getList() {
-      this.loading = true;
-      listInfo(this.queryParams).then(response => {
-        this.infoList = response.data.data.items
-        this.total = response.data.data.count
-        this.loading = false;
+    reset3() {
+      this.form3 = {
+        id:undefined,
+        companyId: "",
+        typeId: "",
+        secondId: "",
+        product: "",
+        number: "",
+        year: "",
+        face: "",
+        edition: "",
+        region: "",
+        grade: "",
+        highScores: "",
+        collection: "",
+        introduction: "",
+        postion: "",
+        status: "0",
+        urlPath: "",
+        deleteFlag: "",
+        gmtCreate: "",
+        gmtUpdate: "",
+        userId: "",
+        adminId: ""
+      };
+      this.resetForm("form3");
+    },
+    submitForm3: function() {debugger
+      this.form3.secondId = this.selectTwoType.id
+      this.$refs["form3"].validate(valid => {
+        if (valid) {
+          // this.form.urlPath = this.form.urlPath.toString()
+          if (this.form3.id != undefined) {
+            updateThree(this.form3).then(response => {
+              if (response.data) {
+                this.msgSuccess("修改成功");
+                this.open3 = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          } else {
+           
+            addThree(this.form3).then(response => {
+              if (response.data) {
+                this.msgSuccess("新增成功");
+                this.open3 = false;
+                this.getList();
+              } else {
+                this.msgError(response.msg);
+              }
+            });
+          }
+        }
       });
     },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
+    handleAdd3() {
+      this.reset3();
+      this.open3 = true;
+      this.title3 = "添加三级分类";
     },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: undefined,
-        companyId: undefined,
-        typeName: undefined,
-        postion: undefined,
-        status: "0",
-        deleteFlag: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        userId: undefined,
-        adminId: undefined
-      };
-      this.resetForm("form");
+    handleUpdate3(row) {
+      this.reset3();
+      this.imgsFileList3 = []
+      const id = row.id || this.ids.join(',')
+      getThree(id).then(response => {
+        this.form3 = response.data.data
+        this.open3 = true;
+        this.title3 = "修改三级分类";
+      });
     },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
+    handleDelete3(row) {
+      const ids = row.id || this.ids.join(',')
+      this.$confirm('是否确认删除分值信息编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delThree(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(function() {});
     },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
+    uploadOverrun: function() {
+      this.$message({
+        type: 'error',
+        message: '上传文件个数超出限制!最多上传2张图片!'
+      })
     },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
+    handleimgsUrl(response, file, fileList) {
+      if (response.errno === 200) {
+        this.form2.urlPath.push(response.url)
+      }
     },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加一级分类";
+    handleRemove: function(file, fileList) {
+      for (var i = 0; i < this.form2.urlPath.length; i++) {
+        // 这里存在两种情况
+        // 1. 如果所删除图片是刚刚上传的图片,那么图片地址是file.response.url
+        //    此时的file.url虽然存在,但是是本机地址,而不是远程地址。
+        // 2. 如果所删除图片是后台返回的已有图片,那么图片地址是file.url
+        var url
+        if (file.response === undefined) {
+          url = file.url
+        } else {
+          url = file.response.url
+        }
+
+        if (this.form2.urlPath[i] === url) {
+          this.form2.urlPath.splice(i, 1)
+        }
+      }
+      if (this.form2.urlPath.length > 0) {
+        this.form2.pictureUrl = this.form2.urlPath[0]
+      }
+    },
+    handleAdd2() {
+      this.reset2();
+      this.open2 = true;
+      this.title2 = "添加二级分类";
+      this.imgsFileList = []
     },
     /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
+    handleUpdate2(row) {
+      this.reset2();
+      this.imgsFileList = []
       const id = row.id || this.ids.join(',')
-      getInfo(id).then(response => {
-        this.form = response.data.data
-        this.open = true;
-        this.title = "修改一级分类";
+      getSecond(id).then(response => {
+        response.data.data.urlPath = response.data.data.urlPath.split(",")
+        for (let i = 0; i < response.data.data.urlPath.length; i++) {
+          this.imgsFileList.push({
+            url: response.data.data.urlPath[i]
+          })
+        }
+        this.form2 = response.data.data
+        this.open2 = true;
+        this.title2 = "修改二级分类";
+        console.log()
+        
+        
       });
     },
     /** 提交按钮 */
-    submitForm: function() {
-      this.$refs["form"].validate(valid => {
+    submitForm2: function() {debugger
+      this.form2.typeId = this.selectOneType.id
+      this.$refs["form2"].validate(valid => {
         if (valid) {
-          if (this.form.id != undefined) {
-            updateInfo(this.form).then(response => {
+          this.form2.urlPath = this.form2.urlPath.toString()
+          if (this.form2.id != undefined) {
+            updateSecond(this.form2).then(response => {
               if (response.data) {
                 this.msgSuccess("修改成功");
-                this.open = false;
+                this.open2 = false;
                 this.getList();
               } else {
                 this.msgError(response.msg);
               }
             });
           } else {
-            addInfo(this.form).then(response => {
+            
+            addSecond(this.form2).then(response => {
               if (response.data) {
                 this.msgSuccess("新增成功");
-                this.open = false;
+                this.open2 = false;
                 this.getList();
               } else {
                 this.msgError(response.msg);
@@ -362,32 +543,403 @@ export default {
       });
     },
     /** 删除按钮操作 */
-    handleDelete(row) {
+    handleDelete2(row) {
       const ids = row.id || this.ids.join(',')
-      this.$confirm('是否确认删除级分类编号为"' + ids + '"的数据项?', "警告", {
+      this.$confirm('是否确认删除级分类编号为"' + ids + '"的数据项?', "警告", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
-          return delInfo(ids);
+          return delSecond(ids);
         }).then(() => {
           this.getList();
           this.msgSuccess("删除成功");
         }).catch(function() {});
     },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有一级分类数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportInfo(queryParams);
-        }).then(response => {
-          this.download(response.data.data);
-        }).catch(function() {});
+    cancel2() {
+        this.open2 = false;
+        this.reset2();
+      },
+      cancel3() {
+        this.open3 = false;
+        this.reset3();
+      },
+      reset2() {
+      this.form2 = {
+        id: undefined,
+        companyId: undefined,
+        typeId: undefined,
+        secondName: undefined,
+        postion: undefined,
+        status: "0",
+        urlPath: [],
+        deleteFlag: undefined,
+        gmtCreate: undefined,
+        gmtUpdate: undefined,
+        userId: undefined,
+        adminId: undefined
+      };
+      this.resetForm("form2");
+    },
+       // 取消按钮
+       cancel() {
+        this.open = false;
+        this.reset();
+      },
+      /** 修改按钮操作 */
+      handleUpdate(row) {
+        this.reset();
+        const id = row.id || this.ids.join(',')
+        getInfo(id).then(response => {
+          this.form = response.data.data
+          this.open = true;
+          this.title = "修改一级分类";
+        });
+      },
+      /** 提交按钮 */
+      submitForm: function() {
+        this.$refs["form"].validate(valid => {
+          if (valid) {
+            if (this.form.id != undefined) {
+              updateInfo(this.form).then(response => {
+                if (response.data) {
+                  this.msgSuccess("修改成功");
+                  this.open = false;
+                  this.getList();
+                } else {
+                  this.msgError(response.msg);
+                }
+              });
+            } else {
+              addInfo(this.form).then(response => {
+                if (response.data) {
+                  this.msgSuccess("新增成功");
+                  this.open = false;
+                  this.getList();
+                } else {
+                  this.msgError(response.msg);
+                }
+              });
+            }
+          }
+        });
+      },
+      /** 删除按钮操作 */
+      handleDelete(row) {
+        console.log(123)
+        const ids = row.id || this.ids.join(',')
+        this.$confirm('是否确认删除一级分类编号为"' + ids + '"的数据项?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+            return delInfo(ids);
+          }).then(() => {
+            this.getList();
+            this.msgSuccess("删除成功");
+          }).catch(function() {});
+      },
+    reset() {
+        this.form = {
+          id: undefined,
+          companyId: undefined,
+          typeName: undefined,
+          postion: undefined,
+          status: "0",
+          deleteFlag: undefined,
+          gmtCreate: undefined,
+          gmtUpdate: undefined,
+          userId: undefined,
+          adminId: undefined
+        };
+        this.resetForm("form");
+      },
+    handleAdd() {
+        this.reset();
+        this.open = true;
+        this.title = "添加一级分类";
+      },
+    // 分类列表
+    getList() { //接口方法
+      // this.loading = true
+      // this.$api.amys.shopGroup.list().then(res => {
+      //   if (res.data && res.status == "00000") {
+      //     this.arrList = this.resFormat(res.data) //搜索一级分类
+      //     this.superList = this.arrList //分类列表
+      //     this.loading = false
+      //     this.restaurants = []; //搜索框列表
+      //     this.listType() //tab切换
+      //     this.searchList(res.data)//搜素框递归查找分类
+      //   } else {
+      //     this.$message.error(res.message);
+      //   }
+      // });
+      typeList().then(response => {
+        this.makeData(response.data.data)
+
+        // this.threeList = response.data.data.items
+        // for(let i =0;i<this.threeList.length;i++){
+        //   if(this.threeList[i].urlPath){
+        //     this.threeList[i].urlPath = this.threeList[i].urlPath.split(',')
+        // }else{
+        //   this.threeList[i].urlPath=[]
+        // }
+        // }
+        // this.total = response.data.data.count
+        // this.loading = false;
+      });
+      
+ 
+    },
+    makeData(val) {
+      for (let i = 0; i < val.length; i++) {
+        if (val[i].children) {
+          for (let j = 0; j < val[i].children.length; j++) {
+            let _obj = val[i].children[j]
+            _obj.typeName = val[i].children[j].secondName
+            val[i].children[j] = _obj
+            if (val[i].children[j].children) {
+              for (let k = 0; k < val[i].children[j].children.length; k++) {
+                let _obj1 = val[i].children[j].children[k]
+                _obj1.typeName = val[i].children[j].children[k].typeId
+                val[i].children[j].children[k] = _obj1
+              }
+            }
+          }
+        }
+      }
+      this.first = val
+      console.log(this.data)
+      this.arrList = this.resFormat(this.first) //搜索一级分类
+          this.superList = this.arrList //分类列表
+          this.loading = false
+          this.restaurants = []; //搜索框列表
+          this.listType() //tab切换
+          this.searchList(this.first)//搜素框递归查找分类
+    },
+     // 分类切换
+    tabClass(type,index){debugger
+      console.log(type,index)
+      if(type == '1'){
+        this.num = index
+        this.selectOneType = this.arrList[index]
+        console.log(this.selectOneType)
+      console.log(this.first,'一级分类')
+      }else{
+        this.sum = index
+      this.selectTwoType = this.second[index]
+      }
+      this.listType()
+    },
+    listType(){ //分类查找
+      debugger
+      this.first = this.arrList
+      console.log(this.first,'一级分类')
+      this.second = this.first[this.num] && this.first[this.num].children ? this.first[this.num].children: ''
+      console.log(this.second,'二级分类')
+      this.tertiary = this.second[this.sum] && this.second[this.sum].children ? this.second[this.sum].children :''
+      console.log(this.tertiary,'三级分类')
+    },
+    resFormat(arr) { //递归查找一级分类
+      return arr.map(item=>{
+        item.popover = false;
+        if(item.children && item.children.length > 0){
+            item.children = this.resFormat(item.children)
+        }
+        return item
+      })
+    },
+    //原程搜索分类
+    querySearchAsync(queryString, cb) {
+      var restaurants = this.restaurants;
+      var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;
+      this.searchChoose = null
+      cb(results);
+    },
+    createStateFilter(queryString) {
+      console.log(queryString)
+      return (state) => {
+        return state.value.toLowerCase().indexOf(queryString.toLowerCase()) >= 0;
+      };
+    },
+    searchList(arr,value){ //搜索时递归查找分类
+      arr.forEach(item => {
+        if(value){
+          item.value = `${value} > ${item.title}`
+        }else{
+          item.value = item.title
+        }
+        this.restaurants.push(item)
+        if(item.children){
+          return this.searchList(item.children,item.value)
+        }
+      });
+    },
+    handleSelect(e) { //搜索
+      this.searchChoose = e
+      this.getSearch()
+    },
+    getSearch() {
+      let value = null
+      let id = ''
+      if(this.search || this.searchChoose){
+        value = this.searchChoose
+        this.restaurants.forEach(item=>{
+          if(item.value === this.search){ //查找列表里和输入搜索框里的信息一样的执行
+            value = item
+          }
+        })
+        // 第二步 查找对应分类中的id
+        if(value){
+          if(value.level === 1){
+            id = value.id
+          }
+          if(value.level > 1){
+            id = value.previous
+          }
+          this.arrList = this.parentFormat(this.superList,id)
+          this.listType()
+          return
+        }
+      }
+      this.arrList = this.superList
+      this.listType()
+    },
+    parentFormat(arr,id){
+      console.log(arr,id)
+      if(!arr || !id){
+        return 
+      }
+      let arrs = []
+      // 递归查找上一级
+      function des(arr,data){
+        arr.forEach(item=>{
+          if(item.id === id){
+            if(data){
+              return arrs.push(data)
+            }
+            return arrs.push(item)
+          }
+          if(item.children){
+            return des(item.children,item)
+          }
+        })
+      }
+      des(arr,null)
+      return arrs
+    },
+    //排序
+    editSort() {},
+  },
+};
+</script>
+<style>
+  .el-scrollbar__wrap {
+  overflow-x: hidden !important;
+}
+</style>
+<style  scoped>
+ 
+.right-info-box {
+  width: calc(100%);
+}
+.warp_group {
+  background-color: #fff;
+  padding: 24px;
+}
+ 
+  .group_card {
+    background-color: #fff;
+    padding: 20px;
+    border-radius: 16px;
+  }
+.h_text {
+  color: #333;
+}
+.line_box {
+  width: 100%;
+  padding: 20px;
+  display: flex;
+  justify-content: space-between;
+}
+ .group_flex {
+    width: 33%;
+  }
+.group_item {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      background-color: #623ceb0d;
+      padding: 10px;
+      margin-right: 25px;
     }
+.group_content_box {
+  margin-right: 25px;
+  border: 1px solid #dcdfe6;
+  margin-top: 10px;
+}
+  .group_content_title {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    background-color: #623ceb0d;
+    padding: 0px 20px;
+    height: 48px;
+    font-size: 14px;
   }
-};
-</script>
+  .item_attr {
+    border-bottom: 1px solid #dcdfe6;
+    height: 48px;
+    line-height: 48px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+  }
+    .avtive{
+      border: 1px solid #637de6;
+    }
+    .item_name_box {
+      display: flex;
+      align-items: center;
+      margin-left: 20px;
+      width: 100%;
+    }
+    .img {
+      width: 56px;
+      height: 28px;
+    }
+ 
+  .item_name_title {
+    font-size: 14px;
+    margin-left: 5px;
+  }
+.sort_btn {
+  margin-top: 14px;
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+}
+.showIcon {
+  opacity: 0;
+  width: 14px;
+  height: 14px;
+  cursor: pointer;
+}
+  .showIcon:hover {
+    opacity: 1;
+  }
+ 
+.item_handle {
+  margin-right: 20px;
+  width: 35%;
+  text-align: right;
+}
+.handel_icon {
+  margin-left: 10px;
+  cursor: pointer;
+}
+.item_sort {
+  width: 15%;
+  text-align: center;
+}
+</style>

+ 9 - 8
unimall-admin/src/views/gubi/second/index.vue

@@ -186,8 +186,8 @@
     <pagination
       v-show="total>0"
       :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
+      :page.sync="queryParams.page"
+      :limit.sync="queryParams.limit"
       @pagination="getList"
     />
 
@@ -298,8 +298,8 @@ export default {
       open: false,
       // 查询参数
       queryParams: {
-        pageNum: 1,
-        pageSize: 10,
+        page: 1,
+        limit: 10,
         companyId: undefined,
         typeId: undefined,
         secondName: undefined,
@@ -375,10 +375,10 @@ export default {
     getList() {
       let that = this
       this.loading = true;
-      listInfo().then(response => {
+      listInfo().then(response => {debugger
         this.infoList = response.data.data.items
-        this.total = response.data.data.count
-        this.loading = false;
+        // this.total = response.data.data.count
+        // this.loading = false;
       });
       listSecond(this.queryParams).then(response => {
         this.secondList = response.data.data.items
@@ -421,7 +421,7 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
+      this.queryParams.page = 1;
       this.getList();
     },
     /** 重置按钮操作 */
@@ -440,6 +440,7 @@ export default {
       this.reset();
       this.open = true;
       this.title = "添加二级分类";
+      this.imgsFileList = []
     },
     /** 修改按钮操作 */
     handleUpdate(row) {

+ 6 - 0
unimall-admin/src/views/layout/components/Sidebar/index.vue

@@ -5,6 +5,7 @@
       :default-active="$route.path"
       :unique-opened="true"
       :collapse="isCollapse"
+      :default-openeds="openeds"
       mode="vertical"
       background-color="#304156"
       text-color="#bfcbd9"
@@ -21,6 +22,11 @@ import SidebarItem from './SidebarItem'
 
 export default {
   components: { SidebarItem },
+  data () {
+    return {
+      openeds: ['1'],
+    }
+},
   computed: {
     ...mapGetters([
       'permission_routers',