├── LICENSE ├── README.md ├── dist ├── css │ ├── app.f2d8167a.css │ └── chunk-vendors.8778c491.css ├── favicon.ico ├── index.html └── js │ ├── app.b6c6f9b5.js │ ├── app.b6c6f9b5.js.map │ ├── chunk-vendors.a6ef15b0.js │ └── chunk-vendors.a6ef15b0.js.map └── elevator ├── .gitignore ├── README.md ├── babel.config.js ├── dist ├── css │ ├── app.119d5e04.css │ └── chunk-vendors.8778c491.css ├── favicon.ico ├── index.html └── js │ ├── app.f42976d1.js │ ├── app.f42976d1.js.map │ ├── chunk-vendors.a6ef15b0.js │ └── chunk-vendors.a6ef15b0.js.map ├── img ├── 001.png ├── 002.png ├── 003.png ├── 004.png ├── 005.png ├── 006.png └── 007.png ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── index.html ├── src ├── App.vue ├── assets │ ├── logo.png │ └── man.png ├── components │ ├── BtnGroup.vue │ ├── Elevator.vue │ └── HelloWorld.vue └── main.js └── 归档.zip /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Major 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 2020 Tongji SSE OS 课程作业 2 | 1. 电梯调度 3 | 4 | -------------------------------------------------------------------------------- /dist/css/app.f2d8167a.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700);.BtnGroup[data-v-cf1842a8]{position:absolute;left:3%;top:3%;width:180px}.aButton[data-v-cf1842a8]{margin:3px}.selectBtn[data-v-cf1842a8]{margin:3px;border-color:#00bfff}#components-layout-demo-fixed .logo[data-v-cf1842a8]{width:120px;height:31px;background:hsla(0,0%,100%,.2);margin:16px 24px 16px 0;float:left}.error-box[data-v-cf1842a8],.success-box[data-v-cf1842a8]{position:absolute;width:245px;height:250px;right:5%}.map1[data-v-cf1842a8]{background:linear-gradient(to bottom right,#b0db7d 40%,#b0db7d)}.map1[data-v-cf1842a8],.map2[data-v-cf1842a8]{border-radius:20px;height:360px;perspective:40px;box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.map2[data-v-cf1842a8]{background:linear-gradient(to bottom left,#ef8d9c 40%,#ffc39e)}html[data-v-cf1842a8]{display:grid;min-height:100%}body[data-v-cf1842a8]{display:grid;overflow:hidden;font-family:Lato,sans-serif;text-transform:uppercase;text-align:center}h1[data-v-cf1842a8]{font-size:.9em;font-weight:100;letter-spacing:3px;padding-top:5px;color:#fcfcfc;padding-bottom:5px;text-transform:uppercase}.green[data-v-cf1842a8]{color:#4ec07d}.red[data-v-cf1842a8]{color:#e96075}.alert-top[data-v-cf1842a8],.alert[data-v-cf1842a8]{font-weight:700;letter-spacing:5px}.alert-top[data-v-cf1842a8]{font-size:xx-large}p[data-v-cf1842a8]{margin-top:-5px;font-size:.5em;font-weight:100;color:#5e5e5e;letter-spacing:1px}.dot[data-v-cf1842a8],button[data-v-cf1842a8]{cursor:pointer}.two[data-v-cf1842a8]{right:12%;opacity:.5}.face[data-v-cf1842a8]{-webkit-animation:bounce-data-v-cf1842a8 1s ease-in infinite;animation:bounce-data-v-cf1842a8 1s ease-in infinite}.face2[data-v-cf1842a8],.face[data-v-cf1842a8]{position:absolute;width:22%;height:22%;background:#fcfcfc;border-radius:50%;border:1px solid #777;top:21%;left:37.5%;z-index:2}.face2[data-v-cf1842a8]{-webkit-animation:roll-data-v-cf1842a8 3s ease-in-out infinite;animation:roll-data-v-cf1842a8 3s ease-in-out infinite}.eye[data-v-cf1842a8]{position:absolute;width:5px;height:5px;background:#777;border-radius:50%;top:40%;left:20%}.right[data-v-cf1842a8]{left:68%}.mouth[data-v-cf1842a8]{position:absolute;top:43%;left:41%;width:7px;height:7px;border-radius:50%}.happy[data-v-cf1842a8]{border:2px solid;border-color:transparent #777 #777 transparent;transform:rotate(45deg)}.sad[data-v-cf1842a8]{top:49%;border:2px solid;border-color:#777 transparent transparent #777;transform:rotate(45deg)}.shadow[data-v-cf1842a8]{position:absolute;width:21%;height:3%;opacity:.5;background:#777;left:40%;top:43%;border-radius:50%;z-index:1}.scale[data-v-cf1842a8]{-webkit-animation:scale-data-v-cf1842a8 1s ease-in infinite;animation:scale-data-v-cf1842a8 1s ease-in infinite}.move[data-v-cf1842a8]{-webkit-animation:move-data-v-cf1842a8 3s ease-in-out infinite;animation:move-data-v-cf1842a8 3s ease-in-out infinite}.message[data-v-cf1842a8]{position:absolute;width:100%;text-align:center;height:40%;top:47%}@-webkit-keyframes bounce-data-v-cf1842a8{50%{transform:translateY(-10px)}}@keyframes bounce-data-v-cf1842a8{50%{transform:translateY(-10px)}}@-webkit-keyframes scale-data-v-cf1842a8{50%{transform:scale(.9)}}@keyframes scale-data-v-cf1842a8{50%{transform:scale(.9)}}@-webkit-keyframes roll-data-v-cf1842a8{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@keyframes roll-data-v-cf1842a8{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@-webkit-keyframes move-data-v-cf1842a8{0%{left:25%}50%{left:60%}to{left:25%}}@keyframes move-data-v-cf1842a8{0%{left:25%}50%{left:60%}to{left:25%}}.aBtn[data-v-37abc79a]{margin:3px}.aBtn2[data-v-37abc79a]{margin:3px;border-color:#00bfff}.map2[data-v-37abc79a]{background:linear-gradient(to bottom left,#ef8d9c 40%,#ffc39e);border-radius:20px;height:200px;perspective:40px;box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.BtnGroup[data-v-37abc79a]{position:absolute;left:3%;top:3%;float:left}.alert[data-v-37abc79a]{font-weight:700;letter-spacing:5px}.ctn[data-v-37abc79a]{margin:3px;float:left}html[data-v-37abc79a]{display:grid;min-height:100%}body[data-v-37abc79a]{display:grid;overflow:hidden;font-family:Lato,sans-serif;text-transform:uppercase;text-align:center}h1[data-v-37abc79a]{font-size:.9em;font-weight:100;letter-spacing:3px;padding-top:5px;color:#fcfcfc;padding-bottom:5px;text-transform:uppercase;float:left}#components-layout-demo-fixed .logo[data-v-e4e12c5e]{width:120px;height:31px;background:hsla(0,0%,100%,.2);margin:16px 24px 16px 0;float:left}.gap[data-v-e4e12c5e]{height:60px}.submitBtn[data-v-e4e12c5e]{outline:none;height:40px;text-align:center;width:130px;border-radius:40px;background:#fff;border:2px solid #1ecd97;color:#1ecd97;letter-spacing:1px;text-shadow:0;font-size:12px;font-weight:700;cursor:pointer;transition:all .25s ease}.submitBtn[data-v-e4e12c5e]:hover{color:#fff;background:#1ecd97}.submitBtn[data-v-e4e12c5e]:active{letter-spacing:2px}.error-box[data-v-e4e12c5e],.success-box[data-v-e4e12c5e]{position:absolute;width:245px;height:250px;right:5%}.map-1[data-v-e4e12c5e]{background:linear-gradient(to bottom right,#b0db7d 40%,#b0db7d)}.map-1[data-v-e4e12c5e],.map-2[data-v-e4e12c5e]{border-radius:20px;height:360px;perspective:40px;box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.map-2[data-v-e4e12c5e]{background:linear-gradient(to bottom left,#ef8d9c 40%,#ffc39e)}html[data-v-e4e12c5e]{display:grid;min-height:100%}body[data-v-e4e12c5e]{display:grid;overflow:hidden;font-family:Lato,sans-serif;text-transform:uppercase;text-align:center}#container[data-v-e4e12c5e]{position:relative;margin:auto;overflow:hidden;width:700px;height:250px}h1[data-v-e4e12c5e]{font-size:.9em;font-weight:100;letter-spacing:3px;padding-top:5px;color:#fcfcfc;padding-bottom:5px;text-transform:uppercase}.green[data-v-e4e12c5e]{color:#4ec07d}.red[data-v-e4e12c5e]{color:#e96075}.alert-top[data-v-e4e12c5e],.alert[data-v-e4e12c5e]{font-weight:700;letter-spacing:5px}.alert-top[data-v-e4e12c5e]{font-size:xx-large}p[data-v-e4e12c5e]{margin-top:-5px;font-size:.5em;font-weight:100;color:#5e5e5e;letter-spacing:1px}.dot[data-v-e4e12c5e],button[data-v-e4e12c5e]{cursor:pointer}.two[data-v-e4e12c5e]{right:12%;opacity:.5}.face[data-v-e4e12c5e]{-webkit-animation:bounce-data-v-e4e12c5e 1s ease-in infinite;animation:bounce-data-v-e4e12c5e 1s ease-in infinite}.face2[data-v-e4e12c5e],.face[data-v-e4e12c5e]{position:absolute;width:22%;height:22%;background:#fcfcfc;border-radius:50%;border:1px solid #777;top:21%;left:37.5%;z-index:2}.face2[data-v-e4e12c5e]{-webkit-animation:roll-data-v-e4e12c5e 3s ease-in-out infinite;animation:roll-data-v-e4e12c5e 3s ease-in-out infinite}.eye[data-v-e4e12c5e]{position:absolute;width:5px;height:5px;background:#777;border-radius:50%;top:40%;left:20%}.right[data-v-e4e12c5e]{left:68%}.mouth[data-v-e4e12c5e]{position:absolute;top:43%;left:41%;width:7px;height:7px;border-radius:50%}.happy[data-v-e4e12c5e]{border:2px solid;border-color:transparent #777 #777 transparent;transform:rotate(45deg)}.sad[data-v-e4e12c5e]{top:49%;border:2px solid;border-color:#777 transparent transparent #777;transform:rotate(45deg)}.shadow[data-v-e4e12c5e]{position:absolute;width:21%;height:3%;opacity:.5;background:#777;left:40%;top:43%;border-radius:50%;z-index:1}.scale[data-v-e4e12c5e]{-webkit-animation:scale-data-v-e4e12c5e 1s ease-in infinite;animation:scale-data-v-e4e12c5e 1s ease-in infinite}.move[data-v-e4e12c5e]{-webkit-animation:move-data-v-e4e12c5e 3s ease-in-out infinite;animation:move-data-v-e4e12c5e 3s ease-in-out infinite}.message[data-v-e4e12c5e]{position:absolute;width:100%;text-align:center;height:40%;top:47%}@-webkit-keyframes bounce-data-v-e4e12c5e{50%{transform:translateY(-10px)}}@keyframes bounce-data-v-e4e12c5e{50%{transform:translateY(-10px)}}@-webkit-keyframes scale-data-v-e4e12c5e{50%{transform:scale(.9)}}@keyframes scale-data-v-e4e12c5e{50%{transform:scale(.9)}}@-webkit-keyframes roll-data-v-e4e12c5e{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@keyframes roll-data-v-e4e12c5e{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@-webkit-keyframes move-data-v-e4e12c5e{0%{left:25%}50%{left:60%}to{left:25%}}@keyframes move-data-v-e4e12c5e{0%{left:25%}50%{left:60%}to{left:25%}}.swing[data-v-e4e12c5e]{display:inline-block;width:215px;padding:10px 0 10px 15px;font-family:Open Sans,sans;font-weight:400;color:#377d6a;background:#efefef;border:0;border-radius:3px;outline:0;text-indent:60px;transition:all .3s ease-in-out}.swing[data-v-e4e12c5e]::-webkit-input-placeholder{color:#efefef;text-indent:0;font-weight:300}.swing+label[data-v-e4e12c5e]{display:inline-block;position:absolute;top:0;left:0;padding:10px 15px;text-shadow:0 1px 0 rgba(19,74,70,.4);background:#7ab893;border-top-left-radius:3px;border-bottom-left-radius:3px;transform-origin:2px 2px;transform:rotate(0);-webkit-animation:swing-back-data-v-e4e12c5e .4s ease-in-out 1;animation:swing-back-data-v-e4e12c5e .4s ease-in-out 1}@-webkit-keyframes swing-data-v-e4e12c5e{0%{transform:rotate(0)}20%{transform:rotate(116deg)}40%{transform:rotate(60deg)}60%{transform:rotate(98deg)}80%{transform:rotate(76deg)}to{transform:rotate(82deg)}}@keyframes swing-data-v-e4e12c5e{0%{transform:rotate(0)}20%{transform:rotate(116deg)}40%{transform:rotate(60deg)}60%{transform:rotate(98deg)}80%{transform:rotate(76deg)}to{transform:rotate(82deg)}}@-webkit-keyframes swing-back-data-v-e4e12c5e{0%{transform:rotate(82deg)}to{transform:rotate(0)}}@keyframes swing-back-data-v-e4e12c5e{0%{transform:rotate(82deg)}to{transform:rotate(0)}}.swing[data-v-e4e12c5e]:active,.swing[data-v-e4e12c5e]:focus{color:#377d6a;text-indent:0;background:#fff;border-top-left-radius:0;border-bottom-left-radius:0}.swing[data-v-e4e12c5e]:active::-webkit-input-placeholder,.swing[data-v-e4e12c5e]:focus::-webkit-input-placeholder{color:#aaa}.swing:active+label[data-v-e4e12c5e],.swing:focus+label[data-v-e4e12c5e]{-webkit-animation:swing-data-v-e4e12c5e 1.4s ease-in-out 1;animation:swing-data-v-e4e12c5e 1.4s ease-in-out 1;transform:rotate(82deg)}.row[data-v-e4e12c5e]{max-width:800px;margin:0 auto;padding:60px 30px;position:relative;z-index:1;text-align:center}.row[data-v-e4e12c5e]:before{position:absolute;content:"";display:block;top:0;left:-5000px;height:100%;width:15000px;z-index:-1;background:inherit}.row[data-v-e4e12c5e]:first-child{padding:40px 30px}.row span[data-v-e4e12c5e]{position:relative;display:inline-block;margin:30px 10px}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px} -------------------------------------------------------------------------------- /dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/dist/favicon.ico -------------------------------------------------------------------------------- /dist/index.html: -------------------------------------------------------------------------------- 1 | elevator
-------------------------------------------------------------------------------- /dist/js/app.b6c6f9b5.js: -------------------------------------------------------------------------------- 1 | (function(t){function i(i){for(var s,a,r=i[0],c=i[1],l=i[2],u=0,d=[];uthis.destination?-1:(console.log("已经改变dir为1了"),1)},content:function(){return 1===this.doorState?{poster:"oh baby just wait a minute.",stateStr:"Open the Door",isStop:!0,isBusy:!0}:0===this.direction?{poster:"yay, everything is ready.",stateStr:"Free",isStop:!0,isBusy:!1}:{poster:"oh baby just wait a minute.",stateStr:"Busy",isStop:!1,isBusy:!0}}},methods:{handleClick:function(t){this.$set(this.isSelect,t,!0),0===this.direction&&(console.log(t),t===this.ctFloor?0===this.doorState&&this.openDoor(!1):(console.log("改变dst了"),this.destination=t))},run:function(){var t;0!==this.direction?(console.log(this.id+this.destination+this.ctFloor),1===this.direction?(this.ctFloor++,this.upList[this.ctFloor]||this.isSelect[this.ctFloor]||0===this.direction&&this.downList[this.ctFloor]?(this.$emit("changeFloor",this.ctFloor,this.id),this.openDoor(!0)):setTimeout(this.run,1e3)):-1===this.direction&&(this.ctFloor--,this.downList[this.ctFloor]||this.isSelect[this.ctFloor]||0===this.direction&&this.upList[this.ctFloor]?(this.$emit("changeFloor",this.ctFloor,this.id),this.openDoor(!0)):setTimeout(this.run,1e3))):1===this.oldDir?(t=this.checkFromTop(),-1===t&&(t=this.checkFromBottom()),-1===t?(this.destination=this.ctFloor,this.$emit("changeState",0,this.id)):this.destination=t):-1===this.oldDir&&(t=this.checkFromBottom(),-1===t&&(t=this.checkFromTop()),-1===t?(this.destination=this.ctFloor,this.$emit("changeState",0,this.id)):this.destination=t)},checkFromBottom:function(){for(var t=0;t<=this.ctFloor;++t)if(this.isSelect[t]||this.upList[t]||this.downList[t])return t;return-1},checkFromTop:function(){for(var t=this.isSelect.length-1;t>=this.ctFloor;--t)if(this.isSelect[t]||this.upList[t]||this.downList[t])return t;return-1},openDoor:function(t){this.$emit("stop",this.ctFloor,this.id),this.doorState=1,this.isSelect[this.ctFloor]=!1,setTimeout(this.closeDoor,2500,t)},closeDoor:function(t){console.log("关门"),this.doorState=0,(t||this.waitToRun)&&(this.waitToRun=!1,setTimeout(this.run,1e3))}},watch:{direction:function(t,i){this.$emit("changeDir",t,this.id),this.oldDir=i,0!==t&&(this.$emit("changeState",1,this.id),0===this.doorState?this.run():this.waitToRun=!0)},upWaitList:function(t){for(var i=0;i=0&&t<20&&(this.$set(this.upList,this.cancel,!1),this.$set(this.downList,this.cancel,!1))}}}),d=u,p=(e("ef87"),e("2877")),f=Object(p["a"])(d,l,h,!1,null,"cf1842a8",null),L=f.exports,g=function(){var t=this,i=t.$createElement,e=t._self._c||i;return e("div",{staticClass:"map2"},[e("div",{staticClass:"BtnGroup"},t._l(t.labelList,(function(i,s){return e("div",{key:s,staticClass:"ctn"},[e("h1",{staticClass:"alert"},[t._v(t._s(i))]),e("a-button",{class:{aBtn:!t.upList[s],aBtn2:t.upList[s]},attrs:{icon:"arrow-up",shape:"circle",ghost:!0},on:{click:function(i){return t.handleClick(1,s)}}}),e("a-button",{class:{aBtn:!t.downList[s],aBtn2:t.downList[s]},attrs:{icon:"arrow-down",shape:"circle",ghost:!0},on:{click:function(i){return t.handleClick(-1,s)}}})],1)})),0)])},m=[],w=(e("d3b7"),e("25f0"),{name:"BtnGroup",data:function(){return{labelList:Object(c["a"])(Array(20)).map((function(t,i){return i+1<10?"0"+(1+i).toString():(1+i).toString()})),ghost:!0}},props:{upList:Array,downList:Array},methods:{handleClick:function(t,i){this.$emit("select",t,i)}}}),v=w,S=(e("1d8a"),Object(p["a"])(v,g,m,!1,null,"37abc79a",null)),y=S.exports,b={name:"HelloWorld",props:{msg:String,stateList:[]},components:{Elevator:L,BtnGroup:y},data:function(){return{upList:Object(c["a"])(new Array(20)).map((function(){return!1})),downList:Object(c["a"])(new Array(20)).map((function(){return!1})),eleStateList:Object(c["a"])(new Array(5)).map((function(){return 0})),eleDirList:Object(c["a"])(new Array(5)).map((function(){return 0})),eleOldDirList:Object(c["a"])(new Array(5)).map((function(){return 0})),elePosList:Object(c["a"])(new Array(5)).map((function(){return 0})),cancel:-1,ignoreList:[!1,!0,!0,!0,!0],eleLoadList:Object(c["a"])(new Array(5)).map((function(){return 0})),eleReqList:Object(c["a"])(new Array(5)).map((function(){return Object(c["a"])(new Array(20)).map((function(){return 0}))})),eleCapacity:10}},methods:{handleSelect:function(t,i){console.log("当前电梯方向数组:"+this.eleDirList),this.checkPassing(t,i),1===t?this.$set(this.upList,i,!0):-1===t&&this.$set(this.downList,i,!0)},handleStop:function(t,i){console.log(i),this.cancel=t},updateDir:function(t,i){this.$set(this.eleOldDirList,i,this.eleDirList[i]),this.$set(this.eleDirList,i,t)},updateEle:function(t,i){this.$set(this.elePosList,i,t),this.upList[t]&&this.$set(this.upList,t,!1),this.downList[t]&&this.$set(this.downList,t,!1)},updateState:function(t,i){this.$set(this.eleStateList,i,t)},checkPassing:function(t,i){for(var e=0;ei)&&(s=o);if(-1===s)for(var n=0;n\n
\n
\n
\n \n {{ item }}\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n

{{ content.stateStr }}

{{ content.poster }}

\n

载重:{{ load }}

\n
\n

{{ ctFloor+1 }}F

\n
\n
\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Elevator.vue?vue&type=template&id=cf1842a8&scoped=true&\"\nimport script from \"./Elevator.vue?vue&type=script&lang=js&\"\nexport * from \"./Elevator.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Elevator.vue?vue&type=style&index=0&id=cf1842a8&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"cf1842a8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"map2\"},[_c('div',{staticClass:\"BtnGroup\"},_vm._l((_vm.labelList),function(item,index){return _c('div',{key:index,staticClass:\"ctn\"},[_c('h1',{staticClass:\"alert\"},[_vm._v(_vm._s(item))]),_c('a-button',{class:{aBtn:!_vm.upList[index],aBtn2:_vm.upList[index]},attrs:{\"icon\":\"arrow-up\",\"shape\":\"circle\",\"ghost\":true},on:{\"click\":function($event){return _vm.handleClick(1,index)}}}),_c('a-button',{class:{aBtn:!_vm.downList[index],aBtn2:_vm.downList[index]},attrs:{\"icon\":\"arrow-down\",\"shape\":\"circle\",\"ghost\":true},on:{\"click\":function($event){return _vm.handleClick(-1,index)}}})],1)}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BtnGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BtnGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BtnGroup.vue?vue&type=template&id=37abc79a&scoped=true&\"\nimport script from \"./BtnGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./BtnGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BtnGroup.vue?vue&type=style&index=0&id=37abc79a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37abc79a\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=e4e12c5e&scoped=true&\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js&\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HelloWorld.vue?vue&type=style&index=0&id=e4e12c5e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"e4e12c5e\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=8fa8b536&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport Antd from 'ant-design-vue';\nimport 'ant-design-vue/dist/antd.css';\nimport { Button } from 'ant-design-vue';\n\nVue.use(Button);\nVue.config.productionTip = false\nVue.use(Antd);\n\nnew Vue({\n render: h => h(App),\n}).$mount('#app')\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=style&index=0&id=cf1842a8&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=style&index=0&id=cf1842a8&scoped=true&lang=css&\""],"sourceRoot":""} -------------------------------------------------------------------------------- /elevator/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # local env files 6 | .env.local 7 | .env.*.local 8 | 9 | # Log files 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | 14 | # Editor directories and files 15 | .idea 16 | .vscode 17 | *.suo 18 | *.ntvs* 19 | *.njsproj 20 | *.sln 21 | *.sw? 22 | -------------------------------------------------------------------------------- /elevator/README.md: -------------------------------------------------------------------------------- 1 | # 电梯调度 项目文档 2 | 3 | > 题目:电梯调度 4 | > 5 | > 指导教师:张惠娟 6 | > 7 | > 姓名:王泽钜 8 | > 9 | > 学号:1751926 10 | 11 | [TOC] 12 | 13 | ## 一、项目概述 14 | 15 | ​ 本项目设计的是一个电梯调度系统。 16 | 17 | ​ 在本项目实现的电梯调度系统中:共有5部电梯,楼层总共高度为20层,每层楼设有一个“向上”按钮和一个“向下”按钮。每一部电梯内设置有各楼层的数字键按钮,和报警键与通话键。 18 | 19 | ​ 电梯调度算法支持多电梯独立运行,联合调度。对于每一个单独电梯采用SCAN扫描算法进行调度,对于楼层按钮产生的请求通过调度器联合调度电梯来响应任务,通过将任务根据算法计算分配给一个或几个电梯,从而使得在最短的时间内响应楼层请求。满足在任何一部电梯经过楼层时,如果电梯方向与此楼层请求方向同向时一定开门的基本实际需求。 20 | 21 | ​ 为了有更清晰的可视化界面和更好的交互体验,选择采用以网页的方式呈现项目内容。项目支持通过点击楼层按钮或电梯内部按钮来模拟实际电梯中的功能,并通过通过UI的变化来展示电梯的具体调度过程。 22 | 23 | 24 | ## 二、电梯调度需求分析 25 | 26 | ### 1. 电梯的基本需求功能: 27 | 28 | - 某一层楼20层,有五部互联的电梯。 29 | - 每个电梯里面设置必要功能键:如数字键、关门键、开门键、报警键、当前电梯的楼层数、上升及下降状态等。 30 | - 每层楼的每部电梯门口,应该有上行和下行按钮和当前电梯状态的数码显示器。 31 | - 五部电梯门口的按钮是互联结的,即当一个电梯按钮按下去时,其他电梯的相应按钮也就同时点亮,表示也按下去了。 32 | - 所有电梯初始状态都在第一层。每个电梯如果在它的上层或者下层没有相应请求情况下,则应该在原地保持不动。 33 | 34 | ### 2. 实际电梯的行为需求: 35 | 36 | - 如果电梯方向与此楼层请求方向同向时一定会开门。 37 | - 尽量使得乘客等待时间最少。 38 | - 尽量使得电梯运行距离最短。 39 | - 电梯中支持警报按钮,方便向相应的电梯负责人发送求救信号 40 | 41 | ## 三、项目解决方案 42 | 43 | ### 1. 单独电梯调度算法——LOOK算法: 44 | 45 | ​ 对于每一台电梯都会收到来自内部按钮的请求和调度器分配的楼层按钮请求。 46 | 47 | ​ 所以电梯需要一个算法来管理属于这部电梯的请求任务,计算运行路径。 48 | 49 | - **LOOK算法原理:** 50 | 51 | > LOOK算法是扫描算法的一种改进。扫描算法(SCAN)是一种按照楼层顺序依次服务请求的算法,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。扫描算法较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的,所有的与电梯运行方向相同的乘客的请求在一次电梯向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动 52 | 53 | > 对LOOK算法而言,电梯同样在最底层和最顶层之间运行。但当LOOK算法发现电梯所移动的方向上不再有请求时立即改变运行方向,而扫描算法则需要移动到最底层或者最顶层时才改变运行方向。 54 | 55 | - **LOOK算法实现** 56 | 57 | - 设置一个定长布尔数组**isSelect**用来储存电梯内部按钮是否按下 58 | 59 | - 设置两个定长布尔数组**upList**和**downList**用存储楼层向上(下)按钮是否按下 60 | 61 | - 电梯的所有状态由两部分决定:**direction**和**doorState**。(**direction**是由**ctFloor**和**destination**两者比较决定的计算属性) 62 | 63 | | direction | doorState | 电梯状态 | 64 | | ------ | ------ | ------ | 65 | | **1** | **0** | 电梯向上运动 | 66 | | **0** | **0** | 电梯停止,没有任务需要处理,为空闲状态 | 67 | | **-1** | **0** | 电梯向下运动 | 68 | | **0** | **1** | 电梯停止,正在开门等待乘客出入 | 69 | 70 | - 电梯每到一个楼层后,检测停靠开门条件是否满足。停靠条件为: 71 | 72 | 1. **isSelect[ctFloor]**为**true**——即当前请求为内部请求 73 | 2. **upList[ctFloor]**为**true**且**direction**为1(或**downList[ctFloor]**为**true**且**direction**为-1)——即当前请求为外部同方向请求 74 | 3. **direction** 为0——即当前请求是此次方向最后一个任务。 75 | 76 | | 变量 | 类型 | 描述 | 77 | | ------ | ------ | ------ | 78 | | **doorState** | **Number** | 当前电梯是否开门 1:开门 0:关门 | 79 | | **ctFloor** | **Number** | 当前电梯所在楼层 | 80 | | **destination** | **Number** | 同方向的最远目标楼层 | 81 | | **isSelect** | **Array** | 内部按钮选择停靠的楼层 | 82 | | **upList** | **Array** | 电梯外部楼层向上按钮所等待的楼层 | 83 | | **downList** | **Array** | 电梯外部楼层向下按钮所等待的楼层 | 84 | | **direction** | **Number** | 电梯当前的方向 | 85 | | **oldDir** | **Number** | 电梯上一次的方向 | 86 | 87 | - **流程图:** 88 | 89 | ![007](img/007.png) 90 | 91 | ### 2. 联合电梯调度算法——抢占式+任务屏蔽: 92 | 93 | ​ 对于每一个楼层的向上(下)按钮而言,外部请求不是对应于一个电梯,而是应该由调度器联合调度多个电梯来满足请求。 94 | 95 | ​ 并且基于对生活中常见电梯的调研发现,为了使得乘客等待时间较少,同时让电梯的运行路径尽可能短,一般有两个原则: 96 | 97 | 1. 电梯经过一个楼层时,如果此楼层的请求方向与此时电梯之前运行的方向相同,那么电梯一定会停靠开门,使此楼层乘客进入电梯。 98 | 99 | 2. 当电梯全部空闲时,如果有一个楼层出现请求,那么应该只调动一台电梯进行响应。 100 | 101 | 102 | 103 | - 算法策略: 104 | 1. 调度器监听并存储20个楼层的上(下)按钮是否按下,如果按下则调度器先广播给所有运行中的电梯。(也就是运行中的电梯不存在屏蔽请求的可能) 105 | 2. 如果此时存在一台运行中的电梯可以顺路完成此次请求,则允许所有空闲状态电梯屏蔽此次请求。 106 | 3. 如果不存在,那么在空闲状态电梯中选取一个接收此次请求,并允许其余空闲电梯屏蔽此次请求。 107 | 4. 如果一台电梯已经在发出请求的楼层完成停靠后,调度器撤销其余电梯中这次请求。 108 | 109 | - 电梯状态转换: 110 | ![006](img/006.png) 111 | 112 | ​ 113 | 114 | 115 | ## 四、项目操作说明 116 | 117 | - 主界面: 118 | 119 | 电梯的主界面被划分为六个面板。 120 | 121 | 第一个面板为:楼层按钮面板——模拟电梯在各个楼层的按钮。 122 | 123 | 其余五个面板:五个电梯模拟面板——每个面板模拟一个电梯,包括电梯内部的按钮,显示当前电梯运动状态,显示当前电梯所处楼层。 124 | 125 | ![001](img/001.png) 126 | 127 | - 使用电梯内置按钮: 128 | 129 | - 按下电梯内部的按钮,电梯会此楼层添加到当前的任务队列,电梯依据算法逻辑可向目标楼层移动。 130 | 131 | - 此时电梯模拟面板由绿色变成红色——表示此时电梯状态从空闲状态切换到了运行状态 132 | - 电梯模拟面板中的文字内容也实时更新 133 | - 电梯模拟面板中的动画顶部实时显示当前电梯的所处楼层 134 | ![002](img/002.png) 135 | - 当电梯到达某一目标楼层时,电梯图文字更新为:"OPEN THE DOOR",表示此时电梯正在开门,等待乘客出入电梯。 136 | - 当电梯到达某一楼层并停靠开门时,电梯内部的按钮边框颜色从蓝色变成白色——表示此层停靠请求已经满足。 137 | - 团子表情的运动表现了当前电梯是移动(滚动)/停靠开门(上下弹跳) 138 | ![003](img/003.png) 139 | 140 | 141 | 142 | - 使用楼层功能按钮 143 | - 按下楼层按钮面板中的按钮,调度算法会根据算法逻辑将这个请求通知部分电梯,电梯依据算法逻辑可向目标楼层移动。 144 | ![004](img/004.png) 145 | - 当电梯到达此楼层并停靠开门时,楼层按钮面板中选中的按钮边框颜色从蓝色变成白色——表示此层停靠请求已经满足。 146 | ![005](img/005.png) 147 | 148 | 149 | 150 | ## 五、总结 151 | 152 | - 在实现电梯调度项目中运用了操作系统课程中所学的多线程并发技巧、进程状态转换、进程调度等知识。 153 | 154 | ### 1. 亮点: 155 | 156 | - 精美的UI设计和交互体验。——好看的糖果色🍬 157 | - 对于每个电梯遵守LOOK算法进行了优化了电梯处理任务的方式。 158 | - 多电梯之间采用联合调度方法,权衡了乘客耗费时间最少和电梯运行成本(距离)最少。同时保证了电梯经过一个楼层时,如果此楼层的请求方向与此时电梯之前运行的方向相同,那么电梯一定会停靠开门,给等待的乘客更好的使用体验。 159 | 160 | ### 2. 展望: 161 | 162 | - 在电梯群控算法中,存在两个优化目标:1.乘客耗费时间最少 2. 电梯运行成本(距离)最少。基于这两个目标有很多优秀的算法成果,本项目只是采用了较为基础的一个调度算法。基于特定的时间段乘坐电梯的特征以及具体数据分布情况,还有非常大的优化空间。 163 | 164 | - 暂时没有考虑电梯的载荷问题。 165 | 166 | ## 六、项目部署与demo展示 167 | 168 | ### 1.demo网址: 169 | 170 | https://major-333.github.io/index.html 171 | 172 | 为了方便老师和助教可以直接访问并进行操作,不需额外下载安装包和配置依赖环境。 173 | 174 | 推荐使用谷歌浏览器,只支持电脑屏幕尺寸的访问。 175 | 176 | ### 2. 仓库地址: 177 | 178 | https://github.com/Major-333/OS_course_project 179 | 180 | ### 3. 开发工具: 181 | 182 | #### 1. 开发环境: 183 | 184 | - MacOS 185 | - WebsStorm 186 | - Chrome 187 | 188 | #### 2. 开发语言: 189 | 190 | - JavaScript 191 | 192 | #### 3. 开发框架: 193 | 194 | - Vue.js 195 | 196 | ## 七、通过源码重新构建 197 | 198 | ``` 199 | npm install 200 | ``` 201 | 202 | ### Compiles and hot-reloads for development 203 | ``` 204 | npm run serve 205 | ``` 206 | 207 | ### Compiles and minifies for production 208 | ``` 209 | npm run build 210 | ``` 211 | 212 | ### Lints and fixes files 213 | ``` 214 | npm run lint 215 | ``` 216 | 217 | ### Customize configuration 218 | See [Configuration Reference](https://cli.vuejs.org/config/). 219 | -------------------------------------------------------------------------------- /elevator/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /elevator/dist/css/app.119d5e04.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=Lato:400,700);.BtnGroup[data-v-4316f4fe]{position:absolute;left:3%;top:3%;width:180px}.aButton[data-v-4316f4fe]{margin:3px}.selectBtn[data-v-4316f4fe]{margin:3px;border-color:#00bfff}#components-layout-demo-fixed .logo[data-v-4316f4fe]{width:120px;height:31px;background:hsla(0,0%,100%,.2);margin:16px 24px 16px 0;float:left}.error-box[data-v-4316f4fe],.success-box[data-v-4316f4fe]{position:absolute;width:245px;height:250px;right:5%}.map1[data-v-4316f4fe]{background:linear-gradient(to bottom right,#b0db7d 40%,#b0db7d)}.map1[data-v-4316f4fe],.map2[data-v-4316f4fe]{border-radius:20px;height:360px;perspective:40px;box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.map2[data-v-4316f4fe]{background:linear-gradient(to bottom left,#ef8d9c 40%,#ffc39e)}html[data-v-4316f4fe]{display:grid;min-height:100%}body[data-v-4316f4fe]{display:grid;overflow:hidden;font-family:Lato,sans-serif;text-transform:uppercase;text-align:center}h1[data-v-4316f4fe]{font-size:.9em;font-weight:100;letter-spacing:3px;padding-top:5px;color:#fcfcfc;padding-bottom:5px;text-transform:uppercase}.green[data-v-4316f4fe]{color:#4ec07d}.red[data-v-4316f4fe]{color:#e96075}.alert-top[data-v-4316f4fe],.alert[data-v-4316f4fe]{font-weight:700;letter-spacing:5px}.alert-top[data-v-4316f4fe]{font-size:xx-large}p[data-v-4316f4fe]{margin-top:-5px;font-size:.5em;font-weight:100;color:#5e5e5e;letter-spacing:1px}.dot[data-v-4316f4fe],button[data-v-4316f4fe]{cursor:pointer}.two[data-v-4316f4fe]{right:12%;opacity:.5}.face[data-v-4316f4fe]{-webkit-animation:bounce-data-v-4316f4fe 1s ease-in infinite;animation:bounce-data-v-4316f4fe 1s ease-in infinite}.face2[data-v-4316f4fe],.face[data-v-4316f4fe]{position:absolute;width:22%;height:22%;background:#fcfcfc;border-radius:50%;border:1px solid #777;top:21%;left:37.5%;z-index:2}.face2[data-v-4316f4fe]{-webkit-animation:roll-data-v-4316f4fe 3s ease-in-out infinite;animation:roll-data-v-4316f4fe 3s ease-in-out infinite}.eye[data-v-4316f4fe]{position:absolute;width:5px;height:5px;background:#777;border-radius:50%;top:40%;left:20%}.right[data-v-4316f4fe]{left:68%}.mouth[data-v-4316f4fe]{position:absolute;top:43%;left:41%;width:7px;height:7px;border-radius:50%}.happy[data-v-4316f4fe]{border:2px solid;border-color:transparent #777 #777 transparent;transform:rotate(45deg)}.sad[data-v-4316f4fe]{top:49%;border:2px solid;border-color:#777 transparent transparent #777;transform:rotate(45deg)}.shadow[data-v-4316f4fe]{position:absolute;width:21%;height:3%;opacity:.5;background:#777;left:40%;top:43%;border-radius:50%;z-index:1}.scale[data-v-4316f4fe]{-webkit-animation:scale-data-v-4316f4fe 1s ease-in infinite;animation:scale-data-v-4316f4fe 1s ease-in infinite}.move[data-v-4316f4fe]{-webkit-animation:move-data-v-4316f4fe 3s ease-in-out infinite;animation:move-data-v-4316f4fe 3s ease-in-out infinite}.message[data-v-4316f4fe]{position:absolute;width:100%;text-align:center;height:40%;top:47%}@-webkit-keyframes bounce-data-v-4316f4fe{50%{transform:translateY(-10px)}}@keyframes bounce-data-v-4316f4fe{50%{transform:translateY(-10px)}}@-webkit-keyframes scale-data-v-4316f4fe{50%{transform:scale(.9)}}@keyframes scale-data-v-4316f4fe{50%{transform:scale(.9)}}@-webkit-keyframes roll-data-v-4316f4fe{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@keyframes roll-data-v-4316f4fe{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@-webkit-keyframes move-data-v-4316f4fe{0%{left:25%}50%{left:60%}to{left:25%}}@keyframes move-data-v-4316f4fe{0%{left:25%}50%{left:60%}to{left:25%}}.aBtn[data-v-37abc79a]{margin:3px}.aBtn2[data-v-37abc79a]{margin:3px;border-color:#00bfff}.map2[data-v-37abc79a]{background:linear-gradient(to bottom left,#ef8d9c 40%,#ffc39e);border-radius:20px;height:200px;perspective:40px;box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.BtnGroup[data-v-37abc79a]{position:absolute;left:3%;top:3%;float:left}.alert[data-v-37abc79a]{font-weight:700;letter-spacing:5px}.ctn[data-v-37abc79a]{margin:3px;float:left}html[data-v-37abc79a]{display:grid;min-height:100%}body[data-v-37abc79a]{display:grid;overflow:hidden;font-family:Lato,sans-serif;text-transform:uppercase;text-align:center}h1[data-v-37abc79a]{font-size:.9em;font-weight:100;letter-spacing:3px;padding-top:5px;color:#fcfcfc;padding-bottom:5px;text-transform:uppercase;float:left}#components-layout-demo-fixed .logo[data-v-5dd9760c]{width:120px;height:31px;background:hsla(0,0%,100%,.2);margin:16px 24px 16px 0;float:left}.gap[data-v-5dd9760c]{height:60px}.submitBtn[data-v-5dd9760c]{outline:none;height:40px;text-align:center;width:130px;border-radius:40px;background:#fff;border:2px solid #1ecd97;color:#1ecd97;letter-spacing:1px;text-shadow:0;font-size:12px;font-weight:700;cursor:pointer;transition:all .25s ease}.submitBtn[data-v-5dd9760c]:hover{color:#fff;background:#1ecd97}.submitBtn[data-v-5dd9760c]:active{letter-spacing:2px}.error-box[data-v-5dd9760c],.success-box[data-v-5dd9760c]{position:absolute;width:245px;height:250px;right:5%}.map-1[data-v-5dd9760c]{background:linear-gradient(to bottom right,#b0db7d 40%,#b0db7d)}.map-1[data-v-5dd9760c],.map-2[data-v-5dd9760c]{border-radius:20px;height:360px;perspective:40px;box-shadow:0 14px 28px rgba(0,0,0,.25),0 10px 10px rgba(0,0,0,.22)}.map-2[data-v-5dd9760c]{background:linear-gradient(to bottom left,#ef8d9c 40%,#ffc39e)}html[data-v-5dd9760c]{display:grid;min-height:100%}body[data-v-5dd9760c]{display:grid;overflow:hidden;font-family:Lato,sans-serif;text-transform:uppercase;text-align:center}#container[data-v-5dd9760c]{position:relative;margin:auto;overflow:hidden;width:700px;height:250px}h1[data-v-5dd9760c]{font-size:.9em;font-weight:100;letter-spacing:3px;padding-top:5px;color:#fcfcfc;padding-bottom:5px;text-transform:uppercase}.green[data-v-5dd9760c]{color:#4ec07d}.red[data-v-5dd9760c]{color:#e96075}.alert-top[data-v-5dd9760c],.alert[data-v-5dd9760c]{font-weight:700;letter-spacing:5px}.alert-top[data-v-5dd9760c]{font-size:xx-large}p[data-v-5dd9760c]{margin-top:-5px;font-size:.5em;font-weight:100;color:#5e5e5e;letter-spacing:1px}.dot[data-v-5dd9760c],button[data-v-5dd9760c]{cursor:pointer}.two[data-v-5dd9760c]{right:12%;opacity:.5}.face[data-v-5dd9760c]{-webkit-animation:bounce-data-v-5dd9760c 1s ease-in infinite;animation:bounce-data-v-5dd9760c 1s ease-in infinite}.face2[data-v-5dd9760c],.face[data-v-5dd9760c]{position:absolute;width:22%;height:22%;background:#fcfcfc;border-radius:50%;border:1px solid #777;top:21%;left:37.5%;z-index:2}.face2[data-v-5dd9760c]{-webkit-animation:roll-data-v-5dd9760c 3s ease-in-out infinite;animation:roll-data-v-5dd9760c 3s ease-in-out infinite}.eye[data-v-5dd9760c]{position:absolute;width:5px;height:5px;background:#777;border-radius:50%;top:40%;left:20%}.right[data-v-5dd9760c]{left:68%}.mouth[data-v-5dd9760c]{position:absolute;top:43%;left:41%;width:7px;height:7px;border-radius:50%}.happy[data-v-5dd9760c]{border:2px solid;border-color:transparent #777 #777 transparent;transform:rotate(45deg)}.sad[data-v-5dd9760c]{top:49%;border:2px solid;border-color:#777 transparent transparent #777;transform:rotate(45deg)}.shadow[data-v-5dd9760c]{position:absolute;width:21%;height:3%;opacity:.5;background:#777;left:40%;top:43%;border-radius:50%;z-index:1}.scale[data-v-5dd9760c]{-webkit-animation:scale-data-v-5dd9760c 1s ease-in infinite;animation:scale-data-v-5dd9760c 1s ease-in infinite}.move[data-v-5dd9760c]{-webkit-animation:move-data-v-5dd9760c 3s ease-in-out infinite;animation:move-data-v-5dd9760c 3s ease-in-out infinite}.message[data-v-5dd9760c]{position:absolute;width:100%;text-align:center;height:40%;top:47%}@-webkit-keyframes bounce-data-v-5dd9760c{50%{transform:translateY(-10px)}}@keyframes bounce-data-v-5dd9760c{50%{transform:translateY(-10px)}}@-webkit-keyframes scale-data-v-5dd9760c{50%{transform:scale(.9)}}@keyframes scale-data-v-5dd9760c{50%{transform:scale(.9)}}@-webkit-keyframes roll-data-v-5dd9760c{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@keyframes roll-data-v-5dd9760c{0%{transform:rotate(0deg);left:25%}50%{left:60%;transform:rotate(168deg)}to{transform:rotate(0deg);left:25%}}@-webkit-keyframes move-data-v-5dd9760c{0%{left:25%}50%{left:60%}to{left:25%}}@keyframes move-data-v-5dd9760c{0%{left:25%}50%{left:60%}to{left:25%}}.swing[data-v-5dd9760c]{display:inline-block;width:215px;padding:10px 0 10px 15px;font-family:Open Sans,sans;font-weight:400;color:#377d6a;background:#efefef;border:0;border-radius:3px;outline:0;text-indent:60px;transition:all .3s ease-in-out}.swing[data-v-5dd9760c]::-webkit-input-placeholder{color:#efefef;text-indent:0;font-weight:300}.swing+label[data-v-5dd9760c]{display:inline-block;position:absolute;top:0;left:0;padding:10px 15px;text-shadow:0 1px 0 rgba(19,74,70,.4);background:#7ab893;border-top-left-radius:3px;border-bottom-left-radius:3px;transform-origin:2px 2px;transform:rotate(0);-webkit-animation:swing-back-data-v-5dd9760c .4s ease-in-out 1;animation:swing-back-data-v-5dd9760c .4s ease-in-out 1}@-webkit-keyframes swing-data-v-5dd9760c{0%{transform:rotate(0)}20%{transform:rotate(116deg)}40%{transform:rotate(60deg)}60%{transform:rotate(98deg)}80%{transform:rotate(76deg)}to{transform:rotate(82deg)}}@keyframes swing-data-v-5dd9760c{0%{transform:rotate(0)}20%{transform:rotate(116deg)}40%{transform:rotate(60deg)}60%{transform:rotate(98deg)}80%{transform:rotate(76deg)}to{transform:rotate(82deg)}}@-webkit-keyframes swing-back-data-v-5dd9760c{0%{transform:rotate(82deg)}to{transform:rotate(0)}}@keyframes swing-back-data-v-5dd9760c{0%{transform:rotate(82deg)}to{transform:rotate(0)}}.swing[data-v-5dd9760c]:active,.swing[data-v-5dd9760c]:focus{color:#377d6a;text-indent:0;background:#fff;border-top-left-radius:0;border-bottom-left-radius:0}.swing[data-v-5dd9760c]:active::-webkit-input-placeholder,.swing[data-v-5dd9760c]:focus::-webkit-input-placeholder{color:#aaa}.swing:active+label[data-v-5dd9760c],.swing:focus+label[data-v-5dd9760c]{-webkit-animation:swing-data-v-5dd9760c 1.4s ease-in-out 1;animation:swing-data-v-5dd9760c 1.4s ease-in-out 1;transform:rotate(82deg)}.row[data-v-5dd9760c]{max-width:800px;margin:0 auto;padding:60px 30px;position:relative;z-index:1;text-align:center}.row[data-v-5dd9760c]:before{position:absolute;content:"";display:block;top:0;left:-5000px;height:100%;width:15000px;z-index:-1;background:inherit}.row[data-v-5dd9760c]:first-child{padding:40px 30px}.row span[data-v-5dd9760c]{position:relative;display:inline-block;margin:30px 10px}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#2c3e50;margin-top:60px} -------------------------------------------------------------------------------- /elevator/dist/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/dist/favicon.ico -------------------------------------------------------------------------------- /elevator/dist/index.html: -------------------------------------------------------------------------------- 1 | elevator
-------------------------------------------------------------------------------- /elevator/dist/js/app.f42976d1.js: -------------------------------------------------------------------------------- 1 | (function(t){function i(i){for(var s,a,r=i[0],c=i[1],l=i[2],u=0,d=[];uthis.destination?-1:(console.log("已经改变dir为1了"),1)},content:function(){return 1===this.doorState?{poster:"oh baby just wait a minute.",stateStr:"Open the Door",isStop:!0,isBusy:!0}:0===this.direction?{poster:"yay, everything is ready.",stateStr:"Free",isStop:!0,isBusy:!1}:{poster:"oh baby just wait a minute.",stateStr:"Busy",isStop:!1,isBusy:!0}}},methods:{handleClick:function(t){this.$set(this.isSelect,t,!0),0===this.direction&&(console.log(t),t===this.ctFloor?0===this.doorState&&this.openDoor(!1):(console.log("改变dst了"),this.destination=t))},handleAlert:function(){alert("发出警报!")},run:function(){var t;0!==this.direction?(console.log(this.id+this.destination+this.ctFloor),1===this.direction?(this.ctFloor++,this.upList[this.ctFloor]||this.isSelect[this.ctFloor]||0===this.direction&&this.downList[this.ctFloor]?(this.$emit("changeFloor",this.ctFloor,this.id),this.openDoor(!0)):setTimeout(this.run,1e3)):-1===this.direction&&(this.ctFloor--,this.downList[this.ctFloor]||this.isSelect[this.ctFloor]||0===this.direction&&this.upList[this.ctFloor]?(this.$emit("changeFloor",this.ctFloor,this.id),this.openDoor(!0)):setTimeout(this.run,1e3))):1===this.oldDir?(t=this.checkFromTop(),-1===t&&(t=this.checkFromBottom()),-1===t?(this.destination=this.ctFloor,this.$emit("changeState",0,this.id)):this.destination=t):-1===this.oldDir&&(t=this.checkFromBottom(),-1===t&&(t=this.checkFromTop()),-1===t?(this.destination=this.ctFloor,this.$emit("changeState",0,this.id)):this.destination=t)},checkFromBottom:function(){for(var t=0;t<=this.ctFloor;++t)if(this.isSelect[t]||this.upList[t]||this.downList[t])return t;return-1},checkFromTop:function(){for(var t=this.isSelect.length-1;t>=this.ctFloor;--t)if(this.isSelect[t]||this.upList[t]||this.downList[t])return t;return-1},openDoor:function(t){this.$emit("stop",this.ctFloor,this.id),this.doorState=1,this.isSelect[this.ctFloor]=!1,setTimeout(this.closeDoor,2500,t)},closeDoor:function(t){console.log("关门"),this.doorState=0,(t||this.waitToRun)&&(this.waitToRun=!1,setTimeout(this.run,1e3))}},watch:{direction:function(t,i){this.$emit("changeDir",t,this.id),this.oldDir=i,0!==t&&(this.$emit("changeState",1,this.id),0===this.doorState?this.run():this.waitToRun=!0)},upWaitList:function(t){for(var i=0;i=0&&t<20&&(this.$set(this.upList,this.cancel,!1),this.$set(this.downList,this.cancel,!1))}}}),d=u,p=(e("faee"),e("2877")),f=Object(p["a"])(d,l,h,!1,null,"4316f4fe",null),L=f.exports,g=function(){var t=this,i=t.$createElement,e=t._self._c||i;return e("div",{staticClass:"map2"},[e("div",{staticClass:"BtnGroup"},t._l(t.labelList,(function(i,s){return e("div",{key:s,staticClass:"ctn"},[e("h1",{staticClass:"alert"},[t._v(t._s(i))]),e("a-button",{class:{aBtn:!t.upList[s],aBtn2:t.upList[s]},attrs:{icon:"arrow-up",shape:"circle",ghost:!0},on:{click:function(i){return t.handleClick(1,s)}}}),e("a-button",{class:{aBtn:!t.downList[s],aBtn2:t.downList[s]},attrs:{icon:"arrow-down",shape:"circle",ghost:!0},on:{click:function(i){return t.handleClick(-1,s)}}})],1)})),0)])},m=[],w=(e("d3b7"),e("25f0"),{name:"BtnGroup",data:function(){return{labelList:Object(c["a"])(Array(20)).map((function(t,i){return i+1<10?"0"+(1+i).toString():(1+i).toString()})),ghost:!0}},props:{upList:Array,downList:Array},methods:{handleClick:function(t,i){this.$emit("select",t,i)}}}),v=w,S=(e("1d8a"),Object(p["a"])(v,g,m,!1,null,"37abc79a",null)),y=S.exports,b={name:"HelloWorld",props:{msg:String,stateList:[]},components:{Elevator:L,BtnGroup:y},data:function(){return{upList:Object(c["a"])(new Array(20)).map((function(){return!1})),downList:Object(c["a"])(new Array(20)).map((function(){return!1})),eleStateList:Object(c["a"])(new Array(5)).map((function(){return 0})),eleDirList:Object(c["a"])(new Array(5)).map((function(){return 0})),eleOldDirList:Object(c["a"])(new Array(5)).map((function(){return 0})),elePosList:Object(c["a"])(new Array(5)).map((function(){return 0})),cancel:-1,ignoreList:[!1,!0,!0,!0,!0],eleLoadList:Object(c["a"])(new Array(5)).map((function(){return 0})),eleReqList:Object(c["a"])(new Array(5)).map((function(){return Object(c["a"])(new Array(20)).map((function(){return 0}))})),eleCapacity:10}},methods:{handleSelect:function(t,i){console.log("当前电梯方向数组:"+this.eleDirList),this.checkPassing(t,i),1===t?this.$set(this.upList,i,!0):-1===t&&this.$set(this.downList,i,!0)},handleStop:function(t,i){console.log(i),this.cancel=t},updateDir:function(t,i){this.$set(this.eleOldDirList,i,this.eleDirList[i]),this.$set(this.eleDirList,i,t)},updateEle:function(t,i){this.$set(this.elePosList,i,t),this.upList[t]&&this.$set(this.upList,t,!1),this.downList[t]&&this.$set(this.downList,t,!1)},updateState:function(t,i){this.$set(this.eleStateList,i,t)},checkPassing:function(t,i){for(var e=0;ei)&&(s=o);if(-1===s)for(var n=0;n\n
\n
\n
\n \n {{ item }}\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n

{{ content.stateStr }}

{{ content.poster }}

\n

载重:{{ load }}

\n
\n

{{ ctFloor+1 }}F

\n
\n
\n
\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Elevator.vue?vue&type=template&id=4316f4fe&scoped=true&\"\nimport script from \"./Elevator.vue?vue&type=script&lang=js&\"\nexport * from \"./Elevator.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Elevator.vue?vue&type=style&index=0&id=4316f4fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4316f4fe\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"map2\"},[_c('div',{staticClass:\"BtnGroup\"},_vm._l((_vm.labelList),function(item,index){return _c('div',{key:index,staticClass:\"ctn\"},[_c('h1',{staticClass:\"alert\"},[_vm._v(_vm._s(item))]),_c('a-button',{class:{aBtn:!_vm.upList[index],aBtn2:_vm.upList[index]},attrs:{\"icon\":\"arrow-up\",\"shape\":\"circle\",\"ghost\":true},on:{\"click\":function($event){return _vm.handleClick(1,index)}}}),_c('a-button',{class:{aBtn:!_vm.downList[index],aBtn2:_vm.downList[index]},attrs:{\"icon\":\"arrow-down\",\"shape\":\"circle\",\"ghost\":true},on:{\"click\":function($event){return _vm.handleClick(-1,index)}}})],1)}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BtnGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BtnGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BtnGroup.vue?vue&type=template&id=37abc79a&scoped=true&\"\nimport script from \"./BtnGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./BtnGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BtnGroup.vue?vue&type=style&index=0&id=37abc79a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"37abc79a\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HelloWorld.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HelloWorld.vue?vue&type=template&id=5dd9760c&scoped=true&\"\nimport script from \"./HelloWorld.vue?vue&type=script&lang=js&\"\nexport * from \"./HelloWorld.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HelloWorld.vue?vue&type=style&index=0&id=5dd9760c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5dd9760c\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=8fa8b536&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport App from './App.vue'\nimport Antd from 'ant-design-vue';\nimport 'ant-design-vue/dist/antd.css';\nimport { Button } from 'ant-design-vue';\n\nVue.use(Button);\nVue.config.productionTip = false;\nVue.use(Antd);\n\nnew Vue({\n render: h => h(App),\n}).$mount('#app');\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=style&index=0&id=4316f4fe&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Elevator.vue?vue&type=style&index=0&id=4316f4fe&scoped=true&lang=css&\""],"sourceRoot":""} -------------------------------------------------------------------------------- /elevator/img/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/001.png -------------------------------------------------------------------------------- /elevator/img/002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/002.png -------------------------------------------------------------------------------- /elevator/img/003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/003.png -------------------------------------------------------------------------------- /elevator/img/004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/004.png -------------------------------------------------------------------------------- /elevator/img/005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/005.png -------------------------------------------------------------------------------- /elevator/img/006.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/006.png -------------------------------------------------------------------------------- /elevator/img/007.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/img/007.png -------------------------------------------------------------------------------- /elevator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "elevator", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint" 9 | }, 10 | "dependencies": { 11 | "core-js": "^3.6.4", 12 | "vue": "^2.6.11" 13 | }, 14 | "devDependencies": { 15 | "@vue/cli-plugin-babel": "~4.3.0", 16 | "@vue/cli-plugin-eslint": "~4.3.0", 17 | "@vue/cli-service": "~4.3.0", 18 | "babel-eslint": "^10.1.0", 19 | "eslint": "^6.7.2", 20 | "eslint-plugin-vue": "^6.2.2", 21 | "vue-template-compiler": "^2.6.11" 22 | }, 23 | "eslintConfig": { 24 | "root": true, 25 | "env": { 26 | "node": true 27 | }, 28 | "extends": [ 29 | "plugin:vue/essential", 30 | "eslint:recommended" 31 | ], 32 | "parserOptions": { 33 | "parser": "babel-eslint" 34 | }, 35 | "rules": {} 36 | }, 37 | "browserslist": [ 38 | "> 1%", 39 | "last 2 versions", 40 | "not dead" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /elevator/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/public/favicon.ico -------------------------------------------------------------------------------- /elevator/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /elevator/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 28 | -------------------------------------------------------------------------------- /elevator/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/src/assets/logo.png -------------------------------------------------------------------------------- /elevator/src/assets/man.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/src/assets/man.png -------------------------------------------------------------------------------- /elevator/src/components/BtnGroup.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 37 | 38 | 91 | -------------------------------------------------------------------------------- /elevator/src/components/Elevator.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 287 | 288 | 526 | -------------------------------------------------------------------------------- /elevator/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 150 | 151 | 152 | 529 | -------------------------------------------------------------------------------- /elevator/src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App.vue' 3 | import Antd from 'ant-design-vue'; 4 | import 'ant-design-vue/dist/antd.css'; 5 | import { Button } from 'ant-design-vue'; 6 | 7 | Vue.use(Button); 8 | Vue.config.productionTip = false; 9 | Vue.use(Antd); 10 | 11 | new Vue({ 12 | render: h => h(App), 13 | }).$mount('#app'); 14 | -------------------------------------------------------------------------------- /elevator/归档.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Major-333/OS_course_project/4da00e0d133695567bb03a89fa9fc9aed00fff2d/elevator/归档.zip --------------------------------------------------------------------------------