[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\"es2015\", \"stage-2\"],\n  \"plugins\": [\"transform-runtime\"],\n  \"comments\": false,\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": ".github/workflows/close_inactive_issue.yml",
    "content": "name: Close Inactive Issue\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    steps:\n      - name: close inactive issue\n        uses: actions-cool/issues-helper@v2.2.1\n        with:\n          actions: 'close-issues'\n          labels: 'inactive'\n          inactive-day: 30\n          body: |\n            Since the issue was labeled with `inactive`, but no response in 30 days. This issue will be close. If you have any questions, you can comment and reply.\n            由于该 issue 被标记为不活跃，且 30 天未收到回应。现关闭 issue，若有任何问题，可评论回复。\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules/\nnpm-debug.log\npackage-lock.json\n# 忽略使用WebStorm开发时，生成的缓存文件夹\n.idea\n# 忽略使用VSCode开发时，生成的缓存文件夹\n.vscode\ntree.md\n*.idea\n\nelm/\n"
  },
  {
    "path": "COPYING",
    "content": "\n          GNU GENERAL PUBLIC LICENSE\n            Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n                       51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n          Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Library General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\f\n        GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\f\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\f\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\f\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n          NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n         END OF TERMS AND CONDITIONS\n\f\n      How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\n\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  <signature of Ty Coon>, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Library General\nPublic License instead of this License."
  },
  {
    "path": "README-en.md",
    "content": "# Introduction\n\n[README in Chinese](README.md)\n\nWhen I began to learn to vue, search of some practical source code about vue, but most of them are simple demo and didn't help to explore the vue. The most of demo are front-end page, such as music player interaction not as complicated as expected.But in actual work, we often meet some project involving money, such as shopping cart page. This kind of project is complex, accompany by login, register ,user information and so on. It's difficult, no one has ever written a project like this in vue and commit to github. So I write it, hope I can help you. \n\nThis functional project is practical but often boring, with no music player so gorgeous. For a long time, I think that Elm APP is a good material. First, it is complex that the open delivery platform is more complicated than the typical project. Second, you won't get bored seeing so much beautiful food.\n\nBut why is the Elm APP, not Baidu App or Meituan App? The reason is simple, that Elm's layout is the most beautiful and the most comfortable in the three APP.\n\nThere are 45 pages of this project, involving registration, login, merchandise display, shopping cart, order and so on. It is a complete process. The average company project is not that complicated, so if you can understand this project fully, I believe that you can able to do the most of single-page applications in the other company. Even if it's more complex, and it won't be much higher than this one.\n\nThe project was done in the spare time, actually it was written years ago and over the years, so the spend time seem a bit long. The project spend more than two months from beginning to end. Now it has been completed, some performance optimizations are being performed to add detailed annotations.\n\nIn addition, the project don't related elm video of imooc website, and that project only have one page. After watching the official documentation of vue, I wrote this project directly, and without reference to any code, so please don't mix them up.\n\n__Note: This project is purely personal. If you want to order, please choose the official elm client.__\n\n\n\n## Technology\n\nvue2 + vuex + vue-router + webpack + ES6/7 + fetch + sass + flex + svg\n\n\n## Development\n\nNote:This project used a lot of properties such as ES6/7, so node 6.0.0+ is required.\n\n```\ngit clone https://github.com/bailicangdu/vue2-elm.git  \n\ncd vue2-elm\n\nnpm install\n\nnpm run dev\n\n```\n\n\n## More\nThis project has the supporting background system. If you want to develop it, you can download the corresponding backend system.[backend system](https://github.com/bailicangdu/node-elm)。\n\nBackend system's run command:npm run local .\n\nIf you only do the front-end development, ignore this note.\n\n\n# Explain\n\n>  If it helps you, you can click \"Star\" in the upper right corner to support,thank you. ^_^\n\n>  May be you can \"follow\" me, I will make more interstng projects.\n\n>  Development environment: macOS 10.12.3  Chrome 56  nodejs 6.10.0\n\n>  Thanks for 辰妹子[@bailichen](https://github.com/bailichen), [@iceRao](https://github.com/raoenhui)，to help complete the project，thank you🌹\n\n>  If you hava some question,you can post the question in Issues, and if you find some solution or some improvement，please pull request. 👍\n\n>  [communication group](https://gitter.im/vue2-elm/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n\n>  Recommend a open source project about react and redux。[address](https://github.com/bailicangdu/react-pxq)\n\n>  Recommend a other demo about vue2 and vuex，it's simple and good for newbie.[address](https://github.com/bailicangdu/vue2-happyfri)\n\n\n## Dscription of the data interface 🤔\n\n### 2017-05-30\n\nFor some reason，previous interfaces could not be used, it made the project failed to run.The new backend system is built by nodejs.[backend system address](https://github.com/bailicangdu/node-elm). It can kept consisent with the offical website. And provide corresponding [background management system](https://github.com/bailicangdu/vue2-manage)\n\n\n# Demo\n\n[click it](http://cangdu.org/elm/)（Preview with chrome phone mode please）\n\n### The mobile can scan the qr code in the below\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/ewm.png\" width=\"250\" height=\"250\"/>\n\n\n\n# Features\n- [x] location function -- finished\n- [x] choose city -- finished\n- [x] search address-- finished\n- [x] display a list of merchant that near by the selected address -- finished\n- [x] find food or restaurant -- finished\n- [x] sorting and filter according to distance,sales,rating,special course,distribution and so on -- finished\n- [x] food list of restaurant -- finished\n- [x] cart function -- finished\n- [x] evaluation page of shop -- finished\n- [x] detail page about one food-- finished\n- [x] detail page about merchant -- finished\n- [x] login、register -- finished\n- [x] change password -- finished\n- [x] user center -- finished\n- [x] send message、voice verification -- finished\n- [x] order function -- finished ✨✨🎉🎉\n- [x] order list -- finished\n- [x] order detail -- finished\n- [x] download App -- finished\n- [x] add、delete、change delivery address -- finished\n- [x] account info -- finished\n- [x] service center -- finished\n- [x] red packet -- finished\n- [x] upload avator -- finished\n- [ ] pay -- No money~~\n\n\n\n# Summarize\n\n1, It is not the official of elm, so it is necessary to open the agent, and must be opened on the PC. At most, you can order but not more, after the success of the order, you can check and pay the payment on your mobile phone.\n\n2, In general, the page involves money that is complicated, especially like elm? An open platform, It has many types of merchants and foods, need some complex interaction between page and page. When I writing the cart and order pages, without API but it has a lot of \n\n3, Vue is so bright, because of it's a lightweight framework good at the small and medium-sized project. Whem you want make a large single-page application, you can use vuex, the performance is still outstanding. In the treatment of the complex interaction logic page, vuex is necessary. So if you use vue and vuex, you can make large single-page projects.\n\n4, Now, after make process of the login to register, homepage, search, businesses, shopping cart, order, order list, personal center and so on. I not only understanding the vue to a deeper level, and it's can help for me to control the large project in the future. Do a practical project has great improvement in myself.\n\n5, Sometimes I doubt that to spend a few months make this project has meaning or not. At first I just wanted to do a small project, but I didn't think I could write more, but when I finished I believed it was worth it.\n\n6, The project was already finished, and have 45 pages.\n\n\n# Ultimate Goal\n\n1, Build a background system to simulate the delivery platform with node.js。[address](https://github.com/bailicangdu/node-elm)\n\n2, Use react-native to write native APP of Android and IOS。[地址在这里](https://github.com/bailicangdu/React-Native-elm)\n\n3、May be I will make a seller's version in the future.\n  \n  So my goal is to build a full ecosystem across the frontend , backend, IOS and Android.\n  \n  ...Waiting for me\n\n\n\n# Screenshot\n\n\n### store list page\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/msite.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/msite.gif\" width=\"365\" height=\"619\"/>\n\n\n### store filter page\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/food.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/food.gif\" width=\"365\" height=\"619\"/>\n\n\n\n### food list and cart\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/shop_cart.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/shop_cart.gif\" width=\"365\" height=\"619\"/>\n\n### oder check page\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/confirm1.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/confirmOrder.gif\" width=\"365\" height=\"619\"/>\n\n\n### search page\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/search.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/search.gif\" width=\"365\" height=\"619\"/>\n\n\n### login page\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/login1.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/login.gif\" width=\"365\" height=\"619\"/>\n\n\n### user center\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/profile.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/profile.gif\" width=\"365\" height=\"619\"/>\n\n\n\n\n\n\n# Layout\n\n```\n.\n├── build                                       // webpack config file\n├── config                                      // package path\n├── elm                                         // online project file,can access if put them one the server\n├── screenshots                                 // screenshot\n├── src                                         // source directory\n│   ├── components                              // components\n│   │   ├── common                              // common components\n│   │   │   ├── alertTip.vue                    // popup components\n│   │   │   ├── buyCart.vue                     // cart components\n│   │   │   ├── computeTime.vue                 // countdown components\n│   │   │   ├── loading.vue                     // the animation component when page is initialized\n│   │   │   ├── mixin.js                        // mixinf components(inculde：directive-loading more，make picture address)\n│   │   │   ├── ratingStar.vue                  // the five rating star component about comment\n│   │   │   └── shoplist.vue                    // the resturant list common component of msite and shop page\n│   │   ├── footer\n│   │   │   └── footGuide.vue                   // footer common component\n│   │   └── header\n│   │       └── head.vue                        // header common component\n│   ├── config                                  // basic configuration\n│   │   ├── env.js                              // environment switch configuration\n│   │   ├── fetch.js                            // git data\n│   │   ├── mUtils.js                           // common function about js\n│   │   └── rem.js                              // px transform rem\n│   ├── images                                  // public picture\n│   ├── page\n│   │   ├── balance\n│   │   │   ├── balance.vue                     // balance page\n│   │   │   └── children\n│   │   │       └── detail.vue                  // balance detail page\n│   │   ├── benefit\n│   │   │   ├── benefit.vue                     // benefit pahe\n│   │   │   └── children\n│   │   │       ├── commend.vue                 // recommend prize\n│   │   │       ├── coupon.vue                  // coupon introduction\n│   │   │       ├── exchange.vue                // exchange benefit\n│   │   │       ├── hbDescription.vue           // benefit descripting\n│   │   │       └── hbHistory.vue               // benefit's history\n│   │   ├── city                 \n│   │   │   └── city.vue                        // local city page\n│   │   ├── confirmOrder\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   ├── addAddress.vue          // add address page\n│   │   │   │   │   └── children\n│   │   │   │   │       └── searchAddress.vue   // search address page\n│   │   │   │   ├── chooseAddress.vue           // choose address page\n│   │   │   │   ├── invoice.vue                 // choose invoice page\n│   │   │   │   ├── payment.vue                 // pay page\n│   │   │   │   ├── remark.vue                  // order remark page \n│   │   │   │   └── userValidation.vue          // user validation page\n│   │   │   └── confirmOrder.vue                // confirm order page\n│   │   ├── download\n│   │   │   └── download.vue                    // downlad App\n│   │   ├── find\n│   │   │   └── find.vue                        // find page\n│   │   ├── food\n│   │   │   └── food.vue                        // food filter sort page\n│   │   ├── forget\n│   │   │   └── forget.vue                      // forget password, change password\n│   │   ├── home\n│   │   │   └── home.vue                        // index page\n│   │   ├── login\n│   │   │   └── login.vue                       // login and register page\n│   │   ├── msite\n│   │   │   └── msite.vue                       // merchant list page\n│   │   ├── order\n│   │   │   ├── children\n│   │   │   │   └── orderDetail.vue             // order detail page\n│   │   │   └── order.vue                       // order list page\n│   │   ├── points\n│   │   │   ├── children\n│   │   │   │   └── detail.vue                  // points detail page\n│   │   │   └── points.vue                      // points page\n│   │   ├── profile\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   ├── address.vue             // address page\n│   │   │   │   │   └── children\n│   │   │   │   │       ├── add.vue             // add address page\n│   │   │   │   │       └── children\n│   │   │   │   │           └── addDetail.vue   // search address page\n│   │   │   │   ├── info.vue                    // account info page\n│   │   │   │   └── setusername.vue             // reset user page\n│   │   │   └── profile.vue                     // user profile page\n│   │   ├── search\n│   │   │   └── search.vue                      // search page\n│   │   ├── service\n│   │   │   ├── children\n│   │   │   │   └── questionDetail.vue          // question detail page\n│   │   │   └── service.vue                     // service center page\n│   │   ├── shop\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   └── shopSafe.vue            // shop check info page\n│   │   │   │   ├── foodDetail.vue              // food detail page\n│   │   │   │   └── shopDetail.vue              // shop detail page\n│   │   │   └── shop.vue                        // shop filter page\n│   │   └── vipcard\n│   │       ├── children\n│   │       │   ├── invoiceRecord.vue           // invoice record page\n│   │       │   ├── useCart.vue                 // use card page\n│   │       │   └── vipDescription.vue          // vip deacription page\n│   │       └── vipcard.vue                     // vip handling page\n│   ├── plugins                                 // plugins\n│   ├── router\n│   │   └── router.js                           // router configuration\n│   ├── service                                 // data interaction and unified deployment\n│   │   ├── getData.js                          // the unified deployment file for get data, and unified management of interfaces\n│   │   └── tempdata                            // temporary data for the development\n│   ├── store                                   // Vuex status management\n│   │   ├── action.js                           // actions configuration\n│   │   ├── getters.js                          // getters configuration\n│   │   ├── index.js                            // use vuex，new store\n│   │   ├── modules                             // store modules\n│   │   ├── mutation-types.js                   // make const for muations\n│   │   └── mutations.js                        // mutations configuration\n│   └── style\n│       ├── common.scss                         // common css\n│       ├── mixin.scss                          // cs configuration file\n│       └── swiper.min.css\n│   ├── App.vue                                 // entry page js file\n│   ├── main.js                                 // the main js for loading components\n├── favicon.ico                                 // icon\n├── index.html                                  // entry page html file\n.\n\n56 directories, 203 files\n```\n\n\n# License\n\n[GPL](https://github.com/bailicangdu/vue2-elm/blob/master/COPYING)\n"
  },
  {
    "path": "README.md",
    "content": "# 前言\n\n[README in English](README-en.md)\n\n初学vue时曾在网上搜索vue的实战项目源码，无奈大部分都是简单的demo，对于深究vue没有太大的帮助，剩下的一些大部分都是像音乐播放器之类的展示型项目，交互没有预期那么复杂。但我们实际在工作中，经常会遇到有购物车的项目，这类项目因为涉及到money，所以对逻辑严谨度要求高，页面之间交互复杂，又会伴随着登录、注册、用户信息等等，常常会让我们很头疼。既然还没人用vue写过这样的项目，那不如我来写，开源出来对能看到的人也会有帮助。\n\n这种功能性的项目很实用但是往往也很枯燥，没有音乐播放器那么看起来绚丽，思来想去发现饿了么是一个不错的素材，一来它足够复杂，开放的外卖平台比一般的公司独有商店更加复杂。二来 见到那么多美食，大家也不会感觉到厌烦。\n\n为啥是饿了么，而不是美团？原因很简单，饿了么的色调和布局是最漂亮的，看起来最舒服。\n\n此项目大大小小共 45 个页面，涉及注册、登录、商品展示、购物车、下单等等，是一个完整的流程。一般公司即便是官网的单页面项目都没这么复杂，如果这个项目能驾驭的了，相信大部分公司的其他单页面应用也就不在话下，即便更复杂，也不会比这个高到哪里去。\n\n因为利用业余时间来做，年前就开始写，又跨个年，周期有点长，项目从零布局到完成共用了2个多月的时间。\n\n另外，这个项目和慕课网视频的那个饿了么没有任何关系，慕课网的项目只有一个页面，我在看完vue的官方文档后直接写了这个项目，没有参照任何人的代码，请大家不要混为一谈。\n\n__注1：此项目纯属个人瞎搞，正常下单请选择饿了么官方客户端。__\n\n__注2：项目预览地址和接口需要使用https访问哦！__\n\n\n## 技术栈\n\nvue2 + vuex + vue-router + webpack + ES6/7 + fetch + sass + flex + svg\n\n\n## 项目运行\n\n#### 注意：由于涉及大量的 ES6/7 等新属性，node 需要 6.0 以上版本\n\n```\ngit clone https://github.com/bailicangdu/vue2-elm.git  \n\ncd vue2-elm\n\nnpm install 或 yarn(推荐)\n\nnpm run dev\n\n```\n## 关于接口数据\n\n此项目的所有接口数据都来源于配套的后台系统，[后台项目传送地址](https://github.com/bailicangdu/node-elm)。\n\n如果想体验前后台同时开发，可以下载后台系统。\n\n此时启动本项目的命令为：npm run local 而不是 npm run dev。\n\n同时我们也提供了基于`element-ui`搭建的[后台管理页面](https://github.com/bailicangdu/vue2-manage)\n\n如果只做前端开发，请忽略上面这几句话哟～\n\n\n# 说明\n\n>  如果对您有帮助，您可以点右上角 \"Star\" 支持一下 谢谢！ ^_^\n\n>  或者您可以 \"follow\" 一下，我会不断开源更多的有趣的项目\n\n>  开发环境 macOS 10.12.3  Chrome 56  nodejs 6.10.0\n\n>  特别感谢[@bailichen](https://github.com/bailichen), [@iceRao](https://github.com/raoenhui)，在百忙之中抽出时间和我一起完成了这个项目，辛苦了🌹\n\n>  如有问题请直接在 Issues 中提，或者您发现问题并有非常好的解决方案，欢迎 PR 👍\n\n>  [项目交流群](https://gitter.im/vue2-elm/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n\n>  推荐一个 react + redux 开源项目，对react感兴趣的朋友赶紧去看看。[地址在这里](https://github.com/bailicangdu/react-pxq)\n\n>  另外一个 vue2 + vuex 的入门项目，比当前的项目简单很多，非常适合入门练习。[地址在这里](https://github.com/bailicangdu/vue2-happyfri)\n\n\n# 效果演示\n\n[查看demo请戳这里](https://cangdu.org/elm/#/msite)（请用chrome手机模式预览）\n\n### 移动端扫描下方二维码\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/ewm.png\" width=\"200\" height=\"200\"/>\n\n\n\n# 目标功能\n- [x] 定位功能 -- 完成\n- [x] 选择城市 -- 完成\n- [x] 搜索地址 -- 完成\n- [x] 展示所选地址附近商家列表 -- 完成\n- [x] 搜索美食，餐馆 -- 完成\n- [x] 根据距离、销量、评分、特色菜、配送方式等进行排序和筛选 -- 完成\n- [x] 餐馆食品列表页 -- 完成\n- [x] 购物车功能 -- 完成\n- [x] 店铺评价页面 -- 完成\n- [x] 单个食品详情页面 -- 完成\n- [x] 商家详情页 -- 完成\n- [x] 登录、注册 -- 完成\n- [x] 修改密码 -- 完成\n- [x] 个人中心 -- 完成\n- [x] 发送短信、语音验证 -- 完成\n- [x] 下单功能 -- 完成 ✨✨🎉🎉\n- [x] 订单列表 -- 完成\n- [x] 订单详情 -- 完成\n- [x] 下载App -- 完成\n- [x] 添加、删除、修改收货地址 -- 完成\n- [x] 帐户信息 -- 完成\n- [x] 服务中心 -- 完成\n- [x] 红包 -- 完成\n- [x] 上传头像 -- 完成\n- [ ] 付款 -- 臣妾做不到啊~~\n\n\n\n# 总结\n\n1、一般涉及到money的网页逻辑都比较复杂，尤其像饿了么这样一个开放的平台，商家和食品种类繁多，页面与页面之间交互复杂，在写到 购物车 和 下单 功能时众多的数据和逻辑一度让人很头疼，又没有设计和接口api文档，只能一步步摸索。\n\n2、vue因其轻量级的框架在中小型项目中表现亮眼，在大型单页面应用中因为vuex的存在，表现依然出色，在处理复杂交互逻辑的时候，vuex的存在是不可或缺的。所以说利用 vue + vuex 完全可以去做大型的单页面项目。\n\n3、项目写到现在，从 登录注册到、首页、搜索、商家列表、购物车、下单、订单列表、个人中心 一个流程走完之后、不但对vue的理解更深一层，而且对以后掌控大型项目的时候也有非常多的帮助，做一个实际的项目才能对自己有很大的提升。\n\n4、曾一度怀疑，花几个月的时间做这样一个项目到底有没有意义，本来只是想做一个小项目练练手，没想到后来越写越多，不过坚持下来后我相信一切都是值得的。\n\n5、项目已经完成，共45个页面。\n\n\n# 最终目标\n\n1、用node.js构建一个模拟外卖平台的后台系统。[地址在这里](https://github.com/bailicangdu/node-elm)\n\n2、写出跨 Android 和 IOS 的原生APP版本。[地址在这里](https://github.com/bailicangdu/native-xdm)\n\n3、如果时间来的及，会出一卖家版本。\n\n所以我的目的是构建一个横跨前后端，移动IOS、Android的完整生态圈。\n\n。。。敬请期待\n\n\n\n\n# 部分截图\n\n\n### 商铺列表页\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/msite.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/msite.gif\" width=\"365\" height=\"619\"/>\n\n\n### 商铺筛选页\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/food.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/food.gif\" width=\"365\" height=\"619\"/>\n\n\n\n### 餐馆食品列表与购物车\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/shop_cart.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/shop_cart.gif\" width=\"365\" height=\"619\"/>\n\n### 确认订单页\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/confirm1.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/confirmOrder.gif\" width=\"365\" height=\"619\"/>\n\n\n### 搜索页\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/search.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/search.gif\" width=\"365\" height=\"619\"/>\n\n\n### 登录页\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/login1.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/login.gif\" width=\"365\" height=\"619\"/>\n\n\n### 个人中心\n\n<img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/profile.png\" width=\"365\" height=\"619\"/> <img src=\"https://github.com/bailicangdu/vue2-elm/blob/master/screenshots/profile.gif\" width=\"365\" height=\"619\"/>\n\n\n\n\n\n\n# 项目布局\n\n```\n.\n├── build                                       // webpack配置文件\n├── config                                      // 项目打包路径\n├── elm                                         // 上线项目文件，放在服务器即可正常访问\n├── screenshots                                 // 项目截图\n├── src                                         // 源码目录\n│   ├── components                              // 组件\n│   │   ├── common                              // 公共组件\n│   │   │   ├── alertTip.vue                    // 弹出框组件\n│   │   │   ├── buyCart.vue                     // 购物车组件\n│   │   │   ├── computeTime.vue                 // 倒计时组件\n│   │   │   ├── loading.vue                     // 页面初始化加载数据的动画组件\n│   │   │   ├── mixin.js                        // 组件混合(包括：指令-下拉加载更多，处理图片地址)\n│   │   │   ├── ratingStar.vue                  // 评论的五颗星组件\n│   │   │   └── shoplist.vue                    // msite和shop页面的餐馆列表公共组件\n│   │   ├── footer\n│   │   │   └── footGuide.vue                   // 底部公共组件\n│   │   └── header\n│   │       └── head.vue                        // 头部公共组件\n│   ├── config                                  // 基本配置\n│   │   ├── env.js                              // 环境切换配置\n│   │   ├── fetch.js                            // 获取数据\n│   │   ├── mUtils.js                           // 常用的js方法\n│   │   └── rem.js                              // px转换rem\n│   ├── images                                  // 公共图片\n│   ├── page\n│   │   ├── balance\n│   │   │   ├── balance.vue                     // 余额页\n│   │   │   └── children\n│   │   │       └── detail.vue                  // 余额说明\n│   │   ├── benefit\n│   │   │   ├── benefit.vue                     // 红包页\n│   │   │   └── children\n│   │   │       ├── commend.vue                 // 推荐有奖\n│   │   │       ├── coupon.vue                  // 代金券说明\n│   │   │       ├── exchange.vue                // 兑换红包\n│   │   │       ├── hbDescription.vue           // 红包说明\n│   │   │       └── hbHistory.vue               // 历史红包\n│   │   ├── city\n│   │   │   └── city.vue                        // 当前城市页\n│   │   ├── confirmOrder\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   ├── addAddress.vue          // 添加地址页\n│   │   │   │   │   └── children\n│   │   │   │   │       └── searchAddress.vue   // 搜索地址页\n│   │   │   │   ├── chooseAddress.vue           // 选择地址页\n│   │   │   │   ├── invoice.vue                 // 选择发票页\n│   │   │   │   ├── payment.vue                 // 付款页\n│   │   │   │   ├── remark.vue                  // 订单备注页\n│   │   │   │   └── userValidation.vue          // 用户验证页\n│   │   │   └── confirmOrder.vue                // 确认订单页\n│   │   ├── download\n│   │   │   └── download.vue                    // 下载App\n│   │   ├── find\n│   │   │   └── find.vue                        // 发现页\n│   │   ├── food\n│   │   │   └── food.vue                        // 食品筛选排序页\n│   │   ├── forget\n│   │   │   └── forget.vue                      // 忘记密码，修改密码页\n│   │   ├── home\n│   │   │   └── home.vue                        // 首页\n│   │   ├── login\n│   │   │   └── login.vue                       // 登录注册页\n│   │   ├── msite\n│   │   │   └── msite.vue                       // 商铺列表页\n│   │   ├── order\n│   │   │   ├── children\n│   │   │   │   └── orderDetail.vue             // 订单详情页\n│   │   │   └── order.vue                       // 订单列表页\n│   │   ├── points\n│   │   │   ├── children\n│   │   │   │   └── detail.vue                  // 积分说明\n│   │   │   └── points.vue                      // 积分页\n│   │   ├── profile\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   ├── address.vue             // 地址\n│   │   │   │   │   └── children\n│   │   │   │   │       ├── add.vue             // 新增地址\n│   │   │   │   │       └── children\n│   │   │   │   │           └── addDetail.vue   // 搜索地址\n│   │   │   │   ├── info.vue                    // 帐户信息\n│   │   │   │   └── setusername.vue             // 重置用户名\n│   │   │   └── profile.vue                     // 个人中心\n│   │   ├── search\n│   │   │   └── search.vue                      // 搜索页\n│   │   ├── service\n│   │   │   ├── children\n│   │   │   │   └── questionDetail.vue          // 问题详情\n│   │   │   └── service.vue                     // 服务中心\n│   │   ├── shop\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   └── shopSafe.vue            // 商铺认证信息页\n│   │   │   │   ├── foodDetail.vue              // 商铺信息页\n│   │   │   │   └── shopDetail.vue              // 单个商铺信息页\n│   │   │   └── shop.vue                        // 商铺筛选页\n│   │   └── vipcard\n│   │       ├── children\n│   │       │   ├── invoiceRecord.vue           // 购买记录\n│   │       │   ├── useCart.vue                 // 使用卡号购买\n│   │       │   └── vipDescription.vue          // 会员说明\n│   │       └── vipcard.vue                     // 会员卡办理页\n│   ├── plugins                                 // 引用的插件\n│   ├── router\n│   │   └── router.js                           // 路由配置\n│   ├── service                                 // 数据交互统一调配\n│   │   ├── getData.js                          // 获取数据的统一调配文件，对接口进行统一管理\n│   │   └── tempdata                            // 开发阶段的临时数据\n│   ├── store                                   // vuex的状态管理\n│   │   ├── action.js                           // 配置actions\n│   │   ├── getters.js                          // 配置getters\n│   │   ├── index.js                            // 引用vuex，创建store\n│   │   ├── modules                             // store模块\n│   │   ├── mutation-types.js                   // 定义常量muations名\n│   │   └── mutations.js                        // 配置mutations\n│   └── style\n│       ├── common.scss                         // 公共样式文件\n│       ├── mixin.scss                          // 样式配置文件\n│       └── swiper.min.css\n│   ├── App.vue                                 // 页面入口文件\n│   ├── main.js                                 // 程序入口文件，加载各种公共组件\n├── favicon.ico                                 // 图标\n├── index.html                                  // 入口html文件\n.\n\n56 directories, 203 files\n```\n\n# License\n\n[GPL](https://github.com/bailicangdu/vue2-elm/blob/master/COPYING)\n"
  },
  {
    "path": "build/build.js",
    "content": "// https://github.com/shelljs/shelljs\nrequire('shelljs/global')\nenv.NODE_ENV = 'production'\n\nvar path = require('path')\nvar config = require('../config')\nvar ora = require('ora')\nvar webpack = require('webpack')\nvar webpackConfig = require('./webpack.prod.conf')\n\nvar spinner = ora('building for production...')\nspinner.start()\n\nvar assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory)\nrm('-rf', assetsPath)\nmkdir('-p', assetsPath)\ncp('-R', 'static/*', assetsPath)\n\nwebpack(webpackConfig, function(err, stats) {\n    spinner.stop()\n    if (err) throw err\n    process.stdout.write(stats.toString({\n        colors: true,\n        modules: false,\n        children: false,\n        chunks: false,\n        chunkModules: false\n    }) + '\\n')\n})"
  },
  {
    "path": "build/dev-client.js",
    "content": "/* eslint-disable */\nrequire('eventsource-polyfill')\nvar hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')\n\nhotClient.subscribe(function(event) {\n\tif (event.action === 'reload') {\n\t\twindow.location.reload()\n\t}\n})"
  },
  {
    "path": "build/dev-server.js",
    "content": "var config = require('../config')\nif (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV)\nvar path = require('path')\nvar express = require('express')\nvar webpack = require('webpack')\nvar opn = require('opn')\nvar proxyMiddleware = require('http-proxy-middleware')\nvar webpackConfig = require('./webpack.dev.conf')\n\n// default port where dev server listens for incoming traffic\nvar port = process.env.PORT || config.dev.port\n    // Define HTTP proxies to your custom API backend\n    // https://github.com/chimurai/http-proxy-middleware\n\nvar server = express()\nvar compiler = webpack(webpackConfig)\n\nvar devMiddleware = require('webpack-dev-middleware')(compiler, {\n    publicPath: webpackConfig.output.publicPath,\n    stats: {\n        colors: true,\n        chunks: false\n    }\n})\n\nvar hotMiddleware = require('webpack-hot-middleware')(compiler)\n    // force page reload when html-webpack-plugin template changes\ncompiler.plugin('compilation', function(compilation) {\n    compilation.plugin('html-webpack-plugin-after-emit', function(data, cb) {\n        hotMiddleware.publish({\n            action: 'reload'\n        })\n        cb()\n    })\n})\n\nvar context = config.dev.context\n\nswitch(process.env.NODE_ENV){\n    case 'local': var proxypath = 'http://localhost:8001'; break;\n    case 'online': var proxypath = 'https://elm.cangdu.org'; break;\n    default:  var proxypath = config.dev.proxypath;\n}\nvar options = {\n    target: proxypath,\n    changeOrigin: true,\n}\nif (context.length) {\n    server.use(proxyMiddleware(context, options))\n}\n\n// handle fallback for HTML5 history API\nserver.use(require('connect-history-api-fallback')())\n\n// serve webpack bundle output\nserver.use(devMiddleware)\n\n// enable hot-reload and state-preserving\n// compilation error display\nserver.use(hotMiddleware)\n\n// serve pure static assets\nvar staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory)\nserver.use(staticPath, express.static('./static'))\n\nmodule.exports = server.listen(port, function(err) {\n    if (err) {\n        console.log(err)\n        return\n    }\n    var uri = 'http://localhost:' + port\n    console.log('Listening at ' + uri + '\\n')\n\n    // when env is testing, don't need open it\n    if (process.env.NODE_ENV !== 'testing') {\n        opn(uri)\n    }\n})\n"
  },
  {
    "path": "build/utils.js",
    "content": "var path = require('path')\nvar config = require('../config')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin')\n\nexports.assetsPath = function(_path) {\n    var assetsSubDirectory = process.env.NODE_ENV === 'production' ? config.build.assetsSubDirectory : config.dev.assetsSubDirectory\n    return path.posix.join(assetsSubDirectory, _path)\n}\n\nexports.cssLoaders = function(options) {\n    options = options || {}\n        // generate loader string to be used with extract text plugin\n    function generateLoaders(loaders) {\n        var sourceLoader = loaders.map(function(loader) {\n            var extraParamChar\n            if (/\\?/.test(loader)) {\n                loader = loader.replace(/\\?/, '-loader?')\n                extraParamChar = '&'\n            } else {\n                loader = loader + '-loader'\n                extraParamChar = '?'\n            }\n            return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '')\n        }).join('!')\n\n        // (which is the case during production build)\n        if (options.extract) {\n            return ExtractTextPlugin.extract('vue-style-loader', sourceLoader)\n        } else {\n            return ['vue-style-loader', sourceLoader].join('!')\n        }\n    }\n\n    // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html\n    return {\n        css: generateLoaders(['css']),\n        postcss: generateLoaders(['css']),\n        less: generateLoaders(['css', 'less']),\n        sass: generateLoaders(['css', 'sass?indentedSyntax']),\n        scss: generateLoaders(['css', 'sass']),\n        stylus: generateLoaders(['css', 'stylus']),\n        styl: generateLoaders(['css', 'stylus'])\n    }\n}\n\n// Generate loaders for standalone style files (outside of .vue)\nexports.styleLoaders = function(options) {\n    var output = []\n    var loaders = exports.cssLoaders(options)\n    for (var extension in loaders) {\n        var loader = loaders[extension]\n        output.push({\n            test: new RegExp('\\\\.' + extension + '$'),\n            loader: loader\n        })\n    }\n    return output\n}"
  },
  {
    "path": "build/webpack.base.conf.js",
    "content": "var path = require('path')\nvar config = require('../config')\nvar utils = require('./utils')\nvar projectRoot = path.resolve(__dirname, '../')\n\nvar env = process.env.NODE_ENV\n    // check env & config/index.js to decide weither to enable CSS Sourcemaps for the\n    // various preprocessor loaders added to vue-loader at the end of this file\nvar cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap)\nvar cssSourceMapProd = (env === 'production' && config.build.productionSourceMap)\nvar useCssSourceMap = cssSourceMapDev || cssSourceMapProd\n\n\nmodule.exports = {\n    entry: {\n        app: './src/main.js'\n    },\n    output: {\n        path: config.build.assetsRoot,\n        publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,\n        filename: '[name].js'\n    },\n    resolve: {\n        extensions: ['', '.js', '.vue', '.less', '.css', '.scss'],\n        fallback: [path.join(__dirname, '../node_modules')],\n        alias: {\n            'vue$': 'vue/dist/vue.common.js',\n            'src': path.resolve(__dirname, '../src'),\n            'assets': path.resolve(__dirname, '../src/assets'),\n            'components': path.resolve(__dirname, '../src/components')\n        }\n    },\n    resolveLoader: {\n        fallback: [path.join(__dirname, '../node_modules')]\n    },\n    module: {\n        loaders: [{\n            test: /\\.vue$/,\n            loader: 'vue'\n        }, {\n            test: /\\.js$/,\n            loader: 'babel',\n            include: projectRoot,\n            exclude: /node_modules/\n        }, {\n            test: /\\.json$/,\n            loader: 'json'\n        }, {\n            test: /\\.(png|jpe?g|gif|svg)(\\?.*)?$/,\n            loader: 'url',\n            query: {\n                limit: 10000,\n                name: utils.assetsPath('img/[name].[ext]')\n            }\n        }, {\n            test: /\\.(woff2?|eot|ttf|otf)(\\?.*)?$/,\n            loader: 'url',\n            query: {\n                limit: 10000,\n                name: utils.assetsPath('fonts/[name].[hash:7].[ext]')\n            }\n        }]\n    },\n    vue: {\n        loaders: utils.cssLoaders({\n            sourceMap: useCssSourceMap\n        }),\n        postcss: [\n            require('autoprefixer')({\n                browsers: [\n                  'Android >= 4.4',\n                  'iOS >= 8'\n                ]\n            })\n        ]\n    }\n}\n"
  },
  {
    "path": "build/webpack.dev.conf.js",
    "content": "var config = require('../config')\nvar webpack = require('webpack')\nvar merge = require('webpack-merge')\nvar utils = require('./utils')\nvar baseWebpackConfig = require('./webpack.base.conf')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\n\n// add hot-reload related code to entry chunks\nObject.keys(baseWebpackConfig.entry).forEach(function(name) {\n    baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name])\n})\n\nmodule.exports = merge(baseWebpackConfig, {\n    module: {\n        loaders: utils.styleLoaders({\n            sourceMap: config.dev.cssSourceMap\n        })\n    },\n    // eval-source-map is faster for development\n    devtool: '#eval-source-map',\n    plugins: [\n        new webpack.DefinePlugin({\n            'process.env': config.dev.env\n        }),\n        // https://github.com/glenjamin/webpack-hot-middleware#installation--usage\n        new webpack.optimize.OccurenceOrderPlugin(),\n        new webpack.HotModuleReplacementPlugin(),\n        new webpack.NoErrorsPlugin(),\n        // https://github.com/ampedandwired/html-webpack-plugin\n        new HtmlWebpackPlugin({\n            filename: 'index.html',\n            template: 'index.html',\n            favicon: 'favicon.ico',\n            inject: true\n        })\n    ]\n})"
  },
  {
    "path": "build/webpack.prod.conf.js",
    "content": "var path = require('path')\nvar config = require('../config')\nvar utils = require('./utils')\nvar webpack = require('webpack')\nvar merge = require('webpack-merge')\nvar baseWebpackConfig = require('./webpack.base.conf')\nvar ExtractTextPlugin = require('extract-text-webpack-plugin')\nvar HtmlWebpackPlugin = require('html-webpack-plugin')\nvar env = config.build.env\n\nvar webpackConfig = merge(baseWebpackConfig, {\n    module: {\n        loaders: utils.styleLoaders({\n            sourceMap: config.build.productionSourceMap,\n            extract: true\n        })\n    },\n    //devtool: config.build.productionSourceMap ? '#source-map' : false,\n    output: {\n        path: config.build.assetsRoot,\n        filename: utils.assetsPath('js/[name].js'),\n        chunkFilename: utils.assetsPath('js/[name].[chunkhash].min.js')\n    },\n    vue: {\n        loaders: utils.cssLoaders({\n            sourceMap: config.build.productionSourceMap,\n            extract: true\n        })\n    },\n    plugins: [\n        // http://vuejs.github.io/vue-loader/en/workflow/production.html\n        new webpack.DefinePlugin({\n            'process.env': env\n        }),\n        new webpack.optimize.UglifyJsPlugin({\n            compress: {\n                warnings: false\n            }\n        }),\n        new webpack.optimize.OccurrenceOrderPlugin(),\n        // extract css into its own file\n        new ExtractTextPlugin(utils.assetsPath('css/[name].css')),\n        // generate dist index.html with correct asset hash for caching.\n        // you can customize output by editing /index.html\n        // see https://github.com/ampedandwired/html-webpack-plugin\n        new HtmlWebpackPlugin({\n            filename: config.build.index,\n            template: 'index.html',\n            inject: true,\n            // minify: {\n            //     removeComments: true,\n            //     collapseWhitespace: true,\n            //     removeAttributeQuotes: true\n            //         // more options:\n            //         // https://github.com/kangax/html-minifier#options-quick-reference\n            // },\n            // necessary to consistently work with multiple chunks via CommonsChunkPlugin\n            chunksSortMode: 'dependency'\n        }),\n        // split vendor js into its own file\n        new webpack.optimize.CommonsChunkPlugin({\n            name: 'vendor',\n            minChunks: function(module, count) {\n                // any required modules inside node_modules are extracted to vendor\n                return (\n                    module.resource &&\n                    /\\.js$/.test(module.resource) &&\n                    module.resource.indexOf(\n                        path.join(__dirname, '../node_modules')\n                    ) === 0\n                )\n            }\n        }),\n        // extract webpack runtime and module manifest to its own file in order to\n        // prevent vendor hash from being updated whenever app bundle is updated\n        new webpack.optimize.CommonsChunkPlugin({\n            name: 'manifest',\n            chunks: ['vendor']\n        })\n    ]\n})\n\nif (config.build.productionGzip) {\n    var CompressionWebpackPlugin = require('compression-webpack-plugin')\n\n    webpackConfig.plugins.push(\n        new CompressionWebpackPlugin({\n            asset: '[path].gz[query]',\n            algorithm: 'gzip',\n            test: new RegExp(\n                '\\\\.(' +\n                config.build.productionGzipExtensions.join('|') +\n                ')$'\n            ),\n            threshold: 10240,\n            minRatio: 0.8\n        })\n    )\n}\n\nmodule.exports = webpackConfig"
  },
  {
    "path": "config/index.js",
    "content": "// see http://vuejs-templates.github.io/webpack for documentation.\nvar path = require('path')\n\nmodule.exports = {\n    build: {\n        env: {\n            NODE_ENV: '\"production\"'\n        },\n        index: path.resolve(__dirname, '../elm/index.html'),\n        assetsRoot: path.resolve(__dirname, '../elm'),\n        assetsSubDirectory: 'static',\n        assetsPublicPath: '/elm/',\n        productionSourceMap: true,\n        // Surge or Netlify already gzip all static assets for you.\n        // Before setting to `true`, make sure to:\n        // npm install --save-dev compression-webpack-plugin\n        productionGzip: false,\n        productionGzipExtensions: ['js', 'css']\n    },\n    dev: {\n        env: {\n            NODE_ENV: '\"development\"'\n        },\n        port: 8000,\n        assetsSubDirectory: 'static',\n        assetsPublicPath: '/',\n        context: [ //代理路径\n            '/shopping',\n            '/ugc',\n            '/v1',\n            '/v2',\n            '/v3',\n            '/v4',\n            '/bos',\n            '/member',\n            '/promotion',\n            '/eus',\n            '/payapi',\n            '/img',\n        ],\n        proxypath: 'http://cangdu.org:8001',\n        // CSS Sourcemaps off by default because relative paths are \"buggy\"\n        // with this option, according to the CSS-Loader README\n        // (https://github.com/webpack/css-loader#sourcemaps)\n        // In our experience, they generally work as expected,\n        // just be aware of this issue when enabling this option.\n        cssSourceMap: false\n    }\n}"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui\">\n    <meta name=\"screen-orientation\" content=\"portrait\"/>\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"format-detection\" content=\"telephone=no\">\n    <meta name=\"full-screen\" content=\"yes\">\n    <meta name=\"x5-fullscreen\" content=\"true\">\n    <link rel=\"dns-prefetch\" href=\"//cangdu.org\">\n    <link rel=\"dns-prefetch\" href=\"//elm.cangdu.org\">\n    <title>elm</title>\n  </head>\n  <body>\n    <div id=\"app\">\n    \t<router-view></router-view>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"elm\",\n  \"version\": \"2.0.1\",\n  \"description\": \"vue2-elm\",\n  \"author\": \"cangdu <1264889788@qq.com>\",\n  \"private\": true,\n  \"license\": \"GPL\",\n  \"scripts\": {\n    \"dev\": \"cross-env NODE_ENV=online node build/dev-server.js\",\n    \"local\": \"cross-env NODE_ENV=local node build/dev-server.js\",\n    \"build\": \"node build/build.js\"\n  },\n  \"dependencies\": {\n    \"better-scroll\": \"1.15.2\",\n    \"fastclick\": \"^1.0.6\",\n    \"iscroll\": \"^5.2.0\",\n    \"showdown\": \"^1.6.4\",\n    \"vue\": \"^2.1.0\",\n    \"vue-router\": \"^2.1.1\",\n    \"vuex\": \"^2.0.0\"\n  },\n  \"devDependencies\": {\n    \"autoprefixer\": \"^6.4.0\",\n    \"autoprefixer-loader\": \"^3.2.0\",\n    \"babel-core\": \"^6.0.0\",\n    \"babel-loader\": \"^6.0.0\",\n    \"babel-plugin-transform-runtime\": \"^6.0.0\",\n    \"babel-preset-es2015\": \"^6.0.0\",\n    \"babel-preset-stage-2\": \"^6.0.0\",\n    \"babel-register\": \"^6.0.0\",\n    \"babel-runtime\": \"^6.23.0\",\n    \"chalk\": \"^1.1.3\",\n    \"connect-history-api-fallback\": \"^1.1.0\",\n    \"cross-env\": \"^5.0.0\",\n    \"css-loader\": \"^0.25.0\",\n    \"eventsource-polyfill\": \"^0.9.6\",\n    \"express\": \"^4.13.3\",\n    \"extract-text-webpack-plugin\": \"^1.0.1\",\n    \"file-loader\": \"^0.9.0\",\n    \"function-bind\": \"^1.0.2\",\n    \"html-webpack-plugin\": \"^2.8.1\",\n    \"http-proxy-middleware\": \"^0.17.2\",\n    \"json-loader\": \"^0.5.4\",\n    \"less\": \"^2.7.1\",\n    \"less-loader\": \"^2.2.3\",\n    \"node-gyp\": \"^3.4.0\",\n    \"node-sass\": \"^4.9.2\",\n    \"opn\": \"^4.0.2\",\n    \"ora\": \"^0.3.0\",\n    \"sass\": \"^0.5.0\",\n    \"sass-loader\": \"^4.1.1\",\n    \"scss\": \"^0.2.4\",\n    \"scss-loader\": \"0.0.1\",\n    \"semver\": \"^5.3.0\",\n    \"shelljs\": \"^0.7.4\",\n    \"style-loader\": \"^0.13.1\",\n    \"url-loader\": \"^0.5.7\",\n    \"vue-loader\": \"^10.0.0\",\n    \"vue-style-loader\": \"^1.0.0\",\n    \"vue-template-compiler\": \"^2.1.0\",\n    \"webpack\": \"^1.13.2\",\n    \"webpack-dev-middleware\": \"^1.8.3\",\n    \"webpack-dev-server\": \"^1.16.2\",\n    \"webpack-hot-middleware\": \"^2.12.2\",\n    \"webpack-merge\": \"^0.14.1\"\n  },\n  \"engines\": {\n    \"node\": \">= 4.0.0\",\n    \"npm\": \">= 3.0.0\"\n  }\n}\n"
  },
  {
    "path": "src/App.vue",
    "content": "<template>\n\t<div>\n\t\t<transition name=\"router-fade\" mode=\"out-in\">\n\t\t\t<keep-alive>\n\t\t\t    <router-view v-if=\"$route.meta.keepAlive\"></router-view>\n\t\t\t</keep-alive>\n    \t</transition>\n    \t<transition name=\"router-fade\" mode=\"out-in\">\n\t\t\t<router-view v-if=\"!$route.meta.keepAlive\"></router-view>\n\t\t</transition>\n\t\t<svg-icon></svg-icon>\t\n    </div>\n</template>\n\n<script>\n\timport svgIcon from './components/common/svg';\n  \texport default {\n    \tcomponents:{\n            svgIcon\n        },\n  \t}\n\n</script>\n\n<style lang=\"scss\">\n  \t@import './style/common';\n\t.router-fade-enter-active, .router-fade-leave-active {\n\t  \ttransition: opacity .3s;\n\t}\n\t.router-fade-enter, .router-fade-leave-active {\n\t  \topacity: 0;\n\t}\n</style>\n"
  },
  {
    "path": "src/components/common/alertTip.vue",
    "content": " <template>\n    <div class=\"alet_container\">\n\t    <section class=\"tip_text_container\">\n            <div class=\"tip_icon\">\n                <span></span>\n                <span></span>\n            </div>\n            <p class=\"tip_text\">{{alertText}}</p>\n            <div class=\"confrim\" @click=\"closeTip\">确认</div>\n        </section>\n    </div>\n</template>\n\n<script>\n    export default {\n    \tdata(){\n            return{\n                positionY: 0,\n                timer: null,\n            }\n        },\n        mounted(){\n      \n        },\n        props: ['alertText'],\n        methods: {\n            closeTip(){\n                this.$emit('closeTip')\n            }\n        }\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\t@keyframes tipMove{\n       0%   { transform: scale(1) }\n       35%  { transform: scale(.8) }\n       70%  { transform: scale(1.1) }\n       100% { transform: scale(1) }\n    }\n    .alet_container{\n    \tposition: fixed;\n    \ttop: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index: 200;\n    }\n    .tip_text_container{\n        position: absolute;\n        top: 50%;\n        left: 50%;\n        margin-top: -6rem;\n        margin-left: -6rem;\n        width: 12rem;\n        animation: tipMove .4s ;\n        background-color: rgba(255,255,255,1);\n        border: 1px;\n        padding-top: .6rem;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        flex-direction: column;\n        border: 1px;\n        border-radius: 0.25rem;\n        .tip_icon{\n            @include wh(3rem, 3rem);\n            border: 0.15rem solid #f8cb86;\n            border-radius: 50%;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            flex-direction: column;\n            span:nth-of-type(1){\n                @include wh(.12rem, 1.5rem);\n                background-color: #f8cb86;\n            }\n            span:nth-of-type(2){\n                @include wh(.2rem, .2rem);\n                border: 1px;\n                border-radius: 50%;\n                margin-top: .2rem;\n                background-color: #f8cb86;\n            }\n        }\n        .tip_text{\n            @include sc(.7rem, #333);\n            line-height: .9rem;\n            text-align: center;\n            margin-top: .8rem;\n            padding: 0 .4rem;\n        }\n        .confrim{\n            @include sc(.8rem, #fff);\n            font-weight: bold;\n            margin-top: .8rem;\n            background-color: #4cd964;\n            width: 100%;\n            text-align: center;\n            line-height: 1.8rem;\n            border: 1px;\n            border-bottom-left-radius: 0.25rem;\n            border-bottom-right-radius: 0.25rem;\n        }\n    }\n    \n</style>\n"
  },
  {
    "path": "src/components/common/buyCart.vue",
    "content": " <template>\n    <section class=\"cart_module\">\n        <section v-if=\"!foods.specifications.length\" class=\"cart_button\">\n            <transition name=\"showReduce\">\n                <span @click=\"removeOutCart(foods.category_id, foods.item_id, foods.specfoods[0].food_id, foods.specfoods[0].name, foods.specfoods[0].price, '', foods.specfoods[0].packing_fee, foods.specfoods[0].sku_id, foods.specfoods[0].stock)\" v-if=\"foodNum\">\n                    <svg>\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-minus\"></use>\n                    </svg>\n                </span>\n            </transition>\n            <transition name=\"fade\">\n                <span class=\"cart_num\" v-if=\"foodNum\">{{foodNum}}</span>\n            </transition>\n            <svg class=\"add_icon\" @click=\"addToCart(foods.category_id, foods.item_id, foods.specfoods[0].food_id, foods.specfoods[0].name, foods.specfoods[0].price, '', foods.specfoods[0].packing_fee, foods.specfoods[0].sku_id, foods.specfoods[0].stock, $event)\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-add\"></use>\n            </svg>\n        </section>\n        <section v-else class=\"choose_specification\">\n            <section class=\"choose_icon_container\">\n                <transition name=\"showReduce\">\n                    <svg class=\"specs_reduce_icon\" v-if=\"foodNum\" @click=\"showReduceTip\">\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-minus\"></use>\n                    </svg>\n                </transition>\n                <transition name=\"fade\">\n                    <span class=\"cart_num\" v-if=\"foodNum\">{{foodNum}}</span>\n                </transition>\n                <span class=\"show_chooselist\" @click=\"showChooseList(foods)\">选规格</span>\n            </section>\n        </section>\n    </section>\n</template>\n\n<script>\n    import {mapState, mapMutations} from 'vuex'\n    export default {\n    \tdata(){\n            return{\n               showMoveDot: [], //控制下落的小圆点显示隐藏\n            }\n        },\n        mounted(){\n\n        },\n        computed: {\n            ...mapState([\n                'cartList'\n            ]),\n            /**\n             * 监听cartList变化，更新当前商铺的购物车信息shopCart，同时返回一个新的对象\n             */\n            shopCart: function (){\n                return Object.assign({},this.cartList[this.shopId]);\n            },\n            //shopCart变化的时候重新计算当前商品的数量\n            foodNum: function (){\n                let category_id = this.foods.category_id;\n                let item_id = this.foods.item_id;\n                if (this.shopCart&&this.shopCart[category_id]&&this.shopCart[category_id][item_id]) {\n                    let num = 0;\n                    Object.values(this.shopCart[category_id][item_id]).forEach((item,index) => {\n                        num += item.num;\n                    })\n                    return num;\n                }else {\n                    return 0;\n                }\n            },\n        },\n        props:['foods', 'shopId'],\n        methods: {\n            ...mapMutations([\n                'ADD_CART','REDUCE_CART',\n            ]),\n            //移出购物车\n            removeOutCart(category_id, item_id, food_id, name, price, specs, packing_fee, sku_id, stock){\n                if (this.foodNum > 0) {\n                    this.REDUCE_CART({shopid: this.shopId, category_id, item_id, food_id, name, price, specs, packing_fee, sku_id, stock});\n                }\n            },\n            //加入购物车，计算按钮位置。\n            addToCart(category_id, item_id, food_id, name, price, specs, packing_fee, sku_id, stock, event){\n                this.ADD_CART({shopid: this.shopId, category_id, item_id, food_id, name, price, specs, packing_fee, sku_id, stock});\n                let elLeft = event.target.getBoundingClientRect().left;\n                let elBottom = event.target.getBoundingClientRect().bottom;\n                this.showMoveDot.push(true);\n                this.$emit('showMoveDot', this.showMoveDot, elLeft, elBottom);\n\n            },\n            //显示规格列表\n            showChooseList(foodScroll){\n                this.$emit('showChooseList', foodScroll)\n            },\n            //点击多规格商品的减按钮，弹出提示\n            showReduceTip(){\n                this.$emit('showReduceTip')\n            },\n\n        },\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\t.cart_module{\n        .add_icon{\n            position: relative;\n            z-index: 9;\n        }\n        .cart_button{\n            display: flex;\n            align-items: center;\n        }\n        svg{\n            @include wh(.9rem, .9rem);\n            fill: #3190e8;\n        }\n        .specs_reduce_icon{\n            fill: #999;\n        }\n        .cart_num{\n            @include sc(.65rem, #666);\n            min-width: 1rem;\n            text-align: center;\n            font-family: Helvetica Neue,Tahoma;\n        }\n        .choose_specification{\n            .choose_icon_container{\n                display: flex;\n                align-items: center;\n                .show_chooselist{\n                    display: block;\n                    @include sc(.55rem, #fff);\n                    padding: .1rem .2rem;\n                    background-color: $blue;\n                    border-radius: 0.2rem;\n                    border: 1px solid $blue;\n                }\n            }\n        }\n    }\n    .showReduce-enter-active, .showReduce-leave-active {\n        transition: all .3s ease-out;\n    }\n    .showReduce-enter, .showReduce-leave-active {\n        opacity: 0;\n        transform: translateX(1rem);\n    }\n    .fade-enter-active, .fade-leave-active {\n        transition: all .3s;\n    }\n    .fade-enter, .fade-leave-active {\n        opacity: 0;\n    }\n    .fadeBounce-enter-active, .fadeBounce-leave-active {\n        transition: all .3s;\n    }\n    .fadeBounce-enter, .fadeBounce-leave-active {\n        opacity: 0;\n        transform: scale(.7);\n    }\n\n</style>\n\n"
  },
  {
    "path": "src/components/common/computeTime.vue",
    "content": " <template>\n    <div class=\"page\">\n        <span class=\"rem_time\" style=\"color: orange;border-width: 1px;border-style: solid;border-color: orange;\" @click=\"gotoPay\">\n\t       {{remaining}}\n        </span>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>  \n    </div>\n</template>\n\n<script>\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n    \tdata(){\n            return{\n                countNum: 900,\n                showAlert: false,\n                alertText: null,\n            }\n        },\n        mounted(){\n            this.countNum -= this.numTime;\n            this.remainingTime();\n        },\n        props: ['time'],\n        components: {\n            alertTip,\n        },\n        methods: {\n            closeTip(){\n                this.$emit('closeTip')\n            },\n            //计算时间\n            remainingTime(){\n                clearInterval(this.timer);\n                this.timer = setInterval(() => {\n                    this.countNum --;\n                    if (this.countNum == 0) {\n                        clearInterval(this.timer);\n                        this.showAlert = true;\n                        this.alertText = '支付超时';\n                    }\n                }, 1000);\n            },\n            gotoPay(){\n                this.showAlert = true;\n                this.alertText = '暂不开放支付接口';\n            }\n        },\n        computed: {\n            //转换时间成分秒\n            remaining: function (){\n                let minute = parseInt(this.countNum/60);\n                let second = parseInt(this.countNum%60);\n                if (minute < 10) {\n                    minute = '0' + minute;\n                }\n                if (second < 10) {\n                    second = '0' + second;\n                }\n                return '去支付(还剩' + minute + '分' + second + '秒)';\n            },\n            //订单返回时间秒分分别处理\n            numTime: function (){\n                if (this.time.toString().indexOf('分钟') !== -1) {\n                    return parseInt(this.time)*60;\n                }else{\n                    return parseInt(this.time);\n                }\n            }\n        },\n\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\t.page{\n        display: inline-block;\n        .rem_time{\n            @include sc(.55rem, orange);\n            padding: .1rem .2rem;\n            border-radius: .15rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/components/common/loading.vue",
    "content": " <template>\n\t<div class=\"loading_container\">\n\t    <div class=\"load_img\" :style=\"{backgroundPositionY: -(positionY%7)*2.5 + 'rem'}\">\n\t    </div>\n    \t<svg class=\"load_ellipse\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n\t\t\t<ellipse cx=\"26\" cy=\"10\" rx=\"26\" ry=\"10\" style=\"fill:#ddd;stroke:none;\"></ellipse>\n\t\t</svg>\n\t</div>\n</template>\n\n<script>\n    export default {\n    \tdata(){\n            return{\n                positionY: 0,\n                timer: null,\n            }\n        },\n        mounted(){\n        \tthis.timer = setInterval(() => {\n        \t\tthis.positionY ++;\n        \t}, 600)\n        },\n        beforeDestroy(){\n        \tclearInterval(this.timer);\n        }\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\t@keyframes load{\n\t\t0%   {transform: translateY(0px);}\n\t\t50%  {transform: translateY(-50px);}\n\t\t100% {transform: translateY(0px);}\n\t}\n\t@keyframes ellipse{\n\t\t0%   {transform: scale(1);}\n\t\t50%  {transform: scale(0.3);}\n\t\t100% {transform: scale(1);}\n\t}\n    .loading_container{\n    \tposition: fixed;\n    \ttop: 50%;\n    \tleft: 50%;\n    \ttransform: translate(-50%, -50%);\n    \t@include wh(2.5rem, 2.5rem);\n    }\n    .load_img{\n    \t@include wh(100%, 100%);\n    \tbackground: url(../../images/icon_loading.png) no-repeat 0 0;\n    \tbackground-size: 2.5rem auto;\n    \ttransform: translateY(0px);\n    \tanimation: load .6s infinite ease-in-out;\n    \tposition: relative;\n    \tz-index: 11;\n    }\n\t.load_ellipse{\n\t\tposition: absolute;\n\t\t@include wh(2.6rem, 2rem);\n\t\ttop: 2.2rem;\n        left: 0.2rem;\n\t\tz-index: 10;\n\t\tanimation: ellipse .6s infinite ease-in-out;\n\t}\n</style>\n"
  },
  {
    "path": "src/components/common/mixin.js",
    "content": "import { getStyle } from '../../config/mUtils'\nimport { imgBaseUrl, localapi, proapi } from '../../config/env'\n\nexport const loadMore = {\n\tdirectives: {\n\t\t'load-more': {\n\t\t\tbind: (el, binding) => {\n\t\t\t\tlet windowHeight = window.screen.height;\n\t\t\t\tlet height;\n\t\t\t\tlet setTop;\n\t\t\t\tlet paddingBottom;\n\t\t\t\tlet marginBottom;\n\t\t\t\tlet requestFram;\n\t\t\t\tlet oldScrollTop;\n\t\t\t\tlet scrollEl;\n\t\t\t\tlet heightEl;\n\t\t\t\tlet scrollType = el.attributes.type && el.attributes.type.value;\n\t\t\t\tlet scrollReduce = 2;\n\t\t\t\tif (scrollType == 2) {\n\t\t\t\t\tscrollEl = el;\n\t\t\t\t\theightEl = el.children[0];\n\t\t\t\t} else {\n\t\t\t\t\tscrollEl = document.body;\n\t\t\t\t\theightEl = el;\n\t\t\t\t}\n\n\t\t\t\tel.addEventListener('touchstart', () => {\n\t\t\t\t\theight = heightEl.clientHeight;\n\t\t\t\t\tif (scrollType == 2) {\n\t\t\t\t\t\theight = height\n\t\t\t\t\t}\n\t\t\t\t\tsetTop = el.offsetTop;\n\t\t\t\t\tpaddingBottom = getStyle(el, 'paddingBottom');\n\t\t\t\t\tmarginBottom = getStyle(el, 'marginBottom');\n\t\t\t\t}, false)\n\n\t\t\t\tel.addEventListener('touchmove', () => {\n\t\t\t\t\tloadMore();\n\t\t\t\t}, false)\n\n\t\t\t\tel.addEventListener('touchend', () => {\n\t\t\t\t\toldScrollTop = scrollEl.scrollTop;\n\t\t\t\t\tmoveEnd();\n\t\t\t\t}, false)\n\n\t\t\t\tconst moveEnd = () => {\n\t\t\t\t\trequestFram = requestAnimationFrame(() => {\n\t\t\t\t\t\tif (scrollEl.scrollTop != oldScrollTop) {\n\t\t\t\t\t\t\toldScrollTop = scrollEl.scrollTop;\n\t\t\t\t\t\t\tmoveEnd()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcancelAnimationFrame(requestFram);\n\t\t\t\t\t\t\theight = heightEl.clientHeight;\n\t\t\t\t\t\t\tloadMore();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst loadMore = () => {\n\t\t\t\t\tif (scrollEl.scrollTop + windowHeight >= height + setTop + paddingBottom + marginBottom - scrollReduce) {\n\t\t\t\t\t\tbinding.value();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nexport const getImgPath = {\n\tmethods: {\n\t\t//传递过来的图片地址需要处理后才能正常使用\n\t\tgetImgPath(path) {\n\t\t\tlet suffix;\n\t\t\tif (!path) {\n\t\t\t\treturn '//elm.cangdu.org/img/default.jpg'\n\t\t\t}\n\t\t\tif (path.indexOf('jpeg') !== -1) {\n\t\t\t\tsuffix = '.jpeg'\n\t\t\t} else {\n\t\t\t\tsuffix = '.png'\n\t\t\t}\n\t\t\tlet url = '/' + path.substr(0, 1) + '/' + path.substr(1, 2) + '/' + path.substr(3) + suffix;\n\t\t\treturn 'https://fuss10.elemecdn.com' + url\n\t\t},\n\t}\n\n}"
  },
  {
    "path": "src/components/common/ratingStar.vue",
    "content": " <template>\n\t<div class=\"rating_container\">\n        <section class=\"star_container\">\n            <svg class=\"grey_fill\" v-for=\"num in 5\" :key=\"num\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#star\"></use>\n            </svg>\n        </section>\n        <div :style=\"'width:' + rating*2/5 + 'rem'\" class=\"star_overflow\">\n            <section class=\"star_container\" >\n                <svg  class=\"orange_fill\" v-for=\"num in 5\" :key=\"num\">\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#star\"></use>\n                </svg>\n            </section>\n        </div>\n    </div>\n</template>\n\n<script>\n    export default {\n    \tdata(){\n            return{\n               \n            }\n        },\n        mounted(){\n        \t\n        },\n        props:['rating'],\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\t.rating_container{\n        position: relative;\n        top: .2rem;\n        @include wh(2rem, .4rem);\n        .star_overflow{\n            overflow: hidden;\n            position: relative;\n            height: 100%;\n        }\n        .star_container{\n            position: absolute;\n            display: flex;\n            width: 2rem;\n            height: 0.4rem;\n            top: -0.02rem;\n            left: -0.02rem;\n            .grey_fill{\n                fill: #d1d1d1;\n            }\n            .orange_fill{\n                fill: #ff9a0d;\n            }\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/components/common/shoplist.vue",
    "content": "<template>\n\t<div class=\"shoplist_container\">\n\t\t<ul v-load-more=\"loaderMore\" v-if=\"shopListArr.length\" type=\"1\">\n\t\t\t<router-link :to=\"{path: 'shop', query:{geohash, id: item.id}}\" v-for=\"item in shopListArr\" tag='li' :key=\"item.id\" class=\"shop_li\">\n\t\t\t\t<section>\n\t\t\t\t\t<img :src=\"imgBaseUrl + item.image_path\" class=\"shop_img\">\n\t\t\t\t</section>\n\t\t\t\t<hgroup class=\"shop_right\">\n\t\t\t\t\t<header class=\"shop_detail_header\">\n\t\t\t\t\t\t<h4 :class=\"item.is_premium? 'premium': ''\" class=\"\" class=\"shop_title ellipsis\">{{item.name}}</h4>\n\t\t\t\t\t\t<ul class=\"shop_detail_ul\">\n\t\t\t\t\t\t\t<li v-for=\"item in item.supports\" :key=\"item.id\" class=\"supports\">{{item.icon_name}}</li>\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</header>\n\t\t\t\t\t<h5 class=\"rating_order_num\">\n\t\t\t\t\t\t<section class=\"rating_order_num_left\">\n\t\t\t\t\t\t\t<section class=\"rating_section\">\n\t\t\t\t\t\t\t\t<rating-star :rating='item.rating'></rating-star>\n\t\t\t\t\t\t\t\t<span class=\"rating_num\">{{item.rating}}</span>\n\t\t\t\t\t\t\t</section>\n\t\t\t\t\t\t\t<section class=\"order_section\">\n\t\t\t\t\t\t\t\t月售{{item.recent_order_num}}单\n\t\t\t\t\t\t\t</section>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t\t<section class=\"rating_order_num_right\">\n\t\t\t\t\t\t\t<span class=\"delivery_style delivery_left\" v-if=\"item.delivery_mode\">{{item.delivery_mode.text}}</span>\n\t\t\t\t\t\t\t<span class=\"delivery_style delivery_right\" v-if=\"zhunshi(item.supports)\">准时达</span>\n\t\t\t\t\t\t</section>\n\t\t\t\t\t</h5>\n\t\t\t\t\t<h5 class=\"fee_distance\">\n\t\t\t\t\t\t<p class=\"fee\">\n\t\t\t\t\t\t\t¥{{item.float_minimum_order_amount}}起送\n\t\t\t\t\t\t\t<span class=\"segmentation\">/</span>\n\t\t\t\t\t\t\t{{item.piecewise_agent_fee.tips}}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"distance_time\">\n\t\t\t\t\t\t\t<span v-if=\"Number(item.distance)\">{{item.distance > 1000? (item.distance/1000).toFixed(2) + 'km': item.distance + 'm'}}\n\t\t\t\t\t\t\t\t<span class=\"segmentation\">/</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span v-else>{{item.distance}}</span>\n\t\t\t\t\t\t\t<span class=\"segmentation\">/</span>\n\t\t\t\t\t\t\t<span class=\"order_time\">{{item.order_lead_time}}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</h5>\n\t\t\t\t</hgroup>\n\t\t\t</router-link>\n\t\t</ul>\n\t\t<ul v-else class=\"animation_opactiy\">\n\t\t\t<li class=\"list_back_li\" v-for=\"item in 10\" :key=\"item\">\n\t\t\t\t<img src=\"../../images/shopback.svg\" class=\"list_back_svg\">\n\t\t\t</li>\n\t\t</ul>\n\t\t<p v-if=\"touchend\" class=\"empty_data\">没有更多了</p>\n\t\t<aside class=\"return_top\" @click=\"backTop\" v-if=\"showBackStatus\">\n\t\t\t<svg class=\"back_top_svg\">\n\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#backtop\"></use>\n\t\t\t</svg>\n\t\t</aside>\n\t\t<div ref=\"abc\" style=\"background-color: red;\"></div>\n\t\t<transition name=\"loading\">\n\t\t\t<loading v-show=\"showLoading\"></loading>\n\t\t</transition>\n\t</div>\n</template>\n\n<script>\n\nimport {mapState} from 'vuex'\nimport {shopList} from 'src/service/getData'\nimport {imgBaseUrl} from 'src/config/env'\nimport {showBack, animate} from 'src/config/mUtils'\nimport {loadMore, getImgPath} from './mixin'\nimport loading from './loading'\nimport ratingStar from './ratingStar'\n\nexport default {\n\tdata(){\n\t\treturn {\n\t\t\toffset: 0, // 批次加载店铺列表，每次加载20个 limit = 20\n\t\t\tshopListArr:[], // 店铺列表数据\n\t\t\tpreventRepeatReuqest: false, //到达底部加载数据，防止重复加载\n\t\t\tshowBackStatus: false, //显示返回顶部按钮\n\t\t\tshowLoading: true, //显示加载动画\n\t\t\ttouchend: false, //没有更多数据\n\t\t\timgBaseUrl,\n\t\t}\n\t},\n\tmounted(){\n\t\tthis.initData();\n\t},\n\tcomponents: {\n\t\tloading,\n\t\tratingStar,\n\t},\n\tprops: ['restaurantCategoryId', 'restaurantCategoryIds', 'sortByType', 'deliveryMode', 'supportIds', 'confirmSelect', 'geohash'],\n\tmixins: [loadMore, getImgPath],\n\tcomputed: {\n\t\t...mapState([\n\t\t\t'latitude','longitude'\n\t\t]),\n\t},\n\tupdated(){\n\t\t// console.log(this.supportIds, this.sortByType)\n\t},\n\tmethods: {\n\t\tasync initData(){\n\t\t\t//获取数据\n\t\t\tlet res = await shopList(this.latitude, this.longitude, this.offset, this.restaurantCategoryId);\n\t\t\tthis.shopListArr = [...res];\n\t\t\tif (res.length < 20) {\n\t\t\t\tthis.touchend = true;\n\t\t\t}\n\t\t\tthis.hideLoading();\n\t\t\t//开始监听scrollTop的值，达到一定程度后显示返回顶部按钮\n\t\t\tshowBack(status => {\n\t\t\t\tthis.showBackStatus = status;\n\t\t\t});\n\t\t},\n\t\t//到达底部加载更多数据\n\t\tasync loaderMore(){\n\t\t\tif (this.touchend) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t//防止重复请求\n\t\t\tif (this.preventRepeatReuqest) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.showLoading = true;\n\t\t\tthis.preventRepeatReuqest = true;\n\n\t\t\t//数据的定位加20位\n\t\t\tthis.offset += 20;\n\t\t\tlet res = await shopList(this.latitude, this.longitude, this.offset, this.restaurantCategoryId);\n\t\t\tthis.hideLoading();\n\t\t\tthis.shopListArr = [...this.shopListArr, ...res];\n\t\t\t//当获取数据小于20，说明没有更多数据，不需要再次请求数据\n\t\t\tif (res.length < 20) {\n\t\t\t\tthis.touchend = true;\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.preventRepeatReuqest = false;\n\t\t},\n\t\t//返回顶部\n\t\tbackTop(){\n\t\t\tanimate(document.body, {scrollTop: '0'}, 400,'ease-out');\n\t\t},\n\t\t//监听父级传来的数据发生变化时，触发此函数重新根据属性值获取数据\n\t\tasync listenPropChange(){\n\t\t\tthis.showLoading = true;\n\t\t\tthis.offset = 0;\n\t\t\tlet res = await shopList(this.latitude, this.longitude, this.offset, '', this.restaurantCategoryIds, this.sortByType, this.deliveryMode, this.supportIds);\n\t\t\tthis.hideLoading();\n\t\t\t//考虑到本地模拟数据是引用类型，所以返回一个新的数组\n\t\t\tthis.shopListArr = [...res];\n\t\t},\n\t\t//开发环境与编译环境loading隐藏方式不同\n\t\thideLoading(){\n\t\t\tthis.showLoading = false;\n\t\t},\n\t\tzhunshi(supports){\n\t\t\tlet zhunStatus;\n\t\t\tif ((supports instanceof Array) && supports.length) {\n \t\t\t\tsupports.forEach(item => {\n \t\t\t\t\tif (item.icon_name === '准') {\n \t\t\t\t\t\tzhunStatus = true;\n \t\t\t\t\t}\n \t\t\t\t})\n\t\t\t}else{\n\t\t\t\tzhunStatus = false;\n\t\t\t}\n\t\t\treturn zhunStatus\n\t\t},\n\t},\n\twatch: {\n\t\t//监听父级传来的restaurantCategoryIds，当值发生变化的时候重新获取餐馆数据，作用于排序和筛选\n\t\trestaurantCategoryIds: function (value){\n\t\t\tthis.listenPropChange();\n\t\t},\n\t\t//监听父级传来的排序方式\n\t\tsortByType: function (value){\n\t\t\tthis.listenPropChange();\n\t\t},\n\t\t//监听父级的确认按钮是否被点击，并且返回一个自定义事件通知父级，已经接收到数据，此时父级才可以清除已选状态\n\t\tconfirmSelect: function (value){\n\t\t\tthis.listenPropChange();\n\t\t}\n\t}\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t@import 'src/style/mixin';\n\t.shoplist_container{\n\t\tbackground-color: #fff;\n\t\tmargin-bottom: 2rem;\n\t}\n\t.shop_li{\n\t\tdisplay: flex;\n\t\tborder-bottom: 0.025rem solid #f1f1f1;\n\t\tpadding: 0.7rem 0.4rem;\n\t}\n\t.shop_img{\n\t\t@include wh(2.7rem, 2.7rem);\n\t\tdisplay: block;\n\t\tmargin-right: 0.4rem;\n\t}\n\t.list_back_li{\n\t\theight: 4.85rem;\n\t\t.list_back_svg{\n\t\t\t@include wh(100%, 100%)\n\t\t}\n\t}\n\t.shop_right{\n\t\tflex: auto;\n\t\t.shop_detail_header{\n\t\t\t@include fj;\n\t\t\talign-items: center;\n\t\t\t.shop_title{\n\t\t\t\twidth: 8.5rem;\n\t\t\t\tcolor: #333;\n\t\t\t\tpadding-top: .01rem;\n\t\t\t\t@include font(0.65rem, 0.65rem, 'PingFangSC-Regular');\n\t\t\t\tfont-weight: 700;\n\t\t\t}\n\t\t\t.premium::before{\n\t\t\t\tcontent: '品牌';\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont-size: 0.5rem;\n\t\t\t\tline-height: .6rem;\n\t\t\t\tcolor: #333;\n\t\t\t\tbackground-color: #ffd930;\n\t\t\t\tpadding: 0 0.1rem;\n\t\t\t\tborder-radius: 0.1rem;\n\t\t\t\tmargin-right: 0.2rem;\n\t\t\t}\n\t\t\t.shop_detail_ul{\n\t\t\t\tdisplay: flex;\n\t\t\t\ttransform: scale(.8);\n\t\t\t\tmargin-right: -0.3rem;\n\t\t\t\t.supports{\n\t\t\t\t\t@include sc(0.5rem, #999);\n\t\t\t\t\tborder: 0.025rem solid #f1f1f1;\n\t\t\t\t\tpadding: 0 0.04rem;\n\t\t\t\t\tborder-radius: 0.08rem;\n\t\t\t\t\tmargin-left: 0.05rem;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.rating_order_num{\n\t\t\t@include fj(space-between);\n\t\t\theight: 0.6rem;\n\t\t\tmargin-top: 0.52rem;\n\t\t\t.rating_order_num_left{\n\t\t\t\t@include fj(flex-start);\n\t\t\t\t.rating_section{\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t.rating_num{\n\t\t\t\t\t\t@include sc(0.4rem, #ff6000);\n\t\t\t\t\t\tmargin: 0 0.2rem;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t.order_section{\n\t\t\t\t\ttransform: scale(.8);\n\t\t\t\t\tmargin-left: -0.2rem;\n\t\t\t\t\t@include sc(0.4rem, #666);\n\t\t\t\t}\n\t\t\t}\n\t\t\t.rating_order_num_right{\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\ttransform: scale(.7);\n\t\t\t\tmin-width: 5rem;\n\t\t\t\tjustify-content: flex-end;\n\t\t\t\tmargin-right: -0.8rem;\n\t\t\t\t.delivery_style{\n\t\t\t\t\tfont-size: 0.4rem;\n\t\t\t\t\tpadding: 0.04rem 0.08rem 0;\n\t\t\t\t\tborder-radius: 0.08rem;\n\t\t\t\t\tmargin-left: 0.08rem;\n\t\t\t\t\tborder: 1px;\n\t\t\t\t}\n\t\t\t\t.delivery_left{\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t\tbackground-color: $blue;\n\t\t\t\t\tborder: 0.025rem solid $blue;\n\t\t\t\t}\n\t\t\t\t.delivery_right{\n\t\t\t\t\tcolor: $blue;\n\t\t\t\t\tborder: 0.025rem solid $blue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.fee_distance{\n\t\t\tmargin-top: 0.52rem;\n\t\t\t@include fj;\n\t\t\t@include sc(0.5rem, #333);\n\t\t\t.fee{\n\t\t\t\ttransform: scale(.9);\n\t\t\t\t@include sc(0.5rem, #666);\n\t\t\t}\n\t\t\t.distance_time{\n\t\t\t\ttransform: scale(.9);\n\t\t\t\tspan{\n\t\t\t\t\tcolor: #999;\n\t\t\t\t}\n\t\t\t\t.order_time{\n\t\t\t\t\tcolor: $blue;\n\t\t\t\t}\n\t\t\t\t.segmentation{\n\t\t\t\t\tcolor: #ccc;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.loader_more{\n\t\t@include font(0.6rem, 3);\n\t\ttext-align: center;\n\t    color: #999;\n\t}\n\t.empty_data{\n\t\t@include sc(0.5rem, #666);\n\t\ttext-align: center;\n\t\tline-height: 2rem;\n\t}\n\t.return_top{\n\t\tposition: fixed;\n\t\tbottom: 3rem;\n\t\tright: 1rem;\n\t\t.back_top_svg{\n\t\t\t@include wh(2rem, 2rem);\n\t\t}\n\t}\n\t.loading-enter-active, .loading-leave-active {\n\t\ttransition: opacity 1s\n\t}\n\t.loading-enter, .loading-leave-active {\n\t\topacity: 0\n\t}\n</style>\n"
  },
  {
    "path": "src/components/common/svg.vue",
    "content": "<template>\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"position:absolute;width:0;height:0;visibility:hidden\">\n\t\t<defs>\n\t\t\t<symbol viewBox=\"0 0 60 60\" id=\"eleme\">\n\t\t\t<path fill=\"#3CABFF\" fill-rule=\"evenodd\" d=\"M0 9.375A9.374 9.374 0 0 1 9.375 0h41.25A9.374 9.374 0 0 1 60 9.375v41.25A9.374 9.374 0 0 1 50.625 60H9.375A9.374 9.374 0 0 1 0 50.625V9.375zm35.94 30.204c-5.601 3.147-12.645 1.256-15.834-4.217-3.206-5.501-1.303-12.537 4.25-15.713 4.7-2.689 10.51-1.749 14.127 1.941L27.526 27.89a2.81 2.81 0 0 0-1.037 3.854 2.862 2.862 0 0 0 3.887 1.035l15.988-9.166a17.238 17.238 0 0 0-1.222-2.571c-4.777-8.198-15.358-11.007-23.632-6.275-8.275 4.734-11.11 15.217-6.332 23.415 4.77 8.184 15.322 10.997 23.59 6.297.877-.5 1.654-1.037 2.376-1.623l-1.31-2.248a2.868 2.868 0 0 0-3.893-1.028zm10.824-7.39l-1.418-2.425-4.911 2.798 2.835 4.846 2.454-1.399h.002a2.779 2.779 0 0 0 1.038-3.82z\">\n\t\t\t</path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 28 33\" id=\"user\">\n\t\t\t<path fill-rule=\"evenodd\" d=\"M20.798 19.289c2.636-2.002 4.215-5.091 4.215-8.437 0-5.886-4.845-10.647-10.808-10.647S3.397 4.966 3.397 10.852c0 3.345 1.578 6.433 4.212 8.435l.264-2.678C4.358 18.32 1.591 21.403.168 25.187l1.478.556v-1.579c-1.485.73-1.485.73-1.501 1.079-.054.188-.054.188-.069.278a2.58 2.58 0 0 0-.026.229 9.112 9.112 0 0 0-.019.4c-.008.265-.014.617-.018 1.039-.005.511-.006 1.037-.006 1.451v.027c-.004 1.732 1.41 3.129 3.154 3.129h22.082a3.18 3.18 0 0 0 3.172-3.153l.011-1.305.008-.897.003-.296.001-.083v-.022-.006-.001l.002-.278-.093-.262c-1.385-3.918-4.203-7.122-7.812-8.88l.263 2.678zm-1.911-2.516l-2.045 1.553 2.309 1.125c2.856 1.392 5.106 3.949 6.218 7.093l-.09-.54V26.033l-.001.083-.003.296-.008.897-.011 1.305c0 .01-.011.021-.013.021H3.161c-.007 0 .005.011.005.032v-.031c0-.404.001-.92.006-1.418.004-.4.01-.732.017-.969.004-.121.008-.212.012-.262l-.006.043c-.009.06-.009.06-.058.229-.01.336-.01.336-1.49 1.063H2.74l.385-1.024c1.141-3.035 3.35-5.495 6.131-6.849l2.309-1.124-2.045-1.554c-1.859-1.412-2.964-3.576-2.964-5.92 0-4.129 3.418-7.488 7.649-7.488s7.649 3.359 7.649 7.488c0 2.344-1.106 4.509-2.966 5.921z\" class=\"path1\">\n\t\t\t</path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 32 31\" id=\"shop\">\n\t\t\t<g fill-rule=\"evenodd\">\n\t\t\t  <path d=\"M28.232 1.822C27.905.728 26.97.152 25.759.152H5.588c-1.252 0-1.867.411-2.397 1.415l-.101.243-.443 1.434-.975 3.154-.002.007C.837 9.101.294 10.854.26 10.956l-.059.259c-.231 1.787.337 3.349 1.59 4.448 1.159 1.017 2.545 1.384 3.865 1.384.07 0 .07 0 .132-.002-.01.001-.01.001.061.002 1.32 0 2.706-.367 3.865-1.384a4.96 4.96 0 0 0 .413-.407l-1.043-.946-1.056.931c1.033 1.171 2.51 1.792 4.21 1.801.04.002.088.004.173.004 1.32 0 2.706-.367 3.865-1.384.148-.13.287-.267.418-.411l-1.044-.944-1.057.93c1.033 1.174 2.511 1.796 4.213 1.806.04.002.088.004.173.004 1.32 0 2.706-.367 3.865-1.384.15-.131.29-.27.422-.416l-1.046-.943-1.058.929c1.033 1.177 2.513 1.801 4.218 1.811.04.002.088.004.173.004 1.32 0 2.706-.367 3.865-1.384 1.206-1.058 1.858-2.812 1.676-4.426-.069-.61-.535-2.207-1.354-4.785l-.109-.342a327.554 327.554 0 0 0-1.295-3.966l-.122-.366.014.043h.004zm-2.684.85l.12.361.318.962c.329.999.658 2.011.965 2.973l.108.338c.719 2.262 1.203 3.92 1.24 4.249.08.711-.233 1.553-.735 1.993-.553.485-1.308.685-2.008.685l-.098-.002c-.987-.007-1.695-.306-2.177-.854l-1.044-1.189-1.06 1.175a2.192 2.192 0 0 1-.188.185c-.553.485-1.308.685-2.008.685l-.098-.002c-.985-.007-1.693-.305-2.174-.852l-1.043-1.185-1.059 1.171c-.058.064-.12.125-.186.183-.553.485-1.308.685-2.008.685l-.098-.002c-.984-.007-1.692-.304-2.173-.85L9.101 12.2l-1.058 1.166a2.248 2.248 0 0 1-.184.181c-.553.485-1.307.685-2.008.685l-.061-.001-.131.001c-.701 0-1.455-.2-2.008-.685-.538-.472-.767-1.102-.654-1.971l-1.396-.18 1.338.44c.043-.13.552-1.775 1.425-4.599l.002-.007.975-3.155.443-1.434-1.345-.415 1.245.658c.054-.102.042-.085-.083-.001-.122.082-.143.086-.009.086H25.763c.053 0-.164-.133-.225-.339l.014.043-.004-.001zM5.528 19.48c.778 0 1.408.63 1.408 1.408v7.424a1.408 1.408 0 1 1-2.816 0v-7.424c0-.778.63-1.408 1.408-1.408z\">\n\t\t\t  </path>\n\t\t\t  <path d=\"M.28 29.72c0-.707.58-1.28 1.277-1.28h28.155a1.28 1.28 0 0 1 .007 2.56H1.561A1.278 1.278 0 0 1 .28 29.72z\">\n\t\t\t  </path>\n\t\t\t  <path d=\"M26.008 19.48c.778 0 1.408.63 1.408 1.408v7.424a1.408 1.408 0 1 1-2.816 0v-7.424c0-.778.63-1.408 1.408-1.408z\">\n\t\t\t  </path>\n\t\t\t</g>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 28 33\" id=\"location\">\n\t\t\t<g fill-rule=\"evenodd\">\n\t\t\t  <path d=\"M20.809 21.6L12.9 29.509h1.616l-7.992-7.992a13.003 13.003 0 0 1-.506-.478c-4.25-4.25-4.25-11.14 0-15.389s11.14-4.25 15.389 0c4.25 4.25 4.25 11.14 0 15.389a10.81 10.81 0 0 1-.543.508l-.056.052zm1.56 1.669c.225-.196.443-.401.656-.613 5.142-5.142 5.142-13.48 0-18.622s-13.48-5.142-18.622 0c-5.142 5.142-5.142 13.48 0 18.622.18.18.364.354.553.522l8.753 8.755 8.661-8.664z\" class=\"path1\">\n\t\t\t  </path>\n\t\t\t  <path d=\"M9.428 16.739a6.063 6.063 0 1 0 8.573-8.575 6.063 6.063 0 0 0-8.573 8.575zm1.616-1.616a3.776 3.776 0 1 1 5.34-5.341 3.776 3.776 0 0 1-5.34 5.341z\" class=\"path2\">\n\t\t\t  </path>\n\t\t\t</g>\n\t\t\t</symbol>\n\t\t\t<symbol id=\"star\" viewBox=\"0 0 32 32\">\n\t\t\t<path class=\"path1\" d=\"M16 26.382l-8.16 4.992c-1.5 0.918-2.382 0.264-1.975-1.435l2.226-9.303-7.269-6.218c-1.337-1.143-0.987-2.184 0.755-2.322l9.536-0.758 3.667-8.835c0.674-1.624 1.772-1.613 2.442 0l3.667 8.835 9.536 0.758c1.753 0.139 2.082 1.187 0.755 2.322l-7.269 6.218 2.226 9.303c0.409 1.71-0.485 2.347-1.975 1.435l-8.16-4.992z\">\n\t\t\t</path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 32 32\" id=\"backtop\">\n\t\t\t<g fill-rule=\"evenodd\">\n\t\t\t  <circle cx=\"16\" cy=\"16\" r=\"15\" stroke=\"#999\" stroke-width=\"0.6\" fill=\"none\"/>\n\t\t\t  <line x1=\"16\" y1=\"10\" x2=\"16\" y2=\"21\" style=\"stroke:#999;stroke-width:0.8\"/>\n\t\t\t  <line x1=\"10\" y1=\"10\" x2=\"22\" y2=\"10\" style=\"stroke:#999;stroke-width:0.8\"/>\n\t\t\t  <path d=\"M9.5 18 L16 10 L22.5 18\" style=\"stroke:#999;stroke-width:0.8;fill:none\"/>\n\t\t\t  <text x=\"10\" y=\"27\"  style=\"font-size:6px;fill:#999;font-weight:700;\">顶部</text>\n\t\t\t</g>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 33 32\" id=\"default\">\n\t\t\t<path fill=\"#3b87c8\" d=\"M13.374 29.064a.94.94 0 0 1-.941-.941V6.476l-7.285 6.899a.942.942 0 0 1-1.299-1.364l8.876-8.424a.94.94 0 0 1 1.59.681v23.855a.94.94 0 0 1-.941.941zM20.904 29.355h-.008a.94.94 0 0 1-.375-.078.943.943 0 0 1-.559-.86V3.944a.94.94 0 1 1 1.882 0v22.287l7.238-6.842a.94.94 0 0 1 1.289 1.366l-8.818 8.338a.943.943 0 0 1-.649.264z\">\n\t\t\t</path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 32 32\" id=\"distance\">\n\t\t\t<path fill=\"#2a9bd3\" d=\"M15.884 31.236l-.042.001a.888.888 0 0 1-.59-.224l-7.91-7.91a7.548 7.548 0 0 1-.498-.471 12.752 12.752 0 0 1-3.747-9.045C3.097 6.523 8.824.796 15.888.796s12.791 5.727 12.791 12.791c0 3.532-1.432 6.73-3.747 9.045-.196.196-.409.391-.613.578l-7.813 7.804a.886.886 0 0 1-.589.223l-.035-.001zm0-28.667C9.818 2.59 4.908 7.513 4.908 13.582c0 3.023 1.218 5.762 3.19 7.752l.461.435 7.316 7.316 7.2-7.2q.284-.249.551-.516a10.977 10.977 0 0 0 3.225-7.787c0-6.066-4.905-10.987-10.965-11.013z\">\n\t\t\t</path>\n\t\t\t<path fill=\"#2a9bd3\" d=\"M15.884 18.524a5.707 5.707 0 0 1-4.07-1.732l-.001-.001a5.76 5.76 0 1 1 4.119 1.734h-.05zm-2.817-2.942a3.982 3.982 0 1 0 0-5.626c-.726.717-1.175 1.713-1.175 2.813s.449 2.096 1.175 2.813z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 32 32\" id=\"fengniao\">\n\t\t\t<path fill=\"#27a9e1\" d=\"M5.953 2.793s-.117 1.801.857 3.56c.361.255 10.458 6.218 10.458 6.218L5.953 2.794z\"></path>\n\t\t\t<path fill=\"#b8e5fa\" d=\"M9.604.889s-.333 1.404.069 3.147c.254.307 7.801 8.116 7.801 8.116L9.604.889z\"></path>\n\t\t\t<path fill=\"#0089cf\" d=\"M29.282 14.601l-4.861-.361s-.133-.001-.147-.226h-.002a2.652 2.652 0 0 0-2.978-2.357h-.003l-.011.001-.12.019-.004.001c-.432.075-1.812.374-3.038 1.285 0 0-.167.121-.421.33L2.665 6.043s3.254 8.665 12.207 11.98c-1.6 2.849-7.407 13.48-7.407 13.48l2.446-1.306s.775-2.853 1.884-4.957c.609-.936 1.211-.992 1.498-1.141.291-.151 3.707-.765 6.431-4.339.897-1.166 1.244-2.666 1.723-4.261.28-.061 3.008-.651 3.789-.718 1.068-.092 4.045-.181 4.045-.181z\"></path>\n\t\t\t<path fill=\"#0089cf\" d=\"M7.392 17.849c-1.567-1.368-2.199-3.219-2.035-5.217-.232-.288-.45-.572-.654-.851-.484 2.903.555 4.854 2.176 6.269 1.538 1.342 3.635 1.85 5.466 1.577-1.674.109-3.563-.565-4.953-1.778z\"></path>\n\t\t\t<path fill=\"#0089cf\" d=\"M12.345 19.628h.002zm-7.642-7.846c.204.279.421.563.654.851-.164 1.998.468 3.849 2.035 5.217 1.292 1.128 3.016 1.79 4.597 1.79.12 0 .238-.004.356-.011a6.554 6.554 0 0 1-.975.071c-1.568 0-3.22-.54-4.49-1.648-1.621-1.415-2.66-3.366-2.176-6.269z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 23 32\" id=\"hot\">\n\t\t\t<path fill=\"#f07373\" d=\"M9.859 29.375c-3.489-.771-6.362-3.097-7.187-5.551-.882-2.623-1.029-6.873-.238-9.318l-1.727.037.001.002.001.004.004.01.011.029.038.091c.039.09.086.191.142.3.155.304.349.627.586.955a7.477 7.477 0 0 0 2.711 2.318c.583.153.583.153 1.087-.188.187-.263.187-.263.224-.39.028-.094.041-.176.05-.28.01-.109.016-.238.022-.47.063-2.219.162-3.38.562-4.943a10.05 10.05 0 0 1 .814-2.185c1.433-2.723 4.843-6.053 6.699-7.021l-1.325-.962c-.064.382-.127.992-.131 1.722-.008 1.252.169 2.393.616 3.329.261.547.525.968 1.132 1.862l.23.339c.86 1.281 1.161 1.986 1.069 2.653l-.009.125c.069.517.069.517.781.906.451-.026.451-.026.578-.104.144-.093.144-.093.19-.136.041-.037.079-.077.123-.125.068-.076.153-.178.245-.295.22-.279.458-.615.677-.963.648-1.028 1.045-1.988 1.037-2.845l-.914.009-.706.581c.295.358.809 1.075 1.33 1.936.826 1.363 1.492 2.791 1.898 4.209 1.1 3.845.3 9.288-2.245 11.75a9.652 9.652 0 0 1-1.659 1.29 10.232 10.232 0 0 1-3.471 1.332c-.794.151-1.385.191-2.064.191h-.009a2.75 2.75 0 0 1-.373-.03 6.007 6.007 0 0 1-.585-.115 7.765 7.765 0 0 1-.536-.15l-.578 1.735a9.182 9.182 0 0 0 1.445.341c.221.031.43.048.627.048h.009a12.546 12.546 0 0 0 2.407-.224 12.011 12.011 0 0 0 4.088-1.572c.699-.431 1.358-.94 1.971-1.533 3.098-2.998 4-9.132 2.731-13.567-.455-1.591-1.188-3.161-2.092-4.653-.569-.939-1.134-1.727-1.482-2.15l-1.645-1.998.024 2.588c.004.412-.281 1.1-.756 1.853a9.64 9.64 0 0 1-.569.809 4.528 4.528 0 0 1-.158.195c.028-.027.028-.027.16-.113.122-.075.122-.075.57-.101.71.388.71.388.778.902h-.914l.906.125c.174-1.262-.261-2.281-1.362-3.922l-.235-.347c-.554-.817-.787-1.189-.995-1.624-.306-.642-.444-1.53-.438-2.53a10.566 10.566 0 0 1 .107-1.431L14.44.304l-1.628.85c-2.18 1.138-5.862 4.733-7.471 7.791a11.873 11.873 0 0 0-.967 2.583 19.2 19.2 0 0 0-.511 3.147c-.036.423-.061.839-.079 1.273-.011.281-.019.531-.029.924-.005.191-.01.298-.015.354a.403.403 0 0 1 .019-.077c.027-.099.027-.099.203-.346.492-.332.492-.332 1.112-.157a5.745 5.745 0 0 1-2.54-2.496 3.456 3.456 0 0 1-.093-.197l-.018-.044-.002-.006v.001l.001.002v.002l-.915-2.473-.812 2.51c-.917 2.836-.757 7.485.245 10.463 1.042 3.099 4.442 5.852 8.526 6.754l.395-1.785z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 32 32\" id=\"price\">\n\t\t\t<path fill=\"#e6b61a\" d=\"M16 32c8.837 0 16-7.163 16-16S24.837 0 16 0 0 7.163 0 16s7.163 16 16 16zm0-2C8.268 30 2 23.732 2 16S8.268 2 16 2s14 6.268 14 14-6.268 14-14 14z\"></path><path fill=\"#e6b61a\" d=\"M23.14 6.06l-5.12 8.65h4.48v1.54h-5.49v2.43h5.49v1.54h-5.49v5.1h-2.02v-5.1H9.53v-1.54h5.46v-2.43H9.53v-1.54h4.45L8.8 6.06h2.24l4.99 8.48 4.93-8.48h2.18z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 33 32\" id=\"rating\">\n\t\t\t<path fill=\"#eba53b\" d=\"M27.087 31.84L16.8 25.553 6.504 31.84l2.824-11.727-9.186-7.878 12.019-.941L16.801.16l4.631 11.134 12.019.941-9.158 7.849zM16.8 23.369l7.407 4.527-2.014-8.471 6.588-5.647-8.659-.696L16.8 5.063l-3.341 8.019-8.659.696 6.588 5.647-2.014 8.471z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 38 32\" id=\"selected\">\n\t\t\t<path fill=\"#3190e8\" d=\"M32.291 2.327c.582-.582 1.455-.582 2.036 0l2.036 2.036c.582.582.582 1.455 0 2.036L13.818 29.09c-.582.582-1.455.582-2.036 0L1.455 18.908c-.582-.582-.582-1.455 0-2.036l2.036-2.036c.582-.582 1.455-.582 2.036 0l7.273 7.273L32.291 2.327z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 32 32\" id=\"speed\">\n\t\t\t<path fill=\"#37c7b7\" d=\"M16 32c8.837 0 16-7.163 16-16S24.837 0 16 0 0 7.163 0 16s7.163 16 16 16zm0-2C8.268 30 2 23.732 2 16S8.268 2 16 2s14 6.268 14 14-6.268 14-14 14z\"></path><path fill=\"#37c7b7\" d=\"M15 7v11.002l5.678 4.882 1.304-1.517-5.33-4.583.348.758V6.999h-2z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 50 50\" id=\"cart-minus\">\n\t\t\t<path fill-rule=\"evenodd\" stroke-width=\"4\" d=\"M22 0C9.8 0 0 9.8 0 22s9.8 22 22 22 22-9.8 22-22S34.2 0 22 0zm0 42C11 42 2 33 2 22S11 2 22 2s20 9 20 20-9 20-20 20z\" clip-rule=\"evenodd\"></path>\n\t\t\t<path fill-rule=\"evenodd\" d=\"M32 20c1.1 0 2 .9 2 2s-.9 2-2 2H12c-1.1 0-2-.9-2-2s.9-2 2-2h20z\" clip-rule=\"evenodd\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 50 50\" id=\"cart-add\">\n\t\t\t<path fill=\"none\" d=\"M0 0h44v44H0z\"></path>\n\t\t\t<path fill-rule=\"evenodd\" d=\"M22 0C9.8 0 0 9.8 0 22s9.8 22 22 22 22-9.8 22-22S34.2 0 22 0zm10 24h-8v8c0 1.1-.9 2-2 2s-2-.9-2-2v-8h-8c-1.1 0-2-.9-2-2s.9-2 2-2h8v-8c0-1.1.9-2 2-2s2 .9 2 2v8h8c1.1 0 2 .9 2 2s-.9 2-2 2z\" clip-rule=\"evenodd\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 24 32\" id=\"cart-remove\">\n\t\t\t<path fill=\"#bbb\" fill-rule=\"evenodd\" d=\"M21.5 10h-19c-1.1 0-1.918.896-1.819 1.992l1.638 18.016C2.419 31.104 3.4 32 4.5 32h15c1.1 0 2.081-.896 2.182-1.992l1.637-18.016A1.798 1.798 0 0 0 21.5 10zM8 28H5L4 14h4v14zm6 0h-4V14h4v14zm5 0h-3V14h4l-1 14zm2-24h-2.941l-.353-2.514C17.592.669 16.823 0 15.998 0H8c-.825 0-1.593.668-1.708 1.486L5.94 4H3a3 3 0 0 0-3 3v1h24V7a3 3 0 0 0-3-3zM8.24 2h7.52l.279 2H7.96l.28-2z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 14 16\" id=\"cart\">\n\t\t\t<path fill=\"#FFF\" fill-rule=\"evenodd\" d=\"M12.364 2.998H2.088L1.816.687a.455.455 0 0 0-.478-.431L.431.303A.454.454 0 0 0 0 .78l1.256 10.893c.006.293.011 1.325.933 1.325h9.546a.455.455 0 0 0 .455-.454v-.881a.454.454 0 0 0-.455-.455H3.05l-.11-.937h8.606c.998 0 1.889-.724 1.989-1.616l.455-4.04c.1-.893-.628-1.617-1.626-1.617zm-.45 4.245c-.075.669-.317 1.212-1.066 1.212H2.727L2.3 4.812h8.821c.749 0 1.065.543.99 1.212l-.197 1.219zM2.416 15.79a1 1 0 1 0 0-2 1 1 0 0 0 0 2zm9.092 0a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\"></path>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 58 58\" id=\"cart-icon\">\n\t\t\t<defs>\n\t\t\t  <filter id=\"a\" width=\"200%\" height=\"200%\" x=\"-50%\" y=\"-50%\" filterUnits=\"objectBoundingBox\"><feOffset in=\"SourceAlpha\" result=\"shadowOffsetOuter1\"/><feGaussianBlur stdDeviation=\"1.5\" in=\"shadowOffsetOuter1\" result=\"shadowBlurOuter1\"/><feColorMatrix values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.08 0\" in=\"shadowBlurOuter1\" result=\"shadowMatrixOuter1\"/><feMerge><feMergeNode in=\"shadowMatrixOuter1\"/><feMergeNode in=\"SourceGraphic\"/></feMerge></filter><path id=\"b\" d=\"M7.614 4.051c-1.066.086-1.452-.398-1.752-1.584C5.562 1.28.33 5.88.33 5.88l3.71 19.476c0 .148-1.56 7.515-1.56 7.515-.489 2.19.292 4.27 3.56 4.32 0 0 36.917.017 36.92.047 1.979-.012 2.981-.995 3.013-3.039.03-2.043-1.045-2.978-2.987-2.993L8.83 31.192s.86-3.865 1.077-3.865c0 0-5.788.122 32.065-1.956.606-.033 2.018-.764 2.298-1.848 1.113-4.317 4.008-13.26 4.458-15.64.932-4.925 2.061-8.558-4.28-7.405 0 0-35.768 3.487-36.833 3.573z\"/>\n\t\t\t</defs>\n\t\t\t<g fill=\"none\" fill-rule=\"evenodd\" filter=\"url(#a)\" transform=\"translate(3 2)\">\n\t\t\t  <g transform=\"translate(5.038 7.808)\"><mask id=\"c\" fill=\"#fff\"><use xlink:href=\"#b\"/></mask><use fill=\"#FFF\" xlink:href=\"#b\"/><path fill=\"#2073C1\" d=\"M53.962 7.774l-5.701 19.305-40.78 1.574z\" opacity=\".1\" mask=\"url(#c)\"/></g><path stroke=\"#FFF\" stroke-width=\"6\" d=\"M9.374 18.722S7.868 11.283 7.323 8.71C6.778 6.136 5.86 5.33 3.978 4.52 2.096 3.713.367 2.286.367 2.286\" stroke-linecap=\"round\"/><circle cx=\"46\" cy=\"51\" r=\"4\" fill=\"#FFF\"/><circle cx=\"12\" cy=\"51\" r=\"4\" fill=\"#FFF\"/>\n\t\t\t</g>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 14 14\" id=\"arrow-left\">\n\t\t\t<path d=\"M0 0 L8 7 L0 14\"  stroke=\"#fff\" stroke-width=\"1\" fill=\"none\"/>\n\t\t\t</symbol>\n\t\t\t<symbol viewBox=\"0 0 1024 1024\" id=\"res-well\"><path fill=\"#7ED321\" fill-rule=\"evenodd\" d=\"M512 0C229.376 0 0 229.376 0 512s229.376 512 512 512 512-229.376 512-512S794.624 0 512 0zM247.808 402.432c0-36.864 39.936-93.184 93.184-93.184s93.184 56.32 93.184 93.184c0 11.264-9.216 20.48-20.48 20.48-11.264 0-20.48-9.216-20.48-20.48 0-16.384-24.576-52.224-52.224-52.224-27.648 0-52.224 35.84-52.224 52.224 0 11.264-9.216 20.48-20.48 20.48-11.264 0-20.48-9.216-20.48-20.48zM512 800.768c-132.096 0-239.616-96.256-239.616-215.04 0-11.264 9.216-20.48 20.48-20.48 11.264 0 20.48 9.216 20.48 20.48 0 96.256 89.088 174.08 198.656 174.08 109.568 0 198.656-77.824 198.656-174.08 0-11.264 9.216-20.48 20.48-20.48 11.264 0 20.48 9.216 20.48 20.48 0 117.76-107.52 215.04-239.616 215.04zm243.712-377.856c-11.264 0-20.48-9.216-20.48-20.48 0-17.408-24.576-52.224-52.224-52.224-28.672 0-52.224 34.816-52.224 52.224 0 11.264-9.216 20.48-20.48 20.48-11.264 0-20.48-9.216-20.48-20.48 0-36.864 39.936-93.184 93.184-93.184s93.184 56.32 93.184 93.184c0 11.264-9.216 20.48-20.48 20.48z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 1024 1024\" id=\"res-bad\"><path fill=\"#D0021B\" fill-rule=\"evenodd\" d=\"M512 0C230.326 0 0 230.326 0 512s230.573 512 512 512 512-230.326 512-512S793.674 0 512 0zM240.694 373.755l158.735-56.285 15.306 46.164L256 419.919l-15.306-46.164zm440.409 384.123c-10.122 0-20.49-10.122-25.674-20.49-10.122-10.122-61.47-25.674-148.366-25.674-86.896 0-138.245 15.306-148.366 25.674 0 10.122-10.122 20.49-25.674 20.49s-25.674-10.122-25.674-25.674c0-71.591 174.041-71.591 194.53-71.591 20.489 0 194.53 0 194.53 71.591 10.122 10.368 0 25.674-15.306 25.674zM768 419.919l-163.672-61.47 15.306-46.164 158.735 56.285-10.368 51.348-.001.001z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 122 122\" id=\"avatar-default\"><path fill=\"#DCDCDC\" fill-rule=\"evenodd\" d=\"M61 121.5c33.413 0 60.5-27.087 60.5-60.5S94.413.5 61 .5.5 27.587.5 61s27.087 60.5 60.5 60.5zm12.526-45.806c-.019 3.316-.108 6.052.237 9.825 3.286 8.749 18.816 9.407 28.468 17.891-1.833 1.998-6.768 6.788-15 10.848-7.02 3.463-16.838 6.416-24.831 6.416-17.366 0-32.764-7.149-42.919-17.264 9.713-8.407 25.49-9.173 28.769-17.891.345-3.773.258-6.509.24-9.825l-.004-.002c-1.903-.985-5.438-7.268-6.01-12.571-1.492-.12-3.843-1.561-4.534-7.247-.37-3.053 1.107-4.77 2.004-5.31-5.046-19.212 1.507-33.16 20.749-34.406 5.753 0 10.18 1.52 11.909 4.523 15.35 2.702 11.756 22.658 9.328 29.882.899.54 2.376 2.258 2.004 5.31-.689 5.687-3.042 7.127-4.534 7.248-.575 5.305-3.25 10.82-5.873 12.57l-.003.003zM61 120.5C28.14 120.5 1.5 93.86 1.5 61S28.14 1.5 61 1.5s59.5 26.64 59.5 59.5-26.64 59.5-59.5 59.5z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 655 1024\" id=\"mobile\"><path d=\"M0 122.501v778.998C0 968.946 55.189 1024 123.268 1024h408.824c68.52 0 123.268-54.846 123.268-122.501V122.501C655.36 55.054 600.171 0 532.092 0H123.268C54.748 0 0 54.846 0 122.501zM327.68 942.08c-22.622 0-40.96-18.338-40.96-40.96s18.338-40.96 40.96-40.96 40.96 18.338 40.96 40.96-18.338 40.96-40.96 40.96zM81.92 163.84h491.52V819.2H81.92V163.84z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 1024 1024\" id=\"arrow-right\" class=\"icon\"><path d=\"M716.298 417.341l-.01.01L307.702 7.23l-94.295 94.649 408.591 410.117-408.591 410.137 94.295 94.639 502.891-504.76z\" class=\"selected\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 40 40\" id=\"order\"><path d=\"M31.5 3h-23C6 3 4 5.1 4 7.7v24.7C4 34.9 6 37 8.5 37h23c2.5 0 4.5-2.1 4.5-4.7V7.7C36 5.1 34 3 31.5 3zM11.8 28.2c-1.1 0-2-.9-2-2.1 0-1.1.9-2.1 2-2.1s2 .9 2 2.1c0 1.2-.9 2.1-2 2.1zm0-6.1c-1.1 0-2-.9-2-2.1 0-1.1.9-2.1 2-2.1s2 .9 2 2.1c0 1.1-.9 2.1-2 2.1zm0-6.2c-1.1 0-2-.9-2-2.1 0-1.1.9-2.1 2-2.1s2 .9 2 2.1c0 1.2-.9 2.1-2 2.1zm5.1 11.9h13.5v-2.6H16.9v2.6zm0-6.5h13.5v-2.6H16.9v2.6zm0-6.6h13.5v-2.6H16.9v2.6z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 40 40\" id=\"point\"><path d=\"M34.6 7.1c0-1.1-1-2.1-2.1-2.1h-24c-1.1 0-2 1-2.1 2.1l-1.6 25C4.6 34.3 6.3 36 8.5 36h24c2.2 0 3.9-1.7 3.7-3.9l-1.6-25zm-5.9 6.1c-.2 4.6-3.7 8.2-8.3 8.2-4.6 0-8.2-3.7-8.4-8.3-.3-.2-.5-.6-.5-1 0-.7.6-1.2 1.3-1.2s1.3.6 1.3 1.2c0 .5-.3.9-.7 1.1.2 3.8 3.2 6.8 7.1 6.8 3.9 0 6.8-3.1 7-6.9-.4-.2-.6-.6-.6-1.1 0-.7.6-1.2 1.3-1.2s1.3.6 1.3 1.2c-.2.6-.4 1-.8 1.2z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 40 40\" id=\"vip\"><path d=\"M7 33.4c0 1.1.9 1.6 2 1.6h22c1.1 0 2-.5 2-1.6V31H7v2.4z\"></path><path d=\"M32.1 14.3c-.6 2.3-2.6 4-5.1 4-2.9 0-5.3-2.3-5.3-5.2v-.2c-.5.2-1 .3-1.6.3-.6 0-1.1-.1-1.7-.3v.2c0 2.9-2.4 5.2-5.3 5.2-2.5 0-4.6-1.7-5.1-4.1-.5.4-1.2.6-1.8.6-.3 0-.5.1-.8 0L7.2 29h26l1.7-14.2c-.3.1-.5.1-.8.1-.8 0-1.5-.2-2-.6z\" class=\"st0\"></path><ellipse cx=\"20.1\" cy=\"8.2\" rx=\"3.2\" ry=\"3.2\"></ellipse><ellipse cx=\"6.4\" cy=\"10.5\" rx=\"2.4\" ry=\"2.4\"></ellipse><ellipse cx=\"33.8\" cy=\"10.5\" rx=\"2.4\" ry=\"2.4\"></ellipse></symbol>\n\t\t\t<symbol viewBox=\"0 0 40 40\" id=\"download\"><path d=\"M30 5H10c-2.8 0-5 2.2-5 5v20c0 2.8 2.2 5 5 5h20c2.8 0 5-2.2 5-5V10c0-2.8-2.2-5-5-5zm-3.9 22.7c-.1.2-.3.4-.6.5-4.3 2.8-10.1 1.6-13-2.8-2.8-4.3-1.6-10.2 2.8-13 4.3-2.8 10.2-1.6 13 2.8.2.2.3.5.4.8.1.2 0 .5-.2.7l-8.8 5.7c-.2.2-.6.1-.7-.2l-.5-.7c-.4-.6-.2-1.5.4-1.9l5.6-3.6c.2-.2.3-.5.2-.7l-.1-.1c-2.2-1.8-5.4-2.1-7.9-.4-3.1 2-4 6.1-2 9.2 2 3.1 6.1 4 9.2 2 .6-.4 1.3-.2 1.7.4l.3.7c.1.2.4.5.2.6zm3.1-4.4l-.9.6c-.2.2-.6.1-.7-.2L26.5 22c-.2-.2-.1-.6.2-.7l1.8-1.1c.2-.2.6-.1.7.2l.6.9c.3.6.1 1.5-.6 2z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 40 40\" id=\"service\"><g id=\"service_XMLID_1_\"><path id=\"service_XMLID_6_\" d=\"M32.2 9.5c-.2-.7-.1-.7-.4-.9-1.7-1.2-5.3.2-6.7 1.9-.8-3.8-3.8-6.1-4.7-5.9-.9-.2-4 2.1-4.8 5.9-1.3-1.7-5-3.1-6.7-1.9-.1.1-.5.6-.5.7C5.4 20.7 15 24.6 19 25.7v8.7c0 .7.3 1.2 1 1.2s1-.5 1-1.2v-8.6c4-1 14.2-4.8 11.2-16.3z\"></path><path id=\"service_XMLID_7_\" d=\"M6 25c-.9 0-1.6.7-1.6 1.5.1.8.7 1.5 1.6 1.5 3.1 0 6.5 1.5 8.5 3.7.3.3.7.6 1.1.6.4 0 .7-.1 1-.4.6-.6.6-1.6.1-2.3C14.1 26.8 10 25 6 25z\"></path><path id=\"service_XMLID_8_\" d=\"M34.6 25c-4 0-8.1 1.9-10.7 4.6-.6.6-.5 1.6.1 2.2.3.3.7.4 1 .4.4 0 .8-.3 1.1-.6 2-2.1 5.3-3.7 8.4-3.7h.1c.8 0 1.5-.7 1.5-1.5 0-.7-.7-1.4-1.5-1.4z\"></path></g><path d=\"M0 0h40v40H0z\" class=\"st1\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 120 120\" id=\"select\"><circle cx=\"60\" cy=\"60\" r=\"60\"></circle><path fill=\"#FFF\" d=\"M63.84 84.678a1.976 1.976 0 0 1-.387.545l-7.975 7.976a1.996 1.996 0 0 1-2.829-.005L24.172 64.716a2.005 2.005 0 0 1-.005-2.828l7.976-7.976a1.996 1.996 0 0 1 2.828.005l19.015 19.015L91.498 35.42a1.991 1.991 0 0 1 2.823 0l7.976 7.977c.784.784.78 2.043 0 2.823L63.84 84.678z\"></path></symbol>\n\t\t\t<symbol xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 72 72\" id=\"sdk_icon_zhifubao@2x\"><defs><path d=\"M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36z\" id=\"sdk_icon_zhifubao@2x_a\"></path></defs><g fill=\"none\" fill-rule=\"evenodd\"><mask id=\"sdk_icon_zhifubao@2x_b\" fill=\"#fff\"><use xlink:href=\"#sdk_icon_zhifubao@2x_a\"></use></mask><use fill=\"#00A1E9\" xlink:href=\"#sdk_icon_zhifubao@2x_a\"></use><path d=\"M33 21v-5h7v5h14v3H40v4h12c-.202.048-.408 3.223-2 7-1.32 4.134-2.683 6.15-2 6l23.6 8c-.2-.285-.848 2.3-2 4-.775 2.013-2 5-2 5L44 46c.237.162-3.79 4.674-8 7-4.002 1.645-8.717 2.88-14 1-4.93-.56-8.554-3.867-8-10 .693-6.083 7.138-8.19 13-8 4.739-.19 14.796 3.29 15 3-.204.29.642-1.628 2-4 .283-2.015.518-3.777 0-4H22v-3h11v-4H20v-3h13zm-7 30c-7.407 0-9-3.593-9-6 0-2.761 1.576-5.57 8-6 6.484-.383 15.2 4.436 15 4 .2.436-6.238 8-14 8z\" fill=\"#FFF\" mask=\"url(#sdk_icon_zhifubao@2x_b)\"></path></g></symbol>\n\t\t\t<symbol viewBox=\"0 0 72 72\" id=\"weixin\"><g fill=\"none\" fill-rule=\"evenodd\"><path d=\"M36 72c19.882 0 36-16.118 36-36S55.882 0 36 0 0 16.118 0 36s16.118 36 36 36z\" fill=\"#45C144\"></path><path d=\"M29 40l-4-8c-.262-.292-.288-.398 0-1 .594-.228.743-.174 1 0l4 4c1.5 1.098 1.5 1.098 3 0l21-10c-3.668-4.964-10.11-8-17-8-12.33 0-22 8.12-22 18 0 5.6 2.91 10.518 7 14 1 .8 1.068.537 1 1 .068.185-.954 4.042-1 4-.027.316-.097.495 0 1-.097.075.225.4 1 0-.22.4 5-3 5-3 1.4.6 5.8 1 9 1 11.533 0 21.2-7.85 21-18 .2-2.899-.692-5.756-2-8L31 41c-1.5.5-2-1-2-1z\" fill=\"#FFF\"></path></g></symbol>\n\t\t\t<symbol viewBox=\"0 0 46 46\" id=\"human\"><path fill=\"#ff7b52\" d=\"M33.291 37.774c-.25.097-.504.175-.765.233-6.427 1.444-5.954-3.968-6-3.953 10.457-5.053 10.348-13.466 10-16.216-16.15-.041-22.943-7.063-22.943-7.063s-.176 1.733-2.933 4.996c-2.756 3.262-5.236 4.09-5.132 4.113.54 13.9 12.246 14.242 12.246 14.242-.762 4.662-4.357 4.33-4.357 4.33s-6.38.213-11.173-7.446c-.85-1.359-1.02-2.864-1.166-4.579-.217-2.542.14-4.643.312-7.2.271-4.064.96-6.269.96-6.269S7.13 0 21.4 0s17.828 12.508 17.828 12.508l-.035.074c.533.763.984 1.997 1.356 3.36A3.483 3.483 0 0 1 45 19.281v7.257a3.484 3.484 0 0 1-3.325 3.472c-2.009 4.537-6.657 12.185-15.241 12.457C26.023 44.485 24.269 46 22.168 46c-2.407 0-4.357-1.988-4.357-4.44 0-2.453 1.95-4.44 4.357-4.44 1.955 0 3.609 1.311 4.16 3.118 1.447.13 4.044-.094 6.963-2.464zM18.216 27.018s.99 3.08 3.705 3.08 3.807-1.875 3.807-2.906c.467-1.135 1.348-.541 1.482-.071.134.47-.763 4.67-5.24 4.67s-5.205-4.358-5.205-4.358.033-.97.702-.97c.669 0 .749.555.749.555zm10.052-2.332c.963 0 1.743-1.192 1.743-2.664 0-1.471-.78-2.664-1.743-2.664-.963 0-1.743 1.193-1.743 2.664 0 1.472.78 2.664 1.743 2.664zm-12.723 0c.962 0 1.743-1.192 1.743-2.664 0-1.471-.78-2.664-1.743-2.664-.963 0-1.743 1.193-1.743 2.664 0 1.472.78 2.664 1.743 2.664z\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 46 46\" id=\"phone\"><path fill=\"#6ac20b\" d=\"M15.433 30.568c9.342 9.342 17.708 12.15 18.871 12.316 1.163.167 3.07.542 5.837-2.225 3.24-3.24 3.566-4.94 1.783-6.724-1.783-1.783-6.212-4.48-7.416-5.176-1.206-.696-2.228-.472-3.097.133-.868.605-1.87 1.375-2.798 2.047-.927.671-2.087.955-3.332.167-1.245-.79-3.35-2.27-5.735-4.652-2.384-2.384-3.863-4.49-4.651-5.735-.789-1.245-.505-2.405.167-3.332.671-.928 1.441-1.93 2.046-2.798.605-.869.828-1.89.134-3.097-.696-1.204-3.394-5.633-5.177-7.416-1.783-1.783-3.484-1.457-6.724 1.783-2.766 2.766-2.391 4.674-2.226 5.837.167 1.164 2.976 9.53 12.318 18.872\"></path></symbol>\n\t\t\t<symbol viewBox=\"0 0 126 126\" id=\"expired\"><path fill=\"#9B9B9B\" fill-rule=\"evenodd\" d=\"M63 125.5c34.518 0 62.5-27.982 62.5-62.5S97.518.5 63 .5.5 28.482.5 63s27.982 62.5 62.5 62.5zM15.156 66.678l-3.073-1.258 2.868-1.674.248-3.31 2.478 2.21 3.225-.79-1.335 3.04 1.746 2.825-3.302-.33-2.147 2.533-.704-3.245zm4.07-24.55l-2.03-2.625 3.32-.015 1.87-2.744 1.04 3.153 3.187.93-2.677 1.964.1 3.32-2.695-1.94-3.124 1.122 1.01-3.163zm15.8-19.223l-.446-3.29 2.883 1.646 2.99-1.44-.674 3.25 2.294 2.4-3.3.363-1.573 2.924-1.363-3.027-3.267-.592 2.457-2.233zm23.296-8.75l1.258-3.072 1.674 2.868 3.31.248-2.21 2.478.79 3.225-3.04-1.335-2.825 1.746.33-3.302-2.533-2.147 3.245-.704zm24.55 4.072l2.625-2.032.015 3.32 2.744 1.87-3.153 1.04-.93 3.188-1.964-2.677-3.32.1 1.94-2.695-1.122-3.124 3.163 1.01zm27.972 39.095l3.073 1.258-2.868 1.674-.248 3.31-2.478-2.21-3.225.79 1.335-3.04-1.746-2.825 3.302.33 2.147-2.533.704 3.245zm-4.07 24.55l2.03 2.625-3.32.015-1.87 2.744-1.04-3.153-3.187-.93 2.677-1.964-.1-3.32 2.695 1.94 3.124-1.122-1.01 3.163zm-15.8 19.223l.446 3.29-2.883-1.646-2.99 1.44.674-3.25-2.294-2.4 3.3-.363 1.573-2.924 1.363 3.027 3.267.592-2.457 2.233zm-23.296 8.75l-1.258 3.072-1.674-2.868-3.31-.248 2.21-2.478-.79-3.225 3.04 1.335 2.825-1.746-.33 3.302 2.533 2.147-3.245.704zm-24.55-4.072l-2.625 2.032-.015-3.32-2.744-1.87 3.153-1.04.93-3.188 1.964 2.677 3.32-.1-1.94 2.695 1.122 3.124-3.163-1.01zM74.257 41.7a23.764 23.764 0 0 0-22.17.092 23.767 23.767 0 0 0-12.508 18.646l.995.1a22.767 22.767 0 0 1 11.983-17.863 22.764 22.764 0 0 1 21.238-.088l.462-.887zm11.387 22.436A22.764 22.764 0 0 1 74.313 82.1a22.767 22.767 0 0 1-21.5.696l-.44.897a23.767 23.767 0 0 0 22.44-.727A23.764 23.764 0 0 0 86.64 64.214l-.997-.078zM63 122.5C30.14 122.5 3.5 95.86 3.5 63S30.14 3.5 63 3.5s59.5 26.64 59.5 59.5-26.64 59.5-59.5 59.5zm14.127-71.148l1.14 1.975 3.388-1.956-1.14-1.974-3.388 1.956zm2.704-3.14l-1.055-1.83-3.388 1.956 1.056 1.83 3.388-1.957zm.237 8.232l3.388-1.956-1.14-1.974-3.388 1.956 1.14 1.974zm-6.89-8.715a24.73 24.73 0 0 0-.892-1.453 7.288 7.288 0 0 0-.79-.985c.31-.104.617-.227.924-.367a6.52 6.52 0 0 0 .842-.46c.13-.093.226-.12.285-.08.06.04.066.128.017.267a.653.653 0 0 0-.032.378c.03.113.09.253.187.42l.85 1.475 3.39-1.956a39.962 39.962 0 0 0-1.01-1.677c-.25-.383-.472-.665-.67-.847a13.33 13.33 0 0 0 1.857-.767c.19-.09.313-.107.374-.05.062.057.064.148.007.273-.09.2-.128.356-.117.47.01.114.06.247.147.4l.792 1.37c.24-.157.48-.318.718-.483a9.91 9.91 0 0 0 .673-.513l1.02 1.766c-.26.095-.52.204-.78.327-.262.123-.525.243-.79.36l4.655 8.063c.234-.17.46-.333.675-.486.217-.153.43-.318.643-.496l.912 1.58c-.21.085-.434.177-.672.278-.238.1-.534.243-.888.43-.354.185-.79.423-1.307.712a205.733 205.733 0 0 0-3.876 2.238c-.516.307-.943.567-1.28.78-.34.215-.615.402-.828.562-.212.16-.408.31-.586.45l-.912-1.58c.638-.24 1.29-.533 1.958-.882l-4.668-8.085a20.893 20.893 0 0 0-1.67 1.186l-1.02-1.767a21.623 21.623 0 0 0 1.862-.854zm14.762 2.285l3.387-1.956-2.124-3.68-3.388 1.956 2.124 3.68zm-1.45-10.332l-3.387 1.956 1.956 3.387 3.387-1.956-1.956-3.387zm2.11 11.67c.274.634.514 1.305.717 2.01.204.704.36 1.408.47 2.11.11.704.167 1.4.17 2.093a10.19 10.19 0 0 1-.17 1.94c-.51-.15-1.18-.14-2.008.024.213-.974.312-1.88.298-2.723a10.595 10.595 0 0 0-.37-2.558c-.23-.865-.573-1.77-1.028-2.72a48.398 48.398 0 0 0-1.714-3.208l-2.7-4.676a25.767 25.767 0 0 0-.875-1.42 21.753 21.753 0 0 0-.85-1.186c.525-.21 1.043-.45 1.554-.717.51-.267 1.112-.6 1.805-1a60.923 60.923 0 0 0 1.893-1.136 17.45 17.45 0 0 0 1.502-1.047c.137.364.325.787.565 1.267.24.48.517.99.83 1.53l7.535 13.054a6.1 6.1 0 0 1 .46.94.97.97 0 0 1-.036.756c-.115.25-.347.527-.698.832-.35.304-.864.688-1.54 1.15a3.186 3.186 0 0 0-.647-.858 4.97 4.97 0 0 0-1.038-.717 13.81 13.81 0 0 0 1.096-.55c.264-.152.45-.295.555-.43a.502.502 0 0 0 .108-.437 2.097 2.097 0 0 0-.243-.566l-2.172-3.762-3.47 2.004zm-1.954 7.223a6.16 6.16 0 0 0-1.466-.69 6.537 6.537 0 0 0-1.563-.332l.69-1.59a14.604 14.604 0 0 1 3.05.817l-.71 1.794zm-4.033-.027a2.137 2.137 0 0 0-.287.51 6.12 6.12 0 0 0-.26.872 23.78 23.78 0 0 0-.283 1.452c-.1.594-.225 1.34-.37 2.237a3.37 3.37 0 0 0-.92-.078 5.34 5.34 0 0 0-1.096.19 8.492 8.492 0 0 0 .812-2.41c.15-.843.175-1.782.077-2.816.39.034.75.034 1.08 0a8.61 8.61 0 0 0 1.06-.182c.14-.044.227-.04.26.017.03.056.007.126-.074.21zm-17.506-5.745c.68-.392 1.22-.72 1.624-.98.405-.26.798-.538 1.182-.834l1.044 1.81c-.426.19-.86.4-1.3.626a40.64 40.64 0 0 0-1.66.917l5.015 8.688c.21.36.354.684.435.97.082.285.043.584-.118.9-.16.313-.468.676-.924 1.086-.455.41-1.11.918-1.962 1.52a10.17 10.17 0 0 0-.84-.83 7.863 7.863 0 0 0-1.12-.836 20.7 20.7 0 0 0 1.457-.813c.36-.226.625-.43.797-.612.172-.183.262-.346.27-.49a.783.783 0 0 0-.117-.444l-4.68-8.105-4.448 2.568c-.846.488-1.512.886-2 1.195-.485.31-.936.6-1.35.877l-1.03-1.788c.236-.1.472-.204.706-.31.234-.108.484-.234.75-.38a93.69 93.69 0 0 0 2.035-1.132l4.45-2.568a106.39 106.39 0 0 0-1.3-2.202c-.33-.54-.576-.92-.74-1.138.35-.13.72-.29 1.105-.486.387-.194.696-.378.93-.55.192-.147.346-.176.462-.086.117.09.133.205.048.346a.79.79 0 0 0-.08.56c.044.186.098.335.162.446l1.2 2.08zm-1.79 11.537a25.633 25.633 0 0 0-1.934-1.475 35.97 35.97 0 0 0-2.03-1.31l1.267-1.644a38.25 38.25 0 0 1 2.034 1.195c.68.428 1.346.9 1.993 1.412l-1.33 1.822zm-12.53-7.01c.706.293 1.41.608 2.11.942.702.334 1.376.693 2.022 1.078l-1.13 2.12a56.81 56.81 0 0 0-2.01-1.152 41.097 41.097 0 0 0-2.06-1.044l1.067-1.945zM63 118.25c30.514 0 55.25-24.736 55.25-55.25S93.514 7.75 63 7.75 7.75 32.486 7.75 63 32.486 118.25 63 118.25zm-2.237-47.53c.262-.058.562-.097.9-.118.34-.02.753-.04 1.24-.063.52-.025 1.176-.163 1.964-.415.788-.25 1.72-.646 2.794-1.184 1.077-.536 2.303-1.235 3.682-2.096a87.9 87.9 0 0 0 4.634-3.133 10.2 10.2 0 0 0 .24 1.4c.098.378.23.74.394 1.09a321.96 321.96 0 0 1-4.068 2.362 69.403 69.403 0 0 1-3.052 1.65c-.88.445-1.643.802-2.29 1.074s-1.236.483-1.768.633c-.533.15-1.03.256-1.492.32-.462.063-.954.107-1.476.13-.62.046-1.087.126-1.4.24-.31.117-.536.344-.674.682-.123.33-.22.74-.286 1.232a18.89 18.89 0 0 0-.144 1.62 7.14 7.14 0 0 0-1.164-.31 9.118 9.118 0 0 0-1.23-.136c.132-.575.256-1.07.374-1.49.118-.42.23-.785.338-1.096.106-.31.212-.575.318-.793.105-.22.214-.407.326-.564l-3.66-6.34c-.582.337-1.08.634-1.495.892-.415.257-.75.498-1.01.722l-.972-1.684c.293-.132.648-.3 1.066-.505.42-.203.83-.42 1.23-.653a31.8 31.8 0 0 0 1.27-.775c.433-.277.775-.516 1.028-.718.14.4.292.778.46 1.134.17.355.413.81.733 1.364l3.193 5.53zm-15.907-.43l-2.712-4.7-5.425 3.133c-1.456.84-2.783 1.63-3.983 2.368-1.2.74-2.125 1.344-2.778 1.813l-1.237-2.14c.307-.14.708-.335 1.202-.583.494-.25 1.055-.54 1.684-.876a143.593 143.593 0 0 0 4.375-2.429 153.71 153.71 0 0 0 4.442-2.648c1.175-.734 2.054-1.315 2.638-1.745.15.357.367.813.652 1.37a42.88 42.88 0 0 0 1.05 1.915l1.848 3.2a32.46 32.46 0 0 0 1.93 2.96l-2.057 1.188-.72-1.247-9.395 5.424 3.072 5.32c.224.39.415.68.574.875.158.195.345.304.562.327.216.023.5-.045.853-.202.353-.157.838-.405 1.455-.743.876-.47 1.734-.942 2.577-1.42a68.054 68.054 0 0 0 2.465-1.465c.754-.453 1.335-.84 1.743-1.158.407-.318.686-.66.836-1.023.15-.364.185-.81.104-1.334a26.6 26.6 0 0 0-.45-2.124c.843.437 1.734.523 2.67.26.206 1.026.324 1.854.354 2.483.03.628-.083 1.184-.34 1.665-.258.48-.698.943-1.32 1.386-.623.443-1.495.988-2.617 1.636l-2.545 1.47c-.908.524-1.758.996-2.55 1.417-1.063.558-1.902.97-2.517 1.23-.615.264-1.123.368-1.524.313-.402-.055-.75-.274-1.045-.657-.297-.385-.652-.937-1.068-1.658l-3.444-5.965a27.726 27.726 0 0 0-1.155-1.855c-.337-.49-.602-.835-.793-1.04.37-.157.762-.342 1.176-.553.414-.212.79-.425 1.13-.64.185-.125.32-.144.41-.056.087.088.085.214-.005.377a.624.624 0 0 0-.105.394c.015.12.082.286.202.494l.384.665 9.396-5.424zM10.402 63c0-29.05 23.55-52.598 52.598-52.598 29.05 0 52.598 23.55 52.598 52.598 0 29.05-23.55 52.598-52.598 52.598-29.05 0-52.598-23.55-52.598-52.598z\"></path></symbol>\n\t\t</defs>\n\t</svg>\n</template>\n\n<script>\n\n  \texport default {\n\n  \t}\n\n</script>\n\n<style lang=\"scss\">\n  \t\n</style>\n"
  },
  {
    "path": "src/components/footer/footGuide.vue",
    "content": "<template>\n    <section id='foot_guide'>\n    \t<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"position:absolute;width:0;height:0\">\n\t    \t<defs>\n\t    \t\t<symbol viewBox=\"0 0 40 40\" id=\"msite\"><g fill=\"none\" fill-rule=\"evenodd\" stroke=\"#666\" stroke-width=\"2\"><path d=\"M31.426 23.095l2.678 5.742 2.943-1.372a3.173 3.173 0 0 0 1.537-4.212l-1.339-2.871-5.819 2.713z\"></path><path d=\"M29.074 31.161c-1.224-.49-2.404-.32-3.49.185-6.383 2.977-13.938.286-16.875-6.01-2.936-6.297-.14-13.815 6.243-16.792 5.211-2.43 11.203-1.083 14.825 2.919l-12.263 5.718c-1.596.745-2.295 2.624-1.561 4.198.734 1.574 2.625 2.246 4.22 1.503l8.422-3.928 9.953-4.641a18.78 18.78 0 0 0-.941-2.453C33.202 2.416 21.869-1.62 12.294 2.844 2.718 7.309-1.474 18.586 2.93 28.03c4.404 9.445 15.737 13.482 25.313 9.017 1.069-.499 2.067-.879 3.438-1.744 0 0-1.382-3.651-2.607-4.142z\"></path></g></symbol>\n\t\t\t\t\n\t\t\t\t<symbol xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 40 40\" id=\"msiteActive\"><defs><linearGradient id=\"index.18edf5a_c\" x1=\"50%\" x2=\"50%\" y1=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#2BAEFF\"></stop><stop offset=\"100%\" stop-color=\"#0095FF\"></stop></linearGradient><linearGradient id=\"index.18edf5a_d\" x1=\"50%\" x2=\"50%\" y1=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#29ADFF\"></stop><stop offset=\"100%\" stop-color=\"#0095FF\"></stop></linearGradient><path id=\"index.18edf5a_a\" d=\"M30.426 22.095l2.678 5.742 2.943-1.372a3.173 3.173 0 0 0 1.537-4.212l-1.339-2.871-5.819 2.713z\"></path><mask id=\"index.18edf5a_e\" width=\"9.455\" height=\"10.456\" x=\"-1\" y=\"-1\"><path fill=\"#fff\" d=\"M29.426 18.382h9.455v10.456h-9.455z\"></path><use xlink:href=\"#index.18edf5a_a\"></use></mask><path id=\"index.18edf5a_b\" d=\"M28.074 30.161c-1.224-.49-2.404-.32-3.49.185-6.383 2.977-13.938.286-16.875-6.01-2.936-6.297-.14-13.815 6.243-16.792 5.211-2.43 11.203-1.083 14.825 2.919l-12.263 5.718c-1.596.745-2.295 2.624-1.561 4.198.734 1.574 2.625 2.246 4.22 1.503l8.422-3.928 9.953-4.641a18.78 18.78 0 0 0-.941-2.453C32.202 1.416 20.869-2.62 11.294 1.844 1.718 6.309-2.474 17.586 1.93 27.03c4.404 9.445 15.737 13.482 25.313 9.017 1.069-.499 2.067-.879 3.438-1.744 0 0-1.382-3.651-2.607-4.142z\"></path><mask id=\"index.18edf5a_f\" width=\"38.769\" height=\"39.241\" x=\"-.7\" y=\"-.7\"><path fill=\"#fff\" d=\"M-.521-.675h38.769v39.241H-.521z\"></path><use xlink:href=\"#index.18edf5a_b\"></use></mask></defs><g fill=\"none\" fill-rule=\"evenodd\"><g transform=\"translate(1 1)\"><use fill=\"url(#index.18edf5a_c)\" xlink:href=\"#index.18edf5a_a\"></use><use stroke=\"url(#index.18edf5a_d)\" stroke-width=\"2\" mask=\"url(#index.18edf5a_e)\" xlink:href=\"#index.18edf5a_a\"></use></g><g transform=\"translate(1 1)\"><use fill=\"url(#index.18edf5a_c)\" xlink:href=\"#index.18edf5a_b\"></use><use stroke=\"url(#index.18edf5a_d)\" stroke-width=\"1.4\" mask=\"url(#index.18edf5a_f)\" xlink:href=\"#index.18edf5a_b\"></use></g></g></symbol>\n\n\t\t\t\t<symbol xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 40 40\" id=\"find\"><defs><path id=\"discover-regular.8ef537f_a\" d=\"M20 40c11.046 0 20-8.954 20-20S31.046 0 20 0 0 8.954 0 20s8.954 20 20 20z\"></path><mask id=\"discover-regular.8ef537f_b\" width=\"40\" height=\"40\" x=\"0\" y=\"0\" fill=\"#fff\"><use xlink:href=\"#discover-regular.8ef537f_a\"></use></mask></defs><g fill=\"none\" fill-rule=\"evenodd\"><use stroke=\"#666\" stroke-width=\"4\" mask=\"url(#discover-regular.8ef537f_b)\" xlink:href=\"#discover-regular.8ef537f_a\"></use><path stroke=\"#666\" stroke-width=\"2\" d=\"M12.79 28.126c-1.515.68-2.169.016-1.462-1.484l3.905-8.284c.47-.999 1.665-2.198 2.66-2.675l8.484-4.064c1.497-.717 2.153-.08 1.46 1.435l-3.953 8.64c-.46 1.006-1.647 2.186-2.655 2.64l-8.44 3.792z\"></path><path fill=\"#666\" d=\"M15.693 24.636c-.692.276-1.02-.06-.747-.746l2.21-4.946c.225-.505.721-.602 1.122-.202l2.563 2.563c.394.394.31.893-.203 1.122l-4.945 2.209z\"></path></g></symbol>\n\t\t\t\t\n                <symbol xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 40 40\" id=\"findActive\"><defs><path id=\"discover-regular.8ef537f_a\" d=\"M20 40c11.046 0 20-8.954 20-20S31.046 0 20 0 0 8.954 0 20s8.954 20 20 20z\"></path><mask id=\"discover-regular.8ef537f_b\" width=\"40\" height=\"40\" x=\"0\" y=\"0\" fill=\"#fff\"><use xlink:href=\"#discover-regular.8ef537f_a\"></use></mask></defs><g fill=\"none\" fill-rule=\"evenodd\"><use stroke=\"#3190e8\" stroke-width=\"4\" mask=\"url(#discover-regular.8ef537f_b)\" xlink:href=\"#discover-regular.8ef537f_a\"></use><path stroke=\"#3190e8\" stroke-width=\"2\" d=\"M12.79 28.126c-1.515.68-2.169.016-1.462-1.484l3.905-8.284c.47-.999 1.665-2.198 2.66-2.675l8.484-4.064c1.497-.717 2.153-.08 1.46 1.435l-3.953 8.64c-.46 1.006-1.647 2.186-2.655 2.64l-8.44 3.792z\"></path><path fill=\"#3190e8\" d=\"M15.693 24.636c-.692.276-1.02-.06-.747-.746l2.21-4.946c.225-.505.721-.602 1.122-.202l2.563 2.563c.394.394.31.893-.203 1.122l-4.945 2.209z\"></path></g></symbol>\n\n\t\t\t\t<symbol xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 38 38\" id=\"order\"><defs><rect id=\"order-regular.41c17f8_a\" width=\"38\" height=\"38\" rx=\"2\"></rect><mask id=\"order-regular.41c17f8_b\" width=\"38\" height=\"38\" x=\"0\" y=\"0\" fill=\"#fff\"><use xlink:href=\"#order-regular.41c17f8_a\"></use></mask></defs><g fill=\"none\" fill-rule=\"evenodd\"><use stroke=\"#666\" stroke-width=\"4\" mask=\"url(#order-regular.41c17f8_b)\" xlink:href=\"#order-regular.41c17f8_a\"></use><rect width=\"24\" height=\"2\" x=\"7\" y=\"8\" fill=\"#666\" rx=\"1\"></rect><rect width=\"20\" height=\"2\" x=\"7\" y=\"17\" fill=\"#666\" rx=\"1\"></rect><rect width=\"8\" height=\"2\" x=\"7\" y=\"26\" fill=\"#666\" rx=\"1\"></rect></g></symbol>\n\n\t\t\t\t<symbol viewBox=\"0 0 38 38\" id=\"orderActive\"><defs><linearGradient id=\"order.070ae2a_a\" x1=\"50%\" x2=\"50%\" y1=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#2BAEFF\"></stop><stop offset=\"100%\" stop-color=\"#0095FF\"></stop></linearGradient></defs><g fill=\"none\" fill-rule=\"evenodd\"><rect width=\"38\" height=\"38\" fill=\"url(#order.070ae2a_a)\" rx=\"2\"></rect><rect width=\"24\" height=\"2\" x=\"7\" y=\"8\" fill=\"#FFF\" rx=\"1\"></rect><rect width=\"20\" height=\"2\" x=\"7\" y=\"17\" fill=\"#FFF\" rx=\"1\"></rect><rect width=\"8\" height=\"2\" x=\"7\" y=\"26\" fill=\"#FFF\" rx=\"1\"></rect></g></symbol>\n\n\t\t\t\t<symbol xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 38 38\" id=\"profile\"><defs><path id=\"profile-regular.c151d62_a\" d=\"M10 11.833V8.999A8.999 8.999 0 0 1 19 0c4.97 0 9 4.04 9 8.999v2.834l-.013.191C27.657 16.981 23.367 21 19 21c-4.616 0-8.64-4.02-8.987-8.976L10 11.833z\"></path><mask id=\"profile-regular.c151d62_c\" width=\"18\" height=\"21\" x=\"0\" y=\"0\" fill=\"#fff\"><use xlink:href=\"#profile-regular.c151d62_a\"></use></mask><path id=\"profile-regular.c151d62_b\" d=\"M0 32.675C0 26.763 10.139 22 19.027 22 27.916 22 38 26.763 38 32.757v3.312C38 37.136 37.098 38 35.997 38H2.003C.897 38 0 37.137 0 36.037v-3.362z\"></path><mask id=\"profile-regular.c151d62_d\" width=\"38\" height=\"16\" x=\"0\" y=\"0\" fill=\"#fff\"><use xlink:href=\"#profile-regular.c151d62_b\"></use></mask></defs><g fill=\"none\" fill-rule=\"evenodd\" stroke=\"#666\" stroke-width=\"4\"><use mask=\"url(#profile-regular.c151d62_c)\" xlink:href=\"#profile-regular.c151d62_a\"></use><use mask=\"url(#profile-regular.c151d62_d)\" xlink:href=\"#profile-regular.c151d62_b\"></use></g></symbol>\n\n\t\t\t\t<symbol viewBox=\"0 0 38 38\" id=\"profileActive\"><defs><linearGradient id=\"profile.dbc5ebf_a\" x1=\"50%\" x2=\"50%\" y1=\"100%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#2BAEFF\"></stop><stop offset=\"100%\" stop-color=\"#0095FF\"></stop></linearGradient></defs><path fill=\"url(#profile.dbc5ebf_a)\" fill-rule=\"evenodd\" d=\"M10 11.833V8.999A8.999 8.999 0 0 1 19 0c4.97 0 9 4.04 9 8.999v2.834l-.013.191C27.657 16.981 23.367 21 19 21c-4.616 0-8.64-4.02-8.987-8.976L10 11.833zM0 32.675C0 26.763 10.139 22 19.027 22 27.916 22 38 26.763 38 32.757v3.312C38 37.136 37.098 38 35.997 38H2.003C.897 38 0 37.137 0 36.037v-3.362z\"></path></symbol>\n\n\t    \t</defs>\n    \t</svg>\n        <section @click = \"gotoAddress({path: '/msite', query: {geohash}})\" class=\"guide_item\">\n        \t<svg class=\"icon_style\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" :xlink:href=\"$route.path.indexOf('msite') !== -1? '#msiteActive' : '#msite'\"></use>\n            </svg>\n            <span>外卖</span>\n        </section>\n        <section @click = \"gotoAddress({path: `/search/${geohash}`})\" class=\"guide_item\">\n        \t<svg class=\"icon_style\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" :xlink:href=\"$route.path.indexOf('search') !== -1? '#findActive' : '#find'\"></use>\n            </svg>\n            <span>搜索</span>\n        </section>\n        <section @click = \"gotoAddress('/order')\" class=\"guide_item\">\n        \t<svg class=\"icon_style\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" :xlink:href=\"$route.path.indexOf('order') !== -1? '#orderActive' : '#order'\"></use>\n            </svg>\n            <span>订单</span>\n        </section>\n        <section @click = \"gotoAddress('/profile')\" class=\"guide_item\">\n        \t<svg class=\"icon_style\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" :xlink:href=\"$route.path.indexOf('profile') !== -1? '#profileActive' : '#profile'\"></use>\n            </svg>\n            <span>我的</span>\n        </section>\n    </section>\n</template>\n\n<script>\n    import {mapState} from 'vuex'\n    export default {\n    \tdata(){\n            return{\n                \n            }\n        },\n        created(){\n           \n        },\n        mounted(){\n            \n        },\n        computed: {\n            ...mapState([\n                'geohash'\n            ]),\n        },\n        methods: {\n        \tgotoAddress(path){\n        \t\tthis.$router.push(path)\n        \t}\n        },\n\n    }\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\n    #foot_guide{\n        background-color: #fff;\n        position: fixed;\n        z-index: 100;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        @include wh(100%, 1.95rem);\n        display: flex;\n        box-shadow: 0 -0.026667rem 0.053333rem rgba(0,0,0,.1);\n    }\n    .guide_item{\n    \tflex: 1;\n    \tdisplay: flex;\n    \ttext-align: center;\n    \tflex-direction: column;\n    \talign-items: center;\n\t\t.icon_style{\n\t\t\t@include wh(.8rem, .8rem);\n\t\t\tmargin-top: .3rem;\n\t\t\tfill: #ccc;\n\t\t}\n\t\tspan{\n\t\t\t@include sc(.45rem, #666);\n\t\t}\n    }\n   \n</style>\n"
  },
  {
    "path": "src/components/header/head.vue",
    "content": "<template>\n    <header id='head_top'>\n        <slot name='logo'></slot>\n        <slot name='search'></slot>\n        <section class=\"head_goback\" v-if=\"goBack\" @click=\"$router.go(-1)\">\n            <svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n                <polyline points=\"12,18 4,9 12,0\" style=\"fill:none;stroke:rgb(255,255,255);stroke-width:2\"/>\n            </svg>\n        </section>\n        <router-link :to=\"userInfo? '/profile':'/login'\" v-if='signinUp' class=\"head_login\">\n            <svg class=\"user_avatar\" v-if=\"userInfo\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#user\"></use>\n            </svg>\n            <span class=\"login_span\" v-else>登录|注册</span>\n        </router-link>\n        <section class=\"title_head ellipsis\" v-if=\"headTitle\">\n            <span class=\"title_text\">{{headTitle}}</span>\n        </section>\n        <slot name=\"edit\"></slot>\n        <slot name=\"msite-title\"></slot>\n        <slot name=\"changecity\"></slot>\n        <slot name=\"changeLogin\"></slot>\n    </header>\n</template>\n\n<script>\n    import {mapState, mapActions} from 'vuex'\n    export default {\n    \tdata(){\n            return{\n\n            }\n        },\n        mounted(){\n            //获取用户信息\n            this.getUserInfo();\n\n        },\n        props: ['signinUp', 'headTitle', 'goBack'],\n        computed: {\n            ...mapState([\n                'userInfo'\n            ]),\n        },\n        methods: {\n            ...mapActions([\n                'getUserInfo'\n            ]),\n        },\n\n    }\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\n    #head_top{\n        background-color: $blue;\n        position: fixed;\n        z-index: 100;\n        left: 0;\n        top: 0;\n        @include wh(100%, 1.95rem);\n    }\n    .head_goback{\n        left: 0.4rem;\n        @include wh(0.6rem, 1rem);\n        line-height: 2.2rem;\n        margin-left: .4rem;\n    }\n    .head_login{\n        right: 0.55rem;\n        @include sc(0.65rem, #fff);\n        @include ct;\n        .login_span{\n            color: #fff;\n        }\n        .user_avatar{\n            fill: #fff;\n            @include wh(.8rem, .8rem);\n        }\n    }\n    .title_head{\n        @include center;\n        width: 50%;\n        color: #fff;\n        text-align: center;\n        .title_text{\n            @include sc(0.8rem, #fff);\n            text-align: center;\n            font-weight: bold;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/config/env.js",
    "content": "/**\n * 配置编译环境和线上环境之间的切换\n * \n * baseUrl: 域名地址\n * routerMode: 路由模式\n * imgBaseUrl: 图片所在域名地址\n * \n */\n\nlet baseUrl = ''; \nlet routerMode = 'hash';\nlet imgBaseUrl = '';\n\n\nif (process.env.NODE_ENV == 'development') {\n    imgBaseUrl = '/img/';\n\n}else if(process.env.NODE_ENV == 'production'){\n\tbaseUrl = '//elm.cangdu.org';\n    imgBaseUrl = '//elm.cangdu.org/img/';\n}\n\nexport {\n\tbaseUrl,\n\trouterMode,\n\timgBaseUrl,\n}"
  },
  {
    "path": "src/config/fetch.js",
    "content": "import {\n\tbaseUrl\n} from './env'\n\nexport default async(url = '', data = {}, type = 'GET', method = 'fetch') => {\n\ttype = type.toUpperCase();\n\turl = baseUrl + url;\n\n\tif (type == 'GET') {\n\t\tlet dataStr = ''; //数据拼接字符串\n\t\tObject.keys(data).forEach(key => {\n\t\t\tdataStr += key + '=' + data[key] + '&';\n\t\t})\n\n\t\tif (dataStr !== '') {\n\t\t\tdataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));\n\t\t\turl = url + '?' + dataStr;\n\t\t}\n\t}\n\n\tif (window.fetch && method == 'fetch') {\n\t\tlet requestConfig = {\n\t\t\tcredentials: 'include',\n\t\t\tmethod: type,\n\t\t\theaders: {\n\t\t\t\t'Accept': 'application/json',\n\t\t\t\t'Content-Type': 'application/json'\n\t\t\t},\n\t\t\tmode: \"cors\",\n\t\t\tcache: \"force-cache\"\n\t\t}\n\n\t\tif (type == 'POST') {\n\t\t\tObject.defineProperty(requestConfig, 'body', {\n\t\t\t\tvalue: JSON.stringify(data)\n\t\t\t})\n\t\t}\n\t\t\n\t\ttry {\n\t\t\tconst response = await fetch(url, requestConfig);\n\t\t\tconst responseJson = await response.json();\n\t\t\treturn responseJson\n\t\t} catch (error) {\n\t\t\tthrow new Error(error)\n\t\t}\n\t} else {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet requestObj;\n\t\t\tif (window.XMLHttpRequest) {\n\t\t\t\trequestObj = new XMLHttpRequest();\n\t\t\t} else {\n\t\t\t\trequestObj = new ActiveXObject;\n\t\t\t}\n\n\t\t\tlet sendData = '';\n\t\t\tif (type == 'POST') {\n\t\t\t\tsendData = JSON.stringify(data);\n\t\t\t}\n\n\t\t\trequestObj.open(type, url, true);\n\t\t\trequestObj.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n\t\t\trequestObj.send(sendData);\n\n\t\t\trequestObj.onreadystatechange = () => {\n\t\t\t\tif (requestObj.readyState == 4) {\n\t\t\t\t\tif (requestObj.status == 200) {\n\t\t\t\t\t\tlet obj = requestObj.response\n\t\t\t\t\t\tif (typeof obj !== 'object') {\n\t\t\t\t\t\t\tobj = JSON.parse(obj);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tresolve(obj)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(requestObj)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}"
  },
  {
    "path": "src/config/mUtils.js",
    "content": "/**\n * 存储localStorage\n */\nexport const setStore = (name, content) => {\n\tif (!name) return;\n\tif (typeof content !== 'string') {\n\t\tcontent = JSON.stringify(content);\n\t}\n\twindow.localStorage.setItem(name, content);\n}\n\n/**\n * 获取localStorage\n */\nexport const getStore = name => {\n\tif (!name) return;\n\treturn window.localStorage.getItem(name);\n}\n\n/**\n * 删除localStorage\n */\nexport const removeStore = name => {\n\tif (!name) return;\n\twindow.localStorage.removeItem(name);\n}\n\n/**\n * 获取style样式\n */\nexport const getStyle = (element, attr, NumberMode = 'int') => {\n    let target;\n    // scrollTop 获取方式不同，没有它不属于style，而且只有document.body才能用\n    if (attr === 'scrollTop') { \n        target = element.scrollTop;\n    }else if(element.currentStyle){\n        target = element.currentStyle[attr]; \n    }else{ \n        target = document.defaultView.getComputedStyle(element,null)[attr]; \n    }\n    //在获取 opactiy 时需要获取小数 parseFloat\n    return  NumberMode == 'float'? parseFloat(target) : parseInt(target);\n} \n\n/**\n * 页面到达底部，加载更多\n */\nexport const loadMore = (element, callback) => {\n\tlet windowHeight = window.screen.height;\n\tlet height;\n\tlet setTop;\n\tlet paddingBottom;\n\tlet marginBottom;\n    let requestFram;\n    let oldScrollTop;\n\n    document.body.addEventListener('scroll',() => {\n       loadMore();\n    }, false)\n    //运动开始时获取元素 高度 和 offseTop, pading, margin\n\telement.addEventListener('touchstart',() => {\n        height = element.offsetHeight;\n        setTop = element.offsetTop;\n        paddingBottom = getStyle(element,'paddingBottom');\n        marginBottom = getStyle(element,'marginBottom');\n    },{passive: true})\n\n    //运动过程中保持监听 scrollTop 的值判断是否到达底部\n    element.addEventListener('touchmove',() => {\n       loadMore();\n    },{passive: true})\n\n    //运动结束时判断是否有惯性运动，惯性运动结束判断是非到达底部\n    element.addEventListener('touchend',() => {\n       \toldScrollTop = document.body.scrollTop;\n       \tmoveEnd();\n    },{passive: true})\n    \n    const moveEnd = () => {\n        requestFram = requestAnimationFrame(() => {\n            if (document.body.scrollTop != oldScrollTop) {\n                oldScrollTop = document.body.scrollTop;\n                loadMore();\n                moveEnd();\n            }else{\n            \tcancelAnimationFrame(requestFram);\n            \t//为了防止鼠标抬起时已经渲染好数据从而导致重获取数据，应该重新获取dom高度\n            \theight = element.offsetHeight;\n                loadMore();\n            }\n        })\n    }\n\n    const loadMore = () => {\n        if (document.body.scrollTop + windowHeight >= height + setTop + paddingBottom + marginBottom) {\n            callback();\n        }\n    }\n}\n\n/**\n * 显示返回顶部按钮，开始、结束、运动 三个过程中调用函数判断是否达到目标点\n */\nexport const showBack = callback => {\n    let requestFram;\n    let oldScrollTop;\n\n    document.addEventListener('scroll',() => {\n       showBackFun();\n    }, false)\n    document.addEventListener('touchstart',() => {\n       showBackFun();\n    },{passive: true})\n\n    document.addEventListener('touchmove',() => {\n       showBackFun();\n    },{passive: true})\n\n    document.addEventListener('touchend',() => {\n        oldScrollTop = document.body.scrollTop;\n        moveEnd();\n    },{passive: true})\n    \n    const moveEnd = () => {\n        requestFram = requestAnimationFrame(() => {\n            if (document.body.scrollTop != oldScrollTop) {\n                oldScrollTop = document.body.scrollTop;\n                moveEnd();\n            }else{\n                cancelAnimationFrame(requestFram);\n            }\n            showBackFun();\n        })\n    }\n\n    //判断是否达到目标点\n    const showBackFun = () => {\n        if (document.body.scrollTop > 500) {\n            callback(true);\n        }else{\n            callback(false);\n        }\n    }\n}\n\n\n/**\n * 运动效果\n * @param {HTMLElement} element   运动对象，必选\n * @param {JSON}        target    属性：目标值，必选\n * @param {number}      duration  运动时间，可选\n * @param {string}      mode      运动模式，可选\n * @param {function}    callback  可选，回调函数，链式动画\n */\nexport const animate = (element, target, duration = 400, mode = 'ease-out', callback) => {\n    clearInterval(element.timer);\n\n    //判断不同参数的情况\n    if (duration instanceof Function) {\n        callback = duration;\n        duration = 400;\n    }else if(duration instanceof String){\n        mode = duration;\n        duration = 400;\n    }\n\n    //判断不同参数的情况\n    if (mode instanceof Function) {\n        callback = mode;\n        mode = 'ease-out';\n    }\n\n    //获取dom样式\n    const attrStyle = attr => {\n        if (attr === \"opacity\") { \n            return Math.round(getStyle(element, attr, 'float') * 100);\n        } else {\n            return getStyle(element, attr);\n        }\n    }\n    //根字体大小，需要从此将 rem 改成 px 进行运算\n    const rootSize = parseFloat(document.documentElement.style.fontSize);\n\n    const unit = {};\n    const initState = {};\n\n    //获取目标属性单位和初始样式值\n    Object.keys(target).forEach(attr => {\n        if (/[^\\d^\\.]+/gi.test(target[attr])) {\n            unit[attr] = target[attr].match(/[^\\d^\\.]+/gi)[0] || 'px';\n        }else{\n            unit[attr] = 'px';\n        }\n        initState[attr] = attrStyle(attr);\n    });\n\n    //去掉传入的后缀单位\n    Object.keys(target).forEach(attr => {\n        if (unit[attr] == 'rem') {\n            target[attr] = Math.ceil(parseInt(target[attr])*rootSize);\n        }else{\n            target[attr] = parseInt(target[attr]);\n        }\n    });\n\n\n    let flag = true; //假设所有运动到达终点\n    const remberSpeed = {};//记录上一个速度值,在ease-in模式下需要用到\n    element.timer = setInterval(() => {\n        Object.keys(target).forEach(attr => {\n            let iSpeed = 0;  //步长\n            let status = false; //是否仍需运动\n            let iCurrent = attrStyle(attr) || 0; //当前元素属性址\n            let speedBase = 0; //目标点需要减去的基础值，三种运动状态的值都不同\n            let intervalTime; //将目标值分为多少步执行，数值越大，步长越小，运动时间越长\n            switch(mode){\n                case 'ease-out': \n                    speedBase = iCurrent;\n                    intervalTime = duration*5/400;\n                    break;\n                case 'linear':\n                    speedBase = initState[attr];\n                    intervalTime = duration*20/400;\n                    break;\n                case 'ease-in':\n                    let oldspeed = remberSpeed[attr] || 0;\n                    iSpeed = oldspeed + (target[attr] - initState[attr])/duration;\n                    remberSpeed[attr] = iSpeed\n                    break;\n                default:\n                    speedBase = iCurrent;\n                    intervalTime = duration*5/400; \n            }\n            if (mode !== 'ease-in') {\n                iSpeed = (target[attr] - speedBase) / intervalTime;\n                iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);\n            }\n            //判断是否达步长之内的误差距离，如果到达说明到达目标点\n            switch(mode){\n                case 'ease-out': \n                    status = iCurrent != target[attr]; \n                    break;\n                case 'linear':\n                    status = Math.abs(Math.abs(iCurrent) - Math.abs(target[attr])) > Math.abs(iSpeed);\n                    break;\n                case 'ease-in':\n                    status = Math.abs(Math.abs(iCurrent) - Math.abs(target[attr])) > Math.abs(iSpeed);\n                    break;\n                default:\n                    status = iCurrent != target[attr]; \n            }\n\n            if (status) {\n                flag = false; \n                //opacity 和 scrollTop 需要特殊处理\n                if (attr === \"opacity\") {\n                    element.style.filter = \"alpha(opacity:\" + (iCurrent + iSpeed) + \")\";\n                    element.style.opacity = (iCurrent + iSpeed) / 100;\n                } else if (attr === 'scrollTop') {\n                    element.scrollTop = iCurrent + iSpeed;\n                }else{\n                    element.style[attr] = iCurrent + iSpeed + 'px';\n                }\n            } else {\n                flag = true;\n            }\n\n            if (flag) {\n                clearInterval(element.timer);\n                if (callback) {\n                    callback();\n                }\n            }\n        })\n    }, 20);\n}\n"
  },
  {
    "path": "src/config/rem.js",
    "content": "(function(doc, win) {\r\n    var docEl = doc.documentElement,\r\n        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',\r\n        recalc = function() {\r\n            var clientWidth = docEl.clientWidth;\r\n            if (!clientWidth) return;\r\n            docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';\r\n        };\r\n    if (!doc.addEventListener) return;\r\n    win.addEventListener(resizeEvt, recalc, false);\r\n    doc.addEventListener('DOMContentLoaded', recalc, false);\r\n})(document, window);"
  },
  {
    "path": "src/main.js",
    "content": "import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport routes from './router/router'\nimport store from './store/'\nimport {routerMode} from './config/env'\nimport './config/rem'\n\nVue.use(VueRouter)\nconst router = new VueRouter({\n\troutes,\n\tmode: routerMode,\n\tstrict: process.env.NODE_ENV !== 'production',\n\tscrollBehavior (to, from, savedPosition) {\n\t    if (savedPosition) {\n\t\t    return savedPosition\n\t\t} else {\n\t\t\tif (from.meta.keepAlive) {\n\t\t\t\tfrom.meta.savedPosition = document.body.scrollTop;\n\t\t\t}\n\t\t    return { x: 0, y: to.meta.savedPosition || 0 }\n\t\t}\n\t}\n})\n\nnew Vue({\n\trouter,\n\tstore,\n}).$mount('#app')\n\n"
  },
  {
    "path": "src/page/balance/balance.vue",
    "content": " <template>\r\n  <div class=\"page\">\r\n        <head-top head-title=\"我的余额\" go-back='true'></head-top>\r\n        <section class=\"content_container\">\r\n            <section class=\"content\">\r\n                <header class=\"content_header\">\r\n                    <span class=\"content_title_style\">当前余额</span>\r\n                    <section class=\"contetn_description\">\r\n                        <img src=\"../../images/description.png\" height=\"24\" width=\"24\">\r\n                        <router-link to=\"/balance/detail\" class=\"content_title_style\">余额说明</router-link>\r\n                    </section>\r\n                </header>\r\n                <p class=\"content_num\">\r\n                    <span>0.00</span>\r\n                    <span>元</span>\r\n                </p>\r\n                <div class=\"promit_button\">提现</div>\r\n            </section>\r\n        </section>\r\n        <p class=\"deal_detail\">交易明细</p>\r\n        <div class=\"no_log\">\r\n            <img src=\"../../images/no-log.png\">\r\n            <p>暂无明细记录</p>\r\n        </div>\r\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\r\n        <transition name=\"router-slid\" mode=\"out-in\">\r\n            <router-view></router-view>\r\n        </transition>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import headTop from 'src/components/header/head'\r\n    import alertTip from 'src/components/common/alertTip'\r\n    \r\n    export default {\r\n      data(){\r\n            return{\r\n                showAlert: false,\r\n                alertText: null,\r\n            }\r\n        },\r\n        mounted(){\r\n          \r\n        },\r\n        components: {\r\n            headTop,\r\n            alertTip,\r\n        },\r\n        computed: {\r\n           \r\n        },\r\n        methods: {\r\n            \r\n        }\r\n    }\r\n</script>\r\n  \r\n<style lang=\"scss\" scoped>\r\n    @import 'src/style/mixin';\r\n  \r\n    .page{\r\n        padding-top: 1.95rem;\r\n        p, span{\r\n            font-family: Helvetica Neue,Tahoma,Arial;\r\n        }\r\n    }\r\n    .content_container{\r\n        padding: .3rem;\r\n        background-color: $blue;\r\n        .content{\r\n            padding: .4rem;\r\n            background-color: #fff;\r\n            border-radius: .15rem;\r\n            .content_header{\r\n                @include fj;\r\n                font-size: .55rem;\r\n                .contetn_description{\r\n                    display: flex;\r\n                    align-items: center;\r\n                    img{\r\n                        @include wh(.6rem, .6rem);\r\n                        margin-right: .2rem;\r\n                    }\r\n                    .content_title_style{\r\n                        color: $blue;\r\n                    }\r\n                }\r\n                .content_title_style{\r\n                    color: #666;\r\n                }\r\n            }\r\n            .content_num{\r\n                span:nth-of-type(1){\r\n                    @include sc(1.8rem, #333);\r\n                }\r\n                span:nth-of-type(2){\r\n                    @include sc(.7rem, #333);\r\n                }\r\n            }\r\n            .promit_button{\r\n                @include wh(100%, 2rem);\r\n                @include sc(.8rem, #fff);\r\n                border-radius: 0.15rem;\r\n                line-height: 2rem;\r\n                margin-top: 1rem;\r\n                text-align: center;\r\n                background-color: #ccc;\r\n            }\r\n        }\r\n    }\r\n    .deal_detail{\r\n        @include sc(.6rem, #999);\r\n        line-height: 2rem;\r\n        padding-left: .5rem;\r\n    }\r\n    .no_log{\r\n        text-align: center;\r\n        margin-top: 1rem;\r\n        img{\r\n            @include wh(8rem, 5rem);\r\n        }\r\n        p{\r\n            margin-top: .5rem;\r\n            @include sc(.7rem, #666);\r\n        }\r\n    }\r\n    .router-slid-enter-active, .router-slid-leave-active {\r\n        transition: all .4s;\r\n    }\r\n    .router-slid-enter, .router-slid-leave-active {\r\n        transform: translate3d(2rem, 0, 0);\r\n        opacity: 0;\r\n    }\r\n</style>\r\n"
  },
  {
    "path": "src/page/balance/children/detail.vue",
    "content": " <template>\n    <div class=\"page\">\n        <head-top head-title=\"余额问题\" go-back='true'></head-top>\n        <div class=\"markdown\"><h3 id=\"q1-\">Q1: 使用余额的条件</h3>\n        <p>为了保护账户安全，使用余额前必须先绑定手机号。</p>\n        <h3 id=\"q2-\">Q2: 余额可以怎么用？</h3>\n        <p>余额可以在饿了么平台上提现，当余额大于等于待支付金额时可以在支持在线支付的商家中进行消费。提现功能将于2016年12月25日00:00全面开放。</p>\n        <h3 id=\"q3-\">Q3:我要如何提现？</h3>\n        <p>为了保护账户和资金安全，您在提现前需要输入真实姓名和用该姓名开通的银行卡号、选择开户行，并验证已绑定饿了么账号的手机号。每日只能提现1次，每次限额50元。若提现金额超过50元，点击【提现】时系统会提示您已超额，请您修改提现金额。</p>\n        <h3 id=\"q4-\">Q4:为什么会提现失败？</h3>\n        <p>可能原因有：您的姓名、开户行、银行卡号等信息不匹配；您当日的提现次数和金额超过限制；您的账户存在异常，被风控拦截。</p>\n        </div>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {payRequest} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n    import loading from 'src/components/common/loading'\n\n    export default {\n      data(){\n            return{\n               \n            }\n        },\n        components: {\n            headTop,\n        },\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #fff;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .markdown{\n        @include sc(.6rem, #666);\n        padding: 0 0.5rem 0.5rem;\n        h3{\n            line-height: 2rem;\n        }\n        p,li{\n            @include sc(.6rem, #666);\n            line-height: 1rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/benefit/benefit.vue",
    "content": " <template>\r\n  <div class=\"rating_page\">\r\n        <head-top head-title=\"我的优惠\" go-back='true'></head-top>\r\n        <section v-if=\"!showLoading\">\r\n            <section class=\"category_title\"> \r\n                <span :class=\"{choosed: categoryType === 1}\" @click=\"categoryType = 1\">红包</span>\r\n                <span :class=\"{choosed: categoryType === 2}\" @click=\"categoryType = 2\">商家代金券</span>\r\n            </section>\r\n            <transition name=\"router-fade\">\r\n                <section v-if=\"categoryType === 1\">\r\n                    <section class=\"hongbao_container\">\r\n                        <header class=\"hongbao_title\">\r\n                            <section class=\"total_number\">\r\n                                有 <span>{{hongbaoList.length}}</span> 个红包即将到期\r\n                            </section>\r\n                            <section class=\"hongbao_description\">\r\n                                <img src=\"../../images/description.png\" height=\"24\" width=\"24\">\r\n                                <router-link to=\"/benefit/hbDescription\" class=\"hongbao_detail\">红包说明</router-link>\r\n                            </section>\r\n                        </header>\r\n                        <ul class=\"hongbao_list_ul\">\r\n                            <li class=\"hongbao_list_li\" v-for=\"item in hongbaoList\" :key=\"item.id\">\r\n                                <section class=\"list_item\">\r\n                                    <div class=\"list_item_left\">\r\n                                        <span>¥</span>\r\n                                        <span>{{String(item.amount).split('.')[0]}}</span>\r\n                                        <span>.</span>\r\n                                        <span>{{String(item.amount).split('.')[1]||0}}</span>\r\n                                        <p>{{item.description_map.sum_condition}}</p>\r\n                                    </div>\r\n                                    <div class=\"list_item_right\">\r\n                                        <h4>{{item.name}}</h4>\r\n                                        <p>{{item.description_map.validity_periods}}</p>\r\n                                        <p>{{item.description_map.phone}}</p>\r\n                                    </div>\r\n                                    <div class=\"time_left\">{{item.description_map.validity_delta}}</div>\r\n                                </section>\r\n                                <footer class=\"list_item_footer\" v-if=\"item.limit_map\">\r\n                                    <p>{{item.limit_map.restaurant_flavor_ids}}</p>\r\n                                </footer>\r\n                            </li>\r\n                        </ul>\r\n                    </section>\r\n                    <router-link to=\"/benefit/hbHistory\" class=\"history_hongbao\">\r\n                        <span class=\"check_history\">查看历史红包</span>\r\n                        <svg class=\"history_right\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                        </svg>\r\n                    </router-link>\r\n                    <footer class=\"hongbao_footer\">\r\n                        <router-link to=\"/benefit/exchange\" class=\"hongbao_style\" style=\"border-right: 1px solid #f5f5f5\">\r\n                            兑换红包\r\n                        </router-link>\r\n                        <router-link to=\"/benefit/commend\" class=\"hongbao_style\">\r\n                            推荐有奖\r\n                        </router-link>\r\n                    </footer>\r\n                </section>\r\n            </transition>\r\n            <transition name=\"router-fade\">\r\n                <section v-if=\"categoryType === 2\" class=\"voucher_container\">\r\n                    <section class=\"hongbao_description voucher_header\">\r\n                        <img src=\"../../images/description.png\" height=\"24\" width=\"24\">\r\n                        <router-link to=\"/benefit/coupon\" class=\"hongbao_detail\">商家代金券说明</router-link>\r\n                    </section>\r\n                    <section class=\"unable_use\">\r\n                        <img src=\"../../images/voucher.png\" height=\"170\" width=\"300\">\r\n                        <p>无法使用代金券</p>\r\n                        <p>非客户端或客户端版本过低</p>\r\n                        <router-link to=\"/download\" class=\"download_app\">\r\n                        下载或升级客户端\r\n                        </router-link>\r\n                    </section>\r\n                </section>\r\n            </transition>\r\n        </section>\r\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\r\n        <loading v-show=\"showLoading\"></loading>\r\n        <transition name=\"router-slid\" mode=\"out-in\">\r\n            <router-view></router-view>\r\n        </transition>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import headTop from 'src/components/header/head'\r\n    import {mapState, mapMutations} from 'vuex'\r\n    import {getHongbaoNum} from 'src/service/getData'\r\n    import alertTip from 'src/components/common/alertTip'\r\n    import loading from 'src/components/common/loading'\r\n\r\n    export default {\r\n      data(){\r\n            return{\r\n                showAlert: false, //弹出框\r\n                alertText: null, //弹出框文字\r\n                showLoading: true, //加载动画\r\n                hongbaoList: null, //红包列表\r\n                categoryType: 1, //红包与商家代金券切换\r\n\r\n            }\r\n        },\r\n        mounted(){\r\n            this.initData();\r\n        },\r\n        components: {\r\n            headTop,\r\n            alertTip,\r\n            loading,\r\n        },\r\n        computed: {\r\n            ...mapState([\r\n                'userInfo',\r\n            ]),\r\n        },\r\n        methods: {\r\n            ...mapMutations([\r\n                'CLEAR_CART'\r\n            ]),\r\n            async initData(){\r\n                if (this.userInfo) {\r\n                    this.hongbaoList = await getHongbaoNum(this.userInfo.user_id);\r\n                    this.showLoading = false;\r\n                }\r\n            }\r\n        },\r\n        watch: {\r\n            userInfo: function (value){\r\n                this.initData();\r\n            }\r\n        }\r\n    }\r\n</script>\r\n  \r\n<style lang=\"scss\" scoped>\r\n    @import 'src/style/mixin';\r\n  \r\n    .rating_page{\r\n        padding-top: 1.95rem;\r\n        p, span{\r\n            font-family: Helvetica Neue,Tahoma,Arial;\r\n        }\r\n    }\r\n    .category_title{\r\n        display: flex;\r\n        justify-content: space-around;\r\n        align-items: center;\r\n        height: 2rem;\r\n        background-color: #fff;\r\n        span{\r\n            text-align: center;\r\n            @include sc(.65rem, #333);\r\n            padding-bottom: .2rem;\r\n            border-bottom: 0.1rem solid #fff;\r\n        }\r\n        .choosed{\r\n            border-bottom-color: $blue;\r\n            color: $blue;\r\n        }\r\n    }\r\n    .hongbao_description{\r\n        display: flex;\r\n        align-items: center;\r\n        img{\r\n            @include wh(.6rem, .6rem);\r\n            margin-right: .2rem;\r\n        }\r\n        .hongbao_detail{\r\n            color: $blue;\r\n        }\r\n    }\r\n    .hongbao_container{\r\n        padding: 0 .7rem;\r\n        .hongbao_title{\r\n            @include fj;\r\n            font-size: .5rem;\r\n            line-height: 2rem;\r\n            .total_number{\r\n                color: #666;\r\n                span{\r\n                    color: #ff5340;\r\n                }\r\n            }\r\n        }\r\n        .hongbao_list_ul{\r\n            .hongbao_list_li{\r\n                background: #fff url(../../images/hongbao.png) repeat-x ;\r\n                background-size: .5rem .2rem;\r\n                margin-bottom: 0.5rem;\r\n                border-radius: 0.25rem;\r\n                .list_item{\r\n                    @include fj;\r\n                    padding: 1rem 0.5rem .8rem;\r\n                    .list_item_left{\r\n                        font-size: 0;\r\n                        border-right: 0.025rem dotted #ccc;\r\n                        flex: 1;\r\n                        span:nth-of-type(1){\r\n                            @include sc(.75rem, #ff5340);\r\n                            font-weight: bold;\r\n                        }\r\n                        span:nth-of-type(2){\r\n                            @include sc(1.5rem, #ff5340);\r\n                        }\r\n                        span:nth-of-type(3), span:nth-of-type(4){\r\n                            @include sc(0.8rem, #ff5340);\r\n                            font-weight: bold;\r\n                        }\r\n                        p{\r\n                            @include sc(0.4rem, #999);\r\n                        }\r\n                    }\r\n                    .list_item_right{\r\n                        flex: 2;\r\n                        margin-left: 1.5rem;\r\n                        h4{\r\n                            @include sc(.7rem, #666);\r\n                            margin-left: -.7rem;\r\n                        }\r\n                        p{\r\n                            list-style-type: disc;\r\n                            margin-left: -.7rem;\r\n                            @include sc(.4rem, #999);   \r\n                        }\r\n                    }\r\n                    .time_left{\r\n                        @include sc(.75rem, #ff5340);\r\n                    }\r\n                }\r\n                .list_item_footer{\r\n                    background-color: #f9f9f9;\r\n                    padding: .4rem .4rem;\r\n                    border-bottom-left-radius: 0.25rem;\r\n                    border-bottom-right-radius: 0.25rem;\r\n                    p{\r\n                        list-style-type: disc;\r\n                        @include sc(.4rem, #999);\r\n                        margin-left: .4rem;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    .history_hongbao{\r\n        padding: .5rem 0 2.8rem;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        .check_history{\r\n            @include sc(.5rem, #999);\r\n            margin-right: .2rem;\r\n        }\r\n        .history_right{\r\n            @include wh(.4rem, .4rem);\r\n            fill: #aaa;\r\n        }\r\n    }\r\n    .hongbao_footer{\r\n        position: fixed;\r\n        bottom: 0;\r\n        width: 100%;\r\n        background-color: #fff;\r\n        display: flex;\r\n        .hongbao_style{\r\n            flex: 1;\r\n            line-height: 2rem;\r\n            text-align: center;\r\n            @include sc(.7rem, #555);\r\n        }\r\n    }\r\n    .voucher_container{\r\n        .voucher_header{\r\n            font-size: .5rem;\r\n            justify-content: flex-end;\r\n            line-height: 2rem;\r\n            margin-right: .5rem;\r\n        }\r\n        .unable_use{\r\n            text-align: center;\r\n            margin-top: 4rem;\r\n            img{\r\n                @include wh(6rem, 3.4rem);\r\n            }\r\n            p:nth-of-type(1){\r\n                @include sc(.7rem, #666);\r\n                margin-top: .4rem;\r\n            }\r\n            p:nth-of-type(2){\r\n                @include sc(.5rem, #999);\r\n                margin-top: .3rem;\r\n                margin-bottom: .3rem;\r\n            }\r\n            .download_app{\r\n                background-color: #56d176;\r\n                @include sc(.65rem, #fff);\r\n                padding: .3rem;\r\n                border-radius: .15rem;\r\n            }\r\n        }\r\n    }\r\n    .router-fade-enter-active, .router-fade-leave-active {\r\n        transition: opacity .3s;\r\n    }\r\n    .router-fade-enter, .router-fade-leave-active {\r\n        opacity: 0;\r\n    }\r\n    .router-slid-enter-active, .router-slid-leave-active {\r\n        transition: all .4s;\r\n    }\r\n    .router-slid-enter, .router-slid-leave-active {\r\n        transform: translate3d(2rem, 0, 0);\r\n        opacity: 0;\r\n    }\r\n</style>\r\n"
  },
  {
    "path": "src/page/benefit/children/commend.vue",
    "content": " <template>\n  <div class=\"page\">\n        <head-top head-title=\"推荐有奖\" go-back='true'></head-top>\n        <section class=\"activity_banner\">\n            <img src=\"../../../images/activity.png\">\n        </section>\n        <section class=\"invite_firend\">\n            <div class=\"invite_firend_style\">\n                <img src=\"../../../images/weixin.png\" @click=\"fenxiang\">\n                <p>邀请微信好友</p>\n            </div>\n            <div class=\"invite_firend_style\">\n                <img src=\"../../../images/qq.png\" @click=\"fenxiang\">\n                <p>邀请QQ好友</p>\n            </div>\n            <div class=\"invite_firend_style\">\n                <img src=\"../../../images/fenxiang.png\" @click=\"fenxiang\">\n                <p>面对面邀请</p>\n            </div>\n        </section>\n        <section class=\"invite_num\">\n            <div class=\"invite_num_style\">\n                <p>累计收益</p>\n                <p><span>0</span>元</p>\n            </div>\n            <div class=\"invite_num_style invite_people\">\n                <p>成功邀请</p>\n                <p><span>0</span>人</p>\n            </div>\n        </section>\n        <p class=\"income_detail\">-收益明细-</p>\n        <section class=\"incom_tips\">\n            <img src=\"../../../images/qianbao.png\">\n            <p>还不赶紧去邀请好友</p>\n        </section>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState} from 'vuex'\n    import {payRequest} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n                showAlert: false,\n                alertText: null,\n            }\n        },\n        mounted(){\n            \n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        computed: {\n            ...mapState([\n                'userInfo',\n            ]),\n        },\n        methods: {\n            fenxiang(){\n                this.showAlert = true;\n                this.alertText = '请在饿了么APP中打开';\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        overflow-y: auto;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #f5f5f5;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .activity_banner{\n        img{\n            @include wh(100%, 10rem);\n        }\n    }\n    .invite_firend{\n        display: flex;\n        padding: 1rem 0;\n        background-color: #fff;\n        .invite_firend_style{\n            flex: 1;\n            text-align: center;\n            img{\n                @include wh(2.5rem, 2.5rem);\n            }\n            p{\n                @include sc(.5rem, #333);\n            }\n        }\n    }\n    .invite_num{\n        display: flex;\n        margin-top: 1rem;\n        @include sc(.5rem, #666);\n        .invite_num_style{\n            flex: 1;\n            text-align: center;\n            p{\n                color: #666;\n            }\n            span{\n                @include sc(.8rem, #ff5633);\n                font-weight: bold;\n            }\n        }\n        .invite_people{\n            border-left: 0.025rem solid #ddd;\n            span{\n                @include sc(.8rem, #666);\n                font-weight: bold;\n            }\n        }\n    }\n    .income_detail{\n        text-align: center;\n        margin-top: 1rem;\n        @include sc(.5rem, #666);\n    }\n    .incom_tips{\n        text-align: center;\n        margin-top: 1rem;\n        img{\n            @include wh(1.3rem, 1.6rem);\n        }\n        p{\n            @include sc(.5rem, #999);\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/benefit/children/coupon.vue",
    "content": " <template>\n  <div class=\"page\">\n        <head-top head-title=\"代金券说明\" go-back='true'></head-top>\n        <div class=\"markdown\">\n            <h3 id=\"q1-\">Q1: 什么是商家代金券？</h3>\n            <p>商家代金券是指由商家自己发放代金券，只限在指定的商家使用，可根据条件抵扣相应金额。</p>\n            <h3 id=\"q2-\">Q2: 怎么获得商家代金券？</h3>\n            <ul>\n                <li>进入有「进店领券」或「下单返券」标示的商家即有机会获得代金券。</li>\n                <li>「下单返券」需要在指定商家完成满足返券金额要求的订单后才会返还，代金券可在下次下单时使用。</li>\n            </ul>\n            <h3 id=\"q3-\">Q3: 商家代金券使用条件</h3>\n            <ul>\n                <li>商家代金券仅限在指定商家使用</li>\n                <li>商家代金券仅限在线支付使用</li>\n                <li>每个订单只能使用一张商家代金券，不可与其他代金券叠加使用</li>\n            </ul>\n        </div>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {payRequest} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n    import loading from 'src/components/common/loading'\n\n    export default {\n      data(){\n            return{\n               \n            }\n        },\n        components: {\n            headTop,\n        },\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #fff;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .markdown{\n        @include sc(.6rem, #666);\n        padding: 0 0.5rem 0.5rem;\n        h3{\n            line-height: 2rem;\n        }\n        p,li{\n            @include sc(.6rem, #666);\n            line-height: 1rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/benefit/children/exchange.vue",
    "content": " <template>\n  <div class=\"page\">\n        <head-top head-title=\"兑换红包\" go-back='true'></head-top>\n        <form class=\"exchange_code\">\n            <input type=\"text\" placeholder=\"请输入兑换码\" v-model=\"exchangeCode\" class=\"exchange_input\">\n            <section class=\"input_container captcha_code_container\">\n                <input type=\"text\" placeholder=\"验证码\" maxlength=\"4\" v-model=\"codeNumber\">\n                <div class=\"img_change_img\">\n                    <img v-show=\"captchaCodeImg\" :src=\"captchaCodeImg\">\n                    <div class=\"change_img\" @click=\"getCaptchaCode\">\n                        <p>看不清</p>\n                        <p>换一张</p>\n                    </div>\n                </div>\n            </section>\n        </form>\n        <div class=\"determine\" @click=\"exchange\" :class=\"{active: status}\">兑换</div>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState} from 'vuex'\n    import {getcaptchas, exChangeHongbao} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n                showAlert: false,\n                alertText: null,\n                exchangeCode: null,\n                codeNumber: '',\n                captchaCodeImg: null,\n            }\n        },\n        mounted(){\n            this.getCaptchaCode();\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        computed: {\n            ...mapState([\n                'userInfo',\n            ]),\n            status: function (){\n                let status = (/^\\d+$/gi.test(this.exchangeCode)) && (/^\\w{4}$/gi.test(this.codeNumber))\n                return status;\n            }\n        },\n        methods: {\n            //线上环境采用固定的图片，编译环境获取真实的验证码\n            async getCaptchaCode(){\n                let res = await getcaptchas();\n                this.captchaCodeImg = res.code;\n            },\n            //兑换红包\n            async exchange(){\n                if (this.status) {\n                    let res = await exChangeHongbao(this.userInfo.user_id, this.exchangeCode, this.codeNumber);\n                    //不成功则弹出提示框\n                    if (res.message) {\n                        this.getCaptchaCode();\n                        this.showAlert = true;\n                        this.alertText = res.message;\n                    }\n                }\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        overflow-y: auto;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #f1f1f1;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .determine{\n        background-color: #ccc;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n        margin-top: 0.7rem;\n    }\n    .active{\n        background-color: #4cd964;\n    }\n    .exchange_code{\n        margin-top: 0.7rem;\n        padding: 0 .5rem;\n        .exchange_input{\n            width: 100%;\n            @include sc(.7rem, #666);\n            padding: .6rem .4rem;\n            border-radius: .15rem;\n        }\n    }\n    .captcha_code_container{\n        height: 2.2rem;\n        display: flex;\n        margin-top: .7rem;\n        input{\n            @include sc(.7rem, #666);\n            padding: .4rem;\n            border-radius: .15rem;\n            flex: 3;\n        }\n        .img_change_img{\n            display: flex;\n            align-items: center;\n            flex: 2;\n            margin-left: .3rem;\n            background-color: #fff;\n            padding-left: .2rem;\n            border-radius: .15rem;\n            img{\n                @include wh(3.5rem, 1.5rem);\n                margin-right: .2rem;\n            }\n            .change_img{\n                display: flex;\n                flex-direction: 'column';\n                flex-wrap: wrap;\n                width: 2rem;\n                justify-content: center;\n                p{\n                    @include sc(.55rem, #666);\n                }\n                p:nth-of-type(2){\n                    color: #3b95e9;\n                    margin-top: .2rem;\n                }\n            }\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/benefit/children/hbDescription.vue",
    "content": " <template>\n    <div class=\"page\">\n        <head-top head-title=\"红包说明\" go-back='true'></head-top>\n        <section id=\"scroll_section\" class=\"scroll_container\">\n            <div class=\"markdown\">\n            <h3 id=\"q1-\">Q1: 怎么获得红包？</h3>\n            <ul>\n                <li>通过邀请好友获得</li>\n                <li>在下单返红包的商家下单获得</li>\n                <li>抢微信朋友分享的红包获得</li>\n            </ul>\n            <h3 id=\"q2-\">Q2: 红包可以做什么？</h3>\n            <p>可以抵扣在线支付时的实际支付金额。</p>\n            <h3 id=\"q3-\">Q3: 红包的门槛金额按照什么金额计算？</h3>\n            <p>红包的的门槛金额按照（选购菜品折后价＋餐盒费）的金额作为计算门槛，即购物车显示的金额（7.3以上版本）。假设红包满30可用，只要选购的菜品现价（折后价）＋餐盒费超过30，就可以使用红包。</p>\n            <h3 id=\"q4-\">Q4: 一个红包能拆开多次使用吗？</h3>\n            <p>不能，一个红包只能一次性使用，不能分开使用。</p>\n            <h3 id=\"q5-\">Q5: 下单的时候使用了红包，但是后来订单取消了，红包还会返还吗？</h3>\n            <p>会的，订单无效后红包会自动返还到您的账户里。</p>\n            <h3 id=\"q6-\">Q6: 红包兑换码怎样兑换成红包，怎样查看红包？</h3>\n            <p>在个人中心 &gt; 我的红包 &gt; 兑换红包，输入兑换码进行兑换。</p>\n            <h3 id=\"q7-\">Q7: 邀请好友了，为什么没获得红包？</h3>\n            <p>先检查下您是否在同一设备上进行的邀请？或者被邀请人是否通过您发给对方的链接进行注册？而非自己复制链接注册的。同一设备上邀请或没有按照点击发送的链接邀请都是无效邀请。如果您是正常邀请没获得红包，可以致电客服进行查实。</p>\n            <h3 id=\"q8-\">Q8: 预订早餐、预订午餐的红包怎么使用？在哪里查询？</h3>\n            <ul>\n                <li>预订早餐、预订午餐的红包暂时不支持直接点外卖使用，并且当前点外卖的红包也暂时不支持在预订早餐、预订午餐时使用。</li>\n                <li>预订早餐、预订午餐的红包从APP首页点击“预订早餐”按钮进入后在右上角的个人中心中查找预订早餐、预订午餐的红包。</li>\n            </ul>\n            <h3 id=\"q9-\">Q9: 互斥红包怎么使用？</h3>\n            <ul>\n                <li>互斥红包不与其他优惠活动（包含但不限于：新用户专享、满X元减X元、满X元赠XX）同时使用。</li>\n            </ul>\n            <h3 id=\"q10-\">Q10: 返红包活动， 红包领取规则是什么?</h3>\n            <ul>\n                <li>同一个手机号一天限领取三个。</li>\n                <li>同一注册用户一天限领取三个。</li>\n                <li>注册用户红包直接发送至用户账户里。</li>\n                <li>非注册用户红包以兑换码短信的形式发送至用户手机，注册后凭兑换码兑换即可。</li>\n                <li>红包的使用周期为1周，自红包发放的第2天开始计算。</li>\n                <li>同一个手机号一天最多使用两个红包。</li>\n                <li>未收到红包短信的用户注意查看手机里的拦截短信。</li>\n                <li>有任何问题请拨打客服电话：10105757。</li>\n            </ul>\n            </div>\n        </section>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {payRequest} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n    import loading from 'src/components/common/loading'\n    import BScroll from 'better-scroll'\n\n    export default {\n      data(){\n            return{\n               \n            }\n        },\n        mounted(){\n            this.$nextTick(() => {\n                new BScroll('#scroll_section', {  \n                    deceleration: 0.001,\n                    bounce: true,\n                    swipeTime: 1800,\n                    click: true,\n                }); \n            })\n        },\n        components: {\n            headTop,\n        },\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #fff;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .scroll_container{\n        @include wh(100%, 100%);\n    }\n    .markdown{\n        padding-bottom: 2rem;\n        @include sc(.6rem, #666);\n        padding: 0 0.5rem 0.5rem;\n        h3{\n            line-height: 2rem;\n        }\n        p,li{\n            @include sc(.6rem, #666);\n            line-height: 1rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/benefit/children/hbHistory.vue",
    "content": " <template>\n  <div class=\"rating_page\">\n        <head-top head-title=\"历史红包\" go-back='true'></head-top>\n        <section v-if=\"!showLoading\" id=\"scroll_section\" class=\"scroll_container\">\n            <ul class=\"hongbao_list_ul\">\n                <li class=\"hongbao_list_li\" v-for=\"item in expiredList\" :key=\"item.id\">\n                    <section class=\"list_item\">\n                        <div class=\"list_item_left\">\n                            <span>¥</span>\n                            <span>{{String(item.amount).split('.')[0]}}</span>\n                            <span>.</span>\n                            <span>{{String(item.amount).split('.')[1]||0}}</span>\n                            <p>{{item.description_map.sum_condition}}</p>\n                        </div>\n                        <div class=\"list_item_right\">\n                            <h4>{{item.name}}</h4>\n                            <p>{{item.description_map.validity_periods}}</p>\n                            <p>{{item.description_map.phone}}</p>\n                        </div>\n                    </section>\n                    <footer class=\"list_item_footer\" v-if=\"item.limit_map\">\n                        <p>{{item.limit_map.restaurant_flavor_ids}}</p>\n                    </footer>\n                    <svg class=\"expired\">\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#expired\"></use>\n                    </svg>\n                </li>\n            </ul>\n        </section>\n        <loading v-if=\"showLoading\"></loading>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {getExpired} from 'src/service/getData'\n    import loading from 'src/components/common/loading'\n    import BScroll from 'better-scroll'\n    \n    export default {\n      data(){\n            return{\n                showAlert: false,\n                alertText: null,\n                showLoading: true,\n                expiredList: null, //历史红包列表\n            }\n        },\n        mounted(){\n            this.initData();\n        },\n        components: {\n            headTop,\n            loading,\n        },\n        computed: {\n            ...mapState([\n                'userInfo',\n            ]),\n        },\n        methods: {\n            ...mapMutations([\n                'CLEAR_CART'\n            ]),\n            async initData(){\n                //获取历史红包\n                if (this.userInfo) {\n                    this.expiredList = await getExpired(this.userInfo.user_id);\n                    this.showLoading = false;\n                    this.$nextTick(() => {\n                        new BScroll('#scroll_section', {  \n                            deceleration: 0.001,\n                            bounce: true,\n                            swipeTime: 1800,\n                            click: true,\n                        }); \n                    })\n                }\n            }\n        },\n        watch: {\n            userInfo: function (value){\n                this.initData();\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #f1f1f1;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .scroll_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n    }\n    .hongbao_list_ul{\n        padding: 1rem .5rem;\n        .hongbao_list_li{\n            background: #fff url(../../../images/expired.png) repeat-x ;\n            background-size: .5rem .2rem;\n            margin-bottom: 0.5rem;\n            border-radius: 0.25rem;\n            position: relative;\n            .list_item{\n                @include fj;\n                padding: 1rem 0.5rem .8rem;\n                .list_item_left{\n                    font-size: 0;\n                    border-right: 0.025rem dotted #ccc;\n                    flex: 1;\n                    span:nth-of-type(1){\n                        @include sc(.75rem, #ccc);\n                        font-weight: bold;\n                    }\n                    span:nth-of-type(2){\n                        @include sc(2rem, #ccc);\n                    }\n                    span:nth-of-type(3), span:nth-of-type(4){\n                        @include sc(1rem, #ccc);\n                        font-weight: bold;\n                    }\n                    p{\n                        @include sc(0.4rem, #999);\n                    }\n                }\n                .list_item_right{\n                    flex: 2;\n                    margin-left: 1.5rem;\n                    h4{\n                        @include sc(.7rem, #666);\n                        margin-left: -.7rem;\n                    }\n                    p{\n                        list-style-type: disc;\n                        margin-left: -.7rem;\n                        @include sc(.4rem, #999);   \n                    }\n                }\n            }\n            .list_item_footer{\n                background-color: #f9f9f9;\n                padding: .4rem .4rem;\n                border-bottom-left-radius: 0.25rem;\n                border-bottom-right-radius: 0.25rem;\n                p{\n                    list-style-type: disc;\n                    @include sc(.4rem, #999);\n                    margin-left: .4rem;\n                }\n            }\n            .expired{\n                fill: #ddd;\n                @include wh(3rem, 3rem);\n                top: .6rem;\n                right: .2rem;\n                position: absolute;\n            }\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/city/city.vue",
    "content": "<template>\n  \t<div class=\"city_container\">\n        <head-top :head-title=\"cityname\" go-back='true'>\n            <router-link to=\"/home\" slot=\"changecity\" class=\"change_city\">切换城市</router-link>\n        </head-top>\n        <form class=\"city_form\" v-on:submit.prevent>\n            <div>\n                <input type=\"search\" name=\"city\" placeholder=\"输入学校、商务楼、地址\" class=\"city_input input_style\" required v-model='inputVaule'>\n            </div>\n            <div>\n                <input type=\"submit\" name=\"submit\" class=\"city_submit input_style\" @click='postpois' value=\"提交\">\n            </div>\n        </form>\n        <header v-if=\"historytitle\" class=\"pois_search_history\">搜索历史</header>\n        <ul class=\"getpois_ul\">\n            <li v-for=\"(item, index) in placelist\" @click='nextpage(index, item.geohash)' :key=\"index\">\n                <h4 class=\"pois_name ellipsis\">{{item.name}}</h4>\n                <p class=\"pois_address ellipsis\">{{item.address}}</p>\n            </li>\n        </ul>\n        <footer v-if=\"historytitle&&placelist.length\" class=\"clear_all_history\" @click=\"clearAll\">清空所有</footer>\n        <div class=\"search_none_place\" v-if=\"placeNone\">很抱歉！无搜索结果</div>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {currentcity, searchplace} from 'src/service/getData'\n    import {getStore, setStore, removeStore} from 'src/config/mUtils'\n\n    export default {\n    \tdata(){\n            return{\n                inputVaule:'', // 搜索地址\n                cityid:'', // 当前城市id\n                cityname:'', // 当前城市名字\n                placelist:[], // 搜索城市列表\n                placeHistory:[], // 历史搜索记录\n                historytitle: true, // 默认显示搜索历史头部，点击搜索后隐藏\n                placeNone: false, // 搜索无结果，显示提示信息\n            }\n        },\n\n        mounted(){\n            this.cityid = this.$route.params.cityid;\n            //获取当前城市名字\n            currentcity(this.cityid).then(res => {\n                this.cityname = res.name;\n            })\n            this.initData();\n        },\n\n        components:{\n            headTop\n        },\n\n        computed:{\n\n        },\n\n        methods:{\n            initData(){\n                //获取搜索历史记录\n                if (getStore('placeHistory')) {\n                    this.placelist = JSON.parse(getStore('placeHistory'));\n                }else{\n                    this.placelist = [];\n                }\n            },\n            //发送搜索信息inputVaule\n            postpois(){\n                //输入值不为空时才发送信息\n                if (this.inputVaule) {\n                    searchplace(this.cityid, this.inputVaule).then(res => {\n                        this.historytitle = false;\n                        this.placelist = res;\n                        this.placeNone = res.length? false : true;\n                    })\n                }\n            },\n            /**\n             * 点击搜索结果进入下一页面时进行判断是否已经有一样的历史记录\n             * 如果没有则新增，如果有则不做重复储存，判断完成后进入下一页\n             */\n            nextpage(index, geohash){\n                let history = getStore('placeHistory');\n                let choosePlace = this.placelist[index];\n                if (history) {\n                    let checkrepeat = false;\n                    this.placeHistory = JSON.parse(history);\n                    this.placeHistory.forEach(item => {\n                        if (item.geohash == geohash) {\n                            checkrepeat = true;\n                        }\n                    })\n                    if (!checkrepeat) {\n                        this.placeHistory.push(choosePlace)\n                    }\n                }else {\n                    this.placeHistory.push(choosePlace)\n                }\n                setStore('placeHistory',this.placeHistory)\n                this.$router.push({path:'/msite', query:{geohash}})\n            },\n            clearAll(){\n                removeStore('placeHistory');\n                this.initData();\n            }\n        }\n    }\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n    .city_container{\n        padding-top: 2.35rem;\n    }\n    .change_city{\n        right: 0.4rem;\n        @include sc(0.6rem, #fff);\n        @include ct;\n    }\n    .city_form{\n        background-color: #fff;\n        border-top: 1px solid $bc;\n        border-bottom: 1px solid $bc;\n        padding-top: 0.4rem;\n        div{\n            width: 90%;\n            margin: 0 auto;\n            text-align: center;\n            .input_style{\n                border-radius: 0.1rem;\n                margin-bottom: 0.4rem;\n                @include wh(100%, 1.4rem);\n            }\n            .city_input{\n                border: 1px solid $bc;\n                padding: 0 0.3rem;\n                @include sc(0.65rem, #333);\n            }\n            .city_submit{\n                background-color: $blue;\n                @include sc(0.65rem, #fff);\n            }\n        }\n    }\n    .pois_search_history{\n        border-top: 1px solid $bc;\n        border-bottom: 1px solid $bc;\n        padding-left: 0.5rem;\n        @include font(0.475rem, 0.8rem);\n    }\n    .getpois_ul{\n        background-color: #fff;\n        border-top: 1px solid $bc;\n        li{\n            margin: 0 auto;\n            padding-top: 0.65rem;\n            border-bottom: 1px solid $bc;\n            .pois_name{\n                margin: 0 auto 0.35rem;\n                width: 90%;\n               @include sc(0.65rem, #333);\n            }\n            .pois_address{\n                width: 90%;\n                margin: 0 auto 0.55rem;\n                @include sc(0.45rem, #999);\n            }\n        }\n    }\n    .search_none_place{\n        margin: 0 auto;\n        @include font(0.65rem, 1.75rem);\n        color: #333;\n        background-color: #fff;\n        text-indent: 0.5rem;\n    }\n    .clear_all_history{\n        @include sc(0.7rem, #666);\n        text-align: center;\n        line-height: 2rem;\n        background-color: #fff;\n    }\n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/children/addAddress.vue",
    "content": " <template>\n    <div class=\"address_page\">\n        <head-top head-title=\"添加地址\" go-back='true'></head-top>\n        <section class=\"page_text_container\">\n            <section class=\"section_list\">\n                <span class=\"section_left\">联系人</span>\n                <section class=\"section_right\">\n                    <input type=\"text\" name=\"name\" placeholder=\"你的名字\" v-model=\"name\" class=\"input_style\">\n                    <div class=\"choose_sex\">\n                        <span class=\"choose_option\">\n                            <svg class=\"address_empty_right\" @click=\"chooseSex(1)\" :class=\"{choosed: sex == 1}\">\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                            </svg>\n                            <span>先生</span>\n                        </span>\n                        <span class=\"choose_option\">\n                            <svg class=\"address_empty_right\" @click=\"chooseSex(2)\" :class=\"{choosed: sex == 2}\">\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                            </svg>\n                            <span>女士</span>\n                        </span>\n                    </div>\n                </section>\n            </section>\n            <section class=\"section_list\">\n                <span class=\"section_left\">联系电话</span>\n                <section class=\"section_right\">\n                    <div class=\"phone_add\">\n                        <input type=\"text\" name=\"phone\" placeholder=\"你的手机号\" v-model=\"phone\" class=\"input_style\">\n                        <img src=\"../../../../images/add_phone.png\" height=\"20\" width=\"20\" @click=\"phone_bk = true\">\n                    </div>\n                    <input v-if=\"phone_bk\" type=\"text\" name=\"anntherPhoneNumber\" placeholder=\"备选电话\" v-model=\"anntherPhoneNumber\" class=\"input_style phone_bk\">\n                </section>\n            </section>\n            <section class=\"section_list\">\n                <span class=\"section_left\">送餐地址</span>\n                <section class=\"section_right\">\n                    <router-link to=\"/confirmOrder/chooseAddress/addAddress/searchAddress\" tag=\"div\" class=\"choose_address\">{{searchAddress? searchAddress.name : '小区/写字楼/学校等'}}</router-link>\n                    <input type=\"text\" name=\"address_detail\" placeholder=\"详细地址（如门牌号等）\" v-model=\"address_detail\" class=\"input_style\">\n\n                </section>\n            </section>\n            <section class=\"section_list\">\n                <span class=\"section_left\">标签</span>\n                <section class=\"section_right\">\n                    <input type=\"text\" name=\"tag\" placeholder=\"无/家/学校/公司\" v-model=\"tag\" class=\"input_style\">\n                </section>\n            </section>\n        </section>\n        <div class=\"determine\" @click=\"addAddress\">确定</div>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {getAddress, getUser, postAddAddress} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n                name: null, //姓名\n                sex: 1, //性别\n                phone: null, //电话\n                address_detail: null, //详细地址\n                tag: '', //备注\n                tag_type: 1, //备注类型\n                phone_bk: false, //是否选择备注电话\n                anntherPhoneNumber: '', //备注电话\n                showAlert: false, //弹出框\n                alertText: null, //弹出框信息\n                poi_type: 0, //地址类型\n            }\n        },\n        created(){\n\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        computed: {\n            ...mapState([\n                'searchAddress', 'geohash', 'userInfo',\n            ]),\n        },\n        methods: {\n            ...mapMutations([\n                'CONFIRM_ADDRESS'\n            ]),\n            //选择性别\n            chooseSex(sex){\n                this.sex = sex;\n            },\n            //保存地址信息\n            async addAddress(){\n                if (!(this.userInfo && this.userInfo.user_id)) {\n                    this.showAlert = true;\n                    this.alertText = '请登录'\n                }else if(!this.name){\n                    this.showAlert = true;\n                    this.alertText = '请输入姓名'\n                }else if(!this.phone){\n                    this.showAlert = true;\n                    this.alertText = '请输入电话号码'\n                }else if(!this.searchAddress){\n                    this.showAlert = true;\n                    this.alertText = '请选择地址'\n                }else if(!this.address_detail){\n                    this.showAlert = true;\n                    this.alertText = '请输入详细地址'\n                }\n                if (this.tag == '家') {\n                    this.tag_type = 2;\n                }else if(this.tag == '学校'){\n                    this.tag_type = 3;\n                }else if(this.tag == '公司'){\n                    this.tag_type = 4;\n                }\n                let res = await postAddAddress(this.userInfo.user_id, this.searchAddress.name, this.address_detail, this.geohash, this.name, this.phone, this.anntherPhoneNumber, 0, this.sex, this.tag, this.tag_type);\n                //保存成功返沪上一页，否则弹出提示框\n                if (res.message) {\n                    this.showAlert = true;\n                    this.alertText = res.message;\n                }else {\n                    this.CONFIRM_ADDRESS(1);\n                    this.$router.go(-1);\n                }\n            },\n        }\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\n    .address_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f5f5f5;\n        z-index: 204;\n        padding-top: 1.95rem;\n        p, span, input{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .page_text_container{\n        background-color: #fff;\n        padding: 0 .7rem;\n    }\n    .section_list{\n        display: flex;\n        border-bottom: 0.025rem solid #f5f5f5;\n        .section_left{\n            @include sc(.7rem, #333);\n            flex: 2;\n            line-height: 2.5rem;\n        }\n        .section_right{\n            flex: 5;\n            .input_style{\n                width: 100%;\n                height: 2.5rem;\n                @include sc(.7rem, #999);\n            }\n            .phone_bk{\n                border-top: 0.025rem solid #f5f5f5;\n            }\n            .phone_add{\n                @include fj;\n                align-items: center;\n            }\n            .choose_sex{\n                display: flex;\n                line-height: 2.5rem;\n                border-top: 0.025rem solid #f5f5f5;\n                .choose_option{\n                    @include sc(.7rem, #333);\n                    display: flex;\n                    align-items: center;\n                    margin-right: .8rem;\n                    svg{\n                        margin-right: .3rem;\n                        @include wh(.8rem, .8rem);\n                        fill: #ccc;\n                    }\n                    .choosed{\n                        fill: #4cd964;\n                    }\n                }\n            }\n            .choose_address{\n                @include sc(.7rem, #999);\n                line-height: 2.5rem;\n                border-bottom: 0.025rem solid #f5f5f5;\n            }\n        }\n    }\n    .determine{\n        background-color: #4cd964;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n        margin-top: .6rem;\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/children/children/searchAddress.vue",
    "content": " <template>\n    <div class=\"search_address_page\">\n        <section>\n            <head-top head-title=\"搜索\" go-back='true'></head-top>\n            <form class=\"search_form\">\n                <input type=\"search\" name=\"search\" placeholder=\"请输入小区/写字楼/学校等\" v-model=\"searchValue\">\n                <button @click.prevent=\"searchPlace()\">搜索</button>\n            </form>\n            <ul class=\"address_list\" v-if=\"searchData\">\n                <li v-for=\"(item, index) in searchData\" :key=\"index\" @click=\"choooedAddress(item)\">\n                    <h4>{{item.name}}</h4>\n                    <p>{{item.address}}</p>\n                </li>\n            </ul>\n            <div v-else class=\"empty_tips\">\n                <p>找不到地址？</p>\n                <p>尝试输入小区、写字楼或学校名</p>\n                <p>详细地址（如门牌号等）可稍后输入哦</p>\n            </div>\n        </section>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {searchNearby} from 'src/service/getData'\n    import {mapMutations} from 'vuex'\n\n    export default {\n      data(){\n            return{\n               \tsearchValue: null, //输入的搜索内容\n                searchData: null, //搜索的结果\n            }\n        },\n        components: {\n            headTop,\n        },\n        props:[],\n        methods: {\n            ...mapMutations([\n                'CHOOSE_SEARCH_ADDRESS'\n            ]),\n            //搜索\n            async searchPlace(){\n                if (this.searchValue) {\n                    this.searchData = await searchNearby(this.searchValue);\n                }\n            },\n            //选择搜素结果\n            choooedAddress(item){\n                this.CHOOSE_SEARCH_ADDRESS(item);\n                this.$router.go(-1);\n            },\n\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .search_address_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 204;\n        overflow-y: auto;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .search_form{\n        display: flex;\n        padding: .7rem;\n        input{\n            @include sc(.65rem, #999);\n            flex: 4;\n            background-color: #f1f1f1;\n            margin-right: .6rem;\n            height: 1.5rem;\n            border-radius: 0.15rem;\n            padding: 0 .4rem;\n        }\n        button{\n            flex: 1;\n            @include sc(.65rem, #fff);\n            background-color: $blue;\n            border-radius: 0.15rem;\n        }\n    }\n    .address_list{\n        padding: .7rem;\n        li{\n            padding: .7rem 0;\n            border-bottom: 0.025rem solid #f5f5f5;\n            line-height: 1rem;\n            h4{\n                @include sc(.75rem, #555);\n            }\n            p{\n                @include sc(.65rem, #999);\n            }\n        }\n    }\n    .empty_tips{\n        @include center;\n        width: 100%;\n        p{\n            @include sc(.5rem, #aaa);\n            line-height: .7rem;\n            text-align: center;\n\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/chooseAddress.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <head-top head-title=\"选择地址\" go-back='true'></head-top>\n        <router-link to=\"/confirmOrder/chooseAddress/addAddress\" class=\"add_icon_footer\" >\n            <img src=\"../../../images/add_address.png\" height=\"24\" width=\"24\">\n            <span>新增收货地址</span>\n        </router-link>\n        <section id=\"scroll_section\" class=\"scroll_container\">\n            <section class=\"list_cotainer\">\n                <ul class=\"deliverable_address\">\n                    <li v-for=\"(item,index) in deliverable\" @click.prevent.stop=\"chooseAddress(item, index)\">\n                        <svg class=\"choosed_address\" :class=\"{default_address: defaultIndex == index}\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                        </svg>\n                        <div>\n                            <header>\n                                <span>{{item.name}}</span>\n                                <span>{{item.sex == 1? '先生' : '女士'}}</span>\n                                <span>{{item.phone}}</span>   \n                            </header>\n                            <div class=\"address_detail ellipsis\">\n                                <span v-if=\"item.tag\" :style=\"{backgroundColor: iconColor(item.tag)}\">{{item.tag}}</span>\n                                <p>{{item.address_detail}}</p>   \n                            </div>\n                        </div>\n                    </li>\n                </ul>\n                <section id=\"out_delivery\" v-if=\"deliverdisable.length\">\n                    <header class=\"out_header\">以下地址超出配送范围</header>\n                    <ul class=\"deliverable_address\">\n                        <li v-for=\"(item,index) in deliverdisable\">\n                            <svg class=\"choosed_address\">\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                            </svg>\n                            <div>\n                                <header>\n                                    <span>{{item.name}}</span>\n                                    <span>{{item.sex == 1? '先生' : '女士'}}</span>\n                                    <span>{{item.phone}}</span>   \n                                </header>\n                                <div class=\"address_detail ellipsis\">\n                                    <span v-if=\"item.tag\" :style=\"{backgroundColor: '#ccc', color: '#fff'}\">{{item.tag}}</span>\n                                    <p>{{item.address_detail}}</p>   \n                                </div>\n                            </div>\n                        </li>\n                    </ul>\n                </section>\n            </section>\n        </section>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>  \n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {getAddress, getAddressList} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n    import BScroll from 'better-scroll'\n\n    export default {\n      data(){\n            return{\n               \taddressList: [], //地址列表\n                deliverable: [], //有效地址列表\n                deliverdisable: [], //无效地址列表\n                id: null, //ID\n                sig: null,\n                showAlert: false,\n                alertText: null,\n            }\n        },\n        created(){\n            this.id = this.$route.query.id;\n            this.sig = this.$route.query.sig;\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        props:[],\n        computed: {\n            ...mapState([\n                'userInfo', 'addressIndex', 'newAddress'\n            ]),\n            //选择地址\n            defaultIndex: function (){\n                if (this.addressIndex) {\n                    return this.addressIndex;\n                }else{\n                    return 0;\n                }\n            }\n        },\n        methods: {\n            ...mapMutations([\n                'CHOOSE_ADDRESS'\n            ]),\n            //初始化信息\n            async initData(){\n                this.addressList = [];\n                this.deliverable = [];\n                this.deliverdisable = [];\n\n                if (this.userInfo && this.userInfo.user_id) {\n                    this.addressList = await getAddressList(this.userInfo.user_id);\n                    //将当前所有地址访问有效无效两种\n                    this.addressList.forEach(item => {\n                        if (item.is_deliverable) {\n                            this.deliverable.push(item);\n                        }else{\n                            this.deliverdisable.push(item);\n                        }\n                    })\n                    // this.$nextTick(() => {\n                    //     new BScroll('#scroll_section', {  \n                    //         deceleration: 0.003,\n                    //         bounce: true,\n                    //         swipeTime: 1800,\n                    //     }); \n                    // })\n                }\n            },\n            iconColor(name){\n                switch(name){\n                    case '公司': return '#4cd964';\n                    case '学校': return '#3190e8';\n                }\n            },\n            //选择地址\n            chooseAddress(address, index){\n                this.CHOOSE_ADDRESS({address, index});\n                this.$router.go(-1);\n            },\n        },\n        watch: {\n            userInfo: function (value) {\n                if (value && value.user_id) {\n                    this.initData();\n                }\n            },\n            newAddress: function (value) {\n                this.initData();\n            },\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .scroll_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        overflow-y: auto;\n    }\n    .list_cotainer{\n        padding-bottom: 5rem;\n    }\n    .add_icon_footer{\n        position: fixed;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        height: 2.5rem;\n        background-color: #fff;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        z-index: 204;\n        span{\n            @include sc(.7rem, $blue);\n            margin-left: .3rem;\n        }\n    }\n    .deliverable_address{\n        background-color: #fff;\n        li{\n            display: flex;\n            align-items: center;\n            border-bottom: 0.025rem solid #f5f5f5;\n            padding: .7rem;\n            line-height: 1rem;\n            .choosed_address{\n                @include wh(.8rem, .8rem);\n                fill: #4cd964;\n                margin-right: .4rem;\n                opacity: 0;\n            }\n            .default_address{\n                opacity: 1;\n            }\n            header{\n                @include sc(.7rem, #333);\n                span:nth-of-type(1){\n                    font-size: .8rem;\n                    font-weight: bold;\n                }\n            }\n            .address_detail{\n                width: 100%;\n                display: flex;\n                align-items: center;\n                span{\n                    @include sc(.5rem, #fff);\n                    border-radius: .15rem;\n                    background-color: #ff5722;\n                    height: .6rem;\n                    line-height: .6rem;\n                    padding: 0 .2rem;\n                    margin-right: .3rem;\n                }\n                p{\n                    @include sc(.6rem, #777);\n                }\n            }\n        }\n    }\n    #out_delivery{\n        .out_header{\n            @include sc(.6rem, #666);\n            line-height: 1.5rem;\n            padding-left: .5rem;\n            background-color: #f5f5f5;\n        }\n        *{\n            color: #ccc;\n        }\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/invoice.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <head-top head-title=\"选择发票抬头\" go-back='true'></head-top>\n        <section class=\"choose_invoice\">\n        \t<span>不需要开发票</span>\n        \t<svg @click=\"chooseInvoice\" :class=\"{choosed: invoice}\">\n                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n            </svg>\n        </section>\n        <div class=\"determine\" @click=\"confrimInvoice\">确定</div>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapMutations} from 'vuex'\n\n    export default {\n      data(){\n            return{\n               \tinvoice: false, //是否需要发票\n            }\n        },\n        components: {\n            headTop,\n        },\n        props:[],\n        methods: {\n            ...mapMutations([\n                'CONFIRM_INVOICE'\n            ]),\n            //是否选择发票\n            chooseInvoice(){\n            \tthis.invoice = !this.invoice;\n            },\n            //保存发票信息\n            confrimInvoice(){\n            \tthis.CONFIRM_INVOICE(this.invoice);\n            \tthis.$router.go(-1);\n            },\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f5f5f5;\n        z-index: 204;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .choose_invoice{\n\t\t@include fj;\n\t\talign-items: center;\n\t\tbackground-color: #fff;\n\t\tline-height: 2.5rem;\n\t\tmargin-top: 0.5rem;\n\t\tpadding: 0 .7rem;\n\t\tspan{\n\t\t\t@include sc(.75rem, #333);\n\t\t}\n\t\tsvg{\n\t\t\t@include wh(.8rem, .8rem);\n        \tfill: #999;\n\t\t}\n\t\t.choosed{\n\t\t\tfill: #4cd964;\n\t\t}\n    }\n    .determine{\n        background-color: #4cd964;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n        margin-top: 0.5rem;\n    }\n    \n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/payment.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <head-top head-title=\"在线支付\" go-back='true'></head-top>\n        <section class=\"show_time_amount\">\n        \t<section>\n                <header class=\"time_last\">支付剩余时间</header>\n                <p class=\"time\">{{remaining}}</p>\n                <footer class=\"order_detail\" v-if=\"payDetail.resultData\">\n                    <span>详情</span>\n                    <span>¥ {{cartPrice&&cartPrice.toFixed(2) || payDetail.resultData.orderInfo.orderAmount&&(payDetail.resultData.orderInfo.orderAmount/100).toFixed(2)}}</span>\n                </footer>   \n            </section>\n        </section>\n        <div class=\"pay_way\">选择支付方式</div>\n        <section class=\"pay_way_list\">\n            <section class=\"pay_item\">\n                <div class=\"pay_icon_contaienr\">\n                    <div class=\"zhifubao\">\n                        \n                    </div>\n                    <span>支付宝</span>\n                </div>\n                <svg class=\"choose_icon\" @click=\"payWay = 1\" :class=\"{choosed_way: payWay == 1}\">\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                </svg>\n            </section>\n            <section class=\"pay_item\">\n                <div class=\"pay_icon_contaienr\">\n                    <svg>\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#weixin\"></use>\n                    </svg>\n                    <span>微信</span>\n                </div>\n                <svg class=\"choose_icon\" @click=\"payWay = 2\" :class=\"{choosed_way: payWay == 2}\">\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                </svg>\n            </section>\n        </section>\n        <p class=\"determine\" @click=\"confrimPay\">确认支付</p>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"closeTipFun\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {payRequest} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n               \tpayDetail: false, //付款信息详情\n                showAlert: false,\n                alertText: null,\n                payWay: 1, //付款方式\n                countNum: 900, //倒计时15分钟\n                gotoOrders: false, //去付款\n            }\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        created(){\n            this.initData();\n            //清除购物车中当前商铺的信息\n            if (this.shopid) {\n                this.CLEAR_CART(this.shopid);\n            }\n        },\n        mounted(){\n            this.remainingTime();\n        },\n        beforeDestroy(){\n            clearInterval(this.timer);\n        },\n        props:[],\n        computed: {\n            ...mapState([\n                'orderMessage', 'userInfo', 'shopid', 'cartPrice'\n            ]),\n            //时间转换\n            remaining: function (){\n                let minute = parseInt(this.countNum/60);\n                if (minute < 10) {\n                    minute = '0' + minute;\n                }\n                let second = parseInt(this.countNum%60);\n                if (second < 10) {\n                    second = '0' + second;\n                }\n                return '00 : ' + minute + ' : ' + second;\n            }\n        },\n        methods: {\n            ...mapMutations([\n                'CONFIRM_INVOICE', 'CLEAR_CART'\n            ]),\n            //初始化信息\n            async initData(){\n            \tthis.payDetail = await payRequest(this.orderMessage.order_id, this.userInfo.user_id);\n                if (this.payDetail.message) {\n                    this.showAlert = true;\n                    this.alertText = this.payDetail.message;\n                    return\n                }\n            },\n            //倒计时\n            remainingTime(){\n                clearInterval(this.timer);\n                this.timer = setInterval(() => {\n                    this.countNum --;\n                    if (this.countNum == 0) {\n                        clearInterval(this.timer);\n                        this.showAlert = true;\n                        this.alertText = '支付超时';\n                    }\n                }, 1000);\n            },\n            //确认付款\n            confrimPay(){\n                this.showAlert = true;\n                this.alertText = '当前环境无法支付，请打开官方APP进行付款';\n                this.gotoOrders = true;\n            },\n            //关闭提示框，跳转到订单列表页\n            closeTipFun(){\n                this.showAlert = false;\n                if (this.gotoOrders) {\n                    this.$router.push('/order');\n                }\n            },\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f5f5f5;\n        z-index: 204;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .show_time_amount{\n\t\tbackground-color: #fff;\n        padding: .7rem;\n        text-align: center;\n        .time_last{\n            @include sc(.6rem, #666);\n            margin-top: 1rem;\n        }\n        .time{\n            @include sc(1.5rem, #333);\n            margin: .3rem 0 1rem;\n        }\n        .order_detail{\n            @include fj;\n            span{\n                @include sc(.65rem, #666);\n            }\n            span:nth-of-type(2){\n                color: #ff6000;\n                font-weight: bold;\n            }\n        }\n    }\n    .pay_way{\n        background-color: #f1f1f1;\n        padding: 0 .7rem;\n        @include sc(.7rem, #666);\n        line-height: 1.8rem;\n    }\n    .pay_way_list{\n        background-color: #fff;\n        .pay_item{\n            padding: .4rem .7rem;\n            @include fj;\n            align-items: center;\n            line-height: 2.6rem;\n            border-bottom: 0.025rem solid #f5f5f5;\n            .pay_icon_contaienr{\n                @include fj;\n                align-items: center;\n                .zhifubao{\n                    @include wh(2rem, 2rem);\n                    background: url(../../../images/zhifubao.png) no-repeat;\n                    background-size: 100% 100%;\n                    margin-right: .2rem;\n                }\n                svg{\n                    @include wh(2rem, 2rem);\n                    margin-right: .3rem;\n                }\n                span{\n                    @include sc(.7rem, #666);\n                }\n            }\n            .choose_icon{\n                @include wh(1rem, 1rem);\n                fill: #ccc;\n            }\n            .choosed_way{\n                fill: #4cd964;\n            }\n        }\n    }\n    .determine{\n        background-color: #4cd964;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n        margin-top: 0.5rem;\n        font-weight: bold;\n    }\n    \n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/remark.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <section v-if=\"!showLoading\">\n            <head-top head-title=\"订单备注\" go-back='true'></head-top>\n            <section class=\"quick_remark\" v-if=\"remarkList.remarks.length\">\n                <header class=\"header_style\">快速备注</header>\n                <ul class=\"remark_arr_list_ul\">\n                    <li class=\"remark_arr_list_li\" v-for=\"(item,index) in remarkList.remarks\" :key=\"index\">\n                        <span :class=\"{first: remarkIndex == 0, last: remarkIndex == item.length - 1, choosed: remarkText[index]&&(remarkText[index][0] == remarkIndex)}\" class=\"remark_item_li\" v-for=\"(remarkTtem, remarkIndex) in item\" :key=\"remarkIndex\" @click=\"chooseRemark(index, remarkIndex, remarkTtem)\">{{remarkTtem}}</span>\n                    </li>\n                </ul>\n            </section>\n            <section class=\"input_remark quick_remark\">\n                <header class=\"header_style\">其他备注</header>\n                <textarea class=\"input_text\" v-model=\"inputText\" placeholder=\"请输入备注内容(可不填)\"></textarea>\n            </section>\n            <div class=\"determine\" @click=\"confirmRemark\">确定</div>\n        </section>\n        <loading v-if=\"showLoading\"></loading>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {getRemark} from 'src/service/getData'\n    import loading from 'src/components/common/loading'\n    import {mapMutations} from 'vuex'\n\n    export default {\n      data(){\n            return{\n                id: null,\n                sig: null,\n                remarkList: null,\n                showLoading: true,\n                remarkText: {},\n                inputText: null,\n            }\n        },\n        created(){\n            this.id = this.$route.query.id;\n            this.sig = this.$route.query.sig;\n        },\n        mounted(){\n            this.initData();\n        },\n        mixins: [],\n        components: {\n            headTop,\n            loading,\n        },\n        props:[],\n        methods: {\n            ...mapMutations([\n                'CONFIRM_REMARK'\n            ]),\n            //初始化信息\n            async initData(){\n                this.remarkList = await getRemark(this.id, this.sig);\n                this.showLoading = false;\n            },\n            //选择备注\n            chooseRemark(index, remarkIndex, text){\n                this.remarkText[index] = [remarkIndex, text];\n                this.remarkText = Object.assign({}, this.remarkText);\n            },\n            //确认选择\n            confirmRemark(){\n                this.CONFIRM_REMARK({remarkText: this.remarkText, inputText: this.inputText});\n                this.$router.go(-1);\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f5f5f5;\n        z-index: 204;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .header_style{\n        @include sc(.65rem, #333);\n        line-height: 2rem;\n    }\n    .quick_remark{\n        background-color: #fff;\n        margin-top: .4rem;\n        padding: 0 .6rem 1rem;\n        ul{\n            display: flex;\n            flex-wrap: wrap;\n            li{\n                margin-right: .6rem;\n                margin-bottom: .6rem;\n                span{\n                    @include sc(.6rem, #333);\n                    padding: .3rem .6rem;\n                    border: 0.025rem solid #3190e8;\n                    border-left: 0;\n                }\n                .first{\n                    border-left: 0.025rem solid #3190e8;\n                    border-top-left-radius: .2rem;\n                    border-bottom-left-radius: .2rem;\n                }\n                .last{\n                    border-top-right-radius: .2rem;\n                    border-bottom-right-radius: .2rem;\n                }\n                .choosed{\n                    color: #fff;\n                    background-color: #3190e8;\n                }\n            }\n        }\n    }\n    .input_remark{\n        background-color: #fff;\n        .input_text{\n            width: 100%;\n            background-color: #f9f9f9;\n            border: 0.025rem solid #eee;\n            resize: none;\n            min-height: 4.5rem;\n            border-radius: .2rem;\n            @include sc(.6rem, #666);\n            padding: .5rem;\n        }\n    }\n    .determine{\n        background-color: #4cd964;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n    }\n    \n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/children/userValidation.vue",
    "content": " <template>\n    <div class=\"validation_page\">\n        <head-top head-title=\"用户手机验证\" go-back='true'></head-top>\n        <section class=\"validataion_container\">\n            <div class=\"voice_tip\" v-if=\"showVoiceTip\">\n                <p>电话拨打中...</p>\n                <p>请留意来自 <span>10105757</span> 或者 <span>021-315754XX</span> 的电话</p>\n            </div>\n            <header class=\"validataion_header\">\n                <span>收不到短信？使用</span>\n                <span @click=\"sendVoice\">语音验证码</span>\n            </header>\n            <form class=\"input_form\">\n                <input type=\"text\" name=\"validate\" v-model=\"validate\" placeholder=\"验证码\" maxlength=\"6\">\n                <span class=\"disable\" v-if=\"countDown\">{{countDown}} S</span>\n                <span class=\"repost\" v-else @click=\"recall\">重新发送</span>\n            </form>\n        </section>\n        <div class=\"determine\" @click=\"confrimOrder\">确定</div>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {rePostVerify, validateOrders} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n               \tvalidate: null, //验证码\n                countDown: 60, //倒计时\n                sig: null, //sig值\n                reCallVerify: null, //重发验证信息\n                showAlert: false, \n                alertText: null,\n                showVoiceTip: false, //显示语音验证\n                type: 'sms',\n            }\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        created(){\n            this.sig = this.$route.query.sig;\n        },\n        mounted(){\n            this.count();\n            this.getData();\n        },\n        beforeDestroy(){\n            clearInterval(this.timer);\n        },\n        props:[],\n        computed: {\n            ...mapState([\n                'needValidation', 'cart_id', 'sig', 'orderParam'\n            ]),\n        },\n        methods: {\n            ...mapMutations([\n                'CHANGE_ORDER_PARAM', 'ORDER_SUCCESS'\n            ]),\n            //到计时\n            count(){\n                this.countDown = 60;\n                clearInterval(this.timer);\n                this.timer = setInterval(() => {\n                    this.countDown -- ;\n                    if (this.countDown == 0) {\n                        clearInterval(this.timer);\n                    }\n                }, 1000);\n            },\n            //重新发送\n            recall(){\n                this.count();\n                this.type = 'sms';\n                this.getData();\n            },\n            //发送语音验证\n            sendVoice(){\n                this.showVoiceTip = true;\n                this.type = 'voice';\n                this.getData();\n            },\n            //获取验证信息\n            async getData(){\n                this.reCallVerify = await rePostVerify(this.cart_id, this.sig, this.type);\n                if (this.reCallVerify.message) {\n                    this.showAlert = true;\n                    this.alertText = this.reCallVerify.message;\n                }\n            },\n            //确认订单\n            async confrimOrder(){\n                this.CHANGE_ORDER_PARAM({validation_code: this.validate, validation_token: this.reCallVerify.validate_token})\n                let orderRes = await validateOrders(this.orderParam);\n                //如果信息错误则提示，否则进入付款页面\n                if (orderRes.message) {\n                    this.showAlert = true;\n                    this.alertText = orderRes.message;\n                    return\n                }\n                this.ORDER_SUCCESS(orderRes);\n                this.$router.push('/confirmOrder/payment');\n            },\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .validation_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f5f5f5;\n        z-index: 204;\n        padding-top: 1.95rem;\n        p, span, input{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .determine{\n        background-color: #4cd964;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n        margin-top: 0.5rem;\n    }\n    .validataion_container{\n        background-color: #fff;\n        padding: .7rem;\n        .validataion_header{\n            span{\n                @include sc(.7rem, #333);\n            }\n            span:nth-of-type(2){\n                color: #ff6000;\n            }\n        }\n    }\n    .input_form{\n        display: flex;\n        padding: .7rem 0;\n        *{\n            @include sc(.65rem, #666);\n            border-radius: 0.15rem;\n        }\n        input{\n            flex: 3;\n            height: 1.5rem;\n            background-color: #eee;\n            margin-right: .8rem;\n            padding: 0 .6rem;\n        }\n        span{\n            flex: 1;\n            height: 1.5rem;\n            display: inline-block;\n            text-align: center;\n            line-height: 1.5rem;\n            font-size: .6rem;\n        }\n        .repost{\n            background-color: $blue;\n            color: #fff;\n        }\n        .disable{\n            background-color: #eee;\n            color: #999;\n        }\n    }\n    .voice_tip{\n        margin-bottom: .4rem;\n        p{\n            @include sc(.65rem, #333);\n            line-height: 1rem;\n            span{\n                color: #ff6000;\n            }\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/confirmOrder/confirmOrder.vue",
    "content": "<template>\n    <div class=\"confirmOrderContainer\">\n        <section v-if=\"!showLoading\">\n            <head-top head-title=\"确认订单\" goBack=\"true\" signin-up='confirmOrder'></head-top>\n            <router-link :to='{path: \"/confirmOrder/chooseAddress\", query: {id: checkoutData.cart.id, sig: checkoutData.sig}}' class=\"address_container\">\n                <div class=\"address_empty_left\">\n                    <svg class=\"location_icon\">\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#location\"></use>\n                    </svg>\n                    <div class=\"add_address\" v-if=\"!choosedAddress\">请添加一个收货地址</div>\n                    <div v-else class=\"address_detail_container\">\n                        <header>\n                            <span>{{choosedAddress.name}}</span>\n                            <span>{{choosedAddress.sex == 1? '先生':'女士'}}</span>\n                            <span>{{choosedAddress.phone}}</span>\n                        </header>\n                        <div class=\"address_detail\">\n                            <span v-if=\"choosedAddress.tag\" :style=\"{backgroundColor: iconColor(choosedAddress.tag)}\">{{choosedAddress.tag}}</span>\n                            <p>{{choosedAddress.address_detail}}</p>\n                        </div>\n                    </div>\n                </div>\n                <svg class=\"address_empty_right\">\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                </svg>\n            </router-link>\n            <section class=\"delivery_model container_style\">\n                <p class=\"deliver_text\">送达时间</p>\n                <section class=\"deliver_time\">\n                    <p>尽快送达 | 预计 {{checkoutData.delivery_reach_time}}</p>\n                    <p v-if=\"checkoutData.cart.is_deliver_by_fengniao\">蜂鸟专送</p>\n                </section>\n            </section>\n            <section class=\"pay_way container_style\">\n                <header class=\"header_style\">\n                    <span>支付方式</span>\n                    <div class=\"more_type\" @click=\"showPayWayFun\">\n                        <span>在线支付</span>\n                        <svg class=\"address_empty_right\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                        </svg>\n                    </div>\n                </header>\n                <section class=\"hongbo\">\n                    <span>红包</span>\n                    <span>暂时只在饿了么 APP 中支持</span>\n                </section>\n            </section>\n            <section class=\"food_list\">\n                <header v-if=\"checkoutData.cart.restaurant_info\">\n                    <img :src=\"imgBaseUrl + checkoutData.cart.restaurant_info.image_path\">\n                    <span>{{checkoutData.cart.restaurant_info.name}}</span>\n                </header>\n                <ul class=\"food_list_ul\" v-if=\"checkoutData.cart.groups\">\n                    <li v-for=\"item in checkoutData.cart.groups[0]\" :key=\"item.id\" class=\"food_item_style\">\n                        <p class=\"food_name ellipsis\">{{item.name}}</p>\n                        <div class=\"num_price\">\n                            <span>x {{item.quantity}}</span>\n                            <span>¥{{item.price}}</span>\n                        </div>\n                    </li>\n                </ul>\n                <div class=\"food_item_style\" v-if=\"checkoutData.cart.extra\">\n                    <p class=\"food_name ellipsis\">{{checkoutData.cart.extra[0].name}}</p>\n                    <div class=\"num_price\">\n                        <span></span>\n                        <span>¥ {{checkoutData.cart.extra[0].price}}</span>\n                    </div>\n                </div>\n                <div class=\"food_item_style\">\n                    <p class=\"food_name ellipsis\">配送费</p>\n                    <div class=\"num_price\">\n                        <span></span>\n                        <span>¥ {{checkoutData.cart.deliver_amount || 0}}</span>\n                    </div>\n                </div>\n                <div class=\"food_item_style total_price\">\n                    <p class=\"food_name ellipsis\">订单 ¥{{checkoutData.cart.total}}</p>\n                    <div class=\"num_price\">\n                        <span>待支付 ¥{{checkoutData.cart.total}}</span>\n                    </div>\n                </div>\n            </section>\n            <section class=\"pay_way container_style\">\n                <router-link :to='{path: \"/confirmOrder/remark\", query: {id: checkoutData.cart.id, sig: checkoutData.sig}}' class=\"header_style\">\n                    <span>订单备注</span>\n                    <div class=\"more_type\">\n                        <span class=\"ellipsis\">{{remarkText||inputText? remarklist: '口味、偏好等'}}</span>\n                        <svg class=\"address_empty_right\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                        </svg>\n                    </div>\n                </router-link>\n                <router-link :to=\"checkoutData.invoice.is_available? '/confirmOrder/invoice': ''\" class=\"hongbo\" :class=\"{support_is_available: checkoutData.invoice.is_available}\">\n                    <span>发票抬头</span>\n                    <span>\n                        {{checkoutData.invoice.status_text}}\n                        <svg class=\"address_empty_right\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                        </svg>\n                    </span>\n                </router-link>\n            </section>\n            <section class=\"confrim_order\">\n                <p>待支付 ¥{{checkoutData.cart.total}}</p>\n                <p @click=\"confrimOrder\">确认下单</p>\n            </section>\n            <transition name=\"fade\">\n                <div class=\"cover\" v-if=\"showPayWay\" @click=\"showPayWayFun\"></div>\n            </transition>\n            <transition name=\"slid_up\">\n                <div class=\"choose_type_Container\" v-if=\"showPayWay\">\n                    <header>支付方式</header>\n                    <ul>\n                        <li v-for=\"item in checkoutData.payments\" :key=\"item.id\" :class=\"{choose: payWayId == item.id}\">\n                            <span>{{item.name}}<span v-if=\"!item.is_online_payment\">{{item.description}}</span></span>\n                            <svg class=\"address_empty_right\" @click=\"choosePayWay(item.is_online_payment, item.id)\">\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#select\"></use>\n                            </svg>\n                        </li>\n                    </ul>\n                </div>\n            </transition>\n        </section>\n        <loading v-if=\"showLoading\"></loading>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import {mapState, mapMutations} from 'vuex'\n    import headTop from 'src/components/header/head'\n    import alertTip from 'src/components/common/alertTip'\n    import loading from 'src/components/common/loading'\n    import {checkout, getAddress, placeOrders, getAddressList} from 'src/service/getData'\n    import {imgBaseUrl} from 'src/config/env'\n\n    export default {\n        data(){\n            return {\n                geohash: '', //geohash位置信息\n                shopId: null, //商店id值\n                showLoading: true, //显示加载动画\n                checkoutData: null,//数据返回值\n                shopCart: null,//购物车数据\n                imgBaseUrl, //图片域名\n                showPayWay: false,//显示付款方式\n                payWayId: 1, //付款方式\n                showAlert: false, //弹出框\n                alertText: null, //弹出框内容\n            }\n        },\n        created(){\n            //获取上个页面传递过来的geohash值\n            this.geohash = this.$route.query.geohash;\n            //获取上个页面传递过来的shopid值\n            this.shopId = this.$route.query.shopId;\n            this.INIT_BUYCART();\n            this.SAVE_SHOPID(this.shopId);\n            //获取当前商铺购物车信息\n            this.shopCart = this.cartList[this.shopId];\n        },\n        mounted(){\n            if (this.geohash) {\n                this.initData();\n                this.SAVE_GEOHASH(this.geohash);\n            }\n            if (!(this.userInfo && this.userInfo.user_id)) {\n                // this.showAlert = true;\n                // this.alertText = '您还没有登录';\n            }\n        },\n        components: {\n            headTop,\n            alertTip,\n            loading,\n        },\n        computed: {\n            ...mapState([\n                'cartList', 'remarkText', 'inputText', 'invoice', 'choosedAddress', 'userInfo'\n            ]),\n            //备注页返回的信息进行处理\n            remarklist: function (){\n                let str = new String;\n                if (this.remarkText) {\n                    Object.values(this.remarkText).forEach(item => {\n                        str += item[1] + '，';\n                    })\n                }\n                //是否有自定义备注，分开处理\n                if (this.inputText) {\n                    return str + this.inputText;\n                }else{\n                    return str.substr(0, str.lastIndexOf('，')) ;\n                }\n            },\n        },\n        methods: {\n            ...mapMutations([\n                'INIT_BUYCART', 'SAVE_GEOHASH', 'CHOOSE_ADDRESS', 'NEED_VALIDATION', 'SAVE_CART_ID_SIG', 'SAVE_ORDER_PARAM', 'ORDER_SUCCESS', 'SAVE_SHOPID'\n            ]),\n            //初始化数据\n            async initData(){\n                let newArr = new Array;\n                Object.values(this.shopCart).forEach(categoryItem => {\n                    Object.values(categoryItem).forEach(itemValue=> {\n                        Object.values(itemValue).forEach(item => {\n                            newArr.push({\n                                attrs: [],\n                                extra: {},\n                                id: item.id,\n                                name: item.name,\n                                packing_fee: item.packing_fee,\n                                price: item.price,\n                                quantity: item.num,\n                                sku_id: item.sku_id,\n                                specs: [item.specs],\n                                stock: item.stock,\n                            })\n                        })\n                    })\n                })\n                //检验订单是否满足条件\n                this.checkoutData = await checkout(this.geohash, [newArr], this.shopId);\n                this.SAVE_CART_ID_SIG({cart_id: this.checkoutData.cart.id, sig:  this.checkoutData.sig})\n                this.initAddress();\n                this.showLoading = false;\n            },\n            //获取地址信息，第一个地址为默认选择地址\n            async initAddress(){\n                if (this.userInfo && this.userInfo.user_id) {\n                    const addressRes = await getAddressList(this.userInfo.user_id);\n                    if (addressRes instanceof Array && addressRes.length) {\n                        this.CHOOSE_ADDRESS({address: addressRes[0], index: 0});\n                    }\n                }\n            },\n            //显示付款方式\n            showPayWayFun(){\n                this.showPayWay = !this.showPayWay;\n            },\n            //选择付款方式\n            choosePayWay(is_online_payment, id){\n                if (is_online_payment) {\n                    this.showPayWay = !this.showPayWay;\n                    this.payWayId = id;\n                }\n            },\n            //地址备注颜色\n            iconColor(name){\n                switch(name){\n                    case '公司': return '#4cd964';\n                    case '学校': return '#3190e8';\n                }\n            },\n            //确认订单\n            async confrimOrder(){\n                //用户未登录时弹出提示框\n                if (!(this.userInfo && this.userInfo.user_id)) {\n                    this.showAlert = true;\n                    this.alertText = '请登录';\n                    return\n                    //未选择地址则提示\n                }else if(!this.choosedAddress){\n                    this.showAlert = true;\n                    this.alertText = '请添加一个收货地址';\n                    return\n                }\n                //保存订单\n                this.SAVE_ORDER_PARAM({\n                    user_id: this.userInfo.user_id,\n                    cart_id: this.checkoutData.cart.id,\n                    address_id: this.choosedAddress.id,\n                    description: this.remarklist,\n                    entities: this.checkoutData.cart.groups,\n                    geohash: this.geohash,\n                    sig: this.checkoutData.sig,\n                });\n                //发送订单信息\n                let orderRes = await placeOrders(this.userInfo.user_id, this.checkoutData.cart.id, this.choosedAddress.id, this.remarklist, this.checkoutData.cart.groups, this.geohash, this.checkoutData.sig);\n                //第一次下单的手机号需要进行验证，否则直接下单成功\n                if (orderRes.need_validation) {\n                    this.NEED_VALIDATION(orderRes);\n                    this.$router.push('/confirmOrder/userValidation');\n                }else{\n                    this.ORDER_SUCCESS(orderRes);\n                    this.$router.push('/confirmOrder/payment');\n                }\n            },\n        },\n        watch: {\n            userInfo: function (value) {\n                if (value && value.user_id) {\n                    this.initAddress();\n                }\n            },\n        }\n    }\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\n    .confirmOrderContainer{\n        padding-top: 1.95rem;\n        padding-bottom: 3rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .container_style{\n        background-color: #fff;\n        margin-top: .4rem;\n        padding: 0 .7rem;\n    }\n    .address_container{\n        min-height: 3.5rem;\n        @include fj;\n        align-items: center;\n        padding: 0 0.6rem;\n        background: url(../../images/address_bottom.png) left bottom repeat-x;\n        background-color: #fff;\n        background-size: auto .12rem;\n        .address_empty_left{\n            display: flex;\n            align-items: center;\n            .location_icon{\n                @include wh(.8rem, .8rem);\n                fill: $blue;\n                margin-right: .2rem;\n            }\n            .add_address{\n                @include sc(.7rem, #333);\n            }\n            .address_detail_container{\n                margin-left: .2rem;\n                header{\n                    @include sc(.65rem, #333);\n                    span:nth-of-type(1){\n                        font-size: .8rem;\n                        font-weight: bold;\n                    }\n                }\n                .address_detail{\n                    width: 100%;\n                    display: flex;\n                    align-items: center;\n                    span{\n                        @include sc(.5rem, #fff);\n                        border-radius: .15rem;\n                        background-color: #ff5722;\n                        height: .6rem;\n                        line-height: .6rem;\n                        padding: 0 .2rem;\n                        margin-right: .3rem;\n                    }\n                    p{\n                        @include sc(.55rem, #777);\n                    }\n                }\n            }\n        }\n    }\n    .address_empty_right{\n        @include wh(.6rem, .6rem);\n        fill: #999;\n    }\n    .delivery_model{\n        border-left: .2rem solid $blue;\n        min-height: 4rem;\n        @include fj;\n        align-items: center;\n        .deliver_text{\n            @include sc(.8rem, #333);\n            font-weight: bold;\n            padding-left: .3rem;\n        }\n        .deliver_time{\n            display: flex;\n            flex-direction: column;\n            align-items: flex-end;\n            p:nth-of-type(1){\n                @include sc(.7rem, $blue);\n            }\n            p:nth-of-type(2){\n                @include sc(.5rem, #fff);\n                background-color: $blue;\n                width: 2.4rem;\n                margin-top: .5rem;\n                text-align: center;\n                border-radius: 0.12rem;\n                padding: .1rem;\n            }\n        }\n    }\n    .pay_way{\n        .header_style{\n            @include fj;\n            line-height: 2rem;\n            span:nth-of-type(1){\n                @include sc(.7rem, #666);\n            }\n            .more_type{\n                span:nth-of-type(1){\n                    @include sc(.6rem, #aaa);\n                    width: 10rem;\n                    display: inline-block;\n                    text-align: right;\n                    vertical-align: middle;\n                }\n                svg{\n                    @include wh(.5rem, .5rem);\n                    fill: #ccc;\n                }\n            }\n        }\n        .hongbo{\n            @include fj;\n            border-top: 0.025rem solid #f5f5f5;\n            span{\n                @include sc(.6rem, #aaa);\n                line-height: 2rem;\n                svg{\n                    @include wh(.5rem, .5rem);\n                    vertical-align: middle;\n                    fill: #ccc;\n                }\n            }\n            span:nth-of-type(2){\n                color: #aaa;\n            }\n        }\n        .support_is_available{\n            span{\n                color: #666;\n            }\n        }\n    }\n    .food_list{\n        background-color: #fff;\n        margin-top: .4rem;\n        header{\n            padding: .7rem;\n            border-bottom: 0.025rem solid #f5f5f5;\n            img{\n                @include wh(1.2rem, 1.2rem);\n                vertical-align: middle;\n            }\n            span{\n                @include sc(.8rem, #333);\n            }\n        }\n        .food_list_ul{\n            padding-top: .5rem;\n        }\n        .food_item_style{\n            @include fj;\n            line-height: 1.8rem;\n            padding: 0 .7rem;\n            span,p{\n                @include sc(.65rem, #666);\n            }\n            .food_name{\n                width: 11rem;\n            }\n            .num_price{\n                flex: 1;\n                @include fj;\n                align-items: center;\n                span:nth-of-type(1){\n                    color: #f60;\n                }\n            }\n        }\n        .total_price{\n            border-top: 0.025rem solid #f5f5f5;\n        }\n    }\n    .confrim_order{\n        display: flex;\n        position: fixed;\n        bottom: 0;\n        width: 100%;\n        height: 2rem;\n        p{\n            line-height: 2rem;\n            @include sc(.75rem, #fff);\n        }\n        p:nth-of-type(1){\n            background-color: #3c3c3c;\n            flex: 5;\n            padding-left: .7rem;\n        }\n        p:nth-of-type(2){\n            flex: 2;\n            background-color: #56d176;\n            text-align: center;\n        }\n    }\n    .cover{\n        position: fixed;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        background-color: rgba(0,0,0,.3);\n        z-index: 203;\n    }\n    .choose_type_Container{\n        min-height: 10rem;\n        background-color: #fff;\n        position: fixed;\n        bottom: 0;\n        width: 100%;\n        z-index: 204;\n        header{\n            background-color: #fafafa;\n            @include sc(.7rem, #333);\n            text-align: center;\n            line-height: 2rem;\n        }\n        ul{\n            li{\n                @include fj;\n                padding: 0 .7rem;\n                line-height: 2.5rem;\n                align-items: center;\n                span{\n                    @include sc(.7rem, #ccc);\n                }\n                svg{\n                    @include wh(.8rem, .8rem);\n                    fill: #eee;\n                }\n            }\n            .choose{\n                span{\n                    color: #333;\n                }\n                svg{\n                    fill: #4cd964;\n                }\n            }\n        }\n    }\n    .fade-enter-active, .fade-leave-active {\n        transition: opacity .3s;\n    }\n    .fade-enter, .fade-leave-active {\n        opacity: 0;\n    }\n    .slid_up-enter-active, .slid_up-leave-active {\n        transition: all .3s;\n    }\n    .slid_up-enter, .slid_up-leave-active {\n        transform: translate3d(0,10rem,0)\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n</style>\n"
  },
  {
    "path": "src/page/download/download.vue",
    "content": " <template>\n  <div class=\"download_page\">\n        <head-top head-title=\"下载\" go-back='true'></head-top>\n        <section class=\"dowload_container\">\n            <img src='../../images/elmlogo.jpeg' class=\"logo_img\">\n            <p>下载饿了么APP</p>\n            <div class=\"determine\" @click=\"download\">下载</div>\n        </section>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n                system: null,\n                showAlert: false,\n                alertText: null,\n            }\n        },\n        created(){\n            //判断系统\n            let u = navigator.userAgent;\n            let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g\n            let isIOS = !!u.match(/\\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端\n            if (isAndroid) {\n                this.system = 'Android';\n            } else if (isIOS) {\n                this.system = 'IOS';\n            } else {\n                this.system = 'pc';\n            }\n        },\n        mixins: [],\n        components: {\n            headTop,\n            alertTip,\n        },\n        props:[],\n        methods: {\n            download(){\n                //如果是ios用户则提示，否则直接下载\n                if( this.system == 'IOS'){\n                    this.showAlert = true;\n                    this.alertText = 'IOS用户请前往AppStore下载'\n                }else{\n                    try {\n                        let elemIF = document.createElement(\"iframe\");\n                        elemIF.src = 'http://cangdu.org/files/elm.apk';\n                        elemIF.style.display = \"none\";\n                        document.body.appendChild(elemIF);\n                    } catch (e) {\n                        alert('下载失败')\n                    }\n                }\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .download_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .dowload_container{\n        text-align: center;\n        .logo_img{\n           border-radius: 1rem;\n            margin-top: 1rem;\n        }\n        p{\n            @include sc(.8rem, #666);\n            margin-bottom: 1rem;\n        }\n        .determine{\n            background-color: #4cd964;\n            @include sc(.7rem, #fff);\n            text-align: center;\n            margin: 0 .7rem;\n            line-height: 1.8rem;\n            border-radius: 0.2rem;\n            margin-top: 0.5rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/find/find.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <head-top head-title=\"发现\" go-back='true'></head-top>\n        <section>发现</section>\n        <foot-guide></foot-guide>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import footGuide from 'src/components/footer/footGuide'\n\n    export default {\n      data(){\n            return{\n    \n            }\n        },\n        created(){\n\n        },\n        mixins: [getImgPath],\n        components: {\n            headTop,\n            footGuide,\n        },\n        props:[],\n        methods: {\n            \n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    \n</style>\n"
  },
  {
    "path": "src/page/food/food.vue",
    "content": "<template>\n    <div class=\"food_container\">\n    \t<head-top :head-title=\"headTitle\" goBack=\"true\"></head-top>\n    \t<section class=\"sort_container\">\n\t\t\t<!-- 分类 -->\n    \t\t<div class=\"sort_item\" :class=\"{choose_type:sortBy == 'food'}\" >\n    \t\t\t<div class=\"sort_item_container\" @click=\"chooseType('food')\">\n    \t\t\t\t<div class=\"sort_item_border\">\n    \t\t\t\t\t<span :class=\"{category_title: sortBy == 'food'}\">{{foodTitle}}</span>\n\t\t    \t\t\t<svg width=\"10\" height=\"10\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"sort_icon\">\n\t\t\t    \t\t\t<polygon points=\"0,3 10,3 5,8\"/>\n\t\t\t    \t\t</svg>\n    \t\t\t\t</div>\n    \t\t\t</div>\n\t    \t\t<transition name=\"showlist\" v-show=\"category\">\n\t    \t\t\t<section v-show=\"sortBy == 'food'\" class=\"category_container sort_detail_type\">\n\t    \t\t\t\t<section class=\"category_left\">\n\t    \t\t\t\t\t<ul>\n\t    \t\t\t\t\t\t<li v-for=\"(item, index) in category\" :key=\"index\" class=\"category_left_li\" :class=\"{category_active:restaurant_category_id == item.id}\" @click=\"selectCategoryName(item.id, index)\">\n\t\t\t\t\t\t\t\t\t<section>\n\t\t\t\t\t\t\t\t\t\t<img :src=\"getImgPath(item.image_url)\" v-if=\"index\" class=\"category_icon\">\n\t\t\t\t\t\t\t\t\t\t<span>{{item.name}}</span>\n\t\t\t\t\t\t\t\t\t</section>\n\t\t\t\t\t\t\t\t\t<section>\n\t    \t\t\t\t\t\t\t\t<span class=\"category_count\">{{item.count}}</span>\n\t    \t\t\t\t\t\t\t\t<svg v-if=\"index\" width=\"8\" height=\"8\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"category_arrow\" >\n\t\t\t\t\t\t\t    \t\t\t<path d=\"M0 0 L6 4 L0 8\"  stroke=\"#bbb\" stroke-width=\"1\" fill=\"none\"/>\n\t\t\t\t\t\t\t    \t\t</svg>\n\t\t\t\t\t\t\t\t\t</section>\n\t    \t\t\t\t\t\t</li>\n\t    \t\t\t\t\t</ul>\n\t    \t\t\t\t</section>\n\t    \t\t\t\t<section class=\"category_right\">\n\t    \t\t\t\t\t<ul>\n\t    \t\t\t\t\t\t<li v-for=\"(item, index) in categoryDetail\" v-if=\"index\" :key=\"index\" class=\"category_right_li\" @click=\"getCategoryIds(item.id, item.name)\" :class=\"{category_right_choosed: restaurant_category_ids == item.id || (!restaurant_category_ids)&&index == 0}\">\n\t    \t\t\t\t\t\t\t<span>{{item.name}}</span>\n\t    \t\t\t\t\t\t\t<span>{{item.count}}</span>\n\t    \t\t\t\t\t\t</li>\n\t    \t\t\t\t\t</ul>\n\t    \t\t\t\t</section>\n\t    \t\t\t</section>\n\t    \t\t</transition>\n    \t\t</div>\n\t\t\t<!-- 排序 -->\n    \t\t<div class=\"sort_item\" :class=\"{choose_type:sortBy == 'sort'}\">\n    \t\t\t<div class=\"sort_item_container\" @click=\"chooseType('sort')\">\n    \t\t\t\t<div class=\"sort_item_border\">\n\t\t    \t\t\t<span :class=\"{category_title: sortBy == 'sort'}\">排序</span>\n\t\t    \t\t\t<svg width=\"10\" height=\"10\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"sort_icon\">\n\t\t\t    \t\t\t<polygon points=\"0,3 10,3 5,8\"/>\n\t\t\t    \t\t</svg>\n    \t\t\t\t</div>\n    \t\t\t</div>\n\t    \t\t<transition name=\"showlist\">\n\t    \t\t\t<section v-show=\"sortBy == 'sort'\" class=\"sort_detail_type\">\n\t    \t\t\t\t<ul class=\"sort_list_container\" @click=\"sortList($event)\">\n\t    \t\t\t\t\t<li class=\"sort_list_li\">\n\t    \t\t\t\t\t\t<svg>\n\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#default\"></use>\n\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t<p data=\"0\" :class=\"{sort_select: sortByType == 0}\">\n\t    \t\t\t\t\t\t\t<span>智能排序</span>\n\t    \t\t\t\t\t\t\t<svg v-if=\"sortByType == 0\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t</p>\n\t    \t\t\t\t\t</li>\n\t    \t\t\t\t\t<li class=\"sort_list_li\">\n\t    \t\t\t\t\t\t<svg>\n\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#distance\"></use>\n\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t<p data=\"5\" :class=\"{sort_select: sortByType == 5}\">\n\t    \t\t\t\t\t\t\t<span>距离最近</span>\n\t    \t\t\t\t\t\t\t<svg v-if=\"sortByType == 5\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t</p>\n\t    \t\t\t\t\t</li>\n\t    \t\t\t\t\t<li class=\"sort_list_li\">\n\t    \t\t\t\t\t\t<svg>\n\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#hot\"></use>\n\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t<p data=\"6\" :class=\"{sort_select: sortByType == 6}\">\n\t    \t\t\t\t\t\t\t<span>销量最高</span>\n\t    \t\t\t\t\t\t\t<svg v-if=\"sortByType == 6\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t</p>\n\t    \t\t\t\t\t</li>\n\t    \t\t\t\t\t<li class=\"sort_list_li\">\n\t    \t\t\t\t\t\t<svg>\n\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#price\"></use>\n\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t<p data=\"1\" :class=\"{sort_select: sortByType == 1}\">\n\t    \t\t\t\t\t\t\t<span>起送价最低</span>\n\t    \t\t\t\t\t\t\t<svg v-if=\"sortByType == 1\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t</p>\n\t    \t\t\t\t\t</li>\n\t    \t\t\t\t\t<li class=\"sort_list_li\">\n\t    \t\t\t\t\t\t<svg>\n\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#speed\"></use>\n\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t<p data=\"2\" :class=\"{sort_select: sortByType == 2}\">\n\t    \t\t\t\t\t\t\t<span>配送速度最快</span>\n\t    \t\t\t\t\t\t\t<svg v-if=\"sortByType == 2\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t</p>\n\t    \t\t\t\t\t</li>\n\t    \t\t\t\t\t<li class=\"sort_list_li\">\n\t    \t\t\t\t\t\t<svg>\n\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#rating\"></use>\n\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t<p data=\"3\" :class=\"{sort_select: sortByType == 3}\">\n\t    \t\t\t\t\t\t\t<span>评分最高</span>\n\t    \t\t\t\t\t\t\t<svg v-if=\"sortByType == 3\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t</p>\n\t    \t\t\t\t\t</li>\n\t    \t\t\t\t</ul>\n\t    \t\t\t</section>\n\t    \t\t</transition>\n    \t\t</div>\n\t\t\t<!-- 筛选 -->\n    \t\t<div class=\"sort_item\" :class=\"{choose_type:sortBy == 'activity'}\">\n    \t\t\t<div class=\"sort_item_container\" @click=\"chooseType('activity')\">\n\t    \t\t\t<span :class=\"{category_title: sortBy == 'activity'}\">筛选</span>\n\t    \t\t\t<svg width=\"10\" height=\"10\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"sort_icon\">\n\t\t    \t\t\t<polygon points=\"0,3 10,3 5,8\"/>\n\t\t    \t\t</svg>\n    \t\t\t</div>\n\t    \t\t<transition name=\"showlist\">\n\t    \t\t\t<section v-show=\"sortBy == 'activity'\" class=\"sort_detail_type filter_container\">\n\t    \t\t\t\t<section style=\"width: 100%;\">\n\t    \t\t\t\t\t<header class=\"filter_header_style\">配送方式</header>\n\t    \t\t\t\t\t<ul class=\"filter_ul\">\n\t    \t\t\t\t\t\t<li v-for=\"(item, index) in Delivery\" :key=\"index\" class=\"filter_li\" @click=\"selectDeliveryMode(item.id)\">\n\t    \t\t\t\t\t\t\t<svg :style=\"{opacity: (item.id == 0)&&(delivery_mode !== 0)? 0: 1}\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" :xlink:href=\"delivery_mode == item.id? '#selected':'#fengniao'\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t\t<span :class=\"{selected_filter: delivery_mode == item.id}\">{{item.text}}</span>\n\t    \t\t\t\t\t\t</li>\n\t    \t\t\t\t\t</ul>\n\t    \t\t\t\t</section>\n\t    \t\t\t\t<section style=\"width: 100%;\">\n\t    \t\t\t\t\t<header class=\"filter_header_style\">商家属性（可以多选）</header>\n\t    \t\t\t\t\t<ul class=\"filter_ul\" style=\"paddingBottom: .5rem;\">\n\t    \t\t\t\t\t\t<li v-for=\"(item,index) in Activity\" :key=\"index\" class=\"filter_li\" @click=\"selectSupportIds(index, item.id)\">\n\t    \t\t\t\t\t\t\t<svg v-show=\"support_ids[index].status\" class=\"activity_svg\">\n\t\t\t\t\t\t\t\t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#selected\"></use>\n\t\t\t\t\t\t\t\t\t</svg>\n\t    \t\t\t\t\t\t\t<span class=\"filter_icon\" :style=\"{color: '#' + item.icon_color, borderColor: '#' + item.icon_color}\" v-show=\"!support_ids[index].status\">{{item.icon_name}}</span>\n\t    \t\t\t\t\t\t\t<span :class=\"{selected_filter: support_ids[index].status}\">{{item.name}}</span>\n\t    \t\t\t\t\t\t</li>\n\t    \t\t\t\t\t</ul>\n\t    \t\t\t\t</section>\n\t    \t\t\t\t<footer class=\"confirm_filter\">\n\t    \t\t\t\t\t<div class=\"clear_all filter_button_style\" @click=\"clearSelect\">清空</div>\n\t    \t\t\t\t\t<div class=\"confirm_select filter_button_style\" @click=\"confirmSelectFun\">确定<span v-show=\"filterNum\">({{filterNum}})</span></div>\n\t    \t\t\t\t</footer>\n\t    \t\t\t</section>\n\t    \t\t</transition>\n    \t\t</div>\n    \t</section>\n    \t<transition name=\"showcover\">\n    \t\t<div class=\"back_cover\" v-show=\"sortBy\"></div>\n    \t</transition>\n    \t<section class=\"shop_list_container\">\n\t    \t<shop-list :geohash=\"geohash\" :restaurantCategoryId=\"restaurant_category_id\" :restaurantCategoryIds=\"restaurant_category_ids\" :sortByType='sortByType' :deliveryMode=\"delivery_mode\" :confirmSelect=\"confirmStatus\" :supportIds=\"support_ids\" v-if=\"latitude\"></shop-list>\n    \t</section>\n    </div>\n</template>\n\n<script>\nimport { mapState, mapMutations } from \"vuex\";\nimport headTop from \"src/components/header/head\";\nimport shopList from \"src/components/common/shoplist\";\nimport { getImgPath } from \"src/components/common/mixin\";\nimport {\n  msiteAddress,\n  foodCategory,\n  foodDelivery,\n  foodActivity\n} from \"src/service/getData\";\n\nexport default {\n  data() {\n    return {\n      geohash: \"\", // city页面传递过来的地址geohash\n      headTitle: \"\", // msiet页面头部标题\n      foodTitle: \"\", // 排序左侧头部标题\n      restaurant_category_id: \"\", // 食品类型id值\n      restaurant_category_ids: \"\", //筛选类型的id\n      sortBy: \"\", // 筛选的条件\n      category: null, // category分类左侧数据\n      categoryDetail: null, // category分类右侧的详细数据\n      sortByType: null, // 根据何种方式排序\n      Delivery: null, // 配送方式数据\n      Activity: null, // 商家支持活动数据\n      delivery_mode: null, // 选中的配送方式\n      support_ids: [], // 选中的商铺活动列表\n      filterNum: 0, // 所选中的所有样式的集合\n      confirmStatus: false // 确认选择\n    };\n  },\n  created() {\n    this.initData();\n  },\n  mixins: [getImgPath],\n  components: {\n    headTop,\n    shopList\n  },\n  computed: {\n    ...mapState([\"latitude\", \"longitude\"])\n  },\n  methods: {\n    ...mapMutations([\"RECORD_ADDRESS\"]),\n    //初始化获取数据\n    async initData() {\n      //获取从msite页面传递过来的参数\n      this.geohash = this.$route.query.geohash;\n      this.headTitle = this.$route.query.title;\n      this.foodTitle = this.headTitle;\n      this.restaurant_category_id = this.$route.query.restaurant_category_id;\n      //防止刷新页面时，vuex状态丢失，经度纬度需要重新获取，并存入vuex\n      if (!this.latitude) {\n        //获取位置信息\n        let res = await msiteAddress(this.geohash);\n        // 记录当前经度纬度进入vuex\n        this.RECORD_ADDRESS(res);\n      }\n      //获取category分类左侧数据\n      this.category = await foodCategory(this.latitude, this.longitude);\n      //初始化时定位当前category分类左侧默认选择项，在右侧展示出其sub_categories列表\n      this.category.forEach(item => {\n        if (this.restaurant_category_id == item.id) {\n          this.categoryDetail = item.sub_categories;\n        }\n      });\n      //获取筛选列表的配送方式\n      this.Delivery = await foodDelivery(this.latitude, this.longitude);\n      //获取筛选列表的商铺活动\n      this.Activity = await foodActivity(this.latitude, this.longitude);\n      //记录support_ids的状态，默认不选中，点击状态取反，status为true时为选中状态\n      this.Activity.forEach((item, index) => {\n        this.support_ids[index] = { status: false, id: item.id };\n      });\n    },\n    // 点击顶部三个选项，展示不同的列表，选中当前选项进行展示，同时收回其他选项\n    async chooseType(type) {\n      if (this.sortBy !== type) {\n        this.sortBy = type;\n        //food选项中头部标题发生改变，需要特殊处理\n        if (type == \"food\") {\n          this.foodTitle = \"分类\";\n        } else {\n          //将foodTitle 和 headTitle 进行同步\n          this.foodTitle = this.headTitle;\n        }\n      } else {\n        //再次点击相同选项时收回列表\n        this.sortBy = \"\";\n        if (type == \"food\") {\n          //将foodTitle 和 headTitle 进行同步\n          this.foodTitle = this.headTitle;\n        }\n      }\n    },\n    //选中Category左侧列表的某个选项时，右侧渲染相应的sub_categories列表\n    selectCategoryName(id, index) {\n      //第一个选项 -- 全部商家 因为没有自己的列表，所以点击则默认获取选所有数据\n      if (index === 0) {\n        this.restaurant_category_ids = null;\n        this.sortBy = \"\";\n        //不是第一个选项时，右侧展示其子级sub_categories的列表\n      } else {\n        this.restaurant_category_id = id;\n        this.categoryDetail = this.category[index].sub_categories;\n      }\n    },\n    //选中Category右侧列表的某个选项时，进行筛选，重新获取数据并渲染\n    getCategoryIds(id, name) {\n\t  console.log(id, name)\n      this.restaurant_category_ids = id;\n      this.sortBy = \"\";\n      this.foodTitle = this.headTitle = name;\n    },\n    //点击某个排序方式，获取事件对象的data值，并根据获取的值重新获取数据渲染\n    sortList(event) {\n      let node;\n      // 如果点击的是 span 中的文字，则需要获取到 span 的父标签 p\n      if (event.target.nodeName.toUpperCase() !== \"P\") {\n        node = event.target.parentNode;\n      } else {\n        node = event.target;\n      }\n      this.sortByType = node.getAttribute(\"data\");\n      this.sortBy = \"\";\n    },\n    //筛选选项中的配送方式选择\n    selectDeliveryMode(id) {\n      //delivery_mode为空时，选中当前项，并且filterNum加一\n      if (this.delivery_mode == null) {\n        this.filterNum++;\n        this.delivery_mode = id;\n        //delivery_mode为当前已有值时，清空所选项，并且filterNum减一\n      } else if (this.delivery_mode == id) {\n        this.filterNum--;\n        this.delivery_mode = null;\n        //delivery_mode已有值且不等于当前选择值，则赋值delivery_mode为当前所选id\n      } else {\n        this.delivery_mode = id;\n      }\n    },\n    //点击商家活动，状态取反\n    selectSupportIds(index, id) {\n      //数组替换新的值\n      this.support_ids.splice(index, 1, {\n        status: !this.support_ids[index].status,\n        id\n      });\n      //重新计算filterNum的个数\n      this.filterNum = this.delivery_mode == null ? 0 : 1;\n      this.support_ids.forEach(item => {\n        if (item.status) {\n          this.filterNum++;\n        }\n      });\n    },\n    //只有点击清空按钮才清空数据，否则一直保持原有状态\n    clearSelect() {\n      this.support_ids.map(item => (item.status = false));\n      this.filterNum = 0;\n      this.delivery_mode = null;\n    },\n    //点击确认时，将需要筛选的id值传递给子组件，并且收回列表\n    confirmSelectFun() {\n      //状态改变时，因为子组件进行了监听，会重新获取数据进行筛选\n      this.confirmStatus = !this.confirmStatus;\n      this.sortBy = \"\";\n    }\n  }\n};\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"src/style/mixin\";\n.food_container {\n  padding-top: 3.6rem;\n}\n.sort_container {\n  background-color: #fff;\n  border-bottom: 0.025rem solid #f1f1f1;\n  position: fixed;\n  top: 1.95rem;\n  right: 0;\n  width: 100%;\n  display: flex;\n  z-index: 13;\n  box-sizing: border-box;\n  .sort_item {\n    @include sc(0.55rem, #444);\n    @include wh(33.3%, 1.6rem);\n    text-align: center;\n    line-height: 1rem;\n    .sort_item_container {\n      @include wh(100%, 100%);\n      position: relative;\n      z-index: 14;\n      background-color: #fff;\n      box-sizing: border-box;\n      padding-top: 0.3rem;\n      .sort_item_border {\n        height: 1rem;\n        border-right: 0.025rem solid $bc;\n      }\n    }\n    .sort_icon {\n      vertical-align: middle;\n      transition: all 0.3s;\n      fill: #666;\n    }\n  }\n  .choose_type {\n    .sort_item_container {\n      .category_title {\n        color: $blue;\n      }\n      .sort_icon {\n        transform: rotate(180deg);\n        fill: $blue;\n      }\n    }\n  }\n  .showlist-enter-active,\n  .showlist-leave-active {\n    transition: all 0.3s;\n    transform: translateY(0);\n  }\n  .showlist-enter,\n  .showlist-leave-active {\n    opacity: 0;\n    transform: translateY(-100%);\n  }\n  .sort_detail_type {\n    width: 100%;\n    position: absolute;\n    display: flex;\n    top: 1.6rem;\n    left: 0;\n    border-top: 0.025rem solid $bc;\n    background-color: #fff;\n  }\n  .category_container {\n    .category_left {\n      flex: 1;\n      background-color: #f1f1f1;\n      height: 16rem;\n      overflow-y: auto;\n      span {\n        @include sc(0.5rem, #666);\n        line-height: 1.8rem;\n      }\n      .category_left_li {\n        @include fj;\n        padding: 0 0.5rem;\n        .category_icon {\n          @include wh(0.8rem, 0.8rem);\n          vertical-align: middle;\n          margin-right: 0.2rem;\n        }\n        .category_count {\n          background-color: #ccc;\n          @include sc(0.4rem, #fff);\n          padding: 0 0.1rem;\n          border: 0.025rem solid #ccc;\n          border-radius: 0.8rem;\n          vertical-align: middle;\n          margin-right: 0.25rem;\n        }\n        .category_arrow {\n          vertical-align: middle;\n        }\n      }\n      .category_active {\n        background-color: #fff;\n      }\n    }\n    .category_right {\n      flex: 1;\n      background-color: #fff;\n      padding-left: 0.5rem;\n      height: 16rem;\n      overflow-y: auto;\n      .category_right_li {\n        @include fj;\n        height: 1.8rem;\n        line-height: 1.8rem;\n        padding-right: 0.5rem;\n        border-bottom: 0.025rem solid $bc;\n        span {\n          color: #666;\n        }\n      }\n      .category_right_choosed {\n        span {\n          color: $blue;\n        }\n      }\n    }\n  }\n  .sort_list_container {\n    width: 100%;\n    .sort_list_li {\n      height: 2.5rem;\n      display: flex;\n      align-items: center;\n      svg {\n        @include wh(0.7rem, 0.7rem);\n        margin: 0 0.3rem 0 0.8rem;\n      }\n      p {\n        line-height: 2.5rem;\n        flex: auto;\n        text-align: left;\n        text-indent: 0.25rem;\n        border-bottom: 0.025rem solid $bc;\n        @include fj;\n        align-items: center;\n        span {\n          color: #666;\n        }\n      }\n      .sort_select {\n        span {\n          color: $blue;\n        }\n      }\n    }\n  }\n  .filter_container {\n    flex-direction: column;\n    align-items: flex-start;\n    min-height: 10.6rem;\n    background-color: #f1f1f1;\n    .filter_header_style {\n      @include sc(0.4rem, #333);\n      line-height: 1.5rem;\n      height: 1.5rem;\n      text-align: left;\n      padding-left: 0.5rem;\n      background-color: #fff;\n    }\n    .filter_ul {\n      display: flex;\n      flex-wrap: wrap;\n      padding: 0 0.5rem;\n      background-color: #fff;\n      .filter_li {\n        display: flex;\n        align-items: center;\n        border: 0.025rem solid #eee;\n        @include wh(4.7rem, 1.4rem);\n        margin-right: 0.25rem;\n        border-radius: 0.125rem;\n        padding: 0 0.25rem;\n        margin-bottom: 0.25rem;\n        svg {\n          @include wh(0.8rem, 0.8rem);\n          margin-right: 0.125rem;\n        }\n        span {\n          @include sc(0.4rem, #333);\n        }\n        .filter_icon {\n          @include wh(0.8rem, 0.8rem);\n          font-size: 0.5rem;\n          border: 0.025rem solid $bc;\n          border-radius: 0.15rem;\n          margin-right: 0.25rem;\n          line-height: 0.8rem;\n          text-align: center;\n        }\n        .activity_svg {\n          margin-right: 0.25rem;\n        }\n        .selected_filter {\n          color: $blue;\n        }\n      }\n    }\n    .confirm_filter {\n      display: flex;\n      background-color: #f1f1f1;\n      width: 100%;\n      padding: 0.3rem 0.2rem;\n      .filter_button_style {\n        @include wh(50%, 1.8rem);\n        font-size: 0.8rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n      }\n      .clear_all {\n        background-color: #fff;\n        margin-right: 0.5rem;\n        border: 0.025rem solid #fff;\n      }\n      .confirm_select {\n        background-color: #56d176;\n        color: #fff;\n        border: 0.025rem solid #56d176;\n        span {\n          color: #fff;\n        }\n      }\n    }\n  }\n}\n.showcover-enter-active,\n.showcover-leave-active {\n  transition: opacity 0.3s;\n}\n.showcover-enter,\n.showcover-leave-active {\n  opacity: 0;\n}\n.back_cover {\n  position: fixed;\n  @include wh(100%, 100%);\n  z-index: 10;\n  background-color: rgba(0, 0, 0, 0.3);\n}\n</style>\n"
  },
  {
    "path": "src/page/forget/forget.vue",
    "content": "<template>\n    <div class=\"restContainer\">\n        <head-top head-title=\"重置密码\" goBack=\"true\"></head-top>\n        <form class=\"restForm\">\n            <section class=\"input_container phone_number\">\n                <input type=\"text\" placeholder=\"账号\" name=\"phone\" maxlength=\"11\" v-model=\"phoneNumber\" @input=\"inputPhone\">\n                <!-- <button @click.prevent=\"getVerifyCode\" :class=\"{right_phone_number:rightPhoneNumber}\" v-show=\"!computedTime\">获取验证码</button>\n                <button  @click.prevent v-show=\"computedTime\">已发送({{computedTime}}s)</button> -->\n            </section>\n             <section class=\"input_container\">\n                <input type=\"text\" placeholder=\"旧密码\" name=\"oldPassWord\" v-model=\"oldPassWord\">\n            </section>\n            <section class=\"input_container\">\n                <input type=\"text\" placeholder=\"请输入新密码\" name=\"newPassWord\" v-model=\"newPassWord\">\n            </section>\n            <section class=\"input_container\">\n                <input type=\"text\" placeholder=\"请确认密码\" name=\"confirmPassWord\" v-model=\"confirmPassWord\">\n            </section>\n            <section class=\"input_container captcha_code_container\">\n                <input type=\"text\" placeholder=\"验证码\" name=\"mobileCode\" maxlength=\"6\" v-model=\"mobileCode\">\n                <div class=\"img_change_img\">\n                    <img v-show=\"captchaCodeImg\" :src=\"captchaCodeImg\">\n                    <div class=\"change_img\" @click=\"getCaptchaCode\">\n                        <p>看不清</p>\n                        <p>换一张</p>\n                    </div>\n                </div>\n            </section>\n        </form>\n        <div class=\"login_container\" @click=\"resetButton\">确认修改</div>\n        <alert-tip v-if=\"showAlert\" :showHide=\"showAlert\" @closeTip=\"closeTip\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import alertTip from 'src/components/common/alertTip'\n    import {mobileCode, checkExsis, sendMobile, getcaptchas, changePassword} from 'src/service/getData'\n\n    export default {\n        data(){\n            return {\n                phoneNumber: null, //电话号码\n                oldPassWord: null,\n                newPassWord: null, //新密码\n                rightPhoneNumber: false, //输入的手机号码是否符合要求\n                confirmPassWord: null, //确认密码\n                captchaCodeImg: null, //验证码地址\n                mobileCode: null, //短信验证码\n                computedTime: 0, //倒数记时\n                showAlert: false, //显示提示组件\n                alertText: null, //提示的内容\n                accountType: 'mobile',//注册方式\n                captchaCodeImg: null,\n            }\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        created(){\n            this.getCaptchaCode()\n        },\n        methods: {\n            //判断输入的电话号码\n            inputPhone(){\n                if(/.+/gi.test(this.phoneNumber)){\n                    this.rightPhoneNumber = true;\n                }else{\n                    this.rightPhoneNumber = false;\n                }\n            },\n            //获取验证吗\n            async getVerifyCode(){\n                if (this.rightPhoneNumber) {\n                    this.computedTime = 30;\n                    //倒计时\n                    this.timer = setInterval(() => {\n                        this.computedTime --;\n                        if (this.computedTime == 0) {\n                            clearInterval(this.timer)\n                        }\n                    }, 1000)\n                    //判断用户是否存在\n                    let res = await checkExsis(this.phoneNumber, this.accountType);\n                    //判断返回的信息是否正确，用户是否注册\n                    if (res.message) {\n                        this.showAlert = true;\n                        this.alertText = res.message;\n                        return\n                    }else if(!res.is_exists) {\n                        this.showAlert = true;\n                        this.alertText = '您输入的手机号尚未绑定';\n                        return\n                    }\n                    //获取验证信息\n                    let getCode = await mobileCode(this.phoneNumber);\n                    if (getCode.message) {\n                        this.showAlert = true;\n                        this.alertText = getCode.message;\n                        return\n                    }\n                    this.validate_token = getCode.validate_token;\n                }\n            },\n             async getCaptchaCode(){\n                let res = await getcaptchas();\n                this.captchaCodeImg = res.code;\n            },\n            //重置密码\n            async resetButton(){\n                if (!this.phoneNumber) {\n                    this.showAlert = true;\n                    this.alertText = '请输入正确的账号';\n                    return\n                }else if(!this.oldPassWord){\n                    this.showAlert = true;\n                    this.alertText = '请输入旧密码';\n                    return\n                }else if(!this.newPassWord){\n                    this.showAlert = true;\n                    this.alertText = '请输入新密码';\n                    return\n                }else if(!this.confirmPassWord){\n                    this.showAlert = true;\n                    this.alertText = '请输确认密码';\n                    return\n                }else if(this.newPassWord !== this.confirmPassWord){\n                    this.showAlert = true;\n                    this.alertText = '两次输入的密码不一致';\n                    return\n                }else if(!this.mobileCode){\n                    this.showAlert = true;\n                    this.alertText = '请输验证码';\n                    return\n                }\n                // 发送重置信息\n                let res = await changePassword(this.phoneNumber, this.oldPassWord, this.newPassWord, this.confirmPassWord, this.mobileCode);\n                if (res.message) {\n                    this.showAlert = true;\n                    this.alertText = res.message;\n                    this.getCaptchaCode()\n                    return\n                }else{\n                    this.showAlert = true;\n                    this.alertText = '密码修改成功';\n                }\n            },\n            closeTip(){\n                this.showAlert = false;\n            }   \n        }\n    }\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\n    .restContainer{\n        padding-top: 1.95rem;\n    }\n    .restForm{\n        background-color: #fff;\n        margin-top: .6rem;\n        .input_container{\n            display: flex;\n            justify-content: space-between;\n            padding: .6rem .8rem;\n            border-bottom: 1px solid #f1f1f1;\n            input{\n                @include sc(.7rem, #666);\n            }\n            button{\n                @include sc(.65rem, #fff);\n                font-family: Helvetica Neue,Tahoma,Arial;\n                padding: .28rem .4rem;\n                border: 1px;\n                border-radius: 0.15rem;\n            }\n            .right_phone_number{\n                background-color: #4cd964;\n            }\n        }\n        .phone_number{\n            padding: .3rem .8rem;\n        }\n        .captcha_code_container{\n            height: 2.2rem;\n            .img_change_img{\n                display: flex;\n                align-items: center;\n                img{\n                    @include wh(3.5rem, 1.5rem);\n                    margin-right: .2rem;\n                }\n                .change_img{\n                    display: flex;\n                    flex-direction: 'column';\n                    flex-wrap: wrap;\n                    width: 2rem;\n                    justify-content: center;\n                    p{\n                        @include sc(.55rem, #666);\n                    }\n                    p:nth-of-type(2){\n                        color: #3b95e9;\n                        margin-top: .2rem;\n                    }\n                }\n            }\n        }\n    }\n    .captcha_code_container{\n        height: 2.2rem;\n        .img_change_img{\n            display: flex;\n            align-items: center;\n            img{\n                @include wh(3.5rem, 1.5rem);\n                margin-right: .2rem;\n            }\n            .change_img{\n                display: flex;\n                flex-direction: 'column';\n                flex-wrap: wrap;\n                width: 2rem;\n                justify-content: center;\n                p{\n                    @include sc(.55rem, #666);\n                }\n                p:nth-of-type(2){\n                    color: #3b95e9;\n                    margin-top: .2rem;\n                }\n            }\n        }\n    }\n    .login_container{\n        margin: 1rem .5rem;\n        @include sc(.7rem, #fff);\n        background-color: #4cd964;\n        padding: .5rem 0;\n        border: 1px;\n        border-radius: 0.15rem;\n        text-align: center;\n    }\n</style>\n"
  },
  {
    "path": "src/page/home/home.vue",
    "content": "<template>\n  \t<div>\n        <head-top signin-up='home'>\n            <span slot='logo' class=\"head_logo\"  @click=\"reload\">ele.me</span>\n        </head-top>\n        <nav class=\"city_nav\">\n            <div class=\"city_tip\">\n                <span>当前定位城市：</span>\n                <span>定位不准时，请在城市列表中选择</span>\n            </div>\n            <router-link :to=\"'/city/' + guessCityid\" class=\"guess_city\">\n                <span>{{guessCity}}</span>\n                <svg class=\"arrow_right\">\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                </svg>\n            </router-link>\n        </nav>\n        <section id=\"hot_city_container\">\n            <h4 class=\"city_title\">热门城市</h4>\n            <ul class=\"citylistul clear\">\n                <router-link  tag=\"li\" v-for=\"item in hotcity\" :to=\"'/city/' + item.id\" :key=\"item.id\">\n                    {{item.name}}\n                </router-link>\n            </ul>\n        </section>\n        <section class=\"group_city_container\">\n            <ul class=\"letter_classify\">\n                <li v-for=\"(value, key, index) in sortgroupcity\" :key=\"key\"  class=\"letter_classify_li\">\n                    <h4 class=\"city_title\">{{key}}\n                        <span v-if=\"index == 0\">（按字母排序）</span>\n                    </h4>\n                    <ul class=\"groupcity_name_container citylistul clear\">\n                        <router-link  tag=\"li\" v-for=\"item in value\" :to=\"'/city/' + item.id\" :key=\"item.id\" class=\"ellipsis\">\n                            {{item.name}}\n                        </router-link>\n                    </ul>\n                </li>\n            </ul>\n        </section>\n    </div>\n</template>\n\n<script>\nimport headTop from '../../components/header/head'\nimport {cityGuess, hotcity, groupcity} from '../../service/getData'\n\nexport default {\n    data(){\n        return{\n            guessCity: '',   //当前城市\n            guessCityid: '', //当前城市id\n            hotcity: [],     //热门城市列表\n            groupcity: {},   //所有城市列表\n        }\n    },\n\n\tmounted(){\n\t    // 获取当前城市\n\t    cityGuess().then(res => {\n\t        this.guessCity = res.name;\n\t        this.guessCityid = res.id;\n\t    })\n\t\n\t    //获取热门城市\n\t    hotcity().then(res => {\n\t        this.hotcity = res;\n\t    })\n\t\n\t    //获取所有城市\n\t    groupcity().then(res => {\n\t        this.groupcity = res;\n\t    })\n\t},\n\t\n\tcomponents:{\n\t    headTop\n\t},\n\t\n\tcomputed:{\n\t    //将获取的数据按照A-Z字母开头排序\n\t    sortgroupcity(){\n\t        let sortobj = {};\n\t        for (let i = 65; i <= 90; i++) {\n\t            if (this.groupcity[String.fromCharCode(i)]) {\n\t                sortobj[String.fromCharCode(i)] = this.groupcity[String.fromCharCode(i)];\n\t            }\n\t        }\n\t        return sortobj\n\t    }\n\t},\n\t\n\tmethods:{\n\t    //点击图标刷新页面\n\t    reload(){\n\t        window.location.reload();\n\t    }\n\t},\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n    .head_logo{\n        left: 0.4rem;\n        font-weight: 400;\n        @include sc(0.7rem, #fff);\n        @include wh(2.3rem, 0.7rem);\n        @include ct;\n    }\n    .city_nav{\n        padding-top: 2.35rem;\n        border-top: 1px solid $bc;\n        background-color: #fff;\n        margin-bottom: 0.4rem;\n        .city_tip{\n            @include fj;\n            line-height: 1.45rem;\n            padding: 0 0.45rem;\n            span:nth-of-type(1){\n                @include sc(0.55rem, #666);\n            }\n            span:nth-of-type(2){\n                font-weight: 900;\n                @include sc(0.475rem, #9f9f9f);\n            }\n\n        }\n        .guess_city{\n            @include fj;\n            align-items: center;\n            height: 1.8rem;\n            padding: 0 0.45rem;\n            border-top: 1px solid $bc;\n            border-bottom: 2px solid $bc;\n            @include font(0.75rem, 1.8rem);\n            span:nth-of-type(1){\n                color: $blue;\n            }\n            .arrow_right{\n                @include wh(.6rem, .6rem);\n                fill: #999;\n            }\n        }\n    }\n    #hot_city_container{\n        background-color: #fff;\n        margin-bottom: 0.4rem;\n    }\n    .citylistul{\n        li{\n            float: left;\n            text-align: center;\n            color: $blue;\n            border-bottom: 0.025rem solid $bc;\n            border-right: 0.025rem solid $bc;\n            @include wh(25%, 1.75rem);\n            @include font(0.6rem, 1.75rem);\n        }\n        li:nth-of-type(4n){\n            border-right: none;\n        }\n    }\n    .city_title{\n        color: #666;\n        font-weight: 400;\n        text-indent: 0.45rem;\n        border-top: 2px solid $bc;\n        border-bottom: 1px solid $bc;\n        @include font(0.55rem, 1.45rem, \"Helvetica Neue\");\n        span{\n            @include sc(0.475rem, #999);\n        }\n        position: sticky;\n        top: 1.95rem;\n        background-color: #fff;\n    }\n    \n    .letter_classify_li{\n        margin-bottom: 0.4rem;\n        background-color: #fff;\n        border-bottom: 1px solid $bc;\n        .groupcity_name_container{\n            li{\n                color: #666;\n            }\n        }\n    }\n\n</style>\n"
  },
  {
    "path": "src/page/login/login.vue",
    "content": "<template>\n    <div class=\"loginContainer\">\n        <head-top :head-title=\"loginWay? '登录':'密码登录'\" goBack=\"true\">\n            <!-- <div slot=\"changeLogin\" class=\"change_login\" @click=\"changeLoginWay\">{{loginWay? \"密码登录\":\"短信登录\"}}</div> -->\n        </head-top>\n        <form class=\"loginForm\" v-if=\"loginWay\">\n            <section class=\"input_container phone_number\">\n                <input type=\"text\" placeholder=\"账号密码随便输入\" name=\"phone\" maxlength=\"11\" v-model=\"phoneNumber\">\n                <button @click.prevent=\"getVerifyCode\" :class=\"{right_phone_number:rightPhoneNumber}\" v-show=\"!computedTime\">获取验证码</button>\n                <button  @click.prevent v-show=\"computedTime\">已发送({{computedTime}}s)</button>\n            </section>\n            <section class=\"input_container\">\n                <input type=\"text\" placeholder=\"验证码\" name=\"mobileCode\" maxlength=\"6\" v-model=\"mobileCode\">\n            </section>\n        </form>\n        <form class=\"loginForm\" v-else>\n            <section class=\"input_container\">\n                <input type=\"text\" placeholder=\"账号\" v-model.lazy=\"userAccount\">\n            </section>\n            <section class=\"input_container\">\n                <input v-if=\"!showPassword\" type=\"password\" placeholder=\"密码\"  v-model=\"passWord\">\n                <input v-else type=\"text\" placeholder=\"密码\"  v-model=\"passWord\">\n                <div class=\"button_switch\" :class=\"{change_to_text: showPassword}\">\n                    <div class=\"circle_button\" :class=\"{trans_to_right: showPassword}\" @click=\"changePassWordType\"></div>\n                    <span>abc</span>\n                    <span>...</span>\n                </div>\n            </section>\n            <section class=\"input_container captcha_code_container\">\n                <input type=\"text\" placeholder=\"验证码\" maxlength=\"4\" v-model=\"codeNumber\">\n                <div class=\"img_change_img\">\n                    <img v-show=\"captchaCodeImg\" :src=\"captchaCodeImg\">\n                    <div class=\"change_img\" @click=\"getCaptchaCode\">\n                        <p>看不清</p>\n                        <p>换一张</p>\n                    </div>\n                </div>\n            </section>\n        </form>\n        <p class=\"login_tips\">\n            温馨提示：未注册过的账号，登录时将自动注册\n        </p>\n        <p class=\"login_tips\">\n            注册过的用户可凭账号密码登录\n        </p>\n        <div class=\"login_container\" @click=\"mobileLogin\">登录</div>\n        <router-link to=\"/forget\" class=\"to_forget\" v-if=\"!loginWay\">重置密码？</router-link>\n        <alert-tip v-if=\"showAlert\" :showHide=\"showAlert\" @closeTip=\"closeTip\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from '../../components/header/head'\n    import alertTip from '../../components/common/alertTip'\n    import {localapi, proapi, imgBaseUrl} from 'src/config/env'\n    import {mapState, mapMutations} from 'vuex'\n    import {mobileCode, checkExsis, sendLogin, getcaptchas, accountLogin} from '../../service/getData'\n\n    export default {\n        data(){\n            return {\n                loginWay: false, //登录方式，默认短信登录\n                showPassword: false, // 是否显示密码\n                phoneNumber: null, //电话号码\n                mobileCode: null, //短信验证码\n                validate_token: null, //获取短信时返回的验证值，登录时需要\n                computedTime: 0, //倒数记时\n                userInfo: null, //获取到的用户信息\n                userAccount: null, //用户名\n                passWord: null, //密码\n                captchaCodeImg: null, //验证码地址\n                codeNumber: null, //验证码\n                showAlert: false, //显示提示组件\n                alertText: null, //提示的内容\n            }\n        },\n        created(){\n            this.getCaptchaCode();\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        computed: {\n            //判断手机号码\n            rightPhoneNumber: function (){\n                return /^1\\d{10}$/gi.test(this.phoneNumber)\n            }\n        },\n        methods: {\n            ...mapMutations([\n                'RECORD_USERINFO',\n            ]),\n            //改变登录方式\n            changeLoginWay(){\n                this.loginWay = !this.loginWay;\n            },\n            //是否显示密码\n            changePassWordType(){\n                this.showPassword = !this.showPassword;\n            },\n            //获取验证吗，线上环境使用固定的图片，生产环境使用真实的验证码\n            async getCaptchaCode(){\n                let res = await getcaptchas();\n                this.captchaCodeImg = res.code;\n            },\n            //获取短信验证码\n            async getVerifyCode(){\n                if (this.rightPhoneNumber) {\n                    this.computedTime = 30;\n                    this.timer = setInterval(() => {\n                        this.computedTime --;\n                        if (this.computedTime == 0) {\n                            clearInterval(this.timer)\n                        }\n                    }, 1000)\n                    //判读用户是否存在\n                    let exsis = await checkExsis(this.phoneNumber, 'mobile');\n                    if (exsis.message) {\n                        this.showAlert = true;\n                        this.alertText = exsis.message;\n                        return\n                    }else if(!exsis.is_exists) {\n                        this.showAlert = true;\n                        this.alertText = '您输入的手机号尚未绑定';\n                        return\n                    }\n                    //发送短信验证码\n                    let res = await mobileCode(this.phoneNumber);\n                    if (res.message) {\n                        this.showAlert = true;\n                        this.alertText = res.message;\n                        return\n                    }\n                    this.validate_token = res.validate_token;\n                }\n            },\n            //发送登录信息\n            async mobileLogin(){\n                if (this.loginWay) {\n                    if (!this.rightPhoneNumber) {\n                        this.showAlert = true;\n                        this.alertText = '手机号码不正确';\n                        return\n                    }else if(!(/^\\d{6}$/gi.test(this.mobileCode))){\n                        this.showAlert = true;\n                        this.alertText = '短信验证码不正确';\n                        return\n                    }\n                    //手机号登录\n                    this.userInfo = await sendLogin(this.mobileCode, this.phoneNumber, this.validate_token);\n                }else{\n                    if (!this.userAccount) {\n                        this.showAlert = true;\n                        this.alertText = '请输入手机号/邮箱/用户名';\n                        return\n                    }else if(!this.passWord){\n                        this.showAlert = true;\n                        this.alertText = '请输入密码';\n                        return\n                    }else if(!this.codeNumber){\n                        this.showAlert = true;\n                        this.alertText = '请输入验证码';\n                        return\n                    }\n                    //用户名登录\n                    this.userInfo = await accountLogin(this.userAccount, this.passWord, this.codeNumber);\n                }\n                //如果返回的值不正确，则弹出提示框，返回的值正确则返回上一页\n                if (!this.userInfo.user_id) {\n                    this.showAlert = true;\n                    this.alertText = this.userInfo.message;\n                    if (!this.loginWay) this.getCaptchaCode();\n                }else{\n                    this.RECORD_USERINFO(this.userInfo);\n                    this.$router.go(-1);\n\n                }\n            },\n            closeTip(){\n                this.showAlert = false;\n            }\n        }\n    }\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n\n    .loginContainer{\n        padding-top: 1.95rem;\n        p, span, input{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .change_login{\n        position: absolute;\n        @include ct;\n        right: 0.75rem;\n        @include sc(.7rem, #fff);\n    }\n\n    .loginForm{\n        background-color: #fff;\n        margin-top: .6rem;\n        .input_container{\n            display: flex;\n            justify-content: space-between;\n            padding: .6rem .8rem;\n            border-bottom: 1px solid #f1f1f1;\n            input{\n                @include sc(.7rem, #666);\n            }\n            button{\n                @include sc(.65rem, #fff);\n                font-family: Helvetica Neue,Tahoma,Arial;\n                padding: .28rem .4rem;\n                border: 1px;\n                border-radius: 0.15rem;\n            }\n            .right_phone_number{\n                background-color: #4cd964;\n            }\n        }\n        .phone_number{\n            padding: .3rem .8rem;\n        }\n        .captcha_code_container{\n            height: 2.2rem;\n            .img_change_img{\n                display: flex;\n                align-items: center;\n                img{\n                    @include wh(3.5rem, 1.5rem);\n                    margin-right: .2rem;\n                }\n                .change_img{\n                    display: flex;\n                    flex-direction: 'column';\n                    flex-wrap: wrap;\n                    width: 2rem;\n                    justify-content: center;\n                    p{\n                        @include sc(.55rem, #666);\n                    }\n                    p:nth-of-type(2){\n                        color: #3b95e9;\n                        margin-top: .2rem;\n                    }\n                }\n            }\n        }\n    }\n    .login_tips{\n        @include sc(.5rem, red);\n        padding: .4rem .6rem;\n        line-height: .5rem;\n        a{\n            color: #3b95e9;\n        }\n    }\n    .login_container{\n        margin: 0 .5rem 1rem;\n        @include sc(.7rem, #fff);\n        background-color: #4cd964;\n        padding: .5rem 0;\n        border: 1px;\n        border-radius: 0.15rem;\n        text-align: center;\n    }\n    .button_switch{\n        background-color: #ccc;\n        display: flex;\n        justify-content: center;\n        @include wh(2rem, .7rem);\n        padding: 0 .2rem;\n        border: 1px;\n        border-radius: 0.5rem;\n        position: relative;\n        .circle_button{\n            transition: all .3s;\n            position: absolute;\n            top: -0.2rem;\n            z-index: 1;\n            left: -0.3rem;\n            @include wh(1.2rem, 1.2rem);\n            box-shadow: 0 0.026667rem 0.053333rem 0 rgba(0,0,0,.1);\n            background-color: #f1f1f1;\n            border-radius: 50%;\n        }\n        .trans_to_right{\n            transform: translateX(1.3rem);\n        }\n        span{\n            @include sc(.45rem, #fff);\n            transform: translateY(.05rem);\n            line-height: .6rem;\n        }\n        span:nth-of-type(2){\n            transform: translateY(-.08rem);\n        }\n    }\n    .change_to_text{\n        background-color: #4cd964;\n    }\n    .to_forget{\n        float: right;\n        @include sc(.6rem, #3b95e9);\n        margin-right: .3rem;\n    }\n</style>\n"
  },
  {
    "path": "src/page/msite/msite.vue",
    "content": "<template>\n    <div>\n    \t<head-top signin-up='msite'>\n    \t\t<router-link :to=\"'/search/geohash'\" class=\"link_search\" slot=\"search\">\n\t    \t\t<svg width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n\t    \t\t\t<circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"rgb(255,255,255)\" stroke-width=\"1\" fill=\"none\"/>\n\t    \t\t\t<line x1=\"14\" y1=\"14\" x2=\"20\" y2=\"20\" style=\"stroke:rgb(255,255,255);stroke-width:2\"/>\n\t    \t\t</svg>\n    \t\t</router-link>\n\t\t\t<router-link to=\"/home\" slot=\"msite-title\" class=\"msite_title\">\n\t\t\t\t<span class=\"title_text ellipsis\">{{msiteTitle}}</span>\n\t\t\t</router-link>\n    \t</head-top>\n    \t<nav class=\"msite_nav\">\n    \t\t<div class=\"swiper-container\" v-if=\"foodTypes.length\">\n\t\t        <div class=\"swiper-wrapper\">\n\t\t            <div class=\"swiper-slide food_types_container\" v-for=\"(item, index) in foodTypes\" :key=\"index\">\n\t            \t\t<router-link :to=\"{path: '/food', query: {geohash, title: foodItem.title, restaurant_category_id: getCategoryId(foodItem.link)}}\" v-for=\"foodItem in item\" :key=\"foodItem.id\" class=\"link_to_food\">\n\t            \t\t\t<figure>\n\t            \t\t\t\t<img :src=\"imgBaseUrl + foodItem.image_url\">\n\t            \t\t\t\t<figcaption>{{foodItem.title}}</figcaption>\n\t            \t\t\t</figure>\n\t            \t\t</router-link>\n\t\t            </div>\n\t\t        </div>\n\t\t        <div class=\"swiper-pagination\"></div>\n\t\t    </div>\n\t\t    <img src=\"../../images/fl.svg\" class=\"fl_back animation_opactiy\" v-else>\n    \t</nav>\n    \t<div class=\"shop_list_container\">\n\t    \t<header class=\"shop_header\">\n\t    \t\t<svg class=\"shop_icon\">\n\t    \t\t\t<use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#shop\"></use>\n\t    \t\t</svg>\n\t    \t\t<span class=\"shop_header_title\">附近商家</span>\n\t    \t</header>\n\t    \t<shop-list v-if=\"hasGetData\" :geohash=\"geohash\"></shop-list>\n    \t</div>\n    \t<foot-guide></foot-guide>\n    </div>    \n</template>\n\n<script>\nimport {mapMutations} from 'vuex'\n// import {imgBaseUrl} from 'src/config/env'\nimport headTop from 'src/components/header/head'\nimport footGuide from 'src/components/footer/footGuide'\nimport shopList from 'src/components/common/shoplist'\nimport {msiteAddress, msiteFoodTypes, cityGuess} from 'src/service/getData'\nimport 'src/plugins/swiper.min.js'\nimport 'src/style/swiper.min.css'\n\nexport default {\n\tdata(){\n        return {\n        \tgeohash: '', // city页面传递过来的地址geohash\n            msiteTitle: '请选择地址...', // msite页面头部标题\n            foodTypes: [], // 食品分类列表\n            hasGetData: false, //是否已经获取地理位置数据，成功之后再获取商铺列表信息\n            imgBaseUrl: 'https://fuss10.elemecdn.com', //图片域名地址\n        }\n    },\n    async beforeMount(){\n\t\tif (!this.$route.query.geohash) {\n\t\t\tconst address = await cityGuess();\n\t\t\tthis.geohash = address.latitude + ',' + address.longitude;\n\t\t}else{\n\t\t\tthis.geohash = this.$route.query.geohash\n\t\t}\n\t\t//保存geohash 到vuex\n\t\tthis.SAVE_GEOHASH(this.geohash);\n    \t//获取位置信息\n    \tlet res = await msiteAddress(this.geohash);\n    \tthis.msiteTitle = res.name;\n    \t// 记录当前经度纬度\n    \tthis.RECORD_ADDRESS(res);\n\n    \tthis.hasGetData = true;\n    },\n    mounted(){\n        //获取导航食品类型列表\n       \tmsiteFoodTypes(this.geohash).then(res => {\n       \t\tlet resLength = res.length;\n       \t\tlet resArr = [...res]; // 返回一个新的数组\n       \t\tlet foodArr = [];\n    \t\tfor (let i = 0, j = 0; i < resLength; i += 8, j++) {\n    \t\t\tfoodArr[j] = resArr.splice(0, 8);\n    \t\t}\n    \t\tthis.foodTypes = foodArr;\n        }).then(() => {\n        \t//初始化swiper\n        \tnew Swiper('.swiper-container', {\n\t\t        pagination: '.swiper-pagination',\n\t\t        loop: true\n\t\t    });\n        })\n    },\n    components: {\n    \theadTop,\n    \tshopList,\n    \tfootGuide,\n    },\n    computed: {\n\n    },\n    methods: {\n    \t...mapMutations([\n    \t\t'RECORD_ADDRESS', 'SAVE_GEOHASH'\n    \t]),\n    \t// 解码url地址，求去restaurant_category_id值\n    \tgetCategoryId(url){\n    \t\tlet urlData = decodeURIComponent(url.split('=')[1].replace('&target_name',''));\n    \t\tif (/restaurant_category_id/gi.test(urlData)) {\n    \t\t\treturn JSON.parse(urlData).restaurant_category_id.id\n    \t\t}else{\n    \t\t\treturn ''\n    \t\t}\n    \t}\n    },\n    watch: {\n\n    }\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\t.link_search{\n\t\tleft: .8rem;\n\t\t@include wh(.9rem, .9rem);\n\t\t@include ct;\n\t}\n\t.msite_title{\n\t\t@include center;\n        width: 50%;\n        color: #fff;\n        text-align: center;\n        margin-left: -0.5rem;\n        .title_text{\n            @include sc(0.8rem, #fff);\n            text-align: center;\n            display: block;\n        }\n\t}\n\t.msite_nav{\n\t\tpadding-top: 2.1rem;\n\t\tbackground-color: #fff;\n\t\tborder-bottom: 0.025rem solid $bc;\n\t\theight: 10.6rem;\n\t\t.swiper-container{\n\t\t\t@include wh(100%, auto);\n\t\t\tpadding-bottom: 0.6rem;\n\t\t\t.swiper-pagination{\n\t\t\t\tbottom: 0.2rem;\n\t\t\t}\n\t\t}\n\t\t.fl_back{\n\t\t\t@include wh(100%, 100%);\n\t\t}\n\t}\n\t.food_types_container{\n\t\tdisplay:flex;\n\t\tflex-wrap: wrap;\n\t\t.link_to_food{\n\t\t\twidth: 25%;\n\t\t\tpadding: 0.3rem 0rem;\n\t\t\t@include fj(center);\n\t\t\tfigure{\n\t\t\t\timg{\n\t\t\t\t\tmargin-bottom: 0.3rem;\n\t\t\t\t\t@include wh(1.8rem, 1.8rem);\n\t\t\t\t}\n\t\t\t\tfigcaption{\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\t@include sc(0.55rem, #666);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.shop_list_container{\n\t\tmargin-top: .4rem;\n\t\tborder-top: 0.025rem solid $bc;\n\t\tbackground-color: #fff;\n\t\t.shop_header{\n\t\t\t.shop_icon{\n\t\t\t\tfill: #999;\n\t\t\t\tmargin-left: 0.6rem;\n\t\t\t\tvertical-align: middle;\n\t\t\t\t@include wh(0.6rem, 0.6rem);\n\t\t\t}\n\t\t\t.shop_header_title{\n\t\t\t\tcolor: #999;\n\t\t\t\t@include font(0.55rem, 1.6rem);\n\t\t\t}\n\t\t}\n\t}\n\n</style>\n"
  },
  {
    "path": "src/page/order/children/orderDetail.vue",
    "content": " <template>\n  <div class=\"order_detail_page\">\n        <head-top head-title=\"订单详情\" go-back='true'></head-top>\n        <section v-if=\"!showLoading\" id=\"scroll_section\" class=\"scroll_container\">\n            <section class=\"scroll_insert\">\n                <section class=\"order_titel\">\n                    <img :src=\"imgBaseUrl + orderDetail.restaurant_image_url\">\n                    <p>{{orderDetail.status_bar.title}}</p>\n                    <p>{{orderDetail.timeline_node.description}}</p>\n                    <router-link class=\"order_again\" :to=\"{path: '/shop', query: {geohash, id: orderDetail.restaurant_id}}\">再来一单</router-link>\n                </section>\n                <section class=\"food_list\">\n                    <router-link class=\"food_list_header\" :to=\"{path: '/shop', query: {geohash, id: orderDetail.restaurant_id}}\">\n                        <div class=\"shop_name\">\n                            <img :src=\"imgBaseUrl + orderDetail.restaurant_image_url\">\n                            <span>{{orderDetail.restaurant_name}}</span>\n                        </div>\n                        <svg fill=\"#333\" class=\"arrow_right\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                        </svg>\n                    </router-link>\n                    <ul class=\"food_list_ul\">\n                        <li v-for=\"item in orderDetail.basket.group[0]\">\n                            <p class=\"food_name ellipsis\">{{item.name}}</p>\n                            <div class=\"quantity_price\">\n                                <span>X{{item.quantity}}</span>\n                                <span>¥{{item.price}}</span>\n                            </div>\n                        </li>\n                    </ul>\n                    <div class=\"deliver_fee\">\n                        <span>配送费</span>\n                        <span>{{orderDetail.basket.deliver_fee&&orderDetail.basket.deliver_fee.price || 0}}</span>   \n                    </div>\n                    <div class=\"pay_ment\">实付{{orderDetail.total_amount.toFixed(2)}}</div>\n                </section>\n                <section class=\"order_detail_style\">\n                    <header>配送信息</header>\n                    <section class=\"item_style\">\n                        <p class=\"item_left\">送达时间：</p>\n                        <div class=\"item_right\">\n                            <p>{{orderData.deliver_time}}</p>\n                        </div>\n                    </section>\n                    <section class=\"item_style\">\n                        <p class=\"item_left\">送货地址：</p>\n                        <div class=\"item_right\">\n                            <p>{{orderData.consignee}}</p>\n                            <p>{{orderData.phone}}</p>\n                            <p>{{orderData.address}}</p>\n                        </div>\n                    </section>\n                    <section class=\"item_style\">\n                        <p class=\"item_left\">配送方式：</p>\n                        <div class=\"item_right\">\n                            <p>蜂鸟专送</p>\n                        </div>\n                    </section>\n                </section>\n                <section class=\"order_detail_style\">\n                    <header>订单信息</header>\n                    <section class=\"item_style\">\n                        <p class=\"item_left\">订单号：</p>\n                        <div class=\"item_right\">\n                            <p>{{orderDetail.id}}</p>\n                        </div>\n                    </section>\n                    <section class=\"item_style\">\n                        <p class=\"item_left\">支付方式：</p>\n                        <div class=\"item_right\">\n                            <p>在线支付</p>\n                        </div>\n                    </section>\n                    <section class=\"item_style\">\n                        <p class=\"item_left\">下单时间：</p>\n                        <div class=\"item_right\">\n                            <p>{{orderDetail.formatted_created_at}}</p>\n                        </div>\n                    </section>\n                </section>\n            </section>\n        </section>\n        <transition name=\"loading\">\n            <loading v-if=\"showLoading\"></loading>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import {mapState, mapMutations} from 'vuex'\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {getOrderDetail} from 'src/service/getData'\n    import loading from 'src/components/common/loading'\n    import BScroll from 'better-scroll'\n    import {imgBaseUrl} from 'src/config/env'\n\n\n    export default {\n\n      data(){\n            return{\n                showLoading: true, //显示加载动画\n                orderData: null,\n                imgBaseUrl\n            }\n        },\n        mounted(){\n            this.initData();\n        },\n        mixins: [getImgPath],\n        components: {\n            headTop,\n            loading,\n        },\n        computed: {\n            ...mapState([\n                'orderDetail', 'geohash', 'userInfo'\n            ]),\n        },\n        methods: {\n            async initData(){\n                if (this.userInfo && this.userInfo.user_id) {\n                    this.orderData = await getOrderDetail(this.userInfo.user_id, this.orderDetail.unique_id);\n                    this.showLoading = false;\n                    this.$nextTick(() => {\n                        new BScroll('#scroll_section', {  \n                            deceleration: 0.001,\n                            bounce: true,\n                            swipeTime: 1800,\n                            click: true,\n                        }); \n                    })\n                }\n            },\n        },\n        watch: {\n            userInfo: function (value) {\n                if (value && value.user_id) {\n                    this.initData();\n                }\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .order_detail_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f1f1f1;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .scroll_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n    }\n    .scroll_insert{\n        padding-bottom: 3rem;\n    }\n    .order_titel{\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        padding: .7rem;\n        background-color: #fff;\n        margin-bottom: 0.5rem;\n        img{\n            border: 0.05rem solid $blue;\n            border-radius: 50%;\n            @include wh(3rem, 3rem);\n        }\n        p:nth-of-type(1){\n            @include sc(.9rem, #333);\n            font-weight: bold;\n            margin-top: .4rem;\n        }\n        p:nth-of-type(2){\n            @include sc(.55rem, #999);\n            width: 10rem;\n            margin-top: .3rem;\n            text-align: center;\n        }\n        .order_again{\n            @include sc(.6rem, $blue);\n            margin-top: .5rem;\n            border: 0.025rem solid $blue;\n            padding: .15rem .4rem;\n            border-radius: .1rem;\n        }\n    }\n    .food_list{\n        background-color: #fff;\n        .food_list_header{\n            @include fj;\n            align-items: center;\n            padding: .2rem .5rem;\n            border-bottom: 1px solid #f5f5f5;\n            .shop_name{\n                img{\n                    @include wh(1.2rem, 1.2rem);\n                    vertical-align: middle;\n                    margin-right: .2rem;\n                }\n                span{\n                    @include sc(.75rem, #333);\n                    font-weight: bold;\n                }\n            }\n            svg{\n                @include wh(.6rem, .6rem);\n                fill: #666;\n            }\n        }\n        .food_list_ul{\n            li{\n                @include fj;\n                align-items: center;\n                padding: 0 .5rem;\n                line-height: 2rem;\n                .food_name{\n                    @include sc(.6rem, #666);\n                    flex: 4;\n                }\n                .quantity_price{\n                    flex: 1;\n                    @include fj;\n                    align-items: center;\n                    span:nth-of-type(1){\n                        @include sc(.6rem, #ccc);\n                    }\n                    span:nth-of-type(2){\n                        @include sc(.6rem, #666);\n                    }\n                }\n            }\n        }\n        .deliver_fee{\n            @include fj;\n            align-items: center;\n            padding: 0 .5rem;\n            line-height: 2rem;\n            border-top: 1px solid #f5f5f5;\n            span{\n                @include sc(.6rem, #666);\n            }\n        }\n        .pay_ment{\n            @include sc(.6rem, #fb6b23);\n            border-top: 1px solid #f5f5f5;\n            font-weight: bold;\n            line-height: 2rem;\n            text-align: right;\n            padding-right: .5rem;\n        }\n    }\n    .order_detail_style{\n        background-color: #fff;\n        margin-top: 0.5rem;\n        header{\n            @include sc(.75rem, #333);\n            padding: .5rem;\n            border-bottom: 1px solid #f5f5f5;\n        }\n        .item_style{\n            display: flex;\n            padding: .5rem;\n            p{\n                @include sc(.65rem, #666);\n                line-height: 1rem;\n            }\n        }\n    }\n    .loading-enter-active, .loading-leave-active {\n        transition: opacity .7s\n    }\n    .loading-enter, .loading-leave-active {\n        opacity: 0\n    }\n    \n</style>\n"
  },
  {
    "path": "src/page/order/order.vue",
    "content": " <template>\n    <div class=\"order_page\">\n        <head-top head-title=\"订单列表\" go-back='true'></head-top>\n        <ul class=\"order_list_ul\" v-load-more=\"loaderMore\">\n            <li class=\"order_list_li\" v-for=\"item in orderList\" :key=\"item.id\">\n                <img :src=\"imgBaseUrl + item.restaurant_image_url\" class=\"restaurant_image\">\n                <section class=\"order_item_right\">\n                    <section @click=\"showDetail(item)\">\n                        <header class=\"order_item_right_header\">\n                            <section class=\"order_header\">\n                                <h4 >\n                                    <span class=\"ellipsis\">{{item.restaurant_name}} </span>\n                                    <svg fill=\"#333\" class=\"arrow_right\">\n                                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                                    </svg>\n                                </h4>\n                                <p class=\"order_time\">{{item.formatted_created_at}}</p>\n                            </section>\n                            <p class=\"order_status\">\n                                {{item.status_bar.title}}\n                            </p>\n                        </header>\n                        <section class=\"order_basket\">\n                            <p class=\"order_name ellipsis\">{{item.basket.group[0][0].name}}{{item.basket.group[0].length > 1 ? ' 等' + item.basket.group[0].length + '件商品' : ''}}</p>\n                            <p class=\"order_amount\">¥{{item.total_amount.toFixed(2)}}</p>\n                        </section>\n                    </section>\n                    <div class=\"order_again\">\n                        <compute-time v-if=\"item.status_bar.title == '等待支付'\" :time=\"item.time_pass\"></compute-time>\n                        <router-link :to=\"{path: '/shop', query: {geohash, id: item.restaurant_id}}\" tag=\"span\" class=\"buy_again\" v-else>再来一单</router-link>\n                    </div>\n                </section>\n            </li>\n        </ul>\n        <foot-guide></foot-guide>\n        <transition name=\"loading\">\n            <loading v-show=\"showLoading\"></loading>\n        </transition>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n \n    </div>\n</template>\n\n<script>\n    import {mapState, mapMutations} from 'vuex'\n    import headTop from 'src/components/header/head'\n    import computeTime from 'src/components/common/computeTime'\n    import loading from 'src/components/common/loading'\n    import {getImgPath} from 'src/components/common/mixin'\n    import footGuide from 'src/components/footer/footGuide'\n    import {getOrderList} from 'src/service/getData'\n    import {loadMore} from 'src/components/common/mixin'\n    import {imgBaseUrl} from 'src/config/env'\n\n\n    export default {\n      data(){\n            return{\n                orderList: null, //订单列表\n                offset: 0, \n                preventRepeat: false,  //防止重复获取\n                showLoading: true, //显示加载动画\n                imgBaseUrl\n            }\n        },\n        mounted(){\n            this.initData();\n        },\n        mixins: [loadMore],\n        components: {\n            headTop,\n            footGuide,\n            loading,\n            computeTime,\n        },\n        computed: {\n            ...mapState([\n                'userInfo', 'geohash'\n            ]),\n        },\n        methods: {\n             ...mapMutations([\n               'SAVE_ORDER'\n            ]),\n            //初始化获取信息\n            async initData(){\n                if (this.userInfo && this.userInfo.user_id) {\n                    let res = await getOrderList(this.userInfo.user_id, this.offset);\n                    this.orderList = [...res];\n                    this.hideLoading();\n                }else{\n                    this.hideLoading();\n                }\n            },\n            //加载更多\n            async loaderMore(){\n                if (this.preventRepeat) {\n                    return\n                }\n                this.preventRepeat = true;\n                this.showLoading = true;\n                this.offset += 10;\n                //获取信息\n                let res = await getOrderList(this.userInfo.user_id, this.offset);\n                this.orderList = [...this.orderList, ...res];\n                this.hideLoading();\n                if (res.length < 10) {\n                    return\n                }\n                this.preventRepeat = false;\n            },\n            //显示详情页\n            showDetail(item){\n                this.SAVE_ORDER(item);\n                this.preventRepeat = false;\n                this.$router.push('/order/orderDetail');\n            },\n            //生产环境与发布环境隐藏loading方式不同\n            hideLoading(){\n                this.showLoading = false;\n            },\n        },\n        watch: {\n            userInfo: function (value) {\n                if (value && value.user_id && !this.orderList) {\n                    this.initData();\n                }\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n    \n    .order_page{\n        background-color: #f1f1f1;\n        margin-bottom: 1.95rem;\n        p, span, h4{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .order_list_ul{\n        padding-top: 1.95rem;\n        .order_list_li{\n            background-color: #fff;\n            display: flex;\n            margin-bottom: 0.5rem;\n            padding: .6rem .6rem 0;\n            .restaurant_image{\n                @include wh(2rem, 2rem);\n                margin-right: 0.4rem;\n            }\n            .order_item_right{\n                flex: 5;\n                .order_item_right_header{\n                    border-bottom: 0.025rem solid #f5f5f5;\n                    padding-bottom: .3rem;\n                    @include fj;\n                    .order_header{\n                        h4{\n                            display: flex;\n                            align-items: center;\n                            justify-content: flex-start;\n                            @include sc(.75rem, #333);\n                            line-height: 1rem;\n                            width: 9rem;\n\n                            .arrow_right{\n                                @include wh(.4rem, .4rem);\n                                fill: #ccc;\n                                margin-right: .2rem;\n                            }\n                        }\n                        .order_time{\n                            @include sc(.55rem, #999);\n                            line-height: .8rem;\n                        }\n                    }\n                    .order_status{\n                        @include sc(.6rem, #333);\n                    }\n                }\n                .order_basket{\n                    @include fj;\n                    line-height: 2rem;\n                    border-bottom: 0.025rem solid #f5f5f5;\n                    .order_name{\n                        @include sc(.6rem, #666);\n                        width: 10rem;\n                    }\n                    .order_amount{\n                        @include sc(.6rem, #f60);\n                        font-weight: bold;\n                    }\n                }\n                .order_again{\n                    text-align: right;\n                    line-height: 1.6rem;\n                    .buy_again{\n                        @include sc(.55rem, #3190e8);\n                        border: 0.025rem solid #3190e8;\n                        padding: .1rem .2rem;\n                        border-radius: .15rem;\n                    }\n                }\n            }\n        }\n    }\n    .loading-enter-active, .loading-leave-active {\n        transition: opacity .7s\n    }\n    .loading-enter, .loading-leave-active {\n        opacity: 0\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n</style>\n"
  },
  {
    "path": "src/page/points/children/detail.vue",
    "content": " <template>\n    <div class=\"page\">\n        <head-top head-title=\"积分问题\" go-back='true'></head-top>\n        <div class=\"markdown\">\n            <h3 id=\"q1-\">Q1: 怎么获得积分？</h3>\n            <p>在线支付的订单将获得订单积分奖励：</p>\n            <ul>\n                <li>积分将在用户完成评价后获得。</li>\n                <li>可获得积分=订单金额×10（即1元=10点积分）。</li>\n                <li>订单金额指实际付款金额，不包含活动优惠金额。</li>\n                <li>每位用户每天最多可以获得2000积分，体验商家的订单和评价不会增加积分。</li>\n            </ul>\n            <h3 id=\"q2-\">Q2: 积分用来做什么？</h3>\n            <p>可以在积分商城兑换各种礼品。</p>\n            <h3 id=\"q3-\">Q3: 礼品兑换很多天了还没有收到，该怎么办？</h3>\n            <p>礼品从兑换日起，3个工作日（周末不算）内处理发货，发货后，通常会在3个工作日左右送达。</p>\n            <h3 id=\"q4-\">Q4: 礼品兑换中的手机充值卡兑换，怎么样进行充值，充值之前会和我电话确认嘛？</h3>\n            <p>不会，手机充值卡兑换，是直接充值到您填写的手机号上，充值之前不会和您电话确认，所以您在填写电话的时候，请确认电话是否正确。</p>\n        </div>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {payRequest} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n    import loading from 'src/components/common/loading'\n\n    export default {\n      data(){\n            return{\n               \n            }\n        },\n        components: {\n            headTop,\n        },\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        z-index: 203;\n        background-color: #fff;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .markdown{\n        @include sc(.6rem, #666);\n        padding: 0 0.5rem 0.5rem;\n        h3{\n            line-height: 2rem;\n        }\n        p,li{\n            @include sc(.6rem, #666);\n            line-height: 1rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/points/points.vue",
    "content": " <template>\r\n  <div class=\"page\">\r\n        <head-top head-title=\"我的积分\" go-back='true'></head-top>\r\n        <section class=\"content_container\">\r\n            <section class=\"content\">\r\n                <header class=\"content_header\">\r\n                    <span class=\"content_title_style\">当前积分</span>\r\n                    <section class=\"contetn_description\">\r\n                        <img src=\"../../images/description.png\" height=\"24\" width=\"24\">\r\n                        <router-link to=\"/points/detail\" class=\"content_title_style\">积分说明</router-link>\r\n                    </section>\r\n                </header>\r\n                <p class=\"content_num\">\r\n                    <span>0</span>\r\n                    <span>分</span>\r\n                </p>\r\n                <div class=\"promit_button\" @click=\"usePoint\">积分兑换商品</div>\r\n            </section>\r\n        </section>\r\n        <p class=\"deal_detail\">最近30天积分纪录</p>\r\n        <div class=\"no_log\">\r\n            <img src=\"../../images/no-log.png\">\r\n            <p>最近30天无积分纪录</p>\r\n            <p>快去下单赚取大量积分吧</p>\r\n        </div>\r\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\r\n        <transition name=\"router-slid\" mode=\"out-in\">\r\n            <router-view></router-view>\r\n        </transition>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import headTop from 'src/components/header/head'\r\n    import alertTip from 'src/components/common/alertTip'\r\n\r\n    export default {\r\n      data(){\r\n            return{\r\n                showAlert: false,\r\n                alertText: null,\r\n            }\r\n        },\r\n        mounted(){\r\n          \r\n        },\r\n        components: {\r\n            headTop,\r\n            alertTip,\r\n        },\r\n        computed: {\r\n           \r\n        },\r\n        methods: {\r\n            usePoint(){\r\n                this.showAlert = true;\r\n                this.alertText = '快去下单赚取大量积分吧';\r\n            }\r\n        }\r\n    }\r\n</script>\r\n  \r\n<style lang=\"scss\" scoped>\r\n    @import 'src/style/mixin';\r\n  \r\n    .page{\r\n        padding-top: 1.95rem;\r\n        p, span{\r\n            font-family: Helvetica Neue,Tahoma,Arial;\r\n        }\r\n    }\r\n    .content_container{\r\n        padding: .3rem;\r\n        background-color: $blue;\r\n        .content{\r\n            padding: .4rem;\r\n            background-color: #fff;\r\n            border-radius: .15rem;\r\n            .content_header{\r\n                @include fj;\r\n                font-size: .55rem;\r\n                .contetn_description{\r\n                    display: flex;\r\n                    align-items: center;\r\n                    img{\r\n                        @include wh(.6rem, .6rem);\r\n                        margin-right: .2rem;\r\n                    }\r\n                    .content_title_style{\r\n                        color: $blue;\r\n                    }\r\n                }\r\n                .content_title_style{\r\n                    color: #666;\r\n                }\r\n            }\r\n            .content_num{\r\n                span:nth-of-type(1){\r\n                    @include sc(1.8rem, #333);\r\n                }\r\n                span:nth-of-type(2){\r\n                    @include sc(.7rem, #333);\r\n                }\r\n            }\r\n            .promit_button{\r\n                @include wh(100%, 2rem);\r\n                @include sc(.8rem, #fff);\r\n                border-radius: 0.15rem;\r\n                line-height: 2rem;\r\n                margin-top: 1rem;\r\n                text-align: center;\r\n                background-color: #fe6d47;\r\n            }\r\n        }\r\n    }\r\n    .deal_detail{\r\n        @include sc(.6rem, #999);\r\n        line-height: 2rem;\r\n        padding-left: .5rem;\r\n    }\r\n    .no_log{\r\n        text-align: center;\r\n        margin-top: 1rem;\r\n        img{\r\n            @include wh(8rem, 5rem);\r\n        }\r\n        p{\r\n            margin-top: .5rem;\r\n            @include sc(.7rem, #666);\r\n        }\r\n        p:nth-of-type(2){\r\n            @include sc(.5rem, #999);\r\n        }\r\n    }\r\n    .router-slid-enter-active, .router-slid-leave-active {\r\n        transition: all .4s;\r\n    }\r\n    .router-slid-enter, .router-slid-leave-active {\r\n        transform: translate3d(2rem, 0, 0);\r\n        opacity: 0;\r\n    }\r\n</style>\r\n"
  },
  {
    "path": "src/page/profile/children/children/address.vue",
    "content": " <template>\n  \t<div class=\"rating_page\">\n        <head-top head-title=\"编辑地址\" go-back='true'>\n        \t<span slot=\"edit\" class=\"edit\" @click=\"editThing\">{{editText}}</span>\n        </head-top>\n        <section class=\"address\">\n        \t<ul class=\"addresslist\">\n        \t\t<li v-for=\"(item,index) in removeAddress\">\n        \t\t\t<div>\n        \t\t\t\t<p>{{item.address}}</p>\n        \t\t\t\t<p><span>{{item.phone}}</span><span v-if=\"item.phonepk\">、{{item.phonepk}}</span></p>\n        \t\t\t</div>\n        \t\t\t<div class=\"deletesite\" v-if=\"deletesite\">\n        \t\t\t\t<span @click=\"deleteSite(index, item)\">x</span>\n        \t\t\t</div>\n        \t\t</li>\n        \t</ul>\n\t\t\t<router-link to='/profile/info/address/add'>\n\t\t\t\t<div class=\"addsite\">\n\t\t\t\t\t\t<span>新增地址</span>\n\t\t\t\t\t\t<span class=\"addsvg\">\n\t\t\t\t\t\t\t<svg fill=\"#d8d8d8\">\n\t\t\t\t\t\t\t    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</router-link>\n        </section>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {mapState,mapActions,} from 'vuex'\n    import {getAddressList, deleteAddress} from 'src/service/getData'\n\n    export default {\n      data(){\n            return{\n    \t\t\tdeletesite:false, //是否编辑状态\n    \t\t\teditText:'编辑',\n    \t\t\tadressList:[], //地址列表\n            }\n        },\n        mounted(){\n            this.initData();\n        },\n        mixins: [getImgPath],\n        mounted(){\n        \t\n        },\n        components: {\n            headTop,\n        },\n        computed:{\n             ...mapState([\n                'userInfo','removeAddress'\n            ]),\n             \n        },\n        props:[],\n        methods: {\n        \t...mapActions([\n                'saveAddress'\n            ]),\n            //初始化信息\n            initData(){\n                if (this.userInfo && this.userInfo.user_id) {\n                   this.saveAddress();\n                }\n            },\n            //编辑\n            editThing(){\n            \tif(this.editText == '编辑'){\n            \t\tthis.editText='完成';\n            \t\tthis.deletesite=true;\n            \t}else{\n            \t\tthis.editText='编辑';\n            \t\tthis.deletesite=false;\n            \t}\n            },\n            //删除地址\n            async deleteSite(index, item){\n                if (this.userInfo && this.userInfo.user_id) {\n                    await deleteAddress(this.userInfo.user_id, item.id);\n            \t    this.removeAddress.splice(index, 1);\n                }\n            }\n        },\n        watch: {\n            userInfo: function (value) {\n                if (value && value.user_id) {\n                    this.initData();\n                }\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f2f2f2;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .edit{\n    \tright: 0.4rem;\n        @include sc(0.7rem, #fff);\n        @include ct;\n    }\n    .address{\n    \twidth:100%;\n    \tmargin-top:.4rem;\n    \tborder-top:1px solid #d9d9d9;\n    \tborder-bottom:1px solid #d9d9d9;\n    \t.addresslist{\n    \t\tbackground:#fff;\n    \t\tli{\n    \t\t\tborder-bottom:1px solid #d9d9d9;\n    \t\t\tpadding:.4rem;\n    \t\t\t@include fj(space-between);\n    \t\t\tp{\n    \t\t\t\tline-height:.9rem;\n    \t\t\t\t@include sc(.6rem,#333);\n    \t\t\t\tspan{\n    \t\t\t\t\tdisplay:inline-block;\n    \t\t\t\t\t@include sc(.6rem,#333);\n    \t\t\t\t}\n    \t\t\t}\n    \t\t\t.deletesite{\n    \t\t\t\tdisplay:flex;\n    \t\t\t\talign-items:center;\n    \t\t\t\tspan{\n    \t\t\t\t\tdisplay:block;\n    \t\t\t\t\t@include sc(.8rem,#999)\n    \t\t\t\t}\n    \t\t\t}\n    \t\t}\n    \t\tli:nth-of-type(1){\n    \t\t\tbackground:#FFF8C3;\n    \t\t}\n    \t}\n    \t.addsite{\n    \t\tmargin-top:.4rem;\n    \t\tbackground:#fff;\n    \t\tpadding:.2rem .4rem;\n    \t\tborder-top:1px solid #d9d9d9;\n    \t\t@include fj(space-between);\n    \t\tspan{\n    \t\t\tdisplay:block;\n    \t\t\t@include sc(.7rem,#333);\n    \t\t\tline-height:1.4rem;\n    \t\t}\n    \t\t.addsvg{\n    \t\t\t@include wh(.66667rem,1.4rem);\n    \t\t\tsvg{\n    \t\t\t\t@include wh(100%,100%);\n    \t\t\t}\n    \t\t}\n    \t}\n    }\n.router-slid-enter-active, .router-slid-leave-active {\n    transition: all .4s;\n}\n.router-slid-enter, .router-slid-leave-active {\n    transform: translate3d(2rem, 0, 0);\n    opacity: 0;\n}\n</style>\n"
  },
  {
    "path": "src/page/profile/children/children/children/add.vue",
    "content": " <template>\n  <div class=\"rating_page\">\n        <head-top head-title=\"新增地址\" go-back='true'></head-top>\n        <section class=\"adddetail\">\n        \t<form action=\"\" v-on:submit.prevent>\n        \t\t<section class=\"ui-padding-block\">\n        \t\t\t<div class=\"input-new\">\n        \t\t\t\t<input type=\"text\" placeholder=\"请填写你的姓名\" :class=\"{verifies:verify}\" v-model=\"message\" @input=\"inputThing\">\n        \t\t\t\t<p v-if=\"verify\">请填写您的姓名</p>\n        \t\t\t</div>\n        \t\t\t<router-link to='/profile/info/address/add/addDetail' class=\"add-detail\">\n\t        \t\t\t<div class=\"input-new\">\n\t        \t\t\t\t<input type=\"text\" placeholder=\"小区/写字楼/学校等\" readonly=\"readonly\" v-model=\"addAddress\" />\n\t        \t\t\t</div>\n        \t\t\t</router-link>\n        \t\t\t <div class=\"input-new\">\n        \t\t\t\t<input type=\"text\" placeholder=\"请填写详细送餐地址\" :class=\"{verifies:verifythree}\" @input=\"inputThingthree\" v-model=\"mesthree\"/>\n        \t\t\t\t<p v-if=\"verifythree\">{{sendaddress}}</p>\n        \t\t\t</div>\n        \t\t\t<div class=\"input-new\">\n        \t\t\t\t<input type=\"text\" placeholder=\"请填写能够联系到您的手机号\" :class=\"{verifies:verifyfour}\" v-model=\"telenum\" @input=\"inputThingfour\" />\n        \t\t\t\t<p v-if=\"verifyfour\">{{telephone}}</p>\n        \t\t\t</div>\n        \t\t\t<div class=\"input-new\">\n        \t\t\t\t<input type=\"text\" placeholder=\"备用联系电话（选填）\" v-model=\"standbytelenum\" @input=\"inputThingfive\" />\n        \t\t\t\t<p v-if=\"verifyfive\">{{standbytele}}</p>\n        \t\t\t</div>\n        \t\t</section>\n        \t\t<section class=\"addbutton\">\n        \t\t\t<button :class=\"{butopacity:butpart}\" @click.prevent=\"submitThing\">新增地址</button>\n        \t\t</section>\n        \t</form>\n        </section>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {mapState, mapMutations} from 'vuex'\n    import {postAddAddress} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n\n    export default {\n      data(){\n            return{\n    \t\t\tverify:false,\t\t\t//姓名\n    \t\t\tverifytwo:false,\t\t//备注\n    \t\t\tverifythree:false,\t\t//地址\n    \t\t\tverifyfour:false,\t\t//电话\n    \t\t\tverifyfive:false,\t\t//备用电话\n    \t\t\tbutpart:false,\t\t\t//新增地址按钮的透明度\n    \t\t\tsendaddress:'',  //地址\n    \t\t\tmessage:'', //信息\n    \t\t\tmesthree:'', //送餐地址\n    \t\t\ttelenum:'', //手机号\n    \t\t\ttelephone:'', //手机号提示\n    \t\t\tstandbytele:'', //备用手机号提示 \n    \t\t\tstandbytelenum:'', //备用手机号\n    \t\t\taddSearch:false, //添加搜索地址\n    \t\t\tnewAddress:{},\t\t\t//增加数组的元素\n                showAlert: false, //弹出框\n                alertText: null, //弹出信息\n            }\n        },\n        created(){\n\n        },\n        mixins: [getImgPath],\n        components: {\n            headTop,\n            alertTip,\n        },\n        computed:{\n             ...mapState([\n                'userInfo', 'addAddress','removeAddress','newAddress', 'geohash'\n            ]),\n            \n        },\n        props:[],\n        methods: {\n        \t...mapMutations([\n            \t'ADD_ADDRESS'\n            ]),\n            inputThing(){\n            \t(!this.message) ? this.verify=true : this.verify=false;\n            \tthis.bindThing()\n            },\n            //输入地址\n            inputThingthree(){\n            \tthis.verifythree=true;\n            \tif(this.mesthree.length == 0){\n            \t\tthis.sendaddress='请详细填写送餐地址';\n            \t\t\n            \t}else if(this.mesthree.length > 0 && this.mesthree.length <= 2){\n            \t\tthis.sendaddress='送餐地址太短了，不能辨识';\n            \t}else{\n            \t\tthis.sendaddress='';\n            \t\tthis.verifythree=false;\n            \t}\n            \tthis.bindThing()\t\n            },\n            //输入手机号\n            inputThingfour(){\n            \tthis.verifyfour=true;\n            \tif((/^[1][358][0-9]{9}$/).test(this.telenum)){\n            \t\tthis.verifyfour=false;\n            \t}else if(this.telenum == ''){\n            \t\tthis.telephone=\"手机号不能为空\"\n            \t}else{\n            \t\tthis.telephone=\"请输入正确的手机号\"\n            \t}\n            \tthis.bindThing()\n            },\n            //输入备注手机号\n            inputThingfive(){\n            \tthis.verifyfive=true;\n            \tif((/^[1][358][0-9]{9}$/).test(this.standbytelenum) || this.standbytelenum == ''){\n            \t\tthis.verifyfive=false;\n            \t}else{\n            \t\tthis.standbytele=\"请输入正确的手机号\"\n            \t}\n            \tthis.bindThing();\n            },\n            bindThing(){\n            \tif(this.message && this.mesthree && !this.verifyfour){\n            \t\tthis.butpart=true;\n            \t}else{\n            \t\tthis.butpart=false;\n            \t}\n            },\n            //保存地址\n            async submitThing(){\n                let res = await postAddAddress(this.userInfo.user_id, this.mesthree, this.addAddress, this.geohash, this.message, this.telenum, this.standbytelenum, 0, 1, '公司', 4);\n                if (res.message) {\n                    this.showAlert = true;\n                    this.alertText = res.message;\n                }else if(this.butpart){\n                    //保存的地址存入vuex\n            \t\tthis.ADD_ADDRESS({\n                        name: this.message,\n                        address: this.mesthree,\n                        address_detail: this.addAddress,\n                        geohash: 'wtw37r7cxep4',\n                        phone: this.telenum,\n                        phone_bk: this.standbytelenum,\n                        poi: this.addAddress,\n                        poi_type: 0,\n                    });\n            \t\tthis.$router.go(-1);\n                }\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \t.router-slid-enter-active, .router-slid-leave-active {\n  \t    transition: all .4s;\n  \t}\n  \t.router-slid-enter, .router-slid-leave-active {\n  \t    transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n  \t}\n    .rating_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f2f2f2;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .adddetail{\n    \tmargin-top:.4rem;\n    }\n    .ui-padding-block{\n    \tbackground:#fff;\n    \tpadding-top:.4rem;\n    \t.add-detail{display:block;}\n    \t.input-new{\n    \t\tpadding-bottom:.4rem;\n    \t\tinput{\n    \t\t\tdisplay:block;\n    \t\t\twidth:15rem;\n    \t\t\tfont-size:.6rem;\n    \t\t\tmargin:0 auto;\n    \t\t\tpadding:.3rem;\n    \t\t\tbackground:#f2f2f2;\n    \t\t\tborder:1px solid #ddd;\n    \t\t\t@include borderRadius(3px);\n    \t\t}\n    \t\t.verifies{\n\t\t\t\tborder-color:#ea3106;\n    \t\t}\n    \t\tp{\n\t\t\t\t@include sc(.4rem,#ea3106);\n\t\t\t\tpadding-left:.5rem;\n\t\t\t\tmargin-top:.2rem;\n    \t\t}\n    \t}\n    \t\n    }\n    .addbutton{\n    \tmargin:.6rem auto;\n    \twidth:15rem;\n    \tbackground:#4cd964;\n    \t@include borderRadius(3px);\n    \tbutton{\n    \t\twidth:100%;\n    \t\t@include sc(.6rem,#fff);\n    \t\tline-height:1.6rem;\n    \t\tbackground:none;\n    \t\tfont-weight:700;\n    \t\topacity:.6;\n    \t}\n    \t.butopacity{\n    \t\ttransition: all .4s;\n    \t\topacity:1;\n    \t}\n    }\n</style>\n"
  },
  {
    "path": "src/page/profile/children/children/children/children/addDetail.vue",
    "content": " <template>\n  \t<div class=\"rating_page\">\n        <head-top head-title=\"搜索地址\" go-back='true'></head-top>\n        <section>\n        \t<div class=\"add-detail\">\n        \t\t<input type=\"text\" placeholder=\"请输入小区/写字楼/学校等\" v-model=\"inputAdress\">\n        \t\t<button @click=\"inputThing\">确认</button>\n        \t</div>\n        \t<div class=\"warnpart\">为了满足商家的送餐要求，建议您从列表中选择地址</div>\n        \t<div class=\"point\" v-show=\"warning\">\n        \t\t<p>找不到地址？</p>\n        \t\t<p>请尝试输入小区、写字楼或学校名</p>\n        \t\t<p>详细地址（如门牌号）可稍后输入哦。</p>\n        \t</div>\n        </section>\n        <section class=\"poisearch-container\" v-show=\"adressList\">\n        \t<ul>\n        \t\t<li v-for=\"(item, index) in adressList\" @click=\"listClick(index)\">\n        \t\t\t<p>{{item.name}}</p>\n        \t\t\t<p>{{item.address}}</p>\n        \t\t</li>\n        \t</ul>\n        </section> \n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {searchNearby} from 'src/service/getData'\n    import {mapMutations, mapState} from 'vuex'\n    export default {\n      data(){\n            return{\n    \t\t\twarning:true,\n    \t\t\tinputAdress:'',\n    \t\t\tadressList:[],\t\t\t//地址列表\n            }\n        },\n        created(){\n        \tthis.inputAdress = this.addAddress ? this.addAddress : this.inputAdress\n        \t\n        },\n        mounted(){\n\n        \t// getSearchAddress(this.inputAdress).then(res => {\n        \t// \t\tthis.adressList=res;\n        \t// \t\tthis.warning=true;\n        \t// \tif(this.adressList.length > 0){\n        \t// \t\tthis.warning=false;\n        \t// \t\tif(this.inputAdress == ''){\n        \t// \t\t\tthis.adressList=[];\n        \t// \t\t\tthis.warning=true;\n        \t// \t\t}\n        \t// \t}\n        \t// });\n        \t\n        },\n        mixins: [getImgPath],\n        components: {\n            headTop,\n        },\n        computed:{\n        \t...mapState([\n                'addAddress'\n            ])\n        },\n        props:[],\n        methods: {\n        \t...mapMutations([\n        \t\t'SAVE_ADDDETAIL'\n        \t]),\n            //搜索地址\n            inputThing(){\n            \tsearchNearby(this.inputAdress).then(res => {\n            \t\t\tthis.adressList=res;\n            \t\t\tthis.warning=true;\n            \t\tif(this.adressList.length > 0){\n            \t\t\tthis.warning=false;\n            \t\t\tif(this.inputAdress == ''){\n            \t\t\t\tthis.adressList=[];\n            \t\t\t\tthis.warning=true;\n            \t\t\t}\n            \t\t}\n            \t});\n            },\n            //选择地址\n            listClick(index){\n            \tthis.SAVE_ADDDETAIL(this.adressList[index].name);\n            \tthis.$router.go(-1);\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f2f2f2;\n        z-index: 205;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .add-detail{\n    \t@include fj(space-between);\n    \tbackground:#fff;\n    \tpadding:.5rem;\n    \tinput{\n    \t\tdisplay:block;\n    \t\twidth:11.8rem;\n    \t\tpadding:.4rem;\n    \t\tbackground:#f2f2f2;\n    \t\tborder:1px solid #ddd;\n    \t\t@include borderRadius(5px);\n    \t\tfont-size:.6rem;\n    \t}\n    \tbutton{\n    \t\tdisplay:block;\n    \t\twidth:3rem;\n    \t\tbackground:#3199e8;\n    \t\t@include sc(.7rem,#fff);\n    \t\t@include borderRadius(5px);\n    \t}\n    }\n    .warnpart{\n    \tbackground:#FFF6E4;\n    \t@include sc(.62rem,#FF883F);\n    \ttext-align:center;\n    \tpadding: .2rem 0;\n    }\n    .point{\n    \t@include center;\n    \twidth:100%;\n    \tp{\n    \t\twidth:100%;\n\t\t\ttext-align:center;\n\t\t\t@include sc(.7rem,#969696);\n\t\t\tmargin-bottom:.4rem;\n    \t}\n    }\n    .poisearch-container{\n    \tbackground:#f2f2f2;\n    \tli{\n    \t\tborder-bottom:1px solid #ccc;\n    \t\tpadding:.4rem;\n    \t\tp{\n    \t\t\t@include sc(.65rem,#969696);\n    \t\t}\n    \t\tp:first-child{\n    \t\t\tmargin-bottom:.2rem;\n    \t\t}\n    \t}\n    \tli:last-child{\n    \t\tborder:0;\n    \t}\n    }\n</style>\n"
  },
  {
    "path": "src/page/profile/children/children/setusername.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <head-top head-title=\"修改用户名\" go-back='true'></head-top>\n        <section class=\"setname\">\n            <section class=\"setname-top\">\n                <input type=\"text\" placeholder=\"输入用户名\" :class=\"{'setname-input':bordercolor}\" @input=\"inputThing\" v-model=\"inputValue\">\n                <div>\n                    <p v-if=\"earn\">用户名只能修改一次（5-24字符之间）</p>\n                    <p class=\"unlikep\" v-else>用户名长度在5到24位之间</p>\n                </div>\n            </section>\n            <section class=\"reset\">\n                <button :class=\"{fontopacity:opacityall}\" @click=\"resetName\">确认修改</button>\n            </section>\n        </section>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {mapMutations,mapState} from 'vuex'\n    export default {\n      data(){\n            return{\n                earn: true,     //输入框提醒\n                bordercolor: false,  //输入框边框颜色\n                opacityall: false,   //字体透明度\n                inputValue: '',       //输入框的内容\n                newusername: ''         //新用户名\n            }\n        },\n        created(){\n\n        },\n        mixins: [getImgPath],\n        components: {\n            headTop,\n\n        },\n        mounted(){\n\n        },\n        computed:{\n            ...mapState([\n                'userInfo'\n            ])\n        },\n        props:[],\n        methods: {\n            ...mapMutations([\n                'RETSET_NAME'\n            ]),\n            inputThing(){\n                if(this.inputValue.length <5 || this.inputValue.length>24){\n                    this.earn=false;\n                    this.bordercolor=true;\n                    this.opacityall=false;\n                    return false;\n                }else{\n                    this.earn=true;\n                    this.bordercolor=false;\n                    this.opacityall=true;\n                    return true;\n                }\n            },\n            resetName(){\n                let checkResult = this.inputThing();\n                if (!checkResult) {\n                  return;\n                }\n                this.RETSET_NAME(this.inputValue);\n                this.$router.go(-1);\n            }\n        }\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\n    .rating_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        z-index: 202;\n        background:#f2f2f2;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .setname{\n        width:15.2rem;\n        margin:0 auto;\n        .setname-top{\n            padding-top:.4rem;\n            input{\n                background:none;\n                width:15.2rem;\n                border:1px solid #ddd;\n                @include borderRadius(2px);\n                padding:.2rem .1rem;\n                line-height:1.2rem;\n                font-size:.7rem;\n                display:block;\n            }\n            .setname-input{\n                border-color:#ea3106;\n            }\n            p{\n                width:100%;\n                @include sc(.4rem,#666);\n                padding:.4rem 0 1rem;\n            }\n            .unlikep{\n                @include sc(.58rem,#ea3106);\n                padding-top:.1rem;\n            }\n        }\n        .reset{\n            width:100%;\n            background:#3199e8;\n            button{\n                display:block;\n                width:100%;\n                background:none;\n                line-height:2rem;\n                @include sc(.7rem,#fff);\n                opacity:.6;\n                transition: all 1s;\n            }\n            .fontopacity{\n                transition: all 1s;\n                opacity:1;\n            }\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/profile/children/info.vue",
    "content": " <template>\n    <div class=\"rating_page\">\n        <head-top head-title=\"账户信息\" go-back='true'></head-top>\n        <section class=\"profile-info\">\n            <section class=\"headportrait\">\n                <input type=\"file\" class=\"profileinfopanel-upload\" @change=\"uploadAvatar\">\n                <h2>头像</h2>\n                <div class=\"headportrait-div\">\n                    <img  v-if=\"userInfo\" :src=\"imgBaseUrl + userInfo.avatar\" class=\"headportrait-div-top\">\n                    <span class=\"headportrait-div-top\" v-else>\n                        <svg>\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#avatar-default\"></use>\n                        </svg>\n                    </span>\n                    <span class=\"headportrait-div-bottom\">\n                        <svg fill=\"#d8d8d8\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                        </svg>\n                    </span>\n                </div>\n            </section>\n            <router-link to=\"/profile/info/setusername\" class=\"info-router\">\n                <section class=\"headportrait headportraitwo\">\n                    <h2>用户名</h2>\n                    <div class=\"headportrait-div\">\n                        <p>{{username}}</p>\n                        <span class=\"headportrait-div-bottom\">\n                            <svg fill=\"#d8d8d8\">\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                            </svg>\n                        </span>\n                    </div>\n                </section>\n            </router-link>\n            <router-link to=\"/profile/info/address\" class=\"info-router\">\n                <section class=\"headportrait headportraitwo headportraithree\">\n                        <h2>收货地址</h2>\n                        <div class=\"headportrait-div\">\n                            <span class=\"headportrait-div-bottom\">\n                                <svg fill=\"#d8d8d8\">\n                                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                                </svg>\n                            </span>\n                        </div>\n                </section>\n            </router-link>\n            <section class=\"bind-phone\">\n                账号绑定\n            </section>\n            <section class=\"info-router\" @click=\"changePhone\">\n                <section class=\"headportrait headportraitwo headportraithree\">\n                        <h2><img src=\"../../../images/bindphone.png\" style=\"display:inline-block;margin-right:.4rem;\" alt=\"\">手机</h2>\n                        <div class=\"headportrait-div\">\n                            <p>{{infotel}}</p>\n                            <span class=\"headportrait-div-bottom\">\n                                <svg fill=\"#d8d8d8\">\n                                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                                </svg>\n                            </span>\n                        </div>\n                </section>\n            </section>\n            <section class=\"bind-phone\">\n                安全设置\n            </section>\n            <router-link to=\"/forget\" class=\"info-router\">\n                <section class=\"headportrait headportraitwo headportraithree\">\n                        <h2>登录密码</h2>\n                        <div class=\"headportrait-div\">\n                            <p>修改</p>\n                            <span class=\"headportrait-div-bottom\">\n                                <svg fill=\"#d8d8d8\">\n                                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                                </svg>\n                            </span>\n                        </div>\n                </section>\n            </router-link>\n            <section class=\"exitlogin\" @click=\"exitlogin\">退出登录</section>\n        </section>\n\n        <section class=\"coverpart\" v-if=\"show\">\n            <section class=\"cover-background\"></section>\n            <section class=\"cover-content \" :class=\"{'cover-animate' : isEnter, 'cover-animate-leave' : isLeave}\">\n                <div class=\"sa-icon\">\n                    <span class=\"sa-body\"></span>\n                    <span class=\"sa-dot\"></span>\n                </div>\n                <h2>是否退出登录</h2>\n                <div class=\"sa-botton\">\n                    <button class=\"waiting\" @click=\"waitingThing\">再等等</button>\n                    <div style=\"display:inline-block;\">\n                        <button class=\"quitlogin\"  @click=\"outLogin\">退出登录</button>\n                    </div>\n                </div>\n            </section>\n        </section>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import {mapMutations, mapState} from 'vuex'\n    import headTop from 'src/components/header/head'\n    import {signout} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {imgBaseUrl} from 'src/config/env'\n    import {removeStore} from 'src/config/mUtils'\n\n    export default {\n        data(){\n            return{\n                username:'',    //用户名\n                resetname:'', //重置用户名\n                infotel:'',     //用户手机\n                avatar:'',      //用户头像\n                show:false,     //显示提示框\n                isEnter:true,  //是否登录\n                isLeave:false, //是否退出\n                showAlert: false,\n                alertText: null,\n                imgBaseUrl,\n            }\n        },\n        beforeDestroy(){\n            clearTimeout(this.timer)\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        mixins: [getImgPath],\n        computed:{\n            ...mapState([\n                'userInfo', 'imgPath'\n            ]),\n        },\n        methods: {\n            ...mapMutations([\n                'OUT_LOGIN', 'SAVE_AVANDER'\n            ]),\n\n            exitlogin(){\n                this.show=true;\n                this.isEnter=true;\n                this.isLeave=false;\n            },\n            waitingThing(){\n                //取消推出\n                clearTimeout(this.timer)\n                this.isEnter=false;\n                this.isLeave=true;\n                this.timer = setTimeout(() =>{\n                    clearTimeout(this.timer)\n                    this.show=false;\n                },200)\n            },\n            //退出登录\n            async outLogin(){\n                this.OUT_LOGIN();\n                this.waitingThing();\n                this.$router.go(-1);\n                removeStore('user_id')\n                await signout();\n            },\n            changePhone(){\n                this.showAlert = true;\n                this.alertText = '请在手机APP中设置';\n            },\n            async uploadAvatar(){\n                //上传头像\n                if (this.userInfo) {\n                    let input = document.querySelector('.profileinfopanel-upload')\n                    let data = new FormData();\n                    data.append('file', input.files[0]);\n                    try{\n                        let response = await fetch('/eus/v1/users/' + this.userInfo.user_id + '/avatar', {\n                              method: 'POST',\n                              credentials: 'include',\n                              body: data\n                            })\n                        let res = await response.json();\n                        if (res.status == 1) {\n                            this.userInfo.avatar = res.image_path;\n                        }\n                    }catch (error) {\n                        this.showAlert = true;\n                        this.alertText = '上传失败';\n                        throw new Error(error);\n                    }\n                }\n            }\n        },\n        watch: {\n            userInfo: function (value) {\n                if (value && value.user_id) {\n                    this.username = value.username;\n                    this.infotel = value.mobile;\n                    this.avatar = value.avatar;\n                }\n            }\n        }\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin.scss';\n\n    .rating_page{\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f2f2f2;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .profile-info{\n        @include wh(100%,3.1rem);\n        .profileinfopanel-upload{\n            display: block;\n            position: absolute;\n            opacity: 0;\n            top: 2.35rem;\n            left: 0;\n            @include wh(100%,3.1rem);\n        }\n        .headportrait{\n            margin-top:.4rem;\n            padding:.5rem .4rem;\n            @include fj(space-between);\n            align-items:center;\n            border-top:1px solid #ddd;\n            background:#fff;\n\n            h2{\n                @include sc(.6rem,#333);\n                font-weight:500;\n                display:flex;\n                align-items:center;\n            }\n            .headportrait-div{\n                span{\n                    display:inline-block;\n\n                    svg{\n                        @include wh(100%,100%);\n                    }\n                }\n                .headportrait-div-top{\n                    @include wh(2rem,2rem);\n                    @include borderRadius(50%);\n                    vertical-align:middle;\n                }\n                .headportrait-div-bottom{\n                    @include wh(.66667rem,1.4rem);\n                    position:relative;\n                    top:0.44rem;\n                }\n            }\n        }\n        .headportraitwo{\n            margin-top:0;\n            padding:.3rem .4rem;\n            .headportrait-div{\n                @include fj(left)\n                p{\n                    text-align:left;\n                    line-height:1.39rem;\n                    @include sc(.7rem,#999);\n                    margin-right:.2rem;\n                    font-weight:100;\n                    font-family:Arial;\n                }\n                .headportrait-div-bottom{\n                    top:0;\n                }\n            }\n        }\n        .headportraithree{\n            border-bottom:1px solid #ddd;\n        }\n        .bind-phone{\n            padding:.4rem .4rem;\n            @include sc(.5rem,#666);\n        }\n        .exitlogin{\n            width:96%;\n            margin:1.3rem auto 0;\n            line-height:1.5rem;\n            @include borderRadius(5px);\n            text-align:center;\n            background:#d8584a;\n            @include sc(.6rem,#fff);\n\n        }\n        .exitlogin:active{\n            opacity:.8;\n            background:#C1C1C1;\n        }\n    }\n    .info-router{\n        display:block;\n    }\n    .coverpart{\n        @include wh(100%,100%);\n        @include allcover;\n        .cover-background{\n            @include wh(100%,100%);\n            @include allcover;\n            background:#000;\n            z-index:100;\n            opacity:.2;\n        }\n        .cover-content{\n            width:94%;\n            background:$fc;\n            padding:17px;\n            position:absolute;\n            top:20%;\n            left:3%;\n            z-index:1000;\n            @include borderRadius(5px);\n            .sa-icon{\n                @include wh(90px,90px);\n                border:4px solid #f8bb86;\n                @include borderRadius(50%);\n                margin:20px auto;\n                position:relative;\n                .sa-body{\n                    @include wh(5px,47px);\n                    @include borderRadius(2px);\n                    background:#f8bb86;\n                    @include cl;\n                    top:10px;\n                }\n                .sa-dot{\n                    @include wh(7px,7px);\n                    @include borderRadius(50%);\n                    background:#f8bb86;\n                    @include cl;\n                    bottom:10px;\n                }\n            }\n            h2{\n                width:100%;\n                text-align:center;\n                @include sc(30px,#575757);\n                font-weight:500;\n                margin:25px 0;\n            }\n            .sa-botton{\n                width:100%;\n                text-align:center;\n\n                button{\n                    display:inline-block;\n                    padding:.4rem 1rem;\n                    @include borderRadius(5px);\n                    @include sc(.6rem,$fc);\n                    letter-spacing:1px;\n                    margin-top:26px;\n                }\n                .waiting{\n                    background:#C1C1C1;\n                    margin-right:.4rem;\n                }\n                .quitlogin{\n                    background:rgb(221, 107, 85);\n                }\n            }\n\n        }\n    }\n    @-webkit-keyframes bounceIn {\n  from, 20%, 40%, 60%, 80%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(.9, .9, .9);\n    transform: scale3d(.9, .9, .9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(.97, .97, .97);\n    transform: scale3d(.97, .97, .97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes bounceIn {\n  from, 20%, 40%, 60%, 80%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(.9, .9, .9);\n    transform: scale3d(.9, .9, .9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(.97, .97, .97);\n    transform: scale3d(.97, .97, .97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n@-webkit-keyframes zoomOut {\n  from {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes zoomOut {\n  from {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\nbody .coverpart .cover-animate{\n    transition:all 1s;\n    animation:bounceIn .6s;\n}\nbody .coverpart .cover-animate-leave{\n    animation:zoomOut .4s;\n}\n.router-slid-enter-active, .router-slid-leave-active {\n    transition: all .4s;\n}\n.router-slid-enter, .router-slid-leave-active {\n    transform: translate3d(2rem, 0, 0);\n    opacity: 0;\n}\n</style>\n"
  },
  {
    "path": "src/page/profile/profile.vue",
    "content": "<template>\r\n    <div class=\"profile_page\">\r\n        <head-top go-back='true' :head-title=\"profiletitle\"></head-top>\r\n        <section>\r\n            <section class=\"profile-number\">\r\n                <router-link :to=\"userInfo&&userInfo.user_id? '/profile/info' : '/login'\" class=\"profile-link\">\r\n                    <img :src=\"imgBaseUrl + userInfo.avatar\" class=\"privateImage\" v-if=\"userInfo&&userInfo.user_id\">\r\n                    <span class=\"privateImage\" v-else>\r\n                        <svg class=\"privateImage-svg\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#avatar-default\"></use>\r\n                        </svg>\r\n                    </span>\r\n                    <div class=\"user-info\">\r\n                        <p>{{username}}</p>\r\n                        <p>\r\n                            <span class=\"user-icon\">\r\n                                <svg class=\"icon-mobile\" fill=\"#fff\">\r\n                                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#mobile\"></use>\r\n                                </svg>\r\n                            </span>\r\n                            <span class=\"icon-mobile-number\">{{mobile}}</span>\r\n                        </p>\r\n                    </div>\r\n                    <span class=\"arrow\">\r\n                        <svg class=\"arrow-svg\" fill=\"#fff\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                        </svg>\r\n                    </span>\r\n                </router-link>\r\n            </section>\r\n            <section class=\"info-data\">\r\n                <ul class=\"clear\">\r\n                    <router-link to=\"/balance\" tag=\"li\" class=\"info-data-link\">\r\n                        <span class=\"info-data-top\"><b>{{parseInt(balance).toFixed(2)}}</b>元</span>\r\n                        <span class=\"info-data-bottom\">我的余额</span>\r\n                    </router-link>\r\n                    <router-link to=\"/benefit\" tag=\"li\" class=\"info-data-link\">\r\n                        <span class=\"info-data-top\"><b>{{count}}</b>个</span>\r\n                        <span class=\"info-data-bottom\">我的优惠</span>\r\n                    </router-link>\r\n                    <router-link to=\"/points\" tag=\"li\" class=\"info-data-link\">\r\n                        <span class=\"info-data-top\"><b>{{pointNumber}}</b>分</span>\r\n                        <span class=\"info-data-bottom\">我的积分</span>\r\n                    </router-link>\r\n                </ul>\r\n            </section>\r\n            <section class=\"profile-1reTe\">\r\n                <!-- 我的订单 -->\r\n                <router-link to='/order' class=\"myorder\">\r\n                    <aside>\r\n                        <svg fill=\"#4aa5f0\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#order\"></use>\r\n                        </svg>\r\n                    </aside>\r\n                    <div class=\"myorder-div\">\r\n                        <span>我的订单</span>\r\n                        <span class=\"myorder-divsvg\">\r\n                            <svg fill=\"#bbb\">\r\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                            </svg>\r\n                        </span>\r\n                    </div>\r\n                </router-link>\r\n                <!-- 积分商城 -->\r\n                <a href='https://home.m.duiba.com.cn/#/chome/index' class=\"myorder\">\r\n                    <aside>\r\n                        <svg fill=\"#fc7b53\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#point\"></use>\r\n                        </svg>\r\n                    </aside>\r\n                    <div class=\"myorder-div\">\r\n                        <span>积分商城</span>\r\n                        <span class=\"myorder-divsvg\">\r\n                            <svg fill=\"#bbb\">\r\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                            </svg>\r\n                        </span>\r\n                    </div>\r\n                </a>\r\n                <!-- 饿了么会员卡 -->\r\n                <router-link to='/vipcard' class=\"myorder\">\r\n                    <aside>\r\n                        <svg fill=\"#ffc636\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#vip\"></use>\r\n                        </svg>\r\n                    </aside>\r\n                    <div class=\"myorder-div\">\r\n                        <span>饿了么会员卡</span>\r\n                        <span class=\"myorder-divsvg\">\r\n                            <svg fill=\"#bbb\">\r\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                            </svg>\r\n                        </span>\r\n                    </div>\r\n                </router-link>\r\n            </section>\r\n            <section class=\"profile-1reTe\">\r\n                <!-- 服务中心 -->\r\n                <router-link to='/service' class=\"myorder\">\r\n                    <aside>\r\n                        <svg fill=\"#4aa5f0\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#service\"></use>\r\n                        </svg>\r\n                    </aside>\r\n                    <div class=\"myorder-div\">\r\n                        <span>服务中心</span>\r\n                        <span class=\"myorder-divsvg\">\r\n                            <svg fill=\"#bbb\">\r\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                            </svg>\r\n                        </span>\r\n                    </div>\r\n                </router-link>\r\n                <!-- 下载饿了么APP -->\r\n                <router-link to='/download' class=\"myorder\">\r\n                    <aside>\r\n                        <svg fill=\"#3cabff\">\r\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#download\"></use>\r\n                        </svg>\r\n                    </aside>\r\n                    <div class=\"myorder-div\" style=\"border-bottom:0;\">\r\n                        <span>下载饿了么APP</span>\r\n                        <span class=\"myorder-divsvg\">\r\n                            <svg fill=\"#bbb\">\r\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                            </svg>\r\n                        </span>\r\n                    </div>\r\n                </router-link>\r\n            </section>\r\n        </section>\r\n        <foot-guide></foot-guide>\r\n        <transition name=\"router-slid\" mode=\"out-in\">\r\n            <router-view></router-view>\r\n        </transition>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\nimport headTop from 'src/components/header/head'\r\nimport footGuide from 'src/components/footer/footGuide'\r\nimport {mapState, mapMutations} from 'vuex'\r\nimport {imgBaseUrl} from 'src/config/env'\r\nimport {getImgPath} from 'src/components/common/mixin'\r\n\r\nexport default {\r\n    data(){\r\n        return{\r\n            profiletitle: '我的',\r\n            username: '登录/注册',           //用户名\r\n            resetname: '',\r\n            mobile: '暂无绑定手机号',             //电话号码\r\n            balance: 0,            //我的余额\r\n            count : 0,             //优惠券个数\r\n            pointNumber : 0,       //积分数\r\n            avatar: '',             //头像地址\r\n            imgBaseUrl,\r\n        }\r\n    },\r\n    mounted(){\r\n        this.initData();\r\n    },\r\n    mixins: [getImgPath],\r\n    components:{\r\n        headTop,\r\n        footGuide,\r\n    },\r\n\r\n    computed:{\r\n        ...mapState([\r\n            'userInfo',\r\n        ]),\r\n        //后台会返回两种头像地址格式，分别处理\r\n        imgpath:function () {\r\n            let path;\r\n            if(this.avatar.indexOf('/') !==-1){\r\n                path = imgBaseUrl +　this.avatar;\r\n            }else{\r\n                path = this.getImgPath(this.avatar)\r\n            }\r\n            this.SAVE_AVANDER(path);\r\n            return path;\r\n        }\r\n    },\r\n\r\n    methods:{\r\n        ...mapMutations([\r\n            'SAVE_AVANDER'\r\n        ]),\r\n        initData(){\r\n            if (this.userInfo && this.userInfo.user_id) {\r\n                this.avatar = this.userInfo.avatar;\r\n                this.username = this.userInfo.username;\r\n                this.mobile = this.userInfo.mobile || '暂无绑定手机号';\r\n                this.balance = this.userInfo.balance;\r\n                this.count = this.userInfo.gift_amount;\r\n                this.pointNumber = this.userInfo.point;\r\n            }else{\r\n                this.username = '登录/注册';\r\n                this.mobile = '暂无绑定手机号';\r\n            }\r\n        },\r\n    },\r\n    watch: {\r\n        userInfo: function (value){\r\n            this.initData()\r\n        }\r\n    }\r\n}\r\n\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n   @import 'src/style/mixin';\r\n\r\n    .profile_page{\r\n        p, span{\r\n            font-family: Helvetica Neue,Tahoma,Arial;\r\n        }\r\n    }\r\n   .profile-number{\r\n        padding-top:1.95rem;\r\n        .profile-link{\r\n            display:block;\r\n            display:flex;\r\n            box-align: center;\r\n            -webkit-box-align: center;\r\n            -ms-flex-align: center;\r\n            align-items: center;\r\n            background:$blue;\r\n            padding: .666667rem .6rem;\r\n            .privateImage{\r\n                display:inline-block;\r\n                @include wh(2.5rem,2.5rem);\r\n                border-radius:50%;\r\n                vertical-align:middle;\r\n                .privateImage-svg{\r\n                    background:$fc;\r\n                    border-radius:50%;\r\n                    @include wh(2.5rem,2.5rem);\r\n                }\r\n            }\r\n            .user-info{\r\n                margin-left:.48rem;\r\n                -webkit-box-flex: 1;\r\n                -ms-flex-positive: 1;\r\n                flex-grow: 1;\r\n                p{\r\n                    font-weight:700;\r\n                    @include sc(.8rem,$fc);\r\n                    .user-icon{\r\n                        @include wh(0.5rem,0.75rem);\r\n                        display:inline-block;\r\n                        vertical-align:middle;\r\n                        line-height:0.75rem;\r\n                        .icon-mobile{\r\n                            @include wh(100%,100%);\r\n                        }\r\n                    }\r\n                    .icon-mobile-number{\r\n                        display:inline-block;\r\n                        @include sc(.57333rem,$fc);\r\n\r\n                    }\r\n                }\r\n\r\n            }\r\n            .arrow{\r\n                @include wh(.46667rem,.98rem);\r\n                display:inline-block;\r\n                svg{\r\n                   @include wh(100%,100%);\r\n                }\r\n            }\r\n        }\r\n   }\r\n   .info-data{\r\n        width:100%;\r\n        background:$fc;\r\n        box-sizing: border-box;\r\n        ul{\r\n            .info-data-link{\r\n                float:left;\r\n                width:33.33%;\r\n                display:inline-block;\r\n                border-right:1px solid #f1f1f1;\r\n                span{\r\n                    display:block;\r\n                    width:100%;\r\n                    text-align:center;\r\n                }\r\n                .info-data-top{\r\n                    @include sc(.55rem,#333);\r\n                    padding: .853333rem 0 .453333rem;\r\n                    b{\r\n                        display:inline-block;\r\n                        @include sc(1.2rem,#f90);\r\n                        font-weight:700;\r\n                        line-height:1rem;\r\n                        font-family: Helvetica Neue,Tahoma;\r\n                    }\r\n                }\r\n                .info-data-bottom{\r\n                    @include sc(.57333rem,#666);\r\n                    font-weight:400;\r\n                    padding-bottom:.453333rem;\r\n\r\n                }\r\n            }\r\n            .info-data-link:nth-of-type(2){\r\n                .info-data-top{\r\n                    b{\r\n                        color:#ff5f3e;\r\n                    }\r\n                }\r\n\r\n            }\r\n            .info-data-link:nth-of-type(3){\r\n                border:0;\r\n                .info-data-top{\r\n                    b{\r\n                        color:#6ac20b;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n   }\r\n   .profile-1reTe{\r\n        margin-top:.4rem;\r\n        background:$fc;\r\n        .myorder{\r\n            padding-left:1.6rem;\r\n            display:flex;\r\n            align-items: center;\r\n            aside{\r\n                @include wh(.7rem,.7rem);\r\n                margin-left:-.866667rem;\r\n                margin-right:.266667rem;\r\n                display:flex;\r\n                align-items: center;\r\n                svg{\r\n                    @include wh(100%,100%);\r\n                }\r\n            }\r\n            .myorder-div{\r\n                width:100%;\r\n                border-bottom:1px solid #f1f1f1;\r\n                padding:.433333rem .266667rem .433333rem 0;\r\n                @include sc(.7rem,#333);\r\n                display:flex;\r\n                justify-content:space-between;\r\n                span{\r\n                    display:block;\r\n                }\r\n                .myorder-divsvg{\r\n                    @include wh(.46667rem,.466667rem);\r\n                    svg{\r\n                        @include wh(100%,100%);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        .myorder:nth-of-type(3) .myorder-div{\r\n            border:0;\r\n        }\r\n    }\r\n    .router-slid-enter-active, .router-slid-leave-active {\r\n        transition: all .4s;\r\n    }\r\n    .router-slid-enter, .router-slid-leave-active {\r\n        transform: translate3d(2rem, 0, 0);\r\n        opacity: 0;\r\n    }\r\n</style>\r\n"
  },
  {
    "path": "src/page/search/search.vue",
    "content": "<template>\n  \t<div class=\"paddingTop search_page\">\n        <head-top head-title=\"搜索\" goBack=\"true\"></head-top>\n        <form class=\"search_form\">\n            <input type=\"search\" name=\"search\" placeholder=\"请输入商家或美食名称\" class=\"search_input\" v-model=\"searchValue\" @input=\"checkInput\">\n            <input type=\"submit\" name=\"submit\" class=\"search_submit\" @click.prevent=\"searchTarget('')\">\n        </form>\n        <section v-if=\"restaurantList.length\">\n            <h4 class=\"title_restaurant\">商家</h4>\n            <ul class=\"list_container\">\n                <router-link :to=\"{path:'/shop', query:{id:item.id}}\" tag=\"li\" v-for=\"item in restaurantList\" :key=\"item.id\" class=\"list_li\">\n                    <section class=\"item_left\">\n                        <img :src=\"imgBaseUrl + item.image_path\" class=\"restaurant_img\">\n                    </section>\n                    <section class=\"item_right\">\n                        <div class=\"item_right_text\">\n                            <p>\n                                <span>{{item.name}}</span>\n                                <svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" width=\"24\" height=\"14\" class=\"pay_icon\">\n                                    <polygon points=\"0,14 4,0 24,0 20,14\" style=\"fill:none;stroke:#FF6000;stroke-width:1\" />\n                                    <line x1=\"1.5\" y1=\"12\" x2=\"20\" y2=\"12\" style=\"stroke:#FF6000;stroke-width:1.5\"/>\n                                    <text x=\"3.5\" y=\"9\" style=\"fill:#FF6000;font-size:9;font-weight:bold;\">支付</text>\n                                </svg>\n                            </p>\n                            <p>月售 {{item.month_sales||item.recent_order_num}} 单</p>\n                            <p>{{item.delivery_fee||item.float_minimum_order_amount}} 元起送 / 距离{{item.distance}}</p>\n                        </div>\n                        <ul class=\"item_right_detail\">\n                            <li v-for=\"activities in item.restaurant_activity\" :key=\"activities.id\">\n                                <span :style=\"{backgroundColor: '#' + activities.icon_color}\" class=\"activities_icon\">{{activities.icon_name}}</span>\n                                <span>{{activities.name}}</span>\n                                <span class=\"only_phone\">(手机客户端专享)</span>\n                            </li>\n                        </ul>\n                    </section>\n                </router-link>\n            </ul>\n        </section>\n        <section class=\"search_history\" v-if=\"searchHistory.length&&showHistory\">\n            <h4 class=\"title_restaurant\">搜索历史</h4>\n            <ul>\n                <li v-for=\"(item, index) in searchHistory\" :key=\"index\" class=\"history_list\">\n                    <span class=\"history_text ellipsis\" @click=\"searchTarget(item)\">{{item}}</span>\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"delete_icon\" @click=\"deleteHistory(index)\">\n                        <line x1=\"8\" y1=\"8\" x2=\"18\" y2=\"18\" style=\"stroke:#999;stroke-width:3\" />\n                        <line x1=\"18\" y1=\"8\" x2=\"8\" y2=\"18\" style=\"stroke:#999;stroke-width:3\" />\n                    </svg>\n                </li>\n            </ul>\n            <footer class=\"clear_history\" @click=\"clearAllHistory\">清空搜索历史</footer>\n        </section>\n        <div class=\"search_none\" v-if=\"emptyResult\">很抱歉！无搜索结果</div>\n        <foot-guide></foot-guide>\n    </div>\n</template>\n\n<script>\nimport headTop from '../../components/header/head'\nimport footGuide from '../../components/footer/footGuide'\nimport {searchRestaurant} from '../../service/getData'\nimport {imgBaseUrl} from '../../config/env'\nimport {getStore, setStore} from '../../config/mUtils'\n\nexport default {\n\tdata(){\n        return {\n            geohash: '', // msite页面传递过来的地址信息\n            searchValue: '', // 搜索内容\n            restaurantList: [], // 搜索返回的结果\n            imgBaseUrl, // 图片域名地址\n            searchHistory: [], // 搜索历史记录\n            showHistory: true, // 是否显示历史记录，只有在返回搜索结果后隐藏\n            emptyResult: false, // 搜索结果为空时显示\n        }\n    },\n    created(){\n       \n    },\n    mounted(){\n        this.geohash = this.$route.params.geohash;\n        //获取搜索历史记录\n        if (getStore('searchHistory')) {\n            this.searchHistory = JSON.parse(getStore('searchHistory'));\n        }\n    },\n    components:{\n        headTop,\n        footGuide,\n    },\n    methods:{\n        //点击提交按钮，搜索结果并显示，同时将搜索内容存入历史记录\n        async searchTarget(historyValue){\n            if (historyValue) {\n                this.searchValue = historyValue;\n            }else if (!this.searchValue) {\n                return \n            }\n            //隐藏历史记录\n            this.showHistory = false;\n            //获取搜索结果\n            this.restaurantList = await searchRestaurant(this.geohash, this.searchValue);\n            this.emptyResult = !this.restaurantList.length;\n            /**\n             * 点击搜索结果进入下一页面时进行判断是否已经有一样的历史记录\n             * 如果没有则新增，如果有则不做重复储存，判断完成后进入下一页\n             */\n            let history = getStore('searchHistory');\n            if (history) { \n                let checkrepeat = false;\n                this.searchHistory = JSON.parse(history);\n                this.searchHistory.forEach(item => {\n                    if (item == this.searchValue) {\n                        checkrepeat = true;\n                    }\n                })\n                if (!checkrepeat) {\n                    this.searchHistory.push(this.searchValue)\n                }\n            }else {\n                this.searchHistory.push(this.searchValue)\n            }\n            setStore('searchHistory',this.searchHistory)\n        },\n        //搜索结束后，删除搜索内容直到为空时清空搜索结果，并显示历史记录\n        checkInput(){\n            if (this.searchValue === '') {\n                this.showHistory = true; //显示历史记录\n                this.restaurantList = []; //清空搜索结果\n                this.emptyResult = false; //隐藏搜索为空提示\n            } \n        },\n        //点击删除按钮，删除当前历史记录\n        deleteHistory(index){\n            this.searchHistory.splice(index, 1);\n            setStore('searchHistory',this.searchHistory);\n        },\n        //清除所有历史记录\n        clearAllHistory(){\n            this.searchHistory = [];\n            setStore('searchHistory',this.searchHistory);\n        }\n    }\n}\n\n</script>\n\n<style lang=\"scss\" scoped>\n    @import '../../style/mixin';\n    \n    .search_page{\n        margin-bottom: 2rem;\n    }\n    .search_form{\n        background-color: #fff;\n        padding: 0.5rem;\n        display: flex;\n        input{\n            height: 1.5rem;\n        }\n        .search_input{\n            flex: 4;\n            border: 0.025rem solid $bc;\n            @include sc(0.65rem, #333);\n            border-radius: 0.125rem;\n            background-color: #f2f2f2;\n            font-weight: bold;\n            padding: 0 0.25rem;\n        }\n        .search_submit{\n            flex: 1;\n            border: 0.025rem solid $blue;\n            margin-left: .2rem;\n            @include sc(0.65rem, #fff);\n            border-radius: 0.125rem;\n            background-color: $blue;\n            font-weight: bold;\n            padding: 0 0.25rem;\n        }\n    }\n    .title_restaurant{\n        font-size: 0.6rem;\n        line-height: 2rem;\n        text-indent: 0.5rem;\n        font-weight: bold;\n        color: #666;\n    }\n    .list_container{\n        background-color: #fff;\n    }\n    .list_li{\n        display: flex;\n        justify-content: 'center';\n        padding: 0.5rem;\n        border-bottom: 0.025rem solid $bc;\n        .item_left{\n            margin-right: 0.25rem;\n            .restaurant_img{\n                @include wh(1.7rem, 1.7rem);\n            }\n        }\n        .item_right{\n            font-size: 0.55rem;\n            flex: 1;\n            .item_right_text{\n                padding-bottom: 0.25rem;\n                border-bottom: 0.025rem solid $bc;\n                p{\n                    line-height: .9rem;\n                }\n                .pay_icon{\n                    margin-bottom: -0.08rem;\n                }\n            }\n            .item_right_detail{\n                margin-top: 0.25rem;\n                li{\n                    font-size: 0;\n                    span{\n                        font-size: .5rem;\n                        vertical-align: middle;\n                        display: inline-block;\n                        margin-bottom: 0.2rem;\n                    }\n                    .activities_icon{\n                        @include sc(.5rem, #fff);\n                        font-weight: bold;\n                        padding: .04rem;\n                        border-radius: 0.15rem;\n                        margin-right: 0.125rem;\n                    }\n                    .only_phone{\n                        color: #FF6000;\n                    }\n                }\n            }\n        }\n    }\n    .search_history{\n        .history_list{\n            background-color: #fff;\n            border-bottom: 0.025rem solid $bc;\n            @include font(0.7rem, 2rem);\n            padding: 0 0.3rem;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            .history_text{\n                display: inline-block;\n                width: 80%;\n            }\n            .delete_icon{\n                @include wh(1rem, 1rem);\n            }\n        }\n        .clear_history{\n            background-color: #fff;\n            color: $blue;\n            @include font(.7rem, 2rem);\n            font-weight: bold;\n            text-align: center;\n        }\n    }\n    .search_none{\n        margin: 0 auto;\n        @include font(0.65rem, 1.75rem);\n        color: #333;\n        background-color: #fff;\n        text-align: center;\n        margin-top: 0.125rem;\n    }\n</style>\n"
  },
  {
    "path": "src/page/service/children/questionDetail.vue",
    "content": " <template>\n  <div class=\"detail_page\">\n        <head-top :head-title=\"question.title\" go-back='true'></head-top>\n        <section id=\"scroll_section\" class=\"scroll_container\">\n            <section v-html=\"markdownText\" class=\"markdown\"></section>\n        </section>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import showdown from 'showdown'\n    import BScroll from 'better-scroll'\n\n    export default {\n      data(){\n            return{\n    \t\t\t\n            }\n        },\n        components: {\n            headTop,\n        },\n        mounted(){\n            this.$nextTick(() => {\n                new BScroll('#scroll_section', {  \n                    deceleration: 0.001,\n                    bounce: true,\n                    swipeTime: 1800,\n                    click: true,\n                }); \n            })\n        },\n        computed: {\n        \t...mapState([\n\t            'question', \n\t        ]),\n\t        markdownText: function (){\n                //转换markDown格式\n\t        \tlet converter = new showdown.Converter();  \n\t            return converter.makeHtml(this.question.detail);  \n\t        }\n        },\n        methods: {\n            \n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .detail_page{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .scroll_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n        overflow-y: auto;\n    }\n    .markdown{\n    \tfont-size: .65rem;\n    \tpadding: 0 .7rem;\n        color: #666;\n        padding-bottom: 2rem;\n    }\n\n</style>\n"
  },
  {
    "path": "src/page/service/service.vue",
    "content": " <template>\r\n  <div class=\"rating_page\">\r\n        <head-top head-title=\"服务中心\" go-back='true'></head-top>\r\n        <section class=\"service_connect\">\r\n            <a href=\"https://ecs-im.ele.me/\" class=\"service_left\">\r\n                <svg>\r\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#human\"></use>\r\n                </svg>\r\n                <span>在线客服</span>\r\n            </a>\r\n            <a href=\"tel:10105757\" class=\"service_right\">\r\n                <svg>\r\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#phone\"></use>\r\n                </svg>\r\n                <span>在线客服</span>\r\n            </a>\r\n        </section>\r\n        <section class=\"hot_questions\" v-if=\"serviceData\">\r\n            <h4 class=\"qustion_header\">热门问题</h4>\r\n            <ul>\r\n                <li v-for=\"(item, index) in questionTitle\" :key=\"index\" class=\"question_title\" @click=\"toQuestionDetail(item, index)\">\r\n                    <span>{{item}}</span>\r\n                     <svg class=\"arrow-svg\" fill=\"#999\">\r\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\r\n                    </svg>\r\n                </li>\r\n            </ul>\r\n        </section>\r\n        <transition name=\"router-slid\" mode=\"out-in\">\r\n            <router-view></router-view>\r\n        </transition>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import headTop from 'src/components/header/head'\r\n    import {getService} from 'src/service/getData'\r\n    import {mapMutations} from 'vuex'\r\n\r\n    export default {\r\n      data(){\r\n            return{\r\n                serviceData: null, //服务信息\r\n                questionTitle: [], //问题标题\r\n                questionDetail: [], //问题详情\r\n            }\r\n        },\r\n\r\n        mounted(){\r\n            this.initData();\r\n        },\r\n        mixins: [],\r\n        components: {\r\n            headTop,\r\n        },\r\n        props:[],\r\n        methods: {\r\n            ...mapMutations([\r\n                'SAVE_QUESTION'\r\n            ]),\r\n            //获取信息\r\n            async initData(){\r\n                this.serviceData = await getService();\r\n                Object.keys(this.serviceData).forEach(item => {\r\n                    let avoidRepeat = false;\r\n                    this.questionTitle.forEach((insertItem) => {\r\n                        //防止重复的数据，后台返回的数据有些是重复的\r\n                        if (insertItem == this.serviceData[item]) {\r\n                            avoidRepeat = true;\r\n                        }\r\n                    })\r\n                    //将标题和内容分别放进数组中\r\n                    if (item.indexOf('Caption') !== -1 && !avoidRepeat) {\r\n                            this.questionTitle.push(this.serviceData[item]);\r\n                    }else if(!avoidRepeat){\r\n                        this.questionDetail.push(this.serviceData[item]);\r\n                    }\r\n                })\r\n            },\r\n            //保存问题详情\r\n            toQuestionDetail(title, index){\r\n                this.SAVE_QUESTION({title, detail: this.questionDetail[index]});\r\n                this.$router.push('/service/questionDetail');\r\n            },\r\n        }\r\n    }\r\n</script>\r\n  \r\n<style lang=\"scss\" scoped>\r\n    @import 'src/style/mixin';\r\n  \r\n    .rating_page{\r\n        background-color: #fff;\r\n        padding-top: 1.95rem;\r\n        p, span{\r\n            font-family: Helvetica Neue,Tahoma,Arial;\r\n        }\r\n    }\r\n    .service_connect{\r\n        @include fj;\r\n        a{\r\n            flex: 1;\r\n            display: flex;\r\n            flex-direction: column;\r\n            align-items: center;\r\n            justify-content: center;\r\n            height: 4rem;\r\n            border-bottom: 1px solid #f5f5f5;\r\n            svg{\r\n                @include wh(1rem, 1rem);\r\n            }\r\n            span{\r\n                margin-top: .4rem;\r\n                @include sc(.6rem, #666);\r\n            }\r\n        }\r\n        .service_left{\r\n            border-right: 1px solid #f5f5f5;\r\n        }\r\n    }\r\n    .hot_questions{\r\n        .qustion_header{\r\n            @include sc(.75rem, #333);\r\n            line-height: 3rem;\r\n            border-bottom: 1px solid #f5f5f5;\r\n            padding-left: .7rem;\r\n        }\r\n        .question_title{\r\n            padding: 0 .7rem;\r\n            line-height: 2rem;\r\n            border-bottom: 1px solid #f5f5f5;\r\n            @include fj;\r\n            align-items: center;\r\n            span{\r\n                @include sc(.6rem, #666);\r\n            }\r\n            svg{\r\n                @include wh(.6rem, .6rem);\r\n            }\r\n        }\r\n    }\r\n    .router-slid-enter-active, .router-slid-leave-active {\r\n        transition: all .4s;\r\n    }\r\n    .router-slid-enter, .router-slid-leave-active {\r\n        transform: translate3d(2rem, 0, 0);\r\n        opacity: 0;\r\n    }\r\n</style>\r\n"
  },
  {
    "path": "src/page/shop/children/children/shopSafe.vue",
    "content": " <template>\n\t<div class=\"safe_shop\">\n        <head-top head-title=\"食品监督安全公示\" go-back='true'></head-top>\n        <section id=\"scroll_section\" class=\"scroll_container\">\n            <section>\n                \n                <section class=\"shop_status_container\">\n                    <header>食品监督安全公示</header>\n                    <section class=\"shop_statu_detail\">\n                        <div>\n                            <svg class=\"shop_status\" v-if=\"shopDetail.status == 1\">\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#res-well\"></use>\n                            </svg>\n                            <svg class=\"res-well\" v-else>\n                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#res-bad\"></use>\n                            </svg>\n                        </div>\n                        <div class=\"check_date\">\n                            <p>\n                                <span>监督检查结果：</span>\n                                <span class=\"shop_status_well\" v-if=\"shopDetail.status == 1\">良好</span>\n                                <span class=\"shop_status_bad\" v-else>差</span>\n                            </p>\n                            <p>\n                                <span>检查日期：</span>\n                                <span>{{shopDetail.identification.identificate_date && shopDetail.identification.identificate_date.split('T')[0]}}</span>\n                            </p>\n                        </div>\n                    </section>\n                </section>\n                <section class=\"shop_status_container\">\n                    <header>\n                        <span>工商登记信息</span>\n                    </header>\n                    <ul>\n                        <li>\n                            <p>企业名称</p>\n                            <p>{{shopDetail.identification.company_name}}</p>\n                        </li>\n                        <li>\n                            <p>工商执照注册号</p>\n                            <p>{{shopDetail.identification.identificate_agency}}</p>\n                        </li>\n                        <li>\n                            <p>注册资本</p>\n                            <p>{{shopDetail.identification.registered_number}}</p>\n                        </li>\n                        <li>\n                            <p>注册地址</p>\n                            <p>{{shopDetail.identification.registered_address}}</p>\n                        </li>\n                        <li>\n                            <p>属地监管所</p>\n                            <p>{{shopDetail.identification.registered_principal}}</p>\n                        </li>\n                        <li>\n                            <p>法定代表人</p>\n                            <p>{{shopDetail.identification.legal_person}}</p>\n                        </li>\n                        <li>\n                            <p>经营范围</p>\n                            <p>{{shopDetail.identification.operation_period}}</p>\n                        </li>\n                    </ul>\n                </section>\n                <section class=\"shop_status_container\">\n                    <header>餐饮许可证</header>\n                    <ul>\n                        <li>\n                            <p>营业范围</p>\n                            <p>{{shopDetail.identification.operation_period}}</p>\n                        </li>\n                        <li>\n                            <p>许可证有效期</p>\n                            <p>{{shopDetail.identification.licenses_date}}</p>\n                        </li>\n                        <li>\n                            <p>许可证号</p>\n                            <p>{{shopDetail.identification.licenses_number}}</p>\n                        </li>\n                        <li>\n                            <p>发证时间</p>\n                            <p>{{shopDetail.identification.licenses_scope}}</p>\n                        </li>\n                        <li>\n                            <p>发证机关</p>\n                            <p>{{shopDetail.identification.registered_principal}}</p>\n                        </li>\n                    </ul>\n                </section>\n                <section class=\"license_img shop_status_container\">\n                    <header>许可证书</header>\n                    <div class=\"img_container\">\n                        <img :src=\"localapi || proapi ? imgBaseUrl + shopDetail.license.business_license_image : getImgPath(shopDetail.license.business_license_image)\">\n                        <img :src=\"localapi || proapi ? imgBaseUrl + shopDetail.license.catering_service_license_image : getImgPath(shopDetail.license.catering_service_license_image)\">\n                    </div>\n                </section>\n            </section>\n        </section>\n    </div>\n</template>\n\n<script>\n    import {mapState} from 'vuex'\n    import headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import BScroll from 'better-scroll'\n    import { localapi, proapi, imgBaseUrl} from 'src/config/env'\n\n\n    export default {\n    \tdata(){\n            return{\n                localapi,\n                proapi,\n                imgBaseUrl\n            }\n        },\n        mounted(){\n        \tthis.$nextTick(() => {\n                new BScroll('#scroll_section', {  \n                    deceleration: 0.001,\n                    bounce: true,\n                    swipeTime: 1800,\n                    click: true,\n                }); \n            })\n        },\n        computed: {\n            ...mapState([\n                'shopDetail'\n            ]),\n        },\n        components: {\n        \theadTop,\n        },\n        mixins:[getImgPath],\n        methods: {\n            showLicenseImg(img){\n                this.licenseImg = img;\n                this.showlicenseImg = true;\n            },\n        }\n    }\n</script>\n\t\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\t\n\t.safe_shop{\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n        right: 0;\n        bottom: 0;\n        padding-top: 1.95rem;\n\t\tbackground-color: #ebebeb;\n\t\tz-index: 102;\n\t}\n    .scroll_container{\n        @include wh(100%, 100%);\n    }\n    ul{\n        margin-left: 1rem;\n        padding: .4rem 0;\n        li{\n            margin-bottom: .4rem;\n            p{\n                line-height: 1rem;\n            }\n            p:nth-of-type(1){\n                @include sc(.55rem, #333);\n            }\n            p:nth-of-type(2){\n                @include sc(.5rem, #999);\n            }\n        }\n    }\n    .shop_status_container{\n        background-color: #fff;\n        margin-bottom: .4rem;\n        header{\n            line-height: 1.8rem;\n            padding: 0 .6rem;\n            border-bottom: 0.025rem solid #f1f1f1;\n            @include sc(.75rem, #333);\n        }\n        .shop_statu_detail{\n            display: flex;\n            padding: .6rem;\n            svg{\n                @include wh(2rem, 2rem);\n                margin-right: .6rem;\n            }\n            .check_date{\n                span{\n                    @include sc(.55rem, #666);\n                }\n                .shop_status_well{\n                    color: rgb(126, 211, 33);\n                }\n                .shop_status_bad{\n                    color: red;\n                }\n            }\n        }\n    }\n    .license_img{\n        padding: .6rem;\n        background-color: #fff;\n        padding-bottom: 8rem;\n        .img_container{\n            background-color: #ebebeb;\n            img{\n                width: 40%;\n                height: auto;\n                margin: .4rem;\n                vertical-align: middle;\n            }\n        }\n    }\n    \n</style>\n"
  },
  {
    "path": "src/page/shop/children/foodDetail.vue",
    "content": " <template>\n\t<div class=\"rating_page\">\n        <head-top :head-title=\"name\" go-back='true'></head-top>\n        <section class=\"header_img\">\n            <img :src=\"imgBaseUrl + image_path\" class=\"food_img\">\n            <div class=\"cover\"></div>\n        </section>\n        <p class=\"description\">{{description}}</p>\n        <section class=\"detail_container\">\n            <section class=\"detail_left\">\n                <p>{{name}}</p>\n                <div class=\"rating_sale\">\n                    <span>评分</span>\n                    <rating-star :rating='rating'></rating-star>\n                    <span>{{rating.toFixed(1)}}</span>\n                </div>\n                <p>\n                    <span>月售 {{month_sales}}单</span>\n                    <span>售价 ¥{{foods.specfoods[0].price}}</span>\n                    <span v-if=\"foods.specfoods.length\">起</span>\n                </p>\n                <p>\n                    <span>评论数 {{rating_count}}</span>\n                    <span>好评率 {{satisfy_rate}}%</span>\n                </p>    \n            </section>\n            <!-- <buy-cart :shopId='shopId'  :foods='foods' @moveInCart=\"$emit('moveInCart')\"></buy-cart> -->\n        </section>\n    </div>\n</template>\n\n<script>\n\timport headTop from 'src/components/header/head'\n    import {getImgPath} from 'src/components/common/mixin'\n    import ratingStar from 'src/components/common/ratingStar'\n    import buyCart from 'src/components/common/buyCart'\n    import {imgBaseUrl} from 'src/config/env'\n\n    export default {\n    \tdata(){\n            return{\n                image_path: null,\n                description: null,\n                month_sales: null,\n                name: null,\n                rating: null,\n                rating_count: null,\n                satisfy_rate: null,\n                foods: null,\n                shopId: null,\n                imgBaseUrl,\n            }\n        },\n        created(){\n        \tthis.image_path = this.$route.query.image_path;\n            this.description = this.$route.query.description;\n            this.month_sales = this.$route.query.month_sales;\n            this.name = this.$route.query.name;\n            this.rating = this.$route.query.rating;\n            this.rating_count = this.$route.query.rating_count;\n            this.satisfy_rate = this.$route.query.satisfy_rate;\n            this.foods = this.$route.query.foods;\n            this.shopId = this.$route.query.shopId;\n        },\n        mixins: [getImgPath],\n        components: {\n        \theadTop,\n            ratingStar,\n            buyCart,\n        },\n        props:[],\n        methods: {\n            \n        }\n    }\n</script>\n\t\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\t\n\t.rating_page{\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\tbackground-color: #fff;\n\t\tz-index: 12;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n\t}\n    .header_img{\n        position: relative;\n        .food_img{\n            width: 100%;\n            display: block;\n        }\n        .cover{\n            position: absolute;\n            @include wh(100%, 100%);\n            top: 0;\n            left: 0;\n        }\n    }\n    .description{\n        @include sc(.6rem, #666);\n        margin-top: .5rem;\n        line-height: .8rem;\n        bottom: .2rem;\n        padding: 0 .4rem;\n    }\n    .detail_container{\n        padding: .5rem;\n        @include fj;\n        align-items: center;\n        .detail_left{\n            p:nth-of-type(1){\n                @include sc(.7rem, #333);\n                margin-bottom: .2rem;\n            }\n            .rating_sale{\n                display: flex;\n                align-items: center;\n                span:nth-of-type(1){\n                   @include sc(.6rem, #666);\n                   margin-right: .2rem;\n                }\n                span:nth-of-type(2){\n                    @include sc(.55rem, #f60);\n                    margin-left: .2rem;\n                }\n                span:nth-of-type(3){\n                   @include sc(.6rem, #666);\n                    margin-left: .4rem;\n                }\n            }\n            p:nth-of-type(2){\n                font-size: 0;\n                margin-top: .3rem;\n                span:nth-of-type(1){\n                    @include sc(.6rem, #666);\n                    margin-right: .4rem;\n                }\n                span:nth-of-type(2),span:nth-of-type(3){\n                    @include sc(.6rem, #f60);\n                    margin-right: .2rem;\n                }\n            }\n            p:nth-of-type(3){\n                span{\n                    @include sc(.6rem, #666);\n                }\n            }\n        }\n    }\n\n</style>\n"
  },
  {
    "path": "src/page/shop/children/shopDetail.vue",
    "content": " <template>\n\t<div class=\"rating_page\">\n        <head-top head-title=\"商家详情\" go-back='true'></head-top>\n        <section class=\"activities_container\">\n            <header>活动与属性</header>\n            <ul class=\"actibities_ul\">\n                <li v-for=\"item in shopDetail.activities\" :key=\"item.id\">\n                    <span :style='{backgroundColor: \"#\" + item.icon_color}'>{{item.icon_name}}</span>\n                    <span>{{item.description}}(APP专享)</span>\n                </li>\n            </ul>\n            <ul class=\"actibities_ul\">\n                <li v-for=\"item in shopDetail.supports\" :key=\"item.id\">\n                    <span :style='{backgroundColor: \"#\" + item.icon_color}'>{{item.icon_name}}</span>\n                    <span>{{item.description}}(APP专享)</span>\n                </li>\n            </ul>\n        </section>\n        <section class=\"shop_status_container\">\n            <router-link to=\"/shop/shopDetail/shopSafe\" class=\"shop_status_header\">\n                <span class=\"shop_detail_title\">食品监督安全公示</span>\n                <div>\n                    <span class=\"identification_detail\">企业认证详情</span>\n                    <svg width=\"14\" height=\"14\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"description_arrow\" >\n                        <path d=\"M0 0 L8 7 L0 14\"  stroke=\"#bbb\" stroke-width=\"1.5\" fill=\"none\"/>\n                    </svg>\n                </div>\n            </router-link>\n            <section class=\"shop_statu_detail\">\n                <div>\n                    <svg class=\"shop_status\" v-if=\"shopDetail.status == 1\">\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#res-well\"></use>\n                    </svg>\n                    <svg class=\"res-well\" v-else>\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#res-bad\"></use>\n                    </svg>\n                </div>\n                <div class=\"check_date\">\n                    <p>\n                        <span>监督检查结果：</span>\n                        <span class=\"shop_status_well\" v-if=\"shopDetail.status == 1\">良好</span>\n                        <span class=\"shop_status_bad\" v-else>差</span>\n                    </p>\n                    <p>\n                        <span>检查日期：</span>\n                        <span>{{shopDetail.identification.identificate_date && shopDetail.identification.identificate_date.split('T')[0]}}</span>\n                    </p>\n                </div>\n            </section>\n        </section>\n        <section class=\"shop_status_info\">\n            <header>商家信息</header>\n            <p>{{shopDetail.name}}</p>\n            <p>地址：{{shopDetail.address}}</p>\n            <p>营业时间：[{{shopDetail.opening_hours[0]}}]</p>\n            <p @click=\"showLicenseImg(shopDetail.license.business_license_image)\">\n                <span>营业执照</span>\n                <svg width=\"14\" height=\"14\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"description_arrow\" >\n                    <path d=\"M0 0 L8 7 L0 14\"  stroke=\"#bbb\" stroke-width=\"1.5\" fill=\"none\"/>\n                </svg></p>\n            <p @click=\"showLicenseImg(shopDetail.license.catering_service_license_image)\">\n                <span>餐饮服务许可证</span>\n                <svg width=\"14\" height=\"14\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"description_arrow\" >\n                    <path d=\"M0 0 L8 7 L0 14\"  stroke=\"#bbb\" stroke-width=\"1.5\" fill=\"none\"/>\n                </svg>\n            </p>\n        </section>\n        <transition name=\"fade\">\n            <section class=\"license_container\" v-if=\"showlicenseImg\" @click=\"showlicenseImg = false\">\n                <img :src=\"imgBaseUrl + licenseImg\">\n            </section>\n        </transition>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n\timport headTop from 'src/components/header/head'\n    import {mapState} from 'vuex'\n    import {getImgPath} from 'src/components/common/mixin'\n    import {imgBaseUrl} from 'src/config/env'\n\n    export default {\n    \tdata(){\n            return{\n               licenseImg: null,\n               showlicenseImg: false,\n               imgBaseUrl\n            }\n        },\n        mounted(){\n        \t\n        },\n        computed: {\n            ...mapState([\n                'shopDetail'\n            ]),\n        },\n        components: {\n        \theadTop,\n        },\n        mixins:[getImgPath],\n        methods: {\n            showLicenseImg(img){\n                this.licenseImg = img;\n                this.showlicenseImg = true;\n            },\n        }\n    }\n</script>\n\t\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n\t\n\t.rating_page{\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tbottom: 0;\n        padding-top: 1.95rem;\n\t\tbackground-color: #ebebeb;\n\t\tz-index: 18;\n\t}\n    .activities_container{\n        background-color: #fff;\n        margin: .4rem 0;\n        padding-bottom: .6rem;\n        header{\n            @include sc(.75rem, #333);\n            line-height: 1.8rem;\n            padding-left: .6rem;\n            border-bottom: 1px solid #f1f1f1;\n            margin-bottom: .3rem;\n        }\n        .actibities_ul{\n            padding: 0 .6rem;\n            li{\n                margin-bottom: .2rem;\n                span:nth-of-type(1){\n                    @include sc(.45rem, #fff);\n                    padding: .1rem;\n                    border: 1px;\n                    border-radius: 0.1rem;\n                    margin-right: .2rem;\n                }\n                span:nth-of-type(2){\n                    @include sc(.55rem, #666);\n                }\n            }\n        }\n    }\n    .shop_status_container{\n        background-color: #fff;\n        margin-bottom: .4rem;\n        .shop_status_header{\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            line-height: 1.8rem;\n            padding: 0 .6rem;\n            border-bottom: 0.025rem solid #f1f1f1;\n            .shop_detail_title{\n                @include sc(.75rem, #333);\n            }\n            .identification_detail{\n                @include sc(.7rem, #bbb);\n                vertical-align: middle;\n            }\n            svg{\n                @include wh(.6rem, .6rem);\n                vertical-align: middle;\n            }\n        }\n        .shop_statu_detail{\n            display: flex;\n            padding: .6rem;\n            svg{\n                @include wh(2rem, 2rem);\n                margin-right: .6rem;\n            }\n            .check_date{\n                span{\n                    @include sc(.55rem, #666);\n                }\n                .shop_status_well{\n                    color: rgb(126, 211, 33);\n                }\n                .shop_status_bad{\n                    color: red;\n                }\n            }\n        }\n    }\n    .shop_status_info{\n        background-color: #fff;\n        margin-bottom: .4rem;\n        header{\n            line-height: 1.8rem;\n            padding: 0 .6rem;\n            @include sc(.75rem, #333);\n            border-bottom: 0.025rem solid #f1f1f1;\n        }\n        p{\n            @include sc(.6rem, #666);\n            padding: .7rem .6rem .7rem 0;\n            margin-left: .6rem;\n            border-bottom: 0.025rem solid #f5f5f5;\n        }\n        span{\n            color: #666;\n        }\n        p:nth-of-type(4), p:nth-of-type(5){\n            display: flex;\n            justify-content: space-between;\n        }\n    }\n    .license_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: rgba(0,0,0,.5);\n        z-index: 101;\n        img{\n            width: 100%;\n            @include center;\n        }\n    }\n    .fade-enter-active, .fade-leave-active {\n        transition: opacity .5s;\n    }\n    .fade-enter, .fade-leave-active {\n        opacity: 0;\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n</style>\n"
  },
  {
    "path": "src/page/shop/shop.vue",
    "content": " <template>\n    <div>\n        <section v-if=\"!showLoading\" class=\"shop_container\">\n            <nav class=\"goback\" @click=\"goback\">\n                <svg width=\"4rem\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n                    <polyline points=\"12,18 4,9 12,0\" style=\"fill:none;stroke:rgb(255,255,255);stroke-width:3\"/>\n                </svg>\n            </nav>\n            <header class=\"shop_detail_header\" ref=\"shopheader\" :style=\"{zIndex: showActivities? '14':'10'}\">\n                <div class=\"header_cover_img_con\">\n                  <img :src=\"imgBaseUrl + shopDetailData.image_path\" class=\"header_cover_img\">\n                </div>\n                <section class=\"description_header\">\n                    <router-link to=\"/shop/shopDetail\" class=\"description_top\">\n                        <section class=\"description_left\">\n                            <img :src=\"imgBaseUrl + shopDetailData.image_path\">\n                        </section>\n                        <section class=\"description_right\">\n                            <h4 class=\"description_title ellipsis\">{{shopDetailData.name}}</h4>\n                            <p class=\"description_text\">商家配送／{{shopDetailData.order_lead_time}}分钟送达／配送费¥{{shopDetailData.float_delivery_fee}}</p>\n                            <p class=\"description_promotion ellipsis\">公告：{{promotionInfo}}</p>\n                        </section>\n                        <svg width=\"14\" height=\"14\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" class=\"description_arrow\" >\n                            <path d=\"M0 0 L8 7 L0 14\"  stroke=\"#fff\" stroke-width=\"1\" fill=\"none\"/>\n                        </svg>\n                    </router-link>\n                    <footer class=\"description_footer\" v-if=\"shopDetailData.activities.length\" @click=\"showActivitiesFun\">\n                        <p class=\"ellipsis\">\n                            <span class=\"tip_icon\" :style=\"{backgroundColor: '#' + shopDetailData.activities[0].icon_color, borderColor: '#' + shopDetailData.activities[0].icon_color}\">{{shopDetailData.activities[0].icon_name}}</span>\n                            <span>{{shopDetailData.activities[0].description}}（APP专享）</span>\n                        </p>\n                        <p>{{shopDetailData.activities.length}}个活动</p>\n                        <svg class=\"footer_arrow\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-left\"></use>\n                        </svg>\n                    </footer>\n\n                </section>\n            </header>\n            <transition name=\"fade\">\n                <section class=\"activities_details\" v-if=\"showActivities\">\n                    <h2 class=\"activities_shoptitle\">{{shopDetailData.name}}</h2>\n                    <h3 class=\"activities_ratingstar\">\n                        <rating-star :rating='shopDetailData.rating'></rating-star>\n                    </h3>\n                    <section class=\"activities_list\">\n                        <header class=\"activities_title_style\"><span>优惠信息</span></header>\n                        <ul>\n                            <li v-for=\"item in shopDetailData.activities\" :key=\"item.id\">\n                                <span class=\"activities_icon\" :style=\"{backgroundColor: '#' + item.icon_color, borderColor: '#' + item.icon_color}\">{{item.icon_name}}</span>\n                                <span>{{item.description}}（APP专享）</span>\n                            </li>\n                        </ul>\n                    </section>\n                    <section class=\"activities_shopinfo\">\n                        <header class=\"activities_title_style\"><span>商家公告</span></header>\n                        <p>{{promotionInfo}}</p>\n                    </section>\n                    <svg width=\"60\" height=\"60\" class=\"close_activities\" @click.stop=\"showActivitiesFun\">\n                        <circle cx=\"30\" cy=\"30\" r=\"25\" stroke=\"#555\" stroke-width=\"1\" fill=\"none\"/>\n                        <line x1=\"22\" y1=\"38\" x2=\"38\" y2=\"22\" style=\"stroke:#999;stroke-width:2\"/>\n                        <line x1=\"22\" y1=\"22\" x2=\"38\" y2=\"38\" style=\"stroke:#999;stroke-width:2\"/>\n                    </svg>\n                </section>\n            </transition>\n            <section class=\"change_show_type\" ref=\"chooseType\">\n                <div>\n                    <span :class='{activity_show: changeShowType ==\"food\"}' @click=\"changeShowType='food'\">商品</span>\n                </div>\n                <div>\n                    <span :class='{activity_show: changeShowType ==\"rating\"}' @click=\"changeShowType='rating'\">评价</span>\n                </div>\n            </section>\n            <transition name=\"fade-choose\">\n                <section v-show=\"changeShowType =='food'\" class=\"food_container\">\n                    <section class=\"menu_container\">\n                        <section class=\"menu_left\" id=\"wrapper_menu\" ref=\"wrapperMenu\">\n                            <ul>\n                                <li v-for=\"(item,index) in menuList\" :key=\"index\" class=\"menu_left_li\" :class=\"{activity_menu: index == menuIndex}\" @click=\"chooseMenu(index)\">\n                                    <img :src=\"getImgPath(item.icon_url)\" v-if=\"item.icon_url\">\n                                    <span>{{item.name}}</span>\n                                    <span class=\"category_num\" v-if=\"categoryNum[index]&&item.type==1\">{{categoryNum[index]}}</span>\n                                </li>\n                            </ul>\n                        </section>\n                        <section class=\"menu_right\" ref=\"menuFoodList\">\n                            <ul>\n                                <li v-for=\"(item,index) in menuList\" :key=\"index\">\n                                    <header class=\"menu_detail_header\">\n                                        <section class=\"menu_detail_header_left\">\n                                            <strong class=\"menu_item_title\">{{item.name}}</strong>\n                                            <span class=\"menu_item_description\">{{item.description}}</span>\n                                        </section>\n                                        <span class=\"menu_detail_header_right\" @click=\"showTitleDetail(index)\"></span>\n                                        <p class=\"description_tip\" v-if=\"index == TitleDetailIndex\">\n                                            <span>{{item.name}}</span>\n                                            {{item.description}}\n                                        </p>\n                                    </header>\n                                    <section v-for=\"(foods,foodindex) in item.foods\" :key=\"foodindex\" class=\"menu_detail_list\">\n                                        <router-link  :to=\"{path: 'shop/foodDetail', query:{image_path:foods.image_path, description: foods.description, month_sales: foods.month_sales, name: foods.name, rating: foods.rating, rating_count: foods.rating_count, satisfy_rate: foods.satisfy_rate, foods, shopId}}\" tag=\"div\" class=\"menu_detail_link\">\n                                            <section class=\"menu_food_img\">\n                                                <img :src=\"imgBaseUrl + foods.image_path\">\n                                            </section>\n                                            <section class=\"menu_food_description\">\n                                                <h3 class=\"food_description_head\">\n                                                    <strong class=\"description_foodname\">{{foods.name}}</strong>\n                                                    <ul v-if=\"foods.attributes.length\" class=\"attributes_ul\">\n                                                        <li v-if=\"attribute\" v-for=\"(attribute, foodindex) in foods.attributes\" :key=\"foodindex\" :style=\"{color: '#' + attribute.icon_color,borderColor:'#' + attribute.icon_color}\" :class=\"{attribute_new: attribute.icon_name == '新'}\">\n                                                          <p :style=\"{color: attribute.icon_name == '新'? '#fff' : '#' + attribute.icon_color}\">{{attribute.icon_name == '新'? '新品':attribute.icon_name}}</p>\n                                                        </li>\n                                                    </ul>\n\n                                                </h3>\n                                                <p class=\"food_description_content\">{{foods.description}}</p>\n                                                <p class=\"food_description_sale_rating\">\n                                                    <span>月售{{foods.month_sales}}份</span>\n                                                    <span>好评率{{foods.satisfy_rate}}%</span>\n                                                </p>\n                                                <p v-if=\"foods.activity\" class=\"food_activity\">\n                                                <span :style=\"{color: '#' + foods.activity.image_text_color,borderColor:'#' +foods.activity.icon_color}\">{{foods.activity.image_text}}</span>\n                                                </p>\n                                            </section>\n                                        </router-link>\n                                        <footer class=\"menu_detail_footer\">\n                                            <section class=\"food_price\">\n                                                <span>¥</span>\n                                                <span>{{foods.specfoods[0].price}}</span>\n                                                <span v-if=\"foods.specifications.length\">起</span>\n                                            </section>\n                                            <buy-cart :shopId='shopId' :foods='foods' @moveInCart=\"listenInCart\" @showChooseList=\"showChooseList\" @showReduceTip=\"showReduceTip\" @showMoveDot=\"showMoveDotFun\"></buy-cart>\n                                        </footer>\n                                    </section>\n                                </li>\n                            </ul>\n                        </section>\n                    </section>\n                    <section class=\"buy_cart_container\">\n                        <section @click=\"toggleCartList\" class=\"cart_icon_num\">\n                            <div class=\"cart_icon_container\" :class=\"{cart_icon_activity: totalPrice > 0, move_in_cart:receiveInCart}\" ref=\"cartContainer\">\n                                <span v-if=\"totalNum\" class=\"cart_list_length\">\n                                    {{totalNum}}\n                                </span>\n                                <svg class=\"cart_icon\">\n                                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-icon\"></use>\n                                </svg>\n                            </div>\n                            <div class=\"cart_num\">\n                                <div>¥ {{totalPrice}}</div>\n                                <div>配送费¥{{deliveryFee}}</div>\n                            </div>\n                        </section>\n                        <section class=\"gotopay\" :class=\"{gotopay_acitvity: minimumOrderAmount <= 0}\">\n                            <span class=\"gotopay_button_style\" v-if=\"minimumOrderAmount > 0\">还差¥{{minimumOrderAmount}}起送</span>\n                            <router-link :to=\"{path:'/confirmOrder', query:{geohash, shopId}}\" class=\"gotopay_button_style\" v-else >去结算</router-link>\n                        </section>\n                    </section>\n                    <transition name=\"toggle-cart\">\n                        <section class=\"cart_food_list\" v-show=\"showCartList&&cartFoodList.length\">\n                            <header>\n                                <h4>购物车</h4>\n                                <div @click=\"clearCart\">\n                                    <svg>\n                                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-remove\"></use>\n                                    </svg>\n                                    <span class=\"clear_cart\">清空</span>\n                                </div>\n                            </header>\n                            <section class=\"cart_food_details\" id=\"cartFood\">\n                                <ul>\n                                    <li v-for=\"(item, index) in cartFoodList\" :key=\"index\" class=\"cart_food_li\">\n                                        <div class=\"cart_list_num\">\n                                            <p class=\"ellipsis\">{{item.name}}</p>\n                                            <p class=\"ellipsis\">{{item.specs}}</p>\n                                        </div>\n                                        <div class=\"cart_list_price\">\n                                            <span>¥</span>\n                                            <span>{{item.price}}</span>\n                                        </div>\n                                        <section class=\"cart_list_control\">\n                                            <span @click=\"removeOutCart(item.category_id, item.item_id, item.food_id, item.name, item.price, item.specs)\">\n                                                <svg>\n                                                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-minus\"></use>\n                                                </svg>\n                                            </span>\n                                            <span class=\"cart_num\">{{item.num}}</span>\n                                            <svg class=\"cart_add\" @click=\"addToCart(item.category_id, item.item_id, item.food_id, item.name, item.price, item.specs)\">\n                                                <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-add\"></use>\n                                            </svg>\n                                        </section>\n                                    </li>\n                                </ul>\n                            </section>\n                        </section>\n                    </transition>\n                    <transition name=\"fade\">\n                        <div class=\"screen_cover\" v-show=\"showCartList&&cartFoodList.length\" @click=\"toggleCartList\"></div>\n                    </transition>\n                </section>\n            </transition>\n            <transition name=\"fade-choose\">\n                <section class=\"rating_container\" id=\"ratingContainer\" v-show=\"changeShowType =='rating'\">\n                    <section v-load-more=\"loaderMoreRating\" type=\"2\">\n                        <section>\n\n                            <header class=\"rating_header\">\n                                <section class=\"rating_header_left\">\n                                    <p>{{shopDetailData.rating}}</p>\n                                    <p>综合评价</p>\n                                    <p>高于周边商家{{(ratingScoresData.compare_rating*100).toFixed(1)}}%</p>\n                                </section>\n                                <section class=\"rating_header_right\">\n                                    <p>\n                                        <span>服务态度</span>\n                                        <rating-star :rating='ratingScoresData.service_score'></rating-star>\n                                        <span class=\"rating_num\">{{ratingScoresData.service_score.toFixed(1)}}</span>\n                                    </p>\n                                    <p>\n                                        <span>菜品评价</span>\n                                        <rating-star :rating='ratingScoresData.food_score'></rating-star>\n                                        <span class=\"rating_num\">{{ratingScoresData.food_score.toFixed(1)}}</span>\n                                    </p>\n                                    <p>\n                                        <span>送达时间</span>\n                                        <span class=\"delivery_time\">{{shopDetailData.order_lead_time}}分钟</span>\n                                    </p>\n                                </section>\n                            </header>\n                            <ul class=\"tag_list_ul\">\n                                <li v-for=\"(item, index) in ratingTagsList\" :key=\"index\" :class=\"{unsatisfied: item.unsatisfied, tagActivity: ratingTageIndex == index}\" @click=\"changeTgeIndex(index, item.name)\">{{item.name}}({{item.count}})</li>\n                            </ul>\n                            <ul class=\"rating_list_ul\">\n                                <li v-for=\"(item, index) in ratingList\" :key=\"index\" class=\"rating_list_li\">\n                                    <img :src=\"getImgPath(item.avatar)\" class=\"user_avatar\">\n                                    <section class=\"rating_list_details\">\n                                        <header>\n                                            <section class=\"username_star\">\n                                                <p class=\"username\">{{item.username}}</p>\n                                                <p class=\"star_desc\">\n                                                    <rating-star :rating='item.rating_star'></rating-star>\n                                                    <span class=\"time_spent_desc\">{{item.time_spent_desc}}</span>\n                                                </p>\n                                            </section>\n                                            <time class=\"rated_at\">{{item.rated_at}}</time>\n                                        </header>\n                                        <ul class=\"food_img_ul\">\n                                            <li v-for=\"(item, index) in item.item_ratings\" :key=\"index\">\n                                                <img :src=\"getImgPath(item.image_hash)\" v-if=\"item.image_hash\">\n                                            </li>\n                                        </ul>\n                                        <ul class=\"food_name_ul\">\n                                            <li v-for=\"(item, index) in item.item_ratings\" :key=\"index\" class=\"ellipsis\">\n                                                {{item.food_name}}\n                                            </li>\n                                        </ul>\n                                    </section>\n                                </li>\n                            </ul>\n                        </section>\n                    </section>\n                </section>\n            </transition>\n        </section>\n        <section>\n            <transition name=\"fade\">\n                <div class=\"specs_cover\" @click=\"showChooseList\" v-if=\"showSpecs\"></div>\n            </transition>\n            <transition name=\"fadeBounce\">\n                <div class=\"specs_list\" v-if=\"showSpecs\">\n                    <header class=\"specs_list_header\">\n                        <h4 class=\"ellipsis\">{{choosedFoods.name}}</h4>\n                        <svg width=\"16\" height=\"16\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\"class=\"specs_cancel\" @click=\"showChooseList\">\n                            <line x1=\"0\" y1=\"0\" x2=\"16\" y2=\"16\"  stroke=\"#666\" stroke-width=\"1.2\"/>\n                            <line x1=\"0\" y1=\"16\" x2=\"16\" y2=\"0\"  stroke=\"#666\" stroke-width=\"1.2\"/>\n                        </svg>\n                    </header>\n                    <section class=\"specs_details\">\n                        <h5 class=\"specs_details_title\">{{choosedFoods.specifications[0].name}}</h5>\n                        <ul>\n                            <li v-for=\"(item, itemIndex) in choosedFoods.specifications[0].values\" :class=\"{specs_activity: itemIndex == specsIndex}\" @click=\"chooseSpecs(itemIndex)\">\n                                {{item}}\n                            </li>\n                        </ul>\n                    </section>\n                    <footer class=\"specs_footer\">\n                        <div class=\"specs_price\">\n                            <span>¥ </span>\n                            <span>{{choosedFoods.specfoods[specsIndex].price}}</span>\n                        </div>\n                        <div class=\"specs_addto_cart\" @click=\"addSpecs(choosedFoods.category_id, choosedFoods.item_id, choosedFoods.specfoods[specsIndex].food_id, choosedFoods.specfoods[specsIndex].name, choosedFoods.specfoods[specsIndex].price, choosedFoods.specifications[0].values[specsIndex], choosedFoods.specfoods[specsIndex].packing_fee, choosedFoods.specfoods[specsIndex].sku_id, choosedFoods.specfoods[specsIndex].stock)\">加入购物车</div>\n                    </footer>\n                </div>\n            </transition>\n        </section>\n        <transition name=\"fade\">\n            <p class=\"show_delete_tip\" v-if=\"showDeleteTip\">多规格商品只能去购物车删除哦</p>\n        </transition>\n        <transition\n        appear\n        @after-appear = 'afterEnter'\n        @before-appear=\"beforeEnter\"\n        v-for=\"(item,index) in showMoveDot\"\n        >\n            <span class=\"move_dot\" v-if=\"item\">\n                <svg class=\"move_liner\">\n                    <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#cart-add\"></use>\n                </svg>\n            </span>\n        </transition>\n       <loading v-show=\"showLoading || loadRatings\"></loading>\n       <section class=\"animation_opactiy shop_back_svg_container\" v-if=\"showLoading\">\n           <img src=\"../../images/shop_back_svg.svg\">\n       </section>\n       <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import {mapState, mapMutations} from 'vuex'\n    import {msiteAddress, shopDetails, foodMenu, getRatingList, ratingScores, ratingTags} from 'src/service/getData'\n    import loading from 'src/components/common/loading'\n    import buyCart from 'src/components/common/buyCart'\n    import ratingStar from 'src/components/common/ratingStar'\n    import {loadMore, getImgPath} from 'src/components/common/mixin'\n    import {imgBaseUrl} from 'src/config/env'\n    import BScroll from 'better-scroll'\n\n    export default {\n        data(){\n            return{\n                geohash: '', //geohash位置信息\n                shopId: null, //商店id值\n                showLoading: true, //显示加载动画\n                changeShowType: 'food',//切换显示商品或者评价\n                shopDetailData: null, //商铺详情\n                showActivities: false, //是否显示活动详情\n                menuList: [], //食品列表\n                menuIndex: 0, //已选菜单索引值，默认为0\n                menuIndexChange: true,//解决选中index时，scroll监听事件重复判断设置index的bug\n                shopListTop: [], //商品列表的高度集合\n                TitleDetailIndex: null, //点击展示列表头部详情\n                categoryNum: [], //商品类型右上角已加入购物车的数量\n                totalPrice: 0, //总共价格\n                cartFoodList: [], //购物车商品列表\n                showCartList: false,//显示购物车列表\n                receiveInCart: false, //购物车组件下落的圆点是否到达目标位置\n                ratingList: null, //评价列表\n                ratingOffset: 0, //评价获取数据offset值\n                ratingScoresData: null, //评价总体分数\n                ratingTagsList: null, //评价分类列表\n                ratingTageIndex: 0, //评价分类索引\n                preventRepeatRequest: false,// 防止多次触发数据请求\n                ratingTagName: '',//评论的类型\n                loadRatings: false, //加载更多评论是显示加载组件\n                foodScroll: null,  //食品列表scroll\n                showSpecs: false,//控制显示食品规格\n                specsIndex: 0, //当前选中的规格索引值\n                choosedFoods: null, //当前选中视频数据\n                showDeleteTip: false, //多规格商品点击减按钮，弹出提示框\n                showMoveDot: [], //控制下落的小圆点显示隐藏\n                windowHeight: null, //屏幕的高度\n                elLeft: 0, //当前点击加按钮在网页中的绝对top值\n                elBottom: 0, //当前点击加按钮在网页中的绝对left值\n                ratingScroll: null, //评论页Scroll\n                imgBaseUrl,\n            }\n        },\n        created(){\n            this.geohash = this.$route.query.geohash;\n            this.shopId = this.$route.query.id;\n            this.INIT_BUYCART();\n        },\n        mounted(){\n            this.initData();\n            this.windowHeight = window.innerHeight;\n        },\n        beforeDestroy(){\n            // this.foodScroll.removeEventListener('scroll', )\n        },\n        mixins: [loadMore, getImgPath],\n        components: {\n            loading,\n            ratingStar,\n            buyCart,\n        },\n        computed: {\n            ...mapState([\n                'latitude','longitude','cartList'\n            ]),\n            promotionInfo: function (){\n                return this.shopDetailData.promotion_info || '欢迎光临，用餐高峰期请提前下单，谢谢。'\n            },\n            //配送费\n            deliveryFee: function () {\n                if (this.shopDetailData) {\n                    return this.shopDetailData.float_delivery_fee;\n                }else{\n                    return null;\n                }\n            },\n            //还差多少元起送，为负数时显示去结算按钮\n            minimumOrderAmount: function () {\n                if (this.shopDetailData) {\n                    return this.shopDetailData.float_minimum_order_amount - this.totalPrice;\n                }else{\n                    return null;\n                }\n            },\n            //当前商店购物信息\n            shopCart: function (){\n                return {...this.cartList[this.shopId]};\n            },\n            //购物车中总共商品的数量\n            totalNum: function (){\n                let num = 0;\n                this.cartFoodList.forEach(item => {\n                    num += item.num\n                })\n                return num\n            },\n        },\n        methods: {\n            ...mapMutations([\n                'RECORD_ADDRESS','ADD_CART','REDUCE_CART','INIT_BUYCART','CLEAR_CART','RECORD_SHOPDETAIL'\n            ]),\n            //初始化时获取基本数据\n            async initData(){\n                if (!this.latitude) {\n                    //获取位置信息\n                    let res = await msiteAddress(this.geohash);\n                    // 记录当前经度纬度进入vuex\n                    this.RECORD_ADDRESS(res);\n                }\n                //获取商铺信息\n                this.shopDetailData = await shopDetails(this.shopId, this.latitude, this.longitude);\n                //获取商铺食品列表\n                this.menuList = await foodMenu(this.shopId);\n                //评论列表\n                this.ratingList = await getRatingList(this.shopId, this.ratingOffset);\n                //商铺评论详情\n                this.ratingScoresData = await ratingScores(this.shopId);\n                //评论Tag列表\n                this.ratingTagsList = await ratingTags(this.shopId);\n                this.RECORD_SHOPDETAIL(this.shopDetailData)\n                //隐藏加载动画\n                this.hideLoading();\n            },\n            //获取食品列表的高度，存入shopListTop\n            getFoodListHeight(){\n                const listContainer = this.$refs.menuFoodList;\n                if (listContainer) {\n                  const listArr = Array.from(listContainer.children[0].children);\n                  listArr.forEach((item, index) => {\n                      this.shopListTop[index] = item.offsetTop;\n                  });\n                  this.listenScroll(listContainer)\n                }\n            },\n            //当滑动食品列表时，监听其scrollTop值来设置对应的食品列表标题的样式\n            listenScroll(element){\n                this.foodScroll = new BScroll(element, {\n                    probeType: 3,\n                    deceleration: 0.001,\n                    bounce: false,\n                    swipeTime: 2000,\n                    click: true,\n                });\n\n                const wrapperMenu = new BScroll('#wrapper_menu', {\n                    click: true,\n                });\n\n                const wrapMenuHeight = this.$refs.wrapperMenu.clientHeight;\n                this.foodScroll.on('scroll', (pos) => {\n                    if (!this.$refs.wrapperMenu) {\n                        return\n                    }\n                    this.shopListTop.forEach((item, index) => {\n                        if (this.menuIndexChange && Math.abs(Math.round(pos.y)) >= item) {\n                            this.menuIndex = index;\n                            const menuList=this.$refs.wrapperMenu.querySelectorAll('.activity_menu');\n                            const el = menuList[0];\n                            wrapperMenu.scrollToElement(el, 800, 0, -(wrapMenuHeight/2 - 50));\n                        }\n                    })\n                })\n            },\n            //控制活动详情页的显示隐藏\n            showActivitiesFun(){\n                this.showActivities = !this.showActivities;\n            },\n            //点击左侧食品列表标题，相应列表移动到最顶层\n            chooseMenu(index){\n                this.menuIndex = index;\n                //menuIndexChange解决运动时listenScroll依然监听的bug\n                this.menuIndexChange = false;\n                this.foodScroll.scrollTo(0, -this.shopListTop[index], 400);\n                this.foodScroll.on('scrollEnd', () => {\n                    this.menuIndexChange = true;\n                })\n            },\n            showTitleDetail(index){\n                if (this.TitleDetailIndex == index) {\n                    this.TitleDetailIndex = null;\n                }else{\n                    this.TitleDetailIndex = index;\n                }\n            },\n            //加入购物车，所需7个参数，商铺id，食品分类id，食品id，食品规格id，食品名字，食品价格，食品规格\n            addToCart(category_id, item_id, food_id, name, price, specs){\n                this.ADD_CART({shopid: this.shopId, category_id, item_id, food_id, name, price, specs});\n            },\n            //移出购物车，所需7个参数，商铺id，食品分类id，食品id，食品规格id，食品名字，食品价格，食品规格\n            removeOutCart(category_id, item_id, food_id, name, price, specs){\n                this.REDUCE_CART({shopid: this.shopId, category_id, item_id, food_id, name, price, specs});\n            },\n            /**\n             * 初始化和shopCart变化时，重新获取购物车改变过的数据，赋值 categoryNum，totalPrice，cartFoodList，整个数据流是自上而下的形式，所有的购物车数据都交给vuex统一管理，包括购物车组件中自身的商品数量，使整个数据流更加清晰\n             */\n            initCategoryNum(){\n                let newArr = [];\n                let cartFoodNum = 0;\n                this.totalPrice = 0;\n                this.cartFoodList = [];\n                this.menuList.forEach((item, index) => {\n                    if (this.shopCart&&this.shopCart[item.foods[0].category_id]) {\n                        let num = 0;\n                        Object.keys(this.shopCart[item.foods[0].category_id]).forEach(itemid => {\n                            Object.keys(this.shopCart[item.foods[0].category_id][itemid]).forEach(foodid => {\n                                let foodItem = this.shopCart[item.foods[0].category_id][itemid][foodid];\n                                num += foodItem.num;\n                                if (item.type == 1) {\n                                    this.totalPrice += foodItem.num*foodItem.price;\n                                    if (foodItem.num > 0) {\n                                        this.cartFoodList[cartFoodNum] = {};\n                                        this.cartFoodList[cartFoodNum].category_id = item.foods[0].category_id;\n                                        this.cartFoodList[cartFoodNum].item_id = itemid;\n                                        this.cartFoodList[cartFoodNum].food_id = foodid;\n                                        this.cartFoodList[cartFoodNum].num = foodItem.num;\n                                        this.cartFoodList[cartFoodNum].price = foodItem.price;\n                                        this.cartFoodList[cartFoodNum].name = foodItem.name;\n                                        this.cartFoodList[cartFoodNum].specs = foodItem.specs;\n                                        cartFoodNum ++;\n                                    }\n                                }\n                            })\n                        })\n                        newArr[index] = num;\n                    }else{\n                        newArr[index] = 0;\n                    }\n                })\n                this.totalPrice = this.totalPrice.toFixed(2);\n                this.categoryNum = [...newArr];\n            },\n            //控制购物列表是否显示\n            toggleCartList(){\n                this.cartFoodList.length ? this.showCartList = !this.showCartList : true;\n            },\n            //清除购物车\n            clearCart(){\n                this.toggleCartList();\n                this.CLEAR_CART(this.shopId);\n            },\n            //监听圆点是否进入购物车\n            listenInCart(){\n                if (!this.receiveInCart) {\n                    this.receiveInCart = true;\n                    this.$refs.cartContainer.addEventListener('animationend', () => {\n                        this.receiveInCart = false;\n                    })\n                    this.$refs.cartContainer.addEventListener('webkitAnimationEnd', () => {\n                        this.receiveInCart = false;\n                    })\n                }\n            },\n            //获取不同类型的评论列表\n            async changeTgeIndex(index, name){\n                this.ratingTageIndex = index;\n                this.ratingOffset = 0;\n                this.ratingTagName = name;\n                let res = await getRatingList(this.shopId, this.ratingOffset, name);\n                this.ratingList = [...res];\n                this.$nextTick(() => {\n                    this.ratingScroll.refresh();\n                })\n            },\n            //加载更多评论\n            async loaderMoreRating(){\n                if (this.preventRepeatRequest) {\n                    return\n                }\n                this.loadRatings = true;\n                this.preventRepeatRequest = true;\n                this.ratingOffset += 10;\n                let ratingDate = await getRatingList(this.shopId, this.ratingOffset, this.ratingTagName);\n                this.ratingList = [...this.ratingList,...ratingDate];\n                this.loadRatings = false;\n                if (ratingDate.length >= 10) {\n                    this.preventRepeatRequest = false;\n                }\n            },\n            //隐藏动画\n            hideLoading(){\n                this.showLoading = false;\n            },\n            //显示规格列表\n            showChooseList(foods){\n                if (foods) {\n                    this.choosedFoods = foods;\n                }\n                this.showSpecs = !this.showSpecs;\n                this.specsIndex = 0;\n            },\n            //记录当前所选规格的索引值\n            chooseSpecs(index){\n                this.specsIndex = index;\n            },\n            //多规格商品加入购物车\n            addSpecs(category_id, item_id, food_id, name, price, specs, packing_fee, sku_id, stock){\n                this.ADD_CART({shopid: this.shopId, category_id, item_id, food_id, name, price, specs, packing_fee, sku_id, stock});\n                this.showChooseList();\n            },\n            //显示提示，无法减去商品\n            showReduceTip(){\n                this.showDeleteTip = true;\n                clearTimeout(this.timer);\n                this.timer = setTimeout(() => {\n                    clearTimeout(this.timer);\n                    this.showDeleteTip = false;\n                }, 3000);\n            },\n            //显示下落圆球\n            showMoveDotFun(showMoveDot, elLeft, elBottom){\n                this.showMoveDot = [...this.showMoveDot, ...showMoveDot];\n                this.elLeft = elLeft;\n                this.elBottom = elBottom;\n            },\n            beforeEnter(el){\n                el.style.transform = `translate3d(0,${37 + this.elBottom - this.windowHeight}px,0)`;\n                el.children[0].style.transform = `translate3d(${this.elLeft - 30}px,0,0)`;\n                el.children[0].style.opacity = 0;\n            },\n            afterEnter(el){\n                el.style.transform = `translate3d(0,0,0)`;\n                el.children[0].style.transform = `translate3d(0,0,0)`;\n                el.style.transition = 'transform .55s cubic-bezier(0.3, -0.25, 0.7, -0.15)';\n                el.children[0].style.transition = 'transform .55s linear';\n                this.showMoveDot = this.showMoveDot.map(item => false);\n                el.children[0].style.opacity = 1;\n                el.children[0].addEventListener('transitionend', () => {\n                    this.listenInCart();\n                })\n                el.children[0].addEventListener('webkitAnimationEnd', () => {\n                    this.listenInCart();\n                })\n            },\n            goback(){\n                this.$router.go(-1);\n            }\n        },\n        watch: {\n            //showLoading变化时说明组件已经获取初始化数据，在下一帧nextTick进行后续操作\n            showLoading: function (value){\n                if (!value) {\n                    this.$nextTick(() => {\n                        this.getFoodListHeight();\n                        this.initCategoryNum();\n                    })\n                }\n            },\n            shopCart: function (value){\n                this.initCategoryNum();\n            },\n            //购物车列表发生变化，没有商铺时，隐藏\n            cartFoodList: function (value){\n                if(!value.length){\n                    this.showCartList = false;\n                }\n            },\n            //商品、评论切换状态\n            changeShowType: function (value){\n                if (value === 'rating') {\n                    this.$nextTick(() => {\n                        this.ratingScroll = new BScroll('#ratingContainer', {\n                            probeType: 3,\n                            deceleration: 0.003,\n                            bounce: false,\n                            swipeTime: 2000,\n                            click: true,\n                        });\n                        this.ratingScroll.on('scroll', (pos) => {\n                            if (Math.abs(Math.round(pos.y)) >=  Math.abs(Math.round(this.ratingScroll.maxScrollY))) {\n                                this.loaderMoreRating();\n                                this.ratingScroll.refresh();\n                            }\n                        })\n                    })\n                }\n            }\n        }\n    }\n</script>\n\n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n    @keyframes mymove{\n       0%   { transform: scale(1) }\n       25%  { transform: scale(.8) }\n       50%  { transform: scale(1.1) }\n       75%  { transform: scale(.9) }\n       100% { transform: scale(1) }\n    }\n    @-moz-keyframes mymove{\n       0%   { transform: scale(1) }\n       25%  { transform: scale(.8) }\n       50%  { transform: scale(1.1) }\n       75%  { transform: scale(.9) }\n       100% { transform: scale(1) }\n    }\n    @-webkit-keyframes mymove{\n       0%   { transform: scale(1) }\n       25%  { transform: scale(.8) }\n       50%  { transform: scale(1.1) }\n       75%  { transform: scale(.9) }\n       100% { transform: scale(1) }\n    }\n    @-o-keyframes mymove{\n       0%   { transform: scale(1) }\n       25%  { transform: scale(.8) }\n       50%  { transform: scale(1.1) }\n       75%  { transform: scale(.9) }\n       100% { transform: scale(1) }\n    }\n    .shop_back_svg_container{\n        position: fixed;\n        @include wh(100%, 100%);\n        img{\n            @include wh(100%, 100%);\n        }\n    }\n    .shop_container{\n        display: flex;\n        flex-direction: column;\n        position: absolute;\n        right: 0;\n        left: 0;\n        height: 100%;\n    }\n    .goback{\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 2rem;\n        z-index: 11;\n        padding-top: 0.2rem;\n        padding-left: 0.2rem;\n    }\n    .shop_detail_header{\n        // overflow: hidden;\n        position: relative;\n        .header_cover_img_con {\n          height: 100%;\n          overflow: hidden;\n          position: absolute;\n          width: 100%;\n          .header_cover_img{\n              width: 100%;\n              position: absolute;\n              top: 0;\n              left: 0;\n              z-index: 9;\n              filter: blur(10px);\n          }\n        }\n        .description_header{\n            position: relative;\n            z-index: 10;\n            background-color: rgba(119,103,137,.43);\n            padding: 0.4rem 0 0.4rem 0.4rem;\n            width: 100%;\n            overflow: hidden;\n            .description_top{\n                display: flex;\n                .description_left{\n                    margin-right: 0.3rem;\n                    img{\n                        @include wh(2.9rem, 2.9rem);\n                        display: block;\n                        border-radius: 0.15rem;\n                    }\n                }\n                .description_right{\n                    flex: 1;\n                    .description_title{\n                        @include sc(.8rem, #fff);\n                        font-weight: bold;\n                        width: 100%;\n                        margin-bottom: 0.3rem;\n                    }\n                    .description_text{\n                        @include sc(.5rem, #fff);\n                        margin-bottom: 0.3rem;\n                    }\n                    .description_promotion{\n                        @include sc(.5rem, #fff);\n                        width: 11.5rem;\n                    }\n                }\n                .description_arrow{\n                    @include ct;\n                    right: 0.3rem;\n                    z-index: 11;\n                }\n            }\n            .description_footer{\n                @include fj;\n                margin-top: 0.5rem;\n                padding-right: 1rem;\n                p{\n                    @include sc(.5rem, #fff);\n                    span{\n                        color: #fff;\n                    }\n                    .tip_icon{\n                        padding: 0 .04rem;\n                        border: 0.025rem solid #fff;\n                        border-radius: 0.1rem;\n                        font-size: .4rem;\n                        display: inline-block;\n                    }\n                }\n                .ellipsis{\n                    width: 84%;\n                }\n                .footer_arrow{\n                    @include wh(.45rem, .45rem);\n                    position: absolute;\n                    right: .3rem;\n                }\n            }\n        }\n    }\n    .activities_details{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #262626;\n        z-index: 200;\n        padding: 1.25rem;\n        .activities_shoptitle{\n            text-align: center;\n            @include sc(.8rem, #fff);\n        }\n        .activities_ratingstar{\n            display: flex;\n            justify-content: center;\n            transform: scale(2.2);\n            margin-top: .7rem;\n        }\n        .activities_list{\n            margin-top: 1.5rem;\n            margin-bottom: 1rem;\n            @include sc(.5rem, #fff);\n            li{\n                margin-bottom: .2rem;\n                .activities_icon{\n                    padding: 0 .02rem;\n                    display: inline-block;\n                    border: 0.025rem solid #fff;\n                    border-radius: 0.1rem;\n                }\n                span{\n                    color: #fff;\n                    line-height: .6rem;\n                }\n            }\n        }\n        .activities_shopinfo{\n            p{\n                line-height: .7rem;\n                @include sc(.5rem, #fff);\n            }\n        }\n        .activities_title_style{\n            text-align: center;\n            margin-bottom: 1rem;\n            span{\n                @include sc(.5rem, #fff);\n                border: 0.025rem solid #555;\n                padding: .2rem .4rem;\n                border-radius: 0.5rem;\n            }\n\n        }\n        .close_activities{\n            position: absolute;\n            bottom: 1rem;\n            @include cl;\n        }\n    }\n\n    .food_container{\n        display: flex;\n        flex: 1;\n        padding-bottom: 2rem;\n        overflow: hidden;\n    }\n    .menu_container{\n        display: flex;\n        flex: 1;\n        overflow-y: hidden;\n        position: relative;\n        .menu_left{\n            width: 3.8rem;\n            .menu_left_li{\n                padding: .7rem .3rem;\n                border-bottom: 0.025rem solid #ededed;\n                box-sizing: border-box;\n                border-left: 0.15rem solid #f8f8f8;\n                position: relative;\n                img{\n                    @include wh(.5rem, .6rem);\n                }\n                span{\n                    @include sc(.6rem, #666);\n                }\n                .category_num{\n                    position: absolute;\n                    top: .1rem;\n                    right: .1rem;\n                    background-color: #ff461d;\n                    line-height: .6rem;\n                    text-align: center;\n                    border-radius: 50%;\n                    border: 0.025rem solid #ff461d;\n                    min-width: .6rem;\n                    height: .6rem;\n                    @include sc(.5rem, #fff);\n                    font-family: Helvetica Neue,Tahoma,Arial;\n                }\n            }\n            .activity_menu{\n                border-left: 0.15rem solid #3190e8;\n                background-color: #fff;\n                span:nth-of-type(1){\n                    font-weight: bold;\n                }\n            }\n        }\n        .menu_right{\n            flex: 4;\n            overflow-y: auto;\n            .menu_detail_header{\n                width: 100%;\n                padding: .4rem;\n                position: relative;\n                @include fj;\n                align-items: center;\n                .menu_detail_header_left{\n                    width: 11rem;\n                    white-space: nowrap;\n                    overflow: hidden;\n                    .menu_item_title{\n                        @include sc(.7rem, #666);\n                        font-weight: bold;\n                    }\n                    .menu_item_description{\n                        @include sc(.5rem, #999);\n                        width: 30%;\n                        overflow: hidden;\n                    }\n                }\n                .menu_detail_header_right{\n                    @include wh(.5rem, 1rem);\n                    display: block;\n                    @include bis('../../images/icon_point.png');\n                    background-size: 100% .4rem;\n                    background-position: left center;\n                }\n                .description_tip{\n                    background-color: #39373a;\n                    opacity: 0.95;\n                    @include sc(.5rem, #fff);\n                    position: absolute;\n                    top: 1.5rem;\n                    z-index: 14;\n                    width: 8rem;\n                    right: .2rem;\n                    padding: .5rem .4rem;\n                    border: 1px;\n                    border-radius: .2rem;\n                    span{\n                        color: #fff;\n                        line-height: .6rem;\n                        font-size: .55rem;\n                    }\n                }\n                .description_tip::after{\n                    content: '';\n                    position: absolute;\n                    @include wh(.4rem, .4rem);\n                    background-color: #39373a;\n                    top: -.5rem;\n                    right: .7rem;\n                    transform: rotate(-45deg) translateY(.41rem);\n                }\n            }\n            .menu_detail_list{\n                background-color: #fff;\n                padding: .6rem .4rem;\n                border-bottom: 1px solid #f8f8f8;\n                position: relative;\n                overflow: hidden;\n                .menu_detail_link{\n                    display:flex;\n                    .menu_food_img{\n                        margin-right: .4rem;\n                        img{\n                            @include wh(2rem, 2rem);\n                            display: block;\n                        }\n                    }\n                    .menu_food_description{\n                        width: 100%;\n                        .food_description_head{\n                            @include fj;\n                            margin-bottom: .2rem;\n                            .description_foodname{\n                                @include sc(.7rem, #333);\n                            }\n                            .attributes_ul{\n                                display: flex;\n                                li{\n                                    font-size: .3rem;\n                                    height: .6rem;\n                                    line-height: .35rem;\n                                    padding: .1rem;\n                                    border: 1px solid #666;\n                                    border-radius: 0.3rem;\n                                    margin-right: .1rem;\n                                    transform: scale(.8);\n                                    p{\n                                        white-space: nowrap;\n                                    }\n                                }\n                                .attribute_new{\n                                    position: absolute;\n                                    top: 0;\n                                    left: 0;\n                                    background-color: #4cd964;\n                                    @include wh(2rem, 2rem);\n                                    display: flex;\n                                    align-items: flex-end;\n                                    transform: rotate(-45deg) translate(-.1rem, -1.5rem);\n                                    border: none;\n                                    border-radius: 0;\n                                    p{\n                                        @include sc(.4rem, #fff);\n                                        text-align: center;\n                                        flex: 1;\n                                        transform: scale(0.8) translate(0.1rem, -.1rem);\n                                    }\n                                }\n                            }\n                        }\n                        .food_description_content{\n                            @include sc(.5rem, #999);\n                            line-height: .6rem;\n                        }\n                        .food_description_sale_rating{\n                            line-height: .8rem;\n                            span{\n                                @include sc(.5rem, #333);\n                            }\n                        }\n                        .food_activity{\n                            line-height: .4rem;\n                            span{\n                                font-size: .3rem;\n                                border: 1px solid currentColor;\n                                border-radius: 0.3rem;\n                                padding: .08rem;\n                                display: inline-block;\n                                transform: scale(.8);\n                                margin-left: -0.35rem;\n\n                            }\n                        }\n                    }\n                }\n                .menu_detail_footer{\n                    margin-left: 2.4rem;\n                    font-size: 0;\n                    margin-top: .3rem;\n                    @include fj;\n                    .food_price{\n                        span{\n                            font-family: 'Helvetica Neue',Tahoma,Arial;\n                        }\n                        span:nth-of-type(1){\n                            @include sc(.5rem, #f60);\n                            margin-right: .05rem;\n                        }\n                        span:nth-of-type(2){\n                            @include sc(.7rem, #f60);\n                            font-weight: bold;\n                            margin-right: .3rem;\n                        }\n                        span:nth-of-type(3){\n                            @include sc(.5rem, #666);\n                        }\n                    }\n                }\n            }\n        }\n    }\n    .buy_cart_container{\n        position: absolute;\n        background-color: #3d3d3f;\n        bottom: 0;\n        left: 0;\n        z-index: 13;\n        display: flex;\n        @include wh(100%, 2rem);\n        .cart_icon_num{\n            flex: 1;\n            .cart_icon_container{\n                display: flex;\n                background-color: #3d3d3f;\n                position: absolute;\n                padding: .4rem;\n                border: 0.18rem solid #444;\n                border-radius: 50%;\n                left: .5rem;\n                top: -.7rem;\n                .cart_icon{\n                    @include wh(1.2rem, 1.2rem);\n                }\n                .cart_list_length{\n                    position: absolute;\n                    top: -.25rem;\n                    right: -.25rem;\n                    background-color: #ff461d;\n                    line-height: .7rem;\n                    text-align: center;\n                    border-radius: 50%;\n                    border: 0.025rem solid #ff461d;\n                    min-width: .7rem;\n                    height: .7rem;\n                    @include sc(.5rem, #fff);\n                    font-family: Helvetica Neue,Tahoma,Arial;\n                }\n            }\n            .move_in_cart{\n                animation: mymove .5s ease-in-out;\n            }\n            .cart_icon_activity{\n                 background-color: #3190e8;\n            }\n            .cart_num{\n                @include ct;\n                left: 3.5rem;\n\n                div{\n                    color: #fff;\n                }\n                div:nth-of-type(1){\n                    font-size: .8rem;\n                    font-weight: bold;\n                    margin-bottom: .1rem;\n                }\n                div:nth-of-type(2){\n                    font-size: .4rem;\n                }\n            }\n        }\n        .gotopay{\n            position: absolute;\n            right: 0;\n            background-color: #535356;\n            @include wh(5rem, 100%);\n            text-align: center;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            .gotopay_button_style{\n                @include sc(.7rem, #fff);\n                font-weight: bold;\n            }\n        }\n        .gotopay_acitvity{\n            background-color: #4cd964;\n        }\n    }\n    .cart_food_list{\n        position: fixed;\n        width: 100%;\n        padding-bottom: 2rem;\n        z-index: 12;\n        bottom: 0;\n        left: 0;\n        background-color: #fff;\n        header{\n            @include fj;\n            align-items: center;\n            padding: .3rem .6rem;\n            background-color: #eceff1;\n            svg{\n                @include wh(.6rem,.6rem);\n                vertical-align: middle;\n            }\n            h4{\n                @include sc(.7rem, #666);\n            }\n            .clear_cart{\n                @include sc(.6rem, #666);\n            }\n        }\n        .cart_food_details{\n            background-color: #fff;\n            max-height: 20rem;\n            overflow-y: auto;\n            .cart_food_li{\n                @include fj;\n                padding: .6rem .5rem;\n                .cart_list_num{\n                    width: 55%;\n                    p:nth-of-type(1){\n                        @include sc(.7rem, #666);\n                        font-weight: bold;\n                    }\n                    p:nth-of-type(2){\n                        @include sc(.4rem, #666);\n                    }\n                }\n                .cart_list_price{\n                    font-size: 0;\n                    span:nth-of-type(1){\n                        @include sc(.6rem, #f60);\n                        font-family: Helvetica Neue,Tahoma;\n\n                    }\n                    span:nth-of-type(2){\n                        @include sc(.7rem, #f60);\n                        font-family: Helvetica Neue,Tahoma;\n                        font-weight: bold;\n                    }\n                }\n                .cart_list_control{\n                    display: flex;\n                    align-items: center;\n                    span{\n                        display: flex;\n                        align-items: center;\n                        justify-content: center;\n                    }\n                    svg{\n                        @include wh(.9rem, .9rem);\n                        fill: #3190e8;\n                    }\n                    .specs_reduce_icon{\n                        fill: #999;\n                    }\n                    .cart_num{\n                        @include sc(.65rem, #666);\n                        min-width: 1rem;\n                        text-align: center;\n                        font-family: Helvetica Neue,Tahoma;\n                    }\n                }\n            }\n        }\n    }\n    .screen_cover{\n        position: fixed;\n        top: 0;\n        bottom: 0;\n        left: 0;\n        right: 0;\n        background-color: rgba(0,0,0,.3);\n        z-index: 11;\n    }\n    .change_show_type{\n        display: flex;\n        background-color: #fff;\n        padding: .3rem 0 .6rem;\n        border-bottom: 1px solid #ebebeb;\n        div{\n            flex: 1;\n            text-align: center;\n            span{\n                @include sc(.65rem, #666);\n                padding: .2rem .1rem;\n                border-bottom: 0.12rem solid #fff;\n            }\n            .activity_show{\n                color: #3190e8;\n                border-color: #3190e8;\n            }\n        }\n    }\n    .rating_container{\n        flex: 1;\n        overflow-y: hidden;\n        flex-direction: column;\n        p, span, li, time{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n        .rating_header{\n            display: flex;\n            background-color: #fff;\n            padding: .8rem .5rem;\n            margin-bottom: 0.5rem;\n            .rating_header_left{\n                flex: 3;\n                text-align: center;\n                p:nth-of-type(1){\n                    @include sc(1.2rem, #f60);\n                }\n                p:nth-of-type(2){\n                    @include sc(.65rem, #666);\n                    margin-bottom: .1rem;\n                }\n                p:nth-of-type(3){\n                    @include sc(.4rem, #999);\n                }\n            }\n            .rating_header_right{\n                flex: 4;\n                p{\n                    font-size: .65rem;\n                    line-height: 1rem;\n                    display: flex;\n                    align-items: center;\n                    justify-content: flex-start;\n                    span:nth-of-type(1){\n                        color: #666;\n                        margin-right: .5rem;\n                    }\n                    .rating_num{\n                        width: 3rem;\n                        @include sc(.55rem, #f60);\n                    }\n                    .delivery_time{\n                        @include sc(.4rem, #999);\n                    }\n                }\n            }\n        }\n        .tag_list_ul{\n            display: flex;\n            flex-wrap: wrap;\n            background-color: #fff;\n            padding: .5rem;\n            li{\n                @include sc(.6rem, #6d7885);\n                padding: .3rem .3rem;\n                background-color: #ebf5ff;\n                border-radius: 0.2rem;\n                border: 1px;\n                margin: 0 .4rem .2rem 0;\n            }\n            .unsatisfied{\n                background-color: #f5f5f5;\n                color: #aaa;\n            }\n            .tagActivity{\n                background-color: #3190e8;\n                color: #fff;\n            }\n        }\n        .rating_list_ul{\n            background-color: #fff;\n            padding: 0 .5rem;\n            .rating_list_li{\n                border-top: 1px solid #f1f1f1;\n                display: flex;\n                padding: .6rem 0;\n                .user_avatar{\n                    @include wh(1.5rem, 1.5rem);\n                    border: 0.025rem;\n                    border-radius: 50%;\n                    margin-right: .8rem;\n                }\n                .rating_list_details{\n                    flex: 1;\n                    header{\n                        display: flex;\n                        flex: 1;\n                        justify-content: space-between;\n                        margin-bottom: .3rem;\n                        .username_star{\n                            @include sc(.55rem, #666);\n                            .username{\n                                color: #666;\n                                margin-bottom: .2rem;\n                            }\n                            .star_desc{\n                                display: flex;\n                                align-items: center;\n                                .time_spent_desc{\n                                    @include sc(.55rem, #666)\n                                    margin-left: .15rem;\n                                }\n                            }\n                        }\n                        .rated_at{\n                            @include sc(.4rem, #999);\n                        }\n                    }\n                    .food_img_ul{\n                        display: flex;\n                        flex-wrap: wrap;\n                        margin-bottom: .4rem;\n                        li{\n                            img{\n                                @include wh(3rem, 3rem);\n                                margin-right: .4rem;\n                                display: block;\n                            }\n                        }\n                    }\n                    .food_name_ul{\n                        display: flex;\n                        flex-wrap: wrap;\n                        li{\n                            @include sc(.55rem, #999);\n                            width: 2.2rem;\n                            padding: .2rem;\n                            border: 0.025rem solid #ebebeb;\n                            border-radius: 0.15rem;\n                            margin-right: .3rem;\n                            margin-bottom: 4px;\n                        }\n                    }\n                }\n            }\n        }\n    }\n    .specs_cover{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: rgba(0,0,0,.4);\n        z-index: 17;\n    }\n    .specs_list{\n        position: fixed;\n        top: 35%;\n        left: 15%;\n        width: 70%;\n        background-color: #fff;\n        z-index: 18;\n        border: 1px;\n        border-radius: 0.2rem;\n        .specs_list_header{\n            h4{\n                @include sc(.7rem, #222);\n                font-weight: normal;\n                text-align: center;\n                padding: .5rem;\n            }\n            .specs_cancel{\n                position: absolute;\n                right: .5rem;\n                top: .5rem;\n            }\n        }\n        .specs_details{\n            padding: .5rem;\n            .specs_details_title{\n                @include sc(.6rem, #666);\n            }\n            ul{\n                display: flex;\n                flex-wrap: wrap;\n                padding: .4rem 0;\n                li{\n                    font-size: .6rem;\n                    padding: .3rem .5rem;\n                    border: 0.025rem solid #ddd;\n                    border-radius: .2rem;\n                    margin-right: .5rem;\n                    margin-bottom: .2rem;\n                }\n                .specs_activity{\n                    border-color: #3199e8;\n                    color: #3199e8;\n                }\n            }\n        }\n        .specs_footer{\n            @include fj;\n            align-items: center;\n            background-color: #f9f9f9;\n            padding: 0.5rem;\n            border: 1px;\n            border-bottom-left-radius: .2rem;\n            border-bottom-right-radius: .2rem;\n            .specs_price{\n                span{\n                    color: #ff6000;\n                }\n                span:nth-of-type(1){\n                    font-size: .5rem;\n                }\n                span:nth-of-type(2){\n                    font-size: .8rem;\n                    font-weight: bold;\n                    font-family: Helvetica Neue,Tahoma;\n                }\n            }\n            .specs_addto_cart{\n                @include wh(4rem, 1.3rem);\n                background-color: #3199e8;\n                border: 1px;\n                border-radius: 0.15rem;\n                @include sc(.6rem, #fff);\n                text-align: center;\n                line-height: 1.3rem;\n            }\n        }\n    }\n    .show_delete_tip{\n        position: fixed;\n        top: 50%;\n        left: 15%;\n        width: 70%;\n        transform: translateY(-50%);\n        background-color: rgba(0,0,0,.8);\n        z-index: 18;\n        @include sc(.65rem, #fff);\n        text-align: center;\n        padding: .5rem 0;\n        border: 1px;\n        border-radius: 0.25rem;\n    }\n    .move_dot{\n        position: fixed;\n        bottom: 30px;\n        left: 30px;\n\n        svg{\n            @include wh(.9rem, .9rem);\n            fill: #3190e8;\n        }\n    }\n    .fade-enter-active, .fade-leave-active {\n        transition: opacity .5s;\n    }\n    .fade-enter, .fade-leave-active {\n        opacity: 0;\n    }\n    .fade-choose-enter-active, .fade-choose-leave-active {\n        transition: opacity .5s;\n    }\n    .fade-choose-leave, .fade-choose-leave-active {\n        display: none;\n    }\n    .fade-choose-enter, .fade-choose-leave-active {\n        opacity: 0;\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n    .toggle-cart-enter-active, .toggle-cart-leave-active {\n        transition: all .3s ease-out;\n    }\n    .toggle-cart-enter, .toggle-cart-leave-active {\n        transform: translateY(100%);\n    }\n\n</style>\n"
  },
  {
    "path": "src/page/vipcard/children/invoiceRecord.vue",
    "content": " <template>\n  <div class=\"page_container\">\n        <head-top head-title=\"购买记录\" go-back='true'></head-top>\n        <!-- 没有办过会员卡，获取不到数据，只好写死 -->\n        <section class=\"invoice_contianer\">\n            <img src=\"../../../images/no-log.png\">\n            <p>没有购买记录</p>    \n        </section>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {getOrderList} from 'src/service/getData'\n\n    export default {\n      data(){\n            return{\n    \n            }\n        },\n        mounted(){\n\n        },\n        computed: {\n            ...mapState([\n                'userInfo', \n            ]),\n        },\n        components: {\n            headTop,\n        },\n        methods: {\n            ...mapMutations([\n                'SAVE_AVANDER'\n            ]),\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .invoice_contianer{\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        img{\n            @include wh(8rem, 5rem);\n            margin-top: 5rem;\n        }\n        p{\n            @include sc(.6rem, #999);\n            margin-top: .8rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/vipcard/children/useCart.vue",
    "content": " <template>\n  <div class=\"page_container\">\n        <head-top head-title=\"兑换会员\" go-back='true'></head-top>\n        <p class=\"buy_for\">成功兑换后将关联到当前帐号： <span>{{userInfo.username}}</span></p>\n        <form class=\"form_style\">\n        \t<input type=\"text\" name=\"cartNumber\" maxlength=\"10\" v-model=\"cartNumber\" placeholder=\"请输入10位卡号\">\n        \t<input type=\"text\" name=\"passWord\" maxlength=\"6\" v-model=\"passWord\" placeholder=\"请输入6位卡密\">\n        </form>\n        <p class=\"determine\" :class=\"{could_pay: couldPay}\" @click=\"confrimPay\">兑换</p>\n        <footer class=\"Binding\">\n\t        <h3>——温馨提示——</h3>\n\t        <p>新兑换的会员服务，权益以「会员说明」为准。</p>\n\t        <p>月卡：<b>30次</b>减免配送费。</p>\n\t        <p>季卡：<b>90次</b>减免配送费。</p>\n\t        <p>年卡：<b>360</b>次减免配送费。</p>\n\t        <p>＊仅限蜂鸟专送订单，每日最多减免3单，每单最高减免4元（一个月按31天计算）</p>\n        </footer>\n        <alert-tip v-if=\"showAlert\" @closeTip=\"showAlert = false\" :alertText=\"alertText\"></alert-tip>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {vipCart} from 'src/service/getData'\n    import alertTip from 'src/components/common/alertTip'\n\n    export default {\n      data(){\n            return{\n    \t\t\tcartNumber: null,\n    \t\t\tpassWord: null,\n    \t\t\tshowAlert: false,\n    \t\t\talertText: null,\n            }\n        },\n        mounted(){\n\n        },\n        computed: {\n            ...mapState([\n                'userInfo', \n            ]),\n            couldPay: function (){\n            \treturn (/^\\d{10}$/.test(this.cartNumber))&&(/^\\d{6}$/.test(this.passWord)) ;\n            },\n        },\n        components: {\n            headTop,\n            alertTip,\n        },\n        methods: {\n            async confrimPay(){\n            \tif (this.couldPay) {\n            \t\tlet res = await vipCart(this.userInfo.id, this.cartNumber, this.passWord);\n            \t\tif (res.message) {\n            \t\t\tthis.showAlert = true;\n            \t\t\tthis.alertText = res.message;\n            \t\t}else if(res.name){\n            \t\t\tthis.showAlert = true;\n            \t\t\tthis.alertText = res.name;\n            \t\t}\n            \t}\n            }\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #f5f5f5;\n        z-index: 202;\n        padding-top: 1.95rem;\n        p, span, input{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .buy_for{\n        @include sc(.6rem, #666);\n        line-height: 2rem;\n        padding-left: 0.7rem;\n        span{\n            font-weight: bold;\n        }\n    }\n    .form_style{\n    \tdisplay: flex;\n    \tflex-direction: column;\n    \tinput{\n    \t\tborder-bottom: 1px solid #f5f5f5;\n    \t\theight: 2rem;\n    \t\t@include sc(.65rem, #999);\n    \t\tpadding-left: .7rem;\n    \t}\n    }\n    .determine{\n        background-color: #ccc;\n        @include sc(.7rem, #fff);\n        text-align: center;\n        margin: 0 .7rem;\n        line-height: 1.8rem;\n        border-radius: 0.2rem;\n        margin-top: 0.7rem;\n        font-weight: bold;\n    }\n    .could_pay{\n    \tbackground-color: #4cd964;\n    }\n    .Binding{\n    \tmargin-top: 1rem;\n    \th3{\n    \t\ttext-align: center;\n    \t\tfont-weight: normal;\n    \t\t@include sc(.65rem, #aaa);\n    \t\tmargin-bottom: .6rem;\n    \t}\n    \tp, b{\n    \t\t@include sc(.5rem, #aaa);\n    \t\tline-height: .8rem;\n    \t}\n    \tp{\n    \t\tpadding-left: 2rem;\n    \t}\n    }\n</style>\n"
  },
  {
    "path": "src/page/vipcard/children/vipDescription.vue",
    "content": " <template>\n  <div class=\"page_container\">\n        <head-top head-title=\"我的优惠\" go-back='true'></head-top>\n        <div class=\"markdown\">\n            <blockquote>\n                <p>尊敬的用户，随着会员体系逐渐完善，自2016年10月10日起，饿了么会员权益将做如下优化：\n                购卡后31天内，累积享有30单减免配送费服务（每日最多3单，每单最高减免4元）。\n                注：已购买的会员服务不受影响，当前会员服务失效前无法购买新卡。</p>\n            </blockquote>\n            <h3 id=\"q1-\">Q1: 特权介绍</h3>\n            <ul>\n                <li>身份标识：饿了么会员服务有效期内，享有专属皇冠标识。</li>\n                <li>减免配送费： 饿了么会员卡自绑定账户之日起31天内，在「蜂鸟专送」标识商家下单，享有30次减免配送费特权，每日最多减免3单，每单最高可减4元。</li>\n                <li>更多特权，敬请期待！</li>\n            </ul>\n            <h3 id=\"q2-\">Q2: 资费介绍</h3>\n            <ul>\n                <li>饿了么会员卡：20元</li>\n            </ul>\n            <h3 id=\"q3-\">Q3: 使用说明</h3>\n            <p>当用户满足以下任一条件，会员服务自动失效：</p>\n            <ol>\n                <li>自绑定之日起超过31天；</li>\n                <li>在31天内累计使用减免配送费的蜂鸟订单数量达到30单；</li>\n            </ol>\n            <h3 id=\"q4-\">Q4: 购卡说明</h3>\n            <ul>\n                <li>在线购买：饿了么App&gt;我的&gt;饿了么会员卡</li>\n            </ul>\n            <h3 id=\"q5-\">Q5: 温馨提示</h3>\n            <ul>\n                <li>用户在当前会员服务失效前，无法购买新卡。</li>\n                <li>请认准饿了么官方渠道，任何从其他第三方途径获得的会员卡，饿了么不保证其可用性。</li>\n            </ul>\n        </div>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {getOrderList} from 'src/service/getData'\n\n    export default {\n      data(){\n            return{\n    \n            }\n        },\n        mounted(){\n\n        },\n        computed: {\n            ...mapState([\n                'userInfo', \n            ]),\n        },\n        components: {\n            headTop,\n        },\n        methods: {\n            ...mapMutations([\n                'SAVE_AVANDER'\n            ]),\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .page_container{\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background-color: #fff;\n        z-index: 202;\n        padding-top: 1.95rem;\n        overflow-y: auto;\n        color: #999;\n        font-size: .6rem;\n        padding: 2rem .7rem 0;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .markdown h1, .markdown h2, .markdown h3, .markdown h4, .markdown h5 {\n        margin-top: 0.666667rem;\n        margin-bottom: 0.2rem;\n        font-size: 0.7rem;\n        font-weight: 600;\n        color: #333;\n    }\n    .markdown ul {\n        li{\n            color: #666;\n            margin-bottom: .2rem;\n        }\n    }\n</style>\n"
  },
  {
    "path": "src/page/vipcard/vipcard.vue",
    "content": " <template>\n  <div class=\"rating_page\">\n        <head-top head-title=\"会员中心\" go-back='true'></head-top>\n        <section v-if=\"userInfo\">\n            <p class=\"buy_for\">为账户 <span>{{userInfo.username}}</span> 购买会员</p>\n            <section class=\"vip_prerogative\">\n                <router-link to=\"/vipcard/vipDescription\" class=\"header_style\">\n                    <span class=\"header_left\">会员特权</span>\n                    <section class=\"header_right\">\n                        <span>会员说明</span>  \n                        <svg fill=\"#ccc\">\n                            <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                        </svg> \n                    </section>\n                </router-link>\n                <section class=\"vip_detail\">\n                    <div class=\"vip_detail_left\">\n                        <img src=\"../../images/sheng.jpeg\" height=\"80\" width=\"70\">\n                    </div>\n                    <div class=\"vip_detail_right\">\n                        <h4>减免配送费</h4>\n                        <p>每月减免30单，每日可减免3单，每单最高减4元</p>\n                        <p>蜂鸟专送专享</p>\n                    </div>\n                </section>\n                <section class=\"vip_detail\">\n                    <div class=\"vip_detail_left\">\n                        <img src=\"../../images/jifen.jpeg\" height=\"80\" width=\"70\">\n                    </div>\n                    <div class=\"vip_detail_right\">\n                        <h4>减免配送费</h4>\n                        <p>每月减免30单，每日可减免3单，每单最高减4元</p>\n                        <p>蜂鸟专送专享</p>\n                    </div>\n                </section>   \n            </section>\n            <section class=\"apply_vip\">\n                <header class=\"header_style\">\n                    <span class=\"header_left\">开通会员</span>\n                </header>\n                <section class=\"apply_vip_buy\">\n                    <div class=\"apply_vip_buy_left\">\n                        <span>1个月</span>\n                        <span> ¥20</span>\n                    </div>\n                    <div class=\"apply_vip_buy_right\" @click=\"buyCart\">购买</div>\n                </section>\n            </section>\n            <router-link to=\"/vipcard/useCart\" class=\"header_style common_style\">\n                <span class=\"header_left\">兑换会员</span>\n                <section class=\"header_right\">\n                    <span>使用卡号卡密</span>  \n                    <svg fill=\"#ccc\">\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                    </svg> \n                </section>\n            </router-link>\n            <router-link to=\"/vipcard/invoiceRecord\" class=\"header_style common_style\">\n                <span class=\"header_left\">购买记录</span>\n                <section class=\"header_right\">\n                    <span>开发票</span>  \n                    <svg fill=\"#ccc\">\n                        <use xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href=\"#arrow-right\"></use>\n                    </svg> \n                </section>\n            </router-link>\n        </section>\n        <transition name=\"router-slid\" mode=\"out-in\">\n            <router-view></router-view>\n        </transition>\n    </div>\n</template>\n\n<script>\n    import headTop from 'src/components/header/head'\n    import {mapState, mapMutations} from 'vuex'\n    import {getOrderList} from 'src/service/getData'\n\n    export default {\n      data(){\n            return{\n    \n            }\n        },\n        mounted(){\n            \n        },\n        computed: {\n            ...mapState([\n                'userInfo', \n            ]),\n        },\n        components: {\n            headTop,\n        },\n        methods: {\n            ...mapMutations([\n                'ORDER_SUCCESS', 'BUY_CART'\n            ]),\n            buyCart(){\n                this.ORDER_SUCCESS({order_id: '399525134200981325'});\n                this.BUY_CART(20);\n                this.$router.push('/confirmOrder/payment');\n            },\n        }\n    }\n</script>\n  \n<style lang=\"scss\" scoped>\n    @import 'src/style/mixin';\n  \n    .rating_page{\n        padding-top: 1.95rem;\n        p, span{\n            font-family: Helvetica Neue,Tahoma,Arial;\n        }\n    }\n    .buy_for{\n        @include sc(.6rem, #666);\n        line-height: 2rem;\n        padding-left: 0.7rem;\n        span{\n            font-weight: bold;\n        }\n    }\n    .vip_prerogative{\n        background-color: #fff;\n        padding-left: .7rem;\n        margin-bottom: 0.5rem;\n        .vip_detail{\n            display: flex;\n            border-bottom: 1px solid #f5f5f5;\n            padding: .8rem 0;\n            .vip_detail_left{\n                margin-right: .6rem;\n                img{\n                    @include wh(1.6rem, 1.8rem);\n                }\n            }\n            .vip_detail_right{\n                h4{\n                    @include sc(.7rem, #333);\n                    font-weight: normal;\n                }\n                p{\n                    @include sc(.5rem, #999);\n                }\n            }\n        }\n    }\n    .apply_vip{\n        background-color: #fff;\n        padding-left: .7rem;\n        margin-bottom: 0.5rem;\n        .apply_vip_buy{\n            @include fj;\n            align-items: center;\n            padding-right: .7rem;\n            font-size: .7rem;\n            line-height: 2.6rem;\n            .apply_vip_buy_left{\n                span:nth-of-type(2){\n                    font-weight: bold;\n                    color: #f60;\n                }\n            }\n            .apply_vip_buy_right{\n                border: 0.025rem solid #f60;\n                border-radius: 0.2rem;\n                line-height: 1.2rem;\n                height: 1.2rem;\n                width: 2.6rem;\n                text-align: center;\n                @include sc(.6rem, #f60);\n            }\n        }\n    }\n    .header_style{\n        @include fj;\n        background-color: #fff;\n        line-height: 2rem;\n        border-bottom: 1px solid #f5f5f5;\n        padding-right: .7rem;\n        .header_left{\n            @include sc(.7rem, #333);\n        }\n        .header_right{\n            display: flex;\n            align-items: center;\n            span{\n                @include sc(.6rem, #999);\n                margin-right: .2rem;\n            }\n            svg{\n                @include wh(.5rem, .5rem);\n            }\n        }\n    }\n    .common_style{\n        padding: 0 .7rem;\n        margin-bottom: 0.5rem;\n    }\n    .router-slid-enter-active, .router-slid-leave-active {\n        transition: all .4s;\n    }\n    .router-slid-enter, .router-slid-leave-active {\n        transform: translate3d(2rem, 0, 0);\n        opacity: 0;\n    }\n</style>\n"
  },
  {
    "path": "src/router/router.js",
    "content": "import App from '../App'\n\nconst home = r => require.ensure([], () => r(require('../page/home/home')), 'home')\nconst city = r => require.ensure([], () => r(require('../page/city/city')), 'city')\nconst msite = r => require.ensure([], () => r(require('../page/msite/msite')), 'msite')\nconst search = r => require.ensure([], () => r(require('../page/search/search')), 'search')\nconst shop = r => require.ensure([], () => r(require('../page/shop/shop')), 'shop')\nconst login = r => require.ensure([], () => r(require('../page/login/login')), 'login')\nconst profile = r => require.ensure([], () => r(require('../page/profile/profile')), 'profile')\nconst forget = r => require.ensure([], () => r(require('../page/forget/forget')), 'forget')\nconst order = r => require.ensure([], () => r(require('../page/order/order')), 'order')\nconst orderDetail = r => require.ensure([], () => r(require('../page/order/children/orderDetail')), 'orderDetail')\nconst vipcard = r => require.ensure([], () => r(require('../page/vipcard/vipcard')), 'vipcard')\nconst invoiceRecord = r => require.ensure([], () => r(require('../page/vipcard/children/invoiceRecord')), 'invoiceRecord')\nconst useCart = r => require.ensure([], () => r(require('../page/vipcard/children/useCart')), 'useCart')\nconst vipDescription = r => require.ensure([], () => r(require('../page/vipcard/children/vipDescription')), 'vipDescription')\nconst food = r => require.ensure([], () => r(require('../page/food/food')), 'food')\nconst confirmOrder = r => require.ensure([], () => r(require('../page/confirmOrder/confirmOrder')), 'confirmOrder')\nconst remark = r => require.ensure([], () => r(require('../page/confirmOrder/children/remark')), 'remark')\nconst payment = r => require.ensure([], () => r(require('../page/confirmOrder/children/payment')), 'payment')\nconst userValidation = r => require.ensure([], () => r(require('../page/confirmOrder/children/userValidation')), 'userValidation')\nconst invoice = r => require.ensure([], () => r(require('../page/confirmOrder/children/invoice')), 'invoice')\nconst chooseAddress = r => require.ensure([], () => r(require('../page/confirmOrder/children/chooseAddress')), 'chooseAddress')\nconst addAddress = r => require.ensure([], () => r(require('../page/confirmOrder/children/children/addAddress')), 'addAddress')\nconst searchAddress = r => require.ensure([], () => r(require('../page/confirmOrder/children/children/children/searchAddress')), 'searchAddress')\nconst foodDetail = r => require.ensure([], () => r(require('../page/shop/children/foodDetail')), 'foodDetail')\nconst shopDetail = r => require.ensure([], () => r(require('../page/shop/children/shopDetail')), 'shopDetail')\nconst shopSafe = r => require.ensure([], () => r(require('../page/shop/children/children/shopSafe')), 'shopSafe')\nconst info = r => require.ensure([], () => r(require('../page/profile/children/info')), 'info')\nconst setusername = r => require.ensure([], () => r(require('../page/profile/children/children/setusername')), 'setusername')\nconst address = r => require.ensure([], () => r(require('../page/profile/children/children/address')), 'address')\nconst add = r => require.ensure([], () => r(require('../page/profile/children/children/children/add')), 'add')\nconst addDetail = r => require.ensure([], () => r(require('../page/profile/children/children/children/children/addDetail')), 'addDetail')\nconst balance = r => require.ensure([], () => r(require('../page/balance/balance')), 'balance')\nconst balanceDetail = r => require.ensure([], () => r(require('../page/balance/children/detail')), 'balanceDetail')\nconst benefit = r => require.ensure([], () => r(require('../page/benefit/benefit')), 'benefit')\nconst coupon = r => require.ensure([], () => r(require('../page/benefit/children/coupon')), 'coupon')\nconst hbDescription = r => require.ensure([], () => r(require('../page/benefit/children/hbDescription')), 'hbDescription')\nconst hbHistory = r => require.ensure([], () => r(require('../page/benefit/children/hbHistory')), 'hbHistory')\nconst exchange = r => require.ensure([], () => r(require('../page/benefit/children/exchange')), 'exchange')\nconst commend = r => require.ensure([], () => r(require('../page/benefit/children/commend')), 'commend')\nconst points = r => require.ensure([], () => r(require('../page/points/points')), 'points')\nconst pointsDetail = r => require.ensure([], () => r(require('../page/points/children/detail')), 'pointsDetail')\nconst service = r => require.ensure([], () => r(require('../page/service/service')), 'service')\nconst questionDetail = r => require.ensure([], () => r(require('../page/service/children/questionDetail')), 'questionDetail')\nconst find = r => require.ensure([], () => r(require('../page/find/find')), 'find')\nconst download = r => require.ensure([], () => r(require('../page/download/download')), 'download')\n\n\n\n\nexport default [{\n    path: '/',\n    component: App, //顶层路由，对应index.html\n    children: [ //二级路由。对应App.vue\n        //地址为空时跳转home页面\n        {\n            path: '',\n            redirect: '/home'\n        },\n        //首页城市列表页\n        {\n            path: '/home',\n            component: home\n        },\n        //当前选择城市页\n        {\n            path: '/city/:cityid',\n            component: city\n        },\n        //所有商铺列表页\n        {\n            path: '/msite',\n            component: msite,\n            meta: { keepAlive: true },\n        },\n        //特色商铺列表页\n        {\n            path: '/food',\n            component: food\n        },\n        //搜索页\n        {\n            path: '/search/:geohash',\n            component: search\n        },\n        //商铺详情页\n        {\n            path: '/shop',\n            component: shop,\n            children: [{\n                path: 'foodDetail', //食品详情页\n                component: foodDetail,\n            }, {\n                path: 'shopDetail', //商铺详情页\n                component: shopDetail,\n                children: [{\n                    path: 'shopSafe', //商铺安全认证页\n                    component: shopSafe,\n                }, ]\n            }]\n        },\n        //确认订单页\n        {\n            path: '/confirmOrder',\n            component: confirmOrder,\n            children: [{\n                path: 'remark', //订单备注\n                component: remark,\n            }, {\n                path: 'invoice', //发票抬头\n                component: invoice,\n            }, {\n                path: 'payment', //付款页面\n                component: payment,\n            }, {\n                path: 'userValidation', //用户验证\n                component: userValidation,\n            }, {\n                path: 'chooseAddress', //选择地址\n                component: chooseAddress,\n                children: [{\n                    path: 'addAddress', //添加地址\n                    component: addAddress,\n                    children: [{\n                        path: 'searchAddress', //搜索地址\n                        component: searchAddress,\n                    }]\n                }, ]\n            }, ]\n        },\n        //登录注册页\n        {\n            path: '/login',\n            component: login\n        },\n        //个人信息页\n        {\n            path: '/profile',\n            component: profile,\n            children: [{\n                path: 'info', //个人信息详情页\n                component: info,\n                children: [{\n                    path: 'setusername',\n                    component: setusername,\n                },{\n                    path: 'address',\n                    component: address,     //编辑地址\n                    children:[{\n                        path:'add',\n                        component:add,\n                        children:[{\n                            path:'addDetail',\n                            component:addDetail\n                        }]\n                    }]\n                }]\n            },\n            {\n                path: 'service', //服务中心\n                component: service,\n            },]\n        },\n        //修改密码页\n        {\n            path: '/forget',\n            component: forget\n        },\n        //订单列表页\n        {\n            path: '/order',\n            component: order,\n            children: [{\n                path: 'orderDetail', //订单详情页\n                component: orderDetail,\n            }, ]\n        },\n        //vip卡页\n        {\n            path: '/vipcard',\n            component: vipcard,\n            children: [{\n                path: 'invoiceRecord', //开发票\n                component: invoiceRecord,\n            }, {\n                path: 'useCart', //购买会员卡\n                component: useCart,\n            }, {\n                path: 'vipDescription', //会员说明\n                component: vipDescription,\n            },]\n        },\n        //发现页\n        {\n            path: '/find',\n            component: find\n        },\n        //下载页\n        {\n            path: '/download',\n            component: download\n        },\n        //服务中心\n        {\n            path: '/service',\n            component: service,\n             children: [{\n                path: 'questionDetail', //订单详情页\n                component: questionDetail,\n            }, ]\n        },\n        //余额\n        {\n            path: 'balance',\n            component: balance,\n            children: [{\n                path: 'detail', //余额说明\n                component: balanceDetail,\n            }, ]\n        },\n        //我的优惠页\n        {\n            path: 'benefit',\n            component: benefit,\n            children: [{\n                path: 'coupon', //代金券说明\n                component: coupon,\n            }, {\n                path: 'hbDescription', //红包说明\n                component: hbDescription,\n            }, {\n                path: 'hbHistory', //历史红包\n                component: hbHistory,\n            }, {\n                path: 'exchange', //兑换红包\n                component: exchange,\n            }, {\n                path: 'commend', //推荐有奖\n                component: commend,\n            },]\n        },\n        //我的积分页\n        {\n            path: 'points',\n            component: points,\n            children: [{\n                path: 'detail', //积分说明\n                component: pointsDetail,\n            }, ]\n        },\n    ]\n}]\n"
  },
  {
    "path": "src/service/getData.js",
    "content": "import fetch from '../config/fetch'\nimport {getStore} from '../config/mUtils'\n\n/**\n * 获取首页默认地址\n */\n\nexport const cityGuess = () => fetch('/v1/cities', {\n\ttype: 'guess'\n});\n\n\n/**\n * 获取首页热门城市\n */\n\nexport const hotcity = () => fetch('/v1/cities', {\n\ttype: 'hot'\n});\n\n\n/**\n * 获取首页所有城市\n */\n\nexport const groupcity = () => fetch('/v1/cities', {\n\ttype: 'group'\n});\n\n\n/**\n * 获取当前所在城市\n */\n\nexport const currentcity = number => fetch('/v1/cities/' + number);\n\n\n/**\n * 获取搜索地址\n */\n\nexport const searchplace = (cityid, value) => fetch('/v1/pois', {\n\ttype: 'search',\n\tcity_id: cityid,\n\tkeyword: value\n});\n\n\n/**\n * 获取msite页面地址信息\n */\n\nexport const msiteAddress = geohash => fetch('/v2/pois/' + geohash);\n\n\n/**\n * 获取msite页面食品分类列表\n */\n\nexport const msiteFoodTypes = geohash => fetch('/v2/index_entry', {\n\tgeohash,\n\tgroup_type: '1',\n\t'flags[]': 'F'\n});\n\n\n/**\n * 获取msite商铺列表\n */\n\nexport const shopList = (latitude, longitude, offset, restaurant_category_id = '', restaurant_category_ids = '', order_by = '', delivery_mode = '', support_ids = []) => {\n\tlet supportStr = '';\n\tsupport_ids.forEach(item => {\n\t\tif (item.status) {\n\t\t\tsupportStr += '&support_ids[]=' + item.id;\n\t\t}\n\t});\n\tlet data = {\n\t\tlatitude,\n\t\tlongitude,\n\t\toffset,\n\t\tlimit: '20',\n\t\t'extras[]': 'activities',\n\t\tkeyword: '',\n\t\trestaurant_category_id,\n\t\t'restaurant_category_ids[]': restaurant_category_ids,\n\t\torder_by,\n\t\t'delivery_mode[]': delivery_mode + supportStr\n\t};\n\treturn fetch('/shopping/restaurants', data);\n};\n\n\n/**\n * 获取search页面搜索结果\n */\n\nexport const searchRestaurant = (geohash, keyword) => fetch('/v4/restaurants', {\n\t'extras[]': 'restaurant_activity',\n\tgeohash,\n\tkeyword,\n\ttype: 'search'\n});\n\n\n/**\n * 获取food页面的 category 种类列表\n */\n\nexport const foodCategory = (latitude, longitude) => fetch('/shopping/v2/restaurant/category', {\n\tlatitude,\n\tlongitude\n});\n\n\n/**\n * 获取food页面的配送方式\n */\n\nexport const foodDelivery = (latitude, longitude) => fetch('/shopping/v1/restaurants/delivery_modes', {\n\tlatitude,\n\tlongitude,\n\tkw: ''\n});\n\n\n/**\n * 获取food页面的商家属性活动列表\n */\n\nexport const foodActivity = (latitude, longitude) => fetch('/shopping/v1/restaurants/activity_attributes', {\n\tlatitude,\n\tlongitude,\n\tkw: ''\n});\n\n\n/**\n * 获取shop页面商铺详情\n */\n\nexport const shopDetails = (shopid, latitude, longitude) => fetch('/shopping/restaurant/' + shopid, {\n\tlatitude,\n\tlongitude: longitude + '&extras[]=activities&extras[]=album&extras[]=license&extras[]=identification&extras[]=statistics'\n});\n\n\n\n/**\n * 获取shop页面菜单列表\n */\n\nexport const foodMenu = restaurant_id => fetch('/shopping/v2/menu', {\n\trestaurant_id\n});\n\n\n/**\n * 获取商铺评价列表\n */\n\nexport const getRatingList = (shopid, offset, tag_name = '') => fetch('/ugc/v2/restaurants/' + shopid + '/ratings', {\n\thas_content: true,\n\toffset,\n\tlimit: 10,\n\ttag_name\n});\n\n\n/**\n * 获取商铺评价分数\n */\n\nexport const ratingScores = shopid => fetch('/ugc/v2/restaurants/' + shopid + '/ratings/scores');\n\n\n/**\n * 获取商铺评价分类\n */\n\nexport const ratingTags = shopid => fetch('/ugc/v2/restaurants/' + shopid + '/ratings/tags');\n\n\n/**\n * 获取短信验证码\n */\n\nexport const mobileCode = phone => fetch('/v4/mobile/verify_code/send', {\n\tmobile: phone,\n\tscene: 'login',\n\ttype: 'sms'\n}, 'POST');\n\n\n/**\n * 获取图片验证码\n */\n\nexport const getcaptchas = () => fetch('/v1/captchas', {},'POST');\n\n\n/**\n * 检测帐号是否存在\n */\n\nexport const checkExsis = (checkNumber, type) => fetch('/v1/users/exists', {\n\t[type]: checkNumber,\n\ttype\n});\n\n\n/**\n * 发送帐号\n */\n\nexport const sendMobile = (sendData, captcha_code, type, password) => fetch('/v1/mobile/verify_code/send', {\n\taction: \"send\",\n\tcaptcha_code,\n\t[type]: sendData,\n\ttype: \"sms\",\n\tway: type,\n\tpassword,\n}, 'POST');\n\n\n/**\n * 确认订单\n */\n\nexport const checkout = (geohash, entities, shopid) => fetch('/v1/carts/checkout', {\n\tcome_from: \"web\",\n\tgeohash,\n\tentities,\n\trestaurant_id: shopid,\n}, 'POST');\n\n\n/**\n * 获取快速备注列表\n */\n\nexport const getRemark = (id, sig) => fetch('/v1/carts/' + id + '/remarks', {\n\tsig\n});\n\n\n/**\n * 获取地址列表\n */\n\nexport const getAddress = (id, sig) => fetch('/v1/carts/' + id + '/addresses', {\n\tsig\n});\n\n\n/**\n * 搜索地址\n */\n\nexport const searchNearby = keyword => fetch('/v1/pois', {\n\ttype: 'nearby',\n\tkeyword\n});\n\n\n/**\n * 添加地址\n */\n\nexport const postAddAddress = (userId, address, address_detail, geohash, name, phone, phone_bk, poi_type, sex, tag, tag_type) => fetch('/v1/users/' + userId + '/addresses', {\n\taddress,\n\taddress_detail,\n\tgeohash,\n\tname,\n\tphone,\n\tphone_bk,\n\tpoi_type,\n\tsex,\n\ttag,\n\ttag_type,\n}, 'POST');\n\n\n/**\n * 下订单\n */\n\nexport const placeOrders = (user_id, cart_id, address_id, description, entities, geohash, sig) => fetch('/v1/users/' + user_id + '/carts/' + cart_id + '/orders', {\n\taddress_id,\n\tcome_from: \"mobile_web\",\n\tdeliver_time: \"\",\n\tdescription,\n\tentities,\n\tgeohash,\n\tpaymethod_id: 1,\n\tsig,\n}, 'POST');\n\n\n/**\n * 重新发送订单验证码\n */\n\nexport const rePostVerify = (cart_id, sig, type) => fetch('/v1/carts/' + cart_id + '/verify_code', {\n\tsig,\n\ttype,\n}, 'POST');\n\n\n\n/**\n * 下订单\n */\n\nexport const validateOrders = ({\n\tuser_id,\n\tcart_id,\n\taddress_id,\n\tdescription,\n\tentities,\n\tgeohash,\n\tsig,\n\tvalidation_code,\n\tvalidation_token\n}) => fetch('/v1/users/' + user_id + '/carts/' + cart_id + '/orders', {\n\taddress_id,\n\tcome_from: \"mobile_web\",\n\tdeliver_time: \"\",\n\tdescription,\n\tentities,\n\tgeohash,\n\tpaymethod_id: 1,\n\tsig,\n\tvalidation_code,\n\tvalidation_token,\n}, 'POST');\n\n\n/**\n * 重新发送订单验证码\n */\n\nexport const payRequest = (merchantOrderNo, userId) => fetch('/payapi/payment/queryOrder', {\n\tmerchantId: 5,\n\tmerchantOrderNo,\n\tsource: 'MOBILE_WAP',\n\tuserId,\n\tversion: '1.0.0',\n});\n\n\n\n/**\n * 获取服务中心信息\n */\n\nexport const getService = () => fetch('/v3/profile/explain');\n\n\n\n/**\n*兑换会员卡\n*/\n\nexport const vipCart = (id, number, password) => fetch('/member/v1/users/' + id + '/delivery_card/physical_card/bind',{\n\tnumber,\n\tpassword\n}, 'POST')\n\n\n\n/**\n * 获取红包\n*/\n\nexport const getHongbaoNum = id => fetch('/promotion/v2/users/' + id + '/hongbaos?limit=20&offset=0');\n\n\n\n/**\n * 获取过期红包\n*/\n\n\nexport const getExpired = id => fetch('/promotion/v2/users/' + id + '/expired_hongbaos?limit=20&offset=0');\n\n\n/**\n * 兑换红包\n*/\n\nexport const exChangeHongbao = (id, exchange_code, captcha_code) => fetch('/v1/users/' + id + '/hongbao/exchange',{\n\texchange_code,\n\tcaptcha_code,\n}, 'POST');\n\n\n/**\n * 获取用户信息\n */\n\nexport const getUser = () => fetch('/v1/user', {user_id: getStore('user_id')});\n\n\n/**\n * 手机号登录\n */\n\nvar sendLogin = (code, mobile, validate_token) => fetch('/v1/login/app_mobile', {\n\tcode,\n\tmobile,\n\tvalidate_token\n}, 'POST');\n\n\n/**\n * 获取订单列表\n */\n\nexport const getOrderList = (user_id, offset) => fetch('/bos/v2/users/' + user_id + '/orders', {\n\tlimit: 10,\n\toffset,\n});\n\n\n/**\n * 获取订单详情\n */\n\nexport const getOrderDetail = (user_id, orderid) => fetch('/bos/v1/users/' + user_id + '/orders/' + orderid + '/snapshot');\n\n\n/**\n*个人中心里编辑地址\n*/\n\nexport const getAddressList = (user_id) => fetch('/v1/users/'+user_id+'/addresses')\n\n/**\n*个人中心里搜索地址\n*/\n\nexport const getSearchAddress = (keyword) => fetch('v1/pois',{\n\tkeyword:keyword,\n\ttype:'nearby'\n})\n\n/**\n* 删除地址\n*/\n\nexport const deleteAddress = (userid, addressid) => fetch( '/v1/users/' + userid + '/addresses/' + addressid, {}, 'DELETE')\n\n\n\n/**\n * 账号密码登录\n */\nexport const accountLogin = (username, password, captcha_code) => fetch('/v2/login', {username, password, captcha_code}, 'POST');\n\n\n/**\n * 退出登录\n */\nexport const signout = () => fetch('/v2/signout');\n\n\n/**\n * 改密码\n */\nexport const changePassword = (username, oldpassWord, newpassword, confirmpassword, captcha_code) => fetch('/v2/changepassword', {username, oldpassWord, newpassword, confirmpassword, captcha_code}, 'POST');\n"
  },
  {
    "path": "src/store/action.js",
    "content": "import {\n\tgetUser,\n\tgetAddressList\n} from '../service/getData'\nimport {\n\tGET_USERINFO,\n\tSAVE_ADDRESS\n} from './mutation-types.js'\n\nexport default {\n\n\tasync getUserInfo({\n\t\tcommit,\n\t\tstate\n\t}) {\n\t\tlet res = await getUser();\n\t\tcommit(GET_USERINFO, res)\n\t},\n\tasync saveAddress({\n\t\tcommit,\n\t\tstate\n\t}) {\n\n\t\tif(state.removeAddress.length > 0) return;\n\n\t\tlet addres = await getAddressList(state.userInfo.user_id);\n\t\tcommit(SAVE_ADDRESS, addres);\t\n\t},\n}"
  },
  {
    "path": "src/store/getters.js",
    "content": "export default {\n\t\n}"
  },
  {
    "path": "src/store/index.js",
    "content": "import Vue from 'vue'\nimport Vuex from 'vuex'\nimport mutations from './mutations'\nimport actions from './action'\nimport getters from './getters'\n\nVue.use(Vuex)\n\nconst state = {\n\tlatitude: '', // 当前位置纬度\n\tlongitude: '', // 当前位置经度\n\tcartList: {}, // 加入购物车的商品列表\n\tshopDetail: null, //商家详情信息\n\tuserInfo: null, //用户信息\n\tshopid: null,//商铺id\n\tremarkText: null,//可选备注内容\n\tinputText: '',//输入备注内容\n\tinvoice: false,//开发票\n\tnewAddress: [], //确认订单页新的地址\n\tsearchAddress: null,//搜索并选择的地址\n\tgeohash: '31.22299,121.36025',//地址geohash值\n\tchoosedAddress: null,//选择地址\n\taddressIndex: null,//选择地址的索引值\n\tneedValidation: null,//确认订单时是否需要验证\n\tcartId: null, //购物车id\n\tsig: null,//购物车sig\n\torderParam: null,//订单的参数\n\torderMessage: null, //订单返回的信息\n\torderDetail: null, //订单详情\n\tlogin: true,//是否登录\n\timgPath:null,//头像地址\n\tremoveAddress:[],//移除地址\n\taddAddress:'',\t\t//新增地址\n\tquestion: null,//问题详情\n\tcartPrice: null, //会员卡价格\n}\n\nexport default new Vuex.Store({\n\tstate,\n\tgetters,\n\tactions,\n\tmutations,\n})"
  },
  {
    "path": "src/store/mutation-types.js",
    "content": "export const RECORD_ADDRESS = 'RECORD_ADDRESS'\nexport const ADD_CART = 'ADD_CART'\nexport const REDUCE_CART = 'REDUCE_CART'\nexport const INIT_BUYCART = 'INIT_BUYCART'\nexport const CLEAR_CART = 'CLEAR_CART'\nexport const RECORD_SHOPDETAIL = 'RECORD_SHOPDETAIL'\nexport const RECORD_USERINFO = 'RECORD_USERINFO'\nexport const GET_USERINFO = 'GET_USERINFO'\nexport const CONFIRM_REMARK = 'CONFIRM_REMARK'\nexport const CONFIRM_INVOICE = 'CONFIRM_INVOICE'\nexport const CHOOSE_SEARCH_ADDRESS = 'CHOOSE_SEARCH_ADDRESS'\nexport const SAVE_GEOHASH = 'SAVE_GEOHASH'\nexport const CONFIRM_ADDRESS = 'CONFIRM_ADDRESS'\nexport const CHOOSE_ADDRESS = 'CHOOSE_ADDRESS'\nexport const NEED_VALIDATION = 'NEED_VALIDATION'\nexport const SAVE_CART_ID_SIG = 'SAVE_CART_ID_SIG'\nexport const SAVE_ORDER_PARAM = 'SAVE_ORDER_PARAM'\nexport const CHANGE_ORDER_PARAM = 'CHANGE_ORDER_PARAM'\nexport const ORDER_SUCCESS = 'ORDER_SUCCESS'\nexport const SAVE_SHOPID = 'SAVE_SHOPID'\nexport const SAVE_ORDER = 'SAVE_ORDER'\nexport const OUT_LOGIN = 'OUT_LOGIN'\nexport const RETSET_NAME = 'RETSET_NAME'\nexport const SAVE_AVANDER = 'SAVE_AVANDER'\nexport const SAVE_ADDDETAIL = 'SAVE_ADDDETAIL'\nexport const SAVE_ADDRESS = 'SAVE_ADDRESS'\nexport const SAVE_QUESTION = 'SAVE_QUESTION'\nexport const ADD_ADDRESS = 'ADD_ADDRESS'\nexport const BUY_CART = 'BUY_CART'\n"
  },
  {
    "path": "src/store/mutations.js",
    "content": "import {\n\tRECORD_ADDRESS,\n\tADD_CART,\n\tREDUCE_CART,\n\tINIT_BUYCART,\n\tCLEAR_CART,\n\tRECORD_SHOPDETAIL,\n\tRECORD_USERINFO,\n\tGET_USERINFO,\n\tCONFIRM_REMARK,\n\tCONFIRM_INVOICE,\n\tCHOOSE_SEARCH_ADDRESS,\n\tSAVE_GEOHASH,\n\tCONFIRM_ADDRESS,\n\tCHOOSE_ADDRESS,\n\tNEED_VALIDATION,\n\tSAVE_CART_ID_SIG,\n\tSAVE_ORDER_PARAM,\n\tCHANGE_ORDER_PARAM,\n\tORDER_SUCCESS,\n\tSAVE_SHOPID,\n\tSAVE_ORDER,\n\tOUT_LOGIN,\n\tRETSET_NAME,\n\tSAVE_AVANDER,\n\tSAVE_ADDRESS,\n\tSAVE_ADDDETAIL,\n\tSAVE_QUESTION,\n\tADD_ADDRESS,\n\tBUY_CART,\n} from './mutation-types.js'\n\nimport {setStore, getStore} from '../config/mUtils'\n\nimport {localapi, proapi} from 'src/config/env'\n\nexport default {\n\t// 记录当前经度纬度\n\t[RECORD_ADDRESS](state, {\n\t\tlatitude,\n\t\tlongitude\n\t}) {\n\t\tstate.latitude = latitude;\n\t\tstate.longitude = longitude;\n\t},\n\n\t[RECORD_SHOPDETAIL](state, detail) {\n\t\tstate.shopDetail = detail;\n\t},\n\t// 加入购物车\n\t[ADD_CART](state, {\n\t\tshopid,\n\t\tcategory_id,\n\t\titem_id,\n\t\tfood_id,\n\t\tname,\n\t\tprice,\n\t\tspecs,\n\t\tpacking_fee,\n\t\tsku_id,\n\t\tstock\n\t}) {\n\t\tlet cart = state.cartList;\n\t\tlet shop = cart[shopid] = (cart[shopid] || {});\n\t\tlet category = shop[category_id] = (shop[category_id] || {});\n\t\tlet item = category[item_id] = (category[item_id] || {});\n\t\tif (item[food_id]) {\n\t\t\titem[food_id]['num']++;\n\t\t} else {\n\t\t\titem[food_id] = {\n\t\t\t\t\t\"num\" : 1,\n\t\t\t\t\t\"id\" : food_id,\n\t\t\t\t\t\"name\" : name,\n\t\t\t\t\t\"price\" : price,\n\t\t\t\t\t\"specs\" : specs,\n\t\t\t\t\t\"packing_fee\" : packing_fee,\n\t\t\t\t\t\"sku_id\" : sku_id,\n\t\t\t\t\t\"stock\" : stock\n\t\t\t};\n\t\t}\n\t\tstate.cartList = {...cart};\n\t\t//存入localStorage\n\t\tsetStore('buyCart', state.cartList);\n\t},\n\t// 移出购物车\n\t[REDUCE_CART](state, {\n\t\tshopid,\n\t\tcategory_id,\n\t\titem_id,\n\t\tfood_id,\n\t\tname,\n\t\tprice,\n\t\tspecs,\n\t}) {\n\t\tlet cart = state.cartList;\n\t\tlet shop = (cart[shopid] || {});\n\t\tlet category = (shop[category_id] || {});\n\t\tlet item = (category[item_id] || {});\n\t\tif (item && item[food_id]) {\n\t\t\tif (item[food_id]['num'] > 0) {\n\t\t\t\titem[food_id]['num']--;\n\t\t\t\tstate.cartList = {...cart};\n\t\t\t\t//存入localStorage\n\t\t\t\tsetStore('buyCart', state.cartList);\n\t\t\t} else {\n\t\t\t\t//商品数量为0，则清空当前商品的信息\n\t\t\t\titem[food_id] = null;\n\t\t\t}\n\t\t}\n\t},\n\t//网页初始化时从本地缓存获取购物车数据\n\t[INIT_BUYCART](state) {\n\t\tlet initCart = getStore('buyCart');\n\t\tif (initCart) {\n\t\t\tstate.cartList = JSON.parse(initCart);\n\t\t}\n\t},\n\t//清空当前商品的购物车信息\n\t[CLEAR_CART](state, shopid) {\n\t\tstate.cartList[shopid] = null;\n\t\tstate.cartList = {...state.cartList};\n\t\tsetStore('buyCart', state.cartList);\n\t},\n\t// 记录用户信息\n\t[RECORD_USERINFO](state, info) {\n\t\tstate.userInfo = info;\n\t\tstate.login = true;\n\t\tsetStore('user_id', info.user_id);\n\t},\n\t//获取用户信息存入vuex\n\t[GET_USERINFO](state, info) {\n\t\tif (state.userInfo && (state.userInfo.username !== info.username)) {\n\t\t\treturn;\n\t\t};\n\t\tif (!state.login) {\n\t\t\treturn\n\t\t}\n\t\tif (!info.message) {\n\t\t\tstate.userInfo = {...info};\n\t\t} else {\n\t\t\tstate.userInfo = null;\n\t\t}\n\t},\n\t//修改用户名\n\t[RETSET_NAME](state,username) {\n\t\tstate.userInfo = Object.assign({}, state.userInfo,{username})\n\t},\n\t//保存商铺id\n\t[SAVE_SHOPID](state, shopid) {\n\t\tstate.shopid = shopid;\n\t},\n\t//记录订单页面用户选择的备注, 传递给订单确认页面\n\t[CONFIRM_REMARK](state, {\n\t\tremarkText,\n\t\tinputText\n\t}) {\n\t\tstate.remarkText = remarkText;\n\t\tstate.inputText = inputText;\n\t},\n\t//是否开发票\n\t[CONFIRM_INVOICE](state, invoice) {\n\t\tstate.invoice = invoice;\n\t},\n\t//选择搜索的地址\n\t[CHOOSE_SEARCH_ADDRESS](state, place) {\n\t\tstate.searchAddress = place;\n\t},\n\t//保存geohash\n\t[SAVE_GEOHASH](state, geohash) {\n\t\tstate.geohash = geohash;\n\t\t\n\t},\n\t//确认订单页添加新的的地址\n\t[CONFIRM_ADDRESS](state, newAddress) {\n\t\tstate.newAddress.push(newAddress);\n\t},\n\t//选择的地址\n\t[CHOOSE_ADDRESS](state, {\n\t\taddress,\n\t\tindex\n\t}) {\n\t\tstate.choosedAddress = address;\n\t\tstate.addressIndex = index;\n\t},\n\t//保存下单需要验证的返回值\n\t[NEED_VALIDATION](state, needValidation) {\n\t\tstate.needValidation = needValidation;\n\t},\n\t//保存下单后购物id 和 sig\n\t[SAVE_CART_ID_SIG](state, {\n\t\tcart_id,\n\t\tsig\n\t}) {\n\t\tstate.cart_id = cart_id;\n\t\tstate.sig = sig;\n\t},\n\t//保存下单参数，用户验证页面调用\n\t[SAVE_ORDER_PARAM](state, orderParam) {\n\t\tstate.orderParam = orderParam;\n\t},\n\t//修改下单参数\n\t[CHANGE_ORDER_PARAM](state, newParam) {\n\t\tstate.orderParam = Object.assign({}, state.orderParam, newParam);\n\t},\n\t//下单成功，保存订单返回信息\n\t[ORDER_SUCCESS](state, order) {\n\t\tstate.cartPrice = null;\n\t\tstate.orderMessage = order;\n\t},\n\t//进入订单详情页前保存该订单信息\n\t[SAVE_ORDER](state, orderDetail) {\n\t\tstate.orderDetail = orderDetail;\n\t},\n\t//退出登录\n\t[OUT_LOGIN](state) {\n\t\tstate.userInfo = {};\n\t\tstate.login = false;\n\t},\n\t//保存图片\n\t[SAVE_AVANDER](state, imgPath) {\n\t\tstate.imgPath = imgPath;\n\t},\n\t//删除地址列表\n\t[SAVE_ADDRESS](state, newAdress) {\n\t\tstate.removeAddress = newAdress\n\t},\n\t//添加地址name\n\t[SAVE_ADDDETAIL](state, addAddress){\n\t\tstate.addAddress=addAddress;\n\t},\n\t//保存所选问题标题和详情\n\t[SAVE_QUESTION](state, question) {\n\t\tstate.question = {...question};\n\t},\n\t//增加地址\n\t[ADD_ADDRESS](state, obj) {\n\t\tstate.removeAddress = [obj, ...state.removeAddress];\n\t},\n\t//会员卡价格纪录\n\t[BUY_CART](state, price) {\n\t\tstate.cartPrice = price;\n\t},\n\n}\n"
  },
  {
    "path": "src/style/common.scss",
    "content": "body, div, span, header, footer, nav, section, aside, article, ul, dl, dt, dd, li, a, p, h1, h2, h3, h4,h5, h6, i, b, textarea, button, input, select, figure, figcaption, {\n    padding: 0;\n    margin: 0;\n    list-style: none;\n    font-style: normal;\n    text-decoration: none;\n    border: none;\n    color: #333;\n    font-weight: normal;\n    font-family: \"Microsoft Yahei\";\n    box-sizing: border-box;\n    -webkit-tap-highlight-color:transparent;\n    -webkit-font-smoothing: antialiased;\n    &:hover{\n        outline: none;\n    }\n}\n\n/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/  \n::-webkit-scrollbar  \n{  \n    width: 0px;  \n    height: 0px;  \n    background-color: #F5F5F5;  \n}  \n  \n/*定义滚动条轨道 内阴影+圆角*/  \n::-webkit-scrollbar-track  \n{  \n    -webkit-box-shadow: inset 0 0 1px rgba(0,0,0,0);  \n    border-radius: 10px;  \n    background-color: #F5F5F5;  \n}  \n  \n/*定义滑块 内阴影+圆角*/  \n::-webkit-scrollbar-thumb  \n{  \n    border-radius: 10px;  \n    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);  \n    background-color: #555;  \n}  \n\ninput[type=\"button\"], input[type=\"submit\"], input[type=\"search\"], input[type=\"reset\"] {\n    -webkit-appearance: none;\n}\n\ntextarea { -webkit-appearance: none;}   \n\nhtml,body{\n    height: 100%;\n    width: 100%;\n    background-color: #F5F5F5;\n}\n\n\n.clear:after{\n    content: '';\n    display: block;\n    clear: both;\n}\n\n.clear{\n    zoom:1;\n}\n\n.back_img{\n    background-repeat: no-repeat;\n    background-size: 100% 100%;\n}\n\n.margin{\n    margin: 0 auto;\n}\n\n.left{\n    float: left;\n}\n\n.right{\n    float: right;\n}\n\n.hide{\n    display: none;\n}\n\n.show{\n    display: block;\n}\n\n.ellipsis{\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n\n.paddingTop{\n    padding-top: 1.95rem;\n}\n\n@keyframes backOpacity{\n   0%   { opacity: 1 }\n   25%  { opacity: .5 }\n   50%  { opacity: 1 }\n   75%  { opacity: .5 }\n   100% { opacity: 1 }\n}\n\n.animation_opactiy{\n    animation: backOpacity 2s ease-in-out infinite;\n}"
  },
  {
    "path": "src/style/mixin.scss",
    "content": "$blue: #3190e8;  \n$bc: #e4e4e4;\n$fc:#fff;\n\n// 背景图片地址和大小\n@mixin bis($url) { \n\tbackground-image: url($url);\n\tbackground-repeat: no-repeat;\n\tbackground-size: 100% 100%;\n}\n\n@mixin borderRadius($radius) {\n    -webkit-border-radius: $radius;\n    -moz-border-radius: $radius;\n    -ms-border-radius: $radius;\n    -o-border-radius: $radius;\n    border-radius: $radius;\n}\n//定位全屏\n@mixin allcover{\n\tposition:absolute;\n\ttop:0;\n\tright:0;\n}\n\n//定位上下左右居中\n@mixin center {  \n\tposition: absolute;\n\ttop: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n}\n\n//定位上下居中\n@mixin ct {  \n\tposition: absolute;\n\ttop: 50%;\n    transform: translateY(-50%);\n}\n\n//定位左右居中\n@mixin cl {  \n\tposition: absolute;\n\tleft: 50%;\n    transform: translateX(-50%);\n}\n\n//宽高\n@mixin wh($width, $height){\n\twidth: $width;\n\theight: $height;\n}\n\n//字体大小、行高、字体\n@mixin font($size, $line-height, $family: 'Microsoft YaHei') {  \n\tfont: #{$size}/#{$line-height} $family;\n}\n\n//字体大小，颜色\n@mixin sc($size, $color){\n\tfont-size: $size;\n\tcolor: $color;\n}\n\n//flex 布局和 子元素 对其方式\n@mixin fj($type: space-between){\n\tdisplay: flex;\n\tjustify-content: $type;\n\n}"
  }
]