diff --git a/mall4uni/App.vue b/mall4uni/App.vue new file mode 100644 index 0000000..4682dd0 --- /dev/null +++ b/mall4uni/App.vue @@ -0,0 +1,53 @@ + + diff --git a/mall4uni/LICENSE b/mall4uni/LICENSE new file mode 100644 index 0000000..0ad25db --- /dev/null +++ b/mall4uni/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/mall4uni/README.md b/mall4uni/README.md new file mode 100644 index 0000000..cb4a52a --- /dev/null +++ b/mall4uni/README.md @@ -0,0 +1,55 @@ +一个基于uni-app的轻量级、前后端分离、拥有完整sku和下单流程的完全开源商城 uni-appH5端 + + + +该项目仅供学习参考、可供个人学习使用、如需商用联系作者进行授权,否则必将追究法律责任 + + + +## 前言 + +`亚米商城`项目致力于为中小企业打造一个完整、易于维护的开源的电商系统,采用现阶段流行技术实现。后台管理系统包含商品管理、订单管理、运费模板、规格管理、会员管理、运营管理、内容管理、统计报表、权限管理、设置等模块。 + + + +## 项目链接 + +java后台:https://github.com/gz-yami/mall4j + +vue后台:https://github.com/gz-yami/mall4v + +小程序:https://github.com/gz-yami/mall4m + +uni-app:https://gitee.com/gz-yami/mall4uni + + + +## 演示地址 + +后台: 账号:admin/123456 + +小程序:1. 扫描二维码 + +![小程序](https://gitee.com/gz-yami/mall4j/raw/master/screenshot/miniQrcode.jpg) + +​ 2. 搜索小程序 **亚米商城** + + + +## 相关截图 + +![小程序截图](https://images.gitee.com/uploads/images/2019/0706/085234_4eb7509b_5094767.jpeg "小程序截图") + + + +## 提交反馈 + +提问之前,请先阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md): + +- QQ群:722835385 + + ![QQ群](https://gitee.com/gz-yami/mall4j/raw/master/screenshot/qqGroup.png) + +- 论坛: + +- 商务邮箱:yamitech@163.com diff --git a/mall4uni/app.css b/mall4uni/app.css new file mode 100644 index 0000000..090638e --- /dev/null +++ b/mall4uni/app.css @@ -0,0 +1,115 @@ +/**app.wxss**/ +.container { + height: 100%; + box-sizing: border-box; + color: #333; + font-family: helvetica,'Heiti SC',PingFangSC-Light; +} +.price{ + font-family: Arial; + display: inline-block; + color: #eb2444; + padding-bottom:10rpx; +padding-left:10rpx; + +} + + + +/* 价格数字显示不同大小 */ + +.symbol { + font-size: 24rpx; +} + +.big-num { + font-size: 32rpx; +} + +.small-num { + font-size: 24rpx; +} + +/* +*改变checkbox样式 +*自定义样式 +*/ +/* reg */ +uni-checkbox-group { + width: 100% !important; +} +uni-checkbox-group uni-label{ + width: 33% !important; + display: inline-flex; + margin-bottom: 20rpx; +} +/*checkbox 选项框大小 */ +uni-checkbox .uni-checkbox-input{ + width: 38rpx !important; + height: 38rpx !important; + border-radius: 50%!important; +} +/*checkbox选中后样式 */ +uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked{ + background: #e43130; + border: 1px solid transparent !important; +} +/*checkbox选中后图标样式 */ +uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked::before{ + display: inline-block; + width: 20rpx; + height: 20rpx; + line-height: 20rpx; + text-align: center; + font-size: 18rpx; + color: #fff; + background: transparent; + transform: translate(-60%, -50%) scale(1); + -webkit-transform: translate(-60%, -50%) scale(1); +} + +/* +*改变radio样式 +*自定义样式 +*/ +/* 未选中的 背景样式 */ +uni-radio .uni-radio-input{ + height: 36rpx; + width: 36rpx; + border-radius: 50%; + background: transparent; + box-sizing: border-box; + } +/* 选中后的 背景样式 */ +uni-radio .uni-radio-input.uni-radio-input-checked{ + border: none !important; + background: #e43130 !important; +} +/* 选中后的 对勾样式 */ +uni-radio .uni-radio-input.uni-radio-input-checked::before{ + border-radius: 50%; + width: 32rpx; + height: 32rpx; + line-height: 32rpx; + text-align: center; + font-size: 20rpx; + color:#fff; + background: #e43130; + border-radius: 50%; + transform: translate(-50%, -50%) scale(1); + -webkit-transform: translate(-50%, -50%) scale(1); +} + + +/* 底部按钮兼容 iPhone X以上 */ +@media screen and (width: 375px) and (height: 812px){ + .container { + padding-bottom: 70px; + } +} + +@media screen and (width: 414px) and (height: 736px){ + .container { + padding-bottom: 70px; + } +} diff --git a/mall4uni/components/coupon/coupon.css b/mall4uni/components/coupon/coupon.css new file mode 100644 index 0000000..1b3ab14 --- /dev/null +++ b/mall4uni/components/coupon/coupon.css @@ -0,0 +1,118 @@ +.coupon-item{ + margin: 15px 0; + position: relative; + box-shadow: 1px 1px 3px rgba(0,0,0,0.15); + height: 95px; + background: #fff; +} +.coupon-item .left{ + float: left; + color: #fff; + text-align: center; + border-left: 1px dashed #fff; + padding: 20px 0; + background: -webkit-gradient(linear,left top,right top,from(#F45C43),to(#eb2444)); + background: -o-linear-gradient(left,#F45C43,#eb2444); + background: linear-gradient(left,#F45C43,#eb2444); + background: -webkit-linear-gradient(left,#F45C43,#eb2444); + width: 260rpx; + height: 55px; +} +.coupon-item .left .num{ + font-weight:600; + font-size:36rpx; + height:70rpx; + line-height:70rpx; + font-family:arial; +} +.coupon-item .left .num .coupon-price{ + font-size: 72rpx; + line-height: 72rpx; + display: inline-block; + font-family: arial; +} +.coupon-item .left .condition{ + font-size: 28rpx; + line-height: 28rpx; + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: 0 2px; + font-family: arial; +} +.coupon-item .right{ + margin-left: 280rpx; + padding: 5px; + position: relative; +} +.coupon-item .right .c-des{ + height: 30px; + font-size: 26rpx; + line-height: 30px; + overflow: hidden; + font-weight: 600; +} +.coupon-item .right .c-des .c-type{ + font-size: 24rpx; + background: #fdf0f0; + color: #eb2444; + border-radius: 8px; + padding:3px 10px; +} +.coupon-item .right .c-date{ + font-size: 24rpx; + margin-top:25px; +} +.coupon-item .right .c-date .c-data-info{ + font-family: arial; +} +.coupon-item .right .c-date .c-btn{ + position: absolute; + bottom:0; + right:10px; + color: #fff; + font-size: 24rpx; + font-family: arial; + border-radius: 14px; + padding:3px 7px; + /* background: -webkit-gradient(linear,left top,right top,from(#6c96da),to(#6b83d7)); + background: -o-linear-gradient(left,#6c96da,#6b83d7); + background: linear-gradient(left,#6c96da,#6b83d7); + background: -webkit-linear-gradient(left,#6c96da,#6b83d7); */ + background: #eb2444; + border: 1px solid #eb2444; +} + +.coupon-item .right .c-date .c-btn.get-btn{ + background: #fff; + border: 1px solid #eb2444; + color:#eb2444; +} + +.coupon-item.gray .left{ + background: #bbb; +} + +.coupon-item.gray .right .c-des .c-type{ + background: #bbb; + color: #fff; +} + +.coupon-item.gray .right .c-date .c-btn{ + display: none; +} + +.coupon-item .tag-img{ + position: absolute; + top:0; + right:0; + width:120rpx; + height:120rpx; +} + +.coupon-item .sel-btn{ + position:absolute; + right:10px; + top:35px; +} diff --git a/mall4uni/components/coupon/coupon.vue b/mall4uni/components/coupon/coupon.vue new file mode 100644 index 0000000..1e830b7 --- /dev/null +++ b/mall4uni/components/coupon/coupon.vue @@ -0,0 +1,104 @@ + + + + \ No newline at end of file diff --git a/mall4uni/components/production/production.css b/mall4uni/components/production/production.css new file mode 100644 index 0000000..8f884c3 --- /dev/null +++ b/mall4uni/components/production/production.css @@ -0,0 +1,66 @@ + +.prod-items { + width: 375rpx; + float: left; + background: #fff; + padding-bottom: 20rpx; + box-sizing: border-box; +} + +prod:nth-child(2n-1) .prod-items { + padding: 20rpx 10rpx 10rpx 20rpx; +} + +prod:nth-child(2n) .prod-items { + padding: 20rpx 20rpx 10rpx 10rpx; +} + +.hot-imagecont .hotsaleimg { + width:345rpx; +height:345rpx; + +} + +.hot-text .hotprod-text { + height: 76rpx; + font-size: 28rpx; + display: -webkit-box; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + color: #000; +} + +.prod-items .hot-imagecont { + border-radius: 8rpx; + text-align: center; + font-size: 0; +} + +.prod-items .hot-text { + margin-top: 20rpx; +} + +.prod-items .hot-text .prod-info { + font-size: 20rpx; + color: #777; + margin-top: 8rpx; +} + +.prod-items .hot-text .prod-text-info { + position: relative; + height: 50rpx; + line-height: 70rpx; + font-family: Arial; +} + +.prod-items .hot-text .prod-text-info .price { + color: #eb2444; +} +.deadline-price{ + font-size: 22rpx; + margin-right: 5rpx; +} \ No newline at end of file diff --git a/mall4uni/components/production/production.vue b/mall4uni/components/production/production.vue new file mode 100644 index 0000000..179b5e7 --- /dev/null +++ b/mall4uni/components/production/production.vue @@ -0,0 +1,47 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/main.js b/mall4uni/main.js new file mode 100644 index 0000000..eb628a6 --- /dev/null +++ b/mall4uni/main.js @@ -0,0 +1,37 @@ +import Vue from 'vue'; +import App from './App'; + +Vue.config.productionTip = false; + + +Vue.mixin({ + methods: { + setData: function(obj) { + let that = this; + let keys = []; + let val, data; + Object.keys(obj).forEach(function(key) { + keys = key.split('.'); + val = obj[key]; + data = that.$data; + keys.forEach(function(key2, index) { + if (index + 1 == keys.length) { + that.$set(data, key2, val); + } else { + if (!data[key2]) { + that.$set(data, key2, {}); + } + } + data = data[key2]; + }) + }); + } + } +}); + +App.mpType = 'app'; + +const app = new Vue({ + ...App +}); +app.$mount(); diff --git a/mall4uni/manifest.json b/mall4uni/manifest.json new file mode 100644 index 0000000..5bb13af --- /dev/null +++ b/mall4uni/manifest.json @@ -0,0 +1,92 @@ +{ + "name" : "yamikejimall4j", + "appid" : "", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + "app-plus" : { + "usingComponents" : true, + "nvueCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + "modules" : {}, + "distribute" : { + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "ios" : {}, + "sdkConfigs" : {} + } + }, + "quickapp" : {}, + "mp-weixin" : { + "appid" : "wx6fa71e69231a4fa4", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "你的位置信息将用于小程序位置接口的效果展示" + } + }, + "plugins" : {} + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "h5" : { + "title" : "H5商城", + "domain" : "", + "devServer" : { + "disableHostCheck" : true, + "proxy" : { + "/api" : { + "target" : "http://192.168.1.17:8286", + "pathRewrite" : { + "^/api" : "" + } + } + }, + "port" : 8989 + }, + "router" : { + "mode" : "history" + } + } +} diff --git a/mall4uni/package-lock.json b/mall4uni/package-lock.json new file mode 100644 index 0000000..0b6a773 --- /dev/null +++ b/mall4uni/package-lock.json @@ -0,0 +1,50 @@ +{ + "name": "mall4uni", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true + }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true + }, + "uni-read-pages": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/uni-read-pages/-/uni-read-pages-1.0.5.tgz", + "integrity": "sha512-GkrrZ0LX0vn9R5k6RKEi0Ez3Q3e2vUpjXQ8Z6/K/d28KudI9ajqgt8WEjQFlG5EPm1K6uTArN8LlqmZTEixDUA==", + "dev": true + } + } +} diff --git a/mall4uni/package.json b/mall4uni/package.json new file mode 100644 index 0000000..31ef0a9 --- /dev/null +++ b/mall4uni/package.json @@ -0,0 +1,20 @@ +{ + "name": "mall4uni", + "version": "1.0.0", + "description": "请使用 uniapp官方推荐的开发工具 HBuilderX 导入项目进行开发", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/gz-yami/mall4uni.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "uni-read-pages": "^1.0.5", + "query-string": "^6.13.1" + } +} diff --git a/mall4uni/pages.json b/mall4uni/pages.json new file mode 100644 index 0000000..c1bafb2 --- /dev/null +++ b/mall4uni/pages.json @@ -0,0 +1,212 @@ +{ + "pages": [ + { + "path": "pages/index/index", + "style": { + "backgroundTextStyle": "dark", + "navigationBarBackgroundColor": "white", + "navigationBarTextStyle": "black", + "enablePullDownRefresh": true, + "navigationBarTitleText": "亚米科技mall4j" + } + }, + { + "path": "pages/logs/logs", + "style": { + "navigationBarTitleText": "查看启动日志" + } + }, + { + "path": "pages/user/user", + "style": { + "navigationBarTitleText": "个人中心" + } + }, + { + "path": "pages/basket/basket", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "购物车", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/category/category", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "分类商品", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/search-page/search-page", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "搜索", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/delivery-address/delivery-address", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "收货地址", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/editAddress/editAddress", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "编辑收货地址", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/orderList/orderList", + "style": { + "backgroundTextStyle": "light", + "navigationBarTitleText": "订单列表", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#fafafa" + } + }, + { + "path": "pages/order-detail/order-detail", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "订单详情", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/submit-order/submit-order", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "提交订单", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/binding-phone/binding-phone", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "绑定手机号码", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/express-delivery/express-delivery", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "物流查询", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/pay-result/pay-result", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "支付结果", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/search-prod-show/search-prod-show", + "style": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "搜索结果", + "navigationBarTextStyle": "black" + } + }, + { + "path": "pages/prod/prod", + "style": { + "navigationBarTitleText": "商品详情" + } + }, + { + "path": "pages/login/login", + "style": {} + }, + { + "path": "pages/prod-classify/prod-classify", + "style": { + "onReachBottomDistance": 0 + } + }, + { + "path": "pages/recent-news/recent-news", + "style": { + "backgroundTextStyle": "light", + "navigationBarTitleText": "最新公告", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#fafafa" + } + }, + { + "path": "pages/news-detail/news-detail", + "style": { + "backgroundTextStyle": "light", + "navigationBarTitleText": "最新公告", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#fafafa" + } + }, + { + "path": "pages/accountLogin/accountLogin" + }, + { + "path": "pages/register/register" + } + ], + "tabBar": { + "selectedColor": "#3a86b9", + "color": "#b8b8b8", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "/static/images/tabbar/homepage.png", + "selectedIconPath": "/static/images/tabbar/homepage-sel.png" + }, + { + "pagePath": "pages/category/category", + "text": "分类", + "iconPath": "/static/images/tabbar/category.png", + "selectedIconPath": "/static/images/tabbar/category-sel.png" + }, + { + "pagePath": "pages/basket/basket", + "text": "购物车", + "iconPath": "/static/images/tabbar/basket.png", + "selectedIconPath": "/static/images/tabbar/basket-sel.png" + }, + { + "pagePath": "pages/user/user", + "text": "我的", + "iconPath": "/static/images/tabbar/user.png", + "selectedIconPath": "/static/images/tabbar/user-sel.png" + } + ] + }, + "sitemapLocation": "sitemap.json", + "globalStyle": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "WeChat", + "navigationBarTextStyle": "black" + }, + "subPackages": [] +} \ No newline at end of file diff --git a/mall4uni/pages/accountLogin/accountLogin.css b/mall4uni/pages/accountLogin/accountLogin.css new file mode 100644 index 0000000..8e19a87 --- /dev/null +++ b/mall4uni/pages/accountLogin/accountLogin.css @@ -0,0 +1,118 @@ +page{ + background: #fff; + height: 100%; +} +.con{ + margin-top: 50px; +} +image { + display: block; + width: 150rpx; + height: 150rpx; + margin: auto; + border-radius: 50%; + margin-bottom: 8%; +} +.login-form{ + width: 90%; + margin: 0 auto; + margin-bottom: 20%; +} +.authorized-btn { + width: 90%; + margin: 0 auto; + text-align: center; + background-color: #0ab906; + border: 1rpx solid #0ab906; + color: #fff; + border-radius: 6rpx; + font-size: 26rpx; + padding: 8rpx; + margin-top: 80rpx; +} +.to-idx-btn{ + width: 90%; + margin: 0 auto; + text-align: center; + background-color: #eeeeee; + color: #333; + border-radius: 6rpx; + font-size: 26rpx; + padding: 8rpx; + margin-top: 30rpx; +} +.form-title { + width: 100%; + margin-bottom: 50rpx; + font-size: 32rpx; + text-align: center; + color: #00a0e9; +} +.item { + display: block; + margin-bottom: 30rpx; +} +.account{ + display: flex; + background: #f8f8f8; + padding: 15rpx; + box-sizing: border-box; + font-size: 26rpx; + align-items: center; +} +.account input{ + padding-left: 20rpx; + width:75%; +} +.inp-palcehoder{ + font-size: 26rpx; +} +.account input.int-yzm { + width: 410rpx; + padding-right: 10rpx; + box-sizing: border-box; +} +.input-btn { + width: 152rpx; + font-size: 26rpx; + color: #00a0ea; + text-align: center; +} + +button::after{ + border: 0 !important; +} + +/* 找回密码&去注册 */ +.operate { + display: flex; + justify-content: space-between; + align-items: center; +} +.forgot-password, +.to-register { + font-size: 28rpx; + color: #00AAFF; +} + +/* 错误提示 */ +.error .error-text { + display: block; + width: 100%; + font-size: 28rpx; + color: #e43130; + text-align: left; + margin-top: 10rpx; +} +.error .error-text .warning-icon { + display: inline-block;; + color: #fff; + width: 26rpx; + height: 26rpx; + line-height: 26rpx; + background: #e43130; + border-radius: 50%; + text-align: center; + margin-right: 12rpx; + font-size: 22rpx; +} \ No newline at end of file diff --git a/mall4uni/pages/accountLogin/accountLogin.vue b/mall4uni/pages/accountLogin/accountLogin.vue new file mode 100644 index 0000000..a860913 --- /dev/null +++ b/mall4uni/pages/accountLogin/accountLogin.vue @@ -0,0 +1,243 @@ + + + + diff --git a/mall4uni/pages/basket/basket.css b/mall4uni/pages/basket/basket.css new file mode 100644 index 0000000..aae0913 --- /dev/null +++ b/mall4uni/pages/basket/basket.css @@ -0,0 +1,387 @@ +/* pages/basket/basket.wxss */ + +page { + width: 100%; + background: #f4f4f4; +} +.container{ + padding-bottom:118rpx; +} +container .prod-list { + width: 100%; + background: #f8f8f8; +} + +.prod-list .prod-block { + background: #fff; + margin-top: 15rpx; +} + +.prod-list .prod-block .discount-tips { + padding: 20rpx 0 20rpx 20rpx; + border-bottom: 2rpx solid #f4f4f4; + height: 40rpx; + line-height: 40rpx; +} + +.prod-list .prod-block .discount-tips .text-block { + padding:3rpx 5rpx; + /* padding: 0 5rpx; */ + border-radius: 8rpx; + font-size: 22rpx; + color: #eb2444; + border: 2rpx solid #eb2444; +} + +.prod-list .prod-block .discount-tips .text-list { + font-size: 24rpx; + margin-left: 10rpx; +} + +.prod-list .item { + background: #fff; + display: flex; + align-items: center; + padding: 20rpx; +} + +.prod-list .item .prodinfo { + position: relative; + color: #999; + width:100%; +} + +.prod-list .item .prodinfo::after { + content: ''; + background-color: #f4f4f4; + left: 0; + height: 1px; + transform-origin: 50% 100% 0; + bottom: -20rpx; + position: absolute; + display: block; + width: 642rpx; + padding-left: 20rpx; +} + +.prod-list .item:last-child .prodinfo::after { + height: 0; +} + +.prod-list .item .staus { + text-align: center; + background: rgb(196, 192, 192); + font-size: 20rpx; + width: 50rpx; + color: #fff; +} + +.prodinfo { + display: flex; + margin-left: 20rpx; +} + +.prod-list .item .opt { + font-size: 28rpx; + margin-left: 20rpx; + width:100%; + +} + +.prodinfo .opt .prod-name { + color:#333; + max-height: 72rpx; + line-height: 36rpx; + display: -webkit-box; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.prodinfo .opt .prod-info-text { + color: #999; + display: inline-block; + -webkit-line-clamp: 1; + height: 48rpx; + line-height: 48rpx; + background: #f9f9f9; + padding: 0 10rpx 0 10rpx; + border-radius: 4rpx; + margin: 10rpx 0 0rpx 0; + overflow: hidden; + font-size: 24rpx; + position: relative; + font-family: arial; +} +.prodinfo .opt .prod-info-text.empty-n{ + padding:0; +} + +/* .prod-info-text:before, .prod-info-text:after { + content: ""; + display: block; + width: 0; + height: 0; + position: absolute; + border: 5px solid transparent; + right: 5px; + top: 10px; +} */ + +.prod-info-text:before { + border-top: 5px solid #aaa; +} + +.prod-info-text:after { + border-top: 5px solid #f9f9f9; + top: 9px; +} + +.prod-list .item .prodinfo .pic { + text-align: center; + width: 180rpx; + height: 180rpx; + line-height: 180rpx; + font-size: 0; +} + +.prod-list .item .pic image { + max-width: 100%; + max-height: 100%; + /* border-radius: 8rpx; */ + vertical-align: middle; +} + +.prodinfo .opt .price-count { + display: flex; + align-items: center; + justify-content: space-between; +} + +.prodinfo .opt .price-count .price { + color: #eb2444; +} + +.lose-efficacy .prodinfo .opt .price-count .price { + color: #999; +} + +/* 加减框 */ + +.m-numSelector .minus, .m-numSelector input, .m-numSelector .plus { + float: left; + box-sizing: border-box; + height: 56rpx; + border: 2rpx solid #d9d9d9; +} + +.m-numSelector { + float: right; +} + +.m-numSelector .minus, .m-numSelector .plus { + position: relative; + width: 56rpx; +} + +.m-numSelector .minus { + border-right: 0; + border-top-left-radius: 4rpx; + border-bottom-left-radius: 4rpx; +} + +.m-numSelector input { + width: 56rpx; + text-align: center; + color:#333; +} + +.m-numSelector .plus { + border-left: 0; + border-top-right-radius: 4rpx; + border-bottom-right-radius: 4rpx; +} + +.m-numSelector .minus::before, .m-numSelector .plus::before, +.m-numSelector .plus::after { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + content: ' '; + width: 22rpx; + height: 3rpx; + background-color: #7f7f7f; +} + +.m-numSelector .plus::after { + transform: rotate(90deg); +} + +.m-numSelector:not(.disabled) .minus:not(.disabled):active, +.m-numSelector:not(.disabled) .plus:not(.disabled):active { + background-color: #f4f4f4; +} + +/*checkbox 选项框大小 */ + +checkbox .wx-checkbox-input { + border-radius: 50%; + width: 35rpx; + height: 35rpx; +} + +/*checkbox选中后样式 */ + +checkbox .wx-checkbox-input.wx-checkbox-input-checked { + background: #eb2444; + border-color: #eb2444; +} + +/*checkbox选中后图标样式 */ + +checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + text-align: center; + font-size: 22rpx; + color: #fff; + background: transparent; + transform: translate(-50%, -50%) scale(1); + -webkit-transform: translate(-50%, -50%) scale(1); +} + +/* 购物车为空 */ + +.empty { + font-size: 28rpx; + color: #666; +} + +.empty .txt { + text-align: center; + margin-top: 30rpx; +} + +.empty .img { + margin-top: 80rpx; + text-align: center; +} + +.empty .img image { + width: 80rpx; + height: 80rpx; +} + +/* 失效商品 */ + +.lose-efficacy { + margin-top: 20rpx; + background: #fff; +} + +.lose-efficacy .item { + background: #f8f8f9; +} + +.prod-list .lose-efficacy .discount-tips { + padding: 20rpx 0; + border-bottom: 2rpx solid #ddd; + height: 50rpx; + line-height: 50rpx; + margin-left: 20rpx; +} + +.lose-efficacy .discount-tips .empty-prod { + color: #777; + font-size: 26rpx; + border: 2rpx solid #999; + padding: 0 10rpx; + border-radius: 8rpx; + float: right; + margin-right: 20rpx; +} + +.price-count .disable-price { + color: #999; +} + +.prod-list .lose-efficacy .discount-tips .text-list { + font-size: 30rpx; + margin-left: 10rpx; +} + +/** 底部按钮 */ + +.cart-footer { + position: fixed; + bottom: 100rpx; + left: 0; + width: 100%; + display: flex; + flex-direction: row nowrap; + height: 98rpx; + border-top: 2rpx solid #f4f4f4; + z-index:999; +} + +.cart-footer .btn { + position: relative; + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; + width: 0; + background-color: #fafafa; + background:rgba(255,255,255,0.95); + font-size: 28rpx; +} +.cart-footer .btn .total-msg{ + font-size: 20rpx; +} +.cart-footer .btn.total{ + display:flex; +flex-flow:column; +align-items:flex-start; + +} +.cart-footer .btn.del { + color:#eb2444; +width:70rpx; +font-size:22rpx; +text-align:left; +display:block; +line-height:102rpx; + +} + +.cart-footer .btn.all { + width: 150rpx; + font-size: 26rpx; +} + +.cart-footer .btn.all label { + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; +} + +.cart-footer .btn.total { + width: 300rpx; +} + +.cart-footer .btn.total .price { + color: #eb2444; + font-size: 30rpx; +} + +.cart-footer .btn.settle { + width: 200rpx; + background: #eb2444; + color: #fff; +} + +/** end 底部按钮 */ diff --git a/mall4uni/pages/basket/basket.vue b/mall4uni/pages/basket/basket.vue new file mode 100644 index 0000000..713405a --- /dev/null +++ b/mall4uni/pages/basket/basket.vue @@ -0,0 +1,434 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/binding-phone/binding-phone.css b/mall4uni/pages/binding-phone/binding-phone.css new file mode 100644 index 0000000..038e571 --- /dev/null +++ b/mall4uni/pages/binding-phone/binding-phone.css @@ -0,0 +1,69 @@ +/* pages/binding-phone/binding-phone.wxss */ + +page { + background: #f4f4f4; +} + +.binding-phone { + height: 100%; + margin-top: 20rpx; + background: #fff; +} + +.binding-phone .item { + display: flex; + padding: 20rpx 0; + height: 60rpx; + line-height: 60rpx; + border-bottom: 2rpx solid #e1e1e1; +} + +.binding-phone .item:last-child { + border: none; +} + +.binding-phone .item input { + flex: 1; + height: auto; + padding: 0 20rpx; + font-size: 28rpx; +} + +.binding-phone .item .item-tip { + width: 140rpx; + font-size: 28rpx; + padding-left: 20rpx; +} + +.binding-phone .item .get-code { + font-size: 30rpx; + color: #999; + margin-right: 20rpx; + text-align: center; +} + +.binding-phone .item .get-code.gray { + color: #3eb370; +} + +.btn-box { + padding: 0 20rpx; + margin-top: 60rpx; +} + +.btn-box .sure-btn { + display: block; + font-size: 32rpx; + color: #fff; + background: #3eb370; + width: 100%; + margin: auto; + text-align: center; + padding: 20rpx 0; + border-radius: 50rpx; +} + +.btn-box .sure-btn.gray { + background: #e1e1e1; + margin-bottom: 30rpx; +} diff --git a/mall4uni/pages/binding-phone/binding-phone.vue b/mall4uni/pages/binding-phone/binding-phone.vue new file mode 100644 index 0000000..4b1fdd0 --- /dev/null +++ b/mall4uni/pages/binding-phone/binding-phone.vue @@ -0,0 +1,120 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/category/category.css b/mall4uni/pages/category/category.css new file mode 100644 index 0000000..5e5bff3 --- /dev/null +++ b/mall4uni/pages/category/category.css @@ -0,0 +1,223 @@ +/* pages/category/category.wxss */ + +page { + height: 100%; +} + +.container { + display: flex; + flex-direction: row; + height: 100%; +} + +.main { + position: fixed; + display: flex; + overflow: hidden; + margin-top: 100rpx; + height: calc(100% - 100rpx); +} + +/* 搜索栏 */ + +.search-bar { + width: 100%; + position: fixed; + top: 0; + left: 0; + color: #777; + background: #fff; + box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.07); + z-index: 3; + padding: 20rpx 0; +} + +.search-bar .arrow { + width: 20rpx; + height: 20rpx; + border-bottom: 2rpx solid #777; + border-left: 2rpx solid #777; + transform: rotate(45deg); + position: absolute; + left: 30rpx; + top: 41rpx; +} + +.search-bar .search-box { + display: flex; + justify-content: center; + align-items: center; + height: 60rpx; + background: #f7f7f7; + z-index: 999; + width: 92%; + border-radius: 50rpx; + text-align: center; + margin: auto; +} + +.sear-input { + font-size: 28rpx; +} + +.search-bar .search-hint { + font-size: 28rpx; + position: absolute; + right: 30rpx; + top: 32rpx; +} + +.search-bar .search-box .search-img { + width: 32rpx; + height: 32rpx; + margin-right: 10rpx; +} + +/* 左侧菜单栏 */ + +.leftmenu { + width: 200rpx; + height: 100%; + box-sizing: border-box; + background-color: #f5f6f7; + overflow: scroll; + z-index: 2; +} + +.menu-item { + line-height: 90rpx; + height: 90rpx; + text-align: center; + border-bottom: 2rpx silid #e3e3e3; + position: relative; + color: #777; + font-size: 28rpx; +} + +.menu-item.active { + color: #eb2444; + font-size: 28rpx; + font-weight: bold; + position: relative; + background: #fff; +} + +.menu-item.active:before { + position: absolute; + left: 0; + content: ""; + width: 8rpx; + height: 32rpx; + top: 29rpx; + background: #eb2444; +} + +.menu-item text.tips-num { + position: absolute; + top: 20rpx; + right: 15rpx; + border-radius: 15rpx; + width: 30rpx; + height: 30rpx; + background: red; + color: #fff; + font-size: 25rpx; + line-height: 30rpx; +} + +/* 右侧商品栏 */ + +.rightcontent { + width: 550rpx; + height: 100%; + box-sizing: border-box; + background-color: #fff; + z-index: 1; +} + +.rightcontent .adver-map { + width: auto; + box-sizing: border-box; + overflow: hidden; + position: relative; + margin: 30rpx 20rpx 0; +} + +.rightcontent .adver-map .item-a { + display: block; + font-size: 0; + width: 100%; +} + +.rightcontent .adver-map .item-a image { + max-width: 100%; +} + +.rightcontent .cont-item { + padding: 0 20rpx 20rpx 20rpx; +} + +.rightcontent .cont-item .show-item .more-prod-pic { + text-align: center; + width: 150rpx; + height: 150rpx; + line-height: 150rpx; + font-size: 0; +} + +.rightcontent .cont-item .show-item .more-prod-pic .more-pic { + max-width: 100%; + max-height: 100%; + border-radius: 8rpx; + vertical-align: middle; +} + +.rightcontent .cont-item .show-item { + position: relative; + display: flex; + justify-content: start; + padding: 20rpx 0; +} + +.rightcontent .cont-item .show-item::after { + content: ''; + background-color: #f4f4f4; + left: 0; + height: 1px; + transform-origin: 50% 100% 0; + bottom: 0; + position: absolute; + display: block; + width: 510rpx; + padding-left: 20rpx; +} + +.rightcontent .cont-item .show-item .prod-text-right { + margin-left: 20rpx; + width: 75%; +} + +.rightcontent .cont-item .show-item .prod-text-right .cate-prod-info { + font-size: 22rpx; + color: #999; + margin: 10rpx 0 20rpx 0; +} + +.rightcontent .cont-item .show-item .prod-text-right .prod-text.more { + margin: 0; + font-size: 28rpx; + display: -webkit-box; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + color: #000; +} + +.rightcontent .cont-item .show-item .prod-text-right .prod-price.more { + font-size: 28rpx; + color: #eb2444; + font-family: arial; +} diff --git a/mall4uni/pages/category/category.vue b/mall4uni/pages/category/category.vue new file mode 100644 index 0000000..4c13fe1 --- /dev/null +++ b/mall4uni/pages/category/category.vue @@ -0,0 +1,192 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/delivery-address/delivery-address.css b/mall4uni/pages/delivery-address/delivery-address.css new file mode 100644 index 0000000..ca6af24 --- /dev/null +++ b/mall4uni/pages/delivery-address/delivery-address.css @@ -0,0 +1,101 @@ +/* pages/delivery-address/delivery-address.wxss */ + +page { + background-color: #f4f4f4; + border-top: 2rpx solid #e9eaec; + padding-bottom: 150rpx; +} + +.main { + margin-top: 20rpx; +} + +.address { + margin-bottom: 15rpx; + width: 100%; + background-color: #fff; + border-bottom: 2rpx solid #e9eaec; +} + +.address .personal { + position: relative; + padding: 20rpx 30rpx; + border-bottom: 3rpx dashed #e9eaec; +} + +.address .personal .info-tit .name { + margin-right: 30rpx; + font-size: 32rpx; + display: inline-block; +} + +.address .personal .info-tit .tel { + font-size: 30rpx; +} + +.address .personal .info-tit image { + position: absolute; + right: 30rpx; + top: 46rpx; + width: 40rpx; + height: 40rpx; + margin-left: 50rpx; + vertical-align: middle; +} + +.personal .addr { + font-size: 26rpx; + margin: 10rpx 0; +} + +.personal .addr .addr-get { + display: inline-block; + color: #999; + width: 85%; +} + +.address .select-btn { + padding: 15rpx 30rpx; + display: flex; + align-items: center; + justify-content: space-between; +} + +.address .select-btn .box { + font-size: 26rpx; +} + +.footer { + position: fixed; + bottom: 0; + width: 100%; + height: 100rpx; + line-height: 100rpx; + text-align: center; + background-color: #fff; + box-shadow: 0 -1rpx 8rpx rgba(0, 0, 0, 0.05); +} + +.footer text { + font-size: 32rpx; + color: #eb2444; +} + +.empty .img { + text-align: center; + margin-top: 130rpx; +} + +.empty .img image { + width: 100rpx; + height: 100rpx; + display: block; + margin: auto; +} + +.empty .txt { + margin-top: 30rpx; + font-size: 24rpx; + text-align: center; + color: #999; +} diff --git a/mall4uni/pages/delivery-address/delivery-address.vue b/mall4uni/pages/delivery-address/delivery-address.vue new file mode 100644 index 0000000..8739d92 --- /dev/null +++ b/mall4uni/pages/delivery-address/delivery-address.vue @@ -0,0 +1,145 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/editAddress/editAddress.css b/mall4uni/pages/editAddress/editAddress.css new file mode 100644 index 0000000..bb57d4e --- /dev/null +++ b/mall4uni/pages/editAddress/editAddress.css @@ -0,0 +1,181 @@ +/* pages/editAddress/editAddress.wxss */ + +page { + background: #fff; +} + +/* input列表 */ + +.input-box { + margin-bottom: 50rpx; + background: #fff; + padding: 0 20rpx; +} + +.input-box .section { + display: flex; + align-items: center; + width: 100%; + font-size: 28rpx; + padding: 30rpx 0; + line-height: 48rpx; + height: 100%; + box-sizing: border-box; + border-bottom: 2rpx solid #e5e5e5; +} + +.input-box .section text { + width: 20%; + color: #333; +} + +.input-box .section input { + width: 70%; + padding: 0 20rpx; + color: #333; +} + +.input-box .section picker { + width: 70%; + padding: 0 30rpx; +} + +.input-box .section .pca { + width: 70%; + padding: 0 20rpx; +} + +.input-box .section .arrow { + width: 28rpx; + height: 28rpx; +} + +.input-box .section .arrow image { + width: 100%; + height: 100%; + vertical-align: top; +} + +/* end input列表 */ + +/* 功能按钮 */ + +.btn-box { + padding: 5px 10px; + width: 100%; + text-align: center; + margin: auto; +} + +.btn-box text { + font-size: 30rpx; +} + +.btn-box .clear.btn, .keep.btn { + width: 60%; + height: 80rpx; + line-height: 80rpx; + margin: auto; + text-align: center; + border: 1rpx solid #eb2444; + border-radius: 50rpx; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05), 0 1px 0 rgba(255, 255, 255, 0.3); +} + +.btn-box .keep { + color: #fff; + background-color: #eb2444; +} + +.btn-box .clear.btn { + margin-top: 40rpx; + color: #eb2444; + background-color: #f8f0f1b6; +} + +/* end 功能按钮 */ + +.infoText { + margin-top: 20rpx; + text-align: center; + width: 100%; + justify-content: center; +} + +picker-view { + background-color: white; + padding: 0; + width: 100%; + height: 380rpx; + bottom: 0; + position: fixed; +} + +picker-view-column view { + vertical-align: middle; + font-size: 28rpx; + line-height: 28rpx; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +.animation-element-wrapper { + display: flex; + position: fixed; + left: 0; + top: 0; + height: 100%; + width: 100%; + background-color: rgba(0, 0, 0, 0.6); + z-index: 999; +} + +.animation-element { + display: flex; + position: fixed; + width: 100%; + height: 470rpx; + bottom: 0; + background-color: rgba(255, 255, 255, 1); +} + +.animation-button { + top: 20rpx; + width: 290rpx; + height: 100rpx; + align-items: center; +} + +picker-view text { + color: #999; + display: inline-flex; + position: fixed; + margin-top: 20rpx; + height: 50rpx; + text-align: center; + line-height: 50rpx; + font-size: 34rpx; + font-family: Arial, Helvetica, sans-serif; +} + +.left-bt { + left: 30rpx; +} + +.right-bt { + right: 20rpx; + top: 20rpx; + position: absolute; + width: 80rpx !important; +} + +.line { + display: block; + position: fixed; + height: 2rpx; + width: 100%; + margin-top: 89rpx; + background-color: #eee; +} diff --git a/mall4uni/pages/editAddress/editAddress.vue b/mall4uni/pages/editAddress/editAddress.vue new file mode 100644 index 0000000..2426dce --- /dev/null +++ b/mall4uni/pages/editAddress/editAddress.vue @@ -0,0 +1,476 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/express-delivery/express-delivery.css b/mall4uni/pages/express-delivery/express-delivery.css new file mode 100644 index 0000000..9130244 --- /dev/null +++ b/mall4uni/pages/express-delivery/express-delivery.css @@ -0,0 +1,184 @@ +/* pages/express-delivery/express-delivery.wxss */ + +.container { + height: 100%; +} + +.padding20 { + padding-top: 88rpx; +} + +.f-fl { + float: left; +} + +.f-fr { + float: right; +} + +.navWrap { + position: fixed; + top: 0; + left: 0; + z-index: 1; + overflow: hidden; + background-color: #fafafa; + border-bottom: 2rpx solid #f4f4f4; + height: 92rpx; +} + +.nav { + display: flex; + flex-flow: row nowrap; +} + +.nav-slider { + left: 0; + bottom: 0; + height: 4rpx; + background-color: #b4282d; + transition: transform 0.3s; + transition: transform 0.3s, -webkit-transform 0.3s; + box-sizing: border-box; +} + +.nav-item { + display: flex; + align-items: center; + justify-content: center; + flex: 1; + float: left; + height: 88rpx; + padding: 0 16rpx; + font-size: 28rpx; +} + +.nav-item text { + box-sizing: border-box; + color: #333; + padding: 27rpx 16rpx 23rpx; + line-height: 34rpx; +} + +.nav-item.active text { + color: #b4282d; +} + +.u-icon { + vertical-align: middle; +} + +.deliveryInfo { + height: 198rpx; + width: 100%; + vertical-align: middle; + padding-left: 30rpx; + background-size: cover; + display: table; + position: relative; + box-sizing: border-box; +} + +.icon-express { + width: 104rpx; + height: 104rpx; + background-size: 100% 100%; + position: absolute; + top: 48rpx; + left: 30rpx; +} + +.infoWarp { + display: table-cell; + vertical-align: middle; +} + +.deliveryInfo .companyname, .deliveryInfo .expno { + line-height: 1; + margin-left: 136rpx; + font-size: 28rpx; +} + +.deliveryInfo .companyname .key, .deliveryInfo .expno .key { + color: #666; +} + +.deliveryInfo .expno { + margin-top: 16rpx; +} + +.deliveryDetail { + margin-top: 20rpx; + padding-top: 40rpx; + background-color: #fff; + min-height: 670rpx; +} + +.detailItem { + border-left: 1px dashed #f4f4f4; + margin-left: 42rpx; + position: relative; + margin-bottom: 2rpx; +} + +.dot image { + width: 35rpx; + height: 35rpx; + background-size: 100%; + position: absolute; + top: 40rpx; + left: -18rpx; +} + +.lastest .dot image { + top: -2rpx; +} + +.detail .desc { + font-size: 24rpx; + line-height: 30rpx; +} + +.detail .time { + font-size: 24rpx; + line-height: 30rpx; + color: #999; + margin-top: 15rpx; +} + +.detail { + border-top: 1px solid #f4f4f4; + margin-left: 28rpx; + overflow: hidden; + padding-right: 30rpx; +} + +.detail .desc { + margin-top: 40rpx; +} + +.detail .time { + margin-bottom: 39rpx; +} + +.lastest .detail .desc, .lastest .detail .time { + color: #105c3e; +} + +.lastest .detail { + border-top: 0; +} + +.lastest .detail .desc { + margin-top: 0; +} + +.deliveryTip { + height: 80rpx; + background-color: #fff8d8; + padding-left: 30rpx; + color: #f48f18; + font-size: 28rpx; + line-height: 80rpx; + margin-bottom: 20rpx; +} diff --git a/mall4uni/pages/express-delivery/express-delivery.vue b/mall4uni/pages/express-delivery/express-delivery.vue new file mode 100644 index 0000000..1ca64ac --- /dev/null +++ b/mall4uni/pages/express-delivery/express-delivery.vue @@ -0,0 +1,119 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/index/index.css b/mall4uni/pages/index/index.css new file mode 100644 index 0000000..451ed6a --- /dev/null +++ b/mall4uni/pages/index/index.css @@ -0,0 +1,462 @@ +/**index.wxss**/ + +page { + background: #f7f7f7; + height: auto; +} + +/* 轮播图及搜索框 */ + +swiper { + width: 100%; + height: 350rpx; + overflow: hidden; +} + +swiper.pic-swiper { + margin-top: 75rpx; + padding: 10rpx 0; + background: #fff; + height: 422rpx; +} + +swiper-item { + font-size: 26rpx; + font-weight: bold; +} + +swiper.pic-swiper .img-box { + font-size: 0; +} + +.wx-swiper-dots { + margin-bottom: 15rpx; +} + +.banner-item { + box-sizing: border-box; +} + +swiper.pic-swiper .banner { + position: absolute; + width: 690rpx; + margin: 0 10rpx; + height: 402rpx; + border-radius: 8rpx; + display: inline-block; + box-shadow: 0 4px 10px 0 rgba(83, 83, 83, 0.288); +} + +.container .bg-sear { + position: fixed; + z-index: 999; + width: 100%; + line-height: 56rpx; + background: #fff; + padding: 20rpx 0; + text-align: center; + top: 0; +} + +.bg-sear .section { + display: flex; + justify-content: center; + align-items: center; + height: 60rpx; + background: #fff; + z-index: 1; + border-radius: 50rpx; + width: 92%; + margin: auto; + left: 4%; + background: #f7f7f7; +} + +.bg-sear .section .placeholder { + display: block; + font-size: 24rpx; + color: #999; +} + +.bg-sear .section .search-img { + width: 32rpx; + height: 32rpx; + margin-right: 10rpx; +} + +/* 分类栏目 */ + +.content { + background: #fff; +} + +.cat-item { + display: flex; + justify-content: space-between; + background: #fff; + padding-top: 20rpx; + padding-bottom: 30rpx; +} + +.cat-item .item { + text-align: center; + width: 25%; + display: flex; + flex-direction: column; + margin: auto; + align-items: center; +} + +.cat-item .item image { + width: 75rpx; + height: 75rpx; +} + +.cat-item .item text { + font-size: 26rpx; + margin-top: 20rpx; +} + +/* 消息播放 */ + +.message-play { + position: relative; + height: 90rpx; + background: #fff; + margin: auto; + padding: 0 60rpx 0 100rpx; + box-sizing: border-box; + box-shadow: 0 16rpx 32rpx 0 rgba(7, 17, 27, 0.05); + border: 2rpx solid #fafafa; +} + +.message-play .hornpng { + width: 77rpx; + height: 36rpx; + position: absolute; + left: 20rpx; + top: 27rpx; + margin-right: 8rpx; +} + +.message-play .swiper-cont { + height: 90rpx; + line-height: 90rpx; +} + +.message-play .swiper-cont .items { + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-align: left; +} + +.arrow { + width: 15rpx; + height: 15rpx; + border-top: 3rpx solid #686868; + border-right: 3rpx solid #686868; + transform: rotate(45deg); + position: absolute; + right: 30rpx; + top: 34rpx; +} + +/* 每日上新 */ + +.title { + position: relative; + height: 64rpx; + line-height: 64rpx; + font-size: 32rpx; + padding:40rpx 0 10rpx 30rpx; + color:#333; + background: #fff; +} + +.up-to-date .title{ + color: #fff; + background: none; +} + +.title .more-prod-cont { + color: #999; + display: inline-block; + text-align: right; +} + +.up-to-date .title .more-prod-cont .more { + position:absolute; +right:30rpx; +top:48rpx; +color:#fff; +font-size:24rpx; +background:#65addf; +border-radius:30rpx; +padding:0 30rpx; +height:44rpx; +line-height:44rpx; + +} + +.title .more-prod-cont .more{ + position:absolute; + right:30rpx; + top:48rpx; + color:#666; + font-size:24rpx; + padding:0 20rpx; + height:44rpx; + line-height:44rpx; +} + +.title .more-prod-cont .arrow { + top:58rpx; + right: 30rpx; + border-top: 2rpx solid #666; + border-right: 2rpx solid #666; +} + +.up-to-date { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAABxCAYAAACkwXoWAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAZBJREFUeJzt1DEBwCAAwLAxYfhEGXJABkcTBb065trnAwj6XwcAvGKAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGRdKykDj9OUNYkAAAAASUVORK5CYII="); + background-position: top; + background-size: 100% 332rpx; + background-repeat: no-repeat; + background-color: #fff; +} + +.up-to-date .item-cont { + margin: auto; + height: auto; + width: calc(100% - 40rpx); + padding:0 20rpx; + display: flex; + flex-wrap:wrap; + justify-content: space-around; + /* padding: 10rpx 0 0 0; */ +} + +.hotsale-item-cont { + padding-bottom: 20rpx; + background: #fff; +} + +.up-to-date .item-cont::before { + clear: both; + height: 0; + overflow: hidden; +} + +.up-to-date .item-cont .prod-item { + border-radius: 10rpx; + width: 220rpx; + background: #fff; + display: inline-block; + margin-bottom:20rpx; + box-shadow: 0rpx 6rpx 8rpx rgba(58,134,185,0.2); +} + +.up-to-date .item-cont .prod-item .imagecont { + width: 100%; + font-size: 0; +} + +.up-to-date .item-cont .prod-item .imagecont .prodimg { + width: 220rpx; + height: 220rpx; + vertical-align: middle; + border-top-left-radius: 10rpx; + border-top-right-radius: 10rpx; + font-size:0; + +} + +.up-to-date .item-cont .prod-item .prod-text { + font-size: 28rpx; + overflow: hidden; + margin: 10rpx 0; + height: 75rpx; + display: -webkit-box; + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + color: #000; + padding: 0 10rpx; +} + +.up-to-date .item-cont .prod-item .prod-price { + font-size: 25rpx; + color: #eb2444; + font-family: Arial; + padding: 0 10rpx; +} + +.more.prod-price { + position: absolute; + bottom: 20rpx; +} + +/* 商城热卖 */ + +.hot-sale { + /* margin: 15rpx 0; */ +} + +.hot-sale .prod-items { + width: 345rpx; + display: inline-block; + background: #fff; + padding-bottom: 20rpx; + box-sizing: border-box; + /* border: 2rpx solid #e1e1e1; */ + box-shadow: 0rpx 6rpx 8rpx rgba(58,134,185,0.2); +} + +.hot-sale .prod-items:nth-child(2n-1) { + margin: 20rpx 10rpx 10rpx 20rpx; +} + +.hot-sale .prod-items:nth-child(2n) { + margin: 20rpx 20rpx 10rpx 10rpx; +} + +.prod-items .hot-imagecont .hotsaleimg { + width: 341rpx; + height: 341rpx; +} + +.prod-items .hot-text .hotprod-text { + font-size: 28rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.prod-items .hot-imagecont { + font-size: 0; + text-align: center; +} + +.prod-items .hot-text { + margin-top: 20rpx; + padding: 0 10rpx; +} + +.prod-items .hot-text .prod-info, .more-prod .prod-text-right .prod-info { + font-size: 22rpx; + color: #999; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.prod-items .hot-text .prod-text-info { + position: relative; + height: 70rpx; + line-height: 70rpx; + font-family: Arial; +} + +.prod-items .hot-text .prod-text-info .hotprod-price { + display: inline; + font-size: 26rpx; + color: #eb2444; +} + +.prod-items .hot-text .prod-text-info .basket-img { + width: 50rpx; + height: 50rpx; + position: absolute; + right: 0; + bottom: 7rpx; + /* border: 2rpx solid #eb2444; + border-radius: 50%; */ + padding: 8rpx; +} + +.singal-price { + display: inline; + font-size: 20rpx; + text-decoration: line-through; + color: #777; + margin-left: 15rpx; +} + +/* 更多宝贝 */ + +.more-prod { + background: #fff; +} + + +.more-prod .prod-show .show-item .more-prod-pic { + width: 250rpx; + height: 250rpx; +} + +.more-prod .prod-show .show-item { + position: relative; + display: flex; + padding: 20rpx; + justify-content: start; + border-top: 2rpx solid #f4f4f4; +} + +.more-prod .prod-show .show-item .more-prod-pic .more-pic { + max-width: 100%; + max-height: 100%; +} + +.more-prod .prod-show .show-item .prod-text-right { + margin-left: 30rpx; + width: 72%; + padding-bottom: 10rpx; + display: flex; + flex-direction: column; + justify-content: center; +} + +.more-prod .prod-show .show-item .prod-text-right .go-to-buy { + font-size: 26rpx; + background: #fff2f5; + color: #eb2444; + border-radius: 50rpx; + text-align: center; + padding: 12rpx 20rpx; + position: absolute; + right: 20rpx; + bottom: 20rpx; +} + +.more-prod .prod-show .show-item .prod-text-right .prod-text.more { + margin: 0; + font-size: 28rpx; + overflow: hidden; + margin-bottom: 20rpx; + display: -webkit-box; + word-break: break-all; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.more-prod .prod-show .show-item .prod-text-right .more.prod-price { + font-size: 28rpx; + font-family: arial; +} + +.b-cart { + margin-top: 30rpx; +} + +.b-cart .basket-img { + width: 50rpx; + height: 50rpx; + position: absolute; + right: 46rpx; + /* border: 2rpx solid #eb2444; + border-radius: 50%; */ + padding: 8rpx; +} diff --git a/mall4uni/pages/index/index.vue b/mall4uni/pages/index/index.vue new file mode 100644 index 0000000..4288c15 --- /dev/null +++ b/mall4uni/pages/index/index.vue @@ -0,0 +1,385 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/login/login.css b/mall4uni/pages/login/login.css new file mode 100644 index 0000000..e7a507a --- /dev/null +++ b/mall4uni/pages/login/login.css @@ -0,0 +1,44 @@ +/* pages/login/login.wxss */ + + +image { + display: block; + width: 150rpx; + height: 150rpx; + margin: auto; + margin-top: 100rpx; + border-radius: 50%; +} + +view.msg { + font-size: 24rpx; + color: #666; + width: 100%; + text-align: center; + margin-top: 10rpx; +} + +view.title { + font-size: 28rpx; + color: #333; + width: 100%; + text-align: center; + margin-top: 20rpx; +} + +button { + margin-top: 30rpx; + width: 450rpx; + height: 70rpx; + line-height: 70rpx; + font-size: 30rpx; + color: #fff; + background: #eb2444; + border: 2rpx solid #eb2444; +} + + +.button-hover{ + background-color: #fff; + color: #eb2444; +} \ No newline at end of file diff --git a/mall4uni/pages/login/login.vue b/mall4uni/pages/login/login.vue new file mode 100644 index 0000000..1ea024c --- /dev/null +++ b/mall4uni/pages/login/login.vue @@ -0,0 +1,73 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/logs/logs.css b/mall4uni/pages/logs/logs.css new file mode 100644 index 0000000..c861f57 --- /dev/null +++ b/mall4uni/pages/logs/logs.css @@ -0,0 +1,9 @@ +.log-list { + display: flex; + flex-direction: column; + padding: 40rpx; +} + +.log-item { + margin: 10rpx; +} diff --git a/mall4uni/pages/logs/logs.vue b/mall4uni/pages/logs/logs.vue new file mode 100644 index 0000000..2dd795b --- /dev/null +++ b/mall4uni/pages/logs/logs.vue @@ -0,0 +1,35 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/news-detail/news-detail.css b/mall4uni/pages/news-detail/news-detail.css new file mode 100644 index 0000000..b69e681 --- /dev/null +++ b/mall4uni/pages/news-detail/news-detail.css @@ -0,0 +1,20 @@ +/* pages/news-detail/news-detail.wxss */ + +.news-detail { + padding: 20rpx; +} + +.news-detail .news-detail-title { + font-size: 32rpx; + font-weight: bold; + line-height: 50rpx; + padding: 20rpx; +} + +.news-detail .news-detail-text { + font-size: 28rpx; + line-height: 46rpx; + text-align: justify; + text-justify: inter-ideograph; + margin-top: 20rpx; +} diff --git a/mall4uni/pages/news-detail/news-detail.vue b/mall4uni/pages/news-detail/news-detail.vue new file mode 100644 index 0000000..2cab1f4 --- /dev/null +++ b/mall4uni/pages/news-detail/news-detail.vue @@ -0,0 +1,98 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/order-detail/order-detail.css b/mall4uni/pages/order-detail/order-detail.css new file mode 100644 index 0000000..a315859 --- /dev/null +++ b/mall4uni/pages/order-detail/order-detail.css @@ -0,0 +1,286 @@ +/* pages/order-detail/order-detail.wxss */ + +page { + background: #f4f4f4; +} + +.order-detail { + margin-bottom: 120rpx; +} + +.order-detail .delivery-addr { + padding: 20rpx 30rpx; + background: #fff; +} + +.order-detail .delivery-addr .user-info { + line-height: 48rpx; + word-wrap: break-word; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; +} + +.order-detail .delivery-addr .user-info .item { + font-size: 28rpx; + margin-right: 30rpx; + vertical-align: top; + display: inline-block; +} + +.order-detail .delivery-addr .addr { + font-size: 26rpx; + line-height: 36rpx; + color: #999; +} + +/* 商品列表 */ + +.prod-item { + background-color: #fff; + margin-top: 15rpx; + font-size: 28rpx; +} + +.prod-item .item-cont .prod-pic image { + width: 180rpx; + height: 180rpx; +} + +.prod-item .item-cont { + display: flex; + align-items: center; + padding: 30rpx; + border-top: 2rpx solid #f1f1f1; +} + +.prod-item .item-cont .prod-pic { + font-size: 0; + display: block; + width: 160rpx; + height: 160rpx; + overflow: hidden; + background: #fff; + margin-right: 16rpx; +} + +.prod-item .item-cont .prod-pic image { + width: 100%; + height: 100%; +} + +.prod-item .item-cont .prod-info { + margin-left: 10rpx; + font-size: 28rpx; + width: 100%; + position: relative; + height: 80px; + -webkit-flex: 1; + -ms-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + flex: 1; +} + +.prod-item .item-cont .prod-info .prodname { + font-size: 28rpx; + line-height: 40rpx; + max-height: 86rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +.prod-item .item-cont .prod-info .prod-info-cont { + position: relative; + color: #999; + margin-top: 10rpx; + font-size: 24rpx; +} + +.prod-item .item-cont .prod-info .prod-info-cont .info-item { + color: #999; + height: 28rpx; + margin-top: 10rpx; + font-size: 24rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; + width: 70%; +} + +.prod-item .item-cont .prod-info .prod-info-cont .number { + float: left; + margin-right: 20rpx; +} + +.prod-item .price-nums { + margin-top: 30rpx; +} + +.prod-item .price-nums .prodprice { + color: #333; + height: 50rpx; + line-height: 50rpx; + font-size: 24rpx; + float: left; +} + +.prod-item .price-nums .btn-box { + float: right; + text-align: right; +} + +.prod-item .price-nums .btn-box .btn { + padding: 6rpx 30rpx; + line-height: 36rpx; + margin-left: 20rpx; + font-size: 24rpx; + display: inline-block; + border: 2rpx solid #e4e4e4; + border-radius: 50rpx; +} + +/* +订单信息 */ + +.order-msg { + background: #fff; + margin-top: 15rpx; + font-size: 28rpx; +} + +.order-msg .msg-item { + padding: 20rpx; + border-top: 2rpx solid #f1f1f1; +} + +.order-msg .msg-item:first-child { + border: 0; +} + +.order-msg .msg-item .item { + display: flex; + padding: 10rpx 0; + align-items: center; +} + +.order-msg .msg-item .item.payment { + border-top: 2rpx solid #f1f1f1; + color: #eb2444; + padding-top: 30rpx; +} + +.order-msg .msg-item .item .item-tit { + color: #999; + line-height: 48rpx; +} + +.order-msg .msg-item .item .item-txt { + flex: 1; + line-height: 48rpx; +} + +.order-msg .msg-item .item .copy-btn { + display: block; + margin-left: 20rpx; + border: 2rpx solid #e4e4e4; + padding: 6rpx 24rpx; + border-radius: 50rpx; + font-size: 24rpx; + line-height: 28rpx; +} + +.order-msg .msg-item .item .item-txt.price { + text-align: right; +} + +/* 底部栏 */ + +.order-detail-footer { + position: fixed; + bottom: 0; + width: 100%; + max-width: 750rpx; + background: #fff; + margin: auto; + display: -webkit-flex; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: flex; + padding: 22rpx 0; + font-size: 26rpx; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); +} + +.order-detail-footer .dele-order { + margin-left: 20rpx; + line-height: 60rpx; + display: block; + margin-right: 20rpx; + width: 150rpx; + text-align: center; +} + +.order-detail-footer .footer-box { + flex: 1; + text-align: right; + line-height: 60rpx; +} + +.order-detail-footer .footer-box .buy-again { + font-size: 26rpx; + color: #fff; + background: #eb2444; + border-radius: 50rpx; + padding: 10rpx 20rpx; + margin-right: 20rpx; +} + +.order-detail-footer .footer-box .apply-service { + font-size: 26rpx; + border-radius: 50rpx; + padding: 10rpx 20rpx; + border: 1px solid #e4e4e4; + margin-right: 20rpx; +} + +.clearfix:after { + content: " "; + display: table; + clear: both; +} + +/* 根据状态显示不同的颜色 */ + +.order-state { + height: 70rpx; + line-height: 70rpx; + text-align: right; + margin-right: 20rpx; +} + +.order-state .order-sts { + color: #eb2444; + font-size: 28rpx; +} + +.order-state .order-sts.gray { + color: #999; + height: 32rpx; + line-height: 32rpx; +} + +.order-state .order-sts.normal { + color: #333; +} diff --git a/mall4uni/pages/order-detail/order-detail.vue b/mall4uni/pages/order-detail/order-detail.vue new file mode 100644 index 0000000..9638938 --- /dev/null +++ b/mall4uni/pages/order-detail/order-detail.vue @@ -0,0 +1,285 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/orderList/orderList.css b/mall4uni/pages/orderList/orderList.css new file mode 100644 index 0000000..2be1596 --- /dev/null +++ b/mall4uni/pages/orderList/orderList.css @@ -0,0 +1,257 @@ +/* pages/orderList/orderList.wxss */ + +page { + background-color: #f4f4f4; + color: #333; +} + +/* 头部菜单 */ + +.order-tit { + position: fixed; + top: 0; + display: flex; + justify-content: space-around; + z-index: 999; + width: 100%; + height: 100rpx; + line-height: 100rpx; + background-color: #fff; + border-bottom: 2rpx solid #f4f4f4; +} + +.order-tit text { + display: block; + font-size: 28rpx; + color: 999; + width: 100rpx; + text-align: center; +} + +.order-tit text.on { + border-bottom: 4rpx solid #eb2444; + color: #eb2444; +} + +/* end 头部菜单 */ + +.main { + margin-top: 100rpx; +} + +/* 商品列表 */ + +.prod-item { + background-color: #fff; + margin-top: 15rpx; + font-size: 28rpx; +} + +.prod-item .item-cont .prod-pic image { + width: 180rpx; + height: 180rpx; +} + +.prod-item .order-num { + padding: 20rpx 30rpx; + display: flex; + justify-content: space-between; + font-size: 28rpx; +} + +.order-state { + display: flex; + align-items: center; + font-size: 24rpx; +} + +.prod-item .item-cont .categories { + white-space: nowrap; +} + +.prod-item .item-cont { + display: flex; + align-items: center; + padding: 20rpx 30rpx; + border-radius: 10rpx; + display: -webkit-flex; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + background: #fafafa; +} + +.prod-item .order-num .clear-btn { + width: 32rpx; + height: 32rpx; + font-size: 0; + vertical-align: top; + margin-left: 42rpx; + position: relative; +} + +.prod-item .order-num .clear-btn::after { + content: " "; + display: block; + position: absolute; + left: -10px; + top: 0rpx; + width: 1px; + height: 32rpx; + background: #ddd; +} + +.prod-item .order-num .clear-btn .clear-list-btn { + width: 100%; + height: 100%; + vertical-align: middle; +} + +.prod-item .item-cont .prod-pic { + font-size: 0; + display: inline-block; + width: 160rpx; + height: 160rpx; + overflow: hidden; + background: #fff; + margin-right: 16rpx; +} + +.prod-item .item-cont .prod-pic image { + width: 100%; + height: 100%; +} + +.prod-item .item-cont .prod-info { + margin-left: 10rpx; + font-size: 28rpx; + width: 100%; + position: relative; + height: 160rpx; + -webkit-flex: 1; + -ms-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + flex: 1; +} + +.prod-item .item-cont .prod-info .prodname { + font-size: 28rpx; + line-height: 36rpx; + max-height: 86rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +.prod-item .item-cont .prod-info .prod-info-cont { + color: #999; + line-height: 40rpx; + margin-top: 10rpx; + font-size: 22rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +.prod-item .total-num { + text-align: right; + padding: 20rpx 30rpx; + font-size: 28rpx; +} + +.prod-item .price-nums .prodprice { + color: #333; + position: absolute; + bottom: 0; +} + +.prod-item .price-nums .prodcount { + position: absolute; + bottom: 5rpx; + right: 0; + color: #999; + font-family: verdana; +} + +.prod-item .total-num .prodprice { + display: inline-block; + color: #333; +} + +.prod-item .total-num .prodcount { + margin-right: 20rpx; +} + +.prod-item .prod-foot { + padding: 20rpx 30rpx; + border-top: 2rpx solid #e6e6e6; +} + +.prod-item .prod-foot .total { + font-size: 25rpx; + margin-bottom: 20rpx; + padding-bottom: 20rpx; + border-bottom: 2rpx solid #e9eaec; +} + +.prod-item .prod-foot .btn { + display: flex; + align-items: center; + justify-content: flex-end; +} + +.other-button-hover { + background-color: blue; +} + +.button-hover { + background-color: red; +} + +/** 添加自定义button点击态样式类**/ + +.button-hover { + background-color: blue; +} + +.button { + margin-left: 10px; + font-size: 26rpx; + background: #fff; + padding: 10rpx 30rpx; + border-radius: 80rpx; + border: 2rpx solid #e1e1e1; +} + +.button.warn { + color: #eb2444; + border-color: #eb2444; +} + +/* end 商品列表 */ + +.empty { + font-size: 24rpx; + margin-top: 100rpx; + text-align: center; + color: #999; + height: 300rpx; + line-height: 300rpx; +} + +/* 根据状态显示不同的颜色 */ + +.order-state .order-sts.red { + color: #eb2444; +} + +.order-state .order-sts.gray { + color: #999; +} diff --git a/mall4uni/pages/orderList/orderList.vue b/mall4uni/pages/orderList/orderList.vue new file mode 100644 index 0000000..a223666 --- /dev/null +++ b/mall4uni/pages/orderList/orderList.vue @@ -0,0 +1,412 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/pay-result/pay-result.css b/mall4uni/pages/pay-result/pay-result.css new file mode 100644 index 0000000..6248676 --- /dev/null +++ b/mall4uni/pages/pay-result/pay-result.css @@ -0,0 +1,61 @@ +/* pages/pay-result/pay-result.wxss */ + +.pay-sts { + font-size: 40rpx; + margin-top: 100rpx; + padding: 30rpx 0; + text-align: center; +} + +.pay-sts.fail { + color: #f43530; +} + +.pay-sts.succ { + color: #19be6b; +} + +.btns { + margin-top: 50rpx; + text-align: center; +} + +.tips { + font-size: 28rpx; + color: #999; + text-align: center; +} + +.tips .warn { + color: #f43530; +} + +.btns .button { + border-radius: 10rpx; + font-size: 28rpx; + background: #fff; + color: #333; + padding: 20rpx 35rpx; + width: 300rpx; + margin: 0 20rpx; + text-align: center; +} + +.btns .button.checkorder { + background: #19be6b; + color: #fff; + margin-bottom: 20rpx; + border: 2rpx solid #19be6b; +} + +.btns .button.payagain { + background: #fff; + border: 2rpx solid #f90; + color: #f90; +} + +.btns .button.shopcontinue { + background: #fff; + border: 2rpx solid #19be6b; + color: #19be6b; +} diff --git a/mall4uni/pages/pay-result/pay-result.vue b/mall4uni/pages/pay-result/pay-result.vue new file mode 100644 index 0000000..886e12f --- /dev/null +++ b/mall4uni/pages/pay-result/pay-result.vue @@ -0,0 +1,132 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/prod-classify/prod-classify.css b/mall4uni/pages/prod-classify/prod-classify.css new file mode 100644 index 0000000..f68762d --- /dev/null +++ b/mall4uni/pages/prod-classify/prod-classify.css @@ -0,0 +1,19 @@ +/* pages/prod-classify/prod-classify.wxss */ + +page { + background: #fff; +} + +.line-fix { + width: 100%; + height: 2rpx; + background: #e1e1e1; + position: fixed; + top: 0; +} + +.tit-background { + width: 100%; + height: 20rpx; + background: #f4f4f4; +} diff --git a/mall4uni/pages/prod-classify/prod-classify.vue b/mall4uni/pages/prod-classify/prod-classify.vue new file mode 100644 index 0000000..a71c26d --- /dev/null +++ b/mall4uni/pages/prod-classify/prod-classify.vue @@ -0,0 +1,303 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/prod/prod.css b/mall4uni/pages/prod/prod.css new file mode 100644 index 0000000..fb2c8fa --- /dev/null +++ b/mall4uni/pages/prod/prod.css @@ -0,0 +1,878 @@ +page { + background: #f4f4f4; + height: 100%; +} + +.container { + height: auto; + padding-bottom: 150rpx; +} + +swiper { + height: 750rpx; + width: 100%; + border-bottom: 2rpx solid #f8f8f8; +} + +swiper image { + height: 750rpx; + width: 100%; +} + +/** 商品信息 */ + +.prod-info { + padding: 30rpx 30rpx 0 30rpx; + position: relative; + background: #fff; +} + +.tit-wrap { + position: relative; + line-height: 40rpx; + padding-right: 104rpx; +} + +.prod-tit { + font-size: 32rpx; + color: #333; + padding-right: 20rpx; +} + +.tit-wrap .col { + position: absolute; + top: 0; + right: 0; + width: 80rpx; + color: #666; + font-size: 20rpx; + padding-left: 20rpx; + text-align: center; +} + +.tit-wrap .col image { + display: block; + margin: auto; + width: 40rpx; + height: 40rpx; +} + +.tit-wrap .col::after { + content: ""; + display: block; + width: 1px; + height: auto; + background: #f1f1f1; + position: absolute; + top: 0; + bottom: 5px; + left: 0; +} + +.sales-p { + background: #fff; + line-height: 40rpx; + color: #999; + font-size: 24rpx; + margin-top: 6rpx; + margin-right: 104rpx; +} + +.prod-price { + font-size: 30rpx; + height: 100rpx; + line-height: 100rpx; +} + +.price { + color: #eb2444; + font-size: 24rpx; + font-weight: 600; + margin-right: 50rpx; +} + +.price-num { + font-size: 46rpx; + font-weight: 400; +} + +.sales { + color: #999; +} + +.share-icon { + position: absolute; + right: 50rpx; + top: 50rpx; + background: none; + line-height: 40rpx; + border: none; + outline: none; + box-shadow: 0; + padding: 0; +} + +.share-icon::after { + border: none; +} + +.share-icon image { + width: 60rpx; + height: 60rpx; +} + +.share-text { + font-size: 26rpx; + color: #999; + line-height: 30rpx; +} + +/** end 商品信息 */ + +/**优惠券*/ + +.coupon { + padding: 28rpx 100rpx 14rpx 100rpx; + background: #fff; + position: relative; + margin-top: 20rpx; +} + +.coupon .coupon-tit { + position: absolute; + display: inline-block; + width: 60rpx; + left: 20rpx; + font-size: 22rpx; + top: 28rpx; + line-height: 36rpx; + color: #999; +} + +.coupon-con .item { + position: relative; + display: inline-block; + vertical-align: top; + padding: 0 18rpx; + background: #eb2444; + height: 36rpx; + line-height: 36rpx; + color: #fff; + font-size: 22rpx; + margin: 0 16rpx 16rpx 0; + font-family: arial; +} + +.coupon-con .item:before, .coupon-con .item:after { + content: ""; + display: block; + width: 0; + height: 0; + position: absolute; + top: 0; + border: 18rpx solid transparent; +} + +.coupon-con .item:before { + left: 0; + border-left: 4rpx solid #fff; +} + +.coupon-con .item:after { + right: 0; + border-right: 4rpx solid #fff; +} + +.coupon .num { + position: absolute; + right: 80rpx; + width: 80rpx; + top: 28rpx; + text-align: right; + font-size: 24rpx; + color: #999; + line-height: 36rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-family: arial; +} + +.more { + position: absolute; + right: 20rpx; + width: 60rpx; + top: 10rpx; + text-align: right; + font-size: 40rpx; + color: #999; + letter-spacing: 1px; +} + +/* 已选 */ + +.sku { + padding: 20rpx; + background: #fff; + margin-top: 20rpx; + position: relative; + line-height: 48rpx; +} + +.sku-tit { + position: absolute; + display: inline-block; + width: 60rpx; + left: 20rpx; + font-size: 22rpx; + top: 20rpx; + color: #999; +} + +.sku-con { + margin: 0 80rpx; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-size: 28rpx; + font-weight: bold; +} + +/** 评价*/ + +.cmt-wrap { + background: #fff; + margin-top: 20rpx; + position: relative; + line-height: 48rpx; +} + +.cmt-tit { + font-size: 32rpx; + position: relative; + border-bottom: 1px solid #ddd; + padding: 20rpx; +} + +.cmt-t { + width: 300rpx; +} + +.cmt-good { + color: #eb2444; + font-size: 24rpx; +} + +.cmt-count { + position: absolute; + right: 20rpx; + top: 20rpx; + font-size: 24rpx; + color: #666; +} + +.cmt-more { + width: 20rpx; + height: 20rpx; + border-top: 2rpx solid #999; + border-right: 2rpx solid #999; + transform: rotate(45deg); + margin-left: 10rpx; + display: inline-block; +} + +.cmt-cont { + padding: 0 20rpx; +} + +.cmt-tag { + position: relative; + padding: 14px 3px 0 0; + margin: 0; +} + +.cmt-tag text { + margin: 0 10px 10px 0; + background: #fdf0f0; + display: inline-block; + padding: 0 10px; + height: 25px; + border-radius: 3px; + line-height: 25px; + font-size: 12px; + font-family: -apple-system, Helvetica, sans-serif; + color: #666; +} + +.cmt-tag text.selected { + color: #fff; + background: #e93b3d; +} + +.cmt-item { + position: relative; + padding: 10px 0; +} + +.cmt-item::after { + content: ""; + height: 0; + display: block; + border-bottom: 1px solid #ddd; + position: absolute; + left: 0; + right: 0; + bottom: 0; + right: -10px; + border-bottom-color: #e5e5e5; +} + +.cmt-user { + line-height: 25px; + margin-bottom: 8px; + font-size: 12px; +} + +.cmt-user-info { + display: flex; + align-items: center; + width: 400rpx; +} + +.cmt-user .user-img { + width: 25px; + height: 25px; + border-radius: 50%; + vertical-align: middle; +} + +.cmt-user .nickname { + margin-left: 10px; + display: inline-block; + color: #333; + max-width: 8.2em; + height: 25px; + line-height: 27px; +} + +.cmt-user .stars { + display: flex; + margin-left: 3px; +} + +.cmt-user .stars image { + width: 35rpx; + height: 35rpx; +} + +.cmt-user .date { + float: right; + color: #999; + margin-left: -60px; +} + +.cmt-cnt { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + position: relative; + line-height: 1.5; + font-size: 14px; + margin: 5px 0; + word-break: break-all; + max-height: 126px; +} + +.cmt-attr { + height: 85px; + width: 100%; + white-space: nowrap; +} + +.cmt-attr .img-wrap { + width: 85px; + height: 85px; + display: inline-block; +} + +.cmt-attr image { + display: inline-block; + width: 80px; + height: 80px; + margin-right: 5px; + margin-bottom: 5px; + border-radius: 2px; + background: #f3f3f3; +} + +.cmt-more-v { + text-align: center; + background-color: #fff; + font-size: 12px; +} + +.cmt-more-v text { + height: 25px; + line-height: 25px; + font-size: 12px; + text-align: center; + color: #333; + padding: 0px 10px; + margin: 10px 0; + border: 1px solid #ccc; + border-radius: 40px; + display: inline-block; +} + +/** 评价弹窗 */ + +.cmt-popup { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 998; + background-color: #fff; + padding-bottom: 98rpx; +} + +.cmt-popup .cmt-cont { + height: calc(100% - 80rpx); + overflow: auto; +} + +.cmt-popup .cmt-cnt { + -webkit-line-clamp: 20; + max-height: 500px; +} + +.cmt-reply { + font-size: 14px; + border-top: 1px dashed #ddd; + padding: 5px 0; +} + +.cmt-reply .reply-tit { + color: #eb2444; +} + +.cmt-popup .load-more { + font-size: 14px; + padding: 20px; + text-align: center; + margin-bottom: 10px; +} + +.cmt-popup .load-more text { + border: 1px solid #ddd; + padding: 5px 10px; + border-radius: 10px; + color: #666; +} + +/** 商品详情 */ + +.prod-detail { + background: #fff; + margin-top: 20rpx; + position: relative; + line-height: 48rpx; +} + +.det-tit { + width: 300rpx; +} + +.detail-tit { + font-size: 32rpx; + position: relative; + border-bottom: 1px solid #ddd; + padding: 20rpx; +} + +.prod-detail image { + width: 750rpx !important; + display: block; +} + +rich-text image { + width: 100% !important; +} + +img { + width: 100% !important; + display: block; +} + +/** end 商品详情 */ + +/** 底部按钮 */ + +.cart-footer { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + display: flex; + flex-direction: row nowrap; + height: 98rpx; + z-index: 999; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); +} + +.cart-footer .btn { + position: relative; + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; + width: 0; + background-color: #fff; + font-size: 28rpx; + flex-flow: column; +} + +.cart-footer .btn.icon { + flex-grow: 0; + flex-shrink: 0; + width: 125rpx; + font-size: 20rpx; + color: #666; +} + +.cart-footer .btn.icon image { + width: 50rpx; + height: 50rpx; +} + +.cart-footer .btn.cart { + background: #584e61; + color: #fff; +} + +.cart-footer .btn.buy { + background: #eb2444; + color: #fff; +} + +.cart-footer .btn .badge { + position: absolute; + top: 20rpx; + left: 62rpx; + display: inline-block; + width: 28rpx; + height: 28rpx; + border-radius: 14rpx; + background-color: #eb2444; + text-align: center; + line-height: 28rpx; + font-size: 18rpx; + color: #fff; +} + +.cart-footer .btn .badge-1 { + width: 36rpx; +} + +.cart-footer .btn .badge-2 { + width: 48rpx; + left: 52rpx; +} + +/** end 底部按钮 */ + +/** 优惠券弹窗 **/ + +.popup-hide { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 999; + background-color: rgba(0, 0, 0, 0.3); +} + +.popup-box { + position: absolute; + bottom: 0; + width: 100%; + min-height: 375px; + max-height: 475px; + overflow: hidden; + background-color: #fff; +} + +.popup-tit { + position: relative; + height: 46px; + line-height: 46px; + padding-left: 10px; + font-size: 16px; + color: #333; + background-color: #f7f7f7; +} + +.close { + color: #aaa; + border-radius: 12px; + line-height: 20px; + text-align: center; + height: 20px; + width: 20px; + font-size: 18px; + padding: 1px; + top: 10px; + right: 10px; + position: absolute; +} + +.close::before { + content: "\2716"; +} + +.popup-cnt { + max-height: 429px; + overflow: auto; + padding: 0 10px; +} + +/** 规格弹窗**/ + +.pup-sku { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 999; + background-color: rgba(0, 0, 0, 0.3); +} + +.pup-sku-main { + position: absolute; + bottom: 0; + width: 100%; + min-height: 375px; + max-height: 475px; + background-color: #fff; +} + +.pup-sku-header { + position: relative; + line-height: 46px; + padding-left: 10px; + font-size: 16px; + color: #333; + height: 70px; + padding: 0 0 10px 110px; + background-color: #fff; +} + +.pup-sku-img { + position: absolute; + left: 10px; + top: -20px; + border-radius: 2px; + width: 90px; + height: 90px; + border: 0 none; + vertical-align: top; +} + +.pup-sku-price { + display: inline-block; + height: 40px; + line-height: 40px; + color: #e4393c; + font-size: 10px; +} + +.pup-sku-price-int { + font-size: 16px; +} + +.pup-sku-prop { + word-break: break-all; + font-size: 12px; + color: #333; + line-height: 1.4em; + padding-right: 10px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.pup-sku-prop text { + color: #999; + margin-right: 5px; +} + +.pup-sku-body { + box-sizing: border-box; + max-height: 379px; + padding-bottom: 100px; + overflow: auto; +} + +.pup-sku-area .sku-kind { + font-size: 12px; + color: #999; + margin: 0 10px; + height: 40px; + line-height: 40px; +} + +.pup-sku-area .sku-choose { + overflow: hidden; + margin-bottom: 3px; +} + +.sku-choose-item { + display: inline-block; + padding: 0 10px; + min-width: 20px; + max-width: 270px; + overflow: hidden; + height: 30px; + line-height: 30px; + text-align: center; + margin-left: 10px; + margin-bottom: 10px; + border-radius: 4px; + color: #333; + background-color: #f7f7f7; + font-size: 14px; +} + +.sku-choose-item.active { + background-color: #eb2444; + color: #fff; +} + +.sku-choose-item.gray { + background-color: #f9f9f9; + color: #ddd; +} + +.pup-sku-count { + padding: 0 10px 13px; + font-size: 12px; +} + +.pup-sku-count .count-name { + color: #999; + height: 31px; + line-height: 31px; + width: 100rpx; +} + +.pup-sku-count .num-wrap { + position: relative; + z-index: 0; + width: 110px; + float: right; + vertical-align: middle; + display: flex; +} + +.num-wrap .minus, .num-wrap .plus { + position: relative; + max-width: 30px; + min-width: 30px; + height: 30px; + line-height: 30px; + background: #f7f7f7; + text-align: center; +} + +.num-wrap .minus { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} + +.num-wrap .plus { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.num-wrap .row { + border-radius: 20px; + position: absolute; + top: 50%; + left: 50%; + margin-left: -7px; + margin-top: -1px; + width: 14px; + height: 2px; + background-color: #ccc; +} + +.num-wrap .col { + border-radius: 20px; + position: absolute; + top: 50%; + left: 50%; + margin-left: -1px; + margin-top: -7px; + width: 2px; + height: 14px; + background-color: #999; +} + +.pup-sku-count .text-wrap { + position: relative; + width: 45px; + z-index: 0; + margin: 0 1px; +} + +.pup-sku-count .text-wrap input { + height: 30px; + width: 100%; + color: #333; + background: #fff; + font-size: 12px; + text-align: center; + border: none; + background: #f7f7f7; +} + +.pup-sku-footer { + position: fixed; + bottom: 0; + left: 0; + width: 100%; + display: flex; + flex-direction: row nowrap; + height: 98rpx; + z-index: 999; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); +} + +.pup-sku-footer .btn { + position: relative; + display: flex; + flex-grow: 1; + justify-content: center; + align-items: center; + width: 0; + background-color: #fff; + font-size: 28rpx; + flex-flow: column; +} + +.pup-sku-footer .btn.cart { + background: #584e61; + color: #fff; +} + +.pup-sku-footer .btn.buy { + background: #eb2444; + color: #fff; +} diff --git a/mall4uni/pages/prod/prod.vue b/mall4uni/pages/prod/prod.vue new file mode 100644 index 0000000..bf9dd7f --- /dev/null +++ b/mall4uni/pages/prod/prod.vue @@ -0,0 +1,805 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/recent-news/recent-news.css b/mall4uni/pages/recent-news/recent-news.css new file mode 100644 index 0000000..8d64e29 --- /dev/null +++ b/mall4uni/pages/recent-news/recent-news.css @@ -0,0 +1,33 @@ +/* pages/recent-news/recent-news.wxss */ + +.recent-news { + background: #fff; +} + +.recent-news .news-item { + padding: 20rpx 20rpx 0 20rpx; + position: relative; +} + +.recent-news .news-item::after { + content: " "; + width: 100%; + height: 2rpx; + background-color: #e1e1e1; + left: 20rpx; + display: block; + position: absolute; +} + +.recent-news .news-item .news-item-title { + font-size: 28rpx; + text-align: left; +} + +.recent-news .news-item .news-item-date { + font-size: 24rpx; + color: #999; + text-align: right; + margin-top: 10rpx; + margin-bottom: 20rpx; +} diff --git a/mall4uni/pages/recent-news/recent-news.vue b/mall4uni/pages/recent-news/recent-news.vue new file mode 100644 index 0000000..b4517cb --- /dev/null +++ b/mall4uni/pages/recent-news/recent-news.vue @@ -0,0 +1,101 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/register/register.css b/mall4uni/pages/register/register.css new file mode 100644 index 0000000..677a586 --- /dev/null +++ b/mall4uni/pages/register/register.css @@ -0,0 +1,235 @@ +page{ + background: #fff; + height: 100%; +} +.con{ + margin-top: 50px; +} +image { + display: block; + width: 150rpx; + height: 150rpx; + margin: auto; + border-radius: 50%; + margin-bottom: 8%; +} +.login-form{ + width: 90%; + margin: 0 auto; + margin-bottom: 20%; +} +.authorized-btn { + width: 90%; + margin: 0 auto; + text-align: center; + background-color: #0ab906; + border: 1rpx solid #0ab906; + color: #fff; + border-radius: 6rpx; + font-size: 26rpx; + padding: 8rpx; + margin-top: 80rpx; +} +.to-idx-btn{ + width: 90%; + margin: 0 auto; + text-align: center; + background-color: #eeeeee; + color: #333; + border-radius: 6rpx; + font-size: 26rpx; + padding: 8rpx; + margin-top: 30rpx; +} +.form-title { + width: 100%; + margin-bottom: 50rpx; + font-size: 32rpx; + text-align: center; + color: #00a0e9; +} +.item { + display: block; + margin-bottom: 30rpx; +} +.account{ + display: flex; + background: #f8f8f8; + padding: 15rpx; + box-sizing: border-box; + font-size: 26rpx; + align-items: center; +} +.account input{ + padding-left: 20rpx; + width:75%; +} +.inp-palcehoder{ + font-size: 26rpx; +} +.account input.int-yzm { + width: 410rpx; + padding-right: 10rpx; + box-sizing: border-box; +} +.input-btn { + width: 152rpx; + font-size: 26rpx; + color: #00a0ea; + text-align: center; +} + +button::after{ + border: 0 !important; +} + +/* 找回密码&去注册 */ +.operate { + display: flex; + justify-content: space-between; + align-items: center; +} +.forgot-password, +.to-register { + font-size: 28rpx; + color: #00AAFF; +} + +/* 错误提示 */ +.error .error-text { + display: block; + width: 100%; + font-size: 28rpx; + color: #e43130; + text-align: left; + margin-top: 10rpx; +} +.error .error-text .warning-icon { + display: inline-block;; + color: #fff; + width: 26rpx; + height: 26rpx; + line-height: 26rpx; + background: #e43130; + border-radius: 50%; + text-align: center; + margin-right: 12rpx; + font-size: 22rpx; +}page{ + background: #fff; + height: 100%; +} +.con{ + margin-top: 50px; +} +image { + display: block; + width: 150rpx; + height: 150rpx; + margin: auto; + border-radius: 50%; + margin-bottom: 8%; +} +.login-form{ + width: 90%; + margin: 0 auto; + margin-bottom: 20%; +} +.authorized-btn { + width: 90%; + margin: 0 auto; + text-align: center; + background-color: #0ab906; + border: 1rpx solid #0ab906; + color: #fff; + border-radius: 6rpx; + font-size: 26rpx; + padding: 8rpx; + margin-top: 80rpx; +} +.to-idx-btn{ + width: 90%; + margin: 0 auto; + text-align: center; + background-color: #eeeeee; + color: #333; + border-radius: 6rpx; + font-size: 26rpx; + padding: 8rpx; + margin-top: 30rpx; +} +.form-title { + width: 100%; + margin-bottom: 50rpx; + font-size: 32rpx; + text-align: center; + color: #00a0e9; +} +.item { + display: block; + margin-bottom: 30rpx; +} +.account{ + display: flex; + background: #f8f8f8; + padding: 15rpx; + box-sizing: border-box; + font-size: 26rpx; + align-items: center; +} +.account input{ + padding-left: 20rpx; + width:75%; +} +.inp-palcehoder{ + font-size: 26rpx; +} +.account input.int-yzm { + width: 410rpx; + padding-right: 10rpx; + box-sizing: border-box; +} +.input-btn { + width: 152rpx; + font-size: 26rpx; + color: #00a0ea; + text-align: center; +} + +button::after{ + border: 0 !important; +} + +/* 找回密码&去注册 */ +.operate { + display: flex; + justify-content: space-between; + align-items: center; +} +.forgot-password, +.to-register { + font-size: 28rpx; + color: #00AAFF; +} + +/* 错误提示 */ +.error .error-text { + display: block; + width: 100%; + font-size: 28rpx; + color: #e43130; + text-align: left; + margin-top: 10rpx; +} +.error .error-text .warning-icon { + display: inline-block;; + color: #fff; + width: 26rpx; + height: 26rpx; + line-height: 26rpx; + background: #e43130; + border-radius: 50%; + text-align: center; + margin-right: 12rpx; + font-size: 22rpx; +} \ No newline at end of file diff --git a/mall4uni/pages/register/register.vue b/mall4uni/pages/register/register.vue new file mode 100644 index 0000000..3d62f62 --- /dev/null +++ b/mall4uni/pages/register/register.vue @@ -0,0 +1,192 @@ + + + + diff --git a/mall4uni/pages/search-page/search-page.css b/mall4uni/pages/search-page/search-page.css new file mode 100644 index 0000000..ebd9b71 --- /dev/null +++ b/mall4uni/pages/search-page/search-page.css @@ -0,0 +1,125 @@ +/* pages/search-page/search-page.wxss */ + +/* 搜索栏 */ + +.search-bar { + width: 100%; + position: fixed; + top: 0; + left: 0; + color: #777; + background: #fff; + box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.07); + z-index: 3; +} + +.search-bar .search-box { + position: relative; + height: 60rpx; + background: #f7f7f7; + z-index: 999; + width: 80%; + margin-left: 70rpx; + border-radius: 50rpx; + margin: 20rpx 0 20rpx 20rpx; +} + +.sear-input { + height: 60rpx; + border-radius: 50rpx; + border: 0; + margin: 0 30rpx 0 64rpx; + line-height: 48rpx; + vertical-align: top; + background: #f7f7f7; + font-size: 28rpx; +} + +.search-bar .search-hint { + font-size: 28rpx; + position: absolute; + right: 30rpx; + top: 31rpx; + color: #eb2444; +} + +.search-bar .search-box .search-img { + width: 32rpx; + height: 32rpx; + position: absolute; + left: 20rpx; + top: 14rpx; + display: block; +} + +/* 热门搜索&搜索历史 */ + +.search-display { + background: #fff; + padding: 20rpx; + margin-top: 100rpx; +} + +.search-display .title-text { + padding: 30rpx 0; + font-size: 30rpx; + color: #666; +} + +.hot-search .hot-search-tags { + overflow: hidden; + font-size: 26rpx; + text-align: center; + padding-bottom: 30rpx; +} + +.hot-search .hot-search-tags .tags { + display: block; + max-width: 100%; + overflow: hidden; + float: left; + border-radius: 50rpx; + white-space: nowrap; + text-overflow: ellipsis; + background-color: #f2f2f2; + box-sizing: border-box; + margin-right: 20rpx; + margin-bottom: 20rpx; + padding: 10rpx 30rpx; +} + +/* 搜索历史 */ + +.history-search .title-text.history-line { + position: relative; + border-top: 2rpx solid #e1e1e1; +} + +.history-search .his-search-tags { + overflow: hidden; + font-size: 26rpx; + text-align: center; + display: inline-block; +} + +.history-search .his-search-tags .tags { + max-width: 300rpx; + overflow: hidden; + float: left; + border-radius: 50rpx; + white-space: nowrap; + text-overflow: ellipsis; + background-color: #f2f2f2; + box-sizing: border-box; + margin-right: 20rpx; + margin-bottom: 20rpx; + padding: 10rpx 30rpx; +} + +.clear-history image { + width: 32rpx; + height: 32rpx; + position: absolute; + right: 10rpx; + top: 30rpx; +} diff --git a/mall4uni/pages/search-page/search-page.vue b/mall4uni/pages/search-page/search-page.vue new file mode 100644 index 0000000..97b7945 --- /dev/null +++ b/mall4uni/pages/search-page/search-page.vue @@ -0,0 +1,185 @@ + + + + \ No newline at end of file diff --git a/mall4uni/pages/search-prod-show/search-prod-show.css b/mall4uni/pages/search-prod-show/search-prod-show.css new file mode 100644 index 0000000..5ba7cd1 --- /dev/null +++ b/mall4uni/pages/search-prod-show/search-prod-show.css @@ -0,0 +1,199 @@ +/* pages/search-prod-show/search-prod-show.wxss */ + +page { + background: #f4f4f4; +} + +/* 搜索栏 */ + +.fixed-box { + position: fixed; + width: 100%; + top: 0; + z-index: 999; + background: #fff; +} + +.search-bar { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + color: #777; + background: #fff; + z-index: 3; + padding: 0 30rpx; + box-sizing: border-box; +} + +.search-bar .search-box { + position: relative; + height: 60rpx; + background: #f7f7f7; + z-index: 999; + width: 80%; + border-radius: 50rpx; + margin-right: 30rpx; + flex: 1; +} + +.sear-input { + height: 60rpx; + border-radius: 50rpx; + border: 0; + margin: 0 30rpx 0 64rpx; + line-height: 48rpx; + vertical-align: top; + background: #f7f7f7; + font-size: 28rpx; +} + +.search-bar .search-hint { + font-size: 28rpx; + position: absolute; + right: 30rpx; + top: 31rpx; + color: #eb2444; +} + +.search-bar .search-box .search-img { + width: 32rpx; + height: 32rpx; + position: absolute; + left: 20rpx; + top: 14rpx; + display: block; +} + +.search-bar .search-list-img { + width: 40rpx; + height: 40rpx; + font-size: 0; +} + +.search-bar .search-list-img image { + width: 100%; + height: 100%; +} + +.fixed-box .tabs { + width: 100%; + height: 80rpx; + line-height: 80rpx; + padding: 10rpx 0; + z-index: 999; + background: #fff; +} + +.fixed-box .tabs::after { + content: ''; + background-color: #e1e1e1; + left: 0; + height: 1px; + transform-origin: 50% 100% 0; + bottom: 0; + position: absolute; + display: block; + width: 100%; +} + +.fixed-box .tabs .tab-item { + display: inline-block; + width: 33.33%; + text-align: center; + font-size: 28rpx; +} + +.fixed-box .tabs .tab-item.on { + color: #eb2444; +} + +/* 横向列表 */ + +.prod-show { + background: #fff; + margin-top: 160rpx; +} + +.prod-show .prod-items { + width: 375rpx; + float: left; + background: #fff; + padding-bottom: 20rpx; + box-sizing: border-box; +} + +/* 纵向列表 */ + +.prod-list .cont-item { + padding: 0 20rpx 20rpx 20rpx; + margin-top: 180rpx; +} + +.prod-list .cont-item .show-item .more-prod-pic { + text-align: center; + width: 170rpx; + height: 170rpx; + font-size: 0; +} + +.prod-list .cont-item .show-item .more-prod-pic .more-pic { + width: 100%; + height: 100%; + vertical-align: middle; +} + +.prod-list .cont-item .show-item { + position: relative; + display: flex; + justify-content: start; + padding: 20rpx; + border-radius: 20rpx; + background: #fff; + margin-bottom: 20rpx; + box-shadow: 0 16rpx 32rpx 0 rgba(7, 17, 27, 0.05); +} + +.prod-list .cont-item .show-item .prod-text-right { + margin-left: 20rpx; + width: 75%; +} + +.prod-list .cont-item .show-item .prod-text-right .cate-prod-info { + font-size: 22rpx; + color: #999; + margin: 10rpx 0 20rpx 0; +} + +.prod-list .cont-item .show-item .prod-text-right .go-to-buy { + font-size: 26rpx; + background: #eb2444; + color: #fff; + border-radius: 50rpx; + width: 150rpx; + text-align: center; + padding: 8rpx 3rpx; + position: absolute; + right: 20rpx; + bottom: 20rpx; +} + +.prod-list .cont-item .show-item .prod-text-right .prod-text.more { + margin: 0; + height: 78rpx; + font-size: 28rpx; + display: -webkit-box; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + color: #000; +} + +.prod-list .cont-item .show-item .prod-text-right .prod-price.more { + font-size: 28rpx; + color: #eb2444; + font-family: arial; +} diff --git a/mall4uni/pages/search-prod-show/search-prod-show.vue b/mall4uni/pages/search-prod-show/search-prod-show.vue new file mode 100644 index 0000000..36ebbea --- /dev/null +++ b/mall4uni/pages/search-prod-show/search-prod-show.vue @@ -0,0 +1,193 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/submit-order/submit-order.css b/mall4uni/pages/submit-order/submit-order.css new file mode 100644 index 0000000..e1d795f --- /dev/null +++ b/mall4uni/pages/submit-order/submit-order.css @@ -0,0 +1,502 @@ +/* pages/submit-order/submit-order.wxss */ + +page { + background: #f4f4f4; +} + +/* 收货地址 */ + +.submit-order { + margin-bottom: 100rpx; +} + +.submit-order .delivery-addr { + position: relative; + background: #fff; +} + +.delivery-addr .addr-bg .add-addr .plus-sign { + color: #eb2444; + border: 2rpx solid #eb2444; + padding: 0rpx 6rpx; + margin-right: 10rpx; +} + +.delivery-addr .addr-bg { + padding: 0 30rpx; +} + +.delivery-addr .addr-bg.whole { + padding: 0 39rpx 0 77rpx; +} + +.delivery-addr .addr-bg .add-addr { + font-size: 28rpx; + color: #666; + display: flex; + align-items: center; + padding: 30rpx 0; +} + +.submit-order .delivery-addr .addr-icon { + width: 32rpx; + height: 32rpx; + display: block; + position: absolute; + left: 30rpx; + top: 24rpx; +} + +.submit-order .delivery-addr .addr-icon image { + width: 100%; + height: 100%; +} + +.submit-order .delivery-addr .user-info { + padding-top: 20rpx; + line-height: 48rpx; + word-wrap: break-word; + word-break: break-all; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; +} + +.submit-order .delivery-addr .user-info .item { + font-size: 30rpx; + margin-right: 30rpx; + vertical-align: top; + display: inline-block; +} + +.submit-order .delivery-addr .addr { + font-size: 26rpx; + line-height: 36rpx; + color: #999; + width: 90%; + padding-bottom: 20rpx; + margin-top: 15rpx; +} + +.submit-order .delivery-addr .arrow { + width: 15rpx; + height: 15rpx; + border-top: 2rpx solid #777; + border-right: 2rpx solid #777; + transform: rotate(45deg); + position: absolute; + right: 30rpx; + top: 60rpx; +} + +.submit-order .delivery-addr .arrow.empty { + top: 39rpx; +} + +.addr-bg .add-addr .plus-sign-img { + width: 32rpx; + height: 32rpx; + font-size: 0; + margin-right: 10rpx; +} + +.addr-bg .add-addr .plus-sign-img image { + width: 100%; + height: 100%; +} + +/* 商品列表 */ + +.prod-item { + background-color: #fff; + margin-top: 15rpx; + font-size: 28rpx; +} + +.prod-item .item-cont .prod-pic image { + width: 180rpx; + height: 180rpx; +} + +.prod-item .order-num { + padding: 20rpx 30rpx; + display: flex; + justify-content: space-between; + font-size: 28rpx; +} + +.order-state { + display: flex; + align-items: center; +} + +.prod-item .item-cont { + display: flex; + align-items: center; + padding: 30rpx; + border-bottom: 2rpx solid #f1f1f1; +} + +.prod-item .order-num .clear-btn { + width: 32rpx; + height: 32rpx; + font-size: 0; + vertical-align: top; + margin-top: 6rpx; + margin-left: 42rpx; + position: relative; +} + +.prod-item .order-num .clear-btn::after { + content: " "; + display: block; + position: absolute; + left: -10px; + top: 1px; + width: 1px; + height: 12px; + background: #ddd; +} + +.prod-item .order-num .clear-btn .clear-list-btn { + width: 100%; + height: 100%; + vertical-align: middle; +} + +.prod-item .item-cont .prod-pic { + font-size: 0; + display: block; + width: 160rpx; + height: 160rpx; + overflow: hidden; + background: #fff; + margin-right: 16rpx; +} + +.prod-item .item-cont .prod-pic image { + width: 100%; + height: 100%; +} + +.prod-item .item-cont .prod-info { + margin-left: 10rpx; + font-size: 28rpx; + width: 100%; + position: relative; + height: 160rpx; + -webkit-flex: 1; + -ms-flex: 1; + -webkit-box-flex: 1; + -moz-box-flex: 1; + flex: 1; +} + +.prod-item .item-cont .prod-info .prodname { + font-size: 28rpx; + line-height: 40rpx; + max-height: 86rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +.prod-item .item-cont .prod-info .prod-info-cont { + color: #999; + line-height: 40rpx; + margin-top: 10rpx; + font-size: 22rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +.prod-item .total-num { + text-align: right; + padding: 20rpx 30rpx; + font-size: 28rpx; +} + +.prod-item .price-nums .prodprice { + position: absolute; + bottom: 0; +} + +.prod-item .price-nums .prodcount { + position: absolute; + bottom: 5rpx; + right: 0; + color: #999; + font-family: verdana; +} + +.prod-item .total-num .prodprice { + display: inline-block; + color: #333; +} + +.prod-item .total-num .prodcount { + margin-right: 20rpx; +} + +/* +订单信息 */ + +.order-msg { + background: #fff; + margin-top: 15rpx; + padding: 0 30rpx; + font-size: 28rpx; +} + +.order-msg .msg-item { + border-top: 2rpx solid #f1f1f1; +} + +.order-msg .msg-item:first-child { + border: 0; +} + +.order-msg .msg-item .item { + position: relative; + display: flex; + padding: 16rpx 0; + align-items: center; +} + +.order-msg .msg-item .item.payment { + border-top: 2rpx solid #f1f1f1; + color: #eb2444; +} + +.order-msg .msg-item .item .item-tit { + line-height: 48rpx; +} + +.order-msg .msg-item .item .item-txt { + -webkit-box-flex: 1; + -moz-box-flex: 1; + flex: 1; + font-family: arial; + max-height: 48rpx; + overflow: hidden; + line-height: 48rpx; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +.order-msg .msg-item .item.coupon { + border-bottom: 2rpx solid #e1e1e1; +} + +.order-msg .msg-item .item input { + flex: 1; +} + +.order-msg .msg-item .item .coupon-btn { + display: block; + margin: 0 30rpx; + line-height: 28rpx; + color: #999; +} + +.order-msg .msg-item .item .item-txt.price { + text-align: right; +} + +.order-msg .msg-item .item .arrow { + width: 15rpx; + height: 15rpx; + border-top: 2rpx solid #999; + border-right: 2rpx solid #999; + transform: rotate(45deg); + position: absolute; + right: 0rpx; +} + +/* 底部栏 */ + +.submit-order-footer { + position: fixed; + bottom: 0; + width: 100%; + max-width: 750rpx; + background: #fff; + margin: auto; + display: -webkit-flex; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: flex; + font-size: 26rpx; + box-shadow: 0 -1px 3px rgba(0, 0, 0, 0.05); +} + +.submit-order-footer .sub-order { + flex: 1; + margin: 0 30rpx; + line-height: 100rpx; + display: block; + text-align: left; + font-size: 28rpx; +} + +.submit-order-footer .footer-box { + padding: 0 10rpx; + width: 200rpx; + background: #eb2444; + text-align: center; + line-height: 100rpx; + color: #fff; +} + +.submit-order-footer .sub-order .item-txt .price { + display: inline; + color: #eb2444; + font-size: 28rpx; +} + +.clearfix:after { + content: " "; + display: table; + clear: both; +} + +/** 优惠券弹窗 **/ + +.popup-hide { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 999; + background-color: rgba(0, 0, 0, 0.3); +} + +.popup-box { + position: absolute; + bottom: 0; + width: 100%; + height: 80%; + overflow: hidden; + background-color: #fff; +} + +.popup-tit { + position: relative; + height: 46px; + line-height: 46px; + padding-left: 10px; + font-size: 16px; + color: #333; + font-weight: bold; +} + +.close { + color: #aaa; + border-radius: 12px; + line-height: 20px; + text-align: center; + height: 20px; + width: 20px; + font-size: 18px; + padding: 1px; + top: 10px; + right: 10px; + position: absolute; +} + +.close::before { + content: "\2716"; +} + +.coupon-tabs { + display: flex; + font-size: 14px; + justify-content: space-around; + border-bottom: 1px solid #f2f2f2; +} + +.coupon-tab { + padding: 10px 0; +} + +.coupon-tab.on { + border-bottom: 2px solid #eb2444; + font-weight: 600; +} + +.popup-cnt { + height: calc(100% - 88px); + overflow: auto; + padding: 0 10px; + background: #f4f4f4; +} + +.coupon-ok { + position: fixed; + bottom: 0; + width: 100%; + height: 60px; + line-height: 50px; + font-size: 14px; + text-align: center; + box-shadow: 0px -1px 1px #ddd; + background: rgba(255, 255, 255, 0.9); +} + +.coupon-ok text { + border-radius: 20px; + display: inline-block; + height: 20px; + line-height: 20px; + width: 450rpx; + padding: 7px; + background: -o-linear-gradient(right, #f45c43, #eb2444); + background: linear-gradient(right, #f45c43, #eb2444); + background: -webkit-linear-gradient(right, #f45c43, #eb2444); + color: #fff; + box-shadow: -1px 3px 3px #aaa; +} + +.botm-empty { + height: 60px; +} + +/*checkbox 选项框大小 */ + +checkbox .wx-checkbox-input { + border-radius: 50%; + width: 35rpx; + height: 35rpx; +} + +/*checkbox选中后样式 */ + +checkbox .wx-checkbox-input.wx-checkbox-input-checked { + background: #eb2444; + border-color: #eb2444; +} + +/*checkbox选中后图标样式 */ + +checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + text-align: center; + font-size: 22rpx; + color: #fff; + background: transparent; + transform: translate(-50%, -50%) scale(1); + -webkit-transform: translate(-50%, -50%) scale(1); +} diff --git a/mall4uni/pages/submit-order/submit-order.vue b/mall4uni/pages/submit-order/submit-order.vue new file mode 100644 index 0000000..3f33da7 --- /dev/null +++ b/mall4uni/pages/submit-order/submit-order.vue @@ -0,0 +1,528 @@ + + + + + + \ No newline at end of file diff --git a/mall4uni/pages/user/user.css b/mall4uni/pages/user/user.css new file mode 100644 index 0000000..48374bb --- /dev/null +++ b/mall4uni/pages/user/user.css @@ -0,0 +1,262 @@ +/* pages/user/user.wxss */ + +page { + background-color: #f7f7f7; + padding-bottom: 60rpx; +} + +/* 用户信息 */ +.userinfo { + position: relative; + width: 100%; + background: #fff; + text-align: center; + padding: 30rpx 0; +} +.userinfo .userinfo-con{ + width: 240rpx; + margin: auto; +} +.userinfo .userinfo-con .userinfo-avatar { + overflow: hidden; + display: block; + width: 160rpx; + height: 160rpx; + border-radius: 50%; + box-shadow: 3px 3px 10px rgba(0, 0, 0, 0.2); + margin: auto; +} +.userinfo .userinfo-con .userinfo-avatar image{ + width: 160rpx; + height: 160rpx; +} +.userinfo .userinfo-con .userinfo-name { + font-size: 30rpx; + font-weight: bold; + margin-top: 20rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + text-overflow: ellipsis; + word-break: break-all; +} + +/** 未登录信息 */ +.userinfo-none { + display: flex; + padding: 30rpx; + background: #fff; + align-items: center; +} +.userinfo-none .default-pic{ + padding-right:30rpx; +} +.userinfo-none .default-pic image{ + width:160rpx; + height:160rpx; +} +.none-login button{ + background: #fff; +} +.none-login button::after{ + border:0; +} +.none-login .unlogin{ + font-size:30rpx; +} +.none-login .click-login{ + font-size:26rpx; +} + +.binding-phone { + position: relative; + background: #fff; + height: 80rpx; + line-height: 80rpx; + padding: 0 30rpx; + border-top: 2rpx solid #f7f7f7; + border-bottom: 2rpx solid #f7f7f7; +} + +.binding-phone .show-tip { + font-size: 26rpx; +} + +.binding-phone .gotobinding { + border-radius: 8rpx; + font-size: 28rpx; + color: #e24b4b; + font-weight: bold; +} + +/*end 用户信息 */ + +/* 订单状态 */ + +.list-cont { + + width: 100%; + background: #f7f7f7; + margin-top: 20rpx; +} + +.list-cont .total-order { + /* width: 100%; */ + /* margin-bottom: 30rpx; */ + background: #fff; + +} + +.list-cont .total-order .order-tit { + display: flex; + justify-content: space-between; + height: 80rpx; + line-height: 80rpx; + font-size: 30rpx; + border-bottom:1px solid #f7f7f7; + padding: 0 30rpx; +} + +.list-cont .total-order .order-tit .checkmore { + font-size: 22rpx; + color: #80848f; + display: flex; + align-items: center; +} + +.list-cont .total-order .procedure { + display: flex; + justify-content: space-around; + align-items: center; + font-size: 25rpx; + height: 160rpx; +} + +.list-cont .total-order .procedure .items { + position: relative; + display: flex; + flex-direction: column; + align-items: center; +} + +.list-cont .total-order .procedure .items image { + width: 70rpx; + height: 70rpx; + margin-bottom: 20rpx; +} + +.list-cont .total-order .procedure .items .num-badge { + position: absolute; + top: -15rpx; + right: -12rpx; + color: #eb2444; + border: 3rpx solid #eb2444; + border-radius: 50rpx; + background: #fff; + min-width: 30rpx; + height: 30rpx; + line-height: 30rpx; + text-align: center; + padding: 2rpx; + display: block; +} + +/* end 订单状态 */ + +/* 列表项 */ + +.list-cont .my-menu { + /* width: 100%; */ + background-color: #fff; + margin-top:20rpx; +} + +.list-cont .my-menu .memu-item { + display: flex; + align-items: center; + justify-content: space-between; + height: 100rpx; + border-bottom: 2rpx solid #f7f7f7; + padding:0 30rpx; +} + +.list-cont .my-menu .memu-item:nth-child(1) { + border-top: 2rpx solid #f7f7f7; +} + +.list-cont .my-menu .memu-item:last-child { + border-bottom: none; +} + +.list-cont .my-menu .memu-item text { + font-size: 28rpx; +} +.list-cont .my-menu .memu-item image{ + width:50rpx; + height:50rpx; + margin-right:20rpx; + +} +.list-cont .my-menu .memu-item .i-name{ + display: flex; + align-items: center; +} + +/* end 列表项 */ + +/* 箭头 */ + +.arrowhead { + width: 15rpx; + height: 15rpx; + border-top: 2rpx solid #999; + border-right: 2rpx solid #999; + transform: rotate(45deg); + margin-left: 10rpx; +} + + +/* 商品收藏消息等 */ +.prod-col{ + margin-top:20rpx; + background: #fff; + display: flex; + justify-content: space-around; + padding:30rpx 0 10rpx 0; + font-size: 12px; +} +.prod-col .col-item{ + text-align: center; +} +.prod-col .col-item .num{ + font-size: 16px; + font-weight: 700; + color: #3a86b9; +} + +.prod-col .col-item .tit{ + line-height: 34px; +} + +/* 退出登录 */ +.log-out{ + padding:20rpx; + text-align: center; + margin-top:20rpx; +} +.log-out-n{ + font-size: 30rpx; + margin: auto; + width:200rpx; + padding:20rpx; + border-radius: 10rpx; + background: #e43130; + color:#ffffff; +} +button.memu-btn.memu-item { + background-color: #fff; +} +button.memu-btn.memu-item:after { + border: 0; +} \ No newline at end of file diff --git a/mall4uni/pages/user/user.vue b/mall4uni/pages/user/user.vue new file mode 100644 index 0000000..561a112 --- /dev/null +++ b/mall4uni/pages/user/user.vue @@ -0,0 +1,345 @@ + + + + diff --git a/mall4uni/project.config.json b/mall4uni/project.config.json new file mode 100644 index 0000000..e2326a8 --- /dev/null +++ b/mall4uni/project.config.json @@ -0,0 +1,70 @@ +{ + "description": "项目配置文件", + "packOptions": { + "ignore": [] + }, + "setting": { + "urlCheck": false, + "es6": true, + "enhance": false, + "postcss": true, + "preloadBackgroundData": false, + "minified": true, + "newFeature": true, + "coverView": true, + "nodeModules": false, + "autoAudits": false, + "showShadowRootInWxmlPanel": true, + "scopeDataCheck": false, + "uglifyFileName": false, + "checkInvalidKey": true, + "checkSiteMap": true, + "uploadWithSourceMap": true, + "compileHotReLoad": false, + "useMultiFrameRuntime": true, + "useApiHook": true, + "useApiHostProcess": true, + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "enableEngineNative": false, + "bundle": false, + "useIsolateContext": true, + "useCompilerModule": true, + "userConfirmedUseCompilerModuleSwitch": false, + "userConfirmedBundleSwitch": false, + "packNpmManually": false, + "packNpmRelationList": [], + "minifyWXSS": true + }, + "compileType": "miniprogram", + "libVersion": "2.6.4", + "appid": "wx6fa71e69231a4fa4", + "projectname": "%E4%BA%9A%E7%B1%B3%E7%A7%91%E6%8A%80mall4j", + "debugOptions": { + "hidedInDevtools": [] + }, + "isGameTourist": false, + "simulatorType": "wechat", + "simulatorPluginLibVersion": {}, + "condition": { + "search": { + "list": [] + }, + "conversation": { + "list": [] + }, + "plugin": { + "list": [] + }, + "game": { + "currentL": -1, + "list": [] + }, + "miniprogram": { + "list": [] + } + } +} \ No newline at end of file diff --git a/mall4uni/sitemap.json b/mall4uni/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/mall4uni/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/mall4uni/static/images/icon/addr.png b/mall4uni/static/images/icon/addr.png new file mode 100644 index 0000000..101f325 Binary files /dev/null and b/mall4uni/static/images/icon/addr.png differ diff --git a/mall4uni/static/images/icon/bg1.png b/mall4uni/static/images/icon/bg1.png new file mode 100644 index 0000000..bb679f9 Binary files /dev/null and b/mall4uni/static/images/icon/bg1.png differ diff --git a/mall4uni/static/images/icon/car-new.png b/mall4uni/static/images/icon/car-new.png new file mode 100644 index 0000000..2a25e25 Binary files /dev/null and b/mall4uni/static/images/icon/car-new.png differ diff --git a/mall4uni/static/images/icon/car.png b/mall4uni/static/images/icon/car.png new file mode 100644 index 0000000..6834595 Binary files /dev/null and b/mall4uni/static/images/icon/car.png differ diff --git a/mall4uni/static/images/icon/clear-his.png b/mall4uni/static/images/icon/clear-his.png new file mode 100644 index 0000000..31780e6 Binary files /dev/null and b/mall4uni/static/images/icon/clear-his.png differ diff --git a/mall4uni/static/images/icon/coupon-ot.png b/mall4uni/static/images/icon/coupon-ot.png new file mode 100644 index 0000000..0e1939d Binary files /dev/null and b/mall4uni/static/images/icon/coupon-ot.png differ diff --git a/mall4uni/static/images/icon/coupon-used.png b/mall4uni/static/images/icon/coupon-used.png new file mode 100644 index 0000000..1c70631 Binary files /dev/null and b/mall4uni/static/images/icon/coupon-used.png differ diff --git a/mall4uni/static/images/icon/delive-dot.png b/mall4uni/static/images/icon/delive-dot.png new file mode 100644 index 0000000..0573a75 Binary files /dev/null and b/mall4uni/static/images/icon/delive-dot.png differ diff --git a/mall4uni/static/images/icon/delivery-car.png b/mall4uni/static/images/icon/delivery-car.png new file mode 100644 index 0000000..7fdd500 Binary files /dev/null and b/mall4uni/static/images/icon/delivery-car.png differ diff --git a/mall4uni/static/images/icon/dot.png b/mall4uni/static/images/icon/dot.png new file mode 100644 index 0000000..c092003 Binary files /dev/null and b/mall4uni/static/images/icon/dot.png differ diff --git a/mall4uni/static/images/icon/empty-cash.png b/mall4uni/static/images/icon/empty-cash.png new file mode 100644 index 0000000..860e9ae Binary files /dev/null and b/mall4uni/static/images/icon/empty-cash.png differ diff --git a/mall4uni/static/images/icon/everydaySale.png b/mall4uni/static/images/icon/everydaySale.png new file mode 100644 index 0000000..b0c869c Binary files /dev/null and b/mall4uni/static/images/icon/everydaySale.png differ diff --git a/mall4uni/static/images/icon/getCoupon.png b/mall4uni/static/images/icon/getCoupon.png new file mode 100644 index 0000000..fbe22f5 Binary files /dev/null and b/mall4uni/static/images/icon/getCoupon.png differ diff --git a/mall4uni/static/images/icon/head04.png b/mall4uni/static/images/icon/head04.png new file mode 100644 index 0000000..c64a401 Binary files /dev/null and b/mall4uni/static/images/icon/head04.png differ diff --git a/mall4uni/static/images/icon/horn.png b/mall4uni/static/images/icon/horn.png new file mode 100644 index 0000000..ae9279b Binary files /dev/null and b/mall4uni/static/images/icon/horn.png differ diff --git a/mall4uni/static/images/icon/menu-01.png b/mall4uni/static/images/icon/menu-01.png new file mode 100644 index 0000000..54f7aab Binary files /dev/null and b/mall4uni/static/images/icon/menu-01.png differ diff --git a/mall4uni/static/images/icon/menu-02.png b/mall4uni/static/images/icon/menu-02.png new file mode 100644 index 0000000..450cdd6 Binary files /dev/null and b/mall4uni/static/images/icon/menu-02.png differ diff --git a/mall4uni/static/images/icon/menu-03.png b/mall4uni/static/images/icon/menu-03.png new file mode 100644 index 0000000..fcce049 Binary files /dev/null and b/mall4uni/static/images/icon/menu-03.png differ diff --git a/mall4uni/static/images/icon/menu-04.png b/mall4uni/static/images/icon/menu-04.png new file mode 100644 index 0000000..d3ec6d9 Binary files /dev/null and b/mall4uni/static/images/icon/menu-04.png differ diff --git a/mall4uni/static/images/icon/more.png b/mall4uni/static/images/icon/more.png new file mode 100644 index 0000000..3baecd2 Binary files /dev/null and b/mall4uni/static/images/icon/more.png differ diff --git a/mall4uni/static/images/icon/myAddr.png b/mall4uni/static/images/icon/myAddr.png new file mode 100644 index 0000000..b007c4f Binary files /dev/null and b/mall4uni/static/images/icon/myAddr.png differ diff --git a/mall4uni/static/images/icon/myCoupon.png b/mall4uni/static/images/icon/myCoupon.png new file mode 100644 index 0000000..b45fee7 Binary files /dev/null and b/mall4uni/static/images/icon/myCoupon.png differ diff --git a/mall4uni/static/images/icon/newProd.png b/mall4uni/static/images/icon/newProd.png new file mode 100644 index 0000000..67b4504 Binary files /dev/null and b/mall4uni/static/images/icon/newProd.png differ diff --git a/mall4uni/static/images/icon/neweveryday.png b/mall4uni/static/images/icon/neweveryday.png new file mode 100644 index 0000000..483bd3c Binary files /dev/null and b/mall4uni/static/images/icon/neweveryday.png differ diff --git a/mall4uni/static/images/icon/newprods.png b/mall4uni/static/images/icon/newprods.png new file mode 100644 index 0000000..d885b34 Binary files /dev/null and b/mall4uni/static/images/icon/newprods.png differ diff --git a/mall4uni/static/images/icon/plus-sign.png b/mall4uni/static/images/icon/plus-sign.png new file mode 100644 index 0000000..b1d3915 Binary files /dev/null and b/mall4uni/static/images/icon/plus-sign.png differ diff --git a/mall4uni/static/images/icon/prod-col-red.png b/mall4uni/static/images/icon/prod-col-red.png new file mode 100644 index 0000000..1437407 Binary files /dev/null and b/mall4uni/static/images/icon/prod-col-red.png differ diff --git a/mall4uni/static/images/icon/prod-col.png b/mall4uni/static/images/icon/prod-col.png new file mode 100644 index 0000000..8a03d7e Binary files /dev/null and b/mall4uni/static/images/icon/prod-col.png differ diff --git a/mall4uni/static/images/icon/promotion.png b/mall4uni/static/images/icon/promotion.png new file mode 100644 index 0000000..480652b Binary files /dev/null and b/mall4uni/static/images/icon/promotion.png differ diff --git a/mall4uni/static/images/icon/revise.png b/mall4uni/static/images/icon/revise.png new file mode 100644 index 0000000..f3bb480 Binary files /dev/null and b/mall4uni/static/images/icon/revise.png differ diff --git a/mall4uni/static/images/icon/search-01.png b/mall4uni/static/images/icon/search-01.png new file mode 100644 index 0000000..99eb77a Binary files /dev/null and b/mall4uni/static/images/icon/search-01.png differ diff --git a/mall4uni/static/images/icon/search-col.png b/mall4uni/static/images/icon/search-col.png new file mode 100644 index 0000000..587c2bf Binary files /dev/null and b/mall4uni/static/images/icon/search-col.png differ diff --git a/mall4uni/static/images/icon/search-col2.png b/mall4uni/static/images/icon/search-col2.png new file mode 100644 index 0000000..cdd35fb Binary files /dev/null and b/mall4uni/static/images/icon/search-col2.png differ diff --git a/mall4uni/static/images/icon/search.png b/mall4uni/static/images/icon/search.png new file mode 100644 index 0000000..feac7b9 Binary files /dev/null and b/mall4uni/static/images/icon/search.png differ diff --git a/mall4uni/static/images/icon/star-empty.png b/mall4uni/static/images/icon/star-empty.png new file mode 100644 index 0000000..47889ca Binary files /dev/null and b/mall4uni/static/images/icon/star-empty.png differ diff --git a/mall4uni/static/images/icon/star-red.png b/mall4uni/static/images/icon/star-red.png new file mode 100644 index 0000000..2c3efcd Binary files /dev/null and b/mall4uni/static/images/icon/star-red.png differ diff --git a/mall4uni/static/images/icon/timePrice.png b/mall4uni/static/images/icon/timePrice.png new file mode 100644 index 0000000..6d98d4e Binary files /dev/null and b/mall4uni/static/images/icon/timePrice.png differ diff --git a/mall4uni/static/images/icon/toComment.png b/mall4uni/static/images/icon/toComment.png new file mode 100644 index 0000000..117b507 Binary files /dev/null and b/mall4uni/static/images/icon/toComment.png differ diff --git a/mall4uni/static/images/icon/toDelivery.png b/mall4uni/static/images/icon/toDelivery.png new file mode 100644 index 0000000..5b879a4 Binary files /dev/null and b/mall4uni/static/images/icon/toDelivery.png differ diff --git a/mall4uni/static/images/icon/toPay.png b/mall4uni/static/images/icon/toPay.png new file mode 100644 index 0000000..7eb0499 Binary files /dev/null and b/mall4uni/static/images/icon/toPay.png differ diff --git a/mall4uni/static/images/icon/toTake.png b/mall4uni/static/images/icon/toTake.png new file mode 100644 index 0000000..84255db Binary files /dev/null and b/mall4uni/static/images/icon/toTake.png differ diff --git a/mall4uni/static/images/icon/tuiguang01.png b/mall4uni/static/images/icon/tuiguang01.png new file mode 100644 index 0000000..0b7d086 Binary files /dev/null and b/mall4uni/static/images/icon/tuiguang01.png differ diff --git a/mall4uni/static/images/icon/tuiguang02.png b/mall4uni/static/images/icon/tuiguang02.png new file mode 100644 index 0000000..87aba09 Binary files /dev/null and b/mall4uni/static/images/icon/tuiguang02.png differ diff --git a/mall4uni/static/images/icon/tuiguang03.png b/mall4uni/static/images/icon/tuiguang03.png new file mode 100644 index 0000000..a3832d1 Binary files /dev/null and b/mall4uni/static/images/icon/tuiguang03.png differ diff --git a/mall4uni/static/images/tabbar/basket-sel.png b/mall4uni/static/images/tabbar/basket-sel.png new file mode 100644 index 0000000..da0b48a Binary files /dev/null and b/mall4uni/static/images/tabbar/basket-sel.png differ diff --git a/mall4uni/static/images/tabbar/basket.png b/mall4uni/static/images/tabbar/basket.png new file mode 100644 index 0000000..5e05262 Binary files /dev/null and b/mall4uni/static/images/tabbar/basket.png differ diff --git a/mall4uni/static/images/tabbar/category-sel.png b/mall4uni/static/images/tabbar/category-sel.png new file mode 100644 index 0000000..489b735 Binary files /dev/null and b/mall4uni/static/images/tabbar/category-sel.png differ diff --git a/mall4uni/static/images/tabbar/category.png b/mall4uni/static/images/tabbar/category.png new file mode 100644 index 0000000..937e802 Binary files /dev/null and b/mall4uni/static/images/tabbar/category.png differ diff --git a/mall4uni/static/images/tabbar/homepage-sel.png b/mall4uni/static/images/tabbar/homepage-sel.png new file mode 100644 index 0000000..6b8fc0a Binary files /dev/null and b/mall4uni/static/images/tabbar/homepage-sel.png differ diff --git a/mall4uni/static/images/tabbar/homepage.png b/mall4uni/static/images/tabbar/homepage.png new file mode 100644 index 0000000..622fcfe Binary files /dev/null and b/mall4uni/static/images/tabbar/homepage.png differ diff --git a/mall4uni/static/images/tabbar/user-sel.png b/mall4uni/static/images/tabbar/user-sel.png new file mode 100644 index 0000000..954b222 Binary files /dev/null and b/mall4uni/static/images/tabbar/user-sel.png differ diff --git a/mall4uni/static/images/tabbar/user.png b/mall4uni/static/images/tabbar/user.png new file mode 100644 index 0000000..451d0dc Binary files /dev/null and b/mall4uni/static/images/tabbar/user.png differ diff --git a/mall4uni/static/logo.png b/mall4uni/static/logo.png new file mode 100644 index 0000000..671753e Binary files /dev/null and b/mall4uni/static/logo.png differ diff --git a/mall4uni/static/screenshot/index.jpg b/mall4uni/static/screenshot/index.jpg new file mode 100644 index 0000000..adffb73 Binary files /dev/null and b/mall4uni/static/screenshot/index.jpg differ diff --git a/mall4uni/static/screenshot/my.jpg b/mall4uni/static/screenshot/my.jpg new file mode 100644 index 0000000..5e3eddf Binary files /dev/null and b/mall4uni/static/screenshot/my.jpg differ diff --git a/mall4uni/static/screenshot/prodInfo.jpg b/mall4uni/static/screenshot/prodInfo.jpg new file mode 100644 index 0000000..af79c98 Binary files /dev/null and b/mall4uni/static/screenshot/prodInfo.jpg differ diff --git a/mall4uni/static/screenshot/shopCart.jpg b/mall4uni/static/screenshot/shopCart.jpg new file mode 100644 index 0000000..c920e75 Binary files /dev/null and b/mall4uni/static/screenshot/shopCart.jpg differ diff --git a/mall4uni/static/screenshot/sku.jpg b/mall4uni/static/screenshot/sku.jpg new file mode 100644 index 0000000..b42bea4 Binary files /dev/null and b/mall4uni/static/screenshot/sku.jpg differ diff --git a/mall4uni/utils/big.min.js b/mall4uni/utils/big.min.js new file mode 100644 index 0000000..70381ff --- /dev/null +++ b/mall4uni/utils/big.min.js @@ -0,0 +1,296 @@ +/* big.js v5.2.2 https://github.com/MikeMcl/big.js/LICENCE */ +!function (e) { + "use strict"; + + var r, + i = 20, + s = 1, + P = 1e6, + o = -7, + f = 21, + c = "[big.js] ", + u = c + "Invalid ", + b = u + "decimal places", + h = u + "rounding mode", + x = c + "Division by zero", + l = {}, + D = void 0, + a = /^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i; + + function R(e, r, t, n) { + var i = e.c, + s = e.e + r + 1; + + if (s < i.length) { + if (1 === t) n = 5 <= i[s];else if (2 === t) n = 5 < i[s] || 5 == i[s] && (n || s < 0 || i[s + 1] !== D || 1 & i[s - 1]);else if (3 === t) n = n || !!i[0];else if (n = !1, 0 !== t) throw Error(h); + if (s < 1) i.length = 1, i[0] = n ? (e.e = -r, 1) : e.e = 0;else { + if (i.length = s--, n) for (; 9 < ++i[s];) i[s] = 0, s-- || (++e.e, i.unshift(1)); + + for (s = i.length; !i[--s];) i.pop(); + } + } else if (t < 0 || 3 < t || t !== ~~t) throw Error(h); + + return e; + } + + function t(e, r, t, n) { + var i, + s, + o = e.constructor, + f = !e.c[0]; + + if (t !== D) { + if (t !== ~~t || t < (3 == r) || P < t) throw Error(3 == r ? u + "precision" : b); + + for (t = n - (e = new o(e)).e, e.c.length > ++n && R(e, t, o.RM), 2 == r && (n = e.e + t + 1); e.c.length < n;) e.c.push(0); + } + + if (i = e.e, t = (s = e.c.join("")).length, 2 != r && (1 == r || 3 == r && n <= i || i <= o.NE || i >= o.PE)) s = s.charAt(0) + (1 < t ? "." + s.slice(1) : "") + (i < 0 ? "e" : "e+") + i;else if (i < 0) { + for (; ++i;) s = "0" + s; + + s = "0." + s; + } else if (0 < i) { + if (++i > t) for (i -= t; i--;) s += "0";else i < t && (s = s.slice(0, i) + "." + s.slice(i)); + } else 1 < t && (s = s.charAt(0) + "." + s.slice(1)); + return e.s < 0 && (!f || 4 == r) ? "-" + s : s; + } + + l.abs = function () { + var e = new this.constructor(this); + return e.s = 1, e; + }, l.cmp = function (e) { + var r, + t = this, + n = t.c, + i = (e = new t.constructor(e)).c, + s = t.s, + o = e.s, + f = t.e, + c = e.e; + if (!n[0] || !i[0]) return n[0] ? s : i[0] ? -o : 0; + if (s != o) return s; + if (r = s < 0, f != c) return c < f ^ r ? 1 : -1; + + for (o = (f = n.length) < (c = i.length) ? f : c, s = -1; ++s < o;) if (n[s] != i[s]) return n[s] > i[s] ^ r ? 1 : -1; + + return f == c ? 0 : c < f ^ r ? 1 : -1; + }, l.div = function (e) { + var r = this, + t = r.constructor, + n = r.c, + i = (e = new t(e)).c, + s = r.s == e.s ? 1 : -1, + o = t.DP; + if (o !== ~~o || o < 0 || P < o) throw Error(b); + if (!i[0]) throw Error(x); + if (!n[0]) return new t(0 * s); + var f, + c, + u, + h, + l, + a = i.slice(), + g = f = i.length, + p = n.length, + w = n.slice(0, f), + d = w.length, + v = e, + m = v.c = [], + E = 0, + M = o + (v.e = r.e - e.e) + 1; + + for (v.s = s, s = M < 0 ? 0 : M, a.unshift(0); d++ < f;) w.push(0); + + do { + for (u = 0; u < 10; u++) { + if (f != (d = w.length)) h = d < f ? 1 : -1;else for (l = -1, h = 0; ++l < f;) if (i[l] != w[l]) { + h = i[l] > w[l] ? 1 : -1; + break; + } + if (!(h < 0)) break; + + for (c = d == f ? i : a; d;) { + if (w[--d] < c[d]) { + for (l = d; l && !w[--l];) w[l] = 9; + + --w[l], w[d] += 10; + } + + w[d] -= c[d]; + } + + for (; !w[0];) w.shift(); + } + + m[E++] = h ? u : ++u, w[0] && h ? w[d] = n[g] || 0 : w = [n[g]]; + } while ((g++ < p || w[0] !== D) && s--); + + return m[0] || 1 == E || (m.shift(), v.e--), M < E && R(v, o, t.RM, w[0] !== D), v; + }, l.eq = function (e) { + return !this.cmp(e); + }, l.gt = function (e) { + return 0 < this.cmp(e); + }, l.gte = function (e) { + return -1 < this.cmp(e); + }, l.lt = function (e) { + return this.cmp(e) < 0; + }, l.lte = function (e) { + return this.cmp(e) < 1; + }, l.minus = l.sub = function (e) { + var r, + t, + n, + i, + s = this, + o = s.constructor, + f = s.s, + c = (e = new o(e)).s; + if (f != c) return e.s = -c, s.plus(e); + var u = s.c.slice(), + h = s.e, + l = e.c, + a = e.e; + if (!u[0] || !l[0]) return l[0] ? (e.s = -c, e) : new o(u[0] ? s : 0); + + if (f = h - a) { + for ((n = (i = f < 0) ? (f = -f, u) : (a = h, l)).reverse(), c = f; c--;) n.push(0); + + n.reverse(); + } else for (t = ((i = u.length < l.length) ? u : l).length, f = c = 0; c < t; c++) if (u[c] != l[c]) { + i = u[c] < l[c]; + break; + } + + if (i && (n = u, u = l, l = n, e.s = -e.s), 0 < (c = (t = l.length) - (r = u.length))) for (; c--;) u[r++] = 0; + + for (c = r; f < t;) { + if (u[--t] < l[t]) { + for (r = t; r && !u[--r];) u[r] = 9; + + --u[r], u[t] += 10; + } + + u[t] -= l[t]; + } + + for (; 0 === u[--c];) u.pop(); + + for (; 0 === u[0];) u.shift(), --a; + + return u[0] || (e.s = 1, u = [a = 0]), e.c = u, e.e = a, e; + }, l.mod = function (e) { + var r, + t = this, + n = t.constructor, + i = t.s, + s = (e = new n(e)).s; + if (!e.c[0]) throw Error(x); + return t.s = e.s = 1, r = 1 == e.cmp(t), t.s = i, e.s = s, r ? new n(t) : (i = n.DP, s = n.RM, n.DP = n.RM = 0, t = t.div(e), n.DP = i, n.RM = s, this.minus(t.times(e))); + }, l.plus = l.add = function (e) { + var r, + t = this, + n = t.constructor, + i = t.s, + s = (e = new n(e)).s; + if (i != s) return e.s = -s, t.minus(e); + var o = t.e, + f = t.c, + c = e.e, + u = e.c; + if (!f[0] || !u[0]) return u[0] ? e : new n(f[0] ? t : 0 * i); + + if (f = f.slice(), i = o - c) { + for ((r = 0 < i ? (c = o, u) : (i = -i, f)).reverse(); i--;) r.push(0); + + r.reverse(); + } + + for (f.length - u.length < 0 && (r = u, u = f, f = r), i = u.length, s = 0; i; f[i] %= 10) s = (f[--i] = f[i] + u[i] + s) / 10 | 0; + + for (s && (f.unshift(s), ++c), i = f.length; 0 === f[--i];) f.pop(); + + return e.c = f, e.e = c, e; + }, l.pow = function (e) { + var r = this, + t = new r.constructor(1), + n = t, + i = e < 0; + if (e !== ~~e || e < -1e6 || 1e6 < e) throw Error(u + "exponent"); + + for (i && (e = -e); 1 & e && (n = n.times(r)), e >>= 1;) r = r.times(r); + + return i ? t.div(n) : n; + }, l.round = function (e, r) { + var t = this.constructor; + if (e === D) e = 0;else if (e !== ~~e || e < -P || P < e) throw Error(b); + return R(new t(this), e, r === D ? t.RM : r); + }, l.sqrt = function () { + var e, + r, + t, + n = this, + i = n.constructor, + s = n.s, + o = n.e, + f = new i(.5); + if (!n.c[0]) return new i(n); + if (s < 0) throw Error(c + "No square root"); + + for (o = (e = 0 === (s = Math.sqrt(n + "")) || s === 1 / 0 ? ((r = n.c.join("")).length + o & 1 || (r += "0"), o = ((o + 1) / 2 | 0) - (o < 0 || 1 & o), new i(((s = Math.sqrt(r)) == 1 / 0 ? "1e" : (s = s.toExponential()).slice(0, s.indexOf("e") + 1)) + o)) : new i(s)).e + (i.DP += 4); t = e, e = f.times(t.plus(n.div(t))), t.c.slice(0, o).join("") !== e.c.slice(0, o).join("");); + + return R(e, i.DP -= 4, i.RM); + }, l.times = l.mul = function (e) { + var r, + t = this.constructor, + n = this.c, + i = (e = new t(e)).c, + s = n.length, + o = i.length, + f = this.e, + c = e.e; + if (e.s = this.s == e.s ? 1 : -1, !n[0] || !i[0]) return new t(0 * e.s); + + for (e.e = f + c, s < o && (r = n, n = i, i = r, c = s, s = o, o = c), r = new Array(c = s + o); c--;) r[c] = 0; + + for (f = o; f--;) { + for (o = 0, c = s + f; f < c;) o = r[c] + i[f] * n[c - f - 1] + o, r[c--] = o % 10, o = o / 10 | 0; + + r[c] = (r[c] + o) % 10; + } + + for (o ? ++e.e : r.shift(), f = r.length; !r[--f];) r.pop(); + + return e.c = r, e; + }, l.toExponential = function (e) { + return t(this, 1, e, e); + }, l.toFixed = function (e) { + return t(this, 2, e, this.e + e); + }, l.toPrecision = function (e) { + return t(this, 3, e, e - 1); + }, l.toString = function () { + return t(this); + }, l.valueOf = l.toJSON = function () { + return t(this, 4); + }, (r = function t() { + function n(e) { + var r = this; + if (!(r instanceof n)) return e === D ? t() : new n(e); + e instanceof n ? (r.s = e.s, r.e = e.e, r.c = e.c.slice()) : function (e, r) { + var t, n, i; + if (0 === r && 1 / r < 0) r = "-0";else if (!a.test(r += "")) throw Error(u + "number"); + + for (e.s = "-" == r.charAt(0) ? (r = r.slice(1), -1) : 1, -1 < (t = r.indexOf(".")) && (r = r.replace(".", "")), 0 < (n = r.search(/e/i)) ? (t < 0 && (t = n), t += +r.slice(n + 1), r = r.substring(0, n)) : t < 0 && (t = r.length), i = r.length, n = 0; n < i && "0" == r.charAt(n);) ++n; + + if (n == i) e.c = [e.e = 0];else { + for (; 0 < i && "0" == r.charAt(--i);); + + for (e.e = t - n - 1, e.c = [], t = 0; n <= i;) e.c[t++] = +r.charAt(n++); + } + }(r, e), r.constructor = n; + } + + return n.prototype = l, n.DP = i, n.RM = s, n.NE = o, n.PE = f, n.version = "5.2.2", n; + }()).default = r.Big = r, "function" == typeof define && define.amd ? define(function () { + return r; + }) : "undefined" != typeof module && module.exports ? module.exports = r : e.Big = r; +}(this); \ No newline at end of file diff --git a/mall4uni/utils/config.js b/mall4uni/utils/config.js new file mode 100644 index 0000000..defde2b --- /dev/null +++ b/mall4uni/utils/config.js @@ -0,0 +1,28 @@ +//可改动页面 +// var domain = "http://127.0.0.1:8086"; //统一接口域名,测试环境 + +// exports.domain = domain; + + +//配置文件 +// #ifndef MP +// var domain = "http://mall4j-admin.gz-yami.com/api"; //统一接口域名,正式环境 +// var wsDomain = "http://mall4j-admin.gz-yami.com/api"; //统一接口域名,正式环境 +// #endif + +// #ifndef MP +// var domain = "https://h5.gz-yami.com/api"; //统一接口域名,正式环境 +// var wsDomain = "https://h5.gz-yami.com/api"; //统一接口域名,正式环境 +// #endif + +var mpAppId = 'wx42bbe857570c5b40' +// 临时 +var domain = "http://192.168.1.90:8989/api"; //统一接口域名,测试环境 +var wsDomain = "ws://192.168.1.90:8989/api"; //统一接口域名,测试环境 + +// var picDomain = "http://img-test.gz-yami.com/"; //图片域名 + +exports.domain = domain; +// exports.picDomain = picDomain; +exports.wsDomain = wsDomain; +exports.mpAppId = mpAppId; \ No newline at end of file diff --git a/mall4uni/utils/constant.js b/mall4uni/utils/constant.js new file mode 100644 index 0000000..b77634b --- /dev/null +++ b/mall4uni/utils/constant.js @@ -0,0 +1,28 @@ +const PayType = { + SCOREPAY: 0, // 积分支付 + WECHATPAY: 1, // 小程序支付 + ALIPAY: 2,// 支付宝支付 + WECHATPAY_SWEEP_CODE: 3,//微信扫码支付 + WECHATPAY_H5: 4, //微信H5支付 + WECHATPAY_MP: 5, //微信公众号支付 + ALIPAY_H5: 6, //支付宝H5支付 + ALIPAY_APP: 7, // 支付宝APP支付 + WECHATPAY_APP: 8, // 微信APP支付 + BALANCEPAY: 9 // 余额支付 +} + +const AppType = { + MINI: 1, // 小程序 + MP: 2,// 微信公众号 + PC: 3,//pc + H5: 4, //h5 + ANDROID: 5, //安卓 + IOS: 6, //苹果 + ALI: 7, //支付宝H5 + ALIMINI: 8, //支付宝小程序 +} + +module.exports = { + PayType, + AppType +}; diff --git a/mall4uni/utils/http.js b/mall4uni/utils/http.js new file mode 100644 index 0000000..64e2248 --- /dev/null +++ b/mall4uni/utils/http.js @@ -0,0 +1,385 @@ +var config = require("./config.js"); //统一的网络请求方法 +var util = require("./util.js") +import { + AppType +} from './constant.js' + +function request(params, isGetTonken) { + // 全局变量 + var globalData = getApp().globalData; // 如果正在进行登陆,就将非登陆请求放在队列中等待登陆完毕后进行调用 + + // if (!isGetTonken && globalData.isLanding) { + // globalData.requestQueue.push(params); + // return; + // } + + if (Object.prototype.toString.call(params.data) == '[object Array]') { + params.data = JSON.stringify(params.data); + } else if (Object.prototype.toString.call(params.data) == '[object Number]') { + params.data = params.data + ''; + } + var needToken = false + if (params.url.indexOf("/p/") == 0 || params.url.indexOf("/user/registerOrBindUser") == 0) { + needToken = true + } + + wx.request({ + // url: config.domain + params.url, + url: (params.domain ? params.domain : config.domain) + params.url, + //接口请求地址 + data: params.data, + header: { + // 'content-type': params.method == "GET" ? 'application/x-www-form-urlencoded' : 'application/json;charset=utf-8', + // 'Authorization': params.login ? undefined : uni.getStorageSync('token') + 'Authorization': !needToken ? undefined : uni.getStorageSync('token') || uni.getStorageSync('tempToken'), + }, + method: params.method == undefined ? "POST" : params.method, + dataType: 'json', + responseType: params.responseType == undefined ? 'text' : params.responseType, + success: function (res) { + if (res.statusCode == 200) { + //如果有定义了params.callBack,则调用 params.callBack(res.data) + if (params.callBack) { + params.callBack(res.data); + } + } else if (res.statusCode == 500) { + uni.showToast({ + title: "服务器出了点小差", + icon: "none" + }); + } else if (res.statusCode == 401) { + // 添加到请求队列 + // globalData.requestQueue.push(params); // 是否正在登陆 + + // if (!globalData.isLanding) { + // globalData.isLanding = true; //重新获取token,再次请求接口 + + // getToken(); + // } + uni.removeStorageSync('loginResult'); + uni.removeStorageSync('token'); + // #ifdef H5 + const ua = navigator.userAgent.toLowerCase(); + if (ua.search(/MicroMessenger/i) > -1) uni.setStorageSync('appType', AppType.MP) + // #endif + uni.hideLoading(); + if (!params.dontTrunLogin) { + if (uni.getStorageSync('hadLogin')) { + uni.showModal({ + title: "提示", + content: "登录已过期", + cancelText: "取消", + confirmText: "确定", + success: res => { + if (res.confirm) { + // 跳转登录页面 + var url = '' + // #ifdef H5 || MP-WEIXIN + if (uni.getStorageSync('appType') == AppType.MP || uni.getStorageSync('appType') == AppType.MINI) { + url = '/pages/login/login' + } else { + url = '/pages/accountLogin/accountLogin' + } + // #endif + + // #ifdef APP-PLUS + var url = '/pages/accountLogin/accountLogin' + // #endif + uni.navigateTo({ + url: url + }) + } else { + uni.switchTab({ + url: '/pages/index/index' + }) + } + } + }) + } else { + uni.showModal({ + title: "提示", + content: "登录已过期", + cancelText: "取消", + confirmText: "确定", + success: res => { + if (res.confirm) { + // 跳转登录页面 + // #ifdef H5 + uni.navigateTo({ + url: uni.getStorageSync('appType') == AppType.MP ? '/pages/login/login' : '/pages/accountLogin/accountLogin' + }) + // #endif + + // #ifdef MP-WEIXIN + uni.navigateTo({ + url: '/pages/login/login' + }) + // #endif + } else { + uni.switchTab({ + url: '/pages/index/index' + }) + } + } + }) + // // 跳转登录页面 + // // #ifdef H5 + // uni.navigateTo({ + // url: uni.getStorageSync('appType') == AppType.MP ? '/pages/login/login' : '/pages/accountLogin/accountLogin' + // }) + // // #endif + + // // #ifdef MP-WEIXIN + // uni.navigateTo({ + // url: '/pages/login/login' + // }) + // // #endif + } + } + } else if (res.statusCode == 400 && !params.errCallBack) { + uni.hideLoading(); + uni.showToast({ + title: res.data, + icon: "none" + }); + } else { + //如果有定义了params.errCallBack,则调用 params.errCallBack(res.data) + if (params.errCallBack) { + + params.errCallBack(res); + } + uni.hideLoading(); + } + + // if (!globalData.isLanding) { + // uni.hideLoading(); + // } + }, + fail: function (err) { + uni.hideLoading(); + if (err.errMsg == 'request:fail abort') { + console.log('请求被取消啦~') + return + } + setTimeout(() => { + uni.showToast({ + // zheli + title: "服务器出了点小差", + icon: "none" + }); + }, 1); + // uni.showToast({ + // title: "服务器出了点小差", + // icon: "none" + // }); + } + }); +} //通过code获取token,并保存到缓存 + + +var getToken = function () { + // uni.login({ + // success: res => { + // // 发送 res.code 到后台换取 openId, sessionKey, unionId + // request({ + // login: true, + // url: '/login?grant_type=mini_app', + // data: { + // principal: res.code + // }, + // callBack: result => { + // // 没有获取到用户昵称,说明服务器没有保存用户的昵称,也就是用户授权的信息并没有传到服务器 + // if (!result.nickName) { + // updateUserInfo(); + // } + + // if (result.userStutas == 0) { + // uni.showModal({ + // showCancel: false, + // title: '提示', + // content: '您已被禁用,不能购买,请联系客服' + // }); + // uni.setStorageSync('token', ''); + // } else { + // uni.setStorageSync('token', 'bearer' + result.access_token); //把token存入缓存,请求接口数据时要用 + // } + + // var globalData = getApp().globalData; + // globalData.isLanding = false; + + // while (globalData.requestQueue.length) { + // request(globalData.requestQueue.pop()); + // } + // } + // }, true); + // } + // }); +}; // 更新用户头像昵称 + +/** + * 微信公众号登录 + * @param {Object} fn 登录成功回调 + * @param {String} code 微信授权返回的code, 用于登录 + */ +var mpLogin = function (fn, code) { + // 发送 res.code 到后台换取 openId, sessionKey, unionId + request({ + login: true, + url: '/appLogin', + data: { + principal: code, + appType: AppType.MP, // 登录类型 + }, + callBack: result => { + loginSuccess(result, fn) + } + }, true); + +}; + +var getToken = function (fn) { + +}; + +/** + * 登录成功后执行 + * @param {Object} result 登录成功返回的数据 + * @param {Object} fn 登录成功后的回调 + */ +function loginSuccess (result, fn) { + // 保存登陆信息 + wx.setStorageSync('loginResult', result) + // 保存成功登录标识,token过期判断 + wx.setStorageSync('hadLogin', true) + // 没有获取到用户昵称,说明服务器没有保存用户的昵称,也就是用户授权的信息并没有传到服务器 + // if (!result.pic) { + // updateUserInfo(); + // } + if (!result.enabled) { + uni.showModal({ + showCancel: false, + title: "提示", + content: "您已被禁用,不能购买,请联系客服", + cancelText: "取消", + confirmText: "确定" + }) + wx.setStorageSync('token', ''); + } else { + wx.setStorageSync('token', 'bearer' + result.access_token); //把token存入缓存,请求接口数据时要用 + } + if (result.userId) { + wx.setStorageSync('hadBindUser', true); + getCartCount() + } else { + wx.setStorageSync('hadBindUser', false); + } + // var globalData = getApp().globalData; + // globalData.isLanding = false; + // while (globalData.requestQueue.length) { + // request(globalData.requestQueue.pop()); + // } + + if (fn) { + fn() + } +}; + +function updateUserInfo() { + uni.getUserInfo({ + success: res => { + var userInfo = JSON.parse(res.rawData); + request({ + url: "/p/user/setUserInfo", + method: "PUT", + data: { + avatarUrl: userInfo.avatarUrl, + nickName: userInfo.nickName + } + }); + } + }); +} + +function isUserAuthInfo () { + // 查看是否授权 + wx.getSetting({ + success (res) { + if (res.authSetting['scope.userInfo']) { + // 已经授权,可以直接调用 getUserInfo 获取头像昵称 + wx.getUserInfo({ + success: function (res) { + console.log(res.userInfo); + } + }); + } + } + }); +} + +function mpAuthLogin (page, needCode) { + // 在微信环境打开,请求公众号网页登陆 + var redirectUrl = null; + + if (!page) { + redirectUrl = window.location.href + } else { + var { + protocol, + host, + pathname, + hash + } = window.location + var redirectUrl = `${protocol}//${host}` + page + } + var scope = 'snsapi_userinfo' + window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + config.mpAppId + + '&redirect_uri=' + + encodeURIComponent(redirectUrl) + '&response_type=code&scope=' + scope + '&state=' + (needCode ? 'needCode' : + 'unNeedCode') + + '#wechat_redirect' + +} + +/** + * 获取购物车商品数量 + */ +function getCartCount () { + if (!uni.getStorageSync('token')) { + // wx.removeTabBarBadge({ + // index: 2 + // }); + util.removeTabBadge() + return + } + var params = { + url: "/p/shopCart/prodCount", + method: "GET", + dontTrunLogin: true, + data: {}, + callBack: function (res) { + if (res > 0) { + wx.setTabBarBadge({ + index: 2, + text: res + "" + }); + var app = getApp().globalData; + getApp().globalData.totalCartCount = res; + } else { + wx.removeTabBarBadge({ + index: 2 + }); + var app = getApp().globalData; + getApp().globalData.totalCartCount = 0; + } + } + }; + request(params); +} + +exports.getToken = getToken; +exports.request = request; +exports.getCartCount = getCartCount; +exports.updateUserInfo = updateUserInfo; +exports.mpAuthLogin = mpAuthLogin; +exports.loginSuccess = loginSuccess; +exports.mpLogin = mpLogin; diff --git a/mall4uni/utils/util.js b/mall4uni/utils/util.js new file mode 100644 index 0000000..b336ed6 --- /dev/null +++ b/mall4uni/utils/util.js @@ -0,0 +1,51 @@ +const formatTime = date => { + const year = date.getFullYear(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hour = date.getHours(); + const minute = date.getMinutes(); + const second = date.getSeconds(); + return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':'); +}; + +const formatNumber = n => { + n = n.toString(); + return n[1] ? n : '0' + n; +}; + +const formatHtml = content => { + content = content.replace(/\'); + return content; +}; + +/** + * 获取链接上的参数 + */ +const getUrlKey = (name) => { + return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || ['', ''])[1] + .replace(/\+/g, '%20')) || null +} + +/** + * 移除购物车Tabbar的数字 + */ +const removeTabBadge = () => { + let pl = '' + // #ifdef MP-WEIXIN + pl = 'mp' + // #endif + uni.removeTabBarBadge({ + index: pl=='mp' ? 3 : 2 + }) +} + +module.exports = { + formatTime: formatTime, + getUrlKey: getUrlKey, + formatHtml: formatHtml, + removeTabBadge: removeTabBadge +}; \ No newline at end of file diff --git a/mall4uni/wxs/number.wxs b/mall4uni/wxs/number.wxs new file mode 100644 index 0000000..b6de66b --- /dev/null +++ b/mall4uni/wxs/number.wxs @@ -0,0 +1,85 @@ +function toPrice(val) { + if (!val) { + val = 0; + } + + return val.toFixed(2); +} + +; + +function parsePrice(val) { + if (!val) { + val = 0; + } + + return val.toFixed(2).split("."); +} + +function array_contain(array, obj) { + for (var i = 0; i < array.length; i++) { + if (array[i] == obj) //如果要求数据类型也一致,这里可使用恒等号=== + return true; + } + + return false; +} //判断当前的规格值 是否可以选,即其他 + + +function props_contain(allProperties, selectedPropObj, key, item, propKeys) { + var properties = ""; + selectedPropObj[key] = item; + + for (var j = 0; j < propKeys.length; j++) { + properties += propKeys[j] + ":" + selectedPropObj[propKeys[j]] + ";"; + } + + properties = properties.substring(0, properties.length - 1); + var find = false; + + for (var i = 0; i < allProperties.length; i++) { + if (properties == allProperties[i]) { + find = true; + break; + } + } + + return find; +} + +function parseDiscount(discountRule) { + if (discountRule == 0) { + return '满额减'; + } else if (discountRule == 1) { + return '满件减'; + } else if (discountRule == 2) { + return '满额折'; + } else if (discountRule == 3) { + return '满件折'; + } else { + return ''; + } +} + +function parseDiscountMsg(discountRule, needAmount, discount) { + if (discountRule == 0) { + return '购满' + needAmount + '元减' + discount + '元'; + } else if (discountRule == 1) { + return '购满' + needAmount + '件减' + discount + '元'; + } else if (discountRule == 2) { + return '购满' + needAmount + '元打' + discount + '折'; + } else if (discountRule == 3) { + return '购满' + needAmount + '件打' + discount + '折'; + } else { + return ''; + } +} + +module.exports = { + toPrice: toPrice, + parsePrice: parsePrice, + array_contain: array_contain, + props_contain: props_contain, + parseDiscount: parseDiscount, + parseDiscountMsg: parseDiscountMsg +}; \ No newline at end of file