diff --git "a/\344\275\234\344\270\232/.keep" "b/\344\275\234\344\270\232/.keep" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/1.jpg" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/1.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..bcf49b75dbe79f28ccc77e0ea0731790e7ddef37 Binary files /dev/null and "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/1.jpg" differ diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/goods.html" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/goods.html" new file mode 100644 index 0000000000000000000000000000000000000000..c1fd641f551eacdf618897fc872305b4365e64c5 --- /dev/null +++ "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\232/goods.html" @@ -0,0 +1,145 @@ + + + + + + + + + vue商品页 + + + + + +
+
商品列表
+
+
+
+ {{description}} +
+ {{price}} + +
+
+
+ +
+
+
+ {{description}} +
+ {{price}} + +
+
+
+ +
+
+
+ {{description}} +
+ {{price}} + +
+
+
+
+ + + + + \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" new file mode 100644 index 0000000000000000000000000000000000000000..97f8cd092aecf0724d4e8aadf1e3bc74a3442f8e --- /dev/null +++ "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.css" @@ -0,0 +1,85 @@ +* { + list-style: none; +} + +body { + margin: 0; + padding: 0; +} + +.main { + width: 400px; + height: 200px; + margin: auto; + display: flex; + flex-direction: column; + +} + +.title { + width: 400px; + height: 50px; + display: flex; + justify-content: center; + align-items: center; + font-size: 20px; + +} + +.goods { + width: 400px; + height: 120px; + display: flex; + justify-content: space-around; + align-items: center; + align-content: center; + margin-top: 5px; + background-color: rgb(238, 238, 238); +} + +.left { + display: flex; + width: 100px; + height: 100px; +} + +.right { + width: 240px; + height: 100px; + display: flex; + flex-direction: column; + justify-content: space-between; +} + + +.price { + color: red; + font-size: 20px; + font-weight: 1000; +} + +.bottom { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.buy { + width: 50px; + color: white; + background-color: gray; + border: none; +} + +.buy:hover { + background-color: cadetblue; +} + +.input{ + margin: auto; +} + +input{ + width: 40px; + height: 20px; +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" new file mode 100644 index 0000000000000000000000000000000000000000..bfa0e623e09d7f7de19e1e0840970f4fae10a97b --- /dev/null +++ "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2322/goods.html" @@ -0,0 +1,52 @@ + + + + + + + + + + vue商品页 + + + + +
+
刷怪笼
+ +
+
+
+ {{item.description}} + 剩余 {{item.totalNum-item.buyNum}} 只 +
+ {{item.price}} + + +
+
+
+ +
+ + + + + \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" new file mode 100644 index 0000000000000000000000000000000000000000..037d0541b0ef367b831a36c2a711465a51eb1d68 --- /dev/null +++ "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.css" @@ -0,0 +1,66 @@ +* { + list-style: none; +} + +body { + margin: 0; + padding: 0; +} + +.main { + width: 300px; + margin: auto; + display: flex; +} + +.bigBox{ + width: 300px; + border: 1px gray solid; + display: flex; + flex-direction: column; +} + +.title{ + width: 300px; + height: 50px; + text-align: center; + font-size: 20px; + color: black; + line-height: 50px; +} + +.goodsList{ + width: 300px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + align-content: center; + margin-bottom: 10px; +} + +.img img{ + width: 150px; + height: 150px; +} + +#inp{ + width: 40px; + margin: 5px; +} + +.description{ + font-size: 16px; + color: black; +} + +.price{ + font-size: 16px; + color: orange; +} + +.remainder{ + font-size: 10px; + color: gray; +} + diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" new file mode 100644 index 0000000000000000000000000000000000000000..c17f2c0f4de32ce5624a3f19c16ef2b9013a169c --- /dev/null +++ "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/goods.html" @@ -0,0 +1,63 @@ + + + + + + + + + + vue商品页 + + + + +
+
+
商品列表
+
+
+
+
{{item.goodsName}}
+
{{item.description}}
+
价格:{{item.price}} ¥
+
剩余:{{item.totalNum-item.buyNum}}
+ +
+ | + | + +
+
+ +
+
+
+ + + + + + \ No newline at end of file diff --git "a/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/vue.global.js" "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/vue.global.js" new file mode 100644 index 0000000000000000000000000000000000000000..db18856d98ce912ea0179a180779372023a1d649 --- /dev/null +++ "b/\344\275\234\344\270\232/\345\225\206\345\223\201\351\241\265\344\275\234\344\270\2323/vue.global.js" @@ -0,0 +1,16159 @@ +var Vue = (function (exports) { + 'use strict'; + + /** + * Make a map and return a function for checking if a key + * is in that map. + * IMPORTANT: all calls of this function must be prefixed with + * \/\*#\_\_PURE\_\_\*\/ + * So that rollup can tree-shake them if necessary. + */ + function makeMap(str, expectsLowerCase) { + const map = Object.create(null); + const list = str.split(','); + for (let i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase ? val => !!map[val.toLowerCase()] : val => !!map[val]; + } + + /** + * dev only flag -> name mapping + */ + const PatchFlagNames = { + [1 /* PatchFlags.TEXT */]: `TEXT`, + [2 /* PatchFlags.CLASS */]: `CLASS`, + [4 /* PatchFlags.STYLE */]: `STYLE`, + [8 /* PatchFlags.PROPS */]: `PROPS`, + [16 /* PatchFlags.FULL_PROPS */]: `FULL_PROPS`, + [32 /* PatchFlags.HYDRATE_EVENTS */]: `HYDRATE_EVENTS`, + [64 /* PatchFlags.STABLE_FRAGMENT */]: `STABLE_FRAGMENT`, + [128 /* PatchFlags.KEYED_FRAGMENT */]: `KEYED_FRAGMENT`, + [256 /* PatchFlags.UNKEYED_FRAGMENT */]: `UNKEYED_FRAGMENT`, + [512 /* PatchFlags.NEED_PATCH */]: `NEED_PATCH`, + [1024 /* PatchFlags.DYNAMIC_SLOTS */]: `DYNAMIC_SLOTS`, + [2048 /* PatchFlags.DEV_ROOT_FRAGMENT */]: `DEV_ROOT_FRAGMENT`, + [-1 /* PatchFlags.HOISTED */]: `HOISTED`, + [-2 /* PatchFlags.BAIL */]: `BAIL` + }; + + /** + * Dev only + */ + const slotFlagsText = { + [1 /* SlotFlags.STABLE */]: 'STABLE', + [2 /* SlotFlags.DYNAMIC */]: 'DYNAMIC', + [3 /* SlotFlags.FORWARDED */]: 'FORWARDED' + }; + + const GLOBALS_WHITE_LISTED = 'Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,' + + 'decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,' + + 'Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt'; + const isGloballyWhitelisted = /*#__PURE__*/ makeMap(GLOBALS_WHITE_LISTED); + + const range = 2; + function generateCodeFrame(source, start = 0, end = source.length) { + // Split the content into individual lines but capture the newline sequence + // that separated each line. This is important because the actual sequence is + // needed to properly take into account the full line length for offset + // comparison + let lines = source.split(/(\r?\n)/); + // Separate the lines and newline sequences into separate arrays for easier referencing + const newlineSequences = lines.filter((_, idx) => idx % 2 === 1); + lines = lines.filter((_, idx) => idx % 2 === 0); + let count = 0; + const res = []; + for (let i = 0; i < lines.length; i++) { + count += + lines[i].length + + ((newlineSequences[i] && newlineSequences[i].length) || 0); + if (count >= start) { + for (let j = i - range; j <= i + range || end > count; j++) { + if (j < 0 || j >= lines.length) + continue; + const line = j + 1; + res.push(`${line}${' '.repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`); + const lineLength = lines[j].length; + const newLineSeqLength = (newlineSequences[j] && newlineSequences[j].length) || 0; + if (j === i) { + // push underline + const pad = start - (count - (lineLength + newLineSeqLength)); + const length = Math.max(1, end > count ? lineLength - pad : end - start); + res.push(` | ` + ' '.repeat(pad) + '^'.repeat(length)); + } + else if (j > i) { + if (end > count) { + const length = Math.max(Math.min(end - count, lineLength), 1); + res.push(` | ` + '^'.repeat(length)); + } + count += lineLength + newLineSeqLength; + } + } + break; + } + } + return res.join('\n'); + } + + function normalizeStyle(value) { + if (isArray(value)) { + const res = {}; + for (let i = 0; i < value.length; i++) { + const item = value[i]; + const normalized = isString(item) + ? parseStringStyle(item) + : normalizeStyle(item); + if (normalized) { + for (const key in normalized) { + res[key] = normalized[key]; + } + } + } + return res; + } + else if (isString(value)) { + return value; + } + else if (isObject(value)) { + return value; + } + } + const listDelimiterRE = /;(?![^(]*\))/g; + const propertyDelimiterRE = /:([^]+)/; + const styleCommentRE = /\/\*.*?\*\//gs; + function parseStringStyle(cssText) { + const ret = {}; + cssText + .replace(styleCommentRE, '') + .split(listDelimiterRE) + .forEach(item => { + if (item) { + const tmp = item.split(propertyDelimiterRE); + tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); + } + }); + return ret; + } + function normalizeClass(value) { + let res = ''; + if (isString(value)) { + res = value; + } + else if (isArray(value)) { + for (let i = 0; i < value.length; i++) { + const normalized = normalizeClass(value[i]); + if (normalized) { + res += normalized + ' '; + } + } + } + else if (isObject(value)) { + for (const name in value) { + if (value[name]) { + res += name + ' '; + } + } + } + return res.trim(); + } + function normalizeProps(props) { + if (!props) + return null; + let { class: klass, style } = props; + if (klass && !isString(klass)) { + props.class = normalizeClass(klass); + } + if (style) { + props.style = normalizeStyle(style); + } + return props; + } + + // These tag configs are shared between compiler-dom and runtime-dom, so they + // https://developer.mozilla.org/en-US/docs/Web/HTML/Element + const HTML_TAGS = 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' + + 'header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,' + + 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' + + 'data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,' + + 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' + + 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' + + 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' + + 'option,output,progress,select,textarea,details,dialog,menu,' + + 'summary,template,blockquote,iframe,tfoot'; + // https://developer.mozilla.org/en-US/docs/Web/SVG/Element + const SVG_TAGS = 'svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,' + + 'defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,' + + 'feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,' + + 'feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,' + + 'feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,' + + 'fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,' + + 'foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,' + + 'mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,' + + 'polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,' + + 'text,textPath,title,tspan,unknown,use,view'; + const VOID_TAGS = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr'; + /** + * Compiler only. + * Do NOT use in runtime code paths unless behind `true` flag. + */ + const isHTMLTag = /*#__PURE__*/ makeMap(HTML_TAGS); + /** + * Compiler only. + * Do NOT use in runtime code paths unless behind `true` flag. + */ + const isSVGTag = /*#__PURE__*/ makeMap(SVG_TAGS); + /** + * Compiler only. + * Do NOT use in runtime code paths unless behind `true` flag. + */ + const isVoidTag = /*#__PURE__*/ makeMap(VOID_TAGS); + + /** + * On the client we only need to offer special cases for boolean attributes that + * have different names from their corresponding dom properties: + * - itemscope -> N/A + * - allowfullscreen -> allowFullscreen + * - formnovalidate -> formNoValidate + * - ismap -> isMap + * - nomodule -> noModule + * - novalidate -> noValidate + * - readonly -> readOnly + */ + const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; + const isSpecialBooleanAttr = /*#__PURE__*/ makeMap(specialBooleanAttrs); + /** + * Boolean attributes should be included if the value is truthy or ''. + * e.g. `