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. 扫描二维码
+
+
+
+ 2. 搜索小程序 **亚米商城**
+
+
+
+## 相关截图
+
+
+
+
+
+## 提交反馈
+
+提问之前,请先阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md):
+
+- QQ群:722835385
+
+ 
+
+- 论坛:
+
+- 商务邮箱: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 @@
+
+
+
+
+ ¥
+ {{item.reduceAmount}}
+
+
+ {{item.couponDiscount}}折
+
+
+ 满{{item.cashCondition}}元可用
+
+
+
+
+ {{item.suitableProdType==0?'通用':'商品'}} {{item.suitableProdType==0?'全场通用':'指定商品可用'}}
+
+
+ 领券{{item.validDays}}天后失效
+ {{item.startTime}}~{{item.endTime}}
+ 立即领取
+ 立即使用
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+ {{item.prodName}}
+ {{item.prodCommNumber}}评价 {{item.positiveRating}}%好评
+
+
+ 限时价
+ ¥
+ {{wxs.parsePrice(item.price)[0]}}
+ .{{wxs.parsePrice(item.price)[1]}}
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+ {{wxs.parseDiscount(item.chooseDiscountItemDto.discountRule)}}
+ {{wxs.parseDiscountMsg(item.chooseDiscountItemDto.discountRule,item.chooseDiscountItemDto.needAmount,item.chooseDiscountItemDto.discount)}}
+
+
+
+
+
+
+
+
+
+
+
+ {{prod.prodName}}
+ {{prod.skuName}}
+
+
+ ¥
+ {{wxs.parsePrice(prod.price)[0]}}
+ .{{wxs.parsePrice(prod.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 您还没有添加任何商品哦~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+ 搜索您想要的商品
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.prodName}}
+ {{item.brief}}
+
+ ¥ {{wxs.parsePrice(item.price)[0]}}.{{wxs.parsePrice(item.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+ 您还没有收货地址
+
+
+
+
+
+
+ {{item.receiver}}
+ {{item.mobile}}
+
+
+
+
+ {{item.province}}{{item.city}}{{item.area}}{{item.addr}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+ 收 货 人
+
+
+
+ 手机号码
+
+
+
+ 所在地区
+ {{province}} {{city}} {{area}}
+
+
+ 确定
+
+
+
+
+
+ {{item.areaName}}
+
+
+
+
+
+ {{item.areaName}}
+
+
+
+
+
+ {{item.areaName}}
+
+
+
+
+
+
+
+
+
+
+
+ 详细地址
+
+
+
+
+
+
+
+ 保存收货地址
+
+
+
+ 删除收货地址
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+ 物流公司:
+ {{companyName}}
+
+
+ 运单编号:
+ {{dvyFlowId}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.context}}
+ {{item.time}}
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+ 搜索
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 新品推荐
+
+
+
+ 限时特惠
+
+
+
+ 每日疯抢
+
+
+
+ 领优惠券
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+ 查看更多
+
+
+
+
+
+
+
+
+
+
+ {{prod.prodName}}
+
+ ¥
+ {{wxs.parsePrice(prod.price)[0]}}
+ .{{wxs.parsePrice(prod.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+ 更多
+
+
+
+
+
+
+
+
+
+
+ {{prod.prodName}}
+ {{prod.brief}}
+
+
+ ¥
+ {{wxs.parsePrice(prod.price)[0]}}
+ .{{wxs.parsePrice(prod.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+ {{prod.prodName}}
+ {{prod.brief}}
+
+
+ ¥
+ {{wxs.parsePrice(prod.price)[0]}}
+ .{{wxs.parsePrice(prod.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+亚米科技mall4j
+申请获得你的公开信息(昵称、头像等)
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+ {{index + 1}}. {{log}}
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+ {{news.title}}
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+ {{userAddrDto.receiver}}
+ {{userAddrDto.mobile}}
+
+ {{userAddrDto.province}}{{userAddrDto.city}}{{userAddrDto.area}}{{userAddrDto.area}}{{userAddrDto.addr}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.prodName}}
+
+
+ 数量:{{item.prodCount}}
+ {{item.skuName}}
+
+
+ ¥
+ {{wxs.parsePrice(item.price)[0]}}
+ .{{wxs.parsePrice(item.price)[1]}}
+
+ 申请售后
+ 加购物车
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 订单编号:
+ {{orderNumber}}
+ 复制
+
+
+ 下单时间:
+ {{createTime}}
+
+
+
+
+ 支付方式:
+ 微信支付
+
+
+ 配送方式:
+ 普通配送
+
+
+ 订单备注:
+ {{remarks}}
+
+
+
+
+
+
+
+ 订单总额:
+
+ ¥
+ {{wxs.parsePrice(productTotalAmount)[0]}}
+ .{{wxs.parsePrice(productTotalAmount)[1]}}
+
+
+
+ 运费:
+
+ ¥
+ {{wxs.parsePrice(transfee)[0]}}
+ .{{wxs.parsePrice(transfee)[1]}}
+
+
+
+ 优惠券:
+
+ -¥
+ {{wxs.parsePrice(reduceAmount)[0]}}
+ .{{wxs.parsePrice(reduceAmount)[1]}}
+
+
+
+
+ 实付款:
+ ¥
+ {{wxs.parsePrice(actualTotal)[0]}}
+ .{{wxs.parsePrice(actualTotal)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+ 全部
+ 待支付
+ 待发货
+ 待收货
+ 已完成
+
+
+
+
+ 还没有任何相关订单
+
+
+
+
+
+ 订单编号:{{item.orderNumber}}
+
+ {{item.status==1?'待支付':(item.status==2?'待发货':(item.status==3?'待收货':(item.status==5?'已完成':'已取消')))}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{prod.prodName}}
+
+ {{prod.skuName}}
+
+ ¥
+ {{wxs.parsePrice(prod.price)[0]}}
+ .{{wxs.parsePrice(prod.price)[1]}}
+ x{{prod.prodCount}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 共1件商品
+ 合计:
+ ¥
+ {{wxs.parsePrice(item.actualTotal)[0]}}
+ .{{wxs.parsePrice(item.actualTotal)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+ 支付失败
+ 请在
+ 30分钟内完成付款
+ 否则订单会被系统取消
+
+ 查看订单
+ 重新支付
+
+
+
+
+ 支付成功
+ 感谢您的购买
+
+ 查看订单
+ 继续购物
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{prodName}}
+
+
+
+ 收藏
+
+
+ {{brief}}
+
+ ¥{{wxs.parsePrice(defaultSku.price)[0]}}.{{wxs.parsePrice(defaultSku.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+ 已选
+ {{selectedProp.length>0?selectedProp+',':selectedProp}}{{prodNum}}件
+ ...
+
+
+
+
+
+ 评价
+ 好评{{prodCommData.positiveRating}}%
+
+
+ 共{{prodCommData.number}}条
+
+
+
+
+
+ 全部({{prodCommData.number}})
+ 好评({{prodCommData.praiseNumber}})
+ 中评({{prodCommData.secondaryNumber}})
+ 差评({{prodCommData.negativeNumber}})
+ 有图({{prodCommData.picNumber}})
+
+
+
+
+ {{item.recTime}}
+
+
+ {{item.nickName}}
+
+
+
+ {{item.content}}
+
+
+
+
+
+
+ 查看全部评价
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{key}}
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 数量
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+ {{item.title}}
+
+ {{item.publishTime}}
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+
+
+
+
+ 热门搜索
+
+
+
+ {{item.title}}
+
+
+
+
+
+
+
+
+ 搜索历史
+
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 综合
+ 销量
+ 价格
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.prodName}}
+ {{item.praiseNumber}}评价 {{item.positiveRating}}%好评
+
+ ¥
+ {{wxs.parsePrice(item.price)[0]}}
+ .{{wxs.parsePrice(item.price)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 新增收货地址
+
+
+
+
+
+
+
+
+ {{userAddr.receiver}}
+ {{userAddr.mobile}}
+
+ {{userAddr.province}}{{userAddr.city}}{{userAddr.area}}{{userAddr.addr}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.prodName}}
+
+ {{item.skuName}}
+
+ ¥
+ {{wxs.parsePrice(item.price)[0]}}
+ .{{wxs.parsePrice(item.price)[1]}}
+ x{{item.prodCount}}
+
+
+
+
+
+
+
+ 共{{totalCount}}件商品
+ 合计:
+ ¥
+ {{wxs.parsePrice(total)[0]}}
+ .{{wxs.parsePrice(total)[1]}}
+
+
+
+
+
+
+
+
+ 优惠券:
+ 暂无可用
+ {{coupons.totalLength? coupons.totalLength: 0}}张
+
+
+
+ 买家留言:
+
+
+
+
+
+
+
+
+
+ 订单总额:
+
+ ¥
+ {{wxs.parsePrice(total)[0]}}
+ .{{wxs.parsePrice(total)[1]}}
+
+
+
+ 运费:
+
+ ¥
+ {{wxs.parsePrice(transfee)[0]}}
+ .{{wxs.parsePrice(transfee)[1]}}
+
+
+
+ 优惠金额:
+
+ -¥
+ {{wxs.parsePrice(shopReduce)[0]}}
+ .{{wxs.parsePrice(shopReduce)[1]}}
+
+
+
+
+ 小计:
+ ¥
+ {{wxs.parsePrice(actualTotal)[0]}}
+ .{{wxs.parsePrice(actualTotal)[1]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{loginResult.nickName ? loginResult.nickName : "用户昵称"}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 我的订单
+
+ 查看全部
+
+
+
+
+
+
+ 待支付
+ {{orderAmount.unPay}}
+
+
+
+ 待发货
+ {{orderAmount.payed}}
+
+
+
+ 待收货
+ {{orderAmount.consignment}}
+
+
+
+ 已完成
+
+
+
+
+
+
+
+ {{collectionCount}}
+ 我的收藏
+
+
+ 5
+ 我的消息
+
+
+ 3
+ 我的足迹
+
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
+
+
+
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(/\
/gi, ' style="max-width:100% !important;height:auto !important;margin:0;display:block;" \/\>');
+ 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