Procházet zdrojové kódy

京东销售数据页面完成,其他页面bug解决

cz před 2 roky
rodič
revize
913fd2f214

+ 31 - 0
src/api/order-management/order/JDsalesData.js

@@ -0,0 +1,31 @@
+import request from '@/router/axios'
+
+// 京东销售列表 
+export function getList(data = {}) {
+  return request({
+    url: '/api/victoriatourist/jdSalesData/page',
+    method: 'post',
+    data: data,
+  })
+}
+
+
+
+// 京东销售excel导入
+export function excelImport(data = {}) {
+  return request({
+    url: '/api/victoriatourist/jdSalesData/excelImport',
+    method: 'post',
+    data: data,
+  })
+}
+
+
+// 京东销售数据删除 
+export function del(data = {}) {
+  return request({
+    url: '/api/victoriatourist/jdSalesData/delete',
+    method: 'post',
+    data: data,
+  })
+}

+ 239 - 207
src/page/login/userlogin.vue

@@ -1,231 +1,262 @@
 <template>
-  <el-form class="login-form"
-           status-icon
-           :rules="loginRules"
-           ref="loginForm"
-           :model="loginForm"
-           label-width="0">
+  <el-form
+    class="login-form"
+    status-icon
+    :rules="loginRules"
+    ref="loginForm"
+    :model="loginForm"
+    label-width="0"
+  >
     <el-form-item v-if="tenantMode" prop="tenantId">
-      <el-input size="small"
-                @keyup.enter.native="handleLogin"
-                v-model="loginForm.tenantId"
-                auto-complete="off"
-                :placeholder="$t('login.tenantId')">
-        <i slot="prefix" class="icon-quanxian"/>
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        v-model="loginForm.tenantId"
+        auto-complete="off"
+        :placeholder="$t('login.tenantId')"
+      >
+        <i slot="prefix" class="icon-quanxian" />
       </el-input>
     </el-form-item>
     <el-form-item prop="username">
-      <el-input size="small"
-                @keyup.enter.native="handleLogin"
-                v-model="loginForm.username"
-                auto-complete="off"
-                :placeholder="$t('login.username')">
-        <i slot="prefix" class="icon-yonghu"/>
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        v-model="loginForm.username"
+        auto-complete="off"
+        :placeholder="$t('login.username')"
+      >
+        <i slot="prefix" class="icon-yonghu" />
       </el-input>
     </el-form-item>
     <el-form-item prop="password">
-      <el-input size="small"
-                @keyup.enter.native="handleLogin"
-                :type="passwordType"
-                v-model="loginForm.password"
-                auto-complete="off"
-                :placeholder="$t('login.password')">
-        <i class="el-icon-view el-input__icon" slot="suffix" @click="showPassword"/>
-        <i slot="prefix" class="icon-mima"/>
+      <el-input
+        size="small"
+        @keyup.enter.native="handleLogin"
+        :type="passwordType"
+        v-model="loginForm.password"
+        auto-complete="off"
+        :placeholder="$t('login.password')"
+      >
+        <i
+          class="el-icon-view el-input__icon"
+          slot="suffix"
+          @click="showPassword"
+        />
+        <i slot="prefix" class="icon-mima" />
       </el-input>
     </el-form-item>
     <el-form-item v-if="this.website.captchaMode" prop="code">
       <el-row :span="24">
         <el-col :span="16">
-          <el-input size="small"
-                    @keyup.enter.native="handleLogin"
-                    v-model="loginForm.code"
-                    auto-complete="off"
-                    :placeholder="$t('login.code')">
-            <i slot="prefix" class="icon-yanzhengma"/>
+          <el-input
+            size="small"
+            @keyup.enter.native="handleLogin"
+            v-model="loginForm.code"
+            auto-complete="off"
+            :placeholder="$t('login.code')"
+          >
+            <i slot="prefix" class="icon-yanzhengma" />
           </el-input>
         </el-col>
         <el-col :span="8">
           <div class="login-code">
-            <img :src="loginForm.image" class="login-code-img" @click="refreshCode"
+            <img
+              :src="loginForm.image"
+              class="login-code-img"
+              @click="refreshCode"
             />
           </div>
         </el-col>
       </el-row>
     </el-form-item>
     <el-form-item>
-      <el-button type="primary"
-                 size="small"
-                 @click.native.prevent="handleLogin"
-                 class="login-submit">{{$t('login.submit')}}
+      <el-button
+        type="primary"
+        size="small"
+        @click.native.prevent="handleLogin"
+        class="login-submit"
+        >{{ $t("login.submit") }}
       </el-button>
     </el-form-item>
-    <el-dialog title="用户信息选择"
-               append-to-body
-               :visible.sync="userBox"
-               width="350px">
-      <avue-form :option="userOption" v-model="userForm" @submit="submitLogin"/>
+    <el-dialog
+      title="用户信息选择"
+      append-to-body
+      :visible.sync="userBox"
+      width="350px"
+    >
+      <avue-form
+        :option="userOption"
+        v-model="userForm"
+        @submit="submitLogin"
+      />
     </el-dialog>
   </el-form>
 </template>
 
 <script>
-  import {mapGetters} from "vuex";
-  import {info} from "@/api/system/tenant";
-  import {getCaptcha} from "@/api/user";
-  import {getTopUrl} from "@/util/util";
+import { mapGetters } from "vuex";
+import { info } from "@/api/system/tenant";
+import { getCaptcha } from "@/api/user";
+import { getTopUrl } from "@/util/util";
 
-  export default {
-    name: "userlogin",
-    data() {
-      return {
-        tenantMode: this.website.tenantMode,
-        loginForm: {
-          //租户ID
-          tenantId: "000000",
-          //部门ID
-          deptId: "",
-          //角色ID
-          roleId: "",
-          //用户名
-          username: "admin",
-          //密码
-          password: "admin",
-          //账号类型
-          type: "account",
-          //验证码的值
-          code: "",
-          //验证码的索引
-          key: "",
-          //预加载白色背景
-          image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
-        },
-        loginRules: {
-          tenantId: [
-            {required: false, message: "请输入租户ID", trigger: "blur"}
-          ],
-          username: [
-            {required: true, message: "请输入用户名", trigger: "blur"}
-          ],
-          password: [
-            {required: true, message: "请输入密码", trigger: "blur"},
-            {min: 1, message: "密码长度最少为6位", trigger: "blur"}
-          ]
-        },
-        passwordType: "password",
-        userBox: false,
-        userForm: {
-          deptId: '',
-          roleId: ''
-        },
-        userOption: {
-          labelWidth: 70,
-          submitBtn: true,
-          emptyBtn: false,
-          submitText: '登录',
-          column: [
-            {
-              label: '部门',
-              prop: 'deptId',
-              type: 'select',
-              props: {
-                label: 'deptName',
-                value: 'id'
-              },
-              dicUrl: '/api/blade-system/dept/select',
-              span: 24,
-              display: false,
-              rules: [{
+export default {
+  name: "userlogin",
+  data() {
+    return {
+      tenantMode: this.website.tenantMode,
+      loginForm: {
+        //租户ID
+        tenantId: "000000",
+        //部门ID
+        deptId: "",
+        //角色ID
+        roleId: "",
+        //用户名
+        username: "admin",
+        //密码
+        password: "admin",
+        //账号类型
+        type: "account",
+        //验证码的值
+        code: "",
+        //验证码的索引
+        key: "",
+        //预加载白色背景
+        image:
+          "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
+      },
+      loginRules: {
+        tenantId: [
+          { required: false, message: "请输入租户ID", trigger: "blur" },
+        ],
+        username: [
+          { required: true, message: "请输入用户名", trigger: "blur" },
+        ],
+        password: [
+          { required: true, message: "请输入密码", trigger: "blur" },
+          { min: 1, message: "密码长度最少为6位", trigger: "blur" },
+        ],
+      },
+      passwordType: "password",
+      userBox: false,
+      userForm: {
+        deptId: "",
+        roleId: "",
+      },
+      userOption: {
+        labelWidth: 70,
+        submitBtn: true,
+        emptyBtn: false,
+        submitText: "登录",
+        column: [
+          {
+            label: "部门",
+            prop: "deptId",
+            type: "select",
+            props: {
+              label: "deptName",
+              value: "id",
+            },
+            dicUrl: "/api/blade-system/dept/select",
+            span: 24,
+            display: false,
+            rules: [
+              {
                 required: true,
                 message: "请选择部门",
-                trigger: "blur"
-              }],
-            },
-            {
-              label: '角色',
-              prop: 'roleId',
-              type: 'select',
-              props: {
-                label: 'roleName',
-                value: 'id'
+                trigger: "blur",
               },
-              dicUrl: '/api/blade-system/role/select',
-              span: 24,
-              display: false,
-              rules: [{
+            ],
+          },
+          {
+            label: "角色",
+            prop: "roleId",
+            type: "select",
+            props: {
+              label: "roleName",
+              value: "id",
+            },
+            dicUrl: "/api/blade-system/role/select",
+            span: 24,
+            display: false,
+            rules: [
+              {
                 required: true,
                 message: "请选择角色",
-                trigger: "blur"
-              }],
-            },
-          ]
-        }
-      };
-    },
-    created() {
-      this.getTenant();
-      this.refreshCode();
+                trigger: "blur",
+              },
+            ],
+          },
+        ],
+      },
+    };
+  },
+  created() {
+    this.getTenant();
+    this.refreshCode();
+  },
+  mounted() {},
+  watch: {
+    "loginForm.deptId"() {
+      const column = this.findObject(this.userOption.column, "deptId");
+      if (this.loginForm.deptId.includes(",")) {
+        column.dicUrl = `/api/blade-system/dept/select?deptId=${this.loginForm.deptId}`;
+        column.display = true;
+      } else {
+        column.dicUrl = "";
+      }
     },
-    mounted() {
+    "loginForm.roleId"() {
+      const column = this.findObject(this.userOption.column, "roleId");
+      if (this.loginForm.roleId.includes(",")) {
+        column.dicUrl = `/api/blade-system/role/select?roleId=${this.loginForm.roleId}`;
+        column.display = true;
+      } else {
+        column.dicUrl = "";
+      }
     },
-    watch: {
-      'loginForm.deptId'() {
-        const column = this.findObject(this.userOption.column, "deptId");
-        if (this.loginForm.deptId.includes(",")) {
-          column.dicUrl = `/api/blade-system/dept/select?deptId=${this.loginForm.deptId}`;
-          column.display = true;
-        } else {
-          column.dicUrl = '';
-        }
-      },
-      'loginForm.roleId'() {
-        const column = this.findObject(this.userOption.column, "roleId");
-        if (this.loginForm.roleId.includes(",")) {
-          column.dicUrl = `/api/blade-system/role/select?roleId=${this.loginForm.roleId}`;
-          column.display = true;
-        } else {
-          column.dicUrl = '';
-        }
+  },
+  computed: {
+    ...mapGetters(["tagWel", "userInfo"]),
+  },
+  props: [],
+  methods: {
+    refreshCode() {
+      if (this.website.captchaMode) {
+        getCaptcha().then((res) => {
+          const data = res.data;
+          this.loginForm.key = data.key;
+          this.loginForm.image = data.image;
+        });
       }
     },
-    computed: {
-      ...mapGetters(["tagWel", "userInfo"])
+    showPassword() {
+      this.passwordType === ""
+        ? (this.passwordType = "password")
+        : (this.passwordType = "");
     },
-    props: [],
-    methods: {
-      refreshCode() {
-        if (this.website.captchaMode) {
-          getCaptcha().then(res => {
-            const data = res.data;
-            this.loginForm.key = data.key;
-            this.loginForm.image = data.image;
-          })
-        }
-      },
-      showPassword() {
-        this.passwordType === ""
-          ? (this.passwordType = "password")
-          : (this.passwordType = "");
-      },
-      submitLogin (form, done) {
-        if (form.deptId !== '') {
-          this.loginForm.deptId = form.deptId;
-        }
-        if (form.roleId !== '') {
-          this.loginForm.roleId = form.roleId;
-        }
-        this.handleLogin();
-        done();
-      },
-      handleLogin() {
-        this.$refs.loginForm.validate(valid => {
-          if (valid) {
-            const loading = this.$loading({
-              lock: true,
-              text: '登录中,请稍后。。。',
-              spinner: "el-icon-loading"
-            });
-            this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
+    submitLogin(form, done) {
+      if (form.deptId !== "") {
+        this.loginForm.deptId = form.deptId;
+      }
+      if (form.roleId !== "") {
+        this.loginForm.roleId = form.roleId;
+      }
+      this.handleLogin();
+      done();
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate((valid) => {
+        if (valid) {
+          const loading = this.$loading({
+            lock: true,
+            text: "登录中,请稍后。。。",
+            spinner: "el-icon-loading",
+          });
+          this.$store
+            .dispatch("LoginByUsername", this.loginForm)
+            .then(() => {
               if (this.website.switchMode) {
                 const deptId = this.userInfo.dept_id;
                 const roleId = this.userInfo.role_id;
@@ -237,30 +268,31 @@
                   return false;
                 }
               }
-              this.$router.push({path: this.tagWel.value});
+              this.$router.push({ path: this.tagWel.value });
               loading.close();
-            }).catch(() => {
+            })
+            .catch(() => {
               loading.close();
               this.refreshCode();
             });
-          }
-        });
-      },
-      getTenant() {
-        let domain = getTopUrl();
-        // 临时指定域名,方便测试
-        //domain = "https://bladex.vip";
-        info(domain).then(res => {
-          const data = res.data;
-          if (data.success && data.data.tenantId) {
-            this.tenantMode = false;
-            this.loginForm.tenantId = data.data.tenantId;
-            this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
-          }
-        })
-      }
-    }
-  };
+        }
+      });
+    },
+    getTenant() {
+      let domain = getTopUrl();
+      // 临时指定域名,方便测试
+      //domain = "https://bladex.vip";
+      info(domain).then((res) => {
+        const data = res.data;
+        if (data.success && data.data.tenantId) {
+          this.tenantMode = false;
+          this.loginForm.tenantId = data.data.tenantId;
+          this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
+        }
+      });
+    },
+  },
+};
 </script>
 
 <style>

+ 11 - 0
src/router/page/index.js

@@ -307,6 +307,17 @@ export default [{
     }, ],
   },
   {
+    path: '/order-management/JDsalesData',
+    component: Layout,
+    redirect: '/order-management/JDsalesData/index',
+    children: [{
+      path: 'index',
+      name: '京东销售数据',
+      component: () => import( /* webpackChunkName: "page" */ '@/views/order-management/JDsalesData/index'),
+      props: true,
+    }, ],
+  },
+  {
     path: '/order-management/afterSales',
     component: Layout,
     redirect: '/order-management/afterSales/index',

+ 2 - 2
src/views/inventory-management/combination/index.vue

@@ -167,12 +167,12 @@ export default {
         <el-table-column
           label="组合后放置仓库"
           align="left"
-          prop="sourceWarehouseName"
+          prop="combinationWarehouseName"
         />
         <el-table-column
           label="半成品所在仓库"
           align="left"
-          prop="combinationWarehouseName"
+          prop="sourceWarehouseName"
         />
         <el-table-column
           label="组合数量"

+ 209 - 0
src/views/order-management/JDsalesData/index.vue

@@ -0,0 +1,209 @@
+
+
+<script>
+import test from "@/components/form-test/index.vue";
+import query from "@/components/query/index.vue";
+import byTable from "@/components/by-table/index.js";
+import * as API from "@/api/order-management/order/JDsalesData.js";
+
+import { getToken } from "@/util/auth";
+
+export default {
+  components: {
+    test,
+    byTable,
+    query,
+  },
+  data() {
+    return {
+      uploadHeader: {
+        Authorization: "Basic c2FiZXI6c2FiZXJfc2VjcmV0",
+        "Blade-Auth": "bearer " + getToken(),
+      },
+      btnForm: {
+        otherButton: {
+          list: [
+            {
+              name: "Excel导入",
+              methodsText: "excelImport",
+              type: "primary",
+              excelImport: () => {
+                this.excelImport();
+              },
+            },
+          ],
+        },
+      },
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        keyword: "",
+      },
+      selectConfig: [],
+      tableList: [],
+      total: 0,
+      loading: false,
+      openExcel: false,
+      excelForm: {},
+      excelLoading: false,
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    getList() {
+      this.loading = true;
+      API.getList(this.queryParams).then(
+        (res) => {
+          this.tableList = res.data.data.records;
+          this.total = res.data.data.total;
+          this.loading = false;
+        },
+        (err) => {
+          console.log("getList: " + err);
+          this.loading = false;
+        }
+      );
+    },
+    handleQuery() {
+      this.getList();
+    },
+
+    excelImport() {
+      this.openExcel = true;
+    },
+    handleLookDetails(row) {
+      this.selectOrderId = row.id;
+      this.detailsDialog = true;
+    },
+    handleProgress() {
+      this.excelLoading = true;
+    },
+    handleError(err) {
+      // err.message 去除error对象中的错误信息
+      const data = JSON.parse(err.message);
+      if (data.code !== 200) {
+        this.msgInfo(data.msg);
+      }
+      this.openExcel = false;
+      this.excelLoading = false;
+    },
+    handleSuccess() {
+      this.msgSuccess("导入成功! ");
+      setTimeout(() => {
+        this.excelLoading = false;
+        this.openExcel = false;
+        this.getList();
+      }, 300);
+    },
+    handleDel(row) {
+      this.$confirm("是否确认删除该条数据", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        API.del({ id: row.id }).then(() => {
+          this.msgSuccess("删除成功");
+          this.getList();
+        });
+      });
+    },
+  },
+};
+</script>
+
+
+<template>
+  <div class="box-card">
+    <el-card class="header">
+      <test :form-config="btnForm"></test>
+    </el-card>
+    <el-card class="body-main">
+      <!-- <query
+        :selectConfig="selectConfig"
+        :req="queryParams"
+        :isShowMore="true"
+        @handleQuery="handleQuery"
+        @handleMore="
+          () => {
+            queryDialog = true;
+          }
+        "
+      ></query> -->
+      <el-table :data="tableList" v-loading="loading">
+        <el-table-column label="产品名称" align="left" prop="productName" />
+        <el-table-column label="产品编码" align="left" prop="productCode" />
+        <el-table-column label="产品分类" align="left" prop="classifyName" />
+        <!-- <el-table-column label="现有库存" align="left" />
+        <el-table-column label="可用库存" align="left" /> -->
+        <el-table-column label="出库数量" align="left" prop="quantity" />
+        <el-table-column label="操作" align="center" width="100">
+          <template slot-scope="scope">
+            <el-button type="text" @click="handleDel(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-card>
+    <el-dialog
+      title="Excel导入"
+      :visible.sync="openExcel"
+      v-if="openExcel"
+      width="40%"
+      top="20vh"
+      v-loading="excelLoading"
+      element-loading-text="文件导入中,请稍后!"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.2)"
+    >
+      <el-form
+        label-position="right"
+        :model="excelForm"
+        ref="excelForm"
+        label-width="80px"
+      >
+        <el-form-item label="Excel">
+          <el-upload
+            action="/api/victoriatourist/jdSalesData/excelImport"
+            :data="excelForm"
+            :headers="uploadHeader"
+            :on-success="handleSuccess"
+            :on-progress="handleProgress"
+            :show-file-list="false"
+            :on-error="handleError"
+            accept=".xlsx"
+          >
+            <el-button size="small" type="primary">点击导入</el-button>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+
+<style lang="scss" scoped>
+.box-card {
+  height: calc(100vh - 110px);
+  overflow-y: auto;
+  display: flex;
+  flex-direction: column;
+  .header {
+    margin-bottom: 10px;
+    box-sizing: border-box;
+  }
+  .body-main {
+    flex: 1;
+    overflow-y: auto;
+  }
+}
+</style>

+ 5 - 1
src/views/order-management/order/JDorder.vue

@@ -197,7 +197,11 @@ export default {
       this.excelLoading = true;
     },
     handleError(err) {
-      this.msgInfo(`未找到对应产品 , 请重试`);
+      // err.message 去除error对象中的错误信息
+      const data = JSON.parse(err.message);
+      if (data.code !== 200) {
+        this.msgInfo(data.msg);
+      }
       this.openExcel = false;
       this.excelLoading = false;
     },