高敬炎 2 年 前
コミット
8d5b0ae0b7

+ 3 - 0
unimall-admin/build/webpack.base.conf.js

@@ -25,6 +25,9 @@ module.exports = {
   entry: {
     app: './src/main.js'
   },
+  externals: {
+    "CKEDITOR": "window.CKEDITOR"
+  },
   output: {
     path: config.build.assetsRoot,
     filename: '[name].js',

+ 1 - 0
unimall-admin/config/index.js

@@ -4,6 +4,7 @@
 
 const path = require('path')
 
+
 module.exports = {
     dev: {
         // Paths

+ 1 - 1
unimall-admin/index.html

@@ -9,10 +9,10 @@
 </head>
 
 <body>
+    <script src="/static/ckeditor/ckeditor.js" type="text/javascript"></script>
     <script src=<%=BASE_URL %>/tinymce4.7.5/tinymce.min.js >
     </script>
     <div id="app"></div>
     <!-- built files will be auto injected -->
 </body>
-
 </html>

+ 13 - 0
unimall-admin/package.json

@@ -21,6 +21,17 @@
     ]
   },
   "dependencies": {
+    "@ckeditor/ckeditor5-basic-styles": "^38.0.1",
+    "@ckeditor/ckeditor5-build-decoupled-document": "^38.0.1",
+    "@ckeditor/ckeditor5-dev-utils": "^37.0.1",
+    "@ckeditor/ckeditor5-dev-webpack-plugin": "^31.1.13",
+    "@ckeditor/ckeditor5-editor-classic": "^38.0.1",
+    "@ckeditor/ckeditor5-essentials": "^38.0.1",
+    "@ckeditor/ckeditor5-heading": "^38.0.1",
+    "@ckeditor/ckeditor5-link": "^38.0.1",
+    "@ckeditor/ckeditor5-paragraph": "^38.0.1",
+    "@ckeditor/ckeditor5-theme-lark": "^38.0.1",
+    "@ckeditor/ckeditor5-vue2": "^3.0.1",
     "@riophae/vue-treeselect": "0.0.37",
     "@tinymce/tinymce-vue": "1.1.0",
     "axios": "0.18.0",
@@ -35,6 +46,8 @@
     "jszip": "3.1.5",
     "normalize.css": "7.0.0",
     "nprogress": "0.2.0",
+    "postcss-loader": "^3.0.0",
+    "raw-loader": "^0.5.1",
     "screenfull": "3.3.3",
     "v-charts": "1.19.0",
     "vue": "2.5.17",

+ 5 - 0
unimall-admin/src/App.vue

@@ -15,4 +15,9 @@ export default{
   height: 70px;
   line-height: 70px;
 }
+.flex{
+  display:flex;
+  justify-content: space-between;
+  align-items: center;
+}
 </style>

+ 48 - 0
unimall-admin/src/api/cloud/articleManagement.js

@@ -71,3 +71,51 @@ export function exportManagement(query) {
     }
   })
 }
+
+// 文章分类列表
+export function listDict(query) {
+  return request({
+    method: 'get',
+    params: {
+      _gp: 'admin.unimall.cloudClassifyInfo',
+      _mt: 'list',
+      ...query
+    }
+  })
+}
+
+// 新增分类
+export function addDict(dict) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cloudClassifyInfo',
+      _mt: 'add',
+      cloudClassifyInfo:dict
+    }
+  })
+}
+
+// 编辑分类
+export function editDict(dict) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cloudClassifyInfo',
+      _mt: 'update',
+      cloudClassifyInfo:dict
+    }
+  })
+}
+
+// 删除分类
+export function delDict(id) {
+  return request({
+    method: 'post',
+    params: {
+      _gp: 'admin.unimall.cloudClassifyInfo',
+      _mt: 'delete',
+      id: id
+    }
+  })
+}

+ 5 - 5
unimall-admin/src/api/cloud/productManagement.js

@@ -5,7 +5,7 @@ export function listProductManagement(query) {
   return request({
     method: 'get',
     params: {
-      _gp: 'admin.cloud.productManagement',
+      _gp: 'admin.unimall.productManagement',
       _mt: 'list',
       ...query
     }
@@ -17,7 +17,7 @@ export function getProductManagement(id) {
   return request({
     method: 'get',
     params: {
-      _gp: 'admin.cloud.productManagement',
+      _gp: 'admin.unimall.productManagement',
       _mt: 'get',
       id: id
     }
@@ -29,7 +29,7 @@ export function addProductManagement(data) {
   return request({
     method: 'post',
     params: {
-      _gp: 'admin.cloud.productManagement',
+      _gp: 'admin.unimall.productManagement',
       _mt: 'add',
       productManagement: data
     }
@@ -41,7 +41,7 @@ export function updateProductManagement(data) {
   return request({
     method: 'post',
     params: {
-      _gp: 'admin.cloud.productManagement',
+      _gp: 'admin.unimall.productManagement',
       _mt: 'update',
       productManagement: data
     }
@@ -53,7 +53,7 @@ export function delProductManagement(id) {
   return request({
     method: 'post',
     params: {
-      _gp: 'admin.cloud.productManagement',
+      _gp: 'admin.unimall.productManagement',
       _mt: 'delete',
       id: id
     }

+ 0 - 438
unimall-admin/src/views/address/index.vue

@@ -1,438 +0,0 @@
-<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="客户id" prop="cusId">
-        <el-input
-          v-model="queryParams.cusId"
-          placeholder="请输入客户id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="收货人姓名" prop="consigneeName">
-        <el-input
-          v-model="queryParams.consigneeName"
-          placeholder="请输入收货人姓名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="手机号" prop="phone">
-        <el-input
-          v-model="queryParams.phone"
-          placeholder="请输入手机号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="所在地区" prop="location">
-        <el-input
-          v-model="queryParams.location"
-          placeholder="请输入所在地区"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="详细地址" prop="address">
-        <el-input
-          v-model="queryParams.address"
-          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="['unimall:address: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="['unimall:address: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="['unimall:address:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-permission="['unimall:address:export']"
-        >导出</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="addressList" @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="客户id" align="center" prop="cusId" />
-      <el-table-column label="收货人姓名" align="center" prop="consigneeName" />
-      <el-table-column label="手机号" align="center" prop="phone" />
-      <el-table-column label="所在地区" align="center" prop="location" />
-      <el-table-column label="详细地址" align="center" prop="address" />
-      <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="['unimall:address:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-permission="['unimall:address: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"
-    />
-
-    <!-- 添加或修改收货地址对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="" prop="companyId">
-          <el-input v-model="form.companyId" placeholder="请输入" />
-        </el-form-item>
-        <el-form-item label="客户id" prop="cusId">
-          <el-input v-model="form.cusId" placeholder="请输入客户id" />
-        </el-form-item>
-        <el-form-item label="收货人姓名" prop="consigneeName">
-          <el-input v-model="form.consigneeName" placeholder="请输入收货人姓名" />
-        </el-form-item>
-        <el-form-item label="手机号" prop="phone">
-          <el-input v-model="form.phone" placeholder="请输入手机号" />
-        </el-form-item>
-        <el-form-item label="所在地区" prop="location">
-          <el-input v-model="form.location" placeholder="请输入所在地区" />
-        </el-form-item>
-        <el-form-item label="详细地址" prop="address">
-          <el-input v-model="form.address" 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="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="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-// import { listAddress, getAddress, delAddress, addAddress, updateAddress, exportAddress } from "@/api/market/address";
-
-export default {
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 总条数
-      total: 0,
-      // 收货地址表格数据
-      addressList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        companyId: undefined,
-        cusId: undefined,
-        consigneeName: undefined,
-        phone: undefined,
-        location: undefined,
-        address: undefined,
-        status: undefined,
-        deleteFlag: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        userId: undefined,
-        adminId: undefined
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-        deleteFlag: [
-          { required: true, message: "0:否(默认) 1:是不能为空", trigger: "blur" }
-        ],      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 查询收货地址列表 */
-    getList() {
-      this.loading = true;
-      listAddress(this.queryParams).then(response => {
-        this.addressList = response.data.data.items
-        this.total = response.data.data.count
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: undefined,
-        companyId: undefined,
-        cusId: undefined,
-        consigneeName: undefined,
-        phone: undefined,
-        location: undefined,
-        address: undefined,
-        status: "0",
-        deleteFlag: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        userId: undefined,
-        adminId: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加收货地址";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids.join(',')
-      getAddress(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) {
-            updateAddress(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess("修改成功");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addAddress(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess("新增成功");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids.join(',')
-      this.$confirm('是否确认删除收货地址编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delAddress(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(function() {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有收货地址数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportAddress(queryParams);
-        }).then(response => {
-          this.download(response.data.data);
-        }).catch(function() {});
-    }
-  }
-};
-</script>

+ 0 - 460
unimall-admin/src/views/advertisement/index.vue

@@ -1,460 +0,0 @@
-<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="advertisementName">
-        <el-input
-          v-model="queryParams.advertisementName"
-          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
-          v-permission="['market:advertisement:add']"
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          v-permission="['market:advertisement:edit']"
-          :disabled="single"
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          @click="handleUpdate"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          v-permission="['market:advertisement:remove']"
-          :disabled="multiple"
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          @click="handleDelete"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          v-permission="['market:advertisement:export']"
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-        >导出</el-button>
-      </el-col>
-    </el-row>
-
-    <el-table v-loading="loading" :data="advertisementList" @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="advertisementName" />
-      <el-table-column label="图片" align="center" prop="url" width="180">
-        <template slot-scope="scope">
-          <img v-for="(item,index) in scope.row.url" :src="item" :key="index" alt="" width="40">
-        </template>
-      </el-table-column>
-      <!-- <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
-            v-permission="['market:advertisement:edit']"
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-          >修改</el-button>
-          <el-button
-            v-permission="['market:advertisement:remove']"
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-          >删除</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"
-    />
-
-    <!-- 添加或修改广告信息对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <!-- <el-form-item label="" prop="companyId">
-          <el-input v-model="form.companyId" placeholder="请输入" />
-        </el-form-item> -->
-        <el-form-item label="广告名称" prop="advertisementName">
-          <el-input v-model="form.advertisementName" placeholder="请输入广告名称" />
-        </el-form-item>
-        <el-form-item label="图片" prop="url">
-          <!-- <el-input v-model="form.url" type="textarea" placeholder="请输入内容" /> -->
-          <el-upload
-            :limit="6"
-            :http-request="function(file){return uploadSectionFile(file)}"
-            :on-remove="handleRemove2"
-            :file-list="form.imgList"
-            action="#"
-            list-type="picture-card">
-            <i class="el-icon-plus" />
-          </el-upload>
-        </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="0:否" prop="deleteFlag">
-          <el-input v-model="form.deleteFlag" placeholder="请输入0:否" />
-        </el-form-item> -->
-        <!-- <el-form-item label="" prop="gmtCreate">
-          <el-date-picker
-            v-model="form.gmtCreate"
-            clearable
-            size="small"
-            style="width: 200px"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择"/>
-        </el-form-item>
-        <el-form-item label="" prop="gmtUpdate">
-          <el-date-picker
-            v-model="form.gmtUpdate"
-            clearable
-            size="small"
-            style="width: 200px"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择"/>
-        </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="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-// import { listAdvertisement, getAdvertisement, delAdvertisement, addAdvertisement, updateAdvertisement, exportAdvertisement } from '@/api/market/advertisement'
-import { uploadPath, createStorage } from '@/api/storage'
-export default {
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 总条数
-      total: 0,
-      // 广告信息表格数据
-      advertisementList: [],
-      // 弹出层标题
-      title: '',
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        companyId: undefined,
-        advertisementName: undefined,
-        url: undefined,
-        status: undefined,
-        deleteFlag: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        userId: undefined,
-        adminId: undefined
-      },
-      // 表单参数
-      form: {
-        url: []
-      },
-      // 表单校验
-      rules: {
-        deleteFlag: [
-          { required: true, message: '0:否(默认) 1:是不能为空', trigger: 'blur' }
-        ] }
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-    // 图片上传
-    uploadSectionFile(params, imgCode, index) { debugger
-      // FormData 对象
-      const file = params.file
-      const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg']
-      const isJPG = typeArr.indexOf(file.type) !== -1
-      const isLt3M = file.size / 1024 / 1024 < 5
-      if (!isJPG) {
-        this.$message.error('请上传图片格式!')
-        return
-      }
-      if (!isLt3M) {
-        this.$message.error('上传图片大小不能超过 5MB!')
-        return
-      }
-      var formData = new FormData()
-      formData.append('file', file)
-      // formData.append('code',imgCode)
-      createStorage(formData).then(res => {
-        console.log(this.form)
-        if (res.status == '200') {
-          this.form.url.push(res.data.url)
-        }
-      })
-    },
-    handleRemove2: function (file, fileList) { debugger
-      for (var i = 0; i < this.form.url.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.form.url[i] === url) {
-          this.form.url.splice(i, 1)
-        }
-      }
-    },
-    /** 查询广告信息列表 */
-    getList() {
-      this.loading = true
-      listAdvertisement(this.queryParams).then(response => {
-        this.advertisementList = response.data.data.items
-        this.total = response.data.data.count
-        this.loading = false
-        for (let i = 0; i<this.advertisementList.length; i++) {
-          this.advertisementList[i].url =this.advertisementList[i].url.split(',')
-        }
-      })
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false
-      this.reset()
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: undefined,
-        companyId: undefined,
-        advertisementName: undefined,
-        url: [],
-        status: '0',
-        deleteFlag: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        userId: undefined,
-        adminId: undefined
-      }
-      this.resetForm('form')
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1
-      this.getList()
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm('queryForm')
-      this.handleQuery()
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset()
-      this.open = true
-      this.title = '添加广告信息'
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset()
-      const id = row.id || this.ids.join(',')
-      getAdvertisement(id).then(response => {
-        this.form = response.data.data
-        this.form.imgList = []
-        const _imgList = response.data.data.url.split(',')
-        this.form.url = response.data.data.url.split(',')
-        for (let i = 0; i<_imgList.length; i++) {
-          this.form.imgList.push({
-            url: _imgList[i]
-          })
-        }
-        this.open = true
-        this.title = '修改广告信息'
-      })
-    },
-    /** 提交按钮 */
-    submitForm: function() {
-      this.$refs['form'].validate(valid => {
-        this.form.url = this.form.url.toString()
-        delete this.form.imgList
-        console.log(this.from)
-        if (valid) {
-          if (this.form.id != undefined) {
-            updateAdvertisement(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess('修改成功')
-                this.open = false
-                this.getList()
-              } else {
-                this.msgError(response.msg)
-              }
-            })
-          } else {
-            addAdvertisement(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess('新增成功')
-                this.open = false
-                this.getList()
-              } else {
-                this.msgError(response.msg)
-              }
-            })
-          }
-        }
-      })
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids.join(',')
-      this.$confirm('是否确认删除广告信息编号为"' + ids + '"的数据项?', '警告', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        return delAdvertisement(ids)
-      }).then(() => {
-        this.getList()
-        this.msgSuccess('删除成功')
-      }).catch(function() {})
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams
-      this.$confirm('是否确认导出所有广告信息数据项?', '警告', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(function() {
-        return exportAdvertisement(queryParams)
-      }).then(response => {
-        this.download(response.data.data)
-      }).catch(function() {})
-    }
-  }
-}
-</script>

+ 204 - 224
unimall-admin/src/views/articleManagement/index.vue

@@ -1,155 +1,129 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="文章标题" prop="articleTitle">
-        <el-input
-          v-model="queryParams.articleTitle"
-          placeholder="请输入文章标题"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="封面" prop="coverImage">
-        <el-input
-          v-model="queryParams.coverImage"
-          placeholder="请输入封面"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="分类" prop="classification">
-        <el-input
-          v-model="queryParams.classification"
-          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="" 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="deleteFlag">
-        <el-input
-          v-model="queryParams.deleteFlag"
-          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-row  class="mb8">
+      <el-col :span="4">
+        <span>文章分类</span>
         <el-button
           type="primary"
           icon="el-icon-plus"
           size="mini"
-          @click="handleAdd"
-          v-permission="['unimall:management: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="['unimall:management:edit']"
-        >修改</el-button>
+          @click="handleAddDictOpen"
+        >新增分类</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="['unimall:management:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
+      
+      <el-col style="text-align:right;" :span="20">
+        <!-- <el-button
           type="warning"
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
           v-permission="['unimall:management:export']"
-        >导出</el-button>
+        >导入文章</el-button> -->
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:management:add']"
+        >新增文章</el-button>
       </el-col>
     </el-row>
-
-    <el-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
-      <el-table-column type="index" label="序号">
-        <template solt-scope="scope">
-          <span v-if="scope.$index < 9">{{ scope.$index + 1 }}</span>
-          <span v-else>{{ scope.$index + 1 }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column type="selection" width="55" align="center" />
-      <!-- <el-table-column label="" align="center" prop="id" /> -->
-      <el-table-column label="文章标题" align="center" prop="articleTitle" />
-      <el-table-column label="文章简介" align="center" prop="articleIntroduction" />
-      <el-table-column label="封面" align="center" prop="coverImage" />
-      <el-table-column label="分类" align="center" prop="classification" />
-      <el-table-column label="文章模板" align="center" prop="articleTemplate" />
-      <el-table-column label="状态" align="center" prop="status" />
-      <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="deleteFlag" />
-      <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="['unimall:management:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-permission="['unimall:management:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
+    <el-row style="margin-top:20px;">
+      <el-col :span="4">
+        <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick">
+          <span  class="custom-tree-node" slot-scope="{ node, data }">
+            <span>{{ node.label }}</span>
+            <span v-if="node.label!='全部分类'&&node.label!='未分类'">
+              <el-button
+                type="text"
+                size="mini"
+                @click="() => append(data)">
+                编辑
+              </el-button>
+              <el-button
+                type="text"
+                size="mini"
+                @click="() => remove(node, data)">
+                删除
+              </el-button>
+            </span>
+          </span>
+        </el-tree>
+        <!-- <el-dropdown>
+          <span class="el-dropdown-link">
+            全部分类<i class="el-icon-arrow-down el-icon--right"></i>
+          </span>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item>黄金糕</el-dropdown-item>
+            <el-dropdown-item>狮子头</el-dropdown-item>
+            <el-dropdown-item>螺蛳粉</el-dropdown-item>
+            <el-dropdown-item disabled>双皮奶</el-dropdown-item>
+            <el-dropdown-item divided>蚵仔煎</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown> -->
+      </el-col>
+      <el-col :span="20">
+        <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+          <el-form-item label="全部状态" prop="status">
+            <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+              <el-option label="待发布" value="待发布" />
+              <el-option label="已上线" value="已上线" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="文章标题" prop="articleTitle">
+            <el-input
+              v-model="queryParams.articleTitle"
+              placeholder="请输入文章标题"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="分类" prop="classification">
+            <el-input
+              v-model="queryParams.classification"
+              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-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
+          <el-table-column label="序号" align="center" prop="tableId" width="50px" />
+          <!-- <el-table-column label="" align="center" prop="id" /> -->
+          <el-table-column label="文章标题" align="center" prop="articleTitle" />
+          <el-table-column label="分类" align="center" prop="classification" />
+          <el-table-column label="状态" align="center" prop="status" />
+          <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" 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="['unimall:management:edit']"
+              >修改</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-col>
+    </el-row>
+    
     
     <pagination
       v-show="total>0"
@@ -159,59 +133,18 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改文章管理信息对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="文章标题" prop="articleTitle">
-          <el-input v-model="form.articleTitle" placeholder="请输入文章标题" />
-        </el-form-item>
-        <el-form-item label="文章简介" prop="articleIntroduction">
-          <el-input v-model="form.articleIntroduction" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label="封面" prop="coverImage">
-          <el-input v-model="form.coverImage" placeholder="请输入封面" />
-        </el-form-item>
-        <el-form-item label="分类" prop="classification">
-          <el-input v-model="form.classification" placeholder="请输入分类" />
-        </el-form-item>
-        <el-form-item label="文章模板" prop="articleTemplate">
-          <el-input v-model="form.articleTemplate" type="textarea" 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="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="deleteFlag">
-          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
-        </el-form-item>
-      </el-form>
+    <el-dialog :title="title" :visible.sync="opendict" width="500px">
+      <el-input v-model="dict.classifyName" placeholder="请输入分类" />
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="handleAddDict">确 定</el-button>
+        <el-button @click="opendict = false">取 消</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { listManagement, getManagement, delManagement, addManagement, updateManagement, exportManagement } from "@/api/cloud/articleManagement";
+import { listDict, addDict, listManagement, editDict, delDict, delManagement, addManagement, updateManagement, exportManagement } from "@/api/cloud/articleManagement";
 
 export default {
   data() {
@@ -226,12 +159,17 @@ export default {
       multiple: true,
       // 总条数
       total: 0,
+      dict:{
+        classifyType:'article_type',
+      },
+      title:'新增分类',
       // 文章管理信息表格数据
       managementList: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
       open: false,
+      opendict:false,
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -246,6 +184,14 @@ export default {
         gmtUpdate: undefined,
         deleteFlag: undefined
       },
+      data: [{
+          label: '全部分类',
+          children: [{label: '未分类'},]
+        }],
+        defaultProps: {
+          children: 'children',
+          label: 'label'
+        },
       // 表单参数
       form: {},
       // 表单校验
@@ -254,18 +200,55 @@ export default {
           { required: true, message: "不能为空", trigger: "blur" }
         ],        gmtUpdate: [
           { required: true, message: "不能为空", trigger: "blur" }
-        ],        deleteFlag: [
-          { required: true, message: "删除标识不能为空", trigger: "blur" }
-        ]      }
+        ],         
+      }
     };
   },
   created() {
     this.getList();
   },
   methods: {
+    // 编辑分类
+    append(data) {
+      this.dict.id=data.id
+      this.title='编辑分类'
+      this.opendict=true
+        
+      },
+      // 删除分类
+      remove(node, data) {
+        this.$confirm('是否确认删除文章管理分类"' + data.label + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          delDict(data.id).then(response => {
+          if (response.data) {
+            this.msgSuccess("删除分类成功");
+            this.getList()
+          } else {
+            this.msgError(response.msg);
+          }
+        });
+        }).catch(function() {});
+       
+        // const parent = node.parent;
+        // const children = parent.data.children || parent.data;
+        // const index = children.findIndex(d => d.id === data.id);
+        // children.splice(index, 1);
+      },
     /** 查询文章管理信息列表 */
     getList() {
       this.loading = true;
+      listDict({ classifyType:'article_type'}).then(response => {
+        var data=response.data.data.items
+        this.data[0].children=[{label: '未分类'},]
+        for (let i = 0; i < data.length; i++) {
+          data[i].label=data[i].classifyName
+          this.data[0].children.push(data[i])
+          
+        }
+      });
       listManagement(this.queryParams).then(response => {
         this.managementList = response.data.data.items
         this.total = response.data.data.count
@@ -309,49 +292,46 @@ export default {
       this.single = selection.length!=1
       this.multiple = !selection.length
     },
+    handleAddDictOpen() {
+      this.title='新增分类'
+      this.opendict=true
+    },
+    handleAddDict() {
+      if(this.title=='新增分类'){
+        addDict(this.dict).then(response => {
+          if (response.data) {
+            this.msgSuccess("新增分类成功");
+            this.opendict=false
+            this.getList()
+          } else {
+            this.msgError(response.msg);
+          }
+        });
+      }else{
+        editDict(this.dict).then(response => {
+          if (response.data) {
+            this.msgSuccess("编辑分类成功");
+            this.opendict=false
+            this.getList()
+          } else {
+            this.msgError(response.msg);
+          }
+        });
+      }
+      
+    },
+    
     /** 新增按钮操作 */
     handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加文章管理信息";
+      this.$router.push({name:'addArtideManagement'})
+      // this.reset();
+      // this.open = true;
+      // this.title = "添加文章管理信息";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids.join(',')
-      getManagement(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) {
-            updateManagement(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess("修改成功");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addManagement(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess("新增成功");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
+      this.$router.push({name:'artideEdit',query:{'Id':row.id}})
+      
     },
     /** 删除按钮操作 */
     handleDelete(row) {

+ 78 - 72
unimall-admin/src/views/carouselManagement/index.vue

@@ -10,11 +10,7 @@
           @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="" prop="gmtCreate">
         <el-date-picker clearable size="small" style="width: 200px"
           v-model="queryParams.gmtCreate"
@@ -23,23 +19,6 @@
           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="deleteFlag">
-        <el-input
-          v-model="queryParams.deleteFlag"
-          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>
@@ -76,15 +55,6 @@
           v-permission="['cloud:carouselManagement:remove']"
         >删除</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-permission="['cloud:carouselManagement:export']"
-        >导出</el-button>
-      </el-col>
     </el-row>
 
     <el-table v-loading="loading" :data="carouselManagementList" @selection-change="handleSelectionChange">
@@ -92,18 +62,11 @@
       <el-table-column label="" align="center" prop="id" />
       <el-table-column label="标题" align="center" prop="title" />
       <el-table-column label="轮播图片" align="center" prop="url" />
-      <el-table-column label="状态" align="center" prop="status" />
       <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="deleteFlag" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -138,32 +101,30 @@
         <el-form-item label="标题" prop="title">
           <el-input v-model="form.title" placeholder="请输入标题" />
         </el-form-item>
-        <el-form-item label="轮播图片" prop="url">
-          <el-input v-model="form.url" type="textarea" placeholder="请输入内容" />
+        <el-form-item label="副标题" prop="title">
+          <el-input v-model="form.deputyTitle" placeholder="请输入副标题" />
         </el-form-item>
-        <el-form-item label="状态">
-          <el-radio-group v-model="form.status">
-            <el-radio label="1">请选择字典生成</el-radio>
+        <el-form-item label="语言" prop="title">
+          <el-radio-group v-model="form.language">
+            <el-radio-button label="中文"></el-radio-button>
+            <el-radio-button label="English"></el-radio-button>
           </el-radio-group>
         </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 label="分类" prop="title">
+          <el-input v-model="form.classify" placeholder="请输入分类" />
         </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="deleteFlag">
-          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
+        <el-form-item label="轮播图片" prop="url">
+          <el-upload
+            ref="mYupload"
+            class="avatar-uploader"
+            :headers="headers"
+            :action="uploadPath"
+            :show-file-list="false"
+            :on-success="uploadSuccessHandle"
+            :before-upload="onBeforeUpload">
+            <img v-if="form.url" :src="form.url" class="avatar">
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -176,10 +137,12 @@
 
 <script>
 import { listCarouselManagement, getCarouselManagement, delCarouselManagement, addCarouselManagement, updateCarouselManagement, exportCarouselManagement } from "@/api/cloud/carouselManagement";
-
+import { uploadPath } from '@/api/storage'
+  import { getToken } from '@/utils/auth'
 export default {
   data() {
     return {
+      uploadPath,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -210,22 +173,37 @@ export default {
       // 表单参数
       form: {},
       // 表单校验
-      rules: {
-        url: [
-          { required: true, message: "轮播图片不能为空", trigger: "blur" }
-        ],        gmtCreate: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],        gmtUpdate: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],        deleteFlag: [
-          { required: true, message: "删除标识不能为空", trigger: "blur" }
-        ]      }
+     
     };
   },
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
   created() {
     this.getList();
   },
   methods: {
+    // 上传图片了处理图片
+    uploadSuccessHandle(e, file) {
+        const that = this
+        this.form.url = e.url
+      },
+      onBeforeUpload(file) {
+        const isIMAGE = file.type === 'image/jpeg' || 'image/gif' || 'image/png' || 'image/jpg'
+        const isLt1M = file.size / 1024 / 1024 < 1
+
+        if (!isIMAGE) {
+          this.$message.error('上传文件只能是图片格式!')
+        }
+        if (!isLt1M) {
+          this.$message.error('上传文件大小不能超过 1MB!')
+        }
+        return isIMAGE && isLt1M
+      },
     /** 查询轮播管理信息列表 */
     getList() {
       this.loading = true;
@@ -342,4 +320,32 @@ export default {
     }
   }
 };
-</script>
+</script>
+<style lang="scss" scoped>
+  .avatar-uploader{ 
+    /deep/.el-upload {
+      border: 1px dashed #ccc;
+      border-radius: 6px;
+      cursor: pointer;
+      position: relative;
+      overflow: hidden;
+    }
+  }
+   
+  .avatar-uploader .el-upload:hover {
+    border-color: #409EFF;
+  }
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 183px;
+    height: 183px;
+    line-height: 183px;
+    text-align: center;
+  }
+  .avatar {
+    width: 183px;
+    height: 183px;
+    display: block;
+  }
+  </style>

+ 0 - 401
unimall-admin/src/views/info/index.vue

@@ -1,401 +0,0 @@
-<template>
-  <div class="app-container">
-   <!--  <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="发起人id" prop="sendId">
-        <el-input
-          v-model="queryParams.sendId"
-          placeholder="请输入发起人id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="接收人id" prop="receiveId">
-        <el-input
-          v-model="queryParams.receiveId"
-          placeholder="请输入接收人id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="发起人名片id" prop="sendCarId">
-        <el-input
-          v-model="queryParams.sendCarId"
-          placeholder="请输入发起人名片id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="接收人名片id" prop="receiveCarId">
-        <el-input
-          v-model="queryParams.receiveCarId"
-          placeholder="请输入接收人名片id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="圈子名称" prop="circleName">
-        <el-input
-          v-model="queryParams.circleName"
-          placeholder="请输入圈子名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-        <el-form-item label="状态(1已接受3已拒绝5已过期)" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择状态(1已接受3已拒绝5已过期)" clearable size="small">
-          <el-option label="请选择字典生成" value="" />
-        </el-select>
-      </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="deleteFlag">
-        <el-input
-          v-model="queryParams.deleteFlag"
-          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="['unimall: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="['unimall: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="['unimall: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="['unimall: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="发起人id" align="center" prop="sendId" /> -->
-      <el-table-column label="接收人id" align="center" prop="receiveId" />
-      <el-table-column label="接收人昵称" align="center" prop="receiveName" />
-      
-      <el-table-column label="标题" align="center" prop="newsTitle" />
-      <el-table-column label="内容" align="center" prop="newsContent" />
-      <!-- <el-table-column label="发起人名片id" align="center" prop="sendCarId" />
-      <el-table-column label="接收人名片id" align="center" prop="receiveCarId" /> -->
-      <!-- <el-table-column label="圈子名称" align="center" prop="circleName" /> -->
-      <!-- <el-table-column label="状态(1已接受3已拒绝5已过期)" align="center" prop="status" />
-      <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="deleteFlag" /> -->
-      <!-- <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="['unimall:info:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-permission="['unimall:info:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column> -->
-    </el-table>
-    
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.page"
-      :limit.sync="queryParams.limit"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改名片交换对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="发起人id" prop="sendId">
-          <el-input v-model="form.sendId" placeholder="请输入发起人id" />
-        </el-form-item>
-        <el-form-item label="接收人id" prop="receiveId">
-          <el-input v-model="form.receiveId" placeholder="请输入接收人id" />
-        </el-form-item>
-        <el-form-item label="发起人名片id" prop="sendCarId">
-          <el-input v-model="form.sendCarId" placeholder="请输入发起人名片id" />
-        </el-form-item>
-        <el-form-item label="接收人名片id" prop="receiveCarId">
-          <el-input v-model="form.receiveCarId" placeholder="请输入接收人名片id" />
-        </el-form-item>
-        <el-form-item label="圈子名称" prop="circleName">
-          <el-input v-model="form.circleName" placeholder="请输入圈子名称" />
-        </el-form-item>
-        <el-form-item label="状态(1已接受3已拒绝5已过期)">
-          <el-radio-group v-model="form.status">
-            <el-radio label="1">请选择字典生成</el-radio>
-          </el-radio-group>
-        </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="deleteFlag">
-          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-// import { listInfo, getInfo, delInfo, addInfo, updateInfo, exportInfo } from "@/api/card/info";
-
-export default {
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 总条数
-      total: 0,
-      // 名片交换表格数据
-      infoList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        page: 1,
-        limit: 10,
-        sendId: undefined,
-        receiveId: undefined,
-        sendCarId: undefined,
-        receiveCarId: undefined,
-        circleName: undefined,
-        status: undefined,
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        deleteFlag: undefined
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-        gmtCreate: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],        gmtUpdate: [
-          { required: true, message: "不能为空", trigger: "blur" }
-        ],        deleteFlag: [
-          { required: true, message: "删除标识不能为空", trigger: "blur" }
-        ]      }
-    };
-  },
-  created() {
-    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;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: undefined,
-        sendId: undefined,
-        receiveId: undefined,
-        sendCarId: undefined,
-        receiveCarId: undefined,
-        circleName: undefined,
-        status: "0",
-        gmtCreate: undefined,
-        gmtUpdate: undefined,
-        deleteFlag: undefined
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.page = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!=1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加名片交换";
-    },
-    /** 修改按钮操作 */
-    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) {
-      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() {});
-    },
-    /** 导出按钮操作 */
-    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() {});
-    }
-  }
-};
-</script>

+ 1 - 1
unimall-admin/src/views/login/index.vue

@@ -11,7 +11,7 @@
           class="img"
           src="@/assets/avatar.png"
           alt="">
-        <p class="title">名片后台登录</p>
+        <p class="title">后台系统登录</p>
       </div>
       <div class="login-border">
         <div class="login-main">

+ 2 - 63
unimall-admin/src/views/messageManagement/index.vue

@@ -10,15 +10,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="手机号" prop="phone">
-        <el-input
-          v-model="queryParams.phone"
-          placeholder="请输入手机号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
       <el-form-item label="电子邮件" prop="email">
         <el-input
           v-model="queryParams.email"
@@ -27,36 +18,6 @@
           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="" 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="deleteFlag">
-        <el-input
-          v-model="queryParams.deleteFlag"
-          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>
@@ -65,7 +26,7 @@
     </el-form>
 
     <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
+      <!-- <el-col :span="1.5">
         <el-button
           type="primary"
           icon="el-icon-plus"
@@ -73,7 +34,7 @@
           @click="handleAdd"
           v-permission="['cloud:messageManagement:add']"
         >新增</el-button>
-      </el-col>
+      </el-col> -->
       <el-col :span="1.5">
         <el-button
           type="success"
@@ -94,36 +55,14 @@
           v-permission="['cloud:messageManagement:remove']"
         >删除</el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-permission="['cloud:messageManagement:export']"
-        >导出</el-button>
-      </el-col>
     </el-row>
 
     <el-table v-loading="loading" :data="messageManagementList" @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="name" />
-      <el-table-column label="手机号" align="center" prop="phone" />
       <el-table-column label="电子邮件" align="center" prop="email" />
       <el-table-column label="留言内容" align="center" prop="content" />
-      <el-table-column label="状态" align="center" prop="status" />
-      <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="deleteFlag" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button

+ 0 - 167
unimall-admin/src/views/operation/appraise.vue

@@ -1,167 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 查询和其他操作 -->
-    <div class="filter-container">
-      <!--<el-input v-model="listQuery.userId" clearable class="filter-item" style="width: 200px;" placeholder="请输入用户ID"/>-->
-      <el-input
-        v-model="listQuery.id"
-        clearable
-        class="filter-item"
-        style="width: 200px;"
-        placeholder="评论ID"
-      />
-      <el-input
-        v-model="listQuery.userName"
-        clearable
-        style="width: 200px"
-        class="filter-item"
-        placeholder="用户姓名"
-      />
-      <el-input
-        v-model="listQuery.spuName"
-        clearable
-        style="width: 200px"
-        class="filter-item"
-        placeholder="商品名称"
-      />
-      <el-input
-        v-model="listQuery.content"
-        clearable
-        style="width: 200px"
-        class="filter-item"
-        placeholder="评论内容"
-      />
-      <el-button
-        v-permission="['operation:appraise:query']"
-        clearable
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="handleFilter"
-      >查找</el-button>
-    </div>
-
-    <!-- 查询结果 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      size="small"
-      element-loading-text="正在查询中。。。"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="评论编号" prop="id" />
-
-      <el-table-column align="center" label="评论内容" width="300" prop="content" />
-      <el-table-column align="center" label="评论分数" prop="score" />
-
-      <el-table-column align="center" label="用户ID" prop="userId" />
-      <el-table-column align="center" label="用户昵称" prop="userNickName" />
-      <el-table-column align="center" label="订单ID" prop="orderId" />
-      <el-table-column align="center" label="商品ID" prop="spuId" />
-      <el-table-column align="center" label="商品名称" prop="spuTitle" />
-      <el-table-column align="center" label="评论时间" prop="gmtCreate">
-        <template slot-scope="scope">{{ scope.row.gmtCreate | formatTime }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            v-permission="['operation:appraise:delete']"
-            type="danger"
-            size="mini"
-            @click="handleDelete(scope.row)"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="listQuery.pageNo"
-      :limit.sync="listQuery.limit"
-      @pagination="getList"
-    />
-
-  </div>
-</template>
-
-<style>
-</style>
-
-<script>
-import { listAppraise, deleteAppraise } from '@/api/appraise'
-import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
-
-export default {
-  name: 'Order',
-  components: { Pagination },
-  filters: {
-  },
-  data() {
-    return {
-      list: undefined,
-      total: 0,
-      listLoading: true,
-      listQuery: {
-        pageNo: 1,
-        limit: 20,
-        id: undefined,
-        spuName: undefined,
-        content: undefined,
-        userName: undefined
-      }
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-    getList() {
-      this.listLoading = true
-      listAppraise(this.listQuery)
-        .then(response => {
-          this.list = response.data.data.items
-          this.total = response.data.data.total
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.total = 0
-          this.listLoading = false
-        })
-    },
-    handleDelete(row) {
-      this.$confirm('此操作将永久删除该评论' + row.id + ', 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        deleteAppraise(row)
-          .then(response => {
-            this.$notify.success({
-              title: '成功',
-              message: '删除优惠券成功'
-            })
-            const index = this.list.indexOf(row)
-            this.list.splice(index, 1)
-          })
-          .catch(response => {
-            this.$notify.error({
-              title: '失败',
-              message: response.data.errmsg
-            })
-          })
-      }).catch(() => {
-        return false
-      })
-    },
-    handleFilter() {
-      this.listQuery.page = 1
-      this.getList()
-    }
-  }
-}
-</script>

+ 0 - 518
unimall-admin/src/views/operation/freight.vue

@@ -1,518 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 查询和其他操作 -->
-    <div class="filter-container">
-      <!--<el-input v-model="listQuery.userId" clearable class="filter-item" style="width: 200px;" placeholder="请输入用户ID"/>-->
-      <el-button
-        v-permission="['operation:freight:create']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="createHandle"
-      >添加</el-button>
-    </div>
-
-    <!-- 查询结果 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      size="small"
-      element-loading-text="正在查询中。。。"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="模板编号" prop="freightTemplateDO.id" />
-
-      <el-table-column align="center" label="模板名称" width="300" prop="freightTemplateDO.templateName" />
-      <el-table-column align="center" label="宝贝地址" prop="freightTemplate.DOspuLocation" />
-
-      <el-table-column align="center" label="发货期限" prop="freightTemplateDO.deliveryDeadline">
-        <template slot-scope="scope">{{ scope.row.freightTemplateDO.deliveryDeadline }}天</template>
-      </el-table-column>
-      <el-table-column align="center" label="默认包邮门栏" prop="freightTemplateDO.defaultFreePrice" >
-        <template slot-scope="scope">{{ scope.row.freightTemplateDO.defaultFreePrice | defaultFreePriceFilter }}</template>
-      </el-table-column>
-      <el-table-column align="center" label="默认计费首次发货数量" prop="freightTemplateDO.defaultFirstNum" >
-        <template slot-scope="scope">{{ scope.row.freightTemplateDO.defaultFirstNum }}件</template>
-      </el-table-column>
-      <el-table-column align="center" label="默认计费首次发货价格" prop="freightTemplateDO.defaultFirstMoney">
-        <template slot-scope="scope">{{ scope.row.freightTemplateDO.defaultFirstMoney }}元</template>
-      </el-table-column>
-      <el-table-column align="center" label="默认计费续件数量" prop="freightTemplateDO.defaultContinueNum" >
-        <template slot-scope="scope">{{ scope.row.freightTemplateDO.defaultContinueNum }}件</template>
-      </el-table-column>
-      <el-table-column align="center" label="默认计费续件价格" prop="freightTemplateDO.defaultContinueMoney">
-        <template slot-scope="scope">{{ scope.row.freightTemplateDO.defaultContinueMoney }}元</template>
-      </el-table-column>
-      <el-table-column align="center" label="指定地区数量" prop="freightTemplateCarriageDOList.length"/>
-      <el-table-column align="center" label="操作" width="300" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <!-- <el-button
-            v-permission="['operation:freight:query']"
-            type="primary"
-            size="mini"
-            @click="(scope.row)"
-          >阅读</el-button> -->
-          <el-button
-            v-permission="['operation:freight:update']"
-            type="primary"
-            size="mini"
-            @click="updateBtn(scope.row)"
-          >修改</el-button>
-          <el-button
-            v-permission="['operation:freight:delete']"
-            type="danger"
-            size="mini"
-            @click="deleteBtn(scope.row)"
-          >删除</el-button>
-        </template>
-
-      </el-table-column>
-    </el-table>
-
-    <!-- 添加或修改对话框 -->
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" :fullscreen="true" :close-on-press-escape="false">
-      <el-form
-        ref="dataForm"
-        :rules="rules"
-        :model="dataForm"
-        status-icon
-        label-position="left"
-        label-width="150px"
-        style="width: 700px; margin-left:50px;"
-      >
-        <el-form-item v-if="dialogStatus === 'update'" label="隐藏的用户id" prop="templateId" hidden>
-          <el-input v-model="dataForm.templateId" clearable placeholder=""/>
-        </el-form-item>
-        <el-form-item label="模板名称" prop="templateName">
-          <el-input v-model="dataForm.templateName" clearable placeholder=""/>
-        </el-form-item>
-        <el-form-item label="发货地址" prop="spuLocation">
-          <el-input v-model="dataForm.spuLocation" clearable placeholder=""/>
-        </el-form-item>
-        <el-form-item label="发货期限" prop="deliveryDeadline">
-          <el-input v-model.number="dataForm.deliveryDeadline" clearable placeholder="">
-            <template slot="append">天</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="是否包邮" prop="isFree">
-          <template>
-            <el-radio-group v-model="dataForm.isFree">
-              <el-radio :label="-1">坚决不包邮</el-radio>
-              <el-radio :label="0">卖家承担包邮</el-radio>
-              <el-radio :label="1">设定满额包邮</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item v-if="dataForm.isFree === 1" label="默认包邮额度" prop="defaultFreePrice">
-          <el-input v-model.number="dataForm.defaultFreePrice" placeholder="默认包邮额度">
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="计费首次数量" prop="defaultFirstNum">
-          <el-input v-model.number="dataForm.defaultFirstNum" clearable placeholder="">
-            <template slot="append">件</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="计费首次价格" prop="defaultFirstPrice">
-          <el-input v-model.number="dataForm.defaultFirstPrice" clearable placeholder="">
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="计费续件数量" prop="defaultContinueNum">
-          <el-input v-model.number="dataForm.defaultContinueNum" clearable placeholder="">
-            <template slot="append">件</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="计费续件价格" prop="defaultContinuePrice">
-          <el-input v-model.number="dataForm.defaultContinuePrice" clearable placeholder="">
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="指定地区价格" prop="freightTemplateCarriageDOList" style="width:150%">
-          <el-button :plain="true" type="primary" @click="handleSpecified">添加</el-button>
-          <el-table :data="dataForm.freightTemplateCarriageDOList">
-            <el-table-column v-if="dialogStatus==='update'" property="id" label="指定地区ID" />
-            <el-table-column property="designatedArea" label="指定省份" />
-            <el-table-column property="firstNum" label="首次数量" />
-            <el-table-column property="firstMoney" label="首次价格" />
-            <el-table-column property="continueNum" label="续件数量" />
-            <el-table-column property="continueMoney" label="续件价格" />
-            <el-table-column property="freePrice" label="满额包邮门栏" />
-            <el-table-column
-              align="center"
-              label="操作"
-              width="100"
-              class-name="small-padding fixed-width"
-            >
-              <template slot-scope="scope">
-                <el-button type="danger" size="mini" @click="handleSpecDelete(scope.row)">删除</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-
-          <!-- 添加指定地区的Dialog -->
-          <el-dialog :visible.sync="specVisiable" :modal="false" :append-to-body="true" top="10vh" width="70%" title="添加指定地区">
-            <el-form
-              ref="specForm"
-              :model="specForm"
-              :rules="specRules"
-              status-icon
-              label-position="left"
-              label-width="100px"
-              style="width: 400px; margin-left:50px;"
-            >
-              <el-form-item label="包邮门栏" prop="freePrice">
-                <el-input v-model.number="specForm.freePrice" clearable >
-                  <template slot="append">元</template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="首次数量" prop="firstNum">
-                <el-input v-model.number="specForm.firstNum" clearable >
-                  <template slot="append">件</template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="首次价格" prop="firstMoney">
-                <el-input v-model.number="specForm.firstMoney" placeholder="" clearable>
-                  <template slot="append">元</template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="续件数量" prop="continueNum">
-                <el-input v-model.number="specForm.continueNum" placeholder="" clearable>
-                  <template slot="append">件</template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="续件价格" prop="continueMoney">
-                <el-input v-model.number="specForm.continueMoney" placeholder="" clearable>
-                  <template slot="append">元</template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="指定地区" prop="designatedAreaList" style="width:150%">
-                <template>
-                  <el-checkbox-group
-                    v-model="specForm.designatedAreaList">
-                    <el-checkbox v-for="(item, index) in provs" :label="item" :key="index" >{{ item }}</el-checkbox>
-                  </el-checkbox-group>
-                </template>
-              </el-form-item>
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-              <el-button @click="specVisiable = false">取消</el-button>
-              <el-button type="primary" @click="handleSpecAdd">确定</el-button>
-            </div>
-          </el-dialog>
-
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取消</el-button>
-        <el-button v-if="dialogStatus=='create'" type="primary" @click="createData">确定</el-button>
-        <el-button v-else type="primary" @click="updateDate">确定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<style>
-</style>
-
-<script>
-// import { listFreight, createFreight, deleteFreight, updateFreight } from '@/api/freight'
-import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
-
-export default {
-  name: 'Freight',
-  components: { Pagination },
-  filters: {
-    defaultFreePriceFilter(code) {
-      if (code < 0) {
-        return '不包邮'
-      } else if (code === 0) {
-        return '包邮'
-      } else {
-        return '满' + code + '元包邮'
-      }
-    }
-  },
-  data() {
-    // 校验是否大于零小于10亿
-    var isNum = (rule, value, callback) => {
-      if (parseInt(value) <= 0) {
-        callback(new Error('需要大于零'))
-      }
-      if (parseInt(value) > 10000000) {
-        callback(new Error('需要小于1千万'))
-      }
-      callback()
-    }
-    // 校验是否大于等于零小于10亿
-    var isPrice = (rule, value, callback) => {
-      if (parseInt(value) < 0) {
-        callback(new Error('需要大于等于零'))
-      }
-      if (parseInt(value) > 10000000) {
-        callback(new Error('需要小于1千万'))
-      }
-      callback()
-    }
-    return {
-      list: undefined,
-      total: 0,
-      listLoading: true,
-      carriage: undefined,
-      dialogStatus: '',
-      dialogFormVisible: false,
-      specList: undefined,
-      specVisiable: false,
-      listQuery: {
-      },
-      textMap: { update: '编辑', create: '创建' },
-      dataForm: {
-        templateId: undefined,
-        templateName: undefined,
-        spuLocation: undefined,
-        isFree: 1,
-        deliveryDeadline: undefined,
-        defaultFreePrice: undefined,
-        defaultFirstPrice: undefined,
-        defaultFirstNum: undefined,
-        defaultContinuePrice: undefined,
-        defaultContinueNum: undefined,
-        freightTemplateCarriageDOList: []
-      },
-      specForm: {
-        designatedAreaList: [],
-        designatedArea: undefined,
-        freePrice: undefined,
-        firstNum: undefined,
-        firstMoney: undefined,
-        continueNum: undefined,
-        continueMoney: undefined
-      },
-      provs: ['北京市', '天津市', '河北省', '山西省', '内蒙古自治区', '辽宁省', '吉林省', '黑龙江省', '上海市', '江苏省', '浙江省', '安徽省', '福建省', '江西省', '山东省', '河南省', '湖北省', '湖南省', '广东省', '广西壮族自治区', '海南省', '重庆市', '四川省', '贵州省', '云南省', '西藏自治区', '陕西省', '甘肃省', '青海省', '宁夏回族自治区', '新疆维吾尔自治区', '台湾省', '香港特别行政区', '澳门特别行政区'],
-      rules: {
-        templateName: [{ required: true, message: '模板名称不能为空', trigger: 'blur' }],
-        deliveryDeadline: [{ required: true, message: '发货期限不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isNum, trigger: 'blur' }],
-        defaultFreePrice: [{ required: true, message: '包邮门栏额度不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isPrice, trigger: 'blur' }],
-        defaultFirstNum: [{ required: true, message: '首次计费数量不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isNum, trigger: 'blur' }],
-        defaultFirstPrice: [{ required: true, message: '首次计费价格不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isPrice, trigger: 'blur' }],
-        defaultContinueNum: [{ required: true, message: '续件计费数量不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isNum, trigger: 'blur' }],
-        defaultContinuePrice: [{ required: true, message: '续件计费价格不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isPrice, trigger: 'blur' }]
-      },
-      specRules: {
-        freePrice: [{ required: true, message: '包邮门栏额度不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isPrice, trigger: 'blur' }],
-        firstNum: [{ required: true, message: '首次计费数量不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isNum, trigger: 'blur' }],
-        firstMoney: [{ required: true, message: '首次计费价格不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isPrice, trigger: 'blur' }],
-        continueNum: [{ required: true, message: '续件计费数量不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isNum, trigger: 'blur' }],
-        continueMoney: [{ required: true, message: '续件计费价格不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { validator: isPrice, trigger: 'blur' }],
-        designatedAreaList: [{ required: true, message: '至少选择一个地区', trigger: 'blur' }]
-      }
-
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-    getList() {
-      this.listLoading = true
-      listFreight(this.listQuery)
-        .then(response => {
-          response.data.data.forEach(item => {
-            item.freightTemplateDO.defaultContinueMoney = item.freightTemplateDO.defaultContinueMoney / 100
-            item.freightTemplateDO.defaultFirstMoney = item.freightTemplateDO.defaultFirstMoney / 100
-            item.freightTemplateDO.defaultFreePrice = item.freightTemplateDO.defaultFreePrice / 100
-
-            item.freightTemplateCarriageDOList.forEach(carriageItem => {
-              carriageItem.freePrice = carriageItem.freePrice / 100
-              carriageItem.firstMoney = carriageItem.firstMoney / 100
-              carriageItem.continueMoney = carriageItem.continueMoney / 100
-            })
-          })
-          this.list = response.data.data
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.listLoading = false
-        })
-    },
-    resetData() {
-      this.dataForm = {
-        templateId: undefined,
-        templateName: undefined,
-        spuLocation: undefined,
-        isFree: 1,
-        deliveryDeadline: undefined,
-        defaultFreePrice: undefined,
-        defaultFirstPrice: undefined,
-        defaultFirstNum: undefined,
-        defaultContinuePrice: undefined,
-        defaultContinueNum: undefined,
-        freightTemplateCarriageDOList: []
-      }
-    },
-    resetSpec() {
-      this.specForm = {
-        designatedAreaList: [],
-        designatedArea: undefined,
-        freePrice: undefined,
-        firstNum: undefined,
-        firstMoney: undefined,
-        continueNum: undefined,
-        continueMoney: undefined
-      }
-    },
-    deleteBtn(row) {
-      this.$confirm('此操作将永久删除该运费模板---' + row.freightTemplateDO.templateName + '---, 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        deleteFreight(row.freightTemplateDO.id)
-          .then(response => {
-            this.$notify.success({
-              title: '成功',
-              message: '删除运费模板成功'
-            })
-            const index = this.list.indexOf(row)
-            this.list.splice(index, 1)
-          })
-          .catch(response => {
-            this.$notify.error({
-              title: '失败',
-              message: response.data.errmsg
-            })
-          })
-      }).catch(() => {
-        return false
-      })
-    },
-    createHandle() {
-      this.resetData()
-      this.dialogStatus = 'create'
-      this.dialogFormVisible = true
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    createData() {
-      if (this.dataForm.isFree <= 0) {
-        this.dataForm.defaultFreePrice = this.dataForm.isFree
-      }
-      this.$refs['dataForm'].validate(valid => {
-        if (valid) {
-          this.multiplyHundred(this.dataForm)
-          createFreight(this.dataForm)
-            .then(response => {
-              this.getList()
-              this.dialogFormVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '创建运费模板成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    handleSpecified() {
-      this.specVisiable = true
-      this.resetSpec()
-      this.$nextTick(() => {
-        this.$refs['specForm'].clearValidate()
-      })
-    },
-    // 打开修改模态框
-    updateBtn(row) {
-      this.resetData()
-      this.dataForm = Object.assign({}, {
-        templateId: row.freightTemplateDO.id,
-        templateName: row.freightTemplateDO.templateName,
-        spuLocation: row.freightTemplateDO.spuLocation,
-        deliveryDeadline: row.freightTemplateDO.deliveryDeadline,
-        defaultFreePrice: row.freightTemplateDO.defaultFreePrice,
-        defaultFirstPrice: row.freightTemplateDO.defaultFirstMoney,
-        defaultFirstNum: row.freightTemplateDO.defaultFirstNum,
-        defaultContinuePrice: row.freightTemplateDO.defaultContinueMoney,
-        defaultContinueNum: row.freightTemplateDO.defaultContinueNum,
-        freightTemplateCarriageDOList: row.freightTemplateCarriageDOList,
-        isFree: row.freightTemplateDO.defaultFreePrice > 0 ? 1 : row.freightTemplateDO.defaultFreePrice
-      })
-
-      this.dialogStatus = 'update'
-      this.dialogFormVisible = true
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    updateDate() {
-      if (this.dataForm.isFree <= 0) {
-        this.dataForm.defaultFreePrice = this.dataForm.isFree
-      }
-      this.$refs['dataForm'].validate(valid => {
-        if (valid) {
-          this.multiplyHundred(this.dataForm)
-          updateFreight(this.dataForm)
-            .then(response => {
-              this.getList()
-              this.dialogFormVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '修改运费模板成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    handleSpecAdd() {
-      this.$refs['specForm'].validate(valid => {
-        if (valid) {
-          this.specForm.designatedArea = this.specForm.designatedAreaList.join(',')
-          var temp = Object.assign({}, this.specForm)
-          this.dataForm.freightTemplateCarriageDOList.unshift(temp)
-          this.specVisiable = false
-        }
-      })
-    },
-    // 在模态框删除指定地区
-    handleSpecDelete(row) {
-      this.$confirm('此操作将删除该指定地区, 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        const index = this.dataForm.freightTemplateCarriageDOList.indexOf(row)
-        this.dataForm.freightTemplateCarriageDOList.splice(index, 1)
-      }).catch(() => {
-        return false
-      })
-    },
-    // 用于配合后台数据需要将提交数据乘以100
-    multiplyHundred(data) {
-      data.defaultFreePrice = data.defaultFreePrice * 100
-      data.defaultFirstPrice = data.defaultFirstPrice * 100
-      data.defaultContinuePrice = data.defaultContinuePrice * 100
-      for (let i = 0; i < data.freightTemplateCarriageDOList.length; i++) {
-        data.freightTemplateCarriageDOList[i].freePrice = data.freightTemplateCarriageDOList[i].freePrice * 100
-        data.freightTemplateCarriageDOList[i].firstMoney = data.freightTemplateCarriageDOList[i].firstMoney * 100
-        data.freightTemplateCarriageDOList[i].continueMoney = data.freightTemplateCarriageDOList[i].continueMoney * 100
-      }
-      return data
-    }
-  }
-
-}
-</script>

+ 0 - 564
unimall-admin/src/views/operation/order.vue

@@ -1,564 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 查询和其他操作 -->
-    <div class="filter-container">
-      <!--<el-input v-model="listQuery.userId" clearable class="filter-item" style="width: 200px;" placeholder="请输入用户ID"/>-->
-      <el-input
-        v-model="listQuery.orderNo"
-        clearable
-        class="filter-item"
-        style="width: 200px;"
-        placeholder="请输入订单编号"
-      />
-      <el-select
-        v-model="listQuery.status"
-        style="width: 200px"
-        class="filter-item"
-        placeholder="请选择订单状态"
-      >
-        <el-option v-for="(key, value) in statusMap" :key="key" :label="key" :value="value" />
-      </el-select>
-      <el-button
-        v-permission="['operation:order:list']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="handleFilter"
-      >查找</el-button>
-      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-      <br>
-      <el-date-picker
-        v-model="downData.gmtStart"
-        type="datetime"
-        style="width: 200px"
-        class="filter-item"
-        default-time="00:00:00"
-        placeholder="选择开始日期"
-      />
-      至
-      <el-date-picker
-        v-model="downData.gmtEnd"
-        type="datetime"
-        style="width: 200px"
-        class="filter-item"
-        default-time="00:00:00"
-        placeholder="选择结束日期"
-      />
-      <el-select
-        v-model="downData.status"
-        style="width: 200px"
-        class="filter-item"
-        placeholder="待出库"
-      >
-        <el-option v-for="(key, value) in statusMap" :key="key" :label="key" :value="value" />
-      </el-select>
-      <el-button :loading="downloadLoading" class="filter-item" type="primary" icon="el-icon-download" @click="downExcelBtn">导出</el-button>
-    </div>
-
-    <!-- 查询结果 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      size="small"
-      element-loading-text="正在查询中。。。"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" width="180" label="订单编号" prop="orderNo" />
-
-      <el-table-column align="center" width="80" label="用户ID" prop="userId" />
-
-      <el-table-column align="center" width="120" label="订单状态" prop="status">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.status | orderStatusFilter }}</el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" width="110" label="支付渠道" prop="payChannel">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.payChannel | payChannelFilter }}</el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" width="100" label="订单金额" prop="actualPrice">
-        <template slot-scope="scope">¥ {{ scope.row.actualPrice / 100.0 }}</template>
-      </el-table-column>
-
-      <!--<el-table-column align="center" label="支付金额" prop="actualPrice"/>-->
-
-      <el-table-column align="center" width="140" label="创建时间" prop="gmtCreate">
-        <template slot-scope="scope">{{ scope.row.gmtCreate | formatTime }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" width="140" label="物流渠道" prop="shipCode">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.shipCode | shipCodeFilter }}</el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" width="200" label="物流单号" prop="shipCode"/>
-
-      <el-table-column align="center" width="200" label="备注" prop="mono"/>
-
-      <el-table-column align="center" label="操作" width="300" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            v-permission="['operation:order:detail']"
-            type="primary"
-            size="mini"
-            @click="handleDetail(scope.row)"
-          >详情</el-button>
-          <el-button
-            v-permission="['operation:order:detail']"
-            v-if="scope.row.status===20"
-            type="primary"
-            size="mini"
-            @click="downOrderExcelBtn(scope.row)"
-          >配送单</el-button>
-          <el-button
-            v-permission="['operation:order:ship']"
-            v-if="scope.row.status===20"
-            type="primary"
-            size="mini"
-            @click="handleShip(scope.row)"
-          >发货</el-button>
-          <el-button
-            v-permission="['operation:order:refund']"
-            v-if="scope.row.status===60"
-            type="primary"
-            size="mini"
-            @click="handleRefund(scope.row)"
-          >退款</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="listQuery.page"
-      :limit.sync="listQuery.limit"
-      @pagination="getList"
-    />
-
-    <!-- 订单详情对话框 -->
-    <el-dialog :visible.sync="orderDialogVisible" title="订单详情" width="800">
-      <el-form :data="orderDetail" label-position="left">
-        <el-form-item label="订单编号">
-          <span>{{ orderDetail.orderNo }}</span>
-        </el-form-item>
-        <el-form-item label="用户Id">
-          <span>{{ orderDetail.userId }}</span>
-        </el-form-item>
-        <el-form-item label="订单渠道">
-          <span>{{ orderDetail.channel }}</span>
-        </el-form-item>
-        <el-form-item label="订单状态">
-          <template>
-            <el-tag>{{ orderDetail.status | orderStatusFilter }}</el-tag>
-          </template>
-        </el-form-item>
-        <el-form-item label="支付渠道">
-          <template>
-            <el-tag>{{ orderDetail.payChannel | payChannelFilter }}</el-tag>
-          </template>
-        </el-form-item>
-        <el-form-item label="用户留言">
-          <span>{{ orderDetail.mono }}</span>
-        </el-form-item>
-        <el-form-item label="收货信息">
-          <span>(收货人){{ orderDetail.consignee }}</span>
-          <span>(手机号){{ orderDetail.phone }}</span>
-          <span>(地址){{ orderDetail.province }}{{ orderDetail.city }}{{ orderDetail.county }}{{ orderDetail.address }}{{ orderDetail.address }}</span>
-        </el-form-item>
-        <el-form-item label="商品信息">
-          <el-table :data="orderDetail.skuList" size="small" border fit highlight-current-row>
-            <el-table-column align="center" label="名称" prop="spuTitle" />
-            <el-table-column align="center" label="规格" prop="title" />
-            <el-table-column align="center" label="商品数量" prop="num" />
-            <el-table-column align="center" label="单位" prop="unit" />
-            <el-table-column align="center" label="总价(单价*数量)">
-              <template slot-scope="scope">
-                <span>{{ scope.row.price * scope.row.num / 100 }}</span>
-              </template>
-            </el-table-column>
-          </el-table>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-
-    <!-- 发货对话框 -->
-    <el-dialog :visible.sync="shipDialogVisible" title="发货">
-      <el-form
-        ref="shipForm"
-        :model="shipForm"
-        :rules="shipRules"
-        status-icon
-        label-position="left"
-        label-width="100px"
-        style="width: 400px; margin-left:50px;"
-      >
-        <el-form-item label="快递公司" prop="shipCode">
-          <el-select v-model="shipForm.shipCode" placeholder="请选择快递公司">
-            <el-option v-for="(key, value) in shipCodeMap" :key="key" :label="key" :value="value"/>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="快递编号" prop="shipNo">
-          <el-input :disabled="shipForm.shipCode === 'NONE'" v-model="shipForm.shipNo" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="shipDialogVisible = false">取消</el-button>
-        <el-button :disabled="shipSubmiting" type="primary" @click="confirmShip">确定</el-button>
-      </div>
-    </el-dialog>
-
-    <!-- 退款对话框 -->
-    <el-dialog :visible.sync="refundDialogVisible" title="退款">
-      <el-form
-        ref="refundForm"
-        :model="refundForm"
-        :rules="refundRules"
-        status-icon
-        label-position="left"
-        label-width="100px"
-        style="width: 400px; margin-left:50px;"
-      >
-        <el-form-item label="tips">
-          <span>允许退款后钱会退回对方账户,请确认您已经收到退货</span>
-        </el-form-item>
-        <el-form-item label="操作">
-          <el-radio v-model="refundForm.type" label="0">拒绝退款</el-radio>
-          <el-radio v-model="refundForm.type" label="1">允许退款</el-radio>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="refundDialogVisible = false">取消</el-button>
-        <el-button :disabled="refundSubmiting" type="primary" @click="confirmRefund">确定</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<style>
-</style>
-
-<script>
-// import { listOrder, shipOrder, refundOrder, detailOrder, getExcelInfo } from '@/api/order'
-import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
-import checkPermission from '@/utils/permission' // 权限判断函数
-
-const statusMap = {
-  10: '未付款',
-  12: '正在拼团',
-  20: '待出库',
-  30: '待收货',
-  40: '待评价',
-  50: '已完成',
-  60: '退款中',
-  70: '已退款',
-  80: '已取消',
-  90: '已取消(系统)'
-}
-
-const shipCodeMap = {
-  'NONE': '无需物流公司',
-  'SF': '顺丰速运',
-  'HTKY': '百世快递',
-  'ZTO': '中通快递',
-  'STO': '申通快递',
-  'YTO': '圆通速递',
-  'YD': '韵达速递',
-  'YZPY': '邮政快递包裹',
-  'EMS': 'EMS',
-  'HHTT': '天天快递',
-  'JD': '京东快递',
-  'UC': '优速快递',
-  'DBL': '德邦快递',
-  'ZJS': '宅急送',
-  'TNT': 'TNT快递'
-}
-
-const payChannelMap = {
-  WX: '微信支付',
-  ALI: '支付宝',
-  OFFLINE: '线下支付'
-}
-
-export default {
-  name: 'Order',
-  components: { Pagination },
-  filters: {
-    orderStatusFilter(status) {
-      return statusMap[status]
-    },
-    payChannelFilter(channel) {
-      const str = payChannelMap[channel]
-      if (str) {
-        return str
-      }
-      return '未支付'
-    },
-    shipCodeFilter(shipCode) {
-      if (shipCode) {
-        return shipCodeMap[shipCode]
-      }
-      return '未发货'
-    }
-  },
-  data() {
-    return {
-      excelData: {
-        barcode: undefined,
-        name: undefined,
-        specifications: undefined,
-        unit: undefined,
-        num: undefined,
-        address: undefined
-      },
-      excelDataList: [],
-      downData: {
-        status: '',
-        gmtStart: undefined,
-        gmtEnd: undefined
-      },
-      shipCodeMap,
-      list: undefined,
-      total: 0,
-      listLoading: true,
-      listQuery: {
-        page: 1,
-        limit: 20,
-        id: undefined,
-        name: undefined,
-        orderStatusArray: [],
-        sort: 'id',
-        order: 'desc'
-      },
-      statusMap,
-      orderDialogVisible: false,
-      orderDetail: {},
-      refundForm: {
-        orderNo: undefined,
-        type: '0'
-      },
-      refundDialogVisible: false,
-      refundSubmiting: false,
-      downloadLoading: false,
-      shipForm: {
-        orderNo: undefined,
-        shipCode: 'NONE',
-        shipNo: undefined
-      },
-      shipDialogVisible: false,
-      shipSubmiting: false,
-      refundRules: {
-        orderNo: [
-          { required: true, message: '请使用非IE浏览器重试', trigger: 'blur' }
-        ],
-        type: [
-          { required: true, message: '请选择退货类型', trigger: 'blur' }
-        ]
-      },
-      shipRules: {
-        shipCode: [
-          { required: true, message: '请选择物流类型', trigger: 'blur' }
-        ],
-        orderNo: [
-          { required: true, message: '请使用非IE浏览器重试', trigger: 'blur' }
-        ]
-      }
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-    checkPermission,
-    getList() {
-      this.listLoading = true
-      listOrder(this.listQuery)
-        .then(response => {
-          this.list = response.data.data.items
-          this.total = response.data.data.total
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.total = 0
-          this.listLoading = false
-        })
-    },
-    handleFilter() {
-      this.listQuery.page = 1
-      this.getList()
-    },
-    handleDetail(row) {
-      detailOrder(row.id).then(response => {
-        this.orderDetail = response.data.data
-      })
-      this.orderDialogVisible = true
-    },
-    handleShip(row) {
-      this.shipDialogVisible = true
-      this.shipForm.orderNo = row.orderNo
-    },
-    confirmShip() {
-      this.$refs['shipForm'].validate(valid => {
-        if (valid) {
-          this.shipSubmiting = true
-          if (this.shipForm.shipCode !== 'NONE' && !this.shipForm.shipNo) {
-            this.$notify.error({
-              title: '失败',
-              message: '请填写运单号'
-            })
-          } else {
-            shipOrder(this.shipForm)
-              .then(response => {
-                this.shipSubmiting = false
-                this.shipDialogVisible = false
-                this.$notify.success({
-                  title: '成功',
-                  message: '确认发货成功!'
-                })
-                this.getList()
-              })
-              .catch(response => {
-                this.shipSubmiting = false
-                this.$notify.error({
-                  title: '失败',
-                  message: response.data.errmsg
-                })
-              })
-          }
-        }
-      })
-    },
-    handleRefund(row) {
-      this.refundForm.orderNo = row.orderNo
-      this.refundDialogVisible = true
-      this.shipForm.shipCode = 'NONE'
-    },
-    confirmRefund() {
-      this.$refs['refundForm'].validate(valid => {
-        if (valid) {
-          this.refundSubmiting = true
-          refundOrder(this.refundForm)
-            .then(response => {
-              this.refundSubmiting = false
-              this.refundDialogVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '确认退款成功!'
-              })
-              this.getList()
-            })
-            .catch(response => {
-              this.refundSubmiting = false
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    // 订单表格中下载
-    downOrderExcelBtn(row) {
-      detailOrder(row.id).then(response => {
-        var temp = response.data.data
-        this.downData.address = temp.province + temp.city + temp.county + temp.address
-        for (var j = 0; j < temp.skuList.length; j++) {
-          var sku = temp.skuList[j]
-          this.downData.unit = sku.unit
-          this.downData.num = sku.num
-          this.downData.specifications = sku.title
-          this.downData.barcode = sku.barCode
-          this.downData.name = sku.spuTitle
-          var copy = Object.assign({}, this.downData)
-          this.excelDataList.push(copy)
-        }
-        this.handleDownload(this.excelDataList)
-        this.excelDataList = []
-      })
-    },
-    // 选择条件下载
-    downExcelBtn() {
-      this.downloadLoading = true
-      const dataInfo = Object.assign({}, {
-        status: this.downData.status,
-        gmtStart: this.downData.gmtStart.getTime(),
-        gmtEnd: this.downData.gmtEnd.getTime()
-      })
-      getExcelInfo(dataInfo).then(response => {
-        if (response.data.data == null) {
-          this.$notify.error({
-            title: '失败',
-            message: '没有信息可以打印'
-          })
-        }
-
-        var data = response.data.data
-        for (var i = 0; i < data.length; i++) {
-          var temp = data[i]
-          this.downData.address = temp.province + temp.city + temp.county + temp.address
-          for (var j = 0; j < temp.skuList.length; j++) {
-            var sku = temp.skuList[j]
-            this.downData.unit = sku.unit
-            this.downData.num = sku.num
-            this.downData.specifications = sku.title
-            this.downData.barcode = sku.barCode
-            this.downData.name = sku.spuTitle
-            var copy = Object.assign({}, this.downData)
-            this.excelDataList.push(copy)
-          }
-        }
-        this.handleDownload(this.excelDataList)
-        this.excelDataList = []
-        this.downloadLoading = false
-      })
-        .catch(response => {
-          this.downloadLoading = false
-          this.$notify.error({
-            title: '失败',
-            message: response.data.errmsg
-          })
-        })
-    },
-    handleDownload(data) {
-      import('@/vendor/Export2Excel').then(excel => {
-        const tHeader = [
-          '商品编码',
-          '国际条码',
-          '商品名称',
-          '规格',
-          '单位',
-          '包装系数',
-          '配送数量',
-          '件数',
-          '配送机构',
-          '备注',
-          '配送规格',
-          '零售价'
-        ]
-        const filterVal = [
-          'productCode',
-          'barcode',
-          'name',
-          'specifications',
-          'unit',
-          'coefficient',
-          'num',
-          'num',
-          'address',
-          'note',
-          'deliveryLine',
-          'retailPrice'
-        ]
-        excel.export_json_to_excel2(tHeader, data, filterVal, '订单信息')
-      })
-    }
-  }
-}
-</script>

+ 349 - 241
unimall-admin/src/views/productManagement/index.vue

@@ -1,149 +1,129 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
-      <el-form-item label="产品标题" prop="productTitle">
-        <el-input
-          v-model="queryParams.productTitle"
-          placeholder="请输入产品标题"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="封面" prop="coverImage">
-        <el-input
-          v-model="queryParams.coverImage"
-          placeholder="请输入封面"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="分类" prop="classification">
-        <el-input
-          v-model="queryParams.classification"
-          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="" 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="deleteFlag">
-        <el-input
-          v-model="queryParams.deleteFlag"
-          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-row  class="mb8">
+      <el-col :span="4">
+        <span>产品分类</span>
         <el-button
           type="primary"
           icon="el-icon-plus"
           size="mini"
-          @click="handleAdd"
-          v-permission="['cloud:productManagement:add']"
-        >新增</el-button>
+          @click="handleAddDictOpen"
+        >新增分类</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="['cloud:productManagement: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="['cloud:productManagement:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
+      
+      <el-col style="text-align:right;" :span="20">
+        <!-- <el-button
           type="warning"
           icon="el-icon-download"
           size="mini"
           @click="handleExport"
-          v-permission="['cloud:productManagement:export']"
-        >导出</el-button>
+          v-permission="['unimall:management:export']"
+        >导入产品</el-button> -->
+        <el-button
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-permission="['unimall:management:add']"
+        >新增产品</el-button>
+      </el-col>
+    </el-row>
+    <el-row style="margin-top:20px;">
+      <el-col :span="4">
+        <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick">
+          <span  class="custom-tree-node" slot-scope="{ node, data }">
+            <span>{{ node.label }}</span>
+            <span v-if="node.label!='全部分类'&&node.label!='未分类'">
+              <el-button
+                type="text"
+                size="mini"
+                @click="() => append(data)">
+                编辑
+              </el-button>
+              <el-button
+                type="text"
+                size="mini"
+                @click="() => remove(node, data)">
+                删除
+              </el-button>
+            </span>
+          </span>
+        </el-tree>
+        <!-- <el-dropdown>
+          <span class="el-dropdown-link">
+            全部分类<i class="el-icon-arrow-down el-icon--right"></i>
+          </span>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item>黄金糕</el-dropdown-item>
+            <el-dropdown-item>狮子头</el-dropdown-item>
+            <el-dropdown-item>螺蛳粉</el-dropdown-item>
+            <el-dropdown-item disabled>双皮奶</el-dropdown-item>
+            <el-dropdown-item divided>蚵仔煎</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown> -->
+      </el-col>
+      <el-col :span="20">
+        <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
+          <el-form-item label="全部状态" prop="status">
+            <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+              <el-option label="待发布" value="已上线" />
+              <el-option label="已上架" value="已上线" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="产品标题" prop="productTitle">
+            <el-input
+              v-model="queryParams.productTitle"
+              placeholder="请输入产品标题"
+              clearable
+              size="small"
+              @keyup.enter.native="handleQuery"
+            />
+          </el-form-item>
+          <el-form-item label="分类" prop="classification">
+            <el-input
+              v-model="queryParams.classification"
+              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-table v-loading="loading" :data="managementList" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" />
+          <el-table-column label="序号" align="center" prop="tableId" width="50px" />
+          <!-- <el-table-column label="" align="center" prop="id" /> -->
+          <el-table-column label="产品标题" align="center" prop="productTitle" />
+          <el-table-column label="分类" align="center" prop="classification" />
+          <el-table-column label="状态" align="center" prop="status" />
+          <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" 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="['unimall:management:edit']"
+              >修改</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
       </el-col>
     </el-row>
-
-    <el-table v-loading="loading" :data="productManagementList" @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="productTitle" />
-      <el-table-column label="产品简介" align="center" prop="productIntroduction" />
-      <el-table-column label="封面" align="center" prop="coverImage" />
-      <el-table-column label="分类" align="center" prop="classification" />
-      <el-table-column label="产品模板" align="center" prop="productTemplate" />
-      <el-table-column label="状态" align="center" prop="status" />
-      <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="deleteFlag" />
-      <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="['cloud:productManagement:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-permission="['cloud:productManagement:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
+    
     
     <pagination
       v-show="total>0"
@@ -153,63 +133,73 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改产品管理信息对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px">
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="产品标题" prop="productTitle">
-          <el-input v-model="form.productTitle" placeholder="请输入产品标题" />
-        </el-form-item>
-        <el-form-item label="产品简介" prop="productIntroduction">
-          <el-input v-model="form.productIntroduction" type="textarea" placeholder="请输入内容" />
-        </el-form-item>
-        <el-form-item label="封面" prop="coverImage">
-          <el-input v-model="form.coverImage" placeholder="请输入封面" />
-        </el-form-item>
-        <el-form-item label="分类" prop="classification">
-          <el-input v-model="form.classification" placeholder="请输入分类" />
-        </el-form-item>
-        <el-form-item label="产品模板" prop="productTemplate">
-          <el-input v-model="form.productTemplate" type="textarea" 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="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="deleteFlag">
-          <el-input v-model="form.deleteFlag" placeholder="请输入删除标识" />
-        </el-form-item>
-      </el-form>
+    <el-dialog :title="title" :visible.sync="opendict" width="500px">
+      <el-form ref="form" label-width="80px">
+      <el-form-item label="分类名称">
+        <el-input v-model="dict.classifyName" placeholder="请输入分类名称" />
+      </el-form-item>
+      <el-form-item label="分类语言">
+        <el-radio-group v-model="dict.language">
+          <el-radio-button label="中文"></el-radio-button>
+          <el-radio-button label="English"></el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="分类标题">
+        <el-input v-model="dict.classifyTitle" placeholder="请输入分类标题" />
+      </el-form-item>
+      <el-form-item label="分类描述">
+        <el-input
+                type="textarea"
+                :rows="4"
+                maxlength="500"
+                placeholder="请输入分类描述"
+                v-model="form.classifyDescribe">
+        </el-input>
+      </el-form-item>
+      <el-form-item label="分类图标">
+        <el-upload
+          ref="mYupload"
+          class="avatar-uploader"
+          :headers="headers"
+          :action="uploadPath"
+          :show-file-list="false"
+          :on-success="uploadSuccessHandle"
+          :before-upload="onBeforeUpload">
+            <img v-if="form.classifyIcon" :src="form.classifyIcon" class="avatar">
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+        </el-upload>
+      </el-form-item>
+      <el-form-item label="分类封面">
+        <el-upload
+          ref="mYupload1"
+          class="avatar-uploader"
+          :headers="headers"
+          :action="uploadPath"
+          :show-file-list="false"
+          :on-success="uploadSuccessHandle1"
+          :before-upload="onBeforeUpload1">
+            <img v-if="form.classifyImage" :src="form.classifyImage" class="avatar">
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+        </el-upload>
+      </el-form-item>
+    </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
+        <el-button type="primary" @click="handleAddDict">确 定</el-button>
+        <el-button @click="opendict = false">取 消</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { listProductManagement, getProductManagement, delProductManagement, addProductManagement, updateProductManagement, exportProductManagement } from "@/api/cloud/productManagement";
-
+import { listDict, addDict, editDict, delDict, } from "@/api/cloud/articleManagement";
+import {  listProductManagement, delProductManagement,  } from "@/api/cloud/productManagement";
+import { uploadPath } from '@/api/storage'
+  import { getToken } from '@/utils/auth'
 export default {
   data() {
     return {
+      uploadPath,
       // 遮罩层
       loading: true,
       // 选中数组
@@ -220,12 +210,18 @@ export default {
       multiple: true,
       // 总条数
       total: 0,
-      // 产品管理信息表格数据
-      productManagementList: [],
+      dict:{
+        classifyType:'product_type',
+        language:'中文'
+      },
+      title:'新增分类',
+      // 文章管理信息表格数据
+      managementList: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
       open: false,
+      opendict:false,
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -240,6 +236,14 @@ export default {
         gmtUpdate: undefined,
         deleteFlag: undefined
       },
+      data: [{
+          label: '全部分类',
+          children: [{label: '未分类'},]
+        }],
+        defaultProps: {
+          children: 'children',
+          label: 'label'
+        },
       // 表单参数
       form: {},
       // 表单校验
@@ -248,20 +252,111 @@ export default {
           { required: true, message: "不能为空", trigger: "blur" }
         ],        gmtUpdate: [
           { required: true, message: "不能为空", trigger: "blur" }
-        ],        deleteFlag: [
-          { required: true, message: "删除标识不能为空", trigger: "blur" }
-        ]      }
+        ],         
+      }
     };
   },
   created() {
     this.getList();
   },
+  computed: {
+    headers() {
+      return {
+        accessToken: getToken()
+      }
+    }
+  },
   methods: {
-    /** 查询产品管理信息列表 */
+    // 上传图片了处理图片
+    uploadSuccessHandle(e, file) {
+        const that = this
+        this.form.classifyIcon = e.url
+        this.$forceUpdate()
+        console.log(e,this.editor.getData())
+         
+        
+      
+        console.log(this.form,this.editor)
+      },
+      onBeforeUpload(file) {
+        const isIMAGE = file.type === 'image/jpeg' || 'image/gif' || 'image/png' || 'image/jpg'
+        const isLt1M = file.size / 1024 / 1024 < 1
+
+        if (!isIMAGE) {
+          this.$message.error('上传文件只能是图片格式!')
+        }
+        if (!isLt1M) {
+          this.$message.error('上传文件大小不能超过 1MB!')
+        }
+        return isIMAGE && isLt1M
+      },
+      // 上传图片了处理图片
+      uploadSuccessHandle1(e, file) {
+        const that = this
+        this.form.classifyImage = e.url
+        this.$forceUpdate()
+        console.log(e,this.editor.getData())
+         
+        
+      
+        console.log(this.form,this.editor)
+      },
+      onBeforeUpload1(file) {
+        const isIMAGE = file.type === 'image/jpeg' || 'image/gif' || 'image/png' || 'image/jpg'
+        const isLt1M = file.size / 1024 / 1024 < 1
+
+        if (!isIMAGE) {
+          this.$message.error('上传文件只能是图片格式!')
+        }
+        if (!isLt1M) {
+          this.$message.error('上传文件大小不能超过 1MB!')
+        }
+        return isIMAGE && isLt1M
+      },
+    // 编辑分类
+    append(data) {
+      this.dict.id=data.id
+      this.title='编辑分类'
+      this.opendict=true
+        
+      },
+      // 删除分类
+      remove(node, data) {
+        this.$confirm('是否确认删除产品管理分类"' + data.label + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          delDict(data.id).then(response => {
+          if (response.data) {
+            this.msgSuccess("删除分类成功");
+            this.getList()
+          } else {
+            this.msgError(response.msg);
+          }
+        });
+        }).catch(function() {});
+       
+        // const parent = node.parent;
+        // const children = parent.data.children || parent.data;
+        // const index = children.findIndex(d => d.id === data.id);
+        // children.splice(index, 1);
+      },
+    /** 查询文章管理信息列表 */
     getList() {
       this.loading = true;
+      listDict({classifyType:'product_type',}).then(response => {
+        var data=response.data.data.items
+        this.data[0].children=[{label: '未分类'},]
+        for (let i = 0; i < data.length; i++) {
+          data[i].label=data[i].classifyName
+          this.data[0].children.push(data[i])
+          
+        }
+        console.log(this.data,111111)
+      });
       listProductManagement(this.queryParams).then(response => {
-        this.productManagementList = response.data.data.items
+        this.managementList = response.data.data.items
         this.total = response.data.data.count
         this.loading = false;
       });
@@ -275,11 +370,11 @@ export default {
     reset() {
       this.form = {
         id: undefined,
-        productTitle: undefined,
-        productIntroduction: undefined,
+        articleTitle: undefined,
+        articleIntroduction: undefined,
         coverImage: undefined,
         classification: undefined,
-        productTemplate: undefined,
+        articleTemplate: undefined,
         status: "0",
         gmtCreate: undefined,
         gmtUpdate: undefined,
@@ -303,49 +398,46 @@ export default {
       this.single = selection.length!=1
       this.multiple = !selection.length
     },
+    handleAddDictOpen() {
+      this.title='新增分类'
+      this.opendict=true
+    },
+    handleAddDict() {
+      if(this.title=='新增分类'){
+        addDict(this.dict).then(response => {
+          if (response.data) {
+            this.msgSuccess("新增分类成功");
+            this.opendict=false
+            this.getList()
+          } else {
+            this.msgError(response.msg);
+          }
+        });
+      }else{
+        editDict(this.dict).then(response => {
+          if (response.data) {
+            this.msgSuccess("编辑分类成功");
+            this.opendict=false
+            this.getList()
+          } else {
+            this.msgError(response.msg);
+          }
+        });
+      }
+      
+    },
+    
     /** 新增按钮操作 */
     handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加产品管理信息";
+      this.$router.push({name:'productAdd'})
+      // this.reset();
+      // this.open = true;
+      // this.title = "添加文章管理信息";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids.join(',')
-      getProductManagement(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) {
-            updateProductManagement(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess("修改成功");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          } else {
-            addProductManagement(this.form).then(response => {
-              if (response.data) {
-                this.msgSuccess("新增成功");
-                this.open = false;
-                this.getList();
-              } else {
-                this.msgError(response.msg);
-              }
-            });
-          }
-        }
-      });
+      this.$router.push({name:'productEdit',query:{'Id':row.id}})
+      
     },
     /** 删除按钮操作 */
     handleDelete(row) {
@@ -361,19 +453,35 @@ export default {
           this.msgSuccess("删除成功");
         }).catch(function() {});
     },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有产品管理信息数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return exportProductManagement(queryParams);
-        }).then(response => {
-          this.download(response.data.data);
-        }).catch(function() {});
-    }
+
   }
 };
-</script>
+</script>
+<style lang="scss" scoped>
+.avatar-uploader{ 
+  /deep/.el-upload {
+    border: 1px dashed #ccc;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+}
+ 
+.avatar-uploader .el-upload:hover {
+  border-color: #409EFF;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  line-height: 178px;
+  text-align: center;
+}
+.avatar {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
+</style>

+ 0 - 652
unimall-admin/src/views/promotion/coupon.vue

@@ -1,652 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 查询和其他操作 -->
-    <div class="filter-container">
-      <el-input v-model="listQuery.title" clearable class="filter-item" style="width: 200px;" placeholder="请输入优惠券标题" />
-      <el-select v-model="listQuery.type" clearable style="width: 200px" class="filter-item" placeholder="请选择优惠券类型" >
-        <el-option v-for="(item,index) in couponTypeMap" :key="index" :label="item.name" :value="item.value" />
-      </el-select>
-      <el-select v-model="listQuery.status" clearable style="width: 200px" class="filter-item" placeholder="请选择优惠券状态" >
-        <el-option v-for="(item,index) in couponStatusMap" :key="index" :label="item.name" :value="item.value" />
-      </el-select>
-      <el-button
-        v-permission="['promote:coupon:query']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="handleFilter"
-      >查找</el-button>
-      <el-button
-        v-permission="['promote:coupon:create']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-edit"
-        @click="handleCreate"
-      >添加</el-button>
-      <!-- <el-button
-        :loading="downloadLoading"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-download"
-        @click="handleDownload"
-      >当前页导出</el-button> -->
-    </div>
-
-    <!-- 查询结果 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      size="small"
-      element-loading-text="正在查询中。。。"
-      border
-      fit
-      highlight-current-row
-      style="white-space: pre-line"
-    >
-      <el-table-column align="center" label="优惠券ID" prop="id" sortable />
-
-      <el-table-column align="center" label="优惠券名称" prop="title" />
-
-      <el-table-column align="center" label="优惠券类型" prop="type">
-        <template slot-scope="scope">{{ couponTypeMap[scope.row.type-1]?couponTypeMap[scope.row.type-1].name:'错误类型' }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="介绍" prop="description" />
-
-      <el-table-column align="center" label="优惠券数量" prop="total">
-        <template slot-scope="scope">{{ scope.row.total >= 0 ? scope.row.total : "不限" }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="剩余数量" prop="surplus">
-        <template slot-scope="scope">{{ scope.row.surplus >= 0 ? scope.row.surplus : "不限" }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="每人限领" prop="limit">
-        <template slot-scope="scope">{{ scope.row.limit >= 0 ? scope.row.limit : "不限" }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="满减金额" prop="discount">
-        <template slot-scope="scope">减免{{ scope.row.discount }}元</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="最低消费" prop="min">
-        <template slot-scope="scope">满{{ scope.row.min }}元可用</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="状态" prop="status">
-        <template slot-scope="scope">
-          <el-tag> {{ scope.row.status | formatStatus }} </el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="使用类目名称" prop="categoryTitle" width="100">
-        <template slot-scope="scope">
-          <el-tag> {{ scope.row.categoryTitle != null?scope.row.categoryTitle:"全部类目" }} </el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column v-show="false" align="center" label="使用类目ID" prop="categoryId" width="100" />
-
-      <el-table-column align="center" label="领券相对天数" prop="days">
-        <template slot-scope="scope">{{ scope.row.days != null ? scope.row.days : "无" }}</template>
-      </el-table-column>
-      <el-table-column align="center" label="领券开始时间" prop="gmtStart">
-        <template slot-scope="scope">{{ scope.row.gmtStart | formatGmt }}</template>
-      </el-table-column>
-      <el-table-column align="center" label="领券结束时间" prop="gmtEnd">
-        <template slot-scope="scope">{{ scope.row.gmtEnd | formatGmt }}</template>
-      </el-table-column>
-
-      <el-table-column align="center" label="操作" width="300" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            v-permission="['promote:coupon:update']"
-            type="primary"
-            size="mini"
-            @click="handleStatus(scope.row)"
-          >{{ scope.row.status | formatStatusBtn }}</el-button>
-          <el-button
-            v-permission="['promote:coupon:update']"
-            type="info"
-            size="mini"
-            @click="handleRead(scope.row)"
-          >查看</el-button>
-          <el-button
-            v-permission="['promote:coupon:delete']"
-            type="danger"
-            size="mini"
-            @click="handleDelete(scope.row)"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="listQuery.pageNo"
-      :limit.sync="listQuery.limit"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改对话框 -->
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
-      <el-form
-        ref="dataForm"
-        :rules="rules"
-        :model="dataForm"
-        status-icon
-        label-position="left"
-        label-width="100px"
-        style="width: 400px; margin-left:50px;"
-      >
-        <el-form-item label="优惠券名称" prop="title">
-          <el-input v-model="dataForm.title" :disabled="dialogStatus === 'update'"/>
-        </el-form-item>
-        <el-form-item label="优惠卷类型" prop="type">
-          <el-select v-model="dataForm.type" :disabled="dialogStatus === 'update'">
-            <el-option v-for="(item,index) in couponTypeOptions" :key="index" :label="item.name" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="介绍" prop="description" >
-          <el-input v-model="dataForm.description" :disabled="dialogStatus === 'update'"/>
-        </el-form-item>
-        <el-form-item label="优惠券数量" prop="total">
-          <el-input v-model="dataForm.total" :disabled="dialogStatus === 'update'">
-            <template slot="append">张</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="每人限领" prop="limit">
-          <el-input v-model="dataForm.limit" :disabled="dialogStatus === 'update'">
-            <template slot="append">张</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="满减金额" prop="discount">
-          <el-input v-model="dataForm.discount" :disabled="dialogStatus === 'update'">
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="最低消费" prop="min">
-          <el-input v-model="dataForm.min" :disabled="dialogStatus === 'update'">
-            <template slot="append">元</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="优惠卷状态" prop="status">
-          <el-select v-model="dataForm.status" :disabled="dialogStatus === 'update'">
-            <el-option v-for="(item,index) in couponStatusOptions" :key="index" :label="item.name" :value="item.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="有效期">
-          <el-radio-group v-model="dataForm.timeType" :disabled="dialogStatus === 'update'">
-            <el-radio-button :label="0">领券相对天数</el-radio-button>
-            <el-radio-button :label="1">指定绝对时间</el-radio-button>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item v-show="dataForm.timeType === 0" prop="days">
-          <el-input v-model="dataForm.days" :disabled="dialogStatus === 'update'">
-            <template slot="append">天</template>
-          </el-input>
-        </el-form-item>
-        <el-form-item v-show="dataForm.timeType === 1" prop="time">
-          <el-col :span="11" >
-            <el-date-picker
-              :disabled="dialogStatus === 'update'"
-              v-model="dataForm.gmtStart"
-              type="datetime"
-              placeholder="选择日期"
-              style="width: 100%;"
-            />
-          </el-col>
-          <el-col :span="2" class="line">至</el-col>
-          <el-col :span="11">
-            <el-date-picker
-              :disabled="dialogStatus === 'update'"
-              v-model="dataForm.gmtEnd"
-              type="datetime"
-              placeholder="选择日期"
-              style="width: 100%;"
-            />
-          </el-col>
-        </el-form-item>
-        <el-form-item label="商品限制范围">
-          <el-radio-group v-model="dataForm.goodsType" :disabled="dialogStatus === 'update'">
-            <el-radio-button :label="0">全场通用</el-radio-button>
-            <el-radio-button :label="1">指定分类</el-radio-button>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item v-if="dialogStatus === 'update'" v-show="dataForm.goodsType === 1" label="优惠类目">
-          <el-input v-model="dataForm.categoryTitle" :disabled="dialogStatus === 'update'"/>
-        </el-form-item>
-        <el-form-item v-if="dialogStatus === 'create'" v-show="dataForm.goodsType === 1" label="优惠类目">
-          <el-cascader
-            v-model="dataForm.categoryTitle"
-            :options="options"
-            :props="{ checkStrictly: true }"
-            placeholder="优惠类目"
-            filterable
-            @change="handleLink"
-          />
-
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取消</el-button>
-        <el-button v-if="dialogStatus=='create'" type="primary" @click="createData">确定</el-button>
-        <!-- <el-button v-else type="primary" @click="updateData">确定</el-button> -->
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<style>
-.el-table .cell {
-  white-space: pre-line;
-}
-.avatar-uploader .el-upload {
-  border: 1px dashed #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-  position: relative;
-  overflow: hidden;
-}
-.avatar-uploader .el-upload:hover {
-  border-color: #20a0ff;
-}
-.avatar-uploader-icon {
-  font-size: 28px;
-  color: #8c939d;
-  width: 120px;
-  height: 120px;
-  line-height: 120px;
-  text-align: center;
-}
-.avatar {
-  width: 120px;
-  height: 120px;
-  display: block;
-}
-</style>
-
-<script>
-// import { listCoupon, createCoupon, deleteCoupon, activeCoupon } from '@/api/coupon'
-import { categoryTree } from '@/api/category'
-import { formatDateAndTime } from '@/filters'
-import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
-
-export default {
-  name: 'Coupon',
-  components: { Pagination },
-  filters: {
-    formatGmt(time) {
-      if (time == null || time === '') {
-        return '无'
-      }
-      return formatDateAndTime(time)
-    },
-    formatStatus(status) {
-      if (status === 0) {
-        return '下架'
-      } else if (status === 1) {
-        return '正常'
-      } else if (status < 0) {
-        return '已过期'
-      } else {
-        return '错误状态'
-      }
-    },
-    formatStatusBtn(status) {
-      if (status === 1) {
-        return '冻结'
-      } else if (status === 0) {
-        return '激活'
-      } else if (status < 0) {
-        return '已过期'
-      } else {
-        return '错误状态'
-      }
-    }
-  },
-  data() {
-    return {
-      couponTypeMap: [{ value: 1, name: '满减卷' }, { value: '', name: '全部' }],
-      couponStatusMap: [{ value: 0, name: '下架' }, { value: 1, name: '正常' }, { value: -1, name: '已过期' }, { value: '', name: '全部' }],
-      couponStatusOptions: [{ value: 1, name: '正常' }, { value: 0, name: '下架' }],
-      couponTypeOptions: [{ value: 1, name: '满减卷' }],
-      list: undefined,
-      total: 0,
-      listLoading: true,
-      listQuery: {
-        pageNo: 1,
-        limit: 20,
-        type: undefined,
-        status: undefined,
-        title: undefined
-      },
-      options: [],
-      dataForm: {
-        id: undefined,
-        title: undefined,
-        type: 1,
-        description: undefined,
-        total: 0,
-        discount: 0,
-        limit: 0,
-        min: 0,
-        status: 1,
-        tag: undefined,
-        categoryId: undefined,
-        categoryTitle: undefined,
-        goodsType: 0,
-        goodsValue: undefined,
-        timeType: 1,
-        days: undefined,
-        gmtStart: null,
-        gmtEnd: null
-      },
-      dialogFormVisible: false,
-      dialogStatus: '',
-      textMap: {
-        update: '编辑',
-        create: '创建'
-      },
-      rules: {
-        title: [{ required: true, message: '优惠券标题不能为空', trigger: 'blur' }],
-        type: [{ required: true, message: '优惠券类型不能为空', trigger: 'blur' }],
-        total: [{ required: true, message: '优惠券总量不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { min: 1, max: 9, message: '大于1,小于1亿' }],
-        limit: [{ required: true, message: '优惠券限领不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { min: 1, max: 9, message: '大于1,小于1亿' }],
-        discount: [{ required: true, message: '优惠券折扣金额不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { min: 1, max: 9, message: '大于1,小于1亿' }],
-        min: [{ required: true, message: '优惠券使用门栏不能为空', trigger: 'blur' }, { pattern: /^[0-9]*$/, message: '请输入整数' }, { min: 1, max: 9, message: '大于1,小于1亿' }],
-        status: [{ required: true, message: '优惠券状态不能为空', trigger: 'blur' }]
-      },
-      downloadLoading: false
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-    getList() {
-      this.listLoading = true
-      listCoupon(this.listQuery)
-        .then(response => {
-          // 为过期优惠卷赋负值
-          response.data.data.items.forEach(item => {
-            var now = new Date()
-            if (item.gmtEnd < now) {
-              item.status = -1
-            }
-            item.discount = item.discount / 100
-            item.min = item.min / 100
-          })
-          this.list = response.data.data.items
-          this.total = response.data.data.total
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.total = 0
-          this.listLoading = false
-        })
-    },
-    handleFilter() {
-      this.listQuery.pageNo = 1
-      this.getList()
-    },
-    resetForm() {
-      this.dataForm = {
-        id: undefined,
-        title: undefined,
-        desc: undefined,
-        tag: undefined,
-        total: 0,
-        discount: 0,
-        min: 0,
-        limit: 0,
-        type: 1,
-        status: 1,
-        goodsType: 0,
-        goodsValue: undefined,
-        timeType: 0,
-        days: undefined,
-        categoryId: undefined,
-        categoryTitle: undefined,
-        gmtStart: null,
-        gmtEnd: null
-      }
-    },
-    refreshOptions() {
-      if (this.options.length === 0) {
-        categoryTree().then(response => {
-          this.options = response.data.data
-        })
-      }
-    },
-    handleLink(e) {
-      if (e !== undefined) {
-        const tag = e[e.length - 1]
-        this.dataForm.categoryId = tag // 回调指定分类
-      }
-    },
-    handleCreate() {
-      this.resetForm()
-      this.dialogStatus = 'create'
-      this.dialogFormVisible = true
-      this.refreshOptions()
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    createData() {
-      // 时间
-      if (this.dataForm.days == null && (this.dataForm.gmtStart == null || this.dataForm.gmtEnd == null)) {
-        this.$notify.error({
-          title: '失败',
-          message: '请填写优惠卷使用区间'
-        })
-        return false
-      }
-      // 使用时间类型,不能为空,值要互斥
-      if (this.dataForm.timeType === 1) {
-        this.dataForm.days = undefined
-        if (this.dataForm.gmtEnd < this.dataForm.gmtStart || this.dataForm.gmtStart == null || this.dataForm.gmtEnd == null) {
-          this.$notify.error({
-            title: '失败',
-            message: '请正确选择日期'
-          })
-          return false
-        }
-        var start = new Date(this.dataForm.gmtStart)
-        var end = new Date(this.dataForm.gmtEnd)
-        this.dataForm.gmtStart = start.getTime()
-        this.dataForm.gmtEnd = end.getTime()
-      } else {
-        if (this.dataForm.days == null || this.dataForm.days === '0') {
-          this.$notify.error({
-            title: '失败',
-            message: '请正确填写时长,不能为空或为0'
-          })
-          return false
-        }
-        this.dataForm.gmtStart = undefined
-        this.dataForm.gmtEnd = undefined
-      }
-      // 判定全场通用,类型置为空
-      if (parseInt(this.dataForm.goodsType) === 0) {
-        this.dataForm.categoryId = undefined
-      }
-
-      // 判定满减门栏与折扣金额,如果折扣金额高于满减门栏,返回错误
-      if (parseInt(this.dataForm.discount) > parseInt(this.dataForm.min)) {
-        this.$notify.error({
-          title: '失败',
-          message: '满减门栏不能低于折扣金额,但是可以等于'
-        })
-        return false
-      }
-      this.$refs['dataForm'].validate(valid => {
-        if (valid) {
-          this.dataForm.discount = this.dataForm.discount * 100
-          this.dataForm.min = this.dataForm.min * 100
-          createCoupon(this.dataForm)
-            .then(response => {
-              this.getList()
-              this.dialogFormVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '创建优惠券成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    handleRead(row) {
-      this.dataForm = Object.assign({}, row)
-      this.dialogStatus = 'update'
-      this.dialogFormVisible = true
-      this.refreshOptions()
-      if (this.dataForm.days === 0 || this.dataForm.days == null) {
-        this.dataForm.timeType = 1
-      } else {
-        this.dataForm.timeType = 0
-      }
-      if (this.dataForm.categoryId === '' || this.dataForm.categoryId == null) {
-        this.dataForm.goodsType = 0
-      } else {
-        this.dataForm.goodsType = 1
-      }
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    // 本来用来修改的,但是技术有限,暂且放置
-    // updateData() {
-    //   this.$refs['dataForm'].validate(valid => {
-    //     if (valid) {
-    //       updateCoupon(this.dataForm)
-    //         .then(() => {
-    //           for (const v of this.list) {
-    //             if (v.id === this.dataForm.id) {
-    //               const index = this.list.indexOf(v)
-    //               this.list.splice(index, 1, this.dataForm)
-    //               break
-    //             }
-    //           }
-    //           this.dialogFormVisible = false
-    //           this.$notify.success({
-    //             title: '成功',
-    //             message: '更新优惠券成功'
-    //           })
-    //         })
-    //         .catch(response => {
-    //           this.$notify.error({
-    //             title: '失败',
-    //             message: response.data.errmsg
-    //           })
-    //         })
-    //     }
-    //   })
-    // },
-    // 删除优惠卷
-    handleDelete(row) {
-      this.$confirm('此操作将永久删除该优惠卷' + row.title + ', 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        deleteCoupon(row)
-          .then(response => {
-            this.$notify.success({
-              title: '成功',
-              message: '删除优惠券成功'
-            })
-            const index = this.list.indexOf(row)
-            this.list.splice(index, 1)
-          })
-          .catch(response => {
-            this.$notify.error({
-              title: '失败',
-              message: response.data.errmsg
-            })
-          })
-      }).catch(() => {
-        return false
-      })
-    },
-    // 改变优惠卷状态
-    handleStatus(row) {
-      // 如果优惠卷已经过期
-      if (row.status < 0) {
-        this.$notify.error({
-          title: '失败',
-          message: '过期优惠卷,建议删除'
-        })
-        return false
-      }
-      this.dataForm = Object.assign({}, row)
-      this.dataForm.status = this.dataForm.status === 1 ? 0 : 1
-      activeCoupon(this.dataForm)
-        .then(response => {
-          this.$notify.success({
-            title: '成功',
-            message: '修改优惠券成功'
-          })
-          // this.getList()
-          row.status = row.status === 1 ? 0 : 1
-        })
-        .catch(response => {
-          this.$notify.error({
-            title: '失败',
-            message: response.data.errmsg
-          })
-        })
-    },
-    // 到处excl表
-    handleDownload() {
-      var temp = new Date()
-      var date = temp.getFullYear() + '-' + temp.getMonth() + '-' + temp.getDate()
-      this.downloadLoading = true
-      import('@/vendor/Export2Excel').then(excel => {
-        const tHeader = [
-          '优惠券ID',
-          '名称',
-          '介绍',
-          '类型',
-          '最低消费',
-          '减免金额',
-          '每人限领',
-          '优惠券数量',
-          '剩余数量',
-          '状态',
-          '使用类目'
-        ]
-        const filterVal = [
-          'id',
-          'title',
-          'description',
-          'type',
-          'min',
-          'discount',
-          'limit',
-          'total',
-          'surplus',
-          'status',
-          'cateotry'
-        ]
-        excel.export_json_to_excel2(
-          tHeader,
-          this.list,
-          filterVal,
-          date + ' 优惠券信息'
-        )
-        this.downloadLoading = false
-      })
-    }
-  }
-}
-</script>

+ 0 - 176
unimall-admin/src/views/promotion/merchant.vue

@@ -1,176 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-card class="box-card">
-      <h3>商铺信息</h3>
-      <el-form ref="dataForm" :rules="rules" :model="dataForm" label-width="150px">
-        <el-form-item label="标题" prop="title">
-          <el-input v-model="dataForm.title" />
-        </el-form-item>
-        <el-form-item label="商铺logo" prop="logoUrl">
-          <el-upload
-            :action="uploadPath"
-            :show-file-list="false"
-            :on-success="uploadSuccessHandle"
-            :before-upload="onBeforeUpload"
-            class="avatar-uploader"
-            accept=".jpg, .jpeg, .png, .gif"
-          >
-            <img v-if="list.logoUrl" :src="dataForm.logoUrl" class="avatar" >
-            <i v-else class="el-icon-plus avatar-uploader-icon" />
-          </el-upload>
-        </el-form-item>
-
-        <el-form-item label="描述" prop="description">
-          <el-input v-model="dataForm.description" />
-        </el-form-item>
-        <el-form-item label="地址" prop="address">
-          <el-input v-model="dataForm.address" />
-        </el-form-item>
-        <!-- <el-form-item label="展示方式" prop="showType">
-          <el-radio-group v-model="dataForm.showType">
-            <el-radio :label="1">商品列表</el-radio>
-            <el-radio :label="2">点餐列表</el-radio>
-          </el-radio-group>
-        </el-form-item> -->
-      </el-form>
-    </el-card>
-
-    <div class="op-container">
-      <el-button v-permission="['promote:merchant:create']" type="primary" @click="handleEdit">保存更改</el-button>
-    </div>
-  </div>
-</template>
-
-<style>
-.el-tag + .el-tag {
-  margin-left: 10px;
-}
-
-.avatar-uploader .el-upload {
-  border: 1px dashed #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-  position: relative;
-  overflow: hidden;
-}
-
-.avatar-uploader .el-upload:hover {
-  border-color: #20a0ff;
-}
-
-.avatar-uploader-icon {
-  font-size: 28px;
-  color: #8c939d;
-  width: 120px;
-  height: 120px;
-  line-height: 120px;
-  text-align: center;
-}
-
-.avatar {
-  width: 145px;
-  height: 145px;
-  display: block;
-}
-</style>
-
-<script>
-import { uploadPath } from '@/api/storage'
-import Editor from '@tinymce/tinymce-vue'
-import { getToken } from '@/utils/auth'
-import { listMerchant, updateMerchant } from '@/api/merchant'
-
-export default {
-  name: 'GoodsEdit',
-  components: { Editor },
-  data() {
-    return {
-      uploadPath,
-      list: [],
-      dataForm: {
-        title: undefined,
-        logoUrl: undefined,
-        description: undefined,
-        address: undefined,
-        showType: 1
-      },
-      rules: {
-        //     showType: [{ required: true, message: '商铺展示类型不能为空', trigger: 'blur' }],
-        address: [{ required: true, message: '商铺地址不能为空', trigger: 'blur' }],
-        title: [{ required: true, message: '商铺标题不能为空', trigger: 'blur' }],
-        description: [{ required: true, message: '商铺描述不能为空', trigger: 'blur' }]
-      },
-      listLoading: false
-    }
-  },
-  computed: {
-    headers() {
-      return {
-        accessToken: getToken()
-      }
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-
-    getList: function() {
-      this.listLoading = true
-      listMerchant()
-        .then(response => {
-          this.list = response.data.data
-          this.dataForm = Object.assign({}, this.list)
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.listLoading = false
-        })
-    },
-    handleEdit: function() {
-      this.$refs['dataForm'].validate(valid => {
-        if (valid) {
-          updateMerchant(this.dataForm)
-            .then(response => {
-              this.$notify.success({
-                title: '成功',
-                message: '更改成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: '更改失败'
-              })
-            })
-        } else {
-          this.$notify.error({
-            title: '失败',
-            message: '请完善表单'
-          })
-        }
-      })
-    },
-    // 上传图片了处理图片
-    uploadSuccessHandle(e) {
-      this.list.logoUrl = e.url
-      this.dataForm.logoUrl = e.url
-      this.dialogFormVisible = false
-      this.dialogFormVisible = true
-    },
-    onBeforeUpload(file) {
-      const isIMAGE = file.type === 'image/jpeg' || 'image/gif' || 'image/png' || 'image/jpg'
-      const isLt1M = file.size / 1024 / 1024 < 1
-
-      if (!isIMAGE) {
-        this.$message.error('上传文件只能是图片格式!')
-      }
-      if (!isLt1M) {
-        this.$message.error('上传文件大小不能超过 1MB!')
-      }
-      return isIMAGE && isLt1M
-    }
-  }
-}
-</script>

+ 0 - 482
unimall-admin/src/views/promotion/merchantad.vue

@@ -1,482 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 查询和其他操作 -->
-    <div class="filter-container">
-      <el-select
-        v-model="listQuery.status"
-        style="width: 200px"
-        class="filter-item"
-        placeholder="请选择广告状态"
-      >
-        <el-option v-for="(key,index) in adStatusMap" :key="index" :label="key.name" :value="key.value" />
-      </el-select>
-      <el-select
-        v-model="listQuery.adType"
-        style="width: 200px"
-        class="filter-item"
-        placeholder="请选择广告类型"
-      >
-        <el-option v-for="(key,index) in adTypeMap" :key="index" :label="key.name" :value="key.value" />
-      </el-select>
-      <el-button
-        v-permission="['promote:advertisement:query']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="handleFilter"
-      >查找</el-button>
-
-      <el-button
-        v-permission="['promote:advertisement:create']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-edit"
-        @click="handleCreate"
-      >添加</el-button>
-    </div>
-
-    <!-- 查询结果 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      size="small"
-      element-loading-text="正在查询中。。。"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="广告ID" prop="id" sortable />
-
-      <el-table-column align="center" label="广告标题" prop="title" />
-
-      <el-table-column align="center" label="广告类型" prop="adType">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.adType | adTypeFilter }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="广告状态" prop="status">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.status | adStatusFilter }}</el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="广告图片" prop="imgUrl">
-        <template slot-scope="scope">
-          <img v-if="scope.row.imgUrl" :src="scope.row.imgUrl" width="80" >
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="活动链接" prop="url" />
-
-      <el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            v-permission="['promote:advertisement:update']"
-            type="primary"
-            size="mini"
-            @click="handleUpdate(scope.row)"
-          >编辑</el-button>
-          <el-button
-            v-permission="['promote:advertisement:delete']"
-            type="danger"
-            size="mini"
-            @click="handleDelete(scope.row)"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="listQuery.pageNo"
-      :limit.sync="listQuery.limit"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改对话框 -->
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
-      <el-form
-        ref="dataForm"
-        :rules="rules"
-        :model="dataForm"
-        status-icon
-        label-position="left"
-        label-width="100px"
-        style="width: 400px; margin-left:50px;"
-      >
-        <el-form-item label="隐藏的广告id" prop="id" hidden>
-          <el-input v-model="dataForm.id" />
-        </el-form-item>
-        <el-form-item label="广告标题" prop="title">
-          <el-input v-model="dataForm.title" />
-        </el-form-item>
-        <el-form-item label="广告图片" prop="imgUrl">
-          <el-upload
-            :headers="headers"
-            :action="uploadPath"
-            :show-file-list="false"
-            :on-success="uploadSuccessHandle"
-            :before-upload="onBeforeUpload"
-            class="avatar-uploader"
-            accept=".jpg, .jpeg, .png, .gif"
-          >
-            <img v-if="dataForm.imgUrl" ref="adImg" :src="dataForm.imgUrl" class="avatar">
-            <i v-else class="el-icon-plus avatar-uploader-icon" />
-          </el-upload>
-        </el-form-item>
-        <el-form-item label="广告类型" prop="adType">
-          <el-select v-model="dataForm.adType" placeholder="请选择">
-            <el-option v-for="(key, index) in adTypeMap" :key="index" :label="key.name" :value="key.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="广告状态" prop="status">
-          <el-select v-model="dataForm.status" placeholder="请选择">
-            <el-option v-for="(key, index) in adStatusMap" :key="index" :label="key.name" :value="key.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="活动链接">
-          <el-cascader
-            :options="options"
-            :props="{ checkStrictly: true }"
-            v-model="linkUnion"
-            placeholder="关联类目、商品"
-            filterable
-            @change="handleLink"
-          />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取消</el-button>
-        <el-button v-if="dialogStatus=='create'" type="primary" @click="createData">确定</el-button>
-        <el-button v-else type="primary" @click="updateData">确定</el-button>
-      </div>
-    </el-dialog>
-
-    <canvas ref="canvas" hidden/>
-  </div>
-</template>
-
-<style>
-.avatar-uploader .el-upload {
-  border: 1px dashed #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-  position: relative;
-  overflow: hidden;
-}
-
-.avatar-uploader .el-upload:hover {
-  border-color: #20a0ff;
-}
-
-.avatar-uploader-icon {
-  font-size: 28px;
-  color: #8c939d;
-  width: 120px;
-  height: 120px;
-  line-height: 120px;
-  text-align: center;
-}
-
-.avatar {
-  width: 145px;
-  height: 145px;
-  display: block;
-}
-</style>
-
-<script>
-import { listAd, createAd, updateAd, deleteAd, getImageColor } from '@/api/merchantad'
-// import { spuTree } from '@/api/goods'
-import { uploadPath } from '@/api/storage'
-import { getToken } from '@/utils/auth'
-import { clearTreeEmptyChildren } from '@/utils/index'
-import Pagination from '@/components/Pagination'
-import ElOption from '../../../node_modules/element-ui/packages/select/src/option' // Secondary package based on el-pagination
-
-const adTypeMap = [{ value: 1, unionType: 3, name: '轮播' }, { value: 2, unionType: 1, name: '分类精选' }, { value: 3, unionType: 3, name: '横幅' }, { value: 4, unionType: 1, name: '首页轮播下5按钮' }, { value: '', name: '全部' }]
-const adStatusMap = [{ value: 0, name: '冻结' }, { value: 1, name: '激活' }, { value: '', name: '全部' }]
-
-export default {
-  name: 'Ad',
-  components: {
-    ElOption,
-    Pagination
-  },
-  filters: {
-    adTypeFilter(code) {
-      return adTypeMap[code - 1]['name']
-    },
-    adStatusFilter(code) {
-      return adStatusMap[code]['name']
-    }
-  },
-  data() {
-    return {
-      uploadPath,
-      options: [],
-      value: [],
-      list: [],
-      total: 0,
-      listLoading: true,
-      linkUnion: undefined,
-      adTypeMap,
-      adStatusMap,
-      listQuery: {
-        pageNo: 1,
-        limit: 20,
-        status: undefined,
-        adType: undefined
-      },
-      dataForm: {
-        id: undefined,
-        adType: undefined,
-        title: undefined,
-        url: '',
-        imgUrl: undefined,
-        status: undefined,
-        color: undefined
-      },
-      dialogFormVisible: false,
-      dialogStatus: '',
-      textMap: {
-        update: '编辑',
-        create: '创建'
-      },
-      rules: {
-        title: [{ required: true, message: '广告标题不能为空', trigger: 'blur' }],
-        imgUrl: [{ required: true, message: '广告图片不能为空', trigger: 'blur' }],
-        adType: [{ required: true, message: '请选择广告类型', trigger: 'blur' }],
-        status: [{ required: true, message: '请选择广告状态', trigger: 'blur' }]
-      },
-      downloadLoading: false
-    }
-  },
-  computed: {
-    headers() {
-      return {
-        accessToken: getToken()
-      }
-    }
-  },
-  created() {
-    this.getList()
-  },
-  methods: {
-    getList() {
-      this.listLoading = true
-      listAd(this.listQuery)
-        .then(response => {
-          this.list = response.data.data.items
-          this.total = response.data.data.total
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.total = 0
-          this.listLoading = false
-        })
-    },
-    handleLink(e) {
-      if (e === undefined || e === null) {
-        return
-      }
-      const tag = e[e.length - 1]
-      let url = ''
-      if (tag.startsWith('C')) {
-        if (e.length < 3) {
-          this.$notify.error({
-            title: '提示',
-            message: '请关联第三级类目或者商品'
-          })
-          return
-        }
-        url = '/pages/product/list?tid=' + e[2].substring(2)
-      } else {
-        url = '/pages/product/detail?id=' + (e[3].substring(2))
-      }
-      this.dataForm.url = url
-    },
-    handleFilter() {
-      this.listQuery.page = 1
-      this.getList()
-    },
-    resetForm() {
-      this.dataForm = {
-        id: undefined,
-        adType: undefined,
-        title: undefined,
-        url: '',
-        imgUrl: undefined,
-        status: undefined,
-        color: undefined
-      }
-      this.linkUnion = undefined
-    },
-    refreshOptions() {
-      if (this.options.length === 0) {
-        spuTree().then(response => {
-          this.options = clearTreeEmptyChildren(response.data.data)
-        })
-      }
-    },
-    handleCreate() {
-      this.resetForm()
-      this.refreshOptions()
-      this.dialogStatus = 'create'
-      this.dialogFormVisible = true
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    uploadUrl: function(response) {
-      this.dataForm.imgUrl = response.url
-    },
-    createData() {
-      this.$refs['dataForm'].validate(valid => {
-        if (valid && this.checkAdType()) {
-          createAd(this.dataForm)
-            .then(response => {
-              this.getList()
-              this.dialogFormVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '创建成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    checkAdType() {
-      // 检测关联选项是否是三级目录或商品
-      if (this.linkUnion === undefined || this.linkUnion === null || this.linkUnion.length < 3) {
-        this.$notify.error({
-          title: '失败',
-          message: '请关联三级目录或者商品'
-        })
-        return false
-      }
-
-      for (let i = 0; i < this.adTypeMap.length; i++) {
-        const item = this.adTypeMap[i]
-        if (item.value === this.dataForm.adType) {
-          if (item.unionType === 1 && this.linkUnion.length === 4) {
-            this.$notify.error({
-              title: '失败',
-              message: '此类广告只能关联三级类目'
-            })
-            return false
-          } else if (this.unionType === 2 && this.linkUnion.length === 3) {
-            this.$notify.error({
-              title: '失败',
-              message: '此类广告只能关联商品'
-            })
-            return false
-          }
-        }
-      }
-      return true
-    },
-    // 点击编辑按钮时的处理
-    handleUpdate(row) {
-      this.dataForm = Object.assign({}, row)
-      this.refreshOptions()
-      this.dialogStatus = 'update'
-      if (this.dataForm.url.indexOf('tid') >= 0) {
-        this.linkUnion = 'C_' + this.dataForm.url.replace(/[^0-9]/ig, '')
-      } else { this.linkUnion = 'G_' + this.dataForm.url.replace(/[^0-9]/ig, '') }
-      this.dialogFormVisible = true
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    updateData() {
-      this.$refs['dataForm'].validate(valid => {
-        if (valid && this.checkAdType()) {
-          updateAd(this.dataForm)
-            .then(() => {
-              for (const v of this.list) {
-                if (v.id === this.dataForm.id) {
-                  const index = this.list.indexOf(v)
-                  this.list.splice(index, 1, this.dataForm)
-                  break
-                }
-              }
-              this.dialogFormVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '更新广告成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    handleDelete(row) {
-      this.$confirm('此操作将永久删除该广告--' + row.title + '--, 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        deleteAd(row.id, row.adType)
-          .then(response => {
-            this.$notify.success({
-              title: '成功',
-              message: '删除成功'
-            })
-            const index = this.list.indexOf(row)
-            this.list.splice(index, 1)
-          })
-          .catch(response => {
-            this.$notify.error({
-              title: '失败',
-              message: response.data.errmsg
-            })
-          })
-      }).catch(() => {
-        return false
-      })
-    },
-    // 上传图片了处理图片
-    uploadSuccessHandle(e, file) {
-      const that = this
-      this.dataForm.imgUrl = e.url
-      this.dialogFormVisible = false
-      this.dialogFormVisible = true
-      const img = new Image()
-      // 加载完成执行
-      img.src = e.url
-      img.setAttribute('crossOrigin', 'anonymous')
-      img.src = e.url + '?time=' + new Date().valueOf()
-      img.onload = function(e) {
-        var canvas = that.$refs.canvas
-        that.dataForm.color = getImageColor(canvas, img)
-      }
-    },
-    onBeforeUpload(file) {
-      const isIMAGE = file.type === 'image/jpeg' || 'image/gif' || 'image/png' || 'image/jpg'
-      const isLt1M = file.size / 1024 / 1024 < 1
-
-      if (!isIMAGE) {
-        this.$message.error('上传文件只能是图片格式!')
-      }
-      if (!isLt1M) {
-        this.$message.error('上传文件大小不能超过 1MB!')
-      }
-      return isIMAGE && isLt1M
-    }
-  }
-}
-</script>

+ 0 - 357
unimall-admin/src/views/promotion/recommend.vue

@@ -1,357 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- 查询和其他操作 -->
-    <div class="filter-container">
-      <el-select
-        v-model="listQuery.recommendType"
-        style="width: 200px"
-        class="filter-item"
-        placeholder="请选择推荐类型"
-      >
-        <el-option v-for="(key,index) in recommendTypeMap" :key="index" :label="key.name" :value="key.value" />
-      </el-select>
-      <el-button
-        v-permission="['promote:recommend:query']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="queryRecommendBtn"
-      >查找</el-button>
-      <el-button
-        v-permission="['promote:recommend:create']"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-edit"
-        @click="createDialogBtn"
-      >添加</el-button>
-
-    </div>
-
-    <!-- 查询结果 -->
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      size="small"
-      element-loading-text="正在查询中。。。"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="推荐ID" prop="id" sortable />
-
-      <el-table-column align="center" label="推荐商品" prop="spuTitle" />
-
-      <el-table-column align="center" label="推荐类型" prop="recommendType">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.recommendType | recommendTypeFilter }}</el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <!-- <el-button
-            v-permission="['promote:advertisement:update']"
-            type="primary"
-            size="mini"
-            @click="updateDialogBtn(scope.row)"
-          >编辑</el-button> -->
-          <el-button
-            v-permission="['promote:advertisement:delete']"
-            type="danger"
-            size="mini"
-            @click="deleteRecommendBtn(scope.row)"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="listQuery.pageNo"
-      :limit.sync="listQuery.limit"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改对话框 -->
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
-      <el-form
-        ref="dataForm"
-        :rules="rules"
-        :model="dataForm"
-        status-icon
-        label-position="left"
-        label-width="100px"
-        style="width: 400px; margin-left:50px;"
-      >
-        <el-form-item label="隐藏的推荐id" prop="id" hidden>
-          <el-input v-model="dataForm.id" />
-        </el-form-item>
-
-        <el-form-item label="推荐类型" prop="recommendType">
-          <el-select v-model="dataForm.recommendType" placeholder="请选择">
-            <el-option v-for="(key, index) in recommendTypeMap" :key="index" :label="key.name" :value="key.value" />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="推荐商品" prop="spuId">
-          <el-cascader
-            :options="options"
-            v-model="linkunio"
-            placeholder="关联商品"
-            filterable
-            @change="handleLink"
-          />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取消</el-button>
-        <el-button v-if="dialogStatus=='create'" type="primary" @click="createRecommendBtn">确定</el-button>
-        <!-- <el-button v-else type="primary" @click="updateRecommendBtn">确定</el-button> -->
-      </div>
-    </el-dialog>
-
-</div></template>
-
-<style>
-.avatar-uploader .el-upload {
-  border: 1px dashed #d9d9d9;
-  border-radius: 6px;
-  cursor: pointer;
-  position: relative;
-  overflow: hidden;
-}
-
-.avatar-uploader .el-upload:hover {
-  border-color: #20a0ff;
-}
-
-.avatar-uploader-icon {
-  font-size: 28px;
-  color: #8c939d;
-  width: 120px;
-  height: 120px;
-  line-height: 120px;
-  text-align: center;
-}
-
-.avatar {
-  width: 145px;
-  height: 145px;
-  display: block;
-}
-</style>
-
-<script>
-// import { listRecommend, createRecommend, deleteRecommend } from '@/api/recommend'
-// import { spuTree } from '@/api/goods'
-import { uploadPath } from '@/api/storage'
-import { getToken } from '@/utils/auth'
-import { clearTreeEmptyChildren } from '@/utils/index'
-import Pagination from '@/components/Pagination'
-import ElOption from '../../../node_modules/element-ui/packages/select/src/option' // Secondary package based on el-pagination
-
-const recommendTypeMap = [{ value: 1, unionType: 3, name: '橱窗推荐' }, { value: '', unionType: 3, name: '全部' }]
-
-export default {
-  name: 'Recommend',
-  components: {
-    ElOption,
-    Pagination
-  },
-  filters: {
-    recommendTypeFilter(code) {
-      return recommendTypeMap[code - 1]['name']
-    }
-  },
-  data() {
-    return {
-      uploadPath,
-      linkunio: undefined,
-      options: [],
-      value: [],
-      list: [],
-      total: 0,
-      listLoading: true,
-      recommendTypeMap,
-      listQuery: {
-        pageNo: 1,
-        limit: 20,
-        recommendType: undefined
-      },
-      dataForm: {
-        id: undefined,
-        recommendType: undefined,
-        spuId: undefined
-      },
-      dialogFormVisible: false,
-      dialogStatus: '',
-      textMap: {
-        update: '编辑',
-        create: '创建'
-      },
-      rules: {
-        recommendType: [{ required: true, message: '推荐类型', trigger: 'blur' }],
-        spuId: [{ required: true, message: '推荐商品', trigger: 'blur' }]
-      },
-      downloadLoading: false
-    }
-  },
-  computed: {
-    headers() {
-      return {
-        accessToken: getToken()
-      }
-    }
-  },
-  created() {
-    this.getList()
-    this.refreshOptions()
-  },
-  methods: {
-    getList() {
-      this.listLoading = true
-      listRecommend(this.listQuery)
-        .then(response => {
-          this.list = response.data.data.items
-          this.total = response.data.data.total
-          this.listLoading = false
-        })
-        .catch(() => {
-          this.list = []
-          this.total = 0
-          this.listLoading = false
-        })
-    },
-    // 选择时赋值spuId
-    handleLink(e) {
-      if (e !== undefined) {
-        const tag = e[e.length - 1]
-        this.dataForm.spuId = tag.substring(2)
-      }
-    },
-    queryRecommendBtn() {
-      this.listQuery.page = 1
-      this.getList()
-    },
-    resetForm() {
-      this.dataForm = {
-        id: undefined,
-        recommendType: undefined,
-        spuId: undefined
-      }
-    },
-    refreshOptions() {
-      if (this.options.length === 0) {
-        spuTree().then(response => {
-          this.options = clearTreeEmptyChildren(response.data.data)
-        })
-      }
-    },
-    createDialogBtn() {
-      this.resetForm()
-      this.refreshOptions()
-      this.dialogStatus = 'create'
-      this.linkunio = undefined
-      this.dialogFormVisible = true
-      this.$nextTick(() => {
-        this.$refs['dataForm'].clearValidate()
-      })
-    },
-    createRecommendBtn() {
-      this.$refs['dataForm'].validate(valid => {
-        if (valid && this.checkGoods()) {
-          createRecommend(this.dataForm)
-            .then(response => {
-            // 需要后台返回值
-            // this.list.unshift(response.data.data)
-              this.getList()
-              this.dialogFormVisible = false
-              this.$notify.success({
-                title: '成功',
-                message: '创建成功'
-              })
-            })
-            .catch(response => {
-              this.$notify.error({
-                title: '失败',
-                message: response.data.errmsg
-              })
-            })
-        }
-      })
-    },
-    checkGoods() {
-      if (this.linkunio === undefined || this.linkunio === null || this.linkunio.length <= 3) {
-        this.$notify.error({
-          title: '提示',
-          message: '请选择商品'
-        })
-        return false
-      }
-      return true
-    },
-    // // 点击编辑按钮时的处理
-    // updateRecommend(row) {
-    //   this.dataForm = Object.assign({}, row)
-    //   this.refreshOptions()
-    //   this.dialogStatus = 'update'
-    //   this.dialogFormVisible = true
-    //   this.$nextTick(() => {
-    //     this.$refs['dataForm'].clearValidate()
-    //   })
-    // },
-    // updateData() {
-    //   this.$refs['dataForm'].validate(valid => {
-    //     if (valid && this.checkAdType()) {
-    //       updateRecommend(this.dataForm)
-    //         .then(() => {
-    //           for (const v of this.list) {
-    //             if (v.id === this.dataForm.id) {
-    //               const index = this.list.indexOf(v)
-    //               this.list.splice(index, 1, this.dataForm)
-    //               break
-    //             }
-    //           }
-    //           this.dialogFormVisible = false
-    //           this.$notify.success({
-    //             title: '成功',
-    //             message: '更新广告成功'
-    //           })
-    //         })
-    //         .catch(response => {
-    //           this.$notify.error({
-    //             title: '失败',
-    //             message: response.data.errmsg
-    //           })
-    //         })
-    //     }
-    //   })
-    // },
-    deleteRecommendBtn(row) {
-      this.$confirm('此操作将永久删除该商品推荐--' + row.spuTitle + '--, 是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        deleteRecommend(row.id, row.recommendType)
-          .then(response => {
-            this.$notify.success({
-              title: '成功',
-              message: '删除成功'
-            })
-            const index = this.list.indexOf(row)
-            this.list.splice(index, 1)
-          })
-          .catch(response => {
-            this.$notify.error({
-              title: '失败',
-              message: response.data.errmsg
-            })
-          })
-      }).catch(() => {
-        return false
-      })
-    }
-  }
-}
-</script>