+ // add to parents
+ var parent = bufArray[0] || results;
+
+ if (parent.nodes === undefined) {
+ parent.nodes = [];
+ }
+
+ parent.nodes.push(node);
+ } else {
+ bufArray.unshift(node);
+ }
+ },
+ end: function (tag) {
+ //debug(tag);
+ // merge into parent tag
+ var node = bufArray.shift();
+
+ if (node.tag !== tag) {
+ console.error('invalid state: mismatch end tag');
+ }
+
+ if (bufArray.length === 0) {
+ results.nodes.push(node);
+ } else {
+ var parent = bufArray[0];
+
+ if (parent.nodes === undefined) {
+ parent.nodes = [];
+ }
+
+ parent.nodes.push(node);
+ }
+ },
+ chars: function (text) {
+ //debug(text);
+ var node = {
+ node: 'text',
+ text: text,
+ textArray: transEmojiStr(text)
+ };
+
+ if (bufArray.length === 0) {
+ results.nodes.push(node);
+ } else {
+ var parent = bufArray[0];
+
+ if (parent.nodes === undefined) {
+ parent.nodes = [];
+ }
+
+ parent.nodes.push(node);
+ }
+ },
+ comment: function (text) {
+ //debug(text);
+ var node = {
+ node: 'comment',
+ text: text
+ };
+ var parent = bufArray[0];
+
+ if (parent.nodes === undefined) {
+ parent.nodes = [];
+ }
+
+ parent.nodes.push(node);
+ }
+ });
+ return results;
+}
+
+function transEmojiStr(str) {
+ // var eReg = new RegExp("["+__reg+' '+"]");
+ // str = str.replace(/\[([^\[\]]+)\]/g,':$1:')
+ var emojiObjs = []; //如果正则表达式为空
+
+ if (__emojisReg.length == 0 || !__emojis) {
+ var emojiObj = {};
+ emojiObj.node = 'text';
+ emojiObj.text = str;
+ array = [emojiObj];
+ return array;
+ } //这个地方需要调整
+
+ str = str.replace(/\[([^\[\]]+)\]/g, ':$1:');
+ var eReg = new RegExp('[:]');
+ var array = str.split(eReg);
+
+ for (var i = 0; i < array.length; i++) {
+ var ele = array[i];
+ var emojiObj = {};
+
+ if (__emojis[ele]) {
+ emojiObj.node = 'element';
+ emojiObj.tag = 'emoji';
+ emojiObj.text = __emojis[ele];
+ emojiObj.baseSrc = __emojisBaseSrc;
+ } else {
+ emojiObj.node = 'text';
+ emojiObj.text = ele;
+ }
+
+ emojiObjs.push(emojiObj);
+ }
+
+ return emojiObjs;
+}
+
+function emojisInit(reg = '', baseSrc = '/wxParse/emojis/', emojis) {
+ __emojisReg = reg;
+ __emojisBaseSrc = baseSrc;
+ __emojis = emojis;
+}
+
+module.exports = {
+ html2json: html2json,
+ emojisInit: emojisInit
+};
diff --git a/litemall-wx_uni/lib/wxParse/htmlparser.js b/litemall-wx_uni/lib/wxParse/htmlparser.js
new file mode 100644
index 00000000..abb8939a
--- /dev/null
+++ b/litemall-wx_uni/lib/wxParse/htmlparser.js
@@ -0,0 +1,188 @@
+var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;
+var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/;
+var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; // Empty Elements - HTML 5
+
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ * 垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+// Regular Expressions for parsing tags and attributes
+var empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); // Block Elements - HTML 5
+
+var block = makeMap(
+ 'a,address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'
+); // Inline Elements - HTML 5
+
+var inline = makeMap(
+ 'abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'
+); // Elements that you can, intentionally, leave open
+// (and which close themselves)
+
+var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); // Attributes that have their values filled in disabled="disabled"
+
+var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); // Special Elements (can contain anything)
+
+var special = makeMap('wxxxcode-style,script,style,view,scroll-view,block');
+
+function HTMLParser(html, handler) {
+ var index;
+ var chars;
+ var match;
+ var stack = [];
+ var last = html;
+ stack.last = function () {
+ return this[this.length - 1];
+ };
+
+ while (html) {
+ chars = true; // Make sure we're not in a script or style element
+
+ if (!stack.last() || !special[stack.last()]) {
+ // Comment
+ if (html.indexOf('');
+
+ if (index >= 0) {
+ if (handler.comment) {
+ handler.comment(html.substring(4, index));
+ }
+
+ html = html.substring(index + 3);
+ chars = false;
+ } // end tag
+ } else {
+ if (html.indexOf('') == 0) {
+ match = html.match(endTag);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(endTag, parseEndTag);
+ chars = false;
+ } // start tag
+ } else {
+ if (html.indexOf('<') == 0) {
+ match = html.match(startTag);
+
+ if (match) {
+ html = html.substring(match[0].length);
+ match[0].replace(startTag, parseStartTag);
+ chars = false;
+ }
+ }
+ }
+ }
+
+ if (chars) {
+ index = html.indexOf('<');
+ var text = index < 0 ? html : html.substring(0, index);
+
+ if (index < 0) {
+ html = '';
+ } else {
+ html = html.substring(index);
+ }
+
+ if (handler.chars) {
+ handler.chars(text);
+ }
+ }
+ } else {
+ html = html.replace(new RegExp('([\\s\\S]*?)' + stack.last() + '[^>]*>'), function (all, text) {
+ text = text.replace(/|/g, '$1$2');
+
+ if (handler.chars) {
+ handler.chars(text);
+ }
+
+ return '';
+ });
+ parseEndTag('', stack.last());
+ }
+
+ if (html == last) {
+ throw 'Parse Error: ' + html;
+ }
+
+ last = html;
+ } // Clean up any remaining tags
+
+ parseEndTag();
+
+ function parseStartTag(tag, tagName, rest, unary) {
+ tagName = tagName.toLowerCase();
+
+ if (block[tagName]) {
+ while (stack.last() && inline[stack.last()]) {
+ parseEndTag('', stack.last());
+ }
+ }
+
+ if (closeSelf[tagName] && stack.last() == tagName) {
+ parseEndTag('', tagName);
+ }
+
+ unary = empty[tagName] || !!unary;
+
+ if (!unary) {
+ stack.push(tagName);
+ }
+
+ if (handler.start) {
+ var attrs = [];
+ rest.replace(attr, function (match, name) {
+ var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : '';
+ attrs.push({
+ name: name,
+ value: value,
+ escaped: value.replace(/(^|[^\\])"/g, '$1\\"') //"
+ });
+ });
+
+ if (handler.start) {
+ handler.start(tagName, attrs, unary);
+ }
+ }
+ }
+
+ function parseEndTag(tag, tagName) {
+ // If no tag name is provided, clean shop
+ if (!tagName) {
+ var pos = 0; // Find the closest opened tag of the same type
+ } else {
+ for (var pos = stack.length - 1; pos >= 0; pos--) {
+ if (stack[pos] == tagName) {
+ break;
+ }
+ }
+ }
+
+ if (pos >= 0) {
+ // Close all the open elements, up the stack
+ for (var i = stack.length - 1; i >= pos; i--) {
+ if (handler.end) {
+ handler.end(stack[i]);
+ }
+ } // Remove the open elements from the stack
+
+ stack.length = pos;
+ }
+ }
+}
+
+function makeMap(str) {
+ var obj = {};
+ var items = str.split(',');
+ for (var i = 0; i < items.length; i++) {
+ obj[items[i]] = true;
+ }
+
+ return obj;
+}
+
+module.exports = HTMLParser;
diff --git a/litemall-wx_uni/lib/wxParse/showdown.js b/litemall-wx_uni/lib/wxParse/showdown.js
new file mode 100644
index 00000000..980d39c9
--- /dev/null
+++ b/litemall-wx_uni/lib/wxParse/showdown.js
@@ -0,0 +1,2546 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ * 垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+function getDefaultOpts(simple) {
+ 'use strict';
+
+ var defaultOptions = {
+ omitExtraWLInCodeBlocks: {
+ defaultValue: false,
+ describe: 'Omit the default extra whiteline added to code blocks',
+ type: 'boolean'
+ },
+ noHeaderId: {
+ defaultValue: false,
+ describe: 'Turn on/off generated header id',
+ type: 'boolean'
+ },
+ prefixHeaderId: {
+ defaultValue: false,
+ describe: 'Specify a prefix to generated header ids',
+ type: 'string'
+ },
+ headerLevelStart: {
+ defaultValue: false,
+ describe: 'The header blocks level start',
+ type: 'integer'
+ },
+ parseImgDimensions: {
+ defaultValue: false,
+ describe: 'Turn on/off image dimension parsing',
+ type: 'boolean'
+ },
+ simplifiedAutoLink: {
+ defaultValue: false,
+ describe: 'Turn on/off GFM autolink style',
+ type: 'boolean'
+ },
+ literalMidWordUnderscores: {
+ defaultValue: false,
+ describe: 'Parse midword underscores as literal underscores',
+ type: 'boolean'
+ },
+ strikethrough: {
+ defaultValue: false,
+ describe: 'Turn on/off strikethrough support',
+ type: 'boolean'
+ },
+ tables: {
+ defaultValue: false,
+ describe: 'Turn on/off tables support',
+ type: 'boolean'
+ },
+ tablesHeaderId: {
+ defaultValue: false,
+ describe: 'Add an id to table headers',
+ type: 'boolean'
+ },
+ ghCodeBlocks: {
+ defaultValue: true,
+ describe: 'Turn on/off GFM fenced code blocks support',
+ type: 'boolean'
+ },
+ tasklists: {
+ defaultValue: false,
+ describe: 'Turn on/off GFM tasklist support',
+ type: 'boolean'
+ },
+ smoothLivePreview: {
+ defaultValue: false,
+ describe: 'Prevents weird effects in live previews due to incomplete input',
+ type: 'boolean'
+ },
+ smartIndentationFix: {
+ defaultValue: false,
+ description: 'Tries to smartly fix identation in es6 strings',
+ type: 'boolean'
+ }
+ };
+
+ if (simple === false) {
+ return JSON.parse(JSON.stringify(defaultOptions));
+ }
+
+ var ret = {};
+
+ for (var opt in defaultOptions) {
+ if (defaultOptions.hasOwnProperty(opt)) {
+ ret[opt] = defaultOptions[opt].defaultValue;
+ }
+ }
+
+ return ret;
+}
+/**
+ * Created by Tivie on 06-01-2015.
+ */
+// Private properties
+
+var showdown = {};
+var parsers = {};
+var extensions = {};
+var globalOptions = getDefaultOpts(true);
+var flavor = {
+ github: {
+ omitExtraWLInCodeBlocks: true,
+ prefixHeaderId: 'user-content-',
+ simplifiedAutoLink: true,
+ literalMidWordUnderscores: true,
+ strikethrough: true,
+ tables: true,
+ tablesHeaderId: true,
+ ghCodeBlocks: true,
+ tasklists: true
+ },
+ vanilla: getDefaultOpts(true)
+};
+/**
+ * helper namespace
+ * @type {{}}
+ */
+
+showdown.helper = {};
+/**
+ * TODO LEGACY SUPPORT CODE
+ * @type {{}}
+ */
+
+showdown.extensions = {};
+/**
+ * Set a global option
+ * @static
+ * @param {string} key
+ * @param {*} value
+ * @returns {showdown}
+ */
+
+showdown.setOption = function (key, value) {
+ 'use strict';
+
+ globalOptions[key] = value;
+ return this;
+};
+/**
+ * Get a global option
+ * @static
+ * @param {string} key
+ * @returns {*}
+ */
+
+showdown.getOption = function (key) {
+ 'use strict';
+
+ return globalOptions[key];
+};
+/**
+ * Get the global options
+ * @static
+ * @returns {{}}
+ */
+
+showdown.getOptions = function () {
+ 'use strict';
+
+ return globalOptions;
+};
+/**
+ * Reset global options to the default values
+ * @static
+ */
+
+showdown.resetOptions = function () {
+ 'use strict';
+
+ globalOptions = getDefaultOpts(true);
+};
+/**
+ * Set the flavor showdown should use as default
+ * @param {string} name
+ */
+
+showdown.setFlavor = function (name) {
+ 'use strict';
+
+ if (flavor.hasOwnProperty(name)) {
+ var preset = flavor[name];
+
+ for (var option in preset) {
+ if (preset.hasOwnProperty(option)) {
+ globalOptions[option] = preset[option];
+ }
+ }
+ }
+};
+/**
+ * Get the default options
+ * @static
+ * @param {boolean} [simple=true]
+ * @returns {{}}
+ */
+
+showdown.getDefaultOptions = function (simple) {
+ 'use strict';
+
+ return getDefaultOpts(simple);
+};
+/**
+ * Get or set a subParser
+ *
+ * subParser(name) - Get a registered subParser
+ * subParser(name, func) - Register a subParser
+ * @static
+ * @param {string} name
+ * @param {function} [func]
+ * @returns {*}
+ */
+
+showdown.subParser = function (name, func) {
+ 'use strict';
+
+ if (showdown.helper.isString(name)) {
+ if (typeof func !== 'undefined') {
+ parsers[name] = func;
+ } else {
+ if (parsers.hasOwnProperty(name)) {
+ return parsers[name];
+ } else {
+ throw Error('SubParser named ' + name + ' not registered!');
+ }
+ }
+ }
+};
+/**
+ * Gets or registers an extension
+ * @static
+ * @param {string} name
+ * @param {object|function=} ext
+ * @returns {*}
+ */
+
+showdown.extension = function (name, ext) {
+ 'use strict';
+
+ if (!showdown.helper.isString(name)) {
+ throw Error("Extension 'name' must be a string");
+ }
+
+ name = showdown.helper.stdExtName(name); // Getter
+
+ if (showdown.helper.isUndefined(ext)) {
+ if (!extensions.hasOwnProperty(name)) {
+ throw Error('Extension named ' + name + ' is not registered!');
+ }
+
+ return extensions[name]; // Setter
+ } else {
+ // Expand extension if it's wrapped in a function
+ if (typeof ext === 'function') {
+ ext = ext();
+ } // Ensure extension is an array
+
+ if (!showdown.helper.isArray(ext)) {
+ ext = [ext];
+ }
+
+ var validExtension = validate(ext, name);
+
+ if (validExtension.valid) {
+ extensions[name] = ext;
+ } else {
+ throw Error(validExtension.error);
+ }
+ }
+};
+/**
+ * Gets all extensions registered
+ * @returns {{}}
+ */
+
+showdown.getAllExtensions = function () {
+ 'use strict';
+
+ return extensions;
+};
+/**
+ * Remove an extension
+ * @param {string} name
+ */
+
+showdown.removeExtension = function (name) {
+ 'use strict';
+
+ delete extensions[name];
+};
+/**
+ * Removes all extensions
+ */
+
+showdown.resetExtensions = function () {
+ 'use strict';
+
+ extensions = {};
+};
+/**
+ * Validate extension
+ * @param {array} extension
+ * @param {string} name
+ * @returns {{valid: boolean, error: string}}
+ */
+
+function validate(extension, name) {
+ 'use strict';
+
+ var errMsg = name ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension';
+ var ret = {
+ valid: true,
+ error: ''
+ };
+ if (!showdown.helper.isArray(extension)) {
+ extension = [extension];
+ }
+
+ for (var i = 0; i < extension.length; ++i) {
+ var baseMsg = errMsg + ' sub-extension ' + i + ': ';
+ var ext = extension[i];
+ if (typeof ext !== 'object') {
+ ret.valid = false;
+ ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given';
+ return ret;
+ }
+
+ if (!showdown.helper.isString(ext.type)) {
+ ret.valid = false;
+ ret.error = baseMsg + 'property "type" must be a string, but ' + typeof ext.type + ' given';
+ return ret;
+ }
+
+ var type = (ext.type = ext.type.toLowerCase()); // normalize extension type
+
+ if (type === 'language') {
+ type = ext.type = 'lang';
+ }
+
+ if (type === 'html') {
+ type = ext.type = 'output';
+ }
+
+ if (type !== 'lang' && type !== 'output' && type !== 'listener') {
+ ret.valid = false;
+ ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"';
+ return ret;
+ }
+
+ if (type === 'listener') {
+ if (showdown.helper.isUndefined(ext.listeners)) {
+ ret.valid = false;
+ ret.error = baseMsg + '. Extensions of type "listener" must have a property called "listeners"';
+ return ret;
+ }
+ } else {
+ if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) {
+ ret.valid = false;
+ ret.error = baseMsg + type + ' extensions must define either a "regex" property or a "filter" method';
+ return ret;
+ }
+ }
+
+ if (ext.listeners) {
+ if (typeof ext.listeners !== 'object') {
+ ret.valid = false;
+ ret.error = baseMsg + '"listeners" property must be an object but ' + typeof ext.listeners + ' given';
+ return ret;
+ }
+
+ for (var ln in ext.listeners) {
+ if (ext.listeners.hasOwnProperty(ln)) {
+ if (typeof ext.listeners[ln] !== 'function') {
+ ret.valid = false;
+ ret.error =
+ baseMsg +
+ '"listeners" property must be an hash of [event name]: [callback]. listeners.' +
+ ln +
+ ' must be a function but ' +
+ typeof ext.listeners[ln] +
+ ' given';
+ return ret;
+ }
+ }
+ }
+ }
+
+ if (ext.filter) {
+ if (typeof ext.filter !== 'function') {
+ ret.valid = false;
+ ret.error = baseMsg + '"filter" must be a function, but ' + typeof ext.filter + ' given';
+ return ret;
+ }
+ } else {
+ if (ext.regex) {
+ if (showdown.helper.isString(ext.regex)) {
+ ext.regex = new RegExp(ext.regex, 'g');
+ }
+
+ if (!ext.regex instanceof RegExp) {
+ ret.valid = false;
+ ret.error = baseMsg + '"regex" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given';
+ return ret;
+ }
+
+ if (showdown.helper.isUndefined(ext.replace)) {
+ ret.valid = false;
+ ret.error = baseMsg + '"regex" extensions must implement a replace string or function';
+ return ret;
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+/**
+ * Validate extension
+ * @param {object} ext
+ * @returns {boolean}
+ */
+
+showdown.validateExtension = function (ext) {
+ 'use strict';
+
+ var validateExtension = validate(ext, null);
+
+ if (!validateExtension.valid) {
+ console.warn(validateExtension.error);
+ return false;
+ }
+
+ return true;
+};
+/**
+ * showdownjs helper functions
+ */
+
+if (!showdown.hasOwnProperty('helper')) {
+ showdown.helper = {};
+}
+/**
+ * Check if var is string
+ * @static
+ * @param {string} a
+ * @returns {boolean}
+ */
+
+showdown.helper.isString = function isString(a) {
+ 'use strict';
+
+ return typeof a === 'string' || a instanceof String;
+};
+/**
+ * Check if var is a function
+ * @static
+ * @param {string} a
+ * @returns {boolean}
+ */
+
+showdown.helper.isFunction = function isFunction(a) {
+ 'use strict';
+
+ var getType = {};
+ return a && getType.toString.call(a) === '[object Function]';
+};
+/**
+ * ForEach helper function
+ * @static
+ * @param {*} obj
+ * @param {function} callback
+ */
+
+showdown.helper.forEach = function forEach(obj, callback) {
+ 'use strict';
+
+ if (typeof obj.forEach === 'function') {
+ obj.forEach(callback);
+ } else {
+ for (var i = 0; i < obj.length; i++) {
+ callback(obj[i], i, obj);
+ }
+ }
+};
+/**
+ * isArray helper function
+ * @static
+ * @param {*} a
+ * @returns {boolean}
+ */
+
+showdown.helper.isArray = function isArray(a) {
+ 'use strict';
+
+ return a.constructor === Array;
+};
+/**
+ * Check if value is undefined
+ * @static
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+ */
+
+showdown.helper.isUndefined = function isUndefined(value) {
+ 'use strict';
+
+ return typeof value === 'undefined';
+};
+/**
+ * Standardidize extension name
+ * @static
+ * @param {string} s extension name
+ * @returns {string}
+ */
+
+showdown.helper.stdExtName = function (s) {
+ 'use strict';
+
+ return s.replace(/[_-]||\s/g, '').toLowerCase();
+};
+
+function escapeCharactersCallback(wholeMatch, m1) {
+ 'use strict';
+
+ var charCodeToEscape = m1.charCodeAt(0);
+ return '~E' + charCodeToEscape + 'E';
+}
+/**
+ * Callback used to escape characters when passing through String.replace
+ * @static
+ * @param {string} wholeMatch
+ * @param {string} m1
+ * @returns {string}
+ */
+
+showdown.helper.escapeCharactersCallback = escapeCharactersCallback;
+/**
+ * Escape characters in a string
+ * @static
+ * @param {string} text
+ * @param {string} charsToEscape
+ * @param {boolean} afterBackslash
+ * @returns {XML|string|void|*}
+ */
+
+showdown.helper.escapeCharacters = function escapeCharacters(text, charsToEscape, afterBackslash) {
+ 'use strict'; // First we have to escape the escape characters so that
+ // we can build a character class out of them
+
+ var regexString = '([' + charsToEscape.replace(/([\[\]\\])/g, '\\$1') + '])';
+
+ if (afterBackslash) {
+ regexString = '\\\\' + regexString;
+ }
+
+ var regex = new RegExp(regexString, 'g');
+ text = text.replace(regex, escapeCharactersCallback);
+ return text;
+};
+
+var rgxFindMatchPos = function (str, left, right, flags) {
+ 'use strict';
+
+ var f = flags || '';
+ var g = f.indexOf('g') > -1;
+ var x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, ''));
+ var l = new RegExp(left, f.replace(/g/g, ''));
+ var pos = [];
+ var t;
+ var s;
+ var m;
+ var start;
+ var end;
+ do {
+ t = 0;
+
+ while ((m = x.exec(str))) {
+ if (l.test(m[0])) {
+ if (!t++) {
+ s = x.lastIndex;
+ start = s - m[0].length;
+ }
+ } else {
+ if (t) {
+ if (!--t) {
+ end = m.index + m[0].length;
+ var obj = {
+ left: {
+ start: start,
+ end: s
+ },
+ match: {
+ start: s,
+ end: m.index
+ },
+ right: {
+ start: m.index,
+ end: end
+ },
+ wholeMatch: {
+ start: start,
+ end: end
+ }
+ };
+ pos.push(obj);
+
+ if (!g) {
+ return pos;
+ }
+ }
+ }
+ }
+ }
+ } while (t && (x.lastIndex = s));
+
+ return pos;
+};
+/**
+ * matchRecursiveRegExp
+ *
+ * (c) 2007 Steven Levithan tags around block-level tags. + + text = showdown.subParser('hashHTMLBlocks')(text, options, globals); + text = showdown.subParser('paragraphs')(text, options, globals); + text = globals.converter._dispatch('blockGamut.after', text, options, globals); + return text; +}); +showdown.subParser('blockQuotes', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('blockQuotes.before', text, options, globals); + /* + text = text.replace(/ + ( // Wrap whole match in $1 + ( + ^[ \t]*>[ \t]? // '>' at the start of a line + .+\n // rest of the first line + (.+\n)* // subsequent consecutive lines + \n* // blanks + )+ + ) + /gm, function(){...}); + */ + + text = text.replace(/((^[ \t]{0,3}>[ \t]?.+\n(.+\n)*\n*)+)/gm, function (wholeMatch, m1) { + var bq = m1; // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + + bq = bq.replace(/^[ \t]*>[ \t]?/gm, '~0'); // trim one level of quoting + // attacklab: clean up hack + + bq = bq.replace(/~0/g, ''); + bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines + + bq = showdown.subParser('githubCodeBlocks')(bq, options, globals); + bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse + + bq = bq.replace(/(^|\n)/g, '$1 '); // These leading spaces screw with
content, so we need to fix that:
+
+ bq = bq.replace(/(\s*[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
+ var pre = m1; // attacklab: hack around Konqueror 3.5.4 bug:
+
+ pre = pre.replace(/^ /gm, '~0');
+ pre = pre.replace(/~0/g, '');
+ return pre;
+ });
+ return showdown.subParser('hashBlock')('\n' + bq + '\n
', options, globals);
+ });
+ text = globals.converter._dispatch('blockQuotes.after', text, options, globals);
+ return text;
+});
+/**
+ * Process Markdown `` blocks.
+ */
+
+showdown.subParser('codeBlocks', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
+ /*
+ text = text.replace(text,
+ /(?:\n\n|^)
+ ( // $1 = the code block -- one or more lines, starting with a space/tab
+ (?:
+ (?:[ ]{4}|\t) // Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
+ .*\n+
+ )+
+ )
+ (\n*[ ]{0,3}[^ \t\n]|(?=~0)) // attacklab: g_tab_width
+ /g,function(){...});
+ */
+ // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
+
+ text += '~0';
+ var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;
+ text = text.replace(pattern, function (wholeMatch, m1, m2) {
+ var codeblock = m1;
+ var nextChar = m2;
+ var end = '\n';
+ codeblock = showdown.subParser('outdent')(codeblock);
+ codeblock = showdown.subParser('encodeCode')(codeblock);
+ codeblock = showdown.subParser('detab')(codeblock);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
+
+ if (options.omitExtraWLInCodeBlocks) {
+ end = '';
+ }
+
+ codeblock = '' + codeblock + end + '
';
+ return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;
+ }); // attacklab: strip sentinel
+
+ text = text.replace(/~0/, '');
+ text = globals.converter._dispatch('codeBlocks.after', text, options, globals);
+ return text;
+});
+/**
+ *
+ * * Backtick quotes are used for spans.
+ *
+ * * You can use multiple backticks as the delimiters if you want to
+ * include literal backticks in the code span. So, this input:
+ *
+ * Just type ``foo `bar` baz`` at the prompt.
+ *
+ * Will translate to:
+ *
+ * Just type foo `bar` baz at the prompt.
+ *
+ * There's no arbitrary limit to the number of backticks you
+ * can use as delimters. If you need three consecutive backticks
+ * in your code, use four for delimiters, etc.
+ *
+ * * You can use spaces to get literal backticks at the edges:
+ *
+ * ... type `` `bar` `` ...
+ *
+ * Turns to:
+ *
+ * ... type `bar` ...
+ */
+
+showdown.subParser('codeSpans', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('codeSpans.before', text, options, globals);
+ /*
+ text = text.replace(/
+ (^|[^\\]) // Character before opening ` can't be a backslash
+ (`+) // $2 = Opening run of `
+ ( // $3 = The code block
+ [^\r]*?
+ [^`] // attacklab: work around lack of lookbehind
+ )
+ \2 // Matching closer
+ (?!`)
+ /gm, function(){...});
+ */
+
+ if (typeof text === 'undefined') {
+ text = '';
+ }
+
+ text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, function (wholeMatch, m1, m2, m3) {
+ var c = m3;
+ c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
+
+ c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
+
+ c = showdown.subParser('encodeCode')(c);
+ return m1 + '' + c + '';
+ });
+ text = globals.converter._dispatch('codeSpans.after', text, options, globals);
+ return text;
+});
+/**
+ * Convert all tabs to spaces
+ */
+
+showdown.subParser('detab', function (text) {
+ 'use strict'; // expand first n-1 tabs
+
+ text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width
+ // replace the nth with two sentinels
+
+ text = text.replace(/\t/g, '~A~B'); // use the sentinel to anchor our regex so it doesn't explode
+
+ text = text.replace(/~B(.+?)~A/g, function (wholeMatch, m1) {
+ var leadingText = m1;
+ var numSpaces = 4 - (leadingText.length % 4); // g_tab_width
+ // there *must* be a better way to do this:
+
+ for (var i = 0; i < numSpaces; i++) {
+ leadingText += ' ';
+ }
+
+ return leadingText;
+ }); // clean up sentinels
+
+ text = text.replace(/~A/g, ' '); // g_tab_width
+
+ text = text.replace(/~B/g, '');
+ return text;
+});
+/**
+ * Smart processing for ampersands and angle brackets that need to be encoded.
+ */
+
+showdown.subParser('encodeAmpsAndAngles', function (text) {
+ 'use strict'; // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
+ // http://bumppo.net/projects/amputator/
+
+ text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&'); // Encode naked <'s
+
+ text = text.replace(/<(?![a-z\/?\$!])/gi, '<');
+ return text;
+});
+/**
+ * Returns the string, with after processing the following backslash escape sequences.
+ *
+ * attacklab: The polite way to do this is with the new escapeCharacters() function:
+ *
+ * text = escapeCharacters(text,"\\",true);
+ * text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
+ *
+ * ...but we're sidestepping its use of the (slow) RegExp constructor
+ * as an optimization for Firefox. This function gets called a LOT.
+ */
+
+showdown.subParser('encodeBackslashEscapes', function (text) {
+ 'use strict';
+
+ text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback);
+ text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g, showdown.helper.escapeCharactersCallback);
+ return text;
+});
+/**
+ * Encode/escape certain characters inside Markdown code runs.
+ * The point is that in code, these characters are literals,
+ * and lose their special Markdown meanings.
+ */
+
+showdown.subParser('encodeCode', function (text) {
+ 'use strict'; // Encode all ampersands; HTML entities are not
+ // entities within a Markdown code span.
+
+ text = text.replace(/&/g, '&'); // Do the angle bracket song and dance:
+
+ text = text.replace(//g, '>'); // Now, escape characters that are magic in Markdown:
+
+ text = showdown.helper.escapeCharacters(text, '*_{}[]\\', false); // jj the line above breaks this:
+ //---
+ //* Item
+ // 1. Subitem
+ // special char: *
+ // ---
+
+ return text;
+});
+/**
+ * Input: an email address, e.g. "foo@example.com"
+ *
+ * Output: the email address as a mailto link, with each character
+ * of the address encoded as either a decimal or hex entity, in
+ * the hopes of foiling most address harvesting spam bots. E.g.:
+ *
+ * foo
+ * @example.com
+ *
+ * Based on a filter by Matthew Wickline, posted to the BBEdit-Talk
+ * mailing list:
+ *
+ */
+
+showdown.subParser('encodeEmailAddress', function (addr) {
+ 'use strict';
+
+ var encode = [
+ function (ch) {
+ return '' + ch.charCodeAt(0) + ';';
+ },
+ function (ch) {
+ return '' + ch.charCodeAt(0).toString(16) + ';';
+ },
+ function (ch) {
+ return ch;
+ }
+ ];
+ addr = 'mailto:' + addr;
+ addr = addr.replace(/./g, function (ch) {
+ if (ch === '@') {
+ // this *must* be encoded. I insist.
+ ch = encode[Math.floor(Math.random() * 2)](ch);
+ } else {
+ if (ch !== ':') {
+ // leave ':' alone (to spot mailto: later)
+ var r = Math.random(); // roughly 10% raw, 45% hex, 45% dec
+
+ if (r > 0.9) {
+ ch = encode[2](ch);
+ } else {
+ if (r > 0.45) {
+ ch = encode[1](ch);
+ } else {
+ ch = encode[0](ch);
+ }
+ }
+ }
+ }
+
+ return ch;
+ });
+ addr = '' + addr + '';
+ addr = addr.replace(/">.+:/g, '">'); // strip the mailto: from the visible part
+
+ return addr;
+});
+/**
+ * Within tags -- meaning between < and > -- encode [\ ` * _] so they
+ * don't conflict with their use in Markdown for code, italics and strong.
+ */
+
+showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text) {
+ 'use strict'; // Build a regex to find HTML tags and comments. See Friedl's
+ // "Mastering Regular Expressions", 2nd Ed., pp. 200-201.
+
+ var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi;
+ text = text.replace(regex, function (wholeMatch) {
+ var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g, '$1`');
+ tag = showdown.helper.escapeCharacters(tag, '\\`*_', false);
+ return tag;
+ });
+ return text;
+});
+/**
+ * Handle github codeblocks prior to running HashHTML so that
+ * HTML contained within the codeblock gets escaped properly
+ * Example:
+ * ```ruby
+ * def hello_world(x)
+ * puts "Hello, #{x}"
+ * end
+ * ```
+ */
+
+showdown.subParser('githubCodeBlocks', function (text, options, globals) {
+ 'use strict'; // early exit if option is not enabled
+
+ if (!options.ghCodeBlocks) {
+ return text;
+ }
+
+ text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);
+ text += '~0';
+ text = text.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g, function (wholeMatch, language, codeblock) {
+ var end = options.omitExtraWLInCodeBlocks ? '' : '\n'; // First parse the github code block
+
+ codeblock = showdown.subParser('encodeCode')(codeblock);
+ codeblock = showdown.subParser('detab')(codeblock);
+ codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
+
+ codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace
+
+ codeblock = '' + codeblock + end + '
';
+ codeblock = showdown.subParser('hashBlock')(codeblock, options, globals); // Since GHCodeblocks can be false positives, we need to
+ // store the primitive text and the parsed text in a global var,
+ // and then return a token
+
+ return (
+ '\n\n~G' +
+ (globals.ghCodeBlocks.push({
+ text: wholeMatch,
+ codeblock: codeblock
+ }) -
+ 1) +
+ 'G\n\n'
+ );
+ }); // attacklab: strip sentinel
+
+ text = text.replace(/~0/, '');
+ return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);
+});
+showdown.subParser('hashBlock', function (text, options, globals) {
+ 'use strict';
+
+ text = text.replace(/(^\n+|\n+$)/g, '');
+ return '\n\n~K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n';
+});
+showdown.subParser('hashElement', function (text, options, globals) {
+ 'use strict';
+
+ return function (wholeMatch, m1) {
+ var blockText = m1; // Undo double lines
+
+ blockText = blockText.replace(/\n\n/g, '\n');
+ blockText = blockText.replace(/^\n/, ''); // strip trailing blank lines
+
+ blockText = blockText.replace(/\n+$/g, ''); // Replace the element text with a marker ("~KxK" where x is its key)
+
+ blockText = '\n\n~K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n';
+ return blockText;
+ };
+});
+showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
+ 'use strict';
+
+ var blockTags = [
+ 'pre',
+ 'div',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'blockquote',
+ 'table',
+ 'dl',
+ 'ol',
+ 'ul',
+ 'script',
+ 'noscript',
+ 'form',
+ 'fieldset',
+ 'iframe',
+ 'math',
+ 'style',
+ 'section',
+ 'header',
+ 'footer',
+ 'nav',
+ 'article',
+ 'aside',
+ 'address',
+ 'audio',
+ 'canvas',
+ 'figure',
+ 'hgroup',
+ 'output',
+ 'video',
+ 'p'
+ ];
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ var txt = wholeMatch; // check if this html element is marked as markdown
+ // if so, it's contents should be parsed as markdown
+
+ if (left.search(/\bmarkdown\b/) !== -1) {
+ txt = left + globals.converter.makeHtml(match) + right;
+ }
+
+ return '\n\n~K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
+ };
+
+ for (var i = 0; i < blockTags.length; ++i) {
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\t){0,3}<' + blockTags[i] + '\\b[^>]*>', '' + blockTags[i] + '>', 'gim');
+ } // HR SPECIAL CASE
+
+ text = text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g, showdown.subParser('hashElement')(text, options, globals)); // Special case for standalone HTML comments:
+
+ text = text.replace(/()/g, showdown.subParser('hashElement')(text, options, globals)); // PHP and ASP-style processor instructions (...?> and <%...%>)
+
+ text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, showdown.subParser('hashElement')(text, options, globals));
+ return text;
+});
+/**
+ * Hash span elements that should not be parsed as markdown
+ */
+
+showdown.subParser('hashHTMLSpans', function (text, config, globals) {
+ 'use strict';
+
+ var matches = showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');
+
+ for (var i = 0; i < matches.length; ++i) {
+ text = text.replace(matches[i][0], '~L' + (globals.gHtmlSpans.push(matches[i][0]) - 1) + 'L');
+ }
+
+ return text;
+});
+/**
+ * Unhash HTML spans
+ */
+
+showdown.subParser('unhashHTMLSpans', function (text, config, globals) {
+ 'use strict';
+
+ for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
+ text = text.replace('~L' + i + 'L', globals.gHtmlSpans[i]);
+ }
+
+ return text;
+});
+/**
+ * Hash span elements that should not be parsed as markdown
+ */
+
+showdown.subParser('hashPreCodeTags', function (text, config, globals) {
+ 'use strict';
+
+ var repFunc = function (wholeMatch, match, left, right) {
+ // encode html entities
+ var codeblock = left + showdown.subParser('encodeCode')(match) + right;
+ return (
+ '\n\n~G' +
+ (globals.ghCodeBlocks.push({
+ text: wholeMatch,
+ codeblock: codeblock
+ }) -
+ 1) +
+ 'G\n\n'
+ );
+ };
+
+ text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\t){0,3}]*>\\s*]*>', '^(?: |\\t){0,3}\\s*
', 'gim');
+ return text;
+});
+showdown.subParser('headers', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('headers.before', text, options, globals);
+ var prefixHeader = options.prefixHeaderId;
+ var headerLevelStart = isNaN(parseInt(options.headerLevelStart)) ? 1 : parseInt(options.headerLevelStart);
+ var // Set text-style headers:
+ // Header 1
+ // ========
+ //
+ // Header 2
+ // --------
+ //
+ setextRegexH1 = options.smoothLivePreview ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm;
+ var setextRegexH2 = options.smoothLivePreview ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
+ text = text.replace(setextRegexH1, function (wholeMatch, m1) {
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals);
+ var hID = options.noHeaderId ? '' : ' id="' + headerId(m1) + '"';
+ var hLevel = headerLevelStart;
+ var hashBlock = '' + spanGamut + ' ';
+ return showdown.subParser('hashBlock')(hashBlock, options, globals);
+ });
+ text = text.replace(setextRegexH2, function (matchFound, m1) {
+ var spanGamut = showdown.subParser('spanGamut')(m1, options, globals);
+ var hID = options.noHeaderId ? '' : ' id="' + headerId(m1) + '"';
+ var hLevel = headerLevelStart + 1;
+ var hashBlock = '' + spanGamut + ' ';
+ return showdown.subParser('hashBlock')(hashBlock, options, globals);
+ }); // atx-style headers:
+ // # Header 1
+ // ## Header 2
+ // ## Header 2 with closing hashes ##
+ // ...
+ // ###### Header 6
+ //
+
+ text = text.replace(/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm, function (wholeMatch, m1, m2) {
+ var span = showdown.subParser('spanGamut')(m2, options, globals);
+ var hID = options.noHeaderId ? '' : ' id="' + headerId(m2) + '"';
+ var hLevel = headerLevelStart - 1 + m1.length;
+ var header = '' + span + ' ';
+ return showdown.subParser('hashBlock')(header, options, globals);
+ });
+
+ function headerId(m) {
+ var title;
+ var escapedId = m.replace(/[^\w]/g, '').toLowerCase();
+ if (globals.hashLinkCounts[escapedId]) {
+ title = escapedId + '-' + globals.hashLinkCounts[escapedId]++;
+ } else {
+ title = escapedId;
+ globals.hashLinkCounts[escapedId] = 1;
+ } // Prefix id to prevent causing inadvertent pre-existing style matches.
+
+ if (prefixHeader === true) {
+ prefixHeader = 'section';
+ }
+
+ if (showdown.helper.isString(prefixHeader)) {
+ return prefixHeader + title;
+ }
+
+ return title;
+ }
+
+ text = globals.converter._dispatch('headers.after', text, options, globals);
+ return text;
+});
+/**
+ * Turn Markdown image shortcuts into
tags.
+ */
+
+showdown.subParser('images', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('images.before', text, options, globals);
+ var inlineRegExp = /!\[(.*?)]\s?\([ \t]*()(\S+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(['"])(.*?)\6[ \t]*)?\)/g;
+ var referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[(.*?)]()()()()()/g;
+ function writeImageTag(wholeMatch, altText, linkId, url, width, height, m5, title) {
+ var gUrls = globals.gUrls;
+ var gTitles = globals.gTitles;
+ var gDims = globals.gDimensions;
+ linkId = linkId.toLowerCase();
+
+ if (!title) {
+ title = '';
+ }
+
+ if (url === '' || url === null) {
+ if (linkId === '' || linkId === null) {
+ // lower-case and turn embedded newlines into spaces
+ linkId = altText.toLowerCase().replace(/ ?\n/g, ' ');
+ }
+
+ url = '#' + linkId;
+
+ if (!showdown.helper.isUndefined(gUrls[linkId])) {
+ url = gUrls[linkId];
+
+ if (!showdown.helper.isUndefined(gTitles[linkId])) {
+ title = gTitles[linkId];
+ }
+
+ if (!showdown.helper.isUndefined(gDims[linkId])) {
+ width = gDims[linkId].width;
+ height = gDims[linkId].height;
+ }
+ } else {
+ return wholeMatch;
+ }
+ }
+
+ altText = altText.replace(/"/g, '"');
+ altText = showdown.helper.escapeCharacters(altText, '*_', false);
+ url = showdown.helper.escapeCharacters(url, '*_', false);
+ var result = '
';
+ return result;
+ } // First, handle reference-style labeled images: ![alt text][id]
+
+ text = text.replace(referenceRegExp, writeImageTag); // Next, handle inline images: 
+
+ text = text.replace(inlineRegExp, writeImageTag);
+ text = globals.converter._dispatch('images.after', text, options, globals);
+ return text;
+});
+showdown.subParser('italicsAndBold', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);
+
+ if (options.literalMidWordUnderscores) {
+ //underscores
+ // Since we are consuming a \s character, we need to add it
+ text = text.replace(/(^|\s|>|\b)__(?=\S)([\s\S]+?)__(?=\b|<|\s|$)/gm, '$1$2');
+ text = text.replace(/(^|\s|>|\b)_(?=\S)([\s\S]+?)_(?=\b|<|\s|$)/gm, '$1$2'); //asterisks
+
+ text = text.replace(/(\*\*)(?=\S)([^\r]*?\S[*]*)\1/g, '$2');
+ text = text.replace(/(\*)(?=\S)([^\r]*?\S)\1/g, '$2');
+ } else {
+ // must go first:
+ text = text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g, '$2');
+ text = text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g, '$2');
+ }
+
+ text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);
+ return text;
+});
+/**
+ * Form HTML ordered (numbered) and unordered (bulleted) lists.
+ */
+
+showdown.subParser('lists', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('lists.before', text, options, globals);
+ /**
+ * Process the contents of a single ordered or unordered list, splitting it
+ * into individual list items.
+ * @param {string} listStr
+ * @param {boolean} trimTrailing
+ * @returns {string}
+ */
+
+ function processListItems(listStr, trimTrailing) {
+ // The $g_list_level global keeps track of when we're inside a list.
+ // Each time we enter a list, we increment it; when we leave a list,
+ // we decrement. If it's zero, we're not in a list anymore.
+ //
+ // We do this because when we're not inside a list, we want to treat
+ // something like this:
+ //
+ // I recommend upgrading to version
+ // 8. Oops, now this line is treated
+ // as a sub-list.
+ //
+ // As a single paragraph, despite the fact that the second line starts
+ // with a digit-period-space sequence.
+ //
+ // Whereas when we're inside a list (or sub-list), that line will be
+ // treated as the start of a sub-list. What a kludge, huh? This is
+ // an aspect of Markdown's syntax that's hard to parse perfectly
+ // without resorting to mind-reading. Perhaps the solution is to
+ // change the syntax rules such that sub-lists must start with a
+ // starting cardinal number; e.g. "1." or "a.".
+ globals.gListLevel++; // trim trailing blank lines:
+
+ listStr = listStr.replace(/\n{2,}$/, '\n'); // attacklab: add sentinel to emulate \z
+
+ listStr += '~0';
+ var rgx = /(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm;
+ var isParagraphed = /\n[ \t]*\n(?!~0)/.test(listStr);
+ listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {
+ checked = checked && checked.trim() !== '';
+ var item = showdown.subParser('outdent')(m4, options, globals);
+ var bulletStyle = ''; // Support for github tasklists
+ if (taskbtn && options.tasklists) {
+ bulletStyle = ' class="task-list-item" style="list-style-type: none;"';
+ item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () {
+ var otp = '';
+ return otp;
+ });
+ } // m1 - Leading line or
+ // Has a double return (multi paragraph) or
+ // Has sublist
+
+ if (m1 || item.search(/\n{2,}/) > -1) {
+ item = showdown.subParser('githubCodeBlocks')(item, options, globals);
+ item = showdown.subParser('blockGamut')(item, options, globals);
+ } else {
+ // Recursion for sub-lists:
+ item = showdown.subParser('lists')(item, options, globals);
+ item = item.replace(/\n$/, ''); // chomp(item)
+
+ if (isParagraphed) {
+ item = showdown.subParser('paragraphs')(item, options, globals);
+ } else {
+ item = showdown.subParser('spanGamut')(item, options, globals);
+ }
+ }
+
+ item = '\n' + item + ' \n';
+ return item;
+ }); // attacklab: strip sentinel
+
+ listStr = listStr.replace(/~0/g, '');
+ globals.gListLevel--;
+
+ if (trimTrailing) {
+ listStr = listStr.replace(/\s+$/, '');
+ }
+
+ return listStr;
+ }
+ /**
+ * Check and parse consecutive lists (better fix for issue #142)
+ * @param {string} list
+ * @param {string} listType
+ * @param {boolean} trimTrailing
+ * @returns {string}
+ */
+
+ function parseConsecutiveLists(list, listType, trimTrailing) {
+ var counterRxg = listType === 'ul' ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm;
+ var subLists = [];
+ var result = '';
+ // check if we caught 2 or more consecutive lists by mistake
+ // we use the counterRgx, meaning if listType is UL we look for UL and vice versa
+ if (list.search(counterRxg) !== -1) {
+ (function parseCL(txt) {
+ var pos = txt.search(counterRxg);
+
+ if (pos !== -1) {
+ // slice
+ result += '\n\n<' + listType + '>' + processListItems(txt.slice(0, pos), !!trimTrailing) + '' + listType + '>\n\n'; // invert counterType and listType
+
+ if (listType === 'ul') {
+ listType = 'ol';
+ } else {
+ listType = 'ul';
+ }
+
+ if (listType === 'ul') {
+ counterRxg = /^ {0,2}\d+\.[ \t]/gm;
+ } else {
+ counterRxg = /^ {0,2}[*+-][ \t]/gm;
+ } //recurse
+
+ parseCL(txt.slice(pos));
+ } else {
+ result += '\n\n<' + listType + '>' + processListItems(txt, !!trimTrailing) + '' + listType + '>\n\n';
+ }
+ })(list);
+
+ for (var i = 0; i < subLists.length; ++i) {}
+ } else {
+ result = '\n\n<' + listType + '>' + processListItems(list, !!trimTrailing) + '' + listType + '>\n\n';
+ }
+
+ return result;
+ } // attacklab: add sentinel to hack around khtml/safari bug:
+ // http://bugs.webkit.org/show_bug.cgi?id=11231
+
+ text += '~0'; // Re-usable pattern to match any entire ul or ol list:
+
+ var wholeList = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;
+
+ if (globals.gListLevel) {
+ text = text.replace(wholeList, function (wholeMatch, list, m2) {
+ var listType = m2.search(/[*+-]/g) > -1 ? 'ul' : 'ol';
+ return parseConsecutiveLists(list, listType, true);
+ });
+ } else {
+ wholeList = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm; //wholeList = /(\n\n|^\n?)( {0,3}([*+-]|\d+\.)[ \t]+[\s\S]+?)(?=(~0)|(\n\n(?!\t| {2,}| {0,3}([*+-]|\d+\.)[ \t])))/g;
+
+ text = text.replace(wholeList, function (wholeMatch, m1, list, m3) {
+ var listType = m3.search(/[*+-]/g) > -1 ? 'ul' : 'ol';
+ return parseConsecutiveLists(list, listType);
+ });
+ } // attacklab: strip sentinel
+
+ text = text.replace(/~0/, '');
+ text = globals.converter._dispatch('lists.after', text, options, globals);
+ return text;
+});
+/**
+ * Remove one level of line-leading tabs or spaces
+ */
+
+showdown.subParser('outdent', function (text) {
+ 'use strict'; // attacklab: hack around Konqueror 3.5.4 bug:
+ // "----------bug".replace(/^-/g,"") == "bug"
+
+ text = text.replace(/^(\t|[ ]{1,4})/gm, '~0'); // attacklab: g_tab_width
+ // attacklab: clean up hack
+
+ text = text.replace(/~0/g, '');
+ return text;
+});
+/**
+ *
+ */
+
+showdown.subParser('paragraphs', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('paragraphs.before', text, options, globals); // Strip leading and trailing lines:
+
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+ var grafs = text.split(/\n{2,}/g);
+ var grafsOut = [];
+ var end = grafs.length; // Wrap tags
+ for (var i = 0; i < end; i++) {
+ var str = grafs[i]; // if this is an HTML marker, copy it
+
+ if (str.search(/~(K|G)(\d+)\1/g) >= 0) {
+ grafsOut.push(str);
+ } else {
+ str = showdown.subParser('spanGamut')(str, options, globals);
+ str = str.replace(/^([ \t]*)/g, '
');
+ str += '
';
+ grafsOut.push(str);
+ }
+ }
+ /** Unhashify HTML blocks */
+
+ end = grafsOut.length;
+
+ for (i = 0; i < end; i++) {
+ var blockText = '';
+ var grafsOutIt = grafsOut[i];
+ var codeFlag = false; // if this is a marker for an html block...
+ while (grafsOutIt.search(/~(K|G)(\d+)\1/) >= 0) {
+ var delim = RegExp.$1;
+ var num = RegExp.$2;
+ if (delim === 'K') {
+ blockText = globals.gHtmlBlocks[num];
+ } else {
+ // we need to check if ghBlock is a false positive
+ if (codeFlag) {
+ // use encoded version of all text
+ blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text);
+ } else {
+ blockText = globals.ghCodeBlocks[num].codeblock;
+ }
+ }
+
+ blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs
+
+ grafsOutIt = grafsOutIt.replace(/(\n\n)?~(K|G)\d+\2(\n\n)?/, blockText); // Check if grafsOutIt is a pre->code
+
+ if (/^]*>\s*]*>/.test(grafsOutIt)) {
+ codeFlag = true;
+ }
+ }
+
+ grafsOut[i] = grafsOutIt;
+ }
+
+ text = grafsOut.join('\n\n'); // Strip leading and trailing lines:
+
+ text = text.replace(/^\n+/g, '');
+ text = text.replace(/\n+$/g, '');
+ return globals.converter._dispatch('paragraphs.after', text, options, globals);
+});
+/**
+ * Run extension
+ */
+
+showdown.subParser('runExtension', function (ext, text, options, globals) {
+ 'use strict';
+
+ if (ext.filter) {
+ text = ext.filter(text, globals.converter, options);
+ } else {
+ if (ext.regex) {
+ // TODO remove this when old extension loading mechanism is deprecated
+ var re = ext.regex;
+
+ if (!re instanceof RegExp) {
+ re = new RegExp(re, 'g');
+ }
+
+ text = text.replace(re, ext.replace);
+ }
+ }
+
+ return text;
+});
+/**
+ * These are all the transformations that occur *within* block-level
+ * tags like paragraphs, headers, and list items.
+ */
+
+showdown.subParser('spanGamut', function (text, options, globals) {
+ 'use strict';
+
+ text = globals.converter._dispatch('spanGamut.before', text, options, globals);
+ text = showdown.subParser('codeSpans')(text, options, globals);
+ text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);
+ text = showdown.subParser('encodeBackslashEscapes')(text, options, globals); // Process anchor and image tags. Images must come first,
+ // because ![foo][f] looks like an anchor.
+
+ text = showdown.subParser('images')(text, options, globals);
+ text = showdown.subParser('anchors')(text, options, globals); // Make links out of things like ` `
+ // Must come after _DoAnchors(), because you can use < and >
+ // delimiters in inline links like [this]().
+
+ text = showdown.subParser('autoLinks')(text, options, globals);
+ text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);
+ text = showdown.subParser('italicsAndBold')(text, options, globals);
+ text = showdown.subParser('strikethrough')(text, options, globals); // Do hard breaks:
+
+ text = text.replace(/ +\n/g, '
\n');
+ text = globals.converter._dispatch('spanGamut.after', text, options, globals);
+ return text;
+});
+showdown.subParser('strikethrough', function (text, options, globals) {
+ 'use strict';
+
+ if (options.strikethrough) {
+ text = globals.converter._dispatch('strikethrough.before', text, options, globals);
+ text = text.replace(/(?:~T){2}([\s\S]+?)(?:~T){2}/g, '$1');
+ text = globals.converter._dispatch('strikethrough.after', text, options, globals);
+ }
+
+ return text;
+});
+/**
+ * Strip any lines consisting only of spaces and tabs.
+ * This makes subsequent regexs easier to write, because we can
+ * match consecutive blank lines with /\n+/ instead of something
+ * contorted like /[ \t]*\n+/
+ */
+
+showdown.subParser('stripBlankLines', function (text) {
+ 'use strict';
+
+ return text.replace(/^[ \t]+$/gm, '');
+});
+/**
+ * Strips link definitions from text, stores the URLs and titles in
+ * hash references.
+ * Link defs are in the form: ^[id]: url "optional title"
+ *
+ * ^[ ]{0,3}\[(.+)\]: // id = $1 attacklab: g_tab_width - 1
+ * [ \t]*
+ * \n? // maybe *one* newline
+ * [ \t]*
+ * (\S+?)>? // url = $2
+ * [ \t]*
+ * \n? // maybe one newline
+ * [ \t]*
+ * (?:
+ * (\n*) // any lines skipped = $3 attacklab: lookbehind removed
+ * ["(]
+ * (.+?) // title = $4
+ * [")]
+ * [ \t]*
+ * )? // title is optional
+ * (?:\n+|$)
+ * /gm,
+ * function(){...});
+ *
+ */
+
+showdown.subParser('stripLinkDefinitions', function (text, options, globals) {
+ 'use strict';
+
+ var regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*(\S+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=~0))/gm; // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
+
+ text += '~0';
+ text = text.replace(regex, function (wholeMatch, linkId, url, width, height, blankLines, title) {
+ linkId = linkId.toLowerCase();
+ globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url); // Link IDs are case-insensitive
+
+ if (blankLines) {
+ // Oops, found blank lines, so it's not a title.
+ // Put back the parenthetical statement we stole.
+ return blankLines + title;
+ } else {
+ if (title) {
+ globals.gTitles[linkId] = title.replace(/"|'/g, '"');
+ }
+
+ if (options.parseImgDimensions && width && height) {
+ globals.gDimensions[linkId] = {
+ width: width,
+ height: height
+ };
+ }
+ } // Completely remove the definition from the text
+
+ return '';
+ }); // attacklab: strip sentinel
+
+ text = text.replace(/~0/, '');
+ return text;
+});
+showdown.subParser('tables', function (text, options, globals) {
+ 'use strict';
+
+ if (!options.tables) {
+ return text;
+ }
+
+ var tableRgx = /^[ \t]{0,3}\|?.+\|.+\n[ \t]{0,3}\|?[ \t]*:?[ \t]*(?:-|=){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:-|=){2,}[\s\S]+?(?:\n\n|~0)/gm;
+
+ function parseStyles(sLine) {
+ if (/^:[ \t]*--*$/.test(sLine)) {
+ return ' style="text-align:left;"';
+ } else {
+ if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
+ return ' style="text-align:right;"';
+ } else {
+ if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
+ return ' style="text-align:center;"';
+ } else {
+ return '';
+ }
+ }
+ }
+ }
+
+ function parseHeaders(header, style) {
+ var id = '';
+ header = header.trim();
+
+ if (options.tableHeaderId) {
+ id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"';
+ }
+
+ header = showdown.subParser('spanGamut')(header, options, globals);
+ return '' + header + ' \n';
+ }
+
+ function parseCells(cell, style) {
+ var subText = showdown.subParser('spanGamut')(cell, options, globals);
+ return '' + subText + ' \n';
+ }
+
+ function buildTable(headers, cells) {
+ var tb = '\n\n\n';
+ var tblLgn = headers.length;
+ for (var i = 0; i < tblLgn; ++i) {
+ tb += headers[i];
+ }
+
+ tb += ' \n\n\n';
+
+ for (i = 0; i < cells.length; ++i) {
+ tb += '\n';
+
+ for (var ii = 0; ii < tblLgn; ++ii) {
+ tb += cells[i][ii];
+ }
+
+ tb += ' \n';
+ }
+
+ tb += '\n
\n';
+ return tb;
+ }
+
+ text = globals.converter._dispatch('tables.before', text, options, globals);
+ text = text.replace(tableRgx, function (rawTable) {
+ var i;
+ var tableLines = rawTable.split('\n'); // strip wrong first and last column if wrapped tables are used
+ for (i = 0; i < tableLines.length; ++i) {
+ if (/^[ \t]{0,3}\|/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/^[ \t]{0,3}\|/, '');
+ }
+
+ if (/\|[ \t]*$/.test(tableLines[i])) {
+ tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, '');
+ }
+ }
+
+ var rawHeaders = tableLines[0].split('|').map(function (s) {
+ return s.trim();
+ });
+ var rawStyles = tableLines[1].split('|').map(function (s) {
+ return s.trim();
+ });
+ var rawCells = [];
+ var headers = [];
+ var styles = [];
+ var cells = [];
+ tableLines.shift();
+ tableLines.shift();
+
+ for (i = 0; i < tableLines.length; ++i) {
+ if (tableLines[i].trim() === '') {
+ continue;
+ }
+
+ rawCells.push(
+ tableLines[i].split('|').map(function (s) {
+ return s.trim();
+ })
+ );
+ }
+
+ if (rawHeaders.length < rawStyles.length) {
+ return rawTable;
+ }
+
+ for (i = 0; i < rawStyles.length; ++i) {
+ styles.push(parseStyles(rawStyles[i]));
+ }
+
+ for (i = 0; i < rawHeaders.length; ++i) {
+ if (showdown.helper.isUndefined(styles[i])) {
+ styles[i] = '';
+ }
+
+ headers.push(parseHeaders(rawHeaders[i], styles[i]));
+ }
+
+ for (i = 0; i < rawCells.length; ++i) {
+ var row = [];
+
+ for (var ii = 0; ii < headers.length; ++ii) {
+ if (showdown.helper.isUndefined(rawCells[i][ii])) {
+ }
+
+ row.push(parseCells(rawCells[i][ii], styles[ii]));
+ }
+
+ cells.push(row);
+ }
+
+ return buildTable(headers, cells);
+ });
+ text = globals.converter._dispatch('tables.after', text, options, globals);
+ return text;
+});
+/**
+ * Swap back in all the special characters we've hidden.
+ */
+
+showdown.subParser('unescapeSpecialChars', function (text) {
+ 'use strict';
+
+ text = text.replace(/~E(\d+)E/g, function (wholeMatch, m1) {
+ var charCodeToReplace = parseInt(m1);
+ return String.fromCharCode(charCodeToReplace);
+ });
+ return text;
+});
+module.exports = showdown;
diff --git a/litemall-wx_uni/lib/wxParse/wxDiscode.js b/litemall-wx_uni/lib/wxParse/wxDiscode.js
new file mode 100644
index 00000000..575513f3
--- /dev/null
+++ b/litemall-wx_uni/lib/wxParse/wxDiscode.js
@@ -0,0 +1,196 @@
+// HTML 支持的数学符号
+function strNumDiscode(str) {
+ str = str.replace(/∀/g, '∀');
+ str = str.replace(/∂/g, '∂');
+ str = str.replace(/&exists;/g, '∃');
+ str = str.replace(/∅/g, '∅');
+ str = str.replace(/∇/g, '∇');
+ str = str.replace(/∈/g, '∈');
+ str = str.replace(/∉/g, '∉');
+ str = str.replace(/∋/g, '∋');
+ str = str.replace(/∏/g, '∏');
+ str = str.replace(/∑/g, '∑');
+ str = str.replace(/−/g, '−');
+ str = str.replace(/∗/g, '∗');
+ str = str.replace(/√/g, '√');
+ str = str.replace(/∝/g, '∝');
+ str = str.replace(/∞/g, '∞');
+ str = str.replace(/∠/g, '∠');
+ str = str.replace(/∧/g, '∧');
+ str = str.replace(/∨/g, '∨');
+ str = str.replace(/∩/g, '∩');
+ str = str.replace(/∩/g, '∪');
+ str = str.replace(/∫/g, '∫');
+ str = str.replace(/∴/g, '∴');
+ str = str.replace(/∼/g, '∼');
+ str = str.replace(/≅/g, '≅');
+ str = str.replace(/≈/g, '≈');
+ str = str.replace(/≠/g, '≠');
+ str = str.replace(/≤/g, '≤');
+ str = str.replace(/≥/g, '≥');
+ str = str.replace(/⊂/g, '⊂');
+ str = str.replace(/⊃/g, '⊃');
+ str = str.replace(/⊄/g, '⊄');
+ str = str.replace(/⊆/g, '⊆');
+ str = str.replace(/⊇/g, '⊇');
+ str = str.replace(/⊕/g, '⊕');
+ str = str.replace(/⊗/g, '⊗');
+ str = str.replace(/⊥/g, '⊥');
+ str = str.replace(/⋅/g, '⋅');
+ return str;
+} //HTML 支持的希腊字母
+
+function strGreeceDiscode(str) {
+ str = str.replace(/Α/g, 'Α');
+ str = str.replace(/Β/g, 'Β');
+ str = str.replace(/Γ/g, 'Γ');
+ str = str.replace(/Δ/g, 'Δ');
+ str = str.replace(/Ε/g, 'Ε');
+ str = str.replace(/Ζ/g, 'Ζ');
+ str = str.replace(/Η/g, 'Η');
+ str = str.replace(/Θ/g, 'Θ');
+ str = str.replace(/Ι/g, 'Ι');
+ str = str.replace(/Κ/g, 'Κ');
+ str = str.replace(/Λ/g, 'Λ');
+ str = str.replace(/Μ/g, 'Μ');
+ str = str.replace(/Ν/g, 'Ν');
+ str = str.replace(/Ξ/g, 'Ν');
+ str = str.replace(/Ο/g, 'Ο');
+ str = str.replace(/Π/g, 'Π');
+ str = str.replace(/Ρ/g, 'Ρ');
+ str = str.replace(/Σ/g, 'Σ');
+ str = str.replace(/Τ/g, 'Τ');
+ str = str.replace(/Υ/g, 'Υ');
+ str = str.replace(/Φ/g, 'Φ');
+ str = str.replace(/Χ/g, 'Χ');
+ str = str.replace(/Ψ/g, 'Ψ');
+ str = str.replace(/Ω/g, 'Ω');
+ str = str.replace(/α/g, 'α');
+ str = str.replace(/β/g, 'β');
+ str = str.replace(/γ/g, 'γ');
+ str = str.replace(/δ/g, 'δ');
+ str = str.replace(/ε/g, 'ε');
+ str = str.replace(/ζ/g, 'ζ');
+ str = str.replace(/η/g, 'η');
+ str = str.replace(/θ/g, 'θ');
+ str = str.replace(/ι/g, 'ι');
+ str = str.replace(/κ/g, 'κ');
+ str = str.replace(/λ/g, 'λ');
+ str = str.replace(/μ/g, 'μ');
+ str = str.replace(/ν/g, 'ν');
+ str = str.replace(/ξ/g, 'ξ');
+ str = str.replace(/ο/g, 'ο');
+ str = str.replace(/π/g, 'π');
+ str = str.replace(/ρ/g, 'ρ');
+ str = str.replace(/ς/g, 'ς');
+ str = str.replace(/σ/g, 'σ');
+ str = str.replace(/τ/g, 'τ');
+ str = str.replace(/υ/g, 'υ');
+ str = str.replace(/φ/g, 'φ');
+ str = str.replace(/χ/g, 'χ');
+ str = str.replace(/ψ/g, 'ψ');
+ str = str.replace(/ω/g, 'ω');
+ str = str.replace(/ϑ/g, 'ϑ');
+ str = str.replace(/ϒ/g, 'ϒ');
+ str = str.replace(/ϖ/g, 'ϖ');
+ str = str.replace(/·/g, '·');
+ return str;
+} //
+
+function strcharacterDiscode(str) {
+ // 加入常用解析
+ str = str.replace(/ /g, ' ');
+ str = str.replace(/"/g, '"');
+ str = str.replace(/&/g, '&'); // str = str.replace(/</g, '‹');
+ // str = str.replace(/>/g, '›');
+
+ str = str.replace(/</g, '<');
+ str = str.replace(/>/g, '>');
+ return str;
+} // HTML 支持的其他实体
+
+function strOtherDiscode(str) {
+ str = str.replace(/Œ/g, 'Œ');
+ str = str.replace(/œ/g, 'œ');
+ str = str.replace(/Š/g, 'Š');
+ str = str.replace(/š/g, 'š');
+ str = str.replace(/Ÿ/g, 'Ÿ');
+ str = str.replace(/ƒ/g, 'ƒ');
+ str = str.replace(/ˆ/g, 'ˆ');
+ str = str.replace(/˜/g, '˜');
+ str = str.replace(/ /g, '');
+ str = str.replace(/ /g, '');
+ str = str.replace(/ /g, '');
+ str = str.replace(//g, '');
+ str = str.replace(//g, '');
+ str = str.replace(//g, '');
+ str = str.replace(//g, '');
+ str = str.replace(/–/g, '–');
+ str = str.replace(/—/g, '—');
+ str = str.replace(/‘/g, '‘');
+ str = str.replace(/’/g, '’');
+ str = str.replace(/‚/g, '‚');
+ str = str.replace(/“/g, '“');
+ str = str.replace(/”/g, '”');
+ str = str.replace(/„/g, '„');
+ str = str.replace(/†/g, '†');
+ str = str.replace(/‡/g, '‡');
+ str = str.replace(/•/g, '•');
+ str = str.replace(/…/g, '…');
+ str = str.replace(/‰/g, '‰');
+ str = str.replace(/′/g, '′');
+ str = str.replace(/″/g, '″');
+ str = str.replace(/‹/g, '‹');
+ str = str.replace(/›/g, '›');
+ str = str.replace(/‾/g, '‾');
+ str = str.replace(/€/g, '€');
+ str = str.replace(/™/g, '™');
+ str = str.replace(/←/g, '←');
+ str = str.replace(/↑/g, '↑');
+ str = str.replace(/→/g, '→');
+ str = str.replace(/↓/g, '↓');
+ str = str.replace(/↔/g, '↔');
+ str = str.replace(/↵/g, '↵');
+ str = str.replace(/⌈/g, '⌈');
+ str = str.replace(/⌉/g, '⌉');
+ str = str.replace(/⌊/g, '⌊');
+ str = str.replace(/⌋/g, '⌋');
+ str = str.replace(/◊/g, '◊');
+ str = str.replace(/♠/g, '♠');
+ str = str.replace(/♣/g, '♣');
+ str = str.replace(/♥/g, '♥');
+ str = str.replace(/♦/g, '♦');
+ return str;
+}
+
+function strMoreDiscode(str) {
+ str = str.replace(/\r\n/g, '');
+ str = str.replace(/\n/g, '');
+ str = str.replace(/code/g, 'wxxxcode-style');
+ return str;
+}
+
+function strDiscode(str) {
+ str = strNumDiscode(str);
+ str = strGreeceDiscode(str);
+ str = strcharacterDiscode(str);
+ str = strOtherDiscode(str);
+ str = strMoreDiscode(str);
+ return str;
+}
+
+function urlToHttpUrl(url, rep) {
+ var patt1 = new RegExp('^//');
+ var result = patt1.test(url);
+
+ if (result) {
+ url = rep + ':' + url;
+ }
+
+ return url;
+}
+
+module.exports = {
+ strDiscode: strDiscode,
+ urlToHttpUrl: urlToHttpUrl
+};
diff --git a/litemall-wx_uni/lib/wxParse/wxParse.css b/litemall-wx_uni/lib/wxParse/wxParse.css
new file mode 100644
index 00000000..95792c26
--- /dev/null
+++ b/litemall-wx_uni/lib/wxParse/wxParse.css
@@ -0,0 +1,262 @@
+/**
+ * author: Di (微信小程序开发工程师)
+ * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
+ * 垂直微信小程序开发交流社区
+ *
+ * github地址: https://github.com/icindy/wxParse
+ *
+ * for: 微信小程序富文本解析
+ * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184
+ */
+
+.wxParse {
+ margin: 0 5px;
+ font-family: Helvetica, sans-serif;
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.8;
+}
+view {
+ word-break: break-all;
+ overflow: auto;
+}
+.wxParse-inline {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+/*//标题 */
+.wxParse-div {
+ margin: 0;
+ padding: 0;
+}
+.wxParse-h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+.wxParse-h2 {
+ font-size: 1.5em;
+ margin: 0.75em 0;
+}
+.wxParse-h3 {
+ font-size: 1.17em;
+ margin: 0.83em 0;
+}
+.wxParse-h4 {
+ margin: 1.12em 0;
+}
+.wxParse-h5 {
+ font-size: 0.83em;
+ margin: 1.5em 0;
+}
+.wxParse-h6 {
+ font-size: 0.75em;
+ margin: 1.67em 0;
+}
+
+.wxParse-h1 {
+ font-size: 18px;
+ font-weight: 400;
+ margin-bottom: 0.9em;
+}
+.wxParse-h2 {
+ font-size: 16px;
+ font-weight: 400;
+ margin-bottom: 0.34em;
+}
+.wxParse-h3 {
+ font-weight: 400;
+ font-size: 15px;
+ margin-bottom: 0.34em;
+}
+.wxParse-h4 {
+ font-weight: 400;
+ font-size: 14px;
+ margin-bottom: 0.24em;
+}
+.wxParse-h5 {
+ font-weight: 400;
+ font-size: 13px;
+ margin-bottom: 0.14em;
+}
+.wxParse-h6 {
+ font-weight: 400;
+ font-size: 12px;
+ margin-bottom: 0.04em;
+}
+
+.wxParse-h1,
+.wxParse-h2,
+.wxParse-h3,
+.wxParse-h4,
+.wxParse-h5,
+.wxParse-h6,
+.wxParse-b,
+.wxParse-strong {
+ font-weight: bolder;
+}
+
+.wxParse-i,
+.wxParse-cite,
+.wxParse-em,
+.wxParse-var,
+.wxParse-address {
+ font-style: italic;
+}
+.wxParse-pre,
+.wxParse-tt,
+.wxParse-code,
+.wxParse-kbd,
+.wxParse-samp {
+ font-family: monospace;
+}
+.wxParse-pre {
+ white-space: pre;
+}
+.wxParse-big {
+ font-size: 1.17em;
+}
+.wxParse-small,
+.wxParse-sub,
+.wxParse-sup {
+ font-size: 0.83em;
+}
+.wxParse-sub {
+ vertical-align: sub;
+}
+.wxParse-sup {
+ vertical-align: super;
+}
+.wxParse-s,
+.wxParse-strike,
+.wxParse-del {
+ text-decoration: line-through;
+}
+/*wxparse-自定义个性化的css样式*/
+/*增加video的css样式*/
+.wxParse-strong,
+wxParse-s {
+ display: inline;
+}
+.wxParse-a {
+ color: deepskyblue;
+ word-break: break-all;
+ overflow: auto;
+}
+
+.wxParse-video {
+ text-align: center;
+ margin: 10px 0;
+}
+
+.wxParse-video-video {
+ width: 100%;
+}
+
+.wxParse-img {
+ background-color: #efefef;
+ overflow: hidden;
+ width: 40px;
+ height: 40px;
+}
+
+.wxParse-blockquote {
+ margin: 0;
+ padding: 10px 0 10px 5px;
+ font-family: Courier, Calibri, '宋体';
+ background: #f5f5f5;
+ border-left: 3px solid #dbdbdb;
+}
+
+.wxParse-code,
+.wxParse-wxxxcode-style {
+ display: inline;
+ background: #f5f5f5;
+}
+.wxParse-ul {
+ margin: 20rpx 10rpx;
+}
+
+.wxParse-li,
+.wxParse-li-inner {
+ display: flex;
+ align-items: baseline;
+ margin: 10rpx 0;
+}
+.wxParse-li-text {
+ align-items: center;
+ line-height: 20px;
+}
+
+.wxParse-li-circle {
+ display: inline-flex;
+ width: 5px;
+ height: 5px;
+ background-color: #333;
+ margin-right: 5px;
+}
+
+.wxParse-li-square {
+ display: inline-flex;
+ width: 10rpx;
+ height: 10rpx;
+ background-color: #333;
+ margin-right: 5px;
+}
+.wxParse-li-ring {
+ display: inline-flex;
+ width: 10rpx;
+ height: 10rpx;
+ border: 2rpx solid #333;
+ border-radius: 50%;
+ background-color: #fff;
+ margin-right: 5px;
+}
+
+/*.wxParse-table{
+ width: 100%;
+ height: 400px;
+}
+.wxParse-thead,.wxParse-tfoot,.wxParse-tr{
+ display: flex;
+ flex-direction: row;
+}
+.wxParse-th,.wxParse-td{
+ display: flex;
+ width: 580px;
+ overflow: auto;
+}*/
+
+.wxParse-u {
+ text-decoration: underline;
+}
+.wxParse-hide {
+ display: none;
+}
+.WxEmojiView {
+ align-items: center;
+}
+.wxEmoji {
+ width: 16px;
+ height: 16px;
+}
+.wxParse-tr {
+ display: flex;
+ border-right: 1px solid #e0e0e0;
+ border-bottom: 1px solid #e0e0e0;
+}
+.wxParse-th,
+.wxParse-td {
+ flex: 1;
+ padding: 5px;
+ font-size: 28rpx;
+ border-left: 1px solid #e0e0e0;
+ word-break: break-all;
+}
+.wxParse-td:last {
+ border-top: 1px solid #e0e0e0;
+}
+.wxParse-th {
+ background: #f0f0f0;
+ border-top: 1px solid #e0e0e0;
+}
diff --git a/litemall-wx_uni/lib/wxParse/wxParse.vue b/litemall-wx_uni/lib/wxParse/wxParse.vue
new file mode 100644
index 00000000..565b3619
--- /dev/null
+++ b/litemall-wx_uni/lib/wxParse/wxParse.vue
@@ -0,0 +1,1296 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/main.js b/litemall-wx_uni/main.js
new file mode 100644
index 00000000..14002b77
--- /dev/null
+++ b/litemall-wx_uni/main.js
@@ -0,0 +1,31 @@
+import App from './App';
+
+// Api函数polyfill(目前为实验版本,如不需要,可删除!)';
+import Polyfill from './polyfill/polyfill';
+Polyfill.init();
+
+// 全局mixins,用于实现setData等功能,请勿删除!';
+import Mixin from './polyfill/mixins';
+
+// #ifndef VUE3
+import Vue from 'vue';
+
+Vue.mixin(Mixin);
+Vue.config.productionTip = false;
+App.mpType = 'app';
+const app = new Vue({
+ ...App
+});
+app.$mount();
+// #endif
+
+// #ifdef VUE3
+import { createSSRApp } from 'vue';
+export function createApp() {
+ const app = createSSRApp(App);
+ app.mixin(Mixin);
+ return {
+ app
+ };
+}
+// #endif
diff --git a/litemall-wx_uni/manifest.json b/litemall-wx_uni/manifest.json
new file mode 100644
index 00000000..822dc5d5
--- /dev/null
+++ b/litemall-wx_uni/manifest.json
@@ -0,0 +1,76 @@
+{
+ "name": "litemall-wx",
+ "appid": "",
+ "description": "",
+ "versionName": "1.0.0",
+ "versionCode": "100",
+ "transformPx": false,
+ "app-plus": {
+ "usingComponents": true,
+ "nvueStyleCompiler": "uni-app",
+ "compilerVersion": 3,
+ "splashscreen": {
+ "alwaysShowBeforeRender": true,
+ "waiting": true,
+ "autoclose": true,
+ "delay": 0
+ },
+ "modules": {},
+ "distribute": {
+ "android": {
+ "permissions": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ "ios": {},
+ "sdkConfigs": {}
+ }
+ },
+ "quickapp": {},
+ "mp-weixin": {
+ "appid": "wx5e4cd1d279a5fca0",
+ "setting": {
+ "urlCheck": false
+ },
+ "usingComponents": true,
+ "permission": {
+ "scope.userLocation": {
+ "desc": "你的位置信息将用于小程序位置接口的效果展示"
+ }
+ },
+ "plugins": {}
+ },
+ "mp-alipay": {
+ "usingComponents": true
+ },
+ "mp-baidu": {
+ "usingComponents": true
+ },
+ "mp-toutiao": {
+ "usingComponents": true
+ },
+ "uniStatistics": {
+ "enable": false
+ },
+ "vueVersion": "2",
+ "networkTimeout": {
+ "request": 10000,
+ "connectSocket": 10000,
+ "uploadFile": 10000,
+ "downloadFile": 10000
+ }
+}
\ No newline at end of file
diff --git a/litemall-wx_uni/pages.json b/litemall-wx_uni/pages.json
new file mode 100644
index 00000000..795796bb
--- /dev/null
+++ b/litemall-wx_uni/pages.json
@@ -0,0 +1,332 @@
+{
+ "pages": [
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "首页",
+ "enablePullDownRefresh": true
+ }
+ },
+ {
+ "path": "pages/catalog/catalog",
+ "style": {
+ "navigationBarTitleText": "分类"
+ }
+ },
+ {
+ "path": "pages/newGoods/newGoods",
+ "style": {
+ "navigationBarTitleText": "新品首发"
+ }
+ },
+ {
+ "path": "pages/hotGoods/hotGoods",
+ "style": {
+ "navigationBarTitleText": "人气推荐"
+ }
+ },
+ {
+ "path": "pages/ucenter/index/index",
+ "style": {
+ "backgroundColor": "#f4f4f4",
+ "navigationBarTitleText": "个人中心",
+ "enablePullDownRefresh": false
+ }
+ },
+ {
+ "path": "pages/ucenter/address/address",
+ "style": {
+ "navigationBarTitleText": "地址管理"
+ }
+ },
+ {
+ "path": "pages/ucenter/addressAdd/addressAdd",
+ "style": {
+ "navigationBarTitleText": "编辑地址"
+ }
+ },
+ {
+ "path": "pages/ucenter/feedback/feedback",
+ "style": {
+ "navigationBarTitleText": "意见反馈"
+ }
+ },
+ {
+ "path": "pages/ucenter/footprint/footprint",
+ "style": {
+ "navigationBarTitleText": "我的足迹"
+ }
+ },
+ {
+ "path": "pages/ucenter/order/order",
+ "style": {
+ "navigationBarTitleText": "我的订单"
+ }
+ },
+ {
+ "path": "pages/ucenter/orderDetail/orderDetail",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
+ },
+ {
+ "path": "pages/ucenter/couponList/couponList",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "我的优惠券"
+ }
+ },
+ {
+ "path": "pages/ucenter/couponSelect/couponSelect",
+ "style": {
+ "navigationBarTitleText": "选择优惠券"
+ }
+ },
+ {
+ "path": "pages/ucenter/collect/collect",
+ "style": {
+ "navigationBarTitleText": "我的收藏"
+ }
+ },
+ {
+ "path": "pages/auth/login/login",
+ "style": {
+ "navigationBarTitleText": "登录"
+ }
+ },
+ {
+ "path": "pages/auth/accountLogin/accountLogin",
+ "style": {
+ "navigationBarTitleText": "账号登录"
+ }
+ },
+ {
+ "path": "pages/auth/register/register",
+ "style": {
+ "navigationBarTitleText": "注册"
+ }
+ },
+ {
+ "path": "pages/auth/reset/reset",
+ "style": {
+ "navigationBarTitleText": "密码重置"
+ }
+ },
+ {
+ "path": "pages/payResult/payResult",
+ "style": {
+ "navigationBarTitleText": "付款结果",
+ "navigationBarBackgroundColor": "#fafafa"
+ }
+ },
+ {
+ "path": "pages/comment/comment",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "评价"
+ }
+ },
+ {
+ "path": "pages/commentPost/commentPost",
+ "style": {
+ "navigationBarTitleText": "评价"
+ }
+ },
+ {
+ "path": "pages/topic/topic",
+ "style": {
+ "navigationBarTitleText": "专题"
+ }
+ },
+ {
+ "path": "pages/topicComment/topicComment",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "评论"
+ }
+ },
+ {
+ "path": "pages/topicDetail/topicDetail",
+ "style": {
+ "navigationBarTitleText": "专题详情"
+ }
+ },
+ {
+ "path": "pages/topicCommentPost/topicCommentPost",
+ "style": {
+ "navigationBarTitleText": "评论"
+ }
+ },
+ {
+ "path": "pages/brand/brand",
+ "style": {
+ "navigationBarTitleText": "品牌商直供"
+ }
+ },
+ {
+ "path": "pages/brandDetail/brandDetail",
+ "style": {
+ "navigationBarTitleText": "品牌商详情"
+ }
+ },
+ {
+ "path": "pages/search/search",
+ "style": {
+ "navigationBarTitleText": "搜索"
+ }
+ },
+ {
+ "path": "pages/category/category",
+ "style": {}
+ },
+ {
+ "path": "pages/cart/cart",
+ "style": {
+ "enablePullDownRefresh": true,
+ "navigationBarTitleText": "购物车"
+ }
+ },
+ {
+ "path": "pages/checkout/checkout",
+ "style": {
+ "navigationBarTitleText": "填写订单"
+ }
+ },
+ {
+ "path": "pages/goods/goods",
+ "style": {
+ "navigationBarTitleText": "商品详情"
+ }
+ },
+ {
+ "path": "pages/about/about",
+ "style": {}
+ },
+ {
+ "path": "pages/groupon/myGroupon/myGroupon",
+ "style": {
+ "navigationBarTitleText": "我的团购"
+ }
+ },
+ {
+ "path": "pages/groupon/grouponDetail/grouponDetail",
+ "style": {
+ "navigationBarTitleText": "团购详情"
+ }
+ },
+ {
+ "path": "pages/groupon/grouponList/grouponList",
+ "style": {
+ "navigationBarTitleText": "团购专区"
+ }
+ },
+ {
+ "path": "pages/coupon/coupon",
+ "style": {
+ "navigationBarTitleText": "优惠券专区"
+ }
+ },
+ {
+ "path": "pages/help/help",
+ "style": {
+ "navigationBarTitleText": "帮助中心"
+ }
+ },
+ {
+ "path": "pages/ucenter/aftersale/aftersale",
+ "style": {
+ "navigationBarTitleText": "售后"
+ }
+ },
+ {
+ "path": "pages/ucenter/aftersaleList/aftersaleList",
+ "style": {
+ "navigationBarTitleText": "我的售后"
+ }
+ },
+ {
+ "path": "pages/ucenter/aftersaleDetail/aftersaleDetail",
+ "style": {
+ "navigationBarTitleText": "售后详情"
+ }
+ }
+ ],
+ "tabBar": {
+ "backgroundColor": "#fafafa",
+ "borderStyle": "white",
+ "selectedColor": "#AB956D",
+ "color": "#666",
+ "list": [
+ {
+ "pagePath": "pages/index/index",
+ "iconPath": "static/images/home.png",
+ "selectedIconPath": "static/images/home@selected.png",
+ "text": "首页"
+ },
+ {
+ "pagePath": "pages/catalog/catalog",
+ "iconPath": "static/images/category.png",
+ "selectedIconPath": "static/images/category@selected.png",
+ "text": "分类"
+ },
+ {
+ "pagePath": "pages/cart/cart",
+ "iconPath": "static/images/cart.png",
+ "selectedIconPath": "static/images/cart@selected.png",
+ "text": "购物车"
+ },
+ {
+ "pagePath": "pages/ucenter/index/index",
+ "iconPath": "static/images/my.png",
+ "selectedIconPath": "static/images/my@selected.png",
+ "text": "个人"
+ }
+ ]
+ },
+ "networkTimeout": {
+ "request": 10000,
+ "connectSocket": 10000,
+ "uploadFile": 10000,
+ "downloadFile": 10000
+ },
+ "debug": true,
+ "sitemapLocation": "sitemap.json",
+ "easycom": {
+ "autoscan": true,
+ "custom": {
+ // "van-cell-group": "@/lib/vant-weapp2/cell-group/index.vue",
+ // "van-cell": "@/lib/vant-weapp2/cell/index.vue",
+ // "van-picker": "@/lib/vant-weapp2/picker/index.vue",
+ // "van-popup": "@/lib/vant-weapp2/popup/index.vue",
+ // "van-field": "@/lib/vant-weapp2/field/index.vue",
+ // "van-uploader": "@/lib/vant-weapp2/uploader/index.vue",
+ // "van-button": "@/lib/vant-weapp2/button/index.vue",
+ // "van-tag": "@/lib/vant-weapp2/tag/index.vue",
+ // "van-icon": "@/lib/vant-weapp2/icon/index.vue",
+ // "van-checkbox": "@/lib/vant-weapp2/checkbox/index.vue",
+ // "van-steps": "@/lib/vant-weapp2/steps/index.vue"
+ }
+ },
+ "globalStyle": {
+ "navigationBarBackgroundColor": "#FFFFFF",
+ "navigationBarTitleText": "litemall小程序商城",
+ "enablePullDownRefresh": false,
+ "navigationBarTextStyle": "black",
+ "backgroundColor": "#FFFFFF",
+ "backgroundTextStyle": "dark",
+ "usingComponents": {
+ "van-cell-group": "/wxcomponents/vant-weapp/cell-group/index",
+ "van-cell": "/wxcomponents/vant-weapp/cell/index",
+ "van-picker": "/wxcomponents/vant-weapp/picker/index",
+ "van-popup": "/wxcomponents/vant-weapp/popup/index",
+ "van-field": "/wxcomponents/vant-weapp/field/index",
+ "van-uploader": "/wxcomponents/vant-weapp/uploader/index",
+ "van-button": "/wxcomponents/vant-weapp/button/index",
+ "van-tag": "/wxcomponents/vant-weapp/tag/index",
+ "van-icon": "/wxcomponents/vant-weapp/icon/index",
+ "van-checkbox": "/wxcomponents/vant-weapp/checkbox/index",
+ "van-steps": "/wxcomponents/vant-weapp/steps/index"
+ }
+ },
+ "subPackages": []
+}
\ No newline at end of file
diff --git a/litemall-wx_uni/pages/about/about.css b/litemall-wx_uni/pages/about/about.css
new file mode 100644
index 00000000..9de85033
--- /dev/null
+++ b/litemall-wx_uni/pages/about/about.css
@@ -0,0 +1,35 @@
+/* about.wxss */
+
+.label {
+ font-size: 26rpx;
+ margin-left: 20rpx;
+ padding: 10rpx 0;
+}
+
+.about-item {
+ background: white;
+ border-top: solid #f2f2f2 0.5rpx;
+ border-bottom: solid #f2f2f2 0.5rpx;
+ width: 100%;
+ height: 100rpx;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+
+.item-left {
+ font-size: 38rpx;
+ margin-left: 40rpx;
+ margin-top: auto;
+ margin-bottom: auto;
+}
+
+.item-right {
+ margin-right: 15rpx;
+ margin-top: auto;
+ margin-bottom: auto;
+}
+.right-icon {
+ width: 40rpx;
+ height: 40rpx;
+}
diff --git a/litemall-wx_uni/pages/about/about.vue b/litemall-wx_uni/pages/about/about.vue
new file mode 100644
index 00000000..678108f3
--- /dev/null
+++ b/litemall-wx_uni/pages/about/about.vue
@@ -0,0 +1,103 @@
+
+
+ 项目名称:
+
+
+ {{ name }}
+
+
+
+ 项目地址:
+
+
+ {{ address }}
+
+
+
+
+
+
+ 电话号码:
+
+
+ {{ phone }}
+
+
+
+
+
+
+ QQ交流群:
+
+
+ {{ qq }}
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/auth/accountLogin/accountLogin.css b/litemall-wx_uni/pages/auth/accountLogin/accountLogin.css
new file mode 100644
index 00000000..4e61212c
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/accountLogin/accountLogin.css
@@ -0,0 +1,103 @@
+.form-box {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 0 40rpx;
+ margin-top: 200rpx;
+ background: #fff;
+}
+
+.form-item {
+ position: relative;
+ background: #fff;
+ height: 96rpx;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.form-item .username,
+.form-item .password,
+.form-item .code {
+ position: absolute;
+ top: 26rpx;
+ left: 0;
+ display: block;
+ width: 100%;
+ height: 44rpx;
+ background: #fff;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.form-item-code {
+ margin-top: 32rpx;
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+}
+
+.form-item-code .form-item {
+ float: left;
+ width: 350rpx;
+}
+
+.form-item-code .code-img {
+ float: right;
+ margin-top: 4rpx;
+ height: 88rpx;
+ width: 236rpx;
+}
+
+.form-item .clear {
+ position: absolute;
+ top: 32rpx;
+ right: 18rpx;
+ z-index: 2;
+ display: block;
+ background: #fff;
+}
+
+.login-btn {
+ margin: 60rpx 0 40rpx 0;
+ height: 96rpx;
+ line-height: 96rpx;
+ font-size: 30rpx;
+ border-radius: 6rpx;
+ width: 90%;
+ color: #fff;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: flex;
+ bottom: 0;
+ left: 0;
+ padding: 0;
+ margin-left: 5%;
+ text-align: center;
+ /* padding-left: -5rpx; */
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
+
+.form-item-text {
+ height: 35rpx;
+ width: 100%;
+}
+
+.form-item-text .register {
+ display: block;
+ height: 34rpx;
+ float: left;
+ font-size: 28rpx;
+}
+
+.form-item-text .reset {
+ display: block;
+ height: 34rpx;
+ float: right;
+ font-size: 28rpx;
+}
diff --git a/litemall-wx_uni/pages/auth/accountLogin/accountLogin.vue b/litemall-wx_uni/pages/auth/accountLogin/accountLogin.vue
new file mode 100644
index 00000000..b28809fd
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/accountLogin/accountLogin.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 注册账号
+ 忘记密码
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/auth/login/login.css b/litemall-wx_uni/pages/auth/login/login.css
new file mode 100644
index 00000000..7720984b
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/login/login.css
@@ -0,0 +1,61 @@
+.login-box {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 0 40rpx;
+ margin-top: 200rpx;
+ background: #fff;
+}
+
+.wx-login-btn {
+ margin: 60rpx 0 40rpx 0;
+ height: 96rpx;
+ line-height: 96rpx;
+ font-size: 30rpx;
+ border-radius: 6rpx;
+ width: 90%;
+ color: #fff;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: flex;
+ bottom: 0;
+ left: 0;
+ padding: 0;
+ margin-left: 5%;
+ text-align: center;
+ /* padding-left: -5rpx; */
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+}
+
+.account-login-btn {
+ width: 90%;
+ margin: 0 auto;
+ color: #fff;
+ font-size: 30rpx;
+ height: 96rpx;
+ line-height: 96rpx;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: flex;
+ bottom: 0;
+ left: 0;
+ border-radius: 0;
+ padding: 0;
+ margin-left: 5%;
+ text-align: center;
+ /* padding-left: -5rpx; */
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
diff --git a/litemall-wx_uni/pages/auth/login/login.vue b/litemall-wx_uni/pages/auth/login/login.vue
new file mode 100644
index 00000000..51a1d7c8
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/login/login.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/auth/register/register.css b/litemall-wx_uni/pages/auth/register/register.css
new file mode 100644
index 00000000..0c1e0d55
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/register/register.css
@@ -0,0 +1,70 @@
+.form-box {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 0 40rpx;
+ margin-top: 96rpx;
+ background: #fff;
+}
+
+.form-item {
+ position: relative;
+ background: #fff;
+ height: 96rpx;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.form-item .username,
+.form-item .password,
+.form-item .mobile,
+.form-item .code {
+ position: absolute;
+ top: 26rpx;
+ left: 0;
+ display: block;
+ width: 100%;
+ height: 44rpx;
+ background: #fff;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.form-item-code {
+ margin-top: 32rpx;
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+}
+
+.form-item-code .form-item {
+ float: left;
+ width: 350rpx;
+}
+
+.form-item-code .code-btn {
+ float: right;
+ padding: 20rpx 40rpx;
+ border: 1px solid #d9d9d9;
+ border-radius: 10rpx;
+ color: #fff;
+ background: green;
+}
+
+.form-item .clear {
+ position: absolute;
+ top: 32rpx;
+ right: 18rpx;
+ z-index: 2;
+ display: block;
+ background: #fff;
+}
+
+.register-btn {
+ margin: 60rpx 0 40rpx 0;
+ height: 96rpx;
+ line-height: 96rpx;
+ color: #fff;
+ font-size: 30rpx;
+ width: 100%;
+ border-radius: 6rpx;
+}
diff --git a/litemall-wx_uni/pages/auth/register/register.vue b/litemall-wx_uni/pages/auth/register/register.vue
new file mode 100644
index 00000000..349d16cd
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/register/register.vue
@@ -0,0 +1,269 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 获取验证码
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/auth/reset/reset.css b/litemall-wx_uni/pages/auth/reset/reset.css
new file mode 100644
index 00000000..8a03a4b6
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/reset/reset.css
@@ -0,0 +1,68 @@
+.form-box {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 0 40rpx;
+ margin-top: 96rpx;
+ background: #fff;
+}
+
+.form-item {
+ position: relative;
+ background: #fff;
+ height: 96rpx;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.form-item .mobile,
+.form-item .password,
+.form-item .code {
+ position: absolute;
+ top: 26rpx;
+ left: 0;
+ display: block;
+ width: 100%;
+ height: 44rpx;
+ background: #fff;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.form-item-code {
+ margin-top: 32rpx;
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+}
+
+.form-item-code .form-item {
+ float: left;
+ width: 350rpx;
+}
+
+.form-item-code .code-btn {
+ float: right;
+ padding: 20rpx 40rpx;
+ border: 1px solid #d9d9d9;
+ border-radius: 10rpx;
+}
+
+.form-item .clear {
+ position: absolute;
+ top: 32rpx;
+ right: 18rpx;
+ z-index: 2;
+ display: block;
+ background: #fff;
+}
+
+.reset-btn {
+ margin: 60rpx 0 40rpx 0;
+ height: 96rpx;
+ line-height: 96rpx;
+ color: #fff;
+ font-size: 30rpx;
+ width: 100%;
+ background: #b4282d;
+ border-radius: 6rpx;
+}
diff --git a/litemall-wx_uni/pages/auth/reset/reset.vue b/litemall-wx_uni/pages/auth/reset/reset.vue
new file mode 100644
index 00000000..d6cf30de
--- /dev/null
+++ b/litemall-wx_uni/pages/auth/reset/reset.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 获取验证码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/brand/brand.css b/litemall-wx_uni/pages/brand/brand.css
new file mode 100644
index 00000000..0aa6ab32
--- /dev/null
+++ b/litemall-wx_uni/pages/brand/brand.css
@@ -0,0 +1,52 @@
+.brand-list .item {
+ display: block;
+ width: 750rpx;
+ height: 416rpx;
+ position: relative;
+ margin-bottom: 4rpx;
+}
+
+.brand-list .item .img-bg {
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 0;
+ width: 750rpx;
+ height: 417rpx;
+ overflow: hidden;
+}
+
+.brand-list .item .img-bg image {
+ width: 750rpx;
+ height: 416rpx;
+}
+
+.brand-list .item .txt-box {
+ position: absolute;
+ left: 0;
+ top: 0;
+ display: table;
+ z-index: 0;
+ width: 750rpx;
+ height: 417rpx;
+}
+
+.brand-list .item .line {
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+ height: 63rpx;
+ line-height: 63rpx;
+}
+
+.brand-list .item .line text {
+ font-size: 35rpx;
+ font-weight: 700;
+ text-shadow: 1rpx 1rpx rgba(0, 0, 0, 0.32);
+ color: #fff;
+}
+
+.brand-list .item .line .s {
+ padding: 0 10rpx;
+ font-size: 40rpx;
+}
diff --git a/litemall-wx_uni/pages/brand/brand.vue b/litemall-wx_uni/pages/brand/brand.vue
new file mode 100644
index 00000000..da7876b4
--- /dev/null
+++ b/litemall-wx_uni/pages/brand/brand.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ |
+ {{ item.floorPrice }}元起
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/brandDetail/brandDetail.css b/litemall-wx_uni/pages/brandDetail/brandDetail.css
new file mode 100644
index 00000000..972e66e0
--- /dev/null
+++ b/litemall-wx_uni/pages/brandDetail/brandDetail.css
@@ -0,0 +1,111 @@
+page {
+ background: #f4f4f4;
+}
+
+.brand-info .name {
+ width: 100%;
+ height: 290rpx;
+ position: relative;
+}
+
+.brand-info .img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 290rpx;
+}
+
+.brand-info .info-box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 290rpx;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.brand-info .info {
+ display: block;
+}
+
+.brand-info .txt {
+ display: block;
+ height: 37.5rpx;
+ font-size: 37.5rpx;
+ color: #fff;
+}
+
+.brand-info .line {
+ margin: 0 auto;
+ margin-top: 16rpx;
+ display: block;
+ height: 2rpx;
+ width: 145rpx;
+ background: #fff;
+}
+
+.brand-info .desc {
+ background: #fff;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 41.5rpx 31.25rpx;
+ font-size: 30rpx;
+ color: #666;
+ line-height: 41.5rpx;
+ text-align: center;
+}
+
+.cate-item .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ border-top: 1rpx solid #f4f4f4;
+ margin-top: 20rpx;
+}
+
+.cate-item .b .item {
+ float: left;
+ background: #fff;
+ width: 375rpx;
+ padding-bottom: 33.333rpx;
+ border-bottom: 1rpx solid #f4f4f4;
+ height: auto;
+ overflow: hidden;
+ text-align: center;
+}
+
+.cate-item .b .item-b {
+ border-right: 1rpx solid #f4f4f4;
+}
+
+.cate-item .item .img {
+ margin-top: 10rpx;
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.cate-item .item .name {
+ display: block;
+ width: 365.625rpx;
+ height: 35rpx;
+ padding: 0 20rpx;
+ overflow: hidden;
+ margin: 11.5rpx 0 22rpx 0;
+ text-align: center;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .item .price {
+ display: block;
+ width: 365.625rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #b4282d;
+}
diff --git a/litemall-wx_uni/pages/brandDetail/brandDetail.vue b/litemall-wx_uni/pages/brandDetail/brandDetail.vue
new file mode 100644
index 00000000..afc8c81b
--- /dev/null
+++ b/litemall-wx_uni/pages/brandDetail/brandDetail.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+ {{ brand.name }}
+
+
+
+
+
+ {{ brand.desc }}
+
+
+
+
+
+
+
+
+ {{ iitem.name }}
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/cart/cart.css b/litemall-wx_uni/pages/cart/cart.css
new file mode 100644
index 00000000..e668bc44
--- /dev/null
+++ b/litemall-wx_uni/pages/cart/cart.css
@@ -0,0 +1,492 @@
+page {
+ height: 100%;
+ min-height: 100%;
+ background: #f4f4f4;
+}
+
+.container {
+ background: #f4f4f4;
+ width: 100%;
+ height: auto;
+ min-height: 100%;
+ overflow: hidden;
+}
+
+.service-policy {
+ width: 750rpx;
+ height: 73rpx;
+ background: #f4f4f4;
+ padding: 0 31.25rpx;
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: space-between;
+}
+
+.service-policy .item {
+ background-size: 10rpx;
+ padding-left: 15rpx;
+ display: flex;
+ align-items: center;
+ font-size: 25rpx;
+ color: #666;
+}
+
+.no-login {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-login .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-login .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 59rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 35rpx;
+ color: #999;
+}
+
+.no-login button {
+ width: 90%;
+ margin: 0 auto;
+ color: #fff;
+ font-size: 30rpx;
+ height: 96rpx;
+ line-height: 96rpx;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: flex;
+ bottom: 0;
+ left: 0;
+ border-radius: 0;
+ padding: 0;
+ margin-left: 5%;
+ text-align: center;
+ /* padding-left: -5rpx; */
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
+
+.no-cart {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-cart .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-cart .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 29rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.cart-view {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+}
+
+.cart-view .list {
+ height: auto;
+ width: 100%;
+ overflow: hidden;
+ margin-bottom: 120rpx;
+}
+
+.cart-view .group-item {
+ height: auto;
+ width: 100%;
+ background: #fff;
+ margin-bottom: 18rpx;
+}
+
+.cart-view .item {
+ height: 164rpx;
+ width: 100%;
+ overflow: hidden;
+}
+
+.cart-view .item .van-checkbox {
+ float: left;
+ margin: 65rpx 18rpx 65rpx 18rpx;
+}
+
+.cart-view .item .van-checkbox .van-icon {
+ color: #fff;
+}
+
+.cart-view .item .cart-goods {
+ float: left;
+ height: 164rpx;
+ width: 672rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.cart-view .item .img {
+ float: left;
+ height: 125rpx;
+ width: 125rpx;
+ background: #f4f4f4;
+ margin: 19.5rpx 18rpx 19.5rpx 0;
+}
+
+.cart-view .item .info {
+ float: left;
+ height: 125rpx;
+ width: 503rpx;
+ margin: 19.5rpx 26rpx 19.5rpx 0;
+}
+
+.cart-view .item .t {
+ margin: 8rpx 0;
+ height: 28rpx;
+ font-size: 25rpx;
+ color: #333;
+ overflow: hidden;
+}
+
+.cart-view .item .name {
+ height: 28rpx;
+ max-width: 310rpx;
+ line-height: 28rpx;
+ font-size: 25rpx;
+ color: #333;
+ overflow: hidden;
+}
+
+.cart-view .item .num {
+ height: 28rpx;
+ line-height: 28rpx;
+ float: right;
+}
+
+.cart-view .item .attr {
+ margin-bottom: 17rpx;
+ height: 24rpx;
+ line-height: 24rpx;
+ font-size: 22rpx;
+ color: #666;
+ overflow: hidden;
+}
+
+.cart-view .item .b {
+ height: 28rpx;
+ line-height: 28rpx;
+ font-size: 25rpx;
+ color: #333;
+ overflow: hidden;
+}
+
+.cart-view .item .price {
+ float: left;
+}
+
+.cart-view .item.edit .t {
+ display: none;
+}
+
+.cart-view .item.edit .attr {
+ text-align: right;
+ padding-right: 25rpx;
+ background-size: 12rpx 20rpx;
+ margin-bottom: 24rpx;
+ height: 39rpx;
+ line-height: 39rpx;
+ font-size: 24rpx;
+ color: #999;
+ overflow: hidden;
+}
+
+.cart-view .item.edit .b {
+ display: flex;
+ height: 52rpx;
+ overflow: hidden;
+}
+
+.cart-view .item.edit .price {
+ line-height: 52rpx;
+ height: 52rpx;
+ flex: 1;
+}
+
+.cart-view .item .selnum {
+ display: none;
+}
+
+.cart-view .item.edit .selnum {
+ width: 235rpx;
+ height: 52rpx;
+ border: 1rpx solid #ccc;
+ display: flex;
+}
+
+.selnum .cut {
+ width: 70rpx;
+ height: 100%;
+ text-align: center;
+ line-height: 50rpx;
+}
+
+.selnum .number {
+ flex: 1;
+ height: 100%;
+ text-align: center;
+ line-height: 68.75rpx;
+ border-left: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+ float: left;
+}
+
+.selnum .add {
+ width: 80rpx;
+ height: 100%;
+ text-align: center;
+ line-height: 50rpx;
+}
+
+.cart-view .group-item .header {
+ width: 100%;
+ height: 94rpx;
+ line-height: 94rpx;
+ padding: 0 26rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.cart-view .promotion .icon {
+ display: inline-block;
+ height: 24rpx;
+ width: 15rpx;
+}
+
+.cart-view .promotion {
+ margin-top: 25.5rpx;
+ float: left;
+ height: 43rpx;
+ width: 480rpx;
+ /*margin-right: 84rpx;*/
+ line-height: 43rpx;
+ font-size: 0;
+}
+
+.cart-view .promotion .tag {
+ border: 1px solid #f48f18;
+ height: 37rpx;
+ line-height: 31rpx;
+ padding: 0 9rpx;
+ margin-right: 10rpx;
+ color: #f48f18;
+ font-size: 24.5rpx;
+}
+
+.cart-view .promotion .txt {
+ height: 43rpx;
+ line-height: 43rpx;
+ padding-right: 10rpx;
+ color: #333;
+ font-size: 29rpx;
+ overflow: hidden;
+}
+
+.cart-view .get {
+ margin-top: 18rpx;
+ float: right;
+ height: 58rpx;
+ padding-left: 14rpx;
+ border-left: 1px solid #d9d9d9;
+ line-height: 58rpx;
+ font-size: 29rpx;
+ color: #333;
+}
+
+.cart-bottom {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ height: 100rpx;
+ width: 100%;
+ background: #fff;
+ display: flex;
+}
+
+.cart-bottom .van-checkbox {
+ float: left;
+ margin: 33rpx 18rpx 33rpx 26rpx;
+ font-size: 29rpx;
+}
+
+.cart-bottom .van-checkbox .van-icon {
+ color: #fff;
+}
+
+.cart-bottom .total {
+ height: 34rpx;
+ flex: 1;
+ margin: 33rpx 10rpx;
+ font-size: 29rpx;
+}
+
+.cart-bottom .delete {
+ text-align: center;
+ width: 180rpx;
+ height: 80rpx;
+ line-height: 82rpx;
+ padding: 0;
+ margin: 0;
+ margin-left: -5rpx;
+ padding-right: 25rpx;
+ font-size: 25rpx;
+ color: #f4f4f4;
+ /* text-align: center; */
+ border-top-left-radius: 0rpx;
+ border-bottom-left-radius: 0rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #ae8b9c 100%);
+}
+
+.cart-bottom .checkout {
+ height: 100rpx;
+ width: 210rpx;
+ text-align: center;
+ line-height: 100rpx;
+ font-size: 29rpx;
+ background: #b4282d;
+ color: #fff;
+}
+
+.action_btn_area {
+ /* border: 1px solid #333; */
+ position: absolute;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ right: 0;
+ top: 0;
+ width: 380rpx;
+ height: 100rpx;
+}
+
+.action_btn_area .edit {
+ width: 140rpx;
+ /* border: 1px solid #000; */
+ height: 80rpx;
+ line-height: 82rpx;
+ padding: 0;
+ margin: 0;
+ margin-right: 5rpx;
+ text-align: center;
+ /* padding-left: 25rpx; */
+ font-size: 25rpx;
+ color: #f4f4f4;
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ /* background-image: linear-gradient(to right, #ff7701 100%); */
+ background-image: linear-gradient(to right, #ab956d 0%, #ab956d 100%);
+}
+
+.action_btn_area .checkout {
+ width: 140rpx;
+ height: 80rpx;
+ line-height: 82rpx;
+ padding: 0;
+ margin: 0;
+ margin-left: 5rpx;
+ /* padding-right: 25rpx; */
+ font-size: 25rpx;
+ color: #f4f4f4;
+ text-align: center;
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
+
+.action_btn_area .delete {
+ width: 140rpx;
+ /* border: 1px solid #000; */
+ height: 80rpx;
+ line-height: 82rpx;
+ padding: 0;
+ margin: 0;
+ margin-right: 5rpx;
+ text-align: center;
+ padding-left: -5rpx;
+ font-size: 25rpx;
+ color: #f4f4f4;
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
+
+.action_btn_area .sure {
+ text-align: center;
+ width: 140rpx;
+ height: 80rpx;
+ line-height: 82rpx;
+ padding: 0;
+ margin: 0;
+ margin-right: 10rpx;
+ padding-left: -5rpx;
+ font-size: 25rpx;
+ color: #f4f4f4;
+ /* text-align: center; */
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #ab956d 0%, #ab956d 100%);
+ /* background-image: linear-gradient(to right, #ff7701 0%, #fe4800 100%); */
+}
+
+.auth_btn {
+ position: fixed;
+ top: 55vh;
+ left: 10vw;
+ width: 80vw;
+ height: 96rpx;
+ line-height: 96rpx;
+ font-size: 25rpx;
+ color: #f4f4f4;
+ /* text-align: center; */
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #8baaaa 0%, #9a9ba1 100%);
+}
diff --git a/litemall-wx_uni/pages/cart/cart.vue b/litemall-wx_uni/pages/cart/cart.vue
new file mode 100644
index 00000000..4979bc0f
--- /dev/null
+++ b/litemall-wx_uni/pages/cart/cart.vue
@@ -0,0 +1,391 @@
+
+
+
+
+ 还没有登录
+
+
+
+
+
+ 30天无忧退货
+ 48小时快速退款
+ 满88元免邮费
+
+
+
+ 空空如也~
+ 去添加点什么吧
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ x{{ item.number }}
+
+ {{ isEditCart ? '已选择:' : '' }}{{ item.specifications || '' }}
+
+ ¥{{ item.price }}
+
+ -
+
+ +
+
+
+
+
+
+
+
+
+
+ 全选({{ cartTotal.checkedGoodsCount }})
+ {{ !isEditCart ? '¥' + cartTotal.checkedGoodsAmount : '' }}
+
+ {{ !isEditCart ? '编辑' : '完成' }}
+ 删除({{ cartTotal.checkedGoodsCount }})
+ 下单
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/catalog/catalog.css b/litemall-wx_uni/pages/catalog/catalog.css
new file mode 100644
index 00000000..3992be44
--- /dev/null
+++ b/litemall-wx_uni/pages/catalog/catalog.css
@@ -0,0 +1,160 @@
+page {
+ height: 100%;
+}
+
+.container {
+ background: #f9f9f9;
+ height: 100%;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+.search {
+ height: 88rpx;
+ width: 100%;
+ padding: 0 30rpx;
+ background: #fff;
+ display: flex;
+ align-items: center;
+}
+
+.search .input {
+ width: 690rpx;
+ height: 56rpx;
+ background: #ededed;
+ border-radius: 8rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.search .van-icon-search {
+ line-height: 56rpx;
+}
+
+.search .txt {
+ height: 42rpx;
+ line-height: 42rpx;
+ color: #666;
+ padding-left: 10rpx;
+ font-size: 30rpx;
+}
+
+.catalog {
+ flex: 1;
+ width: 100%;
+ background: #fff;
+ display: flex;
+ border-top: 1px solid #fafafa;
+}
+
+.catalog .nav {
+ width: 162rpx;
+ height: 100%;
+}
+
+.catalog .nav .item {
+ text-align: center;
+ line-height: 90rpx;
+ width: 162rpx;
+ height: 90rpx;
+ color: #333;
+ font-size: 28rpx;
+ border-left: 6rpx solid #fff;
+}
+
+.catalog .nav .item.active {
+ color: #ab956d;
+ font-size: 36rpx;
+ border-left: 6rpx solid #ab956d;
+}
+
+.catalog .cate {
+ border-left: 1px solid #fafafa;
+ flex: 1;
+ height: 100%;
+ padding: 0 30rpx 0 30rpx;
+}
+
+.banner {
+ display: block;
+ height: 222rpx;
+ width: 100%;
+ position: relative;
+}
+
+.banner .image {
+ position: absolute;
+ top: 30rpx;
+ left: 0;
+ border-radius: 4rpx;
+ height: 192rpx;
+ width: 100%;
+}
+
+.banner .txt {
+ position: absolute;
+ top: 30rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 28rpx;
+ left: 0;
+ height: 192rpx;
+ line-height: 192rpx;
+ width: 100%;
+}
+
+.catalog .hd {
+ height: 108rpx;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.catalog .hd .txt {
+ font-size: 24rpx;
+ text-align: center;
+ color: #333;
+ padding: 0 10rpx;
+ width: auto;
+}
+
+.catalog .hd .line {
+ width: 40rpx;
+ height: 1px;
+ background: #d9d9d9;
+}
+
+.catalog .bd {
+ height: auto;
+ width: 100%;
+ overflow: hidden;
+}
+
+.catalog .bd .item {
+ display: block;
+ float: left;
+ height: 216rpx;
+ width: 144rpx;
+ margin-right: 34rpx;
+}
+
+.catalog .bd .item.last {
+ margin-right: 0;
+}
+
+.catalog .bd .item .icon {
+ height: 144rpx;
+ width: 144rpx;
+}
+
+.catalog .bd .item .txt {
+ display: block;
+ text-align: center;
+ font-size: 24rpx;
+ color: #333;
+ height: 72rpx;
+ width: 144rpx;
+}
diff --git a/litemall-wx_uni/pages/catalog/catalog.vue b/litemall-wx_uni/pages/catalog/catalog.vue
new file mode 100644
index 00000000..3188f9fc
--- /dev/null
+++ b/litemall-wx_uni/pages/catalog/catalog.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+ 商品搜索, 共{{ goodsCount }}款好物
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+ {{ currentCategory.frontName }}
+
+
+
+ {{ currentCategory.name }}分类
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/category/category.css b/litemall-wx_uni/pages/category/category.css
new file mode 100644
index 00000000..99e98212
--- /dev/null
+++ b/litemall-wx_uni/pages/category/category.css
@@ -0,0 +1,118 @@
+.container {
+ background: #f9f9f9;
+}
+
+.cate-nav {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 1000;
+}
+
+.cate-nav-body {
+ height: 84rpx;
+ white-space: nowrap;
+ background: #fff;
+ border-top: 1px solid rgba(0, 0, 0, 0.15);
+ overflow: hidden;
+}
+
+.cate-nav .item {
+ display: inline-block;
+ height: 84rpx;
+ min-width: 130rpx;
+ padding: 0 15rpx;
+}
+
+.cate-nav .item .name {
+ display: block;
+ height: 84rpx;
+ padding: 0 20rpx;
+ line-height: 84rpx;
+ color: #333;
+ font-size: 30rpx;
+ width: auto;
+}
+
+.cate-nav .item.active .name {
+ color: #ab956d;
+ border-bottom: 2px solid #ab956d;
+}
+
+.cate-item {
+ margin-top: 94rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.cate-item .h {
+ height: 145rpx;
+ width: 750rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.cate-item .h .name {
+ display: block;
+ height: 35rpx;
+ margin-bottom: 18rpx;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .h .desc {
+ display: block;
+ height: 24rpx;
+ font-size: 24rpx;
+ color: #999;
+}
+
+.cate-item .b {
+ width: 750rpx;
+ padding: 0 6.25rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.cate-item .b .item {
+ float: left;
+ background: #fff;
+ width: 365rpx;
+ margin-bottom: 6.25rpx;
+ padding-bottom: 33.333rpx;
+ height: auto;
+ overflow: hidden;
+ text-align: center;
+}
+
+.cate-item .b .item-b {
+ margin-left: 6.25rpx;
+}
+
+.cate-item .item .img {
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.cate-item .item .name {
+ display: block;
+ width: 365.625rpx;
+ height: 35rpx;
+ margin: 11.5rpx 0 22rpx 0;
+ text-align: center;
+ overflow: hidden;
+ padding: 0 20rpx;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .item .price {
+ display: block;
+ width: 365.625rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #ab956d;
+}
diff --git a/litemall-wx_uni/pages/category/category.vue b/litemall-wx_uni/pages/category/category.vue
new file mode 100644
index 00000000..9b8cb4e7
--- /dev/null
+++ b/litemall-wx_uni/pages/category/category.vue
@@ -0,0 +1,215 @@
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+ {{ currentCategory.name }}
+ {{ currentCategory.desc }}
+
+
+
+
+
+ {{ iitem.name }}
+
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/checkout/checkout.css b/litemall-wx_uni/pages/checkout/checkout.css
new file mode 100644
index 00000000..d7dbb738
--- /dev/null
+++ b/litemall-wx_uni/pages/checkout/checkout.css
@@ -0,0 +1,310 @@
+page {
+ height: 100%;
+ background: #f4f4f4;
+}
+
+.address-box {
+ width: 100%;
+ height: 166.55rpx;
+ background-size: 62.5rpx 10.5rpx;
+ margin-bottom: 20rpx;
+ padding-top: 10.5rpx;
+}
+
+.address-item {
+ display: flex;
+ height: 155.55rpx;
+ background: #fff;
+ padding: 41.6rpx 0 41.6rpx 31.25rpx;
+}
+
+.address-item.address-empty {
+ line-height: 75rpx;
+ text-align: center;
+}
+
+.address-box .l {
+ width: 125rpx;
+ height: 100%;
+}
+
+.address-box .l .name {
+ margin-left: 6.25rpx;
+ margin-top: -7.25rpx;
+ display: block;
+ width: 125rpx;
+ height: 43rpx;
+ line-height: 43rpx;
+ font-size: 30rpx;
+ color: #333;
+ margin-bottom: 5rpx;
+}
+
+.address-box .l .default {
+ margin-left: 6.25rpx;
+ display: block;
+ width: 62rpx;
+ height: 33rpx;
+ border-radius: 5rpx;
+ border: 1px solid #b4282d;
+ font-size: 20.5rpx;
+ text-align: center;
+ line-height: 29rpx;
+ color: #b4282d;
+}
+
+.address-box .m {
+ flex: 1;
+ height: 72.25rpx;
+ color: #999;
+}
+
+.address-box .mobile {
+ display: block;
+ height: 29rpx;
+ line-height: 29rpx;
+ margin-bottom: 6.25rpx;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.address-box .address {
+ display: block;
+ height: 37.5rpx;
+ line-height: 37.5rpx;
+ font-size: 25rpx;
+ color: #666;
+}
+
+.address-box .r {
+ width: 77rpx;
+ height: 77rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.address-box .r image {
+ width: 52.078rpx;
+ height: 52.078rpx;
+}
+
+.coupon-box {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+}
+
+.coupon-box .coupon-item {
+ width: 100%;
+ height: 108.3rpx;
+ overflow: hidden;
+ background: #fff;
+ display: flex;
+ padding-left: 31.25rpx;
+}
+
+.coupon-box .l {
+ flex: 1;
+ height: 43rpx;
+ line-height: 43rpx;
+ padding-top: 35rpx;
+}
+
+.coupon-box .l .name {
+ float: left;
+ font-size: 30rpx;
+ color: #666;
+}
+
+.coupon-box .l .txt {
+ float: right;
+ font-size: 30rpx;
+ color: #666;
+}
+
+.coupon-box .r {
+ margin-top: 15.5rpx;
+ width: 77rpx;
+ height: 77rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.coupon-box .r image {
+ width: 52.078rpx;
+ height: 52.078rpx;
+}
+
+.message-box {
+ margin-top: 20rpx;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+}
+
+.message-box .message-item {
+ height: 52.078rpx;
+ overflow: hidden;
+ background: #fff;
+ display: flex;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ padding-top: 26rpx;
+}
+
+.order-box {
+ margin-top: 20rpx;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+}
+
+.order-box .order-item {
+ height: 104.3rpx;
+ overflow: hidden;
+ background: #fff;
+ display: flex;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ padding-top: 26rpx;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.order-box .order-item .l {
+ float: left;
+ height: 52rpx;
+ width: 50%;
+ line-height: 52rpx;
+ overflow: hidden;
+}
+
+.order-box .order-item .r {
+ float: right;
+ text-align: right;
+ width: 50%;
+ height: 52rpx;
+ line-height: 52rpx;
+ overflow: hidden;
+}
+
+.order-box .order-item.no-border {
+ border-bottom: none;
+}
+
+.goods-items {
+ margin-top: 20rpx;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+ padding-left: 31.25rpx;
+ margin-bottom: 120rpx;
+}
+
+.goods-items .item {
+ height: 192rpx;
+ padding-right: 31.25rpx;
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.goods-items .item.no-border {
+ border-bottom: none;
+}
+
+.goods-items .item:last-child {
+ border-bottom: none;
+}
+
+.goods-items .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background-color: #f4f4f4;
+ margin-right: 20rpx;
+}
+
+.goods-items .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.goods-items .info {
+ flex: 1;
+ height: 145.83rpx;
+ padding-top: 5rpx;
+}
+
+.goods-items .t {
+ height: 33rpx;
+ line-height: 33rpx;
+ margin-bottom: 10rpx;
+ overflow: hidden;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.goods-items .t .name {
+ display: block;
+ float: left;
+}
+
+.goods-items .t .number {
+ display: block;
+ float: right;
+ text-align: right;
+}
+
+.goods-items .m {
+ height: 29rpx;
+ overflow: hidden;
+ line-height: 29rpx;
+ margin-bottom: 25rpx;
+ font-size: 25rpx;
+ color: #666;
+}
+
+.goods-items .b {
+ height: 41rpx;
+ overflow: hidden;
+ line-height: 41rpx;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order-total {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ height: 100rpx;
+ width: 100%;
+ display: flex;
+}
+
+.order-total .l {
+ flex: 1;
+ height: 100rpx;
+ line-height: 100rpx;
+ color: #b4282d;
+ background: #fff;
+ font-size: 33rpx;
+ padding-left: 31.25rpx;
+ border-top: 1rpx solid rgba(0, 0, 0, 0.2);
+ border-bottom: 1rpx solid rgba(0, 0, 0, 0.2);
+}
+
+.order-total .r {
+ width: 233rpx;
+ height: 100rpx;
+ background: #b4282d;
+ border: 1px solid #b4282d;
+ line-height: 100rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 30rpx;
+}
diff --git a/litemall-wx_uni/pages/checkout/checkout.vue b/litemall-wx_uni/pages/checkout/checkout.vue
new file mode 100644
index 00000000..b51de05a
--- /dev/null
+++ b/litemall-wx_uni/pages/checkout/checkout.vue
@@ -0,0 +1,346 @@
+
+
+
+
+
+ {{ checkedAddress.name }}
+ 默认
+
+
+ {{ checkedAddress.tel }}
+ {{ checkedAddress.addressDetail }}
+
+
+
+
+
+
+ 还没有收货地址,去添加
+
+
+
+
+
+
+
+
+
+ 没有可用的优惠券
+ 0张
+
+
+ 优惠券
+ {{ availableCouponLength }}张
+
+
+ 优惠券
+ -¥{{ couponPrice }}元
+
+
+
+
+
+
+
+
+
+
+
+
+ 商品合计
+
+
+ ¥{{ goodsTotalPrice }}元
+
+
+
+
+ 运费
+
+
+ ¥{{ freightPrice }}元
+
+
+
+
+ 优惠券
+
+
+ -¥{{ couponPrice }}元
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ x{{ item.number }}
+
+ {{ item.specifications }}
+ ¥{{ item.price }}
+
+
+
+
+
+ 实付:¥{{ actualPrice }}
+ 去付款
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/comment/comment.css b/litemall-wx_uni/pages/comment/comment.css
new file mode 100644
index 00000000..10baf4cc
--- /dev/null
+++ b/litemall-wx_uni/pages/comment/comment.css
@@ -0,0 +1,155 @@
+.comments {
+ width: 100%;
+ height: auto;
+ padding-left: 30rpx;
+ background: #fff;
+ margin: 20rpx 0;
+}
+
+.comments .h {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 1000;
+ width: 100%;
+ display: flex;
+ background: #fff;
+ height: 84rpx;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.comments .h .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 50%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.comments .h .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #333;
+ font-size: 30rpx;
+ width: 170rpx;
+}
+
+.comments .h .item.active .txt {
+ color: #ab2b2b;
+ border-bottom: 4rpx solid #ab2b2b;
+}
+
+.comments .b {
+ margin-top: 85rpx;
+ height: auto;
+ width: 720rpx;
+}
+
+.comments .b.no-h {
+ margin-top: 0;
+}
+
+.comments .item {
+ height: auto;
+ width: 720rpx;
+ overflow: hidden;
+ border-bottom: 1px solid #d9d9d9;
+ padding-bottom: 25rpx;
+}
+
+.comments .info {
+ height: 127rpx;
+ width: 100%;
+ padding: 33rpx 0 27rpx 0;
+}
+
+.comments .user {
+ float: left;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ font-size: 0;
+}
+
+.comments .user image {
+ float: left;
+ width: 67rpx;
+ height: 67rpx;
+ margin-right: 17rpx;
+ border-radius: 50%;
+}
+
+.comments .user text {
+ display: inline-block;
+ width: auto;
+ height: 66rpx;
+ overflow: hidden;
+ font-size: 29rpx;
+ line-height: 66rpx;
+}
+
+.comments .time {
+ display: block;
+ float: right;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ color: #7f7f7f;
+ font-size: 25rpx;
+ margin-right: 30rpx;
+}
+
+.comments .comment {
+ width: 720rpx;
+ padding-right: 30rpx;
+ line-height: 45.8rpx;
+ font-size: 29rpx;
+ margin-bottom: 16rpx;
+}
+
+.comments .imgs {
+ width: 720rpx;
+ height: 150rpx;
+ margin-bottom: 25rpx;
+}
+
+.comments .imgs .img {
+ height: 150rpx;
+ width: 150rpx;
+ margin-right: 28rpx;
+}
+
+.comments .spec {
+ width: 720rpx;
+ height: 25rpx;
+ font-size: 24rpx;
+ color: #999;
+}
+
+.comments .spec .item {
+ color: #7f7f7f;
+ font-size: 25rpx;
+}
+
+.comments .customer-service {
+ width: 690rpx;
+ height: auto;
+ overflow: hidden;
+ margin-top: 23rpx;
+ background: rgba(0, 0, 0, 0.03);
+ padding: 21rpx;
+}
+
+.comments .customer-service .u {
+ font-size: 24rpx;
+ color: #333;
+ line-height: 37.5rpx;
+}
+
+.comments .customer-service .c {
+ font-size: 24rpx;
+ color: #999;
+ line-height: 37.5rpx;
+}
diff --git a/litemall-wx_uni/pages/comment/comment.vue b/litemall-wx_uni/pages/comment/comment.vue
new file mode 100644
index 00000000..e52788d0
--- /dev/null
+++ b/litemall-wx_uni/pages/comment/comment.vue
@@ -0,0 +1,187 @@
+
+
+
+
+ 全部({{ allCount }})
+
+
+ 有图({{ hasPicCount }})
+
+
+
+
+
+
+
+ {{ item.userInfo.nickname }}
+
+ {{ item.addTime }}
+
+
+ {{ item.content }}
+
+
+
+
+
+
+ 商家回复:
+ {{ item.adminContent }}
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/commentPost/commentPost.css b/litemall-wx_uni/pages/commentPost/commentPost.css
new file mode 100644
index 00000000..978e121c
--- /dev/null
+++ b/litemall-wx_uni/pages/commentPost/commentPost.css
@@ -0,0 +1,249 @@
+page,
+.container {
+ height: 100%;
+ background: #f4f4f4;
+}
+
+.post-comment {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding: 30rpx;
+ background: #fff;
+}
+
+.post-comment .goods {
+ display: flex;
+ align-items: center;
+ height: 199rpx;
+ margin-left: 31.25rpx;
+}
+
+.post-comment .goods .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.post-comment .goods .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.post-comment .goods .info {
+ height: 145.83rpx;
+ flex: 1;
+ padding-left: 20rpx;
+}
+
+.post-comment .goods .name {
+ margin-top: 30rpx;
+ display: block;
+ height: 44rpx;
+ line-height: 44rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.post-comment .goods .number {
+ display: block;
+ height: 37rpx;
+ line-height: 37rpx;
+ color: #666;
+ font-size: 25rpx;
+}
+
+.post-comment .goods .status {
+ width: 105rpx;
+ color: #b4282d;
+ font-size: 25rpx;
+}
+
+.post-comment .rater {
+ display: flex;
+ flex-direction: row;
+ height: 55rpx;
+}
+
+.post-comment .rater .rater-title {
+ font-size: 29rpx;
+ padding-right: 10rpx;
+}
+
+.post-comment .rater image {
+ padding-left: 5rpx;
+ height: 50rpx;
+ width: 50rpx;
+}
+
+.post-comment .rater .rater-desc {
+ font-size: 29rpx;
+ padding-left: 10rpx;
+}
+
+.post-comment .input-box {
+ height: 337.5rpx;
+ width: 690rpx;
+ position: relative;
+ background: #fff;
+}
+
+.post-comment .input-box .content {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block;
+ background: #fff;
+ font-size: 29rpx;
+ border: 5px solid #f4f4f4;
+ height: 300rpx;
+ width: 650rpx;
+ padding: 20rpx;
+}
+
+.post-comment .input-box .count {
+ position: absolute;
+ bottom: 20rpx;
+ right: 20rpx;
+ display: block;
+ height: 30rpx;
+ width: 50rpx;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.post-comment .btns {
+ height: 108rpx;
+}
+
+.post-comment .close {
+ float: left;
+ height: 108rpx;
+ line-height: 108rpx;
+ text-align: left;
+ color: #666;
+ padding: 0 30rpx;
+}
+
+.post-comment .post {
+ float: right;
+ height: 108rpx;
+ line-height: 108rpx;
+ text-align: right;
+ padding: 0 30rpx;
+}
+
+.weui-uploader {
+ margin-top: 50rpx;
+}
+
+.weui-uploader__hd {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ padding-bottom: 10px;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+}
+
+.weui-uploader__title {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ flex: 1;
+}
+
+.weui-uploader__info {
+ color: #b2b2b2;
+}
+
+.weui-uploader__bd {
+ margin-bottom: -4px;
+ margin-right: -9px;
+ overflow: hidden;
+}
+
+.weui-uploader__file {
+ float: left;
+ margin-right: 9px;
+ margin-bottom: 9px;
+}
+
+.weui-uploader__img {
+ display: block;
+ width: 79px;
+ height: 79px;
+}
+
+.weui-uploader__file_status {
+ position: relative;
+}
+
+.weui-uploader__file_status:before {
+ content: ' ';
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.weui-uploader__file-content {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ color: #fff;
+}
+
+.weui-uploader__input-box {
+ float: left;
+ position: relative;
+ margin-right: 9px;
+ margin-bottom: 9px;
+ width: 77px;
+ height: 77px;
+ border: 1px solid #d9d9d9;
+}
+
+.weui-uploader__input-box:after,
+.weui-uploader__input-box:before {
+ content: ' ';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #d9d9d9;
+}
+
+.weui-uploader__input-box:before {
+ width: 2px;
+ height: 39.5px;
+}
+
+.weui-uploader__input-box:after {
+ width: 39.5px;
+ height: 2px;
+}
+
+.weui-uploader__input-box:active {
+ border-color: #999;
+}
+
+.weui-uploader__input-box:active:after,
+.weui-uploader__input-box:active:before {
+ background-color: #999;
+}
+
+.weui-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
diff --git a/litemall-wx_uni/pages/commentPost/commentPost.vue b/litemall-wx_uni/pages/commentPost/commentPost.vue
new file mode 100644
index 00000000..cd7239cd
--- /dev/null
+++ b/litemall-wx_uni/pages/commentPost/commentPost.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+ {{ orderGoods.goodsName }} x{{ orderGoods.number }}
+
+ {{ orderGoods.goodsSpecificationValues }}
+
+
+
+ 评分
+
+
+
+
+
+ {{ starText }}
+
+
+
+ {{ 140 - content.length }}
+
+
+
+
+ 图片上传
+ {{ picUrls.length }}/{{ files.length }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 发表
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/coupon/coupon.css b/litemall-wx_uni/pages/coupon/coupon.css
new file mode 100644
index 00000000..2e3b0060
--- /dev/null
+++ b/litemall-wx_uni/pages/coupon/coupon.css
@@ -0,0 +1,131 @@
+page {
+ background: #f4f4f4;
+ min-height: 100%;
+}
+
+.container {
+ background: #f4f4f4;
+ min-height: 100%;
+ padding-top: 30rpx;
+}
+
+.coupon-list {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+}
+
+.item {
+ position: relative;
+ height: 290rpx;
+ width: 700rpx;
+ background: linear-gradient(to right, #cfa568, #e3bf79);
+ margin-bottom: 30rpx;
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+ padding-top: 52rpx;
+}
+
+.tag {
+ height: 32rpx;
+ background: #a48143;
+ padding-left: 16rpx;
+ padding-right: 16rpx;
+ position: absolute;
+ left: 20rpx;
+ color: #fff;
+ top: 20rpx;
+ font-size: 20rpx;
+ text-align: center;
+ line-height: 32rpx;
+}
+
+.content {
+ margin-top: 24rpx;
+ margin-left: 40rpx;
+ display: flex;
+ margin-right: 40rpx;
+ flex-direction: row;
+}
+
+.content .left {
+ flex: 1;
+}
+
+.discount {
+ font-size: 50rpx;
+ color: #b4282d;
+}
+
+.min {
+ color: #fff;
+}
+
+.content .right {
+ width: 400rpx;
+}
+
+.name {
+ font-size: 44rpx;
+ color: #fff;
+ margin-bottom: 14rpx;
+}
+
+.time {
+ font-size: 24rpx;
+ color: #fff;
+ line-height: 30rpx;
+}
+
+.condition {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ height: 78rpx;
+ background: rgba(0, 0, 0, 0.08);
+ padding: 24rpx 40rpx;
+ display: flex;
+ flex-direction: row;
+}
+
+.condition .txt {
+ display: block;
+ height: 30rpx;
+ flex: 1;
+ overflow: hidden;
+ font-size: 24rpx;
+ line-height: 30rpx;
+ color: #fff;
+}
+
+.condition .icon {
+ margin-left: 30rpx;
+ width: 24rpx;
+ height: 24rpx;
+}
+
+.page {
+ width: 750rpx;
+ height: 108rpx;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.page view {
+ height: 108rpx;
+ width: 50%;
+ float: left;
+ font-size: 29rpx;
+ color: #333;
+ text-align: center;
+ line-height: 108rpx;
+}
+
+.page .prev {
+ border-right: 1px solid #d9d9d9;
+}
+
+.page .disabled {
+ color: #ccc;
+}
diff --git a/litemall-wx_uni/pages/coupon/coupon.vue b/litemall-wx_uni/pages/coupon/coupon.vue
new file mode 100644
index 00000000..1f3e89ca
--- /dev/null
+++ b/litemall-wx_uni/pages/coupon/coupon.vue
@@ -0,0 +1,170 @@
+
+
+
+
+ {{ item.tag }}
+
+
+
+ {{ item.discount }}元
+ 满{{ item.min }}元使用
+
+
+ {{ item.name }}
+ 有效期:{{ item.days }}天
+ 有效期:{{ item.startTime }} - {{ item.endTime }}
+
+
+
+
+ {{ item.desc }}
+
+
+
+
+
+ 上一页
+ 下一页
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/goods/goods.css b/litemall-wx_uni/pages/goods/goods.css
new file mode 100644
index 00000000..03d2d0e9
--- /dev/null
+++ b/litemall-wx_uni/pages/goods/goods.css
@@ -0,0 +1,933 @@
+.container {
+ margin-bottom: 100rpx;
+}
+
+.goodsimgs {
+ width: 750rpx;
+ height: 750rpx;
+}
+
+.goodsimgs image {
+ width: 750rpx;
+ height: 750rpx;
+}
+
+.commodity_screen {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ top: 0;
+ left: 0;
+ background: #000;
+ opacity: 0.2;
+ overflow: hidden;
+ z-index: 1000;
+ color: #fff;
+}
+
+.commodity_attr_box {
+ width: 100%;
+ overflow: hidden;
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ z-index: 2000;
+ background: #fff;
+ padding-top: 20rpx;
+}
+
+.goods-info {
+ width: 750rpx;
+ height: 306rpx;
+ overflow: hidden;
+ background: #fff;
+}
+
+.goods-info .c {
+ display: block;
+ width: 718.75rpx;
+ height: 100%;
+ margin-left: 31.25rpx;
+ padding: 38rpx 31.25rpx 38rpx 0;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.goods-info .c text {
+ display: block;
+ width: 687.5rpx;
+ text-align: left;
+}
+
+.goods_name {
+ height: 86rpx;
+ line-height: 86rpx;
+ border-bottom: 1px solid #fafafa;
+}
+
+.goods_name_left {
+ float: left;
+ height: 86rpx;
+ font-weight: 550;
+ line-height: 86rpx;
+ margin-left: 35rpx;
+ font-size: 38rpx;
+ letter-spacing: 1rpx;
+}
+
+.goods_name_right {
+ float: right;
+ font-weight: 550;
+ margin-top: 28rpx;
+ width: 140rpx;
+ height: 80rpx;
+ line-height: 82rpx;
+ padding: 0;
+ margin: 0;
+ margin-right: 0rpx;
+ text-align: center;
+ font-size: 25rpx;
+ color: #f4f4f4;
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 0rpx;
+ border-bottom-right-radius: 0rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #f3d10e 0%, #f48f18 100%);
+}
+
+.goods-info .desc {
+ height: 43rpx;
+ margin-bottom: 41rpx;
+ font-size: 24rpx;
+ line-height: 36rpx;
+ color: #999;
+}
+
+.goods-info .price {
+ height: 70rpx;
+ align-content: center;
+}
+
+.goods-info .counterPrice {
+ float: left;
+ padding-left: 0rpx;
+ text-decoration: line-through;
+ font-size: 30rpx;
+ color: #999;
+}
+
+.goods-info .retailPrice {
+ padding-left: 5%;
+ font-size: 30rpx;
+ color: #a78845;
+}
+
+.goods-info .brand {
+ margin-top: 23rpx;
+ min-height: 40rpx;
+ text-align: left;
+}
+
+.goods-info .brand text {
+ display: inline-block;
+ width: auto;
+ padding: 2px 30rpx 2px 10.5rpx;
+ line-height: 35.5rpx;
+ border: 1px solid #f48f18;
+ font-size: 25rpx;
+ color: #f48f18;
+ border-radius: 4rpx;
+ background-size: 10.75rpx 18.75rpx;
+}
+
+.section-nav {
+ width: 750rpx;
+ height: 108rpx;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.section-nav .t {
+ float: left;
+ width: 600rpx;
+ height: 108rpx;
+ line-height: 108rpx;
+ font-size: 29rpx;
+ color: #333;
+ margin-left: 31.25rpx;
+}
+
+.section-nav .i {
+ float: right;
+ width: 52rpx;
+ height: 52rpx;
+ margin-right: 16rpx;
+ margin-top: 28rpx;
+}
+
+.section-act .t {
+ float: left;
+ display: flex;
+ align-items: center;
+ width: 600rpx;
+ height: 108rpx;
+ overflow: hidden;
+ line-height: 108rpx;
+ font-size: 29rpx;
+ color: #999;
+ margin-left: 31.25rpx;
+}
+
+.section-act .label {
+ color: #999;
+}
+
+.section-act .tag {
+ display: flex;
+ align-items: center;
+ padding: 0 10rpx;
+ border-radius: 3px;
+ height: 37rpx;
+ width: auto;
+ color: #f48f18;
+ overflow: hidden;
+ border: 1px solid #f48f18;
+ font-size: 25rpx;
+ margin: 0 10rpx;
+}
+
+.section-act .text {
+ display: flex;
+ align-items: center;
+ height: 37rpx;
+ width: auto;
+ overflow: hidden;
+ color: #f48f18;
+ font-size: 29rpx;
+}
+
+.comments {
+ width: 100%;
+ height: auto;
+ padding-left: 30rpx;
+ background: #fff;
+ margin: 20rpx 0;
+}
+
+.comments .h {
+ height: 102.5rpx;
+ line-height: 100.5rpx;
+ width: 718.75rpx;
+ padding-right: 16rpx;
+}
+
+.comments .h .t {
+ display: block;
+ float: left;
+ width: 50%;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.comments .h .i {
+ display: block;
+ float: right;
+ width: 164rpx;
+ height: 100.5rpx;
+ line-height: 100.5rpx;
+ background-size: 52rpx;
+}
+
+.comments .b {
+ height: auto;
+ width: 720rpx;
+}
+
+.comments .item {
+ height: auto;
+ width: 720rpx;
+ overflow: hidden;
+ border-top: 1px solid #d9d9d9;
+}
+
+.comments .info {
+ height: 127rpx;
+ width: 100%;
+ padding: 33rpx 0 27rpx 0;
+}
+
+.comments .user {
+ float: left;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ font-size: 0;
+}
+
+.comments .user image {
+ float: left;
+ width: 67rpx;
+ height: 67rpx;
+ margin-right: 17rpx;
+ border-radius: 50%;
+}
+
+.comments .user text {
+ display: inline-block;
+ width: auto;
+ height: 66rpx;
+ overflow: hidden;
+ font-size: 29rpx;
+ line-height: 66rpx;
+}
+
+.comments .time {
+ display: block;
+ float: right;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ color: #7f7f7f;
+ font-size: 25rpx;
+ margin-right: 30rpx;
+}
+
+.comments .content {
+ width: 720rpx;
+ padding-right: 30rpx;
+ line-height: 45.8rpx;
+ font-size: 29rpx;
+ margin-bottom: 24rpx;
+}
+
+.comments .imgs {
+ width: 720rpx;
+ height: auto;
+ margin-bottom: 25rpx;
+}
+
+.comments .imgs .img {
+ height: 150rpx;
+ width: 150rpx;
+ margin-right: 28rpx;
+}
+
+.comments .spec {
+ width: 720rpx;
+ padding-right: 30rpx;
+ line-height: 30rpx;
+ font-size: 24rpx;
+ color: #999;
+ margin-bottom: 30rpx;
+}
+
+.comments .customer-service {
+ width: 690rpx;
+ height: auto;
+ overflow: hidden;
+ margin-top: 23rpx;
+ margin-bottom: 23rpx;
+ background: rgba(0, 0, 0, 0.03);
+ padding: 21rpx;
+}
+
+.comments .customer-service .u {
+ font-size: 24rpx;
+ color: #333;
+ line-height: 37.5rpx;
+}
+
+.comments .customer-service .c {
+ font-size: 24rpx;
+ color: #999;
+ line-height: 37.5rpx;
+}
+
+.goods-attr {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding: 0 31.25rpx 25rpx 31.25rpx;
+ background: #fff;
+}
+
+.goods-attr .t {
+ width: 687.5rpx;
+ height: 104rpx;
+ line-height: 104rpx;
+ font-size: 38.5rpx;
+}
+
+.goods-attr .item {
+ width: 687.5rpx;
+ height: 68rpx;
+ padding: 11rpx 20rpx;
+ margin-bottom: 11rpx;
+ background: #f7f7f7;
+ font-size: 38.5rpx;
+}
+
+.goods-attr .left {
+ float: left;
+ font-size: 25rpx;
+ width: 134rpx;
+ height: 45rpx;
+ line-height: 45rpx;
+ overflow: hidden;
+ color: #999;
+}
+
+.goods-attr .right {
+ float: left;
+ font-size: 36.5rpx;
+ margin-left: 20rpx;
+ width: 480rpx;
+ height: 45rpx;
+ line-height: 45rpx;
+ overflow: hidden;
+ color: #333;
+}
+
+.detail {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.detail image {
+ width: 750rpx;
+ display: block;
+}
+
+.common-problem {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.common-problem .h {
+ position: relative;
+ height: 145.5rpx;
+ width: 750rpx;
+ padding: 56.25rpx 0;
+ background: #fff;
+ text-align: center;
+}
+
+.common-problem .h .line {
+ display: inline-block;
+ position: absolute;
+ top: 72rpx;
+ left: 0;
+ z-index: 2;
+ height: 1px;
+ margin-left: 225rpx;
+ width: 300rpx;
+ background: #ccc;
+}
+
+.common-problem .h .title {
+ display: inline-block;
+ position: absolute;
+ top: 56.125rpx;
+ left: 0;
+ z-index: 3;
+ height: 33rpx;
+ margin-left: 285rpx;
+ width: 180rpx;
+ background: #fff;
+}
+
+.common-problem .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding: 0rpx 30rpx;
+ background: #fff;
+}
+
+.common-problem .item {
+ height: auto;
+ overflow: hidden;
+ padding-bottom: 25rpx;
+}
+
+.common-problem .question-box .spot {
+ float: left;
+ display: block;
+ height: 8rpx;
+ width: 8rpx;
+ background: #b4282d;
+ border-radius: 50%;
+ margin-top: 11rpx;
+}
+
+.common-problem .question-box .question {
+ float: left;
+ line-height: 30rpx;
+ padding-left: 8rpx;
+ display: block;
+ font-size: 26rpx;
+ padding-bottom: 15rpx;
+ color: #303030;
+}
+
+.common-problem .answer {
+ line-height: 36rpx;
+ padding-left: 16rpx;
+ font-size: 26rpx;
+ color: #787878;
+}
+
+.related-goods {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding-bottom: 80rpx;
+}
+
+.related-goods .h {
+ position: relative;
+ height: 145.5rpx;
+ width: 750rpx;
+ padding: 56.25rpx 0;
+ background: #fff;
+ text-align: center;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.related-goods .h .line {
+ display: inline-block;
+ position: absolute;
+ top: 72rpx;
+ left: 0;
+ z-index: 2;
+ height: 1px;
+ margin-left: 225rpx;
+ width: 300rpx;
+ background: #ccc;
+}
+
+.related-goods .h .title {
+ display: inline-block;
+ position: absolute;
+ top: 56.125rpx;
+ left: 0;
+ z-index: 3;
+ height: 33rpx;
+ margin-left: 285rpx;
+ width: 180rpx;
+ background: #fff;
+}
+
+.related-goods .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.related-goods .b .item {
+ float: left;
+ background: #fff;
+ width: 375rpx;
+ height: auto;
+ overflow: hidden;
+ text-align: center;
+ padding: 15rpx 31.25rpx;
+ border-right: 1px solid #f4f4f4;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.related-goods .item .img {
+ width: 311.45rpx;
+ height: 311.45rpx;
+}
+
+.related-goods .item .name {
+ display: block;
+ width: 311.45rpx;
+ height: 35rpx;
+ margin: 11.5rpx 0 15rpx 0;
+ text-align: center;
+ overflow: hidden;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.related-goods .item .price {
+ display: block;
+ width: 311.45rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #b4282d;
+}
+
+.bottom-btn {
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ z-index: 10;
+ width: 750rpx;
+ height: 100rpx;
+ display: flex;
+ background: #fff;
+}
+
+.bottom-btn .l {
+ float: left;
+ height: 100rpx;
+ width: 162rpx;
+ border: 1px solid #f4f4f4;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.bottom-btn .l.l-collect {
+ border-right: none;
+ border-left: none;
+ text-align: center;
+ width: 90rpx;
+}
+
+.bottom-btn .l.l-collect .icon {
+ position: absolute;
+ top: 28rpx;
+ left: 20rpx;
+ font-size: 44rpx;
+}
+
+.bottom-btn .l.l-kefu {
+ position: relative;
+ height: 54rpx;
+ width: 63rpx;
+}
+
+.bottom-btn .l.l-cart .box {
+ position: relative;
+ height: 60rpx;
+ width: 60rpx;
+}
+
+.bottom-btn .l.l-cart .cart-count {
+ height: 28rpx;
+ width: 28rpx;
+ z-index: 10;
+ position: absolute;
+ top: 0;
+ right: 0;
+ background: #b4282d;
+ text-align: center;
+ font-size: 18rpx;
+ color: #fff;
+ line-height: 28rpx;
+ border-radius: 50%;
+}
+
+.bottom-btn .l.l-cart .icon {
+ position: absolute;
+ top: 10rpx;
+ left: 0;
+ font-size: 44rpx;
+}
+
+.bottom-btn .c {
+ float: left;
+ background: #b4282d;
+ height: 100rpx;
+ line-height: 96rpx;
+ flex: 1;
+ text-align: center;
+ color: #fff;
+}
+
+.bottom-btn .r {
+ border: 1px solid #f48f18;
+ background: #f48f18;
+ float: left;
+ height: 100rpx;
+ line-height: 96rpx;
+ flex: 1;
+ text-align: center;
+ color: #fff;
+}
+
+.bottom-btn .n {
+ float: left;
+ background: #d5d8d8e7;
+ height: 100rpx;
+ line-height: 96rpx;
+ flex: 1;
+ text-align: center;
+ color: rgb(37, 36, 36);
+}
+
+.attr-pop-box {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 8;
+ bottom: 0;
+ /* display: none; */
+}
+
+.attr-pop {
+ width: 100%;
+ height: auto;
+ max-height: 780rpx;
+ padding: 31.25rpx;
+ background: #fff;
+ position: fixed;
+ z-index: 9;
+ bottom: 100rpx;
+}
+
+.attr-pop .close {
+ position: absolute;
+ width: 48rpx;
+ height: 48rpx;
+ right: 31.25rpx;
+ overflow: hidden;
+ top: 31.25rpx;
+}
+
+.attr-pop .close .icon {
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.attr-pop .img-info {
+ width: 687.5rpx;
+ height: 177rpx;
+ overflow: hidden;
+ margin-bottom: 41.5rpx;
+}
+
+.attr-pop .img {
+ float: left;
+ height: 177rpx;
+ width: 177rpx;
+ background: #f4f4f4;
+ margin-right: 31.25rpx;
+}
+
+.attr-pop .info {
+ float: left;
+ height: 177rpx;
+ display: flex;
+ align-items: center;
+}
+
+.attr-pop .p {
+ font-size: 33rpx;
+ color: #333;
+ height: 33rpx;
+ line-height: 33rpx;
+ margin-bottom: 10rpx;
+}
+
+.attr-pop .a {
+ font-size: 29rpx;
+ color: #333;
+ height: 40rpx;
+ line-height: 40rpx;
+}
+
+.spec-con {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+}
+
+.spec-con .name {
+ margin-bottom: 6rpx;
+ font-size: 29rpx;
+ color: #333;
+}
+
+.spec-con .values {
+ height: auto;
+ margin-bottom: 10rpx;
+ font-size: 0;
+}
+
+.spec-con .value {
+ display: inline-block;
+ height: 62rpx;
+ padding: 0 35rpx;
+ line-height: 56rpx;
+ text-align: center;
+ margin-right: 25rpx;
+ margin-bottom: 16.5rpx;
+ border: 1px solid #333;
+ font-size: 25rpx;
+ color: #333;
+}
+
+.spec-con .value.disable {
+ border: 1px solid #ccc;
+ color: #ccc;
+}
+
+.spec-con .value.selected {
+ border: 1px solid #b4282d;
+ color: #b4282d;
+}
+
+.number-item .selnum {
+ width: 322rpx;
+ height: 71rpx;
+ border: 1px solid #ccc;
+ display: flex;
+}
+
+.number-item .cut {
+ width: 93.75rpx;
+ height: 100%;
+ text-align: center;
+ line-height: 65rpx;
+}
+
+.number-item .number {
+ flex: 1;
+ height: 100%;
+ text-align: center;
+ line-height: 68.75rpx;
+ border-left: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+ float: left;
+}
+
+.number-item .add {
+ width: 93.75rpx;
+ height: 100%;
+ text-align: center;
+ line-height: 65rpx;
+}
+
+.contact {
+ height: 100rpx;
+ width: 100rpx;
+ border-radius: 100%;
+ position: fixed;
+ bottom: 96rpx;
+ right: 10rpx;
+ font-size: 20rpx;
+ box-sizing: border-box;
+ background: url('../../static/images/customer.png') no-repeat center 21rpx;
+ background-size: 55rpx auto;
+}
+
+.share-pop-box {
+ width: 100%;
+ height: 100%;
+ position: fixed;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 8;
+ bottom: 0;
+ /* display: none; */
+}
+
+.share-pop {
+ width: 100%;
+ height: auto;
+ max-height: 780rpx;
+ padding: 31.25rpx;
+ background: #fff;
+ position: fixed;
+ z-index: 9;
+ bottom: 100rpx;
+}
+
+.share-pop .close {
+ position: absolute;
+ width: 48rpx;
+ height: 48rpx;
+ right: 31.25rpx;
+ top: 31.25rpx;
+}
+
+.share-pop .close .icon {
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.share-pop .share-info {
+ width: 100%;
+ height: 225rpx;
+ overflow: hidden;
+ margin-bottom: 41.5rpx;
+}
+
+.sharebtn {
+ top: 75rpx;
+ background: none !important;
+ font-size: 32rpx;
+ color: #fff !important;
+ border-radius: 0%;
+ width: 175rpx;
+ height: 150rpx;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ float: left;
+ background: #fff;
+ border-bottom: 0px solid #fafafa;
+ margin-left: 15%;
+}
+
+.sharebtn::after {
+ border: none;
+ border-radius: 0%;
+}
+
+.savesharebtn {
+ top: 75rpx;
+ background: none !important;
+ font-size: 32rpx;
+ color: #fff !important;
+ border-radius: 0%;
+ width: 175rpx;
+ height: 150rpx;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ float: right;
+ background: #fff;
+ border-bottom: 0px solid #fafafa;
+ margin-right: 15%;
+}
+
+.savesharebtn::after {
+ border: none;
+ border-radius: 0%;
+}
+
+.sharebtn_image {
+ /* border: 1px solid #757575; */
+ width: 128rpx;
+ height: 128rpx;
+ margin-top: 0rpx;
+}
+
+.sharebtn_text {
+ /* border: 1px solid #757575; */
+ width: 150rpx;
+ margin-bottom: 2rpx;
+ height: 20rpx;
+ line-height: 20rpx;
+ font-size: 20rpx;
+ color: #555;
+}
+
+.separate {
+ background: #e0e3da;
+ width: 100%;
+ height: 6rpx;
+}
diff --git a/litemall-wx_uni/pages/goods/goods.vue b/litemall-wx_uni/pages/goods/goods.vue
new file mode 100644
index 00000000..3472a04f
--- /dev/null
+++ b/litemall-wx_uni/pages/goods/goods.vue
@@ -0,0 +1,942 @@
+
+
+
+
+
+
+
+
+
+
+ {{ goods.name }}
+ 分享
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ goods.brief }}
+
+ 原价:¥{{ goods.counterPrice }}
+ 现价:¥{{ checkedSpecPrice }}
+
+
+
+
+ {{ brand.name }}
+
+
+
+
+
+ {{ checkedSpecText }}
+
+
+
+
+
+ 评价({{ comment.count > 999 ? '999+' : comment.count }})
+
+ 查看全部
+
+
+
+
+
+
+
+
+
+ {{ item.nickname }}
+
+ {{ item.addTime }}
+
+
+
+ {{ item.content }}
+
+
+
+
+
+
+
+ 商家回复:
+ {{ item.adminContent }}
+
+
+
+
+
+ 商品参数
+
+
+ {{ item.attribute }}
+
+ {{ item.value }}
+
+
+
+
+
+
+
+
+
+
+
+
+ 常见问题
+
+
+
+
+
+ {{ item.question }}
+
+
+
+ {{ item.answer }}
+
+
+
+
+
+
+
+
+
+ 大家都在看
+
+
+
+
+
+ {{ item.name }}
+ ¥{{ item.retailPrice }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 价格:¥{{ checkedSpecPrice }}
+ {{ tmpSpecText }}
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+ {{ vitem.value }}
+
+
+
+
+
+ 团购立减
+
+
+ ¥{{ vitem.discount }} ({{ vitem.discountMember }}人)
+
+
+
+
+
+
+ 数量
+
+ -
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ cartGoodsCount }}
+
+
+
+ 加入购物车
+ {{ isGroupon ? '参加团购' : '立即购买' }}
+ 商品已售空
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/groupon/grouponDetail/grouponDetail.css b/litemall-wx_uni/pages/groupon/grouponDetail/grouponDetail.css
new file mode 100644
index 00000000..15296dbe
--- /dev/null
+++ b/litemall-wx_uni/pages/groupon/grouponDetail/grouponDetail.css
@@ -0,0 +1,304 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.progress {
+ padding-top: 25rpx;
+ background: #fff;
+ height: auto;
+ overflow: hidden;
+}
+
+.item-a {
+ padding: 0 21.25rpx;
+}
+
+.item-c {
+ margin-left: 31.25rpx;
+ height: 103rpx;
+ line-height: 103rpx;
+}
+
+.item-c .l {
+ float: left;
+}
+
+.item-c .r {
+ height: 103rpx;
+ float: right;
+ display: flex;
+ align-items: center;
+ padding-right: 16rpx;
+}
+
+.item-c .btn {
+ float: right;
+ line-height: 66rpx;
+ font-size: 30rpx;
+ border-radius: 5rpx;
+ text-align: center;
+ margin: 0 15rpx;
+ padding: 0 20rpx;
+ height: 66rpx;
+}
+
+.item-c .btn.active {
+ background: #a78845;
+ color: #fff;
+}
+
+.order-goods {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.order-goods .h {
+ height: 93.75rpx;
+ line-height: 93.75rpx;
+ margin-left: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ padding-right: 31.25rpx;
+}
+
+.order-goods .h .label {
+ float: left;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order-goods .h .status {
+ float: right;
+ font-size: 30rpx;
+ color: #b4282d;
+}
+
+.order-goods .item {
+ display: flex;
+ align-items: center;
+ height: 192rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-goods .item:last-child {
+ border-bottom: none;
+}
+
+.order-goods .item .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.order-goods .item .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.order-goods .item .info {
+ flex: 1;
+ height: 145.83rpx;
+ margin-left: 20rpx;
+}
+
+.order-goods .item .t {
+ margin-top: 8rpx;
+ height: 33rpx;
+ line-height: 33rpx;
+ margin-bottom: 10.5rpx;
+}
+
+.order-goods .item .t .name {
+ display: block;
+ float: left;
+ height: 33rpx;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .t .number {
+ display: block;
+ float: right;
+ height: 33rpx;
+ text-align: right;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .attr {
+ height: 29rpx;
+ line-height: 29rpx;
+ color: #666;
+ margin-bottom: 25rpx;
+ font-size: 25rpx;
+}
+
+.order-goods .item .price {
+ display: block;
+ float: left;
+ height: 30rpx;
+ line-height: 30rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .btn {
+ height: 50rpx;
+ line-height: 50rpx;
+ border-radius: 5rpx;
+ text-align: center;
+ display: block;
+ float: right;
+ margin: 0 15rpx;
+ padding: 0 20rpx;
+}
+
+.order-goods .item .btn.active {
+ background: #b4282d;
+ color: #fff;
+}
+
+.order-bottom {
+ margin-top: 20rpx;
+ padding-left: 31.25rpx;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+}
+
+.order-bottom .address {
+ height: 128rpx;
+ padding-top: 25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-bottom .address .t {
+ height: 35rpx;
+ line-height: 35rpx;
+ margin-bottom: 7.5rpx;
+}
+
+.order-bottom .address .name {
+ display: inline-block;
+ height: 35rpx;
+ width: 140rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .address .mobile {
+ display: inline-block;
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .address .b {
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .total {
+ height: 106rpx;
+ padding-top: 20rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-bottom .total .t {
+ height: 30rpx;
+ line-height: 30rpx;
+ margin-bottom: 7.5rpx;
+}
+
+.order-bottom .total .t .label {
+ width: 150rpx;
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .total .t .txt {
+ float: right;
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+ padding-right: 31.25rpx;
+}
+
+.order-bottom .pay-fee {
+ height: 81rpx;
+ line-height: 81rpx;
+}
+
+.order-bottom .pay-fee .label {
+ width: 140rpx;
+}
+
+.order-bottom .pay-fee .txt {
+ float: right;
+ padding-right: 31.25rpx;
+}
+
+.menu-list-pro {
+ margin-top: 20rpx;
+ overflow-x: scroll;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ height: 260rpx;
+ width: 100%;
+ overflow: hidden;
+ border-bottom: 1rpx #cfc9ca;
+ background-color: #fff;
+}
+
+.menu-list-pro .h {
+ height: 93.75rpx;
+ line-height: 93.75rpx;
+ margin-left: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ padding-right: 31.25rpx;
+}
+
+.menu-list-pro .h .label {
+ float: left;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.menu-list-pro .h .status {
+ float: right;
+ font-size: 30rpx;
+ color: #a78845;
+}
+
+.menu-list-pro .menu-list-item {
+ display: block;
+ float: left;
+ height: 110rpx;
+ width: 80rpx;
+ margin-top: 30rpx;
+ margin-bottom: 30rpx;
+ margin-left: 40rpx;
+}
+
+.menu-list-pro .icon {
+ height: 80rpx;
+ width: 80rpx;
+ border-radius: 12rpx;
+ box-shadow: 0px 4rpx 4rpx 0px #cfc9ca;
+}
+
+.menu-list-pro .txt {
+ display: block;
+ float: left;
+ width: 80rpx;
+ margin-top: 5rpx;
+ font-size: 22rpx;
+ color: #a78845;
+}
diff --git a/litemall-wx_uni/pages/groupon/grouponDetail/grouponDetail.vue b/litemall-wx_uni/pages/groupon/grouponDetail/grouponDetail.vue
new file mode 100644
index 00000000..e7812c17
--- /dev/null
+++ b/litemall-wx_uni/pages/groupon/grouponDetail/grouponDetail.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+ 开团还缺
+ {{ rules.discountMember - joiners.length }}
+ 人
+
+
+
+
+
+
+
+
+
+ 参与团购 ( {{ joiners.length }}人)
+ 查看全部
+
+
+
+
+ {{ item.nickname }}
+
+
+
+
+
+ 商品信息
+
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ x{{ item.number }}
+
+ {{ item.goodsSpecificationValues }}
+ ¥{{ item.retailPrice }}
+
+
+
+
+
+
+
+ 商品合计:
+ ¥{{ orderInfo.goodsPrice }}
+
+
+ 商品运费:
+ ¥{{ orderInfo.freightPrice }}
+
+
+
+ 商品实付:
+ ¥{{ orderInfo.actualPrice }}
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/groupon/grouponList/grouponList.css b/litemall-wx_uni/pages/groupon/grouponList/grouponList.css
new file mode 100644
index 00000000..487f348e
--- /dev/null
+++ b/litemall-wx_uni/pages/groupon/grouponList/grouponList.css
@@ -0,0 +1,108 @@
+page,
+.container {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+ background: #f4f4f4;
+}
+
+.groupon-list {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+ background: #f4f4f4;
+}
+
+.groupon-list .item {
+ height: 244rpx;
+ width: 100%;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.groupon-list .img {
+ margin-top: 12rpx;
+ margin-right: 12rpx;
+ float: left;
+ width: 220rpx;
+ height: 220rpx;
+}
+
+.groupon-list .right {
+ float: left;
+ height: 244rpx;
+ width: 476rpx;
+ display: flex;
+ flex-flow: row nowrap;
+}
+
+.groupon-list .text {
+ display: flex;
+ flex-wrap: nowrap;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ height: 244rpx;
+ width: 476rpx;
+}
+
+.groupon-list .name {
+ float: left;
+ display: block;
+ color: #333;
+ line-height: 50rpx;
+ font-size: 30rpx;
+}
+
+.groupon-list .desc {
+ width: 476rpx;
+ display: block;
+ color: #999;
+ line-height: 50rpx;
+ font-size: 25rpx;
+}
+
+.groupon-list .price {
+ width: 476rpx;
+ display: flex;
+ color: #ab956d;
+ line-height: 50rpx;
+ font-size: 33rpx;
+}
+
+.groupon-list .counterPrice {
+ text-decoration: line-through;
+ font-size: 28rpx;
+ color: #999;
+}
+
+.groupon-list .retailPrice {
+ margin-left: 30rpx;
+ font-size: 28rpx;
+ color: #a78845;
+}
+
+.page {
+ width: 750rpx;
+ height: 108rpx;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.page view {
+ height: 108rpx;
+ width: 50%;
+ float: left;
+ font-size: 29rpx;
+ color: #333;
+ text-align: center;
+ line-height: 108rpx;
+}
+
+.page .prev {
+ border-right: 1px solid #d9d9d9;
+}
+
+.page .disabled {
+ color: #ccc;
+}
diff --git a/litemall-wx_uni/pages/groupon/grouponList/grouponList.vue b/litemall-wx_uni/pages/groupon/grouponList/grouponList.vue
new file mode 100644
index 00000000..6faec21a
--- /dev/null
+++ b/litemall-wx_uni/pages/groupon/grouponList/grouponList.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.grouponMember }}人成团
+
+
+ 有效期至 {{ item.expireTime }}
+
+ {{ item.brief }}
+
+ 现价:¥{{ item.retailPrice }}
+ 团购价:¥{{ item.grouponPrice }}
+
+
+
+
+
+
+
+ 上一页
+ 下一页
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/groupon/myGroupon/myGroupon.css b/litemall-wx_uni/pages/groupon/myGroupon/myGroupon.css
new file mode 100644
index 00000000..4be305f3
--- /dev/null
+++ b/litemall-wx_uni/pages/groupon/myGroupon/myGroupon.css
@@ -0,0 +1,213 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.orders-switch {
+ width: 100%;
+ background: #fff;
+ height: 84rpx;
+ border-bottom: 1px solid #a78845;
+}
+
+.orders-switch .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 50%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.orders-switch .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #333;
+ font-size: 30rpx;
+ width: 100%;
+}
+
+.orders-switch .item.active .txt {
+ color: #a78845;
+ border-bottom: 4rpx solid #a78845;
+}
+
+.no-order {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-order .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-order .c image {
+ margin: 0 auto;
+ display: block;
+ text-align: center;
+ width: 258rpx;
+ height: 258rpx;
+}
+
+.no-order .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 29rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.orders {
+ height: auto;
+ width: 100%;
+ overflow: hidden;
+}
+
+.order {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.order .h {
+ height: 83.3rpx;
+ line-height: 83.3rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order .h .l {
+ float: left;
+ color: #a78845;
+ font-size: 26rpx;
+}
+
+.order .h .r {
+ float: right;
+ color: #a78845;
+ font-size: 26rpx;
+}
+
+.order .i {
+ height: 56rpx;
+ line-height: 56rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order .i .l {
+ float: left;
+ color: #a78845;
+ font-size: 26rpx;
+}
+
+.order .i .r {
+ float: right;
+ color: #a78845;
+ font-size: 26rpx;
+}
+
+.order .j {
+ height: 56rpx;
+ line-height: 56rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+}
+
+.order .j .l {
+ float: left;
+ font-size: 26rpx;
+ color: #a78845;
+}
+
+.order .j .r {
+ float: right;
+ color: #a78845;
+ font-size: 26rpx;
+}
+
+.order .goods {
+ display: flex;
+ align-items: center;
+ height: 199rpx;
+ margin-left: 31.25rpx;
+}
+
+.order .goods .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.order .goods .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.order .goods .info {
+ height: 145.83rpx;
+ flex: 1;
+ padding-left: 20rpx;
+}
+
+.order .goods .name {
+ margin-top: 30rpx;
+ display: block;
+ height: 44rpx;
+ line-height: 44rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order .goods .number {
+ display: block;
+ height: 37rpx;
+ line-height: 37rpx;
+ color: #666;
+ font-size: 25rpx;
+}
+
+.order .goods .status {
+ width: 105rpx;
+ color: #a78845;
+ font-size: 25rpx;
+}
+
+.order .b {
+ height: 103rpx;
+ line-height: 103rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-top: 1px solid #f4f4f4;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order .b .l {
+ float: left;
+}
+
+.order .b .r {
+ float: right;
+}
+
+.order .b .btn {
+ margin-top: 19rpx;
+ height: 64.5rpx;
+ line-height: 64.5rpx;
+ text-align: center;
+ padding: 0 20rpx;
+ border-radius: 5rpx;
+ font-size: 28rpx;
+ color: #fff;
+ background: #a78845;
+}
diff --git a/litemall-wx_uni/pages/groupon/myGroupon/myGroupon.vue b/litemall-wx_uni/pages/groupon/myGroupon/myGroupon.vue
new file mode 100644
index 00000000..edf02a23
--- /dev/null
+++ b/litemall-wx_uni/pages/groupon/myGroupon/myGroupon.vue
@@ -0,0 +1,131 @@
+
+
+
+
+ 发起的团购
+
+
+ 参加的团购
+
+
+
+
+ 尚未参加任何团购
+
+
+
+
+
+
+ 开团中
+ 开团成功
+ 开团失败
+ {{ item.creator }}发起
+
+
+
+ 订单编号:{{ item.orderSn }}
+ {{ item.orderStatusText }}
+
+
+
+ 团购立减:¥{{ item.rules.discount }}
+ 参与时间:{{ item.groupon.addTime }}
+
+
+
+ 团购要求:{{ item.rules.discountMember }}人
+ 当前参团:{{ item.joinerCount }}人
+
+
+
+
+
+
+
+
+ {{ gitem.goodsName }}
+ 共{{ gitem.number }}件商品
+
+
+
+
+
+
+ 实付:¥{{ item.actualPrice }}
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/help/help.css b/litemall-wx_uni/pages/help/help.css
new file mode 100644
index 00000000..4087c9b1
--- /dev/null
+++ b/litemall-wx_uni/pages/help/help.css
@@ -0,0 +1,67 @@
+.common-problem {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding: 0rpx 30rpx;
+ background: #fff;
+}
+
+.item {
+ height: auto;
+ overflow: hidden;
+ padding-bottom: 25rpx;
+}
+
+.question-box .spot {
+ float: left;
+ display: block;
+ height: 10rpx;
+ width: 10rpx;
+ background: #b4282d;
+ border-radius: 50%;
+ margin-top: 11rpx;
+}
+
+.question-box .question {
+ float: left;
+ line-height: 30rpx;
+ padding-left: 8rpx;
+ display: block;
+ font-size: 26rpx;
+ padding-bottom: 15rpx;
+ color: #303030;
+ width: 680rpx;
+}
+
+.answer {
+ line-height: 36rpx;
+ padding-left: 16rpx;
+ font-size: 26rpx;
+ color: #787878;
+ display: block;
+}
+
+.page {
+ width: 750rpx;
+ height: 108rpx;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.page view {
+ height: 108rpx;
+ width: 50%;
+ float: left;
+ font-size: 29rpx;
+ color: #333;
+ text-align: center;
+ line-height: 108rpx;
+}
+
+.page .prev {
+ border-right: 1px solid #d9d9d9;
+}
+
+.page .disabled {
+ color: #ccc;
+}
diff --git a/litemall-wx_uni/pages/help/help.vue b/litemall-wx_uni/pages/help/help.vue
new file mode 100644
index 00000000..d06d8be9
--- /dev/null
+++ b/litemall-wx_uni/pages/help/help.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+ {{ item.question }}
+
+
+
+ {{ item.answer }}
+
+
+
+
+
+ 上一页
+ 下一页
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/hotGoods/hotGoods.css b/litemall-wx_uni/pages/hotGoods/hotGoods.css
new file mode 100644
index 00000000..9b64961a
--- /dev/null
+++ b/litemall-wx_uni/pages/hotGoods/hotGoods.css
@@ -0,0 +1,164 @@
+page {
+ background: #f4f4f4;
+}
+
+.brand-info .name {
+ width: 100%;
+ height: 278rpx;
+ position: relative;
+}
+
+.brand-info .img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 278rpx;
+}
+
+.brand-info .info-box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 278rpx;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.brand-info .info {
+ display: block;
+}
+
+.brand-info .txt {
+ display: block;
+ height: 40rpx;
+ font-size: 37.5rpx;
+ color: #fff;
+}
+
+.brand-info .line {
+ margin: 0 auto;
+ margin-top: 16rpx;
+ display: block;
+ height: 2rpx;
+ width: 145rpx;
+ background: #fff;
+}
+
+.sort {
+ position: relative;
+ background: #fff;
+ width: 100%;
+ height: 78rpx;
+}
+
+.sort-box {
+ background: #fff;
+ width: 100%;
+ height: 78rpx;
+ overflow: hidden;
+ padding: 0 30rpx;
+ display: flex;
+ align-items: center;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.sort-box .item {
+ height: 78rpx;
+ line-height: 78rpx;
+ text-align: center;
+ flex: 1;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.sort-box .item .txt {
+ color: #333;
+}
+
+.sort-box .item.active .txt {
+ color: #b4282d;
+}
+
+.sort-box .item .van-icon {
+ margin-left: 6rpx;
+}
+
+.sort-box-category {
+ background: #fff;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 40rpx 40rpx 0 0;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.sort-box-category .item {
+ height: 54rpx;
+ line-height: 54rpx;
+ text-align: center;
+ float: left;
+ padding: 0 16rpx;
+ margin: 0 0 40rpx 40rpx;
+ border: 1px solid #666;
+ color: #333;
+ font-size: 24rpx;
+}
+
+.sort-box-category .item.active {
+ color: #b4282d;
+ border: 1px solid #b4282d;
+}
+
+.cate-item .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ border-top: 1rpx solid #f4f4f4;
+ margin-top: 20rpx;
+}
+
+.cate-item .b .item {
+ float: left;
+ background: #fff;
+ width: 375rpx;
+ padding-bottom: 33.333rpx;
+ border-bottom: 1rpx solid #f4f4f4;
+ height: auto;
+ overflow: hidden;
+ text-align: center;
+}
+
+.cate-item .b .item-b {
+ border-right: 1rpx solid #f4f4f4;
+}
+
+.cate-item .item .img {
+ margin-top: 10rpx;
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.cate-item .item .name {
+ display: block;
+ width: 365.625rpx;
+ height: 35rpx;
+ padding: 0 20rpx;
+ overflow: hidden;
+ margin: 11.5rpx 0 22rpx 0;
+ text-align: center;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .item .price {
+ display: block;
+ width: 365.625rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #b4282d;
+}
diff --git a/litemall-wx_uni/pages/hotGoods/hotGoods.vue b/litemall-wx_uni/pages/hotGoods/hotGoods.vue
new file mode 100644
index 00000000..f53e5727
--- /dev/null
+++ b/litemall-wx_uni/pages/hotGoods/hotGoods.vue
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+ {{ bannerInfo.name }}
+
+
+
+
+
+
+
+
+ 综合
+
+
+ 价格
+
+
+
+
+ 分类
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ {{ iitem.name }}
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/index/index.css b/litemall-wx_uni/pages/index/index.css
new file mode 100644
index 00000000..b3b414c1
--- /dev/null
+++ b/litemall-wx_uni/pages/index/index.css
@@ -0,0 +1,536 @@
+.banner {
+ width: 750rpx;
+ height: 417rpx;
+}
+
+.banner image {
+ width: 100%;
+ height: 417rpx;
+}
+
+.m-menu {
+ background: #fff;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ padding-bottom: 0rpx;
+ padding-top: 25rpx;
+}
+
+.m-menu .item {
+ width: 150rpx;
+ height: 126rpx;
+}
+
+.m-menu image {
+ display: block;
+ width: 58rpx;
+ height: 58rpx;
+ margin: 0 auto;
+ margin-bottom: 12rpx;
+}
+
+.m-menu text {
+ display: block;
+ font-size: 24rpx;
+ text-align: center;
+ margin: 0 auto;
+ line-height: 1;
+ color: #333;
+}
+
+.a-section {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+ color: #333;
+ margin-top: 20rpx;
+}
+
+.a-section .h {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ height: 130rpx;
+}
+
+.a-section .h .txt {
+ padding-right: 30rpx;
+ background-size: 16.656rpx 27rpx;
+ display: inline-block;
+ height: 36rpx;
+ font-size: 33rpx;
+ line-height: 36rpx;
+}
+
+.a-brand .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ position: relative;
+}
+
+.a-brand .wrap {
+ position: relative;
+}
+
+.a-brand .img {
+ position: absolute;
+ left: 0;
+ top: 0;
+}
+
+.a-brand .mt {
+ position: absolute;
+ z-index: 2;
+ padding: 27rpx 31rpx;
+ left: 0;
+ top: 0;
+}
+
+.a-brand .mt .brand {
+ display: block;
+ font-size: 33rpx;
+ height: 43rpx;
+ color: #fff;
+}
+
+.a-brand .mt .price,
+.a-brand .mt .unit {
+ font-size: 25rpx;
+ color: #fff;
+}
+
+.a-brand .item-1 {
+ float: left;
+ width: 375rpx;
+ height: 252rpx;
+ overflow: hidden;
+ border-top: 1rpx solid #fff;
+ margin-left: 1rpx;
+}
+
+.a-brand .item-1:nth-child(2n + 1) {
+ margin-left: 0;
+ width: 374rpx;
+}
+
+.a-brand .item-1 .img {
+ width: 375rpx;
+ height: 253rpx;
+}
+
+.a-coupon {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.a-coupon .b .item {
+ position: relative;
+ height: 200rpx;
+ width: 700rpx;
+ background: linear-gradient(to right, #cfa568, #e3bf79);
+ margin-bottom: 10rpx;
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+ padding-top: 30rpx;
+}
+
+.a-coupon .b .tag {
+ height: 32rpx;
+ background: #a48143;
+ padding-left: 16rpx;
+ padding-right: 16rpx;
+ position: absolute;
+ left: 20rpx;
+ color: #fff;
+ top: 20rpx;
+ font-size: 20rpx;
+ text-align: center;
+ line-height: 32rpx;
+}
+
+.a-coupon .b .content {
+ margin-top: 24rpx;
+ margin-left: 40rpx;
+ display: flex;
+ margin-right: 40rpx;
+ flex-direction: row;
+}
+
+.a-coupon .b .content .left {
+ flex: 1;
+}
+
+.a-coupon .b .discount {
+ font-size: 50rpx;
+ color: #b4282d;
+}
+
+.a-coupon .b .min {
+ color: #fff;
+}
+
+.a-coupon .b .content .right {
+ width: 400rpx;
+}
+
+.a-coupon .b .name {
+ font-size: 44rpx;
+ color: #fff;
+ margin-bottom: 14rpx;
+}
+
+.a-coupon .b .desc {
+ font-size: 24rpx;
+ color: #fff;
+}
+
+.a-coupon .b .time {
+ font-size: 24rpx;
+ color: #fff;
+ line-height: 30rpx;
+}
+
+.a-groupon {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.a-groupon .b .item {
+ border-top: 1px solid #d9d9d9;
+ margin: 0 20rpx;
+ height: 244rpx;
+ width: 710rpx;
+}
+
+.a-groupon .b .img {
+ margin-top: 12rpx;
+ margin-right: 12rpx;
+ float: left;
+ width: 220rpx;
+ height: 220rpx;
+}
+
+.a-groupon .b .right {
+ float: left;
+ height: 244rpx;
+ width: 476rpx;
+ display: flex;
+ flex-flow: row nowrap;
+}
+
+.a-groupon .b .text {
+ display: flex;
+ flex-wrap: nowrap;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ height: 244rpx;
+ width: 476rpx;
+}
+
+.a-groupon .b .name {
+ float: left;
+ display: block;
+ color: #333;
+ line-height: 50rpx;
+ font-size: 30rpx;
+}
+
+.a-groupon .b .desc {
+ width: 476rpx;
+ display: block;
+ color: #999;
+ line-height: 50rpx;
+ font-size: 25rpx;
+}
+
+.a-groupon .b .price {
+ width: 476rpx;
+ display: flex;
+ color: #ab956d;
+ line-height: 50rpx;
+ font-size: 33rpx;
+}
+
+.a-groupon .b .counterPrice {
+ text-decoration: line-through;
+ font-size: 28rpx;
+ color: #999;
+}
+
+.a-groupon .b .retailPrice {
+ margin-left: 30rpx;
+ font-size: 28rpx;
+ color: #a78845;
+}
+
+.a-new .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding: 0 31rpx 45rpx 31rpx;
+}
+
+.a-new .b .item {
+ float: left;
+ width: 302rpx;
+ margin-top: 10rpx;
+ margin-left: 21rpx;
+ margin-right: 21rpx;
+}
+
+.a-new .b .item-b {
+ margin-left: 42rpx;
+}
+
+.a-new .b .img {
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.a-new .b .name {
+ text-align: center;
+ display: block;
+ width: 302rpx;
+ height: 35rpx;
+ margin-bottom: 14rpx;
+ overflow: hidden;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.a-new .b .price {
+ display: block;
+ text-align: center;
+ line-height: 30rpx;
+ font-size: 30rpx;
+ color: #ab956d;
+}
+
+.a-popular {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.a-popular .b .item {
+ border-top: 1px solid #d9d9d9;
+ margin: 0 20rpx;
+ height: 264rpx;
+ width: 710rpx;
+}
+
+.a-popular .b .img {
+ margin-top: 12rpx;
+ margin-right: 12rpx;
+ float: left;
+ width: 240rpx;
+ height: 240rpx;
+}
+
+.a-popular .b .right {
+ float: left;
+ height: 264rpx;
+ width: 456rpx;
+ display: flex;
+ flex-flow: row nowrap;
+}
+
+.a-popular .b .text {
+ display: flex;
+ flex-wrap: nowrap;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ height: 264rpx;
+ width: 456rpx;
+}
+
+.a-popular .b .name {
+ width: 456rpx;
+ display: block;
+ color: #333;
+ line-height: 50rpx;
+ font-size: 30rpx;
+}
+
+.a-popular .b .desc {
+ width: 456rpx;
+ display: block;
+ color: #999;
+ line-height: 50rpx;
+ font-size: 25rpx;
+}
+
+.a-popular .b .price {
+ width: 456rpx;
+ display: block;
+ color: #ab956d;
+ line-height: 50rpx;
+ font-size: 33rpx;
+}
+
+.a-topic .b {
+ height: 533rpx;
+ width: 750rpx;
+ padding: 0 0 48rpx 0;
+}
+
+.a-topic .b .list {
+ height: 533rpx;
+ width: 750rpx;
+ white-space: nowrap;
+}
+
+.a-topic .b .item {
+ display: inline-block;
+ height: 533rpx;
+ width: 680.5rpx;
+ margin-left: 30rpx;
+ overflow: hidden;
+}
+
+.a-topic .b .item:last-child {
+ margin-right: 30rpx;
+}
+
+.a-topic .b .img {
+ height: 387.5rpx;
+ width: 680.5rpx;
+ margin-bottom: 30rpx;
+}
+
+.a-topic .b .np {
+ height: 35rpx;
+ margin-bottom: 13.5rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.a-topic .b .np .price {
+ margin-left: 20.8rpx;
+ color: #ab956d;
+}
+
+.a-topic .b .desc {
+ display: block;
+ height: 30rpx;
+ color: #999;
+ font-size: 24rpx;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.good-grid {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.good-grid .h {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ height: 130rpx;
+ font-size: 33rpx;
+ color: #333;
+}
+
+.good-grid .b {
+ width: 750rpx;
+ padding: 0 6.25rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.good-grid .b .item {
+ float: left;
+ background: #fff;
+ width: 365rpx;
+ margin-bottom: 6.25rpx;
+ height: 452rpx;
+ overflow: hidden;
+ text-align: center;
+}
+
+.good-grid .b .item .a {
+ height: 452rpx;
+ width: 100%;
+}
+
+.good-grid .b .item-b {
+ margin-left: 6.25rpx;
+}
+
+.good-grid .item .img {
+ margin-top: 20rpx;
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.good-grid .item .name {
+ display: block;
+ width: 365.625rpx;
+ padding: 0 20rpx;
+ overflow: hidden;
+ height: 35rpx;
+ margin: 11.5rpx 0 22rpx 0;
+ text-align: center;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.good-grid .item .price {
+ display: block;
+ width: 365.625rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #ab956d;
+}
+
+.good-grid .t {
+ height: 100rpx;
+ background: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+.search {
+ height: 88rpx;
+ width: 100%;
+ padding: 0 30rpx;
+ background: #fff;
+ display: flex;
+ align-items: center;
+}
+
+.search .van-icon-search {
+ line-height: 59rpx;
+}
+
+.search .input {
+ width: 690rpx;
+ height: 56rpx;
+ background: #ededed;
+ border-radius: 8rpx;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.search .txt {
+ height: 42rpx;
+ line-height: 42rpx;
+ color: #666;
+ padding-left: 10rpx;
+ font-size: 30rpx;
+}
diff --git a/litemall-wx_uni/pages/index/index.vue b/litemall-wx_uni/pages/index/index.vue
new file mode 100644
index 00000000..2bc6db11
--- /dev/null
+++ b/litemall-wx_uni/pages/index/index.vue
@@ -0,0 +1,365 @@
+
+
+
+
+
+
+ 商品搜索, 共{{ goodsCount }}款好物
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ 优惠券
+
+
+
+
+
+
+ {{ item.tag }}
+
+
+
+ {{ item.discount }}元
+ 满{{ item.min }}元使用
+
+
+ {{ item.name }}
+ {{ item.desc }}
+ 有效期:{{ item.days }}天
+ 有效期:{{ item.startTime }} - {{ item.endTime }}
+
+
+
+
+
+
+
+
+
+
+
+ 团购专区
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.grouponMember }}人成团
+
+
+ 有效期至 {{ item.expireTime }}
+
+ {{ item.brief }}
+
+ 现价:¥{{ item.retailPrice }}
+ 团购价:¥{{ item.grouponPrice }}
+
+
+
+
+
+
+
+
+
+
+
+ 品牌制造商直供
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.floorPrice }}
+ 元起
+
+
+
+
+
+
+
+
+
+
+ 周一周四 · 新品首发
+
+
+
+
+
+
+
+ {{ item.name }}
+ ¥{{ item.retailPrice }}
+
+
+
+
+
+
+
+
+
+ 人气推荐
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.brief }}
+ ¥{{ item.retailPrice }}
+
+
+
+
+
+
+
+
+
+
+
+ 专题精选
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+ ¥{{ item.price }}元起
+
+ {{ item.subtitle }}
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+ {{ iitem.name }}
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+ {{ '更多' + item.name + '好物 >' }}
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/newGoods/newGoods.css b/litemall-wx_uni/pages/newGoods/newGoods.css
new file mode 100644
index 00000000..5d2eeea6
--- /dev/null
+++ b/litemall-wx_uni/pages/newGoods/newGoods.css
@@ -0,0 +1,163 @@
+page {
+ background: #f4f4f4;
+}
+
+.brand-info .name {
+ width: 100%;
+ height: 278rpx;
+ position: relative;
+}
+
+.brand-info .img {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 278rpx;
+}
+
+.brand-info .info-box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 278rpx;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.brand-info .info {
+ display: block;
+}
+
+.brand-info .txt {
+ display: block;
+ height: 40rpx;
+ font-size: 37.5rpx;
+ color: #fff;
+}
+
+.brand-info .line {
+ margin: 0 auto;
+ margin-top: 16rpx;
+ display: block;
+ height: 2rpx;
+ width: 145rpx;
+ background: #fff;
+}
+
+.sort {
+ position: relative;
+ background: #fff;
+ width: 100%;
+ height: 78rpx;
+}
+
+.sort-box {
+ background: #fff;
+ width: 100%;
+ height: 78rpx;
+ overflow: hidden;
+ padding: 0 30rpx;
+ display: flex;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.sort-box .item {
+ height: 78rpx;
+ line-height: 78rpx;
+ text-align: center;
+ flex: 1;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.sort-box .item .txt {
+ color: #333;
+}
+
+.sort-box .item.active .txt {
+ color: #b4282d;
+}
+
+.sort-box .item .van-icon {
+ margin-left: 6rpx;
+}
+
+.sort-box-category {
+ background: #fff;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 40rpx 40rpx 0 0;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.sort-box-category .item {
+ height: 54rpx;
+ line-height: 54rpx;
+ text-align: center;
+ float: left;
+ padding: 0 16rpx;
+ margin: 0 0 40rpx 40rpx;
+ border: 1px solid #666;
+ color: #333;
+ font-size: 24rpx;
+}
+
+.sort-box-category .item.active {
+ color: #b4282d;
+ border: 1px solid #b4282d;
+}
+
+.cate-item .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ border-top: 1rpx solid #f4f4f4;
+ margin-top: 20rpx;
+}
+
+.cate-item .b .item {
+ float: left;
+ background: #fff;
+ width: 375rpx;
+ padding-bottom: 33.333rpx;
+ border-bottom: 1rpx solid #f4f4f4;
+ height: auto;
+ overflow: hidden;
+ text-align: center;
+}
+
+.cate-item .b .item-b {
+ border-right: 1rpx solid #f4f4f4;
+}
+
+.cate-item .item .img {
+ margin-top: 10rpx;
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.cate-item .item .name {
+ display: block;
+ width: 365.625rpx;
+ height: 35rpx;
+ padding: 0 20rpx;
+ overflow: hidden;
+ margin: 11.5rpx 0 22rpx 0;
+ text-align: center;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .item .price {
+ display: block;
+ width: 365.625rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #b4282d;
+}
diff --git a/litemall-wx_uni/pages/newGoods/newGoods.vue b/litemall-wx_uni/pages/newGoods/newGoods.vue
new file mode 100644
index 00000000..211b0406
--- /dev/null
+++ b/litemall-wx_uni/pages/newGoods/newGoods.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+
+ {{ bannerInfo.name }}
+
+
+
+
+
+
+
+
+ 综合
+
+
+ 价格
+
+
+
+
+ 分类
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ {{ iitem.name }}
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/payResult/payResult.css b/litemall-wx_uni/pages/payResult/payResult.css
new file mode 100644
index 00000000..14d0f6d7
--- /dev/null
+++ b/litemall-wx_uni/pages/payResult/payResult.css
@@ -0,0 +1,59 @@
+page {
+ min-height: 100%;
+ width: 100%;
+ background: #fff;
+}
+
+.container {
+ height: 100%;
+ background: #fff;
+}
+
+.pay-result {
+ background: #fff;
+}
+
+.pay-result .msg {
+ text-align: center;
+ margin: 100rpx auto;
+ color: #2bab25;
+ font-size: 36rpx;
+}
+
+.pay-result .btns {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.pay-result .btn {
+ text-align: center;
+ height: 80rpx;
+ margin: 0 20rpx;
+ width: 200rpx;
+ line-height: 78rpx;
+ border: 1px solid #868686;
+ color: #000;
+ border-radius: 5rpx;
+}
+
+.pay-result .error .msg {
+ color: #b4282d;
+ margin-bottom: 60rpx;
+}
+
+.pay-result .error .tips {
+ color: #7f7f7f;
+ margin-bottom: 70rpx;
+}
+
+.pay-result .error .tips .p {
+ font-size: 24rpx;
+ line-height: 42rpx;
+ text-align: center;
+}
+
+.pay-result .error .tips .p {
+ line-height: 42rpx;
+ text-align: center;
+}
diff --git a/litemall-wx_uni/pages/payResult/payResult.vue b/litemall-wx_uni/pages/payResult/payResult.vue
new file mode 100644
index 00000000..22f865c1
--- /dev/null
+++ b/litemall-wx_uni/pages/payResult/payResult.vue
@@ -0,0 +1,101 @@
+
+
+
+
+ 付款成功
+
+ 查看订单
+ 继续逛
+
+
+
+ 付款失败
+
+
+ 请在
+ 半小时
+ 内完成付款
+
+ 否则订单将会被系统取消
+
+
+ 查看订单
+ 重新付款
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/search/search.css b/litemall-wx_uni/pages/search/search.css
new file mode 100644
index 00000000..98e235d1
--- /dev/null
+++ b/litemall-wx_uni/pages/search/search.css
@@ -0,0 +1,318 @@
+page {
+ min-height: 100%;
+ background-color: #f4f4f4;
+}
+
+.container {
+ min-height: 100%;
+ background-color: #f4f4f4;
+}
+
+.search-header {
+ position: fixed;
+ top: 0;
+ width: 750rpx;
+ height: 91rpx;
+ display: flex;
+ background: #fff;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+ padding: 0 31.25rpx;
+ font-size: 29rpx;
+ color: #333;
+}
+
+.search-header .van-icon-search {
+ line-height: 59rpx;
+}
+
+.search-header .input-box {
+ position: relative;
+ margin-top: 16rpx;
+ float: left;
+ width: 0;
+ flex: 1;
+ height: 59rpx;
+ line-height: 59rpx;
+ padding: 0 20rpx;
+ background: #f4f4f4;
+}
+
+.search-header .icon {
+ position: absolute;
+ top: 14rpx;
+ left: 20rpx;
+ width: 31rpx;
+ height: 31rpx;
+}
+
+.search-header .del {
+ position: absolute;
+ top: 3rpx;
+ right: 10rpx;
+ width: 53rpx;
+ height: 53rpx;
+ z-index: 10;
+}
+
+.search-header .keywrod {
+ position: absolute;
+ top: 0;
+ left: 40rpx;
+ width: 506rpx;
+ height: 59rpx;
+ padding-left: 30rpx;
+}
+
+.search-header .right {
+ margin-top: 24rpx;
+ margin-left: 31rpx;
+ margin-right: 6rpx;
+ width: 58rpx;
+ height: 43rpx;
+ line-height: 43rpx;
+ float: right;
+}
+
+.no-search {
+ height: auto;
+ overflow: hidden;
+ margin-top: 91rpx;
+}
+
+.search-keywords {
+ background: #fff;
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ margin-bottom: 20rpx;
+}
+
+.search-keywords .h {
+ padding: 0 31.25rpx;
+ height: 93rpx;
+ line-height: 93rpx;
+ width: 100%;
+ color: #999;
+ font-size: 29rpx;
+}
+
+.search-keywords .title {
+ display: block;
+ width: 120rpx;
+ float: left;
+}
+
+.search-keywords .icon {
+ margin-top: 19rpx;
+ float: right;
+ display: block;
+ margin-left: 511rpx;
+ height: 55rpx;
+ width: 55rpx;
+}
+
+.search-keywords .b {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding-left: 31.25rpx;
+}
+
+.search-keywords .item {
+ display: inline-block;
+ width: auto;
+ height: 48rpx;
+ line-height: 48rpx;
+ padding: 0 15rpx;
+ border: 1px solid #999;
+ margin: 0 31.25rpx 31.25rpx 0;
+ font-size: 24rpx;
+ color: #333;
+}
+
+.search-keywords .item.active {
+ color: #b4282d;
+ border: 1px solid #b4282d;
+}
+
+.shelper-list {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+ padding: 0 31.25rpx;
+}
+
+.shelper-list .item {
+ height: 93rpx;
+ width: 687.5rpx;
+ line-height: 93rpx;
+ font-size: 24rpx;
+ color: #333;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.sort {
+ position: fixed;
+ top: 91rpx;
+ background: #fff;
+ width: 100%;
+ height: 78rpx;
+}
+
+.sort-box {
+ background: #fff;
+ width: 100%;
+ height: 78rpx;
+ overflow: hidden;
+ padding: 0 30rpx;
+ display: flex;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.sort-box .item {
+ height: 78rpx;
+ line-height: 78rpx;
+ text-align: center;
+ flex: 1;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.sort-box .item .txt {
+ color: #333;
+}
+
+.sort-box .item.active .txt {
+ color: #b4282d;
+}
+
+.sort-box .item .van-icon {
+ margin-left: 6rpx;
+}
+
+.sort-box-category {
+ background: #fff;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ padding: 40rpx 40rpx 0 0;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.sort-box-category .item {
+ height: 54rpx;
+ line-height: 54rpx;
+ text-align: center;
+ float: left;
+ padding: 0 16rpx;
+ margin: 0 0 40rpx 40rpx;
+ border: 1px solid #666;
+ color: #333;
+ font-size: 24rpx;
+}
+
+.sort-box-category .item.active {
+ color: #b4282d;
+ border: 1px solid #b4282d;
+}
+
+.cate-item {
+ margin-top: 175rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.cate-item .h {
+ height: 145rpx;
+ width: 750rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.cate-item .h .name {
+ display: block;
+ height: 35rpx;
+ margin-bottom: 18rpx;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .h .desc {
+ display: block;
+ height: 24rpx;
+ font-size: 24rpx;
+ color: #999;
+}
+
+.cate-item .b {
+ width: 750rpx;
+ padding: 0 6.25rpx;
+ height: auto;
+ overflow: hidden;
+}
+
+.cate-item .list-filter {
+ height: 80rpx;
+ width: 100%;
+ background: #fff;
+ margin-bottom: 6.25rpx;
+}
+
+.cate-item .b .item {
+ float: left;
+ background: #fff;
+ width: 365rpx;
+ margin-bottom: 6.25rpx;
+ padding-bottom: 33.333rpx;
+ height: auto;
+ overflow: hidden;
+ text-align: center;
+}
+
+.cate-item .b .item-b {
+ margin-left: 6.25rpx;
+}
+
+.cate-item .item .img {
+ width: 302rpx;
+ height: 302rpx;
+}
+
+.cate-item .item .name {
+ display: block;
+ width: 365.625rpx;
+ height: 35rpx;
+ margin: 11.5rpx 0 22rpx 0;
+ text-align: center;
+ overflow: hidden;
+ padding: 0 20rpx;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.cate-item .item .price {
+ display: block;
+ width: 365.625rpx;
+ height: 30rpx;
+ text-align: center;
+ font-size: 30rpx;
+ color: #b4282d;
+}
+
+.search-result-empty {
+ width: 100%;
+ height: 100%;
+ padding-top: 600rpx;
+}
+
+.search-result-empty .text {
+ display: block;
+ width: 100%;
+ height: 40rpx;
+ font-size: 28rpx;
+ text-align: center;
+ color: #999;
+}
diff --git a/litemall-wx_uni/pages/search/search.vue b/litemall-wx_uni/pages/search/search.vue
new file mode 100644
index 00000000..5267d830
--- /dev/null
+++ b/litemall-wx_uni/pages/search/search.vue
@@ -0,0 +1,342 @@
+
+
+
+
+
+
+
+
+
+ 取消
+
+
+
+
+ 历史记录
+
+
+
+
+ {{ item.keyword }}
+
+
+
+
+
+ 热门搜索
+
+
+
+ {{ item.keyword }}
+
+
+
+
+ {{ item }}
+
+
+
+
+
+
+
+ 综合
+
+
+ 价格
+
+
+
+
+ 分类
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ {{ iitem.name }}
+
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+ 您寻找的商品还未上架
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/topic/topic.css b/litemall-wx_uni/pages/topic/topic.css
new file mode 100644
index 00000000..2a27b046
--- /dev/null
+++ b/litemall-wx_uni/pages/topic/topic.css
@@ -0,0 +1,94 @@
+page,
+.container {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+ background: #f4f4f4;
+}
+.topic-list {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+ background: #f4f4f4;
+}
+
+.topic-list .item {
+ width: 100%;
+ height: 625rpx;
+ overflow: hidden;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.topic-list .img {
+ width: 100%;
+ height: 415rpx;
+}
+
+.topic-list .info {
+ width: 100%;
+ height: 210rpx;
+ overflow: hidden;
+}
+
+.topic-list .title {
+ display: block;
+ text-align: center;
+ width: 100%;
+ height: 33rpx;
+ line-height: 35rpx;
+ color: #333;
+ overflow: hidden;
+ font-size: 35rpx;
+ margin-top: 30rpx;
+}
+
+.topic-list .desc {
+ display: block;
+ text-align: center;
+ position: relative;
+ width: auto;
+ height: 24rpx;
+ line-height: 24rpx;
+ overflow: hidden;
+ color: #999;
+ font-size: 24rpx;
+ margin-top: 16rpx;
+ margin-bottom: 30rpx;
+}
+
+.topic-list .price {
+ display: block;
+ text-align: center;
+ width: 100%;
+ height: 27rpx;
+ line-height: 27rpx;
+ overflow: hidden;
+ color: #b4282d;
+ font-size: 27rpx;
+}
+
+.page {
+ width: 750rpx;
+ height: 108rpx;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.page view {
+ height: 108rpx;
+ width: 50%;
+ float: left;
+ font-size: 29rpx;
+ color: #333;
+ text-align: center;
+ line-height: 108rpx;
+}
+
+.page .prev {
+ border-right: 1px solid #d9d9d9;
+}
+
+.page .disabled {
+ color: #ccc;
+}
diff --git a/litemall-wx_uni/pages/topic/topic.vue b/litemall-wx_uni/pages/topic/topic.vue
new file mode 100644
index 00000000..ec90834b
--- /dev/null
+++ b/litemall-wx_uni/pages/topic/topic.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+ {{ item.title }}
+ {{ item.subtitle }}
+ {{ item.price }}元起
+
+
+
+ 上一页
+ 下一页
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/topicComment/topicComment.css b/litemall-wx_uni/pages/topicComment/topicComment.css
new file mode 100644
index 00000000..06e0d387
--- /dev/null
+++ b/litemall-wx_uni/pages/topicComment/topicComment.css
@@ -0,0 +1,143 @@
+.comments {
+ width: 100%;
+ height: auto;
+ padding-left: 30rpx;
+ background: #fff;
+ margin: 20rpx 0;
+}
+
+.comments .h {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 1000;
+ width: 100%;
+ display: flex;
+ background: #fff;
+ height: 84rpx;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.comments .h .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 50%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.comments .h .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #333;
+ font-size: 30rpx;
+ width: 170rpx;
+}
+
+.comments .h .item.active .txt {
+ color: #ab2b2b;
+ border-bottom: 4rpx solid #ab2b2b;
+}
+
+.comments .b {
+ margin-top: 85rpx;
+ height: auto;
+ width: 720rpx;
+}
+
+.comments .b.no-h {
+ margin-top: 0;
+}
+
+.comments .item {
+ height: auto;
+ width: 720rpx;
+ overflow: hidden;
+ border-bottom: 1px solid #d9d9d9;
+ padding-bottom: 25rpx;
+}
+
+.comments .info {
+ height: 127rpx;
+ width: 100%;
+ padding: 33rpx 0 27rpx 0;
+}
+
+.comments .user {
+ float: left;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ font-size: 0;
+}
+
+.comments .user image {
+ float: left;
+ width: 67rpx;
+ height: 67rpx;
+ margin-right: 17rpx;
+ border-radius: 50%;
+}
+
+.comments .user text {
+ display: inline-block;
+ width: auto;
+ height: 66rpx;
+ overflow: hidden;
+ font-size: 29rpx;
+ line-height: 66rpx;
+}
+
+.comments .time {
+ display: block;
+ float: right;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ color: #7f7f7f;
+ font-size: 25rpx;
+ margin-right: 30rpx;
+}
+
+.comments .comment {
+ width: 720rpx;
+ padding-right: 30rpx;
+ line-height: 45.8rpx;
+ font-size: 29rpx;
+ margin-bottom: 16rpx;
+}
+
+.comments .imgs {
+ width: 720rpx;
+ height: 150rpx;
+ margin-bottom: 25rpx;
+}
+
+.comments .imgs .img {
+ height: 150rpx;
+ width: 150rpx;
+ margin-right: 28rpx;
+}
+
+.comments .customer-service {
+ width: 690rpx;
+ height: auto;
+ overflow: hidden;
+ margin-top: 23rpx;
+ background: rgba(0, 0, 0, 0.03);
+ padding: 21rpx;
+}
+
+.comments .customer-service .u {
+ font-size: 24rpx;
+ color: #333;
+ line-height: 37.5rpx;
+}
+
+.comments .customer-service .c {
+ font-size: 24rpx;
+ color: #999;
+ line-height: 37.5rpx;
+}
diff --git a/litemall-wx_uni/pages/topicComment/topicComment.vue b/litemall-wx_uni/pages/topicComment/topicComment.vue
new file mode 100644
index 00000000..71e32bcb
--- /dev/null
+++ b/litemall-wx_uni/pages/topicComment/topicComment.vue
@@ -0,0 +1,175 @@
+
+
+
+
+ 全部({{ allCount }})
+
+
+ 有图({{ hasPicCount }})
+
+
+
+
+
+
+
+ {{ item.userInfo.nickName }}
+
+ {{ item.addTime }}
+
+
+ {{ item.content }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/topicCommentPost/topicCommentPost.css b/litemall-wx_uni/pages/topicCommentPost/topicCommentPost.css
new file mode 100644
index 00000000..978e121c
--- /dev/null
+++ b/litemall-wx_uni/pages/topicCommentPost/topicCommentPost.css
@@ -0,0 +1,249 @@
+page,
+.container {
+ height: 100%;
+ background: #f4f4f4;
+}
+
+.post-comment {
+ width: 750rpx;
+ height: auto;
+ overflow: hidden;
+ padding: 30rpx;
+ background: #fff;
+}
+
+.post-comment .goods {
+ display: flex;
+ align-items: center;
+ height: 199rpx;
+ margin-left: 31.25rpx;
+}
+
+.post-comment .goods .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.post-comment .goods .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.post-comment .goods .info {
+ height: 145.83rpx;
+ flex: 1;
+ padding-left: 20rpx;
+}
+
+.post-comment .goods .name {
+ margin-top: 30rpx;
+ display: block;
+ height: 44rpx;
+ line-height: 44rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.post-comment .goods .number {
+ display: block;
+ height: 37rpx;
+ line-height: 37rpx;
+ color: #666;
+ font-size: 25rpx;
+}
+
+.post-comment .goods .status {
+ width: 105rpx;
+ color: #b4282d;
+ font-size: 25rpx;
+}
+
+.post-comment .rater {
+ display: flex;
+ flex-direction: row;
+ height: 55rpx;
+}
+
+.post-comment .rater .rater-title {
+ font-size: 29rpx;
+ padding-right: 10rpx;
+}
+
+.post-comment .rater image {
+ padding-left: 5rpx;
+ height: 50rpx;
+ width: 50rpx;
+}
+
+.post-comment .rater .rater-desc {
+ font-size: 29rpx;
+ padding-left: 10rpx;
+}
+
+.post-comment .input-box {
+ height: 337.5rpx;
+ width: 690rpx;
+ position: relative;
+ background: #fff;
+}
+
+.post-comment .input-box .content {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: block;
+ background: #fff;
+ font-size: 29rpx;
+ border: 5px solid #f4f4f4;
+ height: 300rpx;
+ width: 650rpx;
+ padding: 20rpx;
+}
+
+.post-comment .input-box .count {
+ position: absolute;
+ bottom: 20rpx;
+ right: 20rpx;
+ display: block;
+ height: 30rpx;
+ width: 50rpx;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.post-comment .btns {
+ height: 108rpx;
+}
+
+.post-comment .close {
+ float: left;
+ height: 108rpx;
+ line-height: 108rpx;
+ text-align: left;
+ color: #666;
+ padding: 0 30rpx;
+}
+
+.post-comment .post {
+ float: right;
+ height: 108rpx;
+ line-height: 108rpx;
+ text-align: right;
+ padding: 0 30rpx;
+}
+
+.weui-uploader {
+ margin-top: 50rpx;
+}
+
+.weui-uploader__hd {
+ display: -webkit-box;
+ display: -webkit-flex;
+ display: flex;
+ padding-bottom: 10px;
+ -webkit-box-align: center;
+ -webkit-align-items: center;
+ align-items: center;
+}
+
+.weui-uploader__title {
+ -webkit-box-flex: 1;
+ -webkit-flex: 1;
+ flex: 1;
+}
+
+.weui-uploader__info {
+ color: #b2b2b2;
+}
+
+.weui-uploader__bd {
+ margin-bottom: -4px;
+ margin-right: -9px;
+ overflow: hidden;
+}
+
+.weui-uploader__file {
+ float: left;
+ margin-right: 9px;
+ margin-bottom: 9px;
+}
+
+.weui-uploader__img {
+ display: block;
+ width: 79px;
+ height: 79px;
+}
+
+.weui-uploader__file_status {
+ position: relative;
+}
+
+.weui-uploader__file_status:before {
+ content: ' ';
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.weui-uploader__file-content {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ color: #fff;
+}
+
+.weui-uploader__input-box {
+ float: left;
+ position: relative;
+ margin-right: 9px;
+ margin-bottom: 9px;
+ width: 77px;
+ height: 77px;
+ border: 1px solid #d9d9d9;
+}
+
+.weui-uploader__input-box:after,
+.weui-uploader__input-box:before {
+ content: ' ';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #d9d9d9;
+}
+
+.weui-uploader__input-box:before {
+ width: 2px;
+ height: 39.5px;
+}
+
+.weui-uploader__input-box:after {
+ width: 39.5px;
+ height: 2px;
+}
+
+.weui-uploader__input-box:active {
+ border-color: #999;
+}
+
+.weui-uploader__input-box:active:after,
+.weui-uploader__input-box:active:before {
+ background-color: #999;
+}
+
+.weui-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
diff --git a/litemall-wx_uni/pages/topicCommentPost/topicCommentPost.vue b/litemall-wx_uni/pages/topicCommentPost/topicCommentPost.vue
new file mode 100644
index 00000000..18b6d9c6
--- /dev/null
+++ b/litemall-wx_uni/pages/topicCommentPost/topicCommentPost.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+ {{ topic.title }}
+
+ {{ topic.subtitle }}
+
+
+
+ 评分
+
+
+
+
+
+ {{ starText }}
+
+
+
+ {{ 140 - content.length }}
+
+
+
+
+ 图片上传
+ {{ picUrls.length }}/{{ files.length }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 发表
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/topicDetail/topicDetail.css b/litemall-wx_uni/pages/topicDetail/topicDetail.css
new file mode 100644
index 00000000..f1b1d8e6
--- /dev/null
+++ b/litemall-wx_uni/pages/topicDetail/topicDetail.css
@@ -0,0 +1,267 @@
+.content {
+ width: 100%;
+ height: auto;
+ font-size: 0;
+}
+
+.content image {
+ display: inline-block;
+ width: 100%;
+}
+
+.comments {
+ width: 100%;
+ height: auto;
+ padding-left: 30rpx;
+ background: #fff;
+ margin-top: 20rpx;
+}
+
+.comments .h {
+ height: 93rpx;
+ line-height: 93rpx;
+ width: 720rpx;
+ padding-right: 30rpx;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.comments .h .t {
+ display: block;
+ float: left;
+ width: 50%;
+ font-size: 29rpx;
+ color: #333;
+}
+
+.comments .h .i {
+ display: block;
+ float: right;
+ width: 33rpx;
+ height: 33rpx;
+}
+
+.comments .b {
+ height: auto;
+ width: 720rpx;
+}
+
+.comments .item {
+ height: auto;
+ width: 720rpx;
+ overflow: hidden;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.comments .info {
+ height: 127rpx;
+ width: 100%;
+ padding: 33rpx 0 27rpx 0;
+}
+
+.comments .user {
+ float: left;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ font-size: 0;
+}
+
+.comments .user .avatar {
+ display: block;
+ float: left;
+ width: 67rpx;
+ height: 67rpx;
+ margin-right: 17rpx;
+ border-radius: 50%;
+}
+
+.comments .user .nickname {
+ display: block;
+ width: auto;
+ float: left;
+ height: 66rpx;
+ overflow: hidden;
+ font-size: 29rpx;
+ line-height: 66rpx;
+}
+
+.comments .time {
+ display: block;
+ float: right;
+ width: auto;
+ height: 67rpx;
+ line-height: 67rpx;
+ color: #7f7f7f;
+ font-size: 25rpx;
+ margin-right: 30rpx;
+}
+
+.comments .comment {
+ width: 720rpx;
+ padding-right: 30rpx;
+ line-height: 45.8rpx;
+ margin-bottom: 30rpx;
+ font-size: 29rpx;
+ color: #333;
+}
+
+.comments .load {
+ width: 720rpx;
+ height: 108rpx;
+ line-height: 108rpx;
+ text-align: center;
+ font-size: 38.5rpx;
+}
+
+.no-comments {
+ height: 297rpx;
+}
+
+.no-comments .txt {
+ height: 43rpx;
+ line-height: 43rpx;
+ display: block;
+ width: 100%;
+ text-align: center;
+ font-size: 29rpx;
+ color: #7f7f7f;
+ padding-top: 150rpx;
+}
+
+.sv-goods {
+ width: 100%;
+ height: auto;
+ padding-left: 30rpx;
+ background: #fff;
+ margin-top: 20rpx;
+}
+
+.topic-goods .h {
+ height: 93rpx;
+ line-height: 93rpx;
+ width: 720rpx;
+ padding-right: 30rpx;
+ border-bottom: 1px solid #d9d9d9;
+}
+
+.topic-goods .h .i {
+ display: block;
+ float: right;
+ width: 33rpx;
+ height: 33rpx;
+}
+
+.topic-goods .h .t {
+ display: block;
+ float: left;
+ width: 50%;
+ font-size: 29rpx;
+ color: #333;
+}
+
+.topic-goods .b .item {
+ border-top: 1px solid #d9d9d9;
+ margin: 0 20rpx;
+ height: 244rpx;
+ width: 710rpx;
+}
+
+.topic-goods .b .img {
+ margin-top: 12rpx;
+ margin-right: 12rpx;
+ float: left;
+ width: 220rpx;
+ height: 220rpx;
+}
+
+.topic-goods .b .right {
+ float: left;
+ height: 244rpx;
+ width: 476rpx;
+ display: flex;
+ flex-flow: row nowrap;
+}
+
+.topic-goods .b .text {
+ display: flex;
+ flex-wrap: nowrap;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ height: 244rpx;
+ width: 476rpx;
+}
+
+.topic-goods .b .name {
+ float: left;
+ width: 330rpx;
+ display: block;
+ color: #333;
+ line-height: 50rpx;
+ font-size: 30rpx;
+}
+
+.topic-goods .b .desc {
+ width: 476rpx;
+ display: block;
+ color: #999;
+ line-height: 50rpx;
+ font-size: 25rpx;
+}
+
+.topic-goods .b .price {
+ width: 476rpx;
+ display: flex;
+ color: #b4282d;
+ line-height: 50rpx;
+ font-size: 33rpx;
+}
+
+.rec-box {
+ width: 690rpx;
+ height: auto;
+ margin: 0 30rpx;
+}
+
+.rec-box .h {
+ position: relative;
+ width: 690rpx;
+ height: 96rpx;
+ /*border-bottom: 1px solid #d0d0d0;*/
+ margin-bottom: 32rpx;
+}
+
+.rec-box .h .txt {
+ display: inline-block;
+ position: absolute;
+ background: #f4f4f4;
+ top: 59rpx;
+ left: 200rpx;
+ width: 290rpx;
+ height: 45rpx;
+ line-height: 45rpx;
+ font-size: 30rpx;
+ color: #999;
+ text-align: center;
+}
+
+.rec-box .b .item {
+ width: 690rpx;
+ height: 397rpx;
+ padding: 24rpx 24rpx 30rpx 24rpx;
+ background: #fff;
+ margin-bottom: 30rpx;
+}
+
+.rec-box .b .item .img {
+ height: 278rpx;
+ width: 642rpx;
+}
+
+.rec-box .b .item .title {
+ display: block;
+ margin-top: 30rpx;
+ height: 30rpx;
+ width: 642rpx;
+ font-size: 28rpx;
+}
diff --git a/litemall-wx_uni/pages/topicDetail/topicDetail.vue b/litemall-wx_uni/pages/topicDetail/topicDetail.vue
new file mode 100644
index 00000000..6cbd1a35
--- /dev/null
+++ b/litemall-wx_uni/pages/topicDetail/topicDetail.vue
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+
+
+ 专题商品
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.brief }}
+ ¥{{ item.retailPrice }}
+
+
+
+
+
+
+
+
+
+ 精选留言
+
+
+
+
+
+
+
+
+ {{ item.userInfo.nickName }}
+
+ {{ item.addTime }}
+
+
+
+ {{ item.content }}
+
+
+
+
+ 查看更多
+
+
+
+ 等你来留言
+
+
+
+
+ 专题推荐
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/address/address.css b/litemall-wx_uni/pages/ucenter/address/address.css
new file mode 100644
index 00000000..e0244122
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/address/address.css
@@ -0,0 +1,132 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.container {
+ height: 100%;
+ width: 100%;
+}
+
+.address-list {
+ padding-left: 31.25rpx;
+ background: #fff;
+ background-size: auto 10.5rpx;
+ margin-bottom: 90rpx;
+}
+
+.address-list .item {
+ height: 156.55rpx;
+ align-items: center;
+ display: flex;
+ border-bottom: 1rpx solid #dcd9d9;
+}
+
+.address-list .l {
+ width: 125rpx;
+ height: 80rpx;
+ overflow: hidden;
+}
+
+.address-list .name {
+ width: 125rpx;
+ height: 43rpx;
+ font-size: 29rpx;
+ color: #333;
+ margin-bottom: 5.2rpx;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.address-list .default {
+ width: 62.5rpx;
+ height: 33rpx;
+ line-height: 28rpx;
+ text-align: center;
+ font-size: 20rpx;
+ color: #b4282d;
+ border: 1rpx solid #b4282d;
+ visibility: visible;
+}
+
+.address-list .c {
+ flex: 1;
+ height: auto;
+ overflow: hidden;
+}
+
+.address-list .mobile {
+ height: 29rpx;
+ font-size: 29rpx;
+ line-height: 29rpx;
+ overflow: hidden;
+ color: #333;
+ margin-bottom: 6.25rpx;
+}
+
+.address-list .address {
+ height: 37rpx;
+ font-size: 25rpx;
+ line-height: 37rpx;
+ overflow: hidden;
+ color: #666;
+}
+
+.address-list .r {
+ width: 52rpx;
+ height: auto;
+ overflow: hidden;
+ margin-right: 16.5rpx;
+}
+
+.address-list .del {
+ display: block;
+ width: 52rpx;
+ height: 52rpx;
+}
+
+.add-address {
+ border: none;
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 90%;
+ height: 90rpx;
+ line-height: 98rpx;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ margin-left: 5%;
+ text-align: center;
+ /* padding-left: -5rpx; */
+ font-size: 25rpx;
+ color: #f4f4f4;
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
+
+.empty-view {
+ height: 100%;
+ width: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.empty-view .text {
+ width: auto;
+ font-size: 28rpx;
+ line-height: 35rpx;
+ color: #999;
+}
diff --git a/litemall-wx_uni/pages/ucenter/address/address.vue b/litemall-wx_uni/pages/ucenter/address/address.vue
new file mode 100644
index 00000000..56d372e6
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/address/address.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+ {{ item.name }}
+ 默认
+
+
+
+ {{ item.tel }}
+ {{ item.addressDetail }}
+
+
+
+
+
+
+
+
+ 收货地址还没有~~~
+
+ 新建
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/addressAdd/addressAdd.css b/litemall-wx_uni/pages/ucenter/addressAdd/addressAdd.css
new file mode 100644
index 00000000..ec9c1b60
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/addressAdd/addressAdd.css
@@ -0,0 +1,163 @@
+page {
+ height: 100%;
+ background: #f4f4f4;
+}
+
+.add-address .add-form {
+ background: #fff;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+}
+
+.add-address .form-item {
+ height: 116rpx;
+ padding-left: 31.25rpx;
+ border-bottom: 1px solid #d9d9d9;
+ display: flex;
+ align-items: center;
+ padding-right: 31.25rpx;
+}
+
+.add-address .input {
+ flex: 1;
+ height: 44rpx;
+ line-height: 44rpx;
+ overflow: hidden;
+}
+
+.add-address .form-default {
+ border-bottom: 1px solid #d9d9d9;
+ height: 96rpx;
+ background: #fff;
+ padding-top: 28rpx;
+ font-size: 28rpx;
+ padding-left: 31.25rpx;
+}
+
+.add-address .form-default .van-checkbox .van-icon {
+ color: #fff;
+}
+
+.add-address .btns {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ display: flex;
+ height: 100rpx;
+ width: 100%;
+}
+
+.add-address .cannel,
+.add-address .save {
+ flex: 1;
+ height: 100rpx;
+ text-align: center;
+ line-height: 100rpx;
+ font-size: 28rpx;
+ color: #fff;
+ border: none;
+ border-radius: 0;
+}
+
+.add-address .cannel {
+ background: #333;
+}
+
+.add-address .save {
+ background: #b4282d;
+}
+
+.region-select {
+ width: 100%;
+ height: 600rpx;
+ background: #fff;
+ position: fixed;
+ z-index: 10;
+ left: 0;
+ bottom: 0;
+}
+
+.region-select .hd {
+ height: 108rpx;
+ width: 100%;
+ border-bottom: 1px solid #f4f4f4;
+ padding: 46rpx 30rpx 0 30rpx;
+}
+
+.region-select .region-selected {
+ float: left;
+ height: 60rpx;
+ display: flex;
+}
+
+.region-select .region-selected .item {
+ max-width: 140rpx;
+ margin-right: 30rpx;
+ text-align: left;
+ line-height: 60rpx;
+ height: 100%;
+ color: #333;
+ font-size: 28rpx;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.region-select .region-selected .item.disabled {
+ color: #999;
+}
+
+.region-select .region-selected .item.selected {
+ color: #b4282d;
+}
+
+.region-select .done {
+ float: right;
+ height: 60rpx;
+ width: 60rpx;
+ border: none;
+ background: #fff;
+ line-height: 60rpx;
+ text-align: center;
+ color: #333;
+ font-size: 28rpx;
+}
+
+.region-select .done.disabled {
+ color: #999;
+}
+
+.region-select .bd {
+ height: 492rpx;
+ width: 100%;
+ padding: 0 30rpx;
+}
+
+.region-select .region-list {
+ height: 492rpx;
+}
+
+.region-select .region-list .item {
+ width: 100%;
+ height: 104rpx;
+ line-height: 104rpx;
+ text-align: left;
+ color: #333;
+ font-size: 28rpx;
+}
+
+.region-select .region-list .item.selected {
+ color: #b4282d;
+}
+
+.bg-mask {
+ height: 100%;
+ width: 100%;
+ background: rgba(0, 0, 0, 0.4);
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 8;
+}
diff --git a/litemall-wx_uni/pages/ucenter/addressAdd/addressAdd.vue b/litemall-wx_uni/pages/ucenter/addressAdd/addressAdd.vue
new file mode 100644
index 00000000..dffb3800
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/addressAdd/addressAdd.vue
@@ -0,0 +1,444 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设为默认地址
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name }}
+
+
+ 确定
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/aftersale/aftersale.css b/litemall-wx_uni/pages/ucenter/aftersale/aftersale.css
new file mode 100644
index 00000000..5f3ee53e
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/aftersale/aftersale.css
@@ -0,0 +1,103 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.order-goods {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.order-goods .h {
+ height: 93.75rpx;
+ line-height: 93.75rpx;
+ margin-left: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ padding-right: 31.25rpx;
+}
+
+.order-goods .h .label {
+ float: left;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order-goods .h .status {
+ float: right;
+ font-size: 30rpx;
+ color: #b4282d;
+}
+
+.order-goods .item {
+ display: flex;
+ align-items: center;
+ height: 192rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-goods .item:last-child {
+ border-bottom: none;
+}
+
+.order-goods .item .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.order-goods .item .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.order-goods .item .info {
+ flex: 1;
+ height: 145.83rpx;
+ margin-left: 20rpx;
+}
+
+.order-goods .item .t {
+ margin-top: 8rpx;
+ height: 33rpx;
+ line-height: 33rpx;
+ margin-bottom: 10.5rpx;
+}
+
+.order-goods .item .t .name {
+ display: block;
+ float: left;
+ height: 33rpx;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .t .number {
+ display: block;
+ float: right;
+ height: 33rpx;
+ text-align: right;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .attr {
+ height: 29rpx;
+ line-height: 29rpx;
+ color: #666;
+ margin-bottom: 25rpx;
+ font-size: 25rpx;
+}
+
+.order-goods .item .price {
+ display: block;
+ float: left;
+ height: 30rpx;
+ line-height: 30rpx;
+ color: #333;
+ font-size: 30rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/aftersale/aftersale.vue b/litemall-wx_uni/pages/ucenter/aftersale/aftersale.vue
new file mode 100644
index 00000000..988210e1
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/aftersale/aftersale.vue
@@ -0,0 +1,249 @@
+
+
+
+ 退款商品
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ x{{ item.number }}
+
+ {{ item.specifications }}
+ ¥{{ item.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 申请售后
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/aftersaleDetail/aftersaleDetail.css b/litemall-wx_uni/pages/ucenter/aftersaleDetail/aftersaleDetail.css
new file mode 100644
index 00000000..ef3dfb28
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/aftersaleDetail/aftersaleDetail.css
@@ -0,0 +1,188 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.order-goods {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.order-goods .h {
+ height: 93.75rpx;
+ line-height: 93.75rpx;
+ margin-left: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ padding-right: 31.25rpx;
+}
+
+.order-goods .h .label {
+ float: left;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order-goods .h .status {
+ float: right;
+ font-size: 30rpx;
+ color: #b4282d;
+}
+
+.order-goods .item {
+ display: flex;
+ align-items: center;
+ height: 192rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-goods .item:last-child {
+ border-bottom: none;
+}
+
+.order-goods .item .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.order-goods .item .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.order-goods .item .info {
+ flex: 1;
+ height: 145.83rpx;
+ margin-left: 20rpx;
+}
+
+.order-goods .item .t {
+ margin-top: 8rpx;
+ height: 33rpx;
+ line-height: 33rpx;
+ margin-bottom: 10.5rpx;
+}
+
+.order-goods .item .t .name {
+ display: block;
+ float: left;
+ height: 33rpx;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .t .number {
+ display: block;
+ float: right;
+ height: 33rpx;
+ text-align: right;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .attr {
+ height: 29rpx;
+ line-height: 29rpx;
+ color: #666;
+ margin-bottom: 25rpx;
+ font-size: 25rpx;
+}
+
+.order-goods .item .price {
+ display: block;
+ float: left;
+ height: 30rpx;
+ line-height: 30rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.fb-body {
+ width: 100%;
+ background: #fff;
+ height: 300rpx;
+ padding: 30rpx;
+}
+
+.fb-body .content {
+ width: 100%;
+ height: 200rpx;
+ color: #333;
+}
+
+.weui-uploader__files {
+ width: 100%;
+}
+
+.weui-uploader__file {
+ float: left;
+ margin-right: 9px;
+ margin-bottom: 9px;
+}
+
+.weui-uploader__img {
+ display: block;
+ width: 30px;
+ height: 30px;
+}
+
+.weui-uploader__input-box {
+ float: left;
+ position: relative;
+ margin-right: 9px;
+ margin-bottom: 9px;
+ width: 30px;
+ height: 30px;
+ border: 1px solid #d9d9d9;
+}
+
+.weui-uploader__input-box:after,
+.weui-uploader__input-box:before {
+ content: ' ';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #d9d9d9;
+}
+
+.weui-uploader__input-box:before {
+ width: 2px;
+ height: 30px;
+}
+
+.weui-uploader__input-box:after {
+ width: 30px;
+ height: 2px;
+}
+
+.weui-uploader__input-box:active {
+ border-color: #999;
+}
+
+.weui-uploader__input-box:active:after,
+.weui-uploader__input-box:active:before {
+ background-color: #999;
+}
+
+.weui-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
+.fb-body .text-count {
+ float: right;
+ color: #666;
+ font-size: 24rpx;
+ line-height: 30rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/aftersaleDetail/aftersaleDetail.vue b/litemall-wx_uni/pages/ucenter/aftersaleDetail/aftersaleDetail.vue
new file mode 100644
index 00000000..a6440e63
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/aftersaleDetail/aftersaleDetail.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 退款商品
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ x{{ item.number }}
+
+ {{ item.specifications }}
+ ¥{{ item.price }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/aftersaleList/aftersaleList.css b/litemall-wx_uni/pages/ucenter/aftersaleList/aftersaleList.css
new file mode 100644
index 00000000..d6f5a39e
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/aftersaleList/aftersaleList.css
@@ -0,0 +1,165 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.aftersales-switch {
+ width: 100%;
+ background: #fff;
+ height: 84rpx;
+}
+
+.aftersales-switch .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 18%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.aftersales-switch .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #9a9ba1;
+ font-size: 30rpx;
+ width: 170rpx;
+}
+
+.aftersales-switch .item.active .txt {
+ color: #ab956d;
+ border-bottom: 4rpx solid #ab956d;
+}
+
+.no-aftersale {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-aftersale .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-aftersale .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 29rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.aftersales {
+ height: auto;
+ width: 100%;
+ overflow: hidden;
+}
+
+.aftersale {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.aftersale .h {
+ height: 83.3rpx;
+ line-height: 83.3rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.aftersale .h .l {
+ float: left;
+}
+
+.aftersale .h .r {
+ float: right;
+ color: #b4282d;
+ font-size: 24rpx;
+}
+
+.aftersale .goods {
+ display: flex;
+ align-items: center;
+ height: 199rpx;
+ margin-left: 31.25rpx;
+}
+
+.aftersale .goods .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.aftersale .goods .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.aftersale .goods .info {
+ height: 145.83rpx;
+ flex: 1;
+ padding-left: 20rpx;
+}
+
+.aftersale .goods .name {
+ margin-top: 30rpx;
+ display: block;
+ height: 44rpx;
+ line-height: 44rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.aftersale .goods .number {
+ display: block;
+ height: 37rpx;
+ line-height: 37rpx;
+ color: #666;
+ font-size: 25rpx;
+}
+
+.aftersale .goods .status {
+ width: 105rpx;
+ color: #b4282d;
+ font-size: 25rpx;
+}
+
+.aftersale .b {
+ height: 103rpx;
+ line-height: 103rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-top: 1px solid #f4f4f4;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.aftersale .b .l {
+ float: left;
+}
+
+.aftersale .b .r {
+ float: right;
+}
+
+.aftersale .b .btn {
+ margin-top: 19rpx;
+ height: 64.5rpx;
+ line-height: 64.5rpx;
+ text-align: center;
+ padding: 0 20rpx;
+ border-radius: 5rpx;
+ font-size: 28rpx;
+ color: #fff;
+ background: #b4282d;
+}
diff --git a/litemall-wx_uni/pages/ucenter/aftersaleList/aftersaleList.vue b/litemall-wx_uni/pages/ucenter/aftersaleList/aftersaleList.vue
new file mode 100644
index 00000000..9df98abb
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/aftersaleList/aftersaleList.vue
@@ -0,0 +1,141 @@
+
+
+
+
+ 申请中
+
+
+ 处理中
+
+
+ 已完成
+
+
+ 已拒绝
+
+
+
+
+ 还没有呢
+
+
+
+
+
+
+ 售后编号:{{ item.aftersale.aftersaleSn }}
+
+
+
+
+
+
+
+
+ {{ gitem.goodsName }}
+ {{ gitem.number }}件商品
+
+
+
+
+
+
+ 申请退款金额:¥{{ item.aftersale.amount }}元
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/collect/collect.css b/litemall-wx_uni/pages/ucenter/collect/collect.css
new file mode 100644
index 00000000..9c448f0c
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/collect/collect.css
@@ -0,0 +1,186 @@
+page {
+ background: #f4f4f4;
+ min-height: 100%;
+}
+
+.container {
+ background: #f4f4f4;
+ min-height: 100%;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+}
+.collect-switch {
+ width: 100%;
+ background: #fff;
+ height: 84rpx;
+}
+
+.collect-switch .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 50%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.collect-switch .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #9a9ba1;
+ font-size: 30rpx;
+ width: 170rpx;
+}
+
+.collect-switch .item.active .txt {
+ color: #ab956d;
+ border-bottom: 4rpx solid #ab956d;
+}
+
+.no-collect {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-collect .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-collect .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 29rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 29rpx;
+ color: #999;
+}
+
+/*商品收藏列表样式*/
+.goods-list {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+ padding-left: 30rpx;
+ border-top: 1px solid #e1e1e1;
+}
+
+.goods-list .item {
+ height: 212rpx;
+ width: 720rpx;
+ background: #fff;
+ padding: 30rpx 30rpx 30rpx 0;
+ border-bottom: 1px solid #e1e1e1;
+}
+
+.goods-list .item:last-child {
+ border-bottom: 1px solid #fff;
+}
+
+.goods-list .item .img {
+ float: left;
+ width: 150rpx;
+ height: 150rpx;
+}
+
+.goods-list .item .info {
+ float: right;
+ width: 540rpx;
+ height: 150rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding-left: 20rpx;
+}
+
+.goods-list .item .info .name {
+ font-size: 28rpx;
+ color: #333;
+ line-height: 40rpx;
+}
+
+.goods-list .item .info .subtitle {
+ margin-top: 8rpx;
+ font-size: 24rpx;
+ color: #888;
+ line-height: 40rpx;
+}
+
+.goods-list .item .info .price {
+ margin-top: 8rpx;
+ font-size: 28rpx;
+ color: #333;
+ line-height: 40rpx;
+}
+
+/*专题收藏列表样式*/
+
+.topic-list {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+ background: #f4f4f4;
+}
+
+.topic-list .item {
+ width: 100%;
+ height: 625rpx;
+ overflow: hidden;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.topic-list .img {
+ width: 100%;
+ height: 415rpx;
+}
+
+.topic-list .info {
+ width: 100%;
+ height: 210rpx;
+ overflow: hidden;
+}
+
+.topic-list .title {
+ display: block;
+ text-align: center;
+ width: 100%;
+ height: 33rpx;
+ line-height: 35rpx;
+ color: #333;
+ overflow: hidden;
+ font-size: 35rpx;
+ margin-top: 30rpx;
+}
+
+.topic-list .desc {
+ display: block;
+ text-align: center;
+ position: relative;
+ width: auto;
+ height: 24rpx;
+ line-height: 24rpx;
+ overflow: hidden;
+ color: #999;
+ font-size: 24rpx;
+ margin-top: 16rpx;
+ margin-bottom: 30rpx;
+}
+
+.topic-list .price {
+ display: block;
+ text-align: center;
+ width: 100%;
+ height: 27rpx;
+ line-height: 27rpx;
+ overflow: hidden;
+ color: #b4282d;
+ font-size: 27rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/collect/collect.vue b/litemall-wx_uni/pages/ucenter/collect/collect.vue
new file mode 100644
index 00000000..da36f862
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/collect/collect.vue
@@ -0,0 +1,185 @@
+
+
+
+
+ 商品收藏
+
+
+ 专题收藏
+
+
+
+
+ 还没有收藏
+
+
+
+
+
+
+
+ {{ item.name }}
+ {{ item.brief }}
+ ¥{{ item.retailPrice }}
+
+
+
+ {{ item.title }}
+ {{ item.subtitle }}
+ {{ item.price }}元起
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/couponList/couponList.css b/litemall-wx_uni/pages/ucenter/couponList/couponList.css
new file mode 100644
index 00000000..ae424939
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/couponList/couponList.css
@@ -0,0 +1,242 @@
+page {
+ background: #f4f4f4;
+ min-height: 100%;
+}
+
+.container {
+ background: #f4f4f4;
+ min-height: 100%;
+ padding-top: 30rpx;
+}
+
+.container .h {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 1000;
+ width: 100%;
+ display: flex;
+ background: #fff;
+ height: 84rpx;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.15);
+}
+
+.container .h .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 50%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.container .h .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #333;
+ font-size: 30rpx;
+ width: 170rpx;
+}
+
+.container .h .item.active .txt {
+ color: #ab2b2b;
+ border-bottom: 4rpx solid #ab2b2b;
+}
+
+.container .b {
+ margin-top: 85rpx;
+ height: auto;
+}
+
+.container .b .coupon-form {
+ height: 110rpx;
+ width: 100%;
+ background: #fff;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ padding-top: 20rpx;
+ display: flex;
+}
+
+.container .b .input-box {
+ flex: 1;
+ height: 70rpx;
+ color: #333;
+ font-size: 24rpx;
+ background: #fff;
+ position: relative;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4rpx;
+ margin-right: 30rpx;
+}
+
+.container .b .input-box .coupon-sn {
+ position: absolute;
+ top: 10rpx;
+ left: 30rpx;
+ height: 50rpx;
+ width: 100%;
+ color: #000;
+ line-height: 50rpx;
+ font-size: 24rpx;
+}
+
+.container .b .clear-icon {
+ position: absolute;
+ top: 25rpx;
+ right: 18rpx;
+ z-index: 2;
+ display: block;
+ background: #fff;
+}
+
+.container .b .add-btn {
+ height: 70rpx;
+ border: none;
+ width: 168rpx;
+ background: #b4282d;
+ border-radius: 0;
+ line-height: 70rpx;
+ color: #fff;
+ font-size: 28rpx;
+ text-align: center;
+}
+
+.container .b .add-btn.disabled {
+ background: #ccc;
+}
+
+.container .b .help {
+ height: 72rpx;
+ line-height: 72rpx;
+ text-align: right;
+ padding-right: 30rpx;
+ background-size: 28rpx;
+ color: #999;
+ font-size: 24rpx;
+}
+
+.container .b .coupon-list {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+}
+
+.container .b .item {
+ position: relative;
+ height: 290rpx;
+ background: #ccc7c7;
+ margin-bottom: 30rpx;
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+ padding-top: 52rpx;
+}
+
+.container .b .item.active {
+ background: linear-gradient(to right, #cfa568, #e3bf79);
+}
+
+.container .b .tag {
+ height: 32rpx;
+ background: #a48143;
+ padding-left: 16rpx;
+ padding-right: 16rpx;
+ position: absolute;
+ left: 20rpx;
+ color: #fff;
+ top: 20rpx;
+ font-size: 20rpx;
+ text-align: center;
+ line-height: 32rpx;
+}
+
+.container .b .content {
+ margin-top: 24rpx;
+ margin-left: 40rpx;
+ display: flex;
+ margin-right: 40rpx;
+ flex-direction: row;
+}
+
+.container .b .content .left {
+ flex: 1;
+}
+
+.container .b .discount {
+ font-size: 50rpx;
+ color: #b4282d;
+}
+
+.container .b .min {
+ color: #fff;
+}
+
+.container .b .content .right {
+ width: 400rpx;
+}
+
+.container .b .name {
+ font-size: 44rpx;
+ color: #fff;
+ margin-bottom: 14rpx;
+}
+
+.container .b .time {
+ font-size: 24rpx;
+ color: #fff;
+ line-height: 30rpx;
+}
+
+.container .b .condition {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ height: 78rpx;
+ background: rgba(0, 0, 0, 0.08);
+ padding: 24rpx 40rpx;
+ display: flex;
+ flex-direction: row;
+}
+
+.container .b .condition .txt {
+ display: block;
+ height: 30rpx;
+ flex: 1;
+ overflow: hidden;
+ font-size: 24rpx;
+ line-height: 30rpx;
+ color: #fff;
+}
+
+.container .b .condition .icon {
+ margin-left: 30rpx;
+ width: 24rpx;
+ height: 24rpx;
+}
+
+.container .b .page {
+ width: 750rpx;
+ height: 108rpx;
+ background: #fff;
+ margin-bottom: 20rpx;
+}
+
+.container .b .page view {
+ height: 108rpx;
+ width: 50%;
+ float: left;
+ font-size: 29rpx;
+ color: #333;
+ text-align: center;
+ line-height: 108rpx;
+}
+
+.container .b .page .prev {
+ border-right: 1px solid #d9d9d9;
+}
+
+.container .b .page .disabled {
+ color: #ccc;
+}
diff --git a/litemall-wx_uni/pages/ucenter/couponList/couponList.vue b/litemall-wx_uni/pages/ucenter/couponList/couponList.vue
new file mode 100644
index 00000000..06ad3ef9
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/couponList/couponList.vue
@@ -0,0 +1,229 @@
+
+
+
+
+ 未使用
+
+
+ 已使用
+
+
+ 已过期
+
+
+
+
+
+
+
+
+
+ 兑换
+
+
+
+
+ 使用说明
+
+
+
+
+ {{ item.tag }}
+
+
+
+ {{ item.discount }}元
+ 满{{ item.min }}元使用
+
+
+ {{ item.name }}
+ 有效期:{{ item.startTime }} - {{ item.endTime }}
+
+
+
+
+ {{ item.desc }}
+
+
+
+
+
+ 上一页
+ 下一页
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/couponSelect/couponSelect.css b/litemall-wx_uni/pages/ucenter/couponSelect/couponSelect.css
new file mode 100644
index 00000000..5a487b23
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/couponSelect/couponSelect.css
@@ -0,0 +1,120 @@
+page {
+ background: #f4f4f4;
+ min-height: 100%;
+}
+
+.container {
+ background: #f4f4f4;
+ min-height: 100%;
+ padding-top: 30rpx;
+}
+
+.coupon-list {
+ width: 750rpx;
+ height: 100%;
+ overflow: hidden;
+}
+
+.unselect {
+ height: 80rpx;
+ border: none;
+ width: 700rpx;
+ background: #28b43b;
+ color: #fff;
+ font-size: 40rpx;
+ text-align: center;
+ margin-bottom: 30rpx;
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+ line-height: 80rpx;
+}
+
+.item {
+ position: relative;
+ height: 290rpx;
+ width: 700rpx;
+ background: linear-gradient(to right, #cfa568, #e3bf79);
+ margin-bottom: 30rpx;
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+ padding-top: 52rpx;
+}
+
+.tag {
+ height: 32rpx;
+ background: #a48143;
+ padding-left: 16rpx;
+ padding-right: 16rpx;
+ position: absolute;
+ left: 20rpx;
+ color: #fff;
+ top: 20rpx;
+ font-size: 20rpx;
+ text-align: center;
+ line-height: 32rpx;
+}
+
+.content {
+ margin-top: 24rpx;
+ margin-left: 40rpx;
+ display: flex;
+ margin-right: 40rpx;
+ flex-direction: row;
+}
+
+.content .left {
+ flex: 1;
+}
+
+.discount {
+ font-size: 50rpx;
+ color: #b4282d;
+}
+
+.min {
+ color: #fff;
+}
+
+.content .right {
+ width: 400rpx;
+}
+
+.name {
+ font-size: 44rpx;
+ color: #fff;
+ margin-bottom: 14rpx;
+}
+
+.time {
+ font-size: 24rpx;
+ color: #fff;
+ line-height: 30rpx;
+}
+
+.condition {
+ position: absolute;
+ width: 100%;
+ bottom: 0;
+ left: 0;
+ height: 78rpx;
+ background: rgba(0, 0, 0, 0.08);
+ padding: 24rpx 40rpx;
+ display: flex;
+ flex-direction: row;
+}
+
+.condition .txt {
+ display: block;
+ height: 30rpx;
+ flex: 1;
+ overflow: hidden;
+ font-size: 24rpx;
+ line-height: 30rpx;
+ color: #fff;
+}
+
+.condition .icon {
+ margin-left: 30rpx;
+ width: 24rpx;
+ height: 24rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/couponSelect/couponSelect.vue b/litemall-wx_uni/pages/ucenter/couponSelect/couponSelect.vue
new file mode 100644
index 00000000..5604480d
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/couponSelect/couponSelect.vue
@@ -0,0 +1,179 @@
+
+
+
+ 不选择优惠券
+
+
+ {{ item.tag }}
+
+
+
+ {{ item.discount }}元
+ 满{{ item.min }}元使用
+
+
+ {{ item.name }}
+ 有效期:{{ item.startTime }} - {{ item.endTime }}
+
+
+
+
+ {{ item.desc }}
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/feedback/feedback.css b/litemall-wx_uni/pages/ucenter/feedback/feedback.css
new file mode 100644
index 00000000..713bf586
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/feedback/feedback.css
@@ -0,0 +1,197 @@
+page {
+ background: #f4f4f4;
+ min-height: 100%;
+}
+
+.container {
+ background: #f4f4f4;
+ min-height: 100%;
+ padding-top: 30rpx;
+}
+
+.fb-type {
+ height: 104rpx;
+ width: 100%;
+ background: #fff;
+ margin-bottom: 20rpx;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+}
+
+.fb-type .type-label {
+ height: 36rpx;
+ flex: 1;
+ color: #333;
+ font-size: 28rpx;
+}
+
+.fb-type .type-icon {
+ height: 36rpx;
+ width: 36rpx;
+}
+
+.fb-body {
+ width: 100%;
+ background: #fff;
+ height: 600rpx;
+ padding: 18rpx 30rpx 64rpx 30rpx;
+}
+
+.fb-body .content {
+ width: 100%;
+ height: 400rpx;
+ color: #333;
+ line-height: 40rpx;
+ font-size: 28rpx;
+}
+
+.weui-uploader__files {
+ width: 100%;
+}
+
+.weui-uploader__file {
+ float: left;
+ margin-right: 9px;
+ margin-bottom: 9px;
+}
+
+.weui-uploader__img {
+ display: block;
+ width: 50px;
+ height: 50px;
+}
+
+.weui-uploader__input-box {
+ float: left;
+ position: relative;
+ margin-right: 9px;
+ margin-bottom: 9px;
+ width: 50px;
+ height: 50px;
+ border: 1px solid #d9d9d9;
+}
+
+.weui-uploader__input-box:after,
+.weui-uploader__input-box:before {
+ content: ' ';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translate(-50%, -50%);
+ transform: translate(-50%, -50%);
+ background-color: #d9d9d9;
+}
+
+.weui-uploader__input-box:before {
+ width: 2px;
+ height: 39.5px;
+}
+
+.weui-uploader__input-box:after {
+ width: 39.5px;
+ height: 2px;
+}
+
+.weui-uploader__input-box:active {
+ border-color: #999;
+}
+
+.weui-uploader__input-box:active:after,
+.weui-uploader__input-box:active:before {
+ background-color: #999;
+}
+
+.weui-uploader__input {
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+}
+
+.fb-body .text-count {
+ line-height: 30rpx;
+ float: right;
+ color: #666;
+ font-size: 24rpx;
+}
+
+.fb-mobile {
+ height: 162rpx;
+ width: 100%;
+}
+
+.fb-mobile .label {
+ height: 58rpx;
+ width: 100%;
+ padding-top: 14rpx;
+ padding-bottom: 11rpx;
+ color: #7f7f7f;
+ font-size: 24rpx;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ line-height: 33rpx;
+}
+
+.fb-mobile .mobile-box {
+ height: 104rpx;
+ width: 100%;
+ color: #333;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ font-size: 24rpx;
+ background: #fff;
+ position: relative;
+}
+
+.fb-mobile .mobile {
+ position: absolute;
+ top: 27rpx;
+ left: 30rpx;
+ height: 50rpx;
+ width: 100%;
+ color: #333;
+ line-height: 50rpx;
+ font-size: 24rpx;
+}
+
+.fb-mobile .clear-icon {
+ position: absolute;
+ top: 27rpx;
+ right: 30rpx;
+ width: 48rpx;
+ height: 48rpx;
+ z-index: 2;
+}
+
+.fb-btn {
+ right: 0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ width: 80%;
+ height: 90rpx;
+ line-height: 98rpx;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ border-radius: 0;
+ padding: 0;
+ margin: 0;
+ margin-left: 10%;
+ text-align: center;
+ /* padding-left: -5rpx; */
+ font-size: 25rpx;
+ color: #f4f4f4;
+ border-top-left-radius: 50rpx;
+ border-bottom-left-radius: 50rpx;
+ border-top-right-radius: 50rpx;
+ border-bottom-right-radius: 50rpx;
+ letter-spacing: 3rpx;
+ background-image: linear-gradient(to right, #9a9ba1 0%, #9a9ba1 100%);
+}
diff --git a/litemall-wx_uni/pages/ucenter/feedback/feedback.vue b/litemall-wx_uni/pages/ucenter/feedback/feedback.vue
new file mode 100644
index 00000000..82eb8cf4
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/feedback/feedback.vue
@@ -0,0 +1,232 @@
+
+
+
+
+
+ {{ array[index] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ contentLength }}/500
+
+
+ 手机号码
+
+
+
+
+
+
+ 提交
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/footprint/footprint.css b/litemall-wx_uni/pages/ucenter/footprint/footprint.css
new file mode 100644
index 00000000..88d011d7
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/footprint/footprint.css
@@ -0,0 +1,116 @@
+page {
+ background: #f4f4f4;
+ min-height: 100%;
+}
+
+.container {
+ background: #f4f4f4;
+ min-height: 100%;
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+}
+
+.no-footprint {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-footprint .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-footprint .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 29rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.footprint {
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+ border-top: 1px solid #e1e1e1;
+}
+
+.day-item {
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+ margin-bottom: 20rpx;
+}
+
+.day-hd {
+ height: 94rpx;
+ width: 100%;
+ line-height: 94rpx;
+ background: #fff;
+ padding-left: 30rpx;
+ color: #333;
+ font-size: 28rpx;
+}
+
+.day-list {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+ padding-left: 30rpx;
+ border-top: 1px solid #e1e1e1;
+}
+
+.item {
+ height: 212rpx;
+ width: 720rpx;
+ background: #fff;
+ padding: 30rpx 30rpx 30rpx 0;
+ border-bottom: 1px solid #e1e1e1;
+}
+
+.item:last-child {
+ border-bottom: 1px solid #fff;
+}
+
+.item .img {
+ float: left;
+ width: 150rpx;
+ height: 150rpx;
+}
+
+.item .info {
+ float: right;
+ width: 540rpx;
+ height: 150rpx;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ padding-left: 20rpx;
+}
+
+.item .info .name {
+ font-size: 28rpx;
+ color: #333;
+ line-height: 40rpx;
+}
+
+.item .info .subtitle {
+ margin-top: 8rpx;
+ font-size: 24rpx;
+ color: #888;
+ line-height: 40rpx;
+}
+
+.item .info .price {
+ margin-top: 8rpx;
+ font-size: 28rpx;
+ color: #333;
+ line-height: 40rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/footprint/footprint.vue b/litemall-wx_uni/pages/ucenter/footprint/footprint.vue
new file mode 100644
index 00000000..2deedf98
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/footprint/footprint.vue
@@ -0,0 +1,197 @@
+
+
+
+
+ 没有浏览足迹
+
+
+
+
+ {{ item[0].addDate }}
+
+
+
+
+
+
+ {{ iitem.name }}
+ {{ iitem.brief }}
+ ¥{{ iitem.retailPrice }}
+
+
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/index/index.css b/litemall-wx_uni/pages/ucenter/index/index.css
new file mode 100644
index 00000000..fe5ae79d
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/index/index.css
@@ -0,0 +1,165 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.container {
+ background: #f4f4f4;
+ height: auto;
+ overflow: hidden;
+ width: 100%;
+}
+
+.profile-info {
+ background-color: #ab956d;
+ color: #f4f4f4;
+ display: flex;
+ align-items: center;
+ padding: 30rpx;
+ font-size: 28rpx;
+}
+
+.profile-info .avatar {
+ height: 148rpx;
+ width: 148rpx;
+ border-radius: 50%;
+}
+
+.profile-info .info {
+ flex: 1;
+ height: 85rpx;
+ padding-left: 31.25rpx;
+}
+
+.profile-info .name {
+ display: block;
+ height: 45rpx;
+ line-height: 45rpx;
+ color: #fff;
+ font-size: 37.5rpx;
+ margin-bottom: 10rpx;
+}
+
+.profile-info .level {
+ display: block;
+ height: 30rpx;
+ line-height: 30rpx;
+ margin-bottom: 10rpx;
+ color: #7f7f7f;
+ font-size: 30rpx;
+}
+
+.user_area {
+ /* border: 1px solid black; */
+ width: 100%;
+ height: 226rpx;
+ /* margin: 0 auto; */
+ margin-top: -8rpx;
+ background: #fff;
+ /* border-top: 1px solid #f4f4f4; */
+}
+
+.user_row {
+ /* border: 1px solid black; */
+ height: 86rpx;
+ line-height: 86rpx;
+ border-bottom: 1px solid #fafafa;
+}
+
+.user_row_left {
+ /* border: 1px solid #757575; */
+ float: left;
+ height: 86rpx;
+ font-weight: 550;
+ line-height: 86rpx;
+ margin-left: 35rpx;
+ font-size: 26rpx;
+ letter-spacing: 1rpx;
+}
+
+.user_row_right {
+ /* border: 1px solid #757575; */
+ float: right;
+ height: 40rpx;
+ width: 40rpx;
+ font-weight: 550;
+ line-height: 86rpx;
+ margin-top: 28rpx;
+ margin-right: 30rpx;
+}
+
+.user_column {
+ /* border: 1px solid black; */
+ height: 140rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.user_column_item {
+ width: 30%;
+ height: 140rpx;
+ background: #fff;
+ text-align: center;
+ position: relative;
+}
+
+.user_column_item_badge {
+ height: 28rpx;
+ width: 28rpx;
+ position: absolute;
+ background: #b4282d;
+ color: #fff;
+ border-radius: 50%;
+ margin-top: 20rpx;
+ margin-left: 40rpx;
+}
+
+.user_column_item_image {
+ width: 50rpx;
+ height: 50rpx;
+ margin-top: 30rpx;
+}
+
+.user_column_item_text {
+ /* border: 1px solid black; */
+ margin-top: 5rpx;
+ font-size: 24rpx;
+ color: #555;
+}
+
+.separate {
+ background: #e0e3da;
+ width: 100%;
+ height: 6rpx;
+}
+
+.user_column_item_phone {
+ width: 30%;
+ height: 140rpx;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-wrap: wrap;
+ float: left;
+ background: #fff;
+ border-radius: 0;
+}
+
+.user_column_item_phone::after {
+ border: none;
+ border-radius: 0;
+}
+
+.logout {
+ margin-top: 30rpx;
+ height: 100rpx;
+ width: 100%;
+ line-height: 100rpx;
+ text-align: center;
+ background: #fff;
+ color: red;
+ font-size: 30rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/index/index.vue b/litemall-wx_uni/pages/ucenter/index/index.vue
new file mode 100644
index 00000000..a1b8d6e3
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/index/index.vue
@@ -0,0 +1,360 @@
+
+
+
+
+
+ {{ userInfo.nickName }}
+
+
+
+
+
+
+
+ 我的订单
+
+
+
+
+ {{ order.unpaid }}
+
+ 待付款
+
+
+ {{ order.unship }}
+
+ 待发货
+
+
+ {{ order.unrecv }}
+
+ 待收货
+
+
+ {{ order.uncomment }}
+
+ 待评价
+
+
+
+ 售后
+
+
+
+
+
+
+
+ 核心服务
+
+
+
+
+ 优惠卷
+
+
+
+ 收藏夹
+
+
+
+ 浏览足迹
+
+
+
+ 我的拼团
+
+
+
+
+ 地址管理
+
+
+
+
+
+ 必备工具
+
+
+
+
+
+ 帮助中心
+
+
+
+ 意见反馈
+
+
+
+
+ 联系客服
+
+
+
+ 关于我们
+
+
+
+
+ 退出登录
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/order/order.css b/litemall-wx_uni/pages/ucenter/order/order.css
new file mode 100644
index 00000000..8c833a67
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/order/order.css
@@ -0,0 +1,166 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.orders-switch {
+ width: 100%;
+ background: #fff;
+ height: 84rpx;
+ /* border-bottom: 1px solid rgba(0,0,0,.15); */
+}
+
+.orders-switch .item {
+ display: inline-block;
+ height: 82rpx;
+ width: 18%;
+ padding: 0 15rpx;
+ text-align: center;
+}
+
+.orders-switch .item .txt {
+ display: inline-block;
+ height: 82rpx;
+ padding: 0 20rpx;
+ line-height: 82rpx;
+ color: #9a9ba1;
+ font-size: 30rpx;
+ width: 170rpx;
+}
+
+.orders-switch .item.active .txt {
+ color: #ab956d;
+ border-bottom: 4rpx solid #ab956d;
+}
+
+.no-order {
+ width: 100%;
+ height: auto;
+ margin: 0 auto;
+}
+
+.no-order .c {
+ width: 100%;
+ height: auto;
+ margin-top: 400rpx;
+}
+
+.no-order .c text {
+ margin: 0 auto;
+ display: block;
+ width: 258rpx;
+ height: 29rpx;
+ line-height: 29rpx;
+ text-align: center;
+ font-size: 29rpx;
+ color: #999;
+}
+
+.orders {
+ height: auto;
+ width: 100%;
+ overflow: hidden;
+}
+
+.order {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.order .h {
+ height: 83.3rpx;
+ line-height: 83.3rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order .h .l {
+ float: left;
+}
+
+.order .h .r {
+ float: right;
+ color: #b4282d;
+ font-size: 24rpx;
+}
+
+.order .goods {
+ display: flex;
+ align-items: center;
+ height: 199rpx;
+ margin-left: 31.25rpx;
+}
+
+.order .goods .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.order .goods .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.order .goods .info {
+ height: 145.83rpx;
+ flex: 1;
+ padding-left: 20rpx;
+}
+
+.order .goods .name {
+ margin-top: 30rpx;
+ display: block;
+ height: 44rpx;
+ line-height: 44rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order .goods .number {
+ display: block;
+ height: 37rpx;
+ line-height: 37rpx;
+ color: #666;
+ font-size: 25rpx;
+}
+
+.order .goods .status {
+ width: 105rpx;
+ color: #b4282d;
+ font-size: 25rpx;
+}
+
+.order .b {
+ height: 103rpx;
+ line-height: 103rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-top: 1px solid #f4f4f4;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order .b .l {
+ float: left;
+}
+
+.order .b .r {
+ float: right;
+}
+
+.order .b .btn {
+ margin-top: 19rpx;
+ height: 64.5rpx;
+ line-height: 64.5rpx;
+ text-align: center;
+ padding: 0 20rpx;
+ border-radius: 5rpx;
+ font-size: 28rpx;
+ color: #fff;
+ background: #b4282d;
+}
diff --git a/litemall-wx_uni/pages/ucenter/order/order.vue b/litemall-wx_uni/pages/ucenter/order/order.vue
new file mode 100644
index 00000000..809b2177
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/order/order.vue
@@ -0,0 +1,149 @@
+
+
+
+
+ 全部
+
+
+ 待付款
+
+
+ 待发货
+
+
+ 待收货
+
+
+ 待评价
+
+
+
+
+ 还没有任何订单呢
+
+
+
+
+
+
+ 订单编号:{{ item.orderSn }}
+ {{ item.orderStatusText }}
+
+
+
+
+
+
+
+
+ {{ gitem.goodsName }}
+ 共{{ gitem.number }}件商品
+
+
+
+
+
+
+ 实付:¥{{ item.actualPrice }}
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/pages/ucenter/orderDetail/orderDetail.css b/litemall-wx_uni/pages/ucenter/orderDetail/orderDetail.css
new file mode 100644
index 00000000..042998ac
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/orderDetail/orderDetail.css
@@ -0,0 +1,320 @@
+page {
+ height: 100%;
+ width: 100%;
+ background: #f4f4f4;
+}
+
+.order-info {
+ padding-top: 25rpx;
+ background: #fff;
+ height: auto;
+ overflow: hidden;
+}
+
+.item {
+ padding-left: 31.25rpx;
+ height: 42.5rpx;
+ padding-bottom: 12.5rpx;
+ line-height: 30rpx;
+ font-size: 30rpx;
+ color: #666;
+}
+
+.item-c {
+ margin-left: 31.25rpx;
+ border-top: 1px solid #f4f4f4;
+ height: 103rpx;
+ line-height: 103rpx;
+}
+
+.item-c .l {
+ float: left;
+}
+
+.item-c .r {
+ height: 103rpx;
+ float: right;
+ display: flex;
+ align-items: center;
+ padding-right: 16rpx;
+}
+
+.item-c .r .btn {
+ float: right;
+}
+
+.item-c .cost {
+ color: #b4282d;
+}
+
+.item-c .btn {
+ line-height: 66rpx;
+ border-radius: 5rpx;
+ text-align: center;
+ margin: 0 15rpx;
+ padding: 0 20rpx;
+ height: 66rpx;
+}
+
+.item-c .btn.active {
+ background: #b4282d;
+ color: #fff;
+}
+
+.order-goods {
+ margin-top: 20rpx;
+ background: #fff;
+}
+
+.order-goods .h {
+ height: 93.75rpx;
+ line-height: 93.75rpx;
+ margin-left: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+ padding-right: 31.25rpx;
+}
+
+.order-goods .h .label {
+ float: left;
+ font-size: 30rpx;
+ color: #333;
+}
+
+.order-goods .h .status {
+ float: right;
+ font-size: 30rpx;
+ color: #b4282d;
+}
+
+.order-goods .item {
+ display: flex;
+ align-items: center;
+ height: 192rpx;
+ margin-left: 31.25rpx;
+ padding-right: 31.25rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-goods .item:last-child {
+ border-bottom: none;
+}
+
+.order-goods .item .img {
+ height: 145.83rpx;
+ width: 145.83rpx;
+ background: #f4f4f4;
+}
+
+.order-goods .item .img image {
+ height: 145.83rpx;
+ width: 145.83rpx;
+}
+
+.order-goods .item .info {
+ flex: 1;
+ height: 145.83rpx;
+ margin-left: 20rpx;
+}
+
+.order-goods .item .t {
+ margin-top: 8rpx;
+ height: 33rpx;
+ line-height: 33rpx;
+ margin-bottom: 10.5rpx;
+}
+
+.order-goods .item .t .name {
+ display: block;
+ float: left;
+ height: 33rpx;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .t .number {
+ display: block;
+ float: right;
+ height: 33rpx;
+ text-align: right;
+ line-height: 33rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .attr {
+ height: 29rpx;
+ line-height: 29rpx;
+ color: #666;
+ margin-bottom: 25rpx;
+ font-size: 25rpx;
+}
+
+.order-goods .item .price {
+ display: block;
+ float: left;
+ height: 30rpx;
+ line-height: 30rpx;
+ color: #333;
+ font-size: 30rpx;
+}
+
+.order-goods .item .btn {
+ height: 50rpx;
+ line-height: 50rpx;
+ border-radius: 5rpx;
+ text-align: center;
+ display: block;
+ float: right;
+ margin: 0 15rpx;
+ padding: 0 20rpx;
+}
+
+.order-goods .item .btn.active {
+ background: #b4282d;
+ color: #fff;
+}
+
+.order-bottom {
+ margin-top: 20rpx;
+ padding-left: 31.25rpx;
+ height: auto;
+ overflow: hidden;
+ background: #fff;
+}
+
+.order-bottom .address {
+ height: 128rpx;
+ padding-top: 25rpx;
+ border-top: 1px solid #f4f4f4;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-bottom .address .t {
+ height: 35rpx;
+ line-height: 35rpx;
+ margin-bottom: 7.5rpx;
+}
+
+.order-bottom .address .name {
+ display: inline-block;
+ height: 35rpx;
+ width: 140rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .address .mobile {
+ display: inline-block;
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .address .b {
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .total {
+ height: 130rpx;
+ padding-top: 20rpx;
+ border-bottom: 1px solid #f4f4f4;
+}
+
+.order-bottom .total .t {
+ height: 30rpx;
+ line-height: 30rpx;
+ margin-bottom: 7.5rpx;
+ display: flex;
+}
+
+.order-bottom .total .label {
+ width: 150rpx;
+ display: inline-block;
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .total .txt {
+ flex: 1;
+ display: inline-block;
+ height: 35rpx;
+ line-height: 35rpx;
+ font-size: 30rpx;
+}
+
+.order-bottom .pay-fee {
+ height: 81rpx;
+ line-height: 81rpx;
+}
+
+.order-bottom .pay-fee .label {
+ display: inline-block;
+ width: 140rpx;
+ color: #b4282d;
+}
+
+.order-bottom .pay-fee .txt {
+ display: inline-block;
+ width: 140rpx;
+ color: #b4282d;
+}
+
+.order-express {
+ margin-top: 20rpx;
+ width: 100%;
+ height: 100rpx;
+ background: #fff;
+}
+
+.order-express .title {
+ float: left;
+ margin-bottom: 20rpx;
+ padding: 10rpx;
+}
+
+.order-express .ti {
+ float: right;
+ width: 52rpx;
+ height: 52rpx;
+ margin-right: 16rpx;
+ margin-top: 28rpx;
+}
+
+.order-express .t {
+ font-size: 29rpx;
+ margin-left: 10.25rpx;
+ color: #a78845;
+}
+
+.order-express .b {
+ font-size: 29rpx;
+ margin-left: 10.25rpx;
+ color: #a78845;
+}
+
+.order-express .traces {
+ padding: 17.5rpx;
+ background: #fff;
+ border-bottom: 1rpx solid #f1e6cdcc;
+}
+
+.order-express .trace {
+ padding-bottom: 17.5rpx;
+ padding-top: 17.5rpx;
+ background: #fff;
+}
+
+.order-express .acceptTime {
+ margin-top: 20rpx;
+ margin-right: 40rpx;
+ text-align: right;
+ font-size: 26rpx;
+}
+
+.order-express .acceptStation {
+ font-size: 26rpx;
+}
diff --git a/litemall-wx_uni/pages/ucenter/orderDetail/orderDetail.vue b/litemall-wx_uni/pages/ucenter/orderDetail/orderDetail.vue
new file mode 100644
index 00000000..a8aa7d23
--- /dev/null
+++ b/litemall-wx_uni/pages/ucenter/orderDetail/orderDetail.vue
@@ -0,0 +1,377 @@
+
+
+
+ 下单时间:{{ orderInfo.addTime }}
+ 订单编号:{{ orderInfo.orderSn }}
+ 订单留言:{{ orderInfo.message }}
+
+
+ 实付:
+ ¥{{ orderInfo.actualPrice }}
+
+
+ 取消订单
+ 去付款
+ 确认收货
+ 删除订单
+ 申请退款
+ 申请售后
+
+
+
+
+
+
+ 商品信息
+ {{ orderInfo.orderStatusText }}
+
+
+
+
+
+
+
+
+
+ {{ item.goodsName }}
+ x{{ item.number }}
+
+ {{ item.specifications }}
+ ¥{{ item.price }}
+
+ 去评价
+
+
+ 再次购买
+
+
+
+
+
+
+
+
+ {{ orderInfo.consignee }}
+ {{ orderInfo.mobile }}
+
+ {{ orderInfo.address }}
+
+
+
+ 商品合计:
+ ¥{{ orderInfo.goodsPrice }}
+
+
+ 运费:
+ ¥{{ orderInfo.freightPrice }}
+
+
+ 优惠:
+ ¥-{{ orderInfo.couponPrice }}
+
+
+
+ 实付:
+ ¥{{ orderInfo.actualPrice }}
+
+
+
+
+
+
+
+ 快递公司:{{ orderInfo.expName }}
+ 物流单号:{{ orderInfo.expNo }}
+
+
+
+
+
+ {{ iitem.AcceptStation }}
+ {{ iitem.AcceptTime }}
+
+
+
+
+
+
+
+
diff --git a/litemall-wx_uni/polyfill/README.md b/litemall-wx_uni/polyfill/README.md
new file mode 100644
index 00000000..fccb23d2
--- /dev/null
+++ b/litemall-wx_uni/polyfill/README.md
@@ -0,0 +1,35 @@
+# 关于polyfill目录
+
+用于抹平各平台差异化,使小程序转换uniapp项目后,能尽可能的少报错,尽可能的先运行起来。
+
+## 文件结构
+
+### base64Binary.js
+
+用于 base64ToArrayBuffer, arrayBufferToBase64 两个函数的polyfill,因为这两函数仅app与微信小程序支持,特意制作此polyfill。
+
+主要用于polyfill.js文件。
+
+### mixins.js
+
+有两个用途:
+一是在使用富文本时,可以将后台传入的富文本字符串里面的转义符转换为普通字符,与mp-html插件配合使用。
+二是this.setData()函数的polyfill,使转换后的uniapp项目,可以直接使用setData函数。
+
+### polyfill.js
+
+此文件,对大量api进行判断,如果在当前平台,不支持此函数,将会创建一个空函数,并输出一条提示,提示开发者,这个api需针对性的进行兼容处理。
+
+如果不处理的话,会直接进行报错,并影响流程的运行,对转换者的心理有一定的影响。
+
+因此制作此polyfill,让项目能先运行起来~
+
+
+## 注意
+
+如果觉得这些文件不需要想删除它,请一定要先阅读关于每个文件的说明,明白它的作用,再进行删除,以免项目运行报错,感谢合作~
+
+如有不明白的地方,请联系作者(375890534@qq.com)或qq群(780359397、361784059、603659851)进行交流~
+
+zhangdaren 2021-07-21
+
diff --git a/litemall-wx_uni/polyfill/base64Binary.js b/litemall-wx_uni/polyfill/base64Binary.js
new file mode 100644
index 00000000..9efaa460
--- /dev/null
+++ b/litemall-wx_uni/polyfill/base64Binary.js
@@ -0,0 +1,95 @@
+/*
+ * @Author: zhang peng
+ * @Date: 2021-08-03 10:57:51
+ * @LastEditTime: 2021-08-16 17:25:43
+ * @LastEditors: zhang peng
+ * @Description:
+ * @FilePath: \miniprogram-to-uniapp2\src\project\template\polyfill\base64Binary.js
+ *
+ * 借鉴自:https://github.com/dankogai/js-base64/blob/main/base64.js
+ * 因uniapp没有window,也无法使用Buffer,因此直接使用polyfill
+ *
+ */
+const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
+const b64chs = [...b64ch]
+const b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/
+const b64tab = ((a) => {
+ let tab = {}
+ a.forEach((c, i) => tab[c] = i)
+ return tab
+})(b64chs)
+const _fromCC = String.fromCharCode.bind(String)
+
+/**
+ * polyfill version of `btoa`
+ */
+const btoaPolyfill = (bin) => {
+ // console.log('polyfilled');
+ let u32, c0, c1, c2, asc = ''
+ const pad = bin.length % 3
+ for (let i = 0;i < bin.length;) {
+ if ((c0 = bin.charCodeAt(i++)) > 255 ||
+ (c1 = bin.charCodeAt(i++)) > 255 ||
+ (c2 = bin.charCodeAt(i++)) > 255)
+ throw new TypeError('invalid character found')
+ u32 = (c0 << 16) | (c1 << 8) | c2
+ asc += b64chs[u32 >> 18 & 63]
+ + b64chs[u32 >> 12 & 63]
+ + b64chs[u32 >> 6 & 63]
+ + b64chs[u32 & 63]
+ }
+ return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc
+}
+
+/**
+ * polyfill version of `atob`
+ */
+const atobPolyfill = (asc) => {
+ // console.log('polyfilled');
+ asc = asc.replace(/\s+/g, '')
+ if (!b64re.test(asc))
+ throw new TypeError('malformed base64.')
+ asc += '=='.slice(2 - (asc.length & 3))
+ let u24, bin = '', r1, r2
+ for (let i = 0;i < asc.length;) {
+ u24 = b64tab[asc.charAt(i++)] << 18
+ | b64tab[asc.charAt(i++)] << 12
+ | (r1 = b64tab[asc.charAt(i++)]) << 6
+ | (r2 = b64tab[asc.charAt(i++)])
+ bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)
+ : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)
+ : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255)
+ }
+ return bin
+}
+
+/**
+ * base64转ArrayBuffer
+ */
+function base64ToArrayBuffer (base64) {
+ const binaryStr = atobPolyfill(base64)
+ const byteLength = binaryStr.length
+ const bytes = new Uint8Array(byteLength)
+ for (let i = 0;i < byteLength;i++) {
+ bytes[i] = binary.charCodeAt(i)
+ }
+ return bytes.buffer
+}
+
+/**
+ * ArrayBuffer转base64
+ */
+function arrayBufferToBase64 (buffer) {
+ let binaryStr = ""
+ const bytes = new Uint8Array(buffer)
+ var len = bytes.byteLength
+ for (let i = 0;i < len;i++) {
+ binaryStr += String.fromCharCode(bytes[i])
+ }
+ return btoaPolyfill(binaryStr)
+}
+
+module.exports = {
+ base64ToArrayBuffer,
+ arrayBufferToBase64,
+}
diff --git a/litemall-wx_uni/polyfill/mixins.js b/litemall-wx_uni/polyfill/mixins.js
new file mode 100644
index 00000000..71bfdfd4
--- /dev/null
+++ b/litemall-wx_uni/polyfill/mixins.js
@@ -0,0 +1,145 @@
+/*
+ * @Author: zhang peng
+ * @Date: 2021-08-03 10:57:51
+ * @LastEditTime: 2021-10-15 20:27:53
+ * @LastEditors: zhang peng
+ * @Description:
+ * @FilePath: \miniprogram-to-uniapp2\src\project\template\polyfill\mixins.js
+ *
+ * 如果你想删除本文件,请先确认它使用的范围,感谢合作~
+ * 如有疑问,请直接联系: 375890534@qq.com
+ */
+export default {
+ methods: {
+ /**
+ * 转义符换成普通字符
+ * @param {*} str
+ * @returns
+ */
+ escape2Html (str) {
+ if (!str) return str
+ var arrEntities = {
+ 'lt': '<',
+ 'gt': '>',
+ 'nbsp': ' ',
+ 'amp': '&',
+ 'quot': '"'
+ }
+ return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {
+ return arrEntities[t]
+ })
+ },
+ /**
+ * 普通字符转换成转义符
+ * @param {*} sHtml
+ * @returns
+ */
+ html2Escape (sHtml) {
+ if (!sHtml) return sHtml
+ return sHtml.replace(/[<>&"]/g, function (c) {
+ return {
+ '<': '<',
+ '>': '>',
+ '&': '&',
+ '"': '"'
+ }[c]
+ })
+ },
+ /**
+ * setData polyfill 勿删!!!
+ * 用于转换后的uniapp的项目能直接使用this.setData()函数
+ * @param {*} obj
+ * @param {*} callback
+ */
+ setData: function (obj, callback) {
+ let that = this
+ const handleData = (tepData, tepKey, afterKey) => {
+ var tepData2 = tepData
+ tepKey = tepKey.split('.')
+ tepKey.forEach(item => {
+ if (tepData[item] === null || tepData[item] === undefined) {
+ let reg = /^[0-9]+$/
+ tepData[item] = reg.test(afterKey) ? [] : {}
+ tepData2 = tepData[item]
+ } else {
+ tepData2 = tepData[item]
+ }
+ })
+ return tepData2
+ }
+ const isFn = function (value) {
+ return typeof value == 'function' || false
+ }
+ Object.keys(obj).forEach(function (key) {
+ let val = obj[key]
+ key = key.replace(/\]/g, '').replace(/\[/g, '.')
+ let front, after
+ let index_after = key.lastIndexOf('.')
+ if (index_after != -1) {
+ after = key.slice(index_after + 1)
+ front = handleData(that, key.slice(0, index_after), after)
+ } else {
+ after = key
+ front = that
+ }
+ if (front.$data && front.$data[after] === undefined) {
+ Object.defineProperty(front, after, {
+ get () {
+ return front.$data[after]
+ },
+ set (newValue) {
+ front.$data[after] = newValue
+ that.hasOwnProperty("$forceUpdate") && that.$forceUpdate()
+ },
+ enumerable: true,
+ configurable: true
+ })
+ front[after] = val
+ } else {
+ that.$set(front, after, val)
+ }
+ })
+ // this.$forceUpdate();
+ isFn(callback) && this.$nextTick(callback)
+ },
+ /**
+ * 解析事件里的动态函数名,这种没有()的函数名,在uniapp不被执行
+ * 比如:立即
+ * @param {*} exp
+ */
+ parseEventDynamicCode (exp) {
+ if (typeof (eval("this." + exp)) === 'function') {
+ eval("this." + exp + '()')
+ }
+ },
+ /**
+ * 用于处理对props进行赋值的情况
+ * //简单处理一下就行了
+ *
+ * @param {*} target
+ * @returns
+ */
+ deepClone (target) {
+ //判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
+ // const toString = Object.prototype.toString
+ // toString.call(obj) === '[object Array]' ? clone = clone || [] : clone = clone || {}
+ // for (const i in obj) {
+ // if (typeof obj[i] === 'object' && obj[i]!==null) {
+ // // 要考虑深复制问题了
+ // if (Array.isArray(obj[i])) {
+ // // 这是数组
+ // clone[i] = []
+ // } else {
+ // // 这是对象
+ // clone[i] = {}
+ // }
+ // deepClone(obj[i], clone[i])
+ // } else {
+ // clone[i] = obj[i]
+ // }
+ // }
+ // return clone
+ return JSON.parse(JSON.stringify(obj))
+ }
+ }
+}
diff --git a/litemall-wx_uni/polyfill/polyfill.js b/litemall-wx_uni/polyfill/polyfill.js
new file mode 100644
index 00000000..2959d9db
--- /dev/null
+++ b/litemall-wx_uni/polyfill/polyfill.js
@@ -0,0 +1,1073 @@
+/*
+ * @Author: zhang peng
+ * @Date: 2021-08-03 10:57:51
+ * @LastEditTime: 2021-10-15 20:24:24
+ * @LastEditors: zhang peng
+ * @Description:
+ * @FilePath: \miniprogram-to-uniapp2\src\project\template\polyfill\polyfill.js
+ *
+ * Api polyfill
+ * 2021-03-06
+ * 因小程序转换到uniapp,再运行到各平台时,总有这样那样的api,没法支持,
+ * 现根据uniapp文档对各平台的支持度,或实现,或调用success来抹平各平台的差异,
+ * 让代码能正常运行,下一步再解决这些api的兼容问题。
+ *
+ * Author: 375890534@qq.com
+ */
+const base64Binary = require("./base64Binary")
+
+/**
+ * 获取guid
+ */
+function guid () {
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
+ var r = Math.random() * 16 | 0,
+ v = c == 'x' ? r : (r & 0x3 | 0x8)
+ return v.toString(16)
+ })
+}
+
+/**
+ * 检查api是否未实现,没实现返回true
+ * @param {Object} api
+ */
+function isApiNotImplemented (api) {
+ return uni[api] === undefined || [api] && uni[api].toString().indexOf("is not yet implemented") > -1
+}
+
+/**
+ * 条件编译
+ */
+function platformPolyfill () {
+ // #ifdef APP-PLUS
+ uni.showNavigationBarLoading = function () {
+ console.warn("api: uni.showNavigationBarLoading 在App平台会在屏幕中间悬浮loading,不如直接去掉")
+ }
+ // #endif
+}
+
+
+/**
+ * 登录相关api polyfill
+ */
+function loginPolyfill () {
+ if (isApiNotImplemented("login")) {
+ uni.login = function (options) {
+ console.warn("api: uni.login 登录 在当前平台不支持,【关键流程函数】 回调成功")
+ options.success && options.success({
+ code: guid(),
+ errMsg: "login:ok"
+ })
+ }
+ }
+
+ if (isApiNotImplemented("checkSession")) {
+ uni.checkSession = function (options) {
+ console.warn("api: uni.checkSession 检查登录状态是否过期 在当前平台不支持,【关键流程函数】 回调成功")
+ options.success && options.success()
+ }
+ }
+
+ if (isApiNotImplemented("getUserInfo")) {
+ uni.getUserInfo = function (options) {
+ console.warn("api: uni.getUserInfo 获取用户信息 在当前平台不支持,【关键流程函数】回调成功")
+ options.success && options.success({
+ userInfo: ""
+ })
+ }
+ }
+ if (isApiNotImplemented("getUserProfile")) {
+ uni.getUserProfile = function (options) {
+ console.warn("api: uni.getUserProfile 获取用户授权信息 在当前平台不支持,【关键流程函数】回调成功")
+ options.success && options.success({
+ userInfo: ""
+ })
+ }
+ }
+}
+
+/**
+ * 地图相关
+ */
+function mapPolyfill () {
+ if (isApiNotImplemented("chooseLocation")) {
+ uni.chooseLocation = function (options) {
+ console.warn("api: uni.chooseLocation 打开地图选择位置 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("openLocation")) {
+ uni.openLocation = function (object) {
+ console.warn("api: uni.openLocation 使用应用内置地图查看位置 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("createMapContext")) {
+ uni.createMapContext = function (mapId) {
+ console.warn("api: uni.createMapContext 创建并返回 map 上下文 mapContext 对象 在当前平台不支持,返回空")
+ return {
+ $getAppMap: null,
+ getCenterLocation: function (options) {
+ options.fail && options.fail()
+ },
+ moveToLocation: function (options) {
+ options.fail && options.fail()
+ },
+ translateMarker: function (options) {
+ options.fail && options.fail()
+ },
+ includePoints: function (options) { },
+ getRegion: function (options) {
+ options.fail && options.fail()
+ },
+ getScale: function (options) {
+ options.fail && options.fail()
+ },
+ }
+ }
+ }
+}
+
+/**
+ * 字符编码
+ */
+function base64Polyfill () {
+ //将 Base64 字符串转成 ArrayBuffer 对象
+ if (isApiNotImplemented("base64ToArrayBuffer")) {
+ uni.base64ToArrayBuffer = function (base64) {
+ return base64Binary.base64ToArrayBuffer(base64)
+ }
+ }
+
+ //将 ArrayBuffer 对象转成 Base64 字符串
+ if (isApiNotImplemented("arrayBufferToBase64")) {
+ uni.arrayBufferToBase64 = function (buffer) {
+ return base64Binary.arrayBufferToBase64(buffer)
+ }
+ }
+}
+
+
+/**
+ * 媒体相关
+ */
+function mediaPolyfill () {
+ if (isApiNotImplemented("saveImageToPhotosAlbum")) {
+ uni.saveImageToPhotosAlbum = function (options) {
+ console.warn("api: uni.saveImageToPhotosAlbum 保存图片到系统相册 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("compressImage")) {
+ uni.compressImage = function (object) {
+ console.warn("api: uni.compressImage 压缩图片接口 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("chooseMessageFile")) {
+ //从微信聊天会话中选择文件。
+ uni.chooseMessageFile = function (object) {
+ console.warn("api: uni.chooseMessageFile 从微信聊天会话中选择文件。 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("getRecorderManager")) {
+ //获取全局唯一的录音管理器 recorderManager
+ uni.getRecorderManager = function (object) {
+ console.warn("api: uni.getRecorderManager 获取全局唯一的录音管理器 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("getBackgroundAudioManager")) {
+ //获取全局唯一的背景音频管理器 backgroundAudioManager
+ uni.getBackgroundAudioManager = function (object) {
+ console.warn("api: uni.getBackgroundAudioManager 获取全局唯一的背景音频管理器 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("chooseMedia")) {
+ // 拍摄或从手机相册中选择图片或视频
+ uni.chooseMedia = function (object) {
+ console.warn("api: uni.chooseMedia 拍摄或从手机相册中选择图片或视频 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("saveVideoToPhotosAlbum")) {
+ // 保存视频到系统相册
+ uni.saveVideoToPhotosAlbum = function (object) {
+ console.warn("api: uni.saveVideoToPhotosAlbum 保存视频到系统相册 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("getVideoInfo")) {
+ // 获取视频详细信息
+ uni.getVideoInfo = function (object) {
+ console.warn("api: uni.getVideoInfo 获取视频详细信息 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("compressVideo")) {
+ // 压缩视频接口
+ uni.compressVideo = function (object) {
+ console.warn("api: uni.compressVideo 压缩视频接口 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+
+
+ if (isApiNotImplemented("openVideoEditor")) {
+ // 打开视频编辑器
+ uni.openVideoEditor = function (object) {
+ console.warn("api: uni.openVideoEditor 打开视频编辑器 在当前平台不支持,回调失败")
+ options.fail && options.fail()
+ }
+ }
+}
+
+/**
+ * 设备
+ */
+function devicePolyfill () {
+ if (isApiNotImplemented("canIUse")) {
+ // 判断应用的 API,回调,参数,组件等是否在当前版本可用。
+ // h5时,恒返回true
+ uni.canIUse = function (object) {
+ console.warn("api: uni.canIUse 判断API在当前平台是否可用 返回true")
+ return true
+ }
+ }
+
+ //微信小程序
+ if (isApiNotImplemented("startDeviceMotionListening")) {
+ // 开始监听设备方向的变化
+ uni.startDeviceMotionListening = function (options) {
+ console.warn("api: uni.startDeviceMotionListening 开始监听设备方向的变化 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+
+ if (isApiNotImplemented("onMemoryWarning")) {
+ // 监听内存不足告警事件。
+ uni.onMemoryWarning = function (callback) {
+ console.warn("监听内存不足告警事件,仅支持微信小程序、支付宝小程序、百度小程序、QQ小程序,当前平台不支持,已注释")
+ }
+ }
+
+ if (isApiNotImplemented("offNetworkStatusChange")) {
+ // 取消监听网络状态变化
+ uni.offNetworkStatusChange = function (callback) { }
+ }
+ if (isApiNotImplemented("offAccelerometerChange")) {
+ // 取消监听加速度数据。
+ uni.offAccelerometerChange = function (callback) { }
+ }
+ if (isApiNotImplemented("startAccelerometer")) {
+ // 开始监听加速度数据。
+ uni.startAccelerometer = function (callback) {
+ console.warn("api: uni.startAccelerometer 开始监听加速度数据 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("offCompassChange")) {
+ // 取消监听罗盘数据
+ uni.offCompassChange = function (callback) {
+ console.warn("api: uni.offCompassChange 取消监听罗盘数据 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("startCompass")) {
+ // 开始监听罗盘数据
+ uni.startCompass = function (callback) {
+ console.warn("api: uni.startCompass 开始监听罗盘数据 在当前平台不支持")
+ }
+ }
+
+
+ if (isApiNotImplemented("onGyroscopeChange")) {
+ // 监听陀螺仪数据变化事件
+ uni.onGyroscopeChange = function (callback) {
+ console.warn("api: uni.onGyroscopeChange 监听陀螺仪数据变化事件 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("startGyroscope")) {
+ // 开始监听陀螺仪数据
+ uni.startGyroscope = function (callback) {
+ console.warn("api: uni.startGyroscope 监听陀螺仪数据变化事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("stopGyroscope")) {
+ // 停止监听陀螺仪数据
+ uni.stopGyroscope = function (callback) {
+ console.warn("api: uni.stopGyroscope 停止监听陀螺仪数据 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("scanCode")) {
+ // 调起客户端扫码界面,扫码成功后返回对应的结果
+ uni.scanCode = function (callback) {
+ console.warn("api: uni.scanCode 扫描二维码 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("setClipboardData")) {
+ // 设置系统剪贴板的内容
+ uni.setClipboardData = function (callback) {
+ console.warn("api: uni.setClipboardData 设置系统剪贴板的内容 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getClipboardData")) {
+ // 获取系统剪贴板内容
+ uni.getClipboardData = function (callback) {
+ console.warn("api: uni.getClipboardData 获取系统剪贴板内容 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("setScreenBrightness")) {
+ // 设置屏幕亮度
+ uni.setScreenBrightness = function (callback) {
+ console.warn("api: uni.setScreenBrightness 设置屏幕亮度 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getScreenBrightness")) {
+ // 获取屏幕亮度
+ uni.getScreenBrightness = function (callback) {
+ console.warn("api: uni.getScreenBrightness 获取屏幕亮度 在当前平台不支持")
+ }
+ }
+
+ if (isApiNotImplemented("setKeepScreenOn")) {
+ // 设置是否保持常亮状态
+ uni.setKeepScreenOn = function (callback) {
+ console.warn("api: uni.setKeepScreenOn 设置是否保持常亮状态 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("onUserCaptureScreen")) {
+ // 监听用户主动截屏事件
+ uni.onUserCaptureScreen = function (callback) {
+ console.warn("api: uni.onUserCaptureScreen 监听用户主动截屏事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("addPhoneContact")) {
+ // 添加联系人
+ uni.addPhoneContact = function (callback) {
+ console.warn("api: uni.addPhoneContact 添加联系人 在当前平台不支持")
+ }
+ }
+}
+
+/**
+ * 界面相关
+ */
+function uiPolyfill () {
+ if (isApiNotImplemented("hideNavigationBarLoading")) {
+ // 在当前页面隐藏导航条加载动画
+ uni.hideNavigationBarLoading = function (options) {
+ console.warn("api: uni.hideNavigationBarLoading 在当前页面隐藏导航条加载动画 在当前平台不支持,回调成功")
+ options.success && options.success()
+ }
+ }
+ if (isApiNotImplemented("hideHomeButton")) {
+ // 隐藏返回首页按钮
+ uni.hideHomeButton = function (options) {
+ console.warn("api: uni.hideHomeButton 隐藏返回首页按钮 在当前平台不支持,回调成功")
+ options.success && options.success()
+ }
+ }
+
+ if (isApiNotImplemented("setTabBarItem")) {
+ // 动态设置 tabBar 某一项的内容
+ uni.setTabBarItem = function (options) {
+ console.warn("api: uni.setTabBarItem 动态设置 tabBar 某一项的内容 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("setTabBarStyle")) {
+ // 动态设置 tabBar 的整体样式
+ uni.setTabBarStyle = function (options) {
+ console.warn("api: uni.setTabBarStyle 动态设置 tabBar 的整体样式 在当前平台不支持,回调成功")
+ options.success && options.success()
+ }
+ }
+
+ if (isApiNotImplemented("hideTabBar")) {
+ // 隐藏 tabBar
+ uni.hideTabBar = function (options) {
+ console.warn("api: uni.hideTabBar 隐藏 tabBar 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+
+
+ if (isApiNotImplemented("showTabBar")) {
+ // 显示 tabBar
+ uni.showTabBar = function (options) {
+ console.warn("api: uni.showTabBar 显示 tabBar 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("setTabBarBadge")) {
+ // 为 tabBar 某一项的右上角添加文本
+ uni.setTabBarBadge = function (options) {
+ console.warn("api: uni.setTabBarBadge 为 tabBar 某一项的右上角添加文本 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("removeTabBarBadge")) {
+ // 移除 tabBar 某一项右上角的文本
+ uni.removeTabBarBadge = function (options) {
+ console.warn("api: uni.removeTabBarBadge 移除 tabBar 某一项右上角的文本 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("showTabBarRedDot")) {
+ // 显示 tabBar 某一项的右上角的红点
+ uni.showTabBarRedDot = function (options) {
+ console.warn("api: uni.showTabBarRedDot 显示 tabBar 某一项的右上角的红点 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("hideTabBarRedDot")) {
+ // 隐藏 tabBar 某一项的右上角的红点
+ uni.hideTabBarRedDot = function (options) {
+ console.warn("api: uni.hideTabBarRedDot 隐藏 tabBar 某一项的右上角的红点 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ ///////////////////////////////
+ if (isApiNotImplemented("setBackgroundColor")) {
+ // 动态设置窗口的背景色
+ uni.setBackgroundColor = function (options) {
+ console.warn("api: uni.setBackgroundColor 动态设置窗口的背景色 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("setBackgroundTextStyle")) {
+ // 动态设置下拉背景字体、loading 图的样式
+ uni.setBackgroundTextStyle = function (options) {
+ console.warn("api: uni.setBackgroundTextStyle 动态设置下拉背景字体、loading 图的样式 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("onWindowResize")) {
+ // 监听窗口尺寸变化事件
+ uni.onWindowResize = function (callback) {
+ console.warn("api: uni.onWindowResize 监听窗口尺寸变化事件 在当前平台不支持,执行失败")
+ callback && callback()
+ }
+ }
+ if (isApiNotImplemented("offWindowResize")) {
+ // 取消监听窗口尺寸变化事件
+ uni.offWindowResize = function (callback) {
+ console.warn("api: uni.offWindowResize 取消监听窗口尺寸变化事件 在当前平台不支持,执行失败")
+ callback && callback()
+ }
+ }
+ if (isApiNotImplemented("loadFontFace")) {
+ // 动态加载网络字体
+ uni.loadFontFace = function (options) {
+ console.warn("api: uni.loadFontFace 动态加载网络字体 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getMenuButtonBoundingClientRect")) {
+ // 微信胶囊按钮布局信息
+ uni.getMenuButtonBoundingClientRect = function () {
+ console.warn("api: uni.getMenuButtonBoundingClientRect 微信胶囊按钮布局信息 在当前平台不支持,执行失败")
+ }
+ }
+}
+/**
+ * file
+ */
+function filePolyfill () {
+ if (isApiNotImplemented("saveFile")) {
+ // 保存文件到本地
+ uni.saveFile = function (options) {
+ console.warn("api: uni.saveFile 保存文件到本地 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getSavedFileList")) {
+ // 获取本地已保存的文件列表
+ uni.getSavedFileList = function (options) {
+ console.warn("api: uni.getSavedFileList 获取本地已保存的文件列表 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getSavedFileInfo")) {
+ // 获取本地文件的文件信息
+ uni.getSavedFileInfo = function (options) {
+ console.warn("api: uni.getSavedFileInfo 获取本地文件的文件信息 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("removeSavedFile")) {
+ // 删除本地存储的文件
+ uni.removeSavedFile = function (options) {
+ console.warn("api: uni.removeSavedFile 删除本地存储的文件 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getFileInfo")) {
+ // 获取文件信息
+ uni.getFileInfo = function (options) {
+ console.warn("api: uni.getFileInfo 获取文件信息 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("openDocument")) {
+ // 新开页面打开文档
+ uni.openDocument = function (options) {
+ console.warn("api: uni.openDocument 新开页面打开文档 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getFileSystemManager")) {
+ // 获取全局唯一的文件管理器
+ uni.getFileSystemManager = function () {
+ console.warn("api: uni.getFileSystemManager 获取全局唯一的文件管理器 在当前平台不支持,执行失败")
+ }
+ }
+}
+
+/**
+ * canvas
+ */
+function canvasPolyfill () {
+ if (isApiNotImplemented("createOffscreenCanvas")) {
+ // 创建离屏 canvas 实例
+ uni.createOffscreenCanvas = function () {
+ console.warn("api: uni.createOffscreenCanvas 创建离屏 canvas 实例 在当前平台不支持,执行失败")
+ }
+ }
+
+ if (isApiNotImplemented("canvasToTempFilePath")) {
+ // 把当前画布指定区域的内容导出生成指定大小的图片
+ uni.canvasToTempFilePath = function () {
+ console.warn("api: uni.canvasToTempFilePath 把当前画布指定区域的内容导出生成指定大小的图片 在当前平台不支持,执行失败")
+ }
+ }
+}
+
+/**
+ * Ad广告
+ */
+function adPolyfill () {
+ if (isApiNotImplemented("createRewardedVideoAd")) {
+ // 激励视频广告
+ uni.createRewardedVideoAd = function () {
+ console.warn("api: uni.createRewardedVideoAd 激励视频广告 在当前平台不支持,执行失败")
+ return {
+ show () { },
+ onLoad () { },
+ offLoad () { },
+ load () { },
+ onError () { },
+ offError () { },
+ onClose () { },
+ offClose () { },
+ }
+ }
+ }
+ if (isApiNotImplemented("createInterstitialAd")) {
+ // 插屏广告组件
+ uni.createInterstitialAd = function () {
+ console.warn("api: uni.createInterstitialAd 插屏广告组件 在当前平台不支持,执行失败")
+ }
+ }
+}
+
+/**
+ * 第三方
+ */
+function pluginsPolyfill () {
+ if (isApiNotImplemented("getProvider")) {
+ // 获取服务供应商
+ uni.getProvider = function (options) {
+ console.warn("api: uni.getProvider 获取服务供应商 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("showShareMenu")) {
+ // 小程序的原生菜单中显示分享按钮
+ uni.showShareMenu = function (options) {
+ console.warn("api: uni.showShareMenu 小程序的原生菜单中显示分享按钮 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("hideShareMenu")) {
+ // 小程序的原生菜单中显示分享按钮
+ uni.hideShareMenu = function (options) {
+ console.warn("api: uni.hideShareMenu 小程序的原生菜单中隐藏分享按钮 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("requestPayment")) {
+ // 支付
+ uni.requestPayment = function (options) {
+ console.error("api: uni.requestPayment 支付 在当前平台不支持(需自行参考文档封装),执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("createWorker")) {
+ // 创建一个 Worker 线程
+ uni.createWorker = function () {
+ console.error("api: uni.createWorker 创建一个 Worker 线程 在当前平台不支持,执行失败")
+ }
+ }
+}
+
+/**
+ * 其他
+ */
+function otherPolyfill () {
+ if (isApiNotImplemented("authorize")) {
+ // 提前向用户发起授权请求
+ uni.authorize = function (options) {
+ console.warn("api: uni.authorize 提前向用户发起授权请求 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("openSetting")) {
+ // 调起客户端小程序设置界面
+ uni.openSetting = function (options) {
+ console.warn("api: uni.openSetting 调起客户端小程序设置界面 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("getSetting")) {
+ // 获取用户的当前设置
+ uni.getSetting = function (options) {
+ console.warn("api: uni.getSetting 获取用户的当前设置 在当前平台不支持,【关键流程函数】回调成功")
+ options.success && options.success({
+ authSetting: {
+ scope: {
+ userInfo: false
+ }
+ }
+ })
+ }
+ }
+
+ if (isApiNotImplemented("chooseAddress")) {
+ // 获取用户收货地址
+ uni.chooseAddress = function (options) {
+ console.warn("api: uni.chooseAddress 获取用户收货地址 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("chooseInvoiceTitle")) {
+ // 选择用户的发票抬头
+ uni.chooseInvoiceTitle = function (options) {
+ console.warn("api: uni.chooseInvoiceTitle 选择用户的发票抬头 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("navigateToMiniProgram")) {
+ // 打开另一个小程序
+ uni.navigateToMiniProgram = function (options) {
+ console.warn("api: uni.navigateToMiniProgram 打开另一个小程序 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("navigateBackMiniProgram")) {
+ // 跳转回上一个小程序
+ uni.navigateBackMiniProgram = function (options) {
+ console.warn("api: uni.navigateBackMiniProgram 跳转回上一个小程序 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getAccountInfoSync")) {
+ // 获取当前帐号信息
+ uni.getAccountInfoSync = function (options) {
+ console.warn("api: uni.getAccountInfoSync 获取当前帐号信息 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+
+ if (isApiNotImplemented("requestSubscribeMessage")) {
+ // 订阅消息
+ uni.requestSubscribeMessage = function (options) {
+ console.warn("api: uni.requestSubscribeMessage 订阅消息 在当前平台不支持,执行失败")
+ options.fail && options.fail()
+ }
+ }
+ if (isApiNotImplemented("getUpdateManager")) {
+ // 管理小程序更新
+ uni.getUpdateManager = function (options) {
+ console.error("api: uni.getUpdateManager 管理小程序更新 在当前平台不支持,执行失败")
+ }
+ }
+ if (isApiNotImplemented("setEnableDebug")) {
+ // 设置是否打开调试开关
+ uni.setEnableDebug = function (options) {
+ console.error("api: uni.setEnableDebug 设置是否打开调试开关 在当前平台不支持,执行失败")
+ }
+ }
+ if (isApiNotImplemented("getExtConfig")) {
+ // 获取第三方平台自定义的数据字段
+ uni.getExtConfig = function (options) {
+ console.error("api: uni.getExtConfig 获取第三方平台自定义的数据字段 在当前平台不支持,执行失败")
+ }
+ }
+ if (isApiNotImplemented("getExtConfigSync")) {
+ // uni.getExtConfig 的同步版本
+ uni.getExtConfigSync = function (options) {
+ console.error("api: uni.getExtConfigSync uni.getExtConfig 的同步版本 在当前平台不支持,执行失败")
+ }
+ }
+}
+
+/**
+ * 认证
+ */
+function soterAuthPolyfill () {
+ if (isApiNotImplemented("startSoterAuthentication")) {
+ // 开始 SOTER 生物认证
+ uni.startSoterAuthentication = function (options) {
+ console.warn("api: uni.startSoterAuthentication 开始 SOTER 生物认证 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+ if (isApiNotImplemented("checkIsSupportSoterAuthentication")) {
+ // 获取本机支持的 SOTER 生物认证方式
+ uni.checkIsSupportSoterAuthentication = function (options) {
+ console.warn("api: uni.checkIsSupportSoterAuthentication 开获取本机支持的 SOTER 生物认证方式 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+ if (isApiNotImplemented("checkIsSoterEnrolledInDevice")) {
+ // 获取设备内是否录入如指纹等生物信息的接口
+ uni.checkIsSoterEnrolledInDevice = function (options) {
+ console.warn("api: uni.checkIsSoterEnrolledInDevice 获取设备内是否录入如指纹等生物信息的接口 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+}
+
+/**
+ * nfc
+ */
+function nfcPolyfill () {
+ //微信小程序
+ if (isApiNotImplemented("startHCE")) {
+ // 初始化 NFC 模块
+ uni.startHCE = function (options) {
+ console.warn("api: uni.startHCE 初始化 NFC 模块 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+}
+
+/**
+ * 电量
+ */
+function batteryPolyfill () {
+ //微信小程序
+ if (isApiNotImplemented("getBatteryInfo")) {
+ // 获取设备电量
+ uni.getBatteryInfo = function (options) {
+ console.warn("api: uni.getBatteryInfo 获取设备电量 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+ //微信小程序
+ if (isApiNotImplemented("getBatteryInfoSync")) {
+ // 同步获取设备电量
+ uni.getBatteryInfoSync = function (options) {
+ console.warn("api: uni.getBatteryInfoSync 同步获取设备电量 在当前平台不支持")
+ }
+ }
+}
+
+/**
+ * wifi
+ */
+function wifiPolyfill () {
+ //微信小程序
+ if (isApiNotImplemented("startWifi")) {
+ // 初始化 Wi-Fi 模块
+ uni.startWifi = function (options) {
+ console.warn("api: uni.startWifi 初始化 Wi-Fi 模块 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+ //字节跳动
+ if (isApiNotImplemented("getConnectedWifi")) {
+ // 获取设备当前所连的 WiFi 信息
+ uni.getConnectedWifi = function (options) {
+ console.warn("api: uni.getConnectedWifi 初获取设备当前所连的 WiFi 信息 在当前平台不支持")
+ options.success && options.success()
+ }
+ }
+}
+
+/**
+ * 蓝牙
+ */
+function bluetoothPolyfill () {
+ //蓝牙
+ if (isApiNotImplemented("openBluetoothAdapter")) {
+ // 初始化蓝牙模块
+ uni.openBluetoothAdapter = function (object) {
+ console.warn("api: uni.openBluetoothAdapter 初始化蓝牙模块 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("startBluetoothDevicesDiscovery")) {
+ // 开始搜寻附近的蓝牙外围设备
+ uni.startBluetoothDevicesDiscovery = function (callback) {
+ console.warn("api: uni.startBluetoothDevicesDiscovery 开始搜寻附近的蓝牙外围设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("onBluetoothDeviceFound")) {
+ // 监听寻找到新设备的事件
+ uni.onBluetoothDeviceFound = function (callback) {
+ console.warn("api: uni.onBluetoothDeviceFound 监听寻找到新设备的事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("stopBluetoothDevicesDiscovery")) {
+ // 停止搜寻附近的蓝牙外围设备
+ uni.stopBluetoothDevicesDiscovery = function (callback) {
+ console.warn("api: uni.stopBluetoothDevicesDiscovery 停止搜寻附近的蓝牙外围设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("onBluetoothAdapterStateChange")) {
+ // 监听蓝牙适配器状态变化事件
+ uni.onBluetoothAdapterStateChange = function (callback) {
+ console.warn("api: uni.onBluetoothAdapterStateChange 监听蓝牙适配器状态变化事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getConnectedBluetoothDevices")) {
+ // 根据 uuid 获取处于已连接状态的设备
+ uni.getConnectedBluetoothDevices = function (callback) {
+ console.warn("api: uni.getConnectedBluetoothDevices 根据 uuid 获取处于已连接状态的设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getBluetoothDevices")) {
+ // 获取在蓝牙模块生效期间所有已发现的蓝牙设备
+ uni.getBluetoothDevices = function (callback) {
+ console.warn("api: uni.getBluetoothDevices 获取在蓝牙模块生效期间所有已发现的蓝牙设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getBluetoothAdapterState")) {
+ // 获取本机蓝牙适配器状态
+ uni.getBluetoothAdapterState = function (callback) {
+ console.warn("api: uni.getBluetoothAdapterState 获取本机蓝牙适配器状态 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("closeBluetoothAdapter")) {
+ // 关闭蓝牙模块
+ uni.closeBluetoothAdapter = function (callback) {
+ console.warn("api: uni.closeBluetoothAdapter 关闭蓝牙模块 在当前平台不支持")
+ }
+ }
+}
+
+/**
+ * 低功耗蓝牙
+ */
+function blePolyfill () {
+ if (isApiNotImplemented("setBLEMTU")) {
+ // 设置蓝牙最大传输单元
+ uni.setBLEMTU = function (callback) {
+ console.warn("api: uni.setBLEMTU 设置蓝牙最大传输单元 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("readBLECharacteristicValue")) {
+ // 读取低功耗蓝牙设备的特征值的二进制数据值
+ uni.readBLECharacteristicValue = function (callback) {
+ console.warn("api: uni.readBLECharacteristicValue 读取低功耗蓝牙设备的特征值的二进制数据值 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("onBLEConnectionStateChange")) {
+ // 关闭蓝牙模块
+ uni.onBLEConnectionStateChange = function (callback) {
+ console.warn("api: uni.onBLEConnectionStateChange 监听低功耗蓝牙连接状态的改变事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("notifyBLECharacteristicValueChange")) {
+ // 启用低功耗蓝牙设备特征值变化时的 notify 功能
+ uni.notifyBLECharacteristicValueChange = function (callback) {
+ console.warn("api: uni.notifyBLECharacteristicValueChange 启用低功耗蓝牙设备特征值变化时的 notify 功能 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getBLEDeviceServices")) {
+ // 获取蓝牙设备所有服务
+ uni.getBLEDeviceServices = function (callback) {
+ console.warn("api: uni.getBLEDeviceServices 获取蓝牙设备所有服务 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getBLEDeviceRSSI")) {
+ // 获取蓝牙设备的信号强度
+ uni.getBLEDeviceRSSI = function (callback) {
+ console.warn("api: uni.getBLEDeviceRSSI 获取蓝牙设备的信号强度 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("createBLEConnection")) {
+ // 连接低功耗蓝牙设备
+ uni.createBLEConnection = function (callback) {
+ console.warn("api: uni.createBLEConnection 连接低功耗蓝牙设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("closeBLEConnection")) {
+ // 断开与低功耗蓝牙设备的连接
+ uni.closeBLEConnection = function (callback) {
+ console.warn("api: uni.closeBLEConnection 断开与低功耗蓝牙设备的连接 在当前平台不支持")
+ }
+ }
+}
+
+/**
+ * iBeacon
+ */
+function iBeaconPolyfill () {
+ if (isApiNotImplemented("onBeaconServiceChange")) {
+ // 监听 iBeacon 服务状态变化事件
+ uni.onBeaconServiceChange = function (callback) {
+ console.warn("api: uni.onBeaconServiceChange 监听 iBeacon 服务状态变化事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("onBeaconUpdate")) {
+ // 监听 iBeacon 设备更新事件
+ uni.onBeaconUpdate = function (callback) {
+ console.warn("api: uni.onBeaconUpdate 监听 iBeacon 设备更新事件 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("getBeacons")) {
+ // 获取所有已搜索到的 iBeacon 设备
+ uni.getBeacons = function (callback) {
+ console.warn("api: uni.getBeacons 获取所有已搜索到的 iBeacon 设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("startBeaconDiscovery")) {
+ // 开始搜索附近的 iBeacon 设备
+ uni.startBeaconDiscovery = function (callback) {
+ console.warn("api: uni.startBeaconDiscovery 开始搜索附近的 iBeacon 设备 在当前平台不支持")
+ }
+ }
+ if (isApiNotImplemented("stopBeaconDiscovery")) {
+ // 停止搜索附近的 iBeacon 设备
+ uni.stopBeaconDiscovery = function (callback) {
+ console.warn("api: uni.stopBeaconDiscovery 停止搜索附近的 iBeacon 设备 在当前平台不支持")
+ }
+ }
+}
+
+/**
+* uni.navigateTo 和 uni.redirectTo 不能直接跳转tabbar里面的页面,拦截fail,并当它为tabbar页面时,直接调用uni.switchTab()
+*/
+function routerPolyfill () {
+ var routerApiFailEventHandle = function (res, options) {
+ if (res.errMsg.indexOf('tabbar page') > -1) {
+ console.error('res.errMsg: ' + res.errMsg)
+ var apiName = res.errMsg.match(/not\s(\w+)\sa/)[1]
+ console.log(apiName)
+ var url = options.url
+ if (url) {
+ var queryString = url.split('?')[1]
+ if (queryString) {
+ console.error(apiName + " 的参数将被忽略:" + queryString)
+ }
+ uni.switchTab({
+ url: url
+ })
+ }
+ }
+ }
+
+ var routerApiHandle = function (oriLogFunc) {
+ return function (options) {
+ try {
+ if (options.fail) {
+ options.fail = (function fail (failFun) {
+ return function (res) {
+ routerApiFailEventHandle(res, options)
+ failFun(res)
+ }
+ })(options.fail)
+ } else {
+ options.fail = function (res) {
+ routerApiFailEventHandle(res, options)
+ }
+ }
+ oriLogFunc.call(oriLogFunc, options)
+ } catch (e) {
+ console.error('uni.navigateTo or uni.redirectTo error', e)
+ }
+ }
+ }
+
+ uni.navigateTo = routerApiHandle(uni.navigateTo)
+ uni.redirectTo = routerApiHandle(uni.redirectTo)
+}
+
+var isInit = false
+/**
+ * polyfill 入口
+ */
+function init () {
+ if (isInit) return
+ isInit = true
+
+ console.log("Api polyfill start")
+ //条件编译
+ platformPolyfill()
+ //登录
+ loginPolyfill()
+ //base64
+ base64Polyfill()
+ //地图
+ mapPolyfill()
+ //设备
+ devicePolyfill()
+
+ //媒体相关
+ mediaPolyfill()
+
+ //蓝牙
+ bluetoothPolyfill()
+ //低功耗蓝牙
+ blePolyfill()
+ //iBeacon
+ iBeaconPolyfill()
+ //wifi
+ wifiPolyfill()
+ //电量信息
+ batteryPolyfill()
+ //nfc
+ nfcPolyfill()
+ //auth
+ soterAuthPolyfill()
+
+ //ui
+ uiPolyfill()
+ //file
+ filePolyfill()
+ //canvas
+ canvasPolyfill()
+ //ad
+ adPolyfill()
+ //plugins
+ pluginsPolyfill()
+ //other
+ otherPolyfill()
+
+ //router
+ routerPolyfill()
+}
+
+
+module.exports = {
+ init,
+ guid
+}
diff --git a/litemall-wx_uni/project.config.json b/litemall-wx_uni/project.config.json
new file mode 100644
index 00000000..f482d9ba
--- /dev/null
+++ b/litemall-wx_uni/project.config.json
@@ -0,0 +1,330 @@
+{
+ "description": "项目配置文件。",
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "enhance": true,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": true,
+ "coverView": true,
+ "nodeModules": true,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "uglifyFileName": true,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "compileHotReLoad": false,
+ "lazyloadPlaceholderEnable": false,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "enableEngineNative": false,
+ "useIsolateContext": false,
+ "userConfirmedBundleSwitch": false,
+ "packNpmManually": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true,
+ "disableUseStrict": false,
+ "showES6CompileOption": false,
+ "useCompilerPlugins": false
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.4.0",
+ "appid": "wx5e4cd1d279a5fca0",
+ "projectname": "litemall-wx",
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
+ "condition": {
+ "search": {
+ "list": []
+ },
+ "conversation": {
+ "list": []
+ },
+ "plugin": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": [
+ {
+ "id": -1,
+ "name": "首页",
+ "pathName": "pages/index/index",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "专题",
+ "pathName": "pages/topic/topic",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "专题详情",
+ "pathName": "pages/topicDetail/topicDetail",
+ "query": "id=314"
+ },
+ {
+ "id": -1,
+ "name": "专题评论列表",
+ "pathName": "pages/topicComment/topicComment",
+ "query": "valueId=314&type=1"
+ },
+ {
+ "id": -1,
+ "name": "专题评论添加",
+ "pathName": "pages/topicCommentPost/topicCommentPost",
+ "query": "valueId=314&type=1"
+ },
+ {
+ "id": -1,
+ "name": "品牌",
+ "pathName": "pages/brand/brand",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "品牌详情",
+ "pathName": "pages/brandDetail/brandDetail",
+ "query": "id=1001000"
+ },
+ {
+ "id": -1,
+ "name": "人气推荐",
+ "pathName": "pages/hotGoods/hotGoods",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "新品首发",
+ "pathName": "pages/newGoods/newGoods",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "分类",
+ "pathName": "pages/catalog/catalog",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "分类详情",
+ "pathName": "pages/category/category",
+ "query": "id=1008002"
+ },
+ {
+ "id": -1,
+ "name": "查找",
+ "pathName": "pages/search/search",
+ "query": ""
+ },
+ {
+ "id": 12,
+ "name": "商品",
+ "pathName": "pages/goods/goods",
+ "query": "id=1181003"
+ },
+ {
+ "id": -1,
+ "name": "商品评论列表",
+ "pathName": "pages/comment/comment",
+ "query": "valueId=1181000&type=0"
+ },
+ {
+ "id": -1,
+ "name": "购物车",
+ "pathName": "pages/cart/cart",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "下单",
+ "pathName": "pages/checkout/checkout",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "支付结果",
+ "pathName": "pages/payResult/payResult",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的",
+ "pathName": "pages/ucenter/index/index",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的订单列表",
+ "pathName": "pages/ucenter/order/order",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的订单详情",
+ "pathName": "pages/ucenter/orderDetail/orderDetail",
+ "query": "id=1"
+ },
+ {
+ "id": 22,
+ "name": "待评价的订单详情",
+ "pathName": "pages/ucenter/orderDetail/orderDetail",
+ "query": "id=1"
+ },
+ {
+ "id": -1,
+ "name": "购买商品评价",
+ "pathName": "pages/commentPost/commentPost",
+ "query": "orderId=2&type=0&valueId=1116011"
+ },
+ {
+ "id": 22,
+ "name": "我的优惠券",
+ "pathName": "pages/ucenter/couponList/couponList",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的收藏",
+ "pathName": "pages/ucenter/collect/collect",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的足迹",
+ "pathName": "pages/ucenter/footprint/footprint",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的地址",
+ "pathName": "pages/ucenter/address/address",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的地址添加",
+ "pathName": "pages/ucenter/addressAdd/addressAdd",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "登录",
+ "pathName": "pages/auth/login/login",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "账号登录",
+ "pathName": "pages/auth/accountLogin/accountLogin",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "注册",
+ "pathName": "pages/auth/register/register",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "找回密码",
+ "pathName": "pages/auth/reset/reset",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "关于",
+ "pathName": "pages/about/about",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "测试更新",
+ "pathName": "pages/index/index",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "意见反馈",
+ "pathName": "pages/ucenter/feedback/feedback",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "团购专区",
+ "pathName": "pages/groupon/grouponList/grouponList",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "选择优惠券",
+ "pathName": "pages/ucenter/couponSelect/couponSelect",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "我的优惠券列表",
+ "pathName": "pages/ucenter/couponList/couponList",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "优惠券列表",
+ "pathName": "pages/coupon/coupon",
+ "query": ""
+ },
+ {
+ "id": -1,
+ "name": "帮助中心",
+ "pathName": "pages/help/help",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "我的团购",
+ "pathName": "pages/groupon/myGroupon/myGroupon",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "申请售后",
+ "pathName": "pages/ucenter/aftersale/aftersale",
+ "query": "id=2",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "售后列表",
+ "pathName": "pages/ucenter/aftersaleList/aftersaleList",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": -1,
+ "name": "售后详情",
+ "pathName": "pages/ucenter/aftersaleDetail/aftersaleDetail",
+ "query": "id=1",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/litemall-wx_uni/sitemap.json b/litemall-wx_uni/sitemap.json
new file mode 100644
index 00000000..940dce46
--- /dev/null
+++ b/litemall-wx_uni/sitemap.json
@@ -0,0 +1,21 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [
+ {
+ "action": "disallow",
+ "page": "pages/checkout/checkout"
+ },
+ {
+ "action": "disallow",
+ "page": "pages/payResult/payResult"
+ },
+ {
+ "action": "disallow",
+ "page": "pages/ucenter/index/index"
+ },
+ {
+ "action": "allow",
+ "page": "*"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/litemall-wx_uni/static/images/about.png b/litemall-wx_uni/static/images/about.png
new file mode 100644
index 0000000000000000000000000000000000000000..dbc47874543031cfff5a3f62bcfe910c066d41f1
GIT binary patch
literal 9910
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
Qpgy&TgPjXlYZH+2U)h8zNB{r;
literal 0
HcmV?d00001
diff --git a/litemall-wx_uni/static/images/aftersale.png b/litemall-wx_uni/static/images/aftersale.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed338acedb0920aa8a60635f4bfc3e7149f87158
GIT binary patch
literal 8742
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
IYWHye1Ee87H2?qr
literal 0
HcmV?d00001
diff --git a/litemall-wx_uni/static/images/cart.png b/litemall-wx_uni/static/images/cart.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c9a08ce4a9fe378815caeadc1fa419d4c782cad
GIT binary patch
literal 3030
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
QSJb)etdN!z^Giwp0i7$b*8l(j
literal 0
HcmV?d00001
diff --git a/litemall-wx_uni/static/images/cart@selected.png b/litemall-wx_uni/static/images/cart@selected.png
new file mode 100644
index 0000000000000000000000000000000000000000..d46f0de182e0b9e70a3291ca5036c8cc2454f73f
GIT binary patch
literal 3368
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
literal 0
HcmV?d00001
diff --git a/litemall-wx_uni/static/images/category.png b/litemall-wx_uni/static/images/category.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ffb7c844eb9f51a2f2bf1fd6a78b6793532085b
GIT binary patch
literal 10859
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