mushencc 1 vuosi sitten
vanhempi
commit
ad4e2f4f58
55 muutettua tiedostoa jossa 3603 lisäystä ja 0 poistoa
  1. 5 0
      .idea/.gitignore
  2. 12 0
      .idea/DWY_mobile.iml
  3. 29 0
      .idea/codeStyles/Project.xml
  4. 5 0
      .idea/codeStyles/codeStyleConfig.xml
  5. 6 0
      .idea/inspectionProfiles/Project_Default.xml
  6. 8 0
      .idea/modules.xml
  7. 6 0
      .idea/vcs.xml
  8. BIN
      dist/favicon.ico
  9. 0 0
      dist/index.html
  10. 1 0
      dist/static/css/app.2b1659bd.css
  11. 1 0
      dist/static/css/chunk-03f11e0c.f3b87d2c.css
  12. 1 0
      dist/static/css/chunk-089685f8.376a7d63.css
  13. 1 0
      dist/static/css/chunk-0dead9c5.7bb64dd9.css
  14. 1 0
      dist/static/css/chunk-1f1f83a4.31a091cf.css
  15. 1 0
      dist/static/css/chunk-3b2bb27f.8890c993.css
  16. 1 0
      dist/static/css/chunk-6e4aceda.ae4b4cf0.css
  17. 1 0
      dist/static/css/chunk-743db3e8.25aa2ded.css
  18. 1 0
      dist/static/css/chunk-939b5872.cc2bacf7.css
  19. 1 0
      dist/static/css/chunk-f965fc8a.4f90b281.css
  20. 0 0
      dist/static/css/chunk-vendors.2d238145.css
  21. BIN
      dist/static/fonts/ionicons.143146fa.woff2
  22. BIN
      dist/static/fonts/ionicons.99ac3308.woff
  23. BIN
      dist/static/fonts/ionicons.d535a25a.ttf
  24. BIN
      dist/static/img/FG-01C.693b4097.png
  25. 24 0
      dist/static/img/ionicons.a2c4a261.svg
  26. 0 0
      dist/static/js/app.47cc5f40.js
  27. 1 0
      dist/static/js/chunk-03f11e0c.14245d23.js
  28. 0 0
      dist/static/js/chunk-089685f8.1db316f2.js
  29. 0 0
      dist/static/js/chunk-0dead9c5.d656568a.js
  30. 0 0
      dist/static/js/chunk-1f1f83a4.033dbbf2.js
  31. 1 0
      dist/static/js/chunk-2d21022e.6ceaa6de.js
  32. 0 0
      dist/static/js/chunk-3b2bb27f.98d61203.js
  33. 1 0
      dist/static/js/chunk-6e4aceda.52d636cb.js
  34. 0 0
      dist/static/js/chunk-743db3e8.869e4e0f.js
  35. 10 0
      dist/static/js/chunk-939b5872.d00c9579.js
  36. 0 0
      dist/static/js/chunk-f965fc8a.86b38e99.js
  37. 0 0
      dist/static/js/chunk-vendors.750613c7.js
  38. BIN
      src/assets/FG-01C.png
  39. 65 0
      src/axios/index.js
  40. 111 0
      src/routerMap/index.js
  41. 205 0
      src/views/Login.vue
  42. 189 0
      src/views/cms.vue
  43. 265 0
      src/views/page/Dispatch/detail.vue
  44. 325 0
      src/views/page/Dispatch/detailed.vue
  45. 263 0
      src/views/page/Finish/detail.vue
  46. 396 0
      src/views/page/Finish/detailed.vue
  47. 265 0
      src/views/page/Finish/index.vue
  48. 261 0
      src/views/page/Home.vue
  49. 323 0
      src/views/page/Mine.vue
  50. 263 0
      src/views/page/Package/detail.vue
  51. 266 0
      src/views/page/Package/detailed.vue
  52. 67 0
      src/views/page/Work.vue
  53. 169 0
      src/views/page/ceshi.vue
  54. 14 0
      src/views/page/refresh.vue
  55. 38 0
      vue.config.js

+ 5 - 0
.idea/.gitignore

@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 12 - 0
.idea/DWY_mobile.iml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
+      <excludeFolder url="file://$MODULE_DIR$/temp" />
+      <excludeFolder url="file://$MODULE_DIR$/tmp" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 29 - 0
.idea/codeStyles/Project.xml

@@ -0,0 +1,29 @@
+<component name="ProjectCodeStyleConfiguration">
+  <code_scheme name="Project" version="173">
+    <JSCodeStyleSettings version="0">
+      <option name="USE_SEMICOLON_AFTER_STATEMENT" value="false" />
+      <option name="FORCE_SEMICOLON_STYLE" value="true" />
+      <option name="SPACE_BEFORE_GENERATOR_MULT" value="true" />
+      <option name="USE_DOUBLE_QUOTES" value="false" />
+      <option name="FORCE_QUOTE_STYlE" value="true" />
+      <option name="OBJECT_LITERAL_WRAP" value="2" />
+      <option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
+      <option name="SPACES_WITHIN_IMPORTS" value="true" />
+    </JSCodeStyleSettings>
+    <codeStyleSettings language="JavaScript">
+      <option name="BLOCK_COMMENT_ADD_SPACE" value="true" />
+      <option name="KEEP_BLANK_LINES_IN_CODE" value="1" />
+      <option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
+      <option name="ALIGN_MULTILINE_FOR" value="false" />
+      <option name="SPACE_BEFORE_METHOD_PARENTHESES" value="true" />
+      <option name="IF_BRACE_FORCE" value="1" />
+      <option name="DOWHILE_BRACE_FORCE" value="1" />
+      <option name="WHILE_BRACE_FORCE" value="1" />
+      <option name="FOR_BRACE_FORCE" value="1" />
+      <indentOptions>
+        <option name="INDENT_SIZE" value="2" />
+        <option name="CONTINUATION_INDENT_SIZE" value="2" />
+      </indentOptions>
+    </codeStyleSettings>
+  </code_scheme>
+</component>

+ 5 - 0
.idea/codeStyles/codeStyleConfig.xml

@@ -0,0 +1,5 @@
+<component name="ProjectCodeStyleConfiguration">
+  <state>
+    <option name="USE_PER_PROJECT_SETTINGS" value="true" />
+  </state>
+</component>

+ 6 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,6 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
+  </profile>
+</component>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/DWY_mobile.iml" filepath="$PROJECT_DIR$/.idea/DWY_mobile.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>

BIN
dist/favicon.ico


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/index.html


+ 1 - 0
dist/static/css/app.2b1659bd.css

@@ -0,0 +1 @@
+#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#2c3e50;overflow-x:hidden}#nav{padding:30px}#nav a{font-weight:700;color:#2c3e50}#nav a.router-link-exact-active{color:#42b983}

+ 1 - 0
dist/static/css/chunk-03f11e0c.f3b87d2c.css

@@ -0,0 +1 @@
+.btn_content[data-v-25c1ed07]{text-align:center;position:absolute;left:50%;top:50%;width:100%;transform:translate(-50%,-100%)}

+ 1 - 0
dist/static/css/chunk-089685f8.376a7d63.css

@@ -0,0 +1 @@
+.content[data-v-5e4050fa]{height:calc(100% - 10rem);overflow:auto}.content .item[data-v-5e4050fa]{width:94%;position:relative;left:3%;margin:1.5rem 0;border-radius:1rem;background-color:#fff;box-shadow:.16rem .1rem .1rem .1rem #9d9b9b;font-size:.8rem;display:flex;flex-wrap:wrap}.content .item .add[data-v-5e4050fa]{bottom:-.5rem;left:-.5rem}.content .item .add[data-v-5e4050fa],.content .item .delete[data-v-5e4050fa]{position:absolute;width:1.5rem;height:1.5rem;display:flex;align-items:center;justify-content:center;font-size:1.3rem;border-radius:50%;box-shadow:.1rem .1rem .1rem 0 #777676;background:#fff}.content .item .delete[data-v-5e4050fa]{top:-.5rem;right:-.5rem}.content .item .unit[data-v-5e4050fa]{width:50%;padding:.5rem;vertical-align:middle}.content .item .unit label[data-v-5e4050fa]{width:40%;text-align:center}.footer[data-v-5e4050fa]{position:absolute;bottom:7rem;height:3rem;width:100%;border-top:.2rem solid #8a8888}.footer_content[data-v-5e4050fa]{display:flex;flex-wrap:wrap;font-size:.8rem}.footer_content>div[data-v-5e4050fa]{width:50%;display:flex}.footer_content>div label[data-v-5e4050fa]{width:45%;text-align:center}.footer_content>div div[data-v-5e4050fa]{width:60%;text-align:center}.footer_btn[data-v-5e4050fa]{display:flex;justify-content:space-between;align-items:center}

+ 1 - 0
dist/static/css/chunk-0dead9c5.7bb64dd9.css

@@ -0,0 +1 @@
+.header[data-v-dde8a8da]{width:94%;height:7rem;position:relative;top:.5rem;left:3%;box-shadow:.16rem .1rem .1rem .1rem #9d9b9b;border-radius:1rem;padding:.4rem .7rem 0 1rem;background:#fff}.header_btn[data-v-dde8a8da]{border-radius:1rem;padding:.1rem;width:5rem;display:flex;justify-content:space-around;align-items:center}.header_top[data-v-dde8a8da]{display:flex;justify-content:space-between;align-items:center}.ot[data-v-dde8a8da]{position:relative;top:-1.3rem}.header_middle1[data-v-dde8a8da]{display:flex;justify-content:space-between;align-items:center}.header_middle1 .ft[data-v-dde8a8da]{font-size:1.5rem;width:5rem;text-align:center}.header_middle[data-v-dde8a8da]{position:relative;top:-.3rem;display:flex;justify-content:space-between;align-items:center}.btn-group-vertical>.btn[data-v-dde8a8da],[data-v-dde8a8da] .btn-group>.btn{background:#fff;color:#2c3e50;outline:none;border:none;margin:0;z-index:3}.header_footer[data-v-dde8a8da]{position:relative;top:-1.7rem;display:flex;justify-content:space-between;align-items:center}.header_footer div[data-v-dde8a8da]{font-size:.5rem;color:#f4882a}.bdy[data-v-dde8a8da]{display:flex;flex-wrap:wrap;width:94%;position:relative;top:1.4rem;left:3%;height:24rem}.bdy .item[data-v-dde8a8da]{width:46%;margin:2%;text-align:center;height:45%;border-radius:1rem;background:#fff;box-shadow:.16rem .1rem .1rem .1rem #9d9b9b}.ft_by[data-v-dde8a8da]{position:relative;top:.5rem;font-size:1.4rem}

+ 1 - 0
dist/static/css/chunk-1f1f83a4.31a091cf.css

@@ -0,0 +1 @@
+.bc[data-v-0cf82f55]{width:100vw;height:100vh;background:#f1f1f1}.tabBar[data-v-0cf82f55]{width:100%;color:#a8a2a2}.footer[data-v-0cf82f55]{position:absolute;bottom:0;width:100%;z-index:1;background:#fff}.nav-link[data-v-0cf82f55]{color:#595959}.h5[data-v-0cf82f55]{margin-bottom:0;position:relative;top:.24rem}.nav[data-v-0cf82f55]{--bs-nav-link-padding-x:0rem;--bs-nav-link-padding-y:0rem}.choose2[data-v-0cf82f55],.choose[data-v-0cf82f55]{color:#5499fe;font-size:.8rem!important}.choose2[data-v-0cf82f55]{position:relative;top:1.55rem}.circle[data-v-0cf82f55]{width:3rem;height:3rem;margin:0 auto;position:absolute}.choose_1[data-v-0cf82f55],.choose_3[data-v-0cf82f55]{border-radius:50%;background:#5499fe;top:-.3rem;left:50%;transform:translate(-50%,-50%);line-height:2.3;z-index:2}[data-v-0cf82f55] .ivu-modal{top:35%}

+ 1 - 0
dist/static/css/chunk-3b2bb27f.8890c993.css

@@ -0,0 +1 @@
+.item[data-v-e1ddcb52]{display:flex;justify-content:space-between;align-items:center;background:#fff}.return_item[data-v-e1ddcb52]{text-align:center;background:#fff;margin-top:1.5rem}.return_item div[data-v-e1ddcb52]{font-size:1.2rem;padding:1rem 0;font-weight:700}.item_icon[data-v-e1ddcb52]{width:20%;text-align:center}.item_title[data-v-e1ddcb52]{font-size:1rem;display:flex;justify-content:space-between;align-items:center;width:80%;border-bottom:.1rem solid #d8d5d5;padding:1rem 0}.img_content[data-v-e1ddcb52]{width:5rem;border-radius:50%;overflow:hidden;margin:1.5rem}.img_content img[data-v-e1ddcb52]{max-height:5rem;max-width:5rem}.info_content[data-v-e1ddcb52]{width:70%}.info_content div[data-v-e1ddcb52]{font-size:1.8rem;font-weight:700}.main_header[data-v-e1ddcb52]{background:#fff;margin-bottom:2rem}.header[data-v-e1ddcb52]{display:flex;justify-content:space-between;align-items:center}

+ 1 - 0
dist/static/css/chunk-6e4aceda.ae4b4cf0.css

@@ -0,0 +1 @@
+.saoma[data-v-6b630bc8]{width:100vw;height:100vh}.qr-scanner[data-v-6b630bc8]{background-image:linear-gradient(0deg,transparent 24%,rgba(32,255,77,.1) 25%,rgba(32,255,77,.1) 26%,transparent 27%,transparent 74%,rgba(32,255,77,.1) 75%,rgba(32,255,77,.1) 76%,transparent 77%,transparent),linear-gradient(90deg,transparent 24%,rgba(32,255,77,.1) 25%,rgba(32,255,77,.1) 26%,transparent 27%,transparent 74%,rgba(32,255,77,.1) 75%,rgba(32,255,77,.1) 76%,transparent 77%,transparent);background-size:3rem 3rem;background-position:-1rem -1rem;width:100%;height:100vh;position:relative;background-color:rgba(17,17,17,0)}.qr-scanner .box[data-v-6b630bc8]{width:213px;height:213px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);overflow:hidden;border:.1rem solid rgba(0,255,51,.2)}.qr-scanner .line[data-v-6b630bc8]{height:calc(100% - 2px);width:100%;background:linear-gradient(180deg,rgba(0,255,51,0) 43%,#0f3 211%);border-bottom:3px solid #0f3;transform:translateY(-100%);animation:radar-beam-6b630bc8 2s infinite alternate;animation-timing-function:cubic-bezier(.53,0,.43,.99);animation-delay:1.4s}.qr-scanner .angle[data-v-6b630bc8]:after,.qr-scanner .angle[data-v-6b630bc8]:before,.qr-scanner .box[data-v-6b630bc8]:after,.qr-scanner .box[data-v-6b630bc8]:before{content:"";display:block;position:absolute;width:3vw;height:3vw;border:.2rem solid transparent}.qr-scanner .box[data-v-6b630bc8]:after,.qr-scanner .box[data-v-6b630bc8]:before{top:0;border-top-color:#0f3}.qr-scanner .angle[data-v-6b630bc8]:after,.qr-scanner .angle[data-v-6b630bc8]:before{bottom:0;border-bottom-color:#0f3}.qr-scanner .angle[data-v-6b630bc8]:before,.qr-scanner .box[data-v-6b630bc8]:before{left:0;border-left-color:#0f3}.qr-scanner .angle[data-v-6b630bc8]:after,.qr-scanner .box[data-v-6b630bc8]:after{right:0;border-right-color:#0f3}@keyframes radar-beam-6b630bc8{0%{transform:translateY(-100%)}to{transform:translateY(0)}}

+ 1 - 0
dist/static/css/chunk-743db3e8.25aa2ded.css

@@ -0,0 +1 @@
+.header[data-v-43c7ffed]{width:94%;height:7rem;position:relative;top:.5rem;left:3%;box-shadow:.16rem .1rem .1rem .1rem #9d9b9b;border-radius:1rem;padding:.4rem .7rem 0 1rem;background:#fff}.header_btn[data-v-43c7ffed]{border-radius:1rem;padding:.1rem;width:5rem;display:flex;justify-content:space-around;align-items:center}.header_top[data-v-43c7ffed]{display:flex;justify-content:space-between;align-items:center}.ot[data-v-43c7ffed]{position:relative;top:-1.3rem}.header_middle1[data-v-43c7ffed]{display:flex;justify-content:space-between;align-items:center}.header_middle1 .ft[data-v-43c7ffed]{font-size:1.5rem;width:5rem;text-align:center}.header_middle[data-v-43c7ffed]{position:relative;top:-.3rem;display:flex;justify-content:space-between;align-items:center}.btn-group-vertical>.btn[data-v-43c7ffed],[data-v-43c7ffed] .btn-group>.btn{background:#fff;color:#2c3e50;outline:none;border:none;margin:0;z-index:3}.header_footer[data-v-43c7ffed]{position:relative;top:-1.7rem;display:flex;justify-content:space-between;align-items:center}.header_footer div[data-v-43c7ffed]{font-size:.5rem;color:#f4882a}.bdy[data-v-43c7ffed]{padding:1rem;position:relative;width:94%;top:3rem;height:14rem;border-radius:1rem;left:3%;box-shadow:.16rem .1rem .1rem .1rem #9d9b9b;background:#fff}.bdy_btn[data-v-43c7ffed]{margin-top:3rem;display:flex;justify-content:center;align-items:center}

+ 1 - 0
dist/static/css/chunk-939b5872.cc2bacf7.css

@@ -0,0 +1 @@
+.view[data-v-5918b620]{height:100vh;width:100vw;background:#4d8ef7;padding:0;overflow-x:hidden}.form[data-v-5918b620]{box-sizing:border-box;width:100%;height:100%;position:absolute;top:8.8rem;padding:1.7rem 1.5rem;border-radius:1.5rem 1.5rem 0 0;font-size:18px!important;font-weight:700;background:#fff;transform:translateX(1px) scaleX(1.01)}.logo[data-v-5918b620]{width:6rem;height:6rem;position:absolute;top:20%;left:50%;transform:translate(-50%,-70%)}.logo img[data-v-5918b620]{width:100%;height:100%}.header[data-v-5918b620]{color:#fff;font-weight:700;font-family:Lucida Sans,Lucida Sans Regular,Lucida Grande,Lucida Sans Unicode,Geneva,Verdana,sans-serif;font-size:1.5rem;position:relative;width:100%;height:20%;top:3rem;left:2rem}.inp[data-v-5918b620]:focus{background:#fff!important}

+ 1 - 0
dist/static/css/chunk-f965fc8a.4f90b281.css

@@ -0,0 +1 @@
+.header[data-v-dedcf1f0]{width:94%;height:7rem;position:relative;top:.5rem;left:3%;box-shadow:.16rem .1rem .1rem .1rem #9d9b9b;border-radius:1rem;padding:.4rem .7rem 0 1rem;background:#fff}.header_btn[data-v-dedcf1f0]{border-radius:1rem;padding:.1rem;width:5rem;display:flex;justify-content:space-around;align-items:center}.header_top[data-v-dedcf1f0]{display:flex;justify-content:space-between;align-items:center}.ot[data-v-dedcf1f0]{position:relative;top:-1.3rem}.header_middle1[data-v-dedcf1f0]{display:flex;justify-content:space-between;align-items:center}.header_middle1 .ft[data-v-dedcf1f0]{font-size:1.5rem;width:5rem;text-align:center}.header_middle[data-v-dedcf1f0]{position:relative;top:-.3rem;display:flex;justify-content:space-between;align-items:center}.btn-group-vertical>.btn[data-v-dedcf1f0],[data-v-dedcf1f0] .btn-group>.btn{background:#fff;color:#2c3e50;outline:none;border:none;margin:0;z-index:3}.header_footer[data-v-dedcf1f0]{position:relative;top:-1.7rem;display:flex;justify-content:space-between;align-items:center}.header_footer div[data-v-dedcf1f0]{font-size:.5rem;color:#f4882a}.bdy[data-v-dedcf1f0]{width:94%;height:calc(100% - 18.7rem);overflow:auto;position:relative;top:1rem;left:3%}[data-v-dedcf1f0] th{font-size:.9rem}[data-v-dedcf1f0] td{text-align:center;vertical-align:middle}table[data-v-dedcf1f0]{border-collapse:collapse;width:100%;background:#fff}th[data-v-dedcf1f0]{font-size:.9rem;background:#66b1f4;color:#fff}td[data-v-dedcf1f0]{font-size:1rem}td[data-v-dedcf1f0],th[data-v-dedcf1f0]{vertical-align:middle;text-align:center;border:.1rem solid #ddd;padding:.02rem}.choose_item[data-v-dedcf1f0]{background:#c8c8c8}.footer[data-v-dedcf1f0]{display:flex;justify-content:space-around;width:100%;position:absolute;bottom:4.8rem}

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/css/chunk-vendors.2d238145.css


BIN
dist/static/fonts/ionicons.143146fa.woff2


BIN
dist/static/fonts/ionicons.99ac3308.woff


BIN
dist/static/fonts/ionicons.d535a25a.ttf


BIN
dist/static/img/FG-01C.693b4097.png


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 24 - 0
dist/static/img/ionicons.a2c4a261.svg


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/app.47cc5f40.js


+ 1 - 0
dist/static/js/chunk-03f11e0c.14245d23.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-03f11e0c"],{"5bf1":function(t,s,o){"use strict";o.r(s);var n=function(){var t=this,s=t._self._c;return s("div",[s("div",{staticClass:"btn_content"},[s("b-button",{attrs:{size:"lg",variant:"primary"},on:{click:t.handleClick}},[t._v(t._s(t.state?"停止扫描":"开始扫描"))])],1),s("b-modal",{attrs:{centered:"",scrollable:"","no-close-on-backdrop":"","no-close-on-esc":"","hide-header":""},model:{value:t.is_show,callback:function(s){t.is_show=s},expression:"is_show"}},[s("p",[t._v(" "+t._s(t.list.toString())+" ")]),s("div",{attrs:{slot:"modal-footer"},slot:"modal-footer"},[s("b-button",{on:{click:t.handleCancel}},[t._v("取消")])],1)])],1)},e=[],i={data(){return{state:!1,is_show:!1,list:[]}},mounted(){console.log(111),window.uploadEPC=this.uploadEPC},methods:{uploadEPC(t){this.list.push(JSON.stringify(t+""))},handleClick(){this.state=!this.state,this.state?androidJs.startInventory():(androidJs.stopInventory(),this.is_show=!0)},handleCancel(){this.is_show=!1}}},a=i,l=(o("e63b"),o("2877")),c=Object(l["a"])(a,n,e,!1,null,"25c1ed07",null);s["default"]=c.exports},e63b:function(t,s,o){"use strict";o("f1b2")},f1b2:function(t,s,o){}}]);

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-089685f8.1db316f2.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-0dead9c5.d656568a.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-1f1f83a4.033dbbf2.js


+ 1 - 0
dist/static/js/chunk-2d21022e.6ceaa6de.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d21022e"],{b736:function(e,n,l){"use strict";l.r(n);var o=function(){var e=this,n=e._self._c;return n("div")},t=[],u={beforeRouteEnter(e,n,l){console.log(n),l(e=>{e.$router.replace(n.fullPath)})}},r=u,c=l("2877"),s=Object(c["a"])(r,o,t,!1,null,null,null);n["default"]=s.exports}}]);

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-3b2bb27f.98d61203.js


+ 1 - 0
dist/static/js/chunk-6e4aceda.52d636cb.js

@@ -0,0 +1 @@
+(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-6e4aceda"],{"24fc":function(t,r,e){"use strict";e("3a28")},"3a28":function(t,r,e){},e5c7:function(t,r,e){"use strict";e.r(r);var a=function(){var t=this,r=t._self._c;return r("div",{staticClass:"saoma"},[r("qrcode-stream",{staticStyle:{height:"90vh",width:"100vw"},on:{decode:t.onDecode,init:t.onInit}},[r("div",[r("div",{staticClass:"qr-scanner"},[r("div",{staticClass:"box"},[r("div",{staticClass:"line"}),r("div",{staticClass:"angle"})])])])])],1)},o=[],s={data(){return{result:"",error:""}},methods:{onDecode(t){t&&this.$router.push({path:"/",query:{code:t}})},async onInit(t){try{await t}catch(r){"NotAllowedError"===r.name?(window.alert("您需要授予相机访问权限"),this.$router.push({path:"/"})):"NotFoundError"===r.name?(this.$router.push({path:"/"}),window.alert("这个设备上没有摄像头")):"NotSupportedError"===r.name?(this.$router.push({path:"/"}),window.alert("所需的安全上下文(HTTPS、本地主机)")):"NotReadableError"===r.name?(this.$router.push({path:"/"}),window.alert("相机被占用")):"OverconstrainedError"===r.name?(this.$router.push({path:"/"}),window.alert("安装摄像头不合适")):"StreamApiNotSupportedError"===r.name&&(this.$router.push({path:"/"}),window.alert("此浏览器不支持流API"))}}}},n=s,i=(e("24fc"),e("2877")),c=Object(i["a"])(n,a,o,!1,null,"6b630bc8",null);r["default"]=c.exports}}]);

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-743db3e8.869e4e0f.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 10 - 0
dist/static/js/chunk-939b5872.d00c9579.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-f965fc8a.86b38e99.js


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 0
dist/static/js/chunk-vendors.750613c7.js


BIN
src/assets/FG-01C.png


+ 65 - 0
src/axios/index.js

@@ -0,0 +1,65 @@
+import axios from "axios";
+
+import Vue from "vue";
+let config = {};
+const instance = axios.create(config);
+// 3. 配置信息
+config = {
+  // 每次请求的协议、IP地址。  设置该配置后,每次请求路径都可以使用相对路径,例如"/admin/login"
+  // baseURL: "http://127.0.0.1:5590",
+  // 请求超时时间
+  timeout: 0,
+  // 每次请求携带cookie
+  withCredentials: true,
+};
+//请求拦截,后期可能会用到,先注册在此
+instance.interceptors.request.use(
+  function (config) {
+    let token = localStorage.getItem("mobile_token");
+    // let proxy_url = 'http://121.37.173.82:82'; //打包上线时请改用此处
+    // let proxy_url = process.env.VUE_APP_BASE_URL; //打包上线时请改用此处
+    // let proxy_url = '/proxy'//打包上线时此处请注释掉
+    let proxy_url = JSON.parse(localStorage.getItem('mobile_url'));
+    config.url = proxy_url + config.url;
+
+    // 在发送请求之前做些什么,例如加入token
+    config.headers["Authorization"] = token;
+    config.headers['Content-Sign'] = 'b21779e9365ed84e4dd382ccdacc6d51';
+    config.headers['host'] = '121.36.142.167:7774';
+    return config;
+  },
+  function (error) {
+    // 对请求错误做些什么
+    return Promise.reject(error);
+  }
+);
+
+// 2. 响应拦截
+instance.interceptors.response.use(
+  (res) => {
+
+    if (res.status == 200) {
+      if (res.data.code == 200) {
+        return res.data;
+      } else {
+        //若code 非 200
+        if (res.data.code == 401) {
+          localStorage.removeItem("mobile_token");
+          return location.reload();
+        }
+        Vue.prototype.$Message.error(res.data.msg || "未知错误");
+        return res.data || res;
+      }
+    } else {
+      return Vue.prototype.$Message.error("请求超时");
+    }
+  },
+  // 对于错误响应的处理
+  (err) => {
+    Vue.prototype.$Notice.error({ title: "请求失败", desc: err });
+
+    return err;
+  }
+);
+
+export default instance;

+ 111 - 0
src/routerMap/index.js

@@ -0,0 +1,111 @@
+const routerMap = [
+  {
+    path: "/cms/refresh",
+    name: "refresh", //刷新
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/refresh"], resolve),
+  },
+  {
+    path: "/cms/home",
+    name: "Home", //首页
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Home"], resolve),
+  },
+  {
+    path: "/cms/work",
+    name: "work", //扫码
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Work"], resolve),
+  },
+  {
+    path: "/cms/mine",
+    name: "Mine", //我的
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Mine"], resolve),
+  },
+  {
+    path: "/cms/finish",
+    name: "finish", //完工
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Finish/index"], resolve),
+  },
+  {
+    path: "/cms/finish/detail",
+    name: "finishDetail", //完工列表
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Finish/detail"], resolve),
+  },
+  {
+    path: "/cms/finish/detailed",
+    name: "finishDetailed", //完工详情
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Finish/detailed"], resolve),
+  },
+  {
+    path: "/cms/Package/detail",
+    name: "PackageDetail", //包装列表
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Package/detail"], resolve),
+  },
+  {
+    path: "/cms/Package/detailed",
+    name: "PackageDetailed", //包装详情
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Package/detailed"], resolve),
+  },
+  {
+    path: "/cms/dispatch/detail",
+    name: "dispatchDetail", //发货列表
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Dispatch/detail"], resolve),
+  },
+  {
+    path: "/cms/dispatch/detailed",
+    name: "dispatchDetailed", //发货详情
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/Dispatch/detailed"], resolve),
+  },
+  {
+    path: "/cms/ceshi",
+    name: "ceshi", //完工详情
+    meta: {
+      index: 3,
+
+    },
+    component: (resolve) => require(["@/views/page/ceshi"], resolve),
+  },
+]
+export default routerMap;

+ 205 - 0
src/views/Login.vue

@@ -0,0 +1,205 @@
+<template>
+  <div class="view">
+    <!-- <div class="logo">
+      <img src="../assets/FG-01C.png" alt="" />
+    </div> -->
+    <div class="header">
+      <p>
+        你好!
+        <br />
+        欢迎使用扫码系统
+      </p>
+    </div>
+    <b-form @submit.prevent="onSubmit" class="form">
+      <b-form-group
+        label="账号"
+        label-for="input-1"
+        style="margin-bottom: 1rem"
+        label-cols="2"
+      >
+        <b-form-input
+          id="input-1"
+          v-model="form.account"
+          required
+          class="inp"
+          style="
+            height: 3rem;
+            font-size: 1.1rem;
+            font-weight: 500;
+            letter-spacing: 0.1rem;
+            background: #f2f2f2;
+            border-radius: 1.2rem;
+            border: none;
+            box-shadow: 0.2rem 0.18rem 0.1rem 0.1rem rgba(0, 0, 0, 0.3);
+          "
+          placeholder="请输入账号"
+        ></b-form-input>
+      </b-form-group>
+
+      <b-form-group
+        label="密码"
+        label-for="input-2"
+        style="margin-bottom: 1rem"
+        label-cols="2"
+      >
+        <b-form-input
+          id="input-2"
+          v-model="form.password"
+          type="password"
+          autocomplete="off"
+          class="inp"
+          style="
+            height: 3rem;
+            font-size: 1.1rem;
+            font-weight: 500;
+            background: #f2f2f2;
+            border-radius: 1.2rem;
+            letter-spacing: 0.1rem;
+            border: none;
+            box-shadow: 0.2rem 0.18rem 0.1rem 0.1rem rgba(0, 0, 0, 0.3);
+          "
+          required
+          placeholder="请输入密码"
+        ></b-form-input>
+      </b-form-group>
+      <b-form-group
+        label="域名:"
+        label-for="input-3"
+        style="
+          margin-bottom: 5rem;
+          height: 3rem;
+          font-size: 1.2rem;
+
+          border-radius: 3rem;
+        "
+        label-cols="2"
+      >
+        <b-form-input
+          id="input-3"
+          v-model="form.url"
+          required
+          class="inp"
+          style="
+            height: 3rem;
+            font-size: 1.1rem;
+            letter-spacing: 0.1rem;
+            font-weight: 500;
+            border-radius: 1.2rem;
+            background: #f2f2f2;
+            border: none;
+            box-shadow: 0.2rem 0.18rem 0.1rem 0.1rem rgba(0, 0, 0, 0.3);
+          "
+          placeholder="请输入域名"
+        ></b-form-input>
+      </b-form-group>
+      <b-button
+        type="submit"
+        variant="primary"
+        style="
+          width: 100%;
+          height: 3rem;
+          font-size: 1.2rem;
+          border-radius: 1.2rem;
+        "
+        >登录</b-button
+      >
+    </b-form>
+  </div>
+</template>
+
+<script>
+import $ from "jquery";
+export default {
+  data() {
+    return {
+      form: {
+        account: '',
+        password: '',
+        url: 'http://121.36.142.167:7774/jbl'
+        // "https://fyy_api.qingyaokeji.com",
+        // url: "http://192.168.0.125:8081"
+      },
+    }
+  },
+
+  methods: {
+    onSubmit() {
+      // let that = this;
+      // let data = this.form;
+      // $.ajax({
+      //   type: "post",
+      //   url: `${that.form.url}/api/loginMobile`,
+      //   data: { ...data },
+      //   dataType: "json",
+      //   timeout: 5000,
+      //   success: function (res) {
+      //     if (res.code == 200) {
+      //       localStorage.setItem('mobile_url', JSON.stringify(that.form.url));
+      //       localStorage.setItem('mobile_token', JSON.stringify(res.data.token));
+      //       that.$Message.success(res.msg);
+      //       that.$router.push({ path: '/cms/home' })
+      //     }
+
+      //   },
+      //   error: function () {
+
+      //   }
+      // });
+      this.$Message.success('登录成功')
+      localStorage.setItem('mobile_url', JSON.stringify(this.form.url));
+      localStorage.setItem('mobile_token', 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiYXV0aCI6IlJPTEVfSU5ORVJfVVNFUixST0xFX0FETUlOIiwidG9rZW5JZCI6IjM1IiwiZXhwIjoxNjk0MjM3NzIyfQ.aO1_RGWVxXygefwuUg_au3ys71zc2KuIbxZNWgTBeLRK9JVEqQZeza4X1gtoA8_BxoKZUuaPnTP9gUrEGgF3UQ')
+      this.$router.push({ path: '/cms/home' })
+    },
+  }
+}
+</script>
+<style lang="scss" scoped>
+.view {
+  height: 100vh;
+  width: 100vw;
+  background: #4d8ef7;
+  padding: 0;
+  overflow-x: hidden;
+}
+.form {
+  box-sizing: border-box;
+  width: 100%;
+  height: 100%;
+
+  position: absolute;
+  top: 8.8rem;
+  padding: 1.7rem 1.5rem;
+  border-radius: 1.5rem 1.5rem 0 0;
+  font-size: 18px !important;
+  font-weight: bold;
+  background: #fff;
+  transform: translateX(1px) scaleX(1.01);
+}
+.logo {
+  width: 6rem;
+  height: 6rem;
+  position: absolute;
+  top: 20%;
+  left: 50%;
+  transform: translate(-50%, -70%);
+  img {
+    width: 100%;
+    height: 100%;
+  }
+}
+.header {
+  color: #fff;
+  font-weight: bold;
+  font-family: "Lucida Sans", "Lucida Sans Regular", "Lucida Grande",
+    "Lucida Sans Unicode", Geneva, Verdana, sans-serif;
+  font-size: 1.5rem;
+  position: relative;
+  width: 100%;
+  height: 20%;
+  top: 3rem;
+  left: 2rem;
+}
+.inp:focus {
+  background: #fff !important;
+}
+</style>

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 189 - 0
src/views/cms.vue


+ 265 - 0
src/views/page/Dispatch/detail.vue

@@ -0,0 +1,265 @@
+<template>
+  <div>
+    <div class="header">
+      <div class="header_top">
+        <Button
+          type="primary"
+          class="header_btn"
+          ghost
+          @click="handleShow"
+          :icon="is_show ? 'ios-arrow-dropup' : 'ios-arrow-dropdown'"
+        >
+          <div style="margin-right: 0.6rem">
+            {{ is_show ? "收起" : "展开" }}
+          </div></Button
+        >
+        <div style="margin-right: 1rem; color: #66a9f0">王小伟</div>
+      </div>
+      <div class="header_middle">
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+      </div>
+      <div class="header_middle1 ot">
+        <div class="ft">58 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+      </div>
+      <div class="header_footer">
+        <div style="margin-left: 1rem">已完成56/10</div>
+        <div style="margin-right: 1.4rem">已完成10%</div>
+      </div>
+    </div>
+    <div class="bdy">
+      <table>
+        <tr style="height: 2rem">
+          <th style="width: 3rem">发货单号</th>
+          <th style="width: 4rem">产品名称</th>
+          <th style="width: 3rem">工艺</th>
+          <th style="width: 3rem">发货包数</th>
+          <th style="width: 3rem">未发包数</th>
+          <th style="width: 3rem">已发包数</th>
+        </tr>
+        <tr
+          v-for="(item, index) in tableData"
+          :key="index"
+          @click="handleChoose(item, index)"
+          :class="item.is_choose ? 'choose_item' : ''"
+        >
+          <td>
+            {{ item.dispatch_no.toString() }}
+          </td>
+          <td>{{ item.product_title }}</td>
+          <td>准分子爱格浅橡9327</td>
+          <td>100</td>
+          <td>{{ item.finished_num }}</td>
+          <td>{{ item.un_finished_quantity }}</td>
+        </tr>
+      </table>
+    </div>
+    <div class="footer">
+      <Button
+        type="primary"
+        class="header_btn"
+        style="margin-right: 3rem; height: 2.6rem"
+        @click="handleReturn"
+      >
+        返回</Button
+      >
+      <Button
+        type="primary"
+        class="header_btn"
+        style="margin-left: 3rem; height: 2.6rem"
+        @click="handelGoSure"
+      >
+        确认</Button
+      >
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+      tableData: [],
+      is_show: true,
+      is_use: false,
+
+    }
+  },
+  mounted() {
+    let data = {};
+    if (localStorage.getItem('fyy_target')) {
+      data.target = JSON.parse(localStorage.getItem('fyy_target'));
+    }
+    this.initData(data);
+  },
+  methods: {
+    initData(row) {
+      this.axios.post('/api/finishedOrderList', { ...row, process_id: [9] }).then(res => {
+        this.tableData = res.data.data ? res.data.data : [];
+        this.tableData.forEach(v => {
+          v.is_choose = false;
+        })
+      })
+    },
+    handelGoSure() {
+      if (this.tableData.filter(v => v.is_choose).length == 0) {
+        return this.$Message.warning('请先选择数据!')
+      }
+      localStorage.removeItem('fyy_target');
+      let id = this.tableData.map(v => v.id).toString();
+      this.$router.push({ path: '/cms/dispatch/detailed', query: { id } })
+    },
+    handleReturn() {
+      localStorage.removeItem('fyy_target');
+      this.$router.push('/cms/home');
+    },
+    handleChoose(item, index) {
+      item.is_choose = !item.is_choose;
+      this.tableData.splice(index, 1, item);
+    },
+    handleShow() {
+      this.is_show = !this.is_show;
+      console.log(document.getElementsByClassName('header'))
+      if (this.is_show) {
+        document.getElementsByClassName('header')[0].style = 'height:7rem;overflow:hidden;transition:all .4s;'
+        setTimeout(() => {
+          document.getElementsByClassName('header')[0].style = 'overflow:none;'
+          this.is_use = false;
+        }, 400)
+      } else {
+        this.is_use = true;
+        document.getElementsByClassName('header')[0].style = 'height:2.7rem;overflow:hidden;transition:all .4s;'
+      }
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.header {
+  width: 94%;
+  height: 7rem;
+  // overflow: hidden;
+  // transition: all 0.4s;
+  position: relative;
+  top: 0.5rem;
+  left: 3%;
+  box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  border-radius: 1rem;
+  padding: 0.4rem 0.7rem 0 1rem;
+  background: #fff;
+}
+.header_btn {
+  border-radius: 1rem;
+  padding: 0.1rem;
+  width: 5rem;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.header_top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.ot {
+  position: relative;
+  top: -1.3rem;
+}
+.header_middle1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .ft {
+    font-size: 1.5rem;
+    width: 5rem;
+    text-align: center;
+  }
+}
+.header_middle {
+  position: relative;
+  top: -0.3rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+/deep/ .btn-group > .btn,
+.btn-group-vertical > .btn {
+  background: #ffffff;
+  color: #2c3e50;
+  outline: none;
+  border: none;
+  margin: 0;
+  z-index: 3;
+}
+.header_footer {
+  position: relative;
+  top: -1.7rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  div {
+    font-size: 0.5rem;
+    color: rgb(244, 136, 42);
+  }
+}
+.bdy {
+  width: 94%;
+  height: calc(100% - 18.7rem);
+  overflow: auto;
+  position: relative;
+  top: 1rem;
+  left: 3%;
+}
+
+/deep/td {
+  text-align: center;
+  vertical-align: middle;
+}
+table {
+  border-collapse: collapse; /* 合并边框 */
+  width: 100%; /* 表格宽度 */
+  background: #fff;
+  table-layout: fixed;
+}
+th {
+  font-size: 0.6rem;
+  background: #66b1f4;
+  color: #fff;
+}
+td {
+  font-size: 0.6rem;
+  word-break: break-all;
+}
+td,
+th {
+  vertical-align: middle;
+  text-align: center;
+  border: 0.1rem solid #dddddd; /* 单元格边框样式 */
+  padding: 0.02rem; /* 单元格内边距 */
+}
+.choose_item {
+  background: #c8c8c8;
+}
+.footer {
+  display: flex;
+  justify-content: space-around;
+  width: 100%;
+  position: absolute;
+  bottom: 4.8rem;
+}
+</style>

+ 325 - 0
src/views/page/Dispatch/detailed.vue

@@ -0,0 +1,325 @@
+<template>
+  <div>
+    <div class="content">
+      <div v-for="(item, index) in list" :key="index" class="item">
+        <div class="add" @click="handleAdd(item, index)">+</div>
+        <div class="delete" @click="handleDelete(index)">x</div>
+        <div class="unit" style="display: flex">
+          <label style="width: 50%">销售订单号:</label>
+          <div style="width: 50%">{{ item.dispatch_no }}</div>
+        </div>
+        <div style="display: flex" class="unit">
+          <label>发货单号:</label>
+          <div style="width: 60%">{{ item.product_title }}</div>
+        </div>
+        <div style="padding: 0.5rem; width: 100%; display: flex">
+          <label style="width: 20%; text-align: right">客户姓名:</label>
+          <div style="width: 80%">浙江省金华市金东区方利青</div>
+        </div>
+        <div style="padding: 0.5rem; width: 100%; display: flex">
+          <label style="width: 20%; text-align: right">产品名称:</label>
+          <div style="width: 80%">大王椰700尊贵型E0全桉-面漆板W</div>
+        </div>
+        <div style="padding: 0.5rem; width: 100%; display: flex">
+          <label style="width: 20%; text-align: right">工艺:</label>
+          <div style="width: 80%">准分子爱格浅橡9327</div>
+        </div>
+        <div style="display: flex" class="unit">
+          <label>发货包数:</label>
+          <Input
+            type="number"
+            size="small"
+            placeholder="请输入"
+            style="width: 60%; padding: 0 0 0 0.2rem"
+            v-model="item.quantity"
+          />
+        </div>
+        <div style="display: flex" class="unit">
+          <label>发货数量:</label>
+          <Input
+            type="number"
+            size="small"
+            placeholder="请输入"
+            style="width: 60%; padding: 0 0 0 0.2rem"
+            v-model="item.quantity"
+          />
+        </div>
+        <div class="unit">
+          <label>班组:</label
+          ><span>
+            <b-form-select
+              v-model="item.team_id"
+              :options="teamList"
+              style="
+                height: 1.4rem;
+                width: 60%;
+                border: 0.1rem solid;
+                border-radius: 0.6rem;
+                background: #fff;
+              "
+            >
+              <template v-slot:first>
+                <b-form-select-option value="" disabled
+                  >请选择班组</b-form-select-option
+                >
+              </template></b-form-select
+            ></span
+          >
+        </div>
+        <div class="unit">
+          <label>人员:</label>
+          <b-form-select
+            v-model="item.employee_id"
+            :options="employeeList"
+            style="
+              height: 1.4rem;
+              width: 60%;
+              border: 0.1rem solid;
+              border-radius: 0.6rem;
+              background: #fff;
+            "
+          >
+            <template v-slot:first>
+              <b-form-select-option value="" disabled
+                >请选择人员</b-form-select-option
+              >
+            </template></b-form-select
+          >
+        </div>
+      </div>
+      <div class="footer_btn">
+        <b-button
+          variant="primary"
+          style="width: 30%; margin-right: 3%"
+          @click="handleReturn"
+          >返回</b-button
+        >
+        <b-button
+          variant="primary"
+          style="width: 30%; margin-right: 3%"
+          @click="handleInfo"
+          >物流信息</b-button
+        >
+        <b-button variant="primary" style="width: 30%" @click="handleSure"
+          >确认</b-button
+        >
+      </div>
+    </div>
+    <Modal
+      v-model="show_info"
+      width="80"
+      footer-hide
+      :closable="false"
+      :mask-closable="false"
+    >
+      <div style="font-size: 1.2rem; font-weight: bold">物流信息</div>
+      <Form :label-width="120">
+        <FormItem label="预计到货日期:">
+          <Input />
+        </FormItem>
+        <FormItem label="发货人:">
+          <Input />
+        </FormItem>
+        <FormItem label="发货人联系方式:">
+          <Input />
+        </FormItem>
+        <FormItem label="发货方式:">
+          <Input />
+        </FormItem>
+        <FormItem label="快递公司:">
+          <Input />
+        </FormItem>
+        <FormItem label="快递单号:">
+          <Input />
+        </FormItem>
+        <FormItem label="司机姓名:">
+          <Input />
+        </FormItem>
+        <FormItem label="司机联系电话:">
+          <Input />
+        </FormItem>
+        <FormItem label="车牌号码:">
+          <Input />
+        </FormItem>
+        <FormItem label="司机身份证号码:">
+          <Input />
+        </FormItem>
+      </Form>
+      <div style="text-align: center">
+        <Button
+          style="margin-right: 1rem"
+          type="error"
+          @click="show_info = false"
+          >取消</Button
+        >
+        <Button
+          style="margin-left: 1rem"
+          type="primary"
+          @click="show_info = false"
+          >确认</Button
+        >
+      </div>
+    </Modal>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      list: [],
+      email: "",
+      name: "",
+      food: null,
+      checked: [],
+      form: {},
+      teamList: [],
+      employeeList: [],
+      state: true,
+      modalData: {},
+      show_info: false,
+    }
+  },
+  created() {
+    this.axios.post('/api/finishedOrderDetailsList', { id: this.$route.query.id.split(',') }).then(res => {
+      this.list = res.data.list;
+    })
+    //获取班组
+    this.axios.post('/api/teamList').then(res => {
+      this.teamList = res.data.data;
+      this.teamList.forEach(v => {
+        v.value = v.id;
+        v.text = v.title;
+      })
+    })
+    //获取人员
+    this.axios.post('/api/employeeList').then(res => {
+      this.employeeList = res.data.data;
+      this.employeeList.forEach(v => {
+        v.value = v.id;
+        v.text = v.emp_name
+      })
+    })
+  },
+  methods: {
+    handleInfo() {
+      this.show_info = true;
+      this.modalData = {};
+    },
+    handleReturn() {
+      this.$router.go(-1);
+    },
+    handleDelete(index) {
+      if (this.list.length == 1) {
+        return
+      } else {
+        this.list.splice(index, 1);
+      }
+    },
+    handleAdd(item, index) {
+      if (!item.quantity) {
+        return
+      } else {
+
+        let copy = JSON.parse(JSON.stringify(item));
+        copy.quantity = Math.floor(item.quantity / 2) + item.quantity % 2;
+        item.quantity = Math.floor(item.quantity / 2);
+        this.list.splice(index, 1, item);
+        this.list.splice(index + 1, 0, copy);
+      }
+
+    },
+    handleSure() {
+      let data = [];
+      this.list.forEach(v => {
+        let obj = {};
+        obj.id = v.id;
+        obj.team_id = v.team_id,
+          obj.finished_id = v.employee_id,
+          obj.equipment_id = v.equipment_id,
+          obj.quantity = v.quantity;
+        data.push(obj)
+      });
+      if (!this.state) {
+        return
+      } else {
+        this.state = false;
+        this.axios.post('/api/mobileFinishedOrderAdd', { ...data }).then(res => {
+          if (res.code == 200) {
+            this.state = true
+            this.$Message.success(res.msg);
+            this.handleReturn()
+          }
+        })
+      }
+
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.content {
+  height: calc(100% - 5rem);
+  overflow: auto;
+  .item {
+    width: 94%;
+    position: relative;
+    left: 3%;
+    margin: 1.5rem 0;
+    border-radius: 1rem;
+    background-color: #fff;
+    box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+    font-size: 0.8rem;
+    display: flex;
+    flex-wrap: wrap;
+    .add {
+      position: absolute;
+      width: 1.5rem;
+      height: 1.5rem;
+      bottom: -0.5rem;
+      left: -0.5rem;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 1.3rem;
+      border-radius: 50%;
+      box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
+      background: #fff;
+    }
+    .delete {
+      width: 1.5rem;
+      height: 1.5rem;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 1.3rem;
+      position: absolute;
+      top: -0.5rem;
+      right: -0.5rem;
+      border-radius: 50%;
+      box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
+      background: #fff;
+    }
+    .unit {
+      width: 50%;
+      padding: 0.5rem;
+
+      vertical-align: middle;
+      label {
+        width: 40%;
+        text-align: center;
+      }
+    }
+  }
+}
+.footer_btn {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+/deep/.ivu-modal-content {
+  top: -5rem;
+}
+/deep/.ivu-form-item {
+  margin-bottom: 0.5rem;
+}
+</style>

+ 263 - 0
src/views/page/Finish/detail.vue

@@ -0,0 +1,263 @@
+<template>
+  <div>
+    <div class="header">
+      <div class="header_top">
+        <Button
+          type="primary"
+          class="header_btn"
+          ghost
+          @click="handleShow"
+          :icon="is_show ? 'ios-arrow-dropup' : 'ios-arrow-dropdown'"
+        >
+          <div style="margin-right: 0.6rem">
+            {{ is_show ? "收起" : "展开" }}
+          </div></Button
+        >
+        <div style="margin-right: 1rem; color: #66a9f0">王小伟</div>
+      </div>
+      <div class="header_middle">
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+      </div>
+      <div class="header_middle1 ot">
+        <div class="ft">58 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+      </div>
+      <div class="header_footer">
+        <div style="margin-left: 1rem">已完成56/10</div>
+        <div style="margin-right: 1.4rem">已完成10%</div>
+      </div>
+    </div>
+    <div class="bdy">
+      <table>
+        <tr style="height: 2rem">
+          <th style="width: 3rem">派工单号</th>
+          <th style="width: 4rem">产品名称</th>
+          <th style="width: 3rem">规格型号</th>
+          <th style="width: 3rem">已完工数量</th>
+          <th style="width: 3rem">未完工数量</th>
+        </tr>
+        <tr
+          v-for="(item, index) in tableData"
+          :key="index"
+          @click="handleChoose(item, index)"
+          :class="item.is_choose ? 'choose_item' : ''"
+        >
+          <td>
+            {{ item.dispatch_no.toString() }}
+          </td>
+          <td>{{ item.product_title }}</td>
+          <td>100*100*100</td>
+          <td>{{ item.finished_num }}</td>
+          <td>{{ item.un_finished_quantity }}</td>
+        </tr>
+      </table>
+    </div>
+    <div class="footer">
+      <Button
+        type="primary"
+        class="header_btn"
+        style="margin-right: 3rem; height: 2.6rem"
+        @click="handleReturn"
+      >
+        返回</Button
+      >
+      <Button
+        type="primary"
+        class="header_btn"
+        style="margin-left: 3rem; height: 2.6rem"
+        @click="handelGoSure"
+      >
+        确认</Button
+      >
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+      tableData: [],
+      is_show: true,
+      is_use: false,
+
+    }
+  },
+  mounted() {
+    let data = {};
+    if (localStorage.getItem('fyy_target')) {
+      data.target = JSON.parse(localStorage.getItem('fyy_target'));
+    }
+    this.initData(data);
+  },
+  methods: {
+    initData(row) {
+      this.axios.post('/api/finishedOrderList', { ...row, process_id: this.$route.query.id }).then(res => {
+        this.tableData = res.data.data ? res.data.data : [];
+        this.tableData.forEach(v => {
+          v.is_choose = false;
+        })
+      })
+    },
+    handelGoSure() {
+      if (this.tableData.filter(v => v.is_choose).length == 0) {
+        return this.$Message.warning('请先选择数据!')
+      }
+      localStorage.removeItem('fyy_target');
+      let id = this.tableData.map(v => v.id).toString();
+      this.$router.push({ path: '/cms/finish/detailed', query: { id } })
+    },
+    handleReturn() {
+      localStorage.removeItem('fyy_target');
+      this.$router.push('/cms/home');
+    },
+    handleChoose(item, index) {
+      item.is_choose = !item.is_choose;
+      this.tableData.splice(index, 1, item);
+    },
+    handleShow() {
+      this.is_show = !this.is_show;
+      console.log(document.getElementsByClassName('header'))
+      if (this.is_show) {
+        document.getElementsByClassName('header')[0].style = 'height:7rem;overflow:hidden;transition:all .4s;'
+        setTimeout(() => {
+          document.getElementsByClassName('header')[0].style = 'overflow:none;'
+          this.is_use = false;
+        }, 400)
+      } else {
+        this.is_use = true;
+        document.getElementsByClassName('header')[0].style = 'height:2.7rem;overflow:hidden;transition:all .4s;'
+      }
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.header {
+  width: 94%;
+  height: 7rem;
+  // overflow: hidden;
+  // transition: all 0.4s;
+  position: relative;
+  top: 0.5rem;
+  left: 3%;
+  box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  border-radius: 1rem;
+  padding: 0.4rem 0.7rem 0 1rem;
+  background: #fff;
+}
+.header_btn {
+  border-radius: 1rem;
+  padding: 0.1rem;
+  width: 5rem;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.header_top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.ot {
+  position: relative;
+  top: -1.3rem;
+}
+.header_middle1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .ft {
+    font-size: 1.5rem;
+    width: 5rem;
+    text-align: center;
+  }
+}
+.header_middle {
+  position: relative;
+  top: -0.3rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+/deep/ .btn-group > .btn,
+.btn-group-vertical > .btn {
+  background: #ffffff;
+  color: #2c3e50;
+  outline: none;
+  border: none;
+  margin: 0;
+  z-index: 3;
+}
+.header_footer {
+  position: relative;
+  top: -1.7rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  div {
+    font-size: 0.5rem;
+    color: rgb(244, 136, 42);
+  }
+}
+.bdy {
+  width: 94%;
+  height: calc(100% - 18.7rem);
+  overflow: auto;
+  position: relative;
+  top: 1rem;
+  left: 3%;
+}
+
+/deep/td {
+  text-align: center;
+  vertical-align: middle;
+}
+table {
+  border-collapse: collapse; /* 合并边框 */
+  width: 100%; /* 表格宽度 */
+  background: #fff;
+  table-layout: fixed;
+}
+th {
+  font-size: 0.6rem;
+  background: #66b1f4;
+  color: #fff;
+}
+td {
+  font-size: 0.6rem;
+  word-break: break-all;
+}
+td,
+th {
+  vertical-align: middle;
+  text-align: center;
+  border: 0.1rem solid #dddddd; /* 单元格边框样式 */
+  padding: 0.02rem; /* 单元格内边距 */
+}
+.choose_item {
+  background: #c8c8c8;
+}
+.footer {
+  display: flex;
+  justify-content: space-around;
+  width: 100%;
+  position: absolute;
+  bottom: 4.8rem;
+}
+</style>

+ 396 - 0
src/views/page/Finish/detailed.vue

@@ -0,0 +1,396 @@
+<template>
+  <div>
+    <div class="content">
+      <div v-for="(item, index) in list" :key="index" class="item">
+        <div class="add" @click="handleAdd(item, index)">+</div>
+        <div class="delete" @click="handleDelete(index)">x</div>
+        <div class="unit" style="display: flex">
+          <label style="width: 40%">派工单号:</label>
+          <div style="width: 60%">{{ item.dispatch_no }}</div>
+        </div>
+        <div style="display: flex" class="unit">
+          <label style="width: 40%">产品名称:</label>
+          <div style="width: 60%">{{ item.product_title }}</div>
+        </div>
+        <div style="display: flex" class="unit">
+          <label>数量:</label>
+          <Input
+            size="small"
+            placeholder="请输入"
+            style="width: 70%; padding: 0 0 0 0.2rem"
+            v-model="item.quantity"
+            type="number"
+          />
+        </div>
+        <div class="unit">
+          <label>班组:</label>
+          <b-form-select
+            v-model="item.team_id"
+            :options="teamList"
+            style="
+              height: 1.4rem;
+              width: 70%;
+              border: 0.1rem solid;
+              border-radius: 0.6rem;
+              background: #fff;
+            "
+          >
+            <template v-slot:first>
+              <b-form-select-option value="" disabled
+                >请选择班组</b-form-select-option
+              >
+            </template></b-form-select
+          >
+        </div>
+        <div class="unit">
+          <label>人员:</label>
+          <b-form-select
+            v-model="item.employee_id"
+            :options="employeeList"
+            style="
+              height: 1.4rem;
+              width: 70%;
+              border: 0.1rem solid;
+              border-radius: 0.6rem;
+              background: #fff;
+            "
+          >
+            <template v-slot:first>
+              <b-form-select-option value="" disabled
+                >请选择人员</b-form-select-option
+              >
+            </template></b-form-select
+          >
+        </div>
+
+        <div class="unit">
+          <label>设备:</label>
+          <b-form-select
+            v-model="item.equipment_id"
+            :options="equipmentList"
+            style="
+              height: 1.4rem;
+              width: 70%;
+              border: 0.1rem solid;
+              border-radius: 0.6rem;
+              background: #fff;
+            "
+          >
+            <template v-slot:first>
+              <b-form-select-option value="" disabled
+                >请选择设备</b-form-select-option
+              >
+            </template></b-form-select
+          >
+        </div>
+        <div
+          v-for="(_item, _index) in item.break"
+          :key="_index"
+          style="display: flex; align-item: center"
+        >
+          <div style="width: 35%; padding: 0 0.5rem 1rem 0.5rem">
+            <label>不良品原因:</label>
+            <b-form-select
+              v-model="_item.break_id"
+              :options="breakList"
+              style="
+                height: 1.4rem;
+                width: 100%;
+                border: 0.1rem solid;
+                border-radius: 0.6rem;
+                background: #fff;
+              "
+            >
+              <template v-slot:first>
+                <b-form-select-option value="" disabled
+                  >请选择原因</b-form-select-option
+                >
+              </template></b-form-select
+            >
+          </div>
+          <div style="width: 35%; padding: 0 0.5rem 1rem 0.5rem">
+            <label>不良品数量:</label>
+            <Input
+              style="width: 100%"
+              size="small"
+              placeholder="请输入"
+              v-model="_item.break_num"
+              type="number"
+            />
+          </div>
+          <div style="width: 30%; display: flex">
+            <div class="boo" @click="handleBreakAdd(_index, item, index)">
+              +
+            </div>
+            <div class="boo" @click="handleBreakCancel(_index, item, index)">
+              -
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="footer_btn">
+        <b-button
+          variant="primary"
+          style="width: 35%; margin-left: 3%"
+          @click="handleReturn"
+          >返回</b-button
+        >
+        <b-button
+          variant="primary"
+          style="width: 35%; margin-right: 3%"
+          @click="handleSure"
+          >确认</b-button
+        >
+      </div>
+    </div>
+    <!-- <div class="footer">
+      <div>总计:</div>
+      <div class="footer_content">
+        <div>
+          <label>派工单号:</label>
+          <div>123456</div>
+        </div>
+        <div>
+          <label>产品名称:</label>
+          <div>实木板</div>
+        </div>
+        <div>
+          <label>数量:</label>
+          <div>23</div>
+        </div>
+        <div>
+          <label>班组:</label>
+          <div>一班</div>
+        </div>
+        <div>
+          <label>人员:</label>
+          <div>张三</div>
+        </div>
+        <div>
+          <label>设备:</label>
+          <div>一号机</div>
+        </div>
+      </div>
+    </div> -->
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      list: [],
+      email: "",
+      name: "",
+      food: null,
+      checked: [],
+      form: {},
+      teamList: [],
+      employeeList: [],
+      equipmentList: [],
+      state: true,
+      breakList: [
+        { value: 1, text: '碳化' },
+        { value: 2, text: '起泡' },
+      ],
+    }
+  },
+  created() {
+    this.axios.post('/api/finishedOrderDetailsList', { id: this.$route.query.id.split(',') }).then(res => {
+      this.list = res.data.list;
+      this.list.forEach(v => {
+        v.break = [
+          { break_id: '', break_num: 0 }
+        ];
+      })
+    })
+    //获取班组
+    this.axios.post('/api/teamList').then(res => {
+      this.teamList = res.data.data;
+      this.teamList.forEach(v => {
+        v.value = v.id;
+        v.text = v.title;
+      })
+    })
+    //获取人员
+    this.axios.post('/api/employeeList').then(res => {
+      this.employeeList = res.data.data;
+      this.employeeList.forEach(v => {
+        v.value = v.id;
+        v.text = v.emp_name
+      })
+    })
+    //获取设备
+    this.axios.post('/api/equipmentList').then(res => {
+      this.equipmentList = res.data.data;
+      this.equipmentList.forEach(v => {
+        v.value = v.id;
+        v.text = v.title;
+      })
+    })
+  },
+  methods: {
+    handleBreakAdd(_index, item, index) {
+      item.break.splice(_index + 1, 0, {
+        break_id: '',
+        break_num: 0
+      })
+      this.list.splice(index, 1, item);
+    },
+    handleBreakCancel(_index, item, index) {
+      if (_index == 0) {
+        item.break = [{ break_id: '', break_num: 0 }]
+      } else {
+        item.break.splice(_index, 1);
+      }
+      this.list.splice(index, 1, item);
+    },
+    handleReturn() {
+      this.$router.go(-1);
+    },
+    handleDelete(index) {
+      if (this.list.length == 1) {
+        return
+      } else {
+        this.list.splice(index, 1);
+      }
+    },
+    handleAdd(item, index) {
+      if (!item.quantity) {
+        return
+      } else {
+        let copy = JSON.parse(JSON.stringify(item));
+        copy.quantity = Math.floor(item.quantity / 2) + item.quantity % 2;
+        copy.break = [{
+          break_id: '', break_num: 0
+        }]
+        item.quantity = Math.floor(item.quantity / 2);
+        this.list.splice(index, 1, item);
+        this.list.splice(index + 1, 0, copy);
+      }
+
+    },
+    handleSure() {
+      let data = [];
+      this.list.forEach(v => {
+        let obj = {};
+        obj.id = v.id;
+        obj.team_id = v.team_id,
+          obj.finished_id = v.employee_id,
+          obj.equipment_id = v.equipment_id,
+          obj.quantity = v.quantity;
+        data.push(obj)
+      });
+      if (!this.state) {
+        return
+      } else {
+        this.state = false;
+        this.axios.post('/api/mobileFinishedOrderAdd', { ...data }).then(res => {
+          if (res.code == 200) {
+            this.state = true
+            this.$Message.success(res.msg);
+            this.handleReturn()
+          }
+        })
+      }
+
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.content {
+  height: calc(100% - 5rem);
+  overflow: auto;
+  .item {
+    width: 94%;
+    position: relative;
+    left: 3%;
+    margin: 1.5rem 0;
+    border-radius: 1rem;
+    background-color: #fff;
+    box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+    font-size: 0.8rem;
+    display: flex;
+    flex-wrap: wrap;
+    .add {
+      position: absolute;
+      width: 1.5rem;
+      height: 1.5rem;
+      bottom: -0.5rem;
+      left: -0.5rem;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 1.3rem;
+      border-radius: 50%;
+      box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
+      background: #fff;
+    }
+    .delete {
+      width: 1.5rem;
+      height: 1.5rem;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 1.3rem;
+      position: absolute;
+      top: -0.5rem;
+      right: -0.5rem;
+      border-radius: 50%;
+      box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
+      background: #fff;
+    }
+    .unit {
+      width: 50%;
+      padding: 0.5rem;
+      display: flex;
+      align-items: center;
+      label {
+        width: 30%;
+        text-align: right;
+      }
+    }
+  }
+}
+// .footer {
+//   position: absolute;
+//   bottom: 7rem;
+//   height: 3rem;
+
+//   width: 100%;
+//   border-top: 0.2rem solid #8a8888;
+// }
+// .footer_content {
+//   display: flex;
+//   flex-wrap: wrap;
+//   font-size: 0.8rem;
+//   > div {
+//     width: 50%;
+//     display: flex;
+//     label {
+//       width: 45%;
+//       text-align: center;
+//     }
+//     div {
+//       width: 60%;
+//       text-align: center;
+//     }
+//   }
+// }
+.footer_btn {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.boo {
+  font-size: 2rem;
+  border-radius: 50%;
+  width: 2rem;
+  height: 2rem;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  margin: 0.5rem;
+  border: 0.1rem solid;
+}
+</style>

+ 265 - 0
src/views/page/Finish/index.vue

@@ -0,0 +1,265 @@
+<template>
+  <div>
+    <div class="header">
+      <div class="header_top">
+        <Button
+          type="primary"
+          class="header_btn"
+          ghost
+          @click="handleShow"
+          :icon="is_show ? 'ios-arrow-dropup' : 'ios-arrow-dropdown'"
+        >
+          <div style="margin-right: 0.6rem">
+            {{ is_show ? "收起" : "展开" }}
+          </div></Button
+        >
+        <div style="margin-right: 1rem; color: #66a9f0">王小伟</div>
+      </div>
+      <div class="header_middle">
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+      </div>
+      <div class="header_middle1 ot">
+        <div class="ft">58 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+      </div>
+      <div class="header_footer">
+        <div style="margin-left: 1rem">已完成56/10</div>
+        <div style="margin-right: 1.4rem">已完成10%</div>
+      </div>
+    </div>
+    <div class="bdy">
+      <div style="font-size: 1.3rem; font-weight: bold">工序</div>
+      <div>
+        <b-form-select
+          v-model="selected"
+          :options="options"
+          style="
+            margin-top: 1rem;
+            height: 3.4rem;
+            width: 100%;
+            font-size: 1.5rem;
+            border-radius: 0.6rem;
+            background: #fff;
+            border: 0.1rem solid;
+          "
+        >
+          <template v-slot:first>
+            <b-form-select-option value="" disabled
+              >请选择工序</b-form-select-option
+            >
+          </template></b-form-select
+        >
+      </div>
+      <div class="bdy_btn">
+        <Button
+          type="primary"
+          class="header_btn"
+          style="margin-right: 3rem; height: 2.6rem"
+          @click="handleReturn"
+        >
+          返回</Button
+        >
+        <Button
+          type="primary"
+          class="header_btn"
+          style="margin-left: 3rem; height: 2.6rem"
+          @click="handelGoSure"
+        >
+          确认</Button
+        >
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import $ from "jquery";
+export default {
+  data() {
+    return {
+      is_show: true,
+      is_use: false,
+      selected: '',
+      options: [
+
+
+      ],
+
+    }
+  },
+  created() {
+    let data = {
+      debugFlag: true,
+      developmentSystemId: null,
+      direction: "DESC",
+      dynamicFormCode: "process_dossier",
+      fromClientType: "pc",
+      number: 0,
+      property: "id",
+      rules: [],
+      size: 15,
+      sorts: [],
+      specialConditions: []
+    }
+    this.axios.post('/api/module-data/process_dossier/page', { ...data }).then(res => {
+      this.options = res.data.data;
+
+      this.options.forEach(v => {
+        v.value = v.id;
+        v.text = v.title;
+      })
+
+    })
+    // let that = this;
+    // let url = JSON.parse(localStorage.getItem('mobile_url'));
+
+    // $.ajax({
+    //   type: "post",
+    //   url: `${url}/api/module-data/process_dossier/page`,
+    //   data: { ...data },
+    //   dataType: "json",
+    //   beforeSend: function (xhr) {
+    //     xhr.setRequestHeader('Authorization', 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiYXV0aCI6IlJPTEVfSU5ORVJfVVNFUixST0xFX0FETUlOIiwidG9rZW5JZCI6IjM1IiwiZXhwIjoxNjk0MjM3NzIyfQ.aO1_RGWVxXygefwuUg_au3ys71zc2KuIbxZNWgTBeLRK9JVEqQZeza4X1gtoA8_BxoKZUuaPnTP9gUrEGgF3UQ');
+    //     xhr.setRequestHeader('Content-Sign', 'b21779e9365ed84e4dd382ccdacc6d51');
+    //   },
+    //   timeout: 5000,
+    //   success: function (res) {
+    //     if (res.code == 200) {
+    //       that.$Message.success(res.msg);
+    //     }
+
+    //   },
+    //   error: function () {
+
+    //   }
+    // });
+  },
+  methods: {
+    handelGoSure() {
+      if (!this.selected) {
+        return this.$Message.warning('请先选择工序!')
+      }
+      this.$router.push({ path: '/cms/finish/detail', query: { id: this.selected } })
+    },
+    handleReturn() {
+      this.$router.go(-1);
+    },
+    handleShow() {
+      this.is_show = !this.is_show;
+      console.log(document.getElementsByClassName('header'))
+      if (this.is_show) {
+        document.getElementsByClassName('header')[0].style = 'height:7rem;overflow:hidden;transition:all .4s;'
+        setTimeout(() => {
+          document.getElementsByClassName('header')[0].style = 'overflow:none;'
+          this.is_use = false;
+        }, 400)
+      } else {
+        this.is_use = true;
+        document.getElementsByClassName('header')[0].style = 'height:2.7rem;overflow:hidden;transition:all .4s;'
+      }
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.header {
+  width: 94%;
+  height: 7rem;
+  // overflow: hidden;
+  // transition: all 0.4s;
+  position: relative;
+  top: 0.5rem;
+  left: 3%;
+  box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  border-radius: 1rem;
+  padding: 0.4rem 0.7rem 0 1rem;
+  background: #fff;
+}
+.header_btn {
+  border-radius: 1rem;
+  padding: 0.1rem;
+  width: 5rem;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.header_top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.ot {
+  position: relative;
+  top: -1.3rem;
+}
+.header_middle1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .ft {
+    font-size: 1.5rem;
+    width: 5rem;
+    text-align: center;
+  }
+}
+.header_middle {
+  position: relative;
+  top: -0.3rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+/deep/ .btn-group > .btn,
+.btn-group-vertical > .btn {
+  background: #ffffff;
+  color: #2c3e50;
+  outline: none;
+  border: none;
+  margin: 0;
+  z-index: 3;
+}
+.header_footer {
+  position: relative;
+  top: -1.7rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  div {
+    font-size: 0.5rem;
+    color: rgb(244, 136, 42);
+  }
+}
+.bdy {
+  padding: 1rem;
+  position: relative;
+  width: 94%;
+
+  top: 3rem;
+  height: 14rem;
+  border-radius: 1rem;
+  left: 3%;
+  box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  background: #fff;
+}
+.bdy_btn {
+  margin-top: 3rem;
+
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+</style>

+ 261 - 0
src/views/page/Home.vue

@@ -0,0 +1,261 @@
+<template>
+  <div>
+    <div class="header">
+      <div class="header_top">
+        <Button
+          type="primary"
+          class="header_btn"
+          ghost
+          @click="handleShow"
+          :icon="is_show ? 'ios-arrow-dropup' : 'ios-arrow-dropdown'"
+        >
+          <div style="margin-right: 0.6rem">
+            {{ is_show ? "收起" : "展开" }}
+          </div></Button
+        >
+        <div style="margin-right: 1rem; color: #66a9f0">王小伟</div>
+      </div>
+      <div class="header_middle">
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+      </div>
+      <div class="header_middle1 ot">
+        <div class="ft">58 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+      </div>
+      <div class="header_footer">
+        <div style="margin-left: 1rem">已完成56/10</div>
+        <div style="margin-right: 1.4rem">已完成10%</div>
+      </div>
+    </div>
+    <div class="bdy">
+      <div class="item" @click="handleFinish">
+        <svg
+          t="1688029854983"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="9681"
+          width="130"
+          height="130"
+        >
+          <path
+            d="M713.728 415.936l-47.722667-42.794667 85.482667-85.482666-45.248-45.248-87.957333 87.936-47.701334-42.794667 90.389334-90.389333a64 64 0 0 1 90.517333 0l45.248 45.226666a64 64 0 0 1 0 90.538667l-83.008 82.986667zM505.6 624.064L283.861333 845.802667a64 64 0 0 1-90.517333 0l-45.248-45.248a64 64 0 0 1 0-90.517334l235.456-235.456-58.282667-71.424a64 64 0 0 1 4.266667-85.76l99.136-99.114666c23.253333-23.253333 64.832-20.608 90.282667 0.213333l338.133333 265.28c30.4 30.4 21.909333 110.826667-61.866667 194.581333-83.477333 83.498667-164.181333 92.245333-194.581333 61.866667-0.597333-0.597333-32.277333-39.317333-95.04-116.16z m-81.365333-99.669333L193.344 755.306667l45.248 45.226666 226.325333-226.304-40.682666-49.834666z m55.210666-255.530667l-1.024-0.832a12.629333 12.629333 0 0 0-6.826666-2.176l-96.789334 96.789333c105.088 128.746667 249.088 305.002667 268.821334 329.472 4.288 0.426667 10.624-0.085333 18.496-2.133333 25.429333-6.506667 56.405333-25.408 87.850666-56.874667 31.573333-31.573333 50.496-62.528 56.981334-87.893333 1.92-7.466667 2.474667-13.504 2.133333-17.749333L479.445333 268.864z"
+            fill="#5499fe"
+            p-id="9682"
+          ></path>
+        </svg>
+        <div class="ft_by">完工</div>
+      </div>
+      <div class="item" @click="handleDispatch">
+        <svg
+          t="1688030012912"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="10881"
+          width="130"
+          height="130"
+        >
+          <path
+            d="M968.9 351.8l-57.5-52.2c-31-28.1-71.1-43.6-112.9-43.6L640 256l0-80.5c0-62-50.5-112.5-112.5-112.5l-415 0c-62 0-112.5 50.5-112.5 112.5l0 720.5 128 0c0 70.6 57.4 128 128 128s128-57.4 128-128l192 0 64 0c0 70.6 57.4 128 128 128s128-57.4 128-128l128 0L1024 476.2C1024 428.9 1003.9 383.6 968.9 351.8zM925.9 399.2c21.7 19.7 34.1 47.7 34.1 77l0 99.8-128 0L832 325.5c13.3 4.5 25.7 11.8 36.4 21.5L925.9 399.2zM256 960c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64S291.3 960 256 960zM576 832 366.8 832c-22.2-38.2-63.5-64-110.8-64s-88.7 25.8-110.8 64L64 832l0-656.5c0-26.7 21.8-48.5 48.5-48.5l415 0c26.7 0 48.5 21.8 48.5 48.5l0 80.5L576 832zM768 960c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64S803.3 960 768 960zM878.8 832c-22.2-38.2-63.5-64-110.8-64s-88.7 25.8-110.8 64L640 832l0-512 128 0 0 320 192 0 0 192L878.8 832z"
+            p-id="10882"
+            fill="#d57952"
+          ></path>
+        </svg>
+        <div class="ft_by">发货</div>
+      </div>
+      <!-- <div class="item">
+        <svg
+          t="1688030140909"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="12365"
+          width="130"
+          height="130"
+        >
+          <path
+            d="M908.31 487.83l-363.3-371.72c-24.92-25.5-65.43-25.5-90.35 0l-3.51 3.6c-21.42 21.91-24.42 55.58-9.03 80.8L337.49 307.58c-7.84 8.02-7.84 21.08 0 29.1 3.92 4.02 9.04 6.06 14.17 6.06 5.13 0 10.25-1.95 14.27-5.96l103.46-105.95 189.89 194.48v176.55c0 28.04 19.63 51.5 45.54 56.85l-191.16 195.6c-19.9 20.36-46.33 31.57-74.47 31.57s-54.57-11.21-74.47-31.57l-177.88-182c-41.1-41.95-41.1-110.33 0-152.4l11.86-12.13c7.83-8.03 7.83-21.08 0-29.1a19.816 19.816 0 0 0-28.44 0l-11.86 12.13c-56.78 58.1-56.78 152.49 0 210.59l177.88 182.01c27.53 28.08 64.01 43.6 102.91 43.6s75.37-15.42 102.91-43.6l189.34-193.73v4.01c0 16.86 6.33 32.6 17.99 44.52 11.56 11.82 27.04 18.41 43.52 18.41 16.49 0 31.86-6.59 43.52-18.41 11.55-11.93 17.99-27.76 17.99-44.52V602.9c18.19 1.43 36.68-5.04 50.35-19.03l3.52-3.6c24.9-25.5 24.9-66.93-0.02-92.44z m-28.54 63.34l-3.52 3.6c-8.14 8.33-20.91 9.46-30.35 2.67-6.13-4.42-14.17-4.93-20.8-1.43a20.816 20.816 0 0 0-10.86 18.3v119.38c0 5.87-2.21 11.31-6.23 15.43-4.02 4.11-9.35 6.38-15.08 6.38s-11.05-2.26-15.08-6.48c-4.02-4.11-6.23-9.57-6.23-15.42V641c0.03-0.69 0.03-1.37 0-2.06v-27.81c0-10.28-7.54-19.03-17.59-20.36-10.05-1.33-19.49 5.24-22.01 15.22-0.7 2.88-2.2 5.56-4.32 7.71-3.11 3.19-7.24 4.94-11.66 4.94-9.04 0-16.48-7.51-16.48-16.86v-185.1c0-5.45-2.11-10.59-5.93-14.49L484.62 188.3c-0.32-0.38-0.65-0.77-1-1.13-0.35-0.36-0.73-0.69-1.1-1.02l-2.92-2.99c-9.24-9.46-9.24-24.88 0-34.34l3.52-3.6a23.402 23.402 0 0 1 33.57 0l363.09 371.62c9.23 9.45 9.23 24.88-0.01 34.33z m-380.38-120.4c11.15 0 20.1-9.25 20.1-20.56 0-11.31-9.04-20.57-20.1-20.57H117.11c-11.06 0-20.11 9.25-20.11 20.57 0 11.31 9.05 20.56 20.11 20.56h382.28z"
+            fill="#a8a343"
+            p-id="12366"
+          ></path>
+        </svg>
+        <div class="ft_by">返工</div>
+      </div> -->
+      <div class="item" @click="handlePackage">
+        <svg
+          t="1688182715452"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="2523"
+          id="mx_n_1688182715453"
+          width="130"
+          height="130"
+        >
+          <path
+            d="M913.28 231.296L549.28 14.208a72.544 72.544 0 0 0-74.56-0.032L110.72 231.296a73.024 73.024 0 0 0-35.488 62.432v436.544a73.056 73.056 0 0 0 35.488 62.464l364.032 217.12a72.704 72.704 0 0 0 74.496 0l364.032-217.12a73.024 73.024 0 0 0 35.488-62.464V293.728a73.056 73.056 0 0 0-35.488-62.432zM507.52 69.12a8.736 8.736 0 0 1 8.96 0l343.36 204.8-143.04 82.592-344.096-206.944z m1.92 407.104L161.696 275.424l148.672-88.672 343.104 206.336zM143.52 737.76a8.768 8.768 0 0 1-4.256-7.488V336.384l340.48 196.576v405.344z m737.024 0L543.68 938.624V530.368L884.8 333.44v396.832a8.736 8.736 0 0 1-4.256 7.488z"
+            fill="#58b125"
+            p-id="2524"
+          ></path>
+          <path
+            d="M767.072 483.04l-95.744 55.296a32 32 0 0 0 32 55.424l95.744-55.296a32 32 0 1 0-32-55.424z"
+            fill="#58b125"
+            p-id="2525"
+          ></path>
+        </svg>
+        <div class="ft_by">包装</div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      is_show: true,
+      is_use: false,
+    }
+  },
+  mounted () {
+    console.log(123)
+  },
+  methods: {
+    handleFinish() {
+      this.$router.push('/cms/finish')
+    },
+    handlePackage() {
+      this.$router.push('/cms/Package/detail')
+    },
+    handleDispatch() {
+      this.$router.push('/cms/dispatch/detail')
+    },
+    handleShow() {
+      this.is_show = !this.is_show;
+      console.log(document.getElementsByClassName('header'))
+      if (this.is_show) {
+        document.getElementsByClassName('header')[0].style = 'height:7rem;overflow:hidden;transition:all .4s;'
+        setTimeout(() => {
+          document.getElementsByClassName('header')[0].style = 'overflow:none;'
+          this.is_use = false;
+        }, 400)
+      } else {
+        this.is_use = true;
+        document.getElementsByClassName('header')[0].style = 'height:2.7rem;overflow:hidden;transition:all .4s;'
+      }
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.header {
+  width: 94%;
+  height: 7rem;
+  // overflow: hidden;
+  // transition: all 0.4s;
+  position: relative;
+  top: 0.5rem;
+  left: 3%;
+  box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  border-radius: 1rem;
+  padding: 0.4rem 0.7rem 0 1rem;
+  background: #fff;
+}
+.header_btn {
+  border-radius: 1rem;
+  padding: 0.1rem;
+  width: 5rem;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.header_top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.ot {
+  position: relative;
+  top: -1.3rem;
+}
+.header_middle1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .ft {
+    font-size: 1.5rem;
+    width: 5rem;
+    text-align: center;
+  }
+}
+.header_middle {
+  position: relative;
+  top: -0.3rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+/deep/ .btn-group > .btn,
+.btn-group-vertical > .btn {
+  background: #ffffff;
+  color: #2c3e50;
+  outline: none;
+  border: none;
+  margin: 0;
+  z-index: 3;
+}
+.header_footer {
+  position: relative;
+  top: -1.7rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  div {
+    font-size: 0.5rem;
+    color: rgb(244, 136, 42);
+  }
+}
+.bdy {
+  display: flex;
+  flex-wrap: wrap;
+  width: 94%;
+  position: relative;
+  top: 1.4rem;
+  left: 3%;
+  height: 24rem;
+  .item {
+    width: 46%;
+    margin: 2%;
+    text-align: center;
+    height: 45%;
+    border-radius: 1rem;
+    background: #fff;
+    box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  }
+}
+.ft_by {
+  position: relative;
+  top: 0.5rem;
+  font-size: 1.4rem;
+}
+</style>

+ 323 - 0
src/views/page/Mine.vue

@@ -0,0 +1,323 @@
+<template>
+  <div>
+    <div class="main_header">
+      <div class="header">
+        <div class="img_content">
+          <img src="../../assets/FG-01C.png" alt="" />
+        </div>
+        <div class="info_content">
+          <div>王小伟</div>
+          <div style="font-size: 0.9rem; margin-top: 0.5rem">
+            <svg
+              t="1688184922513"
+              class="icon"
+              viewBox="0 0 1024 1024"
+              version="1.1"
+              xmlns="http://www.w3.org/2000/svg"
+              p-id="5827"
+              width="20"
+              height="20"
+            >
+              <path
+                d="M512 552.128c-140.352 0-254.528-114.176-254.528-254.528S371.648 43.136 512 43.136c140.288 0 254.528 114.176 254.528 254.528S652.288 552.128 512 552.128z m0-444.992c-105.024 0-190.528 85.44-190.528 190.528S406.976 488.128 512 488.128c105.088 0 190.528-85.44 190.528-190.528S617.088 107.136 512 107.136zM525.376 980.864a32.064 32.064 0 0 1-25.216-12.224L424.96 872.512a32.32 32.32 0 0 1-6.464-24.704l31.68-204.032a32 32 0 0 1 31.616-27.072h79.232a32 32 0 0 1 31.616 27.136l31.68 204.032a32 32 0 0 1-5.44 23.232l-67.264 96.128a32.128 32.128 0 0 1-25.344 13.632h-0.896z m-41.472-136.896l40.064 51.2 35.136-50.176-25.472-164.224h-24.384l-25.344 163.2z"
+                fill="#515151"
+                p-id="5828"
+              ></path>
+              <path
+                d="M957.824 972.288a32 32 0 0 1-31.872-35.328 416.064 416.064 0 0 0-279.872-436.544 31.872 31.872 0 0 1-20.032-40.512 31.872 31.872 0 0 1 40.64-19.968 479.936 479.936 0 0 1 322.88 503.744 31.936 31.936 0 0 1-31.744 28.608zM66.24 972.288a32 32 0 0 1-31.808-28.672 480.512 480.512 0 0 1 322.688-503.68 32 32 0 0 1 20.608 60.544 416 416 0 0 0-279.616 436.416 32 32 0 0 1-31.872 35.392z"
+                fill="#515151"
+                p-id="5829"
+              ></path>
+            </svg>
+            管理员
+          </div>
+        </div>
+      </div>
+    </div>
+    <!-- 工厂包装 -->
+    <div class="item">
+      <div class="item_icon">
+        <svg
+          t="1688186942415"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="10776"
+          width="36"
+          height="36"
+        >
+          <path
+            d="M598.381714 165.546667v689.444571h50.907429v-0.975238h117.443047V448.853333l-117.443047-41.350095v-77.507048l165.229714 58.148572c14.60419 9.48419 23.844571 25.185524 25.185524 42.374095l0.170667 4.33981-0.024381 420.10819h55.905523v73.142857H134.095238v-73.142857h55.612952V295.570286c0-19.21219 9.898667-37.059048 26.209524-47.274667l297.20381-130.023619c37.10781-23.186286 85.26019 3.486476 85.26019 47.250286z m-73.142857 27.257904l-262.387809 114.785524v546.401524h262.387809V548.717714l-0.487619 0.219429v-33.840762l0.487619 1.145905V375.466667l-0.487619 0.219428v-33.743238l0.487619 1.121524V192.804571zM475.672381 490.105905v79.11619l-163.157333 67.388953v-79.140572l163.157333-67.364571z m0-172.982857v79.457523l-163.157333 69.436953v-79.481905l163.157333-69.412571z"
+            p-id="10777"
+            fill="#515151"
+          ></path>
+        </svg>
+      </div>
+      <div class="item_title">
+        工厂类型
+        <svg
+          t="1688183626202"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="3994"
+          width="25"
+          height="25"
+        >
+          <path
+            d="M384.32 797.512a30.088 30.088 0 0 1-21.288-51.392L597.144 512 363.032 277.816a30.088 30.088 0 0 1 0-42.568 30.088 30.088 0 0 1 42.568 0l255.392 255.464a30.088 30.088 0 0 1 0 42.568L405.6 788.696a30.04 30.04 0 0 1-21.28 8.816z"
+            fill="#888888"
+            p-id="3995"
+          ></path>
+        </svg>
+      </div>
+    </div>
+    <div class="item" style="margin-bottom: 0.5rem">
+      <div class="item_icon">
+        <svg
+          t="1688183455900"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="2856"
+          width="36"
+          height="36"
+        >
+          <path
+            d="M913.28 231.296L549.28 14.208a72.544 72.544 0 0 0-74.56-0.032L110.72 231.296a73.024 73.024 0 0 0-35.488 62.432v436.544a73.056 73.056 0 0 0 35.488 62.464l364.032 217.12a72.704 72.704 0 0 0 74.496 0l364.032-217.12a73.024 73.024 0 0 0 35.488-62.464V293.728a73.056 73.056 0 0 0-35.488-62.432zM507.52 69.12a8.736 8.736 0 0 1 8.96 0l343.36 204.8-143.04 82.592-344.096-206.944z m1.92 407.104L161.696 275.424l148.672-88.672 343.104 206.336zM143.52 737.76a8.768 8.768 0 0 1-4.256-7.488V336.384l340.48 196.576v405.344z m737.024 0L543.68 938.624V530.368L884.8 333.44v396.832a8.736 8.736 0 0 1-4.256 7.488z"
+            fill="#575869"
+            p-id="2857"
+          ></path>
+          <path
+            d="M767.072 483.04l-95.744 55.296a32 32 0 0 0 32 55.424l95.744-55.296a32 32 0 1 0-32-55.424z"
+            fill="#575869"
+            p-id="2858"
+          ></path>
+        </svg>
+      </div>
+      <div class="item_title" style="border: none">
+        包装列表
+        <svg
+          t="1688183626202"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="3994"
+          width="25"
+          height="25"
+        >
+          <path
+            d="M384.32 797.512a30.088 30.088 0 0 1-21.288-51.392L597.144 512 363.032 277.816a30.088 30.088 0 0 1 0-42.568 30.088 30.088 0 0 1 42.568 0l255.392 255.464a30.088 30.088 0 0 1 0 42.568L405.6 788.696a30.04 30.04 0 0 1-21.28 8.816z"
+            fill="#888888"
+            p-id="3995"
+          ></path>
+        </svg>
+      </div>
+    </div>
+    <!-- 运输安装 -->
+    <div class="item">
+      <div class="item_icon">
+        <svg
+          t="1688186876602"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="9479"
+          width="40"
+          height="40"
+        >
+          <path
+            d="M1000.177 646.279l-23.146-136.962c-1.431-46.319-39.94-83.62-87.076-83.62H878.47L836.165 342.3c-9.888-19.522-29.717-31.627-51.74-31.627H627.043V281.88c0-31.684-25.813-57.498-57.527-57.498h-402.67c-31.714 0-57.526 25.814-57.526 57.498v57.554h57.527V281.88h402.669V655.8H421.628c-12.852-49.464-57.497-86.26-110.965-86.26s-98.118 36.796-110.968 86.26h-32.848v-86.26H109.32v143.818h90.374c12.851 49.462 57.5 86.261 110.968 86.261 53.466 0 98.113-36.799 110.965-86.261h267.015c12.864 49.462 57.526 86.261 110.98 86.261 53.453 0 98.114-36.799 110.977-86.261h32.416c17.162 0 33.341-7.501 44.38-20.563 10.93-12.893 15.566-29.86 12.782-46.516z m-689.514 95.839c-31.712 0-57.527-25.84-57.527-57.553s25.815-57.525 57.527-57.525c31.71 0 57.527 25.813 57.527 57.525s-25.816 57.553-57.527 57.553z m474.211-373.78l29.101 57.359h-71.88v-57.414l42.78 0.055z m14.75 373.78c-31.715 0-57.528-25.84-57.528-57.553s25.813-57.525 57.527-57.525c31.712 0 57.527 25.813 57.527 57.525s-25.815 57.553-57.527 57.553zM910.601 655.8c-12.864-49.465-57.524-86.262-110.979-86.262-53.453 0-98.115 36.797-110.98 86.262h-61.6V396.905l57.528 0.029v28.763c0 31.712 25.815 57.554 57.526 57.554h147.86c16.32 0 29.578 12.864 29.578 28.735L943.017 655.8h-32.415z"
+            p-id="9480"
+            fill="#515151"
+          ></path>
+          <path
+            d="M23.032 368.17h230.104v57.527H23.032z m28.763 115.081h230.103v57.498H51.795z"
+            p-id="9481"
+            fill="#515151"
+          ></path>
+        </svg>
+      </div>
+      <div class="item_title">
+        运输列表
+        <svg
+          t="1688183626202"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="3994"
+          width="25"
+          height="25"
+        >
+          <path
+            d="M384.32 797.512a30.088 30.088 0 0 1-21.288-51.392L597.144 512 363.032 277.816a30.088 30.088 0 0 1 0-42.568 30.088 30.088 0 0 1 42.568 0l255.392 255.464a30.088 30.088 0 0 1 0 42.568L405.6 788.696a30.04 30.04 0 0 1-21.28 8.816z"
+            fill="#888888"
+            p-id="3995"
+          ></path>
+        </svg>
+      </div>
+    </div>
+    <div class="item">
+      <div class="item_icon">
+        <svg
+          t="1688186505260"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="8343"
+          width="36"
+          height="36"
+        >
+          <path
+            d="M313.6 928c-6.4 0-10.666667-2.133333-14.933333-6.4-8.533333-8.533333-8.533333-21.333333 0-29.866667l61.866666-61.866666 12.8 4.266666c134.4 55.466667 290.133333 23.466667 392.533334-78.933333 93.866667-93.866667 128-232.533333 91.733333-360.533333l-187.733333 187.733333-192-51.2L426.666667 341.333333l187.733333-187.733333c-128-38.4-266.666667-4.266667-362.666667 89.6C149.333333 345.6 117.333333 501.333333 172.8 635.733333l4.266667 12.8-61.866667 61.866667c-8.533333 8.533333-21.333333 8.533333-29.866667 0s-8.533333-21.333333 0-29.866667l42.666667-42.666666C74.666667 490.666667 110.933333 326.4 221.866667 213.333333 337.066667 98.133333 509.866667 64 661.333333 125.866667l29.866667 12.8-217.6 215.466666 38.4 145.066667 145.066667 38.4L874.666667 320l12.8 29.866667c59.733333 151.466667 25.6 322.133333-89.6 437.333333-113.066667 113.066667-277.333333 149.333333-426.666667 93.866667l-42.666667 42.666666c-4.266667 4.266667-10.666667 4.266667-14.933333 4.266667z"
+            fill="#666666"
+            p-id="8344"
+          ></path>
+        </svg>
+      </div>
+      <div class="item_title" style="border: none">
+        安装信息
+        <svg
+          t="1688183626202"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="3994"
+          width="25"
+          height="25"
+        >
+          <path
+            d="M384.32 797.512a30.088 30.088 0 0 1-21.288-51.392L597.144 512 363.032 277.816a30.088 30.088 0 0 1 0-42.568 30.088 30.088 0 0 1 42.568 0l255.392 255.464a30.088 30.088 0 0 1 0 42.568L405.6 788.696a30.04 30.04 0 0 1-21.28 8.816z"
+            fill="#888888"
+            p-id="3995"
+          ></path>
+        </svg>
+      </div>
+    </div>
+
+    <!-- //版本信息 -->
+    <div class="item" style="margin-top: 0.5rem">
+      <div class="item_icon">
+        <svg
+          t="1688186357382"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="7252"
+          width="36"
+          height="36"
+        >
+          <path
+            d="M877.35808 696.4992a23.04 23.04 0 0 1 22.38464-40.27904l29.44 16.36352c37.7856 20.992 50.0992 67.28704 26.49088 102.58432a76.42624 76.42624 0 0 1-26.48576 24.2176l-378.33728 210.23744c-24.7296 13.7472-55.5264 13.7472-80.256 0L92.25728 799.3856c-37.7856-20.992-50.09408-67.28704-26.48576-102.58432a76.42624 76.42624 0 0 1 26.48576-24.21248l29.83424-16.57856a23.04 23.04 0 0 1 22.37952 40.27904l-29.82912 16.57856a30.38208 30.38208 0 0 0-10.56768 9.55392c-8.35072 12.48768-4.08064 28.54912 10.56768 36.68992l378.33216 210.24256c10.81344 6.00576 24.6784 6.00576 35.49184 0l378.33728-210.24256a30.38208 30.38208 0 0 0 10.56768-9.55904c8.35072-12.48768 4.08064-28.54912-10.56768-36.6848l-29.44512-16.36352z m-2.432-219.21792a23.04 23.04 0 0 1 22.37952-40.27904l31.88224 17.7152c37.78048 20.992 50.09408 67.28704 26.48576 102.58432a76.42624 76.42624 0 0 1-26.48576 24.2176l-378.33728 210.23744c-24.7296 13.74208-55.5264 13.74208-80.256 0l-378.33728-210.24256c-37.7856-20.992-50.09408-67.28704-26.48576-102.58432a76.42624 76.42624 0 0 1 26.48576-24.2176l31.98976-17.77152a23.04 23.04 0 1 1 22.38464 40.27904l-31.98976 17.77664a30.38208 30.38208 0 0 0-10.56768 9.55392c-8.35072 12.48768-4.08064 28.54912 10.56768 36.6848l378.33216 210.24256c10.81344 6.01088 24.6784 6.01088 35.49184 0l378.33728-210.24256a30.38208 30.38208 0 0 0 10.56768-9.55392c8.35072-12.48768 4.08064-28.54912-10.56768-36.6848l-31.87712-17.7152z m-350.52544-415.18592a28.16 28.16 0 0 0-27.35616 0L117.32992 273.1008a28.16 28.16 0 0 0 0 49.2288l379.71456 211.01056a28.16 28.16 0 0 0 27.35616 0l379.71456-211.01056a28.16 28.16 0 0 0 0-49.2288l-379.71456-211.00544z m402.0992 170.7264c35.84 19.9168 48.7424 65.11616 28.83072 100.95616a74.24 74.24 0 0 1-28.83072 28.83072l-379.71456 211.01056a74.24 74.24 0 0 1-72.12544 0L94.94528 362.60864c-35.84-19.9168-48.74752-65.11616-28.83072-100.95104a74.24 74.24 0 0 1 28.8256-28.83584L474.66496 21.81632a74.24 74.24 0 0 1 72.12544 0l379.71456 211.00544z"
+            fill="#515151"
+            p-id="7253"
+          ></path>
+        </svg>
+      </div>
+      <div class="item_title" style="border: none">
+        版本信息
+        <svg
+          t="1688183626202"
+          class="icon"
+          viewBox="0 0 1024 1024"
+          version="1.1"
+          xmlns="http://www.w3.org/2000/svg"
+          p-id="3994"
+          width="25"
+          height="25"
+        >
+          <path
+            d="M384.32 797.512a30.088 30.088 0 0 1-21.288-51.392L597.144 512 363.032 277.816a30.088 30.088 0 0 1 0-42.568 30.088 30.088 0 0 1 42.568 0l255.392 255.464a30.088 30.088 0 0 1 0 42.568L405.6 788.696a30.04 30.04 0 0 1-21.28 8.816z"
+            fill="#888888"
+            p-id="3995"
+          ></path>
+        </svg>
+      </div>
+    </div>
+    <div class="return_item" @click="handleReturn">
+      <div>退出</div>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+    }
+  },
+  methods: {
+    handleReturn() {
+      localStorage.removeItem('mobile_token');
+      this.$router.push('/')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  background: #fff;
+}
+.return_item {
+  text-align: center;
+  background: #fff;
+  margin-top: 1.5rem;
+  div {
+    font-size: 1.2rem;
+    padding: 1rem 0;
+    font-weight: bold;
+  }
+}
+.item_icon {
+  width: 20%;
+  text-align: center;
+}
+.item_title {
+  font-size: 1rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: 80%;
+  border-bottom: 0.1rem solid #d8d5d5;
+  padding: 1rem 0;
+}
+.img_content {
+  width: 5rem;
+  border-radius: 50%;
+
+  overflow: hidden;
+  margin: 1.5rem;
+  img {
+    max-height: 5rem;
+    max-width: 5rem;
+  }
+}
+.info_content {
+  width: 70%;
+  div {
+    font-size: 1.8rem;
+    font-weight: bold;
+  }
+}
+.main_header {
+  background: #fff;
+  margin-bottom: 2rem;
+}
+.header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+</style>

+ 263 - 0
src/views/page/Package/detail.vue

@@ -0,0 +1,263 @@
+<template>
+  <div>
+    <div class="header">
+      <div class="header_top">
+        <Button
+          type="primary"
+          class="header_btn"
+          ghost
+          @click="handleShow"
+          :icon="is_show ? 'ios-arrow-dropup' : 'ios-arrow-dropdown'"
+        >
+          <div style="margin-right: 0.6rem">
+            {{ is_show ? "收起" : "展开" }}
+          </div></Button
+        >
+        <div style="margin-right: 1rem; color: #66a9f0">王小伟</div>
+      </div>
+      <div class="header_middle">
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+        <b-dropdown size="sm" text="Large" class="m-2" :disabled="is_use">
+          <b-dropdown-item-button>Action</b-dropdown-item-button>
+          <b-dropdown-item-button>Another action</b-dropdown-item-button>
+          <b-dropdown-item-button>Something else here</b-dropdown-item-button>
+        </b-dropdown>
+      </div>
+      <div class="header_middle1 ot">
+        <div class="ft">58 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+        <div class="ft">12 &nbsp;</div>
+      </div>
+      <div class="header_footer">
+        <div style="margin-left: 1rem">已完成56/10</div>
+        <div style="margin-right: 1.4rem">已完成10%</div>
+      </div>
+    </div>
+    <div class="bdy">
+      <table>
+        <tr style="height: 2rem">
+          <th style="width: 3rem">销售订单号</th>
+          <th style="width: 4rem">产品名称</th>
+          <th style="width: 3rem">规格型号</th>
+          <th style="width: 3rem">已完工数量</th>
+          <th style="width: 3rem">未完工数量</th>
+        </tr>
+        <tr
+          v-for="(item, index) in tableData"
+          :key="index"
+          @click="handleChoose(item, index)"
+          :class="item.is_choose ? 'choose_item' : ''"
+        >
+          <td>
+            {{ item.dispatch_no.toString() }}
+          </td>
+          <td>{{ item.product_title }}</td>
+          <td>100*100*100</td>
+          <td>{{ item.finished_num }}</td>
+          <td>{{ item.un_finished_quantity }}</td>
+        </tr>
+      </table>
+    </div>
+    <div class="footer">
+      <Button
+        type="primary"
+        class="header_btn"
+        style="margin-right: 3rem; height: 2.6rem"
+        @click="handleReturn"
+      >
+        返回</Button
+      >
+      <Button
+        type="primary"
+        class="header_btn"
+        style="margin-left: 3rem; height: 2.6rem"
+        @click="handelGoSure"
+      >
+        确认</Button
+      >
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+
+      tableData: [],
+      is_show: true,
+      is_use: false,
+
+    }
+  },
+  mounted() {
+    let data = {};
+    if (localStorage.getItem('fyy_target')) {
+      data.target = JSON.parse(localStorage.getItem('fyy_target'));
+    }
+    this.initData(data);
+  },
+  methods: {
+    initData(row) {
+      this.axios.post('/api/finishedOrderList', { ...row, process_id: [9] }).then(res => {
+        this.tableData = res.data.data ? res.data.data : [];
+        this.tableData.forEach(v => {
+          v.is_choose = false;
+        })
+      })
+    },
+    handelGoSure() {
+      if (this.tableData.filter(v => v.is_choose).length == 0) {
+        return this.$Message.warning('请先选择数据!')
+      }
+      localStorage.removeItem('fyy_target');
+      let id = this.tableData.map(v => v.id).toString();
+      this.$router.push({ path: '/cms/Package/detailed', query: { id } })
+    },
+    handleReturn() {
+      localStorage.removeItem('fyy_target');
+      this.$router.push('/cms/home');
+    },
+    handleChoose(item, index) {
+      item.is_choose = !item.is_choose;
+      this.tableData.splice(index, 1, item);
+    },
+    handleShow() {
+      this.is_show = !this.is_show;
+      console.log(document.getElementsByClassName('header'))
+      if (this.is_show) {
+        document.getElementsByClassName('header')[0].style = 'height:7rem;overflow:hidden;transition:all .4s;'
+        setTimeout(() => {
+          document.getElementsByClassName('header')[0].style = 'overflow:none;'
+          this.is_use = false;
+        }, 400)
+      } else {
+        this.is_use = true;
+        document.getElementsByClassName('header')[0].style = 'height:2.7rem;overflow:hidden;transition:all .4s;'
+      }
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.header {
+  width: 94%;
+  height: 7rem;
+  // overflow: hidden;
+  // transition: all 0.4s;
+  position: relative;
+  top: 0.5rem;
+  left: 3%;
+  box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+  border-radius: 1rem;
+  padding: 0.4rem 0.7rem 0 1rem;
+  background: #fff;
+}
+.header_btn {
+  border-radius: 1rem;
+  padding: 0.1rem;
+  width: 5rem;
+  display: flex;
+  justify-content: space-around;
+  align-items: center;
+}
+.header_top {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.ot {
+  position: relative;
+  top: -1.3rem;
+}
+.header_middle1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .ft {
+    font-size: 1.5rem;
+    width: 5rem;
+    text-align: center;
+  }
+}
+.header_middle {
+  position: relative;
+  top: -0.3rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+/deep/ .btn-group > .btn,
+.btn-group-vertical > .btn {
+  background: #ffffff;
+  color: #2c3e50;
+  outline: none;
+  border: none;
+  margin: 0;
+  z-index: 3;
+}
+.header_footer {
+  position: relative;
+  top: -1.7rem;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  div {
+    font-size: 0.5rem;
+    color: rgb(244, 136, 42);
+  }
+}
+.bdy {
+  width: 94%;
+  height: calc(100% - 18.7rem);
+  overflow: auto;
+  position: relative;
+  top: 1rem;
+  left: 3%;
+}
+
+/deep/td {
+  text-align: center;
+  vertical-align: middle;
+}
+table {
+  border-collapse: collapse; /* 合并边框 */
+  width: 100%; /* 表格宽度 */
+  background: #fff;
+  table-layout: fixed;
+}
+th {
+  font-size: 0.6rem;
+  background: #66b1f4;
+  color: #fff;
+}
+td {
+  font-size: 0.6rem;
+  word-break: break-all;
+}
+td,
+th {
+  vertical-align: middle;
+  text-align: center;
+  border: 0.1rem solid #dddddd; /* 单元格边框样式 */
+  padding: 0.02rem; /* 单元格内边距 */
+}
+.choose_item {
+  background: #c8c8c8;
+}
+.footer {
+  display: flex;
+  justify-content: space-around;
+  width: 100%;
+  position: absolute;
+  bottom: 4.8rem;
+}
+</style>

+ 266 - 0
src/views/page/Package/detailed.vue

@@ -0,0 +1,266 @@
+<template>
+  <div>
+    <div class="content">
+      <div v-for="(item, index) in list" :key="index" class="item">
+        <div class="add" @click="handleAdd(item, index)">+</div>
+        <div class="delete" @click="handleDelete(index)">x</div>
+        <div class="unit" style="display: flex">
+          <label style="width: 50%">销售订单号:</label>
+          <div style="width: 50%">{{ item.dispatch_no }}</div>
+        </div>
+        <div style="display: flex" class="unit">
+          <label>产品名称:</label>
+          <div style="width: 60%">{{ item.product_title }}</div>
+        </div>
+        <div style="display: flex; width: 100%; padding: 0.5rem">
+          <label style="width: 15%; text-align: right">工艺:</label>
+          <div style="width: 60%">准分子爱格浅橡9327</div>
+        </div>
+        <div style="display: flex" class="unit">
+          <label>包装数量:</label>
+          <Input
+            size="small"
+            type="number"
+            placeholder="  请输入"
+            style="width: 60%; padding: 0 0 0 0.2rem"
+            v-model="item.quantity"
+          />
+        </div>
+        <div class="unit">
+          <label>班组:</label
+          ><span>
+            <b-form-select
+              v-model="item.team_id"
+              :options="teamList"
+              style="
+                height: 1.4rem;
+                width: 60%;
+                border: 0.1rem solid;
+                border-radius: 0.6rem;
+                background: #fff;
+              "
+            >
+              <template v-slot:first>
+                <b-form-select-option value="" disabled
+                  >请选择班组</b-form-select-option
+                >
+              </template></b-form-select
+            ></span
+          >
+        </div>
+        <div class="unit">
+          <label>人员:</label>
+          <b-form-select
+            v-model="item.employee_id"
+            :options="employeeList"
+            style="
+              height: 1.4rem;
+              width: 60%;
+              border: 0.1rem solid;
+              border-radius: 0.6rem;
+              background: #fff;
+            "
+          >
+            <template v-slot:first>
+              <b-form-select-option value="" disabled
+                >请选择人员</b-form-select-option
+              >
+            </template></b-form-select
+          >
+        </div>
+        <div class="unit">
+          <label>商标损耗:</label>
+          <b-form-select
+            v-model="item.num"
+            :options="numList"
+            style="
+              height: 1.4rem;
+              width: 60%;
+              border: 0.1rem solid;
+              border-radius: 0.6rem;
+              background: #fff;
+            "
+          >
+            <template v-slot:first>
+              <b-form-select-option value="" disabled
+                >请选择数量</b-form-select-option
+              >
+            </template></b-form-select
+          >
+        </div>
+      </div>
+      <div class="footer_btn">
+        <b-button
+          variant="primary"
+          style="width: 35%; margin-left: 3%"
+          @click="handleReturn"
+          >返回</b-button
+        >
+        <b-button
+          variant="primary"
+          style="width: 35%; margin-right: 3%"
+          @click="handleSure"
+          >确认</b-button
+        >
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      list: [],
+      email: "",
+      name: "",
+      food: null,
+      checked: [],
+      form: {},
+      teamList: [],
+      employeeList: [],
+      numList: [
+        { value: 1, text: 1 },
+        { value: 2, text: 2 },
+        { value: 3, text: 3 },
+      ],
+      state: true,
+    }
+  },
+  created() {
+    this.axios.post('/api/finishedOrderDetailsList', { id: this.$route.query.id.split(',') }).then(res => {
+      this.list = res.data.list;
+      this.list.forEach(v => {
+        v.num = v.num ? v.num : ''
+      })
+    })
+    //获取班组
+    this.axios.post('/api/teamList').then(res => {
+      this.teamList = res.data.data;
+      this.teamList.forEach(v => {
+        v.value = v.id;
+        v.text = v.title;
+      })
+    })
+    //获取人员
+    this.axios.post('/api/employeeList').then(res => {
+      this.employeeList = res.data.data;
+      this.employeeList.forEach(v => {
+        v.value = v.id;
+        v.text = v.emp_name
+      })
+    })
+  },
+  methods: {
+    handleReturn() {
+      this.$router.go(-1);
+    },
+    handleDelete(index) {
+      if (this.list.length == 1) {
+        return
+      } else {
+        this.list.splice(index, 1);
+      }
+    },
+    handleAdd(item, index) {
+      if (!item.quantity) {
+        return
+      } else {
+
+        let copy = JSON.parse(JSON.stringify(item));
+        copy.quantity = Math.floor(item.quantity / 2) + item.quantity % 2;
+        item.quantity = Math.floor(item.quantity / 2);
+        this.list.splice(index, 1, item);
+        this.list.splice(index + 1, 0, copy);
+      }
+
+    },
+    handleSure() {
+      let data = [];
+      this.list.forEach(v => {
+        let obj = {};
+        obj.id = v.id;
+        obj.team_id = v.team_id,
+          obj.finished_id = v.employee_id,
+          obj.num = v.num ? v.num : '',
+          obj.quantity = v.quantity;
+        data.push(obj)
+      });
+      if (!this.state) {
+        return
+      } else {
+        this.state = false;
+        this.axios.post('/api/mobileFinishedOrderAdd', { ...data }).then(res => {
+          if (res.code == 200) {
+            this.state = true
+            this.$Message.success(res.msg);
+            this.handleReturn()
+          }
+        })
+      }
+
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.content {
+  height: calc(100% - 5rem);
+  overflow: auto;
+  .item {
+    width: 94%;
+    position: relative;
+    left: 3%;
+    margin: 1.5rem 0;
+    border-radius: 1rem;
+    background-color: #fff;
+    box-shadow: 0.16rem 0.1rem 0.1rem 0.1rem #9d9b9b;
+    font-size: 0.8rem;
+    display: flex;
+    flex-wrap: wrap;
+    .add {
+      position: absolute;
+      width: 1.5rem;
+      height: 1.5rem;
+      bottom: -0.5rem;
+      left: -0.5rem;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 1.3rem;
+      border-radius: 50%;
+      box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
+      background: #fff;
+    }
+    .delete {
+      width: 1.5rem;
+      height: 1.5rem;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 1.3rem;
+      position: absolute;
+      top: -0.5rem;
+      right: -0.5rem;
+      border-radius: 50%;
+      box-shadow: 0.1rem 0.1rem 0.1rem 0rem #777676;
+      background: #fff;
+    }
+    .unit {
+      width: 50%;
+      padding: 0.5rem;
+
+      vertical-align: middle;
+      label {
+        width: 40%;
+        text-align: center;
+      }
+    }
+  }
+}
+
+.footer_btn {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+</style>

+ 67 - 0
src/views/page/Work.vue

@@ -0,0 +1,67 @@
+<template>
+  <div>
+    <div class="btn_content">
+      <b-button size="lg" variant="primary" @click="handleClick">{{
+        state ? "停止扫描" : "开始扫描"
+      }}</b-button>
+    </div>
+    <b-modal
+      v-model="is_show"
+      centered
+      scrollable
+      no-close-on-backdrop
+      no-close-on-esc
+      hide-header
+    >
+      <p>
+        {{ list.toString() }}
+      </p>
+      <div slot="modal-footer">
+        <b-button @click="handleCancel">取消</b-button>
+      </div>
+    </b-modal>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      state: false,
+      is_show: false,
+      list: []
+    }
+  },
+  mounted() {
+    console.log(111);
+    window.uploadEPC = this.uploadEPC;
+  },
+  methods: {
+    uploadEPC(e) {
+
+      this.list.push(JSON.stringify(e + ''));
+    },
+    handleClick() {
+      this.state = !this.state
+      if (this.state) {
+        androidJs.startInventory();
+      } else {
+        androidJs.stopInventory();
+        this.is_show = true;
+      }
+    },
+    handleCancel() {
+      this.is_show = false
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+.btn_content {
+  text-align: center;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  width: 100%;
+  transform: translate(-50%, -100%);
+}
+</style>

+ 169 - 0
src/views/page/ceshi.vue

@@ -0,0 +1,169 @@
+<template>
+  <div class="saoma">
+    <qrcode-stream
+      @decode="onDecode"
+      @init="onInit"
+      style="height: 90vh; width: 100vw"
+    >
+      <div>
+        <div class="qr-scanner">
+          <div class="box">
+            <div class="line"></div>
+            <div class="angle"></div>
+          </div>
+        </div>
+      </div>
+    </qrcode-stream>
+  </div>
+</template>
+ 
+<script>
+
+export default {
+  data() {
+    return {
+      result: '', // 扫码结果信息
+      error: '' // 错误信息
+    }
+  },
+  methods: {
+    onDecode(result) {
+      if (result) {
+        this.$router.push({
+          path: '/',
+          query: {
+            code: result,
+          }
+        })
+      }
+    },
+    async onInit(promise) {
+      try {
+        await promise
+      } catch (error) {
+        if (error.name === 'NotAllowedError') {
+          window.alert('您需要授予相机访问权限')
+          this.$router.push({ path: '/' })
+        } else if (error.name === 'NotFoundError') {
+          this.$router.push({ path: '/' })
+          window.alert('这个设备上没有摄像头')
+        } else if (error.name === 'NotSupportedError') {
+          this.$router.push({ path: '/' })
+          window.alert('所需的安全上下文(HTTPS、本地主机)')
+        } else if (error.name === 'NotReadableError') {
+          this.$router.push({ path: '/' })
+          window.alert('相机被占用')
+        } else if (error.name === 'OverconstrainedError') {
+          this.$router.push({ path: '/' })
+          window.alert('安装摄像头不合适')
+        } else if (error.name === 'StreamApiNotSupportedError') {
+          this.$router.push({ path: '/' })
+          window.alert('此浏览器不支持流API')
+        }
+      }
+    },
+  }
+}
+</script>
+ 
+<style scoped>
+.saoma {
+  width: 100vw;
+  height: 100vh;
+}
+
+.qr-scanner {
+  background-image: linear-gradient(
+      0deg,
+      transparent 24%,
+      rgba(32, 255, 77, 0.1) 25%,
+      rgba(32, 255, 77, 0.1) 26%,
+      transparent 27%,
+      transparent 74%,
+      rgba(32, 255, 77, 0.1) 75%,
+      rgba(32, 255, 77, 0.1) 76%,
+      transparent 77%,
+      transparent
+    ),
+    linear-gradient(
+      90deg,
+      transparent 24%,
+      rgba(32, 255, 77, 0.1) 25%,
+      rgba(32, 255, 77, 0.1) 26%,
+      transparent 27%,
+      transparent 74%,
+      rgba(32, 255, 77, 0.1) 75%,
+      rgba(32, 255, 77, 0.1) 76%,
+      transparent 77%,
+      transparent
+    );
+  background-size: 3rem 3rem;
+  background-position: -1rem -1rem;
+  width: 100%;
+  /* height: 100%; */
+  height: 100vh;
+  position: relative;
+  background-color: #1110;
+  /* background-color: #111; */
+}
+.qr-scanner .box {
+  width: 213px;
+  height: 213px;
+  position: absolute;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  overflow: hidden;
+  border: 0.1rem solid rgba(0, 255, 51, 0.2);
+  /* background: url('http://resource.beige.world/imgs/gongconghao.png') no-repeat center center; */
+}
+.qr-scanner .line {
+  height: calc(100% - 2px);
+  width: 100%;
+  background: linear-gradient(180deg, rgba(0, 255, 51, 0) 43%, #00ff33 211%);
+  border-bottom: 3px solid #00ff33;
+  transform: translateY(-100%);
+  animation: radar-beam 2s infinite alternate;
+  animation-timing-function: cubic-bezier(0.53, 0, 0.43, 0.99);
+  animation-delay: 1.4s;
+}
+.qr-scanner .box:after,
+.qr-scanner .box:before,
+.qr-scanner .angle:after,
+.qr-scanner .angle:before {
+  content: "";
+  display: block;
+  position: absolute;
+  width: 3vw;
+  height: 3vw;
+  border: 0.2rem solid transparent;
+}
+.qr-scanner .box:after,
+.qr-scanner .box:before {
+  top: 0;
+  border-top-color: #00ff33;
+}
+.qr-scanner .angle:after,
+.qr-scanner .angle:before {
+  bottom: 0;
+  border-bottom-color: #00ff33;
+}
+.qr-scanner .box:before,
+.qr-scanner .angle:before {
+  left: 0;
+  border-left-color: #00ff33;
+}
+.qr-scanner .box:after,
+.qr-scanner .angle:after {
+  right: 0;
+  border-right-color: #00ff33;
+}
+@keyframes radar-beam {
+  0% {
+    transform: translateY(-100%);
+  }
+  100% {
+    transform: translateY(0);
+  }
+}
+</style>

+ 14 - 0
src/views/page/refresh.vue

@@ -0,0 +1,14 @@
+<template>
+  <div></div>
+</template>
+<script>
+export default {
+  beforeRouteEnter(to, from, next) {
+    console.log(from);
+    next(vm => {
+      vm.$router.replace(from.fullPath)
+      // 跳到该路由页面后,再替换为from.path来源路径
+    })
+  }
+}
+</script>

+ 38 - 0
vue.config.js

@@ -0,0 +1,38 @@
+// const axios_default_ip =
+//   process.env.NODE_ENV == "dev"
+//     ? "http://192.168.0.115:8080"//jiufang2.1
+//     // http://192.168.0.115:8080
+//     : process.env.NODE_ENV == "test-prd"
+//       ? "http://zh_api.qingyaokeji.com" //
+//       : process.env.NODE_ENV == "prd_other"
+//         ? "http://121.37.173.82:82" //贝斯特
+//         : "http://124.71.176.88:882";
+// //http://hxy_api.qingyaokeji.com // 华信源
+// //  http://124.71.176.88:882  //江山
+// // 'http://121.41.102.225:82' :测试
+// // http://124.71.176.88:70  下沙新地址
+// //http://121.41.102.225:999 上线服务器
+// process.env.VUE_APP_BASE_URL = axios_default_ip;
+module.exports = {
+  publicPath: "./",
+  outputDir: "dist",
+  assetsDir: "static",
+  indexPath: "index.html",
+  productionSourceMap: process.env.NODE_ENV === "development",
+  devServer: {
+    // https: true,
+    proxy: {
+      "/api": {
+        target: "http://121.36.142.167:7774",//需要代理的地址
+        changeOrigin: true,
+        //重点在下面,下面这个把我的403问题解决掉了
+        onProxyReq: (proxyReq, req, res) => {
+          // proxyReq.removeHeader('referer')  //移除请求头
+          // proxyReq.removeHeader('origin') //移除请求头
+          proxyReq.setHeader('host', '121.36.142.167:7774') //添加请求头
+        }
+      }
+    }
+  },
+  lintOnSave: false, //禁用eslint  便于开发
+};

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä