{"id":744,"date":"2024-12-10T20:37:56","date_gmt":"2024-12-10T12:37:56","guid":{"rendered":"https:\/\/eve2333.top\/?p=744"},"modified":"2024-12-10T20:37:56","modified_gmt":"2024-12-10T12:37:56","slug":"%e9%9d%9e%e5%b8%b8%e7%ae%80%e5%8d%95%e5%ae%9e%e7%94%a8%e7%9a%84%e5%89%8d%e5%90%8e%e7%ab%af%e5%88%86%e7%a6%bb%e9%a1%b9%e7%9b%ae-%e4%bb%93%e5%ba%93%e7%ae%a1%e7%90%86%e7%b3%bb%e7%bb%9f%ef%bc%88springbo-3","status":"publish","type":"post","link":"https:\/\/eve2333.top\/?p=744","title":{"rendered":"\u975e\u5e38\u7b80\u5355\u5b9e\u7528\u7684\u524d\u540e\u7aef\u5206\u79bb\u9879\u76ee-\u4ed3\u5e93\u7ba1\u7406\u7cfb\u7edf\uff08Springboot+Vue\uff09part 3"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">&nbsp;\u4e8c\u5341\u4e8c\u3001\u767b\u5f55<\/h1>\n\n\n\n<p>Login.vue\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div class=\"loginBody\"&gt;\n    &lt;div class=\"loginDiv\"&gt;\n      &lt;div class=\"login-content\"&gt;\n        &lt;h1 class=\"login-title\"&gt;\u7528\u6237\u767b\u5f55&lt;\/h1&gt;\n        &lt;el-form :model=\"loginForm\" label-width=\"100px\"\n                 :rules=\"rules\" ref=\"loginForm\"&gt;\n          &lt;el-form-item label=\"\u8d26\u53f7\" prop=\"no\"&gt;\n            &lt;el-input style=\"width: 200px\" type=\"text\" v-model=\"loginForm.no\"\n                      autocomplete=\"off\" size=\"small\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-form-item&gt;\n          &lt;el-form-item label=\"\u5bc6\u7801\" prop=\"password\"&gt;\n            &lt;el-input style=\"width: 200px\" type=\"password\" v-model=\"loginForm.password\"\n                      show-password autocomplete=\"off\" size=\"small\" @keyup.enter.native=\"confirm\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-form-item&gt;\n          &lt;el-form-item&gt;\n            &lt;el-button type=\"primary\" @click=\"confirm\" :disabled=\"confirm_disabled\"&gt;\u786e \u5b9a&lt;\/el-button&gt;\n          &lt;\/el-form-item&gt;\n        &lt;\/el-form&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n\n&lt;script&gt;\nexport default {\n  name: \"Login\",\n  data() {\n    return {\n      confirm_disabled: false,\n      loginForm: {\n        no: '',\n        password: ''\n      },\n      rules: {\n        no: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u8d26\u53f7', trigger: 'blur'}\n        ],\n        password: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u5bc6\u7801', trigger: 'blur'}\n        ],\n      }\n    }\n  },\n  methods: {\n    confirm() {\n      this.confirm_disabled = true;\n      this.$refs.loginForm.validate((valid) =&gt; {\n        if (valid) { \/\/valid\u6210\u529f\u4e3atrue\uff0c\u5931\u8d25\u4e3afalse\n          \/\/\u53bb\u540e\u53f0\u9a8c\u8bc1\u7528\u6237\u540d\u5bc6\u7801\n          this.$axios.post(this.$httpUrl + '\/user\/login', this.loginForm).then(res =&gt; res.data).then(res =&gt; {\n            console.log(res)\n            if (res.code == 200) {\n              \/\/\u5b58\u50a8\n              sessionStorage.setItem(\"CurUser\", JSON.stringify(res.data))\n\n              \/\/ console.log(res.data.menu)\n              \/\/ this.$store.commit(\"setMenu\",res.data.menu)\n              \/\/\u8df3\u8f6c\u5230\u4e3b\u9875\n              this.$router.replace('\/Index');\n            } else {\n              this.confirm_disabled = false;\n              alert('\u6821\u9a8c\u5931\u8d25\uff0c\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef\uff01');\n              return false;\n            }\n          });\n        } else {\n          this.confirm_disabled = false;\n          console.log('\u6821\u9a8c\u5931\u8d25');\n          return false;\n        }\n      });\n\n    }\n  }\n}\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.loginBody {\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  background-color: #B3C0D1;\n}\n\n.loginDiv {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-top: -200px;\n  margin-left: -250px;\n  width: 450px;\n  height: 330px;\n  background: #fff;\n  border-radius: 5%;\n\n}\n\n.login-title {\n  margin: 20px 0;\n  text-align: center;\n}\n\n.login-content {\n  width: 400px;\n  height: 250px;\n  position: absolute;\n  top: 25px;\n  left: 25px;\n}\n&lt;\/style&gt;<\/code><\/pre>\n\n\n\n<p>\u5728wms-web\u4e2d&nbsp; &nbsp; <strong>npm install vue-router@3.5.4<\/strong><\/p>\n\n\n\n<p>\u65b0\u5efa\u6587\u4ef6\u5939router\u5728src\u4e0b\uff0c\u91cc\u9762\u65b0\u5efa&nbsp; &nbsp; index.js\uff0c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n\nimport VueRouter from'vue-router';\n\nconst routes=&#91;\n    {\n        path: '\/',\n        name: 'login',\n        component: () =&gt; import('..\/components\/Login')\n    },\n    {\n        path: '\/Index',\n        name: 'index',\n        component: () =&gt; import('..\/components\/Index')\n    }\n]\nconst router=new VueRouter({\n    mode:'history',\n    routes,\n})\nexport default router;<\/code><\/pre>\n\n\n\n<p>\u5728main.js\u4e2d\u521b\u5efa\u8def\u7531<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import Vue from 'vue'\nimport App from '.\/App.vue'\nimport ElementUI from 'element-ui';\nimport 'element-ui\/lib\/theme-chalk\/index.css';\nimport '.\/assets\/global.css'\nimport axios from \"axios\";\nimport VueRouter from \"vue-router\";\nimport router from \".\/router\";\nVue.prototype.$axios =axios;\n\nVue.prototype.$httpUrl='http:\/\/localhost:8090'\nVue.config.productionTip = false\n\/\/Vue.use(ElementUI)\nVue.use(VueRouter)\nVue.use(ElementUI,{size:'small'})\nnew Vue({\n  router,\n  render: h =&gt; h(App),\n}).$mount('#app')\n<\/code><\/pre>\n\n\n\n<p>UseerController\u4e2d\u65b0\u589e\u7684login<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u767b\u5f55\n    @PostMapping(\"\/login\")\n    public Result login(@RequestBody User user) {\n        List&lt;User&gt; list = userService.lambdaQuery()\n                .eq(User::getNo, user.getNo())\n                .eq(User::getPassword, user.getPassword())\n                .list();\n        return list.size()&gt;0?Result.success(list.get(0)):Result.fail();\n    }<\/code><\/pre>\n\n\n\n<p>App.vue\u4e2d\u8bb0\u5f97 \u6539\u4e3arouter\uff0c\u628a\u4e0b\u9762\u7684import\u548ccomponents\u5220\u9664<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div id=\"app\"&gt;\n    &lt;router-view&gt;&lt;\/router-view&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;<\/code><\/pre>\n\n\n\n<p>\u00a0\u8fd9\u4e9b\u662f\u7528\u5230\u7684\uff08\u5305\u62ec\u6ca1\u53d8\u5316\u7684\uff09\u6587\u4ef6<img decoding=\"async\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/0930cd36c79f40558f2602174dc96212.png\" alt=\"\"><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u4e09\u3001\u9000\u51fa\u767b\u5f55<\/h1>\n\n\n\n<p>1.\u5c55\u793a\u540d\u5b57<br>2.\u9000\u51fa\u767b\u5f55\u4e8b\u4ef6<br>3.\u9000\u51fa\u8df3\u8f6c\u3001\u6e05\u7a7a\u76f8\u5173\u6570\u636e<br>4.\u9000\u51fa\u786e\u8ba4<\/p>\n\n\n\n<p>&nbsp;AppHeader.vue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div style=\"display:flex;line-height:60px;\"&gt;\n    &lt;div style=\"cursor:pointer;\"&gt;\n      &lt;i :class=\"icon\" style=\"font-size:20px;vertical-align: middle;\" @click=\"collapse\"&gt;&lt;\/i&gt;\n    &lt;\/div&gt;\n    &lt;div style=\"flex:1;text-align:center;font-size:27px;\"&gt;\n      &lt;span&gt;\u6b22\u8fce\u6765\u5230\u4ed3\u5e93\u7ba1\u7406\u7cfb\u7edf&lt;\/span&gt;\n    &lt;\/div&gt;\n    &lt;el-dropdown&gt;&lt;!--trigger=\"click\"--&gt;\n      &lt;span&gt;{{ user.name }}&lt;\/span&gt;\n      &lt;i class=\"el-icon-arrow-down\" style=\"margin-left:5px;\"&gt;&lt;\/i&gt;\n      &lt;el-dropdown-menu slot=\"dropdown\"&gt;\n        &lt;!--\u76f4\u63a5\u7ed9\u56fe\u6807\u52a0line-height:60px\u5c31\u5c45\u4e2d\u4e86;\u52a0\u4e0aheight\u548cline-height\uff0c\u8ba9\u4ed6\u4eec\u76f8\u7b49\u5c31\u53ef\u4ee5\u8ba9\u6587\u672c\u5782\u76f4\u5c45\u4e2d;\u52a0\u5782\u76f4vertical-align: middle;\u5e94\u8be5\u5c31\u597d\u4e86--&gt;\n        &lt;el-dropdown-item @click.native=\"toUser\"&gt;\u4e2a\u4eba\u4e2d\u5fc3&lt;\/el-dropdown-item&gt;\n        &lt;el-dropdown-item @click.native=\"logout\"&gt;\u9000\u51fa\u767b\u5f55&lt;\/el-dropdown-item&gt;\n      &lt;\/el-dropdown-menu&gt;\n    &lt;\/el-dropdown&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;\n&lt;script&gt;\nexport default {\n  name: \"AppHeader\",\n  data() {\n    return {\n      user: JSON.parse(sessionStorage.getItem('CurUser'))\n    }\n  },\n  props: {\n    icon: String\n  },\n  methods: {\n    toUser() {\n      console.log('to_user')\n    },\n    logout() {\n      console.log('logout')\n\n      this.$confirm('\u60a8\u786e\u5b9a\u8981\u9000\u51fa\u767b\u5f55\u5417\uff1f', '\u63d0\u793a', {\n        confirmButtonText: '\u786e\u5b9a',\/\/\u786e\u8ba4\u6309\u94ae\u7684\u6587\u5b57\u663e\u793a\n        type: 'warning',\n        center: true,\/\/\u6587\u5b57\u5c45\u4e2d\u663e\u793a\n      })\n          .then(() =&gt; {\n            \/\/\u5b98\u7f51\u6709messageBox\u5f39\u7a97\u5b8c\u6574\u4ee3\u7801\n            this.$message({\n              type:'success',\n              message:'\u60a8\u5df2\u6210\u529f\u9000\u51fa\u767b\u5f55'\n            })\n            this.$router.push(\"\/\")\n            sessionStorage.clear()\n          })\n          .catch(() =&gt; {\n            this.$message({\n              type:'info',\n              message:'\u5df2\u53d6\u6d88\u9000\u51fa\u767b\u5f55'\n            })\n          })\n\n\n    },\n    collapse() {\n      this.$emit('doCollapse')\n    }\n\n  }\n}\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u56db\u3001\u4e2a\u4eba\u4e2d\u5fc3<\/h1>\n\n\n\n<p>\u65b0\u5efaHome.vue\u6587\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div style=\"text-align: center;background-color: #f1f1f3;height: 100%;padding: 0px;margin: 0px;\"&gt;\n    &lt;h1 style=\"font-size: 50px;\"&gt;{{'\u6b22\u8fce\u4f60\uff01'+user.name}}&lt;\/h1&gt;\n    &lt;el-descriptions  title=\"\u4e2a\u4eba\u4e2d\u5fc3\" :column=\"2\" size=\"40\" border&gt;\n      &lt;el-descriptions-item&gt;\n        &lt;template slot=\"label\"&gt;\n          &lt;i class=\"el-icon-s-custom\"&gt;&lt;\/i&gt;\n          \u8d26\u53f7\n        &lt;\/template&gt;\n        {{user.no}}\n      &lt;\/el-descriptions-item&gt;\n      &lt;el-descriptions-item&gt;\n        &lt;template slot=\"label\"&gt;\n          &lt;i class=\"el-icon-mobile-phone\"&gt;&lt;\/i&gt;\n          \u7535\u8bdd\n        &lt;\/template&gt;\n        {{user.phone}}\n      &lt;\/el-descriptions-item&gt;\n      &lt;el-descriptions-item&gt;\n        &lt;template slot=\"label\"&gt;\n          &lt;i class=\"el-icon-location-outline\"&gt;&lt;\/i&gt;\n          \u6027\u522b\n        &lt;\/template&gt;\n        &lt;el-tag\n            :type=\"user.sex === '1' ? 'primary' : 'danger'\"\n            disable-transitions&gt;&lt;i :class=\"user.sex==1?'el-icon-male':'el-icon-female'\"&gt;&lt;\/i&gt;{{user.sex==1?\"\u7537\":\"\u5973\"}}&lt;\/el-tag&gt;\n      &lt;\/el-descriptions-item&gt;\n      &lt;el-descriptions-item&gt;\n        &lt;template slot=\"label\"&gt;\n          &lt;i class=\"el-icon-tickets\"&gt;&lt;\/i&gt;\n          \u89d2\u8272\n        &lt;\/template&gt;\n        &lt;el-tag\n            type=\"success\"\n            disable-transitions&gt;{{user.roleId==0?\"\u8d85\u7ea7\u7ba1\u7406\u5458\":(user.roleId==1?\"\u7ba1\u7406\u5458\":\"\u7528\u6237\")}}&lt;\/el-tag&gt;\n\n      &lt;\/el-descriptions-item&gt;\n    &lt;\/el-descriptions&gt;\n\n    &lt;DateUtils&gt;&lt;\/DateUtils&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script&gt;\nimport DateUtils from \".\/DateUtils\";\nexport default {\n  name: \"HomePage\",\n  components: {DateUtils},\n  data() {\n\n    return {\n      user:{}\n    }\n  },\n  computed:{\n\n  },\n  methods:{\n    init(){\n      this.user = JSON.parse(sessionStorage.getItem('CurUser'))\n    }\n  },\n  created(){\n    this.init()\n  }\n}\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.el-descriptions{\n  width:90%;\n\n  margin: 0 auto;\n  text-align: center;\n}\n&lt;\/style&gt;<\/code><\/pre>\n\n\n\n<p>&nbsp;DataUtils.vue\u6587\u4ef6<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template &gt;\n  &lt;div style=\"padding: 30px;font-size: 30px;\"&gt;\n        &lt;span class=\"time\" id=\"time\" &gt;\n            \u4eca\u5929\u662f\uff1a&lt;span class=\"date\"&gt;{{ nowTime }}&lt;\/span&gt;\n            &lt;span class=\"hour\" style=\"margin-left: 5px;\"&gt;{{time.hour}}&lt;\/span&gt;\n            &lt;a class=\"split\"&gt;:&lt;\/a&gt;\n            &lt;span class=\"minitus\"&gt;{{time.minitus}}&lt;\/span&gt;\n            &lt;a class=\"split\"&gt;:&lt;\/a&gt;\n            &lt;span class=\"seconds\"&gt;{{time.seconds}}&lt;\/span&gt;\n        &lt;\/span&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script&gt;\nexport default {\n  name: \"DateUtils\",\n  props: &#91;\"s\"],\n  data() {\n    return {\n      time: {\n        hour: \"\",\n        minitus: \"\",\n        seconds: \"\"\n      },\n      nowTime: \"\",\n      week: &#91;\n        \"\u661f\u671f\u5929\",\n        \"\u661f\u671f\u4e00\",\n        \"\u661f\u671f\u4e8c\",\n        \"\u661f\u671f\u4e09\",\n        \"\u661f\u671f\u56db\",\n        \"\u661f\u671f\u4e94\",\n        \"\u661f\u671f\u516d\"\n      ]\n    };\n  },\n  mounted() {\n    this.dateTime();\n  },\n  methods: {\n    dateTime() {\n      this.timeFormate();\n      setTimeout(() =&gt; {\n        this.dateTime();\n      }, 1000);\n    },\n    timeFormate() {\n      const newtime = new Date();\n      this.time.hour = this.getIncrease(newtime.getHours(), 2);\n      this.time.minitus = this.getIncrease(newtime.getMinutes(), 2);\n      this.time.seconds = this.getIncrease(newtime.getSeconds(), 2);\n      this.nowTime =\n          this.getIncrease(newtime.getFullYear(), 4) +\n          \"\u5e74\" +\n          this.getIncrease(newtime.getMonth() + 1, 2) +\n          \"\u6708\" +\n          this.getIncrease(newtime.getDate(), 2) +\n          \"\u65e5 \" +\n          this.week&#91;newtime.getDay()];\n      \/\/this.hour=\n      \/\/ return `${this.time.hour}:${this.time.minitus}:${this.time.seconds}`;\n    },\n    getIncrease(num, digit) {\n      var increase = \"\";\n      for (var i = 0; i &lt; digit; i++) {\n        increase += \"0\";\n      }\n      return (increase + num).slice(-digit);\n    }\n  }\n}\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.txt-data .time {\n  font-size: 1rem;\n  margin-right: 0.5rem;\n}\n.split {\n  animation: shark 1s step-end infinite;\n  vertical-align: center;\n  margin-left: 2px;\n  margin-right: 2px;\n}\n@keyframes shark {\n  0%,\n  100% {\n    opacity: 1;\n  }\n  50% {\n    opacity: 0;\n  }\n}\n&lt;\/style&gt;<\/code><\/pre>\n\n\n\n<p>\u6211\u4eec\u5728header\u4e2d\u627e\u5230 toUser.vue\uff0c\u52a0\u4e00\u53e5\u8df3\u8f6c\u8def\u7531<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">toUser() {\n  console.log('to_user')\n  this.$router.push(\"\/Home\")\n},<\/pre>\n\n\n\n<p>\u5728header\u540e\u7684methods\u540e\u9762\u518d\u52a0created \uff0c\u4e3a\u4e86\u4fdd\u8bc1\u76f4\u63a5\u63a8\u5230\u4e2a\u4eba\u4e2d\u5fc3<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>created(){\n    this.$router.push(\"\/Home\")\n  }<\/code><\/pre>\n\n\n\n<p>\u63a5\u4e0b\u6765\u5199home\u7684\u8def\u7531index.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import VueRouter from'vue-router';\n\nconst routes=&#91;\n    {\n        path: '\/',\n        name: 'LoginPage',\n        component: () =&gt; import('..\/components\/LoginPage.vue')\n    },\n    {\n        path: '\/Indexpage',\n        name: 'IndexPage',\n        component: () =&gt; import('..\/components\/IndexPage.vue'),\n        children:&#91;\n            {\n                path:'\/HomePage',\n                name:'HomePage',\n                meta:{\n                    title:'\u9996\u9875'\n                },\n                component:()=&gt;import('..\/components\/HomePage.vue')\n            }\n        ]\n    }\n]\nconst router=new VueRouter({\n    mode:'history',\n    routes,\n})\n const VueRouterPush=VueRouter.prototype.push\nVueRouter.prototype.push=function push (to){\n    return VueRouterPush.call(this,to).catch(err=&gt;err)\n}\nexport default router;<\/code><\/pre>\n\n\n\n<p>&nbsp;\u5728IndexPage\u4e2d\u5220\u9664\u76f8\u5173\u90e8\u5206AppMain.vue\uff0c\u5982import\u548ccomponent\u7b49\uff0c\u5c06template\u4e2d\u7684main\u66ff\u6362\u6210router-view\u5c31\u53ef\u4ee5\u5b9e\u73b0\u8df3\u8f6c\u4e86\uff01<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;el-main style=\"height: 100%\"&gt;\n  &lt;router-view&gt;&lt;\/router-view&gt;\n&lt;\/el-main&gt;<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u4e94\u3001\u83dc\u5355\u8df3\u8f6c<\/h1>\n\n\n\n<p>&nbsp;AppAside\u4e2d\u7b2c\u4e00\u4e2ael-menu\u52a0\u4e00\u4e2arouter\u5373\u53ef\u65b9\u4fbf\u7684\u8df3\u8f6c\uff0c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;el-menu\n    background-color=\"#545c64\"\n    text-color=\"#fff\"\n    active-text-color=\"#ffd04b\"\n    style=\"height:100%;\"\n    default-active=\"\/Home\"\n    :collapse=\"isCollapse\"\n    :collapse-transition=\"false\"\n    router\n&gt;<\/code><\/pre>\n\n\n\n<p>\u63a5\u4e0b\u6765\u914d\u7f6easide\u7684\u5bfc\u5411\uff0cindex\u4e2d\u4e3aside\u52a0\u51e0\u4e2achildren\uff0c\u987a\u5e26\u628aAside.vue\u4e2d\u4e24\u4e2aindex\u6539\u4e00\u4e0b\uff0c\u6539\u4e3a&lt;el-menu-item index=\"\/Admin\"&gt;\u548c&lt;el-menu-item index=\"\/User\"&gt;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> children:&#91;\n            {\n                path:'\/HomePage',\n                name:'HomePage',\n                meta:{\n                    title:'\u9996\u9875'\n                },\n                component:()=&gt;import('..\/components\/HomePage.vue')\n            },\n            {\n                path:'\/AdminPage',\n                name:'AdminPage',\n                meta:{\n                    title:'\u7ba1\u7406\u5458\u7ba1\u7406'\n                },\n                component:()=&gt;import('..\/components\/admin\/AdminPage.vue')\n            },\n            {\n                path:'\/UserPage',\n                name:'UserPage',\n                meta:{\n                    title:'\u7528\u6237\u7ba1\u7406'\n                },\n                component:()=&gt;import('..\/components\/user\/UserPage.vue')\n            }\n        ]<\/code><\/pre>\n\n\n\n<p>&nbsp;\u8fd9\u662fAdminManage\u548cUserManage<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;span&gt;admin&lt;\/span&gt;\n&lt;\/template&gt;\n\n&lt;script&gt;\n  export default{\n    name:\"AdminManage\"\n  }\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" src=\"blob:https:\/\/eve2333.top\/3291340b-6580-4a58-a979-f186aa711e56\" width=\"15\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;span&gt;user&lt;\/span&gt;\n&lt;\/template&gt;\n\n&lt;script&gt;\nexport default{\n  name:\"UserManage\"\n}\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;<\/code><\/pre>\n\n\n\n<p>\u91cd\u542f\u5373\u53ef\u5b9e\u73b0\u8df3\u8f6c\uff01\uff01\uff01&nbsp;PS\uff1a\u8fd9\u91cc\u6709\u70b9\u96be\u770b\uff0c\u5728Index.vue\u4e2d\u7684el-aside\u52a0\u4e86\u53e5&nbsp; &nbsp; &nbsp;height:100vh;<\/p>\n\n\n\n<p>3.\u6a21\u62df\u52a8\u6001menu,\u751f\u6210\u52a8\u6001\u8def\u7531 . \u5728Aside\u4e2d\u6dfb\u52a0menu\u7684\u6a21\u62df<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;el-menu\n      background-color=\"#545c64\"\n      text-color=\"#fff\"\n      active-text-color=\"#ffd04b\"\n      style=\"height:100%;\"\n      default-active=\"\/Home\"\n      :collapse=\"isCollapse\"\n      :collapse-transition=\"false\"\n      router\n  &gt;\n\n    &lt;el-menu-item index=\"\/Home\"&gt;\n      &lt;i class=\"el-icon-s-home\"&gt;&lt;\/i&gt;\n      &lt;span slot=\"title\"&gt;\u9996\u9875&lt;\/span&gt;\n    &lt;\/el-menu-item&gt;\n\n    &lt;el-menu-item :index=\"'\/'+item.menuClick\" v-for=\"(item,i) in menu\" :key=\"i\"&gt;\n      &lt;i :class=\"item.menuIcon\"&gt;&lt;\/i&gt;\n      &lt;span slot=\"title\"&gt;{{item.menuName}}&lt;\/span&gt;\n    &lt;\/el-menu-item&gt;\n\n  &lt;\/el-menu&gt;\n&lt;\/template&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;\n&lt;script&gt;\nexport default {\n  name: \"Aside\",\n  data() {\n    return {\n      \/\/ isCollapse:false\n      menu: &#91;\n        {\n          menuClick: 'Admin',\n          menuName: '\u7ba1\u7406\u5458\u7ba1\u7406',\n          menuIcon: 'el-icon-s-custom'\n        }, {\n          menuClick: 'User',\n          menuName: '\u7528\u6237\u7ba1\u7406',\n          menuIcon: 'el-icon-user-solid'\n        }\n      ]\n    }\n  },\n  props: {\n    isCollapse: Boolean\n  }\n}\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u516d\u3001\u52a8\u6001\u8def\u7531<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">1.\u8bbe\u8ba1menu\u8868\u548c\u6570\u636e<\/h3>\n\n\n\n<p>&nbsp;\u590d\u5236\u5982\u4e0b\u6587\u5b57\uff0c\u6253\u5f00navicat\u751f\u6210\u8868\u7ed3\u6784<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE TABLE `menu` (\n  `id` int(11) NOT NULL,\n  `menuCode` varchar(8) DEFAULT NULL COMMENT '\u83dc\u5355\u7f16\u7801',\n  `menuName` varchar(16) DEFAULT NULL COMMENT '\u83dc\u5355\u540d\u5b57',\n  `menuLevel` varchar(2) DEFAULT NULL COMMENT '\u83dc\u5355\u7ea7\u522b',\n  `menuParentCode` varchar(8) DEFAULT NULL COMMENT '\u83dc\u5355\u7684\u7236code',\n  `menuClick` varchar(16) DEFAULT NULL COMMENT '\u70b9\u51fb\u89e6\u53d1\u7684\u51fd\u6570',\n  `menuRight` varchar(8) DEFAULT NULL COMMENT '\u6743\u9650 0\u8d85\u7ea7\u7ba1\u7406\u5458\uff0c1\u8868\u793a\u7ba1\u7406\u5458\uff0c2\u8868\u793a\u666e\u901a\u7528\u6237\uff0c\u53ef\u4ee5\u7528\u9017\u53f7\u7ec4\u5408\u4f7f\u7528',\n  `menuComponent` varchar(200) DEFAULT NULL,\n  `menuIcon` varchar(100) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\n\n\nBEGIN;\nINSERT INTO `menu` VALUES (1, '001', '\u7ba1\u7406\u5458\u7ba1\u7406', '1', NULL, 'Admin', '0', 'admin\/AdminManage.vue', 'el-icon-s-custom');\nINSERT INTO `menu` VALUES (2, '002', '\u7528\u6237\u7ba1\u7406', '1', NULL, 'User', '0,1', 'user\/UserManage.vue', 'el-icon-user-solid');\nCOMMIT;\n\n<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"538\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834164-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203559-1024x538.png\" alt=\"\" class=\"wp-image-745\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834164-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203559-1024x538.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834164-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203559-300x158.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834164-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203559-768x404.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834164-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203559-1536x807.png 1536w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834164-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203559-2048x1076.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u65b0\u5efa\u67e5\u8be2--&gt;\u590d\u5236\u8fdb\u5165--&gt;\u8fd0\u884c\u5373\u53ef \u770b\u4e0d\u89c1\u53ef\u4ee5f5\u5237\u65b0\u4e00\u4e0b.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.\u751f\u6210menu\u5bf9\u5e94\u7684\u540e\u7aef\u4ee3\u7801<\/h3>\n\n\n\n<p>\u518d\u6b21\u6253\u5f00CodeGenerator\u7684\uff0c\u5bf9menu\u8fdb\u884c\u4ee3\u7801\u751f\u6210(\u8fd9\u4e2a\u62a5\u9519\u6ca1\u4ec0\u4e48,\u65e0\u975eMySQL\u57285.7\u52308.0\u6539\u4e86\u6539\u52a0\u5bc6\u65b9\u5f0f)<br><img loading=\"lazy\" decoding=\"async\" height=\"188\" width=\"448\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/96c190fc72e04661a403bef1c15e1358.png\" alt=\"\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/1f6127ed-79dd-4a4d-b4b7-1c89386ffa16\"><\/p>\n\n\n\n<p>\u5728MenuMapper\u4e2d\u5f00\u5934\u6dfb\u52a0@Mapper, \u4ee3\u7801MenuController\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.wms.common.Result;\nimport com.wms.service.MenuService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport com.wms.entity.Menu;\nimport org.springframework.web.bind.annotation.RequestParam;\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.List;\n\n\/**\n * &lt;p&gt;\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-11-24\n *\/\n@RestController\n@RequestMapping(\"\/menu\")\npublic class MenuController {\n    @Autowired\n    private MenuService menuService;\n    @GetMapping(\"\/list\")\n    public Result list(@RequestParam String roleId) {\n        List list = menuService.lambdaQuery().like(Menu::getMenuright, roleId).list();\n        return Result.success(list);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u4f60\u53ef\u4ee5\u901a\u8fc7\u76f4\u63a5\u8bbf\u95ee\u540e\u7aef8090\u7aef\u53e3\u6765\u67e5\u770b\u662f\u5426\u6210\u529f<img loading=\"lazy\" decoding=\"async\" height=\"289\" width=\"527\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/b8e61808a8d34aef8e5d5b0a453a675c.png\" alt=\"\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/a10f6596-a9a9-4852-bd57-ffd92f568aca\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.\u8fd4\u56de\u6570\u636e<\/h3>\n\n\n\n<p>\u4e3a\u4e86\u8282\u7701\u8bf7\u6c42\u7684\u6b21\u6570,\u6211\u4eec\u7ed1\u5b9a\u5728UserController\u7684\u767b\u5f55\u4e2d\u4e00\u5e76\u7ed9\u4ed6\u5728\u767b\u5f55\u4e00\u6b21\u6027\u83b7\u5f97\u6570\u636e . (\u53ef\u80fd\u4f60\u9700\u8981&nbsp; import com.wms.entity.Menu;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u767b\u5f55\n    @PostMapping(\"\/login\")\n    public Result login(@RequestBody User user) {\n        List&lt;User&gt; list = userService.lambdaQuery()\n                .eq(User::getNo, user.getNo())\n                .eq(User::getPassword, user.getPassword())\n                .list();\n\n        if(list.size()&gt;0) {\n            User user1 = (User) list.get(0);\n            List menuList = menuService.lambdaQuery().like(Menu::getMenuright, user1.getRoleId()).list();\n            HashMap res = new HashMap();\n            res.put(\"user\", user1);\/\/\u8fd9\u91cc\u6709\u8c8c\u4f3c\u53ef\u4ee5\u4fee\u6539\u7684\u5730\u65b9\uff1f\u4e0d\u7528\u52a8\u6001\u8def\u7531\u6743\u9650\u6539\u53d8\u8981\u6539\u6e90\u7801\uff0c\u8fd9\u6837\u76f4\u63a5\u6539\u6570\u636e\u5e93\u3002\u4f9d\u8d56\u914d\u7f6elombok\u53ef\u4ee5\u7701\u7565getset\u6b65\u9aa4\n            res.put(\"menu\", menuList);\n            return Result.success(res);\n        }\n        return Result.fail();\n    }<\/code><\/pre>\n\n\n\n<p>\u4fee\u6539Login.vue\u770b\u770b\u80fd\u5426\u6253\u5370<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sessionStorage.setItem(\"CurUser\", JSON.stringify(res.data.user))\nconsole.log(res.data.menu)<\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"223\" width=\"298\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/197dedf6e33e4c05be5215cb69f4aec9.png\" alt=\"\"><br>\u770b\u5230\u4e86,\u662f\u8fd4\u56de\u4e860,1\u7684\u00a0\u56e0\u4e3asql\u4e2d\u4ed6\u662f\u7ba1\u7406\u5458<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.vuex\u72b6\u6001\u7ba1\u7406<\/h3>\n\n\n\n<p>\u5728wms-web\u4e2d\u52a0\u8f7dvuex , \u7ec8\u7aef\u8fd0\u884c<strong>npm i vuex@3.0.0<\/strong><\/p>\n\n\n\n<p>\u5728src\u4e0b\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6\u5939store,\u91cc\u9762\u52a0\u6587\u4ef6index.js<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import vue from 'vue'\nimport Vuex from 'vuex'\n\nvue.use(Vuex)\n\nexport default new Vuex.Store({\n    state: {\n        menu: &#91;]\n    },\n    mutations: {\n        setMenu(state,menuList) {\n            state.menu=menuList\n        }\n    },\n    getters:{\n        getMenu(state){\n            return state.menu\n        }\n    }\n})<\/code><\/pre>\n\n\n\n<p>main.js\u4e2d\u6ce8\u518c store\u76f8\u5173\u5185\u5bb9<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import store from \".\/store\";\n...........\nnew Vue({\n  router,\n  store,\n  render: h =&gt; h(App),\n}).$mount('#app')<\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"242\" width=\"372\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/86b9e668454340bbbee25373473a5fef.png\" alt=\"\"><br>\u5982\u613f\u4ee5\u507f\u5728vue\u63d2\u4ef6\u7684vuex\u4e2d\u627e\u5230,\u5c31\u662f\u4e0d\u77e5\u9053\u4e3a\u4ec0\u4e48\u662fROOT\u4e0b\u7684\u4e0d\u662fsetMenu (inspected,active)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.\u751f\u6210menu\u6570\u636e<\/h3>\n\n\n\n<p>&nbsp;\u5220\u9664\u6a21\u62df\u7684Aside\uff0c\u4f7f\u7528\u52a8\u6001\u7684computed\u7684\u6765\u663e\u793a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data() {\n    return {\n      \/\/ isCollapse:false\n    }\n  },\n  computed: {\n    \"menu\": {\n      get() {\n        return this.$store.state.menu\n      }\n    }\n  },<\/code><\/pre>\n\n\n\n<p>\u5237\u65b0\u5931\u6548\uff0c\u53ef\u4ee5\u5c06state\u5b58\u8fdbsession\uff0c\u7136\u540e\u5728index\u5237\u65b0\u65f6\u5728\u8bfb\u53d6\u5c31\u884c<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.\u751f\u6210\u8def\u7531\u6570\u636e<\/h3>\n\n\n\n<p>\u9875\u9762\u8def\u7531\u7684\u53f3\u8fb9\u4e0d\u662f\u52a8\u6001\u7684\uff0crouter\/index.js\u91cc\u9762\u7684\u90fd\u662f\u56fa\u5b9a\u5199\u6b7b\u7684\u3002\u5c06router\/index\u4e2d\u7684chirdren\u7684Admin\u548cUser\u7edf\u7edf\u6ce8\u91ca&nbsp; \u8fd9\u662fstore\/index.js\u8def\u7531<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import vue from 'vue'\nimport Vuex from 'vuex'\nimport router from '..\/router'\nvue.use(Vuex)\n\nfunction addNewRoute(menuList){\n    let routes= router.options.routes\n    console.log(routes)\n   \/* {\n        path:'\/Admin',\n            name:'admin',\n        meta:{\n        title:'\u7ba1\u7406\u5458\u7ba1\u7406'\n    },\n        component:()=&gt;import('..\/components\/admin\/AdminManage.vue')\n    },*\/\n}\n\nexport default new Vuex.Store({\n    state: {\n        menu: &#91;]\n    },\n    mutations: {\n        setMenu(state,menuList) {\n            state.menu=menuList\n            addNewRoute(menuList)\n        }\n    },\n    getters:{\n        getMenu(state){\n            return state.menu\n        }\n    }\n})<\/code><\/pre>\n\n\n\n<p>\u00a0\u53ef\u4ee5\u5728F12\u4e2d\u770b\u5230\u5bf9\u4e8e\u7684router<br><img loading=\"lazy\" decoding=\"async\" height=\"184\" width=\"376\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/3f188a8d963441588b979cc287308b7b.png\" alt=\"\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/d0820bdc-5b2a-4f93-aedb-d099b4740989\"><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import vue from 'vue'\nimport Vuex from 'vuex'\nimport router from '..\/router'\nvue.use(Vuex)\n\nfunction addNewRoute(menuList){\n    console.log(menuList)\n    let routes= router.options.routes\n    console.log(routes)\n    routes.forEach(routeItem=&gt;{\n        if(routeItem.path==\"\/Index\"){\n            menuList.forEach(menu=&gt;{\n                let childRoute={\n                    path:'\/'+menu.menuclick,\n                    name:menu.menuname,\n                    meta:{\n                        title:menu.menuname\n                    },\n                    component:()=&gt;import('..\/components\/'+menu.menucomponent)\n                }\n                routeItem.children.push(childRoute)\n            })\n        }\n    })\n    router.addRoutes(routes)\n}\n\nexport default new Vuex.Store({\n    state: {\n        menu: &#91;]\n    },\n    mutations: {\n        setMenu(state,menuList) {\n            state.menu=menuList\n            addNewRoute(menuList)\n        }\n    },\n    getters:{\n        getMenu(state){\n            return state.menu\n        }\n    }\n})<\/code><\/pre>\n\n\n\n<p>&nbsp;\u5bf9\u4e8e3+2\u91cd\u8def\u7531\u7684\u5360\u7528,\u4f7f\u7528\u8fd9\u4e2a\u6765\u89e3\u51b3router\/index.js\u6700\u540e\u53e6\u52a0<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">export function resetRouter(){\n    router.matcher=new VueRouter({\n        mode:'history',\n        routes:[]\n    }).matcher\n}\n<\/pre>\n\n\n\n<p>store\/index\u4e2d&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function addNewRoute(menuList){\n    console.log(menuList)\n    let routes= router.options.routes\n    console.log(routes)\n    routes.forEach(routeItem=&gt;{\n        if(routeItem.path==\"\/Index\"){\n            menuList.forEach(menu=&gt;{\n                let childRoute={\n                    path:'\/'+menu.menuclick,\n                    name:menu.menuname,\n                    meta:{\n                        title:menu.menuname\n                    },\n                    component:()=&gt;import('..\/components\/'+menu.menucomponent)\n                }\n                routeItem.children.push(childRoute)\n            })\n        }\n    })\n    resetRouter()\n    router.addRoutes(routes)\n}<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u4e03\u3001\u7ba1\u7406\u5458\u7ba1\u7406\u529f\u80fd<\/h1>\n\n\n\n<p>AdminManage.vue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div&gt;\n    &lt;div style=\"margin-left:5px\"&gt;\n      &lt;el-input v-model=\"name\" placeholder=\"\u8bf7\u8f93\u5165\u540d\u5b57:\" suffix-icon=\"el-icon-search\" style=\"width:200px;\"\n                @keyup.enter.native=\"loadPost\"&gt;&lt;\/el-input&gt;\n      &lt;el-select v-model=\"sex\" filterableplacehoLder=\"\u8bf7\u9009\u62e9\u6027\u522b\" style=\"margin-left:5px\"&gt;\n        &lt;el-option\n            v-for=\"item in sexs\"\n            :key=\"item.value\"\n            :label=\"item.label\"\n            :value=\"item.value\"&gt;\n        &lt;\/el-option&gt;\n      &lt;\/el-select&gt;\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"loadPost\"&gt;\u67e5\u8be2&lt;\/el-button&gt;\n      &lt;el-button type=\"success\" @click=\"resetParam\"&gt;\u91cd\u7f6e&lt;\/el-button&gt;\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"add\"&gt;\u65b0\u589e&lt;\/el-button&gt;\n    &lt;\/div&gt;\n    &lt;el-table :data=\"tableData\"\n              :header-cell-style=\"{background:'#f2f5fc',color:'#555'}\"\n              border\n    &gt;\n      &lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"no\" label=\"\u8d26\u53f7\" width=\"120\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"name\" label=\"\u59d3\u540d\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"age\" label=\"\u5e74\u9f84\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"sex\" label=\"\u6027\u522b\" width=\"80\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-tag\n              :type=\"scope.row.sex === 1 ?'primary':'success'\"\n              disable-transitions&gt;{{ scope.row.sex === 1 ? '\u7537' : '\u5973' }}\n          &lt;\/el-tag&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"roleId\" label=\"\u89d2\u8272\" width=\"120\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-tag\n              :type=\"scope.row.roleId === 0 ?'danger':(scope.row.roleId === 1 ?'primary':'success')\"\n              disable-transitions&gt;\n            {{ scope.row.roleId === 0 ? '\u8d85\u7ea7\u7ba1\u7406\u5458' : (scope.row.roleId === 1 ? '\u7ba1\u7406\u5458' : '\u7528\u6237') }}\n          &lt;\/el-tag&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"phone\" label=\"\u7535\u8bdd\" width=\"120\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"operate\" label=\"\u64cd\u4f5c\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-button size=\"small\" type=\"success\" @click=\"mod(scope.row)\"&gt;\u7f16\u8f91&lt;\/el-button&gt;\n          &lt;el-popconfirm\n              title=\"\u786e\u5b9a\u5220\u9664\u5417\uff1f\"\n              @confirm=\"del(scope.row.id)\"\n              style=\"margin-left:8px;\"\n          &gt;\n            &lt;el-button  slot=\"reference\" size=\"small\" type=\"danger\"&gt;\u5220\u9664&lt;\/el-button&gt;\n          &lt;\/el-popconfirm&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n    &lt;\/el-table&gt;\n    &lt;el-pagination\n        @size-change=\"handleSizeChange\"\n        @current-change=\"handleCurrentChange\"\n        :current-page=\"pageNum\"\n        :page-sizes=\"&#91;5, 10, 20, 50]\"\n        :page-size=\"pageSize\"\n        layout=\"total, sizes, prev, pager, next, jumper\"\n        :total=\"total\"&gt;\n    &lt;\/el-pagination&gt;\n    &lt;el-dialog\n        title=\"\u63d0\u793a\"\n        :visible.sync=\"centerDialogVisible\"\n        width=\"30%\"\n        center&gt;\n\n      &lt;el-form ref=\"form\" :rules=\"rules\" :model=\"form\" label-width=\"80px\"&gt;\n        &lt;el-form-item label=\"\u8d26\u53f7\" prop=\"no\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.no\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5bc6\u7801\" prop=\"password\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.password\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u540d\u5b57\" prop=\"name\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.name\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5e74\u9f84\" prop=\"age\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.age\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u6027\u522b\"&gt;\n          &lt;el-radio-group v-model=\"form.sex\"&gt;\n            &lt;el-radio label=\"1\"&gt;\u7537&lt;\/el-radio&gt;\n            &lt;el-radio label=\"0\"&gt;\u5973&lt;\/el-radio&gt;\n          &lt;\/el-radio-group&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u7535\u8bdd\" prop=\"phone\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.phone\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n      &lt;\/el-form&gt;\n\n      &lt;span slot=\"footer\" class=\"dialog-footer\"&gt;\n        &lt;el-button @click=\"centerDialogVisible=false\"&gt;\u53d6\u6d88&lt;\/el-button&gt;\n        &lt;el-button type=\"primary\" @click=\"save\"&gt;\u786e\u5b9a&lt;\/el-button&gt;\n  &lt;\/span&gt;\n    &lt;\/el-dialog&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;\n&lt;script&gt;\nexport default {\n  name: \"AdminManage\",\n  data() {\n    let checkAge = (rule, value, callback) =&gt; {\n      if (value &gt; 150) {\n        callback(new Error('\u5e74\u9f84\u592a\u5927\uff01lbd\u518d\u6765\u6211\u8ba9\u4f60\u98de\u8d77\u6765\uff01'));\n      } else {\n        callback();\n      }\n    };\n    let checkDuplicate = (rule, value, callback) =&gt; {\n      if (this.form.id) {\n        return callback();\n      }\n      this.$axios.get(this.$httpUrl + \"\/user\/findByNo?no=\" + this.form.no).then(res =&gt; res.data).then(res =&gt; {\n        if (res.code !== 200) {\/\/es6\u89e3\u6784\u4e5f\u53ef\u4ee5\n          callback();\n        } else {\n          callback(new Error('\u8d26\u53f7\u5df2\u7ecf\u5b58\u5728'));\n        }\n      });\n    };\n    return {\n      tableData: &#91;],\n      pageSize: 10,\n      pageNum: 1,\n      total: 0,\n      name: '',\n      sex: '',\n      sexs: &#91;\n        {\n          value: '1',\n          label: '\u7537'\n        }, {\n          value: '0',\n          label: '\u5973'\n        }\n      ],\n      centerDialogVisible: false,\n      form: {\n        name: '',\n        no: '',\n        age: '',\n        password: '',\n        phone: '',\n        sex: '0',\n        roleId: '1'\n      },\n      rules: {\n        no: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u8d26\u53f7', trigger: 'blur'},\n          {min: 3, max: 8, message: '\u957f\u5ea6\u57283-8\u4e2a\u5b57\u7b26', trigger: 'blur'},\n          {validator: checkDuplicate, trigger: 'blur'}\n        ],\n        name: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u540d\u5b57', trigger: 'blur'},\n        ],\n        password: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u5bc6\u7801', trigger: 'blur'},\n          {min: 4, max: 10, message: '\u957f\u5ea6\u57284-10\u4e2a\u5b57\u7b26\u4e4b\u95f4', trigger: 'blur'}\n        ],\n        age: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u5e74\u9f84', trigger: 'blur'},\n          {min: 1, max: 3, message: '\u957f\u5ea6\u57281\u52303\u4e2a\u4f4d', trigger: 'blur'},\n          {pattern: \/^(&#91;1-9]&#91;0-9]*){1,3}$\/, message: '\u5e74\u9f84\u5fc5\u987b\u4e3a\u6b63\u6574\u6570\u5b57', trigger: \"blur\"},\n          {validator: checkAge, trigger: 'blur'}\n        ],\n        phone: &#91;\n          {required: true, message: \"\u624b\u673a\u53f7\u4e0d\u80fd\u4e3a\u7a7a\", trigger: \"blur\"},\n          {pattern: \/^1&#91;3|4|5|6|7|8|9]&#91;0-9]\\d{8}$\/, message: \"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7\u7801\", trigger: \"blur\"}\n        ]\n      }\n    }\n  },\n  methods: {\n    add() {\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.resetForm()\n      })\n    },\n    mod(row) {\n      \/\/this.form=row\u5c31\u53ef\u4ee5\u4e86\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.form.id = row.id;\n        this.form.no = row.no;\n        this.form.name = row.name;\n        this.form.sex = row.sex + '';\n        this.form.age = row.age + '';\/\/\u8f6c\u5316\u6210\u5b57\u7b26\u4e32\u7c7b\u578b\n        this.form.phone = row.phone;\n        this.form.password = '';\n        this.form.roleId = row.roleId;\n      })\/\/\u4fee\u6539User\u7684\u65f6\u5019\u8981\u786e\u4fdd\u8d26\u53f7\u4e0d\u80fd\u4fee\u6539\uff0c\u5426\u5219\u6709\u53ef\u80fd\u4f1a\u6570\u636e\u5e93\u5b58\u5728\u8d26\u53f7\u76f8\u540c\u7684\u60c5\u51b5\uff01\uff01\uff01\uff01\u7ed9\u8d26\u53f7\u7684input\u91cc\u52a0\u4e2av-bind:disabled=\"isDisabled\u201c,\u5982\u679c\u662f\u4fee\u6539\u5c31\u628aisDisabled\u8bbe\u7f6e\u4e3atrue\uff0c\u6dfb\u52a0\u5c31false\n    },\n    del(id) {\n      this.$axios.get(this.$httpUrl + '\/user\/del?id=' + id).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.loadPost();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    resetForm() {\n      this.centerDialogVisible = true\n      this.$refs.form.resetFields();\n    },\n    doSave() {\n      this.$axios.post(this.$httpUrl + '\/user\/save', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.centerDialogVisible = false\n          this.loadPost();\n          this.resetForm()\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    doMod() {\n      this.$axios.post(this.$httpUrl + '\/user\/update', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res);\n        if (res.code == 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f\uff01',\n            type: 'success'\n          });\n          this.centerDialogVisible = false;\n          this.loadPost();\n          this.resetForm();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25\uff01',\n            type: 'error'\n          });\n        }\n      });\n    },\n    save() {\n      this.$refs.form.validate((valid) =&gt; {\n        if (valid) {\n          if (this.form.id) {\n            this.doMod();\n          } else {\n            this.doSave();\n          }\n\n        } else {\n          console.log('error submit!!');\n          return false;\n        }\n      });\n    },\n    loadGet() {\n      this.$axios.get(this.$httpUrl + '\/user\/list').then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n      })\n    },\n    loadPost() {\n      this.$axios.post(this.$httpUrl + '\/user\/listPageC1', {\n        pageSize: this.pageSize,\n        pageNum: this.pageNum,\n        param: {\n          name: this.name,\n          sex: this.sex,\n          roleId:'1'\n        }\n      }).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.tableData = res.data\n          this.total = res.total\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    resetParam() {\n      this.name = ''\n      this.sex = ''\n    },\n    handleSizeChange(val) {\n      console.log(`\u6bcf\u9875 ${val} \u6761`);\n      this.pageNum = 1\/\/\u8fd9\u4e2a\u9519\u8bef\u662f\u5148\u7ffb\u5230\u7b2c\u4e8c\u9875\u5728\u8c03\u9875\u9762\u6761\u6570\uff0c\u663e\u793a\u65e0\u6570\u636e\n      this.pageSize = val\n      this.loadPost()\n    },\n    handleCurrentChange(val) {\n      console.log(`\u5f53\u524d\u9875: ${val}`);\n      this.pageNum = val\n      this.loadPost()\n    }\n  },\n  beforeMount() {\n    \/\/ this.loadGet();\n    this.loadPost()\n  }\n}\n\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>&nbsp;\u5728listPageC1\u4e2d\u83b7\u53d6roleid\u5e76\u5224\u6bb5\u662f\u5426\u4e3ablack<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">String roleId = (String) param.get(\"roleId\");\n.......................\n.......................\nif(StringUtils.isNotBlank(roleId)) {\n    lambdaQueryWrapper.eq(User::getRoleId, roleId);\n}&nbsp;<\/pre>\n\n\n\n<p>&nbsp;UserManage.vue\u548cAdminManage\u6781\u5176\u76f8\u4f3c,\u6539\u6210roleid 2\u548cname UserManage\u5373\u53ef<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div&gt;\n    &lt;div style=\"margin-left:5px\"&gt;\n      &lt;el-input v-model=\"name\" placeholder=\"\u8bf7\u8f93\u5165\u540d\u5b57:\" suffix-icon=\"el-icon-search\" style=\"width:200px;\"\n                @keyup.enter.native=\"loadPost\"&gt;&lt;\/el-input&gt;\n      &lt;el-select v-model=\"sex\" filterableplacehoLder=\"\u8bf7\u9009\u62e9\u6027\u522b\" style=\"margin-left:5px\"&gt;\n        &lt;el-option\n            v-for=\"item in sexs\"\n            :key=\"item.value\"\n            :label=\"item.label\"\n            :value=\"item.value\"&gt;\n        &lt;\/el-option&gt;\n      &lt;\/el-select&gt;\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"loadPost\"&gt;\u67e5\u8be2&lt;\/el-button&gt;\n      &lt;el-button type=\"success\" @click=\"resetParam\"&gt;\u91cd\u7f6e&lt;\/el-button&gt;\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"add\"&gt;\u65b0\u589e&lt;\/el-button&gt;\n    &lt;\/div&gt;\n    &lt;el-table :data=\"tableData\"\n              :header-cell-style=\"{background:'#f2f5fc',color:'#555'}\"\n              border\n    &gt;\n      &lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"no\" label=\"\u8d26\u53f7\" width=\"120\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"name\" label=\"\u59d3\u540d\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"age\" label=\"\u5e74\u9f84\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"sex\" label=\"\u6027\u522b\" width=\"80\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-tag\n              :type=\"scope.row.sex === 1 ?'primary':'success'\"\n              disable-transitions&gt;{{ scope.row.sex === 1 ? '\u7537' : '\u5973' }}\n          &lt;\/el-tag&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"roleId\" label=\"\u89d2\u8272\" width=\"120\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-tag\n              :type=\"scope.row.roleId === 0 ?'danger':(scope.row.roleId === 1 ?'primary':'success')\"\n              disable-transitions&gt;\n            {{ scope.row.roleId === 0 ? '\u8d85\u7ea7\u7ba1\u7406\u5458' : (scope.row.roleId === 1 ? '\u7ba1\u7406\u5458' : '\u7528\u6237') }}\n          &lt;\/el-tag&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"phone\" label=\"\u7535\u8bdd\" width=\"120\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"operate\" label=\"\u64cd\u4f5c\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-button size=\"small\" type=\"success\" @click=\"mod(scope.row)\"&gt;\u7f16\u8f91&lt;\/el-button&gt;\n          &lt;el-popconfirm\n              title=\"\u786e\u5b9a\u5220\u9664\u5417\uff1f\"\n              @confirm=\"del(scope.row.id)\"\n              style=\"margin-left:8px;\"\n          &gt;\n            &lt;el-button  slot=\"reference\" size=\"small\" type=\"danger\"&gt;\u5220\u9664&lt;\/el-button&gt;\n          &lt;\/el-popconfirm&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n    &lt;\/el-table&gt;\n    &lt;el-pagination\n        @size-change=\"handleSizeChange\"\n        @current-change=\"handleCurrentChange\"\n        :current-page=\"pageNum\"\n        :page-sizes=\"&#91;5, 10, 20, 50]\"\n        :page-size=\"pageSize\"\n        layout=\"total, sizes, prev, pager, next, jumper\"\n        :total=\"total\"&gt;\n    &lt;\/el-pagination&gt;\n    &lt;el-dialog\n        title=\"\u63d0\u793a\"\n        :visible.sync=\"centerDialogVisible\"\n        width=\"30%\"\n        center&gt;\n\n      &lt;el-form ref=\"form\" :rules=\"rules\" :model=\"form\" label-width=\"80px\"&gt;\n        &lt;el-form-item label=\"\u8d26\u53f7\" prop=\"no\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.no\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5bc6\u7801\" prop=\"password\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.password\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u540d\u5b57\" prop=\"name\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.name\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5e74\u9f84\" prop=\"age\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.age\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u6027\u522b\"&gt;\n          &lt;el-radio-group v-model=\"form.sex\"&gt;\n            &lt;el-radio label=\"1\"&gt;\u7537&lt;\/el-radio&gt;\n            &lt;el-radio label=\"0\"&gt;\u5973&lt;\/el-radio&gt;\n          &lt;\/el-radio-group&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u7535\u8bdd\" prop=\"phone\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.phone\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n      &lt;\/el-form&gt;\n\n      &lt;span slot=\"footer\" class=\"dialog-footer\"&gt;\n        &lt;el-button @click=\"centerDialogVisible=false\"&gt;\u53d6\u6d88&lt;\/el-button&gt;\n        &lt;el-button type=\"primary\" @click=\"save\"&gt;\u786e\u5b9a&lt;\/el-button&gt;\n  &lt;\/span&gt;\n    &lt;\/el-dialog&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;\n&lt;script&gt;\nexport default {\n  name: \"UserManage\",\n  data() {\n    let checkAge = (rule, value, callback) =&gt; {\n      if (value &gt; 150) {\n        callback(new Error('\u5e74\u9f84\u592a\u5927\uff01lbd\u518d\u6765\u6211\u8ba9\u4f60\u98de\u8d77\u6765\uff01'));\n      } else {\n        callback();\n      }\n    };\n    let checkDuplicate = (rule, value, callback) =&gt; {\n      if (this.form.id) {\n        return callback();\n      }\n      this.$axios.get(this.$httpUrl + \"\/user\/findByNo?no=\" + this.form.no).then(res =&gt; res.data).then(res =&gt; {\n        if (res.code !== 200) {\/\/es6\u89e3\u6784\u4e5f\u53ef\u4ee5\n          callback();\n        } else {\n          callback(new Error('\u8d26\u53f7\u5df2\u7ecf\u5b58\u5728'));\n        }\n      });\n    };\n    return {\n      tableData: &#91;],\n      pageSize: 10,\n      pageNum: 1,\n      total: 0,\n      name: '',\n      sex: '',\n      sexs: &#91;\n        {\n          value: '1',\n          label: '\u7537'\n        }, {\n          value: '0',\n          label: '\u5973'\n        }\n      ],\n      centerDialogVisible: false,\n      form: {\n        name: '',\n        no: '',\n        age: '',\n        password: '',\n        phone: '',\n        sex: '0',\n        roleId: '2'\n      },\n      rules: {\n        no: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u8d26\u53f7', trigger: 'blur'},\n          {min: 3, max: 8, message: '\u957f\u5ea6\u57283-8\u4e2a\u5b57\u7b26', trigger: 'blur'},\n          {validator: checkDuplicate, trigger: 'blur'}\n        ],\n        name: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u540d\u5b57', trigger: 'blur'},\n        ],\n        password: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u5bc6\u7801', trigger: 'blur'},\n          {min: 4, max: 10, message: '\u957f\u5ea6\u57284-10\u4e2a\u5b57\u7b26\u4e4b\u95f4', trigger: 'blur'}\n        ],\n        age: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u5e74\u9f84', trigger: 'blur'},\n          {min: 1, max: 3, message: '\u957f\u5ea6\u57281\u52303\u4e2a\u4f4d', trigger: 'blur'},\n          {pattern: \/^(&#91;1-9]&#91;0-9]*){1,3}$\/, message: '\u5e74\u9f84\u5fc5\u987b\u4e3a\u6b63\u6574\u6570\u5b57', trigger: \"blur\"},\n          {validator: checkAge, trigger: 'blur'}\n        ],\n        phone: &#91;\n          {required: true, message: \"\u624b\u673a\u53f7\u4e0d\u80fd\u4e3a\u7a7a\", trigger: \"blur\"},\n          {pattern: \/^1&#91;3|4|5|6|7|8|9]&#91;0-9]\\d{8}$\/, message: \"\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u624b\u673a\u53f7\u7801\", trigger: \"blur\"}\n        ]\n      }\n    }\n  },\n  methods: {\n    add() {\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.resetForm()\n      })\n    },\n    mod(row) {\n      \/\/this.form=row\u5c31\u53ef\u4ee5\u4e86\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.form.id = row.id;\n        this.form.no = row.no;\n        this.form.name = row.name;\n        this.form.sex = row.sex + '';\n        this.form.age = row.age + '';\/\/\u8f6c\u5316\u6210\u5b57\u7b26\u4e32\u7c7b\u578b\n        this.form.phone = row.phone;\n        this.form.password = '';\n        this.form.roleId = row.roleId;\n      })\/\/\u4fee\u6539User\u7684\u65f6\u5019\u8981\u786e\u4fdd\u8d26\u53f7\u4e0d\u80fd\u4fee\u6539\uff0c\u5426\u5219\u6709\u53ef\u80fd\u4f1a\u6570\u636e\u5e93\u5b58\u5728\u8d26\u53f7\u76f8\u540c\u7684\u60c5\u51b5\uff01\uff01\uff01\uff01\u7ed9\u8d26\u53f7\u7684input\u91cc\u52a0\u4e2av-bind:disabled=\"isDisabled\u201c,\u5982\u679c\u662f\u4fee\u6539\u5c31\u628aisDisabled\u8bbe\u7f6e\u4e3atrue\uff0c\u6dfb\u52a0\u5c31false\n    },\n    del(id) {\n      this.$axios.get(this.$httpUrl + '\/user\/del?id=' + id).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.loadPost();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    resetForm() {\n      this.centerDialogVisible = true\n      this.$refs.form.resetFields();\n    },\n    doSave() {\n      this.$axios.post(this.$httpUrl + '\/user\/save', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.centerDialogVisible = false\n          this.loadPost();\n          this.resetForm()\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    doMod() {\n      this.$axios.post(this.$httpUrl + '\/user\/update', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res);\n        if (res.code == 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f\uff01',\n            type: 'success'\n          });\n          this.centerDialogVisible = false;\n          this.loadPost();\n          this.resetForm();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25\uff01',\n            type: 'error'\n          });\n        }\n      });\n    },\n    save() {\n      this.$refs.form.validate((valid) =&gt; {\n        if (valid) {\n          if (this.form.id) {\n            this.doMod();\n          } else {\n            this.doSave();\n          }\n\n        } else {\n          console.log('error submit!!');\n          return false;\n        }\n      });\n    },\n    loadGet() {\n      this.$axios.get(this.$httpUrl + '\/user\/list').then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n      })\n    },\n    loadPost() {\n      this.$axios.post(this.$httpUrl + '\/user\/listPageC1', {\n        pageSize: this.pageSize,\n        pageNum: this.pageNum,\n        param: {\n          name: this.name,\n          sex: this.sex,\n          roleId:'2'\n        }\n      }).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.tableData = res.data\n          this.total = res.total\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    resetParam() {\n      this.name = ''\n      this.sex = ''\n    },\n    handleSizeChange(val) {\n      console.log(`\u6bcf\u9875 ${val} \u6761`);\n      this.pageNum = 1\/\/\u8fd9\u4e2a\u9519\u8bef\u662f\u5148\u7ffb\u5230\u7b2c\u4e8c\u9875\u5728\u8c03\u9875\u9762\u6761\u6570\uff0c\u663e\u793a\u65e0\u6570\u636e\n      this.pageSize = val\n      this.loadPost()\n    },\n    handleCurrentChange(val) {\n      console.log(`\u5f53\u524d\u9875: ${val}`);\n      this.pageNum = val\n      this.loadPost()\n    }\n  },\n  beforeMount() {\n    \/\/ this.loadGet();\n    this.loadPost()\n  }\n}\n\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u516b\u3001\u4ed3\u5e93\u7ba1\u7406\u529f\u80fd<\/h1>\n\n\n\n<p>\u5728navicat\u4e2d\u65b0\u5efa\u67e5\u8be2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DROP TABLE IF EXISTS `storage`;\nCREATE TABLE `storage`(\n    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '\u4e3b\u952e',\n    `name` varchar(100) NOT NULL COMMENT '\u4ed3\u5e93\u540d',\n    `remark` varchar(1000) DEFAULT NULL COMMENT '\u5907\u6ce8',\n    PRIMARY KEY(`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;<\/code><\/pre>\n\n\n\n<p>&nbsp;\u8fd0\u884cCodeGenerator,\u8f93\u5165storage\u5373\u53ef<\/p>\n\n\n\n<p>\u5728StorageMapper\u524d\u9762\u52a0\u4e00\u4e2aMapper<\/p>\n\n\n\n<p>StorageController.java\u5982\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.StringUtils;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.wms.common.QueryPageParam;\nimport com.wms.common.Result;\nimport com.wms.entity.Storage;\nimport com.wms.entity.User;\nimport com.wms.service.StorageService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.HashMap;\n\n\/**\n * &lt;p&gt;\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-05\n *\/\n@RestController\n@RequestMapping(\"\/storage\")\npublic class StorageController {\n    @Autowired\n    private StorageService storageService;\n\n    \/\/\u65b0\u589e\n    @PostMapping(\"\/save\")\n    public Result save(@RequestBody Storage storage) {\n        return storageService.save(storage)?Result.success():Result.fail();\n    }\n    \/\/\u66f4\u65b0\n    @PostMapping(\"\/update\")\n    public Result update(@RequestBody Storage storage) {\n        return storageService.updateById(storage)?Result.success():Result.fail();\n    }\n   \/* \/\/\u4fee\u6539\n    @PostMapping(\"\/mod\")\n    public boolean mod(@RequestBody Storage storage) {\n        return storageService.updateById(storage);\n    }*\/\n\n    @GetMapping(\"\/del\")\n    public Result del(@RequestParam String id) {\n        return storageService.removeById(id)?Result.success():Result.fail();\n    }\n\n    @PostMapping(\"\/listPage\")\n    \/\/public List&lt;User&gt;listPage(@RequestBody HashMap map){\n    public Result listPage(@RequestBody QueryPageParam query) {\n        HashMap param = query.getParam();\n        String name = (String) param.get(\"name\");\n\n        Page&lt;Storage&gt; page = new Page();\n        page.setCurrent(query.getPageNum());\n        page.setSize(query.getPageSize());\n\n        LambdaQueryWrapper&lt;Storage&gt; lambdaQueryWrapper = new LambdaQueryWrapper();\n        if(StringUtils.isNotBlank(name)&amp;&amp;!\"null\".equals(name)) {\n            lambdaQueryWrapper.like(Storage::getName, name);\n        }\n\n        IPage result=storageService.pageCC(page,lambdaQueryWrapper);\n        return Result.success(result.getRecords(),result.getTotal());\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;StorageService.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.service;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.wms.entity.Storage;\nimport com.baomidou.mybatisplus.extension.service.IService;\n\n\/**\n * &lt;p&gt;\n *  \u670d\u52a1\u7c7b\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-05\n *\/\npublic interface StorageService extends IService&lt;Storage&gt; {\n    IPage pageCC(IPage&lt;Storage&gt; page, Wrapper wrapper);\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;StorageServiceImpl<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.wms.entity.Storage;\nimport com.wms.entity.User;\nimport com.wms.mapper.StorageMapper;\nimport com.wms.service.StorageService;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport jakarta.annotation.Resource;\nimport org.springframework.stereotype.Service;\n\n\/**\n * &lt;p&gt;\n *  \u670d\u52a1\u5b9e\u73b0\u7c7b\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-05\n *\/\n@Service\npublic class StorageServiceImpl extends ServiceImpl&lt;StorageMapper, Storage&gt; implements StorageService {\n    @Resource\n    private StorageMapper storageMapper;\n\n    @Override\n    public IPage&lt;Storage&gt; pageCC(IPage&lt;Storage&gt; page, Wrapper wrapper) {\n        return storageMapper.pageCC(page,wrapper);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;Storagemapper.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport com.wms.entity.Storage;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport com.wms.entity.User;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\n\/**\n * &lt;p&gt;\n *  Mapper \u63a5\u53e3\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-05\n *\/\n@Mapper\npublic interface StorageMapper extends BaseMapper&lt;Storage&gt; {\n    \n    IPage pageCC(IPage&lt;Storage&gt; page, @Param(Constants.WRAPPER) Wrapper&lt;Storage&gt; wrapper);\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;resourse\u7684mapper\u4e0b\u5c5e\u7684StorageMapper<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.wms.mapper.StorageMapper\"&gt;\n\n    &lt;select id=\"pageCC\" resultType=\"com.wms.entity.Storage\"&gt;\n        select * from storage ${ew.customSqlSegment}\n    &lt;\/select&gt;\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u6620\u5c04\u7ed3\u679c --&gt;\n    &lt;resultMap id=\"BaseResultMap\" type=\"com.wms.entity.Storage\"&gt;\n        &lt;id column=\"id\" property=\"id\" \/&gt;\n        &lt;result column=\"name\" property=\"name\" \/&gt;\n        &lt;result column=\"remark\" property=\"remark\" \/&gt;\n    &lt;\/resultMap&gt;\n\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u7ed3\u679c\u5217 --&gt;\n    &lt;sql id=\"Base_Column_List\"&gt;\n        id, name, remark\n    &lt;\/sql&gt;\n\n&lt;\/mapper&gt;\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e8c\u5341\u4e5d\u3001\u7269\u54c1\u5206\u7c7b\u529f\u80fd<\/h1>\n\n\n\n<p>\u4e22\u5931\u4e86<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e09\u5341\u3001\u7269\u54c1\u7ba1\u740601<\/h1>\n\n\n\n<p>navicat\u67e5\u8be2\u4e00\u6bb5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DROP TABLE IF EXISTS `goods`;\nCREATE TABLE `goods` (\n    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '\u4e3b\u952e',\n    `name` varchar(100) NOT NULL COMMENT '\u8d27\u540d',\n    `storage` int(11) NOT NULL COMMENT '\u4ed3\u5e93',\n    `goodsType` int(11) NOT NULL COMMENT '\u5206\u7c7b',\n    `count` int(11) DEFAULT NULL COMMENT'\u6570\u91cf',\n    `remark` varchar(1000) DEFAULT NULL COMMENT'\u5907\u6ce8',\n    PRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;<\/code><\/pre>\n\n\n\n<p>codegenerator\u65b0\u5efa\u4e00\u6bb5goods\uff0c\u63a5\u4e0b\u6765\u662f\u90a35\u5957\u4ee3\u7801<br>GoodsController.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.StringUtils;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.wms.common.QueryPageParam;\nimport com.wms.common.Result;\nimport com.wms.entity.Goods;\nimport com.wms.entity.Storage;\nimport com.wms.service.GoodsService;\nimport com.wms.service.StorageService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.HashMap;\n\n\/**\n * &lt;p&gt;\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@RestController\n@RequestMapping(\"\/goods\")\npublic class GoodsController {\n    @Autowired\n    private GoodsService goodsService;\n\n    \/\/\u65b0\u589e\n    @PostMapping(\"\/save\")\n    public Result save(@RequestBody Goods goods) {\n        return goodsService.save(goods)?Result.success():Result.fail();\n    }\n    \/\/\u66f4\u65b0\n    @PostMapping(\"\/update\")\n    public Result update(@RequestBody Goods goods) {\n        return goodsService.updateById(goods)?Result.success():Result.fail();\n    }\n    @GetMapping(\"\/del\")\n    public Result del(@RequestParam String id) {\n        return goodsService.removeById(id)?Result.success():Result.fail();\n    }\n\n    @PostMapping(\"\/listPage\")\n    public Result listPage(@RequestBody QueryPageParam query) {\n        HashMap param = query.getParam();\n        String name = (String) param.get(\"name\");\n\n        Page&lt;Goods&gt; page = new Page();\n        page.setCurrent(query.getPageNum());\n        page.setSize(query.getPageSize());\n\n        LambdaQueryWrapper&lt;Goods&gt; lambdaQueryWrapper = new LambdaQueryWrapper();\n        if(StringUtils.isNotBlank(name)&amp;&amp;!\"null\".equals(name)) {\n            lambdaQueryWrapper.like(Goods::getName, name);\n        }\n\n        IPage result=goodsService.pageCC(page,lambdaQueryWrapper);\n        return Result.success(result.getRecords(),result.getTotal()); \n    }\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;GoodServiceImpl.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.wms.entity.Goods;\nimport com.wms.mapper.GoodsMapper;\nimport com.wms.service.GoodsService;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport jakarta.annotation.Resource;\nimport org.springframework.stereotype.Service;\n\n\/**\n * &lt;p&gt;\n *  \u670d\u52a1\u5b9e\u73b0\u7c7b\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@Service\npublic class  GoodsServiceImpl extends ServiceImpl&lt;GoodsMapper, Goods&gt; implements GoodsService {\n    @Resource\n    private GoodsMapper goodsMapper;\n    @Override\n    public IPage pageCC(IPage&lt;Goods&gt; page, Wrapper wrapper){\n        return goodsMapper.pageCC(page,wrapper);\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>GoodService.java\u5373\u53ef&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.service;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.wms.entity.Goods;\nimport com.baomidou.mybatisplus.extension.service.IService;\n\n\/**\n * &lt;p&gt;\n *  \u670d\u52a1\u7c7b\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\npublic interface GoodsService extends IService&lt;Goods&gt; {\n    IPage pageCC (IPage&lt;Goods&gt; page, Wrapper wrapper);\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;goodmapper<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport com.wms.entity.Goods;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\n\/**\n * &lt;p&gt;\n *  Mapper \u63a5\u53e3\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@Mapper\npublic interface GoodsMapper extends BaseMapper&lt;Goods&gt; {\n    IPage pageCC(IPage&lt;Goods&gt; page , @Param(Constants.WRAPPER) Wrapper  wrapper);\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;GoodMapper.xml<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\">\n&lt;mapper namespace=\"com.wms.mapper.GoodsMapper\">\n\n    &lt;select id=\"pageCC\" resultType=\"com.wms.entity.Goods\">\n            select * from goods ${ew.customSqlSegment}\n        &lt;\/select>\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u6620\u5c04\u7ed3\u679c -->\n    &lt;resultMap id=\"BaseResultMap\" type=\"com.wms.entity.Goods\">\n        &lt;id column=\"id\" property=\"id\" \/>\n        &lt;result column=\"name\" property=\"name\" \/>\n        &lt;result column=\"storage\" property=\"storage\" \/>\n        &lt;result column=\"goodsType\" property=\"goodstype\" \/>\n        &lt;result column=\"count\" property=\"count\" \/>\n        &lt;result column=\"remark\" property=\"remark\" \/>\n    &lt;\/resultMap>\n\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u7ed3\u679c\u5217 -->\n    &lt;sql id=\"Base_Column_List\">\n        id, name, storage, goodsType, count, remark\n    &lt;\/sql>\n\n&lt;\/mapper><\/code><\/pre>\n\n\n\n<p>&nbsp;\u63a5\u4e0b\u6765\u5199\u524d\u7aef\u65b0\u5efagoods\/GoodsManage.vue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template>\n  &lt;div>\n    &lt;div style=\"margin-left:5px\">\n      &lt;el-input v-model=\"name\" placeholder=\"\u8bf7\u8f93\u5165\u7269\u54c1\u540d:\" suffix-icon=\"el-icon-search\" style=\"width:200px;\"\n                @keyup.enter.native=\"loadPost\">&lt;\/el-input>\n\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"loadPost\">\u67e5\u8be2&lt;\/el-button>\n      &lt;el-button type=\"success\" @click=\"resetParam\">\u91cd\u7f6e&lt;\/el-button>\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"add\">\u65b0\u589e&lt;\/el-button>\n    &lt;\/div>\n    &lt;el-table :data=\"tableData\"\n              :header-cell-style=\"{background:'#f2f5fc',color:'#555'}\"\n              border\n    >\n      &lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"name\" label=\"\u7269\u54c1\u540d\" width=\"80\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"storage\" label=\"\u4ed3\u5e93\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"goodstype\" label=\"\u5206\u7c7b\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"count\" label=\"\u6570\u91cf\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"remark\" label=\"\u5907\u6ce8\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"operate\" label=\"\u64cd\u4f5c\">\n        &lt;template slot-scope=\"scope\">\n          &lt;el-button size=\"small\" type=\"success\" @click=\"mod(scope.row)\">\u7f16\u8f91&lt;\/el-button>\n          &lt;el-popconfirm\n              title=\"\u786e\u5b9a\u5220\u9664\u5417\uff1f\"\n              @confirm=\"del(scope.row.id)\"\n              style=\"margin-left:8px;\"\n          >\n            &lt;el-button slot=\"reference\" size=\"small\" type=\"danger\">\u5220\u9664&lt;\/el-button>\n          &lt;\/el-popconfirm>\n        &lt;\/template>\n      &lt;\/el-table-column>\n    &lt;\/el-table>\n    &lt;el-pagination\n        @size-change=\"handleSizeChange\"\n        @current-change=\"handleCurrentChange\"\n        :current-page=\"pageNum\"\n        :page-sizes=\"&#91;5, 10, 20, 50]\"\n        :page-size=\"pageSize\"\n        layout=\"total, sizes, prev, pager, next, jumper\"\n        :total=\"total\">\n    &lt;\/el-pagination>\n    &lt;el-dialog\n        title=\"\u63d0\u793a\"\n        :visible.sync=\"centerDialogVisible\"\n        width=\"30%\"\n        center>\n\n      &lt;el-form ref=\"form\" :rules=\"rules\" :model=\"form\" label-width=\"80px\">\n        &lt;el-form-item label=\"\u4ed3\u5e93\u540d\" prop=\"name\">\n          &lt;el-col :span=\"20\">\n            &lt;el-input v-model=\"form.name\">&lt;\/el-input>\n          &lt;\/el-col>\n        &lt;\/el-form-item>\n        &lt;el-form-item label=\"\u4ed3\u5e93\" prop=\"storage\">\n          &lt;el-col :span=\"20\">\n            &lt;el-input v-model=\"form.storage\">&lt;\/el-input>\n          &lt;\/el-col>\n        &lt;\/el-form-item>\n        &lt;el-form-item label=\"\u5206\u7c7b\" prop=\"goodstype\">\n          &lt;el-col :span=\"20\">\n            &lt;el-input v-model=\"form.goodstype\">&lt;\/el-input>\n          &lt;\/el-col>\n        &lt;\/el-form-item>\n        &lt;el-form-item label=\"\u6570\u91cf\" prop=\"count\">\n          &lt;el-col :span=\"20\">\n            &lt;el-input v-model=\"form.count\">&lt;\/el-input>\n          &lt;\/el-col>\n        &lt;\/el-form-item>\n        &lt;el-form-item label=\"\u5907\u6ce8\" prop=\"remark\">\n          &lt;el-col :span=\"20\">\n            &lt;el-input type=\"textarea\" v-model=\"form.remark\">&lt;\/el-input>\n          &lt;\/el-col>\n        &lt;\/el-form-item>\n      &lt;\/el-form>\n\n      &lt;span slot=\"footer\" class=\"dialog-footer\">\n        &lt;el-button @click=\"centerDialogVisible=false\">\u53d6\u6d88&lt;\/el-button>\n        &lt;el-button type=\"primary\" @click=\"save\">\u786e\u5b9a&lt;\/el-button>\n  &lt;\/span>\n    &lt;\/el-dialog>\n  &lt;\/div>\n&lt;\/template>\n\n&lt;style scoped>\n\n&lt;\/style>\n&lt;script>\nexport default {\n  name: \"GoodsManage\",\n  data() {\n    let checkCount = (rule, value, callback) => {\n      if (value > 9999) {\n        callback(new Error('\u6570\u91cf\u8f93\u5165\u8fc7\u5927'));\n      } else {\n        callback();\n      }\n    };\n    return {\n      tableData: &#91;],\n      pageSize: 10,\n      pageNum: 1,\n      total: 0,\n      name: '',\n      centerDialogVisible: false,\n      form: {\n        id: '',\n        name: '',\n        remark: '',\n        count: '',\n        storage: '',\n        goodstype: '',\n      },\n      rules: {\n        name: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u7269\u54c1\u540d', trigger: 'blur'},\n        ],\n        count: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u6570\u91cf', trigger: 'blur'},\n          {pattern: \/^(&#91;1-9]&#91;0-9]*){1,4}$\/, message: '\u6570\u91cf\u5fc5\u987b\u4e3a\u6b63\u6574\u6570', trigger: \"blur\"},\n          {validator: checkCount, trigger: 'blur'}\n        ]\n      }\n    }\n  },\n  methods: {\n    add() {\n      this.centerDialogVisible = true\n      this.$nextTick(() => {\n        this.resetForm()\n        this.form.id = ''\n      })\n    },\n    mod(row) {\n      \/\/this.form=row\u5c31\u53ef\u4ee5\u4e86\n      this.centerDialogVisible = true\n      this.$nextTick(() => {\n        this.form.id = row.id;\n        this.form.remark = row.remark;\n        this.form.name = row.name;\n        this.form.storage = row.storage;\n        this.form.goodstype = row.goodstype;\n        this.form.count = row.count;\n      })\n    },\n    del(id) {\n      this.$axios.get(this.$httpUrl + '\/goods\/del?id=' + id).then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.loadPost();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    resetForm() {\n      this.centerDialogVisible = true\n      this.$refs.form.resetFields();\n      this.form.id = '';\n    },\n    doSave() {\n      this.$axios.post(this.$httpUrl + '\/goods\/save', this.form).then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.centerDialogVisible = false\n          this.loadPost();\n          this.resetForm()\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    doMod() {\n      this.$axios.post(this.$httpUrl + '\/goods\/update', this.form).then(res => res.data).then(res => {\n        console.log(res);\n        if (res.code == 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f\uff01',\n            type: 'success'\n          });\n          this.centerDialogVisible = false;\n          this.loadPost();\n          this.resetForm();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25\uff01',\n            type: 'error'\n          });\n        }\n      });\n    },\n    save() {\n      this.$refs.form.validate((valid) => {\n        if (valid) {\n          if (this.form.id) {\n            this.doMod();\n          } else {\n            this.doSave();\n          }\n\n        } else {\n          console.log('error submit!!');\n          return false;\n        }\n      });\n    },\n    loadPost() {\n      this.$axios.post(this.$httpUrl + '\/goods\/listPage', {\n        pageSize: this.pageSize,\n        pageNum: this.pageNum,\n        param: {\n          name: this.name,\n        }\n      }).then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.tableData = res.data\n          this.total = res.total\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    resetParam() {\n      this.name = ''\n    },\n    handleSizeChange(val) {\n      console.log(`\u6bcf\u9875 ${val} \u6761`);\n      this.pageNum = 1\/\/\u8fd9\u4e2a\u9519\u8bef\u662f\u5148\u7ffb\u5230\u7b2c\u4e8c\u9875\u5728\u8c03\u9875\u9762\u6761\u6570\uff0c\u663e\u793a\u65e0\u6570\u636e\n      this.pageSize = val\n      this.loadPost()\n    },\n    handleCurrentChange(val) {\n      console.log(`\u5f53\u524d\u9875: ${val}`);\n      this.pageNum = val\n      this.loadPost()\n    }\n  },\n  beforeMount() {\n    this.loadPost()\n  }\n}\n\n&lt;\/script>\n<img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/77f3c80e-e2e9-45c6-89de-bf843049035d\"><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"182\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834209-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203643-1024x182.png\" alt=\"\" class=\"wp-image-746\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834209-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203643-1024x182.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834209-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203643-300x53.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834209-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203643-768x137.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834209-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203643.png 1046w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e09\u5341\u4e00\u3001\u7269\u54c1\u7ba1\u740602<\/h1>\n\n\n\n<p>\u5728storageController\u6dfb\u52a0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@GetMapping(\"\/list\")\n    public Result list() {\n        List list = storageService.list();\n        return Result.success(list);\n    }<\/code><\/pre>\n\n\n\n<p>\u00a0<img loading=\"lazy\" decoding=\"async\" height=\"183\" width=\"312\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/3f1910b9675b414584d5268d051c6901.png\" alt=\"\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/9f52f345-f8ec-431a-81e1-24968efe12ca\"><\/p>\n\n\n\n<p>&nbsp;\u662f\u5728user login\u7684\u65f6\u5019\u987a\u4fbf\u67e5\u7684menu,\u8fd9\u91cc\u5c31\u53e6\u5199\u4e86loadStorage\u65b9\u6cd5<\/p>\n\n\n\n<p>\u8fd9\u4e48\u5199\u5c31\u4e0d\u7528\u6570\u636e\u5e93\u5199\u5916\u952e\u591a\u8868\u8fde\u63a5\u4e86,\u6570\u636e\u5c11\u53ef\u4ee5\u7528formatter\uff0c\u6570\u636e\u591a\u8fd8\u662f\u8981sql\u5185\u8054\u67e5\u8be2<\/p>\n\n\n\n<p>\u6570\u636e\u5e93\u521b\u5efa\u7684\u65f6\u5019\u5df2\u7ecf\u5b9a\u4e49\u4e86\u4ed3\u5e93\u4e3aint(11)\u7c7b\u578b<\/p>\n\n\n\n<p>GoodsManage.vue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div&gt;\n    &lt;div style=\"margin-left:5px\"&gt;\n      &lt;el-input v-model=\"name\" placeholder=\"\u8bf7\u8f93\u5165\u7269\u54c1\u540d:\" suffix-icon=\"el-icon-search\" style=\"width:200px;\"\n                @keyup.enter.native=\"loadPost\"&gt;&lt;\/el-input&gt;\n\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"loadPost\"&gt;\u67e5\u8be2&lt;\/el-button&gt;\n      &lt;el-button type=\"success\" @click=\"resetParam\"&gt;\u91cd\u7f6e&lt;\/el-button&gt;\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"add\"&gt;\u65b0\u589e&lt;\/el-button&gt;\n    &lt;\/div&gt;\n    &lt;el-table :data=\"tableData\"\n              :header-cell-style=\"{background:'#f2f5fc',color:'#555'}\"\n              border\n    &gt;\n      &lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"name\" label=\"\u7269\u54c1\u540d\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"storage\" label=\"\u4ed3\u5e93\" :formatter=\"formatStorage\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"goodstype\" label=\"\u5206\u7c7b\" :formatter=\"formatGoodsType\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"count\" label=\"\u6570\u91cf\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"remark\" label=\"\u5907\u6ce8\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"operate\" label=\"\u64cd\u4f5c\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-button size=\"small\" type=\"success\" @click=\"mod(scope.row)\"&gt;\u7f16\u8f91&lt;\/el-button&gt;\n          &lt;el-popconfirm\n              title=\"\u786e\u5b9a\u5220\u9664\u5417\uff1f\"\n              @confirm=\"del(scope.row.id)\"\n              style=\"margin-left:8px;\"\n          &gt;\n            &lt;el-button slot=\"reference\" size=\"small\" type=\"danger\"&gt;\u5220\u9664&lt;\/el-button&gt;\n          &lt;\/el-popconfirm&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n    &lt;\/el-table&gt;\n    &lt;el-pagination\n        @size-change=\"handleSizeChange\"\n        @current-change=\"handleCurrentChange\"\n        :current-page=\"pageNum\"\n        :page-sizes=\"&#91;5, 10, 20, 50]\"\n        :page-size=\"pageSize\"\n        layout=\"total, sizes, prev, pager, next, jumper\"\n        :total=\"total\"&gt;\n    &lt;\/el-pagination&gt;\n    &lt;el-dialog\n        title=\"\u63d0\u793a\"\n        :visible.sync=\"centerDialogVisible\"\n        width=\"30%\"\n        center&gt;\n\n      &lt;el-form ref=\"form\" :rules=\"rules\" :model=\"form\" label-width=\"80px\"&gt;\n        &lt;el-form-item label=\"\u4ed3\u5e93\u540d\" prop=\"name\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.name\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u4ed3\u5e93\" prop=\"storage\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.storage\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5206\u7c7b\" prop=\"goodstype\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.goodstype\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u6570\u91cf\" prop=\"count\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.count\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5907\u6ce8\" prop=\"remark\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input type=\"textarea\" v-model=\"form.remark\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n      &lt;\/el-form&gt;\n\n      &lt;span slot=\"footer\" class=\"dialog-footer\"&gt;\n        &lt;el-button @click=\"centerDialogVisible=false\"&gt;\u53d6\u6d88&lt;\/el-button&gt;\n        &lt;el-button type=\"primary\" @click=\"save\"&gt;\u786e\u5b9a&lt;\/el-button&gt;\n  &lt;\/span&gt;\n    &lt;\/el-dialog&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;\n&lt;script&gt;\nexport default {\n  name: \"GoodsManage\",\n  data() {\n    let checkCount = (rule, value, callback) =&gt; {\n      if (value &gt; 9999) {\n        callback(new Error('\u6570\u91cf\u8f93\u5165\u8fc7\u5927'));\n      } else {\n        callback();\n      }\n    };\n    return {\n      storageData: &#91;],\n      tableData: &#91;],\n      GoodsTypeData: &#91;],\n      pageSize: 10,\n      pageNum: 1,\n      total: 0,\n      name: '',\n      centerDialogVisible: false,\n      form: {\n        id: '',\n        name: '',\n        remark: '',\n        count: '',\n        storage: '',\n        goodstype: '',\n      },\n      rules: {\n        name: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u7269\u54c1\u540d', trigger: 'blur'},\n        ],\n        count: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u6570\u91cf', trigger: 'blur'},\n          {pattern: \/^(&#91;1-9]&#91;0-9]*){1,4}$\/, message: '\u6570\u91cf\u5fc5\u987b\u4e3a\u6b63\u6574\u6570', trigger: \"blur\"},\n          {validator: checkCount, trigger: 'blur'}\n        ]\n      }\n    }\n  },\n  methods: {\n    formatStorage(row) {\n      let temp = this.storageData.find(item =&gt; {\n        return item.id === row.storage\n      })\n      return temp &amp;&amp; temp.name\n    },\n    formatGoodsType(row) {\n      let temp = this.GoodsTypeData.find(item =&gt; {\n        return item.id === row.goodstype\n      })\n      return temp &amp;&amp; temp.name\n    },\n    add() {\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.resetForm()\n        this.form.id = ''\n      })\n    },\n    mod(row) {\n      \/\/this.form=row\u5c31\u53ef\u4ee5\u4e86\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.form.id = row.id;\n        this.form.remark = row.remark;\n        this.form.name = row.name;\n        this.form.storage = row.storage;\n        this.form.goodstype = row.goodstype;\n        this.form.count = row.count;\n      })\n    },\n    del(id) {\n      this.$axios.get(this.$httpUrl + '\/goods\/del?id=' + id).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.loadPost();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    resetForm() {\n      this.centerDialogVisible = true\n      this.$refs.form.resetFields();\n      this.form.id = '';\n    },\n    doSave() {\n      this.$axios.post(this.$httpUrl + '\/goods\/save', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.centerDialogVisible = false\n          this.loadPost();\n          this.resetForm()\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    doMod() {\n      this.$axios.post(this.$httpUrl + '\/goods\/update', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res);\n        if (res.code == 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f\uff01',\n            type: 'success'\n          });\n          this.centerDialogVisible = false;\n          this.loadPost();\n          this.resetForm();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25\uff01',\n            type: 'error'\n          });\n        }\n      });\n    },\n    save() {\n      this.$refs.form.validate((valid) =&gt; {\n        if (valid) {\n          if (this.form.id) {\n            this.doMod();\n          } else {\n            this.doSave();\n          }\n\n        } else {\n          console.log('error submit!!');\n          return false;\n        }\n      });\n    },\n    loadPost() {\n      this.$axios.post(this.$httpUrl + '\/goods\/listPage', {\n        pageSize: this.pageSize,\n        pageNum: this.pageNum,\n        param: {\n          name: this.name,\n        }\n      }).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.tableData = res.data\n          this.total = res.total\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    loadStorage() {\n      this.$axios.get(this.$httpUrl + '\/storage\/list').then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.storageData = res.data\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    loadGoodsType() {\n      this.$axios.get(this.$httpUrl + '\/goodstype\/list').then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.GoodsTypeData = res.data\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    resetParam() {\n      this.name = ''\n    },\n    handleSizeChange(val) {\n      console.log(`\u6bcf\u9875 ${val} \u6761`);\n      this.pageNum = 1\/\/\u8fd9\u4e2a\u9519\u8bef\u662f\u5148\u7ffb\u5230\u7b2c\u4e8c\u9875\u5728\u8c03\u9875\u9762\u6761\u6570\uff0c\u663e\u793a\u65e0\u6570\u636e\n      this.pageSize = val\n      this.loadPost()\n    },\n    handleCurrentChange(val) {\n      console.log(`\u5f53\u524d\u9875: ${val}`);\n      this.pageNum = val\n      this.loadPost()\n    }\n  },\n  beforeMount() {\n    this.loadStorage()\n    this.loadGoodsType()\n    this.loadPost()\n  }\n}\n\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>GoodstypeController\u4e0b\u65b0\u52a0\u65b9\u6cd5<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>@GetMapping(\"\/list\")\n    public Result list(){\n        List list =goodstypeService.list();\n        return Result.success(list);\n    }<\/code><\/pre>\n\n\n\n<p>&nbsp;\u63a5\u7740\u4fee\u6539GoodsManage.vue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template&gt;\n  &lt;div&gt;\n    &lt;div style=\"margin-left:5px\"&gt;\n      &lt;el-input v-model=\"name\" placeholder=\"\u8bf7\u8f93\u5165\u7269\u54c1\u540d:\" suffix-icon=\"el-icon-search\" style=\"width:200px;\"\n                @keyup.enter.native=\"loadPost\"&gt;&lt;\/el-input&gt;\n      &lt;el-select v-model=\"storage\" placehoLder=\"\u8bf7\u9009\u62e9\u4ed3\u5e93\" style=\"margin-left: 5px;\"&gt;\n        &lt;el-option\n            v-for=\"item in storageData\"\n            :key=\"item.id\"\n            :label=\"item.name\"\n            :value=\"item.id\"&gt;\n        &lt;\/el-option&gt;\n      &lt;\/el-select&gt;\n      &lt;el-select v-model=\"goodstype\" placeholder=\"\u8bf7\u9009\u62e9\u5206\u7c7b\" style=\"margin-left: 5px;\"&gt;\n        &lt;el-option\n            v-for=\"item in goodstypeData\"\n            :key=\"item.id\"\n            :label=\"item.name\"\n            :value=\"item.id\"&gt;\n        &lt;\/el-option&gt;\n      &lt;\/el-select&gt;\n\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"loadPost\"&gt;\u67e5\u8be2&lt;\/el-button&gt;\n      &lt;el-button type=\"success\" @click=\"resetParam\"&gt;\u91cd\u7f6e&lt;\/el-button&gt;\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"add\"&gt;\u65b0\u589e&lt;\/el-button&gt;\n    &lt;\/div&gt;\n    &lt;el-table :data=\"tableData\"\n              :header-cell-style=\"{background:'#f2f5fc',color:'#555'}\"\n              border\n    &gt;\n      &lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"name\" label=\"\u7269\u54c1\u540d\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"storage\" label=\"\u4ed3\u5e93\" :formatter=\"formatStorage\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"goodstype\" label=\"\u5206\u7c7b\" :formatter=\"formatGoodsType\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"count\" label=\"\u6570\u91cf\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"remark\" label=\"\u5907\u6ce8\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"operate\" label=\"\u64cd\u4f5c\"&gt;\n        &lt;template slot-scope=\"scope\"&gt;\n          &lt;el-button size=\"small\" type=\"success\" @click=\"mod(scope.row)\"&gt;\u7f16\u8f91&lt;\/el-button&gt;\n          &lt;el-popconfirm\n              title=\"\u786e\u5b9a\u5220\u9664\u5417\uff1f\"\n              @confirm=\"del(scope.row.id)\"\n              style=\"margin-left:8px;\"\n          &gt;\n            &lt;el-button slot=\"reference\" size=\"small\" type=\"danger\"&gt;\u5220\u9664&lt;\/el-button&gt;\n          &lt;\/el-popconfirm&gt;\n        &lt;\/template&gt;\n      &lt;\/el-table-column&gt;\n    &lt;\/el-table&gt;\n    &lt;el-pagination\n        @size-change=\"handleSizeChange\"\n        @current-change=\"handleCurrentChange\"\n        :current-page=\"pageNum\"\n        :page-sizes=\"&#91;5, 10, 20, 50]\"\n        :page-size=\"pageSize\"\n        layout=\"total, sizes, prev, pager, next, jumper\"\n        :total=\"total\"&gt;\n    &lt;\/el-pagination&gt;\n    &lt;el-dialog\n        title=\"\u63d0\u793a\"\n        :visible.sync=\"centerDialogVisible\"\n        width=\"30%\"\n        center&gt;\n\n      &lt;el-form ref=\"form\" :rules=\"rules\" :model=\"form\" label-width=\"80px\"&gt;\n        &lt;el-form-item label=\"\u7269\u54c1\u540d\" prop=\"name\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.name\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u4ed3\u5e93\" prop=\"storage\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-select v-model=\"form.storage\" placehoLder=\"\u8bf7\u9009\u62e9\u4ed3\u5e93\" style=\"margin-left: 5px;\"&gt;\n              &lt;el-option\n                  v-for=\"item in storageData\"\n                  :key=\"item.id\"\n                  :label=\"item.name\"\n                  :value=\"item.id\"&gt;\n              &lt;\/el-option&gt;\n            &lt;\/el-select&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5206\u7c7b\" prop=\"goodstype\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-select v-model=\"form.goodstype\" placeholder=\"\u8bf7\u9009\u62e9\u5206\u7c7b\" style=\"margin-left: 5px;\"&gt;\n              &lt;el-option\n                  v-for=\"item in goodstypeData\"\n                  :key=\"item.id\"\n                  :label=\"item.name\"\n                  :value=\"item.id\"&gt;\n              &lt;\/el-option&gt;\n            &lt;\/el-select&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u6570\u91cf\" prop=\"count\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input v-model=\"form.count\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n        &lt;el-form-item label=\"\u5907\u6ce8\" prop=\"remark\"&gt;\n          &lt;el-col :span=\"20\"&gt;\n            &lt;el-input type=\"textarea\" v-model=\"form.remark\"&gt;&lt;\/el-input&gt;\n          &lt;\/el-col&gt;\n        &lt;\/el-form-item&gt;\n      &lt;\/el-form&gt;\n\n      &lt;span slot=\"footer\" class=\"dialog-footer\"&gt;\n        &lt;el-button @click=\"centerDialogVisible=false\"&gt;\u53d6\u6d88&lt;\/el-button&gt;\n        &lt;el-button type=\"primary\" @click=\"save\"&gt;\u786e\u5b9a&lt;\/el-button&gt;\n  &lt;\/span&gt;\n    &lt;\/el-dialog&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;style scoped&gt;\n\n&lt;\/style&gt;\n&lt;script&gt;\nexport default {\n  name: \"GoodsManage\",\n  data() {\n    let checkCount = (rule, value, callback) =&gt; {\n      if (value &gt; 9999) {\n        callback(new Error('\u6570\u91cf\u8f93\u5165\u8fc7\u5927'));\n      } else {\n        callback();\n      }\n    };\n    return {\n      storageData: &#91;],\n      tableData: &#91;],\n      goodstypeData: &#91;],\n      pageSize: 10,\n      pageNum: 1,\n      storage: '',\n      goodstype: '',\n      total: 0,\n      name: '',\n      centerDialogVisible: false,\n      form: {\n        id: '',\n        name: '',\n        remark: '',\n        count: '',\n        storage: '',\n        goodstype: '',\n      },\n      rules: {\n        name: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u7269\u54c1\u540d', trigger: 'blur'},\n        ],\n        storage:&#91;\n          {required:true,message:'\u8bf7\u9009\u62e9\u4ed3\u5e93',trigger:'blur'}\n        ],\n        goodstype:&#91;\n          {required:true,message:'\u8bf7\u9009\u62e9\u5206\u7c7b\u2019\uff0ctrigger:\u2018blur'}\n        ],\n        count: &#91;\n          {required: true, message: '\u8bf7\u8f93\u5165\u6570\u91cf', trigger: 'blur'},\n          {pattern: \/^(&#91;1-9]&#91;0-9]*){1,4}$\/, message: '\u6570\u91cf\u5fc5\u987b\u4e3a\u6b63\u6574\u6570', trigger: \"blur\"},\n          {validator: checkCount, trigger: 'blur'}\n        ]\n      }\n    }\n  },\n  methods: {\n    formatStorage(row) {\n      let temp = this.storageData.find(item =&gt; {\n        return item.id === row.storage\n      })\n      return temp &amp;&amp; temp.name\n    },\n    formatGoodsType(row) {\n      let temp = this.goodstypeData.find(item =&gt; {\n        return item.id === row.goodstype\n      })\n      return temp &amp;&amp; temp.name\n    },\n    add() {\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.resetForm()\n        this.form.id = ''\n      })\n    },\n    mod(row) {\n      \/\/this.form=row\u5c31\u53ef\u4ee5\u4e86\n      this.centerDialogVisible = true\n      this.$nextTick(() =&gt; {\n        this.form.id = row.id;\n        this.form.remark = row.remark;\n        this.form.name = row.name;\n        this.form.storage = row.storage;\n        this.form.goodstype = row.goodstype;\n        this.form.count = row.count;\n      })\n    },\n    del(id) {\n      this.$axios.get(this.$httpUrl + '\/goods\/del?id=' + id).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.loadPost();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    resetForm() {\n      this.centerDialogVisible = true\n      this.$refs.form.resetFields();\n      this.form.id = '';\n    },\n    doSave() {\n      this.$axios.post(this.$httpUrl + '\/goods\/save', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.centerDialogVisible = false\n          this.loadPost();\n          this.resetForm()\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    doMod() {\n      this.$axios.post(this.$httpUrl + '\/goods\/update', this.form).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res);\n        if (res.code == 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f\uff01',\n            type: 'success'\n          });\n          this.centerDialogVisible = false;\n          this.loadPost();\n          this.resetForm();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25\uff01',\n            type: 'error'\n          });\n        }\n      });\n    },\n    save() {\n      this.$refs.form.validate((valid) =&gt; {\n        if (valid) {\n          if (this.form.id) {\n            this.doMod();\n          } else {\n            this.doSave();\n          }\n\n        } else {\n          console.log('error submit!!');\n          return false;\n        }\n      });\n    },\n    loadPost() {\n      this.$axios.post(this.$httpUrl + '\/goods\/listPage', {\n        pageSize: this.pageSize,\n        pageNum: this.pageNum,\n        param: {\n          name: this.name,\n          goodstype: this.goodstype + '',\/\/string\u548cint\u5f3a\u8f6c\u4e00\u4e0b\n          storage: this.storage + ''\n        }\n      }).then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.tableData = res.data\n          this.total = res.total\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    loadStorage() {\n      this.$axios.get(this.$httpUrl + '\/storage\/list').then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.storageData = res.data\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    loadGoodsType() {\n      this.$axios.get(this.$httpUrl + '\/goodstype\/list').then(res =&gt; res.data).then(res =&gt; {\n        console.log(res)\n        if (res.code === 200) {\n          this.goodstypeData = res.data\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    resetParam() {\n      this.name = ''\n      this.storage = ''\n      this.goodstype = ''\n    },\n    handleSizeChange(val) {\n      console.log(`\u6bcf\u9875 ${val} \u6761`);\n      this.pageNum = 1\/\/\u8fd9\u4e2a\u9519\u8bef\u662f\u5148\u7ffb\u5230\u7b2c\u4e8c\u9875\u5728\u8c03\u9875\u9762\u6761\u6570\uff0c\u663e\u793a\u65e0\u6570\u636e\n      this.pageSize = val\n      this.loadPost()\n    },\n    handleCurrentChange(val) {\n      console.log(`\u5f53\u524d\u9875: ${val}`);\n      this.pageNum = val\n      this.loadPost()\n    }\n  },\n  beforeMount() {\n    this.loadStorage()\n    this.loadGoodsType()\n    this.loadPost()\n  }\n}\n\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p>\u00a0<img loading=\"lazy\" decoding=\"async\" height=\"164\" width=\"429\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/ca8e0313f2414860adb5be5ffabf7721.png\" alt=\"\"><\/p>\n\n\n\n<p>&nbsp;\u540e\u7aef\u63a5\u53d7\u4e00\u4e0bGoodsControlller.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.StringUtils;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.wms.common.QueryPageParam;\nimport com.wms.common.Result;\nimport com.wms.entity.Goods;\nimport com.wms.entity.Storage;\nimport com.wms.service.GoodsService;\nimport com.wms.service.StorageService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.HashMap;\n\n\/**\n * &lt;p&gt;\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@RestController\n@RequestMapping(\"\/goods\")\npublic class GoodsController {\n    @Autowired\n    private GoodsService goodsService;\n\n    \/\/\u65b0\u589e\n    @PostMapping(\"\/save\")\n    public Result save(@RequestBody Goods goods) {\n        return goodsService.save(goods)?Result.success():Result.fail();\n    }\n    \/\/\u66f4\u65b0\n    @PostMapping(\"\/update\")\n    public Result update(@RequestBody Goods goods) {\n        return goodsService.updateById(goods)?Result.success():Result.fail();\n    }\n    @GetMapping(\"\/del\")\n    public Result del(@RequestParam String id) {\n        return goodsService.removeById(id)?Result.success():Result.fail();\n    }\n\n    @PostMapping(\"\/listPage\")\n    public Result listPage(@RequestBody QueryPageParam query) {\n        HashMap param = query.getParam();\n        String name = (String) param.get(\"name\");\n        String storage = (String) param.get(\"storage\");\n        String goodstype = (String) param.get(\"goodstype\");\n\n        Page&lt;Goods&gt; page = new Page();\n        page.setCurrent(query.getPageNum());\n        page.setSize(query.getPageSize());\n\n        LambdaQueryWrapper&lt;Goods&gt; lambdaQueryWrapper = new LambdaQueryWrapper();\n        if(StringUtils.isNotBlank(name)&amp;&amp;!\"null\".equals(name)) {\n            lambdaQueryWrapper.like(Goods::getName, name);\n        }\n        if(StringUtils.isNotBlank(storage)&amp;&amp;!\"null\".equals(storage)) {\n            lambdaQueryWrapper.eq(Goods::getStorage, storage);\n        }\n        if(StringUtils.isNotBlank(goodstype)&amp;&amp;!\"null\".equals(goodstype)) {\n            lambdaQueryWrapper.eq(Goods::getGoodstype, goodstype);\n        }\n\n        IPage result=goodsService.pageCC(page,lambdaQueryWrapper);\n        return Result.success(result.getRecords(),result.getTotal());\n    }\n}\n<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">\u4e09\u5341\u4e8c\u3001\u8bb0\u5f55\u7ba1\u7406<\/h1>\n\n\n\n<pre class=\"wp-block-code\"><code>DROP TABLE IF EXISTS `record`;\nCREATE TABLE `record` (\n    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '\u4e3b\u952e',\n    `goods` int(11) NOT NULL COMMENT '\u8d27\u54c1id',\n    `userId` int(11) DEFAULT NULL COMMENT '\u53d6\u8d27\u4eba\/\u8865\u8d27\u4eba',\n    `admin_id` int(11) DEFAULT NULL COMMENT '\u64cd\u4f5c\u4ebaid',\n    `count` int(11) DEFAULT NULL COMMENT '\u6570\u91cf',\n    `createtime` datetime DEFAULT NULL COMMENT '\u64cd\u4f5c\u65f6\u95f4',\n    `remark` varchar(1000) DEFAULT NULL COMMENT '\u5907\u6ce8',\nPRIMARY KEY (`id`)\n) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;<\/code><\/pre>\n\n\n\n<p>\u63d0\u524d\u8bbe\u4e00\u4e2a record \u8bb0\u5f55<img decoding=\"async\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/557cc69a429b4680b4cbfd5b1b9bdab8.png\" alt=\"\"><\/p>\n\n\n\n<p>\u63a5\u4e0b\u6765\u4f9d\u65e7\u65f6\u90a35\u4e2a\u4ee3\u7801<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.StringUtils;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.wms.common.QueryPageParam;\nimport com.wms.common.Result;\nimport com.wms.entity.Goods;\nimport com.wms.entity.Record;\nimport com.wms.service.RecordService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.HashMap;\n\n\/**\n * &lt;p>\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p>\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@RestController\n@RequestMapping(\"\/record\")\npublic class RecordController {\n    @Autowired\n    private RecordService recordService;\n    @PostMapping(\"\/listPage\")\n    public Result listPage(@RequestBody QueryPageParam query) {\n        HashMap param = query.getParam();\n        String name = (String) param.get(\"name\");\n        String storage = (String) param.get(\"storage\");\n        String goodstype = (String) param.get(\"goodstype\");\n\n        Page&lt;Record> page = new Page();\n        page.setCurrent(query.getPageNum());\n        page.setSize(query.getPageSize());\n\n        LambdaQueryWrapper&lt;Record> lambdaQueryWrapper = new LambdaQueryWrapper();\n        if(StringUtils.isNotBlank(name)&amp;&amp;!\"null\".equals(name)) {\n            \/\/lambdaQueryWrapper.like(Record::getName, name);\n        }\n        if(StringUtils.isNotBlank(storage)&amp;&amp;!\"null\".equals(storage)) {\n            \/\/lambdaQueryWrapper.eq(Record::getStorage, storage);\n        }\n        if(StringUtils.isNotBlank(goodstype)&amp;&amp;!\"null\".equals(goodstype)) {\n            \/\/lambdaQueryWrapper.eq(Record::getGoodstype, goodstype);\n        }\n\n        IPage result=recordService.pageCC(page,lambdaQueryWrapper);\n        return Result.success(result.getRecords(),result.getTotal());\n    }\n}<img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/79871d93-5235-4dfa-93e4-dfc1e37f0911\"><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.service;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.wms.entity.Record;\nimport com.baomidou.mybatisplus.extension.service.IService;\n\n\/**\n * &lt;p&gt;\n *  \u670d\u52a1\u7c7b\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\npublic interface RecordService extends IService&lt;Record&gt; {\n    IPage pageCC(IPage&lt;Record&gt; page, Wrapper  wrapper);\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.wms.entity.Record;\nimport com.wms.mapper.RecordMapper;\nimport com.wms.service.RecordService;\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\nimport jakarta.annotation.Resource;\nimport org.springframework.stereotype.Service;\n\n\/**\n * &lt;p&gt;\n *  \u670d\u52a1\u5b9e\u73b0\u7c7b\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@Service\npublic class RecordServiceImpl extends ServiceImpl&lt;RecordMapper, Record&gt; implements RecordService {\n    \n    @Resource\n    private RecordMapper recordMapper;\n    @Override\n    public IPage pageCC(IPage&lt;Record&gt; page, Wrapper wrapper) {\n        return recordMapper.pageCC(page, wrapper);\n    }\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.Constants;\nimport com.wms.entity.Record;\nimport com.baomidou.mybatisplus.core.mapper.BaseMapper;\nimport org.apache.ibatis.annotations.Mapper;\nimport org.apache.ibatis.annotations.Param;\n\n\/**\n * &lt;p&gt;\n *  Mapper \u63a5\u53e3\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@Mapper\npublic interface RecordMapper extends BaseMapper&lt;Record&gt; {\n    IPage pageCC(IPage&lt;Record&gt; page, @Param(Constants.WRAPPER) Wrapper wrapper);\n}\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?>\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\">\n&lt;mapper namespace=\"com.wms.mapper.RecordMapper\">\n\n    &lt;select id=\"pageCC\" resultType=\"com.wms.entity.Record\">\n        select * from record ${ew.customSqlSegment}\n    &lt;\/select>\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u6620\u5c04\u7ed3\u679c -->\n    &lt;resultMap id=\"BaseResultMap\" type=\"com.wms.entity.Record\">\n        &lt;id column=\"id\" property=\"id\" \/>\n        &lt;result column=\"goods\" property=\"goods\" \/>\n        &lt;result column=\"userId\" property=\"userid\" \/>\n        &lt;result column=\"admin_id\" property=\"adminId\" \/>\n        &lt;result column=\"count\" property=\"count\" \/>\n        &lt;result column=\"createtime\" property=\"createtime\" \/>\n        &lt;result column=\"remark\" property=\"remark\" \/>\n    &lt;\/resultMap>\n\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u7ed3\u679c\u5217 -->\n    &lt;sql id=\"Base_Column_List\">\n        id, goods, userId, admin_id, count, createtime, remark\n    &lt;\/sql>\n\n&lt;\/mapper>\n\u200b<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834244-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203718-1024x556.png\" alt=\"\" class=\"wp-image-747\" srcset=\"https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834244-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203718-1024x556.png 1024w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834244-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203718-300x163.png 300w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834244-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203718-768x417.png 768w, https:\/\/eve2333.top\/wp-content\/uploads\/2024\/12\/1733834244-\u5c4f\u5e55\u622a\u56fe-2024-12-10-203718.png 1042w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/f109903c-bb58-4d9f-9c9b-4e8fe752e6f3\">!!!!!!!!!!!!!!!!!!!!!!!!!!!\u8fd9\u91cc\u5199\u70b9\u8bdd\u5927\u698216.00-19.30<\/p>\n\n\n\n<p>RecordMapper.xml\u4fee\u6539\u4e3a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;select id=\"pageCC\" resultType=\"com.wms.entity.RecordRes\"&gt;\n        select\n            a.*,\n            (select u.name from user u where u.id=a.userid) as username,\n            (select u.name from user u where u.id=a.admin_id) as adminname\n        from record a\n            ${ew.customSqlSegment}\n    &lt;\/select&gt;<\/code><\/pre>\n\n\n\n<p>&nbsp;\u5728entity\u4e2d\u6dfb\u52a0RecordRes<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.entity;\n\nimport lombok.Data;\n\n@Data\npublic class RecordRes extends Record{\n    private String username;\n    private String adminname;\n}\n<\/code><\/pre>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/5f5ede01e53242a69efdaed2a1b7e305.png\" alt=\"\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/238d7e63-da39-4bb1-ac49-16c811fb6881\">\u63a5\u4e0b\u6765\u5f04\u524d\u9762\u4e09\u4e2a RecordMapper.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE mapper PUBLIC \"-\/\/mybatis.org\/\/DTD Mapper 3.0\/\/EN\" \"http:\/\/mybatis.org\/dtd\/mybatis-3-mapper.dtd\"&gt;\n&lt;mapper namespace=\"com.wms.mapper.RecordMapper\"&gt;\n\n    &lt;select id=\"pageCC\" resultType=\"com.wms.entity.RecordRes\"&gt;\n        select a.*,b.name goodsname,c.name storagename,d.name goodstypename,\n        (select u.name from user u where u.id=a.userid)username,\n        (select u.name from user u where u.id=a.admin_id)adminname\n        from record a ,goods b,storage c,goodsType d where a.goods=b.id\n        and b.storage=c.id and b.goodsType=d.id\n        ${ew.customSqlSegment}\n    &lt;\/select&gt;\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u6620\u5c04\u7ed3\u679c --&gt;\n    &lt;resultMap id=\"BaseResultMap\" type=\"com.wms.entity.Record\"&gt;\n        &lt;id column=\"id\" property=\"id\" \/&gt;\n        &lt;result column=\"goods\" property=\"goods\" \/&gt;\n        &lt;result column=\"userId\" property=\"userid\" \/&gt;\n        &lt;result column=\"admin_id\" property=\"adminId\" \/&gt;\n        &lt;result column=\"count\" property=\"count\" \/&gt;\n        &lt;result column=\"createtime\" property=\"createtime\" \/&gt;\n        &lt;result column=\"remark\" property=\"remark\" \/&gt;\n    &lt;\/resultMap&gt;\n\n    &lt;!-- \u901a\u7528\u67e5\u8be2\u7ed3\u679c\u5217 --&gt;\n    &lt;sql id=\"Base_Column_List\"&gt;\n        id, goods, userId, admin_id, count, createtime, remark\n    &lt;\/sql&gt;\n\n&lt;\/mapper&gt;\n<\/code><\/pre>\n\n\n\n<p>\u5b8c\u5168\u4e0d\u5efa\u8bae\u8fd9\u4e48\u5199sql\uff0c\u76f4\u63a5\u5728\u4ee3\u7801\u5c42\u53d6\u5230\u6240\u6709\u7684key\uff0c\u7136\u540e\u5206\u522b\u53bb\u67e5\u5404\u4e2a\u8868\uff0c\u8fd9\u6837\u5728\u4f01\u4e1a\u4e2d\uff0c\u5373\u4f7f\u6362\u53e6\u4e00\u4e2a\u5f00\u53d1\u8fc7\u6765\u7ef4\u62a4\uff0c\u4e5f\u66f4\u6e05\u6670\u4e9b<\/p>\n\n\n\n<p>&nbsp;RecordRes.java\u65b0\u52a0\u51e0\u6761<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">package com.wms.entity;\n\nimport lombok.Data;\n\n@Data\npublic class RecordRes extends Record{\n    private String username;\n    private String adminname;\n    private String goodsname;\n    private String storagename;\n    private String goodstypename;\n}\n<\/pre>\n\n\n\n<p>&nbsp;\u4fee\u6539RecordManage.vue,\u6dfb\u52a0\u51e0\u4e2a\u53d8\u91cf\u4f7f\u5f97\u9002\u914d<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"goodsname\" label=\"\u7269\u54c1\u540d\" width=\"80\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"storagename\" label=\"\u4ed3\u5e93\"  &gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"goodstypename\" label=\"\u5206\u7c7b\"  &gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"adminname\" label=\"\u64cd\u4f5c\u4eba\"  &gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"username\" label=\"\u7533\u8bf7\u4eba\"  &gt;\n    &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"count\" label=\"\u6570\u91cf\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"createtime\" label=\"\u64cd\u4f5c\u65f6\u95f4\"&gt;\n      &lt;\/el-table-column&gt;\n      &lt;el-table-column prop=\"remark\" label=\"\u5907\u6ce8\"&gt;\n      &lt;\/el-table-column&gt;<\/code><\/pre>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" height=\"169\" width=\"467\" src=\"https:\/\/i-blog.csdnimg.cn\/direct\/dad5d1dcb3a441ae97164525e615ac61.png\" alt=\"\"><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/2424fa38-521e-4f86-9f62-b408c2a835b0\"><\/p>\n\n\n\n<p>&nbsp;RecordController.java<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.StringUtils;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.wms.common.QueryPageParam;\nimport com.wms.common.Result;\nimport com.wms.entity.Goods;\nimport com.wms.entity.Record;\nimport com.wms.service.RecordService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.HashMap;\n\n\/**\n * &lt;p&gt;\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@RestController\n@RequestMapping(\"\/record\")\npublic class RecordController {\n    @Autowired\n    private RecordService recordService;\n    @PostMapping(\"\/listPage\")\n    public Result listPage(@RequestBody QueryPageParam query) {\n        HashMap param = query.getParam();\n        String name = (String) param.get(\"name\");\n        String storage = (String) param.get(\"storage\");\n        String goodstype = (String) param.get(\"goodstype\");\n\n        Page&lt;Record&gt; page = new Page();\n        page.setCurrent(query.getPageNum());\n        page.setSize(query.getPageSize());\n\n        QueryWrapper&lt;Record&gt; queryWrapper = new QueryWrapper();\n        queryWrapper.apply(\" a.goods=b.id and b.storage=c.id and b.goodsType=d.id \");\n        if(StringUtils.isNotBlank(name)&amp;&amp;!\"null\".equals(name)) {\n            \/\/lambdaQueryWrapper.like(Record::getName, name);\n            queryWrapper.like(\"b.name\",name);\n        }\n        if(StringUtils.isNotBlank(storage)&amp;&amp;!\"null\".equals(storage)) {\n            \/\/lambdaQueryWrapper.eq(Record::getStorage, storage);\n        }\n        if(StringUtils.isNotBlank(goodstype)&amp;&amp;!\"null\".equals(goodstype)) {\n            \/\/lambdaQueryWrapper.eq(Record::getGoodstype, goodstype);\n        }\n\n        IPage result=recordService.pageCC(page,QueryWrapper);\n        return Result.success(result.getRecords(),result.getTotal());\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>\u4e0e\u6b64\u540c\u65f6,\u628aRecordMapper.xml\u7684 \u8fd9\u4e00\u6bb5\u6ce8\u91ca\u6389.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/*where a.goods=b.id\n  and b.storage=c.id and b.goodsType=d.id*\/<\/pre>\n\n\n\n<p>&nbsp;\u7ee7\u7eed\u914d\u5957\u7684\u5199\u540e\u7aef,\u6700\u540e5min\u8bb2\u4e86\u4e00\u4e0b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package com.wms.controller;\n\n\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport com.baomidou.mybatisplus.core.metadata.IPage;\nimport com.baomidou.mybatisplus.core.toolkit.StringUtils;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.wms.common.QueryPageParam;\nimport com.wms.common.Result;\nimport com.wms.entity.Goods;\nimport com.wms.entity.Record;\nimport com.wms.service.RecordService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.PostMapping;\nimport org.springframework.web.bind.annotation.RequestBody;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\nimport org.springframework.web.bind.annotation.RestController;\n\nimport java.util.HashMap;\n\n\/**\n * &lt;p&gt;\n *  \u524d\u7aef\u63a7\u5236\u5668\n * &lt;\/p&gt;\n *\n * @author wms\n * @since 2024-12-07\n *\/\n@RestController\n@RequestMapping(\"\/record\")\npublic class RecordController {\n    @Autowired\n    private RecordService recordService;\n    @PostMapping(\"\/listPage\")\n    public Result listPage(@RequestBody QueryPageParam query) {\n        HashMap param = query.getParam();\n        String name = (String) param.get(\"name\");\n        String storage = (String) param.get(\"storage\");\n        String goodstype = (String) param.get(\"goodstype\");\n\n        Page&lt;Record&gt; page = new Page();\n        page.setCurrent(query.getPageNum());\n        page.setSize(query.getPageSize());\n\n        QueryWrapper&lt;Record&gt; queryWrapper = new QueryWrapper();\n        queryWrapper.apply(\" a.goods=b.id and b.storage=c.id and b.goodsType=d.id \");\n        if(StringUtils.isNotBlank(name)&amp;&amp;!\"null\".equals(name)) {\n            \/\/lambdaQueryWrapper.like(Record::getName, name);\n            queryWrapper.like(\"b.name\",name);\n        }\n        if(StringUtils.isNotBlank(storage)&amp;&amp;!\"null\".equals(storage)) {\n            queryWrapper.eq(\"c.id\",storage);\n        }\n        if(StringUtils.isNotBlank(goodstype)&amp;&amp;!\"null\".equals(goodstype)) {\n            queryWrapper.eq(\"d.id\",goodstype);\n        }\n\n        IPage result=recordService.pageCC(page,queryWrapper);\n        return Result.success(result.getRecords(),result.getTotal());\n    }\n}\n<\/code><\/pre>\n\n\n\n<p>&nbsp;RecordController.vue<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;template>\n  &lt;div>\n    &lt;div style=\"margin-left:5px\">\n      &lt;el-input v-model=\"name\" placeholder=\"\u8bf7\u8f93\u5165\u7269\u54c1\u540d:\" suffix-icon=\"el-icon-search\" style=\"width:200px;\"\n                @keyup.enter.native=\"loadPost\">&lt;\/el-input>\n      &lt;el-select v-model=\"storage\" placehoLder=\"\u8bf7\u9009\u62e9\u4ed3\u5e93\" style=\"margin-left: 5px;\">\n        &lt;el-option\n            v-for=\"item in storageData\"\n            :key=\"item.id\"\n            :label=\"item.name\"\n            :value=\"item.id\">\n        &lt;\/el-option>\n      &lt;\/el-select>\n      &lt;el-select v-model=\"goodstype\" placeholder=\"\u8bf7\u9009\u62e9\u5206\u7c7b\" style=\"margin-left: 5px;\">\n        &lt;el-option\n            v-for=\"item in goodstypeData\"\n            :key=\"item.id\"\n            :label=\"item.name\"\n            :value=\"item.id\">\n        &lt;\/el-option>\n      &lt;\/el-select>\n\n      &lt;el-button type=\"primary\" style=\"margin-left:5px\" @click=\"loadPost\">\u67e5\u8be2&lt;\/el-button>\n      &lt;el-button type=\"success\" @click=\"resetParam\">\u91cd\u7f6e&lt;\/el-button>\n\n    &lt;\/div>\n    &lt;el-table :data=\"tableData\"\n              :header-cell-style=\"{background:'#f2f5fc',color:'#555'}\"\n              border\n    >\n      &lt;el-table-column prop=\"id\" label=\"ID\" width=\"60\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"goodsname\" label=\"\u7269\u54c1\u540d\" width=\"80\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"storagename\" label=\"\u4ed3\u5e93\"  >\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"goodstypename\" label=\"\u5206\u7c7b\"  >\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"adminname\" label=\"\u64cd\u4f5c\u4eba\"  >\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"username\" label=\"\u7533\u8bf7\u4eba\"  >\n    &lt;\/el-table-column>\n      &lt;el-table-column prop=\"count\" label=\"\u6570\u91cf\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"createtime\" label=\"\u64cd\u4f5c\u65f6\u95f4\">\n      &lt;\/el-table-column>\n      &lt;el-table-column prop=\"remark\" label=\"\u5907\u6ce8\">\n      &lt;\/el-table-column>\n\n    &lt;\/el-table>\n    &lt;el-pagination\n        @size-change=\"handleSizeChange\"\n        @current-change=\"handleCurrentChange\"\n        :current-page=\"pageNum\"\n        :page-sizes=\"&#91;5, 10, 20, 50]\"\n        :page-size=\"pageSize\"\n        layout=\"total, sizes, prev, pager, next, jumper\"\n        :total=\"total\">\n    &lt;\/el-pagination>\n\n  &lt;\/div>\n&lt;\/template>\n\n&lt;style scoped>\n\n&lt;\/style>\n&lt;script>\nexport default {\n  name: \"RecordManage\",\n  data() {\n\n    return {\n      storageData: &#91;],\n      tableData: &#91;],\n      goodstypeData: &#91;],\n      pageSize: 10,\n      pageNum: 1,\n      storage: '',\n      goodstype: '',\n      total: 0,\n      name: '',\n      centerDialogVisible: false,\n      form: {\n        id: '',\n        name: '',\n        remark: '',\n        count: '',\n        storage: '',\n        goodstype: '',\n      },\n    }\n  },\n  methods: {\n    formatStorage(row) {\n      let temp = this.storageData.find(item => {\n        return item.id === row.storage\n      })\n      return temp &amp;&amp; temp.name\n    },\n    formatGoodsType(row) {\n      let temp = this.goodstypeData.find(item => {\n        return item.id === row.goodstype\n      })\n      return temp &amp;&amp; temp.name\n    },\n    add() {\n      this.centerDialogVisible = true\n      this.$nextTick(() => {\n        this.resetForm()\n        this.form.id = ''\n      })\n    },\n    mod(row) {\n      \/\/this.form=row\u5c31\u53ef\u4ee5\u4e86\n      this.centerDialogVisible = true\n      this.$nextTick(() => {\n        this.form.id = row.id;\n        this.form.remark = row.remark;\n        this.form.name = row.name;\n        this.form.storage = row.storage;\n        this.form.goodstype = row.goodstype;\n        this.form.count = row.count;\n      })\n    },\n    del(id) {\n      this.$axios.get(this.$httpUrl + '\/goods\/del?id=' + id).then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.loadPost();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    resetForm() {\n      this.centerDialogVisible = true\n      this.$refs.form.resetFields();\n      this.form.id = '';\n    },\n    doSave() {\n      this.$axios.post(this.$httpUrl + '\/goods\/save', this.form).then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f!',\n            type: 'success'\n          });\n          this.centerDialogVisible = false\n          this.loadPost();\n          this.resetForm()\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25!\u8bf7\u8fd4\u56de\u91cd\u65b0\u64cd\u4f5c...',\n            type: 'error'\n          });\n        }\n      });\n    },\n    doMod() {\n      this.$axios.post(this.$httpUrl + '\/goods\/update', this.form).then(res => res.data).then(res => {\n        console.log(res);\n        if (res.code == 200) {\n          this.$message({\n            message: '\u64cd\u4f5c\u6210\u529f\uff01',\n            type: 'success'\n          });\n          this.centerDialogVisible = false;\n          this.loadPost();\n          this.resetForm();\n        } else {\n          this.$message({\n            message: '\u64cd\u4f5c\u5931\u8d25\uff01',\n            type: 'error'\n          });\n        }\n      });\n    },\n    save() {\n      this.$refs.form.validate((valid) => {\n        if (valid) {\n          if (this.form.id) {\n            this.doMod();\n          } else {\n            this.doSave();\n          }\n\n        } else {\n          console.log('error submit!!');\n          return false;\n        }\n      });\n    },\n    loadPost() {\n      this.$axios.post(this.$httpUrl + '\/record\/listPage', {\n        pageSize: this.pageSize,\n        pageNum: this.pageNum,\n        param: {\n          name: this.name,\n          goodstype: this.goodstype + '',\/\/string\u548cint\u5f3a\u8f6c\u4e00\u4e0b\n          storage: this.storage + ''\n        }\n      }).then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.tableData = res.data\n          this.total = res.total\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    loadStorage() {\n      this.$axios.get(this.$httpUrl + '\/storage\/list').then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.storageData = res.data\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    loadGoodsType() {\n      this.$axios.get(this.$httpUrl + '\/goodstype\/list').then(res => res.data).then(res => {\n        console.log(res)\n        if (res.code === 200) {\n          this.goodstypeData = res.data\n        } else {\n          alert('\u83b7\u53d6\u6570\u636e\u5931\u8d25\uff01\u8bf7\u5237\u65b0\u9875\u9762')\n        }\n      })\n    },\n    resetParam() {\n      this.name = ''\n      this.storage = ''\n      this.goodstype = ''\n    },\n    handleSizeChange(val) {\n      console.log(`\u6bcf\u9875 ${val} \u6761`);\n      this.pageNum = 1\/\/\u8fd9\u4e2a\u9519\u8bef\u662f\u5148\u7ffb\u5230\u7b2c\u4e8c\u9875\u5728\u8c03\u9875\u9762\u6761\u6570\uff0c\u663e\u793a\u65e0\u6570\u636e\n      this.pageSize = val\n      this.loadPost()\n    },\n    handleCurrentChange(val) {\n      console.log(`\u5f53\u524d\u9875: ${val}`);\n      this.pageNum = val\n      this.loadPost()\n    }\n  },\n  beforeMount() {\n    this.loadGoodsType()\n    this.loadStorage()\n    this.loadPost()\n  }\n}\n\n&lt;\/script><img loading=\"lazy\" decoding=\"async\" height=\"15\" width=\"15\" src=\"blob:https:\/\/eve2333.top\/51692ac4-e09b-4b6c-a6dd-0e4c8d3aac1d\"><\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;\u4e8c\u5341\u4e8c\u3001\u767b\u5f55 Login.vue\u5982\u4e0b \u5728wms-web\u4e2d&nbsp; &nbsp; npm install vue-r &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"emotion":"","emotion_color":"","title_style":"","license":"","footnotes":""},"categories":[3],"tags":[19,20],"class_list":["post-744","post","type-post","status-publish","format-standard","hentry","category-3","tag-java","tag-20"],"_links":{"self":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/744","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=744"}],"version-history":[{"count":1,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/744\/revisions"}],"predecessor-version":[{"id":748,"href":"https:\/\/eve2333.top\/index.php?rest_route=\/wp\/v2\/posts\/744\/revisions\/748"}],"wp:attachment":[{"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eve2333.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}